From 3e7a86c6ecd332c268e690399a015ab618e87754 Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind@owncloud.com>
Date: Tue, 6 Aug 2013 15:59:06 +0200
Subject: [PATCH 001/248] remove deleted files while scanning

---
 lib/files/cache/scanner.php       |  2 ++
 tests/lib/files/cache/scanner.php | 10 ++++++++++
 2 files changed, 12 insertions(+)

diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
index adecc2bb90..3349245616 100644
--- a/lib/files/cache/scanner.php
+++ b/lib/files/cache/scanner.php
@@ -112,6 +112,8 @@ class Scanner extends BasicEmitter {
 				if (!empty($newData)) {
 					$this->cache->put($file, $newData);
 				}
+			} else {
+				$this->cache->remove($file);
 			}
 			return $data;
 		}
diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php
index 263ceadccc..bb90adce5c 100644
--- a/tests/lib/files/cache/scanner.php
+++ b/tests/lib/files/cache/scanner.php
@@ -166,6 +166,16 @@ class Scanner extends \PHPUnit_Framework_TestCase {
 		$this->assertFalse($this->cache->inCache('folder/bar.txt'));
 	}
 
+	public function testScanRemovedFile(){
+		$this->fillTestFolders();
+
+		$this->scanner->scan('');
+		$this->assertTrue($this->cache->inCache('folder/bar.txt'));
+		$this->storage->unlink('folder/bar.txt');
+		$this->scanner->scanFile('folder/bar.txt');
+		$this->assertFalse($this->cache->inCache('folder/bar.txt'));
+	}
+
 	function setUp() {
 		$this->storage = new \OC\Files\Storage\Temporary(array());
 		$this->scanner = new \OC\Files\Cache\Scanner($this->storage);
-- 
GitLab


From e1927d5bee11b561a293a9488bd27d90c2c043e6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Mon, 12 Aug 2013 12:33:22 +0200
Subject: [PATCH 002/248] fix whitespace, check selected files before starting
 upload

---
 apps/files/ajax/upload.php   |  39 +-
 apps/files/css/files.css     |  41 ++
 apps/files/js/file-upload.js | 710 ++++++++++++++++++++---------------
 apps/files/js/filelist.js    |   2 +-
 core/js/jquery.ocdialog.js   |   3 +
 core/js/oc-dialogs.js        | 134 ++++++-
 6 files changed, 614 insertions(+), 315 deletions(-)

diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index dde5d3c50a..8d183bd1f9 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -98,23 +98,46 @@ $result = array();
 if (strpos($dir, '..') === false) {
 	$fileCount = count($files['name']);
 	for ($i = 0; $i < $fileCount; $i++) {
-		$target = OCP\Files::buildNotExistingFileName(stripslashes($dir), $files['name'][$i]);
 		// $path needs to be normalized - this failed within drag'n'drop upload to a sub-folder
-		$target = \OC\Files\Filesystem::normalizePath($target);
-		if (is_uploaded_file($files['tmp_name'][$i]) and \OC\Files\Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) {
+		if (isset($_POST['new_name'])) {
+			$newName = $_POST['new_name'];
+		} else {
+			$newName = $files['name'][$i];
+		}
+		if (isset($_POST['replace']) && $_POST['replace'] == true) {
+			$replace = true;
+		} else {
+			$replace = false;
+		}
+		$target = \OC\Files\Filesystem::normalizePath(stripslashes($dir).$newName);
+		if ( ! $replace && \OC\Files\Filesystem::file_exists($target)) {
 			$meta = \OC\Files\Filesystem::getFileInfo($target);
-			// updated max file size after upload
-			$storageStats = \OCA\files\lib\Helper::buildFileStorageStatistics($dir);
-
-			$result[] = array('status' => 'success',
+			$result[] = array('status' => 'existserror',
 				'mime' => $meta['mimetype'],
 				'size' => $meta['size'],
 				'id' => $meta['fileid'],
 				'name' => basename($target),
-				'originalname' => $files['name'][$i],
+				'originalname' => $newName,
 				'uploadMaxFilesize' => $maxUploadFileSize,
 				'maxHumanFilesize' => $maxHumanFileSize
 			);
+		} else {
+			//$target = OCP\Files::buildNotExistingFileName(stripslashes($dir), $files['name'][$i]);
+			if (is_uploaded_file($files['tmp_name'][$i]) and \OC\Files\Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) {
+				$meta = \OC\Files\Filesystem::getFileInfo($target);
+				// updated max file size after upload
+				$storageStats = \OCA\files\lib\Helper::buildFileStorageStatistics($dir);
+
+				$result[] = array('status' => 'success',
+					'mime' => $meta['mimetype'],
+					'size' => $meta['size'],
+					'id' => $meta['fileid'],
+					'name' => basename($target),
+					'originalname' => $newName,
+					'uploadMaxFilesize' => $maxUploadFileSize,
+					'maxHumanFilesize' => $maxHumanFileSize
+				);
+			}
 		}
 	}
 	OCP\JSON::encodedPrint($result);
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index 86fb0dc604..acee8471af 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -189,3 +189,44 @@ table.dragshadow td.size {
 	text-align: center;
 	margin-left: -200px;
 }
+
+.oc-dialog .fileexists .original .icon {
+	width: 64px;
+	height: 64px;
+	margin: 5px 5px 5px 0px;
+	background-repeat: no-repeat;
+	background-size: 64px 64px;
+	float: left;
+}
+
+.oc-dialog .fileexists .replacement {
+	margin-top: 20px;
+}
+
+.oc-dialog .fileexists .replacement .icon {
+	width: 64px;
+	height: 64px;
+	margin: 5px 5px 5px 0px;
+	background-repeat: no-repeat;
+	background-size: 64px 64px;
+	float: left;
+	clear: both;
+}
+
+.oc-dialog .fileexists label[for="new-name"] {
+	margin-top: 20px;
+	display: block;
+}
+.oc-dialog .fileexists h3 {
+	font-weight: bold;
+}
+
+
+.oc-dialog .oc-dialog-buttonrow {
+	width:100%;
+	text-align:right;
+}
+
+.oc-dialog .oc-dialog-buttonrow .cancel {
+	float:left;
+}
\ No newline at end of file
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 942a07dfcc..71034a0b3f 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -1,343 +1,445 @@
-$(document).ready(function() {
-
-  file_upload_param = {
-	dropZone: $('#content'), // restrict dropZone to content div
-	//singleFileUploads is on by default, so the data.files array will always have length 1
-	add: function(e, data) {
-
-	  if(data.files[0].type === '' && data.files[0].size == 4096)
-	  {
-		data.textStatus = 'dirorzero';
-		data.errorThrown = t('files','Unable to upload your file as it is a directory or has 0 bytes');
-		var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
-		fu._trigger('fail', e, data);
-		return true; //don't upload this file but go on with next in queue
-	  }
-
-	  var totalSize=0;
-	  $.each(data.originalFiles, function(i,file){
-		totalSize+=file.size;
-	  });
-
-	  if(totalSize>$('#max_upload').val()){
-		data.textStatus = 'notenoughspace';
-		data.errorThrown = t('files','Not enough space available');
-		var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
-		fu._trigger('fail', e, data);
-		return false; //don't upload anything
-	  }
-
-	  // start the actual file upload
-	  var jqXHR = data.submit();
+OC.upload = {
+	_isProcessing:false,
+	isProcessing:function(){
+		return this._isProcessing;
+	},
+	_uploadQueue:[],
+	addUpload:function(data){
+		this._uploadQueue.push(data);
 
-	  // remember jqXHR to show warning to user when he navigates away but an upload is still in progress
-	  if (typeof data.context !== 'undefined' && data.context.data('type') === 'dir') {
-		var dirName = data.context.data('file');
-		if(typeof uploadingFiles[dirName] === 'undefined') {
-	  uploadingFiles[dirName] = {};
+		if ( ! OC.upload.isProcessing() ) {
+			OC.upload.startUpload();
 		}
-		uploadingFiles[dirName][data.files[0].name] = jqXHR;
-	  } else {
-		uploadingFiles[data.files[0].name] = jqXHR;
-	  }
-
-	  //show cancel button
-	  if($('html.lte9').length === 0 && data.dataType !== 'iframe') {
-		$('#uploadprogresswrapper input.stop').show();
-	  }
 	},
-	/**
-	 * called after the first add, does NOT have the data param
-	 * @param e
-	 */
-	start: function(e) {
-	  //IE < 10 does not fire the necessary events for the progress bar.
-	  if($('html.lte9').length > 0) {
-		return;
-	  }
-	  $('#uploadprogressbar').progressbar({value:0});
-	  $('#uploadprogressbar').fadeIn();
+	startUpload:function(){
+		if (this._uploadQueue.length > 0) {
+			this._isProcessing = true;
+			this.nextUpload();
+			return true;
+		} else {
+			return false;
+		}
 	},
-	fail: function(e, data) {
-	  if (typeof data.textStatus !== 'undefined' && data.textStatus !== 'success' ) {
-		if (data.textStatus === 'abort') {
-	  $('#notification').text(t('files', 'Upload cancelled.'));
+	nextUpload:function(){
+		if (this._uploadQueue.length > 0) {
+			var data = this._uploadQueue.pop();
+			var jqXHR = data.submit();
+
+			// remember jqXHR to show warning to user when he navigates away but an upload is still in progress
+			if (typeof data.context !== 'undefined' && data.context.data('type') === 'dir') {
+				var dirName = data.context.data('file');
+				if(typeof uploadingFiles[dirName] === 'undefined') {
+					uploadingFiles[dirName] = {};
+				}
+				uploadingFiles[dirName][data.files[0].name] = jqXHR;
+			} else {
+				uploadingFiles[data.files[0].name] = jqXHR;
+			}
 		} else {
-	  // HTTP connection problem
-	  $('#notification').text(data.errorThrown);
+			//queue is empty, we are done
+			this._isProcessing = false;
 		}
-		$('#notification').fadeIn();
-		//hide notification after 5 sec
-		setTimeout(function() {
-	  $('#notification').fadeOut();
-		}, 5000);
-	  }
-	  delete uploadingFiles[data.files[0].name];
 	},
-	progress: function(e, data) {
-	  // TODO: show nice progress bar in file row
+	onCancel:function(data){
+		//TODO cancel all uploads
+		Files.cancelUploads();
+		this._uploadQueue = [];
+		this._isProcessing = false;
+	},
+	onSkip:function(data){
+		this.nextUpload();
 	},
-	progressall: function(e, data) {
-	  //IE < 10 does not fire the necessary events for the progress bar.
-	  if($('html.lte9').length > 0) {
-		return;
-	  }
-	  var progress = (data.loaded/data.total)*100;
-	  $('#uploadprogressbar').progressbar('value',progress);
+	onReplace:function(data){
+		//TODO overwrite file
+		data.data.append('replace', true);
+		data.submit();
 	},
-	/**
-	 * called for every successful upload
-	 * @param e
-	 * @param data
-	 */
-	done:function(e, data) {
-	  // handle different responses (json or body from iframe for ie)
-	  var response;
-	  if (typeof data.result === 'string') {
-		response = data.result;
-	  } else {
-		//fetch response from iframe
-		response = data.result[0].body.innerText;
-	  }
-	  var result=$.parseJSON(response);
+	onRename:function(data, newName){
+		//TODO rename file in filelist, stop spinner
+		data.data.append('new_name', newName);
+		data.submit();
+	}
+};
 
-	  if(typeof result[0] !== 'undefined' && result[0].status === 'success') {
-		var file = result[0];
-	  } else {
-		data.textStatus = 'servererror';
-		data.errorThrown = t('files', result.data.message);
-		var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
-		fu._trigger('fail', e, data);
-	  }
+$(document).ready(function() {
 
-	  var filename = result[0].originalname;
+	var file_upload_param = {
+		dropZone: $('#content'), // restrict dropZone to content div
+		//singleFileUploads is on by default, so the data.files array will always have length 1
+		add: function(e, data) {
+			var that = $(this);
 
-	  // delete jqXHR reference
-	  if (typeof data.context !== 'undefined' && data.context.data('type') === 'dir') {
-		var dirName = data.context.data('file');
-		delete uploadingFiles[dirName][filename];
-		if ($.assocArraySize(uploadingFiles[dirName]) == 0) {
-	  delete uploadingFiles[dirName];
-		}
-	  } else {
-		delete uploadingFiles[filename];
-	  }
+			if (typeof data.originalFiles.checked === 'undefined') {
+				
+				var totalSize = 0;
+				$.each(data.originalFiles, function(i, file) {
+					totalSize += file.size;
 
-	},
-	/**
-	 * called after last upload
-	 * @param e
-	 * @param data
-	 */
-	stop: function(e, data) {
-	  if(data.dataType !== 'iframe') {
-		$('#uploadprogresswrapper input.stop').hide();
-	  }
+					if (file.type === '' && file.size === 4096) {
+						data.textStatus = 'dirorzero';
+						data.errorThrown = t('files', 'Unable to upload {filename} as it is a directory or has 0 bytes',
+							{filename: file.name}
+						);
+						return false;
+					}
+				});
 
-	  //IE < 10 does not fire the necessary events for the progress bar.
-	  if($('html.lte9').length > 0) {
-		return;
-	  }
+				if (totalSize > $('#max_upload').val()) {
+					data.textStatus = 'notenoughspace';
+					data.errorThrown = t('files', 'Not enough space available');
+				}
 
-	  $('#uploadprogressbar').progressbar('value',100);
-	  $('#uploadprogressbar').fadeOut();
-	}
-  }
-  var file_upload_handler = function() {
-	$('#file_upload_start').fileupload(file_upload_param);
-  };
+				if (data.errorThrown) {
+					//don't upload anything
+					var fu = that.data('blueimp-fileupload') || that.data('fileupload');
+					fu._trigger('fail', e, data);
+					return false;
+				}
+				
+				data.originalFiles.checked = true; // this will skip the checks on subsequent adds
+			}
+			
+			//TODO check filename already exists
+			/*
+			if ($('tr[data-file="'+data.files[0].name+'"][data-id]').length > 0) {
+				data.textStatus = 'alreadyexists';
+				data.errorThrown = t('files', '{filename} already exists',
+					{filename: data.files[0].name}
+				);
+				//TODO show "file already exists" dialog
+				var fu = that.data('blueimp-fileupload') || that.data('fileupload');
+				fu._trigger('fail', e, data);
+				return false;
+			}
+			*/
 
+			//add files to queue
+			OC.upload.addUpload(data);
+			
+			//TODO refactor away:
+			//show cancel button
+			if($('html.lte9').length === 0 && data.dataType !== 'iframe') {
+				$('#uploadprogresswrapper input.stop').show();
+			}
+			return true;
+		},
+		/**
+		 * called after the first add, does NOT have the data param
+		 * @param e
+		 */
+		start: function(e) {
+			//IE < 10 does not fire the necessary events for the progress bar.
+			if($('html.lte9').length > 0) {
+				return true;
+			}
+			$('#uploadprogressbar').progressbar({value:0});
+			$('#uploadprogressbar').fadeIn();
+		},
+		fail: function(e, data) {
+			if (typeof data.textStatus !== 'undefined' && data.textStatus !== 'success' ) {
+				if (data.textStatus === 'abort') {
+					$('#notification').text(t('files', 'Upload cancelled.'));
+				} else {
+					// HTTP connection problem
+					$('#notification').text(data.errorThrown);
+				}
+				$('#notification').fadeIn();
+				//hide notification after 5 sec
+				setTimeout(function() {
+					$('#notification').fadeOut();
+				}, 5000);
+			}
+			delete uploadingFiles[data.files[0].name];
+		},
+		progress: function(e, data) {
+			// TODO: show nice progress bar in file row
+		},
+		progressall: function(e, data) {
+			//IE < 10 does not fire the necessary events for the progress bar.
+			if($('html.lte9').length > 0) {
+				return;
+			}
+			var progress = (data.loaded/data.total)*100;
+			$('#uploadprogressbar').progressbar('value', progress);
+		},
+		/**
+		 * called for every successful upload
+		 * @param e
+		 * @param data
+		 */
+		done:function(e, data) {
+			// handle different responses (json or body from iframe for ie)
+			var response;
+			if (typeof data.result === 'string') {
+				response = data.result;
+			} else {
+				//fetch response from iframe
+				response = data.result[0].body.innerText;
+			}
+			var result=$.parseJSON(response);
 
+			if(typeof result[0] !== 'undefined' && result[0].status === 'success') {
+				OC.upload.nextUpload();
+			} else {
+				if (result[0].status === 'existserror') {
+					//TODO open dialog and retry with other name?
+					// get jqXHR reference
+					if (typeof data.context !== 'undefined' && data.context.data('type') === 'dir') {
+						var dirName = data.context.data('file');
+						var jqXHR = uploadingFiles[dirName][filename];
+					} else {
+						var jqXHR = uploadingFiles[filename];
+					}
+					//filenames can only be changed on the server side
+					//TODO show "file already exists" dialog
+					//options: abort | skip | replace / rename
+							//TODO reset all-files flag? when done with selection?
+					var original = result[0];
+					var replacement = data.files[0];
+					OC.dialogs.fileexists(data, original, replacement, OC.upload);
+				} else {
+					data.textStatus = 'servererror';
+					data.errorThrown = t('files', result.data.message);
+					var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
+					fu._trigger('fail', e, data);
+				}
+			}
 
-  if ( document.getElementById('data-upload-form') ) {
-	$(file_upload_handler);
-  }
-  $.assocArraySize = function(obj) {
-	// http://stackoverflow.com/a/6700/11236
-	var size = 0, key;
-	for (key in obj) {
-	  if (obj.hasOwnProperty(key)) size++;
-	}
-	return size;
-  };
+			var filename = result[0].originalname;
 
-  // warn user not to leave the page while upload is in progress
-  $(window).bind('beforeunload', function(e) {
-	if ($.assocArraySize(uploadingFiles) > 0)
-	  return t('files','File upload is in progress. Leaving the page now will cancel the upload.');
-  });
+			// delete jqXHR reference
+			if (typeof data.context !== 'undefined' && data.context.data('type') === 'dir') {
+				var dirName = data.context.data('file');
+				delete uploadingFiles[dirName][filename];
+				if ($.assocArraySize(uploadingFiles[dirName]) === 0) {
+					delete uploadingFiles[dirName];
+				}
+			} else {
+				delete uploadingFiles[filename];
+			}
+
+		},
+		/**
+		 * called after last upload
+		 * @param e
+		 * @param data
+		 */
+		stop: function(e, data) {
+			if(data.dataType !== 'iframe') {
+				$('#uploadprogresswrapper input.stop').hide();
+			}
 
-  //add multiply file upload attribute to all browsers except konqueror (which crashes when it's used)
-  if(navigator.userAgent.search(/konqueror/i)==-1){
-	$('#file_upload_start').attr('multiple','multiple')
-  }
+			//IE < 10 does not fire the necessary events for the progress bar.
+			if($('html.lte9').length > 0) {
+				return;
+			}
 
-  //if the breadcrumb is to long, start by replacing foldernames with '...' except for the current folder
-  var crumb=$('div.crumb').first();
-  while($('div.controls').height()>40 && crumb.next('div.crumb').length>0){
-	crumb.children('a').text('...');
-	crumb=crumb.next('div.crumb');
-  }
-  //if that isn't enough, start removing items from the breacrumb except for the current folder and it's parent
-  var crumb=$('div.crumb').first();
-  var next=crumb.next('div.crumb');
-  while($('div.controls').height()>40 && next.next('div.crumb').length>0){
-	crumb.remove();
-	crumb=next;
-	next=crumb.next('div.crumb');
-  }
-  //still not enough, start shorting down the current folder name
-  var crumb=$('div.crumb>a').last();
-  while($('div.controls').height()>40 && crumb.text().length>6){
-	var text=crumb.text()
-	text=text.substr(0,text.length-6)+'...';
-	crumb.text(text);
-  }
+			$('#uploadprogressbar').progressbar('value', 100);
+			$('#uploadprogressbar').fadeOut();
+		}
+	};
+	
+	var file_upload_handler = function() {
+		$('#file_upload_start').fileupload(file_upload_param);
+	};
 
-  $(document).click(function(){
-	$('#new>ul').hide();
-	$('#new').removeClass('active');
-	$('#new li').each(function(i,element){
-	  if($(element).children('p').length==0){
-		$(element).children('form').remove();
-		$(element).append('<p>'+$(element).data('text')+'</p>');
-	  }
+	if ( document.getElementById('data-upload-form') ) {
+		$(file_upload_handler);
+	}
+	$.assocArraySize = function(obj) {
+		// http://stackoverflow.com/a/6700/11236
+		var size = 0, key;
+		for (key in obj) {
+			if (obj.hasOwnProperty(key)) {
+				size++;
+			}
+		}
+		return size;
+	};
+
+	// warn user not to leave the page while upload is in progress
+	$(window).bind('beforeunload', function(e) {
+		if ($.assocArraySize(uploadingFiles) > 0) {
+			return t('files', 'File upload is in progress. Leaving the page now will cancel the upload.');
+		}
 	});
-  });
-  $('#new li').click(function(){
-	if($(this).children('p').length==0){
-	  return;
+
+	//add multiply file upload attribute to all browsers except konqueror (which crashes when it's used)
+	if(navigator.userAgent.search(/konqueror/i) === -1) {
+		$('#file_upload_start').attr('multiple', 'multiple');
+	}
+
+	//if the breadcrumb is to long, start by replacing foldernames with '...' except for the current folder
+	var crumb = $('div.crumb').first();
+	while($('div.controls').height() > 40 && crumb.next('div.crumb').length > 0) {
+		crumb.children('a').text('...');
+		crumb = crumb.next('div.crumb');
+	}
+	//if that isn't enough, start removing items from the breacrumb except for the current folder and it's parent
+	var crumb = $('div.crumb').first();
+	var next = crumb.next('div.crumb');
+	while($('div.controls').height() > 40 && next.next('div.crumb').length > 0) {
+		crumb.remove();
+		crumb = next;
+		next = crumb.next('div.crumb');
 	}
+	//still not enough, start shorting down the current folder name
+	var crumb = $('div.crumb>a').last();
+	while($('div.controls').height() > 40 && crumb.text().length > 6) {
+		var text = crumb.text();
+		text = text.substr(0, text.length-6)+'...';
+		crumb.text(text);
+	}
+
+	$(document).click(function() {
+		$('#new>ul').hide();
+		$('#new').removeClass('active');
+		$('#new li').each(function(i, element) {
+			if($(element).children('p').length === 0) {
+				$(element).children('form').remove();
+				$(element).append('<p>' + $(element).data('text') + '</p>');
+			}
+		});
+	});
+	$('#new li').click(function() {
+		if($(this).children('p').length === 0) {
+			return;
+		}
 
-	$('#new li').each(function(i,element){
-	  if($(element).children('p').length==0){
-		$(element).children('form').remove();
-		$(element).append('<p>'+$(element).data('text')+'</p>');
-	  }
+	$('#new li').each(function(i, element) {
+		if($(element).children('p').length === 0) {
+			$(element).children('form').remove();
+			$(element).append('<p>' + $(element).data('text') + '</p>');
+		}
 	});
 
-	var type=$(this).data('type');
-	var text=$(this).children('p').text();
-	$(this).data('text',text);
+	var type = $(this).data('type');
+	var text = $(this).children('p').text();
+	$(this).data('text', text);
 	$(this).children('p').remove();
-	var form=$('<form></form>');
-	var input=$('<input>');
+	var form = $('<form></form>');
+	var input = $('<input>');
 	form.append(input);
 	$(this).append(form);
 	input.focus();
-	form.submit(function(event){
-	  event.stopPropagation();
-	  event.preventDefault();
-	  var newname=input.val();
-	  if(type == 'web' && newname.length == 0) {
-		OC.Notification.show(t('files', 'URL cannot be empty.'));
-		return false;
-	  } else if (type != 'web' && !Files.isFileNameValid(newname)) {
-		return false;
-	  } else if( type == 'folder' && $('#dir').val() == '/' && newname == 'Shared') {
-		OC.Notification.show(t('files','Invalid folder name. Usage of \'Shared\' is reserved by ownCloud'));
-		return false;
-	  }
-	  if (FileList.lastAction) {
-		FileList.lastAction();
-	  }
-	  var name = getUniqueName(newname);
-	  if (newname != name) {
-		FileList.checkName(name, newname, true);
-		var hidden = true;
-	  } else {
-		var hidden = false;
-	  }
-	  switch(type){
-	  case 'file':
-		$.post(
-		  OC.filePath('files','ajax','newfile.php'),
-		  {dir:$('#dir').val(),filename:name},
-		  function(result){
-			if (result.status == 'success') {
-			  var date=new Date();
-			  FileList.addFile(name,0,date,false,hidden);
-			  var tr=$('tr').filterAttr('data-file',name);
-			  tr.attr('data-mime',result.data.mime);
-			  tr.attr('data-id', result.data.id);
-			  getMimeIcon(result.data.mime,function(path){
-			tr.find('td.filename').attr('style','background-image:url('+path+')');
-			  });
-			} else {
-			  OC.dialogs.alert(result.data.message, t('core', 'Error'));
-			}
-		  }
-		);
-		break;
-	  case 'folder':
-		$.post(
-		  OC.filePath('files','ajax','newfolder.php'),
-		  {dir:$('#dir').val(),foldername:name},
-		  function(result){
-			if (result.status == 'success') {
-			  var date=new Date();
-			  FileList.addDir(name,0,date,hidden);
-			  var tr=$('tr').filterAttr('data-file',name);
-			  tr.attr('data-id', result.data.id);
-			} else {
-			  OC.dialogs.alert(result.data.message, t('core', 'Error'));
-			}
-		  }
-		);
-		break;
-	  case 'web':
-		if(name.substr(0,8)!='https://' && name.substr(0,7)!='http://'){
-		  name='http://'+name;
-		}
-		var localName=name;
-		if(localName.substr(localName.length-1,1)=='/'){//strip /
-		  localName=localName.substr(0,localName.length-1)
+	form.submit(function(event) {
+		event.stopPropagation();
+		event.preventDefault();
+		var newname=input.val();
+		if(type === 'web' && newname.length === 0) {
+			OC.Notification.show(t('files', 'URL cannot be empty.'));
+			return false;
+		} else if (type !== 'web' && !Files.isFileNameValid(newname)) {
+			return false;
+		} else if( type === 'folder' && $('#dir').val() === '/' && newname === 'Shared') {
+			OC.Notification.show(t('files', 'Invalid folder name. Usage of \'Shared\' is reserved by ownCloud'));
+			return false;
 		}
-		if(localName.indexOf('/')){//use last part of url
-		  localName=localName.split('/').pop();
-		} else { //or the domain
-		  localName=(localName.match(/:\/\/(.[^\/]+)/)[1]).replace('www.','');
+		if (FileList.lastAction) {
+			FileList.lastAction();
 		}
-		localName = getUniqueName(localName);
-		//IE < 10 does not fire the necessary events for the progress bar.
-		if($('html.lte9').length > 0) {
+		var name = getUniqueName(newname);
+		if (newname !== name) {
+			FileList.checkName(name, newname, true);
+			var hidden = true;
 		} else {
-		  $('#uploadprogressbar').progressbar({value:0});
-		  $('#uploadprogressbar').fadeIn();
+			var hidden = false;
 		}
+		switch(type) {
+			case 'file':
+				$.post(
+					OC.filePath('files', 'ajax', 'newfile.php'),
+					{dir:$('#dir').val(), filename:name},
+					function(result) {
+						if (result.status === 'success') {
+							var date = new Date();
+							FileList.addFile(name, 0, date, false, hidden);
+							var tr = $('tr').filterAttr('data-file', name);
+							tr.attr('data-mime', result.data.mime);
+							tr.attr('data-id', result.data.id);
+							getMimeIcon(result.data.mime, function(path) {
+						tr.find('td.filename').attr('style', 'background-image:url('+path+')');
+							});
+						} else {
+							OC.dialogs.alert(result.data.message, t('core', 'Error'));
+						}
+					}
+				);
+				break;
+			case 'folder':
+				$.post(
+					OC.filePath('files', 'ajax', 'newfolder.php'),
+					{dir:$('#dir').val(), foldername:name},
+					function(result) {
+						if (result.status === 'success') {
+							var date = new Date();
+							FileList.addDir(name, 0, date, hidden);
+							var tr = $('tr').filterAttr('data-file', name);
+							tr.attr('data-id', result.data.id);
+						} else {
+							OC.dialogs.alert(result.data.message, t('core', 'Error'));
+						}
+					}
+				);
+				break;
+			case 'web':
+				if (name.substr(0, 8) !== 'https://' && name.substr(0, 7) !== 'http://') {
+					name = 'http://' + name;
+				}
+				var localName = name;
+				if(localName.substr(localName.length-1, 1) === '/') { //strip /
+					localName = localName.substr(0, localName.length-1);
+				}
+				if (localName.indexOf('/')) { //use last part of url
+					localName = localName.split('/').pop();
+				} else { //or the domain
+					localName = (localName.match(/:\/\/(.[^\/]+)/)[1]).replace('www.', '');
+				}
+				localName = getUniqueName(localName);
+				//IE < 10 does not fire the necessary events for the progress bar.
+				if ($('html.lte9').length > 0) {
+				} else {
+					$('#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){
-		  //IE < 10 does not fire the necessary events for the progress bar.
-		  if($('html.lte9').length > 0) {
-		  } else {
-			$('#uploadprogressbar').progressbar('value',progress);
-		  }
-		});
-		eventSource.listen('success',function(data){
-		  var mime=data.mime;
-		  var size=data.size;
-		  var id=data.id;
-		  $('#uploadprogressbar').fadeOut();
-		  var date=new Date();
-		  FileList.addFile(localName,size,date,false,hidden);
-		  var tr=$('tr').filterAttr('data-file',localName);
-		  tr.data('mime',mime).data('id',id);
-		  tr.attr('data-id', id);
-		  getMimeIcon(mime,function(path){
-			tr.find('td.filename').attr('style','background-image:url('+path+')');
-		  });
-		});
-		eventSource.listen('error',function(error){
-		  $('#uploadprogressbar').fadeOut();
-		  alert(error);
+				var eventSource = new OC.EventSource(
+					OC.filePath('files', 'ajax', 'newfile.php'),
+					{dir:$('#dir').val(), source:name, filename:localName}
+				);
+				eventSource.listen('progress', function(progress) {
+					//IE < 10 does not fire the necessary events for the progress bar.
+					if($('html.lte9').length > 0) {
+					} else {
+						$('#uploadprogressbar').progressbar('value', progress);
+					}
+				});
+				eventSource.listen('success', function(data) {
+					var mime = data.mime;
+					var size = data.size;
+					var id = data.id;
+					$('#uploadprogressbar').fadeOut();
+					var date = new Date();
+					FileList.addFile(localName, size, date, false, hidden);
+					var tr = $('tr').filterAttr('data-file', localName);
+					tr.data('mime', mime).data('id', id);
+					tr.attr('data-id', id);
+					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 = form.parent();
+			form.remove();
+			li.append('<p>' + li.data('text') + '</p>');
+			$('#new>a').click();
 		});
-		break;
-	  }
-	  var li=form.parent();
-	  form.remove();
-	  li.append('<p>'+li.data('text')+'</p>');
-	  $('#new>a').click();
+		
 	});
-  });
+	
 });
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index b858e2580e..bcc77e68ce 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -308,7 +308,7 @@ var FileList={
 			html.attr('data-oldName', oldName);
 			html.attr('data-newName', newName);
 			html.attr('data-isNewFile', isNewFile);
-            OC.Notification.showHtml(html);
+			OC.Notification.showHtml(html);
 			return true;
 		} else {
 			return false;
diff --git a/core/js/jquery.ocdialog.js b/core/js/jquery.ocdialog.js
index 7413927e3b..52ff5633f9 100644
--- a/core/js/jquery.ocdialog.js
+++ b/core/js/jquery.ocdialog.js
@@ -101,6 +101,9 @@
 					}
 					$.each(value, function(idx, val) {
 						var $button = $('<button>').text(val.text);
+						if (val.classes) {
+							$button.addClass(val.classes);
+						}
 						if(val.defaultButton) {
 							$button.addClass('primary');
 							self.$defaultButton = $button;
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index f4bc174b5e..cf77f5018a 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -197,7 +197,121 @@ var OCdialogs = {
 			OCdialogs.dialogs_counter++;
 		})
 		.fail(function() {
-			alert(t('core', 'Error loading file picker template'));
+			alert(t('core', 'Error loading message template'));
+		});
+	},
+	/**
+	 * Displays file exists dialog
+	 * @param {object} original a file with name, size and mtime
+	 * @param {object} replacement a file with name, size and mtime
+	 * @param {object} controller a controller with onCancel, onSkip, onReplace and onRename methods
+	*/
+	fileexists:function(data, original, replacement, controller) {
+		if (typeof controller !== 'object') {
+			controller = {};
+		}
+		var self = this;
+		$.when(this._getFileExistsTemplate()).then(function($tmpl) {
+			var dialog_name = 'oc-dialog-fileexists-' + OCdialogs.dialogs_counter + '-content';
+			var dialog_id = '#' + dialog_name;
+			var title = t('files','Replace »{filename}«?',{filename: original.name});
+			var $dlg = $tmpl.octemplate({
+				dialog_name: dialog_name,
+				title: title,
+				type: 'fileexists',
+				
+				why: t('files','Another file with the same name already exists in "{dir}".',{dir:'somedir'}),
+				what: t('files','Replacing it will overwrite it\'s contents.'),
+				original_heading: t('files','Original file'),
+				original_size: t('files','Size: {size}',{size: original.size}),
+				original_mtime: t('files','Last changed: {mtime}',{mtime: original.mtime}),
+
+				replacement_heading: t('files','Replace with'),
+				replacement_size: t('files','Size: {size}',{size: replacement.size}),
+				replacement_mtime: t('files','Last changed: {mtime}',{mtime: replacement.mtime}),
+
+				new_name_label: t('files','Choose a new name for the target.'),
+				all_files_label: t('files','Use this action for all files.')
+			});
+			$('body').append($dlg);
+			
+			$(dialog_id + ' .original .icon').css('background-image','url('+OC.imagePath('core', 'filetypes/file.png')+')');
+			$(dialog_id + ' .replacement .icon').css('background-image','url('+OC.imagePath('core', 'filetypes/file.png')+')');
+			$(dialog_id + ' #new-name').val(original.name);
+			
+			
+			$(dialog_id + ' #new-name').on('keyup', function(e){
+				if ($(dialog_id + ' #new-name').val() === original.name) {
+					
+					$(dialog_id + ' + div .rename').removeClass('primary').hide();
+					$(dialog_id + ' + div .replace').addClass('primary').show();
+				} else {
+					$(dialog_id + ' + div .rename').addClass('primary').show();
+					$(dialog_id + ' + div .replace').removeClass('primary').hide();
+				}
+			});
+
+			buttonlist = [{
+					text: t('core', 'Cancel'),
+					classes: 'cancel',
+					click: function(){
+						if ( typeof controller.onCancel !== 'undefined') {
+							controller.onCancel(data);
+						}
+						$(dialog_id).ocdialog('close');
+					}
+				},
+				{
+					text: t('core', 'Skip'),
+					classes: 'skip',
+					click: function(){
+						if ( typeof controller.onSkip !== 'undefined') {
+							controller.onSkip(data);
+						}
+						$(dialog_id).ocdialog('close');
+					}
+				},
+				{
+					text: t('core', 'Replace'),
+					classes: 'replace',
+					click: function(){
+						if ( typeof controller.onReplace !== 'undefined') {
+							controller.onReplace(data);
+						}
+						$(dialog_id).ocdialog('close');
+					},
+					defaultButton: true
+				},
+				{
+					text: t('core', 'Rename'),
+					classes: 'rename',
+					click: function(){
+						if ( typeof controller.onRename !== 'undefined') {
+							controller.onRename(data, $(dialog_id + ' #new-name').val());
+						}
+						$(dialog_id).ocdialog('close');
+					}
+				}];
+
+			$(dialog_id).ocdialog({
+				closeOnEscape: true,
+				modal: true,
+				buttons: buttonlist,
+				close: function(event, ui) {
+					try {
+						$(this).ocdialog('destroy').remove();
+					} catch(e) {
+						alert (e);
+					}
+					self.$ = null;
+				}
+			});
+			OCdialogs.dialogs_counter++;
+			
+			$(dialog_id + ' + div .rename').hide();
+		})
+		.fail(function() {
+			alert(t('core', 'Error loading file exists template'));
 		});
 	},
 	_getFilePickerTemplate: function() {
@@ -233,6 +347,22 @@ var OCdialogs = {
 		}
 		return defer.promise();
 	},
+	_getFileExistsTemplate: function () {
+		var defer = $.Deferred();
+		if (!this.$fileexistsTemplate) {
+			var self = this;
+			$.get(OC.filePath('files', 'templates', 'fileexists.html'), function (tmpl) {
+				self.$fileexistsTemplate = $(tmpl);
+				defer.resolve(self.$fileexistsTemplate);
+			})
+			.fail(function () {
+				defer.reject();
+			});
+		} else {
+			defer.resolve(this.$fileexistsTemplate);
+		}
+		return defer.promise();
+	},
 	_getFileList: function(dir, mimeType) {
 		return $.getJSON(
 			OC.filePath('files', 'ajax', 'rawlist.php'),
@@ -287,7 +417,7 @@ var OCdialogs = {
 	*/
 	_fillSlug: function() {
 		this.$dirTree.empty();
-		var self = this
+		var self = this;
 		var path = this.$filePicker.data('path');
 		var $template = $('<span data-dir="{dir}">{name}</span>');
 		if(path) {
-- 
GitLab


From 9da49264ea6edbad13455a3e66d7f369f2e8448f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Wed, 14 Aug 2013 17:49:45 +0200
Subject: [PATCH 003/248] change filelist ui updates

---
 apps/files/js/file-upload.js |  27 +++++++++
 apps/files/js/filelist.js    | 106 ++++++++++++++++++-----------------
 core/js/jquery.ocdialog.js   |   9 ++-
 core/js/oc-dialogs.js        |   9 +--
 4 files changed, 88 insertions(+), 63 deletions(-)

diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 71034a0b3f..bd9757b5ff 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -1,3 +1,30 @@
+/**
+ * 
+ * when versioning app is active -> always overwrite
+ * 
+ * fileupload scenario: empty folder & d&d 20 files
+ *		queue the 20 files
+ *		check list of files for duplicates -> empty
+ *		start uploading the queue (show progress dialog?)
+ *		- no duplicates -> all good, add files to list
+ *		- server reports duplicate -> show skip, replace or rename dialog (for individual files)
+ *
+ * fileupload scenario: files uploaded & d&d 20 files again
+ *		queue the 20 files
+ *		check list of files for duplicates -> find n duplicates ->
+ *			show skip, replace or rename dialog as general option
+ *				- show list of differences with preview (win 8)
+ *			remember action for each file
+ *		start uploading the queue (show progress dialog?)
+ *		- no duplicates -> all good, add files to list
+ *		- server reports duplicate -> use remembered action
+ *		
+ * dialoge:
+ *	-> skip, replace, choose (or abort) ()
+ *	-> choose left or right (with skip) (when only one file in list also show rename option and remember for all option)
+ */
+
+
 OC.upload = {
 	_isProcessing:false,
 	isProcessing:function(){
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index bcc77e68ce..f4863837ce 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -23,7 +23,7 @@ var FileList={
 			"href": linktarget
 		});
 		//split extension from filename for non dirs
-		if (type != 'dir' && name.indexOf('.')!=-1) {
+		if (type !== 'dir' && name.indexOf('.')!==-1) {
 			basename=name.substr(0,name.lastIndexOf('.'));
 			extension=name.substr(name.lastIndexOf('.'));
 		} else {
@@ -36,7 +36,7 @@ var FileList={
 			name_span.append($('<span></span>').addClass('extension').text(extension));
 		}
 		//dirs can show the number of uploaded files
-		if (type == 'dir') {
+		if (type === 'dir') {
 			link_elem.append($('<span></span>').attr({
 				'class': 'uploadtext',
 				'currentUploads': 0
@@ -46,7 +46,7 @@ var FileList={
 		tr.append(td);
 
 		//size column
-		if(size!=t('files', 'Pending')){
+		if(size!==t('files', 'Pending')){
 			simpleSize = humanFileSize(size);
 		}else{
 			simpleSize=t('files', 'Pending');
@@ -135,7 +135,7 @@ var FileList={
 	},
 	refresh:function(data) {
 		var result = jQuery.parseJSON(data.responseText);
-		if(typeof(result.data.breadcrumb) != 'undefined'){
+		if(typeof(result.data.breadcrumb) !== 'undefined'){
 			updateBreadcrumb(result.data.breadcrumb);
 		}
 		FileList.update(result.data.files);
@@ -144,7 +144,7 @@ var FileList={
 	remove:function(name){
 		$('tr').filterAttr('data-file',name).find('td.filename').draggable('destroy');
 		$('tr').filterAttr('data-file',name).remove();
-		if($('tr[data-file]').length==0){
+		if($('tr[data-file]').length===0){
 			$('#emptyfolder').show();
 		}
 	},
@@ -163,14 +163,14 @@ var FileList={
 			}
 		}
 		if(fileElements.length){
-			if(pos==-1){
+			if(pos===-1){
 				$(fileElements[0]).before(element);
 			}else{
 				$(fileElements[pos]).after(element);
 			}
-		}else if(type=='dir' && $('tr[data-file]').length>0){
+		}else if(type==='dir' && $('tr[data-file]').length>0){
 			$('tr[data-file]').first().before(element);
-		} else if(type=='file' && $('tr[data-file]').length>0) {
+		} else if(type==='file' && $('tr[data-file]').length>0) {
 			$('tr[data-file]').last().before(element);
 		}else{
 			$('#fileList').append(element);
@@ -182,7 +182,7 @@ var FileList={
 		tr.data('loading',false);
 		mime=tr.data('mime');
 		tr.attr('data-mime',mime);
-		if (id != null) {
+		if (id) {
 			tr.attr('data-id', id);
 		}
 		getMimeIcon(mime,function(path){
@@ -217,7 +217,7 @@ var FileList={
 			var newname=input.val();
 			if (!Files.isFileNameValid(newname)) {
 				return false;
-			} else if (newname != name) {
+			} else if (newname !== name) {
 				if (FileList.checkName(name, newname, false)) {
 					newname = name;
 				} else {
@@ -265,14 +265,14 @@ var FileList={
 			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 && tr.data('type') != 'dir') {
+			if (newname.indexOf('.') > 0 && tr.data('type') !== 'dir') {
 				var basename=newname.substr(0,newname.lastIndexOf('.'));
 			} else {
 				var basename=newname;
 			}
 			td.find('a.name span.nametext').text(basename);
-			if (newname.indexOf('.') > 0 && tr.data('type') != 'dir') {
-				if (td.find('a.name span.extension').length == 0 ) {
+			if (newname.indexOf('.') > 0 && tr.data('type') !== 'dir') {
+				if (td.find('a.name span.extension').length === 0 ) {
 					td.find('a.name span.nametext').append('<span class="extension"></span>');
 				}
 				td.find('a.name span.extension').text(newname.substr(newname.lastIndexOf('.')));
@@ -282,7 +282,7 @@ var FileList={
 			return false;
 		});
 		input.keyup(function(event){
-			if (event.keyCode == 27) {
+			if (event.keyCode === 27) {
 				tr.data('renaming',false);
 				form.remove();
 				td.children('a.name').show();
@@ -347,13 +347,13 @@ var FileList={
 			FileList.finishReplace();
 		};
 		if (!isNewFile) {
-            OC.Notification.showHtml(t('files', 'replaced {new_name} with {old_name}', {new_name: newName}, {old_name: oldName})+'<span class="undo">'+t('files', 'undo')+'</span>');
+			OC.Notification.showHtml(t('files', 'replaced {new_name} with {old_name}', {new_name: newName}, {old_name: oldName})+'<span class="undo">'+t('files', 'undo')+'</span>');
 		}
 	},
 	finishReplace:function() {
 		if (!FileList.replaceCanceled && FileList.replaceOldName && FileList.replaceNewName) {
 			$.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') {
+				if (result && result.status === 'success') {
 					$('tr').filterAttr('data-replace', 'true').removeAttr('data-replace');
 				} else {
 					OC.dialogs.alert(result.data.message, 'Error moving file');
@@ -384,7 +384,7 @@ var FileList={
 		$.post(OC.filePath('files', 'ajax', 'delete.php'),
 				{dir:$('#dir').val(),files:fileNames},
 				function(result){
-					if (result.status == 'success') {
+					if (result.status === 'success') {
 						$.each(files,function(index,file){
 							var files = $('tr').filterAttr('data-file',file);
 							files.remove();
@@ -412,6 +412,7 @@ $(document).ready(function(){
 		if ($('#fileList').length > 0) {
 			var dropTarget = $(e.originalEvent.target).closest('tr');
 			if(dropTarget && dropTarget.data('type') === 'dir') { // drag&drop upload to folder
+				data.context = dropTarget;
 				var dirName = dropTarget.data('file');
 				// update folder in form
 				data.formData = function(form) {
@@ -426,7 +427,7 @@ $(document).ready(function(){
 						formArray[2]['value'] += '/'+dirName;
 					}
 					return formArray;
-				}
+				};
 			}
 		}
 	});
@@ -434,11 +435,11 @@ $(document).ready(function(){
 		// only add to fileList if it exists
 		if ($('#fileList').length > 0) {
 
-			if(FileList.deleteFiles && FileList.deleteFiles.indexOf(data.files[0].name)!=-1){//finish delete if we are uploading a deleted file
+			if(FileList.deleteFiles && FileList.deleteFiles.indexOf(data.files[0].name)!==-1){//finish delete if we are uploading a deleted file
 				FileList.finishDelete(null, true); //delete file before continuing
 			}
 
-			// add ui visualization to existing folder or as new stand-alone file?
+			// add ui visualization to existing folder
 			var dropTarget = $(e.originalEvent.target).closest('tr');
 			if(dropTarget && dropTarget.data('type') === 'dir') {
 				// add to existing folder
@@ -460,21 +461,6 @@ $(document).ready(function(){
 				} else {
 					uploadtext.text(currentUploads + ' ' + t('files', 'files uploading'));
 				}
-			} else {
-				// add as stand-alone row to filelist
-				var uniqueName = getUniqueName(data.files[0].name);
-				var size=t('files','Pending');
-				if(data.files[0].size>=0){
-					size=data.files[0].size;
-				}
-				var date=new Date();
-				var param = {};
-				if ($('#publicUploadRequestToken').length) {
-					param.download_url = document.location.href + '&download&path=/' + $('#dir').val() + '/' + uniqueName;
-				}
-				// create new file context
-				data.context = FileList.addFile(uniqueName,size,date,true,false,param);
-
 			}
 		}
 	});
@@ -493,18 +479,8 @@ $(document).ready(function(){
 			if(typeof result[0] !== 'undefined' && result[0].status === 'success') {
 				var file = result[0];
 
-				if (data.context.data('type') === 'file') {
-					// update file data
-					data.context.attr('data-mime',file.mime).attr('data-id',file.id);
-					var size = data.context.data('size');
-					if(size!=file.size){
-						data.context.attr('data-size', file.size);
-						data.context.find('td.filesize').text(humanFileSize(file.size));
-					}
-					if (FileList.loadingDone) {
-						FileList.loadingDone(file.name, file.id);
-					}
-				} else {
+				if (data.context && data.context.data('type') === 'dir') {
+					
 					// update upload counter ui
 					var uploadtext = data.context.find('.uploadtext');
 					var currentUploads = parseInt(uploadtext.attr('currentUploads'));
@@ -525,6 +501,32 @@ $(document).ready(function(){
 					data.context.attr('data-size', size);
 					data.context.find('td.filesize').text(humanFileSize(size));
 
+				} else {
+					
+					// add as stand-alone row to filelist
+					var uniqueName = getUniqueName(data.files[0].name);
+					var size=t('files','Pending');
+					if (data.files[0].size>=0){
+						size=data.files[0].size;
+					}
+					var date=new Date();
+					var param = {};
+					if ($('#publicUploadRequestToken').length) {
+						param.download_url = document.location.href + '&download&path=/' + $('#dir').val() + '/' + uniqueName;
+					}
+					
+					//should the file exist in the list remove it
+					FileList.remove(file.name);
+
+					// create new file context
+					data.context = FileList.addFile(file.name, file.size, date, false, false, param);
+				
+					// update file data
+					data.context.attr('data-mime',file.mime).attr('data-id',file.id);
+					
+					getMimeIcon(file.mime, function(path){
+						data.context.find('td.filename').attr('style','background-image:url('+path+')');
+					});
 				}
 			}
 		}
@@ -574,16 +576,16 @@ $(document).ready(function(){
 			FileList.replaceIsNewFile = null;
 		}
 		FileList.lastAction = null;
-        OC.Notification.hide();
+		OC.Notification.hide();
 	});
 	$('#notification:first-child').on('click', '.replace', function() {
-        OC.Notification.hide(function() {
-            FileList.replace($('#notification > span').attr('data-oldName'), $('#notification > span').attr('data-newName'), $('#notification > span').attr('data-isNewFile'));
-        });
+		OC.Notification.hide(function() {
+			FileList.replace($('#notification > span').attr('data-oldName'), $('#notification > span').attr('data-newName'), $('#notification > span').attr('data-isNewFile'));
+		});
 	});
 	$('#notification:first-child').on('click', '.suggest', function() {
 		$('tr').filterAttr('data-file', $('#notification > span').attr('data-oldName')).show();
-        OC.Notification.hide();
+		OC.Notification.hide();
 	});
 	$('#notification:first-child').on('click', '.cancel', function() {
 		if ($('#notification > span').attr('data-isNewFile')) {
diff --git a/core/js/jquery.ocdialog.js b/core/js/jquery.ocdialog.js
index 52ff5633f9..ce99105227 100644
--- a/core/js/jquery.ocdialog.js
+++ b/core/js/jquery.ocdialog.js
@@ -40,6 +40,9 @@
 				}
 				// Escape
 				if(event.keyCode === 27 && self.options.closeOnEscape) {
+					if (self.closeCB) {
+						self.closeCB();
+					}
 					self.close();
 					return false;
 				}
@@ -190,7 +193,7 @@
 			}
 		},
 		widget: function() {
-			return this.$dialog
+			return this.$dialog;
 		},
 		close: function() {
 			this._destroyOverlay();
@@ -203,10 +206,10 @@
 		},
 		destroy: function() {
 			if(this.$title) {
-				this.$title.remove()
+				this.$title.remove();
 			}
 			if(this.$buttonrow) {
-				this.$buttonrow.remove()
+				this.$buttonrow.remove();
 			}
 
 			if(this.originalTitle) {
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index cf77f5018a..88a3f6628c 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -297,14 +297,7 @@ var OCdialogs = {
 				closeOnEscape: true,
 				modal: true,
 				buttons: buttonlist,
-				close: function(event, ui) {
-					try {
-						$(this).ocdialog('destroy').remove();
-					} catch(e) {
-						alert (e);
-					}
-					self.$ = null;
-				}
+				closeButton: null
 			});
 			OCdialogs.dialogs_counter++;
 			
-- 
GitLab


From 4588efc44b1a8b45699b0137a798f9b84f8d35b1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Fri, 16 Aug 2013 02:48:45 +0200
Subject: [PATCH 004/248] add triangle icon east

---
 core/img/actions/triangle-e.png | Bin 0 -> 175 bytes
 core/img/actions/triangle-e.svg |  54 ++++++++++++++++++++++++++++++++
 2 files changed, 54 insertions(+)
 create mode 100644 core/img/actions/triangle-e.png
 create mode 100644 core/img/actions/triangle-e.svg

diff --git a/core/img/actions/triangle-e.png b/core/img/actions/triangle-e.png
new file mode 100644
index 0000000000000000000000000000000000000000..40206a8961b89c79a2893c96cca96a5de98dd44f
GIT binary patch
literal 175
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRdCT0c(hNQXTpBNYzI0Jk_Tp3`XIr-%Q1_lPk
zk|4ie28U-i(m<RfZ+91l4pvzYkn#eL$YKTt-s>RD=%g{bf`Ng7y~NYkmHjRUzc>@$
zu?CiH3=9nNo-U3d9M_W*4zS5M91#-O$aN%UD~q4S0Tr1ISt$$*zf#yN|2h3-16l0p
L>gTe~DWM4f{W~dd

literal 0
HcmV?d00001

diff --git a/core/img/actions/triangle-e.svg b/core/img/actions/triangle-e.svg
new file mode 100644
index 0000000000..06f5790c6c
--- /dev/null
+++ b/core/img/actions/triangle-e.svg
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="16px"
+   width="16px"
+   version="1.1"
+   id="svg2"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="triangle-e.svg">
+  <metadata
+     id="metadata10">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs8" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="480"
+     id="namedview6"
+     showgrid="false"
+     inkscape:zoom="14.75"
+     inkscape:cx="8"
+     inkscape:cy="8"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2" />
+  <path
+     style="text-indent:0;text-transform:none;block-progression:tb;color:#000000"
+     d="M 4,12 12,8 4.011,4 z"
+     id="path4"
+     inkscape:connector-curvature="0" />
+</svg>
-- 
GitLab


From 33bb2238aeb0fddd3ddd3fe18307c5e7548e00bc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Fri, 16 Aug 2013 08:06:25 +0200
Subject: [PATCH 005/248] updating 3rdparty repo commit

---
 3rdparty | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/3rdparty b/3rdparty
index 2f3ae9f56a..8d68fa1eab 160000
--- a/3rdparty
+++ b/3rdparty
@@ -1 +1 @@
-Subproject commit 2f3ae9f56a9838b45254393e13c14f8a8c380d6b
+Subproject commit 8d68fa1eabe8c1d033cb89676b31f0eaaf99335b
-- 
GitLab


From f94e6036980644bdd6312e75a8973f2633cf5ff2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Fri, 16 Aug 2013 11:40:55 +0200
Subject: [PATCH 006/248] progress fixes

---
 apps/files/ajax/upload.php      |   9 +-
 apps/files/css/files.css        |  23 ++-
 apps/files/js/file-upload.js    | 263 +++++++++++++++++++++----------
 apps/files/js/fileactions.js    |   2 +-
 apps/files/js/filelist.js       | 265 ++++++++++++++++++++------------
 apps/files/js/files.js          |  29 +---
 apps/files_sharing/js/public.js |   7 +-
 core/js/oc-dialogs.js           | 215 +++++++++++++++-----------
 8 files changed, 503 insertions(+), 310 deletions(-)

diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index 8d183bd1f9..619b5f6a04 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -99,8 +99,8 @@ if (strpos($dir, '..') === false) {
 	$fileCount = count($files['name']);
 	for ($i = 0; $i < $fileCount; $i++) {
 		// $path needs to be normalized - this failed within drag'n'drop upload to a sub-folder
-		if (isset($_POST['new_name'])) {
-			$newName = $_POST['new_name'];
+		if (isset($_POST['newname'])) {
+			$newName = $_POST['newname'];
 		} else {
 			$newName = $files['name'][$i];
 		}
@@ -109,11 +109,12 @@ if (strpos($dir, '..') === false) {
 		} else {
 			$replace = false;
 		}
-		$target = \OC\Files\Filesystem::normalizePath(stripslashes($dir).$newName);
+		$target = \OC\Files\Filesystem::normalizePath(stripslashes($dir).'/'.$newName);
 		if ( ! $replace && \OC\Files\Filesystem::file_exists($target)) {
 			$meta = \OC\Files\Filesystem::getFileInfo($target);
 			$result[] = array('status' => 'existserror',
-				'mime' => $meta['mimetype'],
+				'type' => $meta['mimetype'],
+				'mtime' => $meta['mtime'],
 				'size' => $meta['size'],
 				'id' => $meta['fileid'],
 				'name' => basename($target),
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index acee8471af..0ff25a24d7 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -190,6 +190,9 @@ table.dragshadow td.size {
 	margin-left: -200px;
 }
 
+.oc-dialog .fileexists table {
+	width: 100%;
+}
 .oc-dialog .fileexists .original .icon {
 	width: 64px;
 	height: 64px;
@@ -201,6 +204,7 @@ table.dragshadow td.size {
 
 .oc-dialog .fileexists .replacement {
 	margin-top: 20px;
+	margin-bottom: 20px;
 }
 
 .oc-dialog .fileexists .replacement .icon {
@@ -213,10 +217,23 @@ table.dragshadow td.size {
 	clear: both;
 }
 
-.oc-dialog .fileexists label[for="new-name"] {
-	margin-top: 20px;
-	display: block;
+.oc-dialog .fileexists .toggle {
+	background-image: url('%webroot%/core/img/actions/triangle-e.png');
+	width: 16px;
+	height: 16px;
+}
+.oc-dialog .fileexists #allfileslabel {
+	float:right;
 }
+.oc-dialog .fileexists #allfiles {
+	vertical-align: bottom;
+	position: relative;
+	top: -3px;
+}
+.oc-dialog .fileexists #allfiles + span{
+	vertical-align: bottom;
+}
+
 .oc-dialog .fileexists h3 {
 	font-weight: bold;
 }
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index bd9757b5ff..f8899cb07e 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -1,4 +1,30 @@
 /**
+ * 1. tracking which file to upload next -> upload queue with data elements added whenever add is called
+ * 2. tracking progress for each folder individually -> track progress in a progress[dirname] object
+ *   - every new selection increases the total size and number of files for a directory
+ *   - add increases, successful done decreases, skip decreases, cancel decreases
+ * 3. track selections -> the general skip / overwrite decision is selection based and can change
+ *    - server might send already exists error -> show dialog & remember decision for selection again
+ *    - server sends error, how do we find collection?
+ * 4. track jqXHR object to prevent browser from navigationg away -> track in a uploads[dirname][filename] object [x]
+ * 
+ * selections can progress in parrallel but each selection progresses sequentially
+ * 
+ * -> store everything in context?
+ * context.folder
+ * context.element?
+ * context.progressui?
+ * context.jqXHR
+ * context.selection
+ * context.selection.onExistsAction?
+ * 
+ * context available in what events?
+ * build in drop() add dir
+ * latest in add() add file? add selection!
+ * progress? -> update progress?
+ * onsubmit -> context.jqXHR?
+ * fail() -> 
+ * done()
  * 
  * when versioning app is active -> always overwrite
  * 
@@ -22,24 +48,74 @@
  * dialoge:
  *	-> skip, replace, choose (or abort) ()
  *	-> choose left or right (with skip) (when only one file in list also show rename option and remember for all option)
+ *	
+ *	progress always based on filesize
+ *	number of files as text, bytes as bar
+ *	
  */
 
 
-OC.upload = {
+
+//TODO clean uploads when all progress has completed
+OC.Upload = {
+	/**
+	 * map to lookup the selections for a given directory.
+	 * @type Array
+	 */
+	_selections: {},
+	/*
+	 * queue which progress tracker to use for the next upload
+	 * @type Array
+	 */
+	_queue: [],
+	queueUpload:function(data) {
+		// add to queue
+		this._queue.push(data); //remember what to upload next
+		if ( ! this.isProcessing() ) {
+			this.startUpload();
+		}
+	},
+	getSelection:function(originalFiles) {
+		if (!originalFiles.selectionKey) {
+			originalFiles.selectionKey = 'selection-' + $.assocArraySize(this._selections);
+			this._selections[originalFiles.selectionKey] = {
+				selectionKey:originalFiles.selectionKey,
+				files:{},
+				totalBytes:0,
+				loadedBytes:0,
+				currentFile:0,
+				uploads:{},
+				checked:false
+			};
+		}
+		return this._selections[originalFiles.selectionKey];
+	},
+	cancelUpload:function(dir, filename) {
+		var deleted = false;
+		jQuery.each(this._selections, function(i, selection) {
+			if (selection.dir === dir && selection.uploads[filename]) {
+				delete selection.uploads[filename];
+				deleted = true;
+				return false; // end searching through selections
+			}
+		});
+		return deleted;
+	},
+	cancelUploads:function() {
+		jQuery.each(this._selections,function(i,selection){
+			jQuery.each(selection.uploads, function (j, jqXHR) {
+				delete jqXHR;
+			});
+		});
+		this._queue = [];
+		this._isProcessing = false;
+	},
 	_isProcessing:false,
 	isProcessing:function(){
 		return this._isProcessing;
 	},
-	_uploadQueue:[],
-	addUpload:function(data){
-		this._uploadQueue.push(data);
-
-		if ( ! OC.upload.isProcessing() ) {
-			OC.upload.startUpload();
-		}
-	},
 	startUpload:function(){
-		if (this._uploadQueue.length > 0) {
+		if (this._queue.length > 0) {
 			this._isProcessing = true;
 			this.nextUpload();
 			return true;
@@ -48,32 +124,50 @@ OC.upload = {
 		}
 	},
 	nextUpload:function(){
-		if (this._uploadQueue.length > 0) {
-			var data = this._uploadQueue.pop();
-			var jqXHR = data.submit();
-
-			// remember jqXHR to show warning to user when he navigates away but an upload is still in progress
-			if (typeof data.context !== 'undefined' && data.context.data('type') === 'dir') {
-				var dirName = data.context.data('file');
-				if(typeof uploadingFiles[dirName] === 'undefined') {
-					uploadingFiles[dirName] = {};
-				}
-				uploadingFiles[dirName][data.files[0].name] = jqXHR;
-			} else {
-				uploadingFiles[data.files[0].name] = jqXHR;
-			}
+		if (this._queue.length > 0) {
+			var data = this._queue.pop();
+			var selection = this.getSelection(data.originalFiles);
+			selection.uploads[data.files[0]] = data.submit();
+			
 		} else {
 			//queue is empty, we are done
 			this._isProcessing = false;
+			//TODO free data
 		}
+	},
+	progressBytes: function() {
+		var total = 0;
+		var loaded = 0;
+		jQuery.each(this._selections, function (i, selection) {
+			total += selection.totalBytes;
+			loaded += selection.loadedBytes;
+		});
+		return (loaded/total)*100;
+	},
+	loadedBytes: function() {
+		var loaded = 0;
+		jQuery.each(this._selections, function (i, selection) {
+			loaded += selection.loadedBytes;
+		});
+		return loaded;
+	},
+	totalBytes: function() {
+		var total = 0;
+		jQuery.each(this._selections, function (i, selection) {
+			total += selection.totalBytes;
+		});
+		return total;
+	},
+	handleExists:function(data) {
+
 	},
 	onCancel:function(data){
 		//TODO cancel all uploads
-		Files.cancelUploads();
-		this._uploadQueue = [];
-		this._isProcessing = false;
+		OC.Upload.cancelUploads();
 	},
 	onSkip:function(data){
+		var selection = this.getSelection(data.originalFiles);
+		selection.loadedBytes += data.loaded;
 		this.nextUpload();
 	},
 	onReplace:function(data){
@@ -83,8 +177,14 @@ OC.upload = {
 	},
 	onRename:function(data, newName){
 		//TODO rename file in filelist, stop spinner
-		data.data.append('new_name', newName);
+		data.data.append('newname', newName);
 		data.submit();
+	},
+	setAction:function(data, action) {
+		
+	},
+	setDefaultAction:function(action) {
+		
 	}
 };
 
@@ -92,15 +192,23 @@ $(document).ready(function() {
 
 	var file_upload_param = {
 		dropZone: $('#content'), // restrict dropZone to content div
+		
 		//singleFileUploads is on by default, so the data.files array will always have length 1
 		add: function(e, data) {
 			var that = $(this);
-
-			if (typeof data.originalFiles.checked === 'undefined') {
+			
+			// lookup selection for dir
+			var selection = OC.Upload.getSelection(data.originalFiles);
+			
+			if (!selection.dir) {
+				selection.dir = $('#dir').val();
+			}
+			
+			if ( ! selection.checked ) {
 				
-				var totalSize = 0;
+				selection.totalBytes = 0;
 				$.each(data.originalFiles, function(i, file) {
-					totalSize += file.size;
+					selection.totalBytes += file.size;
 
 					if (file.type === '' && file.size === 4096) {
 						data.textStatus = 'dirorzero';
@@ -111,11 +219,10 @@ $(document).ready(function() {
 					}
 				});
 
-				if (totalSize > $('#max_upload').val()) {
+				if (selection.totalBytes > $('#max_upload').val()) {
 					data.textStatus = 'notenoughspace';
 					data.errorThrown = t('files', 'Not enough space available');
 				}
-
 				if (data.errorThrown) {
 					//don't upload anything
 					var fu = that.data('blueimp-fileupload') || that.data('fileupload');
@@ -123,9 +230,22 @@ $(document).ready(function() {
 					return false;
 				}
 				
-				data.originalFiles.checked = true; // this will skip the checks on subsequent adds
+				//TODO refactor away:
+				//show cancel button
+				if($('html.lte9').length === 0 && data.dataType !== 'iframe') {
+					$('#uploadprogresswrapper input.stop').show();
+				}
 			}
 			
+			//all subsequent add calls for this selection can be ignored
+			//allow navigating to the selection from a context
+			//context.selection = data.originalFiles.selection;
+			
+			//allow navigating to contexts / files of a selection
+			selection.files[data.files[0].name] = data;
+			
+			OC.Upload.queueUpload(data);
+			
 			//TODO check filename already exists
 			/*
 			if ($('tr[data-file="'+data.files[0].name+'"][data-id]').length > 0) {
@@ -140,14 +260,6 @@ $(document).ready(function() {
 			}
 			*/
 
-			//add files to queue
-			OC.upload.addUpload(data);
-			
-			//TODO refactor away:
-			//show cancel button
-			if($('html.lte9').length === 0 && data.dataType !== 'iframe') {
-				$('#uploadprogresswrapper input.stop').show();
-			}
 			return true;
 		},
 		/**
@@ -176,7 +288,8 @@ $(document).ready(function() {
 					$('#notification').fadeOut();
 				}, 5000);
 			}
-			delete uploadingFiles[data.files[0].name];
+			var selection = OC.Upload.getSelection(data.originalFiles);
+			delete selection.uploads[data.files[0]];
 		},
 		progress: function(e, data) {
 			// TODO: show nice progress bar in file row
@@ -186,7 +299,8 @@ $(document).ready(function() {
 			if($('html.lte9').length > 0) {
 				return;
 			}
-			var progress = (data.loaded/data.total)*100;
+			//var progress = (data.loaded/data.total)*100;
+			var progress = OC.Upload.progressBytes();
 			$('#uploadprogressbar').progressbar('value', progress);
 		},
 		/**
@@ -204,27 +318,22 @@ $(document).ready(function() {
 				response = data.result[0].body.innerText;
 			}
 			var result=$.parseJSON(response);
+			var selection = OC.Upload.getSelection(data.originalFiles);
 
-			if(typeof result[0] !== 'undefined' && result[0].status === 'success') {
-				OC.upload.nextUpload();
+			if(typeof result[0] !== 'undefined'
+				&& result[0].status === 'success'
+			) {
+				selection.loadedBytes+=data.loaded;
+				OC.Upload.nextUpload();
 			} else {
 				if (result[0].status === 'existserror') {
-					//TODO open dialog and retry with other name?
-					// get jqXHR reference
-					if (typeof data.context !== 'undefined' && data.context.data('type') === 'dir') {
-						var dirName = data.context.data('file');
-						var jqXHR = uploadingFiles[dirName][filename];
-					} else {
-						var jqXHR = uploadingFiles[filename];
-					}
-					//filenames can only be changed on the server side
-					//TODO show "file already exists" dialog
-					//options: abort | skip | replace / rename
-							//TODO reset all-files flag? when done with selection?
+					//show "file already exists" dialog
 					var original = result[0];
 					var replacement = data.files[0];
-					OC.dialogs.fileexists(data, original, replacement, OC.upload);
+					var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
+					OC.dialogs.fileexists(data, original, replacement, OC.Upload, fu);
 				} else {
+					delete selection.uploads[data.files[0]];
 					data.textStatus = 'servererror';
 					data.errorThrown = t('files', result.data.message);
 					var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
@@ -232,19 +341,6 @@ $(document).ready(function() {
 				}
 			}
 
-			var filename = result[0].originalname;
-
-			// delete jqXHR reference
-			if (typeof data.context !== 'undefined' && data.context.data('type') === 'dir') {
-				var dirName = data.context.data('file');
-				delete uploadingFiles[dirName][filename];
-				if ($.assocArraySize(uploadingFiles[dirName]) === 0) {
-					delete uploadingFiles[dirName];
-				}
-			} else {
-				delete uploadingFiles[filename];
-			}
-
 		},
 		/**
 		 * called after last upload
@@ -252,17 +348,20 @@ $(document).ready(function() {
 		 * @param data
 		 */
 		stop: function(e, data) {
-			if(data.dataType !== 'iframe') {
-				$('#uploadprogresswrapper input.stop').hide();
-			}
+			if(OC.Upload.progressBytes()>=100) {
 
-			//IE < 10 does not fire the necessary events for the progress bar.
-			if($('html.lte9').length > 0) {
-				return;
-			}
+				if(data.dataType !== 'iframe') {
+					$('#uploadprogresswrapper input.stop').hide();
+				}
 
-			$('#uploadprogressbar').progressbar('value', 100);
-			$('#uploadprogressbar').fadeOut();
+				//IE < 10 does not fire the necessary events for the progress bar.
+				if($('html.lte9').length > 0) {
+					return;
+				}
+
+				$('#uploadprogressbar').progressbar('value', 100);
+				$('#uploadprogressbar').fadeOut();
+			}
 		}
 	};
 	
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index aa66a57a7b..277abcfdb1 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -174,7 +174,7 @@ $(document).ready(function () {
 FileActions.register('all', 'Delete', OC.PERMISSION_DELETE, function () {
 	return OC.imagePath('core', 'actions/delete');
 }, function (filename) {
-	if (Files.cancelUpload(filename)) {
+	if (OC.Upload.cancelUpload($('#dir').val(), filename)) {
 		if (filename.substr) {
 			filename = [filename];
 		}
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index f4863837ce..335f81e04b 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -407,151 +407,212 @@ $(document).ready(function(){
 
 	// handle upload events
 	var file_upload_start = $('#file_upload_start');
+	
 	file_upload_start.on('fileuploaddrop', function(e, data) {
-		// only handle drop to dir if fileList exists
-		if ($('#fileList').length > 0) {
-			var dropTarget = $(e.originalEvent.target).closest('tr');
-			if(dropTarget && dropTarget.data('type') === 'dir') { // drag&drop upload to folder
-				data.context = dropTarget;
-				var dirName = dropTarget.data('file');
-				// update folder in form
-				data.formData = function(form) {
-					var formArray = form.serializeArray();
-					// array index 0 contains the max files size
-					// array index 1 contains the request token
-					// array index 2 contains the directory
-					var parentDir = formArray[2]['value'];
-					if (parentDir === '/') {
-						formArray[2]['value'] += dirName;
-					} else {
-						formArray[2]['value'] += '/'+dirName;
-					}
-					return formArray;
-				};
+		console.log('fileuploaddrop ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+		
+		var dropTarget = $(e.originalEvent.target).closest('tr');
+		if(dropTarget && dropTarget.data('type') === 'dir') { // drag&drop upload to folder
+			
+			// lookup selection for dir
+			var selection = OC.Upload.getSelection(data.files);
+			
+			// remember drop target
+			selection.dropTarget = dropTarget;
+			
+			selection.dir = dropTarget.data('file');
+			if (selection.dir !== '/') {
+				if ($('#dir').val() === '/') {
+					selection.dir = '/' + selection.dir;
+				} else {
+					selection.dir = $('#dir').val() + '/' + selection.dir;
+				}
 			}
-		}
+			
+			// update folder in form
+			data.formData = function(form) {
+				var formArray = form.serializeArray();
+				// array index 0 contains the max files size
+				// array index 1 contains the request token
+				// array index 2 contains the directory
+				var parentDir = formArray[2]['value'];
+				if (parentDir === '/') {
+					formArray[2]['value'] += selection.dir;
+				} else {
+					formArray[2]['value'] += '/' + selection.dir;
+				}
+				
+				return formArray;
+			};
+		} 
+		
 	});
 	file_upload_start.on('fileuploadadd', function(e, data) {
-		// only add to fileList if it exists
-		if ($('#fileList').length > 0) {
+		console.log('fileuploadadd ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+
+		// lookup selection for dir
+		var selection = OC.Upload.getSelection(data.originalFiles);
+			
+		if(FileList.deleteFiles && FileList.deleteFiles.indexOf(data.files[0].name)!==-1){//finish delete if we are uploading a deleted file
+			FileList.finishDelete(null, true); //delete file before continuing
+		}
+		
+		// add ui visualization to existing folder
+		if(selection.dropTarget && selection.dropTarget.data('type') === 'dir') {
+			// add to existing folder
+			var dirName = selection.dropTarget.data('file');
+
+			// set dir context
+			data.context = $('tr').filterAttr('data-type', 'dir').filterAttr('data-file', dirName);
 
-			if(FileList.deleteFiles && FileList.deleteFiles.indexOf(data.files[0].name)!==-1){//finish delete if we are uploading a deleted file
-				FileList.finishDelete(null, true); //delete file before continuing
+			// update upload counter ui
+			var uploadtext = data.context.find('.uploadtext');
+			var currentUploads = parseInt(uploadtext.attr('currentUploads'));
+			currentUploads += 1;
+			uploadtext.attr('currentUploads', currentUploads);
+			
+			if(currentUploads === 1) {
+				var img = OC.imagePath('core', 'loading.gif');
+				data.context.find('td.filename').attr('style','background-image:url('+img+')');
+				uploadtext.text(t('files', '1 file uploading'));
+				uploadtext.show();
+			} else {
+				uploadtext.text(currentUploads + ' ' + t('files', 'files uploading'));
 			}
+		}
+		
+	});
+	file_upload_start.on('fileuploaddone', function(e, data) {
+		console.log('fileuploaddone ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+		
+		var response;
+		if (typeof data.result === 'string') {
+			response = data.result;
+		} else {
+			// fetch response from iframe
+			response = data.result[0].body.innerText;
+		}
+		var result=$.parseJSON(response);
 
-			// add ui visualization to existing folder
-			var dropTarget = $(e.originalEvent.target).closest('tr');
-			if(dropTarget && dropTarget.data('type') === 'dir') {
-				// add to existing folder
-				var dirName = dropTarget.data('file');
+		if(typeof result[0] !== 'undefined' && result[0].status === 'success') {
+			var file = result[0];
 
-				// set dir context
-				data.context = $('tr').filterAttr('data-type', 'dir').filterAttr('data-file', dirName);
+			if (data.context && data.context.data('type') === 'dir') {
 
 				// update upload counter ui
 				var uploadtext = data.context.find('.uploadtext');
 				var currentUploads = parseInt(uploadtext.attr('currentUploads'));
-				currentUploads += 1;
+				currentUploads -= 1;
 				uploadtext.attr('currentUploads', currentUploads);
-				if(currentUploads === 1) {
-					var img = OC.imagePath('core', 'loading.gif');
+				if(currentUploads === 0) {
+					var img = OC.imagePath('core', 'filetypes/folder.png');
 					data.context.find('td.filename').attr('style','background-image:url('+img+')');
-					uploadtext.text(t('files', '1 file uploading'));
-					uploadtext.show();
+					uploadtext.text('');
+					uploadtext.hide();
 				} else {
 					uploadtext.text(currentUploads + ' ' + t('files', 'files uploading'));
 				}
-			}
-		}
-	});
-	file_upload_start.on('fileuploaddone', function(e, data) {
-		// only update the fileList if it exists
-		if ($('#fileList').length > 0) {
-			var response;
-			if (typeof data.result === 'string') {
-				response = data.result;
+				
+				// update folder size
+				var size = parseInt(data.context.data('size'));
+				size += parseInt(file.size);
+				data.context.attr('data-size', size);
+				data.context.find('td.filesize').text(humanFileSize(size));
+				
 			} else {
-				// fetch response from iframe
-				response = data.result[0].body.innerText;
-			}
-			var result=$.parseJSON(response);
-
-			if(typeof result[0] !== 'undefined' && result[0].status === 'success') {
-				var file = result[0];
-
-				if (data.context && data.context.data('type') === 'dir') {
-					
-					// update upload counter ui
-					var uploadtext = data.context.find('.uploadtext');
-					var currentUploads = parseInt(uploadtext.attr('currentUploads'));
-					currentUploads -= 1;
-					uploadtext.attr('currentUploads', currentUploads);
-					if(currentUploads === 0) {
-						var img = OC.imagePath('core', 'filetypes/folder.png');
-						data.context.find('td.filename').attr('style','background-image:url('+img+')');
-						uploadtext.text('');
-						uploadtext.hide();
-					} else {
-						uploadtext.text(currentUploads + ' ' + t('files', 'files uploading'));
-					}
 
-					// update folder size
-					var size =  parseInt(data.context.data('size'));
-					size +=  parseInt(file.size)	;
-					data.context.attr('data-size', size);
-					data.context.find('td.filesize').text(humanFileSize(size));
+				// add as stand-alone row to filelist
+				var size=t('files','Pending');
+				if (data.files[0].size>=0){
+					size=data.files[0].size;
+				}
+				var date=new Date();
+				var param = {};
+				if ($('#publicUploadRequestToken').length) {
+					param.download_url = document.location.href + '&download&path=/' + $('#dir').val() + '/' + file.name;
+				}
+				//should the file exist in the list remove it
+				FileList.remove(file.name);
+				
+				// create new file context
+				data.context = FileList.addFile(file.name, file.size, date, false, false, param);
 
-				} else {
-					
-					// add as stand-alone row to filelist
-					var uniqueName = getUniqueName(data.files[0].name);
-					var size=t('files','Pending');
-					if (data.files[0].size>=0){
-						size=data.files[0].size;
-					}
-					var date=new Date();
-					var param = {};
-					if ($('#publicUploadRequestToken').length) {
-						param.download_url = document.location.href + '&download&path=/' + $('#dir').val() + '/' + uniqueName;
-					}
-					
-					//should the file exist in the list remove it
-					FileList.remove(file.name);
+				// update file data
+				data.context.attr('data-mime',file.mime).attr('data-id',file.id);
 
-					// create new file context
-					data.context = FileList.addFile(file.name, file.size, date, false, false, param);
-				
-					// update file data
-					data.context.attr('data-mime',file.mime).attr('data-id',file.id);
-					
-					getMimeIcon(file.mime, function(path){
-						data.context.find('td.filename').attr('style','background-image:url('+path+')');
-					});
-				}
+				getMimeIcon(file.mime, function(path){
+					data.context.find('td.filename').attr('style','background-image:url('+path+')');
+				});
 			}
 		}
 	});
+	
+	file_upload_start.on('fileuploadalways', function(e, data) {
+		console.log('fileuploadalways ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+	});
+	file_upload_start.on('fileuploadsend', function(e, data) {
+		console.log('fileuploadsend ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+		
+		// TODOD add vis
+		//data.context.element = 
+	});
+	file_upload_start.on('fileuploadprogress', function(e, data) {
+		console.log('fileuploadprogress ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+	});
+	file_upload_start.on('fileuploadprogressall', function(e, data) {
+		console.log('fileuploadprogressall ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+	});
+	file_upload_start.on('fileuploadstop', function(e, data) {
+		console.log('fileuploadstop ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+	});
+	file_upload_start.on('fileuploadfail', function(e, data) {
+		console.log('fileuploadfail ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+	});
+	/*
 	file_upload_start.on('fileuploadfail', function(e, data) {
-		// only update the fileList if it exists
+		console.log('fileuploadfail'+((data.files&&data.files.length>0)?' '+data.files[0].name:''));
+		
+		// if we are uploading to a subdirectory
+		if (data.context && data.context.data('type') === 'dir') {
+
+			// update upload counter ui
+			var uploadtext = data.context.find('.uploadtext');
+			var currentUploads = parseInt(uploadtext.attr('currentUploads'));
+			currentUploads -= 1;
+			uploadtext.attr('currentUploads', currentUploads);
+			if(currentUploads === 0) {
+				var img = OC.imagePath('core', 'filetypes/folder.png');
+				data.context.find('td.filename').attr('style','background-image:url('+img+')');
+				uploadtext.text('');
+				uploadtext.hide();
+			} else {
+				uploadtext.text(currentUploads + ' ' + t('files', 'files uploading'));
+			}
+
+		}
+		
 		// cleanup files, error notification has been shown by fileupload code
 		var tr = data.context;
 		if (typeof tr === 'undefined') {
 			tr = $('tr').filterAttr('data-file', data.files[0].name);
 		}
 		if (tr.attr('data-type') === 'dir') {
+			
 			//cleanup uploading to a dir
 			var uploadtext = tr.find('.uploadtext');
 			var img = OC.imagePath('core', 'filetypes/folder.png');
 			tr.find('td.filename').attr('style','background-image:url('+img+')');
 			uploadtext.text('');
 			uploadtext.hide(); //TODO really hide already
+			
 		} else {
+			//TODO add row when sending file
 			//remove file
 			tr.fadeOut();
 			tr.remove();
 		}
 	});
-
+*/
 	$('#notification').hide();
 	$('#notification').on('click', '.undo', function(){
 		if (FileList.deleteFiles) {
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 3fad3fae7d..a907aeab1f 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -1,31 +1,5 @@
 var uploadingFiles = {};
 Files={
-	cancelUpload:function(filename) {
-		if(uploadingFiles[filename]) {
-			uploadingFiles[filename].abort();
-			delete uploadingFiles[filename];
-			return true;
-		}
-		return false;
-	},
-	cancelUploads:function() {
-		$.each(uploadingFiles,function(index,file) {
-			if(typeof file['abort'] === 'function') {
-				file.abort();
-				var filename = $('tr').filterAttr('data-file',index);
-				filename.hide();
-				filename.find('input[type="checkbox"]').removeAttr('checked');
-				filename.removeClass('selected');
-			} else {
-				$.each(file,function(i,f) {
-					f.abort();
-					delete file[i];
-				});
-			}
-			delete uploadingFiles[index];
-		});
-		procesSelection();
-	},
 	updateMaxUploadFilesize:function(response) {
 		if(response == undefined) {
 			return;
@@ -117,7 +91,8 @@ $(document).ready(function() {
 
 	// Trigger cancelling of file upload
 	$('#uploadprogresswrapper .stop').on('click', function() {
-		Files.cancelUploads();
+		OC.Upload.cancelUploads();
+		procesSelection();
 	});
 
 	// Show trash bin
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index 294223aa09..a20b4ae636 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -62,7 +62,10 @@ $(document).ready(function() {
   // Add Uploadprogress Wrapper to controls bar
   $('#controls').append($('#additional_controls div#uploadprogresswrapper'));
 
-  // Cancel upload trigger
-  $('#cancel_upload_button').click(Files.cancelUploads);
+	// Cancel upload trigger
+	$('#cancel_upload_button').click(function() {
+		OC.Upload.cancelUploads();
+		procesSelection();
+	});
 
 });
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index 88a3f6628c..ea03ef2145 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -207,105 +207,142 @@ var OCdialogs = {
 	 * @param {object} controller a controller with onCancel, onSkip, onReplace and onRename methods
 	*/
 	fileexists:function(data, original, replacement, controller) {
-		if (typeof controller !== 'object') {
-			controller = {};
-		}
-		var self = this;
-		$.when(this._getFileExistsTemplate()).then(function($tmpl) {
-			var dialog_name = 'oc-dialog-fileexists-' + OCdialogs.dialogs_counter + '-content';
-			var dialog_id = '#' + dialog_name;
-			var title = t('files','Replace »{filename}«?',{filename: original.name});
-			var $dlg = $tmpl.octemplate({
-				dialog_name: dialog_name,
-				title: title,
-				type: 'fileexists',
-				
-				why: t('files','Another file with the same name already exists in "{dir}".',{dir:'somedir'}),
-				what: t('files','Replacing it will overwrite it\'s contents.'),
-				original_heading: t('files','Original file'),
-				original_size: t('files','Size: {size}',{size: original.size}),
-				original_mtime: t('files','Last changed: {mtime}',{mtime: original.mtime}),
+		var selection = controller.getSelection(data.originalFiles);
+		if (selection.defaultAction) {
+			controller[selection.defaultAction](data);
+		} else {
+			$.when(this._getFileExistsTemplate()).then(function($tmpl) {
+				var dialog_name = 'oc-dialog-fileexists-' + OCdialogs.dialogs_counter + '-content';
+				var dialog_id = '#' + dialog_name;
+				var title = t('files','Replace »{filename}«?',{filename: original.name});
+				var original_size= t('files','Size: {size}',{size: original.size});
+				var original_mtime = t('files','Last changed: {mtime}',{mtime: original.mtime});
+				var replacement_size= t('files','Size: {size}',{size: replacement.size});
+				var replacement_mtime = t('files','Last changed: {mtime}',{mtime: replacement.mtime});
+				var $dlg = $tmpl.octemplate({
+					dialog_name: dialog_name,
+					title: title,
+					type: 'fileexists',
 
-				replacement_heading: t('files','Replace with'),
-				replacement_size: t('files','Size: {size}',{size: replacement.size}),
-				replacement_mtime: t('files','Last changed: {mtime}',{mtime: replacement.mtime}),
+					why: t('files','Another file with the same name already exists in "{dir}".',{dir:'somedir'}),
+					what: t('files','Replacing it will overwrite it\'s contents.'),
+					original_heading: t('files','Original file'),
+					original_size: original_size,
+					original_mtime: original_mtime,
 
-				new_name_label: t('files','Choose a new name for the target.'),
-				all_files_label: t('files','Use this action for all files.')
-			});
-			$('body').append($dlg);
-			
-			$(dialog_id + ' .original .icon').css('background-image','url('+OC.imagePath('core', 'filetypes/file.png')+')');
-			$(dialog_id + ' .replacement .icon').css('background-image','url('+OC.imagePath('core', 'filetypes/file.png')+')');
-			$(dialog_id + ' #new-name').val(original.name);
-			
-			
-			$(dialog_id + ' #new-name').on('keyup', function(e){
-				if ($(dialog_id + ' #new-name').val() === original.name) {
-					
-					$(dialog_id + ' + div .rename').removeClass('primary').hide();
-					$(dialog_id + ' + div .replace').addClass('primary').show();
-				} else {
-					$(dialog_id + ' + div .rename').addClass('primary').show();
-					$(dialog_id + ' + div .replace').removeClass('primary').hide();
-				}
-			});
+					replacement_heading: t('files','Replace with'),
+					replacement_size: replacement_size,
+					replacement_mtime: replacement_mtime,
 
-			buttonlist = [{
-					text: t('core', 'Cancel'),
-					classes: 'cancel',
-					click: function(){
-						if ( typeof controller.onCancel !== 'undefined') {
-							controller.onCancel(data);
-						}
-						$(dialog_id).ocdialog('close');
+					new_name_label: t('files','Choose a new name for the target.'),
+					all_files_label: t('files','Use this action for all files.')
+				});
+				$('body').append($dlg);
+
+				getMimeIcon(original.type,function(path){
+					$(dialog_id + ' .original .icon').css('background-image','url('+path+')');
+				});
+				getMimeIcon(replacement.type,function(path){
+					$(dialog_id + ' .replacement .icon').css('background-image','url('+path+')');
+				});
+				$(dialog_id + ' #newname').val(original.name);
+
+
+				$(dialog_id + ' #newname').on('keyup', function(e){
+					if ($(dialog_id + ' #newname').val() === original.name) {
+						$(dialog_id + ' + div .rename').removeClass('primary').hide();
+						$(dialog_id + ' + div .replace').addClass('primary').show();
+					} else {
+						$(dialog_id + ' + div .rename').addClass('primary').show();
+						$(dialog_id + ' + div .replace').removeClass('primary').hide();
 					}
-				},
-				{
-					text: t('core', 'Skip'),
-					classes: 'skip',
-					click: function(){
-						if ( typeof controller.onSkip !== 'undefined') {
-							controller.onSkip(data);
+				});
+
+				buttonlist = [{
+						text: t('core', 'Cancel'),
+						classes: 'cancel',
+						click: function(){
+							if ( typeof controller.onCancel !== 'undefined') {
+								controller.onCancel(data);
+							}
+							$(dialog_id).ocdialog('close');
 						}
-						$(dialog_id).ocdialog('close');
-					}
-				},
-				{
-					text: t('core', 'Replace'),
-					classes: 'replace',
-					click: function(){
-						if ( typeof controller.onReplace !== 'undefined') {
-							controller.onReplace(data);
+					},
+					{
+						text: t('core', 'Skip'),
+						classes: 'skip',
+						click: function(){
+							if ( typeof controller.onSkip !== 'undefined') {
+								if($(dialog_id + ' #allfiles').prop('checked')){
+									selection.defaultAction = 'onSkip';
+									/*selection.defaultAction = function(){
+										controller.onSkip(data);
+									};*/
+								}
+								controller.onSkip(data);
+							}
+							// trigger fileupload done with status skip
+							//data.result[0].status = 'skip';
+							//fileupload._trigger('done', data.e, data);
+							$(dialog_id).ocdialog('close');
 						}
-						$(dialog_id).ocdialog('close');
 					},
-					defaultButton: true
-				},
-				{
-					text: t('core', 'Rename'),
-					classes: 'rename',
-					click: function(){
-						if ( typeof controller.onRename !== 'undefined') {
-							controller.onRename(data, $(dialog_id + ' #new-name').val());
+					{
+						text: t('core', 'Replace'),
+						classes: 'replace',
+						click: function(){
+							if ( typeof controller.onReplace !== 'undefined') {
+								if($(dialog_id + ' #allfiles').prop('checked')){
+									selection.defaultAction = 'onReplace';
+									/*selection.defaultAction = function(){
+										controller.onReplace(data);
+									};*/
+								}
+								controller.onReplace(data);
+							}
+							$(dialog_id).ocdialog('close');
+						},
+						defaultButton: true
+					},
+					{
+						text: t('core', 'Rename'),
+						classes: 'rename',
+						click: function(){
+							if ( typeof controller.onRename !== 'undefined') {
+								//TODO use autorename when repeat is checked
+								controller.onRename(data, $(dialog_id + ' #newname').val());
+							}
+							$(dialog_id).ocdialog('close');
 						}
-						$(dialog_id).ocdialog('close');
-					}
-				}];
+					}];
 
-			$(dialog_id).ocdialog({
-				closeOnEscape: true,
-				modal: true,
-				buttons: buttonlist,
-				closeButton: null
+				$(dialog_id).ocdialog({
+					width: 500,
+					closeOnEscape: true,
+					modal: true,
+					buttons: buttonlist,
+					closeButton: null
+				});
+				OCdialogs.dialogs_counter++;
+
+				$(dialog_id + ' + div .rename').hide();
+				$(dialog_id + ' #newname').hide();
+				
+				$(dialog_id + ' #newnamecb').on('change', function(){
+					if ($(dialog_id + ' #newnamecb').prop('checked')) {
+						$(dialog_id + ' #newname').fadeIn();
+					} else {
+						$(dialog_id + ' #newname').fadeOut();
+						$(dialog_id + ' #newname').val(original.name);
+					}
+				});
+				
+				
+			})
+			.fail(function() {
+				alert(t('core', 'Error loading file exists template'));
 			});
-			OCdialogs.dialogs_counter++;
-			
-			$(dialog_id + ' + div .rename').hide();
-		})
-		.fail(function() {
-			alert(t('core', 'Error loading file exists template'));
-		});
+		}
 	},
 	_getFilePickerTemplate: function() {
 		var defer = $.Deferred();
-- 
GitLab


From fde9cabe9774b67e88ee8aa8fa39fe044fe2da2f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Sat, 17 Aug 2013 11:16:48 +0200
Subject: [PATCH 007/248] initial import of appframework

---
 lib/appframework/app.php                      |  97 ++++
 lib/appframework/controller/controller.php    | 154 +++++
 lib/appframework/core/api.php                 | 524 ++++++++++++++++++
 .../dependencyinjection/dicontainer.php       | 125 +++++
 lib/appframework/http/dispatcher.php          |  98 ++++
 lib/appframework/http/downloadresponse.php    |  51 ++
 lib/appframework/http/http.php                | 208 +++++++
 lib/appframework/http/jsonresponse.php        |  74 +++
 lib/appframework/http/redirectresponse.php    |  54 ++
 lib/appframework/http/request.php             | 217 ++++++++
 lib/appframework/http/response.php            | 169 ++++++
 lib/appframework/http/templateresponse.php    | 126 +++++
 lib/appframework/middleware/middleware.php    | 100 ++++
 .../middleware/middlewaredispatcher.php       | 159 ++++++
 .../middleware/security/securityexception.php |  41 ++
 .../security/securitymiddleware.php           | 141 +++++
 .../routing/routeactionhandler.php            |  42 ++
 lib/appframework/routing/routeconfig.php      | 186 +++++++
 .../utility/methodannotationreader.php        |  61 ++
 lib/appframework/utility/timefactory.php      |  42 ++
 tests/lib/appframework/AppTest.php            | 107 ++++
 tests/lib/appframework/classloader.php        |  45 ++
 .../controller/ControllerTest.php             | 161 ++++++
 .../dependencyinjection/DIContainerTest.php   |  98 ++++
 .../lib/appframework/http/DispatcherTest.php  | 218 ++++++++
 .../http/DownloadResponseTest.php             |  51 ++
 tests/lib/appframework/http/HttpTest.php      |  87 +++
 .../appframework/http/JSONResponseTest.php    |  96 ++++
 .../http/RedirectResponseTest.php             |  55 ++
 tests/lib/appframework/http/RequestTest.php   |  78 +++
 tests/lib/appframework/http/ResponseTest.php  | 119 ++++
 .../http/TemplateResponseTest.php             | 157 ++++++
 .../middleware/MiddlewareDispatcherTest.php   | 280 ++++++++++
 .../middleware/MiddlewareTest.php             |  82 +++
 .../security/SecurityMiddlewareTest.php       | 388 +++++++++++++
 .../lib/appframework/routing/RoutingTest.php  | 214 +++++++
 .../utility/MethodAnnotationReaderTest.php    |  58 ++
 37 files changed, 4963 insertions(+)
 create mode 100644 lib/appframework/app.php
 create mode 100644 lib/appframework/controller/controller.php
 create mode 100644 lib/appframework/core/api.php
 create mode 100644 lib/appframework/dependencyinjection/dicontainer.php
 create mode 100644 lib/appframework/http/dispatcher.php
 create mode 100644 lib/appframework/http/downloadresponse.php
 create mode 100644 lib/appframework/http/http.php
 create mode 100644 lib/appframework/http/jsonresponse.php
 create mode 100644 lib/appframework/http/redirectresponse.php
 create mode 100644 lib/appframework/http/request.php
 create mode 100644 lib/appframework/http/response.php
 create mode 100644 lib/appframework/http/templateresponse.php
 create mode 100644 lib/appframework/middleware/middleware.php
 create mode 100644 lib/appframework/middleware/middlewaredispatcher.php
 create mode 100644 lib/appframework/middleware/security/securityexception.php
 create mode 100644 lib/appframework/middleware/security/securitymiddleware.php
 create mode 100644 lib/appframework/routing/routeactionhandler.php
 create mode 100644 lib/appframework/routing/routeconfig.php
 create mode 100644 lib/appframework/utility/methodannotationreader.php
 create mode 100644 lib/appframework/utility/timefactory.php
 create mode 100644 tests/lib/appframework/AppTest.php
 create mode 100644 tests/lib/appframework/classloader.php
 create mode 100644 tests/lib/appframework/controller/ControllerTest.php
 create mode 100644 tests/lib/appframework/dependencyinjection/DIContainerTest.php
 create mode 100644 tests/lib/appframework/http/DispatcherTest.php
 create mode 100644 tests/lib/appframework/http/DownloadResponseTest.php
 create mode 100644 tests/lib/appframework/http/HttpTest.php
 create mode 100644 tests/lib/appframework/http/JSONResponseTest.php
 create mode 100644 tests/lib/appframework/http/RedirectResponseTest.php
 create mode 100644 tests/lib/appframework/http/RequestTest.php
 create mode 100644 tests/lib/appframework/http/ResponseTest.php
 create mode 100644 tests/lib/appframework/http/TemplateResponseTest.php
 create mode 100644 tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
 create mode 100644 tests/lib/appframework/middleware/MiddlewareTest.php
 create mode 100644 tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
 create mode 100644 tests/lib/appframework/routing/RoutingTest.php
 create mode 100644 tests/lib/appframework/utility/MethodAnnotationReaderTest.php

diff --git a/lib/appframework/app.php b/lib/appframework/app.php
new file mode 100644
index 0000000000..6224b858bb
--- /dev/null
+++ b/lib/appframework/app.php
@@ -0,0 +1,97 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework;
+
+use OC\AppFramework\DependencyInjection\DIContainer;
+
+
+/**
+ * Entry point for every request in your app. You can consider this as your
+ * public static void main() method
+ *
+ * Handles all the dependency injection, controllers and output flow
+ */
+class App {
+
+
+	/**
+	 * Shortcut for calling a controller method and printing the result
+	 * @param string $controllerName the name of the controller under which it is
+	 *                               stored in the DI container
+	 * @param string $methodName the method that you want to call
+	 * @param array $urlParams an array with variables extracted from the routes
+	 * @param DIContainer $container an instance of a pimple container.
+	 */
+	public static function main($controllerName, $methodName, array $urlParams,
+								DIContainer $container) {
+		$container['urlParams'] = $urlParams;
+		$controller = $container[$controllerName];
+
+		// initialize the dispatcher and run all the middleware before the controller
+		$dispatcher = $container['Dispatcher'];
+
+		list($httpHeaders, $responseHeaders, $output) =
+			$dispatcher->dispatch($controller, $methodName);
+
+		if(!is_null($httpHeaders)) {
+			header($httpHeaders);
+		}
+
+		foreach($responseHeaders as $name => $value) {
+			header($name . ': ' . $value);
+		}
+
+		if(!is_null($output)) {
+			header('Content-Length: ' . strlen($output));
+			print($output);
+		}
+
+	}
+
+	/**
+	 * Shortcut for calling a controller method and printing the result.
+	 * Similar to App:main except that no headers will be sent.
+	 * This should be used for example when registering sections via
+	 * \OC\AppFramework\Core\API::registerAdmin()
+	 *
+	 * @param string $controllerName the name of the controller under which it is
+	 *                               stored in the DI container
+	 * @param string $methodName the method that you want to call
+	 * @param array $urlParams an array with variables extracted from the routes
+	 * @param DIContainer $container an instance of a pimple container.
+	 */
+	public static function part($controllerName, $methodName, array $urlParams,
+								DIContainer $container){
+
+		$container['urlParams'] = $urlParams;
+		$controller = $container[$controllerName];
+
+		$dispatcher = $container['Dispatcher'];
+
+		list(, , $output) =  $dispatcher->dispatch($controller, $methodName);
+		return $output;
+	}
+
+}
diff --git a/lib/appframework/controller/controller.php b/lib/appframework/controller/controller.php
new file mode 100644
index 0000000000..3e8166050d
--- /dev/null
+++ b/lib/appframework/controller/controller.php
@@ -0,0 +1,154 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Controller;
+
+use OC\AppFramework\Http\TemplateResponse;
+use OC\AppFramework\Http\Request;
+use OC\AppFramework\Core\API;
+
+
+/**
+ * Base class to inherit your controllers from
+ */
+abstract class Controller {
+
+	/**
+	 * @var API instance of the api layer
+	 */
+	protected $api;
+
+	protected $request;
+
+	/**
+	 * @param API $api an api wrapper instance
+	 * @param Request $request an instance of the request
+	 */
+	public function __construct(API $api, Request $request){
+		$this->api = $api;
+		$this->request = $request;
+	}
+
+
+	/**
+	 * Lets you access post and get parameters by the index
+	 * @param string $key the key which you want to access in the URL Parameter
+	 *                     placeholder, $_POST or $_GET array.
+	 *                     The priority how they're returned is the following:
+	 *                     1. URL parameters
+	 *                     2. POST parameters
+	 *                     3. GET parameters
+	 * @param mixed $default If the key is not found, this value will be returned
+	 * @return mixed the content of the array
+	 */
+	public function params($key, $default=null){
+		return isset($this->request->parameters[$key])
+			? $this->request->parameters[$key]
+			: $default;
+	}
+
+
+	/**
+	 * Returns all params that were received, be it from the request
+	 * (as GET or POST) or throuh the URL by the route
+	 * @return array the array with all parameters
+	 */
+	public function getParams() {
+		return $this->request->parameters;
+	}
+
+
+	/**
+	 * Returns the method of the request
+	 * @return string the method of the request (POST, GET, etc)
+	 */
+	public function method() {
+		return $this->request->method;
+	}
+
+
+	/**
+	 * Shortcut for accessing an uploaded file through the $_FILES array
+	 * @param string $key the key that will be taken from the $_FILES array
+	 * @return array the file in the $_FILES element
+	 */
+	public function getUploadedFile($key) {
+		return isset($this->request->files[$key]) ? $this->request->files[$key] : null;
+	}
+
+
+	/**
+	 * Shortcut for getting env variables
+	 * @param string $key the key that will be taken from the $_ENV array
+	 * @return array the value in the $_ENV element
+	 */
+	public function env($key) {
+		return isset($this->request->env[$key]) ? $this->request->env[$key] : null;
+	}
+
+
+	/**
+	 * Shortcut for getting session variables
+	 * @param string $key the key that will be taken from the $_SESSION array
+	 * @return array the value in the $_SESSION element
+	 */
+	public function session($key) {
+		return isset($this->request->session[$key]) ? $this->request->session[$key] : null;
+	}
+
+
+	/**
+	 * Shortcut for getting cookie variables
+	 * @param string $key the key that will be taken from the $_COOKIE array
+	 * @return array the value in the $_COOKIE element
+	 */
+	public function cookie($key) {
+		return isset($this->request->cookies[$key]) ? $this->request->cookies[$key] : null;
+	}
+
+
+	/**
+	 * Shortcut for rendering a template
+	 * @param string $templateName the name of the template
+	 * @param array $params the template parameters in key => value structure
+	 * @param string $renderAs user renders a full page, blank only your template
+	 *                          admin an entry in the admin settings
+	 * @param array $headers set additional headers in name/value pairs
+	 * @return \OC\AppFramework\Http\TemplateResponse containing the page
+	 */
+	public function render($templateName, array $params=array(),
+							$renderAs='user', array $headers=array()){
+		$response = new TemplateResponse($this->api, $templateName);
+		$response->setParams($params);
+		$response->renderAs($renderAs);
+
+		foreach($headers as $name => $value){
+			$response->addHeader($name, $value);
+		}
+
+		return $response;
+	}
+
+
+}
diff --git a/lib/appframework/core/api.php b/lib/appframework/core/api.php
new file mode 100644
index 0000000000..eb8ee01e5d
--- /dev/null
+++ b/lib/appframework/core/api.php
@@ -0,0 +1,524 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Core;
+
+
+/**
+ * This is used to wrap the owncloud static api calls into an object to make the
+ * code better abstractable for use in the dependency injection container
+ *
+ * Should you find yourself in need for more methods, simply inherit from this
+ * class and add your methods
+ */
+class API {
+
+	private $appName;
+
+	/**
+	 * constructor
+	 * @param string $appName the name of your application
+	 */
+	public function __construct($appName){
+		$this->appName = $appName;
+	}
+
+
+	/**
+	 * used to return the appname of the set application
+	 * @return string the name of your application
+	 */
+	public function getAppName(){
+		return $this->appName;
+	}
+
+
+	/**
+	 * Creates a new navigation entry
+	 * @param array $entry containing: id, name, order, icon and href key
+	 */
+	public function addNavigationEntry(array $entry){
+		\OCP\App::addNavigationEntry($entry);
+	}
+
+
+	/**
+	 * Gets the userid of the current user
+	 * @return string the user id of the current user
+	 */
+	public function getUserId(){
+		return \OCP\User::getUser();
+	}
+
+
+	/**
+	 * Sets the current navigation entry to the currently running app
+	 */
+	public function activateNavigationEntry(){
+		\OCP\App::setActiveNavigationEntry($this->appName);
+	}
+
+
+	/**
+	 * Adds a new javascript file
+	 * @param string $scriptName the name of the javascript in js/ without the suffix
+	 * @param string $appName the name of the app, defaults to the current one
+	 */
+	public function addScript($scriptName, $appName=null){
+		if($appName === null){
+			$appName = $this->appName;
+		}
+		\OCP\Util::addScript($appName, $scriptName);
+	}
+
+
+	/**
+	 * Adds a new css file
+	 * @param string $styleName the name of the css file in css/without the suffix
+	 * @param string $appName the name of the app, defaults to the current one
+	 */
+	public function addStyle($styleName, $appName=null){
+		if($appName === null){
+			$appName = $this->appName;
+		}
+		\OCP\Util::addStyle($appName, $styleName);
+	}
+
+
+	/**
+	 * shorthand for addScript for files in the 3rdparty directory
+	 * @param string $name the name of the file without the suffix
+	 */
+	public function add3rdPartyScript($name){
+		\OCP\Util::addScript($this->appName . '/3rdparty', $name);
+	}
+
+
+	/**
+	 * shorthand for addStyle for files in the 3rdparty directory
+	 * @param string $name the name of the file without the suffix
+	 */
+	public function add3rdPartyStyle($name){
+		\OCP\Util::addStyle($this->appName . '/3rdparty', $name);
+	}
+
+	/**
+	 * Looks up a systemwide defined value
+	 * @param string $key the key of the value, under which it was saved
+	 * @return string the saved value
+	 */
+	public function getSystemValue($key){
+		return \OCP\Config::getSystemValue($key, '');
+	}
+
+
+	/**
+	 * Sets a new systemwide value
+	 * @param string $key the key of the value, under which will be saved
+	 * @param string $value the value that should be stored
+	 */
+	public function setSystemValue($key, $value){
+		return \OCP\Config::setSystemValue($key, $value);
+	}
+
+
+	/**
+	 * Looks up an appwide defined value
+	 * @param string $key the key of the value, under which it was saved
+	 * @return string the saved value
+	 */
+	public function getAppValue($key, $appName=null){
+		if($appName === null){
+			$appName = $this->appName;
+		}
+		return \OCP\Config::getAppValue($appName, $key, '');
+	}
+
+
+	/**
+	 * Writes a new appwide value
+	 * @param string $key the key of the value, under which will be saved
+	 * @param string $value the value that should be stored
+	 */
+	public function setAppValue($key, $value, $appName=null){
+		if($appName === null){
+			$appName = $this->appName;
+		}
+		return \OCP\Config::setAppValue($appName, $key, $value);
+	}
+
+
+
+	/**
+	 * Shortcut for setting a user defined value
+	 * @param string $key the key under which the value is being stored
+	 * @param string $value the value that you want to store
+	 * @param string $userId the userId of the user that we want to store the value under, defaults to the current one
+	 */
+	public function setUserValue($key, $value, $userId=null){
+		if($userId === null){
+			$userId = $this->getUserId();
+		}
+		\OCP\Config::setUserValue($userId, $this->appName, $key, $value);
+	}
+
+
+	/**
+	 * Shortcut for getting a user defined value
+	 * @param string $key the key under which the value is being stored
+	 * @param string $userId the userId of the user that we want to store the value under, defaults to the current one
+	 */
+	public function getUserValue($key, $userId=null){
+		if($userId === null){
+			$userId = $this->getUserId();
+		}
+		return \OCP\Config::getUserValue($userId, $this->appName, $key);
+	}
+
+
+	/**
+	 * Returns the translation object
+	 * @return \OC_L10N the translation object
+	 */
+	public function getTrans(){
+		# TODO: use public api
+		return \OC_L10N::get($this->appName);
+	}
+
+
+	/**
+	 * Used to abstract the owncloud database access away
+	 * @param string $sql the sql query with ? placeholder for params
+	 * @param int $limit the maximum number of rows
+	 * @param int $offset from which row we want to start
+	 * @return \OCP\DB a query object
+	 */
+	public function prepareQuery($sql, $limit=null, $offset=null){
+		return \OCP\DB::prepare($sql, $limit, $offset);
+	}
+
+
+	/**
+	 * Used to get the id of the just inserted element
+	 * @param string $tableName the name of the table where we inserted the item
+	 * @return int the id of the inserted element
+	 */
+	public function getInsertId($tableName){
+		return \OCP\DB::insertid($tableName);
+	}
+
+
+	/**
+	 * Returns the URL for a route
+	 * @param string $routeName the name of the route
+	 * @param array $arguments an array with arguments which will be filled into the url
+	 * @return string the url
+	 */
+	public function linkToRoute($routeName, $arguments=array()){
+		return \OCP\Util::linkToRoute($routeName, $arguments);
+	}
+
+
+	/**
+	 * Returns an URL for an image or file
+	 * @param string $file the name of the file
+	 * @param string $appName the name of the app, defaults to the current one
+	 */
+	public function linkTo($file, $appName=null){
+		if($appName === null){
+			$appName = $this->appName;
+		}
+		return \OCP\Util::linkTo($appName, $file);
+	}
+
+
+	/**
+	 * Returns the link to an image, like link to but only with prepending img/
+	 * @param string $file the name of the file
+	 * @param string $appName the name of the app, defaults to the current one
+	 */
+	public function imagePath($file, $appName=null){
+		if($appName === null){
+			$appName = $this->appName;
+		}
+		return \OCP\Util::imagePath($appName, $file);
+	}
+
+
+	/**
+	 * Makes an URL absolute
+	 * @param string $url the url
+	 * @return string the absolute url
+	 */
+	public function getAbsoluteURL($url){
+		# TODO: use public api
+		return \OC_Helper::makeURLAbsolute($url);
+	}
+
+
+	/**
+	 * links to a file
+	 * @param string $file the name of the file
+	 * @param string $appName the name of the app, defaults to the current one
+	 * @deprecated replaced with linkToRoute()
+	 * @return string the url
+	 */
+	public function linkToAbsolute($file, $appName=null){
+		if($appName === null){
+			$appName = $this->appName;
+		}
+		return \OCP\Util::linkToAbsolute($appName, $file);
+	}
+
+
+	/**
+	 * Checks if the current user is logged in
+	 * @return bool true if logged in
+	 */
+	public function isLoggedIn(){
+		return \OCP\User::isLoggedIn();
+	}
+
+
+	/**
+	 * Checks if a user is an admin
+	 * @param string $userId the id of the user
+	 * @return bool true if admin
+	 */
+	public function isAdminUser($userId){
+		# TODO: use public api
+		return \OC_User::isAdminUser($userId);
+	}
+
+
+	/**
+	 * Checks if a user is an subadmin
+	 * @param string $userId the id of the user
+	 * @return bool true if subadmin
+	 */
+	public function isSubAdminUser($userId){
+		# TODO: use public api
+		return \OC_SubAdmin::isSubAdmin($userId);
+	}
+
+
+	/**
+	 * Checks if the CSRF check was correct
+	 * @return bool true if CSRF check passed
+	 */
+	public function passesCSRFCheck(){
+		# TODO: use public api
+		return \OC_Util::isCallRegistered();
+	}
+
+
+	/**
+	 * Checks if an app is enabled
+	 * @param string $appName the name of an app
+	 * @return bool true if app is enabled
+	 */
+	public function isAppEnabled($appName){
+		return \OCP\App::isEnabled($appName);
+	}
+
+
+	/**
+	 * Writes a function into the error log
+	 * @param string $msg the error message to be logged
+	 * @param int $level the error level
+	 */
+	public function log($msg, $level=null){
+		switch($level){
+			case 'debug':
+				$level = \OCP\Util::DEBUG;
+				break;
+			case 'info':
+				$level = \OCP\Util::INFO;
+				break;
+			case 'warn':
+				$level = \OCP\Util::WARN;
+				break;
+			case 'fatal':
+				$level = \OCP\Util::FATAL;
+				break;
+			default:
+				$level = \OCP\Util::ERROR;
+				break;
+		}
+		\OCP\Util::writeLog($this->appName, $msg, $level);
+	}
+
+
+	/**
+	 * Returns a template
+	 * @param string $templateName the name of the template
+	 * @param string $renderAs how it should be rendered
+	 * @param string $appName the name of the app
+	 * @return \OCP\Template a new template
+	 */
+	public function getTemplate($templateName, $renderAs='user', $appName=null){
+		if($appName === null){
+			$appName = $this->appName;
+		}
+
+		if($renderAs === 'blank'){
+			return new \OCP\Template($appName, $templateName);
+		} else {
+			return new \OCP\Template($appName, $templateName, $renderAs);
+		}
+	}
+
+
+	/**
+	 * turns an owncloud path into a path on the filesystem
+	 * @param string path the path to the file on the oc filesystem
+	 * @return string the filepath in the filesystem
+	 */
+	public function getLocalFilePath($path){
+		# TODO: use public api
+		return \OC_Filesystem::getLocalFile($path);
+	}
+
+
+	/**
+	 * used to return and open a new eventsource
+	 * @return \OC_EventSource a new open EventSource class
+	 */
+	public function openEventSource(){
+		# TODO: use public api
+		return new \OC_EventSource();
+	}
+
+	/**
+	 * @brief connects a function to a hook
+	 * @param string $signalClass class name of emitter
+	 * @param string $signalName name of signal
+	 * @param string $slotClass class name of slot
+	 * @param string $slotName name of slot, in another word, this is the
+	 *               name of the method that will be called when registered
+	 *               signal is emitted.
+	 * @return bool, always true
+	 */
+	public function connectHook($signalClass, $signalName, $slotClass, $slotName) {
+		return \OCP\Util::connectHook($signalClass, $signalName, $slotClass, $slotName);
+	}
+
+	/**
+	 * @brief Emits a signal. To get data from the slot use references!
+	 * @param string $signalClass class name of emitter
+	 * @param string $signalName name of signal
+	 * @param array $params defautl: array() array with additional data
+	 * @return bool, true if slots exists or false if not
+	 */
+	public function emitHook($signalClass, $signalName, $params = array()) {
+		return  \OCP\Util::emitHook($signalClass, $signalName, $params);
+	}
+
+	/**
+	 * @brief clear hooks
+	 * @param string $signalClass
+	 * @param string $signalName
+	 */
+	public function clearHook($signalClass=false, $signalName=false) {
+		if ($signalClass) {
+			\OC_Hook::clear($signalClass, $signalName);
+		}
+	}
+
+	/**
+	 * Gets the content of an URL by using CURL or a fallback if it is not
+	 * installed
+	 * @param string $url the url that should be fetched
+	 * @return string the content of the webpage
+	 */
+	public function getUrlContent($url) {
+		return \OC_Util::getUrlContent($url);
+	}
+
+	/**
+	 * Register a backgroundjob task
+	 * @param string $className full namespace and class name of the class
+	 * @param string $methodName the name of the static method that should be
+	 * called
+	 */
+	public function addRegularTask($className, $methodName) {
+		\OCP\Backgroundjob::addRegularTask($className, $methodName);
+	}
+
+	/**
+	 * Tells ownCloud to include a template in the admin overview
+	 * @param string $mainPath the path to the main php file without the php
+	 * suffix, relative to your apps directory! not the template directory
+	 * @param string $appName the name of the app, defaults to the current one
+	 */
+	public function registerAdmin($mainPath, $appName=null) {
+		if($appName === null){
+			$appName = $this->appName;
+		}
+
+		\OCP\App::registerAdmin($appName, $mainPath);
+	}
+
+	/**
+	 * Do a user login
+	 * @param string $user the username
+	 * @param string $password the password
+	 * @return bool true if successful
+	 */
+	public function login($user, $password) {
+		return \OC_User::login($user, $password);
+	}
+
+	/**
+	 * @brief Loggs the user out including all the session data
+	 * Logout, destroys session
+	 */
+	public function logout() {
+		return \OCP\User::logout();
+	}
+
+	/**
+	 * get the filesystem info
+	 *
+	 * @param string $path
+	 * @return array with the following keys:
+	 * - size
+	 * - mtime
+	 * - mimetype
+	 * - encrypted
+	 * - versioned
+	 */
+	public function getFileInfo($path) {
+		return \OC\Files\Filesystem::getFileInfo($path);
+	}
+
+	/**
+	 * get the view
+	 *
+	 * @return OC\Files\View instance
+	 */
+	public function getView() {
+		return \OC\Files\Filesystem::getView();
+	}
+}
diff --git a/lib/appframework/dependencyinjection/dicontainer.php b/lib/appframework/dependencyinjection/dicontainer.php
new file mode 100644
index 0000000000..34f64e72cb
--- /dev/null
+++ b/lib/appframework/dependencyinjection/dicontainer.php
@@ -0,0 +1,125 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\DependencyInjection;
+
+use OC\AppFramework\Http\Http;
+use OC\AppFramework\Http\Request;
+use OC\AppFramework\Http\Dispatcher;
+use OC\AppFramework\Core\API;
+use OC\AppFramework\Middleware\MiddlewareDispatcher;
+use OC\AppFramework\Middleware\Http\HttpMiddleware;
+use OC\AppFramework\Middleware\Security\SecurityMiddleware;
+use OC\AppFramework\Utility\TimeFactory;
+
+// register 3rdparty autoloaders
+require_once __DIR__ . '/../../../../3rdparty/Pimple/Pimple.php';
+
+
+/**
+ * This class extends Pimple (http://pimple.sensiolabs.org/) for reusability
+ * To use this class, extend your own container from this. Should you require it
+ * you can overwrite the dependencies with your own classes by simply redefining
+ * a dependency
+ */
+class DIContainer extends \Pimple {
+
+
+	/**
+	 * Put your class dependencies in here
+	 * @param string $appName the name of the app
+	 */
+	public function __construct($appName){
+
+		$this['AppName'] = $appName;
+
+		$this['API'] = $this->share(function($c){
+			return new API($c['AppName']);
+		});
+
+		/**
+		 * Http
+		 */
+		$this['Request'] = $this->share(function($c) {
+			$params = json_decode(file_get_contents('php://input'), true);
+			$params = is_array($params) ? $params: array();
+
+			return new Request(
+				array(
+					'get' => $_GET,
+					'post' => $_POST,
+					'files' => $_FILES,
+					'server' => $_SERVER,
+					'env' => $_ENV,
+					'session' => $_SESSION,
+					'cookies' => $_COOKIE,
+					'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD']))
+							? $_SERVER['REQUEST_METHOD']
+							: null,
+					'params' => $params,
+					'urlParams' => $c['urlParams']
+				)
+			);
+		});
+
+		$this['Protocol'] = $this->share(function($c){
+			if(isset($_SERVER['SERVER_PROTOCOL'])) {
+				return new Http($_SERVER, $_SERVER['SERVER_PROTOCOL']);
+			} else {
+				return new Http($_SERVER);
+			}
+		});
+
+		$this['Dispatcher'] = $this->share(function($c) {
+			return new Dispatcher($c['Protocol'], $c['MiddlewareDispatcher']);
+		});
+
+
+		/**
+		 * Middleware
+		 */
+		$this['SecurityMiddleware'] = $this->share(function($c){
+			return new SecurityMiddleware($c['API'], $c['Request']);
+		});
+
+		$this['MiddlewareDispatcher'] = $this->share(function($c){
+			$dispatcher = new MiddlewareDispatcher();
+			$dispatcher->registerMiddleware($c['SecurityMiddleware']);
+
+			return $dispatcher;
+		});
+
+
+		/**
+		 * Utilities
+		 */
+		$this['TimeFactory'] = $this->share(function($c){
+			return new TimeFactory();
+		});
+
+
+	}
+
+
+}
diff --git a/lib/appframework/http/dispatcher.php b/lib/appframework/http/dispatcher.php
new file mode 100644
index 0000000000..ab5644274f
--- /dev/null
+++ b/lib/appframework/http/dispatcher.php
@@ -0,0 +1,98 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt, Thomas Tanghus, Bart Visscher
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Http;
+
+use \OC\AppFramework\Controller\Controller;
+use \OC\AppFramework\Middleware\MiddlewareDispatcher;
+
+
+/**
+ * Class to dispatch the request to the middleware disptacher
+ */
+class Dispatcher {
+
+	private $middlewareDispatcher;
+	private $protocol;
+
+
+	/**
+	 * @param Http $protocol the http protocol with contains all status headers
+	 * @param MiddlewareDispatcher $middlewareDispatcher the dispatcher which
+	 * runs the middleware
+	 */
+	public function __construct(Http $protocol,
+	                            MiddlewareDispatcher $middlewareDispatcher) {
+		$this->protocol = $protocol;
+		$this->middlewareDispatcher = $middlewareDispatcher;
+	}
+
+
+	/**
+	 * Handles a request and calls the dispatcher on the controller
+	 * @param Controller $controller the controller which will be called
+	 * @param string $methodName the method name which will be called on
+	 * the controller
+	 * @return array $array[0] contains a string with the http main header,
+	 * $array[1] contains headers in the form: $key => value, $array[2] contains
+	 * the response output
+	 */
+	public function dispatch(Controller $controller, $methodName) {
+		$out = array(null, array(), null);
+
+		try {
+
+			$this->middlewareDispatcher->beforeController($controller,
+				$methodName);
+			$response = $controller->$methodName();
+
+
+		// if an exception appears, the middleware checks if it can handle the
+		// exception and creates a response. If no response is created, it is
+		// assumed that theres no middleware who can handle it and the error is
+		// thrown again
+		} catch(\Exception $exception){
+			$response = $this->middlewareDispatcher->afterException(
+				$controller, $methodName, $exception);
+		}
+
+		$response = $this->middlewareDispatcher->afterController(
+			$controller, $methodName, $response);
+
+		// get the output which should be printed and run the after output
+		// middleware to modify the response
+		$output = $response->render();
+		$out[2] = $this->middlewareDispatcher->beforeOutput(
+			$controller, $methodName, $output);
+
+		// depending on the cache object the headers need to be changed
+		$out[0] = $this->protocol->getStatusHeader($response->getStatus(),
+			$response->getLastModified(), $response->getETag());
+		$out[1] = $response->getHeaders();
+
+		return $out;
+	}
+
+
+}
diff --git a/lib/appframework/http/downloadresponse.php b/lib/appframework/http/downloadresponse.php
new file mode 100644
index 0000000000..5a0db325fe
--- /dev/null
+++ b/lib/appframework/http/downloadresponse.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Http;
+
+
+/**
+ * Prompts the user to download the a file
+ */
+abstract class DownloadResponse extends Response {
+
+	private $content;
+	private $filename;
+	private $contentType;
+
+	/**
+	 * Creates a response that prompts the user to download the file
+	 * @param string $filename the name that the downloaded file should have
+	 * @param string $contentType the mimetype that the downloaded file should have
+	 */
+	public function __construct($filename, $contentType) {
+		$this->filename = $filename;
+		$this->contentType = $contentType;
+
+		$this->addHeader('Content-Disposition', 'attachment; filename="' . $filename . '"');
+		$this->addHeader('Content-Type', $contentType);
+	}
+
+
+}
diff --git a/lib/appframework/http/http.php b/lib/appframework/http/http.php
new file mode 100644
index 0000000000..73f32d13b3
--- /dev/null
+++ b/lib/appframework/http/http.php
@@ -0,0 +1,208 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt, Thomas Tanghus, Bart Visscher
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Http;
+
+
+class Http {
+
+	const STATUS_CONTINUE = 100;
+	const STATUS_SWITCHING_PROTOCOLS = 101;
+	const STATUS_PROCESSING = 102;
+	const STATUS_OK = 200;
+	const STATUS_CREATED = 201;
+	const STATUS_ACCEPTED = 202;
+	const STATUS_NON_AUTHORATIVE_INFORMATION = 203;
+	const STATUS_NO_CONTENT = 204;
+	const STATUS_RESET_CONTENT = 205;
+	const STATUS_PARTIAL_CONTENT = 206;
+	const STATUS_MULTI_STATUS = 207;
+	const STATUS_ALREADY_REPORTED = 208;
+	const STATUS_IM_USED = 226;
+	const STATUS_MULTIPLE_CHOICES = 300;
+	const STATUS_MOVED_PERMANENTLY = 301;
+	const STATUS_FOUND = 302;
+	const STATUS_SEE_OTHER = 303;
+	const STATUS_NOT_MODIFIED = 304;
+	const STATUS_USE_PROXY = 305;
+	const STATUS_RESERVED = 306;
+	const STATUS_TEMPORARY_REDIRECT = 307;
+	const STATUS_BAD_REQUEST = 400;
+	const STATUS_UNAUTHORIZED = 401;
+	const STATUS_PAYMENT_REQUIRED = 402;
+	const STATUS_FORBIDDEN = 403;
+	const STATUS_NOT_FOUND = 404;
+	const STATUS_METHOD_NOT_ALLOWED = 405;
+	const STATUS_NOT_ACCEPTABLE = 406;
+	const STATUS_PROXY_AUTHENTICATION_REQUIRED = 407;
+	const STATUS_REQUEST_TIMEOUT = 408;
+	const STATUS_CONFLICT = 409;
+	const STATUS_GONE = 410;
+	const STATUS_LENGTH_REQUIRED = 411;
+	const STATUS_PRECONDITION_FAILED = 412;
+	const STATUS_REQUEST_ENTITY_TOO_LARGE = 413;
+	const STATUS_REQUEST_URI_TOO_LONG = 414;
+	const STATUS_UNSUPPORTED_MEDIA_TYPE = 415;
+	const STATUS_REQUEST_RANGE_NOT_SATISFIABLE = 416;
+	const STATUS_EXPECTATION_FAILED = 417;
+	const STATUS_IM_A_TEAPOT = 418;
+	const STATUS_UNPROCESSABLE_ENTITY = 422;
+	const STATUS_LOCKED = 423;
+	const STATUS_FAILED_DEPENDENCY = 424;
+	const STATUS_UPGRADE_REQUIRED = 426;
+	const STATUS_PRECONDITION_REQUIRED = 428;
+	const STATUS_TOO_MANY_REQUESTS = 429;
+	const STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE = 431;
+	const STATUS_INTERNAL_SERVER_ERROR = 500;
+	const STATUS_NOT_IMPLEMENTED = 501;
+	const STATUS_BAD_GATEWAY = 502;
+	const STATUS_SERVICE_UNAVAILABLE = 503;
+	const STATUS_GATEWAY_TIMEOUT = 504;
+	const STATUS_HTTP_VERSION_NOT_SUPPORTED = 505;
+	const STATUS_VARIANT_ALSO_NEGOTIATES = 506;
+	const STATUS_INSUFFICIENT_STORAGE = 507;
+	const STATUS_LOOP_DETECTED = 508;
+	const STATUS_BANDWIDTH_LIMIT_EXCEEDED = 509;
+	const STATUS_NOT_EXTENDED = 510;
+	const STATUS_NETWORK_AUTHENTICATION_REQUIRED = 511;
+
+	private $server;
+	private $protocolVersion;
+	protected $headers;
+
+	/**
+	 * @param $_SERVER $server
+	 * @param string $protocolVersion the http version to use defaults to HTTP/1.1
+	 */
+	public function __construct($server, $protocolVersion='HTTP/1.1') {
+		$this->server = $server;
+		$this->protocolVersion = $protocolVersion;
+
+		$this->headers = array(
+			self::STATUS_CONTINUE => 'Continue',
+			self::STATUS_SWITCHING_PROTOCOLS => 'Switching Protocols',
+			self::STATUS_PROCESSING => 'Processing',
+			self::STATUS_OK => 'OK',
+			self::STATUS_CREATED => 'Created',
+			self::STATUS_ACCEPTED => 'Accepted',
+			self::STATUS_NON_AUTHORATIVE_INFORMATION => 'Non-Authorative Information',
+			self::STATUS_NO_CONTENT => 'No Content',
+			self::STATUS_RESET_CONTENT => 'Reset Content',
+			self::STATUS_PARTIAL_CONTENT => 'Partial Content',
+			self::STATUS_MULTI_STATUS => 'Multi-Status', // RFC 4918
+			self::STATUS_ALREADY_REPORTED => 'Already Reported', // RFC 5842
+			self::STATUS_IM_USED => 'IM Used', // RFC 3229
+			self::STATUS_MULTIPLE_CHOICES => 'Multiple Choices',
+			self::STATUS_MOVED_PERMANENTLY => 'Moved Permanently',
+			self::STATUS_FOUND => 'Found',
+			self::STATUS_SEE_OTHER => 'See Other',
+			self::STATUS_NOT_MODIFIED => 'Not Modified',
+			self::STATUS_USE_PROXY => 'Use Proxy',
+			self::STATUS_RESERVED => 'Reserved',
+			self::STATUS_TEMPORARY_REDIRECT => 'Temporary Redirect',
+			self::STATUS_BAD_REQUEST => 'Bad request',
+			self::STATUS_UNAUTHORIZED => 'Unauthorized',
+			self::STATUS_PAYMENT_REQUIRED => 'Payment Required',
+			self::STATUS_FORBIDDEN => 'Forbidden',
+			self::STATUS_NOT_FOUND => 'Not Found',
+			self::STATUS_METHOD_NOT_ALLOWED => 'Method Not Allowed',
+			self::STATUS_NOT_ACCEPTABLE => 'Not Acceptable',
+			self::STATUS_PROXY_AUTHENTICATION_REQUIRED => 'Proxy Authentication Required',
+			self::STATUS_REQUEST_TIMEOUT => 'Request Timeout',
+			self::STATUS_CONFLICT => 'Conflict',
+			self::STATUS_GONE => 'Gone',
+			self::STATUS_LENGTH_REQUIRED => 'Length Required',
+			self::STATUS_PRECONDITION_FAILED => 'Precondition failed',
+			self::STATUS_REQUEST_ENTITY_TOO_LARGE => 'Request Entity Too Large',
+			self::STATUS_REQUEST_URI_TOO_LONG => 'Request-URI Too Long',
+			self::STATUS_UNSUPPORTED_MEDIA_TYPE => 'Unsupported Media Type',
+			self::STATUS_REQUEST_RANGE_NOT_SATISFIABLE => 'Requested Range Not Satisfiable',
+			self::STATUS_EXPECTATION_FAILED => 'Expectation Failed',
+			self::STATUS_IM_A_TEAPOT => 'I\'m a teapot', // RFC 2324
+			self::STATUS_UNPROCESSABLE_ENTITY => 'Unprocessable Entity', // RFC 4918
+			self::STATUS_LOCKED => 'Locked', // RFC 4918
+			self::STATUS_FAILED_DEPENDENCY => 'Failed Dependency', // RFC 4918
+			self::STATUS_UPGRADE_REQUIRED => 'Upgrade required',
+			self::STATUS_PRECONDITION_REQUIRED => 'Precondition required', // draft-nottingham-http-new-status
+			self::STATUS_TOO_MANY_REQUESTS => 'Too Many Requests', // draft-nottingham-http-new-status
+			self::STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE => 'Request Header Fields Too Large', // draft-nottingham-http-new-status
+			self::STATUS_INTERNAL_SERVER_ERROR => 'Internal Server Error',
+			self::STATUS_NOT_IMPLEMENTED => 'Not Implemented',
+			self::STATUS_BAD_GATEWAY => 'Bad Gateway',
+			self::STATUS_SERVICE_UNAVAILABLE => 'Service Unavailable',
+			self::STATUS_GATEWAY_TIMEOUT => 'Gateway Timeout',
+			self::STATUS_HTTP_VERSION_NOT_SUPPORTED => 'HTTP Version not supported',
+			self::STATUS_VARIANT_ALSO_NEGOTIATES => 'Variant Also Negotiates',
+			self::STATUS_INSUFFICIENT_STORAGE => 'Insufficient Storage', // RFC 4918
+			self::STATUS_LOOP_DETECTED => 'Loop Detected', // RFC 5842
+			self::STATUS_BANDWIDTH_LIMIT_EXCEEDED => 'Bandwidth Limit Exceeded', // non-standard
+			self::STATUS_NOT_EXTENDED => 'Not extended',
+			self::STATUS_NETWORK_AUTHENTICATION_REQUIRED => 'Network Authentication Required', // draft-nottingham-http-new-status
+		);
+	}
+
+
+	/**
+	 * Gets the correct header
+	 * @param Http::CONSTANT $status the constant from the Http class
+	 * @param \DateTime $lastModified formatted last modified date
+	 * @param string $Etag the etag
+	 */
+	public function getStatusHeader($status, \DateTime $lastModified=null, 
+	                                $ETag=null) {
+
+		if(!is_null($lastModified)) {
+			$lastModified = $lastModified->format(\DateTime::RFC2822);
+		}
+
+		// if etag or lastmodified have not changed, return a not modified
+		if ((isset($this->server['HTTP_IF_NONE_MATCH'])
+			&& trim($this->server['HTTP_IF_NONE_MATCH']) === $ETag) 
+
+			||
+
+			(isset($this->server['HTTP_IF_MODIFIED_SINCE'])
+			&& trim($this->server['HTTP_IF_MODIFIED_SINCE']) === 
+				$lastModified)) {
+
+			$status = self::STATUS_NOT_MODIFIED;
+		}
+
+		// we have one change currently for the http 1.0 header that differs
+		// from 1.1: STATUS_TEMPORARY_REDIRECT should be STATUS_FOUND
+		// if this differs any more, we want to create childclasses for this
+		if($status === self::STATUS_TEMPORARY_REDIRECT 
+			&& $this->protocolVersion === 'HTTP/1.0') {
+
+			$status = self::STATUS_FOUND;
+		}
+
+		return $this->protocolVersion . ' ' . $status . ' ' . 
+			$this->headers[$status];
+	}
+
+
+}
+
+
diff --git a/lib/appframework/http/jsonresponse.php b/lib/appframework/http/jsonresponse.php
new file mode 100644
index 0000000000..750f8a2ad1
--- /dev/null
+++ b/lib/appframework/http/jsonresponse.php
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Http;
+
+
+/**
+ * A renderer for JSON calls
+ */
+class JSONResponse extends Response {
+
+	protected $data;
+
+
+	/**
+	 * @param array|object $data the object or array that should be transformed
+	 * @param int $statusCode the Http status code, defaults to 200
+	 */
+	public function __construct($data=array(), $statusCode=Http::STATUS_OK) {
+		$this->data = $data;
+		$this->setStatus($statusCode);
+		$this->addHeader('X-Content-Type-Options', 'nosniff');
+		$this->addHeader('Content-type', 'application/json; charset=utf-8');
+	}
+
+
+	/**
+	 * Returns the rendered json
+	 * @return string the rendered json
+	 */
+	public function render(){
+		return json_encode($this->data);
+	}
+
+	/**
+	 * Sets values in the data json array
+	 * @param array|object $params an array or object which will be transformed
+	 *                             to JSON
+	 */
+	public function setData($data){
+		$this->data = $data;
+	}
+
+
+	/**
+	 * Used to get the set parameters
+	 * @return array the data
+	 */
+	public function getData(){
+		return $this->data;
+	}
+
+}
diff --git a/lib/appframework/http/redirectresponse.php b/lib/appframework/http/redirectresponse.php
new file mode 100644
index 0000000000..727e0fb642
--- /dev/null
+++ b/lib/appframework/http/redirectresponse.php
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Http;
+
+
+/**
+ * Redirects to a different URL
+ */
+class RedirectResponse extends Response {
+
+	private $redirectURL;
+
+	/**
+	 * Creates a response that redirects to a url
+	 * @param string $redirectURL the url to redirect to
+	 */
+	public function __construct($redirectURL) {
+		$this->redirectURL = $redirectURL;
+		$this->setStatus(Http::STATUS_TEMPORARY_REDIRECT);
+		$this->addHeader('Location', $redirectURL);
+	}
+
+
+	/**
+	 * @return string the url to redirect
+	 */
+	public function getRedirectURL() {
+		return $this->redirectURL;
+	}
+
+
+}
diff --git a/lib/appframework/http/request.php b/lib/appframework/http/request.php
new file mode 100644
index 0000000000..7d024c8605
--- /dev/null
+++ b/lib/appframework/http/request.php
@@ -0,0 +1,217 @@
+<?php
+/**
+ * ownCloud - Request
+ *
+ * @author Thomas Tanghus
+ * @copyright 2013 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/>.
+ *
+ */
+
+namespace OC\AppFramework\Http;
+
+/**
+ * Class for accessing variables in the request.
+ * This class provides an immutable object with request variables.
+ */
+
+class Request implements \ArrayAccess, \Countable {
+
+	protected $items = array();
+	protected $allowedKeys = array(
+		'get', 
+		'post', 
+		'files', 
+		'server', 
+		'env', 
+		'session', 
+		'cookies', 
+		'urlParams', 
+		'params', 
+		'parameters', 
+		'method'
+	);
+
+	/**
+	 * @param array $vars An associative array with the following optional values:
+	 * @param array 'params' the parsed json array
+	 * @param array 'urlParams' the parameters which were matched from the URL
+	 * @param array 'get' the $_GET array
+	 * @param array 'post' the $_POST array
+	 * @param array 'files' the $_FILES array
+	 * @param array 'server' the $_SERVER array
+	 * @param array 'env' the $_ENV array
+	 * @param array 'session' the $_SESSION array
+	 * @param array 'cookies' the $_COOKIE array
+	 * @param string 'method' the request method (GET, POST etc)
+	 * @see http://www.php.net/manual/en/reserved.variables.php
+	 */
+	public function __construct(array $vars=array()) {
+
+		foreach($this->allowedKeys as $name) {
+			$this->items[$name] = isset($vars[$name]) 
+				? $vars[$name] 
+				: array();
+		}
+
+		$this->items['parameters'] = array_merge(
+			$this->items['params'],
+			$this->items['get'],
+			$this->items['post'],
+			$this->items['urlParams']
+		);
+
+	}
+
+	// Countable method.
+	public function count() {
+		return count(array_keys($this->items['parameters']));
+	}
+
+	/**
+	* ArrayAccess methods
+	*
+	* Gives access to the combined GET, POST and urlParams arrays
+	*
+	* Examples:
+	*
+	* $var = $request['myvar'];
+	*
+	* or
+	*
+	* if(!isset($request['myvar']) {
+	* 	// Do something
+	* }
+	*
+	* $request['myvar'] = 'something'; // This throws an exception.
+	*
+	* @param string $offset The key to lookup
+	* @return string|null
+	*/
+	public function offsetExists($offset) {
+		return isset($this->items['parameters'][$offset]);
+	}
+
+	/**
+	* @see offsetExists
+	*/
+	public function offsetGet($offset) {
+		return isset($this->items['parameters'][$offset])
+			? $this->items['parameters'][$offset]
+			: null;
+	}
+
+	/**
+	* @see offsetExists
+	*/
+	public function offsetSet($offset, $value) {
+		throw new \RuntimeException('You cannot change the contents of the request object');
+	}
+
+	/**
+	* @see offsetExists
+	*/
+	public function offsetUnset($offset) {
+		throw new \RuntimeException('You cannot change the contents of the request object');
+	}
+
+	// Magic property accessors
+	public function __set($name, $value) {
+		throw new \RuntimeException('You cannot change the contents of the request object');
+	}
+
+	/**
+	* Access request variables by method and name.
+	* Examples:
+	*
+	* $request->post['myvar']; // Only look for POST variables
+	* $request->myvar; or $request->{'myvar'}; or $request->{$myvar}
+	* Looks in the combined GET, POST and urlParams array.
+	*
+	* if($request->method !== 'POST') {
+	* 	throw new Exception('This function can only be invoked using POST');
+	* }
+	*
+	* @param string $name The key to look for.
+	* @return mixed|null
+	*/
+	public function __get($name) {
+		switch($name) {
+			case 'get':
+			case 'post':
+			case 'files':
+			case 'server':
+			case 'env':
+			case 'session':
+			case 'cookies':
+			case 'parameters':
+			case 'params':
+			case 'urlParams':
+				return isset($this->items[$name])
+					? $this->items[$name]
+					: null;
+				break;
+			case 'method':
+				return $this->items['method'];
+				break;
+			default;
+				return isset($this[$name]) 
+					? $this[$name] 
+					: null;
+				break;
+		}
+	}
+
+
+	public function __isset($name) {
+		return isset($this->items['parameters'][$name]);
+	}
+
+
+	public function __unset($id) {
+		throw new \RunTimeException('You cannot change the contents of the request object');
+	}
+
+	/**
+	 * Returns the value for a specific http header.
+	 *
+	 * This method returns null if the header did not exist.
+	 *
+	 * @param string $name
+	 * @return string
+	 */
+	public function getHeader($name) {
+
+		$name = strtoupper(str_replace(array('-'),array('_'),$name));
+		if (isset($this->server['HTTP_' . $name])) {
+			return $this->server['HTTP_' . $name];
+		}
+
+		// There's a few headers that seem to end up in the top-level
+		// server array.
+		switch($name) {
+			case 'CONTENT_TYPE' :
+			case 'CONTENT_LENGTH' :
+				if (isset($this->server[$name])) {
+					return $this->server[$name];
+				}
+				break;
+
+		}
+
+		return null;
+	}
+
+}
diff --git a/lib/appframework/http/response.php b/lib/appframework/http/response.php
new file mode 100644
index 0000000000..50778105f2
--- /dev/null
+++ b/lib/appframework/http/response.php
@@ -0,0 +1,169 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt, Thomas Tanghus, Bart Visscher
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Http;
+
+
+/**
+ * Base class for responses. Also used to just send headers
+ */
+class Response {
+
+	/**
+	 * @var array default headers
+	 */
+	private $headers = array(
+		'Cache-Control' => 'no-cache, must-revalidate'
+	);
+
+
+	/**
+	 * @var string
+	 */
+	private $status = Http::STATUS_OK;
+
+
+	/**
+	 * @var \DateTime
+	 */
+	private $lastModified;
+
+
+	/**
+	 * @var string
+	 */
+	private $ETag;
+
+
+	/**
+	 * Caches the response
+	 * @param int $cacheSeconds the amount of seconds that should be cached
+	 * if 0 then caching will be disabled
+	 */
+	public function cacheFor($cacheSeconds) {
+
+		if($cacheSeconds > 0) {
+			$this->addHeader('Cache-Control', 'max-age=' . $cacheSeconds . 
+				', must-revalidate');
+		} else {
+			$this->addHeader('Cache-Control', 'no-cache, must-revalidate');
+		}
+
+	}
+
+
+	/**
+	 * Adds a new header to the response that will be called before the render
+	 * function
+	 * @param string $name The name of the HTTP header
+	 * @param string $value The value, null will delete it
+	 */
+	public function addHeader($name, $value) {
+		if(is_null($value)) {
+			unset($this->headers[$name]);
+		} else {
+			$this->headers[$name] = $value;
+		}
+	}
+
+
+	/**
+	 * Returns the set headers
+	 * @return array the headers
+	 */
+	public function getHeaders() {
+		$mergeWith = array();
+		
+		if($this->lastModified) {
+			$mergeWith['Last-Modified'] = 
+				$this->lastModified->format(\DateTime::RFC2822);
+		}
+
+		if($this->ETag) {
+			$mergeWith['ETag'] = '"' . $this->ETag . '"';
+		}
+			
+		return array_merge($mergeWith, $this->headers);
+	}
+
+
+	/**
+	 * By default renders no output
+	 * @return null
+	 */
+	public function render() {
+		return null;
+	}
+
+
+	/**
+	* Set response status
+	* @param int $status a HTTP status code, see also the STATUS constants
+	*/
+	public function setStatus($status) {
+		$this->status = $status;
+	}
+
+
+	/**
+	 * Get response status
+	 */
+	public function getStatus() {
+		return $this->status;
+	}
+
+
+	/**
+	 * @return string the etag
+	 */
+	public function getETag() {
+		return $this->ETag;
+	}
+
+
+	/**
+	 * @return string RFC2822 formatted last modified date
+	 */
+	public function getLastModified() {
+		return $this->lastModified;
+	}
+
+
+	/**
+	 * @param string $ETag
+	 */
+	public function setETag($ETag) {
+		$this->ETag = $ETag;
+	}
+
+
+	/**
+	 * @param \DateTime $lastModified
+	 */
+	public function setLastModified($lastModified) {
+		$this->lastModified = $lastModified;
+	}
+
+
+}
diff --git a/lib/appframework/http/templateresponse.php b/lib/appframework/http/templateresponse.php
new file mode 100644
index 0000000000..0a32da4b1b
--- /dev/null
+++ b/lib/appframework/http/templateresponse.php
@@ -0,0 +1,126 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Http;
+
+use OC\AppFramework\Core\API;
+
+
+/**
+ * Response for a normal template
+ */
+class TemplateResponse extends Response {
+
+	protected $templateName;
+	protected $params;
+	protected $api;
+	protected $renderAs;
+	protected $appName;
+
+	/**
+	 * @param API $api an API instance
+	 * @param string $templateName the name of the template
+	 * @param string $appName optional if you want to include a template from
+	 *                        a different app
+	 */
+	public function __construct(API $api, $templateName, $appName=null) {
+		$this->templateName = $templateName;
+		$this->appName = $appName;
+		$this->api = $api;
+		$this->params = array();
+		$this->renderAs = 'user';
+	}
+
+
+	/**
+	 * Sets template parameters
+	 * @param array $params an array with key => value structure which sets template
+	 *                      variables
+	 */
+	public function setParams(array $params){
+		$this->params = $params;
+	}
+
+
+	/**
+	 * Used for accessing the set parameters
+	 * @return array the params
+	 */
+	public function getParams(){
+		return $this->params;
+	}
+
+
+	/**
+	 * Used for accessing the name of the set template
+	 * @return string the name of the used template
+	 */
+	public function getTemplateName(){
+		return $this->templateName;
+	}
+
+
+	/**
+	 * Sets the template page
+	 * @param string $renderAs admin, user or blank. Admin also prints the admin
+	 *                         settings header and footer, user renders the normal
+	 *                         normal page including footer and header and blank
+	 *                         just renders the plain template
+	 */
+	public function renderAs($renderAs){
+		$this->renderAs = $renderAs;
+	}
+
+
+	/**
+	 * Returns the set renderAs
+	 * @return string the renderAs value
+	 */
+	public function getRenderAs(){
+		return $this->renderAs;
+	}
+
+
+	/**
+	 * Returns the rendered html
+	 * @return string the rendered html
+	 */
+	public function render(){
+
+		if($this->appName !== null){
+			$appName = $this->appName;
+		} else {
+			$appName = $this->api->getAppName();
+		}
+
+		$template = $this->api->getTemplate($this->templateName, $this->renderAs, $appName);
+
+		foreach($this->params as $key => $value){
+			$template->assign($key, $value);
+		}
+
+		return $template->fetchPage();
+	}
+
+}
diff --git a/lib/appframework/middleware/middleware.php b/lib/appframework/middleware/middleware.php
new file mode 100644
index 0000000000..4df8849046
--- /dev/null
+++ b/lib/appframework/middleware/middleware.php
@@ -0,0 +1,100 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Middleware;
+
+use OC\AppFramework\Http\Response;
+
+
+/**
+ * Middleware is used to provide hooks before or after controller methods and
+ * deal with possible exceptions raised in the controller methods.
+ * They're modeled after Django's middleware system:
+ * https://docs.djangoproject.com/en/dev/topics/http/middleware/
+ */
+abstract class Middleware {
+
+
+	/**
+	 * This is being run in normal order before the controller is being
+	 * called which allows several modifications and checks
+	 *
+	 * @param Controller $controller the controller that is being called
+	 * @param string $methodName the name of the method that will be called on
+	 *                           the controller
+	 */
+	public function beforeController($controller, $methodName){
+
+	}
+
+
+	/**
+	 * This is being run when either the beforeController method or the
+	 * controller method itself is throwing an exception. The middleware is
+	 * asked in reverse order to handle the exception and to return a response.
+	 * If the response is null, it is assumed that the exception could not be
+	 * handled and the error will be thrown again
+	 *
+	 * @param Controller $controller the controller that is being called
+	 * @param string $methodName the name of the method that will be called on
+	 *                           the controller
+	 * @param \Exception $exception the thrown exception
+	 * @throws \Exception the passed in exception if it cant handle it
+	 * @return Response a Response object in case that the exception was handled
+	 */
+	public function afterException($controller, $methodName, \Exception $exception){
+		throw $exception;
+	}
+
+
+	/**
+	 * This is being run after a successful controllermethod call and allows
+	 * the manipulation of a Response object. The middleware is run in reverse order
+	 *
+	 * @param Controller $controller the controller that is being called
+	 * @param string $methodName the name of the method that will be called on
+	 *                           the controller
+	 * @param Response $response the generated response from the controller
+	 * @return Response a Response object
+	 */
+	public function afterController($controller, $methodName, Response $response){
+		return $response;
+	}
+
+
+	/**
+	 * This is being run after the response object has been rendered and
+	 * allows the manipulation of the output. The middleware is run in reverse order
+	 *
+	 * @param Controller $controller the controller that is being called
+	 * @param string $methodName the name of the method that will be called on
+	 *                           the controller
+	 * @param string $output the generated output from a response
+	 * @return string the output that should be printed
+	 */
+	public function beforeOutput($controller, $methodName, $output){
+		return $output;
+	}
+
+}
diff --git a/lib/appframework/middleware/middlewaredispatcher.php b/lib/appframework/middleware/middlewaredispatcher.php
new file mode 100644
index 0000000000..c2d16134dc
--- /dev/null
+++ b/lib/appframework/middleware/middlewaredispatcher.php
@@ -0,0 +1,159 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Middleware;
+
+use OC\AppFramework\Controller\Controller;
+use OC\AppFramework\Http\Response;
+
+
+/**
+ * This class is used to store and run all the middleware in correct order
+ */
+class MiddlewareDispatcher {
+
+	/**
+	 * @var array array containing all the middlewares
+	 */
+	private $middlewares;
+
+	/**
+	 * @var int counter which tells us what middlware was executed once an
+	 *                  exception occurs
+	 */
+	private $middlewareCounter;
+
+
+	/**
+	 * Constructor
+	 */
+	public function __construct(){
+		$this->middlewares = array();
+		$this->middlewareCounter = 0;
+	}
+
+
+	/**
+	 * Adds a new middleware
+	 * @param Middleware $middleware the middleware which will be added
+	 */
+	public function registerMiddleware(Middleware $middleWare){
+		array_push($this->middlewares, $middleWare);
+	}
+
+
+	/**
+	 * returns an array with all middleware elements
+	 * @return array the middlewares
+	 */
+	public function getMiddlewares(){
+		return $this->middlewares;
+	}
+
+
+	/**
+	 * This is being run in normal order before the controller is being
+	 * called which allows several modifications and checks
+	 *
+	 * @param Controller $controller the controller that is being called
+	 * @param string $methodName the name of the method that will be called on
+	 *                           the controller
+	 */
+	public function beforeController(Controller $controller, $methodName){
+		// we need to count so that we know which middlewares we have to ask in
+		// case theres an exception
+		for($i=0; $i<count($this->middlewares); $i++){
+			$this->middlewareCounter++;
+			$middleware = $this->middlewares[$i];
+			$middleware->beforeController($controller, $methodName);
+		}
+	}
+
+
+	/**
+	 * This is being run when either the beforeController method or the
+	 * controller method itself is throwing an exception. The middleware is asked
+	 * in reverse order to handle the exception and to return a response.
+	 * If the response is null, it is assumed that the exception could not be
+	 * handled and the error will be thrown again
+	 *
+	 * @param Controller $controller the controller that is being called
+	 * @param string $methodName the name of the method that will be called on
+	 *                            the controller
+	 * @param \Exception $exception the thrown exception
+	 * @return Response a Response object if the middleware can handle the
+	 * exception
+	 * @throws \Exception the passed in exception if it cant handle it
+	 */
+	public function afterException(Controller $controller, $methodName, \Exception $exception){
+		for($i=$this->middlewareCounter-1; $i>=0; $i--){
+			$middleware = $this->middlewares[$i];
+			try {
+				return $middleware->afterException($controller, $methodName, $exception);
+			} catch(\Exception $exception){
+				continue;
+			}
+		}
+		throw $exception;
+	}
+
+
+	/**
+	 * This is being run after a successful controllermethod call and allows
+	 * the manipulation of a Response object. The middleware is run in reverse order
+	 *
+	 * @param Controller $controller the controller that is being called
+	 * @param string $methodName the name of the method that will be called on
+	 *                            the controller
+	 * @param Response $response the generated response from the controller
+	 * @return Response a Response object
+	 */
+	public function afterController(Controller $controller, $methodName, Response $response){
+		for($i=count($this->middlewares)-1; $i>=0; $i--){
+			$middleware = $this->middlewares[$i];
+			$response = $middleware->afterController($controller, $methodName, $response);
+		}
+		return $response;
+	}
+
+
+	/**
+	 * This is being run after the response object has been rendered and
+	 * allows the manipulation of the output. The middleware is run in reverse order
+	 *
+	 * @param Controller $controller the controller that is being called
+	 * @param string $methodName the name of the method that will be called on
+	 *                           the controller
+	 * @param string $output the generated output from a response
+	 * @return string the output that should be printed
+	 */
+	public function beforeOutput(Controller $controller, $methodName, $output){
+		for($i=count($this->middlewares)-1; $i>=0; $i--){
+			$middleware = $this->middlewares[$i];
+			$output = $middleware->beforeOutput($controller, $methodName, $output);
+		}
+		return $output;
+	}
+
+}
diff --git a/lib/appframework/middleware/security/securityexception.php b/lib/appframework/middleware/security/securityexception.php
new file mode 100644
index 0000000000..b32a2769ff
--- /dev/null
+++ b/lib/appframework/middleware/security/securityexception.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Middleware\Security;
+
+
+/**
+ * Thrown when the security middleware encounters a security problem
+ */
+class SecurityException extends \Exception {
+
+	/**
+	 * @param string $msg the security error message
+	 * @param bool $ajax true if it resulted because of an ajax request
+	 */
+	public function __construct($msg, $code = 0) {
+		parent::__construct($msg, $code);
+	}
+
+}
diff --git a/lib/appframework/middleware/security/securitymiddleware.php b/lib/appframework/middleware/security/securitymiddleware.php
new file mode 100644
index 0000000000..7a715f309a
--- /dev/null
+++ b/lib/appframework/middleware/security/securitymiddleware.php
@@ -0,0 +1,141 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Middleware\Security;
+
+use OC\AppFramework\Controller\Controller;
+use OC\AppFramework\Http\Http;
+use OC\AppFramework\Http\Request;
+use OC\AppFramework\Http\Response;
+use OC\AppFramework\Http\JSONResponse;
+use OC\AppFramework\Http\RedirectResponse;
+use OC\AppFramework\Utility\MethodAnnotationReader;
+use OC\AppFramework\Middleware\Middleware;
+use OC\AppFramework\Core\API;
+
+
+/**
+ * Used to do all the authentication and checking stuff for a controller method
+ * It reads out the annotations of a controller method and checks which if
+ * security things should be checked and also handles errors in case a security
+ * check fails
+ */
+class SecurityMiddleware extends Middleware {
+
+	private $api;
+
+	/**
+	 * @var \OC\AppFramework\Http\Request
+	 */
+	private $request;
+
+	/**
+	 * @param API $api an instance of the api
+	 */
+	public function __construct(API $api, Request $request){
+		$this->api = $api;
+		$this->request = $request;
+	}
+
+
+	/**
+	 * This runs all the security checks before a method call. The
+	 * security checks are determined by inspecting the controller method
+	 * annotations
+	 * @param string/Controller $controller the controllername or string
+	 * @param string $methodName the name of the method
+	 * @throws SecurityException when a security check fails
+	 */
+	public function beforeController($controller, $methodName){
+
+		// get annotations from comments
+		$annotationReader = new MethodAnnotationReader($controller, $methodName);
+
+		// this will set the current navigation entry of the app, use this only
+		// for normal HTML requests and not for AJAX requests
+		$this->api->activateNavigationEntry();
+
+		// security checks
+		if(!$annotationReader->hasAnnotation('IsLoggedInExemption')) {
+			if(!$this->api->isLoggedIn()) {
+				throw new SecurityException('Current user is not logged in', Http::STATUS_UNAUTHORIZED);
+			}
+		}
+
+		if(!$annotationReader->hasAnnotation('IsAdminExemption')) {
+			if(!$this->api->isAdminUser($this->api->getUserId())) {
+				throw new SecurityException('Logged in user must be an admin', Http::STATUS_FORBIDDEN);
+			}
+		}
+
+		if(!$annotationReader->hasAnnotation('IsSubAdminExemption')) {
+			if(!$this->api->isSubAdminUser($this->api->getUserId())) {
+				throw new SecurityException('Logged in user must be a subadmin', Http::STATUS_FORBIDDEN);
+			}
+		}
+
+		if(!$annotationReader->hasAnnotation('CSRFExemption')) {
+			if(!$this->api->passesCSRFCheck()) {
+				throw new SecurityException('CSRF check failed', Http::STATUS_PRECONDITION_FAILED);
+			}
+		}
+
+	}
+
+
+	/**
+	 * If an SecurityException is being caught, ajax requests return a JSON error
+	 * response and non ajax requests redirect to the index
+	 * @param Controller $controller the controller that is being called
+	 * @param string $methodName the name of the method that will be called on
+	 *                           the controller
+	 * @param \Exception $exception the thrown exception
+	 * @throws \Exception the passed in exception if it cant handle it
+	 * @return Response a Response object or null in case that the exception could not be handled
+	 */
+	public function afterException($controller, $methodName, \Exception $exception){
+		if($exception instanceof SecurityException){
+
+			if (stripos($this->request->getHeader('Accept'),'html')===false) {
+
+				$response = new JSONResponse(
+					array('message' => $exception->getMessage()),
+					$exception->getCode()
+				);
+				$this->api->log($exception->getMessage(), 'debug');
+			} else {
+
+				$url = $this->api->linkToAbsolute('index.php', ''); // TODO: replace with link to route
+				$response = new RedirectResponse($url);
+				$this->api->log($exception->getMessage(), 'debug');
+			}
+
+			return $response;
+
+		}
+
+		throw $exception;
+	}
+
+}
diff --git a/lib/appframework/routing/routeactionhandler.php b/lib/appframework/routing/routeactionhandler.php
new file mode 100644
index 0000000000..7fb56f14ea
--- /dev/null
+++ b/lib/appframework/routing/routeactionhandler.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * ownCloud - App Framework
+ *
+ * @author Thomas Müller
+ * @copyright 2013 Thomas Müller thomas.mueller@tmit.eu
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\AppFramework\routing;
+
+use \OC\AppFramework\App;
+use \OC\AppFramework\DependencyInjection\DIContainer;
+
+class RouteActionHandler {
+	private $controllerName;
+	private $actionName;
+	private $container;
+
+	public function __construct(DIContainer $container, $controllerName, $actionName) {
+		$this->controllerName = $controllerName;
+		$this->actionName = $actionName;
+		$this->container = $container;
+	}
+
+	public function __invoke($params) {
+		App::main($this->controllerName, $this->actionName, $params, $this->container);
+	}
+}
diff --git a/lib/appframework/routing/routeconfig.php b/lib/appframework/routing/routeconfig.php
new file mode 100644
index 0000000000..53ab11bf2f
--- /dev/null
+++ b/lib/appframework/routing/routeconfig.php
@@ -0,0 +1,186 @@
+<?php
+/**
+ * ownCloud - App Framework
+ *
+ * @author Thomas Müller
+ * @copyright 2013 Thomas Müller thomas.mueller@tmit.eu
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\AppFramework\routing;
+
+use OC\AppFramework\DependencyInjection\DIContainer;
+
+/**
+ * Class RouteConfig
+ * @package OC\AppFramework\routing
+ */
+class RouteConfig {
+	private $container;
+	private $router;
+	private $routes;
+	private $appName;
+
+	/**
+	 * @param \OC\AppFramework\DependencyInjection\DIContainer $container
+	 * @param \OC_Router $router
+	 * @param string $pathToYml
+	 * @internal param $appName
+	 */
+	public function __construct(DIContainer $container, \OC_Router $router, $routes) {
+		$this->routes = $routes;
+		$this->container = $container;
+		$this->router = $router;
+		$this->appName = $container['AppName'];
+	}
+
+	/**
+	 * The routes and resource will be registered to the \OC_Router
+	 */
+	public function register() {
+
+		// parse simple
+		$this->processSimpleRoutes($this->routes);
+
+		// parse resources
+		$this->processResources($this->routes);
+	}
+
+	/**
+	 * Creates one route base on the give configuration
+	 * @param $routes
+	 * @throws \UnexpectedValueException
+	 */
+	private function processSimpleRoutes($routes)
+	{
+		$simpleRoutes = isset($routes['routes']) ? $routes['routes'] : array();
+		foreach ($simpleRoutes as $simpleRoute) {
+			$name = $simpleRoute['name'];
+			$url = $simpleRoute['url'];
+			$verb = isset($simpleRoute['verb']) ? strtoupper($simpleRoute['verb']) : 'GET';
+
+			$split = explode('#', $name, 2);
+			if (count($split) != 2) {
+				throw new \UnexpectedValueException('Invalid route name');
+			}
+			$controller = $split[0];
+			$action = $split[1];
+
+			$controllerName = $this->buildControllerName($controller);
+			$actionName = $this->buildActionName($action);
+
+			// register the route
+			$handler = new RouteActionHandler($this->container, $controllerName, $actionName);
+			$this->router->create($this->appName.'.'.$controller.'.'.$action, $url)->method($verb)->action($handler);
+		}
+	}
+
+	/**
+	 * For a given name and url restful routes are created:
+	 *  - index
+	 *  - show
+	 *  - new
+	 *  - create
+	 *  - update
+	 *  - destroy
+	 *
+	 * @param $routes
+	 */
+	private function processResources($routes)
+	{
+		// declaration of all restful actions
+		$actions = array(
+			array('name' => 'index', 'verb' => 'GET', 'on-collection' => true),
+			array('name' => 'show', 'verb' => 'GET'),
+			array('name' => 'create', 'verb' => 'POST', 'on-collection' => true),
+			array('name' => 'update', 'verb' => 'PUT'),
+			array('name' => 'destroy', 'verb' => 'DELETE'),
+		);
+
+		$resources = isset($routes['resources']) ? $routes['resources'] : array();
+		foreach ($resources as $resource => $config) {
+
+			// the url parameter used as id to the resource
+			$resourceId = $this->buildResourceId($resource);
+			foreach($actions as $action) {
+				$url = $config['url'];
+				$method = $action['name'];
+				$verb = isset($action['verb']) ? strtoupper($action['verb']) : 'GET';
+				$collectionAction = isset($action['on-collection']) ? $action['on-collection'] : false;
+				if (!$collectionAction) {
+					$url = $url . '/' . $resourceId;
+				}
+				if (isset($action['url-postfix'])) {
+					$url = $url . '/' . $action['url-postfix'];
+				}
+
+				$controller = $resource;
+
+				$controllerName = $this->buildControllerName($controller);
+				$actionName = $this->buildActionName($method);
+
+				$routeName = $this->appName . '.' . strtolower($resource) . '.' . strtolower($method);
+
+				$this->router->create($routeName, $url)->method($verb)->action(
+					new RouteActionHandler($this->container, $controllerName, $actionName)
+				);
+			}
+		}
+	}
+
+	/**
+	 * Based on a given route name the controller name is generated
+	 * @param $controller
+	 * @return string
+	 */
+	private function buildControllerName($controller)
+	{
+		return $this->underScoreToCamelCase(ucfirst($controller)) . 'Controller';
+	}
+
+	/**
+	 * Based on the action part of the route name the controller method name is generated
+	 * @param $action
+	 * @return string
+	 */
+	private function buildActionName($action) {
+		return $this->underScoreToCamelCase($action);
+	}
+
+	/**
+	 * Generates the id used in the url part o the route url
+	 * @param $resource
+	 * @return string
+	 */
+	private function buildResourceId($resource) {
+		return '{'.$this->underScoreToCamelCase(rtrim($resource, 's')).'Id}';
+	}
+
+	/**
+	 * Underscored strings are converted to camel case strings
+	 * @param $str string
+	 * @return string
+	 */
+	private function underScoreToCamelCase($str) {
+		$pattern = "/_[a-z]?/";
+		return preg_replace_callback(
+			$pattern,
+			function ($matches) {
+				return strtoupper(ltrim($matches[0], "_"));
+			},
+			$str);
+	}
+}
diff --git a/lib/appframework/utility/methodannotationreader.php b/lib/appframework/utility/methodannotationreader.php
new file mode 100644
index 0000000000..42060a0852
--- /dev/null
+++ b/lib/appframework/utility/methodannotationreader.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Utility;
+
+
+/**
+ * Reads and parses annotations from doc comments
+ */
+class MethodAnnotationReader {
+
+	private $annotations;
+
+	/**
+	 * @param object $object an object or classname
+	 * @param string $method the method which we want to inspect for annotations
+	 */
+	public function __construct($object, $method){
+		$this->annotations = array();
+
+		$reflection = new \ReflectionMethod($object, $method);
+		$docs = $reflection->getDocComment();
+
+		// extract everything prefixed by @ and first letter uppercase
+		preg_match_all('/@([A-Z]\w+)/', $docs, $matches);
+		$this->annotations = $matches[1];
+	}
+
+
+	/**
+	 * Check if a method contains an annotation
+	 * @param string $name the name of the annotation
+	 * @return bool true if the annotation is found
+	 */
+	public function hasAnnotation($name){
+		return in_array($name, $this->annotations);
+	}
+
+
+}
diff --git a/lib/appframework/utility/timefactory.php b/lib/appframework/utility/timefactory.php
new file mode 100644
index 0000000000..2c3dd6cf5e
--- /dev/null
+++ b/lib/appframework/utility/timefactory.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Utility;
+
+
+/**
+ * Needed to mock calls to time()
+ */
+class TimeFactory {
+
+
+	/**
+	 * @return int the result of a call to time()
+	 */
+	public function getTime() {
+		return time();
+	}
+
+
+}
diff --git a/tests/lib/appframework/AppTest.php b/tests/lib/appframework/AppTest.php
new file mode 100644
index 0000000000..000094d07c
--- /dev/null
+++ b/tests/lib/appframework/AppTest.php
@@ -0,0 +1,107 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework;
+
+use OC\AppFramework\Http\Request;
+use OC\AppFramework\Core\API;
+use OC\AppFramework\Middleware\MiddlewareDispatcher;
+
+// FIXME: loading pimpl correctly from 3rdparty repo
+require_once __DIR__ . '/../../../../3rdparty/Pimple/Pimple.php';
+require_once __DIR__ . "/classloader.php";
+
+
+class AppTest extends \PHPUnit_Framework_TestCase {
+
+	private $container;
+	private $api;
+	private $controller;
+	private $dispatcher;
+	private $params;
+	private $headers;
+	private $output;
+	private $controllerName;
+	private $controllerMethod;
+
+	protected function setUp() {
+		$this->container = new \Pimple();
+		$this->controller = $this->getMockBuilder(
+			'OC\AppFramework\Controller\Controller')
+			->disableOriginalConstructor()
+			->getMock();
+		$this->dispatcher = $this->getMockBuilder(
+			'OC\AppFramework\Http\Dispatcher')
+			->disableOriginalConstructor()
+			->getMock();
+
+
+		$this->headers = array('key' => 'value');
+		$this->output = 'hi';
+		$this->controllerName = 'Controller';
+		$this->controllerMethod = 'method';
+
+		$this->container[$this->controllerName] = $this->controller;
+		$this->container['Dispatcher'] = $this->dispatcher;
+	}
+
+
+	public function testControllerNameAndMethodAreBeingPassed(){
+		$return = array(null, array(), null);
+		$this->dispatcher->expects($this->once())
+			->method('dispatch')
+			->with($this->equalTo($this->controller),
+				$this->equalTo($this->controllerMethod))
+			->will($this->returnValue($return));
+
+		$this->expectOutputString('');
+
+		App::main($this->controllerName, $this->controllerMethod, array(),
+			$this->container);
+	}
+
+
+	/*
+	FIXME: this complains about shit headers which are already sent because
+	of the content length. Would be cool if someone could fix this
+
+	public function testOutputIsPrinted(){
+		$return = array(null, array(), $this->output);
+		$this->dispatcher->expects($this->once())
+			->method('dispatch')
+			->with($this->equalTo($this->controller),
+				$this->equalTo($this->controllerMethod))
+			->will($this->returnValue($return));
+
+		$this->expectOutputString($this->output);
+
+		App::main($this->controllerName, $this->controllerMethod, array(),
+			$this->container);
+	}
+	*/
+
+	// FIXME: if someone manages to test the headers output, I'd be grateful
+
+
+}
diff --git a/tests/lib/appframework/classloader.php b/tests/lib/appframework/classloader.php
new file mode 100644
index 0000000000..ae485e67b2
--- /dev/null
+++ b/tests/lib/appframework/classloader.php
@@ -0,0 +1,45 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@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/>.
+ *
+ */
+
+// to execute without ownCloud, we need to create our own class loader
+spl_autoload_register(function ($className){
+	if (strpos($className, 'OC\\AppFramework') === 0) {
+		$path = strtolower(str_replace('\\', '/', substr($className, 3)) . '.php');
+		$relPath = __DIR__ . '/../../../lib/' . $path;
+
+		if(file_exists($relPath)){
+			require_once $relPath;
+		}
+	}
+
+	// FIXME: this will most probably not work anymore
+	if (strpos($className, 'OCA\\') === 0) {
+
+		$path = strtolower(str_replace('\\', '/', substr($className, 3)) . '.php');
+		$relPath = __DIR__ . '/../..' . $path;
+
+		if(file_exists($relPath)){
+			require_once $relPath;
+		}
+	}
+});
diff --git a/tests/lib/appframework/controller/ControllerTest.php b/tests/lib/appframework/controller/ControllerTest.php
new file mode 100644
index 0000000000..d8357c2a68
--- /dev/null
+++ b/tests/lib/appframework/controller/ControllerTest.php
@@ -0,0 +1,161 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace Test\AppFramework\Controller;
+
+use OC\AppFramework\Http\Request;
+use OC\AppFramework\Http\JSONResponse;
+use OC\AppFramework\Http\TemplateResponse;
+use OC\AppFramework\Controller\Controller;
+
+
+require_once(__DIR__ . "/../classloader.php");
+
+
+class ChildController extends Controller {};
+
+class ControllerTest extends \PHPUnit_Framework_TestCase {
+
+	/**
+	 * @var Controller
+	 */
+	private $controller;
+	private $api;
+
+	protected function setUp(){
+		$request = new Request(
+			array(
+				'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'),
+				'post' => array('name' => 'Jane Doe', 'nickname' => 'Janey'),
+				'urlParams' => array('name' => 'Johnny Weissmüller'),
+				'files' => array('file' => 'filevalue'),
+				'env' => array('PATH' => 'daheim'),
+				'session' => array('sezession' => 'kein'),
+				'method' => 'hi',
+			)
+		);
+
+		$this->api = $this->getMock('OC\AppFramework\Core\API',
+									array('getAppName'), array('test'));
+		$this->api->expects($this->any())
+				->method('getAppName')
+				->will($this->returnValue('apptemplate_advanced'));
+
+		$this->controller = new ChildController($this->api, $request);
+	}
+
+
+	public function testParamsGet(){
+		$this->assertEquals('Johnny Weissmüller', $this->controller->params('name', 'Tarzan'));
+	}
+
+
+	public function testParamsGetDefault(){
+		$this->assertEquals('Tarzan', $this->controller->params('Ape Man', 'Tarzan'));
+	}
+
+
+	public function testParamsFile(){
+		$this->assertEquals('filevalue', $this->controller->params('file', 'filevalue'));
+	}
+
+
+	public function testGetUploadedFile(){
+		$this->assertEquals('filevalue', $this->controller->getUploadedFile('file'));
+	}
+
+
+
+	public function testGetUploadedFileDefault(){
+		$this->assertEquals('default', $this->controller->params('files', 'default'));
+	}
+
+
+	public function testGetParams(){
+		$params = array(
+				'name' => 'Johnny Weissmüller',
+				'nickname' => 'Janey',
+			);
+
+		$this->assertEquals($params, $this->controller->getParams());
+	}
+
+
+	public function testRender(){
+		$this->assertTrue($this->controller->render('') instanceof TemplateResponse);
+	}
+
+
+	public function testSetParams(){
+		$params = array('john' => 'foo');
+		$response = $this->controller->render('home', $params);
+
+		$this->assertEquals($params, $response->getParams());
+	}
+
+
+	public function testRenderRenderAs(){
+		$ocTpl = $this->getMock('Template', array('fetchPage'));
+		$ocTpl->expects($this->once())
+				->method('fetchPage');
+
+		$api = $this->getMock('OC\AppFramework\Core\API',
+					array('getAppName', 'getTemplate'), array('app'));
+		$api->expects($this->any())
+				->method('getAppName')
+				->will($this->returnValue('app'));
+		$api->expects($this->once())
+				->method('getTemplate')
+				->with($this->equalTo('home'), $this->equalTo('admin'), $this->equalTo('app'))
+				->will($this->returnValue($ocTpl));
+
+		$this->controller = new ChildController($api, new Request());
+		$this->controller->render('home', array(), 'admin')->render();
+	}
+
+
+	public function testRenderHeaders(){
+		$headers = array('one', 'two');
+		$response = $this->controller->render('', array(), '', $headers);
+
+		$this->assertTrue(in_array($headers[0], $response->getHeaders()));
+		$this->assertTrue(in_array($headers[1], $response->getHeaders()));
+	}
+
+
+	public function testGetRequestMethod(){
+		$this->assertEquals('hi', $this->controller->method());
+	}
+
+
+	public function testGetEnvVariable(){
+		$this->assertEquals('daheim', $this->controller->env('PATH'));
+	}
+
+	public function testGetSessionVariable(){
+		$this->assertEquals('kein', $this->controller->session('sezession'));
+	}
+
+
+}
diff --git a/tests/lib/appframework/dependencyinjection/DIContainerTest.php b/tests/lib/appframework/dependencyinjection/DIContainerTest.php
new file mode 100644
index 0000000000..ce346f0a76
--- /dev/null
+++ b/tests/lib/appframework/dependencyinjection/DIContainerTest.php
@@ -0,0 +1,98 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @author Morris Jobke
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ * @copyright 2013 Morris Jobke morris.jobke@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\DependencyInjection;
+
+use \OC\AppFramework\Http\Request;
+
+
+require_once(__DIR__ . "/../classloader.php");
+
+
+class DIContainerTest extends \PHPUnit_Framework_TestCase {
+
+	private $container;
+
+	protected function setUp(){
+		$this->container = new DIContainer('name');
+		$this->api = $this->getMock('OC\AppFramework\Core\API', array('getTrans'), array('hi'));
+	}
+
+	private function exchangeAPI(){
+		$this->api->expects($this->any())
+				->method('getTrans')
+				->will($this->returnValue('yo'));
+		$this->container['API'] = $this->api;
+	}
+
+	public function testProvidesAPI(){
+		$this->assertTrue(isset($this->container['API']));
+	}
+
+
+	public function testProvidesRequest(){
+		$this->assertTrue(isset($this->container['Request']));
+	}
+
+
+	public function testProvidesSecurityMiddleware(){
+		$this->assertTrue(isset($this->container['SecurityMiddleware']));
+	}
+
+
+	public function testProvidesMiddlewareDispatcher(){
+		$this->assertTrue(isset($this->container['MiddlewareDispatcher']));
+	}
+
+
+	public function testProvidesAppName(){
+		$this->assertTrue(isset($this->container['AppName']));
+	}
+
+
+	public function testAppNameIsSetCorrectly(){
+		$this->assertEquals('name', $this->container['AppName']);
+	}
+
+
+	public function testMiddlewareDispatcherIncludesSecurityMiddleware(){
+		$this->container['Request'] = new Request();
+		$security = $this->container['SecurityMiddleware'];
+		$dispatcher = $this->container['MiddlewareDispatcher'];
+
+		$this->assertContains($security, $dispatcher->getMiddlewares());
+	}
+
+
+	public function testMiddlewareDispatcherDoesNotIncludeTwigWhenTplDirectoryNotSet(){
+		$this->container['Request'] = new Request();
+		$this->exchangeAPI();
+		$dispatcher = $this->container['MiddlewareDispatcher'];
+
+		$this->assertEquals(1, count($dispatcher->getMiddlewares()));
+	}
+
+}
diff --git a/tests/lib/appframework/http/DispatcherTest.php b/tests/lib/appframework/http/DispatcherTest.php
new file mode 100644
index 0000000000..2e3db11050
--- /dev/null
+++ b/tests/lib/appframework/http/DispatcherTest.php
@@ -0,0 +1,218 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Http;
+
+use OC\AppFramework\Core\API;
+use OC\AppFramework\Middleware\MiddlewareDispatcher;
+
+require_once(__DIR__ . "/../classloader.php");
+
+
+class DispatcherTest extends \PHPUnit_Framework_TestCase {
+
+
+	private $middlewareDispatcher;
+	private $dispatcher;
+	private $controllerMethod;
+	private $response;
+	private $lastModified;
+	private $etag;
+	private $http;
+
+	protected function setUp() {
+		$this->controllerMethod = 'test';
+
+		$api = $this->getMockBuilder(
+			'\OC\AppFramework\Core\API')
+			->disableOriginalConstructor()
+			->getMock();
+		$request = $this->getMockBuilder(
+			'\OC\AppFramework\Http\Request')
+			->disableOriginalConstructor()
+			->getMock();
+		$this->http = $this->getMockBuilder(
+			'\OC\AppFramework\Http\Http')
+			->disableOriginalConstructor()
+			->getMock();
+
+		$this->middlewareDispatcher = $this->getMockBuilder(
+			'\OC\AppFramework\Middleware\MiddlewareDispatcher')
+			->disableOriginalConstructor()
+			->getMock();
+		$this->controller = $this->getMock(
+			'\OC\AppFramework\Controller\Controller',
+			array($this->controllerMethod), array($api, $request));
+		
+		$this->dispatcher = new Dispatcher(
+			$this->http, $this->middlewareDispatcher);
+		
+		$this->response = $this->getMockBuilder(
+			'\OC\AppFramework\Http\Response')
+			->disableOriginalConstructor()
+			->getMock();
+
+		$this->lastModified = new \DateTime(null, new \DateTimeZone('GMT'));
+		$this->etag = 'hi';
+	}
+
+
+	private function setMiddlewareExpections($out=null, 
+		$httpHeaders=null, $responseHeaders=array(),
+		$ex=false, $catchEx=true) {
+
+		if($ex) {
+			$exception = new \Exception();
+			$this->middlewareDispatcher->expects($this->once())
+				->method('beforeController')
+				->with($this->equalTo($this->controller), 
+					$this->equalTo($this->controllerMethod))
+				->will($this->throwException($exception));
+			if($catchEx) {
+				$this->middlewareDispatcher->expects($this->once())
+					->method('afterException')
+					->with($this->equalTo($this->controller), 
+						$this->equalTo($this->controllerMethod),
+						$this->equalTo($exception))
+					->will($this->returnValue($this->response));
+			} else {
+				$this->middlewareDispatcher->expects($this->once())
+					->method('afterException')
+					->with($this->equalTo($this->controller), 
+						$this->equalTo($this->controllerMethod),
+						$this->equalTo($exception))
+					->will($this->returnValue(null));
+				return;
+			}
+		} else {
+			$this->middlewareDispatcher->expects($this->once())
+				->method('beforeController')
+				->with($this->equalTo($this->controller), 
+					$this->equalTo($this->controllerMethod));
+			$this->controller->expects($this->once())
+				->method($this->controllerMethod)
+				->will($this->returnValue($this->response));
+		}
+
+		$this->response->expects($this->once())
+			->method('render')
+			->will($this->returnValue($out));
+		$this->response->expects($this->once())
+			->method('getStatus')
+			->will($this->returnValue(Http::STATUS_OK));
+		$this->response->expects($this->once())
+			->method('getLastModified')
+			->will($this->returnValue($this->lastModified));
+		$this->response->expects($this->once())
+			->method('getETag')
+			->will($this->returnValue($this->etag));
+		$this->response->expects($this->once())
+			->method('getHeaders')
+			->will($this->returnValue($responseHeaders));
+		$this->http->expects($this->once())
+			->method('getStatusHeader')
+			->with($this->equalTo(Http::STATUS_OK), 
+				$this->equalTo($this->lastModified),
+				$this->equalTo($this->etag))
+			->will($this->returnValue($httpHeaders));
+		
+		$this->middlewareDispatcher->expects($this->once())
+			->method('afterController')
+			->with($this->equalTo($this->controller), 
+				$this->equalTo($this->controllerMethod),
+				$this->equalTo($this->response))
+			->will($this->returnValue($this->response));
+
+		$this->middlewareDispatcher->expects($this->once())
+			->method('afterController')
+			->with($this->equalTo($this->controller), 
+				$this->equalTo($this->controllerMethod),
+				$this->equalTo($this->response))
+			->will($this->returnValue($this->response));
+
+		$this->middlewareDispatcher->expects($this->once())
+			->method('beforeOutput')
+			->with($this->equalTo($this->controller), 
+				$this->equalTo($this->controllerMethod),
+				$this->equalTo($out))
+			->will($this->returnValue($out));
+
+		
+	}
+
+
+	public function testDispatcherReturnsArrayWith2Entries() {
+		$this->setMiddlewareExpections();
+
+		$response = $this->dispatcher->dispatch($this->controller, 
+			$this->controllerMethod);
+		$this->assertNull($response[0]);
+		$this->assertEquals(array(), $response[1]);
+		$this->assertNull($response[2]);
+	}
+
+
+	public function testHeadersAndOutputAreReturned(){
+		$out = 'yo';
+		$httpHeaders = 'Http';
+		$responseHeaders = array('hell' => 'yeah');
+		$this->setMiddlewareExpections($out, $httpHeaders, $responseHeaders);
+
+		$response = $this->dispatcher->dispatch($this->controller, 
+			$this->controllerMethod);
+
+		$this->assertEquals($httpHeaders, $response[0]);
+		$this->assertEquals($responseHeaders, $response[1]);
+		$this->assertEquals($out, $response[2]);
+	}
+
+
+	public function testExceptionCallsAfterException() {
+		$out = 'yo';
+		$httpHeaders = 'Http';
+		$responseHeaders = array('hell' => 'yeah');
+		$this->setMiddlewareExpections($out, $httpHeaders, $responseHeaders, true);		
+
+		$response = $this->dispatcher->dispatch($this->controller, 
+			$this->controllerMethod);
+
+		$this->assertEquals($httpHeaders, $response[0]);
+		$this->assertEquals($responseHeaders, $response[1]);
+		$this->assertEquals($out, $response[2]);
+	}
+
+
+	public function testExceptionThrowsIfCanNotBeHandledByAfterException() {
+		$out = 'yo';
+		$httpHeaders = 'Http';
+		$responseHeaders = array('hell' => 'yeah');
+		$this->setMiddlewareExpections($out, $httpHeaders, $responseHeaders, true, false);		
+
+		$this->setExpectedException('\Exception');
+		$response = $this->dispatcher->dispatch($this->controller, 
+			$this->controllerMethod);
+
+	}
+
+}
diff --git a/tests/lib/appframework/http/DownloadResponseTest.php b/tests/lib/appframework/http/DownloadResponseTest.php
new file mode 100644
index 0000000000..103cfe7588
--- /dev/null
+++ b/tests/lib/appframework/http/DownloadResponseTest.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Http;
+
+
+require_once(__DIR__ . "/../classloader.php");
+
+
+class ChildDownloadResponse extends DownloadResponse {};
+
+
+class DownloadResponseTest extends \PHPUnit_Framework_TestCase {
+
+	protected $response;
+
+	protected function setUp(){
+		$this->response = new ChildDownloadResponse('file', 'content');
+	}
+
+
+	public function testHeaders() {
+		$headers = $this->response->getHeaders();
+
+		$this->assertContains('attachment; filename="file"', $headers['Content-Disposition']);
+		$this->assertContains('content', $headers['Content-Type']);
+	}
+
+
+}
diff --git a/tests/lib/appframework/http/HttpTest.php b/tests/lib/appframework/http/HttpTest.php
new file mode 100644
index 0000000000..306bc3caf4
--- /dev/null
+++ b/tests/lib/appframework/http/HttpTest.php
@@ -0,0 +1,87 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Http;
+
+
+require_once(__DIR__ . "/../classloader.php");
+
+
+
+class HttpTest extends \PHPUnit_Framework_TestCase {
+
+	private $server;
+	private $http;
+
+	protected function setUp(){
+		$this->server = array();
+		$this->http = new Http($this->server);
+	}
+
+
+	public function testProtocol() {
+		$header = $this->http->getStatusHeader(Http::STATUS_TEMPORARY_REDIRECT);
+		$this->assertEquals('HTTP/1.1 307 Temporary Redirect', $header);
+	}
+
+
+	public function testProtocol10() {
+		$this->http = new Http($this->server, 'HTTP/1.0');
+		$header = $this->http->getStatusHeader(Http::STATUS_OK);
+		$this->assertEquals('HTTP/1.0 200 OK', $header);
+	}
+
+
+	public function testEtagMatchReturnsNotModified() {
+		$http = new Http(array('HTTP_IF_NONE_MATCH' => 'hi'));
+
+		$header = $http->getStatusHeader(Http::STATUS_OK, null, 'hi');
+		$this->assertEquals('HTTP/1.1 304 Not Modified', $header);
+	}
+
+
+	public function testLastModifiedMatchReturnsNotModified() {
+		$dateTime = new \DateTime(null, new \DateTimeZone('GMT'));
+		$dateTime->setTimestamp('12');
+
+		$http = new Http(
+			array(
+				'HTTP_IF_MODIFIED_SINCE' => 'Thu, 01 Jan 1970 00:00:12 +0000')
+			);
+
+		$header = $http->getStatusHeader(Http::STATUS_OK, $dateTime);
+		$this->assertEquals('HTTP/1.1 304 Not Modified', $header);
+	}
+
+
+
+	public function testTempRedirectBecomesFoundInHttp10() {
+		$http = new Http(array(), 'HTTP/1.0');
+
+		$header = $http->getStatusHeader(Http::STATUS_TEMPORARY_REDIRECT);
+		$this->assertEquals('HTTP/1.0 302 Found', $header);
+	}
+	// TODO: write unittests for http codes
+
+}
diff --git a/tests/lib/appframework/http/JSONResponseTest.php b/tests/lib/appframework/http/JSONResponseTest.php
new file mode 100644
index 0000000000..d15e08f6ce
--- /dev/null
+++ b/tests/lib/appframework/http/JSONResponseTest.php
@@ -0,0 +1,96 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @author Morris Jobke
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ * @copyright 2013 Morris Jobke morris.jobke@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Http;
+
+
+require_once(__DIR__ . "/../classloader.php");
+
+
+
+class JSONResponseTest extends \PHPUnit_Framework_TestCase {
+
+	/**
+	 * @var JSONResponse
+	 */
+	private $json;
+
+	protected function setUp() {
+		$this->json = new JSONResponse();
+	}
+
+
+	public function testHeader() {
+		$headers = $this->json->getHeaders();
+		$this->assertEquals('application/json; charset=utf-8', $headers['Content-type']);
+	}
+
+
+	public function testSetData() {
+		$params = array('hi', 'yo');
+		$this->json->setData($params);
+
+		$this->assertEquals(array('hi', 'yo'), $this->json->getData());
+	}
+
+
+	public function testSetRender() {
+		$params = array('test' => 'hi');
+		$this->json->setData($params);
+
+		$expected = '{"test":"hi"}';
+
+		$this->assertEquals($expected, $this->json->render());
+	}
+
+
+	public function testRender() {
+		$params = array('test' => 'hi');
+		$this->json->setData($params);
+
+		$expected = '{"test":"hi"}';
+
+		$this->assertEquals($expected, $this->json->render());
+	}
+
+
+	public function testShouldHaveXContentHeaderByDefault() {
+		$headers = $this->json->getHeaders();
+		$this->assertEquals('nosniff', $headers['X-Content-Type-Options']);
+	}
+
+
+	public function testConstructorAllowsToSetData() {
+		$data = array('hi');
+		$code = 300;
+		$response = new JSONResponse($data, $code);
+
+		$expected = '["hi"]';
+		$this->assertEquals($expected, $response->render());
+		$this->assertEquals($code, $response->getStatus());
+	}
+
+}
diff --git a/tests/lib/appframework/http/RedirectResponseTest.php b/tests/lib/appframework/http/RedirectResponseTest.php
new file mode 100644
index 0000000000..a8577feed2
--- /dev/null
+++ b/tests/lib/appframework/http/RedirectResponseTest.php
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Http;
+
+
+require_once(__DIR__ . "/../classloader.php");
+
+
+
+class RedirectResponseTest extends \PHPUnit_Framework_TestCase {
+
+
+	protected $response;
+
+	protected function setUp(){
+		$this->response = new RedirectResponse('/url');
+	}
+
+
+	public function testHeaders() {
+		$headers = $this->response->getHeaders();
+		$this->assertEquals('/url', $headers['Location']);
+		$this->assertEquals(Http::STATUS_TEMPORARY_REDIRECT, 
+			$this->response->getStatus());
+	}
+
+
+	public function testGetRedirectUrl(){
+		$this->assertEquals('/url', $this->response->getRedirectUrl());
+	}
+
+
+}
diff --git a/tests/lib/appframework/http/RequestTest.php b/tests/lib/appframework/http/RequestTest.php
new file mode 100644
index 0000000000..c1f56c0163
--- /dev/null
+++ b/tests/lib/appframework/http/RequestTest.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Tanghus (thomas@tanghus.net)
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\AppFramework\Http;
+
+
+require_once(__DIR__ . "/../classloader.php");
+
+class RequestTest extends \PHPUnit_Framework_TestCase {
+
+	public function testRequestAccessors() {
+		$vars = array(
+			'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'),
+		);
+
+		$request = new Request($vars);
+
+		// Countable
+		$this->assertEquals(2, count($request));
+		// Array access
+		$this->assertEquals('Joey', $request['nickname']);
+		// "Magic" accessors
+		$this->assertEquals('Joey', $request->{'nickname'});
+		$this->assertTrue(isset($request['nickname']));
+		$this->assertTrue(isset($request->{'nickname'}));
+		$this->assertEquals(false, isset($request->{'flickname'}));
+		// Only testing 'get', but same approach for post, files etc.
+		$this->assertEquals('Joey', $request->get['nickname']);
+		// Always returns null if variable not set.
+		$this->assertEquals(null, $request->{'flickname'});
+	}
+
+	// urlParams has precedence over POST which has precedence over GET
+	public function testPrecedence() {
+		$vars = array(
+			'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'),
+			'post' => array('name' => 'Jane Doe', 'nickname' => 'Janey'),
+			'urlParams' => array('user' => 'jw', 'name' => 'Johnny Weissmüller'),
+		);
+
+		$request = new Request($vars);
+
+		$this->assertEquals(3, count($request));
+		$this->assertEquals('Janey', $request->{'nickname'});
+		$this->assertEquals('Johnny Weissmüller', $request->{'name'});
+	}
+
+
+	/**
+	* @expectedException RuntimeException
+	*/
+	public function testImmutableArrayAccess() {
+		$vars = array(
+			'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'),
+		);
+
+		$request = new Request($vars);
+		$request['nickname'] = 'Janey';
+	}
+
+	/**
+	* @expectedException RuntimeException
+	*/
+	public function testImmutableMagicAccess() {
+		$vars = array(
+			'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'),
+		);
+
+		$request = new Request($vars);
+		$request->{'nickname'} = 'Janey';
+	}
+
+}
diff --git a/tests/lib/appframework/http/ResponseTest.php b/tests/lib/appframework/http/ResponseTest.php
new file mode 100644
index 0000000000..621ba66545
--- /dev/null
+++ b/tests/lib/appframework/http/ResponseTest.php
@@ -0,0 +1,119 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Http;
+
+
+require_once(__DIR__ . "/../classloader.php");
+
+
+
+class ResponseTest extends \PHPUnit_Framework_TestCase {
+
+
+	private $childResponse;
+
+	protected function setUp(){
+		$this->childResponse = new Response();
+	}
+
+
+	public function testAddHeader(){
+		$this->childResponse->addHeader('hello', 'world');
+		$headers = $this->childResponse->getHeaders();
+		$this->assertEquals('world', $headers['hello']);
+	}
+
+
+	public function testAddHeaderValueNullDeletesIt(){
+		$this->childResponse->addHeader('hello', 'world');
+		$this->childResponse->addHeader('hello', null);
+		$this->assertEquals(1, count($this->childResponse->getHeaders()));	
+	}
+
+
+	public function testCacheHeadersAreDisabledByDefault(){
+		$headers = $this->childResponse->getHeaders();
+		$this->assertEquals('no-cache, must-revalidate', $headers['Cache-Control']);
+	}
+
+
+	public function testRenderReturnNullByDefault(){
+		$this->assertEquals(null, $this->childResponse->render());
+	}
+
+
+	public function testGetStatus() {
+		$default = $this->childResponse->getStatus();
+
+		$this->childResponse->setStatus(Http::STATUS_NOT_FOUND);
+
+		$this->assertEquals(Http::STATUS_OK, $default);
+		$this->assertEquals(Http::STATUS_NOT_FOUND, $this->childResponse->getStatus());
+	}
+
+
+	public function testGetEtag() {
+		$this->childResponse->setEtag('hi');
+		$this->assertEquals('hi', $this->childResponse->getEtag());
+	}
+
+
+	public function testGetLastModified() {
+		$lastModified = new \DateTime(null, new \DateTimeZone('GMT'));
+		$lastModified->setTimestamp(1);
+		$this->childResponse->setLastModified($lastModified);
+		$this->assertEquals($lastModified, $this->childResponse->getLastModified());
+	}
+
+
+
+	public function testCacheSecondsZero() {
+		$this->childResponse->cacheFor(0);
+		
+		$headers = $this->childResponse->getHeaders();
+		$this->assertEquals('no-cache, must-revalidate', $headers['Cache-Control']);	
+	}
+
+
+	public function testCacheSeconds() {
+		$this->childResponse->cacheFor(33);
+		
+		$headers = $this->childResponse->getHeaders();
+		$this->assertEquals('max-age=33, must-revalidate', 
+			$headers['Cache-Control']);	
+	}
+
+
+
+	public function testEtagLastModifiedHeaders() {
+		$lastModified = new \DateTime(null, new \DateTimeZone('GMT'));
+		$lastModified->setTimestamp(1);
+		$this->childResponse->setLastModified($lastModified);
+		$headers = $this->childResponse->getHeaders();
+		$this->assertEquals('Thu, 01 Jan 1970 00:00:01 +0000', $headers['Last-Modified']);
+	}
+
+
+}
diff --git a/tests/lib/appframework/http/TemplateResponseTest.php b/tests/lib/appframework/http/TemplateResponseTest.php
new file mode 100644
index 0000000000..30684725b7
--- /dev/null
+++ b/tests/lib/appframework/http/TemplateResponseTest.php
@@ -0,0 +1,157 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Http;
+
+use OC\AppFramework\Core\API;
+
+
+require_once(__DIR__ . "/../classloader.php");
+
+
+class TemplateResponseTest extends \PHPUnit_Framework_TestCase {
+
+	private $tpl;
+	private $api;
+
+	protected function setUp() {
+		$this->api = $this->getMock('OC\AppFramework\Core\API',
+								array('getAppName'), array('test'));
+		$this->api->expects($this->any())
+				->method('getAppName')
+				->will($this->returnValue('app'));
+
+		$this->tpl = new TemplateResponse($this->api, 'home');
+	}
+
+
+	public function testSetParams(){
+		$params = array('hi' => 'yo');
+		$this->tpl->setParams($params);
+
+		$this->assertEquals(array('hi' => 'yo'), $this->tpl->getParams());
+	}
+
+
+	public function testGetTemplateName(){
+		$this->assertEquals('home', $this->tpl->getTemplateName());
+	}
+
+
+	public function testRender(){
+		$ocTpl = $this->getMock('Template', array('fetchPage'));
+		$ocTpl->expects($this->once())
+				->method('fetchPage');
+
+		$api = $this->getMock('OC\AppFramework\Core\API',
+					array('getAppName', 'getTemplate'), array('app'));
+		$api->expects($this->any())
+				->method('getAppName')
+				->will($this->returnValue('app'));
+		$api->expects($this->once())
+				->method('getTemplate')
+				->with($this->equalTo('home'), $this->equalTo('user'), $this->equalTo('app'))
+				->will($this->returnValue($ocTpl));
+
+		$tpl = new TemplateResponse($api, 'home');
+
+		$tpl->render();
+	}
+
+
+	public function testRenderAssignsParams(){
+		$params = array('john' => 'doe');
+
+		$ocTpl = $this->getMock('Template', array('assign', 'fetchPage'));
+		$ocTpl->expects($this->once())
+				->method('assign')
+				->with($this->equalTo('john'), $this->equalTo('doe'));
+
+		$api = $this->getMock('OC\AppFramework\Core\API',
+					array('getAppName', 'getTemplate'), array('app'));
+		$api->expects($this->any())
+				->method('getAppName')
+				->will($this->returnValue('app'));
+		$api->expects($this->once())
+				->method('getTemplate')
+				->with($this->equalTo('home'), $this->equalTo('user'), $this->equalTo('app'))
+				->will($this->returnValue($ocTpl));
+
+		$tpl = new TemplateResponse($api, 'home');
+		$tpl->setParams($params);
+
+		$tpl->render();
+	}
+
+
+	public function testRenderDifferentApp(){
+		$ocTpl = $this->getMock('Template', array('fetchPage'));
+		$ocTpl->expects($this->once())
+				->method('fetchPage');
+
+		$api = $this->getMock('OC\AppFramework\Core\API',
+					array('getAppName', 'getTemplate'), array('app'));
+		$api->expects($this->any())
+				->method('getAppName')
+				->will($this->returnValue('app'));
+		$api->expects($this->once())
+				->method('getTemplate')
+				->with($this->equalTo('home'), $this->equalTo('user'), $this->equalTo('app2'))
+				->will($this->returnValue($ocTpl));
+
+		$tpl = new TemplateResponse($api, 'home', 'app2');
+
+		$tpl->render();
+	}
+
+
+	public function testRenderDifferentRenderAs(){
+		$ocTpl = $this->getMock('Template', array('fetchPage'));
+		$ocTpl->expects($this->once())
+				->method('fetchPage');
+
+		$api = $this->getMock('OC\AppFramework\Core\API',
+					array('getAppName', 'getTemplate'), array('app'));
+		$api->expects($this->any())
+				->method('getAppName')
+				->will($this->returnValue('app'));
+		$api->expects($this->once())
+				->method('getTemplate')
+				->with($this->equalTo('home'), $this->equalTo('admin'), $this->equalTo('app'))
+				->will($this->returnValue($ocTpl));
+
+		$tpl = new TemplateResponse($api, 'home');
+		$tpl->renderAs('admin');
+
+		$tpl->render();
+	}
+
+
+	public function testGetRenderAs(){
+		$render = 'myrender';
+		$this->tpl->renderAs($render);
+		$this->assertEquals($render, $this->tpl->getRenderAs());
+	}
+
+}
diff --git a/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php b/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
new file mode 100644
index 0000000000..bfa54a48ea
--- /dev/null
+++ b/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
@@ -0,0 +1,280 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework;
+
+use OC\AppFramework\Controller\Controller;
+use OC\AppFramework\Http\Request;
+use OC\AppFramework\Http\Response;
+use OC\AppFramework\Middleware\Middleware;
+use OC\AppFramework\Middleware\MiddlewareDispatcher;
+
+
+require_once(__DIR__ . "/../classloader.php");
+
+
+// needed to test ordering
+class TestMiddleware extends Middleware {
+	public static $beforeControllerCalled = 0;
+	public static $afterControllerCalled = 0;
+	public static $afterExceptionCalled = 0;
+	public static $beforeOutputCalled = 0;
+
+	public $beforeControllerOrder = 0;
+	public $afterControllerOrder = 0;
+	public $afterExceptionOrder = 0;
+	public $beforeOutputOrder = 0;
+
+	public $controller;
+	public $methodName;
+	public $exception;
+	public $response;
+	public $output;
+
+	private $beforeControllerThrowsEx;
+
+	public function __construct($beforeControllerThrowsEx) {
+		self::$beforeControllerCalled = 0;
+		self::$afterControllerCalled = 0;
+		self::$afterExceptionCalled = 0;
+		self::$beforeOutputCalled = 0;
+		$this->beforeControllerThrowsEx = $beforeControllerThrowsEx;
+	}
+
+	public function beforeController($controller, $methodName){
+		self::$beforeControllerCalled++;
+		$this->beforeControllerOrder = self::$beforeControllerCalled;
+		$this->controller = $controller;
+		$this->methodName = $methodName;
+		if($this->beforeControllerThrowsEx){
+			throw new \Exception();
+		}
+	}
+
+	public function afterException($controller, $methodName, \Exception $exception){
+		self::$afterExceptionCalled++;
+		$this->afterExceptionOrder = self::$afterExceptionCalled;
+		$this->controller = $controller;
+		$this->methodName = $methodName;
+		$this->exception = $exception;
+		parent::afterException($controller, $methodName, $exception);
+	}
+
+	public function afterController($controller, $methodName, Response $response){
+		self::$afterControllerCalled++;
+		$this->afterControllerOrder = self::$afterControllerCalled;
+		$this->controller = $controller;
+		$this->methodName = $methodName;
+		$this->response = $response;
+		return parent::afterController($controller, $methodName, $response);
+	}
+
+	public function beforeOutput($controller, $methodName, $output){
+		self::$beforeOutputCalled++;
+		$this->beforeOutputOrder = self::$beforeOutputCalled;
+		$this->controller = $controller;
+		$this->methodName = $methodName;
+		$this->output = $output;
+		return parent::beforeOutput($controller, $methodName, $output);
+	}
+}
+
+
+class MiddlewareDispatcherTest extends \PHPUnit_Framework_TestCase {
+
+	private $dispatcher;
+
+
+	public function setUp() {
+		$this->dispatcher = new MiddlewareDispatcher();
+		$this->controller = $this->getControllerMock();
+		$this->method = 'method';
+		$this->response = new Response();
+		$this->output = 'hi';
+		$this->exception = new \Exception();
+	}
+
+
+	private function getAPIMock(){
+		return $this->getMock('OC\AppFramework\Core\API',
+					array('getAppName'), array('app'));
+	}
+
+
+	private function getControllerMock(){
+		return $this->getMock('OC\AppFramework\Controller\Controller', array('method'),
+			array($this->getAPIMock(), new Request()));
+	}
+
+
+	private function getMiddleware($beforeControllerThrowsEx=false){
+		$m1 = new TestMiddleware($beforeControllerThrowsEx);
+		$this->dispatcher->registerMiddleware($m1);
+		return $m1;
+	}
+
+
+	public function testAfterExceptionShouldReturnResponseOfMiddleware(){
+		$response = new Response();
+		$m1 = $this->getMock('\OC\AppFramework\Middleware\Middleware',
+				array('afterException', 'beforeController'));
+		$m1->expects($this->never())
+				->method('afterException');
+
+		$m2 = $this->getMock('OC\AppFramework\Middleware\Middleware',
+				array('afterException', 'beforeController'));
+		$m2->expects($this->once())
+				->method('afterException')
+				->will($this->returnValue($response));
+
+		$this->dispatcher->registerMiddleware($m1);
+		$this->dispatcher->registerMiddleware($m2);
+
+		$this->dispatcher->beforeController($this->controller, $this->method);
+		$this->assertEquals($response, $this->dispatcher->afterException($this->controller, $this->method, $this->exception));
+	}
+
+
+	public function testAfterExceptionShouldThrowAgainWhenNotHandled(){
+		$m1 = new TestMiddleware(false);
+		$m2 = new TestMiddleware(true);
+
+		$this->dispatcher->registerMiddleware($m1);
+		$this->dispatcher->registerMiddleware($m2);
+
+		$this->setExpectedException('\Exception');
+		$this->dispatcher->beforeController($this->controller, $this->method);
+		$this->dispatcher->afterException($this->controller, $this->method, $this->exception);
+	}
+
+
+	public function testBeforeControllerCorrectArguments(){
+		$m1 = $this->getMiddleware();
+		$this->dispatcher->beforeController($this->controller, $this->method);
+
+		$this->assertEquals($this->controller, $m1->controller);
+		$this->assertEquals($this->method, $m1->methodName);
+	}
+
+
+	public function testAfterControllerCorrectArguments(){
+		$m1 = $this->getMiddleware();
+
+		$this->dispatcher->afterController($this->controller, $this->method, $this->response);
+
+		$this->assertEquals($this->controller, $m1->controller);
+		$this->assertEquals($this->method, $m1->methodName);
+		$this->assertEquals($this->response, $m1->response);
+	}
+
+
+	public function testAfterExceptionCorrectArguments(){
+		$m1 = $this->getMiddleware();
+
+		$this->setExpectedException('\Exception');
+
+		$this->dispatcher->beforeController($this->controller, $this->method);
+		$this->dispatcher->afterException($this->controller, $this->method, $this->exception);
+
+		$this->assertEquals($this->controller, $m1->controller);
+		$this->assertEquals($this->method, $m1->methodName);
+		$this->assertEquals($this->exception, $m1->exception);
+	}
+
+
+	public function testBeforeOutputCorrectArguments(){
+		$m1 = $this->getMiddleware();
+
+		$this->dispatcher->beforeOutput($this->controller, $this->method, $this->output);
+
+		$this->assertEquals($this->controller, $m1->controller);
+		$this->assertEquals($this->method, $m1->methodName);
+		$this->assertEquals($this->output, $m1->output);
+	}
+
+
+	public function testBeforeControllerOrder(){
+		$m1 = $this->getMiddleware();
+		$m2 = $this->getMiddleware();
+
+		$this->dispatcher->beforeController($this->controller, $this->method);
+
+		$this->assertEquals(1, $m1->beforeControllerOrder);
+		$this->assertEquals(2, $m2->beforeControllerOrder);
+	}
+
+	public function testAfterControllerOrder(){
+		$m1 = $this->getMiddleware();
+		$m2 = $this->getMiddleware();
+
+		$this->dispatcher->afterController($this->controller, $this->method, $this->response);
+
+		$this->assertEquals(2, $m1->afterControllerOrder);
+		$this->assertEquals(1, $m2->afterControllerOrder);
+	}
+
+
+	public function testAfterExceptionOrder(){
+		$m1 = $this->getMiddleware();
+		$m2 = $this->getMiddleware();
+
+		$this->setExpectedException('\Exception');
+		$this->dispatcher->beforeController($this->controller, $this->method);
+		$this->dispatcher->afterException($this->controller, $this->method, $this->exception);
+
+		$this->assertEquals(1, $m1->afterExceptionOrder);
+		$this->assertEquals(1, $m2->afterExceptionOrder);
+	}
+
+
+	public function testBeforeOutputOrder(){
+		$m1 = $this->getMiddleware();
+		$m2 = $this->getMiddleware();
+
+		$this->dispatcher->beforeOutput($this->controller, $this->method, $this->output);
+
+		$this->assertEquals(2, $m1->beforeOutputOrder);
+		$this->assertEquals(1, $m2->beforeOutputOrder);
+	}
+
+
+	public function testExceptionShouldRunAfterExceptionOfOnlyPreviouslyExecutedMiddlewares(){
+		$m1 = $this->getMiddleware();
+		$m2 = $this->getMiddleware(true);
+		$m3 = $this->getMock('\OC\AppFramework\Middleware\Middleware');
+		$m3->expects($this->never())
+				->method('afterException');
+		$m3->expects($this->never())
+				->method('beforeController');
+		$m3->expects($this->never())
+				->method('afterController');
+
+		$this->dispatcher->registerMiddleware($m3);
+
+		$this->dispatcher->beforeOutput($this->controller, $this->method, $this->output);
+
+		$this->assertEquals(2, $m1->beforeOutputOrder);
+		$this->assertEquals(1, $m2->beforeOutputOrder);
+	}
+}
diff --git a/tests/lib/appframework/middleware/MiddlewareTest.php b/tests/lib/appframework/middleware/MiddlewareTest.php
new file mode 100644
index 0000000000..1adce6b3d4
--- /dev/null
+++ b/tests/lib/appframework/middleware/MiddlewareTest.php
@@ -0,0 +1,82 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework;
+
+use OC\AppFramework\Http\Request;
+use OC\AppFramework\Middleware\Middleware;
+
+
+require_once(__DIR__ . "/../classloader.php");
+
+
+class ChildMiddleware extends Middleware {};
+
+
+class MiddlewareTest extends \PHPUnit_Framework_TestCase {
+
+	private $middleware;
+	private $controller;
+	private $exception;
+	private $api;
+
+	protected function setUp(){
+		$this->middleware = new ChildMiddleware();
+
+		$this->api = $this->getMock('OC\AppFramework\Core\API',
+					array(), array('test'));
+
+		$this->controller = $this->getMock('OC\AppFramework\Controller\Controller',
+				array(), array($this->api, new Request()));
+		$this->exception = new \Exception();
+		$this->response = $this->getMock('OC\AppFramework\Http\Response');
+	}
+
+
+	public function testBeforeController() {
+		$this->middleware->beforeController($this->controller, null, $this->exception);
+	}
+
+
+	public function testAfterExceptionRaiseAgainWhenUnhandled() {
+		$this->setExpectedException('Exception');
+		$afterEx = $this->middleware->afterException($this->controller, null, $this->exception);
+	}
+
+
+	public function testAfterControllerReturnResponseWhenUnhandled() {
+		$response = $this->middleware->afterController($this->controller, null, $this->response);
+
+		$this->assertEquals($this->response, $response);
+	}
+
+
+	public function testBeforeOutputReturnOutputhenUnhandled() {
+		$output = $this->middleware->beforeOutput($this->controller, null, 'test');
+
+		$this->assertEquals('test', $output);
+	}
+
+
+}
diff --git a/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php b/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
new file mode 100644
index 0000000000..0b2103564e
--- /dev/null
+++ b/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
@@ -0,0 +1,388 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Middleware\Security;
+
+use OC\AppFramework\Http\Http;
+use OC\AppFramework\Http\Request;
+use OC\AppFramework\Http\RedirectResponse;
+use OC\AppFramework\Http\JSONResponse;
+use OC\AppFramework\Middleware\Middleware;
+
+
+require_once(__DIR__ . "/../../classloader.php");
+
+
+class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
+
+	private $middleware;
+	private $controller;
+	private $secException;
+	private $secAjaxException;
+	private $request;
+
+	public function setUp() {
+		$api = $this->getMock('OC\AppFramework\Core\API', array(), array('test'));
+		$this->controller = $this->getMock('OC\AppFramework\Controller\Controller',
+				array(), array($api, new Request()));
+
+		$this->request = new Request();
+		$this->middleware = new SecurityMiddleware($api, $this->request);
+		$this->secException = new SecurityException('hey', false);
+		$this->secAjaxException = new SecurityException('hey', true);
+	}
+
+
+	private function getAPI(){
+		return $this->getMock('OC\AppFramework\Core\API',
+					array('isLoggedIn', 'passesCSRFCheck', 'isAdminUser',
+							'isSubAdminUser', 'activateNavigationEntry',
+							'getUserId'),
+					array('app'));
+	}
+
+
+	private function checkNavEntry($method, $shouldBeActivated=false){
+		$api = $this->getAPI();
+
+		if($shouldBeActivated){
+			$api->expects($this->once())
+				->method('activateNavigationEntry');
+		} else {
+			$api->expects($this->never())
+				->method('activateNavigationEntry');
+		}
+
+		$sec = new SecurityMiddleware($api, $this->request);
+		$sec->beforeController('\OC\AppFramework\Middleware\Security\SecurityMiddlewareTest', $method);
+	}
+
+
+	/**
+	 * @IsLoggedInExemption
+	 * @CSRFExemption
+	 * @IsAdminExemption
+	 * @IsSubAdminExemption
+	 */
+	public function testSetNavigationEntry(){
+		$this->checkNavEntry('testSetNavigationEntry', true);
+	}
+
+
+	private function ajaxExceptionCheck($method, $shouldBeAjax=false){
+		$api = $this->getAPI();
+		$api->expects($this->any())
+				->method('passesCSRFCheck')
+				->will($this->returnValue(false));
+
+		$sec = new SecurityMiddleware($api, $this->request);
+
+		try {
+			$sec->beforeController('\OC\AppFramework\Middleware\Security\SecurityMiddlewareTest',
+					$method);
+		} catch (SecurityException $ex){
+			if($shouldBeAjax){
+				$this->assertTrue($ex->isAjax());
+			} else {
+				$this->assertFalse($ex->isAjax());
+			}
+
+		}
+	}
+
+
+	/**
+	 * @Ajax
+	 * @IsLoggedInExemption
+	 * @CSRFExemption
+	 * @IsAdminExemption
+	 * @IsSubAdminExemption
+	 */
+	public function testAjaxException(){
+		$this->ajaxExceptionCheck('testAjaxException');
+	}
+
+
+	/**
+	 * @IsLoggedInExemption
+	 * @CSRFExemption
+	 * @IsAdminExemption
+	 * @IsSubAdminExemption
+	 */
+	public function testNoAjaxException(){
+		$this->ajaxExceptionCheck('testNoAjaxException');
+	}
+
+
+	private function ajaxExceptionStatus($method, $test, $status) {
+		$api = $this->getAPI();
+		$api->expects($this->any())
+				->method($test)
+				->will($this->returnValue(false));
+
+		$sec = new SecurityMiddleware($api, $this->request);
+
+		try {
+			$sec->beforeController('\OC\AppFramework\Middleware\Security\SecurityMiddlewareTest',
+					$method);
+		} catch (SecurityException $ex){
+			$this->assertEquals($status, $ex->getCode());
+		}
+	}
+
+	/**
+	 * @Ajax
+	 */
+	public function testAjaxStatusLoggedInCheck() {
+		$this->ajaxExceptionStatus(
+			'testAjaxStatusLoggedInCheck',
+			'isLoggedIn',
+			Http::STATUS_UNAUTHORIZED
+		);
+	}
+
+	/**
+	 * @Ajax
+	 * @IsLoggedInExemption
+	 */
+	public function testAjaxNotAdminCheck() {
+		$this->ajaxExceptionStatus(
+			'testAjaxNotAdminCheck',
+			'isAdminUser',
+			Http::STATUS_FORBIDDEN
+		);
+	}
+
+	/**
+	 * @Ajax
+	 * @IsLoggedInExemption
+	 * @IsAdminExemption
+	 */
+	public function testAjaxNotSubAdminCheck() {
+		$this->ajaxExceptionStatus(
+			'testAjaxNotSubAdminCheck',
+			'isSubAdminUser',
+			Http::STATUS_FORBIDDEN
+		);
+	}
+
+	/**
+	 * @Ajax
+	 * @IsLoggedInExemption
+	 * @IsAdminExemption
+	 * @IsSubAdminExemption
+	 */
+	public function testAjaxStatusCSRFCheck() {
+		$this->ajaxExceptionStatus(
+			'testAjaxStatusCSRFCheck',
+			'passesCSRFCheck',
+			Http::STATUS_PRECONDITION_FAILED
+		);
+	}
+
+	/**
+	 * @Ajax
+	 * @CSRFExemption
+	 * @IsLoggedInExemption
+	 * @IsAdminExemption
+	 * @IsSubAdminExemption
+	 */
+	public function testAjaxStatusAllGood() {
+		$this->ajaxExceptionStatus(
+			'testAjaxStatusAllGood',
+			'isLoggedIn',
+			0
+		);
+		$this->ajaxExceptionStatus(
+			'testAjaxStatusAllGood',
+			'isAdminUser',
+			0
+		);
+		$this->ajaxExceptionStatus(
+			'testAjaxStatusAllGood',
+			'isSubAdminUser',
+			0
+		);
+		$this->ajaxExceptionStatus(
+			'testAjaxStatusAllGood',
+			'passesCSRFCheck',
+			0
+		);
+	}
+
+	/**
+	 * @IsLoggedInExemption
+	 * @CSRFExemption
+	 * @IsAdminExemption
+	 * @IsSubAdminExemption
+	 */
+	public function testNoChecks(){
+		$api = $this->getAPI();
+		$api->expects($this->never())
+				->method('passesCSRFCheck')
+				->will($this->returnValue(true));
+		$api->expects($this->never())
+				->method('isAdminUser')
+				->will($this->returnValue(true));
+		$api->expects($this->never())
+				->method('isSubAdminUser')
+				->will($this->returnValue(true));
+		$api->expects($this->never())
+				->method('isLoggedIn')
+				->will($this->returnValue(true));
+
+		$sec = new SecurityMiddleware($api, $this->request);
+		$sec->beforeController('\OC\AppFramework\Middleware\Security\SecurityMiddlewareTest',
+				'testNoChecks');
+	}
+
+
+	private function securityCheck($method, $expects, $shouldFail=false){
+		$api = $this->getAPI();
+		$api->expects($this->once())
+				->method($expects)
+				->will($this->returnValue(!$shouldFail));
+
+		$sec = new SecurityMiddleware($api, $this->request);
+
+		if($shouldFail){
+			$this->setExpectedException('\OC\AppFramework\Middleware\Security\SecurityException');
+		}
+
+		$sec->beforeController('\OC\AppFramework\Middleware\Security\SecurityMiddlewareTest', $method);
+	}
+
+
+	/**
+	 * @IsLoggedInExemption
+	 * @IsAdminExemption
+	 * @IsSubAdminExemption
+	 */
+	public function testCsrfCheck(){
+		$this->securityCheck('testCsrfCheck', 'passesCSRFCheck');
+	}
+
+
+	/**
+	 * @IsLoggedInExemption
+	 * @IsAdminExemption
+	 * @IsSubAdminExemption
+	 */
+	public function testFailCsrfCheck(){
+		$this->securityCheck('testFailCsrfCheck', 'passesCSRFCheck', true);
+	}
+
+
+	/**
+	 * @CSRFExemption
+	 * @IsAdminExemption
+	 * @IsSubAdminExemption
+	 */
+	public function testLoggedInCheck(){
+		$this->securityCheck('testLoggedInCheck', 'isLoggedIn');
+	}
+
+
+	/**
+	 * @CSRFExemption
+	 * @IsAdminExemption
+	 * @IsSubAdminExemption
+	 */
+	public function testFailLoggedInCheck(){
+		$this->securityCheck('testFailLoggedInCheck', 'isLoggedIn', true);
+	}
+
+
+	/**
+	 * @IsLoggedInExemption
+	 * @CSRFExemption
+	 * @IsSubAdminExemption
+	 */
+	public function testIsAdminCheck(){
+		$this->securityCheck('testIsAdminCheck', 'isAdminUser');
+	}
+
+
+	/**
+	 * @IsLoggedInExemption
+	 * @CSRFExemption
+	 * @IsSubAdminExemption
+	 */
+	public function testFailIsAdminCheck(){
+		$this->securityCheck('testFailIsAdminCheck', 'isAdminUser', true);
+	}
+
+
+	/**
+	 * @IsLoggedInExemption
+	 * @CSRFExemption
+	 * @IsAdminExemption
+	 */
+	public function testIsSubAdminCheck(){
+		$this->securityCheck('testIsSubAdminCheck', 'isSubAdminUser');
+	}
+
+
+	/**
+	 * @IsLoggedInExemption
+	 * @CSRFExemption
+	 * @IsAdminExemption
+	 */
+	public function testFailIsSubAdminCheck(){
+		$this->securityCheck('testFailIsSubAdminCheck', 'isSubAdminUser', true);
+	}
+
+
+
+	public function testAfterExceptionNotCaughtThrowsItAgain(){
+		$ex = new \Exception();
+		$this->setExpectedException('\Exception');
+		$this->middleware->afterException($this->controller, 'test', $ex);
+	}
+
+
+	public function testAfterExceptionReturnsRedirect(){
+		$api = $this->getMock('OC\AppFramework\Core\API', array(), array('test'));
+		$this->controller = $this->getMock('OC\AppFramework\Controller\Controller',
+			array(), array($api, new Request()));
+
+		$this->request = new Request(
+			array('server' => array('HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')));
+		$this->middleware = new SecurityMiddleware($api, $this->request);
+		$response = $this->middleware->afterException($this->controller, 'test',
+				$this->secException);
+
+		$this->assertTrue($response instanceof RedirectResponse);
+	}
+
+
+	public function testAfterAjaxExceptionReturnsJSONError(){
+		$response = $this->middleware->afterException($this->controller, 'test',
+				$this->secAjaxException);
+
+		$this->assertTrue($response instanceof JSONResponse);
+	}
+
+
+}
diff --git a/tests/lib/appframework/routing/RoutingTest.php b/tests/lib/appframework/routing/RoutingTest.php
new file mode 100644
index 0000000000..92ad461471
--- /dev/null
+++ b/tests/lib/appframework/routing/RoutingTest.php
@@ -0,0 +1,214 @@
+<?php
+
+namespace OC\AppFramework\Routing;
+
+use OC\AppFramework\DependencyInjection\DIContainer;
+use OC\AppFramework\routing\RouteConfig;
+
+require_once(__DIR__ . "/../classloader.php");
+
+class RouteConfigTest extends \PHPUnit_Framework_TestCase
+{
+
+	public function testSimpleRoute()
+	{
+		$routes = array('routes' => array(
+			array('name' => 'folders#open', 'url' => '/folders/{folderId}/open', 'verb' => 'GET')
+		));
+
+		$this->assertSimpleRoute($routes, 'folders.open', 'GET', '/folders/{folderId}/open', 'FoldersController', 'open');
+	}
+
+	public function testSimpleRouteWithMissingVerb()
+	{
+		$routes = array('routes' => array(
+			array('name' => 'folders#open', 'url' => '/folders/{folderId}/open')
+		));
+
+		$this->assertSimpleRoute($routes, 'folders.open', 'GET', '/folders/{folderId}/open', 'FoldersController', 'open');
+	}
+
+	public function testSimpleRouteWithLowercaseVerb()
+	{
+		$routes = array('routes' => array(
+			array('name' => 'folders#open', 'url' => '/folders/{folderId}/open', 'verb' => 'delete')
+		));
+
+		$this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open');
+	}
+
+	/**
+	 * @expectedException \UnexpectedValueException
+	 */
+	public function testSimpleRouteWithBrokenName()
+	{
+		$routes = array('routes' => array(
+			array('name' => 'folders_open', 'url' => '/folders/{folderId}/open', 'verb' => 'delete')
+		));
+
+		// router mock
+		$router = $this->getMock("\OC_Router", array('create'));
+
+		// load route configuration
+		$container = new DIContainer('app1');
+		$config = new RouteConfig($container, $router, $routes);
+
+		$config->register();
+	}
+
+	public function testSimpleRouteWithUnderScoreNames()
+	{
+		$routes = array('routes' => array(
+			array('name' => 'admin_folders#open_current', 'url' => '/folders/{folderId}/open', 'verb' => 'delete')
+		));
+
+		$this->assertSimpleRoute($routes, 'admin_folders.open_current', 'DELETE', '/folders/{folderId}/open', 'AdminFoldersController', 'openCurrent');
+	}
+
+	public function testResource()
+	{
+		$routes = array('resources' => array('accounts' => array('url' => '/accounts')));
+
+		$this->assertResource($routes, 'accounts', '/accounts', 'AccountsController', 'accountId');
+	}
+
+	public function testResourceWithUnderScoreName()
+	{
+		$routes = array('resources' => array('admin_accounts' => array('url' => '/admin/accounts')));
+
+		$this->assertResource($routes, 'admin_accounts', '/admin/accounts', 'AdminAccountsController', 'adminAccountId');
+	}
+
+	private function assertSimpleRoute($routes, $name, $verb, $url, $controllerName, $actionName)
+	{
+		// route mocks
+		$route = $this->mockRoute($verb, $controllerName, $actionName);
+
+		// router mock
+		$router = $this->getMock("\OC_Router", array('create'));
+
+		// we expect create to be called once:
+		$router
+			->expects($this->once())
+			->method('create')
+			->with($this->equalTo('app1.' . $name), $this->equalTo($url))
+			->will($this->returnValue($route));
+
+		// load route configuration
+		$container = new DIContainer('app1');
+		$config = new RouteConfig($container, $router, $routes);
+
+		$config->register();
+	}
+
+	private function assertResource($yaml, $resourceName, $url, $controllerName, $paramName)
+	{
+		// router mock
+		$router = $this->getMock("\OC_Router", array('create'));
+
+		// route mocks
+		$indexRoute = $this->mockRoute('GET', $controllerName, 'index');
+		$showRoute = $this->mockRoute('GET', $controllerName, 'show');
+		$createRoute = $this->mockRoute('POST', $controllerName, 'create');
+		$updateRoute = $this->mockRoute('PUT', $controllerName, 'update');
+		$destroyRoute = $this->mockRoute('DELETE', $controllerName, 'destroy');
+
+		$urlWithParam = $url . '/{' . $paramName . '}';
+
+		// we expect create to be called once:
+		$router
+			->expects($this->at(0))
+			->method('create')
+			->with($this->equalTo('app1.' . $resourceName . '.index'), $this->equalTo($url))
+			->will($this->returnValue($indexRoute));
+
+		$router
+			->expects($this->at(1))
+			->method('create')
+			->with($this->equalTo('app1.' . $resourceName . '.show'), $this->equalTo($urlWithParam))
+			->will($this->returnValue($showRoute));
+
+		$router
+			->expects($this->at(2))
+			->method('create')
+			->with($this->equalTo('app1.' . $resourceName . '.create'), $this->equalTo($url))
+			->will($this->returnValue($createRoute));
+
+		$router
+			->expects($this->at(3))
+			->method('create')
+			->with($this->equalTo('app1.' . $resourceName . '.update'), $this->equalTo($urlWithParam))
+			->will($this->returnValue($updateRoute));
+
+		$router
+			->expects($this->at(4))
+			->method('create')
+			->with($this->equalTo('app1.' . $resourceName . '.destroy'), $this->equalTo($urlWithParam))
+			->will($this->returnValue($destroyRoute));
+
+		// load route configuration
+		$container = new DIContainer('app1');
+		$config = new RouteConfig($container, $router, $yaml);
+
+		$config->register();
+	}
+
+	/**
+	 * @param $verb
+	 * @param $controllerName
+	 * @param $actionName
+	 * @return \PHPUnit_Framework_MockObject_MockObject
+	 */
+	private function mockRoute($verb, $controllerName, $actionName)
+	{
+		$container = new DIContainer('app1');
+		$route = $this->getMock("\OC_Route", array('method', 'action'), array(), '', false);
+		$route
+			->expects($this->exactly(1))
+			->method('method')
+			->with($this->equalTo($verb))
+			->will($this->returnValue($route));
+
+		$route
+			->expects($this->exactly(1))
+			->method('action')
+			->with($this->equalTo(new RouteActionHandler($container, $controllerName, $actionName)))
+			->will($this->returnValue($route));
+		return $route;
+	}
+
+}
+
+/*
+#
+# sample routes.yaml for ownCloud
+#
+# the section simple describes one route
+
+routes:
+        - name: folders#open
+          url: /folders/{folderId}/open
+          verb: GET
+          # controller: name.split()[0]
+          # action: name.split()[1]
+
+# for a resource following actions will be generated:
+# - index
+# - create
+# - show
+# - update
+# - destroy
+# - new
+resources:
+    accounts:
+        url: /accounts
+
+    folders:
+        url: /accounts/{accountId}/folders
+        # actions can be used to define additional actions on the resource
+        actions:
+            - name: validate
+              verb: GET
+              on-collection: false
+
+ * */
diff --git a/tests/lib/appframework/utility/MethodAnnotationReaderTest.php b/tests/lib/appframework/utility/MethodAnnotationReaderTest.php
new file mode 100644
index 0000000000..bcdcf3de37
--- /dev/null
+++ b/tests/lib/appframework/utility/MethodAnnotationReaderTest.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\AppFramework\Utility;
+
+
+require_once __DIR__ . "/../classloader.php";
+
+
+class MethodAnnotationReaderTest extends \PHPUnit_Framework_TestCase {
+
+
+	/**
+	 * @Annotation
+	 */
+	public function testReadAnnotation(){
+		$reader = new MethodAnnotationReader('\OC\AppFramework\Utility\MethodAnnotationReaderTest',
+				'testReadAnnotation');
+
+		$this->assertTrue($reader->hasAnnotation('Annotation'));
+	}
+
+
+	/**
+	 * @Annotation
+	 * @param test
+	 */
+	public function testReadAnnotationNoLowercase(){
+		$reader = new MethodAnnotationReader('\OC\AppFramework\Utility\MethodAnnotationReaderTest',
+				'testReadAnnotationNoLowercase');
+
+		$this->assertTrue($reader->hasAnnotation('Annotation'));
+		$this->assertFalse($reader->hasAnnotation('param'));
+	}
+
+
+}
-- 
GitLab


From 3324495a7882cb7957c5ffd498b1b6275a192b32 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Sat, 17 Aug 2013 18:26:53 +0200
Subject: [PATCH 008/248] pulling in 3rdparty submodule

---
 3rdparty | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/3rdparty b/3rdparty
index 8d68fa1eab..75a05d76ab 160000
--- a/3rdparty
+++ b/3rdparty
@@ -1 +1 @@
-Subproject commit 8d68fa1eabe8c1d033cb89676b31f0eaaf99335b
+Subproject commit 75a05d76ab86ba7454b4312fd0ff2ca5bd5828cf
-- 
GitLab


From 72e1a8d83b3a21875cac6948879471661d120c52 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 20 Aug 2013 12:47:23 +0200
Subject: [PATCH 009/248] fixing require to Pimple

---
 lib/appframework/dependencyinjection/dicontainer.php | 2 +-
 tests/lib/appframework/AppTest.php                   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/appframework/dependencyinjection/dicontainer.php b/lib/appframework/dependencyinjection/dicontainer.php
index 34f64e72cb..d6cf4d5502 100644
--- a/lib/appframework/dependencyinjection/dicontainer.php
+++ b/lib/appframework/dependencyinjection/dicontainer.php
@@ -34,7 +34,7 @@ use OC\AppFramework\Middleware\Security\SecurityMiddleware;
 use OC\AppFramework\Utility\TimeFactory;
 
 // register 3rdparty autoloaders
-require_once __DIR__ . '/../../../../3rdparty/Pimple/Pimple.php';
+require_once __DIR__ . '/../../../3rdparty/Pimple/Pimple.php';
 
 
 /**
diff --git a/tests/lib/appframework/AppTest.php b/tests/lib/appframework/AppTest.php
index 000094d07c..6e647f68e6 100644
--- a/tests/lib/appframework/AppTest.php
+++ b/tests/lib/appframework/AppTest.php
@@ -29,7 +29,7 @@ use OC\AppFramework\Core\API;
 use OC\AppFramework\Middleware\MiddlewareDispatcher;
 
 // FIXME: loading pimpl correctly from 3rdparty repo
-require_once __DIR__ . '/../../../../3rdparty/Pimple/Pimple.php';
+require_once __DIR__ . '/../../../3rdparty/Pimple/Pimple.php';
 require_once __DIR__ . "/classloader.php";
 
 
-- 
GitLab


From 0fa2e1b3d91d243452ffdfd36dbd0bed3f27e387 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 20 Aug 2013 12:48:45 +0200
Subject: [PATCH 010/248] there is no HttpMiddleware

---
 lib/appframework/dependencyinjection/dicontainer.php | 1 -
 1 file changed, 1 deletion(-)

diff --git a/lib/appframework/dependencyinjection/dicontainer.php b/lib/appframework/dependencyinjection/dicontainer.php
index d6cf4d5502..69c645b1be 100644
--- a/lib/appframework/dependencyinjection/dicontainer.php
+++ b/lib/appframework/dependencyinjection/dicontainer.php
@@ -29,7 +29,6 @@ use OC\AppFramework\Http\Request;
 use OC\AppFramework\Http\Dispatcher;
 use OC\AppFramework\Core\API;
 use OC\AppFramework\Middleware\MiddlewareDispatcher;
-use OC\AppFramework\Middleware\Http\HttpMiddleware;
 use OC\AppFramework\Middleware\Security\SecurityMiddleware;
 use OC\AppFramework\Utility\TimeFactory;
 
-- 
GitLab


From 0fa8f380767369b4aa85f5944a8e921009b1ed27 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 20 Aug 2013 16:51:12 +0200
Subject: [PATCH 011/248] fixing broken test

---
 tests/lib/appframework/AppTest.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/lib/appframework/AppTest.php b/tests/lib/appframework/AppTest.php
index 6e647f68e6..dcf0e6f77e 100644
--- a/tests/lib/appframework/AppTest.php
+++ b/tests/lib/appframework/AppTest.php
@@ -46,7 +46,7 @@ class AppTest extends \PHPUnit_Framework_TestCase {
 	private $controllerMethod;
 
 	protected function setUp() {
-		$this->container = new \Pimple();
+		$this->container = new \OC\AppFramework\DependencyInjection\DIContainer('test');
 		$this->controller = $this->getMockBuilder(
 			'OC\AppFramework\Controller\Controller')
 			->disableOriginalConstructor()
-- 
GitLab


From cdada78aa4acd2880e0344a476d3c1d838645ae5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 20 Aug 2013 17:20:36 +0200
Subject: [PATCH 012/248] typos & unused var fixed

---
 lib/appframework/http/dispatcher.php       | 11 +++++------
 lib/appframework/http/downloadresponse.php |  1 -
 2 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/lib/appframework/http/dispatcher.php b/lib/appframework/http/dispatcher.php
index ab5644274f..183854650f 100644
--- a/lib/appframework/http/dispatcher.php
+++ b/lib/appframework/http/dispatcher.php
@@ -29,7 +29,7 @@ use \OC\AppFramework\Middleware\MiddlewareDispatcher;
 
 
 /**
- * Class to dispatch the request to the middleware disptacher
+ * Class to dispatch the request to the middleware dispatcher
  */
 class Dispatcher {
 
@@ -67,11 +67,10 @@ class Dispatcher {
 				$methodName);
 			$response = $controller->$methodName();
 
-
-		// if an exception appears, the middleware checks if it can handle the
-		// exception and creates a response. If no response is created, it is
-		// assumed that theres no middleware who can handle it and the error is
-		// thrown again
+			// if an exception appears, the middleware checks if it can handle the
+			// exception and creates a response. If no response is created, it is
+			// assumed that theres no middleware who can handle it and the error is
+			// thrown again
 		} catch(\Exception $exception){
 			$response = $this->middlewareDispatcher->afterException(
 				$controller, $methodName, $exception);
diff --git a/lib/appframework/http/downloadresponse.php b/lib/appframework/http/downloadresponse.php
index 5a0db325fe..096e4fc833 100644
--- a/lib/appframework/http/downloadresponse.php
+++ b/lib/appframework/http/downloadresponse.php
@@ -30,7 +30,6 @@ namespace OC\AppFramework\Http;
  */
 abstract class DownloadResponse extends Response {
 
-	private $content;
 	private $filename;
 	private $contentType;
 
-- 
GitLab


From 93194bb39617d4b11a0a84b8cd4caf0491155961 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 20 Aug 2013 17:21:14 +0200
Subject: [PATCH 013/248] Introducing IContainer into public api

---
 .../dependencyinjection/dicontainer.php       | 22 +++++-----
 lib/appframework/utility/simplecontainer.php  | 44 +++++++++++++++++++
 tests/lib/appframework/classloader.php        |  9 ++++
 3 files changed, 63 insertions(+), 12 deletions(-)
 create mode 100644 lib/appframework/utility/simplecontainer.php

diff --git a/lib/appframework/dependencyinjection/dicontainer.php b/lib/appframework/dependencyinjection/dicontainer.php
index 69c645b1be..88ad2cd414 100644
--- a/lib/appframework/dependencyinjection/dicontainer.php
+++ b/lib/appframework/dependencyinjection/dicontainer.php
@@ -30,19 +30,11 @@ use OC\AppFramework\Http\Dispatcher;
 use OC\AppFramework\Core\API;
 use OC\AppFramework\Middleware\MiddlewareDispatcher;
 use OC\AppFramework\Middleware\Security\SecurityMiddleware;
+use OC\AppFramework\Utility\SimpleContainer;
 use OC\AppFramework\Utility\TimeFactory;
 
-// register 3rdparty autoloaders
-require_once __DIR__ . '/../../../3rdparty/Pimple/Pimple.php';
 
-
-/**
- * This class extends Pimple (http://pimple.sensiolabs.org/) for reusability
- * To use this class, extend your own container from this. Should you require it
- * you can overwrite the dependencies with your own classes by simply redefining
- * a dependency
- */
-class DIContainer extends \Pimple {
+class DIContainer extends SimpleContainer {
 
 
 	/**
@@ -61,8 +53,14 @@ class DIContainer extends \Pimple {
 		 * Http
 		 */
 		$this['Request'] = $this->share(function($c) {
-			$params = json_decode(file_get_contents('php://input'), true);
-			$params = is_array($params) ? $params: array();
+
+			$params = array();
+
+			// we json decode the body only in case of content type json
+			if (isset($_SERVER['CONTENT_TYPE']) && stripos($_SERVER['CONTENT_TYPE'],'json') === true ) {
+				$params = json_decode(file_get_contents('php://input'), true);
+				$params = is_array($params) ? $params: array();
+			}
 
 			return new Request(
 				array(
diff --git a/lib/appframework/utility/simplecontainer.php b/lib/appframework/utility/simplecontainer.php
new file mode 100644
index 0000000000..04b6cd727b
--- /dev/null
+++ b/lib/appframework/utility/simplecontainer.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace OC\AppFramework\Utility;
+
+// register 3rdparty autoloaders
+require_once __DIR__ . '/../../../3rdparty/Pimple/Pimple.php';
+
+/**
+ * Class SimpleContainer
+ *
+ * SimpleContainer is a simple implementation of IContainer on basis of \Pimple
+ */
+class SimpleContainer extends \Pimple implements \OCP\Core\IContainer {
+
+	/**
+	 * @param string $name name of the service to query for
+	 * @return object registered service for the given $name
+	 */
+	public function query($name) {
+		return $this->offsetGet($name);
+	}
+
+	function registerParameter($name, $value)
+	{
+		$this[$name] = $value;
+	}
+
+	/**
+	 * The given closure is call the first time the given service is queried.
+	 * The closure has to return the instance for the given service.
+	 * Created instance will be cached in case $shared is true.
+	 *
+	 * @param string $name name of the service to register another backend for
+	 * @param callable $closure the closure to be called on service creation
+	 */
+	function registerService($name, \Closure $closure, $shared = true)
+	{
+		if ($shared) {
+			$this[$name] = \Pimple::share($closure);
+		} else {
+			$this[$name] = $closure;
+		}
+	}
+}
diff --git a/tests/lib/appframework/classloader.php b/tests/lib/appframework/classloader.php
index ae485e67b2..cd9f893df3 100644
--- a/tests/lib/appframework/classloader.php
+++ b/tests/lib/appframework/classloader.php
@@ -32,6 +32,15 @@ spl_autoload_register(function ($className){
 		}
 	}
 
+	if (strpos($className, 'OCP\\') === 0) {
+		$path = strtolower(str_replace('\\', '/', substr($className, 3)) . '.php');
+		$relPath = __DIR__ . '/../../../lib/public' . $path;
+
+		if(file_exists($relPath)){
+			require_once $relPath;
+		}
+	}
+
 	// FIXME: this will most probably not work anymore
 	if (strpos($className, 'OCA\\') === 0) {
 
-- 
GitLab


From 6e1946ab00cca760d555222df008ba92b0185eca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 20 Aug 2013 17:22:33 +0200
Subject: [PATCH 014/248] Introducing IContainer into public api

---
 lib/public/core/icontainer.php | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 lib/public/core/icontainer.php

diff --git a/lib/public/core/icontainer.php b/lib/public/core/icontainer.php
new file mode 100644
index 0000000000..a6c93abec6
--- /dev/null
+++ b/lib/public/core/icontainer.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace OCP\Core;
+
+/**
+ * Class IContainer
+ *
+ * IContainer is the basic interface to be used for any internal dependency injection mechanism
+ *
+ * @package OCP\Core
+ */
+interface IContainer {
+
+	function query($name);
+
+	function registerParameter($name, $value);
+
+	function registerService($name, \Closure $closure, $shared = true);
+}
-- 
GitLab


From f115b94927fedb4fd0c74c534e3766dae3244411 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 20 Aug 2013 17:53:58 +0200
Subject: [PATCH 015/248] Introducing IRequest

---
 lib/appframework/http/request.php | 111 +++++++++++++++++++++++++++++-
 lib/public/core/irequest.php      |  88 +++++++++++++++++++++++
 2 files changed, 198 insertions(+), 1 deletion(-)
 create mode 100644 lib/public/core/irequest.php

diff --git a/lib/appframework/http/request.php b/lib/appframework/http/request.php
index 7d024c8605..ab72a8db69 100644
--- a/lib/appframework/http/request.php
+++ b/lib/appframework/http/request.php
@@ -22,12 +22,14 @@
 
 namespace OC\AppFramework\Http;
 
+use OCP\Core\IRequest;
+
 /**
  * Class for accessing variables in the request.
  * This class provides an immutable object with request variables.
  */
 
-class Request implements \ArrayAccess, \Countable {
+class Request implements \ArrayAccess, \Countable, IRequest {
 
 	protected $items = array();
 	protected $allowedKeys = array(
@@ -214,4 +216,111 @@ class Request implements \ArrayAccess, \Countable {
 		return null;
 	}
 
+	/**
+	 * Lets you access post and get parameters by the index
+	 * In case of json requests the encoded json body is accessed
+	 *
+	 * @param string $key the key which you want to access in the URL Parameter
+	 *                     placeholder, $_POST or $_GET array.
+	 *                     The priority how they're returned is the following:
+	 *                     1. URL parameters
+	 *                     2. POST parameters
+	 *                     3. GET parameters
+	 * @param mixed $default If the key is not found, this value will be returned
+	 * @return mixed the content of the array
+	 */
+	public function getParam($key, $default = null)
+	{
+		return isset($this->parameters[$key])
+			? $this->parameters[$key]
+			: $default;
+	}
+
+	/**
+	 * Returns all params that were received, be it from the request
+	 * (as GET or POST) or throuh the URL by the route
+	 * @return array the array with all parameters
+	 */
+	public function getParams()
+	{
+		return $this->parameters;
+	}
+
+	/**
+	 * Returns the method of the request
+	 * @return string the method of the request (POST, GET, etc)
+	 */
+	public function getMethod()
+	{
+		return $this->method;
+	}
+
+	/**
+	 * Shortcut for accessing an uploaded file through the $_FILES array
+	 * @param string $key the key that will be taken from the $_FILES array
+	 * @return array the file in the $_FILES element
+	 */
+	public function getUploadedFile($key)
+	{
+		return isset($this->files[$key]) ? $this->files[$key] : null;
+	}
+
+	/**
+	 * Shortcut for getting env variables
+	 * @param string $key the key that will be taken from the $_ENV array
+	 * @return array the value in the $_ENV element
+	 */
+	public function getEnv($key)
+	{
+		return isset($this->env[$key]) ? $this->env[$key] : null;
+	}
+
+	/**
+	 * Shortcut for getting session variables
+	 * @param string $key the key that will be taken from the $_SESSION array
+	 * @return array the value in the $_SESSION element
+	 */
+	function getSession($key)
+	{
+		return isset($this->session[$key]) ? $this->session[$key] : null;
+	}
+
+	/**
+	 * Shortcut for getting cookie variables
+	 * @param string $key the key that will be taken from the $_COOKIE array
+	 * @return array the value in the $_COOKIE element
+	 */
+	function getCookie($key)
+	{
+		return isset($this->cookies[$key]) ? $this->cookies[$key] : null;
+	}
+
+	/**
+	 * Returns the request body content.
+	 *
+	 * @param Boolean $asResource If true, a resource will be returned
+	 *
+	 * @return string|resource The request body content or a resource to read the body stream.
+	 *
+	 * @throws \LogicException
+	 */
+	function getContent($asResource = false)
+	{
+		return null;
+//		if (false === $this->content || (true === $asResource && null !== $this->content)) {
+//			throw new \LogicException('getContent() can only be called once when using the resource return type.');
+//		}
+//
+//		if (true === $asResource) {
+//			$this->content = false;
+//
+//			return fopen('php://input', 'rb');
+//		}
+//
+//		if (null === $this->content) {
+//			$this->content = file_get_contents('php://input');
+//		}
+//
+//		return $this->content;
+	}
 }
diff --git a/lib/public/core/irequest.php b/lib/public/core/irequest.php
new file mode 100644
index 0000000000..f283e9cb25
--- /dev/null
+++ b/lib/public/core/irequest.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Created by JetBrains PhpStorm.
+ * User: deepdiver
+ * Date: 20.08.13
+ * Time: 16:15
+ * To change this template use File | Settings | File Templates.
+ */
+
+namespace OCP\Core;
+
+
+interface IRequest {
+
+	function getHeader($name);
+
+	/**
+	 * Lets you access post and get parameters by the index
+	 * In case of json requests the encoded json body is accessed
+	 *
+	 * @param string $key the key which you want to access in the URL Parameter
+	 *                     placeholder, $_POST or $_GET array.
+	 *                     The priority how they're returned is the following:
+	 *                     1. URL parameters
+	 *                     2. POST parameters
+	 *                     3. GET parameters
+	 * @param mixed $default If the key is not found, this value will be returned
+	 * @return mixed the content of the array
+	 */
+	public function getParam($key, $default = null);
+
+
+	/**
+	 * Returns all params that were received, be it from the request
+	 * (as GET or POST) or throuh the URL by the route
+	 * @return array the array with all parameters
+	 */
+	public function getParams();
+
+	/**
+	 * Returns the method of the request
+	 * @return string the method of the request (POST, GET, etc)
+	 */
+	public function getMethod();
+
+	/**
+	 * Shortcut for accessing an uploaded file through the $_FILES array
+	 * @param string $key the key that will be taken from the $_FILES array
+	 * @return array the file in the $_FILES element
+	 */
+	public function getUploadedFile($key);
+
+
+	/**
+	 * Shortcut for getting env variables
+	 * @param string $key the key that will be taken from the $_ENV array
+	 * @return array the value in the $_ENV element
+	 */
+	public function getEnv($key);
+
+
+	/**
+	 * Shortcut for getting session variables
+	 * @param string $key the key that will be taken from the $_SESSION array
+	 * @return array the value in the $_SESSION element
+	 */
+	function getSession($key);
+
+
+	/**
+	 * Shortcut for getting cookie variables
+	 * @param string $key the key that will be taken from the $_COOKIE array
+	 * @return array the value in the $_COOKIE element
+	 */
+	function getCookie($key);
+
+
+	/**
+	 * Returns the request body content.
+	 *
+	 * @param Boolean $asResource If true, a resource will be returned
+	 *
+	 * @return string|resource The request body content or a resource to read the body stream.
+	 *
+	 * @throws \LogicException
+	 */
+	function getContent($asResource = false);
+}
-- 
GitLab


From 25ebe495b834f25eefdfcca33b47626257061526 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 20 Aug 2013 21:05:55 +0200
Subject: [PATCH 016/248] controller reuses IRequest methods

---
 lib/appframework/controller/controller.php | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/lib/appframework/controller/controller.php b/lib/appframework/controller/controller.php
index 3e8166050d..f6f34618ec 100644
--- a/lib/appframework/controller/controller.php
+++ b/lib/appframework/controller/controller.php
@@ -63,9 +63,7 @@ abstract class Controller {
 	 * @return mixed the content of the array
 	 */
 	public function params($key, $default=null){
-		return isset($this->request->parameters[$key])
-			? $this->request->parameters[$key]
-			: $default;
+		return $this->request->getParam($key, $default);
 	}
 
 
@@ -75,7 +73,7 @@ abstract class Controller {
 	 * @return array the array with all parameters
 	 */
 	public function getParams() {
-		return $this->request->parameters;
+		return $this->request->getParams();
 	}
 
 
@@ -84,7 +82,7 @@ abstract class Controller {
 	 * @return string the method of the request (POST, GET, etc)
 	 */
 	public function method() {
-		return $this->request->method;
+		return $this->request->getMethod();
 	}
 
 
@@ -94,7 +92,7 @@ abstract class Controller {
 	 * @return array the file in the $_FILES element
 	 */
 	public function getUploadedFile($key) {
-		return isset($this->request->files[$key]) ? $this->request->files[$key] : null;
+		return $this->request->getUploadedFile($key);
 	}
 
 
@@ -104,7 +102,7 @@ abstract class Controller {
 	 * @return array the value in the $_ENV element
 	 */
 	public function env($key) {
-		return isset($this->request->env[$key]) ? $this->request->env[$key] : null;
+		return $this->request->getEnv($key);
 	}
 
 
@@ -114,7 +112,7 @@ abstract class Controller {
 	 * @return array the value in the $_SESSION element
 	 */
 	public function session($key) {
-		return isset($this->request->session[$key]) ? $this->request->session[$key] : null;
+		return $this->request->getSession($key);
 	}
 
 
@@ -124,7 +122,7 @@ abstract class Controller {
 	 * @return array the value in the $_COOKIE element
 	 */
 	public function cookie($key) {
-		return isset($this->request->cookies[$key]) ? $this->request->cookies[$key] : null;
+		return $this->request->getCookie($key);
 	}
 
 
-- 
GitLab


From 395deacc6760564544a76338023d9b0bf39e0bfe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 20 Aug 2013 21:21:21 +0200
Subject: [PATCH 017/248] reducing controller annotations to: @PublicPage - No
 user logon is expected @NoAdminRequired - the login user requires no admin
 rights @NoCSRFRequired - the incoming request will not check for CSRF token

---
 .../security/securitymiddleware.php           |  19 +--
 .../security/SecurityMiddlewareTest.php       | 156 ++++--------------
 2 files changed, 41 insertions(+), 134 deletions(-)

diff --git a/lib/appframework/middleware/security/securitymiddleware.php b/lib/appframework/middleware/security/securitymiddleware.php
index 7a715f309a..52818b1b53 100644
--- a/lib/appframework/middleware/security/securitymiddleware.php
+++ b/lib/appframework/middleware/security/securitymiddleware.php
@@ -77,25 +77,20 @@ class SecurityMiddleware extends Middleware {
 		$this->api->activateNavigationEntry();
 
 		// security checks
-		if(!$annotationReader->hasAnnotation('IsLoggedInExemption')) {
+		$isPublicPage = $annotationReader->hasAnnotation('PublicPage');
+		if(!$isPublicPage) {
 			if(!$this->api->isLoggedIn()) {
 				throw new SecurityException('Current user is not logged in', Http::STATUS_UNAUTHORIZED);
 			}
-		}
-
-		if(!$annotationReader->hasAnnotation('IsAdminExemption')) {
-			if(!$this->api->isAdminUser($this->api->getUserId())) {
-				throw new SecurityException('Logged in user must be an admin', Http::STATUS_FORBIDDEN);
-			}
-		}
 
-		if(!$annotationReader->hasAnnotation('IsSubAdminExemption')) {
-			if(!$this->api->isSubAdminUser($this->api->getUserId())) {
-				throw new SecurityException('Logged in user must be a subadmin', Http::STATUS_FORBIDDEN);
+			if(!$annotationReader->hasAnnotation('NoAdminRequired')) {
+				if(!$this->api->isAdminUser($this->api->getUserId())) {
+					throw new SecurityException('Logged in user must be an admin', Http::STATUS_FORBIDDEN);
+				}
 			}
 		}
 
-		if(!$annotationReader->hasAnnotation('CSRFExemption')) {
+		if(!$annotationReader->hasAnnotation('NoCSRFRequired')) {
 			if(!$this->api->passesCSRFCheck()) {
 				throw new SecurityException('CSRF check failed', Http::STATUS_PRECONDITION_FAILED);
 			}
diff --git a/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php b/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
index 0b2103564e..90a19c9999 100644
--- a/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
+++ b/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
@@ -80,67 +80,27 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
 
 
 	/**
-	 * @IsLoggedInExemption
-	 * @CSRFExemption
-	 * @IsAdminExemption
-	 * @IsSubAdminExemption
+	 * @PublicPage
+	 * @NoCSRFRequired
 	 */
 	public function testSetNavigationEntry(){
 		$this->checkNavEntry('testSetNavigationEntry', true);
 	}
 
 
-	private function ajaxExceptionCheck($method, $shouldBeAjax=false){
-		$api = $this->getAPI();
-		$api->expects($this->any())
-				->method('passesCSRFCheck')
-				->will($this->returnValue(false));
-
-		$sec = new SecurityMiddleware($api, $this->request);
-
-		try {
-			$sec->beforeController('\OC\AppFramework\Middleware\Security\SecurityMiddlewareTest',
-					$method);
-		} catch (SecurityException $ex){
-			if($shouldBeAjax){
-				$this->assertTrue($ex->isAjax());
-			} else {
-				$this->assertFalse($ex->isAjax());
-			}
-
-		}
-	}
-
-
-	/**
-	 * @Ajax
-	 * @IsLoggedInExemption
-	 * @CSRFExemption
-	 * @IsAdminExemption
-	 * @IsSubAdminExemption
-	 */
-	public function testAjaxException(){
-		$this->ajaxExceptionCheck('testAjaxException');
-	}
-
-
-	/**
-	 * @IsLoggedInExemption
-	 * @CSRFExemption
-	 * @IsAdminExemption
-	 * @IsSubAdminExemption
-	 */
-	public function testNoAjaxException(){
-		$this->ajaxExceptionCheck('testNoAjaxException');
-	}
-
-
 	private function ajaxExceptionStatus($method, $test, $status) {
 		$api = $this->getAPI();
 		$api->expects($this->any())
 				->method($test)
 				->will($this->returnValue(false));
 
+		// isAdminUser requires isLoggedIn call to return true
+		if ($test === 'isAdminUser') {
+			$api->expects($this->any())
+				->method('isLoggedIn')
+				->will($this->returnValue(true));
+		}
+
 		$sec = new SecurityMiddleware($api, $this->request);
 
 		try {
@@ -151,9 +111,6 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
 		}
 	}
 
-	/**
-	 * @Ajax
-	 */
 	public function testAjaxStatusLoggedInCheck() {
 		$this->ajaxExceptionStatus(
 			'testAjaxStatusLoggedInCheck',
@@ -163,8 +120,8 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
 	}
 
 	/**
-	 * @Ajax
-	 * @IsLoggedInExemption
+	 * @NoCSRFRequired
+	 * @NoAdminRequired
 	 */
 	public function testAjaxNotAdminCheck() {
 		$this->ajaxExceptionStatus(
@@ -175,23 +132,7 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
 	}
 
 	/**
-	 * @Ajax
-	 * @IsLoggedInExemption
-	 * @IsAdminExemption
-	 */
-	public function testAjaxNotSubAdminCheck() {
-		$this->ajaxExceptionStatus(
-			'testAjaxNotSubAdminCheck',
-			'isSubAdminUser',
-			Http::STATUS_FORBIDDEN
-		);
-	}
-
-	/**
-	 * @Ajax
-	 * @IsLoggedInExemption
-	 * @IsAdminExemption
-	 * @IsSubAdminExemption
+	 * @PublicPage
 	 */
 	public function testAjaxStatusCSRFCheck() {
 		$this->ajaxExceptionStatus(
@@ -202,11 +143,8 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
 	}
 
 	/**
-	 * @Ajax
-	 * @CSRFExemption
-	 * @IsLoggedInExemption
-	 * @IsAdminExemption
-	 * @IsSubAdminExemption
+	 * @PublicPage
+	 * @NoCSRFRequired
 	 */
 	public function testAjaxStatusAllGood() {
 		$this->ajaxExceptionStatus(
@@ -231,11 +169,10 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
 		);
 	}
 
+
 	/**
-	 * @IsLoggedInExemption
-	 * @CSRFExemption
-	 * @IsAdminExemption
-	 * @IsSubAdminExemption
+	 * @PublicPage
+	 * @NoCSRFRequired
 	 */
 	public function testNoChecks(){
 		$api = $this->getAPI();
@@ -245,9 +182,6 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
 		$api->expects($this->never())
 				->method('isAdminUser')
 				->will($this->returnValue(true));
-		$api->expects($this->never())
-				->method('isSubAdminUser')
-				->will($this->returnValue(true));
 		$api->expects($this->never())
 				->method('isLoggedIn')
 				->will($this->returnValue(true));
@@ -264,10 +198,19 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
 				->method($expects)
 				->will($this->returnValue(!$shouldFail));
 
+		// admin check requires login
+		if ($expects === 'isAdminUser') {
+			$api->expects($this->once())
+				->method('isLoggedIn')
+				->will($this->returnValue(true));
+		}
+
 		$sec = new SecurityMiddleware($api, $this->request);
 
 		if($shouldFail){
 			$this->setExpectedException('\OC\AppFramework\Middleware\Security\SecurityException');
+		} else {
+			$this->setExpectedException(null);
 		}
 
 		$sec->beforeController('\OC\AppFramework\Middleware\Security\SecurityMiddlewareTest', $method);
@@ -275,9 +218,7 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
 
 
 	/**
-	 * @IsLoggedInExemption
-	 * @IsAdminExemption
-	 * @IsSubAdminExemption
+	 * @PublicPage
 	 */
 	public function testCsrfCheck(){
 		$this->securityCheck('testCsrfCheck', 'passesCSRFCheck');
@@ -285,9 +226,7 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
 
 
 	/**
-	 * @IsLoggedInExemption
-	 * @IsAdminExemption
-	 * @IsSubAdminExemption
+	 * @PublicPage
 	 */
 	public function testFailCsrfCheck(){
 		$this->securityCheck('testFailCsrfCheck', 'passesCSRFCheck', true);
@@ -295,9 +234,8 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
 
 
 	/**
-	 * @CSRFExemption
-	 * @IsAdminExemption
-	 * @IsSubAdminExemption
+	 * @NoCSRFRequired
+	 * @NoAdminRequired
 	 */
 	public function testLoggedInCheck(){
 		$this->securityCheck('testLoggedInCheck', 'isLoggedIn');
@@ -305,9 +243,8 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
 
 
 	/**
-	 * @CSRFExemption
-	 * @IsAdminExemption
-	 * @IsSubAdminExemption
+	 * @NoCSRFRequired
+	 * @NoAdminRequired
 	 */
 	public function testFailLoggedInCheck(){
 		$this->securityCheck('testFailLoggedInCheck', 'isLoggedIn', true);
@@ -315,9 +252,7 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
 
 
 	/**
-	 * @IsLoggedInExemption
-	 * @CSRFExemption
-	 * @IsSubAdminExemption
+	 * @NoCSRFRequired
 	 */
 	public function testIsAdminCheck(){
 		$this->securityCheck('testIsAdminCheck', 'isAdminUser');
@@ -325,36 +260,13 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
 
 
 	/**
-	 * @IsLoggedInExemption
-	 * @CSRFExemption
-	 * @IsSubAdminExemption
+	 * @NoCSRFRequired
 	 */
 	public function testFailIsAdminCheck(){
 		$this->securityCheck('testFailIsAdminCheck', 'isAdminUser', true);
 	}
 
 
-	/**
-	 * @IsLoggedInExemption
-	 * @CSRFExemption
-	 * @IsAdminExemption
-	 */
-	public function testIsSubAdminCheck(){
-		$this->securityCheck('testIsSubAdminCheck', 'isSubAdminUser');
-	}
-
-
-	/**
-	 * @IsLoggedInExemption
-	 * @CSRFExemption
-	 * @IsAdminExemption
-	 */
-	public function testFailIsSubAdminCheck(){
-		$this->securityCheck('testFailIsSubAdminCheck', 'isSubAdminUser', true);
-	}
-
-
-
 	public function testAfterExceptionNotCaughtThrowsItAgain(){
 		$ex = new \Exception();
 		$this->setExpectedException('\Exception');
-- 
GitLab


From 33db8a3089760947eec93149a2029164b676eae8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 21 Aug 2013 00:41:20 +0200
Subject: [PATCH 018/248] kill superfluent classloader from tests - this
 approach might be of interest within the apps

---
 tests/lib/appframework/AppTest.php            |  2 +-
 tests/lib/appframework/classloader.php        | 54 -------------------
 .../controller/ControllerTest.php             |  5 +-
 .../dependencyinjection/DIContainerTest.php   |  2 +-
 .../lib/appframework/http/DispatcherTest.php  |  6 +--
 .../http/DownloadResponseTest.php             |  2 +-
 tests/lib/appframework/http/HttpTest.php      |  2 +-
 .../appframework/http/JSONResponseTest.php    |  4 +-
 .../http/RedirectResponseTest.php             |  2 +-
 tests/lib/appframework/http/RequestTest.php   |  2 -
 tests/lib/appframework/http/ResponseTest.php  |  7 +--
 .../http/TemplateResponseTest.php             | 12 +++--
 .../middleware/MiddlewareDispatcherTest.php   |  6 +--
 .../middleware/MiddlewareTest.php             | 11 ++--
 .../security/SecurityMiddlewareTest.php       |  6 +--
 .../lib/appframework/routing/RoutingTest.php  |  1 -
 .../utility/MethodAnnotationReaderTest.php    |  3 --
 17 files changed, 33 insertions(+), 94 deletions(-)
 delete mode 100644 tests/lib/appframework/classloader.php

diff --git a/tests/lib/appframework/AppTest.php b/tests/lib/appframework/AppTest.php
index dcf0e6f77e..e8ae8c8f67 100644
--- a/tests/lib/appframework/AppTest.php
+++ b/tests/lib/appframework/AppTest.php
@@ -30,7 +30,7 @@ use OC\AppFramework\Middleware\MiddlewareDispatcher;
 
 // FIXME: loading pimpl correctly from 3rdparty repo
 require_once __DIR__ . '/../../../3rdparty/Pimple/Pimple.php';
-require_once __DIR__ . "/classloader.php";
+//require_once __DIR__ . "/classloader.php";
 
 
 class AppTest extends \PHPUnit_Framework_TestCase {
diff --git a/tests/lib/appframework/classloader.php b/tests/lib/appframework/classloader.php
deleted file mode 100644
index cd9f893df3..0000000000
--- a/tests/lib/appframework/classloader.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/**
- * ownCloud - App Framework
- *
- * @author Bernhard Posselt
- * @copyright 2012 Bernhard Posselt nukeawhale@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/>.
- *
- */
-
-// to execute without ownCloud, we need to create our own class loader
-spl_autoload_register(function ($className){
-	if (strpos($className, 'OC\\AppFramework') === 0) {
-		$path = strtolower(str_replace('\\', '/', substr($className, 3)) . '.php');
-		$relPath = __DIR__ . '/../../../lib/' . $path;
-
-		if(file_exists($relPath)){
-			require_once $relPath;
-		}
-	}
-
-	if (strpos($className, 'OCP\\') === 0) {
-		$path = strtolower(str_replace('\\', '/', substr($className, 3)) . '.php');
-		$relPath = __DIR__ . '/../../../lib/public' . $path;
-
-		if(file_exists($relPath)){
-			require_once $relPath;
-		}
-	}
-
-	// FIXME: this will most probably not work anymore
-	if (strpos($className, 'OCA\\') === 0) {
-
-		$path = strtolower(str_replace('\\', '/', substr($className, 3)) . '.php');
-		$relPath = __DIR__ . '/../..' . $path;
-
-		if(file_exists($relPath)){
-			require_once $relPath;
-		}
-	}
-});
diff --git a/tests/lib/appframework/controller/ControllerTest.php b/tests/lib/appframework/controller/ControllerTest.php
index d8357c2a68..246371d249 100644
--- a/tests/lib/appframework/controller/ControllerTest.php
+++ b/tests/lib/appframework/controller/ControllerTest.php
@@ -25,12 +25,11 @@
 namespace Test\AppFramework\Controller;
 
 use OC\AppFramework\Http\Request;
-use OC\AppFramework\Http\JSONResponse;
-use OC\AppFramework\Http\TemplateResponse;
 use OC\AppFramework\Controller\Controller;
+use OCP\AppFramework\Http\TemplateResponse;
 
 
-require_once(__DIR__ . "/../classloader.php");
+//require_once __DIR__ . "/../classloader.php";
 
 
 class ChildController extends Controller {};
diff --git a/tests/lib/appframework/dependencyinjection/DIContainerTest.php b/tests/lib/appframework/dependencyinjection/DIContainerTest.php
index ce346f0a76..25fdd20283 100644
--- a/tests/lib/appframework/dependencyinjection/DIContainerTest.php
+++ b/tests/lib/appframework/dependencyinjection/DIContainerTest.php
@@ -29,7 +29,7 @@ namespace OC\AppFramework\DependencyInjection;
 use \OC\AppFramework\Http\Request;
 
 
-require_once(__DIR__ . "/../classloader.php");
+//require_once(__DIR__ . "/../classloader.php");
 
 
 class DIContainerTest extends \PHPUnit_Framework_TestCase {
diff --git a/tests/lib/appframework/http/DispatcherTest.php b/tests/lib/appframework/http/DispatcherTest.php
index 2e3db11050..849b0ca97a 100644
--- a/tests/lib/appframework/http/DispatcherTest.php
+++ b/tests/lib/appframework/http/DispatcherTest.php
@@ -27,7 +27,7 @@ namespace OC\AppFramework\Http;
 use OC\AppFramework\Core\API;
 use OC\AppFramework\Middleware\MiddlewareDispatcher;
 
-require_once(__DIR__ . "/../classloader.php");
+//require_once(__DIR__ . "/../classloader.php");
 
 
 class DispatcherTest extends \PHPUnit_Framework_TestCase {
@@ -69,7 +69,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
 			$this->http, $this->middlewareDispatcher);
 		
 		$this->response = $this->getMockBuilder(
-			'\OC\AppFramework\Http\Response')
+			'\OCP\AppFramework\Http\Response')
 			->disableOriginalConstructor()
 			->getMock();
 
@@ -207,7 +207,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
 		$out = 'yo';
 		$httpHeaders = 'Http';
 		$responseHeaders = array('hell' => 'yeah');
-		$this->setMiddlewareExpections($out, $httpHeaders, $responseHeaders, true, false);		
+		$this->setMiddlewareExpections($out, $httpHeaders, $responseHeaders, true, false);
 
 		$this->setExpectedException('\Exception');
 		$response = $this->dispatcher->dispatch($this->controller, 
diff --git a/tests/lib/appframework/http/DownloadResponseTest.php b/tests/lib/appframework/http/DownloadResponseTest.php
index 103cfe7588..64fe7992b6 100644
--- a/tests/lib/appframework/http/DownloadResponseTest.php
+++ b/tests/lib/appframework/http/DownloadResponseTest.php
@@ -25,7 +25,7 @@
 namespace OC\AppFramework\Http;
 
 
-require_once(__DIR__ . "/../classloader.php");
+//require_once(__DIR__ . "/../classloader.php");
 
 
 class ChildDownloadResponse extends DownloadResponse {};
diff --git a/tests/lib/appframework/http/HttpTest.php b/tests/lib/appframework/http/HttpTest.php
index 306bc3caf4..382d511b11 100644
--- a/tests/lib/appframework/http/HttpTest.php
+++ b/tests/lib/appframework/http/HttpTest.php
@@ -25,7 +25,7 @@
 namespace OC\AppFramework\Http;
 
 
-require_once(__DIR__ . "/../classloader.php");
+//require_once(__DIR__ . "/../classloader.php");
 
 
 
diff --git a/tests/lib/appframework/http/JSONResponseTest.php b/tests/lib/appframework/http/JSONResponseTest.php
index d15e08f6ce..534c54cbce 100644
--- a/tests/lib/appframework/http/JSONResponseTest.php
+++ b/tests/lib/appframework/http/JSONResponseTest.php
@@ -27,7 +27,9 @@
 namespace OC\AppFramework\Http;
 
 
-require_once(__DIR__ . "/../classloader.php");
+use OCP\AppFramework\Http\JSONResponse;
+
+//require_once(__DIR__ . "/../classloader.php");
 
 
 
diff --git a/tests/lib/appframework/http/RedirectResponseTest.php b/tests/lib/appframework/http/RedirectResponseTest.php
index a8577feed2..1946655b0f 100644
--- a/tests/lib/appframework/http/RedirectResponseTest.php
+++ b/tests/lib/appframework/http/RedirectResponseTest.php
@@ -25,7 +25,7 @@
 namespace OC\AppFramework\Http;
 
 
-require_once(__DIR__ . "/../classloader.php");
+//require_once(__DIR__ . "/../classloader.php");
 
 
 
diff --git a/tests/lib/appframework/http/RequestTest.php b/tests/lib/appframework/http/RequestTest.php
index c1f56c0163..0371c870cf 100644
--- a/tests/lib/appframework/http/RequestTest.php
+++ b/tests/lib/appframework/http/RequestTest.php
@@ -9,8 +9,6 @@
 namespace OC\AppFramework\Http;
 
 
-require_once(__DIR__ . "/../classloader.php");
-
 class RequestTest extends \PHPUnit_Framework_TestCase {
 
 	public function testRequestAccessors() {
diff --git a/tests/lib/appframework/http/ResponseTest.php b/tests/lib/appframework/http/ResponseTest.php
index 621ba66545..7e09086f80 100644
--- a/tests/lib/appframework/http/ResponseTest.php
+++ b/tests/lib/appframework/http/ResponseTest.php
@@ -25,13 +25,14 @@
 namespace OC\AppFramework\Http;
 
 
-require_once(__DIR__ . "/../classloader.php");
-
+use OCP\AppFramework\Http\Response;
 
 
 class ResponseTest extends \PHPUnit_Framework_TestCase {
 
-
+	/**
+	 * @var \OCP\AppFramework\Http\Response
+	 */
 	private $childResponse;
 
 	protected function setUp(){
diff --git a/tests/lib/appframework/http/TemplateResponseTest.php b/tests/lib/appframework/http/TemplateResponseTest.php
index 30684725b7..3c6d29cd33 100644
--- a/tests/lib/appframework/http/TemplateResponseTest.php
+++ b/tests/lib/appframework/http/TemplateResponseTest.php
@@ -24,15 +24,19 @@
 
 namespace OC\AppFramework\Http;
 
-use OC\AppFramework\Core\API;
-
-
-require_once(__DIR__ . "/../classloader.php");
+use OCP\AppFramework\Http\TemplateResponse;
 
 
 class TemplateResponseTest extends \PHPUnit_Framework_TestCase {
 
+	/**
+	 * @var \OCP\AppFramework\Http\TemplateResponse
+	 */
 	private $tpl;
+
+	/**
+	 * @var \OCP\AppFramework\IApi
+	 */
 	private $api;
 
 	protected function setUp() {
diff --git a/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php b/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
index bfa54a48ea..d1b2fedee5 100644
--- a/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
+++ b/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
@@ -24,14 +24,10 @@
 
 namespace OC\AppFramework;
 
-use OC\AppFramework\Controller\Controller;
 use OC\AppFramework\Http\Request;
-use OC\AppFramework\Http\Response;
 use OC\AppFramework\Middleware\Middleware;
 use OC\AppFramework\Middleware\MiddlewareDispatcher;
-
-
-require_once(__DIR__ . "/../classloader.php");
+use OCP\AppFramework\Http\Response;
 
 
 // needed to test ordering
diff --git a/tests/lib/appframework/middleware/MiddlewareTest.php b/tests/lib/appframework/middleware/MiddlewareTest.php
index 1adce6b3d4..5e2930ac6a 100644
--- a/tests/lib/appframework/middleware/MiddlewareTest.php
+++ b/tests/lib/appframework/middleware/MiddlewareTest.php
@@ -28,14 +28,14 @@ use OC\AppFramework\Http\Request;
 use OC\AppFramework\Middleware\Middleware;
 
 
-require_once(__DIR__ . "/../classloader.php");
-
-
 class ChildMiddleware extends Middleware {};
 
 
 class MiddlewareTest extends \PHPUnit_Framework_TestCase {
 
+	/**
+	 * @var Middleware
+	 */
 	private $middleware;
 	private $controller;
 	private $exception;
@@ -50,12 +50,13 @@ class MiddlewareTest extends \PHPUnit_Framework_TestCase {
 		$this->controller = $this->getMock('OC\AppFramework\Controller\Controller',
 				array(), array($this->api, new Request()));
 		$this->exception = new \Exception();
-		$this->response = $this->getMock('OC\AppFramework\Http\Response');
+		$this->response = $this->getMock('OCP\AppFramework\Http\Response');
 	}
 
 
 	public function testBeforeController() {
-		$this->middleware->beforeController($this->controller, null, $this->exception);
+		$this->middleware->beforeController($this->controller, null);
+		$this->assertNull(null);
 	}
 
 
diff --git a/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php b/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
index 90a19c9999..3ed44282a7 100644
--- a/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
+++ b/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
@@ -27,11 +27,7 @@ namespace OC\AppFramework\Middleware\Security;
 use OC\AppFramework\Http\Http;
 use OC\AppFramework\Http\Request;
 use OC\AppFramework\Http\RedirectResponse;
-use OC\AppFramework\Http\JSONResponse;
-use OC\AppFramework\Middleware\Middleware;
-
-
-require_once(__DIR__ . "/../../classloader.php");
+use OCP\AppFramework\Http\JSONResponse;
 
 
 class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
diff --git a/tests/lib/appframework/routing/RoutingTest.php b/tests/lib/appframework/routing/RoutingTest.php
index 92ad461471..a7aa922db1 100644
--- a/tests/lib/appframework/routing/RoutingTest.php
+++ b/tests/lib/appframework/routing/RoutingTest.php
@@ -5,7 +5,6 @@ namespace OC\AppFramework\Routing;
 use OC\AppFramework\DependencyInjection\DIContainer;
 use OC\AppFramework\routing\RouteConfig;
 
-require_once(__DIR__ . "/../classloader.php");
 
 class RouteConfigTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/tests/lib/appframework/utility/MethodAnnotationReaderTest.php b/tests/lib/appframework/utility/MethodAnnotationReaderTest.php
index bcdcf3de37..c68812aa5c 100644
--- a/tests/lib/appframework/utility/MethodAnnotationReaderTest.php
+++ b/tests/lib/appframework/utility/MethodAnnotationReaderTest.php
@@ -25,9 +25,6 @@
 namespace OC\AppFramework\Utility;
 
 
-require_once __DIR__ . "/../classloader.php";
-
-
 class MethodAnnotationReaderTest extends \PHPUnit_Framework_TestCase {
 
 
-- 
GitLab


From aa979f5dff4234a3db9e6fb1ddc50335c04c194b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 21 Aug 2013 00:44:39 +0200
Subject: [PATCH 019/248] cleanup of tests

---
 tests/lib/appframework/AppTest.php            |  8 --------
 .../middleware/MiddlewareDispatcherTest.php   | 19 ++++++++++++++-----
 2 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/tests/lib/appframework/AppTest.php b/tests/lib/appframework/AppTest.php
index e8ae8c8f67..80abaefc43 100644
--- a/tests/lib/appframework/AppTest.php
+++ b/tests/lib/appframework/AppTest.php
@@ -24,14 +24,6 @@
 
 namespace OC\AppFramework;
 
-use OC\AppFramework\Http\Request;
-use OC\AppFramework\Core\API;
-use OC\AppFramework\Middleware\MiddlewareDispatcher;
-
-// FIXME: loading pimpl correctly from 3rdparty repo
-require_once __DIR__ . '/../../../3rdparty/Pimple/Pimple.php';
-//require_once __DIR__ . "/classloader.php";
-
 
 class AppTest extends \PHPUnit_Framework_TestCase {
 
diff --git a/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php b/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
index d1b2fedee5..43727846dc 100644
--- a/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
+++ b/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
@@ -99,6 +99,15 @@ class TestMiddleware extends Middleware {
 
 class MiddlewareDispatcherTest extends \PHPUnit_Framework_TestCase {
 
+	public $exception;
+	public $response;
+	private $out;
+	private $method;
+	private $controller;
+
+	/**
+	 * @var MiddlewareDispatcher
+	 */
 	private $dispatcher;
 
 
@@ -107,7 +116,7 @@ class MiddlewareDispatcherTest extends \PHPUnit_Framework_TestCase {
 		$this->controller = $this->getControllerMock();
 		$this->method = 'method';
 		$this->response = new Response();
-		$this->output = 'hi';
+		$this->out = 'hi';
 		$this->exception = new \Exception();
 	}
 
@@ -202,11 +211,11 @@ class MiddlewareDispatcherTest extends \PHPUnit_Framework_TestCase {
 	public function testBeforeOutputCorrectArguments(){
 		$m1 = $this->getMiddleware();
 
-		$this->dispatcher->beforeOutput($this->controller, $this->method, $this->output);
+		$this->dispatcher->beforeOutput($this->controller, $this->method, $this->out);
 
 		$this->assertEquals($this->controller, $m1->controller);
 		$this->assertEquals($this->method, $m1->methodName);
-		$this->assertEquals($this->output, $m1->output);
+		$this->assertEquals($this->out, $m1->output);
 	}
 
 
@@ -248,7 +257,7 @@ class MiddlewareDispatcherTest extends \PHPUnit_Framework_TestCase {
 		$m1 = $this->getMiddleware();
 		$m2 = $this->getMiddleware();
 
-		$this->dispatcher->beforeOutput($this->controller, $this->method, $this->output);
+		$this->dispatcher->beforeOutput($this->controller, $this->method, $this->out);
 
 		$this->assertEquals(2, $m1->beforeOutputOrder);
 		$this->assertEquals(1, $m2->beforeOutputOrder);
@@ -268,7 +277,7 @@ class MiddlewareDispatcherTest extends \PHPUnit_Framework_TestCase {
 
 		$this->dispatcher->registerMiddleware($m3);
 
-		$this->dispatcher->beforeOutput($this->controller, $this->method, $this->output);
+		$this->dispatcher->beforeOutput($this->controller, $this->method, $this->out);
 
 		$this->assertEquals(2, $m1->beforeOutputOrder);
 		$this->assertEquals(1, $m2->beforeOutputOrder);
-- 
GitLab


From ba029ef4b27cfeabbc67523131fa473397b77f01 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 21 Aug 2013 00:58:15 +0200
Subject: [PATCH 020/248] initial setup of the server container

---
 lib/base.php                         |  8 ++++++++
 lib/public/core/iservercontainer.php | 14 ++++++++++++++
 lib/server.php                       | 15 +++++++++++++++
 3 files changed, 37 insertions(+)
 create mode 100644 lib/public/core/iservercontainer.php
 create mode 100644 lib/server.php

diff --git a/lib/base.php b/lib/base.php
index eaee842465..a81f1a59b8 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -84,6 +84,11 @@ class OC {
 	 */
 	public static $loader = null;
 
+	/**
+	 * @var \OC\Server
+	 */
+	public static $server = null;
+
 	public static function initPaths() {
 		// calculate the root directories
 		OC::$SERVERROOT = str_replace("\\", '/', substr(__DIR__, 0, -4));
@@ -361,6 +366,9 @@ class OC {
 		self::$loader->registerPrefix('Patchwork', '3rdparty');
 		spl_autoload_register(array(self::$loader, 'load'));
 
+		// setup the basic server
+		self::$server = new \OC\Server();
+
 		// set some stuff
 		//ob_start();
 		error_reporting(E_ALL | E_STRICT);
diff --git a/lib/public/core/iservercontainer.php b/lib/public/core/iservercontainer.php
new file mode 100644
index 0000000000..df744ab6fd
--- /dev/null
+++ b/lib/public/core/iservercontainer.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace OCP\Core;
+
+
+/**
+ * Class IServerContainer
+ * @package OCP\Core
+ *
+ * This container holds all ownCloud services
+ */
+interface IServerContainer {
+
+}
diff --git a/lib/server.php b/lib/server.php
new file mode 100644
index 0000000000..f8f25c046d
--- /dev/null
+++ b/lib/server.php
@@ -0,0 +1,15 @@
+<?php
+
+namespace OC;
+
+use OCP\Core\IServerContainer;
+
+/**
+ * Class Server
+ * @package OC
+ *
+ * TODO: hookup all manager classes
+ */
+class Server implements IServerContainer {
+
+}
-- 
GitLab


From e39083c36f7de22de78fb5bb51656111653ea42b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 21 Aug 2013 00:58:33 +0200
Subject: [PATCH 021/248] typo

---
 lib/public/core/irequest.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/public/core/irequest.php b/lib/public/core/irequest.php
index f283e9cb25..fc2004d183 100644
--- a/lib/public/core/irequest.php
+++ b/lib/public/core/irequest.php
@@ -32,7 +32,7 @@ interface IRequest {
 
 	/**
 	 * Returns all params that were received, be it from the request
-	 * (as GET or POST) or throuh the URL by the route
+	 * (as GET or POST) or through the URL by the route
 	 * @return array the array with all parameters
 	 */
 	public function getParams();
-- 
GitLab


From 911bd3c16f508eb8f3cb9b03a5a21e2aa72ebf79 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 21 Aug 2013 01:00:26 +0200
Subject: [PATCH 022/248] moving response classes over to OCP

---
 lib/appframework/controller/controller.php    |  4 +-
 lib/appframework/http/dispatcher.php          |  3 +
 lib/appframework/http/downloadresponse.php    |  2 +-
 lib/appframework/http/http.php                | 62 +------------
 lib/appframework/http/redirectresponse.php    |  2 +
 lib/appframework/middleware/middleware.php    |  2 +-
 .../middleware/middlewaredispatcher.php       |  2 +-
 .../security/securitymiddleware.php           |  4 +-
 lib/public/appframework/http/http.php         | 89 +++++++++++++++++++
 .../appframework/http/jsonresponse.php        |  2 +-
 .../appframework/http/response.php            |  2 +-
 .../appframework/http/templateresponse.php    |  2 +-
 12 files changed, 105 insertions(+), 71 deletions(-)
 create mode 100644 lib/public/appframework/http/http.php
 rename lib/{ => public}/appframework/http/jsonresponse.php (98%)
 rename lib/{ => public}/appframework/http/response.php (98%)
 rename lib/{ => public}/appframework/http/templateresponse.php (98%)

diff --git a/lib/appframework/controller/controller.php b/lib/appframework/controller/controller.php
index f6f34618ec..a7498ba0e1 100644
--- a/lib/appframework/controller/controller.php
+++ b/lib/appframework/controller/controller.php
@@ -24,9 +24,9 @@
 
 namespace OC\AppFramework\Controller;
 
-use OC\AppFramework\Http\TemplateResponse;
 use OC\AppFramework\Http\Request;
 use OC\AppFramework\Core\API;
+use OCP\AppFramework\Http\TemplateResponse;
 
 
 /**
@@ -133,7 +133,7 @@ abstract class Controller {
 	 * @param string $renderAs user renders a full page, blank only your template
 	 *                          admin an entry in the admin settings
 	 * @param array $headers set additional headers in name/value pairs
-	 * @return \OC\AppFramework\Http\TemplateResponse containing the page
+	 * @return \OCP\AppFramework\Http\TemplateResponse containing the page
 	 */
 	public function render($templateName, array $params=array(),
 							$renderAs='user', array $headers=array()){
diff --git a/lib/appframework/http/dispatcher.php b/lib/appframework/http/dispatcher.php
index 183854650f..ea57a6860c 100644
--- a/lib/appframework/http/dispatcher.php
+++ b/lib/appframework/http/dispatcher.php
@@ -74,6 +74,9 @@ class Dispatcher {
 		} catch(\Exception $exception){
 			$response = $this->middlewareDispatcher->afterException(
 				$controller, $methodName, $exception);
+			if (is_null($response)) {
+				throw $exception;
+			}
 		}
 
 		$response = $this->middlewareDispatcher->afterController(
diff --git a/lib/appframework/http/downloadresponse.php b/lib/appframework/http/downloadresponse.php
index 096e4fc833..67b9542dba 100644
--- a/lib/appframework/http/downloadresponse.php
+++ b/lib/appframework/http/downloadresponse.php
@@ -28,7 +28,7 @@ namespace OC\AppFramework\Http;
 /**
  * Prompts the user to download the a file
  */
-abstract class DownloadResponse extends Response {
+class DownloadResponse extends \OCP\AppFramework\Http\Response {
 
 	private $filename;
 	private $contentType;
diff --git a/lib/appframework/http/http.php b/lib/appframework/http/http.php
index 73f32d13b3..e00dc9cdc4 100644
--- a/lib/appframework/http/http.php
+++ b/lib/appframework/http/http.php
@@ -25,67 +25,7 @@
 namespace OC\AppFramework\Http;
 
 
-class Http {
-
-	const STATUS_CONTINUE = 100;
-	const STATUS_SWITCHING_PROTOCOLS = 101;
-	const STATUS_PROCESSING = 102;
-	const STATUS_OK = 200;
-	const STATUS_CREATED = 201;
-	const STATUS_ACCEPTED = 202;
-	const STATUS_NON_AUTHORATIVE_INFORMATION = 203;
-	const STATUS_NO_CONTENT = 204;
-	const STATUS_RESET_CONTENT = 205;
-	const STATUS_PARTIAL_CONTENT = 206;
-	const STATUS_MULTI_STATUS = 207;
-	const STATUS_ALREADY_REPORTED = 208;
-	const STATUS_IM_USED = 226;
-	const STATUS_MULTIPLE_CHOICES = 300;
-	const STATUS_MOVED_PERMANENTLY = 301;
-	const STATUS_FOUND = 302;
-	const STATUS_SEE_OTHER = 303;
-	const STATUS_NOT_MODIFIED = 304;
-	const STATUS_USE_PROXY = 305;
-	const STATUS_RESERVED = 306;
-	const STATUS_TEMPORARY_REDIRECT = 307;
-	const STATUS_BAD_REQUEST = 400;
-	const STATUS_UNAUTHORIZED = 401;
-	const STATUS_PAYMENT_REQUIRED = 402;
-	const STATUS_FORBIDDEN = 403;
-	const STATUS_NOT_FOUND = 404;
-	const STATUS_METHOD_NOT_ALLOWED = 405;
-	const STATUS_NOT_ACCEPTABLE = 406;
-	const STATUS_PROXY_AUTHENTICATION_REQUIRED = 407;
-	const STATUS_REQUEST_TIMEOUT = 408;
-	const STATUS_CONFLICT = 409;
-	const STATUS_GONE = 410;
-	const STATUS_LENGTH_REQUIRED = 411;
-	const STATUS_PRECONDITION_FAILED = 412;
-	const STATUS_REQUEST_ENTITY_TOO_LARGE = 413;
-	const STATUS_REQUEST_URI_TOO_LONG = 414;
-	const STATUS_UNSUPPORTED_MEDIA_TYPE = 415;
-	const STATUS_REQUEST_RANGE_NOT_SATISFIABLE = 416;
-	const STATUS_EXPECTATION_FAILED = 417;
-	const STATUS_IM_A_TEAPOT = 418;
-	const STATUS_UNPROCESSABLE_ENTITY = 422;
-	const STATUS_LOCKED = 423;
-	const STATUS_FAILED_DEPENDENCY = 424;
-	const STATUS_UPGRADE_REQUIRED = 426;
-	const STATUS_PRECONDITION_REQUIRED = 428;
-	const STATUS_TOO_MANY_REQUESTS = 429;
-	const STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE = 431;
-	const STATUS_INTERNAL_SERVER_ERROR = 500;
-	const STATUS_NOT_IMPLEMENTED = 501;
-	const STATUS_BAD_GATEWAY = 502;
-	const STATUS_SERVICE_UNAVAILABLE = 503;
-	const STATUS_GATEWAY_TIMEOUT = 504;
-	const STATUS_HTTP_VERSION_NOT_SUPPORTED = 505;
-	const STATUS_VARIANT_ALSO_NEGOTIATES = 506;
-	const STATUS_INSUFFICIENT_STORAGE = 507;
-	const STATUS_LOOP_DETECTED = 508;
-	const STATUS_BANDWIDTH_LIMIT_EXCEEDED = 509;
-	const STATUS_NOT_EXTENDED = 510;
-	const STATUS_NETWORK_AUTHENTICATION_REQUIRED = 511;
+class Http extends \OCP\AppFramework\Http\Http{
 
 	private $server;
 	private $protocolVersion;
diff --git a/lib/appframework/http/redirectresponse.php b/lib/appframework/http/redirectresponse.php
index 727e0fb642..688447f161 100644
--- a/lib/appframework/http/redirectresponse.php
+++ b/lib/appframework/http/redirectresponse.php
@@ -24,6 +24,8 @@
 
 namespace OC\AppFramework\Http;
 
+use OCP\AppFramework\Http\Response;
+
 
 /**
  * Redirects to a different URL
diff --git a/lib/appframework/middleware/middleware.php b/lib/appframework/middleware/middleware.php
index 4df8849046..b12c03c3eb 100644
--- a/lib/appframework/middleware/middleware.php
+++ b/lib/appframework/middleware/middleware.php
@@ -24,7 +24,7 @@
 
 namespace OC\AppFramework\Middleware;
 
-use OC\AppFramework\Http\Response;
+use OCP\AppFramework\Http\Response;
 
 
 /**
diff --git a/lib/appframework/middleware/middlewaredispatcher.php b/lib/appframework/middleware/middlewaredispatcher.php
index c2d16134dc..70ab108e6b 100644
--- a/lib/appframework/middleware/middlewaredispatcher.php
+++ b/lib/appframework/middleware/middlewaredispatcher.php
@@ -25,7 +25,7 @@
 namespace OC\AppFramework\Middleware;
 
 use OC\AppFramework\Controller\Controller;
-use OC\AppFramework\Http\Response;
+use OCP\AppFramework\Http\Response;
 
 
 /**
diff --git a/lib/appframework/middleware/security/securitymiddleware.php b/lib/appframework/middleware/security/securitymiddleware.php
index 52818b1b53..4f1447e1af 100644
--- a/lib/appframework/middleware/security/securitymiddleware.php
+++ b/lib/appframework/middleware/security/securitymiddleware.php
@@ -27,12 +27,12 @@ namespace OC\AppFramework\Middleware\Security;
 use OC\AppFramework\Controller\Controller;
 use OC\AppFramework\Http\Http;
 use OC\AppFramework\Http\Request;
-use OC\AppFramework\Http\Response;
-use OC\AppFramework\Http\JSONResponse;
 use OC\AppFramework\Http\RedirectResponse;
 use OC\AppFramework\Utility\MethodAnnotationReader;
 use OC\AppFramework\Middleware\Middleware;
 use OC\AppFramework\Core\API;
+use OCP\AppFramework\Http\Response;
+use OCP\AppFramework\Http\JSONResponse;
 
 
 /**
diff --git a/lib/public/appframework/http/http.php b/lib/public/appframework/http/http.php
new file mode 100644
index 0000000000..9eafe78272
--- /dev/null
+++ b/lib/public/appframework/http/http.php
@@ -0,0 +1,89 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt, Thomas Tanghus, Bart Visscher
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OCP\AppFramework\Http;
+
+
+class Http {
+
+	const STATUS_CONTINUE = 100;
+	const STATUS_SWITCHING_PROTOCOLS = 101;
+	const STATUS_PROCESSING = 102;
+	const STATUS_OK = 200;
+	const STATUS_CREATED = 201;
+	const STATUS_ACCEPTED = 202;
+	const STATUS_NON_AUTHORATIVE_INFORMATION = 203;
+	const STATUS_NO_CONTENT = 204;
+	const STATUS_RESET_CONTENT = 205;
+	const STATUS_PARTIAL_CONTENT = 206;
+	const STATUS_MULTI_STATUS = 207;
+	const STATUS_ALREADY_REPORTED = 208;
+	const STATUS_IM_USED = 226;
+	const STATUS_MULTIPLE_CHOICES = 300;
+	const STATUS_MOVED_PERMANENTLY = 301;
+	const STATUS_FOUND = 302;
+	const STATUS_SEE_OTHER = 303;
+	const STATUS_NOT_MODIFIED = 304;
+	const STATUS_USE_PROXY = 305;
+	const STATUS_RESERVED = 306;
+	const STATUS_TEMPORARY_REDIRECT = 307;
+	const STATUS_BAD_REQUEST = 400;
+	const STATUS_UNAUTHORIZED = 401;
+	const STATUS_PAYMENT_REQUIRED = 402;
+	const STATUS_FORBIDDEN = 403;
+	const STATUS_NOT_FOUND = 404;
+	const STATUS_METHOD_NOT_ALLOWED = 405;
+	const STATUS_NOT_ACCEPTABLE = 406;
+	const STATUS_PROXY_AUTHENTICATION_REQUIRED = 407;
+	const STATUS_REQUEST_TIMEOUT = 408;
+	const STATUS_CONFLICT = 409;
+	const STATUS_GONE = 410;
+	const STATUS_LENGTH_REQUIRED = 411;
+	const STATUS_PRECONDITION_FAILED = 412;
+	const STATUS_REQUEST_ENTITY_TOO_LARGE = 413;
+	const STATUS_REQUEST_URI_TOO_LONG = 414;
+	const STATUS_UNSUPPORTED_MEDIA_TYPE = 415;
+	const STATUS_REQUEST_RANGE_NOT_SATISFIABLE = 416;
+	const STATUS_EXPECTATION_FAILED = 417;
+	const STATUS_IM_A_TEAPOT = 418;
+	const STATUS_UNPROCESSABLE_ENTITY = 422;
+	const STATUS_LOCKED = 423;
+	const STATUS_FAILED_DEPENDENCY = 424;
+	const STATUS_UPGRADE_REQUIRED = 426;
+	const STATUS_PRECONDITION_REQUIRED = 428;
+	const STATUS_TOO_MANY_REQUESTS = 429;
+	const STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE = 431;
+	const STATUS_INTERNAL_SERVER_ERROR = 500;
+	const STATUS_NOT_IMPLEMENTED = 501;
+	const STATUS_BAD_GATEWAY = 502;
+	const STATUS_SERVICE_UNAVAILABLE = 503;
+	const STATUS_GATEWAY_TIMEOUT = 504;
+	const STATUS_HTTP_VERSION_NOT_SUPPORTED = 505;
+	const STATUS_VARIANT_ALSO_NEGOTIATES = 506;
+	const STATUS_INSUFFICIENT_STORAGE = 507;
+	const STATUS_LOOP_DETECTED = 508;
+	const STATUS_BANDWIDTH_LIMIT_EXCEEDED = 509;
+	const STATUS_NOT_EXTENDED = 510;
+	const STATUS_NETWORK_AUTHENTICATION_REQUIRED = 511;
+}
diff --git a/lib/appframework/http/jsonresponse.php b/lib/public/appframework/http/jsonresponse.php
similarity index 98%
rename from lib/appframework/http/jsonresponse.php
rename to lib/public/appframework/http/jsonresponse.php
index 750f8a2ad1..085fdbed2f 100644
--- a/lib/appframework/http/jsonresponse.php
+++ b/lib/public/appframework/http/jsonresponse.php
@@ -22,7 +22,7 @@
  */
 
 
-namespace OC\AppFramework\Http;
+namespace OCP\AppFramework\Http;
 
 
 /**
diff --git a/lib/appframework/http/response.php b/lib/public/appframework/http/response.php
similarity index 98%
rename from lib/appframework/http/response.php
rename to lib/public/appframework/http/response.php
index 50778105f2..6447725894 100644
--- a/lib/appframework/http/response.php
+++ b/lib/public/appframework/http/response.php
@@ -22,7 +22,7 @@
  */
 
 
-namespace OC\AppFramework\Http;
+namespace OCP\AppFramework\Http;
 
 
 /**
diff --git a/lib/appframework/http/templateresponse.php b/lib/public/appframework/http/templateresponse.php
similarity index 98%
rename from lib/appframework/http/templateresponse.php
rename to lib/public/appframework/http/templateresponse.php
index 0a32da4b1b..97678c96cb 100644
--- a/lib/appframework/http/templateresponse.php
+++ b/lib/public/appframework/http/templateresponse.php
@@ -22,7 +22,7 @@
  */
 
 
-namespace OC\AppFramework\Http;
+namespace OCP\AppFramework\Http;
 
 use OC\AppFramework\Core\API;
 
-- 
GitLab


From 38f9df429397619482e3e3f7ffb0db5274222e4c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 21 Aug 2013 01:02:15 +0200
Subject: [PATCH 023/248] introducing OCP\AppFramework\App

---
 lib/appframework/app.php                      |   3 +-
 lib/appframework/core/api.php                 |   3 +-
 .../dependencyinjection/dicontainer.php       |  21 +-
 lib/public/appframework/App.php               |  61 +++++
 lib/public/appframework/iapi.php              | 238 ++++++++++++++++++
 lib/public/appframework/iappcontainer.php     |  25 ++
 6 files changed, 348 insertions(+), 3 deletions(-)
 create mode 100644 lib/public/appframework/App.php
 create mode 100644 lib/public/appframework/iapi.php
 create mode 100644 lib/public/appframework/iappcontainer.php

diff --git a/lib/appframework/app.php b/lib/appframework/app.php
index 6224b858bb..7ff55bb809 100644
--- a/lib/appframework/app.php
+++ b/lib/appframework/app.php
@@ -25,6 +25,7 @@
 namespace OC\AppFramework;
 
 use OC\AppFramework\DependencyInjection\DIContainer;
+use OCP\AppFramework\IAppContainer;
 
 
 /**
@@ -45,7 +46,7 @@ class App {
 	 * @param DIContainer $container an instance of a pimple container.
 	 */
 	public static function main($controllerName, $methodName, array $urlParams,
-								DIContainer $container) {
+	                            IAppContainer $container) {
 		$container['urlParams'] = $urlParams;
 		$controller = $container[$controllerName];
 
diff --git a/lib/appframework/core/api.php b/lib/appframework/core/api.php
index eb8ee01e5d..337e3b57d6 100644
--- a/lib/appframework/core/api.php
+++ b/lib/appframework/core/api.php
@@ -23,6 +23,7 @@
 
 
 namespace OC\AppFramework\Core;
+use OCP\AppFramework\IApi;
 
 
 /**
@@ -32,7 +33,7 @@ namespace OC\AppFramework\Core;
  * Should you find yourself in need for more methods, simply inherit from this
  * class and add your methods
  */
-class API {
+class API implements IApi{
 
 	private $appName;
 
diff --git a/lib/appframework/dependencyinjection/dicontainer.php b/lib/appframework/dependencyinjection/dicontainer.php
index 88ad2cd414..43f6eee29b 100644
--- a/lib/appframework/dependencyinjection/dicontainer.php
+++ b/lib/appframework/dependencyinjection/dicontainer.php
@@ -32,9 +32,11 @@ use OC\AppFramework\Middleware\MiddlewareDispatcher;
 use OC\AppFramework\Middleware\Security\SecurityMiddleware;
 use OC\AppFramework\Utility\SimpleContainer;
 use OC\AppFramework\Utility\TimeFactory;
+use OCP\AppFramework\IApi;
+use OCP\AppFramework\IAppContainer;
 
 
-class DIContainer extends SimpleContainer {
+class DIContainer extends SimpleContainer implements IAppContainer{
 
 
 	/**
@@ -45,6 +47,8 @@ class DIContainer extends SimpleContainer {
 
 		$this['AppName'] = $appName;
 
+		$this->registerParameter('ServerContainer', \OC::$server);
+
 		$this['API'] = $this->share(function($c){
 			return new API($c['AppName']);
 		});
@@ -119,4 +123,19 @@ class DIContainer extends SimpleContainer {
 	}
 
 
+	/**
+	 * @return IApi
+	 */
+	function getCoreApi()
+	{
+		return $this->query('API');
+	}
+
+	/**
+	 * @return \OCP\Core\IServerContainer
+	 */
+	function getServer()
+	{
+		return $this->query('ServerContainer');
+	}
 }
diff --git a/lib/public/appframework/App.php b/lib/public/appframework/App.php
new file mode 100644
index 0000000000..0c27fcb2ac
--- /dev/null
+++ b/lib/public/appframework/App.php
@@ -0,0 +1,61 @@
+<?php
+
+namespace OCP\AppFramework;
+
+
+/**
+ * Class App
+ * @package OCP\AppFramework
+ *
+ * Any application must inherit this call - all controller instances to be used are
+ * to be registered using IContainer::registerService
+ */
+class App {
+	public function __construct($appName) {
+		$this->container = new \OC\AppFramework\DependencyInjection\DIContainer($appName);
+	}
+
+	private $container;
+
+	/**
+	 * @return IAppContainer
+	 */
+	public function getContainer() {
+		return $this->container;
+	}
+
+	/**
+	 * This function is called by the routing component to fire up the frameworks dispatch mechanism.
+	 *
+	 * Example code in routes.php of the task app:
+	 * $this->create('tasks_index', '/')->get()->action(
+	 *		function($params){
+	 *			$app = new TaskApp();
+	 *			$app->dispatch('PageController', 'index', $params);
+	 *		}
+	 *	);
+	 *
+	 *
+	 * Example for for TaskApp implementation:
+	 * class TaskApp extends \OCP\AppFramework\App {
+	 *
+	 *		public function __construct(){
+	 *			parent::__construct('tasks');
+	 *
+	 *			$this->getContainer()->registerService('PageController', function(IAppContainer $c){
+	 *				$a = $c->query('API');
+	 *				$r = $c->query('Request');
+	 *				return new PageController($a, $r);
+	 *			});
+	 *		}
+	 *	}
+	 *
+	 * @param string $controllerName the name of the controller under which it is
+	 *                               stored in the DI container
+	 * @param string $methodName the method that you want to call
+	 * @param array $urlParams an array with variables extracted from the routes
+	 */
+	public function dispatch($controllerName, $methodName, array $urlParams) {
+		\OC\AppFramework\App::main($controllerName, $methodName, $urlParams, $this->container);
+	}
+}
diff --git a/lib/public/appframework/iapi.php b/lib/public/appframework/iapi.php
new file mode 100644
index 0000000000..5374f0dcaf
--- /dev/null
+++ b/lib/public/appframework/iapi.php
@@ -0,0 +1,238 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OCP\AppFramework;
+
+
+/**
+ * A few very basic and frequently used API functions are combined in here
+ */
+interface IApi {
+
+	/**
+	 * used to return the appname of the set application
+	 * @return string the name of your application
+	 */
+	function getAppName();
+
+
+	/**
+	 * Creates a new navigation entry
+	 * @param array $entry containing: id, name, order, icon and href key
+	 */
+	function addNavigationEntry(array $entry);
+
+
+	/**
+	 * Gets the userid of the current user
+	 * @return string the user id of the current user
+	 */
+	function getUserId();
+
+
+	/**
+	 * Sets the current navigation entry to the currently running app
+	 */
+	function activateNavigationEntry();
+
+
+	/**
+	 * Adds a new javascript file
+	 * @param string $scriptName the name of the javascript in js/ without the suffix
+	 * @param string $appName the name of the app, defaults to the current one
+	 */
+	function addScript($scriptName, $appName = null);
+
+
+	/**
+	 * Adds a new css file
+	 * @param string $styleName the name of the css file in css/without the suffix
+	 * @param string $appName the name of the app, defaults to the current one
+	 */
+	function addStyle($styleName, $appName = null);
+
+
+	/**
+	 * shorthand for addScript for files in the 3rdparty directory
+	 * @param string $name the name of the file without the suffix
+	 */
+	function add3rdPartyScript($name);
+
+
+	/**
+	 * shorthand for addStyle for files in the 3rdparty directory
+	 * @param string $name the name of the file without the suffix
+	 */
+	function add3rdPartyStyle($name);
+
+	/**
+	 * Looks up a system-wide defined value
+	 * @param string $key the key of the value, under which it was saved
+	 * @return string the saved value
+	 */
+	function getSystemValue($key);
+
+	/**
+	 * Sets a new system-wide value
+	 * @param string $key the key of the value, under which will be saved
+	 * @param string $value the value that should be stored
+	 */
+	function setSystemValue($key, $value);
+
+
+	/**
+	 * Looks up an app-specific defined value
+	 * @param string $key the key of the value, under which it was saved
+	 * @return string the saved value
+	 */
+	function getAppValue($key, $appName = null);
+
+
+	/**
+	 * Writes a new app-specific value
+	 * @param string $key the key of the value, under which will be saved
+	 * @param string $value the value that should be stored
+	 */
+	function setAppValue($key, $value, $appName = null);
+
+
+	/**
+	 * Shortcut for setting a user defined value
+	 * @param string $key the key under which the value is being stored
+	 * @param string $value the value that you want to store
+	 * @param string $userId the userId of the user that we want to store the value under, defaults to the current one
+	 */
+	function setUserValue($key, $value, $userId = null);
+
+
+	/**
+	 * Shortcut for getting a user defined value
+	 * @param string $key the key under which the value is being stored
+	 * @param string $userId the userId of the user that we want to store the value under, defaults to the current one
+	 */
+	function getUserValue($key, $userId = null);
+
+	/**
+	 * Returns the translation object
+	 * @return \OC_L10N the translation object
+	 *
+	 * FIXME: returns private object / should be retrieved from teh ServerContainer
+	 */
+	function getTrans();
+
+
+	/**
+	 * Used to abstract the owncloud database access away
+	 * @param string $sql the sql query with ? placeholder for params
+	 * @param int $limit the maximum number of rows
+	 * @param int $offset from which row we want to start
+	 * @return \OCP\DB a query object
+	 *
+	 * FIXME: returns non public interface / object
+	 */
+	function prepareQuery($sql, $limit=null, $offset=null);
+
+
+	/**
+	 * Used to get the id of the just inserted element
+	 * @param string $tableName the name of the table where we inserted the item
+	 * @return int the id of the inserted element
+	 *
+	 * FIXME: move to db object
+	 */
+	function getInsertId($tableName);
+
+
+	/**
+	 * Returns the URL for a route
+	 * @param string $routeName the name of the route
+	 * @param array $arguments an array with arguments which will be filled into the url
+	 * @return string the url
+	 */
+	function linkToRoute($routeName, $arguments=array());
+
+
+	/**
+	 * Returns an URL for an image or file
+	 * @param string $file the name of the file
+	 * @param string $appName the name of the app, defaults to the current one
+	 */
+	function linkTo($file, $appName=null);
+
+
+	/**
+	 * Returns the link to an image, like link to but only with prepending img/
+	 * @param string $file the name of the file
+	 * @param string $appName the name of the app, defaults to the current one
+	 */
+	function imagePath($file, $appName = null);
+
+
+	/**
+	 * Makes an URL absolute
+	 * @param string $url the url
+	 * @return string the absolute url
+	 *
+	 * FIXME: function should live in Request / Response
+	 */
+	function getAbsoluteURL($url);
+
+
+	/**
+	 * links to a file
+	 * @param string $file the name of the file
+	 * @param string $appName the name of the app, defaults to the current one
+	 * @deprecated replaced with linkToRoute()
+	 * @return string the url
+	 */
+	function linkToAbsolute($file, $appName = null);
+
+
+	/**
+	 * Checks if an app is enabled
+	 * @param string $appName the name of an app
+	 * @return bool true if app is enabled
+	 */
+	public function isAppEnabled($appName);
+
+
+	/**
+	 * Writes a function into the error log
+	 * @param string $msg the error message to be logged
+	 * @param int $level the error level
+	 *
+	 * FIXME: add logger instance to ServerContainer
+	 */
+	function log($msg, $level = null);
+
+
+	/**
+	 * Returns a template
+	 * @param string $templateName the name of the template
+	 * @param string $renderAs how it should be rendered
+	 * @param string $appName the name of the app
+	 * @return \OCP\Template a new template
+	 */
+	function getTemplate($templateName, $renderAs='user', $appName=null);
+}
diff --git a/lib/public/appframework/iappcontainer.php b/lib/public/appframework/iappcontainer.php
new file mode 100644
index 0000000000..c2faea07b9
--- /dev/null
+++ b/lib/public/appframework/iappcontainer.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace OCP\AppFramework;
+
+use OCP\AppFramework\IApi;
+use OCP\Core\IContainer;
+
+/**
+ * Class IAppContainer
+ * @package OCP\AppFramework
+ *
+ * This container interface provides short cuts for app developers to access predefined app service.
+ */
+interface IAppContainer extends IContainer{
+
+	/**
+	 * @return IApi
+	 */
+	function getCoreApi();
+
+	/**
+	 * @return \OCP\Core\IServerContainer
+	 */
+	function getServer();
+}
-- 
GitLab


From bf04daff82758fe9913c706eef07aed30c9b35ea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Wed, 21 Aug 2013 14:58:28 +0200
Subject: [PATCH 024/248] architecture too complex

---
 3rdparty                                 |    2 +-
 apps/files/js/file-upload.js             |  109 ++-
 apps/files/js/filelist.js                |   51 +-
 apps/files/js/files.js                   |    7 -
 apps/files/js/jquery.fileupload.js       | 1023 ++++++++++++++++------
 apps/files/js/jquery.iframe-transport.js |   70 +-
 apps/files/templates/part.list.php       |   11 +-
 7 files changed, 934 insertions(+), 339 deletions(-)

diff --git a/3rdparty b/3rdparty
index 2f3ae9f56a..75a05d76ab 160000
--- a/3rdparty
+++ b/3rdparty
@@ -1 +1 @@
-Subproject commit 2f3ae9f56a9838b45254393e13c14f8a8c380d6b
+Subproject commit 75a05d76ab86ba7454b4312fd0ff2ca5bd5828cf
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index f8899cb07e..c620942170 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -1,4 +1,7 @@
 /**
+ * 
+ * use put t ocacnel upload before it starts? use chunked uploads?
+ * 
  * 1. tracking which file to upload next -> upload queue with data elements added whenever add is called
  * 2. tracking progress for each folder individually -> track progress in a progress[dirname] object
  *   - every new selection increases the total size and number of files for a directory
@@ -63,6 +66,7 @@ OC.Upload = {
 	 * @type Array
 	 */
 	_selections: {},
+	_selectionCount: 0,
 	/*
 	 * queue which progress tracker to use for the next upload
 	 * @type Array
@@ -77,7 +81,7 @@ OC.Upload = {
 	},
 	getSelection:function(originalFiles) {
 		if (!originalFiles.selectionKey) {
-			originalFiles.selectionKey = 'selection-' + $.assocArraySize(this._selections);
+			originalFiles.selectionKey = 'selection-' + this._selectionCount++;
 			this._selections[originalFiles.selectionKey] = {
 				selectionKey:originalFiles.selectionKey,
 				files:{},
@@ -90,22 +94,41 @@ OC.Upload = {
 		}
 		return this._selections[originalFiles.selectionKey];
 	},
+	deleteSelection:function(selectionKey) {
+		if (this._selections[selectionKey]) {
+			jQuery.each(this._selections[selectionKey].uploads, function(i, upload) {
+				upload.abort();
+			});
+			delete this._selections[selectionKey];
+		} else {
+			console.log('OC.Upload: selection ' + selectionKey + ' does not exist');
+		}
+	},
+	deleteSelectionUpload:function(selection, filename) {
+		if(selection.uploads[filename]) {
+			selection.uploads[filename].abort();
+			return true;
+		} else {
+			console.log('OC.Upload: selection ' + selection.selectionKey + ' does not contain upload for ' + filename);
+		}
+		return false;
+	},
 	cancelUpload:function(dir, filename) {
+		var self = this;
 		var deleted = false;
 		jQuery.each(this._selections, function(i, selection) {
 			if (selection.dir === dir && selection.uploads[filename]) {
-				delete selection.uploads[filename];
-				deleted = true;
+				deleted = self.deleteSelectionUpload(selection, filename);
 				return false; // end searching through selections
 			}
 		});
 		return deleted;
 	},
 	cancelUploads:function() {
-		jQuery.each(this._selections,function(i,selection){
-			jQuery.each(selection.uploads, function (j, jqXHR) {
-				delete jqXHR;
-			});
+		console.log('canceling uploads');
+		var self = this;
+		jQuery.each(this._selections,function(i, selection){
+			self.deleteSelection(selection.selectionKey);
 		});
 		this._queue = [];
 		this._isProcessing = false;
@@ -132,7 +155,7 @@ OC.Upload = {
 		} else {
 			//queue is empty, we are done
 			this._isProcessing = false;
-			//TODO free data
+			OC.Upload.cancelUploads();
 		}
 	},
 	progressBytes: function() {
@@ -157,13 +180,13 @@ OC.Upload = {
 			total += selection.totalBytes;
 		});
 		return total;
-	},
-	handleExists:function(data) {
-
 	},
 	onCancel:function(data){
-		//TODO cancel all uploads
-		OC.Upload.cancelUploads();
+		//TODO cancel all uploads of this selection
+		
+		var selection = this.getSelection(data.originalFiles);
+		OC.Upload.deleteSelection(selection.selectionKey);
+		//FIXME hide progressbar
 	},
 	onSkip:function(data){
 		var selection = this.getSelection(data.originalFiles);
@@ -171,20 +194,19 @@ OC.Upload = {
 		this.nextUpload();
 	},
 	onReplace:function(data){
-		//TODO overwrite file
 		data.data.append('replace', true);
 		data.submit();
 	},
 	onRename:function(data, newName){
-		//TODO rename file in filelist, stop spinner
 		data.data.append('newname', newName);
 		data.submit();
 	},
-	setAction:function(data, action) {
-		
-	},
-	setDefaultAction:function(action) {
-		
+	logStatus:function(caption, e, data) {
+		console.log(caption+' ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+		if (data) {
+			console.log(data);
+		}
+		console.log(e);
 	}
 };
 
@@ -195,6 +217,7 @@ $(document).ready(function() {
 		
 		//singleFileUploads is on by default, so the data.files array will always have length 1
 		add: function(e, data) {
+			OC.Upload.logStatus('add', e, data);
 			var that = $(this);
 			
 			// lookup selection for dir
@@ -267,14 +290,17 @@ $(document).ready(function() {
 		 * @param e
 		 */
 		start: function(e) {
+			OC.Upload.logStatus('start', e, null);
 			//IE < 10 does not fire the necessary events for the progress bar.
 			if($('html.lte9').length > 0) {
 				return true;
 			}
+			$('#uploadprogresswrapper input.stop').show();
 			$('#uploadprogressbar').progressbar({value:0});
 			$('#uploadprogressbar').fadeIn();
 		},
 		fail: function(e, data) {
+			OC.Upload.logStatus('fail', e, data);
 			if (typeof data.textStatus !== 'undefined' && data.textStatus !== 'success' ) {
 				if (data.textStatus === 'abort') {
 					$('#notification').text(t('files', 'Upload cancelled.'));
@@ -289,12 +315,26 @@ $(document).ready(function() {
 				}, 5000);
 			}
 			var selection = OC.Upload.getSelection(data.originalFiles);
-			delete selection.uploads[data.files[0]];
+			OC.Upload.deleteSelectionUpload(selection, data.files[0].name);
+			
+			//if user pressed cancel hide upload progress bar and cancel button
+			if (data.errorThrown === 'abort') {
+				$('#uploadprogresswrapper input.stop').fadeOut();
+				$('#uploadprogressbar').fadeOut();
+			}
 		},
 		progress: function(e, data) {
+			OC.Upload.logStatus('progress', e, data);
 			// TODO: show nice progress bar in file row
 		},
+		/**
+		 * 
+		 * @param {type} e
+		 * @param {type} data (only has loaded, total and lengthComputable)
+		 * @returns {unresolved}
+		 */
 		progressall: function(e, data) {
+			OC.Upload.logStatus('progressall', e, data);
 			//IE < 10 does not fire the necessary events for the progress bar.
 			if($('html.lte9').length > 0) {
 				return;
@@ -309,6 +349,7 @@ $(document).ready(function() {
 		 * @param data
 		 */
 		done:function(e, data) {
+			OC.Upload.logStatus('done', e, data);
 			// handle different responses (json or body from iframe for ie)
 			var response;
 			if (typeof data.result === 'string') {
@@ -323,7 +364,9 @@ $(document).ready(function() {
 			if(typeof result[0] !== 'undefined'
 				&& result[0].status === 'success'
 			) {
-				selection.loadedBytes+=data.loaded;
+				if (selection) {
+					selection.loadedBytes+=data.loaded;
+				}
 				OC.Upload.nextUpload();
 			} else {
 				if (result[0].status === 'existserror') {
@@ -333,13 +376,19 @@ $(document).ready(function() {
 					var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
 					OC.dialogs.fileexists(data, original, replacement, OC.Upload, fu);
 				} else {
-					delete selection.uploads[data.files[0]];
+					OC.Upload.deleteSelectionUpload(selection, data.files[0].name);
 					data.textStatus = 'servererror';
 					data.errorThrown = t('files', result.data.message);
 					var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
 					fu._trigger('fail', e, data);
 				}
 			}
+			
+			//if user pressed cancel hide upload chrome
+			if (! OC.Upload.isProcessing()) {
+				$('#uploadprogresswrapper input.stop').fadeOut();
+				$('#uploadprogressbar').fadeOut();
+			}
 
 		},
 		/**
@@ -348,7 +397,10 @@ $(document).ready(function() {
 		 * @param data
 		 */
 		stop: function(e, data) {
-			if(OC.Upload.progressBytes()>=100) {
+			OC.Upload.logStatus('stop', e, data);
+			if(OC.Upload.progressBytes()>=100) { //only hide controls when all selections have ended uploading
+				
+				OC.Upload.cancelUploads(); //cleanup
 
 				if(data.dataType !== 'iframe') {
 					$('#uploadprogresswrapper input.stop').hide();
@@ -362,6 +414,11 @@ $(document).ready(function() {
 				$('#uploadprogressbar').progressbar('value', 100);
 				$('#uploadprogressbar').fadeOut();
 			}
+			//if user pressed cancel hide upload chrome
+			if (! OC.Upload.isProcessing()) {
+				$('#uploadprogresswrapper input.stop').fadeOut();
+				$('#uploadprogressbar').fadeOut();
+			}
 		}
 	};
 	
@@ -384,8 +441,8 @@ $(document).ready(function() {
 	};
 
 	// warn user not to leave the page while upload is in progress
-	$(window).bind('beforeunload', function(e) {
-		if ($.assocArraySize(uploadingFiles) > 0) {
+	$(window).on('beforeunload', function(e) {
+		if (OC.Upload.isProcessing()) {
 			return t('files', 'File upload is in progress. Leaving the page now will cancel the upload.');
 		}
 	});
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 335f81e04b..eb57672e46 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -409,7 +409,7 @@ $(document).ready(function(){
 	var file_upload_start = $('#file_upload_start');
 	
 	file_upload_start.on('fileuploaddrop', function(e, data) {
-		console.log('fileuploaddrop ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+		OC.Upload.logStatus('fileuploaddrop', e, data);
 		
 		var dropTarget = $(e.originalEvent.target).closest('tr');
 		if(dropTarget && dropTarget.data('type') === 'dir') { // drag&drop upload to folder
@@ -448,7 +448,7 @@ $(document).ready(function(){
 		
 	});
 	file_upload_start.on('fileuploadadd', function(e, data) {
-		console.log('fileuploadadd ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+		OC.Upload.logStatus('fileuploadadd', e, data);
 
 		// lookup selection for dir
 		var selection = OC.Upload.getSelection(data.originalFiles);
@@ -482,8 +482,11 @@ $(document).ready(function(){
 		}
 		
 	});
+	file_upload_start.on('fileuploadstart', function(e, data) {
+		OC.Upload.logStatus('fileuploadstart', e, data);
+	});
 	file_upload_start.on('fileuploaddone', function(e, data) {
-		console.log('fileuploaddone ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+		OC.Upload.logStatus('fileuploaddone', e, data);
 		
 		var response;
 		if (typeof data.result === 'string') {
@@ -545,28 +548,58 @@ $(document).ready(function(){
 				});
 			}
 		}
+		
+		//if user pressed cancel hide upload chrome
+		if (! OC.Upload.isProcessing()) {
+			//cleanup uploading to a dir
+			var uploadtext = $('tr .uploadtext');
+			var img = OC.imagePath('core', 'filetypes/folder.png');
+			uploadtext.parents('td.filename').attr('style','background-image:url('+img+')');
+			uploadtext.fadeOut();
+			uploadtext.attr('currentUploads', 0);
+		}
 	});
 	
 	file_upload_start.on('fileuploadalways', function(e, data) {
-		console.log('fileuploadalways ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+		OC.Upload.logStatus('fileuploadalways', e, data);
 	});
 	file_upload_start.on('fileuploadsend', function(e, data) {
-		console.log('fileuploadsend ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+		OC.Upload.logStatus('fileuploadsend', e, data);
 		
 		// TODOD add vis
 		//data.context.element = 
 	});
 	file_upload_start.on('fileuploadprogress', function(e, data) {
-		console.log('fileuploadprogress ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+		OC.Upload.logStatus('fileuploadprogress', e, data);
 	});
 	file_upload_start.on('fileuploadprogressall', function(e, data) {
-		console.log('fileuploadprogressall ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+		OC.Upload.logStatus('fileuploadprogressall', e, data);
 	});
 	file_upload_start.on('fileuploadstop', function(e, data) {
-		console.log('fileuploadstop ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+		OC.Upload.logStatus('fileuploadstop', e, data);
+		
+		//if user pressed cancel hide upload chrome
+		if (! OC.Upload.isProcessing()) {
+			//cleanup uploading to a dir
+			var uploadtext = $('tr .uploadtext');
+			var img = OC.imagePath('core', 'filetypes/folder.png');
+			uploadtext.parents('td.filename').attr('style','background-image:url('+img+')');
+			uploadtext.fadeOut();
+			uploadtext.attr('currentUploads', 0);
+		}
 	});
 	file_upload_start.on('fileuploadfail', function(e, data) {
-		console.log('fileuploadfail ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
+		OC.Upload.logStatus('fileuploadfail', e, data);
+		
+		//if user pressed cancel hide upload chrome
+		if (data.errorThrown === 'abort') {
+			//cleanup uploading to a dir
+			var uploadtext = $('tr .uploadtext');
+			var img = OC.imagePath('core', 'filetypes/folder.png');
+			uploadtext.parents('td.filename').attr('style','background-image:url('+img+')');
+			uploadtext.fadeOut();
+			uploadtext.attr('currentUploads', 0);
+		}
 	});
 	/*
 	file_upload_start.on('fileuploadfail', function(e, data) {
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index a907aeab1f..53405c7fe7 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -1,4 +1,3 @@
-var uploadingFiles = {};
 Files={
 	updateMaxUploadFilesize:function(response) {
 		if(response == undefined) {
@@ -235,12 +234,6 @@ $(document).ready(function() {
 		return size;
 	};
 
-	// warn user not to leave the page while upload is in progress
-	$(window).bind('beforeunload', function(e) {
-		if ($.assocArraySize(uploadingFiles) > 0)
-			return t('files','File upload is in progress. Leaving the page now will cancel the upload.');
-	});
-
 	//add multiply file upload attribute to all browsers except konqueror (which crashes when it's used)
 	if(navigator.userAgent.search(/konqueror/i)==-1){
 		$('#file_upload_start').attr('multiple','multiple')
diff --git a/apps/files/js/jquery.fileupload.js b/apps/files/js/jquery.fileupload.js
index a89e9dc2c4..f9f6cc3a38 100644
--- a/apps/files/js/jquery.fileupload.js
+++ b/apps/files/js/jquery.fileupload.js
@@ -1,5 +1,5 @@
 /*
- * jQuery File Upload Plugin 5.9
+ * jQuery File Upload Plugin 5.32.2
  * https://github.com/blueimp/jQuery-File-Upload
  *
  * Copyright 2010, Sebastian Tschan
@@ -10,7 +10,7 @@
  */
 
 /*jslint nomen: true, unparam: true, regexp: true */
-/*global define, window, document, Blob, FormData, location */
+/*global define, window, document, location, File, Blob, FormData */
 
 (function (factory) {
     'use strict';
@@ -27,12 +27,28 @@
 }(function ($) {
     'use strict';
 
+    // Detect file input support, based on
+    // http://viljamis.com/blog/2012/file-upload-support-on-mobile/
+    $.support.fileInput = !(new RegExp(
+        // Handle devices which give false positives for the feature detection:
+        '(Android (1\\.[0156]|2\\.[01]))' +
+            '|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' +
+            '|(w(eb)?OSBrowser)|(webOS)' +
+            '|(Kindle/(1\\.0|2\\.[05]|3\\.0))'
+    ).test(window.navigator.userAgent) ||
+        // Feature detection for all other devices:
+        $('<input type="file">').prop('disabled'));
+
     // The FileReader API is not actually used, but works as feature detection,
     // as e.g. Safari supports XHR file uploads via the FormData API,
     // but not non-multipart XHR file uploads:
     $.support.xhrFileUpload = !!(window.XMLHttpRequestUpload && window.FileReader);
     $.support.xhrFormDataFileUpload = !!window.FormData;
 
+    // Detect support for Blob slicing (required for chunked uploads):
+    $.support.blobSlice = window.Blob && (Blob.prototype.slice ||
+        Blob.prototype.webkitSlice || Blob.prototype.mozSlice);
+
     // The fileupload widget listens for change events on file input fields defined
     // via fileInput setting and paste or drop events of the given dropZone.
     // In addition to the default jQuery Widget methods, the fileupload widget
@@ -44,17 +60,16 @@
     $.widget('blueimp.fileupload', {
 
         options: {
-            // The namespace used for event handler binding on the dropZone and
-            // fileInput collections.
-            // If not set, the name of the widget ("fileupload") is used.
-            namespace: undefined,
-            // The drop target collection, by the default the complete document.
-            // Set to null or an empty collection to disable drag & drop support:
+            // The drop target element(s), by the default the complete document.
+            // Set to null to disable drag & drop support:
             dropZone: $(document),
-            // The file input field collection, that is listened for change events.
+            // The paste target element(s), by the default the complete document.
+            // Set to null to disable paste support:
+            pasteZone: $(document),
+            // The file input field(s), that are listened to for change events.
             // If undefined, it is set to the file input fields inside
             // of the widget element on plugin initialization.
-            // Set to null or an empty collection to disable the change listener.
+            // Set to null to disable the change listener.
             fileInput: undefined,
             // By default, the file input field is replaced with a clone after
             // each input field change event. This is required for iframe transport
@@ -63,7 +78,8 @@
             replaceFileInput: true,
             // The parameter name for the file form data (the request argument name).
             // If undefined or empty, the name property of the file input field is
-            // used, or "files[]" if the file input name property is also empty:
+            // used, or "files[]" if the file input name property is also empty,
+            // can be a string or an array of strings:
             paramName: undefined,
             // By default, each file of a selection is uploaded using an individual
             // request for XHR type uploads. Set to false to upload file
@@ -108,6 +124,29 @@
             // global progress calculation. Set the following option to false to
             // prevent recalculating the global progress data:
             recalculateProgress: true,
+            // Interval in milliseconds to calculate and trigger progress events:
+            progressInterval: 100,
+            // Interval in milliseconds to calculate progress bitrate:
+            bitrateInterval: 500,
+            // By default, uploads are started automatically when adding files:
+            autoUpload: true,
+
+            // Error and info messages:
+            messages: {
+                uploadedBytes: 'Uploaded bytes exceed file size'
+            },
+
+            // Translation function, gets the message key to be translated
+            // and an object with context specific data as arguments:
+            i18n: function (message, context) {
+                message = this.messages[message] || message.toString();
+                if (context) {
+                    $.each(context, function (key, value) {
+                        message = message.replace('{' + key + '}', value);
+                    });
+                }
+                return message;
+            },
 
             // Additional form data to be sent along with the file uploads can be set
             // using this option, which accepts an array of objects with name and
@@ -121,48 +160,81 @@
             // The add callback is invoked as soon as files are added to the fileupload
             // widget (via file input selection, drag & drop, paste or add API call).
             // If the singleFileUploads option is enabled, this callback will be
-            // called once for each file in the selection for XHR file uplaods, else
+            // called once for each file in the selection for XHR file uploads, else
             // once for each file selection.
+            //
             // The upload starts when the submit method is invoked on the data parameter.
             // The data object contains a files property holding the added files
-            // and allows to override plugin options as well as define ajax settings.
+            // and allows you to override plugin options as well as define ajax settings.
+            //
             // Listeners for this callback can also be bound the following way:
             // .bind('fileuploadadd', func);
+            //
             // data.submit() returns a Promise object and allows to attach additional
             // handlers using jQuery's Deferred callbacks:
             // data.submit().done(func).fail(func).always(func);
             add: function (e, data) {
-                data.submit();
+                if (data.autoUpload || (data.autoUpload !== false &&
+                        $(this).fileupload('option', 'autoUpload'))) {
+                    data.process().done(function () {
+                        data.submit();
+                    });
+                }
             },
 
             // Other callbacks:
+
             // Callback for the submit event of each file upload:
             // submit: function (e, data) {}, // .bind('fileuploadsubmit', func);
+
             // Callback for the start of each file upload request:
             // send: function (e, data) {}, // .bind('fileuploadsend', func);
+
             // Callback for successful uploads:
             // done: function (e, data) {}, // .bind('fileuploaddone', func);
+
             // Callback for failed (abort or error) uploads:
             // fail: function (e, data) {}, // .bind('fileuploadfail', func);
+
             // Callback for completed (success, abort or error) requests:
             // always: function (e, data) {}, // .bind('fileuploadalways', func);
+
             // Callback for upload progress events:
             // progress: function (e, data) {}, // .bind('fileuploadprogress', func);
+
             // Callback for global upload progress events:
             // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func);
+
             // Callback for uploads start, equivalent to the global ajaxStart event:
             // start: function (e) {}, // .bind('fileuploadstart', func);
+
             // Callback for uploads stop, equivalent to the global ajaxStop event:
             // stop: function (e) {}, // .bind('fileuploadstop', func);
-            // Callback for change events of the fileInput collection:
+
+            // Callback for change events of the fileInput(s):
             // change: function (e, data) {}, // .bind('fileuploadchange', func);
-            // Callback for paste events to the dropZone collection:
+
+            // Callback for paste events to the pasteZone(s):
             // paste: function (e, data) {}, // .bind('fileuploadpaste', func);
-            // Callback for drop events of the dropZone collection:
+
+            // Callback for drop events of the dropZone(s):
             // drop: function (e, data) {}, // .bind('fileuploaddrop', func);
-            // Callback for dragover events of the dropZone collection:
+
+            // Callback for dragover events of the dropZone(s):
             // dragover: function (e) {}, // .bind('fileuploaddragover', func);
 
+            // Callback for the start of each chunk upload request:
+            // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func);
+
+            // Callback for successful chunk uploads:
+            // chunkdone: function (e, data) {}, // .bind('fileuploadchunkdone', func);
+
+            // Callback for failed (abort or error) chunk uploads:
+            // chunkfail: function (e, data) {}, // .bind('fileuploadchunkfail', func);
+
+            // Callback for completed (success, abort or error) chunk upload requests:
+            // chunkalways: function (e, data) {}, // .bind('fileuploadchunkalways', func);
+
             // The plugin options are used as settings object for the ajax calls.
             // The following are jQuery ajax settings required for the file uploads:
             processData: false,
@@ -170,15 +242,36 @@
             cache: false
         },
 
-        // A list of options that require a refresh after assigning a new value:
-        _refreshOptionsList: [
-            'namespace',
-            'dropZone',
+        // A list of options that require reinitializing event listeners and/or
+        // special initialization code:
+        _specialOptions: [
             'fileInput',
+            'dropZone',
+            'pasteZone',
             'multipart',
             'forceIframeTransport'
         ],
 
+        _blobSlice: $.support.blobSlice && function () {
+            var slice = this.slice || this.webkitSlice || this.mozSlice;
+            return slice.apply(this, arguments);
+        },
+
+        _BitrateTimer: function () {
+            this.timestamp = ((Date.now) ? Date.now() : (new Date()).getTime());
+            this.loaded = 0;
+            this.bitrate = 0;
+            this.getBitrate = function (now, loaded, interval) {
+                var timeDiff = now - this.timestamp;
+                if (!this.bitrate || !interval || timeDiff > interval) {
+                    this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8;
+                    this.loaded = loaded;
+                    this.timestamp = now;
+                }
+                return this.bitrate;
+            };
+        },
+
         _isXHRUpload: function (options) {
             return !options.forceIframeTransport &&
                 ((!options.multipart && $.support.xhrFileUpload) ||
@@ -189,9 +282,11 @@
             var formData;
             if (typeof options.formData === 'function') {
                 return options.formData(options.form);
-            } else if ($.isArray(options.formData)) {
+            }
+            if ($.isArray(options.formData)) {
                 return options.formData;
-            } else if (options.formData) {
+            }
+            if ($.type(options.formData) === 'object') {
                 formData = [];
                 $.each(options.formData, function (name, value) {
                     formData.push({name: name, value: value});
@@ -209,28 +304,66 @@
             return total;
         },
 
+        _initProgressObject: function (obj) {
+            var progress = {
+                loaded: 0,
+                total: 0,
+                bitrate: 0
+            };
+            if (obj._progress) {
+                $.extend(obj._progress, progress);
+            } else {
+                obj._progress = progress;
+            }
+        },
+
+        _initResponseObject: function (obj) {
+            var prop;
+            if (obj._response) {
+                for (prop in obj._response) {
+                    if (obj._response.hasOwnProperty(prop)) {
+                        delete obj._response[prop];
+                    }
+                }
+            } else {
+                obj._response = {};
+            }
+        },
+
         _onProgress: function (e, data) {
             if (e.lengthComputable) {
-                var total = data.total || this._getTotal(data.files),
-                    loaded = parseInt(
-                        e.loaded / e.total * (data.chunkSize || total),
-                        10
-                    ) + (data.uploadedBytes || 0);
-                this._loaded += loaded - (data.loaded || data.uploadedBytes || 0);
-                data.lengthComputable = true;
-                data.loaded = loaded;
-                data.total = total;
+                var now = ((Date.now) ? Date.now() : (new Date()).getTime()),
+                    loaded;
+                if (data._time && data.progressInterval &&
+                        (now - data._time < data.progressInterval) &&
+                        e.loaded !== e.total) {
+                    return;
+                }
+                data._time = now;
+                loaded = Math.floor(
+                    e.loaded / e.total * (data.chunkSize || data._progress.total)
+                ) + (data.uploadedBytes || 0);
+                // Add the difference from the previously loaded state
+                // to the global loaded counter:
+                this._progress.loaded += (loaded - data._progress.loaded);
+                this._progress.bitrate = this._bitrateTimer.getBitrate(
+                    now,
+                    this._progress.loaded,
+                    data.bitrateInterval
+                );
+                data._progress.loaded = data.loaded = loaded;
+                data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate(
+                    now,
+                    loaded,
+                    data.bitrateInterval
+                );
                 // Trigger a custom progress event with a total data property set
                 // to the file size(s) of the current upload and a loaded data
                 // property calculated accordingly:
                 this._trigger('progress', e, data);
                 // Trigger a global progress event for all current file uploads,
                 // including ajax calls queued for sequential file uploads:
-                this._trigger('progressall', e, {
-                    lengthComputable: true,
-                    loaded: this._loaded,
-                    total: this._total
-                });
+                this._trigger('progressall', e, this._progress);
             }
         },
 
@@ -254,34 +387,30 @@
             }
         },
 
+        _isInstanceOf: function (type, obj) {
+            // Cross-frame instanceof check
+            return Object.prototype.toString.call(obj) === '[object ' + type + ']';
+        },
+
         _initXHRData: function (options) {
-            var formData,
+            var that = this,
+                formData,
                 file = options.files[0],
                 // Ignore non-multipart setting if not supported:
-                multipart = options.multipart || !$.support.xhrFileUpload;
-            if (!multipart || options.blob) {
-                // For non-multipart uploads and chunked uploads,
-                // file meta data is not part of the request body,
-                // so we transmit this data as part of the HTTP headers.
-                // For cross domain requests, these headers must be allowed
-                // via Access-Control-Allow-Headers or removed using
-                // the beforeSend callback:
-                options.headers = $.extend(options.headers, {
-                    'X-File-Name': file.name,
-                    'X-File-Type': file.type,
-                    'X-File-Size': file.size
-                });
-                if (!options.blob) {
-                    // Non-chunked non-multipart upload:
-                    options.contentType = file.type;
-                    options.data = file;
-                } else if (!multipart) {
-                    // Chunked non-multipart upload:
-                    options.contentType = 'application/octet-stream';
-                    options.data = options.blob;
-                }
+                multipart = options.multipart || !$.support.xhrFileUpload,
+                paramName = options.paramName[0];
+            options.headers = options.headers || {};
+            if (options.contentRange) {
+                options.headers['Content-Range'] = options.contentRange;
+            }
+            if (!multipart || options.blob || !this._isInstanceOf('File', file)) {
+                options.headers['Content-Disposition'] = 'attachment; filename="' +
+                    encodeURI(file.name) + '"';
             }
-            if (multipart && $.support.xhrFormDataFileUpload) {
+            if (!multipart) {
+                options.contentType = file.type;
+                options.data = options.blob || file;
+            } else if ($.support.xhrFormDataFileUpload) {
                 if (options.postMessage) {
                     // window.postMessage does not allow sending FormData
                     // objects, so we just add the File/Blob objects to
@@ -290,19 +419,19 @@
                     formData = this._getFormData(options);
                     if (options.blob) {
                         formData.push({
-                            name: options.paramName,
+                            name: paramName,
                             value: options.blob
                         });
                     } else {
                         $.each(options.files, function (index, file) {
                             formData.push({
-                                name: options.paramName,
+                                name: options.paramName[index] || paramName,
                                 value: file
                             });
                         });
                     }
                 } else {
-                    if (options.formData instanceof FormData) {
+                    if (that._isInstanceOf('FormData', options.formData)) {
                         formData = options.formData;
                     } else {
                         formData = new FormData();
@@ -311,14 +440,18 @@
                         });
                     }
                     if (options.blob) {
-                        formData.append(options.paramName, options.blob, file.name);
+                        formData.append(paramName, options.blob, file.name);
                     } else {
                         $.each(options.files, function (index, file) {
-                            // File objects are also Blob instances.
                             // This check allows the tests to run with
                             // dummy objects:
-                            if (file instanceof Blob) {
-                                formData.append(options.paramName, file, file.name);
+                            if (that._isInstanceOf('File', file) ||
+                                    that._isInstanceOf('Blob', file)) {
+                                formData.append(
+                                    options.paramName[index] || paramName,
+                                    file,
+                                    file.name
+                                );
                             }
                         });
                     }
@@ -330,13 +463,13 @@
         },
 
         _initIframeSettings: function (options) {
+            var targetHost = $('<a></a>').prop('href', options.url).prop('host');
             // Setting the dataType to iframe enables the iframe transport:
             options.dataType = 'iframe ' + (options.dataType || '');
             // The iframe transport accepts a serialized array as form data:
             options.formData = this._getFormData(options);
             // Add redirect url to form data on cross-domain uploads:
-            if (options.redirect && $('<a></a>').prop('href', options.url)
-                    .prop('host') !== location.host) {
+            if (options.redirect && targetHost && targetHost !== location.host) {
                 options.formData.push({
                     name: options.redirectParamName || 'redirect',
                     value: options.redirect
@@ -358,29 +491,58 @@
                     options.dataType = 'postmessage ' + (options.dataType || '');
                 }
             } else {
-                this._initIframeSettings(options, 'iframe');
+                this._initIframeSettings(options);
             }
         },
 
+        _getParamName: function (options) {
+            var fileInput = $(options.fileInput),
+                paramName = options.paramName;
+            if (!paramName) {
+                paramName = [];
+                fileInput.each(function () {
+                    var input = $(this),
+                        name = input.prop('name') || 'files[]',
+                        i = (input.prop('files') || [1]).length;
+                    while (i) {
+                        paramName.push(name);
+                        i -= 1;
+                    }
+                });
+                if (!paramName.length) {
+                    paramName = [fileInput.prop('name') || 'files[]'];
+                }
+            } else if (!$.isArray(paramName)) {
+                paramName = [paramName];
+            }
+            return paramName;
+        },
+
         _initFormSettings: function (options) {
             // Retrieve missing options from the input field and the
             // associated form, if available:
             if (!options.form || !options.form.length) {
                 options.form = $(options.fileInput.prop('form'));
+                // If the given file input doesn't have an associated form,
+                // use the default widget file input's form:
+                if (!options.form.length) {
+                    options.form = $(this.options.fileInput.prop('form'));
+                }
             }
-            if (!options.paramName) {
-                options.paramName = options.fileInput.prop('name') ||
-                    'files[]';
-            }
+            options.paramName = this._getParamName(options);
             if (!options.url) {
                 options.url = options.form.prop('action') || location.href;
             }
             // The HTTP request method must be "POST" or "PUT":
             options.type = (options.type || options.form.prop('method') || '')
                 .toUpperCase();
-            if (options.type !== 'POST' && options.type !== 'PUT') {
+            if (options.type !== 'POST' && options.type !== 'PUT' &&
+                    options.type !== 'PATCH') {
                 options.type = 'POST';
             }
+            if (!options.formAcceptCharset) {
+                options.formAcceptCharset = options.form.attr('accept-charset');
+            }
         },
 
         _getAJAXSettings: function (data) {
@@ -390,6 +552,21 @@
             return options;
         },
 
+        // jQuery 1.6 doesn't provide .state(),
+        // while jQuery 1.8+ removed .isRejected() and .isResolved():
+        _getDeferredState: function (deferred) {
+            if (deferred.state) {
+                return deferred.state();
+            }
+            if (deferred.isResolved()) {
+                return 'resolved';
+            }
+            if (deferred.isRejected()) {
+                return 'rejected';
+            }
+            return 'pending';
+        },
+
         // Maps jqXHR callbacks to the equivalent
         // methods of the given Promise object:
         _enhancePromise: function (promise) {
@@ -414,24 +591,77 @@
             return this._enhancePromise(promise);
         },
 
+        // Adds convenience methods to the data callback argument:
+        _addConvenienceMethods: function (e, data) {
+            var that = this,
+                getPromise = function (data) {
+                    return $.Deferred().resolveWith(that, [data]).promise();
+                };
+            data.process = function (resolveFunc, rejectFunc) {
+                if (resolveFunc || rejectFunc) {
+                    data._processQueue = this._processQueue =
+                        (this._processQueue || getPromise(this))
+                            .pipe(resolveFunc, rejectFunc);
+                }
+                return this._processQueue || getPromise(this);
+            };
+            data.submit = function () {
+                if (this.state() !== 'pending') {
+                    data.jqXHR = this.jqXHR =
+                        (that._trigger('submit', e, this) !== false) &&
+                        that._onSend(e, this);
+                }
+                return this.jqXHR || that._getXHRPromise();
+            };
+            data.abort = function () {
+                if (this.jqXHR) {
+                    return this.jqXHR.abort();
+                }
+                return that._getXHRPromise();
+            };
+            data.state = function () {
+                if (this.jqXHR) {
+                    return that._getDeferredState(this.jqXHR);
+                }
+                if (this._processQueue) {
+                    return that._getDeferredState(this._processQueue);
+                }
+            };
+            data.progress = function () {
+                return this._progress;
+            };
+            data.response = function () {
+                return this._response;
+            };
+        },
+
+        // Parses the Range header from the server response
+        // and returns the uploaded bytes:
+        _getUploadedBytes: function (jqXHR) {
+            var range = jqXHR.getResponseHeader('Range'),
+                parts = range && range.split('-'),
+                upperBytesPos = parts && parts.length > 1 &&
+                    parseInt(parts[1], 10);
+            return upperBytesPos && upperBytesPos + 1;
+        },
+
         // Uploads a file in multiple, sequential requests
         // by splitting the file up in multiple blob chunks.
         // If the second parameter is true, only tests if the file
         // should be uploaded in chunks, but does not invoke any
         // upload requests:
         _chunkedUpload: function (options, testOnly) {
+            options.uploadedBytes = options.uploadedBytes || 0;
             var that = this,
                 file = options.files[0],
                 fs = file.size,
-                ub = options.uploadedBytes = options.uploadedBytes || 0,
+                ub = options.uploadedBytes,
                 mcs = options.maxChunkSize || fs,
-                // Use the Blob methods with the slice implementation
-                // according to the W3C Blob API specification:
-                slice = file.webkitSlice || file.mozSlice || file.slice,
-                upload,
-                n,
+                slice = this._blobSlice,
+                dfd = $.Deferred(),
+                promise = dfd.promise(),
                 jqXHR,
-                pipe;
+                upload;
             if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) ||
                     options.data) {
                 return false;
@@ -440,62 +670,84 @@
                 return true;
             }
             if (ub >= fs) {
-                file.error = 'uploadedBytes';
+                file.error = options.i18n('uploadedBytes');
                 return this._getXHRPromise(
                     false,
                     options.context,
                     [null, 'error', file.error]
                 );
             }
-            // n is the number of blobs to upload,
-            // calculated via filesize, uploaded bytes and max chunk size:
-            n = Math.ceil((fs - ub) / mcs);
-            // The chunk upload method accepting the chunk number as parameter:
-            upload = function (i) {
-                if (!i) {
-                    return that._getXHRPromise(true, options.context);
-                }
-                // Upload the blobs in sequential order:
-                return upload(i -= 1).pipe(function () {
-                    // Clone the options object for each chunk upload:
-                    var o = $.extend({}, options);
-                    o.blob = slice.call(
-                        file,
-                        ub + i * mcs,
-                        ub + (i + 1) * mcs
-                    );
-                    // Store the current chunk size, as the blob itself
-                    // will be dereferenced after data processing:
-                    o.chunkSize = o.blob.size;
-                    // Process the upload data (the blob and potential form data):
-                    that._initXHRData(o);
-                    // Add progress listeners for this chunk upload:
-                    that._initProgressListener(o);
-                    jqXHR = ($.ajax(o) || that._getXHRPromise(false, o.context))
-                        .done(function () {
-                            // Create a progress event if upload is done and
-                            // no progress event has been invoked for this chunk:
-                            if (!o.loaded) {
-                                that._onProgress($.Event('progress', {
-                                    lengthComputable: true,
-                                    loaded: o.chunkSize,
-                                    total: o.chunkSize
-                                }), o);
-                            }
-                            options.uploadedBytes = o.uploadedBytes +=
-                                o.chunkSize;
-                        });
-                    return jqXHR;
-                });
+            // The chunk upload method:
+            upload = function () {
+                // Clone the options object for each chunk upload:
+                var o = $.extend({}, options),
+                    currentLoaded = o._progress.loaded;
+                o.blob = slice.call(
+                    file,
+                    ub,
+                    ub + mcs,
+                    file.type
+                );
+                // Store the current chunk size, as the blob itself
+                // will be dereferenced after data processing:
+                o.chunkSize = o.blob.size;
+                // Expose the chunk bytes position range:
+                o.contentRange = 'bytes ' + ub + '-' +
+                    (ub + o.chunkSize - 1) + '/' + fs;
+                // Process the upload data (the blob and potential form data):
+                that._initXHRData(o);
+                // Add progress listeners for this chunk upload:
+                that._initProgressListener(o);
+                jqXHR = ((that._trigger('chunksend', null, o) !== false && $.ajax(o)) ||
+                        that._getXHRPromise(false, o.context))
+                    .done(function (result, textStatus, jqXHR) {
+                        ub = that._getUploadedBytes(jqXHR) ||
+                            (ub + o.chunkSize);
+                        // Create a progress event if no final progress event
+                        // with loaded equaling total has been triggered
+                        // for this chunk:
+                        if (currentLoaded + o.chunkSize - o._progress.loaded) {
+                            that._onProgress($.Event('progress', {
+                                lengthComputable: true,
+                                loaded: ub - o.uploadedBytes,
+                                total: ub - o.uploadedBytes
+                            }), o);
+                        }
+                        options.uploadedBytes = o.uploadedBytes = ub;
+                        o.result = result;
+                        o.textStatus = textStatus;
+                        o.jqXHR = jqXHR;
+                        that._trigger('chunkdone', null, o);
+                        that._trigger('chunkalways', null, o);
+                        if (ub < fs) {
+                            // File upload not yet complete,
+                            // continue with the next chunk:
+                            upload();
+                        } else {
+                            dfd.resolveWith(
+                                o.context,
+                                [result, textStatus, jqXHR]
+                            );
+                        }
+                    })
+                    .fail(function (jqXHR, textStatus, errorThrown) {
+                        o.jqXHR = jqXHR;
+                        o.textStatus = textStatus;
+                        o.errorThrown = errorThrown;
+                        that._trigger('chunkfail', null, o);
+                        that._trigger('chunkalways', null, o);
+                        dfd.rejectWith(
+                            o.context,
+                            [jqXHR, textStatus, errorThrown]
+                        );
+                    });
             };
-            // Return the piped Promise object, enhanced with an abort method,
-            // which is delegated to the jqXHR object of the current upload,
-            // and jqXHR callbacks mapped to the equivalent Promise methods:
-            pipe = upload(n);
-            pipe.abort = function () {
+            this._enhancePromise(promise);
+            promise.abort = function () {
                 return jqXHR.abort();
             };
-            return this._enhancePromise(pipe);
+            upload();
+            return promise;
         },
 
         _beforeSend: function (e, data) {
@@ -504,99 +756,113 @@
                 // and no other uploads are currently running,
                 // equivalent to the global ajaxStart event:
                 this._trigger('start');
+                // Set timer for global bitrate progress calculation:
+                this._bitrateTimer = new this._BitrateTimer();
+                // Reset the global progress values:
+                this._progress.loaded = this._progress.total = 0;
+                this._progress.bitrate = 0;
             }
+            // Make sure the container objects for the .response() and
+            // .progress() methods on the data object are available
+            // and reset to their initial state:
+            this._initResponseObject(data);
+            this._initProgressObject(data);
+            data._progress.loaded = data.loaded = data.uploadedBytes || 0;
+            data._progress.total = data.total = this._getTotal(data.files) || 1;
+            data._progress.bitrate = data.bitrate = 0;
             this._active += 1;
             // Initialize the global progress values:
-            this._loaded += data.uploadedBytes || 0;
-            this._total += this._getTotal(data.files);
+            this._progress.loaded += data.loaded;
+            this._progress.total += data.total;
         },
 
         _onDone: function (result, textStatus, jqXHR, options) {
-            if (!this._isXHRUpload(options)) {
-                // Create a progress event for each iframe load:
+            var total = options._progress.total,
+                response = options._response;
+            if (options._progress.loaded < total) {
+                // Create a progress event if no final progress event
+                // with loaded equaling total has been triggered:
                 this._onProgress($.Event('progress', {
                     lengthComputable: true,
-                    loaded: 1,
-                    total: 1
+                    loaded: total,
+                    total: total
                 }), options);
             }
-            options.result = result;
-            options.textStatus = textStatus;
-            options.jqXHR = jqXHR;
+            response.result = options.result = result;
+            response.textStatus = options.textStatus = textStatus;
+            response.jqXHR = options.jqXHR = jqXHR;
             this._trigger('done', null, options);
         },
 
         _onFail: function (jqXHR, textStatus, errorThrown, options) {
-            options.jqXHR = jqXHR;
-            options.textStatus = textStatus;
-            options.errorThrown = errorThrown;
-            this._trigger('fail', null, options);
+            var response = options._response;
             if (options.recalculateProgress) {
                 // Remove the failed (error or abort) file upload from
                 // the global progress calculation:
-                this._loaded -= options.loaded || options.uploadedBytes || 0;
-                this._total -= options.total || this._getTotal(options.files);
+                this._progress.loaded -= options._progress.loaded;
+                this._progress.total -= options._progress.total;
             }
+            response.jqXHR = options.jqXHR = jqXHR;
+            response.textStatus = options.textStatus = textStatus;
+            response.errorThrown = options.errorThrown = errorThrown;
+            this._trigger('fail', null, options);
         },
 
         _onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) {
-            this._active -= 1;
-            options.textStatus = textStatus;
-            if (jqXHRorError && jqXHRorError.always) {
-                options.jqXHR = jqXHRorError;
-                options.result = jqXHRorResult;
-            } else {
-                options.jqXHR = jqXHRorResult;
-                options.errorThrown = jqXHRorError;
-            }
+            // jqXHRorResult, textStatus and jqXHRorError are added to the
+            // options object via done and fail callbacks
             this._trigger('always', null, options);
-            if (this._active === 0) {
-                // The stop callback is triggered when all uploads have
-                // been completed, equivalent to the global ajaxStop event:
-                this._trigger('stop');
-                // Reset the global progress values:
-                this._loaded = this._total = 0;
-            }
         },
 
         _onSend: function (e, data) {
+            if (!data.submit) {
+                this._addConvenienceMethods(e, data);
+            }
             var that = this,
                 jqXHR,
+                aborted,
                 slot,
                 pipe,
                 options = that._getAJAXSettings(data),
-                send = function (resolve, args) {
+                send = function () {
                     that._sending += 1;
+                    // Set timer for bitrate progress calculation:
+                    options._bitrateTimer = new that._BitrateTimer();
                     jqXHR = jqXHR || (
-                        (resolve !== false &&
-                        that._trigger('send', e, options) !== false &&
-                        (that._chunkedUpload(options) || $.ajax(options))) ||
-                        that._getXHRPromise(false, options.context, args)
+                        ((aborted || that._trigger('send', e, options) === false) &&
+                        that._getXHRPromise(false, options.context, aborted)) ||
+                        that._chunkedUpload(options) || $.ajax(options)
                     ).done(function (result, textStatus, jqXHR) {
                         that._onDone(result, textStatus, jqXHR, options);
                     }).fail(function (jqXHR, textStatus, errorThrown) {
                         that._onFail(jqXHR, textStatus, errorThrown, options);
                     }).always(function (jqXHRorResult, textStatus, jqXHRorError) {
-                        that._sending -= 1;
                         that._onAlways(
                             jqXHRorResult,
                             textStatus,
                             jqXHRorError,
                             options
                         );
+                        that._sending -= 1;
+                        that._active -= 1;
                         if (options.limitConcurrentUploads &&
                                 options.limitConcurrentUploads > that._sending) {
                             // Start the next queued upload,
                             // that has not been aborted:
                             var nextSlot = that._slots.shift();
                             while (nextSlot) {
-                                if (!nextSlot.isRejected()) {
+                                if (that._getDeferredState(nextSlot) === 'pending') {
                                     nextSlot.resolve();
                                     break;
                                 }
                                 nextSlot = that._slots.shift();
                             }
                         }
+                        if (that._active === 0) {
+                            // The stop callback is triggered when all uploads have
+                            // been completed, equivalent to the global ajaxStop event:
+                            that._trigger('stop');
+                        }
                     });
                     return jqXHR;
                 };
@@ -609,18 +875,19 @@
                     this._slots.push(slot);
                     pipe = slot.pipe(send);
                 } else {
-                    pipe = (this._sequence = this._sequence.pipe(send, send));
+                    this._sequence = this._sequence.pipe(send, send);
+                    pipe = this._sequence;
                 }
                 // Return the piped Promise object, enhanced with an abort method,
                 // which is delegated to the jqXHR object of the current upload,
                 // and jqXHR callbacks mapped to the equivalent Promise methods:
                 pipe.abort = function () {
-                    var args = [undefined, 'abort', 'abort'];
+                    aborted = [undefined, 'abort', 'abort'];
                     if (!jqXHR) {
                         if (slot) {
-                            slot.rejectWith(args);
+                            slot.rejectWith(options.context, aborted);
                         }
-                        return send(false, args);
+                        return send();
                     }
                     return jqXHR.abort();
                 };
@@ -634,40 +901,43 @@
                 result = true,
                 options = $.extend({}, this.options, data),
                 limit = options.limitMultiFileUploads,
+                paramName = this._getParamName(options),
+                paramNameSet,
+                paramNameSlice,
                 fileSet,
                 i;
             if (!(options.singleFileUploads || limit) ||
                     !this._isXHRUpload(options)) {
                 fileSet = [data.files];
+                paramNameSet = [paramName];
             } else if (!options.singleFileUploads && limit) {
                 fileSet = [];
+                paramNameSet = [];
                 for (i = 0; i < data.files.length; i += limit) {
                     fileSet.push(data.files.slice(i, i + limit));
+                    paramNameSlice = paramName.slice(i, i + limit);
+                    if (!paramNameSlice.length) {
+                        paramNameSlice = paramName;
+                    }
+                    paramNameSet.push(paramNameSlice);
                 }
+            } else {
+                paramNameSet = paramName;
             }
             data.originalFiles = data.files;
             $.each(fileSet || data.files, function (index, element) {
-                var files = fileSet ? element : [element],
-                    newData = $.extend({}, data, {files: files});
-                newData.submit = function () {
-                    newData.jqXHR = this.jqXHR =
-                        (that._trigger('submit', e, this) !== false) &&
-                        that._onSend(e, this);
-                    return this.jqXHR;
-                };
-                return (result = that._trigger('add', e, newData));
+                var newData = $.extend({}, data);
+                newData.files = fileSet ? element : [element];
+                newData.paramName = paramNameSet[index];
+                that._initResponseObject(newData);
+                that._initProgressObject(newData);
+                that._addConvenienceMethods(e, newData);
+                result = that._trigger('add', e, newData);
+                return result;
             });
             return result;
         },
 
-        // File Normalization for Gecko 1.9.1 (Firefox 3.5) support:
-        _normalizeFile: function (index, file) {
-            if (file.name === undefined && file.size === undefined) {
-                file.name = file.fileName;
-                file.size = file.fileSize;
-            }
-        },
-
         _replaceFileInput: function (input) {
             var inputClone = input.clone(true);
             $('<form></form>').append(inputClone)[0].reset();
@@ -677,7 +947,7 @@
             // Avoid memory leaks with the detached file input:
             $.cleanData(input.unbind('remove'));
             // Replace the original file input element in the fileInput
-            // collection with the clone, which has been copied including
+            // elements set with the clone, which has been copied including
             // event handlers:
             this.options.fileInput = this.options.fileInput.map(function (i, el) {
                 if (el === input[0]) {
@@ -692,102 +962,229 @@
             }
         },
 
-        _onChange: function (e) {
-            var that = e.data.fileupload,
-                data = {
-                    files: $.each($.makeArray(e.target.files), that._normalizeFile),
-                    fileInput: $(e.target),
-                    form: $(e.target.form)
-                };
-            if (!data.files.length) {
+        _handleFileTreeEntry: function (entry, path) {
+            var that = this,
+                dfd = $.Deferred(),
+                errorHandler = function (e) {
+                    if (e && !e.entry) {
+                        e.entry = entry;
+                    }
+                    // Since $.when returns immediately if one
+                    // Deferred is rejected, we use resolve instead.
+                    // This allows valid files and invalid items
+                    // to be returned together in one set:
+                    dfd.resolve([e]);
+                },
+                dirReader;
+            path = path || '';
+            if (entry.isFile) {
+                if (entry._file) {
+                    // Workaround for Chrome bug #149735
+                    entry._file.relativePath = path;
+                    dfd.resolve(entry._file);
+                } else {
+                    entry.file(function (file) {
+                        file.relativePath = path;
+                        dfd.resolve(file);
+                    }, errorHandler);
+                }
+            } else if (entry.isDirectory) {
+                dirReader = entry.createReader();
+                dirReader.readEntries(function (entries) {
+                    that._handleFileTreeEntries(
+                        entries,
+                        path + entry.name + '/'
+                    ).done(function (files) {
+                        dfd.resolve(files);
+                    }).fail(errorHandler);
+                }, errorHandler);
+            } else {
+                // Return an empy list for file system items
+                // other than files or directories:
+                dfd.resolve([]);
+            }
+            return dfd.promise();
+        },
+
+        _handleFileTreeEntries: function (entries, path) {
+            var that = this;
+            return $.when.apply(
+                $,
+                $.map(entries, function (entry) {
+                    return that._handleFileTreeEntry(entry, path);
+                })
+            ).pipe(function () {
+                return Array.prototype.concat.apply(
+                    [],
+                    arguments
+                );
+            });
+        },
+
+        _getDroppedFiles: function (dataTransfer) {
+            dataTransfer = dataTransfer || {};
+            var items = dataTransfer.items;
+            if (items && items.length && (items[0].webkitGetAsEntry ||
+                    items[0].getAsEntry)) {
+                return this._handleFileTreeEntries(
+                    $.map(items, function (item) {
+                        var entry;
+                        if (item.webkitGetAsEntry) {
+                            entry = item.webkitGetAsEntry();
+                            if (entry) {
+                                // Workaround for Chrome bug #149735:
+                                entry._file = item.getAsFile();
+                            }
+                            return entry;
+                        }
+                        return item.getAsEntry();
+                    })
+                );
+            }
+            return $.Deferred().resolve(
+                $.makeArray(dataTransfer.files)
+            ).promise();
+        },
+
+        _getSingleFileInputFiles: function (fileInput) {
+            fileInput = $(fileInput);
+            var entries = fileInput.prop('webkitEntries') ||
+                    fileInput.prop('entries'),
+                files,
+                value;
+            if (entries && entries.length) {
+                return this._handleFileTreeEntries(entries);
+            }
+            files = $.makeArray(fileInput.prop('files'));
+            if (!files.length) {
+                value = fileInput.prop('value');
+                if (!value) {
+                    return $.Deferred().resolve([]).promise();
+                }
                 // If the files property is not available, the browser does not
                 // support the File API and we add a pseudo File object with
                 // the input value as name with path information removed:
-                data.files = [{name: e.target.value.replace(/^.*\\/, '')}];
-            }
-            if (that.options.replaceFileInput) {
-                that._replaceFileInput(data.fileInput);
+                files = [{name: value.replace(/^.*\\/, '')}];
+            } else if (files[0].name === undefined && files[0].fileName) {
+                // File normalization for Safari 4 and Firefox 3:
+                $.each(files, function (index, file) {
+                    file.name = file.fileName;
+                    file.size = file.fileSize;
+                });
             }
-            if (that._trigger('change', e, data) === false ||
-                    that._onAdd(e, data) === false) {
-                return false;
+            return $.Deferred().resolve(files).promise();
+        },
+
+        _getFileInputFiles: function (fileInput) {
+            if (!(fileInput instanceof $) || fileInput.length === 1) {
+                return this._getSingleFileInputFiles(fileInput);
             }
+            return $.when.apply(
+                $,
+                $.map(fileInput, this._getSingleFileInputFiles)
+            ).pipe(function () {
+                return Array.prototype.concat.apply(
+                    [],
+                    arguments
+                );
+            });
+        },
+
+        _onChange: function (e) {
+            var that = this,
+                data = {
+                    fileInput: $(e.target),
+                    form: $(e.target.form)
+                };
+            this._getFileInputFiles(data.fileInput).always(function (files) {
+                data.files = files;
+                if (that.options.replaceFileInput) {
+                    that._replaceFileInput(data.fileInput);
+                }
+                if (that._trigger('change', e, data) !== false) {
+                    that._onAdd(e, data);
+                }
+            });
         },
 
         _onPaste: function (e) {
-            var that = e.data.fileupload,
-                cbd = e.originalEvent.clipboardData,
-                items = (cbd && cbd.items) || [],
+            var items = e.originalEvent && e.originalEvent.clipboardData &&
+                    e.originalEvent.clipboardData.items,
                 data = {files: []};
-            $.each(items, function (index, item) {
-                var file = item.getAsFile && item.getAsFile();
-                if (file) {
-                    data.files.push(file);
+            if (items && items.length) {
+                $.each(items, function (index, item) {
+                    var file = item.getAsFile && item.getAsFile();
+                    if (file) {
+                        data.files.push(file);
+                    }
+                });
+                if (this._trigger('paste', e, data) === false ||
+                        this._onAdd(e, data) === false) {
+                    return false;
                 }
-            });
-            if (that._trigger('paste', e, data) === false ||
-                    that._onAdd(e, data) === false) {
-                return false;
             }
         },
 
         _onDrop: function (e) {
-            var that = e.data.fileupload,
-                dataTransfer = e.dataTransfer = e.originalEvent.dataTransfer,
-                data = {
-                    files: $.each(
-                        $.makeArray(dataTransfer && dataTransfer.files),
-                        that._normalizeFile
-                    )
-                };
-            if (that._trigger('drop', e, data) === false ||
-                    that._onAdd(e, data) === false) {
-                return false;
+            e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;
+            var that = this,
+                dataTransfer = e.dataTransfer,
+                data = {};
+            if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {
+                e.preventDefault();
+                this._getDroppedFiles(dataTransfer).always(function (files) {
+                    data.files = files;
+                    if (that._trigger('drop', e, data) !== false) {
+                        that._onAdd(e, data);
+                    }
+                });
             }
-            e.preventDefault();
         },
 
         _onDragOver: function (e) {
-            var that = e.data.fileupload,
-                dataTransfer = e.dataTransfer = e.originalEvent.dataTransfer;
-            if (that._trigger('dragover', e) === false) {
-                return false;
-            }
+            e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;
+            var dataTransfer = e.dataTransfer;
             if (dataTransfer) {
-                dataTransfer.dropEffect = dataTransfer.effectAllowed = 'copy';
+                if (this._trigger('dragover', e) === false) {
+                    return false;
+                }
+                if ($.inArray('Files', dataTransfer.types) !== -1) {
+                    dataTransfer.dropEffect = 'copy';
+                    e.preventDefault();
+                }
             }
-            e.preventDefault();
         },
 
         _initEventHandlers: function () {
-            var ns = this.options.namespace;
             if (this._isXHRUpload(this.options)) {
-                this.options.dropZone
-                    .bind('dragover.' + ns, {fileupload: this}, this._onDragOver)
-                    .bind('drop.' + ns, {fileupload: this}, this._onDrop)
-                    .bind('paste.' + ns, {fileupload: this}, this._onPaste);
+                this._on(this.options.dropZone, {
+                    dragover: this._onDragOver,
+                    drop: this._onDrop
+                });
+                this._on(this.options.pasteZone, {
+                    paste: this._onPaste
+                });
+            }
+            if ($.support.fileInput) {
+                this._on(this.options.fileInput, {
+                    change: this._onChange
+                });
             }
-            this.options.fileInput
-                .bind('change.' + ns, {fileupload: this}, this._onChange);
         },
 
         _destroyEventHandlers: function () {
-            var ns = this.options.namespace;
-            this.options.dropZone
-                .unbind('dragover.' + ns, this._onDragOver)
-                .unbind('drop.' + ns, this._onDrop)
-                .unbind('paste.' + ns, this._onPaste);
-            this.options.fileInput
-                .unbind('change.' + ns, this._onChange);
+            this._off(this.options.dropZone, 'dragover drop');
+            this._off(this.options.pasteZone, 'paste');
+            this._off(this.options.fileInput, 'change');
         },
 
         _setOption: function (key, value) {
-            var refresh = $.inArray(key, this._refreshOptionsList) !== -1;
-            if (refresh) {
+            var reinit = $.inArray(key, this._specialOptions) !== -1;
+            if (reinit) {
                 this._destroyEventHandlers();
             }
-            $.Widget.prototype._setOption.call(this, key, value);
-            if (refresh) {
+            this._super(key, value);
+            if (reinit) {
                 this._initSpecialOptions();
                 this._initEventHandlers();
             }
@@ -796,42 +1193,68 @@
         _initSpecialOptions: function () {
             var options = this.options;
             if (options.fileInput === undefined) {
-                options.fileInput = this.element.is('input:file') ?
-                        this.element : this.element.find('input:file');
+                options.fileInput = this.element.is('input[type="file"]') ?
+                        this.element : this.element.find('input[type="file"]');
             } else if (!(options.fileInput instanceof $)) {
                 options.fileInput = $(options.fileInput);
             }
             if (!(options.dropZone instanceof $)) {
                 options.dropZone = $(options.dropZone);
             }
+            if (!(options.pasteZone instanceof $)) {
+                options.pasteZone = $(options.pasteZone);
+            }
+        },
+
+        _getRegExp: function (str) {
+            var parts = str.split('/'),
+                modifiers = parts.pop();
+            parts.shift();
+            return new RegExp(parts.join('/'), modifiers);
+        },
+
+        _isRegExpOption: function (key, value) {
+            return key !== 'url' && $.type(value) === 'string' &&
+                /^\/.*\/[igm]{0,3}$/.test(value);
+        },
+
+        _initDataAttributes: function () {
+            var that = this,
+                options = this.options;
+            // Initialize options set via HTML5 data-attributes:
+            $.each(
+                $(this.element[0].cloneNode(false)).data(),
+                function (key, value) {
+                    if (that._isRegExpOption(key, value)) {
+                        value = that._getRegExp(value);
+                    }
+                    options[key] = value;
+                }
+            );
         },
 
         _create: function () {
-            var options = this.options,
-                dataOpts = $.extend({}, this.element.data());
-            dataOpts[this.widgetName] = undefined;
-            $.extend(options, dataOpts);
-            options.namespace = options.namespace || this.widgetName;
+            this._initDataAttributes();
             this._initSpecialOptions();
             this._slots = [];
             this._sequence = this._getXHRPromise(true);
-            this._sending = this._active = this._loaded = this._total = 0;
+            this._sending = this._active = 0;
+            this._initProgressObject(this);
             this._initEventHandlers();
         },
 
-        destroy: function () {
-            this._destroyEventHandlers();
-            $.Widget.prototype.destroy.call(this);
-        },
-
-        enable: function () {
-            $.Widget.prototype.enable.call(this);
-            this._initEventHandlers();
+        // This method is exposed to the widget API and allows to query
+        // the number of active uploads:
+        active: function () {
+            return this._active;
         },
 
-        disable: function () {
-            this._destroyEventHandlers();
-            $.Widget.prototype.disable.call(this);
+        // This method is exposed to the widget API and allows to query
+        // the widget upload progress.
+        // It returns an object with loaded, total and bitrate properties
+        // for the running uploads:
+        progress: function () {
+            return this._progress;
         },
 
         // This method is exposed to the widget API and allows adding files
@@ -839,21 +1262,65 @@
         // must have a files property and can contain additional options:
         // .fileupload('add', {files: filesList});
         add: function (data) {
+            var that = this;
             if (!data || this.options.disabled) {
                 return;
             }
-            data.files = $.each($.makeArray(data.files), this._normalizeFile);
-            this._onAdd(null, data);
+            if (data.fileInput && !data.files) {
+                this._getFileInputFiles(data.fileInput).always(function (files) {
+                    data.files = files;
+                    that._onAdd(null, data);
+                });
+            } else {
+                data.files = $.makeArray(data.files);
+                this._onAdd(null, data);
+            }
         },
 
         // This method is exposed to the widget API and allows sending files
         // using the fileupload API. The data parameter accepts an object which
-        // must have a files property and can contain additional options:
+        // must have a files or fileInput property and can contain additional options:
         // .fileupload('send', {files: filesList});
         // The method returns a Promise object for the file upload call.
         send: function (data) {
             if (data && !this.options.disabled) {
-                data.files = $.each($.makeArray(data.files), this._normalizeFile);
+                if (data.fileInput && !data.files) {
+                    var that = this,
+                        dfd = $.Deferred(),
+                        promise = dfd.promise(),
+                        jqXHR,
+                        aborted;
+                    promise.abort = function () {
+                        aborted = true;
+                        if (jqXHR) {
+                            return jqXHR.abort();
+                        }
+                        dfd.reject(null, 'abort', 'abort');
+                        return promise;
+                    };
+                    this._getFileInputFiles(data.fileInput).always(
+                        function (files) {
+                            if (aborted) {
+                                return;
+                            }
+                            if (!files.length) {
+                                dfd.reject();
+                                return;
+                            }
+                            data.files = files;
+                            jqXHR = that._onSend(null, data).then(
+                                function (result, textStatus, jqXHR) {
+                                    dfd.resolve(result, textStatus, jqXHR);
+                                },
+                                function (jqXHR, textStatus, errorThrown) {
+                                    dfd.reject(jqXHR, textStatus, errorThrown);
+                                }
+                            );
+                        }
+                    );
+                    return this._enhancePromise(promise);
+                }
+                data.files = $.makeArray(data.files);
                 if (data.files.length) {
                     return this._onSend(null, data);
                 }
@@ -863,4 +1330,4 @@
 
     });
 
-}));
+}));
\ No newline at end of file
diff --git a/apps/files/js/jquery.iframe-transport.js b/apps/files/js/jquery.iframe-transport.js
index d85c0c1129..5c9df77976 100644
--- a/apps/files/js/jquery.iframe-transport.js
+++ b/apps/files/js/jquery.iframe-transport.js
@@ -1,5 +1,5 @@
 /*
- * jQuery Iframe Transport Plugin 1.3
+ * jQuery Iframe Transport Plugin 1.7
  * https://github.com/blueimp/jQuery-File-Upload
  *
  * Copyright 2011, Sebastian Tschan
@@ -30,27 +30,45 @@
     // The iframe transport accepts three additional options:
     // options.fileInput: a jQuery collection of file input fields
     // options.paramName: the parameter name for the file form data,
-    //  overrides the name property of the file input field(s)
+    //  overrides the name property of the file input field(s),
+    //  can be a string or an array of strings.
     // options.formData: an array of objects with name and value properties,
     //  equivalent to the return data of .serializeArray(), e.g.:
     //  [{name: 'a', value: 1}, {name: 'b', value: 2}]
     $.ajaxTransport('iframe', function (options) {
-        if (options.async && (options.type === 'POST' || options.type === 'GET')) {
+        if (options.async) {
             var form,
-                iframe;
+                iframe,
+                addParamChar;
             return {
                 send: function (_, completeCallback) {
                     form = $('<form style="display:none;"></form>');
+                    form.attr('accept-charset', options.formAcceptCharset);
+                    addParamChar = /\?/.test(options.url) ? '&' : '?';
+                    // XDomainRequest only supports GET and POST:
+                    if (options.type === 'DELETE') {
+                        options.url = options.url + addParamChar + '_method=DELETE';
+                        options.type = 'POST';
+                    } else if (options.type === 'PUT') {
+                        options.url = options.url + addParamChar + '_method=PUT';
+                        options.type = 'POST';
+                    } else if (options.type === 'PATCH') {
+                        options.url = options.url + addParamChar + '_method=PATCH';
+                        options.type = 'POST';
+                    }
                     // javascript:false as initial iframe src
                     // prevents warning popups on HTTPS in IE6.
                     // IE versions below IE8 cannot set the name property of
                     // elements that have already been added to the DOM,
                     // so we set the name along with the iframe HTML markup:
+                    counter += 1;
                     iframe = $(
                         '<iframe src="javascript:false;" name="iframe-transport-' +
-                            (counter += 1) + '"></iframe>'
+                            counter + '"></iframe>'
                     ).bind('load', function () {
-                        var fileInputClones;
+                        var fileInputClones,
+                            paramNames = $.isArray(options.paramName) ?
+                                    options.paramName : [options.paramName];
                         iframe
                             .unbind('load')
                             .bind('load', function () {
@@ -79,7 +97,12 @@
                                 // (happens on form submits to iframe targets):
                                 $('<iframe src="javascript:false;"></iframe>')
                                     .appendTo(form);
-                                form.remove();
+                                window.setTimeout(function () {
+                                    // Removing the form in a setTimeout call
+                                    // allows Chrome's developer tools to display
+                                    // the response result
+                                    form.remove();
+                                }, 0);
                             });
                         form
                             .prop('target', iframe.prop('name'))
@@ -101,8 +124,11 @@
                                 return fileInputClones[index];
                             });
                             if (options.paramName) {
-                                options.fileInput.each(function () {
-                                    $(this).prop('name', options.paramName);
+                                options.fileInput.each(function (index) {
+                                    $(this).prop(
+                                        'name',
+                                        paramNames[index] || options.paramName
+                                    );
                                 });
                             }
                             // Appending the file input fields to the hidden form
@@ -144,22 +170,36 @@
     });
 
     // The iframe transport returns the iframe content document as response.
-    // The following adds converters from iframe to text, json, html, and script:
+    // The following adds converters from iframe to text, json, html, xml
+    // and script.
+    // Please note that the Content-Type for JSON responses has to be text/plain
+    // or text/html, if the browser doesn't include application/json in the
+    // Accept header, else IE will show a download dialog.
+    // The Content-Type for XML responses on the other hand has to be always
+    // application/xml or text/xml, so IE properly parses the XML response.
+    // See also
+    // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation
     $.ajaxSetup({
         converters: {
             'iframe text': function (iframe) {
-                return $(iframe[0].body).text();
+                return iframe && $(iframe[0].body).text();
             },
             'iframe json': function (iframe) {
-                return $.parseJSON($(iframe[0].body).text());
+                return iframe && $.parseJSON($(iframe[0].body).text());
             },
             'iframe html': function (iframe) {
-                return $(iframe[0].body).html();
+                return iframe && $(iframe[0].body).html();
+            },
+            'iframe xml': function (iframe) {
+                var xmlDoc = iframe && iframe[0];
+                return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc :
+                        $.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) ||
+                            $(xmlDoc.body).html());
             },
             'iframe script': function (iframe) {
-                return $.globalEval($(iframe[0].body).text());
+                return iframe && $.globalEval($(iframe[0].body).text());
             }
         }
     });
 
-}));
+}));
\ No newline at end of file
diff --git a/apps/files/templates/part.list.php b/apps/files/templates/part.list.php
index 0c7d693669..39f5ac471e 100644
--- a/apps/files/templates/part.list.php
+++ b/apps/files/templates/part.list.php
@@ -1,7 +1,8 @@
 <input type="hidden" id="disableSharing" data-status="<?php p($_['disableSharing']); ?>">
 <?php $totalfiles = 0;
 $totaldirs = 0;
-$totalsize = 0; ?>
+$totalsize = 0;
+$pc = 0; ?>
 <?php foreach($_['files'] as $file):
 	$totalsize += $file['size'];
 	if ($file['type'] === 'dir') {
@@ -17,7 +18,9 @@ $totalsize = 0; ?>
 	$relative_date_color = round((time()-$file['mtime'])/60/60/24*14);
 	if($relative_date_color>160) $relative_date_color = 160;
 	$name = \OCP\Util::encodePath($file['name']);
-	$directory = \OCP\Util::encodePath($file['directory']); ?>
+	$directory = \OCP\Util::encodePath($file['directory']);
+	?>
+	<!--<tr style="position:absolute; width:100%"><td colspan="3" style="display:block;"><div style="width: <?php echo $pc++; ?>%; height: 31px;background-color: green;"/></td></tr>-->
 	<tr data-id="<?php p($file['fileid']); ?>"
 		data-file="<?php p($name);?>"
 		data-type="<?php ($file['type'] == 'dir')?p('dir'):p('file')?>"
@@ -52,12 +55,14 @@ $totalsize = 0; ?>
 		</td>
 		<td class="filesize"
 			style="color:rgb(<?php p($simple_size_color.','.$simple_size_color.','.$simple_size_color) ?>)">
+			<span style="position:relative;">
 				<?php print_unescaped(OCP\human_file_size($file['size'])); ?>
+			</span>
 		</td>
 		<td class="date">
 			<span class="modified"
 				  title="<?php p($file['date']); ?>"
-				  style="color:rgb(<?php p($relative_date_color.','
+				  style="position:relative; color:rgb(<?php p($relative_date_color.','
 												.$relative_date_color.','
 												.$relative_date_color) ?>)">
 				<?php p($relative_modified_date); ?>
-- 
GitLab


From 7c9d9992432839f2265b8f6b0f43ed15bfca9ff1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Thu, 22 Aug 2013 14:29:00 +0200
Subject: [PATCH 025/248] reduced complexity, added listing conflicts to dialog

---
 apps/files/ajax/upload.php   |   1 +
 apps/files/css/files.css     |  53 ++++--
 apps/files/js/file-upload.js | 226 ++++++++++++++++++--------
 core/js/oc-dialogs.js        | 305 ++++++++++++++++++++++-------------
 4 files changed, 390 insertions(+), 195 deletions(-)

diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index 619b5f6a04..218482cb41 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -131,6 +131,7 @@ if (strpos($dir, '..') === false) {
 
 				$result[] = array('status' => 'success',
 					'mime' => $meta['mimetype'],
+					'mtime' => $meta['mtime'],
 					'size' => $meta['size'],
 					'id' => $meta['fileid'],
 					'name' => basename($target),
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index 0ff25a24d7..dcd6aeadf8 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -193,28 +193,54 @@ table.dragshadow td.size {
 .oc-dialog .fileexists table {
 	width: 100%;
 }
-.oc-dialog .fileexists .original .icon {
+.oc-dialog .fileexists th {
+	padding-left: 0;
+	padding-right: 0;
+}
+.oc-dialog .fileexists th input[type='checkbox'] {
+	margin-right: 3px;
+}
+.oc-dialog .fileexists th:first-child {
+	width: 235px;
+}
+.oc-dialog .fileexists th label {
+	font-weight: normal;
+	color:black;
+}
+.oc-dialog .fileexists th .count {
+	margin-left: 3px;
+}
+.oc-dialog .fileexists .conflict {
+	width: 100%;
+	height: 85px;
+}
+.oc-dialog .fileexists .conflict .filename {
+	color:#777;
+	word-break: break-all;
+}
+.oc-dialog .fileexists .icon {
 	width: 64px;
 	height: 64px;
-	margin: 5px 5px 5px 0px;
+	margin: 0px 5px 5px 5px;
 	background-repeat: no-repeat;
 	background-size: 64px 64px;
 	float: left;
 }
 
 .oc-dialog .fileexists .replacement {
-	margin-top: 20px;
-	margin-bottom: 20px;
+	float: left;
+	width: 235px;
 }
-
-.oc-dialog .fileexists .replacement .icon {
-	width: 64px;
-	height: 64px;
-	margin: 5px 5px 5px 0px;
-	background-repeat: no-repeat;
-	background-size: 64px 64px;
+.oc-dialog .fileexists .original {
+	float: left;
+	width: 235px;
+}
+.oc-dialog .fileexists .conflict-wrapper {
+	overflow-y:scroll;
+	max-height: 225px;
+}
+.oc-dialog .fileexists .conflict-wrapper input[type='checkbox'] {
 	float: left;
-	clear: both;
 }
 
 .oc-dialog .fileexists .toggle {
@@ -234,9 +260,6 @@ table.dragshadow td.size {
 	vertical-align: bottom;
 }
 
-.oc-dialog .fileexists h3 {
-	font-weight: bold;
-}
 
 
 .oc-dialog .oc-dialog-buttonrow {
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index c620942170..ec8c97ff45 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -1,4 +1,43 @@
 /**
+ * 
+ * and yet another idea how to handle file uploads:
+ * let the jquery fileupload thing handle as much as possible
+ * 
+ * use singlefileupload
+ * on first add of every selection
+ * - check all files of originalFiles array with files in dir
+ * - on conflict show dialog
+ *   - skip all -> remember as default action
+ *   - replace all -> remember as default action
+ *   - choose -> show choose dialog
+ *     - mark files to keep
+ *       - when only existing -> remember as single skip action
+ *       - when only new -> remember as single replace action
+ *       - when both -> remember as single autorename action
+ * - start uploading selection
+ * 
+ * on send
+ * - if single action or default action
+ *   - when skip -> abort upload
+ * ..- when replace -> add replace=true parameter
+ * ..- when rename -> add newName=filename parameter
+ * ..- when autorename -> add autorename=true parameter
+ * 
+ * on fail
+ * - if server sent existserror
+ *    - show dialog
+ *      - on skip single -> abort single upload
+ *      - on skip always -> remember as default action
+ *      - on replace single -> replace single upload
+ *      - on replace always -> remember as default action
+ *      - on rename single -> rename single upload, propose autorename - when changed disable remember always checkbox
+ *      - on rename always -> remember autorename as default action
+ *    - resubmit data
+ * 
+ * on uplad done
+ * - if last upload -> unset default action
+ * 
+ * -------------------------------------------------------------
  * 
  * use put t ocacnel upload before it starts? use chunked uploads?
  * 
@@ -202,11 +241,11 @@ OC.Upload = {
 		data.submit();
 	},
 	logStatus:function(caption, e, data) {
-		console.log(caption+' ' +OC.Upload.loadedBytes()+' / '+OC.Upload.totalBytes());
-		if (data) {
-			console.log(data);
-		}
-		console.log(e);
+		console.log(caption);
+		console.log(data);
+	},
+	checkExistingFiles: function (selection, callbacks){
+		callbacks.onNoConflicts(selection);
 	}
 };
 
@@ -214,44 +253,110 @@ $(document).ready(function() {
 
 	var file_upload_param = {
 		dropZone: $('#content'), // restrict dropZone to content div
+		autoUpload: false,
+		sequentialUploads: true,
 		
 		//singleFileUploads is on by default, so the data.files array will always have length 1
+		/**
+		 * on first add of every selection
+		 * - check all files of originalFiles array with files in dir
+		 * - on conflict show dialog
+		 *   - skip all -> remember as single skip action for all conflicting files
+		 *   - replace all -> remember as single replace action for all conflicting files
+		 *   - choose -> show choose dialog
+		 *     - mark files to keep
+		 *       - when only existing -> remember as single skip action
+		 *       - when only new -> remember as single replace action
+		 *       - when both -> remember as single autorename action
+		 * - start uploading selection
+		 * @param {type} e
+		 * @param {type} data
+		 * @returns {Boolean}
+		 */
 		add: function(e, data) {
 			OC.Upload.logStatus('add', e, data);
 			var that = $(this);
 			
-			// lookup selection for dir
-			var selection = OC.Upload.getSelection(data.originalFiles);
+			// we need to collect all data upload objects before starting the upload so we can check their existence
+			// and set individual conflict actions. unfortunately there is only one variable that we can use to identify
+			// the selection a data upload is part of, so we have to collect them in data.originalFiles
+			// turning singleFileUploads off is not an option because we want to gracefully handle server errors like
+			// already exists
 			
-			if (!selection.dir) {
-				selection.dir = $('#dir').val();
+			// create a container where we can store the data objects
+			if ( ! data.originalFiles.selection ) {
+				// initialize selection and remember number of files to upload
+				data.originalFiles.selection = {
+					uploads: [],
+					filesToUpload: data.originalFiles.length,
+					totalBytes: 0
+				};
 			}
+			var selection = data.originalFiles.selection;
 			
-			if ( ! selection.checked ) {
+			// add uploads
+			if ( selection.uploads.length < selection.filesToUpload ){
+				// remember upload
+				selection.uploads.push(data);
+			}
+			
+			//examine file
+			var file = data.files[0];
+			
+			if (file.type === '' && file.size === 4096) {
+				data.textStatus = 'dirorzero';
+				data.errorThrown = t('files', 'Unable to upload {filename} as it is a directory or has 0 bytes',
+					{filename: file.name}
+				);
+			}
+			
+			// add size
+			selection.totalBytes += file.size;
+			
+			//check max upload size
+			if (selection.totalBytes > $('#max_upload').val()) {
+				data.textStatus = 'notenoughspace';
+				data.errorThrown = t('files', 'Not enough space available');
+			}
+			
+			// end upload for whole selection on error
+			if (data.errorThrown) {
+				// trigger fileupload fail
+				var fu = that.data('blueimp-fileupload') || that.data('fileupload');
+				fu._trigger('fail', e, data);
+				return false; //don't upload anything
+			}
+
+			// check existing files whan all is collected
+			if ( selection.uploads.length >= selection.filesToUpload ) {
 				
-				selection.totalBytes = 0;
-				$.each(data.originalFiles, function(i, file) {
-					selection.totalBytes += file.size;
+				//remove our selection hack:
+				delete data.originalFiles.selection;
 
-					if (file.type === '' && file.size === 4096) {
-						data.textStatus = 'dirorzero';
-						data.errorThrown = t('files', 'Unable to upload {filename} as it is a directory or has 0 bytes',
-							{filename: file.name}
-						);
-						return false;
+				var callbacks = {
+					
+					onNoConflicts: function (selection) {
+						$.each(selection.uploads, function(i, upload) {
+							upload.submit();
+						});
+					},
+					onSkipConflicts: function (selection) {
+					//TODO mark conflicting files as toskip
+					},
+					onReplaceConflicts: function (selection) {
+						//TODO mark conflicting files as toreplace
+					},
+					onChooseConflicts: function (selection) {
+						//TODO mark conflicting files as chosen
+					},
+					onCancel: function (selection) {
+						$.each(selection.uploads, function(i, upload) {
+							upload.abort();
+						});
 					}
-				});
+				};
 
-				if (selection.totalBytes > $('#max_upload').val()) {
-					data.textStatus = 'notenoughspace';
-					data.errorThrown = t('files', 'Not enough space available');
-				}
-				if (data.errorThrown) {
-					//don't upload anything
-					var fu = that.data('blueimp-fileupload') || that.data('fileupload');
-					fu._trigger('fail', e, data);
-					return false;
-				}
+				OC.Upload.checkExistingFiles(selection, callbacks);
 				
 				//TODO refactor away:
 				//show cancel button
@@ -259,15 +364,8 @@ $(document).ready(function() {
 					$('#uploadprogresswrapper input.stop').show();
 				}
 			}
+		
 			
-			//all subsequent add calls for this selection can be ignored
-			//allow navigating to the selection from a context
-			//context.selection = data.originalFiles.selection;
-			
-			//allow navigating to contexts / files of a selection
-			selection.files[data.files[0].name] = data;
-			
-			OC.Upload.queueUpload(data);
 			
 			//TODO check filename already exists
 			/*
@@ -283,7 +381,7 @@ $(document).ready(function() {
 			}
 			*/
 
-			return true;
+			return true; // continue adding files
 		},
 		/**
 		 * called after the first add, does NOT have the data param
@@ -314,8 +412,8 @@ $(document).ready(function() {
 					$('#notification').fadeOut();
 				}, 5000);
 			}
-			var selection = OC.Upload.getSelection(data.originalFiles);
-			OC.Upload.deleteSelectionUpload(selection, data.files[0].name);
+			//var selection = OC.Upload.getSelection(data.originalFiles);
+			//OC.Upload.deleteSelectionUpload(selection, data.files[0].name);
 			
 			//if user pressed cancel hide upload progress bar and cancel button
 			if (data.errorThrown === 'abort') {
@@ -339,8 +437,8 @@ $(document).ready(function() {
 			if($('html.lte9').length > 0) {
 				return;
 			}
-			//var progress = (data.loaded/data.total)*100;
-			var progress = OC.Upload.progressBytes();
+			var progress = (data.loaded/data.total)*100;
+			//var progress = OC.Upload.progressBytes();
 			$('#uploadprogressbar').progressbar('value', progress);
 		},
 		/**
@@ -359,15 +457,15 @@ $(document).ready(function() {
 				response = data.result[0].body.innerText;
 			}
 			var result=$.parseJSON(response);
-			var selection = OC.Upload.getSelection(data.originalFiles);
+			//var selection = OC.Upload.getSelection(data.originalFiles);
 
 			if(typeof result[0] !== 'undefined'
 				&& result[0].status === 'success'
 			) {
-				if (selection) {
-					selection.loadedBytes+=data.loaded;
-				}
-				OC.Upload.nextUpload();
+				//if (selection) {
+				//	selection.loadedBytes+=data.loaded;
+				//}
+				//OC.Upload.nextUpload();
 			} else {
 				if (result[0].status === 'existserror') {
 					//show "file already exists" dialog
@@ -385,10 +483,10 @@ $(document).ready(function() {
 			}
 			
 			//if user pressed cancel hide upload chrome
-			if (! OC.Upload.isProcessing()) {
-				$('#uploadprogresswrapper input.stop').fadeOut();
-				$('#uploadprogressbar').fadeOut();
-			}
+			//if (! OC.Upload.isProcessing()) {
+			//	$('#uploadprogresswrapper input.stop').fadeOut();
+			//	$('#uploadprogressbar').fadeOut();
+			//}
 
 		},
 		/**
@@ -398,27 +496,27 @@ $(document).ready(function() {
 		 */
 		stop: function(e, data) {
 			OC.Upload.logStatus('stop', e, data);
-			if(OC.Upload.progressBytes()>=100) { //only hide controls when all selections have ended uploading
+			//if(OC.Upload.progressBytes()>=100) { //only hide controls when all selections have ended uploading
 				
-				OC.Upload.cancelUploads(); //cleanup
+				//OC.Upload.cancelUploads(); //cleanup
 
-				if(data.dataType !== 'iframe') {
-					$('#uploadprogresswrapper input.stop').hide();
-				}
+			//	if(data.dataType !== 'iframe') {
+			//		$('#uploadprogresswrapper input.stop').hide();
+			//	}
 
 				//IE < 10 does not fire the necessary events for the progress bar.
 				if($('html.lte9').length > 0) {
 					return;
 				}
 
-				$('#uploadprogressbar').progressbar('value', 100);
-				$('#uploadprogressbar').fadeOut();
-			}
+			//	$('#uploadprogressbar').progressbar('value', 100);
+			//	$('#uploadprogressbar').fadeOut();
+			//}
 			//if user pressed cancel hide upload chrome
-			if (! OC.Upload.isProcessing()) {
-				$('#uploadprogresswrapper input.stop').fadeOut();
-				$('#uploadprogressbar').fadeOut();
-			}
+			//if (! OC.Upload.isProcessing()) {
+			//	$('#uploadprogresswrapper input.stop').fadeOut();
+			//	$('#uploadprogressbar').fadeOut();
+			//}
 		}
 	};
 	
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index ea03ef2145..a101cce9d1 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -200,148 +200,221 @@ var OCdialogs = {
 			alert(t('core', 'Error loading message template'));
 		});
 	},
+	_fileexistsshown: false,
 	/**
 	 * Displays file exists dialog
-	 * @param {object} original a file with name, size and mtime
-	 * @param {object} replacement a file with name, size and mtime
-	 * @param {object} controller a controller with onCancel, onSkip, onReplace and onRename methods
+	 * @param {object} data upload object
+	 * @param {object} original file with name, size and mtime
+	 * @param {object} replacement file with name, size and mtime
+	 * @param {object} controller with onCancel, onSkip, onReplace and onRename methods
 	*/
 	fileexists:function(data, original, replacement, controller) {
+		var self = this;
 		var selection = controller.getSelection(data.originalFiles);
 		if (selection.defaultAction) {
 			controller[selection.defaultAction](data);
 		} else {
-			$.when(this._getFileExistsTemplate()).then(function($tmpl) {
-				var dialog_name = 'oc-dialog-fileexists-' + OCdialogs.dialogs_counter + '-content';
-				var dialog_id = '#' + dialog_name;
-				var title = t('files','Replace »{filename}«?',{filename: original.name});
-				var original_size= t('files','Size: {size}',{size: original.size});
-				var original_mtime = t('files','Last changed: {mtime}',{mtime: original.mtime});
-				var replacement_size= t('files','Size: {size}',{size: replacement.size});
-				var replacement_mtime = t('files','Last changed: {mtime}',{mtime: replacement.mtime});
-				var $dlg = $tmpl.octemplate({
-					dialog_name: dialog_name,
-					title: title,
-					type: 'fileexists',
-
-					why: t('files','Another file with the same name already exists in "{dir}".',{dir:'somedir'}),
-					what: t('files','Replacing it will overwrite it\'s contents.'),
-					original_heading: t('files','Original file'),
-					original_size: original_size,
-					original_mtime: original_mtime,
-
-					replacement_heading: t('files','Replace with'),
-					replacement_size: replacement_size,
-					replacement_mtime: replacement_mtime,
-
-					new_name_label: t('files','Choose a new name for the target.'),
-					all_files_label: t('files','Use this action for all files.')
-				});
-				$('body').append($dlg);
-
+			var dialog_name = 'oc-dialog-fileexists-content';
+			var dialog_id = '#' + dialog_name;
+			if (this._fileexistsshown) {
+				// add row
+				var conflict = $(dialog_id+ ' .conflict').last().clone();
+				conflict.find('.name').text(original.name);
+				conflict.find('.original .size').text(humanFileSize(original.size));
+				conflict.find('.original .mtime').text(formatDate(original.mtime*1000));
+				conflict.find('.replacement .size').text(humanFileSize(replacement.size));
+				conflict.find('.replacement .mtime').text(formatDate(replacement.lastModifiedDate));
 				getMimeIcon(original.type,function(path){
-					$(dialog_id + ' .original .icon').css('background-image','url('+path+')');
+					conflict.find('.original .icon').css('background-image','url('+path+')');
 				});
 				getMimeIcon(replacement.type,function(path){
-					$(dialog_id + ' .replacement .icon').css('background-image','url('+path+')');
+					conflict.find('.replacement .icon').css('background-image','url('+path+')');
 				});
-				$(dialog_id + ' #newname').val(original.name);
+				$(dialog_id+' .conflict').last().after(conflict);
+				$(dialog_id).parent().children('.oc-dialog-title').text(t('files','{count} file conflicts',{count:$(dialog_id+ ' .conflict').length}));
+				
+				//set more recent mtime bold
+				if (replacement.lastModifiedDate.getTime() > original.mtime*1000) {
+					conflict.find('.replacement .mtime').css('font-weight', 'bold');
+				} else if (replacement.lastModifiedDate.getTime() < original.mtime*1000) {
+					conflict.find('.original .mtime').css('font-weight', 'bold');
+				} else {
+					//TODO add to same mtime colletion?
+				}
+				
+				// set bigger size bold
+				if (replacement.size > original.size) {
+					conflict.find('.replacement .size').css('font-weight','bold');
+				} else if (replacement.size < original.size) {
+					conflict.find('.original .size').css('font-weight','bold');
+				} else {
+					//TODO add to same size colletion?
+				}
+				
+				//add checkbox toggling actions
+				conflict.find('.replacement,.original').on('click', function(){
+					var checkbox = $(this).find('input[type="checkbox"]');
+					checkbox.prop('checkbox', !checkbox.prop('checkbox'));
+				}).find('input[type="checkbox"]').prop('checkbox',false);
+				
+				//TODO show skip action for files with same size and mtime
+				
+				$(window).trigger('resize');
+			} else {
+				//create dialog
+				this._fileexistsshown = true;
+				$.when(this._getFileExistsTemplate()).then(function($tmpl) {
+					var title = t('files','One file conflict');
+					var original_size = humanFileSize(original.size);
+					var original_mtime = formatDate(original.mtime*1000);
+					var replacement_size= humanFileSize(replacement.size);
+					var replacement_mtime = formatDate(replacement.lastModifiedDate);
+					var $dlg = $tmpl.octemplate({
+						dialog_name: dialog_name,
+						title: title,
+						type: 'fileexists',
 
+						why: t('files','Which files do you want to keep?'),
+						what: t('files','If you select both versions, the copied file will have a number added to its name.'),
+						filename: original.name,
+						
+						original_size: original_size,
+						original_mtime: original_mtime,
 
-				$(dialog_id + ' #newname').on('keyup', function(e){
-					if ($(dialog_id + ' #newname').val() === original.name) {
-						$(dialog_id + ' + div .rename').removeClass('primary').hide();
-						$(dialog_id + ' + div .replace').addClass('primary').show();
-					} else {
-						$(dialog_id + ' + div .rename').addClass('primary').show();
-						$(dialog_id + ' + div .replace').removeClass('primary').hide();
-					}
-				});
+						replacement_size: replacement_size,
+						replacement_mtime: replacement_mtime
+					});
+					$('body').append($dlg);
 
-				buttonlist = [{
-						text: t('core', 'Cancel'),
-						classes: 'cancel',
-						click: function(){
-							if ( typeof controller.onCancel !== 'undefined') {
-								controller.onCancel(data);
-							}
-							$(dialog_id).ocdialog('close');
-						}
-					},
-					{
-						text: t('core', 'Skip'),
-						classes: 'skip',
-						click: function(){
-							if ( typeof controller.onSkip !== 'undefined') {
-								if($(dialog_id + ' #allfiles').prop('checked')){
-									selection.defaultAction = 'onSkip';
-									/*selection.defaultAction = function(){
-										controller.onSkip(data);
-									};*/
-								}
-								controller.onSkip(data);
-							}
-							// trigger fileupload done with status skip
-							//data.result[0].status = 'skip';
-							//fileupload._trigger('done', data.e, data);
-							$(dialog_id).ocdialog('close');
+					getMimeIcon(original.type,function(path){
+						$(dialog_id + ' .original .icon').css('background-image','url('+path+')');
+					});
+					getMimeIcon(replacement.type,function(path){
+						$(dialog_id + ' .replacement .icon').css('background-image','url('+path+')');
+					});
+					$(dialog_id + ' #newname').val(original.name);
+
+					$(dialog_id + ' #newname').on('keyup', function(e){
+						if ($(dialog_id + ' #newname').val() === original.name) {
+							$(dialog_id + ' + div .rename').removeClass('primary').hide();
+							$(dialog_id + ' + div .replace').addClass('primary').show();
+						} else {
+							$(dialog_id + ' + div .rename').addClass('primary').show();
+							$(dialog_id + ' + div .replace').removeClass('primary').hide();
 						}
-					},
-					{
-						text: t('core', 'Replace'),
-						classes: 'replace',
-						click: function(){
-							if ( typeof controller.onReplace !== 'undefined') {
-								if($(dialog_id + ' #allfiles').prop('checked')){
-									selection.defaultAction = 'onReplace';
-									/*selection.defaultAction = function(){
-										controller.onReplace(data);
-									};*/
+					});
+
+					buttonlist = [{
+							text: t('core', 'Cancel'),
+							classes: 'cancel',
+							click: function(){
+								self._fileexistsshown = false;
+								if ( typeof controller.onCancel !== 'undefined') {
+									controller.onCancel(data);
 								}
-								controller.onReplace(data);
+								$(dialog_id).ocdialog('close');
 							}
-							$(dialog_id).ocdialog('close');
 						},
-						defaultButton: true
-					},
-					{
-						text: t('core', 'Rename'),
-						classes: 'rename',
-						click: function(){
-							if ( typeof controller.onRename !== 'undefined') {
-								//TODO use autorename when repeat is checked
-								controller.onRename(data, $(dialog_id + ' #newname').val());
+						{
+							text: t('core', 'Continue'),
+							classes: 'continue',
+							click: function(){
+								self._fileexistsshown = false;
+								if ( typeof controller.onRename !== 'undefined') {
+									//TODO use autorename when repeat is checked
+									controller.onRename(data, $(dialog_id + ' #newname').val());
+								}
+								$(dialog_id).ocdialog('close');
 							}
-							$(dialog_id).ocdialog('close');
+						}];
+
+					$(dialog_id).ocdialog({
+						width: 500,
+						closeOnEscape: true,
+						modal: true,
+						buttons: buttonlist,
+						closeButton: null
+					});
+					
+					$(dialog_id + ' + div .rename').hide();
+					$(dialog_id + ' #newname').hide();
+
+					$(dialog_id + ' #newnamecb').on('change', function(){
+						if ($(dialog_id + ' #newnamecb').prop('checked')) {
+							$(dialog_id + ' #newname').fadeIn();
+						} else {
+							$(dialog_id + ' #newname').fadeOut();
+							$(dialog_id + ' #newname').val(original.name);
 						}
-					}];
+					});
+					$(dialog_id).css('height','auto');
 
-				$(dialog_id).ocdialog({
-					width: 500,
-					closeOnEscape: true,
-					modal: true,
-					buttons: buttonlist,
-					closeButton: null
-				});
-				OCdialogs.dialogs_counter++;
+					var conflict = $(dialog_id + ' .conflict').last();
+					//set more recent mtime bold
+					if (replacement.lastModifiedDate.getTime() > original.mtime*1000) {
+						conflict.find('.replacement .mtime').css('font-weight','bold');
+					} else if (replacement.lastModifiedDate.getTime() < original.mtime*1000) {
+						conflict.find('.original .mtime').css('font-weight','bold');
+					} else {
+						//TODO add to same mtime colletion?
+					}
 
-				$(dialog_id + ' + div .rename').hide();
-				$(dialog_id + ' #newname').hide();
-				
-				$(dialog_id + ' #newnamecb').on('change', function(){
-					if ($(dialog_id + ' #newnamecb').prop('checked')) {
-						$(dialog_id + ' #newname').fadeIn();
+					// set bigger size bold
+					if (replacement.size > original.size) {
+						conflict.find('.replacement .size').css('font-weight','bold');
+					} else if (replacement.size < original.size) {
+						conflict.find('.original .size').css('font-weight','bold');
 					} else {
-						$(dialog_id + ' #newname').fadeOut();
-						$(dialog_id + ' #newname').val(original.name);
+						//TODO add to same size colletion?
 					}
-				});
-				
 				
-			})
-			.fail(function() {
-				alert(t('core', 'Error loading file exists template'));
-			});
+					//add checkbox toggling actions
+					//add checkbox toggling actions
+					$(dialog_id).find('.allnewfiles').on('click', function(){
+						var checkboxes = $(dialog_id).find('.replacement input[type="checkbox"]');
+						checkboxes.prop('checked', $(this).prop('checked'));
+					});
+					$(dialog_id).find('.allexistingfiles').on('click', function(){
+						var checkboxes = $(dialog_id).find('.original input[type="checkbox"]');
+						checkboxes.prop('checked', $(this).prop('checked'));
+					});
+					conflict.find('.replacement,.original').on('click', function(){
+						var checkbox = $(this).find('input[type="checkbox"]');
+						checkbox.prop('checked', !checkbox.prop('checked'));
+					});
+					
+					//update counters
+					$(dialog_id).on('click', '.replacement,.allnewfiles', function(){
+						var count = $(dialog_id).find('.replacement input[type="checkbox"]:checked').length;
+						if (count === $(dialog_id+ ' .conflict').length) {
+							$(dialog_id).find('.allnewfiles').prop('checked', true);
+							$(dialog_id).find('.allnewfiles + .count').text(t('files','(all selected)'));
+						} else if (count > 0) {
+							$(dialog_id).find('.allnewfiles').prop('checked', false);
+							$(dialog_id).find('.allnewfiles + .count').text(t('files','({count} selected)',{count:count}));
+						} else {
+							$(dialog_id).find('.allnewfiles').prop('checked', false);
+							$(dialog_id).find('.allnewfiles + .count').text('');
+						}
+					});
+					$(dialog_id).on('click', '.original,.allexistingfiles', function(){
+						var count = $(dialog_id).find('.original input[type="checkbox"]:checked').length;
+						if (count === $(dialog_id+ ' .conflict').length) {
+							$(dialog_id).find('.allexistingfiles').prop('checked', true);
+							$(dialog_id).find('.allexistingfiles + .count').text(t('files','(all selected)'));
+						} else if (count > 0) {
+							$(dialog_id).find('.allexistingfiles').prop('checked', false);
+							$(dialog_id).find('.allexistingfiles + .count').text(t('files','({count} selected)',{count:count}));
+						} else {
+							$(dialog_id).find('.allexistingfiles').prop('checked', false);
+							$(dialog_id).find('.allexistingfiles + .count').text('');
+						}
+					});
+				})
+				.fail(function() {
+					alert(t('core', 'Error loading file exists template'));
+				});
+			}
 		}
 	},
 	_getFilePickerTemplate: function() {
-- 
GitLab


From 21fd352c1aaa5df3799d52e4a0315e5750d28ebe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Mon, 26 Aug 2013 23:48:18 +0200
Subject: [PATCH 026/248] as a quick example the public contacts API has been
 ported over as a service hosted within the server container

---
 lib/contactsmanager.php               | 145 +++++++++++++++++++++++++
 lib/public/contacts.php               |  55 +++-------
 lib/public/core/contacts/imanager.php | 150 ++++++++++++++++++++++++++
 lib/public/core/iservercontainer.php  |   4 +
 lib/server.php                        |  15 ++-
 5 files changed, 329 insertions(+), 40 deletions(-)
 create mode 100644 lib/contactsmanager.php
 create mode 100644 lib/public/core/contacts/imanager.php

diff --git a/lib/contactsmanager.php b/lib/contactsmanager.php
new file mode 100644
index 0000000000..59c413ec03
--- /dev/null
+++ b/lib/contactsmanager.php
@@ -0,0 +1,145 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Thomas Müller
+ * @copyright 2013 Thomas Müller thomas.mueller@tmit.eu
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC {
+
+	class ContactsManager implements \OCP\Core\Contacts\IManager {
+
+		/**
+		 * This function is used to search and find contacts within the users address books.
+		 * In case $pattern is empty all contacts will be returned.
+		 *
+		 * @param string $pattern which should match within the $searchProperties
+		 * @param array $searchProperties defines the properties within the query pattern should match
+		 * @param array $options - for future use. One should always have options!
+		 * @return array of contacts which are arrays of key-value-pairs
+		 */
+		public function search($pattern, $searchProperties = array(), $options = array()) {
+			$result = array();
+			foreach($this->address_books as $address_book) {
+				$r = $address_book->search($pattern, $searchProperties, $options);
+				$result = array_merge($result, $r);
+			}
+
+			return $result;
+		}
+
+		/**
+		 * This function can be used to delete the contact identified by the given id
+		 *
+		 * @param object $id the unique identifier to a contact
+		 * @param $address_book_key
+		 * @return bool successful or not
+		 */
+		public function delete($id, $address_book_key) {
+			if (!array_key_exists($address_book_key, $this->address_books))
+				return null;
+
+			$address_book = $this->address_books[$address_book_key];
+			if ($address_book->getPermissions() & \OCP\PERMISSION_DELETE)
+				return null;
+
+			return $address_book->delete($id);
+		}
+
+		/**
+		 * This function is used to create a new contact if 'id' is not given or not present.
+		 * Otherwise the contact will be updated by replacing the entire data set.
+		 *
+		 * @param array $properties this array if key-value-pairs defines a contact
+		 * @param $address_book_key string to identify the address book in which the contact shall be created or updated
+		 * @return array representing the contact just created or updated
+		 */
+		public function createOrUpdate($properties, $address_book_key) {
+
+			if (!array_key_exists($address_book_key, $this->address_books))
+				return null;
+
+			$address_book = $this->address_books[$address_book_key];
+			if ($address_book->getPermissions() & \OCP\PERMISSION_CREATE)
+				return null;
+
+			return $address_book->createOrUpdate($properties);
+		}
+
+		/**
+		 * Check if contacts are available (e.g. contacts app enabled)
+		 *
+		 * @return bool true if enabled, false if not
+		 */
+		public function isEnabled() {
+			return !empty($this->address_books);
+		}
+
+		/**
+		 * @param \OCP\IAddressBook $address_book
+		 */
+		public function registerAddressBook(\OCP\IAddressBook $address_book) {
+			$this->address_books[$address_book->getKey()] = $address_book;
+		}
+
+		/**
+		 * @param \OCP\IAddressBook $address_book
+		 */
+		public function unregisterAddressBook(\OCP\IAddressBook $address_book) {
+			unset($this->address_books[$address_book->getKey()]);
+		}
+
+		/**
+		 * @return array
+		 */
+		public function getAddressBooks() {
+			$result = array();
+			foreach($this->address_books as $address_book) {
+				$result[$address_book->getKey()] = $address_book->getDisplayName();
+			}
+
+			return $result;
+		}
+
+		/**
+		 * removes all registered address book instances
+		 */
+		public function clear() {
+			$this->address_books = array();
+		}
+
+		/**
+		 * @var \OCP\IAddressBook[] which holds all registered address books
+		 */
+		private $address_books = array();
+
+		/**
+		 * In order to improve lazy loading a closure can be registered which will be called in case
+		 * address books are actually requested
+		 *
+		 * @param string $key
+		 * @param \Closure $callable
+		 */
+		function register($key, \Closure $callable)
+		{
+			//
+			//TODO: implement me
+			//
+		}
+	}
+}
diff --git a/lib/public/contacts.php b/lib/public/contacts.php
index 88d812e735..1b61d7aa4f 100644
--- a/lib/public/contacts.php
+++ b/lib/public/contacts.php
@@ -90,13 +90,8 @@ namespace OCP {
 		 * @return array of contacts which are arrays of key-value-pairs
 		 */
 		public static function search($pattern, $searchProperties = array(), $options = array()) {
-			$result = array();
-			foreach(self::$address_books as $address_book) {
-				$r = $address_book->search($pattern, $searchProperties, $options);
-				$result = array_merge($result, $r);
-			}
-
-			return $result;
+			$cm = \OC::$server->getContactsManager();
+			return $cm->search($pattern, $searchProperties, $options);
 		}
 
 		/**
@@ -107,14 +102,8 @@ namespace OCP {
 		 * @return bool successful or not
 		 */
 		public static function delete($id, $address_book_key) {
-			if (!array_key_exists($address_book_key, self::$address_books))
-				return null;
-
-			$address_book = self::$address_books[$address_book_key];
-			if ($address_book->getPermissions() & \OCP\PERMISSION_DELETE)
-				return null;
-
-			return $address_book->delete($id);
+			$cm = \OC::$server->getContactsManager();
+			return $cm->delete($id, $address_book_key);
 		}
 
 		/**
@@ -126,15 +115,8 @@ namespace OCP {
 		 * @return array representing the contact just created or updated
 		 */
 		public static function createOrUpdate($properties, $address_book_key) {
-
-			if (!array_key_exists($address_book_key, self::$address_books))
-				return null;
-
-			$address_book = self::$address_books[$address_book_key];
-			if ($address_book->getPermissions() & \OCP\PERMISSION_CREATE)
-				return null;
-
-			return $address_book->createOrUpdate($properties);
+			$cm = \OC::$server->getContactsManager();
+			return $cm->search($properties, $address_book_key);
 		}
 
 		/**
@@ -143,45 +125,40 @@ namespace OCP {
 		 * @return bool true if enabled, false if not
 		 */
 		public static function isEnabled() {
-			return !empty(self::$address_books);
+			$cm = \OC::$server->getContactsManager();
+			return $cm->isEnabled();
 		}
 
 		/**
 		 * @param \OCP\IAddressBook $address_book
 		 */
 		public static function registerAddressBook(\OCP\IAddressBook $address_book) {
-			self::$address_books[$address_book->getKey()] = $address_book;
+			$cm = \OC::$server->getContactsManager();
+			return $cm->registerAddressBook($address_book);
 		}
 
 		/**
 		 * @param \OCP\IAddressBook $address_book
 		 */
 		public static function unregisterAddressBook(\OCP\IAddressBook $address_book) {
-			unset(self::$address_books[$address_book->getKey()]);
+			$cm = \OC::$server->getContactsManager();
+			return $cm->unregisterAddressBook($address_book);
 		}
 
 		/**
 		 * @return array
 		 */
 		public static function getAddressBooks() {
-			$result = array();
-			foreach(self::$address_books as $address_book) {
-				$result[$address_book->getKey()] = $address_book->getDisplayName();
-			}
-
-			return $result;
+			$cm = \OC::$server->getContactsManager();
+			return $cm->getAddressBooks();
 		}
 
 		/**
 		 * removes all registered address book instances
 		 */
 		public static function clear() {
-			self::$address_books = array();
+			$cm = \OC::$server->getContactsManager();
+			$cm->clear();
 		}
-
-		/**
-		 * @var \OCP\IAddressBook[] which holds all registered address books
-		 */
-		private static $address_books = array();
 	}
 }
diff --git a/lib/public/core/contacts/imanager.php b/lib/public/core/contacts/imanager.php
new file mode 100644
index 0000000000..4ae9d5766e
--- /dev/null
+++ b/lib/public/core/contacts/imanager.php
@@ -0,0 +1,150 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Thomas Müller
+ * @copyright 2013 Thomas Müller thomas.mueller@tmit.eu
+ *
+ * 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.
+ * Contacts Class
+ *
+ */
+
+// 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\Core\Contacts {
+
+	/**
+	 * This class provides access to the contacts app. Use this class exclusively if you want to access contacts.
+	 *
+	 * Contacts in general will be expressed as an array of key-value-pairs.
+	 * The keys will match the property names defined in https://tools.ietf.org/html/rfc2426#section-1
+	 *
+	 * Proposed workflow for working with contacts:
+	 *  - search for the contacts
+	 *  - manipulate the results array
+	 *  - createOrUpdate will save the given contacts overwriting the existing data
+	 *
+	 * For updating it is mandatory to keep the id.
+	 * Without an id a new contact will be created.
+	 *
+	 */
+	interface IManager {
+
+		/**
+		 * This function is used to search and find contacts within the users address books.
+		 * In case $pattern is empty all contacts will be returned.
+		 *
+		 * Example:
+		 *  Following function shows how to search for contacts for the name and the email address.
+		 *
+		 *		public static function getMatchingRecipient($term) {
+		 *			$cm = \OC:$server->getContactsManager();
+		 *			// The API is not active -> nothing to do
+		 *			if (!$cm->isEnabled()) {
+		 *				return array();
+		 *			}
+		 *
+		 *			$result = $cm->search($term, array('FN', 'EMAIL'));
+		 *			$receivers = array();
+		 *			foreach ($result as $r) {
+		 *				$id = $r['id'];
+		 *				$fn = $r['FN'];
+		 *				$email = $r['EMAIL'];
+		 *				if (!is_array($email)) {
+		 *					$email = array($email);
+		 *				}
+		 *
+		 *				// loop through all email addresses of this contact
+		 *				foreach ($email as $e) {
+		 *				$displayName = $fn . " <$e>";
+		 *				$receivers[] = array(
+		 *					'id'    => $id,
+		 *					'label' => $displayName,
+		 *					'value' => $displayName);
+		 *				}
+		 *			}
+		 *
+		 *			return $receivers;
+		 *		}
+		 *
+		 *
+		 * @param string $pattern which should match within the $searchProperties
+		 * @param array $searchProperties defines the properties within the query pattern should match
+		 * @param array $options - for future use. One should always have options!
+		 * @return array of contacts which are arrays of key-value-pairs
+		 */
+		function search($pattern, $searchProperties = array(), $options = array());
+
+		/**
+		 * This function can be used to delete the contact identified by the given id
+		 *
+		 * @param object $id the unique identifier to a contact
+		 * @param $address_book_key
+		 * @return bool successful or not
+		 */
+		function delete($id, $address_book_key);
+
+		/**
+		 * This function is used to create a new contact if 'id' is not given or not present.
+		 * Otherwise the contact will be updated by replacing the entire data set.
+		 *
+		 * @param array $properties this array if key-value-pairs defines a contact
+		 * @param $address_book_key string to identify the address book in which the contact shall be created or updated
+		 * @return array representing the contact just created or updated
+		 */
+		function createOrUpdate($properties, $address_book_key);
+
+		/**
+		 * Check if contacts are available (e.g. contacts app enabled)
+		 *
+		 * @return bool true if enabled, false if not
+		 */
+		function isEnabled();
+
+		/**
+		 * @param \OCP\IAddressBook $address_book
+		 */
+		function registerAddressBook(\OCP\IAddressBook $address_book);
+
+		/**
+		 * @param \OCP\IAddressBook $address_book
+		 */
+		function unregisterAddressBook(\OCP\IAddressBook $address_book);
+
+		/**
+		 * In order to improve lazy loading a closure can be registered which will be called in case
+		 * address books are actually requested
+		 *
+		 * @param string $key
+		 * @param \Closure $callable
+		 */
+		function register($key, \Closure $callable);
+
+		/**
+		 * @return array
+		 */
+		function getAddressBooks();
+
+		/**
+		 * removes all registered address book instances
+		 */
+		function clear();
+	}
+}
diff --git a/lib/public/core/iservercontainer.php b/lib/public/core/iservercontainer.php
index df744ab6fd..464da19864 100644
--- a/lib/public/core/iservercontainer.php
+++ b/lib/public/core/iservercontainer.php
@@ -11,4 +11,8 @@ namespace OCP\Core;
  */
 interface IServerContainer {
 
+	/**
+	 * @return \OCP\Core\Contacts\IManager
+	 */
+	function getContactsManager();
 }
diff --git a/lib/server.php b/lib/server.php
index f8f25c046d..72c82efe16 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -2,6 +2,7 @@
 
 namespace OC;
 
+use OC\AppFramework\Utility\SimpleContainer;
 use OCP\Core\IServerContainer;
 
 /**
@@ -10,6 +11,18 @@ use OCP\Core\IServerContainer;
  *
  * TODO: hookup all manager classes
  */
-class Server implements IServerContainer {
+class Server extends SimpleContainer implements IServerContainer {
 
+	function __construct() {
+		$this->registerService('ContactsManager', function($c){
+			return new ContactsManager();
+		});
+	}
+
+	/**
+	 * @return \OCP\Core\Contacts\IManager
+	 */
+	function getContactsManager() {
+		return $this->query('ContactsManager');
+	}
 }
-- 
GitLab


From 14b67d6c5f1e3cd538714a8b5f512dd34847e795 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Thu, 29 Aug 2013 16:25:25 +0200
Subject: [PATCH 027/248] fixing typo

---
 lib/public/core/contacts/imanager.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/public/core/contacts/imanager.php b/lib/public/core/contacts/imanager.php
index 4ae9d5766e..e8bb7bfd8e 100644
--- a/lib/public/core/contacts/imanager.php
+++ b/lib/public/core/contacts/imanager.php
@@ -55,7 +55,7 @@ namespace OCP\Core\Contacts {
 		 *  Following function shows how to search for contacts for the name and the email address.
 		 *
 		 *		public static function getMatchingRecipient($term) {
-		 *			$cm = \OC:$server->getContactsManager();
+		 *			$cm = \OC::$server->getContactsManager();
 		 *			// The API is not active -> nothing to do
 		 *			if (!$cm->isEnabled()) {
 		 *				return array();
-- 
GitLab


From ec9b7d1e845527957aaaf6b235227b4e5c3f033d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Sat, 31 Aug 2013 01:41:24 +0200
Subject: [PATCH 028/248] fixing file header

---
 lib/public/appframework/App.php           | 20 ++++++++++++++++++++
 lib/public/appframework/iappcontainer.php | 20 ++++++++++++++++++++
 lib/public/core/icontainer.php            | 20 ++++++++++++++++++++
 lib/public/core/irequest.php              | 23 ++++++++++++++++++-----
 lib/public/core/iservercontainer.php      | 20 ++++++++++++++++++++
 5 files changed, 98 insertions(+), 5 deletions(-)

diff --git a/lib/public/appframework/App.php b/lib/public/appframework/App.php
index 0c27fcb2ac..d97c5c8184 100644
--- a/lib/public/appframework/App.php
+++ b/lib/public/appframework/App.php
@@ -1,4 +1,24 @@
 <?php
+/**
+ * ownCloud
+ *
+ * @author Thomas Müller
+ * @copyright 2013 Thomas Müller deepdiver@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\AppFramework;
 
diff --git a/lib/public/appframework/iappcontainer.php b/lib/public/appframework/iappcontainer.php
index c2faea07b9..db909241e5 100644
--- a/lib/public/appframework/iappcontainer.php
+++ b/lib/public/appframework/iappcontainer.php
@@ -1,4 +1,24 @@
 <?php
+/**
+ * ownCloud
+ *
+ * @author Thomas Müller
+ * @copyright 2013 Thomas Müller deepdiver@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\AppFramework;
 
diff --git a/lib/public/core/icontainer.php b/lib/public/core/icontainer.php
index a6c93abec6..8c4a63424b 100644
--- a/lib/public/core/icontainer.php
+++ b/lib/public/core/icontainer.php
@@ -1,4 +1,24 @@
 <?php
+/**
+ * ownCloud
+ *
+ * @author Thomas Müller
+ * @copyright 2013 Thomas Müller deepdiver@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\Core;
 
diff --git a/lib/public/core/irequest.php b/lib/public/core/irequest.php
index fc2004d183..6103215842 100644
--- a/lib/public/core/irequest.php
+++ b/lib/public/core/irequest.php
@@ -1,10 +1,23 @@
 <?php
 /**
- * Created by JetBrains PhpStorm.
- * User: deepdiver
- * Date: 20.08.13
- * Time: 16:15
- * To change this template use File | Settings | File Templates.
+ * ownCloud
+ *
+ * @author Thomas Müller
+ * @copyright 2013 Thomas Müller deepdiver@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\Core;
diff --git a/lib/public/core/iservercontainer.php b/lib/public/core/iservercontainer.php
index 464da19864..e169990a3f 100644
--- a/lib/public/core/iservercontainer.php
+++ b/lib/public/core/iservercontainer.php
@@ -1,4 +1,24 @@
 <?php
+/**
+ * ownCloud
+ *
+ * @author Thomas Müller
+ * @copyright 2013 Thomas Müller deepdiver@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\Core;
 
-- 
GitLab


From 97bdf008b1cefaa092e23fc5a9bad787e755ed77 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Sat, 31 Aug 2013 20:57:16 +0200
Subject: [PATCH 029/248] PHPDoc added to existing interfaces

---
 lib/public/core/icontainer.php       | 25 +++++++++++++++++++++++++
 lib/public/core/irequest.php         |  8 ++++++--
 lib/public/core/iservercontainer.php | 13 +++++++++++++
 3 files changed, 44 insertions(+), 2 deletions(-)

diff --git a/lib/public/core/icontainer.php b/lib/public/core/icontainer.php
index 8c4a63424b..88ebc6cf64 100644
--- a/lib/public/core/icontainer.php
+++ b/lib/public/core/icontainer.php
@@ -31,9 +31,34 @@ namespace OCP\Core;
  */
 interface IContainer {
 
+	/**
+	 * Look up a service for a given name in the container.
+	 *
+	 * @param string $name
+	 * @return mixed
+	 */
 	function query($name);
 
+	/**
+	 * A value is stored in the container with it's corresponding name
+	 *
+	 * @param string $name
+	 * @param mixed $value
+	 * @return void
+	 */
 	function registerParameter($name, $value);
 
+	/**
+	 * A service is registered in the container where a closure is passed in which will actually
+	 * create the service on demand.
+	 * In case the parameter $shared is set to true (the default usage) the once created service will remain in
+	 * memory and be reused on subsequent calls.
+	 * In case the parameter is false the service will be recreated on every call.
+	 *
+	 * @param string $name
+	 * @param callable $closure
+	 * @param bool $shared
+	 * @return void
+	 */
 	function registerService($name, \Closure $closure, $shared = true);
 }
diff --git a/lib/public/core/irequest.php b/lib/public/core/irequest.php
index 6103215842..be60978a3c 100644
--- a/lib/public/core/irequest.php
+++ b/lib/public/core/irequest.php
@@ -45,6 +45,7 @@ interface IRequest {
 
 	/**
 	 * Returns all params that were received, be it from the request
+	 *
 	 * (as GET or POST) or through the URL by the route
 	 * @return array the array with all parameters
 	 */
@@ -52,12 +53,14 @@ interface IRequest {
 
 	/**
 	 * Returns the method of the request
+	 *
 	 * @return string the method of the request (POST, GET, etc)
 	 */
 	public function getMethod();
 
 	/**
 	 * Shortcut for accessing an uploaded file through the $_FILES array
+	 *
 	 * @param string $key the key that will be taken from the $_FILES array
 	 * @return array the file in the $_FILES element
 	 */
@@ -66,6 +69,7 @@ interface IRequest {
 
 	/**
 	 * Shortcut for getting env variables
+	 *
 	 * @param string $key the key that will be taken from the $_ENV array
 	 * @return array the value in the $_ENV element
 	 */
@@ -74,6 +78,7 @@ interface IRequest {
 
 	/**
 	 * Shortcut for getting session variables
+	 *
 	 * @param string $key the key that will be taken from the $_SESSION array
 	 * @return array the value in the $_SESSION element
 	 */
@@ -82,6 +87,7 @@ interface IRequest {
 
 	/**
 	 * Shortcut for getting cookie variables
+	 *
 	 * @param string $key the key that will be taken from the $_COOKIE array
 	 * @return array the value in the $_COOKIE element
 	 */
@@ -92,9 +98,7 @@ interface IRequest {
 	 * Returns the request body content.
 	 *
 	 * @param Boolean $asResource If true, a resource will be returned
-	 *
 	 * @return string|resource The request body content or a resource to read the body stream.
-	 *
 	 * @throws \LogicException
 	 */
 	function getContent($asResource = false);
diff --git a/lib/public/core/iservercontainer.php b/lib/public/core/iservercontainer.php
index e169990a3f..0517cc53e0 100644
--- a/lib/public/core/iservercontainer.php
+++ b/lib/public/core/iservercontainer.php
@@ -32,7 +32,20 @@ namespace OCP\Core;
 interface IServerContainer {
 
 	/**
+	 * The contacts manager will act as a broker between consumers for contacts information and
+	 * providers which actual deliver the contact information.
+	 *
 	 * @return \OCP\Core\Contacts\IManager
 	 */
 	function getContactsManager();
+
+	/**
+	 * The current request object holding all information about the request currently being processed
+	 * is returned from this method.
+	 * In case the current execution was not initiated by a web request null is returned
+	 *
+	 * @return \OCP\Core\IRequest|null
+	 */
+	function getRequest();
+
 }
-- 
GitLab


From 206f83941b26b16f89e695ae84b998e9cf11132a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Sat, 31 Aug 2013 21:34:29 +0200
Subject: [PATCH 030/248] move new interfaces into lib/public and OCP

---
 .../dependencyinjection/dicontainer.php          |  2 +-
 lib/appframework/http/request.php                |  2 +-
 lib/appframework/utility/simplecontainer.php     |  2 +-
 lib/contactsmanager.php                          |  2 +-
 lib/public/appframework/iappcontainer.php        |  4 ++--
 lib/public/{core => }/contacts/imanager.php      |  2 +-
 lib/public/{core => }/icontainer.php             |  4 ++--
 lib/public/{core => }/irequest.php               |  2 +-
 lib/public/{core => }/iservercontainer.php       |  8 ++++----
 lib/server.php                                   | 16 ++++++++++++++--
 10 files changed, 28 insertions(+), 16 deletions(-)
 rename lib/public/{core => }/contacts/imanager.php (99%)
 rename lib/public/{core => }/icontainer.php (97%)
 rename lib/public/{core => }/irequest.php (99%)
 rename lib/public/{core => }/iservercontainer.php (92%)

diff --git a/lib/appframework/dependencyinjection/dicontainer.php b/lib/appframework/dependencyinjection/dicontainer.php
index 43f6eee29b..2ef885d7b2 100644
--- a/lib/appframework/dependencyinjection/dicontainer.php
+++ b/lib/appframework/dependencyinjection/dicontainer.php
@@ -132,7 +132,7 @@ class DIContainer extends SimpleContainer implements IAppContainer{
 	}
 
 	/**
-	 * @return \OCP\Core\IServerContainer
+	 * @return \OCP\IServerContainer
 	 */
 	function getServer()
 	{
diff --git a/lib/appframework/http/request.php b/lib/appframework/http/request.php
index ab72a8db69..4f1775182a 100644
--- a/lib/appframework/http/request.php
+++ b/lib/appframework/http/request.php
@@ -22,7 +22,7 @@
 
 namespace OC\AppFramework\Http;
 
-use OCP\Core\IRequest;
+use OCP\IRequest;
 
 /**
  * Class for accessing variables in the request.
diff --git a/lib/appframework/utility/simplecontainer.php b/lib/appframework/utility/simplecontainer.php
index 04b6cd727b..a51ace83a3 100644
--- a/lib/appframework/utility/simplecontainer.php
+++ b/lib/appframework/utility/simplecontainer.php
@@ -10,7 +10,7 @@ require_once __DIR__ . '/../../../3rdparty/Pimple/Pimple.php';
  *
  * SimpleContainer is a simple implementation of IContainer on basis of \Pimple
  */
-class SimpleContainer extends \Pimple implements \OCP\Core\IContainer {
+class SimpleContainer extends \Pimple implements \OCP\IContainer {
 
 	/**
 	 * @param string $name name of the service to query for
diff --git a/lib/contactsmanager.php b/lib/contactsmanager.php
index 59c413ec03..fc6745b450 100644
--- a/lib/contactsmanager.php
+++ b/lib/contactsmanager.php
@@ -22,7 +22,7 @@
 
 namespace OC {
 
-	class ContactsManager implements \OCP\Core\Contacts\IManager {
+	class ContactsManager implements \OCP\Contacts\IManager {
 
 		/**
 		 * This function is used to search and find contacts within the users address books.
diff --git a/lib/public/appframework/iappcontainer.php b/lib/public/appframework/iappcontainer.php
index db909241e5..c8f6229dd9 100644
--- a/lib/public/appframework/iappcontainer.php
+++ b/lib/public/appframework/iappcontainer.php
@@ -23,7 +23,7 @@
 namespace OCP\AppFramework;
 
 use OCP\AppFramework\IApi;
-use OCP\Core\IContainer;
+use OCP\IContainer;
 
 /**
  * Class IAppContainer
@@ -39,7 +39,7 @@ interface IAppContainer extends IContainer{
 	function getCoreApi();
 
 	/**
-	 * @return \OCP\Core\IServerContainer
+	 * @return \OCP\IServerContainer
 	 */
 	function getServer();
 }
diff --git a/lib/public/core/contacts/imanager.php b/lib/public/contacts/imanager.php
similarity index 99%
rename from lib/public/core/contacts/imanager.php
rename to lib/public/contacts/imanager.php
index e8bb7bfd8e..3bfbca7be5 100644
--- a/lib/public/core/contacts/imanager.php
+++ b/lib/public/contacts/imanager.php
@@ -28,7 +28,7 @@
 
 // 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\Core\Contacts {
+namespace OCP\Contacts {
 
 	/**
 	 * This class provides access to the contacts app. Use this class exclusively if you want to access contacts.
diff --git a/lib/public/core/icontainer.php b/lib/public/icontainer.php
similarity index 97%
rename from lib/public/core/icontainer.php
rename to lib/public/icontainer.php
index 88ebc6cf64..d43c1c90f1 100644
--- a/lib/public/core/icontainer.php
+++ b/lib/public/icontainer.php
@@ -20,14 +20,14 @@
  *
  */
 
-namespace OCP\Core;
+namespace OCP;
 
 /**
  * Class IContainer
  *
  * IContainer is the basic interface to be used for any internal dependency injection mechanism
  *
- * @package OCP\Core
+ * @package OCP
  */
 interface IContainer {
 
diff --git a/lib/public/core/irequest.php b/lib/public/irequest.php
similarity index 99%
rename from lib/public/core/irequest.php
rename to lib/public/irequest.php
index be60978a3c..cd39855950 100644
--- a/lib/public/core/irequest.php
+++ b/lib/public/irequest.php
@@ -20,7 +20,7 @@
  *
  */
 
-namespace OCP\Core;
+namespace OCP;
 
 
 interface IRequest {
diff --git a/lib/public/core/iservercontainer.php b/lib/public/iservercontainer.php
similarity index 92%
rename from lib/public/core/iservercontainer.php
rename to lib/public/iservercontainer.php
index 0517cc53e0..5f5b967754 100644
--- a/lib/public/core/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -20,12 +20,12 @@
  *
  */
 
-namespace OCP\Core;
+namespace OCP;
 
 
 /**
  * Class IServerContainer
- * @package OCP\Core
+ * @package OCP
  *
  * This container holds all ownCloud services
  */
@@ -35,7 +35,7 @@ interface IServerContainer {
 	 * The contacts manager will act as a broker between consumers for contacts information and
 	 * providers which actual deliver the contact information.
 	 *
-	 * @return \OCP\Core\Contacts\IManager
+	 * @return \OCP\Contacts\IManager
 	 */
 	function getContactsManager();
 
@@ -44,7 +44,7 @@ interface IServerContainer {
 	 * is returned from this method.
 	 * In case the current execution was not initiated by a web request null is returned
 	 *
-	 * @return \OCP\Core\IRequest|null
+	 * @return \OCP\IRequest|null
 	 */
 	function getRequest();
 
diff --git a/lib/server.php b/lib/server.php
index 72c82efe16..ad955bf5c6 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -3,7 +3,7 @@
 namespace OC;
 
 use OC\AppFramework\Utility\SimpleContainer;
-use OCP\Core\IServerContainer;
+use OCP\IServerContainer;
 
 /**
  * Class Server
@@ -20,9 +20,21 @@ class Server extends SimpleContainer implements IServerContainer {
 	}
 
 	/**
-	 * @return \OCP\Core\Contacts\IManager
+	 * @return \OCP\Contacts\IManager
 	 */
 	function getContactsManager() {
 		return $this->query('ContactsManager');
 	}
+
+	/**
+	 * The current request object holding all information about the request currently being processed
+	 * is returned from this method.
+	 * In case the current execution was not initiated by a web request null is returned
+	 *
+	 * @return \OCP\IRequest|null
+	 */
+	function getRequest()
+	{
+		return $this->query('Request');
+	}
 }
-- 
GitLab


From 0aba549e7f11e1035fa7a2e880803b47cbadd919 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Sun, 1 Sep 2013 16:40:50 +0200
Subject: [PATCH 031/248] Use more object oriented way for console commands

---
 3rdparty                    |  2 +-
 apps/files/command/scan.php | 55 +++++++++++++++++++++++++++++++++++++
 apps/files/console/scan.php | 31 ---------------------
 console.php                 | 37 ++++++-------------------
 core/command/status.php     | 30 ++++++++++++++++++++
 lib/base.php                |  1 +
 6 files changed, 95 insertions(+), 61 deletions(-)
 create mode 100644 apps/files/command/scan.php
 delete mode 100644 apps/files/console/scan.php
 create mode 100644 core/command/status.php

diff --git a/3rdparty b/3rdparty
index dc87ea6302..98fdc3a4e2 160000
--- a/3rdparty
+++ b/3rdparty
@@ -1 +1 @@
-Subproject commit dc87ea630287f27502eba825fbb19fcc33c34c86
+Subproject commit 98fdc3a4e2f56f7d231470418222162dbf95f46a
diff --git a/apps/files/command/scan.php b/apps/files/command/scan.php
new file mode 100644
index 0000000000..fce4f6875d
--- /dev/null
+++ b/apps/files/command/scan.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace OCA\Files\Command;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class Scan extends Command
+{
+	protected function configure()
+	{
+		$this
+			->setName('files:scan')
+			->setDescription('rescan filesystem')
+			->addArgument(
+					'user_id',
+					InputArgument::OPTIONAL | InputArgument::IS_ARRAY,
+					'will rescan all files of the given user(s)'
+				     )
+			->addOption(
+					'all',
+					null,
+					InputOption::VALUE_NONE,
+					'will rescan all files of all known users'
+				   )
+		;
+	}
+
+	protected function scanFiles($user, OutputInterface $output) {
+		$scanner = new \OC\Files\Utils\Scanner($user);
+		$scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function($path) use ($output) {
+			$output->writeln("Scanning <info>$path</info>");
+		});
+		$scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function($path) use ($output) {
+			$output->writeln("Scanning <info>$path</info>");
+		});
+		$scanner->scan('');
+	}
+
+	protected function execute(InputInterface $input, OutputInterface $output)
+	{
+		if ($input->getOption('all')) {
+			$users = \OC_User::getUsers();
+		} else {
+			$users = $input->getArgument('user_id');
+		}
+
+		foreach ($users as $user) {
+			$this->scanFiles($user, $output);
+		}
+	}
+}
diff --git a/apps/files/console/scan.php b/apps/files/console/scan.php
deleted file mode 100644
index 70183fc888..0000000000
--- a/apps/files/console/scan.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-if (count($argv) !== 2) {
-	echo "Usage:" . PHP_EOL;
-	echo " files:scan <user_id>" . PHP_EOL;
-	echo "  will rescan all files of the given user" . PHP_EOL;
-	echo " files:scan --all" . PHP_EOL;
-	echo "  will rescan all files of all known users" . PHP_EOL;
-	return;
-}
-
-function scanFiles($user) {
-	$scanner = new \OC\Files\Utils\Scanner($user);
-	$scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function($path) {
-		echo "Scanning $path" . PHP_EOL;
-	});
-	$scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function($path) {
-		echo "Scanning $path" . PHP_EOL;
-	});
-	$scanner->scan('');
-}
-
-if ($argv[1] === '--all') {
-	$users = OC_User::getUsers();
-} else {
-	$users = array($argv[1]);
-}
-
-foreach ($users as $user) {
-	scanFiles($user);
-}
diff --git a/console.php b/console.php
index fbe09d9bb6..9639f60b7a 100644
--- a/console.php
+++ b/console.php
@@ -7,6 +7,9 @@
  * See the COPYING-README file.
  */
 
+use OC\Core\Command\GreetCommand;
+use Symfony\Component\Console\Application;
+
 $RUNTIME_NOAPPS = true;
 require_once 'lib/base.php';
 
@@ -21,32 +24,8 @@ if (!OC::$CLI) {
 	exit(0);
 }
 
-$self = basename($argv[0]);
-if ($argc <= 1) {
-	$argv[1] = "help";
-}
-
-$command = $argv[1];
-array_shift($argv);
-
-switch ($command) {
-	case 'files:scan':
-		require_once 'apps/files/console/scan.php';
-		break;
-	case 'status':
-		require_once 'status.php';
-		break;
-	case 'help':
-		echo "Usage:" . PHP_EOL;
-		echo " " . $self . " <command>" . PHP_EOL;
-		echo PHP_EOL;
-		echo "Available commands:" . PHP_EOL;
-		echo " files:scan -> rescan filesystem" .PHP_EOL;
-		echo " status -> show some status information" .PHP_EOL;
-		echo " help -> show this help screen" .PHP_EOL;
-		break;
-	default:
-		echo "Unknown command '$command'" . PHP_EOL;
-		echo "For available commands type ". $self . " help" . PHP_EOL;
-		break;
-}
+$defaults = new OC_Defaults;
+$application = new Application($defaults->getName(), \OC_Util::getVersionString());
+$application->add(new OC\Core\Command\Status);
+$application->add(new OCA\Files\Command\Scan);
+$application->run();
diff --git a/core/command/status.php b/core/command/status.php
new file mode 100644
index 0000000000..601780257e
--- /dev/null
+++ b/core/command/status.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace OC\Core\Command;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class Status extends Command
+{
+	protected function configure()
+	{
+		$this
+			->setName('status')
+			->setDescription('show some status information')
+		;
+	}
+
+	protected function execute(InputInterface $input, OutputInterface $output)
+	{
+		$values = array(
+			'installed' => \OC_Config::getValue('installed') ? 'true' : 'false',
+			'version' => implode('.', \OC_Util::getVersion()),
+			'versionstring' => \OC_Util::getVersionString(),
+			'edition' => \OC_Util::getEditionString());
+		print_r($values);
+	}
+}
diff --git a/lib/base.php b/lib/base.php
index b5c12a683f..dfd7cb662f 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -358,6 +358,7 @@ class OC {
 		self::$loader->registerPrefix('Doctrine\\Common', 'doctrine/common/lib');
 		self::$loader->registerPrefix('Doctrine\\DBAL', 'doctrine/dbal/lib');
 		self::$loader->registerPrefix('Symfony\\Component\\Routing', 'symfony/routing');
+		self::$loader->registerPrefix('Symfony\\Component\\Console', 'symfony/console');
 		self::$loader->registerPrefix('Sabre\\VObject', '3rdparty');
 		self::$loader->registerPrefix('Sabre_', '3rdparty');
 		self::$loader->registerPrefix('Patchwork', '3rdparty');
-- 
GitLab


From cafc8cb22347f0c861bbc333354e2766779e065d Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Mon, 2 Sep 2013 18:18:12 +0200
Subject: [PATCH 032/248] Change Files Scan command to use OC\User\Manager

---
 apps/files/command/scan.php | 25 ++++++++++++++++++-------
 console.php                 |  2 +-
 2 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/apps/files/command/scan.php b/apps/files/command/scan.php
index fce4f6875d..c5631d1956 100644
--- a/apps/files/command/scan.php
+++ b/apps/files/command/scan.php
@@ -8,10 +8,19 @@ use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
 
-class Scan extends Command
-{
-	protected function configure()
-	{
+class Scan extends Command {
+
+	/**
+	 * @var \OC\User\Manager $userManager
+	 */
+	private $userManager;
+
+	public function __construct(\OC\User\Manager $userManager) {
+		$this->userManager = $userManager;
+		parent::__construct();
+	}
+
+	protected function configure() {
 		$this
 			->setName('files:scan')
 			->setDescription('rescan filesystem')
@@ -40,15 +49,17 @@ class Scan extends Command
 		$scanner->scan('');
 	}
 
-	protected function execute(InputInterface $input, OutputInterface $output)
-	{
+	protected function execute(InputInterface $input, OutputInterface $output) {
 		if ($input->getOption('all')) {
-			$users = \OC_User::getUsers();
+			$users = $this->userManager->search('');
 		} else {
 			$users = $input->getArgument('user_id');
 		}
 
 		foreach ($users as $user) {
+			if (is_object($user)) {
+				$user = $user->getUID();
+			}
 			$this->scanFiles($user, $output);
 		}
 	}
diff --git a/console.php b/console.php
index 9639f60b7a..11df7eb0dc 100644
--- a/console.php
+++ b/console.php
@@ -27,5 +27,5 @@ if (!OC::$CLI) {
 $defaults = new OC_Defaults;
 $application = new Application($defaults->getName(), \OC_Util::getVersionString());
 $application->add(new OC\Core\Command\Status);
-$application->add(new OCA\Files\Command\Scan);
+$application->add(new OCA\Files\Command\Scan(OC_User::getManager()));
 $application->run();
-- 
GitLab


From 44b3e71ed4e1beb3e815def7ac9bd9848039fb84 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Mon, 2 Sep 2013 18:20:04 +0200
Subject: [PATCH 033/248] Cleanup and more style fixes

---
 console.php             |  1 -
 core/command/status.php | 12 +++++-------
 2 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/console.php b/console.php
index 11df7eb0dc..2f773cc6a1 100644
--- a/console.php
+++ b/console.php
@@ -7,7 +7,6 @@
  * See the COPYING-README file.
  */
 
-use OC\Core\Command\GreetCommand;
 use Symfony\Component\Console\Application;
 
 $RUNTIME_NOAPPS = true;
diff --git a/core/command/status.php b/core/command/status.php
index 601780257e..2bd89919dd 100644
--- a/core/command/status.php
+++ b/core/command/status.php
@@ -8,23 +8,21 @@ use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
 
-class Status extends Command
-{
-	protected function configure()
-	{
+class Status extends Command {
+	protected function configure() {
 		$this
 			->setName('status')
 			->setDescription('show some status information')
 		;
 	}
 
-	protected function execute(InputInterface $input, OutputInterface $output)
-	{
+	protected function execute(InputInterface $input, OutputInterface $output) {
 		$values = array(
 			'installed' => \OC_Config::getValue('installed') ? 'true' : 'false',
 			'version' => implode('.', \OC_Util::getVersion()),
 			'versionstring' => \OC_Util::getVersionString(),
-			'edition' => \OC_Util::getEditionString());
+			'edition' => \OC_Util::getEditionString(),
+		);
 		print_r($values);
 	}
 }
-- 
GitLab


From 3d49631b8d6a7cee9e4c9d4aedadf44304426fdb Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Tue, 3 Sep 2013 13:24:30 +0200
Subject: [PATCH 034/248] make sure that initial encryption also starts for a
 fresh installation

---
 apps/files_encryption/hooks/hooks.php | 20 ++++++++++----------
 apps/files_encryption/lib/util.php    |  3 ++-
 2 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/apps/files_encryption/hooks/hooks.php b/apps/files_encryption/hooks/hooks.php
index 85169e6a1d..d40ae95a44 100644
--- a/apps/files_encryption/hooks/hooks.php
+++ b/apps/files_encryption/hooks/hooks.php
@@ -44,10 +44,8 @@ class Hooks {
 			\OC_Util::setupFS($params['uid']);
 		}
 
-		$util = new Util($view, $params['uid']);
-
 		//check if all requirements are met
-		if(!$util->ready() && (!Helper::checkRequirements() || !Helper::checkConfiguration())) {
+		if(!Helper::checkRequirements() || !Helper::checkConfiguration()) {
 			$error_msg = $l->t("Missing requirements.");
 			$hint = $l->t('Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled.');
 			\OC_App::disable('files_encryption');
@@ -55,6 +53,8 @@ class Hooks {
 			\OCP\Template::printErrorPage($error_msg, $hint);
 		}
 
+		$util = new Util($view, $params['uid']);
+
 		// setup user, if user not ready force relogin
 		if (Helper::setupUser($util, $params['password']) === false) {
 			return false;
@@ -73,7 +73,7 @@ class Hooks {
 
 			$userView = new \OC_FilesystemView('/' . $params['uid']);
 
-			// Set legacy encryption key if it exists, to support 
+			// Set legacy encryption key if it exists, to support
 			// depreciated encryption system
 			if (
 				$userView->file_exists('encryption.key')
@@ -249,7 +249,7 @@ class Hooks {
 			$params['run'] = false;
 			$params['error'] = $l->t('Following users are not set up for encryption:') . ' ' . join(', ' , $notConfigured);
 		}
-		
+
 	}
 
 	/**
@@ -260,7 +260,7 @@ class Hooks {
 		// NOTE: $params has keys:
 		// [itemType] => file
 		// itemSource -> int, filecache file ID
-		// [parent] => 
+		// [parent] =>
 		// [itemTarget] => /13
 		// shareWith -> string, uid of user being shared to
 		// fileTarget -> path of file being shared
@@ -301,13 +301,13 @@ class Hooks {
 					// NOTE: parent is folder but shared was a file!
 					// we try to rebuild the missing path
 					// some examples we face here
-					// user1 share folder1 with user2 folder1 has 
-					// the following structure 
+					// user1 share folder1 with user2 folder1 has
+					// the following structure
 					// /folder1/subfolder1/subsubfolder1/somefile.txt
 					// user2 re-share subfolder2 with user3
 					// user3 re-share somefile.txt user4
-					// so our path should be 
-					// /Shared/subfolder1/subsubfolder1/somefile.txt 
+					// so our path should be
+					// /Shared/subfolder1/subsubfolder1/somefile.txt
 					// while user3 is sharing
 
 					if ($params['itemType'] === 'file') {
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index b8d6862349..9bc5300076 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -201,10 +201,11 @@ class Util {
 		if (false === $this->recoveryEnabledForUser()) {
 
 			// create database configuration
-			$sql = 'INSERT INTO `*PREFIX*encryption` (`uid`,`mode`,`recovery_enabled`) VALUES (?,?,?)';
+			$sql = 'INSERT INTO `*PREFIX*encryption` (`uid`,`mode`,`recovery_enabled`,`migration_status`) VALUES (?,?,?,?)';
 			$args = array(
 				$this->userId,
 				'server-side',
+				0,
 				0
 			);
 			$query = \OCP\DB::prepare($sql);
-- 
GitLab


From 4dbc78705566c3a9062fd4c4f69db60a41c5634b Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Tue, 3 Sep 2013 15:56:25 +0200
Subject: [PATCH 035/248] check if stream wrapper is already registered to
 avoid warning

---
 apps/files_encryption/appinfo/app.php | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/apps/files_encryption/appinfo/app.php b/apps/files_encryption/appinfo/app.php
index 90a9984e27..5b62b84e22 100644
--- a/apps/files_encryption/appinfo/app.php
+++ b/apps/files_encryption/appinfo/app.php
@@ -25,7 +25,9 @@ if (!OC_Config::getValue('maintenance', false)) {
 	// App manager related hooks
 	OCA\Encryption\Helper::registerAppHooks();
 
-	stream_wrapper_register('crypt', 'OCA\Encryption\Stream');
+	if(!in_array('crypt', stream_get_wrappers())) {
+		stream_wrapper_register('crypt', 'OCA\Encryption\Stream');
+	}
 
 	// check if we are logged in
 	if (OCP\User::isLoggedIn()) {
-- 
GitLab


From 823b4cce603d1d0a404d8b93fcca6101ff839767 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Wed, 4 Sep 2013 08:16:27 +0200
Subject: [PATCH 036/248] More trimming

---
 lib/vcategories.php | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/lib/vcategories.php b/lib/vcategories.php
index 8403695835..a7e4c54be2 100644
--- a/lib/vcategories.php
+++ b/lib/vcategories.php
@@ -179,6 +179,7 @@ class OC_VCategories {
 		if(is_numeric($category)) {
 			$catid = $category;
 		} elseif(is_string($category)) {
+			$category = trim($category);
 			$catid = $this->array_searchi($category, $this->categories);
 		}
 		OCP\Util::writeLog('core', __METHOD__.', category: '.$catid.' '.$category, OCP\Util::DEBUG);
@@ -240,6 +241,7 @@ class OC_VCategories {
 		if(is_numeric($category)) {
 			$catid = $category;
 		} elseif(is_string($category)) {
+			$category = trim($category);
 			$catid = $this->array_searchi($category, $this->categories);
 		}
 		OCP\Util::writeLog('core', __METHOD__.', category: '.$catid.' '.$category, OCP\Util::DEBUG);
@@ -301,6 +303,7 @@ class OC_VCategories {
 	* @returns int the id of the added category or false if it already exists.
 	*/
 	public function add($name) {
+		$name = trim($name);
 		OCP\Util::writeLog('core', __METHOD__.', name: ' . $name, OCP\Util::DEBUG);
 		if($this->hasCategory($name)) {
 			OCP\Util::writeLog('core', __METHOD__.', name: ' . $name. ' exists already', OCP\Util::DEBUG);
@@ -331,6 +334,8 @@ class OC_VCategories {
 	* @returns bool
 	*/
 	public function rename($from, $to) {
+		$from = trim($from);
+		$to = trim($to);
 		$id = $this->array_searchi($from, $this->categories);
 		if($id === false) {
 			OCP\Util::writeLog('core', __METHOD__.', category: ' . $from. ' does not exist', OCP\Util::DEBUG);
@@ -656,6 +661,7 @@ class OC_VCategories {
 	public function addToCategory($objid, $category, $type = null) {
 		$type = is_null($type) ? $this->type : $type;
 		if(is_string($category) && !is_numeric($category)) {
+			$category = trim($category);
 			if(!$this->hasCategory($category)) {
 				$this->add($category, true);
 			}
@@ -688,9 +694,13 @@ class OC_VCategories {
 	*/
 	public function removeFromCategory($objid, $category, $type = null) {
 		$type = is_null($type) ? $this->type : $type;
-		$categoryid = (is_string($category) && !is_numeric($category))
-			? $this->array_searchi($category, $this->categories)
-			: $category;
+		if(is_string($category) && !is_numeric($category)) {
+			$category = trim($category);
+			$categoryid =  $this->array_searchi($category, $this->categories);
+		} else {
+			$categoryid = $category;
+		}
+
 		try {
 			$sql = 'DELETE FROM `' . self::RELATION_TABLE . '` '
 					. 'WHERE `objid` = ? AND `categoryid` = ? AND `type` = ?';
@@ -716,6 +726,8 @@ class OC_VCategories {
 			$names = array($names);
 		}
 
+		$names = array_map('trim', $names);
+
 		OC_Log::write('core', __METHOD__ . ', before: '
 			. print_r($this->categories, true), OC_Log::DEBUG);
 		foreach($names as $name) {
-- 
GitLab


From 49fd7e9f1e037266304053c7337c714339d82553 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Wed, 4 Sep 2013 15:24:25 +0200
Subject: [PATCH 037/248] refactor dialog creation

---
 apps/files/css/files.css             |   7 +-
 apps/files/js/filelist.js            |  12 ++-
 apps/files/templates/fileexists.html |  26 ++++++
 core/js/oc-dialogs.js                | 134 +++++++++------------------
 4 files changed, 84 insertions(+), 95 deletions(-)
 create mode 100644 apps/files/templates/fileexists.html

diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index 141f4557be..cc556f8321 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -356,6 +356,9 @@ table.dragshadow td.size {
 	width: 100%;
 	height: 85px;
 }
+.oc-dialog .fileexists .conflict.template {
+	display: none;
+}
 .oc-dialog .fileexists .conflict .filename {
 	color:#777;
 	word-break: break-all;
@@ -377,11 +380,11 @@ table.dragshadow td.size {
 	float: left;
 	width: 235px;
 }
-.oc-dialog .fileexists .conflict-wrapper {
+.oc-dialog .fileexists .conflicts {
 	overflow-y:scroll;
 	max-height: 225px;
 }
-.oc-dialog .fileexists .conflict-wrapper input[type='checkbox'] {
+.oc-dialog .fileexists .conflict input[type='checkbox'] {
 	float: left;
 }
 
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 77ae039f80..31e2a8300e 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -579,13 +579,14 @@ $(document).ready(function(){
 			currentUploads += 1;
 			uploadtext.attr('currentUploads', currentUploads);
 			
+			var translatedText = n('files', 'Uploading %n file', 'Uploading %n files', currentUploads);
 			if(currentUploads === 1) {
 				var img = OC.imagePath('core', 'loading.gif');
 				data.context.find('td.filename').attr('style','background-image:url('+img+')');
-				uploadtext.text(t('files', '1 file uploading'));
+				uploadtext.text(translatedText);
 				uploadtext.show();
 			} else {
-				uploadtext.text(currentUploads + ' ' + t('files', 'files uploading'));
+				uploadtext.text(translatedText);
 			}
 		}
 		
@@ -634,7 +635,7 @@ $(document).ready(function(){
 			} else {
 
 				// add as stand-alone row to filelist
-				var size=t('files','Pending');
+				var size=t('files', 'Pending');
 				if (data.files[0].size>=0){
 					size=data.files[0].size;
 				}
@@ -652,8 +653,9 @@ $(document).ready(function(){
 				// update file data
 				data.context.attr('data-mime',file.mime).attr('data-id',file.id);
 
-				getMimeIcon(file.mime, function(path){
-					data.context.find('td.filename').attr('style','background-image:url('+path+')');
+				var path = getPathForPreview(file.name);
+				lazyLoadPreview(path, file.mime, function(previewpath){
+					data.context.find('td.filename').attr('style','background-image:url('+previewpath+')');
 				});
 			}
 		}
diff --git a/apps/files/templates/fileexists.html b/apps/files/templates/fileexists.html
new file mode 100644
index 0000000000..a5b2fb7690
--- /dev/null
+++ b/apps/files/templates/fileexists.html
@@ -0,0 +1,26 @@
+<div id="{dialog_name}" title="{title}" class="fileexists">
+	<span class="why">{why}<!-- Which files do you want to keep --></span><br/>
+	<span class="what">{what}<!-- If you select both versions, the copied file will have a number added to its name. --></span><br/>
+	<br/>
+	<table>
+		<th><label><input class="allnewfiles" type="checkbox" />New Files<span class="count"></span></label></th>
+		<th><label><input class="allexistingfiles" type="checkbox" />Already existing files<span class="count"></span></label></th>
+	</table>
+	<div class="conflicts">
+		<div class="conflict template">
+			<div class="filename"></div>
+			<div class="replacement">
+				<input type="checkbox" />
+				<span class="svg icon"></span>
+				<div class="mtime"></div>
+				<div class="size"></div>
+			</div>
+			<div class="original">
+				<input type="checkbox" />
+				<span class="svg icon"></span>
+				<div class="mtime"></div>
+				<div class="size"></div>
+			</div>
+		</div>
+	</div>
+</div>
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index b949fc74d1..5ed2441726 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -220,28 +220,24 @@ var OCdialogs = {
 	*/
 	fileexists:function(data, original, replacement, controller) {
 		var self = this;
-		var selection = controller.getSelection(data.originalFiles);
-		if (selection.defaultAction) {
-			controller[selection.defaultAction](data);
-		} else {
-			var dialog_name = 'oc-dialog-fileexists-content';
-			var dialog_id = '#' + dialog_name;
-			if (this._fileexistsshown) {
-				// add row
-				var conflict = $(dialog_id+ ' .conflict').last().clone();
-				conflict.find('.name').text(original.name);
+		var addConflict = function(conflicts, original, replacement) {
+			
+				var conflict = conflicts.find('.conflict.template').clone();
+				
+				conflict.find('.filename').text(original.name);
 				conflict.find('.original .size').text(humanFileSize(original.size));
 				conflict.find('.original .mtime').text(formatDate(original.mtime*1000));
 				conflict.find('.replacement .size').text(humanFileSize(replacement.size));
 				conflict.find('.replacement .mtime').text(formatDate(replacement.lastModifiedDate));
-				getMimeIcon(original.type,function(path){
-					conflict.find('.original .icon').css('background-image','url('+path+')');
+				var path = getPathForPreview(original.name);
+				lazyLoadPreview(path, original.type, function(previewpath){
+					conflict.find('.original .icon').css('background-image','url('+previewpath+')');
 				});
 				getMimeIcon(replacement.type,function(path){
 					conflict.find('.replacement .icon').css('background-image','url('+path+')');
 				});
-				$(dialog_id+' .conflict').last().after(conflict);
-				$(dialog_id).parent().children('.oc-dialog-title').text(t('files','{count} file conflicts',{count:$(dialog_id+ ' .conflict').length}));
+				conflict.removeClass('template');
+				conflicts.append(conflict);
 				
 				//set more recent mtime bold
 				if (replacement.lastModifiedDate.getTime() > original.mtime*1000) {
@@ -249,16 +245,16 @@ var OCdialogs = {
 				} else if (replacement.lastModifiedDate.getTime() < original.mtime*1000) {
 					conflict.find('.original .mtime').css('font-weight', 'bold');
 				} else {
-					//TODO add to same mtime colletion?
+					//TODO add to same mtime collection?
 				}
 				
 				// set bigger size bold
 				if (replacement.size > original.size) {
-					conflict.find('.replacement .size').css('font-weight','bold');
+					conflict.find('.replacement .size').css('font-weight', 'bold');
 				} else if (replacement.size < original.size) {
-					conflict.find('.original .size').css('font-weight','bold');
+					conflict.find('.original .size').css('font-weight', 'bold');
 				} else {
-					//TODO add to same size colletion?
+					//TODO add to same size collection?
 				}
 				
 				//add checkbox toggling actions
@@ -269,50 +265,42 @@ var OCdialogs = {
 				
 				//TODO show skip action for files with same size and mtime
 				
+		};
+		var selection = controller.getSelection(data.originalFiles);
+		if (selection.defaultAction) {
+			controller[selection.defaultAction](data);
+		} else {
+			var dialog_name = 'oc-dialog-fileexists-content';
+			var dialog_id = '#' + dialog_name;
+			if (this._fileexistsshown) {
+				// add conflict
+				
+				var conflicts = $(dialog_id+ ' .conflicts');
+				addConflict(conflicts, original, replacement);
+				
+				var title = t('files','{count} file conflicts',{count:$(dialog_id+ ' .conflict:not(.template)').length});
+				$(dialog_id).parent().children('.oc-dialog-title').text(title);
+				
+				//recalculate dimensions
 				$(window).trigger('resize');
+				
 			} else {
 				//create dialog
 				this._fileexistsshown = true;
 				$.when(this._getFileExistsTemplate()).then(function($tmpl) {
 					var title = t('files','One file conflict');
-					var original_size = humanFileSize(original.size);
-					var original_mtime = formatDate(original.mtime*1000);
-					var replacement_size= humanFileSize(replacement.size);
-					var replacement_mtime = formatDate(replacement.lastModifiedDate);
 					var $dlg = $tmpl.octemplate({
 						dialog_name: dialog_name,
 						title: title,
 						type: 'fileexists',
 
 						why: t('files','Which files do you want to keep?'),
-						what: t('files','If you select both versions, the copied file will have a number added to its name.'),
-						filename: original.name,
-						
-						original_size: original_size,
-						original_mtime: original_mtime,
-
-						replacement_size: replacement_size,
-						replacement_mtime: replacement_mtime
+						what: t('files','If you select both versions, the copied file will have a number added to its name.')
 					});
 					$('body').append($dlg);
 
-					getMimeIcon(original.type,function(path){
-						$(dialog_id + ' .original .icon').css('background-image','url('+path+')');
-					});
-					getMimeIcon(replacement.type,function(path){
-						$(dialog_id + ' .replacement .icon').css('background-image','url('+path+')');
-					});
-					$(dialog_id + ' #newname').val(original.name);
-
-					$(dialog_id + ' #newname').on('keyup', function(e){
-						if ($(dialog_id + ' #newname').val() === original.name) {
-							$(dialog_id + ' + div .rename').removeClass('primary').hide();
-							$(dialog_id + ' + div .replace').addClass('primary').show();
-						} else {
-							$(dialog_id + ' + div .rename').addClass('primary').show();
-							$(dialog_id + ' + div .replace').removeClass('primary').hide();
-						}
-					});
+					var conflicts = $($dlg).find('.conflicts');
+					addConflict(conflicts, original, replacement);
 
 					buttonlist = [{
 							text: t('core', 'Cancel'),
@@ -346,57 +334,27 @@ var OCdialogs = {
 						closeButton: null
 					});
 					
-					$(dialog_id + ' + div .rename').hide();
-					$(dialog_id + ' #newname').hide();
-
-					$(dialog_id + ' #newnamecb').on('change', function(){
-						if ($(dialog_id + ' #newnamecb').prop('checked')) {
-							$(dialog_id + ' #newname').fadeIn();
-						} else {
-							$(dialog_id + ' #newname').fadeOut();
-							$(dialog_id + ' #newname').val(original.name);
-						}
-					});
 					$(dialog_id).css('height','auto');
 
-					var conflict = $(dialog_id + ' .conflict').last();
-					//set more recent mtime bold
-					if (replacement.lastModifiedDate.getTime() > original.mtime*1000) {
-						conflict.find('.replacement .mtime').css('font-weight','bold');
-					} else if (replacement.lastModifiedDate.getTime() < original.mtime*1000) {
-						conflict.find('.original .mtime').css('font-weight','bold');
-					} else {
-						//TODO add to same mtime colletion?
-					}
-
-					// set bigger size bold
-					if (replacement.size > original.size) {
-						conflict.find('.replacement .size').css('font-weight','bold');
-					} else if (replacement.size < original.size) {
-						conflict.find('.original .size').css('font-weight','bold');
-					} else {
-						//TODO add to same size colletion?
-					}
-				
 					//add checkbox toggling actions
-					//add checkbox toggling actions
-					$(dialog_id).find('.allnewfiles').on('click', function(){
-						var checkboxes = $(dialog_id).find('.replacement input[type="checkbox"]');
+					$(dialog_id).find('.allnewfiles').on('click', function() {
+						var checkboxes = $(dialog_id).find('.conflict:not(.template) .replacement input[type="checkbox"]');
 						checkboxes.prop('checked', $(this).prop('checked'));
 					});
-					$(dialog_id).find('.allexistingfiles').on('click', function(){
-						var checkboxes = $(dialog_id).find('.original input[type="checkbox"]');
+					$(dialog_id).find('.allexistingfiles').on('click', function() {
+						var checkboxes = $(dialog_id).find('.conflict:not(.template) .original input[type="checkbox"]');
 						checkboxes.prop('checked', $(this).prop('checked'));
 					});
-					conflict.find('.replacement,.original').on('click', function(){
+					
+					$(dialog_id).find('.conflicts').on('click', '.replacement,.original', function() {
 						var checkbox = $(this).find('input[type="checkbox"]');
 						checkbox.prop('checked', !checkbox.prop('checked'));
 					});
 					
 					//update counters
-					$(dialog_id).on('click', '.replacement,.allnewfiles', function(){
-						var count = $(dialog_id).find('.replacement input[type="checkbox"]:checked').length;
-						if (count === $(dialog_id+ ' .conflict').length) {
+					$(dialog_id).on('click', '.replacement,.allnewfiles', function() {
+						var count = $(dialog_id).find('.conflict:not(.template) .replacement input[type="checkbox"]:checked').length;
+						if (count === $(dialog_id+ ' .conflict:not(.template)').length) {
 							$(dialog_id).find('.allnewfiles').prop('checked', true);
 							$(dialog_id).find('.allnewfiles + .count').text(t('files','(all selected)'));
 						} else if (count > 0) {
@@ -408,8 +366,8 @@ var OCdialogs = {
 						}
 					});
 					$(dialog_id).on('click', '.original,.allexistingfiles', function(){
-						var count = $(dialog_id).find('.original input[type="checkbox"]:checked').length;
-						if (count === $(dialog_id+ ' .conflict').length) {
+						var count = $(dialog_id).find('.conflict:not(.template) .original input[type="checkbox"]:checked').length;
+						if (count === $(dialog_id+ ' .conflict:not(.template)').length) {
 							$(dialog_id).find('.allexistingfiles').prop('checked', true);
 							$(dialog_id).find('.allexistingfiles + .count').text(t('files','(all selected)'));
 						} else if (count > 0) {
-- 
GitLab


From 7618cf3005f8bda8375183010711a9a2cdfb1fea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 4 Sep 2013 23:45:11 +0200
Subject: [PATCH 038/248] adding public interface for preview

---
 lib/preview.php                 |  5 ++++-
 lib/previewmanager.php          | 38 +++++++++++++++++++++++++++++++
 lib/public/ipreview.php         | 35 +++++++++++++++++++++++++++++
 lib/public/iservercontainer.php |  6 +++++
 lib/public/preview.php          | 34 ----------------------------
 lib/server.php                  | 40 +++++++++++++++++++++++++++++++++
 6 files changed, 123 insertions(+), 35 deletions(-)
 create mode 100755 lib/previewmanager.php
 create mode 100644 lib/public/ipreview.php
 delete mode 100644 lib/public/preview.php

diff --git a/lib/preview.php b/lib/preview.php
index b40ba191fb..266f7795f1 100755
--- a/lib/preview.php
+++ b/lib/preview.php
@@ -42,6 +42,9 @@ class Preview {
 	private $scalingup;
 
 	//preview images object
+	/**
+	 * @var \OC_Image
+	 */
 	private $preview;
 
 	//preview providers
@@ -624,4 +627,4 @@ class Preview {
 		}
 		return false;
 	}
-}
\ No newline at end of file
+}
diff --git a/lib/previewmanager.php b/lib/previewmanager.php
new file mode 100755
index 0000000000..ac9a866a75
--- /dev/null
+++ b/lib/previewmanager.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Müller thomas.mueller@tmit.eu
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ *
+ */
+namespace OC;
+
+use OCP\image;
+use OCP\IPreview;
+
+class PreviewManager implements IPreview {
+	/**
+	 * @brief return a preview of a file
+	 * @param string $file The path to the file where you want a thumbnail from
+	 * @param int $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image
+	 * @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image
+	 * @param boolean $scaleUp Scale smaller images up to the thumbnail size or not. Might look ugly
+	 * @return \OCP\Image
+	 */
+	function createPreview($file, $maxX = 100, $maxY = 75, $scaleUp = false)
+	{
+		$preview = new \OC\Preview('', '/', $file, $maxX, $maxY, $scaleUp);
+		return $preview->getPreview();
+	}
+
+	/**
+	 * @brief returns true if the passed mime type is supported
+	 * @param string $mimeType
+	 * @return boolean
+	 */
+	function isMimeSupported($mimeType = '*')
+	{
+		return \OC\Preview::isMimeSupported($mimeType);
+	}
+}
diff --git a/lib/public/ipreview.php b/lib/public/ipreview.php
new file mode 100644
index 0000000000..b01e7f5b53
--- /dev/null
+++ b/lib/public/ipreview.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Copyright (c) 2013 Frank Karlitschek frank@owncloud.org
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OCP;
+
+/**
+ * This class provides functions to render and show thumbnails and previews of files
+ */
+interface IPreview
+{
+
+	/**
+	 * @brief return a preview of a file
+	 * @param string $file The path to the file where you want a thumbnail from
+	 * @param int $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image
+	 * @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image
+	 * @param boolean $scaleUp Scale smaller images up to the thumbnail size or not. Might look ugly
+	 * @return \OCP\Image
+	 */
+	function createPreview($file, $maxX = 100, $maxY = 75, $scaleUp = false);
+
+
+	/**
+	 * @brief returns true if the passed mime type is supported
+	 * @param string $mimeType
+	 * @return boolean
+	 */
+	function isMimeSupported($mimeType = '*');
+
+}
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index 5f5b967754..144c1a5b3b 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -48,4 +48,10 @@ interface IServerContainer {
 	 */
 	function getRequest();
 
+	/**
+	 * Returns the preview manager which can create preview images for a given file
+	 *
+	 * @return \OCP\IPreview
+	 */
+	function getPreviewManager();
 }
diff --git a/lib/public/preview.php b/lib/public/preview.php
deleted file mode 100644
index 7588347ecc..0000000000
--- a/lib/public/preview.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-/**
- * Copyright (c) 2013 Frank Karlitschek frank@owncloud.org
- * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-namespace OCP;
-
-/**
- * This class provides functions to render and show thumbnails and previews of files
- */
-class Preview {
-
-	/**
-	 * @brief return a preview of a file
-	 * @param $file The path to the file where you want a thumbnail from
-	 * @param $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image
-	 * @param $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image
-	 * @param $scaleup Scale smaller images up to the thumbnail size or not. Might look ugly
-	 * @return image
-	 */
-	public static function show($file,$maxX=100,$maxY=75,$scaleup=false) {
-		return(\OC\Preview::show($file,$maxX,$maxY,$scaleup));
-	}
-
-
-
-	public static function isMimeSupported($mimetype='*') {
-		return \OC\Preview::isMimeSupported($mimetype);
-	}
-
-}
diff --git a/lib/server.php b/lib/server.php
index ad955bf5c6..d85996612e 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -2,6 +2,7 @@
 
 namespace OC;
 
+use OC\AppFramework\Http\Request;
 use OC\AppFramework\Utility\SimpleContainer;
 use OCP\IServerContainer;
 
@@ -17,6 +18,35 @@ class Server extends SimpleContainer implements IServerContainer {
 		$this->registerService('ContactsManager', function($c){
 			return new ContactsManager();
 		});
+		$this->registerService('Request', function($c){
+			$params = array();
+
+			// we json decode the body only in case of content type json
+			if (isset($_SERVER['CONTENT_TYPE']) && stripos($_SERVER['CONTENT_TYPE'],'json') === true ) {
+				$params = json_decode(file_get_contents('php://input'), true);
+				$params = is_array($params) ? $params: array();
+			}
+
+			return new Request(
+				array(
+					'get' => $_GET,
+					'post' => $_POST,
+					'files' => $_FILES,
+					'server' => $_SERVER,
+					'env' => $_ENV,
+					'session' => $_SESSION,
+					'cookies' => $_COOKIE,
+					'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD']))
+						? $_SERVER['REQUEST_METHOD']
+						: null,
+					'params' => $params,
+					'urlParams' => $c['urlParams']
+				)
+			);
+		});
+		$this->registerService('PreviewManager', function($c){
+			return new PreviewManager();
+		});
 	}
 
 	/**
@@ -37,4 +67,14 @@ class Server extends SimpleContainer implements IServerContainer {
 	{
 		return $this->query('Request');
 	}
+
+	/**
+	 * Returns the preview manager which can create preview images for a given file
+	 *
+	 * @return \OCP\IPreview
+	 */
+	function getPreviewManager()
+	{
+		return $this->query('PreviewManager');
+	}
 }
-- 
GitLab


From bbf8acb383bdcb1dcb53f4b9d5a8d894b17401df Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Thu, 5 Sep 2013 10:19:54 +0200
Subject: [PATCH 039/248] separate uploading code from progress code, add
 progress capability detection

---
 apps/files/js/file-upload.js | 193 +++++++++++++++++++----------------
 apps/files/js/filelist.js    |  20 ++--
 apps/files/js/files.js       |  32 +++---
 core/js/oc-dialogs.js        |  13 +--
 4 files changed, 136 insertions(+), 122 deletions(-)

diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index be3d7e08af..bd0ae4db00 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -14,6 +14,7 @@
  *       - when only existing -> remember as single skip action
  *       - when only new -> remember as single replace action
  *       - when both -> remember as single autorename action
+ *     - continue -> apply marks, when nothing is marked continue == skip all
  * - start uploading selection
  * 
  * on send
@@ -96,7 +97,30 @@
  *	
  */
 
+// from https://github.com/New-Bamboo/example-ajax-upload/blob/master/public/index.html
+// also see article at http://blog.new-bamboo.co.uk/2012/01/10/ridiculously-simple-ajax-uploads-with-formdata
+// Function that will allow us to know if Ajax uploads are supported
+function supportAjaxUploadWithProgress() {
+	return supportFileAPI() && supportAjaxUploadProgressEvents() && supportFormData();
 
+	// Is the File API supported?
+	function supportFileAPI() {
+		var fi = document.createElement('INPUT');
+		fi.type = 'file';
+		return 'files' in fi;
+	};
+
+	// Are progress events supported?
+	function supportAjaxUploadProgressEvents() {
+		var xhr = new XMLHttpRequest();
+		return !! (xhr && ('upload' in xhr) && ('onprogress' in xhr.upload));
+	};
+
+	// Is FormData supported?
+	function supportFormData() {
+		return !! window.FormData;
+	}
+}
 
 //TODO clean uploads when all progress has completed
 OC.Upload = {
@@ -245,6 +269,7 @@ OC.Upload = {
 		console.log(data);
 	},
 	checkExistingFiles: function (selection, callbacks){
+		// FIXME check filelist before uploading
 		callbacks.onNoConflicts(selection);
 	}
 };
@@ -327,7 +352,7 @@ $(document).ready(function() {
 				return false; //don't upload anything
 			}
 
-			// check existing files whan all is collected
+			// check existing files when all is collected
 			if ( selection.uploads.length >= selection.filesToUpload ) {
 				
 				//remove our selection hack:
@@ -358,11 +383,6 @@ $(document).ready(function() {
 
 				OC.Upload.checkExistingFiles(selection, callbacks);
 				
-				//TODO refactor away:
-				//show cancel button
-				if($('html.lte9').length === 0 && data.dataType !== 'iframe') {
-					$('#uploadprogresswrapper input.stop').show();
-				}
 			}
 		
 			
@@ -389,13 +409,6 @@ $(document).ready(function() {
 		 */
 		start: function(e) {
 			OC.Upload.logStatus('start', e, null);
-			//IE < 10 does not fire the necessary events for the progress bar.
-			if($('html.lte9').length > 0) {
-				return true;
-			}
-			$('#uploadprogresswrapper input.stop').show();
-			$('#uploadprogressbar').progressbar({value:0});
-			$('#uploadprogressbar').fadeIn();
 		},
 		fail: function(e, data) {
 			OC.Upload.logStatus('fail', e, data);
@@ -414,32 +427,6 @@ $(document).ready(function() {
 			}
 			//var selection = OC.Upload.getSelection(data.originalFiles);
 			//OC.Upload.deleteSelectionUpload(selection, data.files[0].name);
-			
-			//if user pressed cancel hide upload progress bar and cancel button
-			if (data.errorThrown === 'abort') {
-				$('#uploadprogresswrapper input.stop').fadeOut();
-				$('#uploadprogressbar').fadeOut();
-			}
-		},
-		progress: function(e, data) {
-			OC.Upload.logStatus('progress', e, data);
-			// TODO: show nice progress bar in file row
-		},
-		/**
-		 * 
-		 * @param {type} e
-		 * @param {type} data (only has loaded, total and lengthComputable)
-		 * @returns {unresolved}
-		 */
-		progressall: function(e, data) {
-			OC.Upload.logStatus('progressall', e, data);
-			//IE < 10 does not fire the necessary events for the progress bar.
-			if($('html.lte9').length > 0) {
-				return;
-			}
-			var progress = (data.loaded/data.total)*100;
-			//var progress = OC.Upload.progressBytes();
-			$('#uploadprogressbar').progressbar('value', progress);
 		},
 		/**
 		 * called for every successful upload
@@ -460,33 +447,21 @@ $(document).ready(function() {
 			//var selection = OC.Upload.getSelection(data.originalFiles);
 
 			if(typeof result[0] !== 'undefined'
-				&& result[0].status === 'success'
+				&& result[0].status === 'existserror'
 			) {
-				//if (selection) {
-				//	selection.loadedBytes+=data.loaded;
-				//}
-				//OC.Upload.nextUpload();
+				//show "file already exists" dialog
+				var original = result[0];
+				var replacement = data.files[0];
+				var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
+				OC.dialogs.fileexists(data, original, replacement, OC.Upload, fu);
 			} else {
-				if (result[0].status === 'existserror') {
-					//show "file already exists" dialog
-					var original = result[0];
-					var replacement = data.files[0];
-					var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
-					OC.dialogs.fileexists(data, original, replacement, OC.Upload, fu);
-				} else {
-					OC.Upload.deleteSelectionUpload(selection, data.files[0].name);
-					data.textStatus = 'servererror';
-					data.errorThrown = t('files', result.data.message);
-					var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
-					fu._trigger('fail', e, data);
-				}
+				OC.Upload.deleteSelectionUpload(selection, data.files[0].name);
+				data.textStatus = 'servererror';
+				data.errorThrown = t('files', result.data.message);
+				var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
+				fu._trigger('fail', e, data);
 			}
 			
-			//if user pressed cancel hide upload chrome
-			//if (! OC.Upload.isProcessing()) {
-			//	$('#uploadprogresswrapper input.stop').fadeOut();
-			//	$('#uploadprogressbar').fadeOut();
-			//}
 
 		},
 		/**
@@ -496,36 +471,78 @@ $(document).ready(function() {
 		 */
 		stop: function(e, data) {
 			OC.Upload.logStatus('stop', e, data);
-			//if(OC.Upload.progressBytes()>=100) { //only hide controls when all selections have ended uploading
-				
-				//OC.Upload.cancelUploads(); //cleanup
-
-			//	if(data.dataType !== 'iframe') {
-			//		$('#uploadprogresswrapper input.stop').hide();
-			//	}
-
-				//IE < 10 does not fire the necessary events for the progress bar.
-				if($('html.lte9').length > 0) {
-					return;
-				}
-
-			//	$('#uploadprogressbar').progressbar('value', 100);
-			//	$('#uploadprogressbar').fadeOut();
-			//}
-			//if user pressed cancel hide upload chrome
-			//if (! OC.Upload.isProcessing()) {
-			//	$('#uploadprogresswrapper input.stop').fadeOut();
-			//	$('#uploadprogressbar').fadeOut();
-			//}
 		}
 	};
-	
-	var file_upload_handler = function() {
-		$('#file_upload_start').fileupload(file_upload_param);
-	};
 
 	if ( document.getElementById('data-upload-form') ) {
-		$(file_upload_handler);
+		// initialize jquery fileupload (blueimp)
+		var fileupload = $('#file_upload_start').fileupload(file_upload_param);
+		
+		if(supportAjaxUploadWithProgress()) {
+			
+			// add progress handlers
+			fileupload.on('fileuploadadd', function(e, data) {
+				OC.Upload.logStatus('progress handle fileuploadadd', e, data);
+				//show cancel button
+				//if(data.dataType !== 'iframe') { //FIXME when is iframe used? only for ie?
+				//	$('#uploadprogresswrapper input.stop').show();
+				//}
+			});
+			// add progress handlers
+			fileupload.on('fileuploadstart', function(e, data) {
+				OC.Upload.logStatus('progress handle fileuploadstart', e, data);
+				$('#uploadprogresswrapper input.stop').show();
+				$('#uploadprogressbar').progressbar({value:0});
+				$('#uploadprogressbar').fadeIn();
+			});
+			fileupload.on('fileuploadprogress', function(e, data) {
+				OC.Upload.logStatus('progress handle fileuploadprogress', e, data);
+				//TODO progressbar in row
+			});
+			fileupload.on('fileuploadprogressall', function(e, data) {
+				OC.Upload.logStatus('progress handle fileuploadprogressall', e, data);
+				var progress = (data.loaded / data.total) * 100;
+				$('#uploadprogressbar').progressbar('value', progress);
+			});
+			fileupload.on('fileuploaddone', function(e, data) {
+				OC.Upload.logStatus('progress handle fileuploaddone', e, data);
+				//if user pressed cancel hide upload chrome
+				//if (! OC.Upload.isProcessing()) {
+				//	$('#uploadprogresswrapper input.stop').fadeOut();
+				//	$('#uploadprogressbar').fadeOut();
+				//}
+			});
+			fileupload.on('fileuploadstop', function(e, data) {
+				OC.Upload.logStatus('progress handle fileuploadstop', e, data);
+				//if(OC.Upload.progressBytes()>=100) { //only hide controls when all selections have ended uploading
+
+					//OC.Upload.cancelUploads(); //cleanup
+
+				//	if(data.dataType !== 'iframe') {
+				//		$('#uploadprogresswrapper input.stop').hide();
+				//	}
+
+				//	$('#uploadprogressbar').progressbar('value', 100);
+				//	$('#uploadprogressbar').fadeOut();
+				//}
+				//if user pressed cancel hide upload chrome
+				//if (! OC.Upload.isProcessing()) {
+				//	$('#uploadprogresswrapper input.stop').fadeOut();
+				//	$('#uploadprogressbar').fadeOut();
+				//}
+			});
+			fileupload.on('fileuploadfail', function(e, data) {
+				OC.Upload.logStatus('progress handle fileuploadfail', e, data);
+				//if user pressed cancel hide upload progress bar and cancel button
+				if (data.errorThrown === 'abort') {
+					$('#uploadprogresswrapper input.stop').fadeOut();
+					$('#uploadprogressbar').fadeOut();
+				}
+			});
+		
+		} else {
+			console.log('skipping file progress because your browser is broken');
+		}
 	}
 	$.assocArraySize = function(obj) {
 		// http://stackoverflow.com/a/6700/11236
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 31e2a8300e..4f20d1940a 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -517,7 +517,7 @@ $(document).ready(function(){
 	var file_upload_start = $('#file_upload_start');
 	
 	file_upload_start.on('fileuploaddrop', function(e, data) {
-		OC.Upload.logStatus('fileuploaddrop', e, data);
+		OC.Upload.logStatus('filelist handle fileuploaddrop', e, data);
 		
 		var dropTarget = $(e.originalEvent.target).closest('tr');
 		if(dropTarget && dropTarget.data('type') === 'dir') { // drag&drop upload to folder
@@ -556,7 +556,7 @@ $(document).ready(function(){
 		
 	});
 	file_upload_start.on('fileuploadadd', function(e, data) {
-		OC.Upload.logStatus('fileuploadadd', e, data);
+		OC.Upload.logStatus('filelist handle fileuploadadd', e, data);
 
 		// lookup selection for dir
 		var selection = OC.Upload.getSelection(data.originalFiles);
@@ -592,10 +592,10 @@ $(document).ready(function(){
 		
 	});
 	file_upload_start.on('fileuploadstart', function(e, data) {
-		OC.Upload.logStatus('fileuploadstart', e, data);
+		OC.Upload.logStatus('filelist handle fileuploadstart', e, data);
 	});
 	file_upload_start.on('fileuploaddone', function(e, data) {
-		OC.Upload.logStatus('fileuploaddone', e, data);
+		OC.Upload.logStatus('filelist handle fileuploaddone', e, data);
 		
 		var response;
 		if (typeof data.result === 'string') {
@@ -672,22 +672,22 @@ $(document).ready(function(){
 	});
 	
 	file_upload_start.on('fileuploadalways', function(e, data) {
-		OC.Upload.logStatus('fileuploadalways', e, data);
+		OC.Upload.logStatus('filelist handle fileuploadalways', e, data);
 	});
 	file_upload_start.on('fileuploadsend', function(e, data) {
-		OC.Upload.logStatus('fileuploadsend', e, data);
+		OC.Upload.logStatus('filelist handle fileuploadsend', e, data);
 		
 		// TODOD add vis
 		//data.context.element = 
 	});
 	file_upload_start.on('fileuploadprogress', function(e, data) {
-		OC.Upload.logStatus('fileuploadprogress', e, data);
+		OC.Upload.logStatus('filelist handle fileuploadprogress', e, data);
 	});
 	file_upload_start.on('fileuploadprogressall', function(e, data) {
-		OC.Upload.logStatus('fileuploadprogressall', e, data);
+		OC.Upload.logStatus('filelist handle fileuploadprogressall', e, data);
 	});
 	file_upload_start.on('fileuploadstop', function(e, data) {
-		OC.Upload.logStatus('fileuploadstop', e, data);
+		OC.Upload.logStatus('filelist handle fileuploadstop', e, data);
 		
 		//if user pressed cancel hide upload chrome
 		if (! OC.Upload.isProcessing()) {
@@ -700,7 +700,7 @@ $(document).ready(function(){
 		}
 	});
 	file_upload_start.on('fileuploadfail', function(e, data) {
-		OC.Upload.logStatus('fileuploadfail', e, data);
+		OC.Upload.logStatus('filelist handle fileuploadfail', e, data);
 		
 		//if user pressed cancel hide upload chrome
 		if (data.errorThrown === 'abort') {
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 9a725fc207..4a6c9c7890 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -1,6 +1,6 @@
 Files={
 	updateMaxUploadFilesize:function(response) {
-		if(response == undefined) {
+		if(response === undefined) {
 			return;
 		}
 		if(response.data !== undefined && response.data.uploadMaxFilesize !== undefined) {
@@ -9,7 +9,7 @@ Files={
 			$('#usedSpacePercent').val(response.data.usedSpacePercent);
 			Files.displayStorageWarnings();
 		}
-		if(response[0] == undefined) {
+		if(response[0] === undefined) {
 			return;
 		}
 		if(response[0].uploadMaxFilesize !== undefined) {
@@ -25,7 +25,7 @@ Files={
 			OC.Notification.show(t('files', '\'.\' is an invalid file name.'));
 			return false;
 		}
-		if (name.length == 0) {
+		if (name.length === 0) {
 			OC.Notification.show(t('files', 'File name cannot be empty.'));
 			return false;
 		}
@@ -33,7 +33,7 @@ Files={
 		// check for invalid characters
 		var invalid_characters = ['\\', '/', '<', '>', ':', '"', '|', '?', '*'];
 		for (var i = 0; i < invalid_characters.length; i++) {
-			if (name.indexOf(invalid_characters[i]) != -1) {
+			if (name.indexOf(invalid_characters[i]) !== -1) {
 				OC.Notification.show(t('files', "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed."));
 				return false;
 			}
@@ -127,7 +127,7 @@ $(document).ready(function() {
 				var rows = $(this).parent().parent().parent().children('tr');
 				for (var i = start; i < end; i++) {
 					$(rows).each(function(index) {
-						if (index == i) {
+						if (index === i) {
 							var checkbox = $(this).children().children('input:checkbox');
 							$(checkbox).attr('checked', 'checked');
 							$(checkbox).parent().parent().addClass('selected');
@@ -145,7 +145,7 @@ $(document).ready(function() {
 				$(checkbox).attr('checked', 'checked');
 				$(checkbox).parent().parent().toggleClass('selected');
 				var selectedCount=$('td.filename input:checkbox:checked').length;
-				if (selectedCount == $('td.filename input:checkbox').length) {
+				if (selectedCount === $('td.filename input:checkbox').length) {
 					$('#select_all').attr('checked', 'checked');
 				}
 			}
@@ -192,7 +192,7 @@ $(document).ready(function() {
 			var rows = $(this).parent().parent().parent().children('tr');
 			for (var i = start; i < end; i++) {
 				$(rows).each(function(index) {
-					if (index == i) {
+					if (index === i) {
 						var checkbox = $(this).children().children('input:checkbox');
 						$(checkbox).attr('checked', 'checked');
 						$(checkbox).parent().parent().addClass('selected');
@@ -205,7 +205,7 @@ $(document).ready(function() {
 		if(!$(this).attr('checked')){
 			$('#select_all').attr('checked',false);
 		}else{
-			if(selectedCount==$('td.filename input:checkbox').length){
+			if(selectedCount === $('td.filename input:checkbox').length){
 				$('#select_all').attr('checked',true);
 			}
 		}
@@ -262,9 +262,9 @@ $(document).ready(function() {
 
 	function resizeBreadcrumbs(firstRun) {
 		var width = $(this).width();
-		if (width != lastWidth) {
+		if (width !== lastWidth) {
 			if ((width < lastWidth || firstRun) && width < breadcrumbsWidth) {
-				if (hiddenBreadcrumbs == 0) {
+				if (hiddenBreadcrumbs === 0) {
 					breadcrumbsWidth -= $(breadcrumbs[1]).get(0).offsetWidth;
 					$(breadcrumbs[1]).find('a').hide();
 					$(breadcrumbs[1]).append('<span>...</span>');
@@ -276,12 +276,12 @@ $(document).ready(function() {
 					breadcrumbsWidth -= $(breadcrumbs[i]).get(0).offsetWidth;
 					$(breadcrumbs[i]).hide();
 					hiddenBreadcrumbs = i;
-					i++
+					i++;
 				}
 			} else if (width > lastWidth && hiddenBreadcrumbs > 0) {
 				var i = hiddenBreadcrumbs;
 				while (width > breadcrumbsWidth && i > 0) {
-					if (hiddenBreadcrumbs == 1) {
+					if (hiddenBreadcrumbs === 1) {
 						breadcrumbsWidth -= $(breadcrumbs[1]).get(0).offsetWidth;
 						$(breadcrumbs[1]).find('span').remove();
 						$(breadcrumbs[1]).find('a').show();
@@ -382,7 +382,7 @@ scanFiles.scanning=false;
 function boolOperationFinished(data, callback) {
 	result = jQuery.parseJSON(data.responseText);
 	Files.updateMaxUploadFilesize(result);
-	if(result.status == 'success'){
+	if(result.status === 'success'){
 		callback.call();
 	} else {
 		alert(result.data.message);
@@ -436,7 +436,7 @@ var createDragShadow = function(event){
 	});
 
 	return dragshadow;
-}
+};
 
 //options for file drag/drop
 var dragOptions={
@@ -446,7 +446,7 @@ var dragOptions={
 	stop: function(event, ui) {
 		$('#fileList tr td.filename').addClass('ui-draggable');
 	}
-}
+};
 // sane browsers support using the distance option
 if ( $('html.ie').length === 0) {
 	dragOptions['distance'] = 20;
@@ -489,7 +489,7 @@ var folderDropOptions={
 		});
 	},
 	tolerance: 'pointer'
-}
+};
 
 var crumbDropOptions={
 	drop: function( event, ui ) {
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index 5ed2441726..08afbfd42f 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -257,13 +257,7 @@ var OCdialogs = {
 					//TODO add to same size collection?
 				}
 				
-				//add checkbox toggling actions
-				conflict.find('.replacement,.original').on('click', function(){
-					var checkbox = $(this).find('input[type="checkbox"]');
-					checkbox.prop('checkbox', !checkbox.prop('checkbox'));
-				}).find('input[type="checkbox"]').prop('checkbox',false);
-				
-				//TODO show skip action for files with same size and mtime
+				//TODO show skip action for files with same size and mtime in bottom row
 				
 		};
 		var selection = controller.getSelection(data.originalFiles);
@@ -345,11 +339,14 @@ var OCdialogs = {
 						var checkboxes = $(dialog_id).find('.conflict:not(.template) .original input[type="checkbox"]');
 						checkboxes.prop('checked', $(this).prop('checked'));
 					});
-					
 					$(dialog_id).find('.conflicts').on('click', '.replacement,.original', function() {
 						var checkbox = $(this).find('input[type="checkbox"]');
 						checkbox.prop('checked', !checkbox.prop('checked'));
 					});
+					$(dialog_id).find('.conflicts').on('click', 'input[type="checkbox"]', function() {
+						var checkbox = $(this);
+						checkbox.prop('checked', !checkbox.prop('checked'));
+					});
 					
 					//update counters
 					$(dialog_id).on('click', '.replacement,.allnewfiles', function() {
-- 
GitLab


From 8a7e26b268b8f4be32bb0b54527a83cadbfc28fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Thu, 5 Sep 2013 17:46:19 +0200
Subject: [PATCH 040/248] cleanup dead code

---
 apps/files/js/file-upload.js | 68 ++++++++++++++++++++----------------
 core/js/oc-dialogs.js        |  7 ++--
 2 files changed, 42 insertions(+), 33 deletions(-)

diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index efd3c0d59e..9af09fcdd9 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -157,25 +157,6 @@ OC.Upload = {
 		}
 		return this._selections[originalFiles.selectionKey];
 	},
-	deleteSelection:function(selectionKey) {
-		if (this._selections[selectionKey]) {
-			jQuery.each(this._selections[selectionKey].uploads, function(i, upload) {
-				upload.abort();
-			});
-			delete this._selections[selectionKey];
-		} else {
-			console.log('OC.Upload: selection ' + selectionKey + ' does not exist');
-		}
-	},
-	deleteSelectionUpload:function(selection, filename) {
-		if(selection.uploads[filename]) {
-			selection.uploads[filename].abort();
-			return true;
-		} else {
-			console.log('OC.Upload: selection ' + selection.selectionKey + ' does not contain upload for ' + filename);
-		}
-		return false;
-	},
 	cancelUpload:function(dir, filename) {
 		var self = this;
 		var deleted = false;
@@ -244,24 +225,48 @@ OC.Upload = {
 		});
 		return total;
 	},
-	onCancel:function(data){
+	onCancel:function(data) {
 		//TODO cancel all uploads of this selection
 		
 		var selection = this.getSelection(data.originalFiles);
 		OC.Upload.deleteSelection(selection.selectionKey);
 		//FIXME hide progressbar
 	},
+	onContinue:function(conflicts) {
+		var self = this;
+		//iterate over all conflicts
+		jQuery.each(conflicts, function (i, conflict) {
+			conflict = $(conflict);
+			var keepOriginal = conflict.find('.original input[type="checkbox"]:checked').length === 1;
+			var keepReplacement = conflict.find('.replacement input[type="checkbox"]:checked').length === 1;
+			if (keepOriginal && keepReplacement) {
+				// when both selected -> autorename
+				self.onAutorename(conflict.data('data'));
+			} else if (keepReplacement) {
+				// when only replacement selected -> overwrite
+				self.onReplace(conflict.data('data'));
+			} else {
+				// when only original seleted -> skip
+				// when none selected -> skip
+				self.onSkip(conflict.data('data'));
+			}
+		});
+	},
 	onSkip:function(data){
-		var selection = this.getSelection(data.originalFiles);
-		selection.loadedBytes += data.loaded;
-		this.nextUpload();
+		OC.Upload.logStatus('skip', null, data);
+		//var selection = this.getSelection(data.originalFiles);
+		//selection.loadedBytes += data.loaded;
+		//this.nextUpload();
+		//TODO trigger skip? what about progress?
 	},
 	onReplace:function(data){
+		OC.Upload.logStatus('replace', null, data);
 		data.data.append('replace', true);
 		data.submit();
 	},
-	onRename:function(data, newName){
-		data.data.append('newname', newName);
+	onAutorename:function(data){
+		OC.Upload.logStatus('autorename', null, data);
+		data.data.append('autorename', true);
 		data.submit();
 	},
 	logStatus:function(caption, e, data) {
@@ -446,16 +451,19 @@ $(document).ready(function() {
 			var result=$.parseJSON(response);
 			//var selection = OC.Upload.getSelection(data.originalFiles);
 
-			if(typeof result[0] !== 'undefined'
-				&& result[0].status === 'existserror'
-			) {
+			if(typeof result[0] === 'undefined') {
+				data.textStatus = 'servererror';
+				data.errorThrown = t('files', 'Could not get result from server.');
+				var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
+				fu._trigger('fail', e, data);
+			} else if (result[0].status === 'existserror') {
 				//show "file already exists" dialog
 				var original = result[0];
 				var replacement = data.files[0];
 				var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
 				OC.dialogs.fileexists(data, original, replacement, OC.Upload, fu);
-			} else {
-				OC.Upload.deleteSelectionUpload(selection, data.files[0].name);
+			} else if (result[0].status !== 'success') {
+				delete data.jqXHR;
 				data.textStatus = 'servererror';
 				data.errorThrown = t('files', result.data.message);
 				var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index 08afbfd42f..77af1a2dde 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -224,6 +224,8 @@ var OCdialogs = {
 			
 				var conflict = conflicts.find('.conflict.template').clone();
 				
+				conflict.data('data',data);
+				
 				conflict.find('.filename').text(original.name);
 				conflict.find('.original .size').text(humanFileSize(original.size));
 				conflict.find('.original .mtime').text(formatDate(original.mtime*1000));
@@ -312,9 +314,8 @@ var OCdialogs = {
 							classes: 'continue',
 							click: function(){
 								self._fileexistsshown = false;
-								if ( typeof controller.onRename !== 'undefined') {
-									//TODO use autorename when repeat is checked
-									controller.onRename(data, $(dialog_id + ' #newname').val());
+								if ( typeof controller.onContinue !== 'undefined') {
+									controller.onContinue($(dialog_id + ' .conflict:not(.template)'));
 								}
 								$(dialog_id).ocdialog('close');
 							}
-- 
GitLab


From a21376480df10fdb96685d0eb2e663d494aed16f Mon Sep 17 00:00:00 2001
From: kondou <kondou@ts.unde.re>
Date: Fri, 6 Sep 2013 08:05:07 +0200
Subject: [PATCH 041/248] Split personal and user-mgmt password change logic

---
 settings/ajax/changepassword.php         | 36 ++++++++++++------------
 settings/ajax/changepersonalpassword.php | 24 ++++++++++++++++
 settings/js/personal.js                  | 11 +++++---
 settings/js/users.js                     |  2 +-
 settings/routes.php                      |  2 ++
 5 files changed, 52 insertions(+), 23 deletions(-)
 create mode 100644 settings/ajax/changepersonalpassword.php

diff --git a/settings/ajax/changepassword.php b/settings/ajax/changepassword.php
index 47ceb5ab87..41f0fa2f2f 100644
--- a/settings/ajax/changepassword.php
+++ b/settings/ajax/changepassword.php
@@ -1,34 +1,34 @@
 <?php
 
-// Check if we are a user
-OCP\JSON::callCheck();
+// Check if we are an user
+OC_JSON::callCheck();
 OC_JSON::checkLoggedIn();
 
 // Manually load apps to ensure hooks work correctly (workaround for issue 1503)
-OC_APP::loadApps();
+OC_App::loadApps();
 
-$username = isset($_POST['username']) ? $_POST['username'] : OC_User::getUser();
-$password = isset($_POST['personal-password']) ? $_POST['personal-password'] : null;
-$oldPassword = isset($_POST['oldpassword']) ? $_POST['oldpassword'] : '';
+if (isset($_POST['username'])) {
+	$username = $_POST['username'];
+} else {
+	$l = new \OC_L10n('settings');
+	OC_JSON::error(array('data' => array('message' => $l->t('No user supplied')) ));
+	exit();
+}
+
+$password = isset($_POST['password']) ? $_POST['password'] : null;
 $recoveryPassword = isset($_POST['recoveryPassword']) ? $_POST['recoveryPassword'] : null;
 
-$userstatus = null;
 if (OC_User::isAdminUser(OC_User::getUser())) {
 	$userstatus = 'admin';
-}
-if (OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username)) {
+} elseif (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')));
+} else {
+	$l = new \OC_L10n('settings');
+	OC_JSON::error(array('data' => array('message' => $l->t('Authentication error')) ));
 	exit();
 }
 
-if (\OCP\App::isEnabled('files_encryption') && $userstatus !== 'user') {
+if (\OC_App::isEnabled('files_encryption')) {
 	//handle the recovery case
 	$util = new \OCA\Encryption\Util(new \OC_FilesystemView('/'), $username);
 	$recoveryAdminEnabled = OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled');
@@ -55,7 +55,7 @@ if (\OCP\App::isEnabled('files_encryption') && $userstatus !== 'user') {
 	}
 
 	}
-} else { // if user changes his own password or if encryption is disabled, proceed
+} else { // if encryption is disabled, proceed
 	if (!is_null($password) && OC_User::setPassword($username, $password)) {
 		OC_JSON::success(array('data' => array('username' => $username)));
 	} else {
diff --git a/settings/ajax/changepersonalpassword.php b/settings/ajax/changepersonalpassword.php
new file mode 100644
index 0000000000..6c3f5d599a
--- /dev/null
+++ b/settings/ajax/changepersonalpassword.php
@@ -0,0 +1,24 @@
+<?php
+
+// Check if we are an user
+OC_JSON::callCheck();
+OC_JSON::checkLoggedIn();
+
+// Manually load apps to ensure hooks work correctly (workaround for issue 1503)
+OC_App::loadApps();
+
+$username = OC_User::getUser();
+$password = isset($_POST['personal-password']) ? $_POST['personal-password'] : null;
+$oldPassword = isset($_POST['oldpassword']) ? $_POST['oldpassword'] : '';
+$recoveryPassword = isset($_POST['recoveryPassword']) ? $_POST['recoveryPassword'] : null;
+
+if (!OC_User::checkPassword($username, $oldPassword)) {
+	$l = new \OC_L10n('settings');
+	OC_JSON::error(array("data" => array("message" => $l->t("Wrong password")) ));
+	exit();
+}
+if (!is_null($password) && OC_User::setPassword($username, $password)) {
+	OC_JSON::success();
+} else {
+	OC_JSON::error();
+}
diff --git a/settings/js/personal.js b/settings/js/personal.js
index 8ad26c086b..8cf4754f79 100644
--- a/settings/js/personal.js
+++ b/settings/js/personal.js
@@ -52,14 +52,17 @@ $(document).ready(function(){
 			$('#passwordchanged').hide();
 			$('#passworderror').hide();
 			// Ajax foo
-			$.post( 'ajax/changepassword.php', post, function(data){
+			$.post(OC.Router.generate('settings_ajax_changepersonalpassword'), post, function(data){
 				if( data.status === "success" ){
 					$('#pass1').val('');
 					$('#pass2').val('');
 					$('#passwordchanged').show();
-				}
-				else{
-					$('#passworderror').html( data.data.message );
+				} else{
+					if (typeof(data.data) !== "undefined") {
+						$('#passworderror').html(data.data.message);
+					} else {
+						$('#passworderror').html(t('Unable to change password'));
+					}
 					$('#passworderror').show();
 				}
 			});
diff --git a/settings/js/users.js b/settings/js/users.js
index ab08d7099c..e3e749a312 100644
--- a/settings/js/users.js
+++ b/settings/js/users.js
@@ -361,7 +361,7 @@ $(document).ready(function () {
 				if ($(this).val().length > 0) {
 					var recoveryPasswordVal = $('input:password[id="recoveryPassword"]').val();
 					$.post(
-						OC.filePath('settings', 'ajax', 'changepassword.php'),
+						OC.Router.generate('settings_ajax_changepassword'),
 						{username: uid, password: $(this).val(), recoveryPassword: recoveryPasswordVal},
 						function (result) {
 							if (result.status != 'success') {
diff --git a/settings/routes.php b/settings/routes.php
index 73ee70d1d5..af1c70ea44 100644
--- a/settings/routes.php
+++ b/settings/routes.php
@@ -39,6 +39,8 @@ $this->create('settings_ajax_removegroup', '/settings/ajax/removegroup.php')
 	->actionInclude('settings/ajax/removegroup.php');
 $this->create('settings_ajax_changepassword', '/settings/ajax/changepassword.php')
 	->actionInclude('settings/ajax/changepassword.php');
+$this->create('settings_ajax_changepersonalpassword', '/settings/ajax/changepersonalpassword.php')
+        ->actionInclude('settings/ajax/changepersonalpassword.php');
 $this->create('settings_ajax_changedisplayname', '/settings/ajax/changedisplayname.php')
 	->actionInclude('settings/ajax/changedisplayname.php');
 // personel
-- 
GitLab


From 02d14aee17f4d433c28be389cfb1271c68529328 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Fri, 6 Sep 2013 16:50:45 +0200
Subject: [PATCH 042/248] completely remove dialog on cancel/continue

---
 core/js/oc-dialogs.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index 77af1a2dde..fd77f5998b 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -306,7 +306,7 @@ var OCdialogs = {
 								if ( typeof controller.onCancel !== 'undefined') {
 									controller.onCancel(data);
 								}
-								$(dialog_id).ocdialog('close');
+								$(dialog_id).ocdialog('destroy').remove();
 							}
 						},
 						{
@@ -318,6 +318,7 @@ var OCdialogs = {
 									controller.onContinue($(dialog_id + ' .conflict:not(.template)'));
 								}
 								$(dialog_id).ocdialog('close');
+								$(dialog_id).ocdialog('destroy').remove();
 							}
 						}];
 
-- 
GitLab


From 4aa84047fe5c499c56b723006c8acaf5891c5df4 Mon Sep 17 00:00:00 2001
From: kondou <kondou@ts.unde.re>
Date: Fri, 6 Sep 2013 17:05:10 +0200
Subject: [PATCH 043/248] Remove $recoveryPassword from changepersonalpassword
 & fix indent

---
 settings/ajax/changepassword.php         | 20 ++++++++++++--------
 settings/ajax/changepersonalpassword.php |  1 -
 2 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/settings/ajax/changepassword.php b/settings/ajax/changepassword.php
index 41f0fa2f2f..67b23d2a19 100644
--- a/settings/ajax/changepassword.php
+++ b/settings/ajax/changepassword.php
@@ -45,14 +45,18 @@ if (\OC_App::isEnabled('files_encryption')) {
 	} elseif ($recoveryEnabledForUser && ! $validRecoveryPassword) {
 		OC_JSON::error(array('data' => array('message' => 'Wrong admin recovery password. Please check the password and try again.')));
 	} else { // now we know that everything is fine regarding the recovery password, let's try to change the password
-	$result = OC_User::setPassword($username, $password, $recoveryPassword);
-	if (!$result && $recoveryPasswordSupported) {
-		OC_JSON::error(array("data" => array( "message" => "Back-end doesn't support password change, but the users encryption key was successfully updated." )));
-	} elseif (!$result && !$recoveryPasswordSupported) {
-		OC_JSON::error(array("data" => array( "message" => "Unable to change password" )));
-	} else {
-		OC_JSON::success(array("data" => array( "username" => $username )));
-	}
+		$result = OC_User::setPassword($username, $password, $recoveryPassword);
+		if (!$result && $recoveryPasswordSupported) {
+			OC_JSON::error(array(
+				"data" => array(
+					"message" => "Back-end doesn't support password change, but the users encryption key was successfully updated." 
+				)
+			));
+		} elseif (!$result && !$recoveryPasswordSupported) {
+			OC_JSON::error(array("data" => array( "message" => "Unable to change password" )));
+		} else {
+			OC_JSON::success(array("data" => array( "username" => $username )));
+		}
 
 	}
 } else { // if encryption is disabled, proceed
diff --git a/settings/ajax/changepersonalpassword.php b/settings/ajax/changepersonalpassword.php
index 6c3f5d599a..44ede3f9cc 100644
--- a/settings/ajax/changepersonalpassword.php
+++ b/settings/ajax/changepersonalpassword.php
@@ -10,7 +10,6 @@ OC_App::loadApps();
 $username = OC_User::getUser();
 $password = isset($_POST['personal-password']) ? $_POST['personal-password'] : null;
 $oldPassword = isset($_POST['oldpassword']) ? $_POST['oldpassword'] : '';
-$recoveryPassword = isset($_POST['recoveryPassword']) ? $_POST['recoveryPassword'] : null;
 
 if (!OC_User::checkPassword($username, $oldPassword)) {
 	$l = new \OC_L10n('settings');
-- 
GitLab


From 238d92b11cab31061fb5766b9f75d4772d48283e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Fri, 6 Sep 2013 17:53:58 +0200
Subject: [PATCH 044/248] refactor replace and autorename resolution in
 upload.php

---
 apps/files/ajax/upload.php   | 72 +++++++++++++++++-------------------
 apps/files/js/file-upload.js |  4 +-
 2 files changed, 35 insertions(+), 41 deletions(-)

diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index ec313030ed..60c2454b29 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -78,7 +78,7 @@ foreach ($_FILES['files']['error'] as $error) {
 }
 $files = $_FILES['files'];
 
-$error = '';
+$error = false;
 
 $maxUploadFileSize = $storageStats['uploadMaxFilesize'];
 $maxHumanFileSize = OCP\Util::humanFileSize($maxUploadFileSize);
@@ -99,57 +99,51 @@ if (strpos($dir, '..') === false) {
 	$fileCount = count($files['name']);
 	for ($i = 0; $i < $fileCount; $i++) {
 		// $path needs to be normalized - this failed within drag'n'drop upload to a sub-folder
-		if (isset($_POST['newname'])) {
-			$newName = $_POST['newname'];
+		if (isset($_POST['resolution']) && $_POST['resolution']==='autorename') {
+			// append a number in brackets like 'filename (2).ext'
+			$target = OCP\Files::buildNotExistingFileName(stripslashes($dir), $files['name'][$i]);
 		} else {
-			$newName = $files['name'][$i];
+			$target = \OC\Files\Filesystem::normalizePath(stripslashes($dir).'/'.$files['name'][$i]);
 		}
-		if (isset($_POST['replace']) && $_POST['replace'] == true) {
-			$replace = true;
+		
+		if ( ! \OC\Files\Filesystem::file_exists($target)
+			|| (isset($_POST['resolution']) && $_POST['resolution']==='replace')
+		) {
+			// upload and overwrite file
+			if (is_uploaded_file($files['tmp_name'][$i]) and \OC\Files\Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) {
+				$status = 'success';
+
+				// updated max file size after upload
+				$storageStats = \OCA\files\lib\Helper::buildFileStorageStatistics($dir);
+				
+			} else {
+				$error = $l->t('Upload failed. Could not find uploaded file');
+			}
+			
 		} else {
-			$replace = false;
+			// file already exists
+			$status = 'existserror';
 		}
-		$target = \OC\Files\Filesystem::normalizePath(stripslashes($dir).'/'.$newName);
-		if ( ! $replace && \OC\Files\Filesystem::file_exists($target)) {
-			$meta = \OC\Files\Filesystem::getFileInfo($target);
-			$result[] = array('status' => 'existserror',
-				'type' => $meta['mimetype'],
+	}
+	if ($error === false) {
+		$meta = \OC\Files\Filesystem::getFileInfo($target);
+		if ($meta === false) {
+			$error = $l->t('Upload failed. Could not get file info.');
+		} else {
+			$result[] = array('status' => $status,
+				'mime' => $meta['mimetype'],
 				'mtime' => $meta['mtime'],
 				'size' => $meta['size'],
 				'id' => $meta['fileid'],
 				'name' => basename($target),
-				'originalname' => $newName,
+				'originalname' => $files['tmp_name'][$i],
 				'uploadMaxFilesize' => $maxUploadFileSize,
 				'maxHumanFilesize' => $maxHumanFileSize
 			);
-		} else {
-			//$target = OCP\Files::buildNotExistingFileName(stripslashes($dir), $files['name'][$i]);
-			if (is_uploaded_file($files['tmp_name'][$i]) and \OC\Files\Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) {
-				$meta = \OC\Files\Filesystem::getFileInfo($target);
-
-				// updated max file size after upload
-				$storageStats = \OCA\files\lib\Helper::buildFileStorageStatistics($dir);
-
-				if ($meta === false) {
-					OCP\JSON::error(array('data' => array_merge(array('message' => $l->t('Upload failed')), $storageStats)));
-					exit();
-				} else {
-					$result[] = array('status' => 'success',
-						'mime' => $meta['mimetype'],
-						'mtime' => $meta['mtime'],
-						'size' => $meta['size'],
-						'id' => $meta['fileid'],
-						'name' => basename($target),
-						'originalname' => $newName,
-						'uploadMaxFilesize' => $maxUploadFileSize,
-						'maxHumanFilesize' => $maxHumanFileSize
-					);
-				}
-			}
+			OCP\JSON::encodedPrint($result);
+			exit();
 		}
 	}
-	OCP\JSON::encodedPrint($result);
-	exit();
 } else {
 	$error = $l->t('Invalid directory.');
 }
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 9af09fcdd9..3fcda22e53 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -261,12 +261,12 @@ OC.Upload = {
 	},
 	onReplace:function(data){
 		OC.Upload.logStatus('replace', null, data);
-		data.data.append('replace', true);
+		data.data.append('resolution', 'replace');
 		data.submit();
 	},
 	onAutorename:function(data){
 		OC.Upload.logStatus('autorename', null, data);
-		data.data.append('autorename', true);
+		data.data.append('resolution', 'autorename');
 		data.submit();
 	},
 	logStatus:function(caption, e, data) {
-- 
GitLab


From e2c0fe829698de9f89bf2cc3f854942f44bffc69 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Fri, 6 Sep 2013 18:16:40 +0200
Subject: [PATCH 045/248] fix upload of multiple files

---
 apps/files/ajax/upload.php   | 61 ++++++++++++++++++++++--------------
 apps/files/js/file-upload.js |  4 +--
 2 files changed, 40 insertions(+), 25 deletions(-)

diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index 60c2454b29..12724c0c5b 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -111,41 +111,56 @@ if (strpos($dir, '..') === false) {
 		) {
 			// upload and overwrite file
 			if (is_uploaded_file($files['tmp_name'][$i]) and \OC\Files\Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) {
-				$status = 'success';
-
+				
 				// updated max file size after upload
 				$storageStats = \OCA\files\lib\Helper::buildFileStorageStatistics($dir);
 				
+				$meta = \OC\Files\Filesystem::getFileInfo($target);
+				if ($meta === false) {
+					$error = $l->t('Upload failed. Could not get file info.');
+				} else {
+					$result[] = array('status' => 'success',
+						'mime' => $meta['mimetype'],
+						'mtime' => $meta['mtime'],
+						'size' => $meta['size'],
+						'id' => $meta['fileid'],
+						'name' => basename($target),
+						'originalname' => $files['tmp_name'][$i],
+						'uploadMaxFilesize' => $maxUploadFileSize,
+						'maxHumanFilesize' => $maxHumanFileSize
+					);
+				}
+				
 			} else {
 				$error = $l->t('Upload failed. Could not find uploaded file');
 			}
 			
 		} else {
 			// file already exists
-			$status = 'existserror';
-		}
-	}
-	if ($error === false) {
-		$meta = \OC\Files\Filesystem::getFileInfo($target);
-		if ($meta === false) {
-			$error = $l->t('Upload failed. Could not get file info.');
-		} else {
-			$result[] = array('status' => $status,
-				'mime' => $meta['mimetype'],
-				'mtime' => $meta['mtime'],
-				'size' => $meta['size'],
-				'id' => $meta['fileid'],
-				'name' => basename($target),
-				'originalname' => $files['tmp_name'][$i],
-				'uploadMaxFilesize' => $maxUploadFileSize,
-				'maxHumanFilesize' => $maxHumanFileSize
-			);
-			OCP\JSON::encodedPrint($result);
-			exit();
+			$meta = \OC\Files\Filesystem::getFileInfo($target);
+			if ($meta === false) {
+				$error = $l->t('Upload failed. Could not get file info.');
+			} else {
+				$result[] = array('status' => 'existserror',
+					'mime' => $meta['mimetype'],
+					'mtime' => $meta['mtime'],
+					'size' => $meta['size'],
+					'id' => $meta['fileid'],
+					'name' => basename($target),
+					'originalname' => $files['tmp_name'][$i],
+					'uploadMaxFilesize' => $maxUploadFileSize,
+					'maxHumanFilesize' => $maxHumanFileSize
+				);
+			}
 		}
 	}
 } else {
 	$error = $l->t('Invalid directory.');
 }
 
-OCP\JSON::error(array('data' => array_merge(array('message' => $error), $storageStats)));
+if ($error === false) {
+	OCP\JSON::encodedPrint($result);
+	exit();
+} else {
+	OCP\JSON::error(array('data' => array_merge(array('message' => $error), $storageStats)));
+}
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 3fcda22e53..4f93403baf 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -536,8 +536,8 @@ $(document).ready(function() {
 				//}
 				//if user pressed cancel hide upload chrome
 				//if (! OC.Upload.isProcessing()) {
-				//	$('#uploadprogresswrapper input.stop').fadeOut();
-				//	$('#uploadprogressbar').fadeOut();
+				$('#uploadprogresswrapper input.stop').fadeOut();
+				$('#uploadprogressbar').fadeOut();
 				//}
 			});
 			fileupload.on('fileuploadfail', function(e, data) {
-- 
GitLab


From 796e137e82c887da8e67d2ad06b141742f50b98a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Fri, 6 Sep 2013 18:51:27 +0200
Subject: [PATCH 046/248] fix upload to folder

---
 apps/files/js/filelist.js | 19 +++----------------
 1 file changed, 3 insertions(+), 16 deletions(-)

diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 4f20d1940a..1bb9672f96 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -522,20 +522,7 @@ $(document).ready(function(){
 		var dropTarget = $(e.originalEvent.target).closest('tr');
 		if(dropTarget && dropTarget.data('type') === 'dir') { // drag&drop upload to folder
 			
-			// lookup selection for dir
-			var selection = OC.Upload.getSelection(data.files);
-			
-			// remember drop target
-			selection.dropTarget = dropTarget;
-			
-			selection.dir = dropTarget.data('file');
-			if (selection.dir !== '/') {
-				if ($('#dir').val() === '/') {
-					selection.dir = '/' + selection.dir;
-				} else {
-					selection.dir = $('#dir').val() + '/' + selection.dir;
-				}
-			}
+			var dir = dropTarget.data('file');
 			
 			// update folder in form
 			data.formData = function(form) {
@@ -545,9 +532,9 @@ $(document).ready(function(){
 				// array index 2 contains the directory
 				var parentDir = formArray[2]['value'];
 				if (parentDir === '/') {
-					formArray[2]['value'] += selection.dir;
+					formArray[2]['value'] += dir;
 				} else {
-					formArray[2]['value'] += '/' + selection.dir;
+					formArray[2]['value'] += '/' + dir;
 				}
 				
 				return formArray;
-- 
GitLab


From 673e0c01a79927359319ff15411a33f460d85ac5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Fri, 6 Sep 2013 22:40:10 +0200
Subject: [PATCH 047/248] fix page leaving checks

---
 apps/files/js/file-upload.js | 130 +++++++++--------------------------
 apps/files/js/filelist.js    |  21 +++---
 core/js/oc-dialogs.js        |  11 +--
 3 files changed, 52 insertions(+), 110 deletions(-)

diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 4f93403baf..47d1188b51 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -124,43 +124,12 @@ function supportAjaxUploadWithProgress() {
 
 //TODO clean uploads when all progress has completed
 OC.Upload = {
-	/**
-	 * map to lookup the selections for a given directory.
-	 * @type Array
-	 */
-	_selections: {},
-	_selectionCount: 0,
-	/*
-	 * queue which progress tracker to use for the next upload
-	 * @type Array
-	 */
-	_queue: [],
-	queueUpload:function(data) {
-		// add to queue
-		this._queue.push(data); //remember what to upload next
-		if ( ! this.isProcessing() ) {
-			this.startUpload();
-		}
-	},
-	getSelection:function(originalFiles) {
-		if (!originalFiles.selectionKey) {
-			originalFiles.selectionKey = 'selection-' + this._selectionCount++;
-			this._selections[originalFiles.selectionKey] = {
-				selectionKey:originalFiles.selectionKey,
-				files:{},
-				totalBytes:0,
-				loadedBytes:0,
-				currentFile:0,
-				uploads:{},
-				checked:false
-			};
-		}
-		return this._selections[originalFiles.selectionKey];
-	},
+	_uploads: [],
 	cancelUpload:function(dir, filename) {
 		var self = this;
 		var deleted = false;
-		jQuery.each(this._selections, function(i, selection) {
+		//FIXME _selections
+		jQuery.each(this._uploads, function(i, jqXHR) {
 			if (selection.dir === dir && selection.uploads[filename]) {
 				deleted = self.deleteSelectionUpload(selection, filename);
 				return false; // end searching through selections
@@ -168,69 +137,34 @@ OC.Upload = {
 		});
 		return deleted;
 	},
+	deleteUpload:function(data) {
+		delete data.jqXHR;
+	},
 	cancelUploads:function() {
 		console.log('canceling uploads');
-		var self = this;
-		jQuery.each(this._selections,function(i, selection){
-			self.deleteSelection(selection.selectionKey);
+		jQuery.each(this._uploads,function(i, jqXHR){
+			jqXHR.abort();
 		});
-		this._queue = [];
-		this._isProcessing = false;
-	},
-	_isProcessing:false,
-	isProcessing:function(){
-		return this._isProcessing;
+		this._uploads = [];
+		
 	},
-	startUpload:function(){
-		if (this._queue.length > 0) {
-			this._isProcessing = true;
-			this.nextUpload();
-			return true;
-		} else {
-			return false;
+	rememberUpload:function(jqXHR){
+		if (jqXHR) {
+			this._uploads.push(jqXHR);
 		}
 	},
-	nextUpload:function(){
-		if (this._queue.length > 0) {
-			var data = this._queue.pop();
-			var selection = this.getSelection(data.originalFiles);
-			selection.uploads[data.files[0]] = data.submit();
-			
-		} else {
-			//queue is empty, we are done
-			this._isProcessing = false;
-			OC.Upload.cancelUploads();
-		}
-	},
-	progressBytes: function() {
-		var total = 0;
-		var loaded = 0;
-		jQuery.each(this._selections, function (i, selection) {
-			total += selection.totalBytes;
-			loaded += selection.loadedBytes;
-		});
-		return (loaded/total)*100;
-	},
-	loadedBytes: function() {
-		var loaded = 0;
-		jQuery.each(this._selections, function (i, selection) {
-			loaded += selection.loadedBytes;
-		});
-		return loaded;
-	},
-	totalBytes: function() {
-		var total = 0;
-		jQuery.each(this._selections, function (i, selection) {
-			total += selection.totalBytes;
+	isProcessing:function(){
+		var count = 0;
+		
+		jQuery.each(this._uploads,function(i, data){
+			if (data.state() === 'pending') {
+				count++;
+			}
 		});
-		return total;
+		return count > 0;
 	},
 	onCancel:function(data) {
-		//TODO cancel all uploads of this selection
-		
-		var selection = this.getSelection(data.originalFiles);
-		OC.Upload.deleteSelection(selection.selectionKey);
-		//FIXME hide progressbar
+		this.cancelUploads();
 	},
 	onContinue:function(conflicts) {
 		var self = this;
@@ -253,19 +187,16 @@ OC.Upload = {
 		});
 	},
 	onSkip:function(data){
-		OC.Upload.logStatus('skip', null, data);
-		//var selection = this.getSelection(data.originalFiles);
-		//selection.loadedBytes += data.loaded;
-		//this.nextUpload();
-		//TODO trigger skip? what about progress?
+		this.logStatus('skip', null, data);
+		this.deleteUpload(data);
 	},
 	onReplace:function(data){
-		OC.Upload.logStatus('replace', null, data);
+		this.logStatus('replace', null, data);
 		data.data.append('resolution', 'replace');
 		data.submit();
 	},
 	onAutorename:function(data){
-		OC.Upload.logStatus('autorename', null, data);
+		this.logStatus('autorename', null, data);
 		data.data.append('resolution', 'autorename');
 		data.submit();
 	},
@@ -415,6 +346,9 @@ $(document).ready(function() {
 		start: function(e) {
 			OC.Upload.logStatus('start', e, null);
 		},
+		submit: function (e, data) {
+			OC.Upload.rememberUpload(data);
+		},
 		fail: function(e, data) {
 			OC.Upload.logStatus('fail', e, data);
 			if (typeof data.textStatus !== 'undefined' && data.textStatus !== 'success' ) {
@@ -432,6 +366,7 @@ $(document).ready(function() {
 			}
 			//var selection = OC.Upload.getSelection(data.originalFiles);
 			//OC.Upload.deleteSelectionUpload(selection, data.files[0].name);
+			OC.Upload.deleteUpload(data);
 		},
 		/**
 		 * called for every successful upload
@@ -449,8 +384,9 @@ $(document).ready(function() {
 				response = data.result[0].body.innerText;
 			}
 			var result=$.parseJSON(response);
-			//var selection = OC.Upload.getSelection(data.originalFiles);
 
+			delete data.jqXHR;
+				
 			if(typeof result[0] === 'undefined') {
 				data.textStatus = 'servererror';
 				data.errorThrown = t('files', 'Could not get result from server.');
@@ -463,7 +399,7 @@ $(document).ready(function() {
 				var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
 				OC.dialogs.fileexists(data, original, replacement, OC.Upload, fu);
 			} else if (result[0].status !== 'success') {
-				delete data.jqXHR;
+				//delete data.jqXHR;
 				data.textStatus = 'servererror';
 				data.errorThrown = t('files', result.data.message);
 				var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 1bb9672f96..a96f555ac0 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -522,6 +522,9 @@ $(document).ready(function(){
 		var dropTarget = $(e.originalEvent.target).closest('tr');
 		if(dropTarget && dropTarget.data('type') === 'dir') { // drag&drop upload to folder
 			
+			// remember as context
+			data.context = dropTarget;
+			
 			var dir = dropTarget.data('file');
 			
 			// update folder in form
@@ -546,19 +549,15 @@ $(document).ready(function(){
 		OC.Upload.logStatus('filelist handle fileuploadadd', e, data);
 
 		// lookup selection for dir
-		var selection = OC.Upload.getSelection(data.originalFiles);
+		//var selection = OC.Upload.getSelection(data.originalFiles);
 			
 		if(FileList.deleteFiles && FileList.deleteFiles.indexOf(data.files[0].name)!==-1){//finish delete if we are uploading a deleted file
 			FileList.finishDelete(null, true); //delete file before continuing
 		}
 		
 		// add ui visualization to existing folder
-		if(selection.dropTarget && selection.dropTarget.data('type') === 'dir') {
+		if(data.context && data.context.data('type') === 'dir') {
 			// add to existing folder
-			var dirName = selection.dropTarget.data('file');
-
-			// set dir context
-			data.context = $('tr').filterAttr('data-type', 'dir').filterAttr('data-file', dirName);
 
 			// update upload counter ui
 			var uploadtext = data.context.find('.uploadtext');
@@ -578,6 +577,10 @@ $(document).ready(function(){
 		}
 		
 	});
+	file_upload_start.on('fileuploadsend', function(e, data) {
+		OC.Upload.logStatus('filelist handle fileuploadsend', e, data);
+		return true;
+	});
 	file_upload_start.on('fileuploadstart', function(e, data) {
 		OC.Upload.logStatus('filelist handle fileuploadstart', e, data);
 	});
@@ -608,7 +611,7 @@ $(document).ready(function(){
 					var img = OC.imagePath('core', 'filetypes/folder.png');
 					data.context.find('td.filename').attr('style','background-image:url('+img+')');
 					uploadtext.text(translatedText);
-					uploadtext.show();
+					uploadtext.hide();
 				} else {
 					uploadtext.text(translatedText);
 				}
@@ -648,6 +651,7 @@ $(document).ready(function(){
 		}
 		
 		//if user pressed cancel hide upload chrome
+		/*
 		if (! OC.Upload.isProcessing()) {
 			//cleanup uploading to a dir
 			var uploadtext = $('tr .uploadtext');
@@ -656,6 +660,7 @@ $(document).ready(function(){
 			uploadtext.fadeOut();
 			uploadtext.attr('currentUploads', 0);
 		}
+		*/
 	});
 	
 	file_upload_start.on('fileuploadalways', function(e, data) {
@@ -677,7 +682,7 @@ $(document).ready(function(){
 		OC.Upload.logStatus('filelist handle fileuploadstop', e, data);
 		
 		//if user pressed cancel hide upload chrome
-		if (! OC.Upload.isProcessing()) {
+		if (data.errorThrown === 'abort') {
 			//cleanup uploading to a dir
 			var uploadtext = $('tr .uploadtext');
 			var img = OC.imagePath('core', 'filetypes/folder.png');
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index fd77f5998b..bc46079835 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -262,10 +262,10 @@ var OCdialogs = {
 				//TODO show skip action for files with same size and mtime in bottom row
 				
 		};
-		var selection = controller.getSelection(data.originalFiles);
-		if (selection.defaultAction) {
-			controller[selection.defaultAction](data);
-		} else {
+		//var selection = controller.getSelection(data.originalFiles);
+		//if (selection.defaultAction) {
+		//	controller[selection.defaultAction](data);
+		//} else {
 			var dialog_name = 'oc-dialog-fileexists-content';
 			var dialog_id = '#' + dialog_name;
 			if (this._fileexistsshown) {
@@ -306,6 +306,7 @@ var OCdialogs = {
 								if ( typeof controller.onCancel !== 'undefined') {
 									controller.onCancel(data);
 								}
+								$(dialog_id).ocdialog('close');
 								$(dialog_id).ocdialog('destroy').remove();
 							}
 						},
@@ -382,7 +383,7 @@ var OCdialogs = {
 					alert(t('core', 'Error loading file exists template'));
 				});
 			}
-		}
+		//}
 	},
 	_getFilePickerTemplate: function() {
 		var defer = $.Deferred();
-- 
GitLab


From ce035016460d8285d5511e67b389d494eb78c1ce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Fri, 6 Sep 2013 23:44:40 +0200
Subject: [PATCH 048/248] fine ie8 compatability

---
 apps/files/css/files.css     |  4 ++++
 apps/files/js/file-upload.js |  6 +++++-
 core/js/oc-dialogs.js        | 16 ++++++++++------
 3 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index 65aa29052e..ea9c99bb26 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -380,6 +380,10 @@ table.dragshadow td.size {
 	float: left;
 	width: 235px;
 }
+html.lte9 .oc-dialog .fileexists .original {
+	float: left;
+	width: 225px;
+}
 .oc-dialog .fileexists .conflicts {
 	overflow-y:scroll;
 	max-height: 225px;
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 47d1188b51..ead397c569 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -197,7 +197,11 @@ OC.Upload = {
 	},
 	onAutorename:function(data){
 		this.logStatus('autorename', null, data);
-		data.data.append('resolution', 'autorename');
+		if (data.data) {
+			data.data.append('resolution', 'autorename');
+		} else {
+			data.formData.push({name:'resolution',value:'autorename'}); //hack for ie8
+		}
 		data.submit();
 	},
 	logStatus:function(caption, e, data) {
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index bc46079835..82bf49fc3a 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -229,8 +229,11 @@ var OCdialogs = {
 				conflict.find('.filename').text(original.name);
 				conflict.find('.original .size').text(humanFileSize(original.size));
 				conflict.find('.original .mtime').text(formatDate(original.mtime*1000));
-				conflict.find('.replacement .size').text(humanFileSize(replacement.size));
-				conflict.find('.replacement .mtime').text(formatDate(replacement.lastModifiedDate));
+				// ie sucks
+				if (replacement.size && replacement.lastModifiedDate) {
+					conflict.find('.replacement .size').text(humanFileSize(replacement.size));
+					conflict.find('.replacement .mtime').text(formatDate(replacement.lastModifiedDate));
+				}
 				var path = getPathForPreview(original.name);
 				lazyLoadPreview(path, original.type, function(previewpath){
 					conflict.find('.original .icon').css('background-image','url('+previewpath+')');
@@ -242,18 +245,19 @@ var OCdialogs = {
 				conflicts.append(conflict);
 				
 				//set more recent mtime bold
-				if (replacement.lastModifiedDate.getTime() > original.mtime*1000) {
+				// ie sucks
+				if (replacement.lastModifiedDate && replacement.lastModifiedDate.getTime() > original.mtime*1000) {
 					conflict.find('.replacement .mtime').css('font-weight', 'bold');
-				} else if (replacement.lastModifiedDate.getTime() < original.mtime*1000) {
+				} else if (replacement.lastModifiedDate && replacement.lastModifiedDate.getTime() < original.mtime*1000) {
 					conflict.find('.original .mtime').css('font-weight', 'bold');
 				} else {
 					//TODO add to same mtime collection?
 				}
 				
 				// set bigger size bold
-				if (replacement.size > original.size) {
+				if (replacement.size && replacement.size > original.size) {
 					conflict.find('.replacement .size').css('font-weight', 'bold');
-				} else if (replacement.size < original.size) {
+				} else if (replacement.size && replacement.size < original.size) {
 					conflict.find('.original .size').css('font-weight', 'bold');
 				} else {
 					//TODO add to same size collection?
-- 
GitLab


From 00cc83e3f7ce53840f5cf03a05a3d995355d1925 Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind@owncloud.com>
Date: Sat, 7 Sep 2013 14:52:56 +0200
Subject: [PATCH 049/248] show preview for uploading image files on conflict

---
 core/js/oc-dialogs.js | 87 +++++++++++++++++++++++++++++++++++--------
 1 file changed, 71 insertions(+), 16 deletions(-)

diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index 82bf49fc3a..13348b455d 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -220,12 +220,61 @@ var OCdialogs = {
 	*/
 	fileexists:function(data, original, replacement, controller) {
 		var self = this;
+
+		var getCroppedPreview = function(file) {
+			var deferred = new $.Deferred();
+			// Only process image files.
+			var type = file.type.split('/').shift();
+			if (window.FileReader && type === 'image') {
+				var reader = new FileReader();
+				reader.onload = function (e) {
+					var blob = new Blob([event.target.result]);
+					window.URL = window.URL || window.webkitURL;
+					var originalUrl = window.URL.createObjectURL(blob);
+					var image = new Image();
+					image.src = originalUrl;
+					image.onload = function () {
+						var url = crop(image);
+						deferred.resolve(url);
+					}
+				};
+				reader.readAsArrayBuffer(file);
+			} else {
+				deferred.reject();
+			}
+			return deferred;
+		};
+
+		var crop = function(img) {
+			var canvas = document.createElement('canvas'),
+				width = img.width,
+				height = img.height,
+				x, y, size;
+
+			// calculate the width and height, constraining the proportions
+			if (width > height) {
+				y = 0;
+				x = (width - height) / 2;
+			} else {
+				y = (height - width) / 2;
+				x = 0;
+			}
+			size = Math.min(width, height);
+
+			// resize the canvas and draw the image data into it
+			canvas.width = 64;
+			canvas.height = 64;
+			var ctx = canvas.getContext("2d");
+			ctx.drawImage(img, x, y, size, size, 0, 0, 64, 64);
+			return canvas.toDataURL("image/png", 0.7);
+		};
+
 		var addConflict = function(conflicts, original, replacement) {
-			
+
 				var conflict = conflicts.find('.conflict.template').clone();
-				
+
 				conflict.data('data',data);
-				
+
 				conflict.find('.filename').text(original.name);
 				conflict.find('.original .size').text(humanFileSize(original.size));
 				conflict.find('.original .mtime').text(formatDate(original.mtime*1000));
@@ -238,12 +287,18 @@ var OCdialogs = {
 				lazyLoadPreview(path, original.type, function(previewpath){
 					conflict.find('.original .icon').css('background-image','url('+previewpath+')');
 				});
-				getMimeIcon(replacement.type,function(path){
-					conflict.find('.replacement .icon').css('background-image','url('+path+')');
-				});
+				getCroppedPreview(replacement).then(
+					function(path){
+						conflict.find('.replacement .icon').css('background-image','url(' + path + ')');
+					}, function(){
+						getMimeIcon(replacement.type,function(path){
+							conflict.find('.replacement .icon').css('background-image','url(' + path + ')');
+						});
+					}
+				);
 				conflict.removeClass('template');
 				conflicts.append(conflict);
-				
+
 				//set more recent mtime bold
 				// ie sucks
 				if (replacement.lastModifiedDate && replacement.lastModifiedDate.getTime() > original.mtime*1000) {
@@ -253,7 +308,7 @@ var OCdialogs = {
 				} else {
 					//TODO add to same mtime collection?
 				}
-				
+
 				// set bigger size bold
 				if (replacement.size && replacement.size > original.size) {
 					conflict.find('.replacement .size').css('font-weight', 'bold');
@@ -262,9 +317,9 @@ var OCdialogs = {
 				} else {
 					//TODO add to same size collection?
 				}
-				
+
 				//TODO show skip action for files with same size and mtime in bottom row
-				
+
 		};
 		//var selection = controller.getSelection(data.originalFiles);
 		//if (selection.defaultAction) {
@@ -274,16 +329,16 @@ var OCdialogs = {
 			var dialog_id = '#' + dialog_name;
 			if (this._fileexistsshown) {
 				// add conflict
-				
+
 				var conflicts = $(dialog_id+ ' .conflicts');
 				addConflict(conflicts, original, replacement);
-				
+
 				var title = t('files','{count} file conflicts',{count:$(dialog_id+ ' .conflict:not(.template)').length});
 				$(dialog_id).parent().children('.oc-dialog-title').text(title);
-				
+
 				//recalculate dimensions
 				$(window).trigger('resize');
-				
+
 			} else {
 				//create dialog
 				this._fileexistsshown = true;
@@ -334,7 +389,7 @@ var OCdialogs = {
 						buttons: buttonlist,
 						closeButton: null
 					});
-					
+
 					$(dialog_id).css('height','auto');
 
 					//add checkbox toggling actions
@@ -354,7 +409,7 @@ var OCdialogs = {
 						var checkbox = $(this);
 						checkbox.prop('checked', !checkbox.prop('checked'));
 					});
-					
+
 					//update counters
 					$(dialog_id).on('click', '.replacement,.allnewfiles', function() {
 						var count = $(dialog_id).find('.conflict:not(.template) .replacement input[type="checkbox"]:checked').length;
-- 
GitLab


From 0a0410815ee3130fc73bf9f9cab19f287f7a23b3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Sun, 8 Sep 2013 10:11:35 +0200
Subject: [PATCH 050/248] close and destroy dialog on ESC

---
 core/js/oc-dialogs.js | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index 13348b455d..7c4483cefc 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -387,7 +387,10 @@ var OCdialogs = {
 						closeOnEscape: true,
 						modal: true,
 						buttons: buttonlist,
-						closeButton: null
+						closeButton: null,
+						close: function(event, ui) {
+							$(this).ocdialog('destroy').remove();
+						}
 					});
 
 					$(dialog_id).css('height','auto');
-- 
GitLab


From 8828fafd362e3559a7448c846896203c563cc08a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Sun, 8 Sep 2013 10:41:20 +0200
Subject: [PATCH 051/248] cleanup comments

---
 apps/files/js/file-upload.js | 205 ++++++++++++-----------------------
 apps/files/js/filelist.js    |  73 ++-----------
 2 files changed, 75 insertions(+), 203 deletions(-)

diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index ead397c569..d3e644dbda 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -1,100 +1,11 @@
 /**
- * 
- * and yet another idea how to handle file uploads:
- * let the jquery fileupload thing handle as much as possible
- * 
- * use singlefileupload
- * on first add of every selection
- * - check all files of originalFiles array with files in dir
- * - on conflict show dialog
- *   - skip all -> remember as default action
- *   - replace all -> remember as default action
- *   - choose -> show choose dialog
- *     - mark files to keep
- *       - when only existing -> remember as single skip action
- *       - when only new -> remember as single replace action
- *       - when both -> remember as single autorename action
- *     - continue -> apply marks, when nothing is marked continue == skip all
- * - start uploading selection
- * 
- * on send
- * - if single action or default action
- *   - when skip -> abort upload
- * ..- when replace -> add replace=true parameter
- * ..- when rename -> add newName=filename parameter
- * ..- when autorename -> add autorename=true parameter
- * 
- * on fail
- * - if server sent existserror
- *    - show dialog
- *      - on skip single -> abort single upload
- *      - on skip always -> remember as default action
- *      - on replace single -> replace single upload
- *      - on replace always -> remember as default action
- *      - on rename single -> rename single upload, propose autorename - when changed disable remember always checkbox
- *      - on rename always -> remember autorename as default action
- *    - resubmit data
- * 
- * on uplad done
- * - if last upload -> unset default action
- * 
- * -------------------------------------------------------------
- * 
- * use put t ocacnel upload before it starts? use chunked uploads?
- * 
- * 1. tracking which file to upload next -> upload queue with data elements added whenever add is called
- * 2. tracking progress for each folder individually -> track progress in a progress[dirname] object
- *   - every new selection increases the total size and number of files for a directory
- *   - add increases, successful done decreases, skip decreases, cancel decreases
- * 3. track selections -> the general skip / overwrite decision is selection based and can change
- *    - server might send already exists error -> show dialog & remember decision for selection again
- *    - server sends error, how do we find collection?
- * 4. track jqXHR object to prevent browser from navigationg away -> track in a uploads[dirname][filename] object [x]
- * 
- * selections can progress in parrallel but each selection progresses sequentially
- * 
- * -> store everything in context?
- * context.folder
- * context.element?
- * context.progressui?
- * context.jqXHR
- * context.selection
- * context.selection.onExistsAction?
- * 
- * context available in what events?
- * build in drop() add dir
- * latest in add() add file? add selection!
- * progress? -> update progress?
- * onsubmit -> context.jqXHR?
- * fail() -> 
- * done()
- * 
- * when versioning app is active -> always overwrite
- * 
- * fileupload scenario: empty folder & d&d 20 files
- *		queue the 20 files
- *		check list of files for duplicates -> empty
- *		start uploading the queue (show progress dialog?)
- *		- no duplicates -> all good, add files to list
- *		- server reports duplicate -> show skip, replace or rename dialog (for individual files)
- *
- * fileupload scenario: files uploaded & d&d 20 files again
- *		queue the 20 files
- *		check list of files for duplicates -> find n duplicates ->
- *			show skip, replace or rename dialog as general option
- *				- show list of differences with preview (win 8)
- *			remember action for each file
- *		start uploading the queue (show progress dialog?)
- *		- no duplicates -> all good, add files to list
- *		- server reports duplicate -> use remembered action
- *		
- * dialoge:
- *	-> skip, replace, choose (or abort) ()
- *	-> choose left or right (with skip) (when only one file in list also show rename option and remember for all option)
- *	
- *	progress always based on filesize
- *	number of files as text, bytes as bar
- *	
+ * The file upload code uses several hooks to interact with blueimps jQuery file upload library:
+ * 1. the core upload handling hooks are added when initializing the plugin,
+ * 2. if the browser supports progress events they are added in a separate set after the initialization
+ * 3. every app can add it's own triggers for fileupload
+ *    - files adds d'n'd handlers and also reacts to done events to add new rows to the filelist
+ *    - TODO pictures upload button
+ *    - TODO music upload button
  */
 
 // from https://github.com/New-Bamboo/example-ajax-upload/blob/master/public/index.html
@@ -122,9 +33,20 @@ function supportAjaxUploadWithProgress() {
 	}
 }
 
-//TODO clean uploads when all progress has completed
+/**
+ * keeps track of uploads in progress and implements callbacks for the conflicts dialog
+ * @type OC.Upload
+ */
 OC.Upload = {
 	_uploads: [],
+	/**
+	 * cancels a single upload, 
+	 * @deprecated because it was only used when a file currently beeing uploaded was deleted. Now they are added after
+	 * they have been uploaded.
+	 * @param string dir
+	 * @param string filename
+	 * @returns unresolved
+	 */
 	cancelUpload:function(dir, filename) {
 		var self = this;
 		var deleted = false;
@@ -137,22 +59,33 @@ OC.Upload = {
 		});
 		return deleted;
 	},
+	/**
+	 * deletes the jqHXR object from a data selection
+	 * @param data data
+	 */
 	deleteUpload:function(data) {
 		delete data.jqXHR;
 	},
+	/**
+	 * cancels all uploads
+	 */
 	cancelUploads:function() {
 		console.log('canceling uploads');
 		jQuery.each(this._uploads,function(i, jqXHR){
 			jqXHR.abort();
 		});
 		this._uploads = [];
-		
 	},
 	rememberUpload:function(jqXHR){
 		if (jqXHR) {
 			this._uploads.push(jqXHR);
 		}
 	},
+	/**
+	 * Checks the currently known uploads.
+	 * returns true if any hxr has the state 'pending'
+	 * @returns Boolean
+	 */
 	isProcessing:function(){
 		var count = 0;
 		
@@ -163,9 +96,18 @@ OC.Upload = {
 		});
 		return count > 0;
 	},
+	/**
+	 * callback for the conflicts dialog
+	 * @param data
+	 */
 	onCancel:function(data) {
 		this.cancelUploads();
 	},
+	/**
+	 * callback for the conflicts dialog
+	 * calls onSkip, onReplace or onAutorename for each conflict
+	 * @param conflicts list of conflict elements
+	 */
 	onContinue:function(conflicts) {
 		var self = this;
 		//iterate over all conflicts
@@ -186,15 +128,27 @@ OC.Upload = {
 			}
 		});
 	},
+	/**
+	 * handle skipping an upload
+	 * @param data data
+	 */
 	onSkip:function(data){
 		this.logStatus('skip', null, data);
 		this.deleteUpload(data);
 	},
+	/**
+	 * handle replacing a file on the server with an uploaded file
+	 * @param data data
+	 */
 	onReplace:function(data){
 		this.logStatus('replace', null, data);
 		data.data.append('resolution', 'replace');
 		data.submit();
 	},
+	/**
+	 * handle uploading a file and letting the server decide a new name
+	 * @param data data
+	 */
 	onAutorename:function(data){
 		this.logStatus('autorename', null, data);
 		if (data.data) {
@@ -208,8 +162,19 @@ OC.Upload = {
 		console.log(caption);
 		console.log(data);
 	},
+	/**
+	 * TODO checks the list of existing files prior to uploading and shows a simple dialog to choose
+	 * skip all, replace all or choosw which files to keep
+	 * @param array selection of files to upload
+	 * @param callbacks to call:
+	 *		onNoConflicts,
+	 *		onSkipConflicts,
+	 *		onReplaceConflicts,
+	 *		onChooseConflicts,
+	 *		onCancel
+	 */
 	checkExistingFiles: function (selection, callbacks){
-		// FIXME check filelist before uploading
+		// TODO check filelist before uploading and show dialog on conflicts, use callbacks
 		callbacks.onNoConflicts(selection);
 	}
 };
@@ -220,7 +185,6 @@ $(document).ready(function() {
 		dropZone: $('#content'), // restrict dropZone to content div
 		autoUpload: false,
 		sequentialUploads: true,
-		
 		//singleFileUploads is on by default, so the data.files array will always have length 1
 		/**
 		 * on first add of every selection
@@ -306,7 +270,7 @@ $(document).ready(function() {
 						});
 					},
 					onSkipConflicts: function (selection) {
-					//TODO mark conflicting files as toskip
+						//TODO mark conflicting files as toskip
 					},
 					onReplaceConflicts: function (selection) {
 						//TODO mark conflicting files as toreplace
@@ -324,22 +288,6 @@ $(document).ready(function() {
 				OC.Upload.checkExistingFiles(selection, callbacks);
 				
 			}
-		
-			
-			
-			//TODO check filename already exists
-			/*
-			if ($('tr[data-file="'+data.files[0].name+'"][data-id]').length > 0) {
-				data.textStatus = 'alreadyexists';
-				data.errorThrown = t('files', '{filename} already exists',
-					{filename: data.files[0].name}
-				);
-				//TODO show "file already exists" dialog
-				var fu = that.data('blueimp-fileupload') || that.data('fileupload');
-				fu._trigger('fail', e, data);
-				return false;
-			}
-			*/
 
 			return true; // continue adding files
 		},
@@ -368,8 +316,6 @@ $(document).ready(function() {
 					$('#notification').fadeOut();
 				}, 5000);
 			}
-			//var selection = OC.Upload.getSelection(data.originalFiles);
-			//OC.Upload.deleteSelectionUpload(selection, data.files[0].name);
 			OC.Upload.deleteUpload(data);
 		},
 		/**
@@ -455,30 +401,13 @@ $(document).ready(function() {
 			});
 			fileupload.on('fileuploaddone', function(e, data) {
 				OC.Upload.logStatus('progress handle fileuploaddone', e, data);
-				//if user pressed cancel hide upload chrome
-				//if (! OC.Upload.isProcessing()) {
-				//	$('#uploadprogresswrapper input.stop').fadeOut();
-				//	$('#uploadprogressbar').fadeOut();
-				//}
 			});
 			fileupload.on('fileuploadstop', function(e, data) {
 				OC.Upload.logStatus('progress handle fileuploadstop', e, data);
-				//if(OC.Upload.progressBytes()>=100) { //only hide controls when all selections have ended uploading
-
-					//OC.Upload.cancelUploads(); //cleanup
-
-				//	if(data.dataType !== 'iframe') {
-				//		$('#uploadprogresswrapper input.stop').hide();
-				//	}
-
-				//	$('#uploadprogressbar').progressbar('value', 100);
-				//	$('#uploadprogressbar').fadeOut();
-				//}
-				//if user pressed cancel hide upload chrome
-				//if (! OC.Upload.isProcessing()) {
+				
 				$('#uploadprogresswrapper input.stop').fadeOut();
 				$('#uploadprogressbar').fadeOut();
-				//}
+				
 			});
 			fileupload.on('fileuploadfail', function(e, data) {
 				OC.Upload.logStatus('progress handle fileuploadfail', e, data);
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index a96f555ac0..891d45f580 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -547,11 +547,9 @@ $(document).ready(function(){
 	});
 	file_upload_start.on('fileuploadadd', function(e, data) {
 		OC.Upload.logStatus('filelist handle fileuploadadd', e, data);
-
-		// lookup selection for dir
-		//var selection = OC.Upload.getSelection(data.originalFiles);
-			
-		if(FileList.deleteFiles && FileList.deleteFiles.indexOf(data.files[0].name)!==-1){//finish delete if we are uploading a deleted file
+		
+		//finish delete if we are uploading a deleted file
+		if(FileList.deleteFiles && FileList.deleteFiles.indexOf(data.files[0].name)!==-1){
 			FileList.finishDelete(null, true); //delete file before continuing
 		}
 		
@@ -584,6 +582,10 @@ $(document).ready(function(){
 	file_upload_start.on('fileuploadstart', function(e, data) {
 		OC.Upload.logStatus('filelist handle fileuploadstart', e, data);
 	});
+	/*
+	 * when file upload done successfully add row to filelist
+	 * update counter when uploading to sub folder
+	 */
 	file_upload_start.on('fileuploaddone', function(e, data) {
 		OC.Upload.logStatus('filelist handle fileuploaddone', e, data);
 		
@@ -649,18 +651,6 @@ $(document).ready(function(){
 				});
 			}
 		}
-		
-		//if user pressed cancel hide upload chrome
-		/*
-		if (! OC.Upload.isProcessing()) {
-			//cleanup uploading to a dir
-			var uploadtext = $('tr .uploadtext');
-			var img = OC.imagePath('core', 'filetypes/folder.png');
-			uploadtext.parents('td.filename').attr('style','background-image:url('+img+')');
-			uploadtext.fadeOut();
-			uploadtext.attr('currentUploads', 0);
-		}
-		*/
 	});
 	
 	file_upload_start.on('fileuploadalways', function(e, data) {
@@ -668,9 +658,6 @@ $(document).ready(function(){
 	});
 	file_upload_start.on('fileuploadsend', function(e, data) {
 		OC.Upload.logStatus('filelist handle fileuploadsend', e, data);
-		
-		// TODOD add vis
-		//data.context.element = 
 	});
 	file_upload_start.on('fileuploadprogress', function(e, data) {
 		OC.Upload.logStatus('filelist handle fileuploadprogress', e, data);
@@ -704,51 +691,7 @@ $(document).ready(function(){
 			uploadtext.attr('currentUploads', 0);
 		}
 	});
-	/*
-	file_upload_start.on('fileuploadfail', function(e, data) {
-		console.log('fileuploadfail'+((data.files&&data.files.length>0)?' '+data.files[0].name:''));
-		
-		// if we are uploading to a subdirectory
-		if (data.context && data.context.data('type') === 'dir') {
-
-			// update upload counter ui
-			var uploadtext = data.context.find('.uploadtext');
-			var currentUploads = parseInt(uploadtext.attr('currentUploads'));
-			currentUploads -= 1;
-			uploadtext.attr('currentUploads', currentUploads);
-			if(currentUploads === 0) {
-				var img = OC.imagePath('core', 'filetypes/folder.png');
-				data.context.find('td.filename').attr('style','background-image:url('+img+')');
-				uploadtext.text('');
-				uploadtext.hide();
-			} else {
-				uploadtext.text(currentUploads + ' ' + t('files', 'files uploading'));
-			}
-
-		}
-		
-		// cleanup files, error notification has been shown by fileupload code
-		var tr = data.context;
-		if (typeof tr === 'undefined') {
-			tr = $('tr').filterAttr('data-file', data.files[0].name);
-		}
-		if (tr.attr('data-type') === 'dir') {
-			
-			//cleanup uploading to a dir
-			var uploadtext = tr.find('.uploadtext');
-			var img = OC.imagePath('core', 'filetypes/folder.png');
-			tr.find('td.filename').attr('style','background-image:url('+img+')');
-			uploadtext.text('');
-			uploadtext.hide(); //TODO really hide already
-			
-		} else {
-			//TODO add row when sending file
-			//remove file
-			tr.fadeOut();
-			tr.remove();
-		}
-	});
-*/
+	
 	$('#notification').hide();
 	$('#notification').on('click', '.undo', function(){
 		if (FileList.deleteFiles) {
-- 
GitLab


From 577e3f22b27d8f53a829185d3d749428a37189c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Sun, 8 Sep 2013 10:43:52 +0200
Subject: [PATCH 052/248] remove unused hooks

---
 apps/files/js/file-upload.js |  3 ---
 apps/files/js/filelist.js    | 20 --------------------
 2 files changed, 23 deletions(-)

diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index d3e644dbda..d1f9a79f21 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -399,9 +399,6 @@ $(document).ready(function() {
 				var progress = (data.loaded / data.total) * 100;
 				$('#uploadprogressbar').progressbar('value', progress);
 			});
-			fileupload.on('fileuploaddone', function(e, data) {
-				OC.Upload.logStatus('progress handle fileuploaddone', e, data);
-			});
 			fileupload.on('fileuploadstop', function(e, data) {
 				OC.Upload.logStatus('progress handle fileuploadstop', e, data);
 				
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 891d45f580..e354366191 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -575,13 +575,6 @@ $(document).ready(function(){
 		}
 		
 	});
-	file_upload_start.on('fileuploadsend', function(e, data) {
-		OC.Upload.logStatus('filelist handle fileuploadsend', e, data);
-		return true;
-	});
-	file_upload_start.on('fileuploadstart', function(e, data) {
-		OC.Upload.logStatus('filelist handle fileuploadstart', e, data);
-	});
 	/*
 	 * when file upload done successfully add row to filelist
 	 * update counter when uploading to sub folder
@@ -652,19 +645,6 @@ $(document).ready(function(){
 			}
 		}
 	});
-	
-	file_upload_start.on('fileuploadalways', function(e, data) {
-		OC.Upload.logStatus('filelist handle fileuploadalways', e, data);
-	});
-	file_upload_start.on('fileuploadsend', function(e, data) {
-		OC.Upload.logStatus('filelist handle fileuploadsend', e, data);
-	});
-	file_upload_start.on('fileuploadprogress', function(e, data) {
-		OC.Upload.logStatus('filelist handle fileuploadprogress', e, data);
-	});
-	file_upload_start.on('fileuploadprogressall', function(e, data) {
-		OC.Upload.logStatus('filelist handle fileuploadprogressall', e, data);
-	});
 	file_upload_start.on('fileuploadstop', function(e, data) {
 		OC.Upload.logStatus('filelist handle fileuploadstop', e, data);
 		
-- 
GitLab


From 564de4bc3f6f7d8bd9446d79d06da9410b7b009f Mon Sep 17 00:00:00 2001
From: kondou <kondou@ts.unde.re>
Date: Sun, 8 Sep 2013 15:15:40 +0200
Subject: [PATCH 053/248] Optimize triangle-e.png and triangle-e.svg

---
 core/img/actions/triangle-e.png | Bin 175 -> 174 bytes
 core/img/actions/triangle-e.svg |  54 ++------------------------------
 2 files changed, 2 insertions(+), 52 deletions(-)

diff --git a/core/img/actions/triangle-e.png b/core/img/actions/triangle-e.png
index 40206a8961b89c79a2893c96cca96a5de98dd44f..09d398f602e7985787925f20826dc839cde6f7df 100644
GIT binary patch
delta 58
zcmZ3_xQ=l`wXvM1i(?2!baKK0HW`N_LINAPj>K$b@v}IfA|tVZiQ!iYo8>LRi+l_W
O3=E#GelF{r5}E)fD-uZn

delta 59
zcmZ3-xSnxBwTZl^i(?4K_2h&DY%&f<gakHn9f{e>;%9L{MP@@*3IoHh6gJC$PJh`L
Q7#J8lUHx3vIVCg!0Ac?V^Z)<=

diff --git a/core/img/actions/triangle-e.svg b/core/img/actions/triangle-e.svg
index 06f5790c6c..c3d908b366 100644
--- a/core/img/actions/triangle-e.svg
+++ b/core/img/actions/triangle-e.svg
@@ -1,54 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   height="16px"
-   width="16px"
-   version="1.1"
-   id="svg2"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="triangle-e.svg">
-  <metadata
-     id="metadata10">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <defs
-     id="defs8" />
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="640"
-     inkscape:window-height="480"
-     id="namedview6"
-     showgrid="false"
-     inkscape:zoom="14.75"
-     inkscape:cx="8"
-     inkscape:cy="8"
-     inkscape:window-x="0"
-     inkscape:window-y="27"
-     inkscape:window-maximized="0"
-     inkscape:current-layer="svg2" />
-  <path
-     style="text-indent:0;text-transform:none;block-progression:tb;color:#000000"
-     d="M 4,12 12,8 4.011,4 z"
-     id="path4"
-     inkscape:connector-curvature="0" />
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16px" width="16px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <path style="block-progression:tb;color:#000000;text-transform:none;text-indent:0" d="m4 12 8-4-7.989-4z"/>
 </svg>
-- 
GitLab


From 03c90e968f6e84a30698b836c091e377d4702700 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Sun, 8 Sep 2013 17:29:43 +0200
Subject: [PATCH 054/248] whitespace and indentation fixes

---
 apps/files/js/filelist.js | 56 +++++++++++++++++++--------------------
 1 file changed, 28 insertions(+), 28 deletions(-)

diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index e354366191..49d7afa9b5 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -25,13 +25,13 @@ var FileList={
 		});
 		//split extension from filename for non dirs
 		if (type !== 'dir' && name.indexOf('.')!==-1) {
-			basename=name.substr(0,name.lastIndexOf('.'));
-			extension=name.substr(name.lastIndexOf('.'));
+			basename = name.substr(0,name.lastIndexOf('.'));
+			extension = name.substr(name.lastIndexOf('.'));
 		} else {
-			basename=name;
-			extension=false;
+			basename = name;
+			extension = false;
 		}
-		var name_span=$('<span></span>').addClass('nametext').text(basename);
+		var name_span = $('<span></span>').addClass('nametext').text(basename);
 		link_elem.append(name_span);
 		if(extension){
 			name_span.append($('<span></span>').addClass('extension').text(extension));
@@ -47,10 +47,10 @@ var FileList={
 		tr.append(td);
 
 		//size column
-		if(size!==t('files', 'Pending')){
+		if (size!==t('files', 'Pending')) {
 			simpleSize = humanFileSize(size);
-		}else{
-			simpleSize=t('files', 'Pending');
+		} else {
+			simpleSize = t('files', 'Pending');
 		}
 		var sizeColor = Math.round(160-Math.pow((size/(1024*1024)),2));
 		var lastModifiedTime = Math.round(lastModified.getTime() / 1000);
@@ -101,9 +101,9 @@ var FileList={
 		);
 
 		FileList.insertElement(name, 'file', tr);
-		if(loading){
+		if (loading) {
 			tr.data('loading',true);
-		}else{
+		} else {
 			tr.find('td.filename').draggable(dragOptions);
 		}
 		if (hidden) {
@@ -427,7 +427,7 @@ var FileList={
 			var infoVars = {
 				dirs: '<span class="dirinfo">'+directoryInfo+'</span><span class="connector">',
 				files: '</span><span class="fileinfo">'+fileInfo+'</span>'
-			}
+			};
 
 			var info = t('files', '{dirs} and {files}', infoVars);
 
@@ -515,18 +515,18 @@ $(document).ready(function(){
 
 	// handle upload events
 	var file_upload_start = $('#file_upload_start');
-	
+
 	file_upload_start.on('fileuploaddrop', function(e, data) {
 		OC.Upload.logStatus('filelist handle fileuploaddrop', e, data);
-		
+
 		var dropTarget = $(e.originalEvent.target).closest('tr');
 		if(dropTarget && dropTarget.data('type') === 'dir') { // drag&drop upload to folder
-			
+
 			// remember as context
 			data.context = dropTarget;
-			
+
 			var dir = dropTarget.data('file');
-			
+
 			// update folder in form
 			data.formData = function(form) {
 				var formArray = form.serializeArray();
@@ -539,20 +539,20 @@ $(document).ready(function(){
 				} else {
 					formArray[2]['value'] += '/' + dir;
 				}
-				
+
 				return formArray;
 			};
 		} 
-		
+
 	});
 	file_upload_start.on('fileuploadadd', function(e, data) {
 		OC.Upload.logStatus('filelist handle fileuploadadd', e, data);
-		
+
 		//finish delete if we are uploading a deleted file
 		if(FileList.deleteFiles && FileList.deleteFiles.indexOf(data.files[0].name)!==-1){
 			FileList.finishDelete(null, true); //delete file before continuing
 		}
-		
+
 		// add ui visualization to existing folder
 		if(data.context && data.context.data('type') === 'dir') {
 			// add to existing folder
@@ -562,7 +562,7 @@ $(document).ready(function(){
 			var currentUploads = parseInt(uploadtext.attr('currentUploads'));
 			currentUploads += 1;
 			uploadtext.attr('currentUploads', currentUploads);
-			
+
 			var translatedText = n('files', 'Uploading %n file', 'Uploading %n files', currentUploads);
 			if(currentUploads === 1) {
 				var img = OC.imagePath('core', 'loading.gif');
@@ -573,7 +573,7 @@ $(document).ready(function(){
 				uploadtext.text(translatedText);
 			}
 		}
-		
+
 	});
 	/*
 	 * when file upload done successfully add row to filelist
@@ -610,13 +610,13 @@ $(document).ready(function(){
 				} else {
 					uploadtext.text(translatedText);
 				}
-				
+
 				// update folder size
 				var size = parseInt(data.context.data('size'));
 				size += parseInt(file.size);
 				data.context.attr('data-size', size);
 				data.context.find('td.filesize').text(humanFileSize(size));
-				
+
 			} else {
 
 				// add as stand-alone row to filelist
@@ -631,7 +631,7 @@ $(document).ready(function(){
 				}
 				//should the file exist in the list remove it
 				FileList.remove(file.name);
-				
+
 				// create new file context
 				data.context = FileList.addFile(file.name, file.size, date, false, false, param);
 
@@ -647,7 +647,7 @@ $(document).ready(function(){
 	});
 	file_upload_start.on('fileuploadstop', function(e, data) {
 		OC.Upload.logStatus('filelist handle fileuploadstop', e, data);
-		
+
 		//if user pressed cancel hide upload chrome
 		if (data.errorThrown === 'abort') {
 			//cleanup uploading to a dir
@@ -660,7 +660,7 @@ $(document).ready(function(){
 	});
 	file_upload_start.on('fileuploadfail', function(e, data) {
 		OC.Upload.logStatus('filelist handle fileuploadfail', e, data);
-		
+
 		//if user pressed cancel hide upload chrome
 		if (data.errorThrown === 'abort') {
 			//cleanup uploading to a dir
@@ -671,7 +671,7 @@ $(document).ready(function(){
 			uploadtext.attr('currentUploads', 0);
 		}
 	});
-	
+
 	$('#notification').hide();
 	$('#notification').on('click', '.undo', function(){
 		if (FileList.deleteFiles) {
-- 
GitLab


From bd1d5b69fbe6df0f8faf53e3edb5cd7c44e1577c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Sun, 8 Sep 2013 17:31:12 +0200
Subject: [PATCH 055/248] fix ESC for conflicts dialog

---
 core/js/oc-dialogs.js | 2 --
 1 file changed, 2 deletions(-)

diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index 7c4483cefc..dc293f949c 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -366,7 +366,6 @@ var OCdialogs = {
 									controller.onCancel(data);
 								}
 								$(dialog_id).ocdialog('close');
-								$(dialog_id).ocdialog('destroy').remove();
 							}
 						},
 						{
@@ -378,7 +377,6 @@ var OCdialogs = {
 									controller.onContinue($(dialog_id + ' .conflict:not(.template)'));
 								}
 								$(dialog_id).ocdialog('close');
-								$(dialog_id).ocdialog('destroy').remove();
 							}
 						}];
 
-- 
GitLab


From 2c9b3d32efa466b655a7f24c5022a42045ef482f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Tue, 10 Sep 2013 17:34:28 +0200
Subject: [PATCH 056/248] unify .original div to fix css in firefox, clear:left
 to fix filename wrapping in chrome, shrink width of columns and get rid of
 ie8 hack

---
 apps/files/css/files.css | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index e503674e0f..06088b30ff 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -348,7 +348,7 @@ table.dragshadow td.size {
 	margin-right: 3px;
 }
 .oc-dialog .fileexists th:first-child {
-	width: 235px;
+	width: 230px;
 }
 .oc-dialog .fileexists th label {
 	font-weight: normal;
@@ -367,6 +367,7 @@ table.dragshadow td.size {
 .oc-dialog .fileexists .conflict .filename {
 	color:#777;
 	word-break: break-all;
+	clear: left;
 }
 .oc-dialog .fileexists .icon {
 	width: 64px;
@@ -379,15 +380,11 @@ table.dragshadow td.size {
 
 .oc-dialog .fileexists .replacement {
 	float: left;
-	width: 235px;
+	width: 230px;
 }
 .oc-dialog .fileexists .original {
 	float: left;
-	width: 235px;
-}
-html.lte9 .oc-dialog .fileexists .original {
-	float: left;
-	width: 225px;
+	width: 230px;
 }
 .oc-dialog .fileexists .conflicts {
 	overflow-y:scroll;
-- 
GitLab


From f6faec0e0bfddb14cc17f4a7f60900438215dd35 Mon Sep 17 00:00:00 2001
From: kondou <kondou@ts.unde.re>
Date: Wed, 11 Sep 2013 16:35:13 +0200
Subject: [PATCH 057/248] Use a controller instead of two files for
 changepassword.php

---
 settings/ajax/changepassword.php         | 138 ++++++++++++++---------
 settings/ajax/changepersonalpassword.php |  23 ----
 settings/routes.php                      |  15 ++-
 3 files changed, 94 insertions(+), 82 deletions(-)
 delete mode 100644 settings/ajax/changepersonalpassword.php

diff --git a/settings/ajax/changepassword.php b/settings/ajax/changepassword.php
index 67b23d2a19..53bd69a2cd 100644
--- a/settings/ajax/changepassword.php
+++ b/settings/ajax/changepassword.php
@@ -1,68 +1,98 @@
 <?php
 
-// Check if we are an user
-OC_JSON::callCheck();
-OC_JSON::checkLoggedIn();
+namespace OC\Settings\ChangePassword;
 
-// Manually load apps to ensure hooks work correctly (workaround for issue 1503)
-OC_App::loadApps();
+class Controller {
+	public static function changePersonalPassword($args) {
+		// Check if we are an user
+		\OC_JSON::callCheck();
+		\OC_JSON::checkLoggedIn();
 
-if (isset($_POST['username'])) {
-	$username = $_POST['username'];
-} else {
-	$l = new \OC_L10n('settings');
-	OC_JSON::error(array('data' => array('message' => $l->t('No user supplied')) ));
-	exit();
-}
+		// Manually load apps to ensure hooks work correctly (workaround for issue 1503)
+		\OC_App::loadApps();
 
-$password = isset($_POST['password']) ? $_POST['password'] : null;
-$recoveryPassword = isset($_POST['recoveryPassword']) ? $_POST['recoveryPassword'] : null;
+		$username = \OC_User::getUser();
+		$password = isset($_POST['personal-password']) ? $_POST['personal-password'] : null;
+		$oldPassword = isset($_POST['oldpassword']) ? $_POST['oldpassword'] : '';
 
-if (OC_User::isAdminUser(OC_User::getUser())) {
-	$userstatus = 'admin';
-} elseif (OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username)) {
-	$userstatus = 'subadmin';
-} else {
-	$l = new \OC_L10n('settings');
-	OC_JSON::error(array('data' => array('message' => $l->t('Authentication error')) ));
-	exit();
-}
+		if (!\OC_User::checkPassword($username, $oldPassword)) {
+			$l = new \OC_L10n('settings');
+			\OC_JSON::error(array("data" => array("message" => $l->t("Wrong password")) ));
+			exit();
+		}
+		if (!is_null($password) && \OC_User::setPassword($username, $password)) {
+			\OC_JSON::success();
+		} else {
+			\OC_JSON::error();
+		}
+	}
 
-if (\OC_App::isEnabled('files_encryption')) {
-	//handle the recovery case
-	$util = new \OCA\Encryption\Util(new \OC_FilesystemView('/'), $username);
-	$recoveryAdminEnabled = OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled');
+	public static function changeUserPassword($args) {
+		// Check if we are an user
+		\OC_JSON::callCheck();
+		\OC_JSON::checkLoggedIn();
 
-	$validRecoveryPassword = false;
-	$recoveryPasswordSupported = false;
-	if ($recoveryAdminEnabled) {
-		$validRecoveryPassword = $util->checkRecoveryPassword($recoveryPassword);
-		$recoveryEnabledForUser = $util->recoveryEnabledForUser();
-	}
+		// Manually load apps to ensure hooks work correctly (workaround for issue 1503)
+		\OC_App::loadApps();
 
-	if ($recoveryEnabledForUser && $recoveryPassword === '') {
-		OC_JSON::error(array('data' => array('message' => 'Please provide a admin recovery password, otherwise all user data will be lost')));
-	} elseif ($recoveryEnabledForUser && ! $validRecoveryPassword) {
-		OC_JSON::error(array('data' => array('message' => 'Wrong admin recovery password. Please check the password and try again.')));
-	} else { // now we know that everything is fine regarding the recovery password, let's try to change the password
-		$result = OC_User::setPassword($username, $password, $recoveryPassword);
-		if (!$result && $recoveryPasswordSupported) {
-			OC_JSON::error(array(
-				"data" => array(
-					"message" => "Back-end doesn't support password change, but the users encryption key was successfully updated." 
-				)
-			));
-		} elseif (!$result && !$recoveryPasswordSupported) {
-			OC_JSON::error(array("data" => array( "message" => "Unable to change password" )));
+		if (isset($_POST['username'])) {
+			$username = $_POST['username'];
 		} else {
-			OC_JSON::success(array("data" => array( "username" => $username )));
+			$l = new \OC_L10n('settings');
+			\OC_JSON::error(array('data' => array('message' => $l->t('No user supplied')) ));
+			exit();
 		}
 
-	}
-} else { // if encryption is disabled, proceed
-	if (!is_null($password) && OC_User::setPassword($username, $password)) {
-		OC_JSON::success(array('data' => array('username' => $username)));
-	} else {
-		OC_JSON::error(array('data' => array('message' => 'Unable to change password')));
+		$password = isset($_POST['password']) ? $_POST['password'] : null;
+		$recoveryPassword = isset($_POST['recoveryPassword']) ? $_POST['recoveryPassword'] : null;
+
+		if (\OC_User::isAdminUser(\OC_User::getUser())) {
+			$userstatus = 'admin';
+		} elseif (\OC_SubAdmin::isUserAccessible(\OC_User::getUser(), $username)) {
+			$userstatus = 'subadmin';
+		} else {
+			$l = new \OC_L10n('settings');
+			\OC_JSON::error(array('data' => array('message' => $l->t('Authentication error')) ));
+			exit();
+		}
+
+		if (\OC_App::isEnabled('files_encryption')) {
+			//handle the recovery case
+			$util = new \OCA\Encryption\Util(new \OC_FilesystemView('/'), $username);
+			$recoveryAdminEnabled = \OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled');
+
+			$validRecoveryPassword = false;
+			$recoveryPasswordSupported = false;
+			if ($recoveryAdminEnabled) {
+				$validRecoveryPassword = $util->checkRecoveryPassword($recoveryPassword);
+				$recoveryEnabledForUser = $util->recoveryEnabledForUser();
+			}
+
+			if ($recoveryEnabledForUser && $recoveryPassword === '') {
+				\OC_JSON::error(array('data' => array('message' => 'Please provide a admin recovery password, otherwise all user data will be lost')));
+			} elseif ($recoveryEnabledForUser && ! $validRecoveryPassword) {
+				\OC_JSON::error(array('data' => array('message' => 'Wrong admin recovery password. Please check the password and try again.')));
+			} else { // now we know that everything is fine regarding the recovery password, let's try to change the password
+				$result = \OC_User::setPassword($username, $password, $recoveryPassword);
+				if (!$result && $recoveryPasswordSupported) {
+					\OC_JSON::error(array(
+						"data" => array(
+							"message" => "Back-end doesn't support password change, but the users encryption key was successfully updated." 
+						)
+					));
+				} elseif (!$result && !$recoveryPasswordSupported) {
+					\OC_JSON::error(array("data" => array( "message" => "Unable to change password" )));
+				} else {
+					\OC_JSON::success(array("data" => array( "username" => $username )));
+				}
+
+			}
+		} else { // if encryption is disabled, proceed
+			if (!is_null($password) && \OC_User::setPassword($username, $password)) {
+				\OC_JSON::success(array('data' => array('username' => $username)));
+			} else {
+				\OC_JSON::error(array('data' => array('message' => 'Unable to change password')));
+			}
+		}
 	}
 }
diff --git a/settings/ajax/changepersonalpassword.php b/settings/ajax/changepersonalpassword.php
deleted file mode 100644
index 44ede3f9cc..0000000000
--- a/settings/ajax/changepersonalpassword.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-// Check if we are an user
-OC_JSON::callCheck();
-OC_JSON::checkLoggedIn();
-
-// Manually load apps to ensure hooks work correctly (workaround for issue 1503)
-OC_App::loadApps();
-
-$username = OC_User::getUser();
-$password = isset($_POST['personal-password']) ? $_POST['personal-password'] : null;
-$oldPassword = isset($_POST['oldpassword']) ? $_POST['oldpassword'] : '';
-
-if (!OC_User::checkPassword($username, $oldPassword)) {
-	$l = new \OC_L10n('settings');
-	OC_JSON::error(array("data" => array("message" => $l->t("Wrong password")) ));
-	exit();
-}
-if (!is_null($password) && OC_User::setPassword($username, $password)) {
-	OC_JSON::success();
-} else {
-	OC_JSON::error();
-}
diff --git a/settings/routes.php b/settings/routes.php
index af1c70ea44..71de81aa6c 100644
--- a/settings/routes.php
+++ b/settings/routes.php
@@ -6,6 +6,9 @@
  * See the COPYING-README file.
  */
 
+// Necessary to include changepassword controller
+OC::$CLASSPATH['OC\Settings\ChangePassword\Controller'] = 'settings/ajax/changepassword.php';
+
 // Settings pages
 $this->create('settings_help', '/settings/help')
 	->actionInclude('settings/help.php');
@@ -37,13 +40,15 @@ $this->create('settings_ajax_togglesubadmins', '/settings/ajax/togglesubadmins.p
 	->actionInclude('settings/ajax/togglesubadmins.php');
 $this->create('settings_ajax_removegroup', '/settings/ajax/removegroup.php')
 	->actionInclude('settings/ajax/removegroup.php');
-$this->create('settings_ajax_changepassword', '/settings/ajax/changepassword.php')
-	->actionInclude('settings/ajax/changepassword.php');
-$this->create('settings_ajax_changepersonalpassword', '/settings/ajax/changepersonalpassword.php')
-        ->actionInclude('settings/ajax/changepersonalpassword.php');
+$this->create('settings_ajax_changepassword', '/settings/users/changepassword')
+	->post()
+	->action('OC\Settings\ChangePassword\Controller', 'changeUserPassword');
 $this->create('settings_ajax_changedisplayname', '/settings/ajax/changedisplayname.php')
 	->actionInclude('settings/ajax/changedisplayname.php');
-// personel
+// personal
+$this->create('settings_ajax_changepersonalpassword', '/settings/personal/changepassword')
+	->post()
+	->action('OC\Settings\ChangePassword\Controller', 'changePersonalPassword');
 $this->create('settings_ajax_lostpassword', '/settings/ajax/lostpassword.php')
 	->actionInclude('settings/ajax/lostpassword.php');
 $this->create('settings_ajax_setlanguage', '/settings/ajax/setlanguage.php')
-- 
GitLab


From 306a8681c5a4699d2f9e0375922000c85501def3 Mon Sep 17 00:00:00 2001
From: kondou <kondou@ts.unde.re>
Date: Fri, 13 Sep 2013 17:03:13 +0200
Subject: [PATCH 058/248] Move ajax/changepassword to changepassword/controller
 to use autoloading

---
 .../{ajax/changepassword.php => changepassword/controller.php} | 0
 settings/routes.php                                            | 3 ---
 2 files changed, 3 deletions(-)
 rename settings/{ajax/changepassword.php => changepassword/controller.php} (100%)

diff --git a/settings/ajax/changepassword.php b/settings/changepassword/controller.php
similarity index 100%
rename from settings/ajax/changepassword.php
rename to settings/changepassword/controller.php
diff --git a/settings/routes.php b/settings/routes.php
index 71de81aa6c..6778a2ab82 100644
--- a/settings/routes.php
+++ b/settings/routes.php
@@ -6,9 +6,6 @@
  * See the COPYING-README file.
  */
 
-// Necessary to include changepassword controller
-OC::$CLASSPATH['OC\Settings\ChangePassword\Controller'] = 'settings/ajax/changepassword.php';
-
 // Settings pages
 $this->create('settings_help', '/settings/help')
 	->actionInclude('settings/help.php');
-- 
GitLab


From 18da2f9cf76815faeaa6ae162fa8af2d80aaeb3e Mon Sep 17 00:00:00 2001
From: kondou <kondou@ts.unde.re>
Date: Fri, 13 Sep 2013 17:07:23 +0200
Subject: [PATCH 059/248] Improve changepassword route naming

---
 settings/js/personal.js | 2 +-
 settings/js/users.js    | 2 +-
 settings/routes.php     | 4 ++--
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/settings/js/personal.js b/settings/js/personal.js
index e4284c2e8c..74620f3981 100644
--- a/settings/js/personal.js
+++ b/settings/js/personal.js
@@ -52,7 +52,7 @@ $(document).ready(function(){
 			$('#passwordchanged').hide();
 			$('#passworderror').hide();
 			// Ajax foo
-			$.post(OC.Router.generate('settings_ajax_changepersonalpassword'), post, function(data){
+			$.post(OC.Router.generate('settings_personal_changepassword'), post, function(data){
 				if( data.status === "success" ){
 					$('#pass1').val('');
 					$('#pass2').val('');
diff --git a/settings/js/users.js b/settings/js/users.js
index e3e749a312..d800de73f5 100644
--- a/settings/js/users.js
+++ b/settings/js/users.js
@@ -361,7 +361,7 @@ $(document).ready(function () {
 				if ($(this).val().length > 0) {
 					var recoveryPasswordVal = $('input:password[id="recoveryPassword"]').val();
 					$.post(
-						OC.Router.generate('settings_ajax_changepassword'),
+						OC.Router.generate('settings_users_changepassword'),
 						{username: uid, password: $(this).val(), recoveryPassword: recoveryPasswordVal},
 						function (result) {
 							if (result.status != 'success') {
diff --git a/settings/routes.php b/settings/routes.php
index 6778a2ab82..60f9d8e100 100644
--- a/settings/routes.php
+++ b/settings/routes.php
@@ -37,13 +37,13 @@ $this->create('settings_ajax_togglesubadmins', '/settings/ajax/togglesubadmins.p
 	->actionInclude('settings/ajax/togglesubadmins.php');
 $this->create('settings_ajax_removegroup', '/settings/ajax/removegroup.php')
 	->actionInclude('settings/ajax/removegroup.php');
-$this->create('settings_ajax_changepassword', '/settings/users/changepassword')
+$this->create('settings_users_changepassword', '/settings/users/changepassword')
 	->post()
 	->action('OC\Settings\ChangePassword\Controller', 'changeUserPassword');
 $this->create('settings_ajax_changedisplayname', '/settings/ajax/changedisplayname.php')
 	->actionInclude('settings/ajax/changedisplayname.php');
 // personal
-$this->create('settings_ajax_changepersonalpassword', '/settings/personal/changepassword')
+$this->create('settings_personal_changepassword', '/settings/personal/changepassword')
 	->post()
 	->action('OC\Settings\ChangePassword\Controller', 'changePersonalPassword');
 $this->create('settings_ajax_lostpassword', '/settings/ajax/lostpassword.php')
-- 
GitLab


From 666bbbe06085451c12e4e55b886703e823eabf07 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Fri, 13 Sep 2013 18:10:04 +0200
Subject: [PATCH 060/248] Use appinfo/register_command.php to add commands to
 the console command

---
 apps/files/appinfo/register_command.php | 9 +++++++++
 console.php                             | 9 +++++++--
 core/register_command.php               | 9 +++++++++
 3 files changed, 25 insertions(+), 2 deletions(-)
 create mode 100644 apps/files/appinfo/register_command.php
 create mode 100644 core/register_command.php

diff --git a/apps/files/appinfo/register_command.php b/apps/files/appinfo/register_command.php
new file mode 100644
index 0000000000..435ce0ab23
--- /dev/null
+++ b/apps/files/appinfo/register_command.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+$application->add(new OCA\Files\Command\Scan(OC_User::getManager()));
diff --git a/console.php b/console.php
index 2f773cc6a1..30f4b72921 100644
--- a/console.php
+++ b/console.php
@@ -25,6 +25,11 @@ if (!OC::$CLI) {
 
 $defaults = new OC_Defaults;
 $application = new Application($defaults->getName(), \OC_Util::getVersionString());
-$application->add(new OC\Core\Command\Status);
-$application->add(new OCA\Files\Command\Scan(OC_User::getManager()));
+require_once 'core/register_command.php';
+foreach(OC_App::getEnabledApps() as $app) {
+	$file = OC_App::getAppPath($app).'/appinfo/register_command.php';
+	if(file_exists($file)) {
+		require $file;
+	}
+}
 $application->run();
diff --git a/core/register_command.php b/core/register_command.php
new file mode 100644
index 0000000000..1eed347b7b
--- /dev/null
+++ b/core/register_command.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+$application->add(new OC\Core\Command\Status);
-- 
GitLab


From f58fefe5e2a33e18ee471a44ecb249acbbcb8074 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Sat, 14 Sep 2013 17:51:49 +0200
Subject: [PATCH 061/248] Check all installed apps for console commands

---
 console.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/console.php b/console.php
index 30f4b72921..b8dd5e0879 100644
--- a/console.php
+++ b/console.php
@@ -26,7 +26,7 @@ if (!OC::$CLI) {
 $defaults = new OC_Defaults;
 $application = new Application($defaults->getName(), \OC_Util::getVersionString());
 require_once 'core/register_command.php';
-foreach(OC_App::getEnabledApps() as $app) {
+foreach(OC_App::getAllApps() as $app) {
 	$file = OC_App::getAppPath($app).'/appinfo/register_command.php';
 	if(file_exists($file)) {
 		require $file;
-- 
GitLab


From 5acb3c4c0d570b2bf7b209d61e5e7849f4f3a363 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Sun, 15 Sep 2013 21:20:22 +0200
Subject: [PATCH 062/248] first log the exception

---
 index.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/index.php b/index.php
index 90fd3efcc9..40063fa6e0 100755
--- a/index.php
+++ b/index.php
@@ -31,7 +31,7 @@ try {
 
 } catch (Exception $ex) {
 	//show the user a detailed error page
-	OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR);
 	\OCP\Util::writeLog('index', $ex->getMessage(), \OCP\Util::FATAL);
+	OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR);
 	OC_Template::printExceptionErrorPage($ex);
 }
-- 
GitLab


From af0069bf032d2045abd18abf2e133835fc360481 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Sun, 15 Sep 2013 22:24:57 +0200
Subject: [PATCH 063/248] adding getRootFolder() to server container and
 hooking up the new files api

---
 lib/public/iservercontainer.php |  8 ++++++++
 lib/server.php                  | 20 ++++++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index 144c1a5b3b..d88330698d 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -54,4 +54,12 @@ interface IServerContainer {
 	 * @return \OCP\IPreview
 	 */
 	function getPreviewManager();
+
+	/**
+	 * Returns the root folder of ownCloud's data directory
+	 *
+	 * @return \OCP\Files\Folder
+	 */
+	function getRootFolder();
+
 }
diff --git a/lib/server.php b/lib/server.php
index d85996612e..9e87bd3190 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -4,6 +4,8 @@ namespace OC;
 
 use OC\AppFramework\Http\Request;
 use OC\AppFramework\Utility\SimpleContainer;
+use OC\Files\Node\Root;
+use OC\Files\View;
 use OCP\IServerContainer;
 
 /**
@@ -47,6 +49,14 @@ class Server extends SimpleContainer implements IServerContainer {
 		$this->registerService('PreviewManager', function($c){
 			return new PreviewManager();
 		});
+		$this->registerService('RootFolder', function($c){
+			// TODO: get user and user manager from container as well
+			$user = \OC_User::getUser();
+			$user = \OC_User::getManager()->get($user);
+			$manager = \OC\Files\Filesystem::getMountManager();
+			$view = new View();
+			return new Root($manager, $view, $user);
+		});
 	}
 
 	/**
@@ -77,4 +87,14 @@ class Server extends SimpleContainer implements IServerContainer {
 	{
 		return $this->query('PreviewManager');
 	}
+
+	/**
+	 * Returns the root folder of ownCloud's data directory
+	 *
+	 * @return \OCP\Files\Folder
+	 */
+	function getRootFolder()
+	{
+		return $this->query('RootFolder');
+	}
 }
-- 
GitLab


From 5d4e9e0d25831cbe1b9c2fef52016c6ed1bbcb55 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Sun, 15 Sep 2013 23:07:18 +0200
Subject: [PATCH 064/248] /OC/Server has created too early causing issues with
 config operations as OC:$SERVERPATH was not yet initialized

This fixes unit test execution
---
 lib/base.php | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/base.php b/lib/base.php
index 05d151439a..1720a5fd7e 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -376,9 +376,6 @@ class OC {
 		self::$loader->registerPrefix('Patchwork', '3rdparty');
 		spl_autoload_register(array(self::$loader, 'load'));
 
-		// setup the basic server
-		self::$server = new \OC\Server();
-
 		// set some stuff
 		//ob_start();
 		error_reporting(E_ALL | E_STRICT);
@@ -458,6 +455,9 @@ class OC {
 		stream_wrapper_register('quota', 'OC\Files\Stream\Quota');
 		stream_wrapper_register('oc', 'OC\Files\Stream\OC');
 
+		// setup the basic server
+		self::$server = new \OC\Server();
+
 		self::initTemplateEngine();
 		if (!self::$CLI) {
 			self::initSession();
-- 
GitLab


From 3c026b7cf601c0b83dd02436f17714fcf48cb9a8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Mon, 16 Sep 2013 12:09:15 +0200
Subject: [PATCH 065/248] recreate an etag within the scanner if the cache
 contains an empty etag

---
 lib/files/cache/scanner.php       |  8 +++++++-
 tests/lib/files/cache/scanner.php | 17 +++++++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
index 9d180820e9..78cab6ed2d 100644
--- a/lib/files/cache/scanner.php
+++ b/lib/files/cache/scanner.php
@@ -97,13 +97,19 @@ class Scanner extends BasicEmitter {
 				}
 				$newData = $data;
 				if ($reuseExisting and $cacheData = $this->cache->get($file)) {
+					// prevent empty etag
+					$etag = $cacheData['etag'];
+					if (empty($etag)) {
+						$etag = $data['etag'];
+					}
+
 					// only reuse data if the file hasn't explicitly changed
 					if (isset($data['mtime']) && isset($cacheData['mtime']) && $data['mtime'] === $cacheData['mtime']) {
 						if (($reuseExisting & self::REUSE_SIZE) && ($data['size'] === -1)) {
 							$data['size'] = $cacheData['size'];
 						}
 						if ($reuseExisting & self::REUSE_ETAG) {
-							$data['etag'] = $cacheData['etag'];
+							$data['etag'] = $etag;
 						}
 					}
 					// Only update metadata that has changed
diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php
index f6deb93a49..fa1b340604 100644
--- a/tests/lib/files/cache/scanner.php
+++ b/tests/lib/files/cache/scanner.php
@@ -184,6 +184,23 @@ class Scanner extends \PHPUnit_Framework_TestCase {
 		$this->assertFalse($this->cache->inCache('folder/bar.txt'));
 	}
 
+	public function testETagRecreation() {
+		$this->fillTestFolders();
+
+		$this->scanner->scan('');
+
+		// manipulate etag to simulate an empty etag
+		$this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW, \OC\Files\Cache\Scanner::REUSE_ETAG);
+		$data['etag'] = '';
+		$this->cache->put('', $data);
+
+		// rescan
+		$this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW, \OC\Files\Cache\Scanner::REUSE_ETAG);
+		$newData = $this->cache->get('');
+		$this->assertNotEmpty($newData['etag']);
+
+	}
+
 	function setUp() {
 		$this->storage = new \OC\Files\Storage\Temporary(array());
 		$this->scanner = new \OC\Files\Cache\Scanner($this->storage);
-- 
GitLab


From 9297b8f678f7fe1a32ea0cc3f2cd8ba6993c42f7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Sun, 8 Sep 2013 12:12:01 +0200
Subject: [PATCH 066/248] fix gitignore for all apps* folders

---
 .gitignore | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index 724f2460b0..be69107ca1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,7 +6,7 @@
 /apps/inc.php
 
 # ignore all apps except core ones
-/apps*
+/apps*/*
 !/apps/files
 !/apps/files_encryption
 !/apps/files_external
-- 
GitLab


From d41e722629c89cecbb7e623005e331ce97dd9fc6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Mon, 16 Sep 2013 14:10:19 +0200
Subject: [PATCH 067/248] refactor upload progress

---
 apps/files/js/file-upload.js | 308 ++++++++++++++++++++---------------
 1 file changed, 173 insertions(+), 135 deletions(-)

diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index aeb2da90d5..6a53bebfcc 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -1,157 +1,196 @@
-$(document).ready(function() {
 
-	var file_upload_param = {
-		dropZone: $('#content'), // restrict dropZone to content div
-		//singleFileUploads is on by default, so the data.files array will always have length 1
-		add: function(e, data) {
+/**
+ * Function that will allow us to know if Ajax uploads are supported
+ * @link https://github.com/New-Bamboo/example-ajax-upload/blob/master/public/index.html
+ * also see article @link http://blog.new-bamboo.co.uk/2012/01/10/ridiculously-simple-ajax-uploads-with-formdata
+ */
+function supportAjaxUploadWithProgress() {
+	return supportFileAPI() && supportAjaxUploadProgressEvents() && supportFormData();
 
-			if(data.files[0].type === '' && data.files[0].size == 4096)
-			{
-				data.textStatus = 'dirorzero';
-				data.errorThrown = t('files','Unable to upload your file as it is a directory or has 0 bytes');
-				var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
-				fu._trigger('fail', e, data);
-				return true; //don't upload this file but go on with next in queue
-			}
+	// Is the File API supported?
+	function supportFileAPI() {
+		var fi = document.createElement('INPUT');
+		fi.type = 'file';
+		return 'files' in fi;
+	};
 
-			var totalSize=0;
-			$.each(data.originalFiles, function(i,file){
-				totalSize+=file.size;
-			});
+	// Are progress events supported?
+	function supportAjaxUploadProgressEvents() {
+		var xhr = new XMLHttpRequest();
+		return !! (xhr && ('upload' in xhr) && ('onprogress' in xhr.upload));
+	};
 
-			if(totalSize>$('#max_upload').val()){
-				data.textStatus = 'notenoughspace';
-				data.errorThrown = t('files','Not enough space available');
-				var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
-				fu._trigger('fail', e, data);
-				return false; //don't upload anything
-			}
+	// Is FormData supported?
+	function supportFormData() {
+		return !! window.FormData;
+	}
+}
+
+$(document).ready(function() {
 
-			// start the actual file upload
-			var jqXHR = data.submit();
+	if ( $('#file_upload_start').length ) {
+		var file_upload_param = {
+			dropZone: $('#content'), // restrict dropZone to content div
+			//singleFileUploads is on by default, so the data.files array will always have length 1
+			add: function(e, data) {
 
-			// remember jqXHR to show warning to user when he navigates away but an upload is still in progress
-			if (typeof data.context !== 'undefined' && data.context.data('type') === 'dir') {
-				var dirName = data.context.data('file');
-				if(typeof uploadingFiles[dirName] === 'undefined') {
-					uploadingFiles[dirName] = {};
+				if(data.files[0].type === '' && data.files[0].size == 4096)
+				{
+					data.textStatus = 'dirorzero';
+					data.errorThrown = t('files','Unable to upload your file as it is a directory or has 0 bytes');
+					var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
+					fu._trigger('fail', e, data);
+					return true; //don't upload this file but go on with next in queue
 				}
-				uploadingFiles[dirName][data.files[0].name] = jqXHR;
-			} else {
-				uploadingFiles[data.files[0].name] = jqXHR;
-			}
 
-			//show cancel button
-			if($('html.lte9').length === 0 && data.dataType !== 'iframe') {
-				$('#uploadprogresswrapper input.stop').show();
-			}
-		},
-		submit: function(e, data) {
-			if ( ! data.formData ) {
-				// noone set update parameters, we set the minimum
-				data.formData = {
-					requesttoken: oc_requesttoken,
-							 dir: $('#dir').val()
-				};
-			}
-		},
-		/**
-		 * called after the first add, does NOT have the data param
-		 * @param e
-		 */
-		start: function(e) {
-			//IE < 10 does not fire the necessary events for the progress bar.
-			if($('html.lte9').length > 0) {
-				return;
-			}
-			$('#uploadprogressbar').progressbar({value:0});
-			$('#uploadprogressbar').fadeIn();
-		},
-		fail: function(e, data) {
-			if (typeof data.textStatus !== 'undefined' && data.textStatus !== 'success' ) {
-				if (data.textStatus === 'abort') {
-					$('#notification').text(t('files', 'Upload cancelled.'));
-				} else {
-					// HTTP connection problem
-					$('#notification').text(data.errorThrown);
+				var totalSize=0;
+				$.each(data.originalFiles, function(i,file){
+					totalSize+=file.size;
+				});
+
+				if(totalSize>$('#max_upload').val()){
+					data.textStatus = 'notenoughspace';
+					data.errorThrown = t('files','Not enough space available');
+					var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
+					fu._trigger('fail', e, data);
+					return false; //don't upload anything
 				}
-				$('#notification').fadeIn();
-				//hide notification after 5 sec
-				setTimeout(function() {
-					$('#notification').fadeOut();
-				}, 5000);
-			}
-			delete uploadingFiles[data.files[0].name];
-		},
-		progress: function(e, data) {
-			// TODO: show nice progress bar in file row
-		},
-		progressall: function(e, data) {
-			//IE < 10 does not fire the necessary events for the progress bar.
-			if($('html.lte9').length > 0) {
-				return;
-			}
-			var progress = (data.loaded/data.total)*100;
-			$('#uploadprogressbar').progressbar('value',progress);
-		},
-		/**
-		 * called for every successful upload
-		 * @param e
-		 * @param data
-		 */
-		done:function(e, data) {
-			// handle different responses (json or body from iframe for ie)
-			var response;
-			if (typeof data.result === 'string') {
-				response = data.result;
-			} else {
-				//fetch response from iframe
-				response = data.result[0].body.innerText;
-			}
-			var result=$.parseJSON(response);
 
-			if(typeof result[0] !== 'undefined' && result[0].status === 'success') {
-				var filename = result[0].originalname;
+				// start the actual file upload
+				var jqXHR = data.submit();
 
-				// delete jqXHR reference
+				// remember jqXHR to show warning to user when he navigates away but an upload is still in progress
 				if (typeof data.context !== 'undefined' && data.context.data('type') === 'dir') {
 					var dirName = data.context.data('file');
-					delete uploadingFiles[dirName][filename];
-					if ($.assocArraySize(uploadingFiles[dirName]) == 0) {
-						delete uploadingFiles[dirName];
+					if(typeof uploadingFiles[dirName] === 'undefined') {
+						uploadingFiles[dirName] = {};
 					}
+					uploadingFiles[dirName][data.files[0].name] = jqXHR;
 				} else {
-					delete uploadingFiles[filename];
+					uploadingFiles[data.files[0].name] = jqXHR;
 				}
-				var file = result[0];
-			} else {
-				data.textStatus = 'servererror';
-				data.errorThrown = t('files', result.data.message);
-				var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
-				fu._trigger('fail', e, data);
-			}
-		},
-		/**
-		 * called after last upload
-		 * @param e
-		 * @param data
-		 */
-		stop: function(e, data) {
-			if(data.dataType !== 'iframe') {
-				$('#uploadprogresswrapper input.stop').hide();
-			}
+			},
+			submit: function(e, data) {
+				if ( ! data.formData ) {
+					// noone set update parameters, we set the minimum
+					data.formData = {
+						requesttoken: oc_requesttoken,
+								 dir: $('#dir').val()
+					};
+				}
+			},
+			/**
+			 * called after the first add, does NOT have the data param
+			 * @param e
+			 */
+			start: function(e) {
+			},
+			fail: function(e, data) {
+				if (typeof data.textStatus !== 'undefined' && data.textStatus !== 'success' ) {
+					if (data.textStatus === 'abort') {
+						$('#notification').text(t('files', 'Upload cancelled.'));
+					} else {
+						// HTTP connection problem
+						$('#notification').text(data.errorThrown);
+					}
+					$('#notification').fadeIn();
+					//hide notification after 5 sec
+					setTimeout(function() {
+						$('#notification').fadeOut();
+					}, 5000);
+				}
+				delete uploadingFiles[data.files[0].name];
+			},
+			/**
+			 * called for every successful upload
+			 * @param e
+			 * @param data
+			 */
+			done:function(e, data) {
+				// handle different responses (json or body from iframe for ie)
+				var response;
+				if (typeof data.result === 'string') {
+					response = data.result;
+				} else {
+					//fetch response from iframe
+					response = data.result[0].body.innerText;
+				}
+				var result=$.parseJSON(response);
+
+				if(typeof result[0] !== 'undefined' && result[0].status === 'success') {
+					var filename = result[0].originalname;
 
-			//IE < 10 does not fire the necessary events for the progress bar.
-			if($('html.lte9').length > 0) {
-				return;
+					// delete jqXHR reference
+					if (typeof data.context !== 'undefined' && data.context.data('type') === 'dir') {
+						var dirName = data.context.data('file');
+						delete uploadingFiles[dirName][filename];
+						if ($.assocArraySize(uploadingFiles[dirName]) == 0) {
+							delete uploadingFiles[dirName];
+						}
+					} else {
+						delete uploadingFiles[filename];
+					}
+					var file = result[0];
+				} else {
+					data.textStatus = 'servererror';
+					data.errorThrown = t('files', result.data.message);
+					var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
+					fu._trigger('fail', e, data);
+				}
+			},
+			/**
+			 * called after last upload
+			 * @param e
+			 * @param data
+			 */
+			stop: function(e, data) {
 			}
+		};
+
+		// initialize jquery fileupload (blueimp)
+		var fileupload = $('#file_upload_start').fileupload(file_upload_param);
+		window.file_upload_param = fileupload;
+
+		if(supportAjaxUploadWithProgress()) {
 
-			$('#uploadprogressbar').progressbar('value',100);
-			$('#uploadprogressbar').fadeOut();
+			// add progress handlers
+			fileupload.on('fileuploadadd', function(e, data) {
+				//show cancel button
+				//if(data.dataType !== 'iframe') { //FIXME when is iframe used? only for ie?
+				//	$('#uploadprogresswrapper input.stop').show();
+				//}
+			});
+			// add progress handlers
+			fileupload.on('fileuploadstart', function(e, data) {
+				$('#uploadprogresswrapper input.stop').show();
+				$('#uploadprogressbar').progressbar({value:0});
+				$('#uploadprogressbar').fadeIn();
+			});
+			fileupload.on('fileuploadprogress', function(e, data) {
+				//TODO progressbar in row
+			});
+			fileupload.on('fileuploadprogressall', function(e, data) {
+				var progress = (data.loaded / data.total) * 100;
+				$('#uploadprogressbar').progressbar('value', progress);
+			});
+			fileupload.on('fileuploadstop', function(e, data) {
+				$('#uploadprogresswrapper input.stop').fadeOut();
+				$('#uploadprogressbar').fadeOut();
+				
+			});
+			fileupload.on('fileuploadfail', function(e, data) {
+				//if user pressed cancel hide upload progress bar and cancel button
+				if (data.errorThrown === 'abort') {
+					$('#uploadprogresswrapper input.stop').fadeOut();
+					$('#uploadprogressbar').fadeOut();
+				}
+			});
+
+		} else {
+			console.log('skipping file progress because your browser is broken');
 		}
-	};
-	$('#file_upload_start').fileupload(file_upload_param);
-	
+	}
+
 	$.assocArraySize = function(obj) {
 		// http://stackoverflow.com/a/6700/11236
 		var size = 0, key;
@@ -353,5 +392,4 @@ $(document).ready(function() {
 			$('#new>a').click();
 		});
 	});
-	window.file_upload_param = file_upload_param;
 });
-- 
GitLab


From 07714d9a72bbc4d9bdc25a8c42d83b5a70fb5be3 Mon Sep 17 00:00:00 2001
From: Andreas Fischer <bantu@owncloud.com>
Date: Sat, 14 Sep 2013 17:56:55 +0200
Subject: [PATCH 068/248] Tests whether expired/valid link share is still
 accessible.

---
 tests/lib/share/share.php | 48 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php
index e02b0e4354..8e9eef65d3 100644
--- a/tests/lib/share/share.php
+++ b/tests/lib/share/share.php
@@ -535,4 +535,52 @@ class Test_Share extends PHPUnit_Framework_TestCase {
 			'Failed asserting that user 3 still has access to test.txt after expiration date has been set.'
 		);
 	}
+
+	protected function getShareByValidToken($token) {
+		$row = OCP\Share::getShareByToken($token);
+		$this->assertInternalType(
+			'array',
+			$row,
+			"Failed asserting that a share for token $token exists."
+		);
+		return $row;
+	}
+
+	public function testShareItemWithLink() {
+		OC_User::setUserId($this->user1);
+		$token = OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_LINK, null, OCP\PERMISSION_READ);
+		$this->assertInternalType(
+			'string',
+			$token,
+			'Failed asserting that user 1 successfully shared text.txt as link with token.'
+		);
+
+		// testGetShareByTokenNoExpiration
+		$row = $this->getShareByValidToken($token);
+		$this->assertEmpty(
+			$row['expiration'],
+			'Failed asserting that the returned row does not have an expiration date.'
+		);
+
+		// testGetShareByTokenExpirationValid
+		$this->assertTrue(
+			OCP\Share::setExpirationDate('test', 'test.txt', $this->dateInFuture),
+			'Failed asserting that user 1 successfully set a future expiration date for the test.txt share.'
+		);
+		$row = $this->getShareByValidToken($token);
+		$this->assertNotEmpty(
+			$row['expiration'],
+			'Failed asserting that the returned row has an expiration date.'
+		);
+
+		// testGetShareByTokenExpirationExpired
+		$this->assertTrue(
+			OCP\Share::setExpirationDate('test', 'test.txt', $this->dateInPast),
+			'Failed asserting that user 1 successfully set a past expiration date for the test.txt share.'
+		);
+		$this->assertFalse(
+			OCP\Share::getShareByToken($token),
+			'Failed asserting that an expired share could not be found.'
+		);
+	}
 }
-- 
GitLab


From a92d4c2c0932f5c662ed846763e3059ebdcde07c Mon Sep 17 00:00:00 2001
From: Andreas Fischer <bantu@owncloud.com>
Date: Sat, 14 Sep 2013 18:44:28 +0200
Subject: [PATCH 069/248] Perform expiration date checking before returning
 share data for token.

---
 lib/public/share.php | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/lib/public/share.php b/lib/public/share.php
index 9ab956d84b..cc3c4de620 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -293,7 +293,18 @@ class Share {
 		if (\OC_DB::isError($result)) {
 			\OC_Log::write('OCP\Share', \OC_DB::getErrorMessage($result) . ', token=' . $token, \OC_Log::ERROR);
 		}
-		return $result->fetchRow();
+		$row = $result->fetchRow();
+
+		if (!empty($row['expiration'])) {
+			$now = new \DateTime();
+			$expirationDate = new \DateTime($row['expiration'], new \DateTimeZone('UTC'));
+			if ($now > $expirationDate) {
+				self::delete($row['id']);
+				return false;
+			}
+		}
+
+		return $row;
 	}
 
 	/**
-- 
GitLab


From c8f9efeb94b136ed0906cefe946629a091796ff2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Mon, 16 Sep 2013 23:32:17 +0200
Subject: [PATCH 070/248] etag changes are now propagated up the file tree

---
 lib/files/cache/scanner.php       | 14 ++++++++++++++
 tests/lib/files/cache/scanner.php | 21 +++++++++++++++------
 2 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
index 78cab6ed2d..fdbce0d51f 100644
--- a/lib/files/cache/scanner.php
+++ b/lib/files/cache/scanner.php
@@ -99,8 +99,10 @@ class Scanner extends BasicEmitter {
 				if ($reuseExisting and $cacheData = $this->cache->get($file)) {
 					// prevent empty etag
 					$etag = $cacheData['etag'];
+					$propagateETagChange = false;
 					if (empty($etag)) {
 						$etag = $data['etag'];
+						$propagateETagChange = true;
 					}
 
 					// only reuse data if the file hasn't explicitly changed
@@ -110,6 +112,18 @@ class Scanner extends BasicEmitter {
 						}
 						if ($reuseExisting & self::REUSE_ETAG) {
 							$data['etag'] = $etag;
+							if ($propagateETagChange) {
+								$parent = $file;
+								while ($parent !== '') {
+									$parent = dirname($parent);
+									if ($parent === '.') {
+										$parent = '';
+									}
+									$parentCacheData = $this->cache->get($parent);
+									$parentCacheData['etag'] = $this->storage->getETag($parent);
+									$this->cache->put($parent, $parentCacheData);
+								}
+							}
 						}
 					}
 					// Only update metadata that has changed
diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php
index fa1b340604..b137799bbc 100644
--- a/tests/lib/files/cache/scanner.php
+++ b/tests/lib/files/cache/scanner.php
@@ -187,17 +187,26 @@ class Scanner extends \PHPUnit_Framework_TestCase {
 	public function testETagRecreation() {
 		$this->fillTestFolders();
 
-		$this->scanner->scan('');
+		$this->scanner->scan('folder/bar.txt');
 
 		// manipulate etag to simulate an empty etag
 		$this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW, \OC\Files\Cache\Scanner::REUSE_ETAG);
-		$data['etag'] = '';
-		$this->cache->put('', $data);
+		$data0 = $this->cache->get('folder/bar.txt');
+		$data1 = $this->cache->get('folder');
+		$data2 = $this->cache->get('');
+		$data0['etag'] = '';
+		$this->cache->put('folder/bar.txt', $data0);
 
 		// rescan
-		$this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW, \OC\Files\Cache\Scanner::REUSE_ETAG);
-		$newData = $this->cache->get('');
-		$this->assertNotEmpty($newData['etag']);
+		$this->scanner->scan('folder/bar.txt', \OC\Files\Cache\Scanner::SCAN_SHALLOW, \OC\Files\Cache\Scanner::REUSE_ETAG);
+
+		// verify cache content
+		$newData0 = $this->cache->get('folder/bar.txt');
+		$newData1 = $this->cache->get('folder');
+		$newData2 = $this->cache->get('');
+		$this->assertNotEmpty($newData0['etag']);
+		$this->assertNotEquals($data1['etag'], $newData1['etag']);
+		$this->assertNotEquals($data2['etag'], $newData2['etag']);
 
 	}
 
-- 
GitLab


From 981a41e2cdb0848bea6c433577a7ae60d2920a00 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 17 Sep 2013 00:26:55 +0200
Subject: [PATCH 071/248] adding interface for middleware

---
 lib/public/appframework/imiddleware.php | 88 +++++++++++++++++++++++++
 1 file changed, 88 insertions(+)
 create mode 100644 lib/public/appframework/imiddleware.php

diff --git a/lib/public/appframework/imiddleware.php b/lib/public/appframework/imiddleware.php
new file mode 100644
index 0000000000..9340034fcc
--- /dev/null
+++ b/lib/public/appframework/imiddleware.php
@@ -0,0 +1,88 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OCP\AppFramework;
+use OCP\AppFramework\Http\Response;
+
+
+/**
+ * Middleware is used to provide hooks before or after controller methods and
+ * deal with possible exceptions raised in the controller methods.
+ * They're modeled after Django's middleware system:
+ * https://docs.djangoproject.com/en/dev/topics/http/middleware/
+ */
+interface MiddleWare {
+
+
+	/**
+	 * This is being run in normal order before the controller is being
+	 * called which allows several modifications and checks
+	 *
+	 * @param Controller $controller the controller that is being called
+	 * @param string $methodName the name of the method that will be called on
+	 *                           the controller
+	 */
+	function beforeController($controller, $methodName);
+
+
+	/**
+	 * This is being run when either the beforeController method or the
+	 * controller method itself is throwing an exception. The middleware is
+	 * asked in reverse order to handle the exception and to return a response.
+	 * If the response is null, it is assumed that the exception could not be
+	 * handled and the error will be thrown again
+	 *
+	 * @param Controller $controller the controller that is being called
+	 * @param string $methodName the name of the method that will be called on
+	 *                           the controller
+	 * @param \Exception $exception the thrown exception
+	 * @throws \Exception the passed in exception if it cant handle it
+	 * @return Response a Response object in case that the exception was handled
+	 */
+	function afterException($controller, $methodName, \Exception $exception);
+
+	/**
+	 * This is being run after a successful controller method call and allows
+	 * the manipulation of a Response object. The middleware is run in reverse order
+	 *
+	 * @param Controller $controller the controller that is being called
+	 * @param string $methodName the name of the method that will be called on
+	 *                           the controller
+	 * @param Response $response the generated response from the controller
+	 * @return Response a Response object
+	 */
+	function afterController($controller, $methodName, Response $response);
+
+	/**
+	 * This is being run after the response object has been rendered and
+	 * allows the manipulation of the output. The middleware is run in reverse order
+	 *
+	 * @param Controller $controller the controller that is being called
+	 * @param string $methodName the name of the method that will be called on
+	 *                           the controller
+	 * @param string $output the generated output from a response
+	 * @return string the output that should be printed
+	 */
+	function beforeOutput($controller, $methodName, $output);
+}
-- 
GitLab


From 822daa8f8adb9c31b9bfeac67ff165c18dc321c2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 17 Sep 2013 00:27:22 +0200
Subject: [PATCH 072/248] class files have to be lowercase

---
 lib/public/appframework/{App.php => app.php} | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename lib/public/appframework/{App.php => app.php} (100%)

diff --git a/lib/public/appframework/App.php b/lib/public/appframework/app.php
similarity index 100%
rename from lib/public/appframework/App.php
rename to lib/public/appframework/app.php
-- 
GitLab


From b9e943f5d52d1bf888233fdc2288477322591c43 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 17 Sep 2013 09:42:14 +0200
Subject: [PATCH 073/248] fix naming

---
 lib/public/appframework/imiddleware.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/public/appframework/imiddleware.php b/lib/public/appframework/imiddleware.php
index 9340034fcc..1e76d3bbe4 100644
--- a/lib/public/appframework/imiddleware.php
+++ b/lib/public/appframework/imiddleware.php
@@ -32,7 +32,7 @@ use OCP\AppFramework\Http\Response;
  * They're modeled after Django's middleware system:
  * https://docs.djangoproject.com/en/dev/topics/http/middleware/
  */
-interface MiddleWare {
+interface IMiddleWare {
 
 
 	/**
-- 
GitLab


From 9b420e8660404de27e3af629bfca188ae90cf7bd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 17 Sep 2013 13:33:47 +0200
Subject: [PATCH 074/248] use \OC::$server->getPreviewManager() instead of
 \OCP\Preview

---
 apps/files/ajax/rawlist.php        | 6 +++---
 apps/files/lib/helper.php          | 2 +-
 apps/files_sharing/public.php      | 2 +-
 apps/files_trashbin/lib/helper.php | 2 +-
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/apps/files/ajax/rawlist.php b/apps/files/ajax/rawlist.php
index 9ccd4cc299..802a308353 100644
--- a/apps/files/ajax/rawlist.php
+++ b/apps/files/ajax/rawlist.php
@@ -26,7 +26,7 @@ $files = array();
 if($mimetypes && !in_array('httpd/unix-directory', $mimetypes)) {
 	foreach( \OC\Files\Filesystem::getDirectoryContent( $dir, 'httpd/unix-directory' ) as $file ) {
 		$file['directory'] = $dir;
-		$file['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($file['mimetype']);
+		$file['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($file['mimetype']);
 		$file["date"] = OCP\Util::formatDate($file["mtime"]);
 		$file['mimetype_icon'] = \OCA\files\lib\Helper::determineIcon($file);
 		$files[] = $file;
@@ -37,7 +37,7 @@ if (is_array($mimetypes) && count($mimetypes)) {
 	foreach ($mimetypes as $mimetype) {
 		foreach( \OC\Files\Filesystem::getDirectoryContent( $dir, $mimetype ) as $file ) {
 			$file['directory'] = $dir;
-			$file['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($file['mimetype']);
+			$file['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($file['mimetype']);
 			$file["date"] = OCP\Util::formatDate($file["mtime"]);
 			$file['mimetype_icon'] = \OCA\files\lib\Helper::determineIcon($file);
 			$files[] = $file;
@@ -46,7 +46,7 @@ if (is_array($mimetypes) && count($mimetypes)) {
 } else {
 	foreach( \OC\Files\Filesystem::getDirectoryContent( $dir ) as $file ) {
 		$file['directory'] = $dir;
-		$file['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($file['mimetype']);
+		$file['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($file['mimetype']);
 		$file["date"] = OCP\Util::formatDate($file["mtime"]);
 		$file['mimetype_icon'] = \OCA\files\lib\Helper::determineIcon($file);
 		$files[] = $file;
diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php
index 3c13b8ea6e..f0d3560b87 100644
--- a/apps/files/lib/helper.php
+++ b/apps/files/lib/helper.php
@@ -84,7 +84,7 @@ class Helper
 				}
 			}
 			$i['directory'] = $dir;
-			$i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($i['mimetype']);
+			$i['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($i['mimetype']);
 			$i['icon'] = \OCA\files\lib\Helper::determineIcon($i);
 			$files[] = $i;
 		}
diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php
index 6d3a07a9d0..8d474e87b4 100644
--- a/apps/files_sharing/public.php
+++ b/apps/files_sharing/public.php
@@ -187,7 +187,7 @@ if (isset($path)) {
 					} else {
 						$i['extension'] = '';
 					}
-					$i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($i['mimetype']);
+					$i['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($i['mimetype']);
 				}
 				$i['directory'] = $getPath;
 				$i['permissions'] = OCP\PERMISSION_READ;
diff --git a/apps/files_trashbin/lib/helper.php b/apps/files_trashbin/lib/helper.php
index 098fc0b54b..4cb5e8a390 100644
--- a/apps/files_trashbin/lib/helper.php
+++ b/apps/files_trashbin/lib/helper.php
@@ -61,7 +61,7 @@ class Helper
 				$i['directory'] = '';
 			}
 			$i['permissions'] = \OCP\PERMISSION_READ;
-			$i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($r['mime']);
+			$i['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($r['mime']);
 			$i['icon'] = \OCA\files\lib\Helper::determineIcon($i);
 			$files[] = $i;
 		}
-- 
GitLab


From 72eaf2894a540bc9280e144ba493db7fcde07eac Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Tue, 17 Sep 2013 16:53:52 +0200
Subject: [PATCH 075/248] performance improvement, check configuration only if
 no private key exists

---
 apps/files_encryption/hooks/hooks.php | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/apps/files_encryption/hooks/hooks.php b/apps/files_encryption/hooks/hooks.php
index d40ae95a44..d9221c6e82 100644
--- a/apps/files_encryption/hooks/hooks.php
+++ b/apps/files_encryption/hooks/hooks.php
@@ -44,13 +44,18 @@ class Hooks {
 			\OC_Util::setupFS($params['uid']);
 		}
 
-		//check if all requirements are met
-		if(!Helper::checkRequirements() || !Helper::checkConfiguration()) {
-			$error_msg = $l->t("Missing requirements.");
-			$hint = $l->t('Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled.');
-			\OC_App::disable('files_encryption');
-			\OCP\Util::writeLog('Encryption library', $error_msg . ' ' . $hint, \OCP\Util::ERROR);
-			\OCP\Template::printErrorPage($error_msg, $hint);
+		$privateKey = \OCA\Encryption\Keymanager::getPrivateKey($view, $params['uid']);
+
+		// if no private key exists, check server configuration
+		if(!$privateKey) {
+			//check if all requirements are met
+			if(!Helper::checkRequirements() || !Helper::checkConfiguration()) {
+				$error_msg = $l->t("Missing requirements.");
+				$hint = $l->t('Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled.');
+				\OC_App::disable('files_encryption');
+				\OCP\Util::writeLog('Encryption library', $error_msg . ' ' . $hint, \OCP\Util::ERROR);
+				\OCP\Template::printErrorPage($error_msg, $hint);
+			}
 		}
 
 		$util = new Util($view, $params['uid']);
-- 
GitLab


From fe86182dac387817258942a46905f2b801862d4d Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Tue, 17 Sep 2013 17:46:33 +0200
Subject: [PATCH 076/248] OC_Cache namespace changes and add UserCache to
 server container.

Refs #4863
---
 lib/base.php                    |  4 +-
 lib/cache.php                   |  8 ++--
 lib/cache/broker.php            |  4 +-
 lib/cache/file.php              | 13 +++---
 lib/cache/fileglobal.php        |  7 +--
 lib/cache/fileglobalgc.php      |  5 ++-
 lib/cache/usercache.php         | 77 +++++++++++++++++++++++++++++++++
 lib/filechunking.php            |  2 +-
 lib/public/icache.php           | 55 +++++++++++++++++++++++
 lib/public/iservercontainer.php |  7 +++
 lib/server.php                  | 34 ++++++++++-----
 tests/lib/cache/file.php        | 30 +++++++------
 tests/lib/cache/usercache.php   | 68 +++++++++++++++++++++++++++++
 13 files changed, 270 insertions(+), 44 deletions(-)
 create mode 100644 lib/cache/usercache.php
 create mode 100644 lib/public/icache.php
 create mode 100644 tests/lib/cache/usercache.php

diff --git a/lib/base.php b/lib/base.php
index 1720a5fd7e..520be11bc5 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -564,11 +564,11 @@ class OC {
 		if (OC_Config::getValue('installed', false)) { //don't try to do this before we are properly setup
 			// register cache cleanup jobs
 			try { //if this is executed before the upgrade to the new backgroundjob system is completed it will throw an exception
-				\OCP\BackgroundJob::registerJob('OC_Cache_FileGlobalGC');
+				\OCP\BackgroundJob::registerJob('OC\Cache\FileGlobalGC');
 			} catch (Exception $e) {
 
 			}
-			OC_Hook::connect('OC_User', 'post_login', 'OC_Cache_File', 'loginListener');
+			OC_Hook::connect('OC_User', 'post_login', 'OC\Cache\File', 'loginListener');
 		}
 	}
 
diff --git a/lib/cache.php b/lib/cache.php
index 48b9964ba9..c99663a0ca 100644
--- a/lib/cache.php
+++ b/lib/cache.php
@@ -6,7 +6,9 @@
  * See the COPYING-README file.
  */
 
-class OC_Cache {
+namespace OC\Cache;
+
+class Cache {
 	/**
 	 * @var OC_Cache $user_cache
 	 */
@@ -22,7 +24,7 @@ class OC_Cache {
 	 */
 	static public function getGlobalCache() {
 		if (!self::$global_cache) {
-			self::$global_cache = new OC_Cache_FileGlobal();
+			self::$global_cache = new FileGlobal();
 		}
 		return self::$global_cache;
 	}
@@ -33,7 +35,7 @@ class OC_Cache {
 	 */
 	static public function getUserCache() {
 		if (!self::$user_cache) {
-			self::$user_cache = new OC_Cache_File();
+			self::$user_cache = new File();
 		}
 		return self::$user_cache;
 	}
diff --git a/lib/cache/broker.php b/lib/cache/broker.php
index a161dbfa3b..b7f1b67a6d 100644
--- a/lib/cache/broker.php
+++ b/lib/cache/broker.php
@@ -6,7 +6,9 @@
  * See the COPYING-README file.
  */
 
-class OC_Cache_Broker {
+namespace OC\Cache;
+
+class Broker {
 	protected $fast_cache;
 	protected $slow_cache;
 
diff --git a/lib/cache/file.php b/lib/cache/file.php
index 361138e473..2ab914d17b 100644
--- a/lib/cache/file.php
+++ b/lib/cache/file.php
@@ -6,24 +6,25 @@
  * See the COPYING-README file.
  */
 
+namespace OC\Cache;
 
-class OC_Cache_File{
+class File {
 	protected $storage;
 	protected function getStorage() {
 		if (isset($this->storage)) {
 			return $this->storage;
 		}
-		if(OC_User::isLoggedIn()) {
-			\OC\Files\Filesystem::initMountPoints(OC_User::getUser());
+		if(\OC_User::isLoggedIn()) {
+			\OC\Files\Filesystem::initMountPoints(\OC_User::getUser());
 			$subdir = 'cache';
-			$view = new \OC\Files\View('/'.OC_User::getUser());
+			$view = new \OC\Files\View('/' . \OC_User::getUser());
 			if(!$view->file_exists($subdir)) {
 				$view->mkdir($subdir);
 			}
-			$this->storage = new \OC\Files\View('/'.OC_User::getUser().'/'.$subdir);
+			$this->storage = new \OC\Files\View('/' . \OC_User::getUser().'/'.$subdir);
 			return $this->storage;
 		}else{
-			OC_Log::write('core', 'Can\'t get cache storage, user not logged in', OC_Log::ERROR);
+			\OC_Log::write('core', 'Can\'t get cache storage, user not logged in', \OC_Log::ERROR);
 			return false;
 		}
 	}
diff --git a/lib/cache/fileglobal.php b/lib/cache/fileglobal.php
index c0bd8e45f3..9ca1740293 100644
--- a/lib/cache/fileglobal.php
+++ b/lib/cache/fileglobal.php
@@ -6,8 +6,9 @@
  * See the COPYING-README file.
  */
 
+namespace OC\Cache;
 
-class OC_Cache_FileGlobal{
+class FileGlobal {
 	static protected function getCacheDir() {
 		$cache_dir = get_temp_dir().'/owncloud-'.OC_Util::getInstanceId().'/';
 		if (!is_dir($cache_dir)) {
@@ -80,13 +81,13 @@ class OC_Cache_FileGlobal{
 	}
 
 	static public function gc() {
-		$last_run = OC_AppConfig::getValue('core', 'global_cache_gc_lastrun', 0);
+		$last_run = \OC_AppConfig::getValue('core', 'global_cache_gc_lastrun', 0);
 		$now = time();
 		if (($now - $last_run) < 300) {
 			// only do cleanup every 5 minutes
 			return;
 		}
-		OC_AppConfig::setValue('core', 'global_cache_gc_lastrun', $now);
+		\OC_AppConfig::setValue('core', 'global_cache_gc_lastrun', $now);
 		$cache_dir = self::getCacheDir();
 		if($cache_dir and is_dir($cache_dir)) {
 			$dh=opendir($cache_dir);
diff --git a/lib/cache/fileglobalgc.php b/lib/cache/fileglobalgc.php
index a29c31f906..399dd5e6f9 100644
--- a/lib/cache/fileglobalgc.php
+++ b/lib/cache/fileglobalgc.php
@@ -1,8 +1,9 @@
 <?php
 
+namespace OC\Cache;
 
-class OC_Cache_FileGlobalGC extends \OC\BackgroundJob\Job{
+class FileGlobalGC extends \OC\BackgroundJob\Job{
 	public function run($argument){
-		OC_Cache_FileGlobal::gc();
+		FileGlobal::gc();
 	}
 }
diff --git a/lib/cache/usercache.php b/lib/cache/usercache.php
new file mode 100644
index 0000000000..aac3b39af3
--- /dev/null
+++ b/lib/cache/usercache.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Tanghus (thomas@tanghus.net)
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Cache;
+
+/**
+ * This interface defines method for accessing the file based user cache.
+ */
+class UserCache implements \OCP\ICache {
+
+	/**
+	 * @var OC\Cache\File $userCache
+	 */
+	protected $userCache;
+
+	public function __construct() {
+		$this->userCache = new File();
+	}
+
+	/**
+	 * Get a value from the user cache
+	 *
+	 * @param string $key
+	 * @return mixed
+	 */
+	public function get($key) {
+		return $this->userCache->get($key);
+	}
+
+	/**
+	 * Set a value in the user cache
+	 *
+	 * @param string $key
+	 * @param mixed $value
+	 * @param int $ttl Time To Live in seconds. Defaults to 60*60*24
+	 * @return bool
+	 */
+	public function set($key, $value, $ttl = 0) {
+		if (empty($key)) {
+			return false;
+		}
+		return $this->userCache->set($key, $value, $ttl);
+	}
+
+	/**
+	 * Check if a value is set in the user cache
+	 *
+	 * @param string $key
+	 * @return bool
+	 */
+	public function hasKey($key) {
+		return $this->userCache->hasKey($key);
+	}
+
+	/**
+	 * Remove an item from the user cache
+	 *
+	 * @param string $key
+	 * @return bool
+	 */
+	public function remove($key) {
+		return $this->userCache->remove($key);
+	}
+
+	/**
+	 * clear the user cache of all entries starting with a prefix
+	 * @param string prefix (optional)
+	 * @return bool
+	 */
+	public function clear($prefix = '') {
+		return $this->userCache->clear($prefix);
+	}
+}
diff --git a/lib/filechunking.php b/lib/filechunking.php
index e6d69273a4..313a6ee87d 100644
--- a/lib/filechunking.php
+++ b/lib/filechunking.php
@@ -29,7 +29,7 @@ class OC_FileChunking {
 
 	protected function getCache() {
 		if (!isset($this->cache)) {
-			$this->cache = new OC_Cache_File();
+			$this->cache = new \OC\Cache\File();
 		}
 		return $this->cache;
 	}
diff --git a/lib/public/icache.php b/lib/public/icache.php
new file mode 100644
index 0000000000..202459f7c2
--- /dev/null
+++ b/lib/public/icache.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Tanghus (thomas@tanghus.net)
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OCP;
+
+/**
+ * This interface defines method for accessing the file based user cache.
+ */
+interface ICache {
+
+	/**
+	 * Get a value from the user cache
+	 *
+	 * @param string $key
+	 * @return mixed
+	 */
+	public function get($key);
+
+	/**
+	 * Set a value in the user cache
+	 *
+	 * @param string $key
+	 * @param mixed $value
+	 * @param int $ttl Time To Live in seconds. Defaults to 60*60*24
+	 * @return bool
+	 */
+	public function set($key, $value, $ttl = 0);
+
+	/**
+	 * Check if a value is set in the user cache
+	 *
+	 * @param string $key
+	 * @return bool
+	 */
+	public function hasKey($key);
+
+	/**
+	 * Remove an item from the user cache
+	 * 
+	 * @param string $key
+	 * @return bool
+	 */
+	public function remove($key);
+
+	/**
+	 * clear the user cache of all entries starting with a prefix
+	 * @param string prefix (optional)
+	 * @return bool
+	 */
+	public function clear($prefix = '');
+}
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index d88330698d..1087c24edc 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -62,4 +62,11 @@ interface IServerContainer {
 	 */
 	function getRootFolder();
 
+	/**
+	 * Returns an ICache instance
+	 *
+	 * @return \OCP\ICache
+	 */
+	function getCache();
+
 }
diff --git a/lib/server.php b/lib/server.php
index 9e87bd3190..f02b2bed8d 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -17,10 +17,10 @@ use OCP\IServerContainer;
 class Server extends SimpleContainer implements IServerContainer {
 
 	function __construct() {
-		$this->registerService('ContactsManager', function($c){
+		$this->registerService('ContactsManager', function($c) {
 			return new ContactsManager();
 		});
-		$this->registerService('Request', function($c){
+		$this->registerService('Request', function($c) {
 			$params = array();
 
 			// we json decode the body only in case of content type json
@@ -46,10 +46,10 @@ class Server extends SimpleContainer implements IServerContainer {
 				)
 			);
 		});
-		$this->registerService('PreviewManager', function($c){
+		$this->registerService('PreviewManager', function($c) {
 			return new PreviewManager();
 		});
-		$this->registerService('RootFolder', function($c){
+		$this->registerService('RootFolder', function($c) {
 			// TODO: get user and user manager from container as well
 			$user = \OC_User::getUser();
 			$user = \OC_User::getManager()->get($user);
@@ -57,6 +57,9 @@ class Server extends SimpleContainer implements IServerContainer {
 			$view = new View();
 			return new Root($manager, $view, $user);
 		});
+		$this->registerService('UserCache', function($c) {
+			return new UserCache();
+		});
 	}
 
 	/**
@@ -67,14 +70,13 @@ class Server extends SimpleContainer implements IServerContainer {
 	}
 
 	/**
-	 * The current request object holding all information about the request currently being processed
-	 * is returned from this method.
+	 * The current request object holding all information about the request
+	 * currently being processed is returned from this method.
 	 * In case the current execution was not initiated by a web request null is returned
 	 *
 	 * @return \OCP\IRequest|null
 	 */
-	function getRequest()
-	{
+	function getRequest() {
 		return $this->query('Request');
 	}
 
@@ -83,8 +85,7 @@ class Server extends SimpleContainer implements IServerContainer {
 	 *
 	 * @return \OCP\IPreview
 	 */
-	function getPreviewManager()
-	{
+	function getPreviewManager() {
 		return $this->query('PreviewManager');
 	}
 
@@ -93,8 +94,17 @@ class Server extends SimpleContainer implements IServerContainer {
 	 *
 	 * @return \OCP\Files\Folder
 	 */
-	function getRootFolder()
-	{
+	function getRootFolder() {
 		return $this->query('RootFolder');
 	}
+
+	/**
+	 * Returns an ICache instance
+	 *
+	 * @return \OCP\ICache
+	 */
+	function getCache() {
+		return $this->query('UserCache');
+	}
+
 }
diff --git a/tests/lib/cache/file.php b/tests/lib/cache/file.php
index 038cb21b25..3767c83fcb 100644
--- a/tests/lib/cache/file.php
+++ b/tests/lib/cache/file.php
@@ -20,7 +20,9 @@
 *
 */
 
-class Test_Cache_File extends Test_Cache {
+namespace Test\Cache;
+
+class FileCache extends \Test_Cache {
 	private $user;
 	private $datadir;
 
@@ -30,8 +32,8 @@ class Test_Cache_File extends Test_Cache {
 	
 	public function setUp() {
 		//clear all proxies and hooks so we can do clean testing
-		OC_FileProxy::clearProxies();
-		OC_Hook::clear('OC_Filesystem');
+		\OC_FileProxy::clearProxies();
+		\OC_Hook::clear('OC_Filesystem');
 
 		//disabled atm
 		//enable only the encryption hook if needed
@@ -44,27 +46,27 @@ class Test_Cache_File extends Test_Cache {
 		$storage = new \OC\Files\Storage\Temporary(array());
 		\OC\Files\Filesystem::mount($storage,array(),'/');
 		$datadir = str_replace('local::', '', $storage->getId());
-		$this->datadir = OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data');
-		OC_Config::setValue('datadirectory', $datadir);
+		$this->datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT.'/data');
+		\OC_Config::setValue('datadirectory', $datadir);
 
-		OC_User::clearBackends();
-		OC_User::useBackend(new OC_User_Dummy());
+		\OC_User::clearBackends();
+		\OC_User::useBackend(new \OC_User_Dummy());
 		
 		//login
-		OC_User::createUser('test', 'test');
+		\OC_User::createUser('test', 'test');
 		
-		$this->user=OC_User::getUser();
-		OC_User::setUserId('test');
+		$this->user = \OC_User::getUser();
+		\OC_User::setUserId('test');
 
 		//set up the users dir
-		$rootView=new \OC\Files\View('');
+		$rootView = new \OC\Files\View('');
 		$rootView->mkdir('/test');
 		
-		$this->instance=new OC_Cache_File();
+		$this->instance=new \OC\Cache\File();
 	}
 
 	public function tearDown() {
-		OC_User::setUserId($this->user);
-		OC_Config::setValue('datadirectory', $this->datadir);
+		\OC_User::setUserId($this->user);
+		\OC_Config::setValue('datadirectory', $this->datadir);
 	}
 }
diff --git a/tests/lib/cache/usercache.php b/tests/lib/cache/usercache.php
new file mode 100644
index 0000000000..21b7f848ab
--- /dev/null
+++ b/tests/lib/cache/usercache.php
@@ -0,0 +1,68 @@
+<?php
+/**
+* ownCloud
+*
+* @author Robin Appelman
+* @copyright 2012 Robin Appelman icewind@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+namespace Test\Cache;
+
+class UserCache extends \Test_Cache {
+	private $user;
+	private $datadir;
+
+	public function setUp() {
+		//clear all proxies and hooks so we can do clean testing
+		\OC_FileProxy::clearProxies();
+		\OC_Hook::clear('OC_Filesystem');
+
+		//disabled atm
+		//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\Files\Filesystem::clearMounts();
+		$storage = new \OC\Files\Storage\Temporary(array());
+		\OC\Files\Filesystem::mount($storage,array(),'/');
+		$datadir = str_replace('local::', '', $storage->getId());
+		$this->datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT.'/data');
+		\OC_Config::setValue('datadirectory', $datadir);
+
+		\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\Files\View('');
+		$rootView->mkdir('/test');
+		
+		$this->instance=new \OC\Cache\UserCache();
+	}
+
+	public function tearDown() {
+		\OC_User::setUserId($this->user);
+		\OC_Config::setValue('datadirectory', $this->datadir);
+	}
+}
-- 
GitLab


From 1a130627012bb17ed9edc4583a4d8250ff4e2882 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Tue, 17 Sep 2013 18:02:37 +0200
Subject: [PATCH 077/248] Add legacy wrapper

---
 lib/legacy/cache.php | 10 ++++++++++
 1 file changed, 10 insertions(+)
 create mode 100644 lib/legacy/cache.php

diff --git a/lib/legacy/cache.php b/lib/legacy/cache.php
new file mode 100644
index 0000000000..83b214170f
--- /dev/null
+++ b/lib/legacy/cache.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Tanghus (thomas@tanghus.net)
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class Cache extends OC\Cache {
+}
\ No newline at end of file
-- 
GitLab


From d6771502f21349d5393158eda6d2d16569fd60c3 Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Tue, 17 Sep 2013 18:11:43 +0200
Subject: [PATCH 078/248] check only permission from link-share to decide if
 public upload is enabled or disabled

---
 core/js/share.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/core/js/share.js b/core/js/share.js
index 5d34faf8a5..250f410072 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -177,7 +177,9 @@ OC.Share={
 				if (allowPublicUploadStatus) {
 					return true;
 				}
-				allowPublicUploadStatus = (value.permissions & OC.PERMISSION_CREATE) ? true : false;
+				if (value.share_type === OC.Share.SHARE_TYPE_LINK) {
+					allowPublicUploadStatus = (value.permissions & OC.PERMISSION_CREATE) ? true : false;
+				}
 			});
 
 			html += '<input id="shareWith" type="text" placeholder="'+t('core', 'Share with')+'" />';
-- 
GitLab


From 642b064c5b98990f6ac0e3ba344db8cd1fe4d1f8 Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Tue, 17 Sep 2013 18:18:23 +0200
Subject: [PATCH 079/248] we can leave the loop if the permission of the link
 share was checked

---
 core/js/share.js | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/core/js/share.js b/core/js/share.js
index 250f410072..641252a4d7 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -174,11 +174,9 @@ OC.Share={
 			var allowPublicUploadStatus = false;
 
 			$.each(data.shares, function(key, value) {
-				if (allowPublicUploadStatus) {
-					return true;
-				}
 				if (value.share_type === OC.Share.SHARE_TYPE_LINK) {
 					allowPublicUploadStatus = (value.permissions & OC.PERMISSION_CREATE) ? true : false;
+					return true;
 				}
 			});
 
-- 
GitLab


From 5c19b995db6dab9aae579274db82413117cce67b Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Tue, 17 Sep 2013 18:31:14 +0200
Subject: [PATCH 080/248] Add interface for Session and add getter in server
 container.

---
 lib/public/iservercontainer.php |  7 ++++++
 lib/public/isession.php         | 44 +++++++++++++++++++++++++++++++++
 lib/server.php                  | 10 ++++++++
 lib/session/session.php         |  2 +-
 4 files changed, 62 insertions(+), 1 deletion(-)
 create mode 100644 lib/public/isession.php

diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index d88330698d..ec7212b306 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -62,4 +62,11 @@ interface IServerContainer {
 	 */
 	function getRootFolder();
 
+	/**
+	 * Returns the current session
+	 *
+	 * @return \OCP\ISession
+	 */
+	function getSession();
+
 }
diff --git a/lib/public/isession.php b/lib/public/isession.php
new file mode 100644
index 0000000000..5f9ce32f3b
--- /dev/null
+++ b/lib/public/isession.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Tanghus (thomas@tanghus.net)
+ * @author Thomas Tanghus
+ * @author Robin Appelman
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP;
+
+interface ISession {
+	/**
+	 * @param string $key
+	 * @param mixed $value
+	 */
+	public function set($key, $value);
+
+	/**
+	 * @param string $key
+	 * @return mixed should return null if $key does not exist
+	 */
+	public function get($key);
+
+	/**
+	 * @param string $key
+	 * @return bool
+	 */
+	public function exists($key);
+
+	/**
+	 * should not throw any errors if $key does not exist
+	 *
+	 * @param string $key
+	 */
+	public function remove($key);
+
+	/**
+	 * removes all entries within the cache namespace
+	 */
+	public function clear();
+
+}
diff --git a/lib/server.php b/lib/server.php
index 9e87bd3190..0124ad72c0 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -97,4 +97,14 @@ class Server extends SimpleContainer implements IServerContainer {
 	{
 		return $this->query('RootFolder');
 	}
+
+	/**
+	 * Returns the current session
+	 *
+	 * @return \OCP\ISession
+	 */
+	function getSession() {
+		return \OC::$session;
+	}
+
 }
diff --git a/lib/session/session.php b/lib/session/session.php
index 55515f57a8..c55001ecca 100644
--- a/lib/session/session.php
+++ b/lib/session/session.php
@@ -8,7 +8,7 @@
 
 namespace OC\Session;
 
-abstract class Session implements \ArrayAccess {
+abstract class Session implements \ArrayAccess, \OCP\ISession {
 	/**
 	 * $name serves as a namespace for the session keys
 	 *
-- 
GitLab


From 5bddb5377a40c987223804e8c3846437b6cf120a Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Tue, 17 Sep 2013 18:38:18 +0200
Subject: [PATCH 081/248] Purge session from Request - and fix some styles

---
 lib/appframework/http/request.php | 51 ++++++++++---------------------
 lib/public/irequest.php           |  9 ------
 lib/server.php                    |  1 -
 3 files changed, 16 insertions(+), 45 deletions(-)

diff --git a/lib/appframework/http/request.php b/lib/appframework/http/request.php
index 4f1775182a..34605acdfe 100644
--- a/lib/appframework/http/request.php
+++ b/lib/appframework/http/request.php
@@ -33,16 +33,15 @@ class Request implements \ArrayAccess, \Countable, IRequest {
 
 	protected $items = array();
 	protected $allowedKeys = array(
-		'get', 
-		'post', 
-		'files', 
-		'server', 
-		'env', 
-		'session', 
-		'cookies', 
-		'urlParams', 
-		'params', 
-		'parameters', 
+		'get',
+		'post',
+		'files',
+		'server',
+		'env',
+		'cookies',
+		'urlParams',
+		'params',
+		'parameters',
 		'method'
 	);
 
@@ -156,7 +155,6 @@ class Request implements \ArrayAccess, \Countable, IRequest {
 			case 'files':
 			case 'server':
 			case 'env':
-			case 'session':
 			case 'cookies':
 			case 'parameters':
 			case 'params':
@@ -229,8 +227,7 @@ class Request implements \ArrayAccess, \Countable, IRequest {
 	 * @param mixed $default If the key is not found, this value will be returned
 	 * @return mixed the content of the array
 	 */
-	public function getParam($key, $default = null)
-	{
+	public function getParam($key, $default = null) {
 		return isset($this->parameters[$key])
 			? $this->parameters[$key]
 			: $default;
@@ -241,8 +238,7 @@ class Request implements \ArrayAccess, \Countable, IRequest {
 	 * (as GET or POST) or throuh the URL by the route
 	 * @return array the array with all parameters
 	 */
-	public function getParams()
-	{
+	public function getParams() {
 		return $this->parameters;
 	}
 
@@ -250,8 +246,7 @@ class Request implements \ArrayAccess, \Countable, IRequest {
 	 * Returns the method of the request
 	 * @return string the method of the request (POST, GET, etc)
 	 */
-	public function getMethod()
-	{
+	public function getMethod() {
 		return $this->method;
 	}
 
@@ -260,8 +255,7 @@ class Request implements \ArrayAccess, \Countable, IRequest {
 	 * @param string $key the key that will be taken from the $_FILES array
 	 * @return array the file in the $_FILES element
 	 */
-	public function getUploadedFile($key)
-	{
+	public function getUploadedFile($key) {
 		return isset($this->files[$key]) ? $this->files[$key] : null;
 	}
 
@@ -270,28 +264,16 @@ class Request implements \ArrayAccess, \Countable, IRequest {
 	 * @param string $key the key that will be taken from the $_ENV array
 	 * @return array the value in the $_ENV element
 	 */
-	public function getEnv($key)
-	{
+	public function getEnv($key) {
 		return isset($this->env[$key]) ? $this->env[$key] : null;
 	}
 
-	/**
-	 * Shortcut for getting session variables
-	 * @param string $key the key that will be taken from the $_SESSION array
-	 * @return array the value in the $_SESSION element
-	 */
-	function getSession($key)
-	{
-		return isset($this->session[$key]) ? $this->session[$key] : null;
-	}
-
 	/**
 	 * Shortcut for getting cookie variables
 	 * @param string $key the key that will be taken from the $_COOKIE array
 	 * @return array the value in the $_COOKIE element
 	 */
-	function getCookie($key)
-	{
+	function getCookie($key) {
 		return isset($this->cookies[$key]) ? $this->cookies[$key] : null;
 	}
 
@@ -304,8 +286,7 @@ class Request implements \ArrayAccess, \Countable, IRequest {
 	 *
 	 * @throws \LogicException
 	 */
-	function getContent($asResource = false)
-	{
+	function getContent($asResource = false) {
 		return null;
 //		if (false === $this->content || (true === $asResource && null !== $this->content)) {
 //			throw new \LogicException('getContent() can only be called once when using the resource return type.');
diff --git a/lib/public/irequest.php b/lib/public/irequest.php
index cd39855950..9f335b06f2 100644
--- a/lib/public/irequest.php
+++ b/lib/public/irequest.php
@@ -76,15 +76,6 @@ interface IRequest {
 	public function getEnv($key);
 
 
-	/**
-	 * Shortcut for getting session variables
-	 *
-	 * @param string $key the key that will be taken from the $_SESSION array
-	 * @return array the value in the $_SESSION element
-	 */
-	function getSession($key);
-
-
 	/**
 	 * Shortcut for getting cookie variables
 	 *
diff --git a/lib/server.php b/lib/server.php
index 0124ad72c0..0eee3e0f73 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -36,7 +36,6 @@ class Server extends SimpleContainer implements IServerContainer {
 					'files' => $_FILES,
 					'server' => $_SERVER,
 					'env' => $_ENV,
-					'session' => $_SESSION,
 					'cookies' => $_COOKIE,
 					'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD']))
 						? $_SERVER['REQUEST_METHOD']
-- 
GitLab


From b40925ae1747ae44a52fb1f8dcf7645d022c6f13 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Wed, 31 Jul 2013 22:24:52 +0200
Subject: [PATCH 082/248] initial scrollto implementation:

use places/folder icon,
move link construction to JS,
only show icon on hover,
use 'searchresult' as css class name,
add filter/unfilter methods,
highlight searched files in current filelist
only filter when correct FileList is present
---
 apps/files/css/files.css          |  3 +++
 apps/files/js/filelist.js         | 41 +++++++++++++++++++++++++++----
 apps/files/js/files.js            |  5 ++++
 core/js/js.js                     | 13 ++++++++++
 lib/search/provider/file.php      |  3 ++-
 lib/search/result.php             |  4 ++-
 search/css/results.css            | 22 +++++++++++++++--
 search/js/result.js               | 38 +++++++++++++++++++++++-----
 search/templates/part.results.php |  3 ++-
 9 files changed, 116 insertions(+), 16 deletions(-)

diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index 41d9808c56..0acb3c5d82 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -76,6 +76,9 @@
 #filestable tbody tr.selected {
 	background-color: rgb(230,230,230);
 }
+#filestable tbody tr.searchresult {
+	background-color: rgb(240,240,240);
+}
 tbody a { color:#000; }
 span.extension, span.uploading, td.date { color:#999; }
 span.extension { text-transform:lowercase; -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; }
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index b50d46c98d..9a2d39c365 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -643,6 +643,37 @@ var FileList={
 		if (FileList._maskTimeout){
 			window.clearTimeout(FileList._maskTimeout);
 		}
+	},
+	scrollTo:function(file) {
+		//scroll to and highlight preselected file
+		var scrolltorow = $('tr[data-file="'+file+'"]');
+		if (scrolltorow.length > 0) {
+			scrolltorow.addClass('searchresult');
+			$(window).scrollTop(scrolltorow.position().top);
+			//remove highlight when hovered over
+			scrolltorow.one('hover', function(){
+				scrolltorow.removeClass('searchresult');
+			});
+		}
+	},
+	filter:function(query){
+		$('#fileList tr:not(.summary)').each(function(i,e){
+			if ($(e).data('file').toLowerCase().indexOf(query.toLowerCase()) !== -1) {
+				$(e).addClass("searchresult");
+			} else {
+				$(e).removeClass("searchresult");
+			}
+		});
+		//do not use scrollto to prevent removing searchresult css class
+		var first = $('#fileList tr.searchresult').first();
+		if (first.length !== 0) {
+			$(window).scrollTop(first.position().top);
+		}
+	},
+	unfilter:function(){
+		$('#fileList tr.searchresult').each(function(i,e){
+			$(e).removeClass("searchresult");
+		});
 	}
 };
 
@@ -818,16 +849,16 @@ $(document).ready(function(){
 			FileList.replaceIsNewFile = null;
 		}
 		FileList.lastAction = null;
-        OC.Notification.hide();
+		OC.Notification.hide();
 	});
 	$('#notification:first-child').on('click', '.replace', function() {
-        OC.Notification.hide(function() {
-            FileList.replace($('#notification > span').attr('data-oldName'), $('#notification > span').attr('data-newName'), $('#notification > span').attr('data-isNewFile'));
-        });
+		OC.Notification.hide(function() {
+			FileList.replace($('#notification > span').attr('data-oldName'), $('#notification > span').attr('data-newName'), $('#notification > span').attr('data-isNewFile'));
+		});
 	});
 	$('#notification:first-child').on('click', '.suggest', function() {
 		$('tr').filterAttr('data-file', $('#notification > span').attr('data-oldName')).show();
-        OC.Notification.hide();
+		OC.Notification.hide();
 	});
 	$('#notification:first-child').on('click', '.cancel', function() {
 		if ($('#notification > span').attr('data-isNewFile')) {
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index c2418cfa75..a4fdf38333 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -384,6 +384,11 @@ $(document).ready(function() {
 			}
 		});
 	}
+	
+	//scroll to and highlight preselected file
+	if (getURLParameter('scrollto')) {
+		FileList.scrollTo(getURLParameter('scrollto'));
+	}
 });
 
 function scanFiles(force, dir, users){
diff --git a/core/js/js.js b/core/js/js.js
index c09f80369f..c23cf9eebd 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -723,11 +723,17 @@ $(document).ready(function(){
 			}
 		}else if(event.keyCode===27){//esc
 			OC.search.hide();
+			if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
+				FileList.unfilter();
+			}
 		}else{
 			var query=$('#searchbox').val();
 			if(OC.search.lastQuery!==query){
 				OC.search.lastQuery=query;
 				OC.search.currentResult=-1;
+				if (FileList && typeof FileList.filter === 'function') { //TODO add hook system
+						FileList.filter(query);
+				}
 				if(query.length>2){
 					OC.search(query);
 				}else{
@@ -840,6 +846,13 @@ function formatDate(date){
 	return $.datepicker.formatDate(datepickerFormatDate, date)+' '+date.getHours()+':'+((date.getMinutes()<10)?'0':'')+date.getMinutes();
 }
 
+// taken from http://stackoverflow.com/questions/1403888/get-url-parameter-with-jquery
+function getURLParameter(name) {
+	return decodeURI(
+			(RegExp(name + '=' + '(.+?)(&|$)').exec(location.search) || [, null])[1]
+			);
+}
+
 /**
  * takes an absolute timestamp and return a string with a human-friendly relative date
  * @param int a Unix timestamp
diff --git a/lib/search/provider/file.php b/lib/search/provider/file.php
index 4d88c2a87f..9bd5093151 100644
--- a/lib/search/provider/file.php
+++ b/lib/search/provider/file.php
@@ -10,6 +10,7 @@ class OC_Search_Provider_File extends OC_Search_Provider{
 			$mime = $fileData['mimetype'];
 
 			$name = basename($path);
+			$container = dirname($path);
 			$text = '';
 			$skip = false;
 			if($mime=='httpd/unix-directory') {
@@ -37,7 +38,7 @@ class OC_Search_Provider_File extends OC_Search_Provider{
 				}
 			}
 			if(!$skip) {
-				$results[] = new OC_Search_Result($name, $text, $link, $type);
+				$results[] = new OC_Search_Result($name, $text, $link, $type, $container);
 			}
 		}
 		return $results;
diff --git a/lib/search/result.php b/lib/search/result.php
index 08beaea151..42275c2df1 100644
--- a/lib/search/result.php
+++ b/lib/search/result.php
@@ -7,6 +7,7 @@ class OC_Search_Result{
 	public $text;
 	public $link;
 	public $type;
+	public $container;
 
 	/**
 	 * create a new search result
@@ -15,10 +16,11 @@ class OC_Search_Result{
 	 * @param string $link link for the result
 	 * @param string $type the type of result as human readable string ('File', 'Music', etc)
 	 */
-	public function __construct($name, $text, $link, $type) {
+	public function __construct($name, $text, $link, $type, $container) {
 		$this->name=$name;
 		$this->text=$text;
 		$this->link=$link;
 		$this->type=$type;
+		$this->container=$container;
 	}
 }
diff --git a/search/css/results.css b/search/css/results.css
index 4ae7d67afb..8a32b0b995 100644
--- a/search/css/results.css
+++ b/search/css/results.css
@@ -14,7 +14,7 @@
 	position:fixed;
 	right:0;
 	text-overflow:ellipsis;
-	top:20px;
+	top:45px;
 	width:380px;
 	z-index:75;
 }
@@ -43,10 +43,16 @@
 }
 
 #searchresults td {
-	vertical-align:top;
 	padding:0 .3em;
+	height: 32px;
+}
+#searchresults tr.template {
+	display: none;
 }
 
+#searchresults td.result {
+	width:250px;
+}
 #searchresults td.result div.text {
 	padding-left:1em;
 	white-space:nowrap;
@@ -56,6 +62,18 @@
 	cursor:pointer;
 }
 
+#searchresults td.container {
+	width:20px;
+}
+
+#searchresults td.container img {
+	vertical-align: middle;
+	display:none;
+}
+#searchresults tr:hover td.container img {
+	display:inline;
+}
+
 #searchresults td.type {
 	border-bottom:none;
 	border-right:1px solid #aaa;
diff --git a/search/js/result.js b/search/js/result.js
index 78fa8efc8e..78d9149f22 100644
--- a/search/js/result.js
+++ b/search/js/result.js
@@ -8,15 +8,23 @@ OC.search.catagorizeResults=function(results){
 		types[type].push(results[i]);
 	}
 	return types;
-}
+};
 OC.search.hide=function(){
 	$('#searchresults').hide();
 	if($('#searchbox').val().length>2){
 		$('#searchbox').val('');
+		if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
+			FileList.unfilter();
+		}
 	};
-}
+	if ($('#searchbox').val().length === 0) {
+		if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
+			FileList.unfilter();
+		}
+	}
+};
 OC.search.showResults=function(results){
-	if(results.length==0){
+	if(results.length === 0){
 		return;
 	}
 	if(!OC.search.showResults.loaded){
@@ -30,6 +38,9 @@ OC.search.showResults=function(results){
 			});
 			$(document).click(function(event){
 				OC.search.hide();
+				if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
+					FileList.unfilter();
+				}
 			});
 			OC.search.lastResults=results;
 			OC.search.showResults(results);
@@ -46,12 +57,27 @@ OC.search.showResults=function(results){
 					var row=$('#searchresults tr.template').clone();
 					row.removeClass('template');
 					row.addClass('result');
-					if (i == 0){
+					if (i === 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);
+					if (type[i].container) {
+						var td = row.find('td.container');
+						td.append('<a><img></img></a>');
+						td.find('img').attr('src',OC.imagePath('core','places/folder'));
+						var containerName = OC.basename(type[i].container);
+						if (containerName === '') {
+							containerName = '/';
+						}
+						var containerLink = OC.linkTo('files','index.php')
+								+'?dir='+encodeURIComponent(type[i].container)
+								+'&scrollto='+encodeURIComponent(type[i].name);
+						row.find('td.container a')
+								.attr('href',containerLink)
+								.attr('title',t('core','Show in {folder}',{folder: containerName}));
+					}
 					row.data('index',index);
 					index++;
 					if(OC.search.customResults[name]){//give plugins the ability to customize the entries in here
@@ -62,7 +88,7 @@ OC.search.showResults=function(results){
 			}
 		}
 	}
-}
+};
 OC.search.showResults.loaded=false;
 
 OC.search.renderCurrent=function(){
@@ -71,4 +97,4 @@ OC.search.renderCurrent=function(){
 		$('#searchresults tr.result').removeClass('current');
 		$(result).addClass('current');
 	}
-}
+};
diff --git a/search/templates/part.results.php b/search/templates/part.results.php
index 9e39a1c2c8..1469e3468d 100644
--- a/search/templates/part.results.php
+++ b/search/templates/part.results.php
@@ -1,7 +1,7 @@
 <div id='searchresults'>
 	<table>
 		<tbody>
-			<tr class='template '>
+			<tr class='template'>
 				<td class='type'></td>
 				<td class='result'>
 					<a>
@@ -9,6 +9,7 @@
 						<div class='text'></div>
 					</a>
 				</td>
+				<td class='container'></td>
 			</tr>
 		</tbody>
 	</table>
-- 
GitLab


From 00772a84701cbfbd794db1d9c40f8cd98a40b9b2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Tue, 17 Sep 2013 17:25:47 +0200
Subject: [PATCH 083/248] use correct doublequotes in template, remove
 container

---
 search/templates/part.results.php | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/search/templates/part.results.php b/search/templates/part.results.php
index 1469e3468d..b6e7bad4a2 100644
--- a/search/templates/part.results.php
+++ b/search/templates/part.results.php
@@ -1,15 +1,14 @@
-<div id='searchresults'>
+<div id="searchresults">
 	<table>
 		<tbody>
-			<tr class='template'>
-				<td class='type'></td>
-				<td class='result'>
+			<tr class="template">
+				<td class="type"></td>
+				<td class="result">
 					<a>
-						<div class='name'></div>
-						<div class='text'></div>
+						<div class="name"></div>
+						<div class="text"></div>
 					</a>
 				</td>
-				<td class='container'></td>
 			</tr>
 		</tbody>
 	</table>
-- 
GitLab


From 8bdafaf4e0b14d1437612483a6187c21533846db Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Tue, 17 Sep 2013 17:27:47 +0200
Subject: [PATCH 084/248] make 'open in folder' action default for files

---
 search/js/result.js | 37 ++++++++++++++++++++++---------------
 1 file changed, 22 insertions(+), 15 deletions(-)

diff --git a/search/js/result.js b/search/js/result.js
index 78d9149f22..bfd81f4851 100644
--- a/search/js/result.js
+++ b/search/js/result.js
@@ -50,43 +50,50 @@ OC.search.showResults=function(results){
 		$('#searchresults').show();
 		$('#searchresults tr.result').remove();
 		var index=0;
-		for(var name in types){
-			var type=types[name];
+		for(var typeid in types){
+			var type=types[typeid];
 			if(type.length>0){
 				for(var i=0;i<type.length;i++){
 					var row=$('#searchresults tr.template').clone();
 					row.removeClass('template');
 					row.addClass('result');
+					row.data('type', typeid);
+					row.data('name', type[i].name);
+					row.data('text', type[i].text);
+					row.data('container', type[i].container);
 					if (i === 0){
-						row.children('td.type').text(name);
+						row.children('td.type').text(typeid);
 					}
-					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);
 					if (type[i].container) {
-						var td = row.find('td.container');
-						td.append('<a><img></img></a>');
-						td.find('img').attr('src',OC.imagePath('core','places/folder'));
 						var containerName = OC.basename(type[i].container);
 						if (containerName === '') {
 							containerName = '/';
 						}
-						var containerLink = OC.linkTo('files','index.php')
-								+'?dir='+encodeURIComponent(type[i].container)
-								+'&scrollto='+encodeURIComponent(type[i].name);
-						row.find('td.container a')
-								.attr('href',containerLink)
-								.attr('title',t('core','Show in {folder}',{folder: containerName}));
+						var containerLink = OC.linkTo('files', 'index.php')
+							+'?dir='+encodeURIComponent(type[i].container)
+							+'&scrollto='+encodeURIComponent(type[i].name);
+						row.find('td.result a')
+							.attr('href', containerLink)
+							.attr('title', t('core', 'Show in {folder}', {folder: containerName}));
+					} else {
+						row.find('td.result a').attr('href', type[i].link);
 					}
 					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[i]);
+					if(OC.search.customResults[typeid]){//give plugins the ability to customize the entries in here
+						OC.search.customResults[typeid](row,type[i]);
 					}
 					$('#searchresults tbody').append(row);
 				}
 			}
 		}
+		$('#searchresults').on('click', 'result', function () {
+			if ($(this).data('type') === 'Files') {
+				
+			}
+		});
 	}
 };
 OC.search.showResults.loaded=false;
-- 
GitLab


From c2e413e8528835929e6ca60ade0f5a3ad7a210bd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Tue, 17 Sep 2013 18:45:38 +0200
Subject: [PATCH 085/248] add fixme

---
 search/js/result.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/search/js/result.js b/search/js/result.js
index bfd81f4851..780f513edc 100644
--- a/search/js/result.js
+++ b/search/js/result.js
@@ -91,7 +91,7 @@ OC.search.showResults=function(results){
 		}
 		$('#searchresults').on('click', 'result', function () {
 			if ($(this).data('type') === 'Files') {
-				
+				//FIXME use ajax to navigate to folder & highlight file
 			}
 		});
 	}
-- 
GitLab


From 86c4c83b861febed135707cf3d87047a8a43a043 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Tue, 17 Sep 2013 19:11:18 +0200
Subject: [PATCH 086/248] use exists

---
 apps/files/js/file-upload.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 28270f1393..9d22162f06 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -373,7 +373,7 @@ $(document).ready(function() {
 		}
 	};
 
-	if ( document.getElementById('data-upload-form') ) {
+	if ( $('#file_upload_start').exists() ) {
 		// initialize jquery fileupload (blueimp)
 		var fileupload = $('#file_upload_start').fileupload(file_upload_param);
 		window.file_upload_param = fileupload;
-- 
GitLab


From e43e961dcb891541c2574861cbe13484dbf862a8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Tue, 17 Sep 2013 19:20:16 +0200
Subject: [PATCH 087/248] we cannot load avatar on guest page

---
 core/js/avatar.js | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/core/js/avatar.js b/core/js/avatar.js
index 410182f01b..57e6daa093 100644
--- a/core/js/avatar.js
+++ b/core/js/avatar.js
@@ -1,7 +1,9 @@
 $(document).ready(function(){
-	$('#header .avatardiv').avatar(OC.currentUser, 32);
-	// Personal settings
-	$('#avatar .avatardiv').avatar(OC.currentUser, 128);
+	if (OC.currentUser) {
+		$('#header .avatardiv').avatar(OC.currentUser, 32);
+		// Personal settings
+		$('#avatar .avatardiv').avatar(OC.currentUser, 128);
+	}
 	// User settings
 	$.each($('td.avatar .avatardiv'), function(i, element) {
 		$(element).avatar($(element).parent().parent().data('uid'), 32);
-- 
GitLab


From 342a420ebada080f7575003c2e1937757b0df341 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Tue, 17 Sep 2013 19:25:03 +0200
Subject: [PATCH 088/248] disable avatar loading on public guest page

---
 core/js/avatar.js | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/core/js/avatar.js b/core/js/avatar.js
index 410182f01b..57e6daa093 100644
--- a/core/js/avatar.js
+++ b/core/js/avatar.js
@@ -1,7 +1,9 @@
 $(document).ready(function(){
-	$('#header .avatardiv').avatar(OC.currentUser, 32);
-	// Personal settings
-	$('#avatar .avatardiv').avatar(OC.currentUser, 128);
+	if (OC.currentUser) {
+		$('#header .avatardiv').avatar(OC.currentUser, 32);
+		// Personal settings
+		$('#avatar .avatardiv').avatar(OC.currentUser, 128);
+	}
 	// User settings
 	$.each($('td.avatar .avatardiv'), function(i, element) {
 		$(element).avatar($(element).parent().parent().data('uid'), 32);
-- 
GitLab


From 8b4f4a79e22dc08cf7c13a91c926c229676d6522 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Tue, 17 Sep 2013 19:46:08 +0200
Subject: [PATCH 089/248] Still some session leftovers.

---
 lib/appframework/controller/controller.php           | 10 ----------
 tests/lib/appframework/controller/ControllerTest.php |  5 -----
 2 files changed, 15 deletions(-)

diff --git a/lib/appframework/controller/controller.php b/lib/appframework/controller/controller.php
index a7498ba0e1..0ea0a38cc0 100644
--- a/lib/appframework/controller/controller.php
+++ b/lib/appframework/controller/controller.php
@@ -106,16 +106,6 @@ abstract class Controller {
 	}
 
 
-	/**
-	 * Shortcut for getting session variables
-	 * @param string $key the key that will be taken from the $_SESSION array
-	 * @return array the value in the $_SESSION element
-	 */
-	public function session($key) {
-		return $this->request->getSession($key);
-	}
-
-
 	/**
 	 * Shortcut for getting cookie variables
 	 * @param string $key the key that will be taken from the $_COOKIE array
diff --git a/tests/lib/appframework/controller/ControllerTest.php b/tests/lib/appframework/controller/ControllerTest.php
index 246371d249..4441bddfca 100644
--- a/tests/lib/appframework/controller/ControllerTest.php
+++ b/tests/lib/appframework/controller/ControllerTest.php
@@ -152,9 +152,4 @@ class ControllerTest extends \PHPUnit_Framework_TestCase {
 		$this->assertEquals('daheim', $this->controller->env('PATH'));
 	}
 
-	public function testGetSessionVariable(){
-		$this->assertEquals('kein', $this->controller->session('sezession'));
-	}
-
-
 }
-- 
GitLab


From b0762ad3bf5121ccd300ec6c22641c3bf323ba61 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Wed, 18 Sep 2013 00:37:00 +0200
Subject: [PATCH 090/248] OC_VCategories=>OC\Tags. Public interface + getter in
 server container

---
 lib/public/iservercontainer.php |   7 +
 lib/public/itags.php            | 173 +++++++
 lib/server.php                  |  12 +
 lib/tags.php                    | 621 ++++++++++++++++++++++++
 lib/vcategories.php             | 833 --------------------------------
 tests/lib/tags.php              | 133 +++++
 tests/lib/vcategories.php       | 128 -----
 7 files changed, 946 insertions(+), 961 deletions(-)
 create mode 100644 lib/public/itags.php
 create mode 100644 lib/tags.php
 delete mode 100644 lib/vcategories.php
 create mode 100644 tests/lib/tags.php
 delete mode 100644 tests/lib/vcategories.php

diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index d88330698d..e44acee653 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -55,6 +55,13 @@ interface IServerContainer {
 	 */
 	function getPreviewManager();
 
+	/**
+	 * Returns the tag manager which can get and set tags for different object types
+	 *
+	 * @return \OCP\ITags
+	 */
+	function getTagManager();
+
 	/**
 	 * Returns the root folder of ownCloud's data directory
 	 *
diff --git a/lib/public/itags.php b/lib/public/itags.php
new file mode 100644
index 0000000000..047d4f5f40
--- /dev/null
+++ b/lib/public/itags.php
@@ -0,0 +1,173 @@
+<?php
+/**
+* ownCloud
+*
+* @author Thomas Tanghus
+* @copyright 2013 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/>.
+*
+*/
+
+namespace OCP;
+
+// FIXME: Where should I put this? Or should it be implemented as a Listener?
+\OC_Hook::connect('OC_User', 'post_deleteUser', 'OC\Tags', 'post_deleteUser');
+
+/**
+ * Class for easily tagging objects by their id
+ *
+ * A tag can be e.g. 'Family', 'Work', 'Chore', 'Special Occation' or
+ * anything else that is either parsed from a vobject or that the user chooses
+ * to add.
+ * Tag names are not case-sensitive, but will be saved with the case they
+ * are entered in. If a user already has a tag 'family' for a type, and
+ * tries to add a tag named 'Family' it will be silently ignored.
+ */
+
+interface ITags {
+
+	/**
+	* Load tags from db.
+	*
+	* @param string $type The type identifier e.g. 'contact' or 'event'.
+	* @param array $defaultTags An array of default tags to be used if none are stored.
+	* @return \OCP\ITags
+	*/
+	public function loadTagsFor($type, $defaultTags=array());
+
+	/**
+	* Check if any tags are saved for this type and user.
+	*
+	* @return boolean.
+	*/
+	public function isEmpty();
+
+	/**
+	* Get the tags for a specific user.
+	*
+	* This returns an array with id/name maps:
+	* [
+	* 	['id' => 0, 'name' = 'First tag'],
+	* 	['id' => 1, 'name' = 'Second tag'],
+	* ]
+	*
+	* @returns array
+	*/
+	public function tags();
+
+	/**
+	* Get the a list if items tagged with $tag.
+	*
+	* Throws an exception if the tag could not be found.
+	*
+	* @param string|integer $tag Tag id or name.
+	* @return array An array of object ids or false on error.
+	*/
+	public function idsForTag($tag);
+
+	/**
+	* Checks whether a tag is already saved.
+	*
+	* @param string $name The name to check for.
+	* @return bool
+	*/
+	public function hasTag($name);
+
+	/**
+	* Add a new tag.
+	*
+	* @param string $name A string with a name of the tag
+	* @return int the id of the added tag or false if it already exists.
+	*/
+	public function add($name);
+
+	/**
+	* Rename tag.
+	*
+	* @param string $from The name of the existing tag
+	* @param string $to The new name of the tag.
+	* @return bool
+	*/
+	public function rename($from, $to);
+
+	/**
+	* Add a list of new tags.
+	*
+	* @param string[] $names A string with a name or an array of strings containing
+	* the name(s) of the to add.
+	* @param bool $sync When true, save the tags
+	* @param int|null $id int Optional object id to add to this|these tag(s)
+	* @return bool Returns false on error.
+	*/
+	public function addMulti($names, $sync=false, $id = null);
+
+	/**
+	* Delete tag/object relations from the db
+	*
+	* @param array $ids The ids of the objects
+	* @return boolean Returns false on error.
+	*/
+	public function purgeObjects(array $ids);
+
+	/**
+	* Get favorites for an object type
+	*
+	* @return array An array of object ids.
+	*/
+	public function getFavorites();
+
+	/**
+	* Add an object to favorites
+	*
+	* @param int $objid The id of the object
+	* @return boolean
+	*/
+	public function addToFavorites($objid);
+
+	/**
+	* Remove an object from favorites
+	*
+	* @param int $objid The id of the object
+	* @return boolean
+	*/
+	public function removeFromFavorites($objid);
+
+	/**
+	* Creates a tag/object relation.
+	*
+	* @param int $objid The id of the object
+	* @param int|string $tag The id or name of the tag
+	* @return boolean Returns false on database error.
+	*/
+	public function tagAs($objid, $tag);
+
+	/**
+	* Delete single tag/object relation from the db
+	*
+	* @param int $objid The id of the object
+	* @param int|string $tag The id or name of the tag
+	* @return boolean
+	*/
+	public function unTag($objid, $tag);
+
+	/**
+	* Delete tags from the
+	*
+	* @param string[] $names An array of tags to delete
+	* @return bool Returns false on error
+	*/
+	public function delete($names);
+
+}
\ No newline at end of file
diff --git a/lib/server.php b/lib/server.php
index 9e87bd3190..f25216b746 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -49,6 +49,9 @@ class Server extends SimpleContainer implements IServerContainer {
 		$this->registerService('PreviewManager', function($c){
 			return new PreviewManager();
 		});
+		$this->registerService('TagManager', function($c){
+			return new Tags();
+		});
 		$this->registerService('RootFolder', function($c){
 			// TODO: get user and user manager from container as well
 			$user = \OC_User::getUser();
@@ -88,6 +91,15 @@ class Server extends SimpleContainer implements IServerContainer {
 		return $this->query('PreviewManager');
 	}
 
+	/**
+	 * Returns the tag manager which can get and set tags for different object types
+	 *
+	 * @return \OCP\ITags
+	 */
+	function getTagManager() {
+		return $this->query('TagManager');
+	}
+
 	/**
 	 * Returns the root folder of ownCloud's data directory
 	 *
diff --git a/lib/tags.php b/lib/tags.php
new file mode 100644
index 0000000000..4aafff8e1b
--- /dev/null
+++ b/lib/tags.php
@@ -0,0 +1,621 @@
+<?php
+/**
+* ownCloud
+*
+* @author Thomas Tanghus
+* @copyright 2012-2013 Thomas Tanghus <thomas@tanghus.net>
+* @copyright 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 for easily tagging objects by their id
+ *
+ * A tag can be e.g. 'Family', 'Work', 'Chore', 'Special Occation' or
+ * anything else that is either parsed from a vobject or that the user chooses
+ * to add.
+ * Tag names are not case-sensitive, but will be saved with the case they
+ * are entered in. If a user already has a tag 'family' for a type, and
+ * tries to add a tag named 'Family' it will be silently ignored.
+ */
+
+namespace OC;
+
+class Tags implements \OCP\ITags {
+
+	/**
+	 * Tags
+	 */
+	private $tags = array();
+
+	/**
+	 * Used for storing objectid/categoryname pairs while rescanning.
+	 */
+	private static $relations = array();
+
+	private $type = null;
+	private $user = null;
+
+	const TAG_TABLE = '*PREFIX*vcategory';
+	const RELATION_TABLE = '*PREFIX*vcategory_to_object';
+
+	const TAG_FAVORITE = '_$!<Favorite>!$_';
+
+	/**
+	* Constructor.
+	*
+	* @param string $user The user whos data the object will operate on.
+	*/
+	public function __construct($user) {
+
+		$this->user = $user;
+
+	}
+
+	/**
+	* Load tags from db.
+	*
+	* @param string $type The type identifier e.g. 'contact' or 'event'.
+	* @param array $defaultTags An array of default tags to be used if none are stored.
+	* @return \OCP\ITags
+	*/
+	public function loadTagsFor($type, $defaultTags=array()) {
+		$this->type = $type;
+		$this->tags = array();
+		$result = null;
+		$sql = 'SELECT `id`, `category` FROM `' . self::TAG_TABLE . '` '
+			. 'WHERE `uid` = ? AND `type` = ? ORDER BY `category`';
+		try {
+			$stmt = \OCP\DB::prepare($sql);
+			$result = $stmt->execute(array($this->user, $this->type));
+			if (\OCP\DB::isError($result)) {
+				\OCP\Util::writeLog('core', __METHOD__. ', DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+			}
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+				\OCP\Util::ERROR);
+		}
+
+		if(!is_null($result)) {
+			while( $row = $result->fetchRow()) {
+				$this->tags[$row['id']] = $row['category'];
+			}
+		}
+
+		if(count($defaultTags) > 0 && count($this->tags) === 0) {
+			$this->addMulti($defaultTags, true);
+		}
+		\OCP\Util::writeLog('core', __METHOD__.', tags: ' . print_r($this->tags, true),
+			\OCP\Util::DEBUG);
+
+		return $this;
+	}
+
+	/**
+	* Check if any tags are saved for this type and user.
+	*
+	* @return boolean.
+	*/
+	public function isEmpty() {
+		$sql = 'SELECT COUNT(*) FROM `' . self::TAG_TABLE . '` '
+			. 'WHERE `uid` = ? AND `type` = ?';
+		try {
+			$stmt = OCP\DB::prepare($sql);
+			$result = $stmt->execute(array($this->user, $this->type));
+			if (\OCP\DB::isError($result)) {
+				\OCP\Util::writeLog('core', __METHOD__. ', DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+				return false;
+			}
+			return ($result->numRows() === 0);
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+				\OCP\Util::ERROR);
+			return false;
+		}
+	}
+
+	/**
+	* Get the tags for a specific user.
+	*
+	* This returns an array with id/name maps:
+	* [
+	* 	['id' => 0, 'name' = 'First tag'],
+	* 	['id' => 1, 'name' = 'Second tag'],
+	* ]
+	*
+	* @return array
+	*/
+	public function tags() {
+		if(!count($this->tags)) {
+			return array();
+		}
+
+		$tags = array_values($this->tags);
+		uasort($tags, 'strnatcasecmp');
+		$tagMap = array();
+
+		foreach($tags as $tag) {
+			if($tag !== self::TAG_FAVORITE) {
+				$tagMap[] = array(
+					'id' => $this->array_searchi($tag, $this->tags),
+					'name' => $tag
+					);
+			}
+		}
+		return $tagMap;
+
+	}
+
+	/**
+	* Get the a list if items tagged with $tag.
+	*
+	* Throws an exception if the tag could not be found.
+	*
+	* @param string|integer $tag Tag id or name.
+	* @return array An array of object ids or false on error.
+	*/
+	public function idsForTag($tag) {
+		$result = null;
+		if(is_numeric($tag)) {
+			$tagId = $tag;
+		} elseif(is_string($tag)) {
+			$tag = trim($tag);
+			$tagId = $this->array_searchi($tag, $this->tags);
+		}
+
+		if($tagId === false) {
+			$l10n = \OC_L10N::get('core');
+			throw new \Exception(
+				$l10n->t('Could not find category "%s"', $tag)
+			);
+		}
+
+		$ids = array();
+		$sql = 'SELECT `objid` FROM `' . self::RELATION_TABLE
+			. '` WHERE `categoryid` = ?';
+
+		try {
+			$stmt = \OCP\DB::prepare($sql);
+			$result = $stmt->execute(array($tagId));
+			if (\OCP\DB::isError($result)) {
+				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+				return false;
+			}
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+				\OCP\Util::ERROR);
+			return false;
+		}
+
+		if(!is_null($result)) {
+			while( $row = $result->fetchRow()) {
+				$ids[] = (int)$row['objid'];
+			}
+		}
+
+		return $ids;
+	}
+
+	/**
+	* Checks whether a tag is already saved.
+	*
+	* @param string $name The name to check for.
+	* @return bool
+	*/
+	public function hasTag($name) {
+		return $this->in_arrayi($name, $this->tags);
+	}
+
+	/**
+	* Add a new tag.
+	*
+	* @param string $name A string with a name of the tag
+	* @return int the id of the added tag or false if it already exists.
+	*/
+	public function add($name) {
+		$name = trim($name);
+
+		if($this->hasTag($name)) {
+			\OCP\Util::writeLog('core', __METHOD__.', name: ' . $name. ' exists already', \OCP\Util::DEBUG);
+			return false;
+		}
+		try {
+			\OCP\DB::insertIfNotExist(self::TAG_TABLE,
+				array(
+					'uid' => $this->user,
+					'type' => $this->type,
+					'category' => $name,
+				));
+			} catch(\Exception $e) {
+				\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+					\OCP\Util::ERROR);
+				return false;
+			}
+		$id = \OCP\DB::insertid(self::TAG_TABLE);
+		\OCP\Util::writeLog('core', __METHOD__.', id: ' . $id, \OCP\Util::DEBUG);
+		$this->tags[$id] = $name;
+		return $id;
+	}
+
+	/**
+	* Rename tag.
+	*
+	* @param string $from The name of the existing tag
+	* @param string $to The new name of the tag.
+	* @return bool
+	*/
+	public function rename($from, $to) {
+		$from = trim($from);
+		$to = trim($to);
+		$id = $this->array_searchi($from, $this->tags);
+		if($id === false) {
+			\OCP\Util::writeLog('core', __METHOD__.', tag: ' . $from. ' does not exist', \OCP\Util::DEBUG);
+			return false;
+		}
+
+		$sql = 'UPDATE `' . self::TAG_TABLE . '` SET `category` = ? '
+			. 'WHERE `uid` = ? AND `type` = ? AND `id` = ?';
+		try {
+			$stmt = \OCP\DB::prepare($sql);
+			$result = $stmt->execute(array($to, $this->user, $this->type, $id));
+			if (\OCP\DB::isError($result)) {
+				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+				return false;
+			}
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+				\OCP\Util::ERROR);
+			return false;
+		}
+		$this->tags[$id] = $to;
+		return true;
+	}
+
+	/**
+	* Add a list of new tags.
+	*
+	* @param string[] $names A string with a name or an array of strings containing
+	* the name(s) of the to add.
+	* @param bool $sync When true, save the tags
+	* @param int|null $id int Optional object id to add to this|these tag(s)
+	* @return bool Returns false on error.
+	*/
+	public function addMulti($names, $sync=false, $id = null) {
+		if(!is_array($names)) {
+			$names = array($names);
+		}
+		$names = array_map('trim', $names);
+		$newones = array();
+		foreach($names as $name) {
+			if(($this->in_arrayi(
+				$name, $this->tags) == false) && $name !== '') {
+				$newones[] = $name;
+			}
+			if(!is_null($id) ) {
+				// Insert $objectid, $categoryid  pairs if not exist.
+				self::$relations[] = array('objid' => $id, 'tag' => $name);
+			}
+		}
+		$this->tags = array_merge($this->tags, $newones);
+		if($sync === true) {
+			$this->save();
+		}
+
+		return true;
+	}
+
+	/**
+	 * Save the list of tags and their object relations
+	 */
+	protected function save() {
+		if(is_array($this->tags)) {
+			foreach($this->tags as $tag) {
+				try {
+					\OCP\DB::insertIfNotExist(self::TAG_TABLE,
+						array(
+							'uid' => $this->user,
+							'type' => $this->type,
+							'category' => $tag,
+						));
+				} catch(\Exception $e) {
+					\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+						\OCP\Util::ERROR);
+				}
+			}
+			// reload tags to get the proper ids.
+			$this->loadTagsFor($this->type);
+			// Loop through temporarily cached objectid/tagname pairs
+			// and save relations.
+			$tags = $this->tags;
+			// For some reason this is needed or array_search(i) will return 0..?
+			ksort($tags);
+			foreach(self::$relations as $relation) {
+				$tagId = $this->array_searchi($relation['tag'], $tags);
+				\OCP\Util::writeLog('core', __METHOD__ . 'catid, ' . $relation['tag'] . ' ' . $tagId, \OCP\Util::DEBUG);
+				if($tagId) {
+					try {
+						\OCP\DB::insertIfNotExist(self::RELATION_TABLE,
+							array(
+								'objid' => $relation['objid'],
+								'categoryid' => $tagId,
+								'type' => $this->type,
+								));
+					} catch(\Exception $e) {
+						\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+							\OCP\Util::ERROR);
+					}
+				}
+			}
+			self::$relations = array(); // reset
+		} else {
+			\OCP\Util::writeLog('core', __METHOD__.', $this->tags is not an array! '
+				. print_r($this->tags, true), \OCP\Util::ERROR);
+		}
+	}
+
+	/**
+	* Delete tags and tag/object relations for a user.
+	*
+	* For hooking up on post_deleteUser
+	*
+	* @param array
+	*/
+	public static function post_deleteUser($arguments) {
+		// Find all objectid/tagId pairs.
+		$result = null;
+		try {
+			$stmt = \OCP\DB::prepare('SELECT `id` FROM `' . self::TAG_TABLE . '` '
+				. 'WHERE `uid` = ?');
+			$result = $stmt->execute(array($arguments['uid']));
+			if (\OCP\DB::isError($result)) {
+				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+			}
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+				\OCP\Util::ERROR);
+		}
+
+		if(!is_null($result)) {
+			try {
+				$stmt = \OCP\DB::prepare('DELETE FROM `' . self::RELATION_TABLE . '` '
+					. 'WHERE `categoryid` = ?');
+				while( $row = $result->fetchRow()) {
+					try {
+						$stmt->execute(array($row['id']));
+					} catch(\Exception $e) {
+						\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+							\OCP\Util::ERROR);
+					}
+				}
+			} catch(\Exception $e) {
+				\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+					\OCP\Util::ERROR);
+			}
+		}
+		try {
+			$stmt = \OCP\DB::prepare('DELETE FROM `' . self::TAG_TABLE . '` '
+				. 'WHERE `uid` = ?');
+			$result = $stmt->execute(array($arguments['uid']));
+			if (OCP\DB::isError($result)) {
+				\OCP\Util::writeLog('core', __METHOD__. ', DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+			}
+		} catch(\Exception $e) {
+			OCP\Util::writeLog('core', __METHOD__ . ', exception: '
+				. $e->getMessage(), OCP\Util::ERROR);
+		}
+	}
+
+	/**
+	* Delete tag/object relations from the db
+	*
+	* @param array $ids The ids of the objects
+	* @return boolean Returns false on error.
+	*/
+	public function purgeObjects(array $ids) {
+		if(count($ids) === 0) {
+			// job done ;)
+			return true;
+		}
+		$updates = $ids;
+		try {
+			$query = 'DELETE FROM `' . self::RELATION_TABLE . '` ';
+			$query .= 'WHERE `objid` IN (' . str_repeat('?,', count($ids)-1) . '?) ';
+			$query .= 'AND `type`= ?';
+			$updates[] = $this->type;
+			$stmt = OCP\DB::prepare($query);
+			$result = $stmt->execute($updates);
+			if (\OCP\DB::isError($result)) {
+				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+				return false;
+			}
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: ' . $e->getMessage(),
+				\OCP\Util::ERROR);
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	* Get favorites for an object type
+	*
+	* @return array An array of object ids.
+	*/
+	public function getFavorites() {
+		try {
+			return $this->idsForTag(self::TAG_FAVORITE);
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: ' . $e->getMessage(),
+				\OCP\Util::ERROR);
+			return array();
+		}
+	}
+
+	/**
+	* Add an object to favorites
+	*
+	* @param int $objid The id of the object
+	* @return boolean
+	*/
+	public function addToFavorites($objid) {
+		if(!$this->hasCategory(self::TAG_FAVORITE)) {
+			$this->add(self::TAG_FAVORITE, true);
+		}
+		return $this->tagAs($objid, self::TAG_FAVORITE, $this->type);
+	}
+
+	/**
+	* Remove an object from favorites
+	*
+	* @param int $objid The id of the object
+	* @return boolean
+	*/
+	public function removeFromFavorites($objid) {
+		return $this->unTag($objid, self::TAG_FAVORITE, $this->type);
+	}
+
+	/**
+	* Creates a tag/object relation.
+	*
+	* @param int $objid The id of the object
+	* @param int|string $tag The id or name of the tag
+	* @return boolean Returns false on database error.
+	*/
+	public function tagAs($objid, $tag) {
+		if(is_string($tag) && !is_numeric($tag)) {
+			$tag = trim($tag);
+			if(!$this->hasTag($tag)) {
+				$this->add($tag, true);
+			}
+			$tagId =  $this->array_searchi($tag, $this->tags);
+		} else {
+			$tagId = $tag;
+		}
+		try {
+			\OCP\DB::insertIfNotExist(self::RELATION_TABLE,
+				array(
+					'objid' => $objid,
+					'categoryid' => $tagId,
+					'type' => $this->type,
+				));
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+				\OCP\Util::ERROR);
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	* Delete single tag/object relation from the db
+	*
+	* @param int $objid The id of the object
+	* @param int|string $tag The id or name of the tag
+	* @return boolean
+	*/
+	public function unTag($objid, $tag) {
+		if(is_string($tag) && !is_numeric($tag)) {
+			$tag = trim($tag);
+			$tagId =  $this->array_searchi($tag, $this->tags);
+		} else {
+			$tagId = $tag;
+		}
+
+		try {
+			$sql = 'DELETE FROM `' . self::RELATION_TABLE . '` '
+					. 'WHERE `objid` = ? AND `categoryid` = ? AND `type` = ?';
+			$stmt = \OCP\DB::prepare($sql);
+			$stmt->execute(array($objid, $tagId, $this->type));
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+				\OCP\Util::ERROR);
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	* Delete tags from the
+	*
+	* @param string[] $names An array of tags to delete
+	* @return bool Returns false on error
+	*/
+	public function delete($names) {
+		if(!is_array($names)) {
+			$names = array($names);
+		}
+
+		$names = array_map('trim', $names);
+
+		\OCP\Util::writeLog('core', __METHOD__ . ', before: '
+			. print_r($this->tags, true), \OCP\Util::DEBUG);
+		foreach($names as $name) {
+			$id = null;
+
+			if($this->hasTag($name)) {
+				$id = $this->array_searchi($name, $this->tags);
+				unset($this->tags[$id]);
+			}
+			try {
+				$stmt = \OCP\DB::prepare('DELETE FROM `' . self::TAG_TABLE . '` WHERE '
+					. '`uid` = ? AND `type` = ? AND `category` = ?');
+				$result = $stmt->execute(array($this->user, $this->type, $name));
+				if (\OCP\DB::isError($result)) {
+					\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+				}
+			} catch(\Exception $e) {
+				\OCP\Util::writeLog('core', __METHOD__ . ', exception: '
+					. $e->getMessage(), \OCP\Util::ERROR);
+				return false;
+			}
+			if(!is_null($id) && $id !== false) {
+				try {
+					$sql = 'DELETE FROM `' . self::RELATION_TABLE . '` '
+							. 'WHERE `categoryid` = ?';
+					$stmt = \OCP\DB::prepare($sql);
+					$result = $stmt->execute(array($id));
+					if (\OCP\DB::isError($result)) {
+						\OCP\Util::writeLog('core',
+							__METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result),
+							\OCP\Util::ERROR);
+						return false;
+					}
+				} catch(\Exception $e) {
+					\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+						\OCP\Util::ERROR);
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+
+	// 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/lib/vcategories.php b/lib/vcategories.php
deleted file mode 100644
index a7e4c54be2..0000000000
--- a/lib/vcategories.php
+++ /dev/null
@@ -1,833 +0,0 @@
-<?php
-/**
-* ownCloud
-*
-* @author Thomas Tanghus
-* @copyright 2012 Thomas Tanghus <thomas@tanghus.net>
-* @copyright 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/>.
-*
-*/
-
-OC_Hook::connect('OC_User', 'post_deleteUser', 'OC_VCategories', 'post_deleteUser');
-
-/**
- * Class for easy access to categories in VCARD, VEVENT, VTODO and VJOURNAL.
- * A Category can be e.g. 'Family', 'Work', 'Chore', 'Special Occation' or
- * anything else that is either parsed from a vobject or that the user chooses
- * to add.
- * Category names are not case-sensitive, but will be saved with the case they
- * are entered in. If a user already has a category 'family' for a type, and
- * tries to add a category named 'Family' it will be silently ignored.
- */
-class OC_VCategories {
-
-	/**
-	 * Categories
-	 */
-	private $categories = array();
-
-	/**
-	 * Used for storing objectid/categoryname pairs while rescanning.
-	 */
-	private static $relations = array();
-
-	private $type = null;
-	private $user = null;
-
-	const CATEGORY_TABLE = '*PREFIX*vcategory';
-	const RELATION_TABLE = '*PREFIX*vcategory_to_object';
-
-	const CATEGORY_FAVORITE = '_$!<Favorite>!$_';
-
-	const FORMAT_LIST = 0;
-	const FORMAT_MAP  = 1;
-
-	/**
-	* @brief Constructor.
-	* @param $type The type identifier e.g. 'contact' or 'event'.
-	* @param $user The user whos data the object will operate on. This
-	*   parameter should normally be omitted but to make an app able to
-	*   update categories for all users it is made possible to provide it.
-	* @param $defcategories An array of default categories to be used if none is stored.
-	*/
-	public function __construct($type, $user=null, $defcategories=array()) {
-		$this->type = $type;
-		$this->user = is_null($user) ? OC_User::getUser() : $user;
-
-		$this->loadCategories();
-		OCP\Util::writeLog('core', __METHOD__ . ', categories: '
-			. print_r($this->categories, true),
-			OCP\Util::DEBUG
-		);
-
-		if($defcategories && count($this->categories) === 0) {
-			$this->addMulti($defcategories, true);
-		}
-	}
-
-	/**
-	* @brief Load categories from db.
-	*/
-	private function loadCategories() {
-		$this->categories = array();
-		$result = null;
-		$sql = 'SELECT `id`, `category` FROM `' . self::CATEGORY_TABLE . '` '
-			. 'WHERE `uid` = ? AND `type` = ? ORDER BY `category`';
-		try {
-			$stmt = OCP\DB::prepare($sql);
-			$result = $stmt->execute(array($this->user, $this->type));
-			if (OC_DB::isError($result)) {
-				OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-			}
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-				OCP\Util::ERROR);
-		}
-
-		if(!is_null($result)) {
-			while( $row = $result->fetchRow()) {
-				// The keys are prefixed because array_search wouldn't work otherwise :-/
-				$this->categories[$row['id']] = $row['category'];
-			}
-		}
-		OCP\Util::writeLog('core', __METHOD__.', categories: ' . print_r($this->categories, true),
-			OCP\Util::DEBUG);
-	}
-
-
-	/**
-	* @brief Check if any categories are saved for this type and user.
-	* @returns boolean.
-	* @param $type The type identifier e.g. 'contact' or 'event'.
-	* @param $user The user whos categories will be checked. If not set current user will be used.
-	*/
-	public static function isEmpty($type, $user = null) {
-		$user = is_null($user) ? OC_User::getUser() : $user;
-		$sql = 'SELECT COUNT(*) FROM `' . self::CATEGORY_TABLE . '` '
-			. 'WHERE `uid` = ? AND `type` = ?';
-		try {
-			$stmt = OCP\DB::prepare($sql);
-			$result = $stmt->execute(array($user, $type));
-			if (OC_DB::isError($result)) {
-				OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-				return false;
-			}
-			return ($result->numRows() === 0);
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-				OCP\Util::ERROR);
-			return false;
-		}
-	}
-
-	/**
-	* @brief Get the categories for a specific user.
-	* @param
-	* @returns array containing the categories as strings.
-	*/
-	public function categories($format = null) {
-		if(!$this->categories) {
-			return array();
-		}
-		$categories = array_values($this->categories);
-		uasort($categories, 'strnatcasecmp');
-		if($format == self::FORMAT_MAP) {
-			$catmap = array();
-			foreach($categories as $category) {
-				if($category !== self::CATEGORY_FAVORITE) {
-					$catmap[] = array(
-						'id' => $this->array_searchi($category, $this->categories),
-						'name' => $category
-						);
-				}
-			}
-			return $catmap;
-		}
-
-		// Don't add favorites to normal categories.
-		$favpos = array_search(self::CATEGORY_FAVORITE, $categories);
-		if($favpos !== false) {
-			return array_splice($categories, $favpos);
-		} else {
-			return $categories;
-		}
-	}
-
-	/**
-	* Get the a list if items belonging to $category.
-	*
-	* Throws an exception if the category could not be found.
-	*
-	* @param string|integer $category Category id or name.
-	* @returns array An array of object ids or false on error.
-	*/
-	public function idsForCategory($category) {
-		$result = null;
-		if(is_numeric($category)) {
-			$catid = $category;
-		} elseif(is_string($category)) {
-			$category = trim($category);
-			$catid = $this->array_searchi($category, $this->categories);
-		}
-		OCP\Util::writeLog('core', __METHOD__.', category: '.$catid.' '.$category, OCP\Util::DEBUG);
-		if($catid === false) {
-			$l10n = OC_L10N::get('core');
-			throw new Exception(
-				$l10n->t('Could not find category "%s"', $category)
-			);
-		}
-
-		$ids = array();
-		$sql = 'SELECT `objid` FROM `' . self::RELATION_TABLE
-			. '` WHERE `categoryid` = ?';
-
-		try {
-			$stmt = OCP\DB::prepare($sql);
-			$result = $stmt->execute(array($catid));
-			if (OC_DB::isError($result)) {
-				OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-				return false;
-			}
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-				OCP\Util::ERROR);
-			return false;
-		}
-
-		if(!is_null($result)) {
-			while( $row = $result->fetchRow()) {
-				$ids[] = (int)$row['objid'];
-			}
-		}
-
-		return $ids;
-	}
-
-	/**
-	* Get the a list if items belonging to $category.
-	*
-	* Throws an exception if the category could not be found.
-	*
-	* @param string|integer $category Category id or name.
-	* @param array $tableinfo Array in the form {'tablename' => table, 'fields' => ['field1', 'field2']}
-	* @param int $limit
-	* @param int $offset
-	*
-	* This generic method queries a table assuming that the id
-	* field is called 'id' and the table name provided is in
-	* the form '*PREFIX*table_name'.
-	*
-	* If the category name cannot be resolved an exception is thrown.
-	*
-	* TODO: Maybe add the getting permissions for objects?
-	*
-	* @returns array containing the resulting items or false on error.
-	*/
-	public function itemsForCategory($category, $tableinfo, $limit = null, $offset = null) {
-		$result = null;
-		if(is_numeric($category)) {
-			$catid = $category;
-		} elseif(is_string($category)) {
-			$category = trim($category);
-			$catid = $this->array_searchi($category, $this->categories);
-		}
-		OCP\Util::writeLog('core', __METHOD__.', category: '.$catid.' '.$category, OCP\Util::DEBUG);
-		if($catid === false) {
-			$l10n = OC_L10N::get('core');
-			throw new Exception(
-				$l10n->t('Could not find category "%s"', $category)
-			);
-		}
-		$fields = '';
-		foreach($tableinfo['fields'] as $field) {
-			$fields .= '`' . $tableinfo['tablename'] . '`.`' . $field . '`,';
-		}
-		$fields = substr($fields, 0, -1);
-
-		$items = array();
-		$sql = 'SELECT `' . self::RELATION_TABLE . '`.`categoryid`, ' . $fields
-			. ' FROM `' . $tableinfo['tablename'] . '` JOIN `'
-			. self::RELATION_TABLE . '` ON `' . $tableinfo['tablename']
-			. '`.`id` = `' . self::RELATION_TABLE . '`.`objid` WHERE `'
-			. self::RELATION_TABLE . '`.`categoryid` = ?';
-
-		try {
-			$stmt = OCP\DB::prepare($sql, $limit, $offset);
-			$result = $stmt->execute(array($catid));
-			if (OC_DB::isError($result)) {
-				OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-				return false;
-			}
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-				OCP\Util::ERROR);
-			return false;
-		}
-
-		if(!is_null($result)) {
-			while( $row = $result->fetchRow()) {
-				$items[] = $row;
-			}
-		}
-		//OCP\Util::writeLog('core', __METHOD__.', count: ' . count($items), OCP\Util::DEBUG);
-		//OCP\Util::writeLog('core', __METHOD__.', sql: ' . $sql, OCP\Util::DEBUG);
-
-		return $items;
-	}
-
-	/**
-	* @brief Checks whether a category is already saved.
-	* @param $name The name to check for.
-	* @returns bool
-	*/
-	public function hasCategory($name) {
-		return $this->in_arrayi($name, $this->categories);
-	}
-
-	/**
-	* @brief Add a new category.
-	* @param $name A string with a name of the category
-	* @returns int the id of the added category or false if it already exists.
-	*/
-	public function add($name) {
-		$name = trim($name);
-		OCP\Util::writeLog('core', __METHOD__.', name: ' . $name, OCP\Util::DEBUG);
-		if($this->hasCategory($name)) {
-			OCP\Util::writeLog('core', __METHOD__.', name: ' . $name. ' exists already', OCP\Util::DEBUG);
-			return false;
-		}
-		try {
-			OCP\DB::insertIfNotExist(self::CATEGORY_TABLE,
-				array(
-					'uid' => $this->user,
-					'type' => $this->type,
-					'category' => $name,
-				));
-			} catch(Exception $e) {
-				OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-					OCP\Util::ERROR);
-				return false;
-			}
-		$id = OCP\DB::insertid(self::CATEGORY_TABLE);
-		OCP\Util::writeLog('core', __METHOD__.', id: ' . $id, OCP\Util::DEBUG);
-		$this->categories[$id] = $name;
-		return $id;
-	}
-
-	/**
-	* @brief Rename category.
-	* @param string $from The name of the existing category
-	* @param string $to The new name of the category.
-	* @returns bool
-	*/
-	public function rename($from, $to) {
-		$from = trim($from);
-		$to = trim($to);
-		$id = $this->array_searchi($from, $this->categories);
-		if($id === false) {
-			OCP\Util::writeLog('core', __METHOD__.', category: ' . $from. ' does not exist', OCP\Util::DEBUG);
-			return false;
-		}
-
-		$sql = 'UPDATE `' . self::CATEGORY_TABLE . '` SET `category` = ? '
-			. 'WHERE `uid` = ? AND `type` = ? AND `id` = ?';
-		try {
-			$stmt = OCP\DB::prepare($sql);
-			$result = $stmt->execute(array($to, $this->user, $this->type, $id));
-			if (OC_DB::isError($result)) {
-				OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-				return false;
-			}
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-				OCP\Util::ERROR);
-			return false;
-		}
-		$this->categories[$id] = $to;
-		return true;
-	}
-
-	/**
-	* @brief Add a new category.
-	* @param $names A string with a name or an array of strings containing
-	* the name(s) of the categor(y|ies) to add.
-	* @param $sync bool When true, save the categories
-	* @param $id int Optional object id to add to this|these categor(y|ies)
-	* @returns bool Returns false on error.
-	*/
-	public function addMulti($names, $sync=false, $id = null) {
-		if(!is_array($names)) {
-			$names = array($names);
-		}
-		$names = array_map('trim', $names);
-		$newones = array();
-		foreach($names as $name) {
-			if(($this->in_arrayi(
-				$name, $this->categories) == false) && $name != '') {
-				$newones[] = $name;
-			}
-			if(!is_null($id) ) {
-				// Insert $objectid, $categoryid  pairs if not exist.
-				self::$relations[] = array('objid' => $id, 'category' => $name);
-			}
-		}
-		$this->categories = array_merge($this->categories, $newones);
-		if($sync === true) {
-			$this->save();
-		}
-
-		return true;
-	}
-
-	/**
-	* @brief Extracts categories from a vobject and add the ones not already present.
-	* @param $vobject The instance of OC_VObject to load the categories from.
-	*/
-	public function loadFromVObject($id, $vobject, $sync=false) {
-		$this->addMulti($vobject->getAsArray('CATEGORIES'), $sync, $id);
-	}
-
-	/**
-	* @brief Reset saved categories and rescan supplied vobjects for categories.
-	* @param $objects An array of vobjects (as text).
-	* To get the object array, do something like:
-	*	// For Addressbook:
-	*	$categories = new OC_VCategories('contacts');
-	*	$stmt = OC_DB::prepare( 'SELECT `carddata` FROM `*PREFIX*contacts_cards`' );
-	*	$result = $stmt->execute();
-	*	$objects = array();
-	*	if(!is_null($result)) {
-	*		while( $row = $result->fetchRow()){
-	*			$objects[] = array($row['id'], $row['carddata']);
-	*		}
-	*	}
-	*	$categories->rescan($objects);
-	*/
-	public function rescan($objects, $sync=true, $reset=true) {
-
-		if($reset === true) {
-			$result = null;
-			// Find all objectid/categoryid pairs.
-			try {
-				$stmt = OCP\DB::prepare('SELECT `id` FROM `' . self::CATEGORY_TABLE . '` '
-					. 'WHERE `uid` = ? AND `type` = ?');
-				$result = $stmt->execute(array($this->user, $this->type));
-				if (OC_DB::isError($result)) {
-					OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-					return false;
-				}
-			} catch(Exception $e) {
-				OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-					OCP\Util::ERROR);
-			}
-
-			// And delete them.
-			if(!is_null($result)) {
-				$stmt = OCP\DB::prepare('DELETE FROM `' . self::RELATION_TABLE . '` '
-					. 'WHERE `categoryid` = ? AND `type`= ?');
-				while( $row = $result->fetchRow()) {
-					$stmt->execute(array($row['id'], $this->type));
-				}
-			}
-			try {
-				$stmt = OCP\DB::prepare('DELETE FROM `' . self::CATEGORY_TABLE . '` '
-					. 'WHERE `uid` = ? AND `type` = ?');
-				$result = $stmt->execute(array($this->user, $this->type));
-				if (OC_DB::isError($result)) {
-					OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-					return;
-				}
-			} catch(Exception $e) {
-				OCP\Util::writeLog('core', __METHOD__ . ', exception: '
-					. $e->getMessage(), OCP\Util::ERROR);
-				return;
-			}
-			$this->categories = array();
-		}
-		// Parse all the VObjects
-		foreach($objects as $object) {
-			$vobject = OC_VObject::parse($object[1]);
-			if(!is_null($vobject)) {
-				// Load the categories
-				$this->loadFromVObject($object[0], $vobject, $sync);
-			} else {
-				OC_Log::write('core', __METHOD__ . ', unable to parse. ID: ' . ', '
-					. substr($object, 0, 100) . '(...)', OC_Log::DEBUG);
-			}
-		}
-		$this->save();
-	}
-
-	/**
-	 * @brief Save the list with categories
-	 */
-	private function save() {
-		if(is_array($this->categories)) {
-			foreach($this->categories as $category) {
-				try {
-					OCP\DB::insertIfNotExist(self::CATEGORY_TABLE,
-						array(
-							'uid' => $this->user,
-							'type' => $this->type,
-							'category' => $category,
-						));
-				} catch(Exception $e) {
-					OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-						OCP\Util::ERROR);
-				}
-			}
-			// reload categories to get the proper ids.
-			$this->loadCategories();
-			// Loop through temporarily cached objectid/categoryname pairs
-			// and save relations.
-			$categories = $this->categories;
-			// For some reason this is needed or array_search(i) will return 0..?
-			ksort($categories);
-			foreach(self::$relations as $relation) {
-				$catid = $this->array_searchi($relation['category'], $categories);
-				OC_Log::write('core', __METHOD__ . 'catid, ' . $relation['category'] . ' ' . $catid, OC_Log::DEBUG);
-				if($catid) {
-					try {
-						OCP\DB::insertIfNotExist(self::RELATION_TABLE,
-							array(
-								'objid' => $relation['objid'],
-								'categoryid' => $catid,
-								'type' => $this->type,
-								));
-					} catch(Exception $e) {
-						OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-							OCP\Util::ERROR);
-					}
-				}
-			}
-			self::$relations = array(); // reset
-		} else {
-			OC_Log::write('core', __METHOD__.', $this->categories is not an array! '
-				. print_r($this->categories, true), OC_Log::ERROR);
-		}
-	}
-
-	/**
-	* @brief Delete categories and category/object relations for a user.
-	* For hooking up on post_deleteUser
-	* @param string $uid The user id for which entries should be purged.
-	*/
-	public static function post_deleteUser($arguments) {
-		// Find all objectid/categoryid pairs.
-		$result = null;
-		try {
-			$stmt = OCP\DB::prepare('SELECT `id` FROM `' . self::CATEGORY_TABLE . '` '
-				. 'WHERE `uid` = ?');
-			$result = $stmt->execute(array($arguments['uid']));
-			if (OC_DB::isError($result)) {
-				OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-			}
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-				OCP\Util::ERROR);
-		}
-
-		if(!is_null($result)) {
-			try {
-				$stmt = OCP\DB::prepare('DELETE FROM `' . self::RELATION_TABLE . '` '
-					. 'WHERE `categoryid` = ?');
-				while( $row = $result->fetchRow()) {
-					try {
-						$stmt->execute(array($row['id']));
-					} catch(Exception $e) {
-						OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-							OCP\Util::ERROR);
-					}
-				}
-			} catch(Exception $e) {
-				OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-					OCP\Util::ERROR);
-			}
-		}
-		try {
-			$stmt = OCP\DB::prepare('DELETE FROM `' . self::CATEGORY_TABLE . '` '
-				. 'WHERE `uid` = ?');
-			$result = $stmt->execute(array($arguments['uid']));
-			if (OC_DB::isError($result)) {
-				OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-			}
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__ . ', exception: '
-				. $e->getMessage(), OCP\Util::ERROR);
-		}
-	}
-
-	/**
-	* @brief Delete category/object relations from the db
-	* @param array $ids The ids of the objects
-	* @param string $type The type of object (event/contact/task/journal).
-	* 	Defaults to the type set in the instance
-	* @returns boolean Returns false on error.
-	*/
-	public function purgeObjects(array $ids, $type = null) {
-		$type = is_null($type) ? $this->type : $type;
-		if(count($ids) === 0) {
-			// job done ;)
-			return true;
-		}
-		$updates = $ids;
-		try {
-			$query = 'DELETE FROM `' . self::RELATION_TABLE . '` ';
-			$query .= 'WHERE `objid` IN (' . str_repeat('?,', count($ids)-1) . '?) ';
-			$query .= 'AND `type`= ?';
-			$updates[] = $type;
-			$stmt = OCP\DB::prepare($query);
-			$result = $stmt->execute($updates);
-			if (OC_DB::isError($result)) {
-				OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-				return false;
-			}
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: ' . $e->getMessage(),
-				OCP\Util::ERROR);
-			return false;
-		}
-		return true;
-	}
-
-	/**
-	* Get favorites for an object type
-	*
-	* @param string $type The type of object (event/contact/task/journal).
-	* 	Defaults to the type set in the instance
-	* @returns array An array of object ids.
-	*/
-	public function getFavorites($type = null) {
-		$type = is_null($type) ? $this->type : $type;
-
-		try {
-			return $this->idsForCategory(self::CATEGORY_FAVORITE);
-		} catch(Exception $e) {
-			// No favorites
-			return array();
-		}
-	}
-
-	/**
-	* Add an object to favorites
-	*
-	* @param int $objid The id of the object
-	* @param string $type The type of object (event/contact/task/journal).
-	* 	Defaults to the type set in the instance
-	* @returns boolean
-	*/
-	public function addToFavorites($objid, $type = null) {
-		$type = is_null($type) ? $this->type : $type;
-		if(!$this->hasCategory(self::CATEGORY_FAVORITE)) {
-			$this->add(self::CATEGORY_FAVORITE, true);
-		}
-		return $this->addToCategory($objid, self::CATEGORY_FAVORITE, $type);
-	}
-
-	/**
-	* Remove an object from favorites
-	*
-	* @param int $objid The id of the object
-	* @param string $type The type of object (event/contact/task/journal).
-	* 	Defaults to the type set in the instance
-	* @returns boolean
-	*/
-	public function removeFromFavorites($objid, $type = null) {
-		$type = is_null($type) ? $this->type : $type;
-		return $this->removeFromCategory($objid, self::CATEGORY_FAVORITE, $type);
-	}
-
-	/**
-	* @brief Creates a category/object relation.
-	* @param int $objid The id of the object
-	* @param int|string $category The id or name of the category
-	* @param string $type The type of object (event/contact/task/journal).
-	* 	Defaults to the type set in the instance
-	* @returns boolean Returns false on database error.
-	*/
-	public function addToCategory($objid, $category, $type = null) {
-		$type = is_null($type) ? $this->type : $type;
-		if(is_string($category) && !is_numeric($category)) {
-			$category = trim($category);
-			if(!$this->hasCategory($category)) {
-				$this->add($category, true);
-			}
-			$categoryid =  $this->array_searchi($category, $this->categories);
-		} else {
-			$categoryid = $category;
-		}
-		try {
-			OCP\DB::insertIfNotExist(self::RELATION_TABLE,
-				array(
-					'objid' => $objid,
-					'categoryid' => $categoryid,
-					'type' => $type,
-				));
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-				OCP\Util::ERROR);
-			return false;
-		}
-		return true;
-	}
-
-	/**
-	* @brief Delete single category/object relation from the db
-	* @param int $objid The id of the object
-	* @param int|string $category The id or name of the category
-	* @param string $type The type of object (event/contact/task/journal).
-	* 	Defaults to the type set in the instance
-	* @returns boolean
-	*/
-	public function removeFromCategory($objid, $category, $type = null) {
-		$type = is_null($type) ? $this->type : $type;
-		if(is_string($category) && !is_numeric($category)) {
-			$category = trim($category);
-			$categoryid =  $this->array_searchi($category, $this->categories);
-		} else {
-			$categoryid = $category;
-		}
-
-		try {
-			$sql = 'DELETE FROM `' . self::RELATION_TABLE . '` '
-					. 'WHERE `objid` = ? AND `categoryid` = ? AND `type` = ?';
-			OCP\Util::writeLog('core', __METHOD__.', sql: ' . $objid . ' ' . $categoryid . ' ' . $type,
-				OCP\Util::DEBUG);
-			$stmt = OCP\DB::prepare($sql);
-			$stmt->execute(array($objid, $categoryid, $type));
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-				OCP\Util::ERROR);
-			return false;
-		}
-		return true;
-	}
-
-	/**
-	* @brief Delete categories from the db and from all the vobject supplied
-	* @param $names An array of categories to delete
-	* @param $objects An array of arrays with [id,vobject] (as text) pairs suitable for updating the apps object table.
-	*/
-	public function delete($names, array &$objects=null) {
-		if(!is_array($names)) {
-			$names = array($names);
-		}
-
-		$names = array_map('trim', $names);
-
-		OC_Log::write('core', __METHOD__ . ', before: '
-			. print_r($this->categories, true), OC_Log::DEBUG);
-		foreach($names as $name) {
-			$id = null;
-			OC_Log::write('core', __METHOD__.', '.$name, OC_Log::DEBUG);
-			if($this->hasCategory($name)) {
-				$id = $this->array_searchi($name, $this->categories);
-				unset($this->categories[$id]);
-			}
-			try {
-				$stmt = OCP\DB::prepare('DELETE FROM `' . self::CATEGORY_TABLE . '` WHERE '
-					. '`uid` = ? AND `type` = ? AND `category` = ?');
-				$result = $stmt->execute(array($this->user, $this->type, $name));
-				if (OC_DB::isError($result)) {
-					OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-				}
-			} catch(Exception $e) {
-				OCP\Util::writeLog('core', __METHOD__ . ', exception: '
-					. $e->getMessage(), OCP\Util::ERROR);
-			}
-			if(!is_null($id) && $id !== false) {
-				try {
-					$sql = 'DELETE FROM `' . self::RELATION_TABLE . '` '
-							. 'WHERE `categoryid` = ?';
-					$stmt = OCP\DB::prepare($sql);
-					$result = $stmt->execute(array($id));
-					if (OC_DB::isError($result)) {
-						OC_Log::write('core',
-							__METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result),
-							OC_Log::ERROR);
-					}
-				} catch(Exception $e) {
-					OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-						OCP\Util::ERROR);
-					return false;
-				}
-			}
-		}
-		OC_Log::write('core', __METHOD__.', after: '
-			. print_r($this->categories, true), OC_Log::DEBUG);
-		if(!is_null($objects)) {
-			foreach($objects as $key=>&$value) {
-				$vobject = OC_VObject::parse($value[1]);
-				if(!is_null($vobject)) {
-					$object = null;
-					$componentname = '';
-					if (isset($vobject->VEVENT)) {
-						$object = $vobject->VEVENT;
-						$componentname = 'VEVENT';
-					} else
-					if (isset($vobject->VTODO)) {
-						$object = $vobject->VTODO;
-						$componentname = 'VTODO';
-					} else
-					if (isset($vobject->VJOURNAL)) {
-						$object = $vobject->VJOURNAL;
-						$componentname = 'VJOURNAL';
-					} else {
-						$object = $vobject;
-					}
-					$categories = $object->getAsArray('CATEGORIES');
-					foreach($names as $name) {
-						$idx = $this->array_searchi($name, $categories);
-						if($idx !== false) {
-							OC_Log::write('core', __METHOD__
-								.', unsetting: '
-								. $categories[$this->array_searchi($name, $categories)],
-								OC_Log::DEBUG);
-							unset($categories[$this->array_searchi($name, $categories)]);
-						}
-					}
-
-					$object->setString('CATEGORIES', implode(',', $categories));
-					if($vobject !== $object) {
-						$vobject[$componentname] = $object;
-					}
-					$value[1] = $vobject->serialize();
-					$objects[$key] = $value;
-				} else {
-					OC_Log::write('core', __METHOD__
-						.', unable to parse. ID: ' . $value[0] . ', '
-						. substr($value[1], 0, 50) . '(...)', OC_Log::DEBUG);
-				}
-			}
-		}
-	}
-
-	// 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/tests/lib/tags.php b/tests/lib/tags.php
new file mode 100644
index 0000000000..06baebc0af
--- /dev/null
+++ b/tests/lib/tags.php
@@ -0,0 +1,133 @@
+<?php
+/**
+* ownCloud
+*
+* @author Thomas Tanghus
+* @copyright 2012-13 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/>.
+*
+*/
+
+class Test_Tags extends PHPUnit_Framework_TestCase {
+
+	protected $objectType;
+	protected $user;
+	protected $backupGlobals = FALSE;
+
+	public function setUp() {
+
+		OC_User::clearBackends();
+		OC_User::useBackend('dummy');
+		$this->user = uniqid('user_');
+		$this->objectType = uniqid('type_');
+		OC_User::createUser($this->user, 'pass');
+		OC_User::setUserId($this->user);
+
+	}
+
+	public function tearDown() {
+		//$query = OC_DB::prepare('DELETE FROM `*PREFIX*vcategories` WHERE `item_type` = ?');
+		//$query->execute(array('test'));
+	}
+
+	public function testInstantiateWithDefaults() {
+		$defaultTags = array('Friends', 'Family', 'Work', 'Other');
+
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType, $defaultTags);
+
+		$this->assertEquals(4, count($tagMgr->tags()));
+	}
+
+	public function testAddTags() {
+		$tags = array('Friends', 'Family', 'Work', 'Other');
+
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType);
+
+		foreach($tags as $tag) {
+			$result = $tagMgr->add($tag);
+			$this->assertTrue((bool)$result);
+		}
+
+		$this->assertFalse($tagMgr->add('Family'));
+		$this->assertFalse($tagMgr->add('fAMILY'));
+
+		$this->assertEquals(4, count($tagMgr->tags()));
+	}
+
+	public function testdeleteTags() {
+		$defaultTags = array('Friends', 'Family', 'Work', 'Other');
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType, $defaultTags);
+
+		$this->assertEquals(4, count($tagMgr->tags()));
+
+		$tagMgr->delete('family');
+		$this->assertEquals(3, count($tagMgr->tags()));
+
+		$tagMgr->delete(array('Friends', 'Work', 'Other'));
+		$this->assertEquals(0, count($tagMgr->tags()));
+
+	}
+
+	public function testRenameTag() {
+		$defaultTags = array('Friends', 'Family', 'Wrok', 'Other');
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType, $defaultTags);
+
+		$this->assertTrue($tagMgr->rename('Wrok', 'Work'));
+		$this->assertTrue($tagMgr->hasTag('Work'));
+		$this->assertFalse($tagMgr->hastag('Wrok'));
+		$this->assertFalse($tagMgr->rename('Wrok', 'Work'));
+
+	}
+
+	public function testTagAs() {
+		$objids = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
+
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType);
+
+		foreach($objids as $id) {
+			$tagMgr->tagAs($id, 'Family');
+		}
+
+		$this->assertEquals(1, count($tagMgr->tags()));
+		$this->assertEquals(9, count($tagMgr->idsForTag('Family')));
+	}
+
+	/**
+	* @depends testTagAs
+	*/
+	public function testUnTag() {
+		$objIds = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
+
+		// Is this "legal"?
+		$this->testTagAs();
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType);
+
+		foreach($objIds as $id) {
+			$this->assertTrue(in_array($id, $tagMgr->idsForTag('Family')));
+			$tagMgr->unTag($id, 'Family');
+			$this->assertFalse(in_array($id, $tagMgr->idsForTag('Family')));
+		}
+
+		$this->assertEquals(1, count($tagMgr->tags()));
+		$this->assertEquals(0, count($tagMgr->idsForTag('Family')));
+	}
+
+}
diff --git a/tests/lib/vcategories.php b/tests/lib/vcategories.php
deleted file mode 100644
index df5f600f20..0000000000
--- a/tests/lib/vcategories.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-/**
-* ownCloud
-*
-* @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/>.
-*
-*/
-
-//require_once("../lib/template.php");
-
-class Test_VCategories extends PHPUnit_Framework_TestCase {
-
-	protected $objectType;
-	protected $user;
-	protected $backupGlobals = FALSE;
-
-	public function setUp() {
-
-		OC_User::clearBackends();
-		OC_User::useBackend('dummy');
-		$this->user = uniqid('user_');
-		$this->objectType = uniqid('type_');
-		OC_User::createUser($this->user, 'pass');
-		OC_User::setUserId($this->user);
-
-	}
-
-	public function tearDown() {
-		//$query = OC_DB::prepare('DELETE FROM `*PREFIX*vcategories` WHERE `item_type` = ?');
-		//$query->execute(array('test'));
-	}
-
-	public function testInstantiateWithDefaults() {
-		$defcategories = array('Friends', 'Family', 'Work', 'Other');
-
-		$catmgr = new OC_VCategories($this->objectType, $this->user, $defcategories);
-
-		$this->assertEquals(4, count($catmgr->categories()));
-	}
-
-	public function testAddCategories() {
-		$categories = array('Friends', 'Family', 'Work', 'Other');
-
-		$catmgr = new OC_VCategories($this->objectType, $this->user);
-
-		foreach($categories as $category) {
-			$result = $catmgr->add($category);
-			$this->assertTrue((bool)$result);
-		}
-
-		$this->assertFalse($catmgr->add('Family'));
-		$this->assertFalse($catmgr->add('fAMILY'));
-
-		$this->assertEquals(4, count($catmgr->categories()));
-	}
-
-	public function testdeleteCategories() {
-		$defcategories = array('Friends', 'Family', 'Work', 'Other');
-		$catmgr = new OC_VCategories($this->objectType, $this->user, $defcategories);
-		$this->assertEquals(4, count($catmgr->categories()));
-
-		$catmgr->delete('family');
-		$this->assertEquals(3, count($catmgr->categories()));
-
-		$catmgr->delete(array('Friends', 'Work', 'Other'));
-		$this->assertEquals(0, count($catmgr->categories()));
-
-	}
-
-	public function testrenameCategory() {
-		$defcategories = array('Friends', 'Family', 'Wrok', 'Other');
-		$catmgr = new OC_VCategories($this->objectType, $this->user, $defcategories);
-
-		$this->assertTrue($catmgr->rename('Wrok', 'Work'));
-		$this->assertTrue($catmgr->hasCategory('Work'));
-		$this->assertFalse($catmgr->hasCategory('Wrok'));
-		$this->assertFalse($catmgr->rename('Wrok', 'Work'));
-
-	}
-
-	public function testAddToCategory() {
-		$objids = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
-
-		$catmgr = new OC_VCategories($this->objectType, $this->user);
-
-		foreach($objids as $id) {
-			$catmgr->addToCategory($id, 'Family');
-		}
-
-		$this->assertEquals(1, count($catmgr->categories()));
-		$this->assertEquals(9, count($catmgr->idsForCategory('Family')));
-	}
-
-	/**
-	* @depends testAddToCategory
-	*/
-	public function testRemoveFromCategory() {
-		$objids = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
-
-		// Is this "legal"?
-		$this->testAddToCategory();
-		$catmgr = new OC_VCategories($this->objectType, $this->user);
-
-		foreach($objids as $id) {
-			$this->assertTrue(in_array($id, $catmgr->idsForCategory('Family')));
-			$catmgr->removeFromCategory($id, 'Family');
-			$this->assertFalse(in_array($id, $catmgr->idsForCategory('Family')));
-		}
-
-		$this->assertEquals(1, count($catmgr->categories()));
-		$this->assertEquals(0, count($catmgr->idsForCategory('Family')));
-	}
-
-}
-- 
GitLab


From 370ed814f76012a97fd40d50c367b2f7240dfc09 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 18 Sep 2013 11:22:29 +0200
Subject: [PATCH 091/248] add permissions of the file to the json response

---
 apps/files/ajax/upload.php | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index 1d03cd89f8..4f10891058 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -116,7 +116,8 @@ if (strpos($dir, '..') === false) {
 					'name' => basename($target),
 					'originalname' => $files['name'][$i],
 					'uploadMaxFilesize' => $maxUploadFileSize,
-					'maxHumanFilesize' => $maxHumanFileSize
+					'maxHumanFilesize' => $maxHumanFileSize,
+					'permissions' => $meta['permissions']
 				);
 			}
 		}
-- 
GitLab


From 1a60aa2b6a15ae68a2a6998a72580c171b88f719 Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Wed, 18 Sep 2013 11:49:02 +0200
Subject: [PATCH 092/248] only remember password if the user changes the
 permissions, otherwise the user disabled the password protection

---
 lib/public/share.php | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/lib/public/share.php b/lib/public/share.php
index 9ab956d84b..91c5c477c8 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -106,22 +106,22 @@ class Share {
 		}
 		return false;
 	}
-	
+
 	/**
 	* @brief Prepare a path to be passed to DB as file_target
 	* @return string Prepared path
 	*/
 	public static function prepFileTarget( $path ) {
-	
+
 		// Paths in DB are stored with leading slashes, so add one if necessary
 		if ( substr( $path, 0, 1 ) !== '/' ) {
-		
+
 			$path = '/' . $path;
-		
+
 		}
-		
+
 		return $path;
-	
+
 	}
 
 	/**
@@ -256,7 +256,7 @@ class Share {
 		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
@@ -450,6 +450,7 @@ class Share {
 					$uidOwner, self::FORMAT_NONE, null, 1)) {
 					// remember old token
 					$oldToken = $checkExists['token'];
+					$oldPermissions = $checkExists['permissions'];
 					//delete the old share
 					self::delete($checkExists['id']);
 				}
@@ -460,8 +461,11 @@ class Share {
 					$hasher = new \PasswordHash(8, $forcePortable);
 					$shareWith = $hasher->HashPassword($shareWith.\OC_Config::getValue('passwordsalt', ''));
 				} else {
-					// reuse the already set password
-					$shareWith = $checkExists['share_with'];
+					// reuse the already set password, but only if we change permissions
+					// otherwise the user disabled the password protection
+					if ($checkExists && (int)$permissions !== $oldPermissions) {
+						$shareWith = $checkExists['share_with'];
+					}
 				}
 
 				// Generate token
-- 
GitLab


From d3f88ceeb49b9b86d32124163b0cea82567a4911 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Wed, 18 Sep 2013 12:01:01 +0200
Subject: [PATCH 093/248] Add some docs to the sessions interface.

---
 lib/public/isession.php | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/lib/public/isession.php b/lib/public/isession.php
index 5f9ce32f3b..0a77b0c823 100644
--- a/lib/public/isession.php
+++ b/lib/public/isession.php
@@ -10,34 +10,46 @@
 
 namespace OCP;
 
+/**
+ * Interface ISession
+ *
+ * wrap PHP's internal session handling into the ISession interface
+ */
 interface ISession {
+
 	/**
+	 * Set a value in the session
+	 *
 	 * @param string $key
 	 * @param mixed $value
 	 */
 	public function set($key, $value);
 
 	/**
+	 * Get a value from the session
+	 *
 	 * @param string $key
 	 * @return mixed should return null if $key does not exist
 	 */
 	public function get($key);
 
 	/**
+	 * Check if a named key exists in the session
+	 *
 	 * @param string $key
 	 * @return bool
 	 */
 	public function exists($key);
 
 	/**
-	 * should not throw any errors if $key does not exist
+	 * Remove a $key/$value pair from the session
 	 *
 	 * @param string $key
 	 */
 	public function remove($key);
 
 	/**
-	 * removes all entries within the cache namespace
+	 * Reset and recreate the session
 	 */
 	public function clear();
 
-- 
GitLab


From 6ba23912a7c969ce24a3b295c55a60ea640ca690 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Wed, 18 Sep 2013 12:34:10 +0200
Subject: [PATCH 094/248] Add getUserFolder/getAppFolder to Server.

---
 lib/public/iservercontainer.php | 14 +++++++++++++
 lib/server.php                  | 35 +++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+)

diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index ec7212b306..89e71db8d1 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -62,6 +62,20 @@ interface IServerContainer {
 	 */
 	function getRootFolder();
 
+	/**
+	 * Returns a view to ownCloud's files folder
+	 *
+	 * @return \OCP\Files\Folder
+	 */
+	function getUserFolder();
+
+	/**
+	 * Returns an app-specific view in ownClouds data directory
+	 *
+	 * @return \OCP\Files\Folder
+	 */
+	function getAppFolder();
+
 	/**
 	 * Returns the current session
 	 *
diff --git a/lib/server.php b/lib/server.php
index 0eee3e0f73..9525fce9fd 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -56,6 +56,17 @@ class Server extends SimpleContainer implements IServerContainer {
 			$view = new View();
 			return new Root($manager, $view, $user);
 		});
+		$this->registerService('CustomFolder', function($c) {
+			$dir = $c['CustomFolderPath'];
+			$root = $this->getRootFolder();
+			$folder = null;
+			if(!$root->nodeExists($dir)) {
+				$folder = $root->newFolder($dir);
+			} else {
+				$folder = $root->get($dir);
+			}
+			return $folder;
+		});
 	}
 
 	/**
@@ -97,6 +108,30 @@ class Server extends SimpleContainer implements IServerContainer {
 		return $this->query('RootFolder');
 	}
 
+	/**
+	 * Returns a view to ownCloud's files folder
+	 *
+	 * @return \OCP\Files\Folder
+	 */
+	function getUserFolder() {
+
+		$this->registerParameter('CustomFolderPath', '/files');
+		return $this->query('CustomFolder');
+
+	}
+
+	/**
+	 * Returns an app-specific view in ownClouds data directory
+	 *
+	 * @return \OCP\Files\Folder
+	 */
+	function getAppFolder() {
+
+		$this->registerParameter('CustomFolderPath', '/' . \OC_App::getCurrentApp());
+		return $this->query('CustomFolder');
+
+	}
+
 	/**
 	 * Returns the current session
 	 *
-- 
GitLab


From 442a2e074cea694ce0d361b5433eb5473be438e6 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Wed, 18 Sep 2013 12:35:46 +0200
Subject: [PATCH 095/248] Update to adhere to the coding guidelines.

---
 lib/server.php | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/lib/server.php b/lib/server.php
index 9525fce9fd..6b1cb9c38d 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -17,10 +17,10 @@ use OCP\IServerContainer;
 class Server extends SimpleContainer implements IServerContainer {
 
 	function __construct() {
-		$this->registerService('ContactsManager', function($c){
+		$this->registerService('ContactsManager', function($c) {
 			return new ContactsManager();
 		});
-		$this->registerService('Request', function($c){
+		$this->registerService('Request', function($c) {
 			$params = array();
 
 			// we json decode the body only in case of content type json
@@ -45,10 +45,10 @@ class Server extends SimpleContainer implements IServerContainer {
 				)
 			);
 		});
-		$this->registerService('PreviewManager', function($c){
+		$this->registerService('PreviewManager', function($c) {
 			return new PreviewManager();
 		});
-		$this->registerService('RootFolder', function($c){
+		$this->registerService('RootFolder', function($c) {
 			// TODO: get user and user manager from container as well
 			$user = \OC_User::getUser();
 			$user = \OC_User::getManager()->get($user);
@@ -83,8 +83,7 @@ class Server extends SimpleContainer implements IServerContainer {
 	 *
 	 * @return \OCP\IRequest|null
 	 */
-	function getRequest()
-	{
+	function getRequest() {
 		return $this->query('Request');
 	}
 
@@ -93,8 +92,7 @@ class Server extends SimpleContainer implements IServerContainer {
 	 *
 	 * @return \OCP\IPreview
 	 */
-	function getPreviewManager()
-	{
+	function getPreviewManager() {
 		return $this->query('PreviewManager');
 	}
 
@@ -103,8 +101,7 @@ class Server extends SimpleContainer implements IServerContainer {
 	 *
 	 * @return \OCP\Files\Folder
 	 */
-	function getRootFolder()
-	{
+	function getRootFolder() {
 		return $this->query('RootFolder');
 	}
 
-- 
GitLab


From 6ed2df11fcfbd632c9702fe3e04569fcb456f972 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 18 Sep 2013 13:09:04 +0200
Subject: [PATCH 096/248] store the permissions retrieved via ajax within the
 dom element

---
 apps/files/js/filelist.js | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index b50d46c98d..fe8b1c5591 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -745,6 +745,12 @@ $(document).ready(function(){
 						data.context.attr('data-size', file.size);
 						data.context.find('td.filesize').text(humanFileSize(file.size));
 					}
+					var permissions = data.context.data('permissions');
+					if(permissions != file.permissions) {
+						data.context.attr('data-permissions', file.permissions);
+						data.context.data('permissions', file.permissions);
+					}
+					FileActions.display(data.context.find('td.filename'));
 					if (FileList.loadingDone) {
 						FileList.loadingDone(file.name, file.id);
 					}
-- 
GitLab


From 20a43d1982188cee9fed5342ad5ade0a3d21d0f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 18 Sep 2013 13:09:47 +0200
Subject: [PATCH 097/248] remove file action elements before recreating them

---
 apps/files/js/fileactions.js | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index 330fe86f6b..009ea62de9 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -68,6 +68,9 @@ var FileActions = {
 		if ($('tr[data-file="'+file+'"]').data('renaming')) {
 			return;
 		}
+
+		// recreate fileactions
+		parent.children('a.name').find('.fileactions').remove();
 		parent.children('a.name').append('<span class="fileactions" />');
 		var defaultAction = FileActions.getDefault(FileActions.getCurrentMimeType(), FileActions.getCurrentType(), FileActions.getCurrentPermissions());
 
@@ -117,6 +120,8 @@ var FileActions = {
 			addAction('Share', actions.Share);
 		}
 
+		// remove the existing delete action
+		parent.parent().children().last().find('.action.delete').remove();
 		if (actions['Delete']) {
 			var img = FileActions.icons['Delete'];
 			if (img.call) {
-- 
GitLab


From 534933ee9bf6837fc75a389e4ed3aad4ffe1ab0f Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Wed, 18 Sep 2013 13:15:38 +0200
Subject: [PATCH 098/248] Use new emitter system

---
 lib/base.php | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lib/base.php b/lib/base.php
index 520be11bc5..ce307b2bdd 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -568,7 +568,9 @@ class OC {
 			} catch (Exception $e) {
 
 			}
-			OC_Hook::connect('OC_User', 'post_login', 'OC\Cache\File', 'loginListener');
+			// NOTE: This will be replaced to use OCP
+			$userSession = \OC_User::getUserSession();
+			$userSession->listen('postLogin', array('OC\Cache\File', 'loginListener'))
 		}
 	}
 
-- 
GitLab


From 2ef0b58ff6434254510c8be9c940126883022d76 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Wed, 18 Sep 2013 14:25:12 +0200
Subject: [PATCH 099/248] Don't try to be clever

---
 lib/server.php | 33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/lib/server.php b/lib/server.php
index 6b1cb9c38d..3454622425 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -56,17 +56,6 @@ class Server extends SimpleContainer implements IServerContainer {
 			$view = new View();
 			return new Root($manager, $view, $user);
 		});
-		$this->registerService('CustomFolder', function($c) {
-			$dir = $c['CustomFolderPath'];
-			$root = $this->getRootFolder();
-			$folder = null;
-			if(!$root->nodeExists($dir)) {
-				$folder = $root->newFolder($dir);
-			} else {
-				$folder = $root->get($dir);
-			}
-			return $folder;
-		});
 	}
 
 	/**
@@ -112,8 +101,15 @@ class Server extends SimpleContainer implements IServerContainer {
 	 */
 	function getUserFolder() {
 
-		$this->registerParameter('CustomFolderPath', '/files');
-		return $this->query('CustomFolder');
+		$dir = '/files';
+		$root = $this->getRootFolder();
+		$folder = null;
+		if(!$root->nodeExists($dir)) {
+			$folder = $root->newFolder($dir);
+		} else {
+			$folder = $root->get($dir);
+		}
+		return $folder;
 
 	}
 
@@ -124,8 +120,15 @@ class Server extends SimpleContainer implements IServerContainer {
 	 */
 	function getAppFolder() {
 
-		$this->registerParameter('CustomFolderPath', '/' . \OC_App::getCurrentApp());
-		return $this->query('CustomFolder');
+		$dir = '/' . \OC_App::getCurrentApp();
+		$root = $this->getRootFolder();
+		$folder = null;
+		if(!$root->nodeExists($dir)) {
+			$folder = $root->newFolder($dir);
+		} else {
+			$folder = $root->get($dir);
+		}
+		return $folder;
 
 	}
 
-- 
GitLab


From 715846626eb931f086fbc952b33031f706b4547a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Wed, 18 Sep 2013 14:39:39 +0200
Subject: [PATCH 100/248] hide excessive logging with a trace flag

---
 apps/files/js/file-upload.js | 39 +++++++++++++++++++-----------------
 apps/files/js/filelist.js    | 10 ++++-----
 2 files changed, 26 insertions(+), 23 deletions(-)

diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 9ea3658cc7..8e9bcb885f 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -72,7 +72,7 @@ OC.Upload = {
 	 * cancels all uploads
 	 */
 	cancelUploads:function() {
-		console.log('canceling uploads');
+		this.log('canceling uploads');
 		jQuery.each(this._uploads,function(i, jqXHR){
 			jqXHR.abort();
 		});
@@ -135,7 +135,7 @@ OC.Upload = {
 	 * @param data data
 	 */
 	onSkip:function(data){
-		this.logStatus('skip', null, data);
+		this.log('skip', null, data);
 		this.deleteUpload(data);
 	},
 	/**
@@ -143,7 +143,7 @@ OC.Upload = {
 	 * @param data data
 	 */
 	onReplace:function(data){
-		this.logStatus('replace', null, data);
+		this.log('replace', null, data);
 		data.data.append('resolution', 'replace');
 		data.submit();
 	},
@@ -152,7 +152,7 @@ OC.Upload = {
 	 * @param data data
 	 */
 	onAutorename:function(data){
-		this.logStatus('autorename', null, data);
+		this.log('autorename', null, data);
 		if (data.data) {
 			data.data.append('resolution', 'autorename');
 		} else {
@@ -160,9 +160,12 @@ OC.Upload = {
 		}
 		data.submit();
 	},
-	logStatus:function(caption, e, data) {
-		console.log(caption);
-		console.log(data);
+	_trace:false, //TODO implement log handler for JS per class?
+	log:function(caption, e, data) {
+		if (this._trace) {
+			console.log(caption);
+			console.log(data);
+		}
 	},
 	/**
 	 * TODO checks the list of existing files prior to uploading and shows a simple dialog to choose
@@ -207,7 +210,7 @@ $(document).ready(function() {
 			 * @returns {Boolean}
 			 */
 			add: function(e, data) {
-				OC.Upload.logStatus('add', e, data);
+				OC.Upload.log('add', e, data);
 				var that = $(this);
 			
 				// we need to collect all data upload objects before starting the upload so we can check their existence
@@ -300,7 +303,7 @@ $(document).ready(function() {
 			 * @param e
 			 */
 			start: function(e) {
-				OC.Upload.logStatus('start', e, null);
+				OC.Upload.log('start', e, null);
 			},
 			submit: function(e, data) {
 				OC.Upload.rememberUpload(data);
@@ -313,7 +316,7 @@ $(document).ready(function() {
 				}
 			},
 			fail: function(e, data) {
-				OC.Upload.logStatus('fail', e, data);
+				OC.Upload.log('fail', e, data);
 				if (typeof data.textStatus !== 'undefined' && data.textStatus !== 'success' ) {
 					if (data.textStatus === 'abort') {
 						$('#notification').text(t('files', 'Upload cancelled.'));
@@ -335,7 +338,7 @@ $(document).ready(function() {
 			 * @param data
 			 */
 			done:function(e, data) {
-				OC.Upload.logStatus('done', e, data);
+				OC.Upload.log('done', e, data);
 				// handle different responses (json or body from iframe for ie)
 				var response;
 				if (typeof data.result === 'string') {
@@ -373,7 +376,7 @@ $(document).ready(function() {
 			 * @param data
 			 */
 			stop: function(e, data) {
-				OC.Upload.logStatus('stop', e, data);
+				OC.Upload.log('stop', e, data);
 			}
 		};
 
@@ -385,7 +388,7 @@ $(document).ready(function() {
 
 			// add progress handlers
 			fileupload.on('fileuploadadd', function(e, data) {
-				OC.Upload.logStatus('progress handle fileuploadadd', e, data);
+				OC.Upload.log('progress handle fileuploadadd', e, data);
 				//show cancel button
 				//if(data.dataType !== 'iframe') { //FIXME when is iframe used? only for ie?
 				//	$('#uploadprogresswrapper input.stop').show();
@@ -393,29 +396,29 @@ $(document).ready(function() {
 			});
 			// add progress handlers
 			fileupload.on('fileuploadstart', function(e, data) {
-				OC.Upload.logStatus('progress handle fileuploadstart', e, data);
+				OC.Upload.log('progress handle fileuploadstart', e, data);
 				$('#uploadprogresswrapper input.stop').show();
 				$('#uploadprogressbar').progressbar({value:0});
 				$('#uploadprogressbar').fadeIn();
 			});
 			fileupload.on('fileuploadprogress', function(e, data) {
-				OC.Upload.logStatus('progress handle fileuploadprogress', e, data);
+				OC.Upload.log('progress handle fileuploadprogress', e, data);
 				//TODO progressbar in row
 			});
 			fileupload.on('fileuploadprogressall', function(e, data) {
-				OC.Upload.logStatus('progress handle fileuploadprogressall', e, data);
+				OC.Upload.log('progress handle fileuploadprogressall', e, data);
 				var progress = (data.loaded / data.total) * 100;
 				$('#uploadprogressbar').progressbar('value', progress);
 			});
 			fileupload.on('fileuploadstop', function(e, data) {
-				OC.Upload.logStatus('progress handle fileuploadstop', e, data);
+				OC.Upload.log('progress handle fileuploadstop', e, data);
 				
 				$('#uploadprogresswrapper input.stop').fadeOut();
 				$('#uploadprogressbar').fadeOut();
 				
 			});
 			fileupload.on('fileuploadfail', function(e, data) {
-				OC.Upload.logStatus('progress handle fileuploadfail', e, data);
+				OC.Upload.log('progress handle fileuploadfail', e, data);
 				//if user pressed cancel hide upload progress bar and cancel button
 				if (data.errorThrown === 'abort') {
 					$('#uploadprogresswrapper input.stop').fadeOut();
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index ffdbe5ef01..39df91c94b 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -652,7 +652,7 @@ $(document).ready(function(){
 	var file_upload_start = $('#file_upload_start');
 
 	file_upload_start.on('fileuploaddrop', function(e, data) {
-		OC.Upload.logStatus('filelist handle fileuploaddrop', e, data);
+		OC.Upload.log('filelist handle fileuploaddrop', e, data);
 
 		var dropTarget = $(e.originalEvent.target).closest('tr');
 		if(dropTarget && dropTarget.data('type') === 'dir') { // drag&drop upload to folder
@@ -681,7 +681,7 @@ $(document).ready(function(){
 
 	});
 	file_upload_start.on('fileuploadadd', function(e, data) {
-		OC.Upload.logStatus('filelist handle fileuploadadd', e, data);
+		OC.Upload.log('filelist handle fileuploadadd', e, data);
 
 		//finish delete if we are uploading a deleted file
 		if(FileList.deleteFiles && FileList.deleteFiles.indexOf(data.files[0].name)!==-1){
@@ -715,7 +715,7 @@ $(document).ready(function(){
 	 * update counter when uploading to sub folder
 	 */
 	file_upload_start.on('fileuploaddone', function(e, data) {
-		OC.Upload.logStatus('filelist handle fileuploaddone', e, data);
+		OC.Upload.log('filelist handle fileuploaddone', e, data);
 		
 		var response;
 		if (typeof data.result === 'string') {
@@ -781,7 +781,7 @@ $(document).ready(function(){
 		}
 	});
 	file_upload_start.on('fileuploadstop', function(e, data) {
-		OC.Upload.logStatus('filelist handle fileuploadstop', e, data);
+		OC.Upload.log('filelist handle fileuploadstop', e, data);
 
 		//if user pressed cancel hide upload chrome
 		if (data.errorThrown === 'abort') {
@@ -794,7 +794,7 @@ $(document).ready(function(){
 		}
 	});
 	file_upload_start.on('fileuploadfail', function(e, data) {
-		OC.Upload.logStatus('filelist handle fileuploadfail', e, data);
+		OC.Upload.log('filelist handle fileuploadfail', e, data);
 
 		//if user pressed cancel hide upload chrome
 		if (data.errorThrown === 'abort') {
-- 
GitLab


From 79cd655920ae3346725539df2f443a66e51c5726 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Wed, 18 Sep 2013 14:50:21 +0200
Subject: [PATCH 101/248] Note to self: Test before pushing!!!

---
 lib/base.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/base.php b/lib/base.php
index ce307b2bdd..fd31cfd9f2 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -570,7 +570,7 @@ class OC {
 			}
 			// NOTE: This will be replaced to use OCP
 			$userSession = \OC_User::getUserSession();
-			$userSession->listen('postLogin', array('OC\Cache\File', 'loginListener'))
+			$userSession->listen('postLogin', array('OC\Cache\File', 'loginListener'));
 		}
 	}
 
-- 
GitLab


From 09d043729a41a0e8966ed3bb81567ed1009a37b6 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Wed, 18 Sep 2013 15:02:25 +0200
Subject: [PATCH 102/248] Note to self 2: Do as you preach. Test!

---
 lib/base.php             | 2 +-
 lib/cache.php            | 6 +++---
 lib/cache/fileglobal.php | 2 +-
 lib/legacy/cache.php     | 2 +-
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/lib/base.php b/lib/base.php
index fd31cfd9f2..0650361be9 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -570,7 +570,7 @@ class OC {
 			}
 			// NOTE: This will be replaced to use OCP
 			$userSession = \OC_User::getUserSession();
-			$userSession->listen('postLogin', array('OC\Cache\File', 'loginListener'));
+			$userSession->listen('postLogin', '\OC\Cache\File', 'loginListener');
 		}
 	}
 
diff --git a/lib/cache.php b/lib/cache.php
index c99663a0ca..a4fa8be710 100644
--- a/lib/cache.php
+++ b/lib/cache.php
@@ -6,7 +6,7 @@
  * See the COPYING-README file.
  */
 
-namespace OC\Cache;
+namespace OC;
 
 class Cache {
 	/**
@@ -24,7 +24,7 @@ class Cache {
 	 */
 	static public function getGlobalCache() {
 		if (!self::$global_cache) {
-			self::$global_cache = new FileGlobal();
+			self::$global_cache = new Cache\FileGlobal();
 		}
 		return self::$global_cache;
 	}
@@ -35,7 +35,7 @@ class Cache {
 	 */
 	static public function getUserCache() {
 		if (!self::$user_cache) {
-			self::$user_cache = new File();
+			self::$user_cache = new Cache\File();
 		}
 		return self::$user_cache;
 	}
diff --git a/lib/cache/fileglobal.php b/lib/cache/fileglobal.php
index 9ca1740293..bd049bba4d 100644
--- a/lib/cache/fileglobal.php
+++ b/lib/cache/fileglobal.php
@@ -10,7 +10,7 @@ namespace OC\Cache;
 
 class FileGlobal {
 	static protected function getCacheDir() {
-		$cache_dir = get_temp_dir().'/owncloud-'.OC_Util::getInstanceId().'/';
+		$cache_dir = get_temp_dir().'/owncloud-' . \OC_Util::getInstanceId().'/';
 		if (!is_dir($cache_dir)) {
 			mkdir($cache_dir);
 		}
diff --git a/lib/legacy/cache.php b/lib/legacy/cache.php
index 83b214170f..f915eb516b 100644
--- a/lib/legacy/cache.php
+++ b/lib/legacy/cache.php
@@ -6,5 +6,5 @@
  * See the COPYING-README file.
  */
 
-class Cache extends OC\Cache {
+class OC_Cache extends \OC\Cache {
 }
\ No newline at end of file
-- 
GitLab


From 18a2c48ceb2206fbc871dc0c28e5fb233b4fc0fc Mon Sep 17 00:00:00 2001
From: kondou <kondou@ts.unde.re>
Date: Wed, 18 Sep 2013 16:47:27 +0200
Subject: [PATCH 103/248] Translate errormsgs in
 settings/changepassword/controller

---
 settings/changepassword/controller.php | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/settings/changepassword/controller.php b/settings/changepassword/controller.php
index 53bd69a2cd..1ecb644a96 100644
--- a/settings/changepassword/controller.php
+++ b/settings/changepassword/controller.php
@@ -69,19 +69,27 @@ class Controller {
 			}
 
 			if ($recoveryEnabledForUser && $recoveryPassword === '') {
-				\OC_JSON::error(array('data' => array('message' => 'Please provide a admin recovery password, otherwise all user data will be lost')));
+				$l = new \OC_L10n('settings');
+				\OC_JSON::error(array('data' => array(
+					'message' => $l->t('Please provide an admin recovery password, otherwise all user data will be lost')
+				)));
 			} elseif ($recoveryEnabledForUser && ! $validRecoveryPassword) {
-				\OC_JSON::error(array('data' => array('message' => 'Wrong admin recovery password. Please check the password and try again.')));
+				$l = new \OC_L10n('settings');
+				\OC_JSON::error(array('data' => array(
+					'message' => $l->t('Wrong admin recovery password. Please check the password and try again.')
+				)));
 			} else { // now we know that everything is fine regarding the recovery password, let's try to change the password
 				$result = \OC_User::setPassword($username, $password, $recoveryPassword);
 				if (!$result && $recoveryPasswordSupported) {
+					$l = new \OC_L10n('settings');
 					\OC_JSON::error(array(
 						"data" => array(
-							"message" => "Back-end doesn't support password change, but the users encryption key was successfully updated." 
+							"message" => $l->t("Back-end doesn't support password change, but the users encryption key was successfully updated.")
 						)
 					));
 				} elseif (!$result && !$recoveryPasswordSupported) {
-					\OC_JSON::error(array("data" => array( "message" => "Unable to change password" )));
+					$l = new \OC_L10n('settings');
+					\OC_JSON::error(array("data" => array( $l->t("message" => "Unable to change password" ) )));
 				} else {
 					\OC_JSON::success(array("data" => array( "username" => $username )));
 				}
@@ -91,7 +99,8 @@ class Controller {
 			if (!is_null($password) && \OC_User::setPassword($username, $password)) {
 				\OC_JSON::success(array('data' => array('username' => $username)));
 			} else {
-				\OC_JSON::error(array('data' => array('message' => 'Unable to change password')));
+				$l = new \OC_L10n('settings');
+				\OC_JSON::error(array('data' => array('message' => $l->t('Unable to change password'))));
 			}
 		}
 	}
-- 
GitLab


From 64cc13a8d35a6350494a81e012accabb61bb8d47 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Wed, 18 Sep 2013 17:13:07 +0200
Subject: [PATCH 104/248] allow passing classes to buttons

---
 core/js/jquery.ocdialog.js | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/core/js/jquery.ocdialog.js b/core/js/jquery.ocdialog.js
index f1836fd472..02cd6ac146 100644
--- a/core/js/jquery.ocdialog.js
+++ b/core/js/jquery.ocdialog.js
@@ -103,6 +103,9 @@
 					}
 					$.each(value, function(idx, val) {
 						var $button = $('<button>').text(val.text);
+						if (val.classes) {
+							$button.addClass(val.classes);
+						}
 						if(val.defaultButton) {
 							$button.addClass('primary');
 							self.$defaultButton = $button;
-- 
GitLab


From 12ff268e607738b03125ec6b212708391496d7f5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Wed, 18 Sep 2013 17:20:14 +0200
Subject: [PATCH 105/248] move upload dialog css to separate file

---
 apps/files/css/files.css      |  85 ------------------------
 apps/files/css/upload.css     | 119 ++++++++++++++++++++++++++++++++++
 apps/files/index.php          |   1 +
 apps/files_sharing/public.php |   1 +
 4 files changed, 121 insertions(+), 85 deletions(-)
 create mode 100644 apps/files/css/upload.css

diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index ff593fc4d2..e15c2b540d 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -357,88 +357,3 @@ table.dragshadow td.size {
 .mask.transparent{
 	opacity: 0;
 }
-
-.oc-dialog .fileexists table {
-	width: 100%;
-}
-.oc-dialog .fileexists th {
-	padding-left: 0;
-	padding-right: 0;
-}
-.oc-dialog .fileexists th input[type='checkbox'] {
-	margin-right: 3px;
-}
-.oc-dialog .fileexists th:first-child {
-	width: 230px;
-}
-.oc-dialog .fileexists th label {
-	font-weight: normal;
-	color:black;
-}
-.oc-dialog .fileexists th .count {
-	margin-left: 3px;
-}
-.oc-dialog .fileexists .conflict {
-	width: 100%;
-	height: 85px;
-}
-.oc-dialog .fileexists .conflict.template {
-	display: none;
-}
-.oc-dialog .fileexists .conflict .filename {
-	color:#777;
-	word-break: break-all;
-	clear: left;
-}
-.oc-dialog .fileexists .icon {
-	width: 64px;
-	height: 64px;
-	margin: 0px 5px 5px 5px;
-	background-repeat: no-repeat;
-	background-size: 64px 64px;
-	float: left;
-}
-
-.oc-dialog .fileexists .replacement {
-	float: left;
-	width: 230px;
-}
-.oc-dialog .fileexists .original {
-	float: left;
-	width: 230px;
-}
-.oc-dialog .fileexists .conflicts {
-	overflow-y:scroll;
-	max-height: 225px;
-}
-.oc-dialog .fileexists .conflict input[type='checkbox'] {
-	float: left;
-}
-
-.oc-dialog .fileexists .toggle {
-	background-image: url('%webroot%/core/img/actions/triangle-e.png');
-	width: 16px;
-	height: 16px;
-}
-.oc-dialog .fileexists #allfileslabel {
-	float:right;
-}
-.oc-dialog .fileexists #allfiles {
-	vertical-align: bottom;
-	position: relative;
-	top: -3px;
-}
-.oc-dialog .fileexists #allfiles + span{
-	vertical-align: bottom;
-}
-
-
-
-.oc-dialog .oc-dialog-buttonrow {
-	width:100%;
-	text-align:right;
-}
-
-.oc-dialog .oc-dialog-buttonrow .cancel {
-	float:left;
-}
diff --git a/apps/files/css/upload.css b/apps/files/css/upload.css
new file mode 100644
index 0000000000..2d11e41ba8
--- /dev/null
+++ b/apps/files/css/upload.css
@@ -0,0 +1,119 @@
+
+#upload {
+	height:27px; padding:0; margin-left:0.2em; overflow:hidden;
+	vertical-align: top;
+}
+#upload a {
+	position:relative; display:block; width:100%; height:27px;
+	cursor:pointer; z-index:10;
+	background-image:url('%webroot%/core/img/actions/upload.svg');
+	background-repeat:no-repeat;
+	background-position:7px 6px;
+	opacity:0.65;
+}
+.file_upload_target { display:none; }
+.file_upload_form { display:inline; float:left; margin:0; padding:0; cursor:pointer; overflow:visible; }
+#file_upload_start {
+	float: left;
+	left:0; top:0; width:28px; height:27px; padding:0;
+	font-size:1em;
+	-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0;
+	z-index:20; position:relative; cursor:pointer; overflow:hidden;
+}
+
+#uploadprogresswrapper {
+	display: inline-block;
+	vertical-align: top;
+	margin:0.3em;
+	height: 29px;
+}
+#uploadprogressbar {
+	position:relative;
+	float: left;
+	margin-left: 12px;
+	width: 130px;
+	height: 26px;
+	display:inline-block;
+}
+#uploadprogressbar + stop {
+	font-size: 13px;
+}
+
+.oc-dialog .fileexists table {
+	width: 100%;
+}
+.oc-dialog .fileexists th {
+	padding-left: 0;
+	padding-right: 0;
+}
+.oc-dialog .fileexists th input[type='checkbox'] {
+	margin-right: 3px;
+}
+.oc-dialog .fileexists th:first-child {
+	width: 230px;
+}
+.oc-dialog .fileexists th label {
+	font-weight: normal;
+	color:black;
+}
+.oc-dialog .fileexists th .count {
+	margin-left: 3px;
+}
+.oc-dialog .fileexists .conflicts .template {
+	display: none;
+}
+.oc-dialog .fileexists .conflict {
+	width: 100%;
+	height: 85px;
+}
+.oc-dialog .fileexists .conflict .filename {
+	color:#777;
+	word-break: break-all;
+	clear: left;
+}
+.oc-dialog .fileexists .icon {
+	width: 64px;
+	height: 64px;
+	margin: 0px 5px 5px 5px;
+	background-repeat: no-repeat;
+	background-size: 64px 64px;
+	float: left;
+}
+.oc-dialog .fileexists .replacement {
+	float: left;
+	width: 230px;
+}
+.oc-dialog .fileexists .original {
+	float: left;
+	width: 230px;
+}
+.oc-dialog .fileexists .conflicts {
+	overflow-y:scroll;
+	max-height: 225px;
+}
+.oc-dialog .fileexists .conflict input[type='checkbox'] {
+	float: left;
+}
+.oc-dialog .fileexists .toggle {
+	background-image: url('%webroot%/core/img/actions/triangle-e.png');
+	width: 16px;
+	height: 16px;
+}
+.oc-dialog .fileexists #allfileslabel {
+	float:right;
+}
+.oc-dialog .fileexists #allfiles {
+	vertical-align: bottom;
+	position: relative;
+	top: -3px;
+}
+.oc-dialog .fileexists #allfiles + span{
+	vertical-align: bottom;
+}
+.oc-dialog .oc-dialog-buttonrow {
+	width:100%;
+	text-align:right;
+}
+.oc-dialog .oc-dialog-buttonrow .cancel {
+	float:left;
+}
diff --git a/apps/files/index.php b/apps/files/index.php
index d46d8e32ee..9e54a706c0 100644
--- a/apps/files/index.php
+++ b/apps/files/index.php
@@ -26,6 +26,7 @@ OCP\User::checkLoggedIn();
 
 // Load the files we need
 OCP\Util::addStyle('files', 'files');
+OCP\Util::addStyle('files', 'upload');
 OCP\Util::addscript('files', 'file-upload');
 OCP\Util::addscript('files', 'jquery.iframe-transport');
 OCP\Util::addscript('files', 'jquery.fileupload');
diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php
index 6d3a07a9d0..c997a7950c 100644
--- a/apps/files_sharing/public.php
+++ b/apps/files_sharing/public.php
@@ -170,6 +170,7 @@ if (isset($path)) {
 			$tmpl->assign('dir', $getPath);
 
 			OCP\Util::addStyle('files', 'files');
+			OCP\Util::addStyle('files', 'upload');
 			OCP\Util::addScript('files', 'files');
 			OCP\Util::addScript('files', 'filelist');
 			OCP\Util::addscript('files', 'keyboardshortcuts');
-- 
GitLab


From 7bd5e89f8cf6e46daa45e588d9275728b93a230e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Wed, 18 Sep 2013 17:22:29 +0200
Subject: [PATCH 106/248] simplify conflict template handling, fix reopen after
 ESC

---
 apps/files/templates/fileexists.html |  2 +-
 core/js/oc-dialogs.js                | 24 +++++++++++-------------
 2 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/apps/files/templates/fileexists.html b/apps/files/templates/fileexists.html
index a5b2fb7690..662177ac7e 100644
--- a/apps/files/templates/fileexists.html
+++ b/apps/files/templates/fileexists.html
@@ -7,7 +7,7 @@
 		<th><label><input class="allexistingfiles" type="checkbox" />Already existing files<span class="count"></span></label></th>
 	</table>
 	<div class="conflicts">
-		<div class="conflict template">
+		<div class="template">
 			<div class="filename"></div>
 			<div class="replacement">
 				<input type="checkbox" />
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index 28bd94b9b0..c4d1f34a09 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -281,8 +281,8 @@ var OCdialogs = {
 
 		var addConflict = function(conflicts, original, replacement) {
 
-				var conflict = conflicts.find('.conflict.template').clone();
-
+				var conflict = conflicts.find('.template').clone().removeClass('template').addClass('conflict');
+				
 				conflict.data('data',data);
 
 				conflict.find('.filename').text(original.name);
@@ -306,7 +306,6 @@ var OCdialogs = {
 						});
 					}
 				);
-				conflict.removeClass('template');
 				conflicts.append(conflict);
 
 				//set more recent mtime bold
@@ -343,7 +342,7 @@ var OCdialogs = {
 				var conflicts = $(dialog_id+ ' .conflicts');
 				addConflict(conflicts, original, replacement);
 
-				var title = t('files','{count} file conflicts',{count:$(dialog_id+ ' .conflict:not(.template)').length});
+				var title = t('files','{count} file conflicts',{count:$(dialog_id+ ' .conflict').length});
 				$(dialog_id).parent().children('.oc-dialog-title').text(title);
 
 				//recalculate dimensions
@@ -371,7 +370,6 @@ var OCdialogs = {
 							text: t('core', 'Cancel'),
 							classes: 'cancel',
 							click: function(){
-								self._fileexistsshown = false;
 								if ( typeof controller.onCancel !== 'undefined') {
 									controller.onCancel(data);
 								}
@@ -382,9 +380,8 @@ var OCdialogs = {
 							text: t('core', 'Continue'),
 							classes: 'continue',
 							click: function(){
-								self._fileexistsshown = false;
 								if ( typeof controller.onContinue !== 'undefined') {
-									controller.onContinue($(dialog_id + ' .conflict:not(.template)'));
+									controller.onContinue($(dialog_id + ' .conflict'));
 								}
 								$(dialog_id).ocdialog('close');
 							}
@@ -397,6 +394,7 @@ var OCdialogs = {
 						buttons: buttonlist,
 						closeButton: null,
 						close: function(event, ui) {
+								self._fileexistsshown = false;
 							$(this).ocdialog('destroy').remove();
 						}
 					});
@@ -405,11 +403,11 @@ var OCdialogs = {
 
 					//add checkbox toggling actions
 					$(dialog_id).find('.allnewfiles').on('click', function() {
-						var checkboxes = $(dialog_id).find('.conflict:not(.template) .replacement input[type="checkbox"]');
+						var checkboxes = $(dialog_id).find('.conflict .replacement input[type="checkbox"]');
 						checkboxes.prop('checked', $(this).prop('checked'));
 					});
 					$(dialog_id).find('.allexistingfiles').on('click', function() {
-						var checkboxes = $(dialog_id).find('.conflict:not(.template) .original input[type="checkbox"]');
+						var checkboxes = $(dialog_id).find('.conflict .original input[type="checkbox"]');
 						checkboxes.prop('checked', $(this).prop('checked'));
 					});
 					$(dialog_id).find('.conflicts').on('click', '.replacement,.original', function() {
@@ -423,8 +421,8 @@ var OCdialogs = {
 
 					//update counters
 					$(dialog_id).on('click', '.replacement,.allnewfiles', function() {
-						var count = $(dialog_id).find('.conflict:not(.template) .replacement input[type="checkbox"]:checked').length;
-						if (count === $(dialog_id+ ' .conflict:not(.template)').length) {
+						var count = $(dialog_id).find('.conflict .replacement input[type="checkbox"]:checked').length;
+						if (count === $(dialog_id+ ' .conflict').length) {
 							$(dialog_id).find('.allnewfiles').prop('checked', true);
 							$(dialog_id).find('.allnewfiles + .count').text(t('files','(all selected)'));
 						} else if (count > 0) {
@@ -436,8 +434,8 @@ var OCdialogs = {
 						}
 					});
 					$(dialog_id).on('click', '.original,.allexistingfiles', function(){
-						var count = $(dialog_id).find('.conflict:not(.template) .original input[type="checkbox"]:checked').length;
-						if (count === $(dialog_id+ ' .conflict:not(.template)').length) {
+						var count = $(dialog_id).find('.conflict .original input[type="checkbox"]:checked').length;
+						if (count === $(dialog_id+ ' .conflict').length) {
 							$(dialog_id).find('.allexistingfiles').prop('checked', true);
 							$(dialog_id).find('.allexistingfiles + .count').text(t('files','(all selected)'));
 						} else if (count > 0) {
-- 
GitLab


From 6b1843d91b88ef0d928c683e1cc3f87a7f1b90ff Mon Sep 17 00:00:00 2001
From: Jenkins for ownCloud <thomas.mueller@tmit.eu>
Date: Wed, 18 Sep 2013 11:50:02 -0400
Subject: [PATCH 107/248] [tx-robot] updated from transifex

---
 apps/files/l10n/ach.php                |   7 +
 apps/files/l10n/af_ZA.php              |   7 +
 apps/files/l10n/be.php                 |   7 +
 apps/files/l10n/bs.php                 |  12 +
 apps/files/l10n/de_AT.php              |   7 +
 apps/files/l10n/de_CH.php              |  77 +++
 apps/files/l10n/en_GB.php              |  78 +++
 apps/files/l10n/es_MX.php              |   7 +
 apps/files/l10n/hi.php                 |   1 +
 apps/files/l10n/km.php                 |   7 +
 apps/files/l10n/kn.php                 |   7 +
 apps/files/l10n/ml_IN.php              |   7 +
 apps/files/l10n/ne.php                 |   7 +
 apps/files/l10n/nqo.php                |   7 +
 apps/files/l10n/pa.php                 |  17 +
 apps/files/l10n/sk.php                 |   7 +
 apps/files/l10n/sw_KE.php              |   7 +
 apps/files_encryption/l10n/bs.php      |   5 +
 apps/files_encryption/l10n/de_CH.php   |  39 ++
 apps/files_encryption/l10n/en_GB.php   |  39 ++
 apps/files_encryption/l10n/pa.php      |   5 +
 apps/files_encryption/l10n/te.php      |   5 +
 apps/files_external/l10n/de_CH.php     |  28 ++
 apps/files_external/l10n/en_GB.php     |  28 ++
 apps/files_external/l10n/pa.php        |   6 +
 apps/files_sharing/l10n/de_CH.php      |  19 +
 apps/files_sharing/l10n/en_GB.php      |  19 +
 apps/files_sharing/l10n/hi.php         |   3 +-
 apps/files_sharing/l10n/pa.php         |   8 +
 apps/files_trashbin/l10n/ach.php       |   6 +
 apps/files_trashbin/l10n/af_ZA.php     |   6 +
 apps/files_trashbin/l10n/be.php        |   6 +
 apps/files_trashbin/l10n/bs.php        |   7 +
 apps/files_trashbin/l10n/de_AT.php     |   6 +
 apps/files_trashbin/l10n/de_CH.php     |  19 +
 apps/files_trashbin/l10n/en@pirate.php |   6 +
 apps/files_trashbin/l10n/en_GB.php     |  19 +
 apps/files_trashbin/l10n/es_MX.php     |   6 +
 apps/files_trashbin/l10n/hi.php        |   7 +
 apps/files_trashbin/l10n/ka.php        |   6 +
 apps/files_trashbin/l10n/km.php        |   6 +
 apps/files_trashbin/l10n/kn.php        |   6 +
 apps/files_trashbin/l10n/ml_IN.php     |   6 +
 apps/files_trashbin/l10n/my_MM.php     |   6 +
 apps/files_trashbin/l10n/ne.php        |   6 +
 apps/files_trashbin/l10n/nqo.php       |   6 +
 apps/files_trashbin/l10n/pa.php        |   8 +
 apps/files_trashbin/l10n/sk.php        |   6 +
 apps/files_trashbin/l10n/sw_KE.php     |   6 +
 apps/files_versions/l10n/cy_GB.php     |   5 +
 apps/files_versions/l10n/de_CH.php     |  10 +
 apps/files_versions/l10n/en_GB.php     |  10 +
 apps/files_versions/l10n/sq.php        |   5 +
 apps/user_ldap/l10n/de_CH.php          |  87 ++++
 apps/user_ldap/l10n/en_GB.php          |  87 ++++
 apps/user_ldap/l10n/lt_LT.php          |  44 ++
 apps/user_ldap/l10n/pa.php             |   6 +
 apps/user_webdavauth/l10n/de_CH.php    |   7 +
 apps/user_webdavauth/l10n/en_GB.php    |   7 +
 apps/user_webdavauth/l10n/fa.php       |   5 +
 core/l10n/ca.php                       |   7 +
 core/l10n/cs_CZ.php                    |   7 +
 core/l10n/de.php                       |   7 +
 core/l10n/de_DE.php                    |   7 +
 core/l10n/en_GB.php                    |   7 +
 core/l10n/et_EE.php                    |   7 +
 core/l10n/fi_FI.php                    |   3 +
 core/l10n/gl.php                       |   7 +
 core/l10n/hi.php                       |   2 +
 core/l10n/it.php                       |   7 +
 core/l10n/ja_JP.php                    |   6 +
 core/l10n/lt_LT.php                    |   7 +
 core/l10n/nl.php                       |  13 +
 core/l10n/pa.php                       |  45 ++
 core/l10n/pt_BR.php                    |   7 +
 l10n/ach/settings.po                   |  45 +-
 l10n/af_ZA/settings.po                 |  45 +-
 l10n/ar/settings.po                    |  45 +-
 l10n/be/settings.po                    |  45 +-
 l10n/bg_BG/settings.po                 |  45 +-
 l10n/bn_BD/settings.po                 |  45 +-
 l10n/bs/settings.po                    |  45 +-
 l10n/ca/core.po                        |  20 +-
 l10n/ca/lib.po                         |  12 +-
 l10n/ca/settings.po                    |  61 ++-
 l10n/cs_CZ/core.po                     |  20 +-
 l10n/cs_CZ/lib.po                      |  12 +-
 l10n/cs_CZ/settings.po                 |  61 ++-
 l10n/cy_GB/settings.po                 |  45 +-
 l10n/da/settings.po                    |  61 ++-
 l10n/de/core.po                        |  20 +-
 l10n/de/lib.po                         |  12 +-
 l10n/de/settings.po                    |  61 ++-
 l10n/de_AT/settings.po                 |  45 +-
 l10n/de_CH/settings.po                 |  45 +-
 l10n/de_DE/core.po                     |  20 +-
 l10n/de_DE/lib.po                      |  12 +-
 l10n/de_DE/settings.po                 |  61 ++-
 l10n/el/settings.po                    |  47 +-
 l10n/en@pirate/settings.po             |  45 +-
 l10n/en_GB/core.po                     |  20 +-
 l10n/en_GB/lib.po                      |  20 +-
 l10n/en_GB/settings.po                 |  61 ++-
 l10n/eo/settings.po                    |  47 +-
 l10n/es/settings.po                    |  49 +-
 l10n/es_AR/settings.po                 |  47 +-
 l10n/es_MX/settings.po                 |  45 +-
 l10n/et_EE/core.po                     |  20 +-
 l10n/et_EE/lib.po                      |  12 +-
 l10n/et_EE/settings.po                 |  61 ++-
 l10n/eu/settings.po                    |  47 +-
 l10n/fa/settings.po                    |  47 +-
 l10n/fi_FI/core.po                     |  12 +-
 l10n/fi_FI/lib.po                      |  20 +-
 l10n/fi_FI/settings.po                 |  61 ++-
 l10n/fr/settings.po                    |  62 ++-
 l10n/gl/core.po                        |  20 +-
 l10n/gl/lib.po                         |  12 +-
 l10n/gl/settings.po                    |  61 ++-
 l10n/he/settings.po                    |  47 +-
 l10n/hi/core.po                        |   8 +-
 l10n/hi/files.po                       |  84 ++--
 l10n/hi/files_sharing.po               |   6 +-
 l10n/hi/settings.po                    |  49 +-
 l10n/hr/settings.po                    |  45 +-
 l10n/hu_HU/settings.po                 |  47 +-
 l10n/hy/settings.po                    |  45 +-
 l10n/ia/settings.po                    |  47 +-
 l10n/id/settings.po                    |  45 +-
 l10n/is/settings.po                    |  45 +-
 l10n/it/core.po                        |  20 +-
 l10n/it/lib.po                         |  12 +-
 l10n/it/settings.po                    |  61 ++-
 l10n/ja_JP/core.po                     |  18 +-
 l10n/ja_JP/lib.po                      |  11 +-
 l10n/ja_JP/settings.po                 |  55 +-
 l10n/ka/settings.po                    |  45 +-
 l10n/ka_GE/settings.po                 |  45 +-
 l10n/km/settings.po                    |  45 +-
 l10n/kn/settings.po                    |  45 +-
 l10n/ko/settings.po                    |  47 +-
 l10n/ku_IQ/settings.po                 |  45 +-
 l10n/lb/settings.po                    |  45 +-
 l10n/lt_LT/core.po                     |  20 +-
 l10n/lt_LT/lib.po                      |  13 +-
 l10n/lt_LT/settings.po                 |  61 ++-
 l10n/lt_LT/user_ldap.po                |  95 ++--
 l10n/lv/settings.po                    |  45 +-
 l10n/mk/settings.po                    |  47 +-
 l10n/ml_IN/settings.po                 |  45 +-
 l10n/ms_MY/settings.po                 |  47 +-
 l10n/my_MM/settings.po                 |  45 +-
 l10n/nb_NO/settings.po                 |  47 +-
 l10n/ne/settings.po                    |  45 +-
 l10n/nl/core.po                        |  32 +-
 l10n/nl/lib.po                         |  38 +-
 l10n/nl/settings.po                    |  61 ++-
 l10n/nn_NO/settings.po                 |  45 +-
 l10n/nqo/settings.po                   |  45 +-
 l10n/oc/settings.po                    |  45 +-
 l10n/pa/core.po                        | 672 +++++++++++++++++++++++++
 l10n/pa/files.po                       | 335 ++++++++++++
 l10n/pa/files_encryption.po            | 176 +++++++
 l10n/pa/files_external.po              | 123 +++++
 l10n/pa/files_sharing.po               |  80 +++
 l10n/pa/files_trashbin.po              |  84 ++++
 l10n/pa/files_versions.po              |  43 ++
 l10n/pa/lib.po                         | 334 ++++++++++++
 l10n/pa/settings.po                    | 606 ++++++++++++++++++++++
 l10n/pa/user_ldap.po                   | 406 +++++++++++++++
 l10n/pa/user_webdavauth.po             |  33 ++
 l10n/pl/settings.po                    |  49 +-
 l10n/pt_BR/core.po                     |  20 +-
 l10n/pt_BR/lib.po                      |  12 +-
 l10n/pt_BR/settings.po                 |  61 ++-
 l10n/pt_PT/settings.po                 |  47 +-
 l10n/ro/settings.po                    |  45 +-
 l10n/ru/settings.po                    |  47 +-
 l10n/si_LK/settings.po                 |  45 +-
 l10n/sk/settings.po                    |  45 +-
 l10n/sk_SK/settings.po                 |  47 +-
 l10n/sl/settings.po                    |  47 +-
 l10n/sq/settings.po                    |  45 +-
 l10n/sr/settings.po                    |  45 +-
 l10n/sr@latin/settings.po              |  45 +-
 l10n/sv/settings.po                    |  47 +-
 l10n/sw_KE/settings.po                 |  45 +-
 l10n/ta_LK/settings.po                 |  45 +-
 l10n/te/settings.po                    |  45 +-
 l10n/templates/core.pot                |   2 +-
 l10n/templates/files.pot               |  16 +-
 l10n/templates/files_encryption.pot    |   8 +-
 l10n/templates/files_external.pot      |   2 +-
 l10n/templates/files_sharing.pot       |   2 +-
 l10n/templates/files_trashbin.pot      |   2 +-
 l10n/templates/files_versions.pot      |   2 +-
 l10n/templates/lib.pot                 |   2 +-
 l10n/templates/settings.pot            |  42 +-
 l10n/templates/user_ldap.pot           |   2 +-
 l10n/templates/user_webdavauth.pot     |   2 +-
 l10n/th_TH/settings.po                 |  47 +-
 l10n/tr/settings.po                    |  47 +-
 l10n/ug/settings.po                    |  45 +-
 l10n/uk/files_encryption.po            |  10 +-
 l10n/uk/settings.po                    |  45 +-
 l10n/uk/user_webdavauth.po             |   4 +-
 l10n/ur_PK/settings.po                 |  45 +-
 l10n/vi/settings.po                    |  45 +-
 l10n/zh_CN/settings.po                 |  47 +-
 l10n/zh_HK/settings.po                 |  45 +-
 l10n/zh_TW/settings.po                 |  47 +-
 lib/l10n/ca.php                        |   3 +
 lib/l10n/cs_CZ.php                     |   3 +
 lib/l10n/de.php                        |   3 +
 lib/l10n/de_DE.php                     |   3 +
 lib/l10n/en_GB.php                     |  11 +-
 lib/l10n/et_EE.php                     |   3 +
 lib/l10n/fi_FI.php                     |   7 +
 lib/l10n/gl.php                        |   3 +
 lib/l10n/it.php                        |   3 +
 lib/l10n/ja_JP.php                     |   2 +
 lib/l10n/lt_LT.php                     |   3 +
 lib/l10n/nl.php                        |  16 +
 lib/l10n/pa.php                        |  16 +
 lib/l10n/pt_BR.php                     |   3 +
 settings/l10n/ca.php                   |   8 +
 settings/l10n/cs_CZ.php                |   8 +
 settings/l10n/da.php                   |   8 +
 settings/l10n/de.php                   |   8 +
 settings/l10n/de_DE.php                |   8 +
 settings/l10n/el.php                   |   1 +
 settings/l10n/en_GB.php                |   8 +
 settings/l10n/eo.php                   |   1 +
 settings/l10n/es.php                   |   2 +
 settings/l10n/es_AR.php                |   1 +
 settings/l10n/et_EE.php                |   8 +
 settings/l10n/eu.php                   |   1 +
 settings/l10n/fa.php                   |   1 +
 settings/l10n/fi_FI.php                |   8 +
 settings/l10n/fr.php                   |   8 +
 settings/l10n/gl.php                   |   8 +
 settings/l10n/he.php                   |   1 +
 settings/l10n/hi.php                   |   2 +
 settings/l10n/hu_HU.php                |   1 +
 settings/l10n/ia.php                   |   1 +
 settings/l10n/it.php                   |   8 +
 settings/l10n/ja_JP.php                |   5 +
 settings/l10n/ko.php                   |   1 +
 settings/l10n/lt_LT.php                |   8 +
 settings/l10n/mk.php                   |   1 +
 settings/l10n/ms_MY.php                |   1 +
 settings/l10n/nb_NO.php                |   1 +
 settings/l10n/nl.php                   |   8 +
 settings/l10n/pa.php                   |  24 +
 settings/l10n/pl.php                   |   2 +
 settings/l10n/pt_BR.php                |   8 +
 settings/l10n/pt_PT.php                |   1 +
 settings/l10n/ru.php                   |   1 +
 settings/l10n/sk_SK.php                |   1 +
 settings/l10n/sl.php                   |   1 +
 settings/l10n/sv.php                   |   1 +
 settings/l10n/th_TH.php                |   1 +
 settings/l10n/tr.php                   |   1 +
 settings/l10n/zh_CN.php                |   1 +
 settings/l10n/zh_TW.php                |   1 +
 265 files changed, 7904 insertions(+), 998 deletions(-)
 create mode 100644 apps/files/l10n/ach.php
 create mode 100644 apps/files/l10n/af_ZA.php
 create mode 100644 apps/files/l10n/be.php
 create mode 100644 apps/files/l10n/bs.php
 create mode 100644 apps/files/l10n/de_AT.php
 create mode 100644 apps/files/l10n/de_CH.php
 create mode 100644 apps/files/l10n/en_GB.php
 create mode 100644 apps/files/l10n/es_MX.php
 create mode 100644 apps/files/l10n/km.php
 create mode 100644 apps/files/l10n/kn.php
 create mode 100644 apps/files/l10n/ml_IN.php
 create mode 100644 apps/files/l10n/ne.php
 create mode 100644 apps/files/l10n/nqo.php
 create mode 100644 apps/files/l10n/pa.php
 create mode 100644 apps/files/l10n/sk.php
 create mode 100644 apps/files/l10n/sw_KE.php
 create mode 100644 apps/files_encryption/l10n/bs.php
 create mode 100644 apps/files_encryption/l10n/de_CH.php
 create mode 100644 apps/files_encryption/l10n/en_GB.php
 create mode 100644 apps/files_encryption/l10n/pa.php
 create mode 100644 apps/files_encryption/l10n/te.php
 create mode 100644 apps/files_external/l10n/de_CH.php
 create mode 100644 apps/files_external/l10n/en_GB.php
 create mode 100644 apps/files_external/l10n/pa.php
 create mode 100644 apps/files_sharing/l10n/de_CH.php
 create mode 100644 apps/files_sharing/l10n/en_GB.php
 create mode 100644 apps/files_sharing/l10n/pa.php
 create mode 100644 apps/files_trashbin/l10n/ach.php
 create mode 100644 apps/files_trashbin/l10n/af_ZA.php
 create mode 100644 apps/files_trashbin/l10n/be.php
 create mode 100644 apps/files_trashbin/l10n/bs.php
 create mode 100644 apps/files_trashbin/l10n/de_AT.php
 create mode 100644 apps/files_trashbin/l10n/de_CH.php
 create mode 100644 apps/files_trashbin/l10n/en@pirate.php
 create mode 100644 apps/files_trashbin/l10n/en_GB.php
 create mode 100644 apps/files_trashbin/l10n/es_MX.php
 create mode 100644 apps/files_trashbin/l10n/hi.php
 create mode 100644 apps/files_trashbin/l10n/ka.php
 create mode 100644 apps/files_trashbin/l10n/km.php
 create mode 100644 apps/files_trashbin/l10n/kn.php
 create mode 100644 apps/files_trashbin/l10n/ml_IN.php
 create mode 100644 apps/files_trashbin/l10n/my_MM.php
 create mode 100644 apps/files_trashbin/l10n/ne.php
 create mode 100644 apps/files_trashbin/l10n/nqo.php
 create mode 100644 apps/files_trashbin/l10n/pa.php
 create mode 100644 apps/files_trashbin/l10n/sk.php
 create mode 100644 apps/files_trashbin/l10n/sw_KE.php
 create mode 100644 apps/files_versions/l10n/cy_GB.php
 create mode 100644 apps/files_versions/l10n/de_CH.php
 create mode 100644 apps/files_versions/l10n/en_GB.php
 create mode 100644 apps/files_versions/l10n/sq.php
 create mode 100644 apps/user_ldap/l10n/de_CH.php
 create mode 100644 apps/user_ldap/l10n/en_GB.php
 create mode 100644 apps/user_ldap/l10n/pa.php
 create mode 100644 apps/user_webdavauth/l10n/de_CH.php
 create mode 100644 apps/user_webdavauth/l10n/en_GB.php
 create mode 100644 apps/user_webdavauth/l10n/fa.php
 create mode 100644 core/l10n/pa.php
 create mode 100644 l10n/pa/core.po
 create mode 100644 l10n/pa/files.po
 create mode 100644 l10n/pa/files_encryption.po
 create mode 100644 l10n/pa/files_external.po
 create mode 100644 l10n/pa/files_sharing.po
 create mode 100644 l10n/pa/files_trashbin.po
 create mode 100644 l10n/pa/files_versions.po
 create mode 100644 l10n/pa/lib.po
 create mode 100644 l10n/pa/settings.po
 create mode 100644 l10n/pa/user_ldap.po
 create mode 100644 l10n/pa/user_webdavauth.po
 create mode 100644 lib/l10n/pa.php
 create mode 100644 settings/l10n/pa.php

diff --git a/apps/files/l10n/ach.php b/apps/files/l10n/ach.php
new file mode 100644
index 0000000000..3c711e6b78
--- /dev/null
+++ b/apps/files/l10n/ach.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n > 1);";
diff --git a/apps/files/l10n/af_ZA.php b/apps/files/l10n/af_ZA.php
new file mode 100644
index 0000000000..0157af093e
--- /dev/null
+++ b/apps/files/l10n/af_ZA.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/be.php b/apps/files/l10n/be.php
new file mode 100644
index 0000000000..17262d2184
--- /dev/null
+++ b/apps/files/l10n/be.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("","","",""),
+"_%n file_::_%n files_" => array("","","",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","","","")
+);
+$PLURAL_FORMS = "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/files/l10n/bs.php b/apps/files/l10n/bs.php
new file mode 100644
index 0000000000..8ab07a9776
--- /dev/null
+++ b/apps/files/l10n/bs.php
@@ -0,0 +1,12 @@
+<?php
+$TRANSLATIONS = array(
+"Share" => "Podijeli",
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","",""),
+"Name" => "Ime",
+"Size" => "Veličina",
+"Save" => "Spasi",
+"Folder" => "Fasikla"
+);
+$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/files/l10n/de_AT.php b/apps/files/l10n/de_AT.php
new file mode 100644
index 0000000000..0157af093e
--- /dev/null
+++ b/apps/files/l10n/de_AT.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/de_CH.php b/apps/files/l10n/de_CH.php
new file mode 100644
index 0000000000..2895135d17
--- /dev/null
+++ b/apps/files/l10n/de_CH.php
@@ -0,0 +1,77 @@
+<?php
+$TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "%s konnte nicht verschoben werden. Eine Datei mit diesem Namen existiert bereits.",
+"Could not move %s" => "Konnte %s nicht verschieben",
+"Unable to set upload directory." => "Das Upload-Verzeichnis konnte nicht gesetzt werden.",
+"Invalid Token" => "Ungültiges Merkmal",
+"No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler",
+"There is no error, the file uploaded with success" => "Es ist kein Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen.",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Die Datei ist grösser, als die MAX_FILE_SIZE Vorgabe erlaubt, die im HTML-Formular spezifiziert ist",
+"The uploaded file was only partially uploaded" => "Die Datei konnte nur teilweise übertragen werden",
+"No file was uploaded" => "Keine Datei konnte übertragen werden.",
+"Missing a temporary folder" => "Kein temporärer Ordner vorhanden",
+"Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
+"Not enough storage available" => "Nicht genug Speicher vorhanden.",
+"Upload failed" => "Hochladen fehlgeschlagen",
+"Invalid directory." => "Ungültiges Verzeichnis.",
+"Files" => "Dateien",
+"Unable to upload your file as it is a directory or has 0 bytes" => "Ihre Datei kann nicht hochgeladen werden, weil es sich um einen Ordner handelt oder 0 Bytes gross ist.",
+"Not enough space available" => "Nicht genügend Speicherplatz verfügbar",
+"Upload cancelled." => "Upload abgebrochen.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.",
+"URL cannot be empty." => "Die URL darf nicht leer sein.",
+"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Ungültiger Ordnername. Die Verwendung von «Shared» ist ownCloud vorbehalten.",
+"Error" => "Fehler",
+"Share" => "Teilen",
+"Delete permanently" => "Endgültig löschen",
+"Rename" => "Umbenennen",
+"Pending" => "Ausstehend",
+"{new_name} already exists" => "{new_name} existiert bereits",
+"replace" => "ersetzen",
+"suggest name" => "Namen vorschlagen",
+"cancel" => "abbrechen",
+"replaced {new_name} with {old_name}" => "{old_name} wurde ersetzt durch {new_name}",
+"undo" => "rückgängig machen",
+"_%n folder_::_%n folders_" => array("","%n Ordner"),
+"_%n file_::_%n files_" => array("","%n Dateien"),
+"_Uploading %n file_::_Uploading %n files_" => array("%n Datei wird hochgeladen","%n Dateien werden hochgeladen"),
+"files uploading" => "Dateien werden hoch geladen",
+"'.' is an invalid file name." => "'.' ist kein gültiger Dateiname.",
+"File name cannot be empty." => "Der Dateiname darf nicht leer sein.",
+"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ungültiger Name, «\\», «/», «<», «>», «:», «\"», «|», «?» und «*» sind nicht zulässig.",
+"Your storage is full, files can not be updated or synced anymore!" => "Ihr Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Ihr Speicher ist fast voll ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Die Verschlüsselung wurde deaktiviert, jedoch sind Ihre Dateien nach wie vor verschlüsselt. Bitte gehen Sie zu Ihren persönlichen Einstellungen, um Ihre Dateien zu entschlüsseln.",
+"Your download is being prepared. This might take some time if the files are big." => "Ihr Download wird vorbereitet. Dies kann bei grösseren Dateien etwas dauern.",
+"Name" => "Name",
+"Size" => "Grösse",
+"Modified" => "Geändert",
+"%s could not be renamed" => "%s konnte nicht umbenannt werden",
+"Upload" => "Hochladen",
+"File handling" => "Dateibehandlung",
+"Maximum upload size" => "Maximale Upload-Grösse",
+"max. possible: " => "maximal möglich:",
+"Needed for multi-file and folder downloads." => "Für Mehrfachdatei- und Ordnerdownloads benötigt:",
+"Enable ZIP-download" => "ZIP-Download aktivieren",
+"0 is unlimited" => "0 bedeutet unbegrenzt",
+"Maximum input size for ZIP files" => "Maximale Grösse für ZIP-Dateien",
+"Save" => "Speichern",
+"New" => "Neu",
+"Text file" => "Textdatei",
+"Folder" => "Ordner",
+"From link" => "Von einem Link",
+"Deleted files" => "Gelöschte Dateien",
+"Cancel upload" => "Upload abbrechen",
+"You don’t have write permissions here." => "Sie haben hier keine Schreib-Berechtigungen.",
+"Nothing in here. Upload something!" => "Alles leer. Laden Sie etwas hoch!",
+"Download" => "Herunterladen",
+"Unshare" => "Freigabe aufheben",
+"Delete" => "Löschen",
+"Upload too large" => "Der Upload ist zu gross",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgrösse für Uploads auf diesem Server.",
+"Files are being scanned, please wait." => "Dateien werden gescannt, bitte warten.",
+"Current scanning" => "Scanne",
+"Upgrading filesystem cache..." => "Dateisystem-Cache wird aktualisiert ..."
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/en_GB.php b/apps/files/l10n/en_GB.php
new file mode 100644
index 0000000000..a13399a8db
--- /dev/null
+++ b/apps/files/l10n/en_GB.php
@@ -0,0 +1,78 @@
+<?php
+$TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Could not move %s - File with this name already exists",
+"Could not move %s" => "Could not move %s",
+"Unable to set upload directory." => "Unable to set upload directory.",
+"Invalid Token" => "Invalid Token",
+"No file was uploaded. Unknown error" => "No file was uploaded. Unknown error",
+"There is no error, the file uploaded with success" => "There is no error, the file uploaded successfully",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "The uploaded file exceeds the upload_max_filesize directive in php.ini: ",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
+"The uploaded file was only partially uploaded" => "The uploaded file was only partially uploaded",
+"No file was uploaded" => "No file was uploaded",
+"Missing a temporary folder" => "Missing a temporary folder",
+"Failed to write to disk" => "Failed to write to disk",
+"Not enough storage available" => "Not enough storage available",
+"Upload failed" => "Upload failed",
+"Invalid directory." => "Invalid directory.",
+"Files" => "Files",
+"Unable to upload your file as it is a directory or has 0 bytes" => "Unable to upload your file as it is a directory or has 0 bytes",
+"Not enough space available" => "Not enough space available",
+"Upload cancelled." => "Upload cancelled.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "File upload is in progress. Leaving the page now will cancel the upload.",
+"URL cannot be empty." => "URL cannot be empty.",
+"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Invalid folder name. Usage of 'Shared' is reserved by ownCloud",
+"Error" => "Error",
+"Share" => "Share",
+"Delete permanently" => "Delete permanently",
+"Rename" => "Rename",
+"Pending" => "Pending",
+"{new_name} already exists" => "{new_name} already exists",
+"replace" => "replace",
+"suggest name" => "suggest name",
+"cancel" => "cancel",
+"replaced {new_name} with {old_name}" => "replaced {new_name} with {old_name}",
+"undo" => "undo",
+"_%n folder_::_%n folders_" => array("%n folder","%n folders"),
+"_%n file_::_%n files_" => array("%n file","%n files"),
+"{dirs} and {files}" => "{dirs} and {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("Uploading %n file","Uploading %n files"),
+"files uploading" => "files uploading",
+"'.' is an invalid file name." => "'.' is an invalid file name.",
+"File name cannot be empty." => "File name cannot be empty.",
+"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed.",
+"Your storage is full, files can not be updated or synced anymore!" => "Your storage is full, files can not be updated or synced anymore!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Your storage is almost full ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files.",
+"Your download is being prepared. This might take some time if the files are big." => "Your download is being prepared. This might take some time if the files are big.",
+"Name" => "Name",
+"Size" => "Size",
+"Modified" => "Modified",
+"%s could not be renamed" => "%s could not be renamed",
+"Upload" => "Upload",
+"File handling" => "File handling",
+"Maximum upload size" => "Maximum upload size",
+"max. possible: " => "max. possible: ",
+"Needed for multi-file and folder downloads." => "Needed for multi-file and folder downloads.",
+"Enable ZIP-download" => "Enable ZIP-download",
+"0 is unlimited" => "0 is unlimited",
+"Maximum input size for ZIP files" => "Maximum input size for ZIP files",
+"Save" => "Save",
+"New" => "New",
+"Text file" => "Text file",
+"Folder" => "Folder",
+"From link" => "From link",
+"Deleted files" => "Deleted files",
+"Cancel upload" => "Cancel upload",
+"You don’t have write permissions here." => "You don’t have write permission here.",
+"Nothing in here. Upload something!" => "Nothing in here. Upload something!",
+"Download" => "Download",
+"Unshare" => "Unshare",
+"Delete" => "Delete",
+"Upload too large" => "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." => "Files are being scanned, please wait.",
+"Current scanning" => "Current scanning",
+"Upgrading filesystem cache..." => "Upgrading filesystem cache..."
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/es_MX.php b/apps/files/l10n/es_MX.php
new file mode 100644
index 0000000000..0157af093e
--- /dev/null
+++ b/apps/files/l10n/es_MX.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/hi.php b/apps/files/l10n/hi.php
index 7d2baab607..549c928320 100644
--- a/apps/files/l10n/hi.php
+++ b/apps/files/l10n/hi.php
@@ -5,6 +5,7 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("",""),
 "_%n file_::_%n files_" => array("",""),
 "_Uploading %n file_::_Uploading %n files_" => array("",""),
+"Upload" => "अपलोड ",
 "Save" => "सहेजें"
 );
 $PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/km.php b/apps/files/l10n/km.php
new file mode 100644
index 0000000000..70ab6572ba
--- /dev/null
+++ b/apps/files/l10n/km.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
+"_Uploading %n file_::_Uploading %n files_" => array("")
+);
+$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/kn.php b/apps/files/l10n/kn.php
new file mode 100644
index 0000000000..70ab6572ba
--- /dev/null
+++ b/apps/files/l10n/kn.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
+"_Uploading %n file_::_Uploading %n files_" => array("")
+);
+$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/ml_IN.php b/apps/files/l10n/ml_IN.php
new file mode 100644
index 0000000000..0157af093e
--- /dev/null
+++ b/apps/files/l10n/ml_IN.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/ne.php b/apps/files/l10n/ne.php
new file mode 100644
index 0000000000..0157af093e
--- /dev/null
+++ b/apps/files/l10n/ne.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/nqo.php b/apps/files/l10n/nqo.php
new file mode 100644
index 0000000000..70ab6572ba
--- /dev/null
+++ b/apps/files/l10n/nqo.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
+"_Uploading %n file_::_Uploading %n files_" => array("")
+);
+$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/pa.php b/apps/files/l10n/pa.php
new file mode 100644
index 0000000000..b28cb29622
--- /dev/null
+++ b/apps/files/l10n/pa.php
@@ -0,0 +1,17 @@
+<?php
+$TRANSLATIONS = array(
+"Upload failed" => "ਅੱਪਲੋਡ ਫੇਲ੍ਹ ਹੈ",
+"Files" => "ਫਾਇਲਾਂ",
+"Error" => "ਗਲਤੀ",
+"Share" => "ਸਾਂਝਾ ਕਰੋ",
+"Rename" => "ਨਾਂ ਬਦਲੋ",
+"undo" => "ਵਾਪਸ",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
+"Upload" => "ਅੱਪਲੋਡ",
+"Cancel upload" => "ਅੱਪਲੋਡ ਰੱਦ ਕਰੋ",
+"Download" => "ਡਾਊਨਲੋਡ",
+"Delete" => "ਹਟਾਓ"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/sk.php b/apps/files/l10n/sk.php
new file mode 100644
index 0000000000..a3178a95c4
--- /dev/null
+++ b/apps/files/l10n/sk.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","","")
+);
+$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/files/l10n/sw_KE.php b/apps/files/l10n/sw_KE.php
new file mode 100644
index 0000000000..0157af093e
--- /dev/null
+++ b/apps/files/l10n/sw_KE.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/bs.php b/apps/files_encryption/l10n/bs.php
new file mode 100644
index 0000000000..708e045ade
--- /dev/null
+++ b/apps/files_encryption/l10n/bs.php
@@ -0,0 +1,5 @@
+<?php
+$TRANSLATIONS = array(
+"Saving..." => "Spašavam..."
+);
+$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/files_encryption/l10n/de_CH.php b/apps/files_encryption/l10n/de_CH.php
new file mode 100644
index 0000000000..aa867645c8
--- /dev/null
+++ b/apps/files_encryption/l10n/de_CH.php
@@ -0,0 +1,39 @@
+<?php
+$TRANSLATIONS = array(
+"Recovery key successfully enabled" => "Der Wiederherstellungsschlüssel wurde erfolgreich aktiviert.",
+"Could not enable recovery key. Please check your recovery key password!" => "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!",
+"Recovery key successfully disabled" => "Der Wiederherstellungsschlüssel wurde erfolgreich deaktiviert.",
+"Could not disable recovery key. Please check your recovery key password!" => "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!",
+"Password successfully changed." => "Das Passwort wurde erfolgreich geändert.",
+"Could not change the password. Maybe the old password was not correct." => "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort nicht richtig.",
+"Private key password successfully updated." => "Das Passwort des privaten Schlüssels wurde erfolgreich aktualisiert.",
+"Could not update the private key password. Maybe the old password was not correct." => "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden. Vielleicht war das alte Passwort nicht richtig.",
+"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Ihr privater Schlüssel ist ungültig. Möglicher Weise wurde von ausserhalb Ihr Passwort geändert (z.B. in Ihrem gemeinsamen Verzeichnis). Sie können das Passwort Ihres privaten Schlüssels in den persönlichen Einstellungen aktualisieren, um wieder an Ihre Dateien zu gelangen.",
+"Missing requirements." => "Fehlende Voraussetzungen",
+"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Bitte stellen Sie sicher, dass PHP 5.3.3 oder neuer installiert und das OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Zur Zeit ist die Verschlüsselungs-App deaktiviert.",
+"Following users are not set up for encryption:" => "Für folgende Nutzer ist keine Verschlüsselung eingerichtet:",
+"Saving..." => "Speichern...",
+"Your private key is not valid! Maybe the your password was changed from outside." => "Ihr privater Schlüssel ist ungültig! Vielleicht wurde Ihr Passwort von ausserhalb geändert.",
+"You can unlock your private key in your " => "Sie können den privaten Schlüssel ändern und zwar in Ihrem",
+"personal settings" => "Persönliche Einstellungen",
+"Encryption" => "Verschlüsselung",
+"Enable recovery key (allow to recover users files in case of password loss):" => "Aktivieren Sie den Wiederherstellungsschlüssel (erlaubt die Wiederherstellung des Zugangs zu den Benutzerdateien, wenn das Passwort verloren geht).",
+"Recovery key password" => "Wiederherstellungschlüsselpasswort",
+"Enabled" => "Aktiviert",
+"Disabled" => "Deaktiviert",
+"Change recovery key password:" => "Wiederherstellungsschlüsselpasswort ändern",
+"Old Recovery key password" => "Altes Wiederherstellungsschlüsselpasswort",
+"New Recovery key password" => "Neues Wiederherstellungsschlüsselpasswort ",
+"Change Password" => "Passwort ändern",
+"Your private key password no longer match your log-in password:" => "Das Privatschlüsselpasswort darf nicht länger mit den Login-Passwort übereinstimmen.",
+"Set your old private key password to your current log-in password." => "Setzen Sie Ihr altes Privatschlüsselpasswort auf Ihr aktuelles LogIn-Passwort.",
+" If you don't remember your old password you can ask your administrator to recover your files." => "Falls Sie sich nicht an Ihr altes Passwort erinnern können, fragen Sie bitte Ihren Administrator, um Ihre Dateien wiederherzustellen.",
+"Old log-in password" => "Altes Login-Passwort",
+"Current log-in password" => "Momentanes Login-Passwort",
+"Update Private Key Password" => "Das Passwort des privaten Schlüssels aktualisieren",
+"Enable password recovery:" => "Die Passwort-Wiederherstellung aktivieren:",
+"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.",
+"File recovery settings updated" => "Die Einstellungen für die Dateiwiederherstellung wurden aktualisiert.",
+"Could not update file recovery" => "Die Dateiwiederherstellung konnte nicht aktualisiert werden."
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/en_GB.php b/apps/files_encryption/l10n/en_GB.php
new file mode 100644
index 0000000000..c220a4bdf0
--- /dev/null
+++ b/apps/files_encryption/l10n/en_GB.php
@@ -0,0 +1,39 @@
+<?php
+$TRANSLATIONS = array(
+"Recovery key successfully enabled" => "Recovery key enabled successfully",
+"Could not enable recovery key. Please check your recovery key password!" => "Could not enable recovery key. Please check your recovery key password!",
+"Recovery key successfully disabled" => "Recovery key disabled successfully",
+"Could not disable recovery key. Please check your recovery key password!" => "Could not disable recovery key. Please check your recovery key password!",
+"Password successfully changed." => "Password changed successfully.",
+"Could not change the password. Maybe the old password was not correct." => "Could not change the password. Maybe the old password was incorrect.",
+"Private key password successfully updated." => "Private key password updated successfully.",
+"Could not update the private key password. Maybe the old password was not correct." => "Could not update the private key password. Maybe the old password was not correct.",
+"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files.",
+"Missing requirements." => "Missing requirements.",
+"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled.",
+"Following users are not set up for encryption:" => "Following users are not set up for encryption:",
+"Saving..." => "Saving...",
+"Your private key is not valid! Maybe the your password was changed from outside." => "Your private key is not valid! Maybe the your password was changed externally.",
+"You can unlock your private key in your " => "You can unlock your private key in your ",
+"personal settings" => "personal settings",
+"Encryption" => "Encryption",
+"Enable recovery key (allow to recover users files in case of password loss):" => "Enable recovery key (allow to recover users files in case of password loss):",
+"Recovery key password" => "Recovery key password",
+"Enabled" => "Enabled",
+"Disabled" => "Disabled",
+"Change recovery key password:" => "Change recovery key password:",
+"Old Recovery key password" => "Old Recovery key password",
+"New Recovery key password" => "New Recovery key password",
+"Change Password" => "Change Password",
+"Your private key password no longer match your log-in password:" => "Your private key password no longer match your login password:",
+"Set your old private key password to your current log-in password." => "Set your old private key password to your current login password.",
+" If you don't remember your old password you can ask your administrator to recover your files." => " If you don't remember your old password you can ask your administrator to recover your files.",
+"Old log-in password" => "Old login password",
+"Current log-in password" => "Current login password",
+"Update Private Key Password" => "Update Private Key Password",
+"Enable password recovery:" => "Enable password recovery:",
+"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss",
+"File recovery settings updated" => "File recovery settings updated",
+"Could not update file recovery" => "Could not update file recovery"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/pa.php b/apps/files_encryption/l10n/pa.php
new file mode 100644
index 0000000000..5867099040
--- /dev/null
+++ b/apps/files_encryption/l10n/pa.php
@@ -0,0 +1,5 @@
+<?php
+$TRANSLATIONS = array(
+"Saving..." => "...ਸੰਭਾਲਿਆ ਜਾ ਰਿਹਾ ਹੈ"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/te.php b/apps/files_encryption/l10n/te.php
new file mode 100644
index 0000000000..10c7a08a55
--- /dev/null
+++ b/apps/files_encryption/l10n/te.php
@@ -0,0 +1,5 @@
+<?php
+$TRANSLATIONS = array(
+"personal settings" => "వ్యక్తిగత అమరికలు"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_external/l10n/de_CH.php b/apps/files_external/l10n/de_CH.php
new file mode 100644
index 0000000000..85e2f2d91f
--- /dev/null
+++ b/apps/files_external/l10n/de_CH.php
@@ -0,0 +1,28 @@
+<?php
+$TRANSLATIONS = array(
+"Access granted" => "Zugriff gestattet",
+"Error configuring Dropbox storage" => "Fehler beim Einrichten von Dropbox",
+"Grant access" => "Zugriff gestatten",
+"Please provide a valid Dropbox app key and secret." => "Bitte tragen Sie einen gültigen Dropbox-App-Key mit Secret ein.",
+"Error configuring Google Drive storage" => "Fehler beim Einrichten von Google Drive",
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>Warnung:</b> «smbclient» ist nicht installiert. Das Einhängen von CIFS/SMB-Freigaben ist nicht möglich. Bitten Sie Ihren Systemadministrator, dies zu installieren.",
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>Warnung::</b> Die FTP Unterstützung  von PHP ist nicht aktiviert oder installiert. Bitte wenden Sie sich an Ihren Systemadministrator.",
+"<b>Warning:</b> The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "<b>Achtung:</b> Die Curl-Unterstützung  von PHP ist nicht aktiviert oder installiert. Das Laden von ownCloud / WebDAV oder GoogleDrive Freigaben ist nicht möglich. Bitte Sie Ihren Systemadministrator, das Modul zu installieren.",
+"External Storage" => "Externer Speicher",
+"Folder name" => "Ordnername",
+"External storage" => "Externer Speicher",
+"Configuration" => "Konfiguration",
+"Options" => "Optionen",
+"Applicable" => "Zutreffend",
+"Add storage" => "Speicher hinzufügen",
+"None set" => "Nicht definiert",
+"All Users" => "Alle Benutzer",
+"Groups" => "Gruppen",
+"Users" => "Benutzer",
+"Delete" => "Löschen",
+"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",
+"SSL root certificates" => "SSL-Root-Zertifikate",
+"Import Root Certificate" => "Root-Zertifikate importieren"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_external/l10n/en_GB.php b/apps/files_external/l10n/en_GB.php
new file mode 100644
index 0000000000..8adca794dd
--- /dev/null
+++ b/apps/files_external/l10n/en_GB.php
@@ -0,0 +1,28 @@
+<?php
+$TRANSLATIONS = array(
+"Access granted" => "Access granted",
+"Error configuring Dropbox storage" => "Error configuring Dropbox storage",
+"Grant access" => "Grant access",
+"Please provide a valid Dropbox app key and secret." => "Please provide a valid Dropbox app key and secret.",
+"Error configuring Google Drive storage" => "Error configuring Google Drive storage",
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it.",
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it.",
+"<b>Warning:</b> The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "<b>Warning:</b> The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it.",
+"External Storage" => "External Storage",
+"Folder name" => "Folder name",
+"External storage" => "External storage",
+"Configuration" => "Configuration",
+"Options" => "Options",
+"Applicable" => "Applicable",
+"Add storage" => "Add storage",
+"None set" => "None set",
+"All Users" => "All Users",
+"Groups" => "Groups",
+"Users" => "Users",
+"Delete" => "Delete",
+"Enable User External Storage" => "Enable User External Storage",
+"Allow users to mount their own external storage" => "Allow users to mount their own external storage",
+"SSL root certificates" => "SSL root certificates",
+"Import Root Certificate" => "Import Root Certificate"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_external/l10n/pa.php b/apps/files_external/l10n/pa.php
new file mode 100644
index 0000000000..d633784f5c
--- /dev/null
+++ b/apps/files_external/l10n/pa.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"Groups" => "ਗਰੁੱਪ",
+"Delete" => "ਹਟਾਓ"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_sharing/l10n/de_CH.php b/apps/files_sharing/l10n/de_CH.php
new file mode 100644
index 0000000000..1bd24f9d9c
--- /dev/null
+++ b/apps/files_sharing/l10n/de_CH.php
@@ -0,0 +1,19 @@
+<?php
+$TRANSLATIONS = array(
+"The password is wrong. Try again." => "Das Passwort ist falsch. Bitte versuchen Sie es erneut.",
+"Password" => "Passwort",
+"Submit" => "Bestätigen",
+"Sorry, this link doesn’t seem to work anymore." => "Entschuldigung, dieser Link scheint nicht mehr zu funktionieren.",
+"Reasons might be:" => "Gründe könnten sein:",
+"the item was removed" => "Das Element wurde entfernt",
+"the link expired" => "Der Link ist abgelaufen",
+"sharing is disabled" => "Teilen ist deaktiviert",
+"For more info, please ask the person who sent this link." => "Für mehr Informationen, fragen Sie bitte die Person, die Ihnen diesen Link geschickt hat.",
+"%s shared the folder %s with you" => "%s hat den Ordner %s mit Ihnen geteilt",
+"%s shared the file %s with you" => "%s hat die Datei %s mit Ihnen geteilt",
+"Download" => "Herunterladen",
+"Upload" => "Hochladen",
+"Cancel upload" => "Upload abbrechen",
+"No preview available for" => "Es ist keine Vorschau verfügbar für"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_sharing/l10n/en_GB.php b/apps/files_sharing/l10n/en_GB.php
new file mode 100644
index 0000000000..337c108651
--- /dev/null
+++ b/apps/files_sharing/l10n/en_GB.php
@@ -0,0 +1,19 @@
+<?php
+$TRANSLATIONS = array(
+"The password is wrong. Try again." => "The password is wrong. Try again.",
+"Password" => "Password",
+"Submit" => "Submit",
+"Sorry, this link doesn’t seem to work anymore." => "Sorry, this link doesn’t seem to work anymore.",
+"Reasons might be:" => "Reasons might be:",
+"the item was removed" => "the item was removed",
+"the link expired" => "the link expired",
+"sharing is disabled" => "sharing is disabled",
+"For more info, please ask the person who sent this link." => "For more info, please ask the person who sent this link.",
+"%s shared the folder %s with you" => "%s shared the folder %s with you",
+"%s shared the file %s with you" => "%s shared the file %s with you",
+"Download" => "Download",
+"Upload" => "Upload",
+"Cancel upload" => "Cancel upload",
+"No preview available for" => "No preview available for"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_sharing/l10n/hi.php b/apps/files_sharing/l10n/hi.php
index 74a2c32043..63a5d528f3 100644
--- a/apps/files_sharing/l10n/hi.php
+++ b/apps/files_sharing/l10n/hi.php
@@ -1,5 +1,6 @@
 <?php
 $TRANSLATIONS = array(
-"Password" => "पासवर्ड"
+"Password" => "पासवर्ड",
+"Upload" => "अपलोड "
 );
 $PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_sharing/l10n/pa.php b/apps/files_sharing/l10n/pa.php
new file mode 100644
index 0000000000..6c14eda59d
--- /dev/null
+++ b/apps/files_sharing/l10n/pa.php
@@ -0,0 +1,8 @@
+<?php
+$TRANSLATIONS = array(
+"Password" => "ਪਾਸਵਰ",
+"Download" => "ਡਾਊਨਲੋਡ",
+"Upload" => "ਅੱਪਲੋਡ",
+"Cancel upload" => "ਅੱਪਲੋਡ ਰੱਦ ਕਰੋ"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/ach.php b/apps/files_trashbin/l10n/ach.php
new file mode 100644
index 0000000000..5569f410cc
--- /dev/null
+++ b/apps/files_trashbin/l10n/ach.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n > 1);";
diff --git a/apps/files_trashbin/l10n/af_ZA.php b/apps/files_trashbin/l10n/af_ZA.php
new file mode 100644
index 0000000000..0acad00e8b
--- /dev/null
+++ b/apps/files_trashbin/l10n/af_ZA.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/be.php b/apps/files_trashbin/l10n/be.php
new file mode 100644
index 0000000000..50df7ff5a9
--- /dev/null
+++ b/apps/files_trashbin/l10n/be.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("","","",""),
+"_%n file_::_%n files_" => array("","","","")
+);
+$PLURAL_FORMS = "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/files_trashbin/l10n/bs.php b/apps/files_trashbin/l10n/bs.php
new file mode 100644
index 0000000000..af7033bd18
--- /dev/null
+++ b/apps/files_trashbin/l10n/bs.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"Name" => "Ime",
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","","")
+);
+$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/files_trashbin/l10n/de_AT.php b/apps/files_trashbin/l10n/de_AT.php
new file mode 100644
index 0000000000..0acad00e8b
--- /dev/null
+++ b/apps/files_trashbin/l10n/de_AT.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/de_CH.php b/apps/files_trashbin/l10n/de_CH.php
new file mode 100644
index 0000000000..92290a0de5
--- /dev/null
+++ b/apps/files_trashbin/l10n/de_CH.php
@@ -0,0 +1,19 @@
+<?php
+$TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "Konnte %s nicht dauerhaft löschen",
+"Couldn't restore %s" => "Konnte %s nicht wiederherstellen",
+"perform restore operation" => "Wiederherstellung ausführen",
+"Error" => "Fehler",
+"delete file permanently" => "Datei dauerhaft löschen",
+"Delete permanently" => "Endgültig löschen",
+"Name" => "Name",
+"Deleted" => "Gelöscht",
+"_%n folder_::_%n folders_" => array("%n Ordner","%n Ordner"),
+"_%n file_::_%n files_" => array("%n Datei","%n Dateien"),
+"restored" => "Wiederhergestellt",
+"Nothing in here. Your trash bin is empty!" => "Nichts zu löschen, Ihr Papierkorb ist leer!",
+"Restore" => "Wiederherstellen",
+"Delete" => "Löschen",
+"Deleted Files" => "Gelöschte Dateien"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/en@pirate.php b/apps/files_trashbin/l10n/en@pirate.php
new file mode 100644
index 0000000000..0acad00e8b
--- /dev/null
+++ b/apps/files_trashbin/l10n/en@pirate.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/en_GB.php b/apps/files_trashbin/l10n/en_GB.php
new file mode 100644
index 0000000000..bcfcfc8624
--- /dev/null
+++ b/apps/files_trashbin/l10n/en_GB.php
@@ -0,0 +1,19 @@
+<?php
+$TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "Couldn't delete %s permanently",
+"Couldn't restore %s" => "Couldn't restore %s",
+"perform restore operation" => "perform restore operation",
+"Error" => "Error",
+"delete file permanently" => "delete file permanently",
+"Delete permanently" => "Delete permanently",
+"Name" => "Name",
+"Deleted" => "Deleted",
+"_%n folder_::_%n folders_" => array("","%n folders"),
+"_%n file_::_%n files_" => array("","%n files"),
+"restored" => "restored",
+"Nothing in here. Your trash bin is empty!" => "Nothing in here. Your recycle bin is empty!",
+"Restore" => "Restore",
+"Delete" => "Delete",
+"Deleted Files" => "Deleted Files"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/es_MX.php b/apps/files_trashbin/l10n/es_MX.php
new file mode 100644
index 0000000000..0acad00e8b
--- /dev/null
+++ b/apps/files_trashbin/l10n/es_MX.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/hi.php b/apps/files_trashbin/l10n/hi.php
new file mode 100644
index 0000000000..71711218b1
--- /dev/null
+++ b/apps/files_trashbin/l10n/hi.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"Error" => "त्रुटि",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/ka.php b/apps/files_trashbin/l10n/ka.php
new file mode 100644
index 0000000000..70f10d7c0b
--- /dev/null
+++ b/apps/files_trashbin/l10n/ka.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array("")
+);
+$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_trashbin/l10n/km.php b/apps/files_trashbin/l10n/km.php
new file mode 100644
index 0000000000..70f10d7c0b
--- /dev/null
+++ b/apps/files_trashbin/l10n/km.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array("")
+);
+$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_trashbin/l10n/kn.php b/apps/files_trashbin/l10n/kn.php
new file mode 100644
index 0000000000..70f10d7c0b
--- /dev/null
+++ b/apps/files_trashbin/l10n/kn.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array("")
+);
+$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_trashbin/l10n/ml_IN.php b/apps/files_trashbin/l10n/ml_IN.php
new file mode 100644
index 0000000000..0acad00e8b
--- /dev/null
+++ b/apps/files_trashbin/l10n/ml_IN.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/my_MM.php b/apps/files_trashbin/l10n/my_MM.php
new file mode 100644
index 0000000000..70f10d7c0b
--- /dev/null
+++ b/apps/files_trashbin/l10n/my_MM.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array("")
+);
+$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_trashbin/l10n/ne.php b/apps/files_trashbin/l10n/ne.php
new file mode 100644
index 0000000000..0acad00e8b
--- /dev/null
+++ b/apps/files_trashbin/l10n/ne.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/nqo.php b/apps/files_trashbin/l10n/nqo.php
new file mode 100644
index 0000000000..70f10d7c0b
--- /dev/null
+++ b/apps/files_trashbin/l10n/nqo.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array("")
+);
+$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_trashbin/l10n/pa.php b/apps/files_trashbin/l10n/pa.php
new file mode 100644
index 0000000000..e53707fd70
--- /dev/null
+++ b/apps/files_trashbin/l10n/pa.php
@@ -0,0 +1,8 @@
+<?php
+$TRANSLATIONS = array(
+"Error" => "ਗਲਤੀ",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"Delete" => "ਹਟਾਓ"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/sk.php b/apps/files_trashbin/l10n/sk.php
new file mode 100644
index 0000000000..94aaf9b3a9
--- /dev/null
+++ b/apps/files_trashbin/l10n/sk.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","","")
+);
+$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/files_trashbin/l10n/sw_KE.php b/apps/files_trashbin/l10n/sw_KE.php
new file mode 100644
index 0000000000..0acad00e8b
--- /dev/null
+++ b/apps/files_trashbin/l10n/sw_KE.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_versions/l10n/cy_GB.php b/apps/files_versions/l10n/cy_GB.php
new file mode 100644
index 0000000000..fa35dfd521
--- /dev/null
+++ b/apps/files_versions/l10n/cy_GB.php
@@ -0,0 +1,5 @@
+<?php
+$TRANSLATIONS = array(
+"Restore" => "Adfer"
+);
+$PLURAL_FORMS = "nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;";
diff --git a/apps/files_versions/l10n/de_CH.php b/apps/files_versions/l10n/de_CH.php
new file mode 100644
index 0000000000..c8b45eee50
--- /dev/null
+++ b/apps/files_versions/l10n/de_CH.php
@@ -0,0 +1,10 @@
+<?php
+$TRANSLATIONS = array(
+"Could not revert: %s" => "Konnte %s nicht zurücksetzen",
+"Versions" => "Versionen",
+"Failed to revert {file} to revision {timestamp}." => "Konnte {file} der Revision {timestamp} nicht rückgänging machen.",
+"More versions..." => "Mehrere Versionen...",
+"No other versions available" => "Keine anderen Versionen verfügbar",
+"Restore" => "Wiederherstellen"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_versions/l10n/en_GB.php b/apps/files_versions/l10n/en_GB.php
new file mode 100644
index 0000000000..af22b8fb0b
--- /dev/null
+++ b/apps/files_versions/l10n/en_GB.php
@@ -0,0 +1,10 @@
+<?php
+$TRANSLATIONS = array(
+"Could not revert: %s" => "Could not revert: %s",
+"Versions" => "Versions",
+"Failed to revert {file} to revision {timestamp}." => "Failed to revert {file} to revision {timestamp}.",
+"More versions..." => "More versions...",
+"No other versions available" => "No other versions available",
+"Restore" => "Restore"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_versions/l10n/sq.php b/apps/files_versions/l10n/sq.php
new file mode 100644
index 0000000000..5a7a23a217
--- /dev/null
+++ b/apps/files_versions/l10n/sq.php
@@ -0,0 +1,5 @@
+<?php
+$TRANSLATIONS = array(
+"Restore" => "Rivendos"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_ldap/l10n/de_CH.php b/apps/user_ldap/l10n/de_CH.php
new file mode 100644
index 0000000000..df9175e73b
--- /dev/null
+++ b/apps/user_ldap/l10n/de_CH.php
@@ -0,0 +1,87 @@
+<?php
+$TRANSLATIONS = array(
+"Failed to clear the mappings." => "Löschen der Zuordnung fehlgeschlagen.",
+"Failed to delete the server configuration" => "Löschen der Serverkonfiguration fehlgeschlagen",
+"The configuration is valid and the connection could be established!" => "Die Konfiguration ist gültig und die Verbindung konnte hergestellt werden!",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Die Konfiguration ist gültig aber die Verbindung ist fehlgeschlagen. Bitte überprüfen Sie die Servereinstellungen und die Anmeldeinformationen.",
+"The configuration is invalid. Please look in the ownCloud log for further details." => "Die Konfiguration ist ungültig, sehen Sie für weitere Details bitte im ownCloud Log nach",
+"Deletion failed" => "Löschen fehlgeschlagen",
+"Take over settings from recent server configuration?" => "Einstellungen von letzter Konfiguration übernehmen?",
+"Keep settings?" => "Einstellungen beibehalten?",
+"Cannot add server configuration" => "Das Hinzufügen der Serverkonfiguration schlug fehl",
+"mappings cleared" => "Zuordnungen gelöscht",
+"Success" => "Erfolg",
+"Error" => "Fehler",
+"Connection test succeeded" => "Verbindungstest erfolgreich",
+"Connection test failed" => "Verbindungstest fehlgeschlagen",
+"Do you really want to delete the current Server Configuration?" => "Möchten Sie die aktuelle Serverkonfiguration wirklich löschen?",
+"Confirm Deletion" => "Löschung bestätigen",
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." => "<b>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann demzufolge zu unerwarteten Verhalten kommen. Bitten Sie Ihren Systemadministator eine der beiden Anwendungen zu deaktivieren.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitten Sie Ihren Systemadministrator das Modul zu installieren.",
+"Server configuration" => "Serverkonfiguration",
+"Add Server Configuration" => "Serverkonfiguration hinzufügen",
+"Host" => "Host",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Sie können das Protokoll auslassen, ausser wenn Sie SSL benötigen. Beginnen Sie dann mit ldaps://",
+"Base DN" => "Basis-DN",
+"One Base DN per line" => "Ein Basis-DN pro Zeile",
+"You can specify Base DN for users and groups in the Advanced tab" => "Sie können Basis-DN für Benutzer und Gruppen in dem «Erweitert»-Reiter konfigurieren",
+"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 einen anonymen Zugriff lassen Sie DN und Passwort leer.",
+"Password" => "Passwort",
+"For anonymous access, leave DN and Password empty." => "Lassen Sie die Felder DN und Passwort für einen 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. Example: \"uid=%%uid\"" => "Bestimmt den Filter, welcher bei einer Anmeldung angewandt wird. %%uid ersetzt den Benutzernamen bei der Anmeldung. Beispiel: \"uid=%%uid\"",
+"User List Filter" => "Benutzer-Filter-Liste",
+"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "Definiert den Filter für die Wiederherstellung eines Benutzers (kein Platzhalter). Beispiel: \"objectClass=person\"",
+"Group Filter" => "Gruppen-Filter",
+"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "Definiert den Filter für die Wiederherstellung einer Gruppe (kein Platzhalter). Beispiel: \"objectClass=posixGroup\"",
+"Connection Settings" => "Verbindungseinstellungen",
+"Configuration Active" => "Konfiguration aktiv",
+"When unchecked, this configuration will be skipped." => "Wenn nicht angehakt, wird diese Konfiguration übersprungen.",
+"Port" => "Port",
+"Backup (Replica) Host" => "Backup Host (Kopie)",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Geben Sie einen optionalen Backup Host an. Es muss sich um eine Kopie des Haupt LDAP/AD Servers handeln.",
+"Backup (Replica) Port" => "Backup Port",
+"Disable Main Server" => "Hauptserver deaktivieren",
+"Only connect to the replica server." => "Nur zum Replikat-Server verbinden.",
+"Use TLS" => "Nutze TLS",
+"Do not use it additionally for LDAPS connections, it will fail." => "Benutzen Sie es nicht in Verbindung mit LDAPS Verbindungen, es wird fehlschlagen.",
+"Case insensitve LDAP server (Windows)" => "LDAP-Server (Windows: Gross- und Kleinschreibung bleibt unbeachtet)",
+"Turn off SSL certificate validation." => "Schalten Sie die SSL-Zertifikatsprüfung aus.",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Nur für Testzwecke geeignet, sollte Standardmäßig nicht verwendet werden. Falls die Verbindung nur mit dieser Option funktioniert, importieren Sie das SSL-Zertifikat des LDAP-Servers in Ihren %s Server.",
+"Cache Time-To-Live" => "Speichere Time-To-Live zwischen",
+"in seconds. A change empties the cache." => "in Sekunden. Eine Änderung leert den Cache.",
+"Directory Settings" => "Ordnereinstellungen",
+"User Display Name Field" => "Feld für den Anzeigenamen des Benutzers",
+"The LDAP attribute to use to generate the user's display name." => "Das LDAP-Attribut zur Generierung des Anzeigenamens des Benutzers.",
+"Base User Tree" => "Basis-Benutzerbaum",
+"One User Base DN per line" => "Ein Benutzer Basis-DN pro Zeile",
+"User Search Attributes" => "Benutzersucheigenschaften",
+"Optional; one attribute per line" => "Optional; ein Attribut pro Zeile",
+"Group Display Name Field" => "Feld für den Anzeigenamen der Gruppe",
+"The LDAP attribute to use to generate the groups's display name." => "Das LDAP-Attribut zur Generierung des Anzeigenamens der Gruppen.",
+"Base Group Tree" => "Basis-Gruppenbaum",
+"One Group Base DN per line" => "Ein Gruppen Basis-DN pro Zeile",
+"Group Search Attributes" => "Gruppensucheigenschaften",
+"Group-Member association" => "Assoziation zwischen Gruppe und Benutzer",
+"Special Attributes" => "Spezielle Eigenschaften",
+"Quota Field" => "Kontingent-Feld",
+"Quota Default" => "Standard-Kontingent",
+"in bytes" => "in Bytes",
+"Email Field" => "E-Mail-Feld",
+"User Home Folder Naming Rule" => "Benennungsregel für das Home-Verzeichnis des Benutzers",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfalls tragen Sie bitte ein LDAP/AD-Attribut ein.",
+"Internal Username" => "Interner Benutzername",
+"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ].  Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." => "Standardmässig wird der interne Benutzername mittels des UUID-Attributes erzeugt. Dies stellt sicher, dass der Benutzername einzigartig ist und keinerlei Zeichen konvertiert werden müssen. Der interne Benutzername unterliegt Beschränkungen, die nur die nachfolgenden Zeichen erlauben: [ a-zA-Z0-9_.@- ]. Andere Zeichen werden mittels ihrer korrespondierenden Zeichen ersetzt oder einfach ausgelassen. Bei Kollisionen wird ein Zähler hinzugefügt bzw. der Zähler um einen Wert erhöht. Der interne Benutzername wird benutzt, um einen Benutzer intern zu identifizieren. Es ist ebenso der standardmässig vorausgewählte Namen des Heimatverzeichnisses. Es ist auch ein Teil der Remote-URLs - zum Beispiel für alle *DAV-Dienste. Mit dieser Einstellung kann das Standardverhalten überschrieben werden. Um ein ähnliches Verhalten wie vor ownCloud 5 zu erzielen, fügen Sie das anzuzeigende Attribut des Benutzernamens in das nachfolgende Feld ein. Lassen Sie dies hingegen für das Standardverhalten leer. Die Änderungen werden sich nur auf neu gemappte (hinzugefügte) LDAP-Benutzer auswirken.",
+"Internal Username Attribute:" => "Interne Eigenschaften des Benutzers:",
+"Override UUID detection" => "UUID-Erkennung überschreiben",
+"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." => "Standardmässig wird die UUID-Eigenschaft automatisch erkannt. Die UUID-Eigenschaft wird genutzt, um einen LDAP-Benutzer und Gruppen einwandfrei zu identifizieren. Ausserdem wird der interne Benutzername erzeugt, der auf Eigenschaften der UUID basiert, wenn es oben nicht anders angegeben wurde. Sie müssen allerdings sicherstellen, dass Ihre gewählten Eigenschaften zur Identifikation der Benutzer und Gruppen eindeutig sind und zugeordnet werden können. Lassen Sie es frei, um es beim Standardverhalten zu belassen. Änderungen wirken sich nur auf neu gemappte (hinzugefügte) LDAP-Benutzer und -Gruppen aus.",
+"UUID Attribute:" => "UUID-Attribut:",
+"Username-LDAP User Mapping" => "LDAP-Benutzernamenzuordnung",
+"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." => "Die Benutzernamen werden genutzt, um (Meta)Daten zuzuordnen und zu speichern. Um Benutzer eindeutig und präzise zu identifizieren, hat jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung (mappen) von Benutzernamen zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzernamens zugeordnet. Zusätzlich wird der DN zwischengespeichert, um die Interaktion mit dem LDAP zu minimieren, was aber nicht der Identifikation dient. Ändert sich der DN, werden die Änderungen durch gefunden. Der interne Benutzername, wird in überall verwendet. Werden die Zuordnungen gelöscht, bleiben überall Reste zurück. Die Löschung der Zuordnungen kann nicht in der Konfiguration vorgenommen werden, beeinflusst aber die LDAP-Konfiguration! Löschen Sie niemals die Zuordnungen in einer produktiven Umgebung. Löschen Sie die Zuordnungen nur in einer Test- oder Experimentierumgebung.",
+"Clear Username-LDAP User Mapping" => "Lösche LDAP-Benutzernamenzuordnung",
+"Clear Groupname-LDAP Group Mapping" => "Lösche LDAP-Gruppennamenzuordnung",
+"Test Configuration" => "Testkonfiguration",
+"Help" => "Hilfe"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_ldap/l10n/en_GB.php b/apps/user_ldap/l10n/en_GB.php
new file mode 100644
index 0000000000..d613be3486
--- /dev/null
+++ b/apps/user_ldap/l10n/en_GB.php
@@ -0,0 +1,87 @@
+<?php
+$TRANSLATIONS = array(
+"Failed to clear the mappings." => "Failed to clear the mappings.",
+"Failed to delete the server configuration" => "Failed to delete the server configuration",
+"The configuration is valid and the connection could be established!" => "The configuration is valid and the connection could be established!",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "The configuration is valid, but the Bind failed. Please check the server settings and credentials.",
+"The configuration is invalid. Please look in the ownCloud log for further details." => "The configuration is invalid. Please look in the ownCloud log for further details.",
+"Deletion failed" => "Deletion failed",
+"Take over settings from recent server configuration?" => "Take over settings from recent server configuration?",
+"Keep settings?" => "Keep settings?",
+"Cannot add server configuration" => "Cannot add server configuration",
+"mappings cleared" => "mappings cleared",
+"Success" => "Success",
+"Error" => "Error",
+"Connection test succeeded" => "Connection test succeeded",
+"Connection test failed" => "Connection test failed",
+"Do you really want to delete the current Server Configuration?" => "Do you really want to delete the current Server Configuration?",
+"Confirm Deletion" => "Confirm Deletion",
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." => "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.",
+"Server configuration" => "Server configuration",
+"Add Server Configuration" => "Add Server Configuration",
+"Host" => "Host",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "You can omit the protocol, except you require SSL. Then start with ldaps://",
+"Base DN" => "Base DN",
+"One Base DN per line" => "One Base DN per line",
+"You can specify Base DN for users and groups in the Advanced tab" => "You can specify Base DN for users and groups in the Advanced tab",
+"User DN" => "User DN",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "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.",
+"Password" => "Password",
+"For anonymous access, leave DN and Password empty." => "For anonymous access, leave DN and Password empty.",
+"User Login Filter" => "User Login Filter",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"",
+"User List Filter" => "User List Filter",
+"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"",
+"Group Filter" => "Group Filter",
+"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"",
+"Connection Settings" => "Connection Settings",
+"Configuration Active" => "Configuration Active",
+"When unchecked, this configuration will be skipped." => "When unchecked, this configuration will be skipped.",
+"Port" => "Port",
+"Backup (Replica) Host" => "Backup (Replica) Host",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Give an optional backup host. It must be a replica of the main LDAP/AD server.",
+"Backup (Replica) Port" => "Backup (Replica) Port",
+"Disable Main Server" => "Disable Main Server",
+"Only connect to the replica server." => "Only connect to the replica server.",
+"Use TLS" => "Use TLS",
+"Do not use it additionally for LDAPS connections, it will fail." => "Do not use it additionally for LDAPS connections, it will fail.",
+"Case insensitve LDAP server (Windows)" => "Case insensitve LDAP server (Windows)",
+"Turn off SSL certificate validation." => "Turn off SSL certificate validation.",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server.",
+"Cache Time-To-Live" => "Cache Time-To-Live",
+"in seconds. A change empties the cache." => "in seconds. A change empties the cache.",
+"Directory Settings" => "Directory Settings",
+"User Display Name Field" => "User Display Name Field",
+"The LDAP attribute to use to generate the user's display name." => "The LDAP attribute to use to generate the user's display name.",
+"Base User Tree" => "Base User Tree",
+"One User Base DN per line" => "One User Base DN per line",
+"User Search Attributes" => "User Search Attributes",
+"Optional; one attribute per line" => "Optional; one attribute per line",
+"Group Display Name Field" => "Group Display Name Field",
+"The LDAP attribute to use to generate the groups's display name." => "The LDAP attribute to use to generate the group's display name.",
+"Base Group Tree" => "Base Group Tree",
+"One Group Base DN per line" => "One Group Base DN per line",
+"Group Search Attributes" => "Group Search Attributes",
+"Group-Member association" => "Group-Member association",
+"Special Attributes" => "Special Attributes",
+"Quota Field" => "Quota Field",
+"Quota Default" => "Quota Default",
+"in bytes" => "in bytes",
+"Email Field" => "Email Field",
+"User Home Folder Naming Rule" => "User Home Folder Naming Rule",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute.",
+"Internal Username" => "Internal Username",
+"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ].  Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." => "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ].  Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behaviour as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behaviour. Changes will have effect only on newly mapped (added) LDAP users.",
+"Internal Username Attribute:" => "Internal Username Attribute:",
+"Override UUID detection" => "Override UUID detection",
+"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." => "By default, the UUID attribute is automatically detected. The UUID attribute is used to unambiguously identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behaviour. Changes will have effect only on newly mapped (added) LDAP users and groups.",
+"UUID Attribute:" => "UUID Attribute:",
+"Username-LDAP User Mapping" => "Username-LDAP User Mapping",
+"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." => "Usernames are used to store and assign (meta) data. In order to precisely identify and recognise users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage.",
+"Clear Username-LDAP User Mapping" => "Clear Username-LDAP User Mapping",
+"Clear Groupname-LDAP Group Mapping" => "Clear Groupname-LDAP Group Mapping",
+"Test Configuration" => "Test Configuration",
+"Help" => "Help"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_ldap/l10n/lt_LT.php b/apps/user_ldap/l10n/lt_LT.php
index 2c3b938fcf..f052201682 100644
--- a/apps/user_ldap/l10n/lt_LT.php
+++ b/apps/user_ldap/l10n/lt_LT.php
@@ -1,13 +1,57 @@
 <?php
 $TRANSLATIONS = array(
+"Failed to clear the mappings." => "Nepavyko išvalyti sąsajų.",
+"Failed to delete the server configuration" => "Nepavyko pašalinti serverio konfigūracijos",
 "Deletion failed" => "Ištrinti nepavyko",
+"Keep settings?" => "Išlaikyti nustatymus?",
+"mappings cleared" => "susiejimai išvalyti",
+"Success" => "Sėkmingai",
 "Error" => "Klaida",
+"Connection test succeeded" => "Ryšio patikrinimas pavyko",
+"Connection test failed" => "Ryšio patikrinimas nepavyko",
+"Do you really want to delete the current Server Configuration?" => "Ar tikrai norite ištrinti dabartinę serverio konfigūraciją?",
+"Confirm Deletion" => "Patvirtinkite trynimą",
+"Server configuration" => "Serverio konfigūravimas",
+"Add Server Configuration" => "Pridėti serverio konfigūraciją",
 "Host" => "Mazgas",
+"Base DN" => "Bazinis DN",
+"One Base DN per line" => "Vienas bazinis DN eilutėje",
+"User DN" => "Naudotojas DN",
 "Password" => "Slaptažodis",
+"For anonymous access, leave DN and Password empty." => "Anoniminiam prisijungimui, palikite DN ir Slaptažodis laukus tuščius.",
+"User Login Filter" => "Naudotojo prisijungimo filtras",
+"User List Filter" => "Naudotojo sąrašo filtras",
 "Group Filter" => "Grupės filtras",
+"Connection Settings" => "Ryšio nustatymai",
+"Configuration Active" => "Konfigūracija aktyvi",
+"When unchecked, this configuration will be skipped." => "Kai nepažymėta, ši konfigūracija bus praleista.",
 "Port" => "Prievadas",
+"Backup (Replica) Host" => "Atsarginės kopijos (Replica) mazgas",
+"Backup (Replica) Port" => "Atsarginės kopijos (Replica) prievadas",
+"Disable Main Server" => "Išjungti pagrindinį serverį",
+"Only connect to the replica server." => "Tik prisijungti prie reprodukcinio (replica) serverio.",
 "Use TLS" => "Naudoti TLS",
 "Turn off SSL certificate validation." => "Išjungti SSL sertifikato tikrinimą.",
+"Directory Settings" => "Katalogo nustatymai",
+"Base User Tree" => "Bazinis naudotojo medis",
+"User Search Attributes" => "Naudotojo paieškos atributai",
+"Base Group Tree" => "Bazinis grupės medis",
+"Group Search Attributes" => "Grupės paieškos atributai",
+"Group-Member association" => "Grupės-Nario sąsaja",
+"Special Attributes" => "Specialūs atributai",
+"Quota Field" => "Kvotos laukas",
+"Quota Default" => "Numatyta kvota",
+"in bytes" => "baitais",
+"Email Field" => "El. pašto laukas",
+"User Home Folder Naming Rule" => "Naudotojo namų aplanko pavadinimo taisyklė",
+"Internal Username" => "Vidinis naudotojo vardas",
+"Internal Username Attribute:" => "Vidinis naudotojo vardo atributas:",
+"Override UUID detection" => "Perrašyti UUID aptikimą",
+"UUID Attribute:" => "UUID atributas:",
+"Username-LDAP User Mapping" => "Naudotojo vardo - LDAP naudotojo sąsaja",
+"Clear Username-LDAP User Mapping" => "Išvalyti naudotojo vardo - LDAP naudotojo sąsają",
+"Clear Groupname-LDAP Group Mapping" => "Išvalyti grupės pavadinimo - LDAP naudotojo sąsają",
+"Test Configuration" => "Bandyti konfigūraciją",
 "Help" => "Pagalba"
 );
 $PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/user_ldap/l10n/pa.php b/apps/user_ldap/l10n/pa.php
new file mode 100644
index 0000000000..ac486a8ca2
--- /dev/null
+++ b/apps/user_ldap/l10n/pa.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"Error" => "ਗਲਤੀ",
+"Password" => "ਪਾਸਵਰ"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_webdavauth/l10n/de_CH.php b/apps/user_webdavauth/l10n/de_CH.php
new file mode 100644
index 0000000000..2c31957d25
--- /dev/null
+++ b/apps/user_webdavauth/l10n/de_CH.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"WebDAV Authentication" => "WebDAV-Authentifizierung",
+"Address: " => "Adresse:",
+"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "Die Benutzerdaten werden an diese Adresse gesendet. Dieses Plugin prüft die Antwort und wird die HTTP-Statuscodes 401 und 403 als ungültige Daten interpretieren und alle anderen Antworten als gültige Daten."
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_webdavauth/l10n/en_GB.php b/apps/user_webdavauth/l10n/en_GB.php
new file mode 100644
index 0000000000..c098208337
--- /dev/null
+++ b/apps/user_webdavauth/l10n/en_GB.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"WebDAV Authentication" => "WebDAV Authentication",
+"Address: " => "Address: ",
+"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials."
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_webdavauth/l10n/fa.php b/apps/user_webdavauth/l10n/fa.php
new file mode 100644
index 0000000000..ad061226d4
--- /dev/null
+++ b/apps/user_webdavauth/l10n/fa.php
@@ -0,0 +1,5 @@
+<?php
+$TRANSLATIONS = array(
+"WebDAV Authentication" => "اعتبار سنجی WebDAV "
+);
+$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/core/l10n/ca.php b/core/l10n/ca.php
index c86af43ada..bc1960053a 100644
--- a/core/l10n/ca.php
+++ b/core/l10n/ca.php
@@ -16,6 +16,11 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Error en afegir %s als preferits.",
 "No categories selected for deletion." => "No hi ha categories per eliminar.",
 "Error removing %s from favorites." => "Error en eliminar %s dels preferits.",
+"No image or file provided" => "No s'han proporcionat imatges o fitxers",
+"Unknown filetype" => "Tipus de fitxer desconegut",
+"Invalid image" => "Imatge no vàlida",
+"No temporary profile picture available, try again" => "No hi ha imatge temporal de perfil disponible, torneu a intentar-ho",
+"No crop data provided" => "No heu proporcionat dades del retall",
 "Sunday" => "Diumenge",
 "Monday" => "Dilluns",
 "Tuesday" => "Dimarts",
@@ -48,9 +53,11 @@ $TRANSLATIONS = array(
 "last year" => "l'any passat",
 "years ago" => "anys enrere",
 "Choose" => "Escull",
+"Error loading file picker template: {error}" => "Error en carregar la plantilla de càrrega de fitxers: {error}",
 "Yes" => "Sí",
 "No" => "No",
 "Ok" => "D'acord",
+"Error loading message template: {error}" => "Error en carregar la plantilla de missatge: {error}",
 "The object type is not specified." => "No s'ha especificat el tipus d'objecte.",
 "Error" => "Error",
 "The app name is not specified." => "No s'ha especificat el nom de l'aplicació.",
diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php
index be7af77001..aa5fd620c3 100644
--- a/core/l10n/cs_CZ.php
+++ b/core/l10n/cs_CZ.php
@@ -16,6 +16,11 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Chyba při přidávání %s k oblíbeným.",
 "No categories selected for deletion." => "Žádné kategorie nebyly vybrány ke smazání.",
 "Error removing %s from favorites." => "Chyba při odebírání %s z oblíbených.",
+"No image or file provided" => "Soubor nebo obrázek nebyl zadán",
+"Unknown filetype" => "Neznámý typ souboru",
+"Invalid image" => "Chybný obrázek",
+"No temporary profile picture available, try again" => "Dočasný profilový obrázek není k dispozici, zkuste to znovu",
+"No crop data provided" => "Nebyla poskytnuta data pro oříznutí obrázku",
 "Sunday" => "Neděle",
 "Monday" => "Pondělí",
 "Tuesday" => "Úterý",
@@ -48,9 +53,11 @@ $TRANSLATIONS = array(
 "last year" => "minulý rok",
 "years ago" => "před lety",
 "Choose" => "Vybrat",
+"Error loading file picker template: {error}" => "Chyba při nahrávání šablony výběru souborů: {error}",
 "Yes" => "Ano",
 "No" => "Ne",
 "Ok" => "Ok",
+"Error loading message template: {error}" => "Chyba při nahrávání šablony zprávy: {error}",
 "The object type is not specified." => "Není určen typ objektu.",
 "Error" => "Chyba",
 "The app name is not specified." => "Není určen název aplikace.",
diff --git a/core/l10n/de.php b/core/l10n/de.php
index f248734d01..934e227f91 100644
--- a/core/l10n/de.php
+++ b/core/l10n/de.php
@@ -16,6 +16,11 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Fehler beim Hinzufügen von %s zu den Favoriten.",
 "No categories selected for deletion." => "Es wurde keine Kategorien zum Löschen ausgewählt.",
 "Error removing %s from favorites." => "Fehler beim Entfernen von %s von den Favoriten.",
+"No image or file provided" => "Kein Bild oder Datei zur Verfügung gestellt",
+"Unknown filetype" => "Unbekannter Dateityp",
+"Invalid image" => "Ungültiges Bild",
+"No temporary profile picture available, try again" => "Kein temporäres Profilbild verfügbar, bitte versuche es nochmal",
+"No crop data provided" => "Keine Zuschnittdaten zur Verfügung gestellt",
 "Sunday" => "Sonntag",
 "Monday" => "Montag",
 "Tuesday" => "Dienstag",
@@ -48,9 +53,11 @@ $TRANSLATIONS = array(
 "last year" => "Letztes Jahr",
 "years ago" => "Vor Jahren",
 "Choose" => "Auswählen",
+"Error loading file picker template: {error}" => "Fehler beim Laden der Dateiauswahlvorlage: {error}",
 "Yes" => "Ja",
 "No" => "Nein",
 "Ok" => "OK",
+"Error loading message template: {error}" => "Fehler beim Laden der Nachrichtenvorlage: {error}",
 "The object type is not specified." => "Der Objekttyp ist nicht angegeben.",
 "Error" => "Fehler",
 "The app name is not specified." => "Der App-Name ist nicht angegeben.",
diff --git a/core/l10n/de_DE.php b/core/l10n/de_DE.php
index 4616f50c2b..652ef737b6 100644
--- a/core/l10n/de_DE.php
+++ b/core/l10n/de_DE.php
@@ -16,6 +16,11 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Fehler beim Hinzufügen von %s zu den Favoriten.",
 "No categories selected for deletion." => "Es wurden keine Kategorien zum Löschen ausgewählt.",
 "Error removing %s from favorites." => "Fehler beim Entfernen von %s von den Favoriten.",
+"No image or file provided" => "Kein Bild oder Datei zur Verfügung gestellt",
+"Unknown filetype" => "Unbekannter Dateityp",
+"Invalid image" => "Ungültiges Bild",
+"No temporary profile picture available, try again" => "Kein temporäres Profilbild verfügbar, bitte versuchen Sie es nochmal",
+"No crop data provided" => "Keine Zuschnittdaten zur Verfügung gestellt",
 "Sunday" => "Sonntag",
 "Monday" => "Montag",
 "Tuesday" => "Dienstag",
@@ -48,9 +53,11 @@ $TRANSLATIONS = array(
 "last year" => "Letztes Jahr",
 "years ago" => "Vor Jahren",
 "Choose" => "Auswählen",
+"Error loading file picker template: {error}" => "Fehler beim Laden der Dateiauswahlvorlage: {error}",
 "Yes" => "Ja",
 "No" => "Nein",
 "Ok" => "OK",
+"Error loading message template: {error}" => "Fehler beim Laden der Nachrichtenvorlage: {error}",
 "The object type is not specified." => "Der Objekttyp ist nicht angegeben.",
 "Error" => "Fehler",
 "The app name is not specified." => "Der App-Name ist nicht angegeben.",
diff --git a/core/l10n/en_GB.php b/core/l10n/en_GB.php
index 7ccdcbe532..2d588ab243 100644
--- a/core/l10n/en_GB.php
+++ b/core/l10n/en_GB.php
@@ -16,6 +16,11 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Error adding %s to favourites.",
 "No categories selected for deletion." => "No categories selected for deletion.",
 "Error removing %s from favorites." => "Error removing %s from favourites.",
+"No image or file provided" => "No image or file provided",
+"Unknown filetype" => "Unknown filetype",
+"Invalid image" => "Invalid image",
+"No temporary profile picture available, try again" => "No temporary profile picture available, try again",
+"No crop data provided" => "No crop data provided",
 "Sunday" => "Sunday",
 "Monday" => "Monday",
 "Tuesday" => "Tuesday",
@@ -48,9 +53,11 @@ $TRANSLATIONS = array(
 "last year" => "last year",
 "years ago" => "years ago",
 "Choose" => "Choose",
+"Error loading file picker template: {error}" => "Error loading file picker template: {error}",
 "Yes" => "Yes",
 "No" => "No",
 "Ok" => "OK",
+"Error loading message template: {error}" => "Error loading message template: {error}",
 "The object type is not specified." => "The object type is not specified.",
 "Error" => "Error",
 "The app name is not specified." => "The app name is not specified.",
diff --git a/core/l10n/et_EE.php b/core/l10n/et_EE.php
index 59c8e77a38..48fc5adcbb 100644
--- a/core/l10n/et_EE.php
+++ b/core/l10n/et_EE.php
@@ -16,6 +16,11 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Viga %s lisamisel lemmikutesse.",
 "No categories selected for deletion." => "Kustutamiseks pole kategooriat valitud.",
 "Error removing %s from favorites." => "Viga %s eemaldamisel lemmikutest.",
+"No image or file provided" => "Ühtegi pilti või faili ei pakutud",
+"Unknown filetype" => "Tundmatu failitüüp",
+"Invalid image" => "Vigane pilt",
+"No temporary profile picture available, try again" => "Ühtegi ajutist profiili pilti pole saadaval, proovi uuesti",
+"No crop data provided" => "Lõikeandmeid ei leitud",
 "Sunday" => "Pühapäev",
 "Monday" => "Esmaspäev",
 "Tuesday" => "Teisipäev",
@@ -48,9 +53,11 @@ $TRANSLATIONS = array(
 "last year" => "viimasel aastal",
 "years ago" => "aastat tagasi",
 "Choose" => "Vali",
+"Error loading file picker template: {error}" => "Viga faili valija malli laadimisel:  {error}",
 "Yes" => "Jah",
 "No" => "Ei",
 "Ok" => "Ok",
+"Error loading message template: {error}" => "Viga sõnumi malli laadimisel:  {error}",
 "The object type is not specified." => "Objekti tüüp pole määratletud.",
 "Error" => "Viga",
 "The app name is not specified." => "Rakenduse nimi ole määratletud.",
diff --git a/core/l10n/fi_FI.php b/core/l10n/fi_FI.php
index 25f5f466ef..cb98a67b29 100644
--- a/core/l10n/fi_FI.php
+++ b/core/l10n/fi_FI.php
@@ -14,6 +14,9 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Virhe lisätessä kohdetta %s suosikkeihin.",
 "No categories selected for deletion." => "Luokkia ei valittu poistettavaksi.",
 "Error removing %s from favorites." => "Virhe poistaessa kohdetta %s suosikeista.",
+"Unknown filetype" => "Tuntematon tiedostotyyppi",
+"Invalid image" => "Virhellinen kuva",
+"No temporary profile picture available, try again" => "Väliaikaista profiilikuvaa ei ole käytettävissä, yritä uudelleen",
 "Sunday" => "sunnuntai",
 "Monday" => "maanantai",
 "Tuesday" => "tiistai",
diff --git a/core/l10n/gl.php b/core/l10n/gl.php
index ca07e510a3..ec137a4e04 100644
--- a/core/l10n/gl.php
+++ b/core/l10n/gl.php
@@ -16,6 +16,11 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Produciuse un erro ao engadir %s aos favoritos.",
 "No categories selected for deletion." => "Non se seleccionaron categorías para eliminación.",
 "Error removing %s from favorites." => "Produciuse un erro ao eliminar %s dos favoritos.",
+"No image or file provided" => "Non forneceu ningunha imaxe ou ficheiro",
+"Unknown filetype" => "Tipo de ficheiro descoñecido",
+"Invalid image" => "Imaxe incorrecta",
+"No temporary profile picture available, try again" => "Non hai unha imaxe temporal de perfil dispoñíbel, volva tentalo",
+"No crop data provided" => "Non indicou como recortar",
 "Sunday" => "Domingo",
 "Monday" => "Luns",
 "Tuesday" => "Martes",
@@ -48,9 +53,11 @@ $TRANSLATIONS = array(
 "last year" => "último ano",
 "years ago" => "anos atrás",
 "Choose" => "Escoller",
+"Error loading file picker template: {error}" => "Produciuse un erro ao cargar o modelo do selector: {error}",
 "Yes" => "Si",
 "No" => "Non",
 "Ok" => "Aceptar",
+"Error loading message template: {error}" => "Produciuse un erro ao cargar o modelo da mensaxe: {error}",
 "The object type is not specified." => "Non se especificou o tipo de obxecto.",
 "Error" => "Erro",
 "The app name is not specified." => "Non se especificou o nome do aplicativo.",
diff --git a/core/l10n/hi.php b/core/l10n/hi.php
index 29e67f68ab..e69f2ffcf5 100644
--- a/core/l10n/hi.php
+++ b/core/l10n/hi.php
@@ -32,6 +32,7 @@ $TRANSLATIONS = array(
 "Share with" => "के साथ साझा",
 "Password" => "पासवर्ड",
 "Send" => "भेजें",
+"No people found" => "कोई व्यक्ति नहीं मिले ",
 "Sending ..." => "भेजा जा रहा है",
 "Email sent" => "ईमेल भेज दिया गया है ",
 "Use the following link to reset your password: {link}" => "आगे दिये गये लिंक का उपयोग पासवर्ड बदलने के लिये किजीये: {link}",
@@ -45,6 +46,7 @@ $TRANSLATIONS = array(
 "Help" => "सहयोग",
 "Cloud not found" => "क्लौड नहीं मिला ",
 "Add" => "डाले",
+"Security Warning" => "सुरक्षा चेतावनी ",
 "Create an <strong>admin account</strong>" => "व्यवस्थापक खाता बनाएँ",
 "Advanced" => "उन्नत",
 "Data folder" => "डाटा फोल्डर",
diff --git a/core/l10n/it.php b/core/l10n/it.php
index a8f9a6901f..72fb2756d2 100644
--- a/core/l10n/it.php
+++ b/core/l10n/it.php
@@ -16,6 +16,11 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Errore durante l'aggiunta di %s ai preferiti.",
 "No categories selected for deletion." => "Nessuna categoria selezionata per l'eliminazione.",
 "Error removing %s from favorites." => "Errore durante la rimozione di %s dai preferiti.",
+"No image or file provided" => "Non è stata fornita alcun immagine o file",
+"Unknown filetype" => "Tipo file sconosciuto",
+"Invalid image" => "Immagine non valida",
+"No temporary profile picture available, try again" => "Nessuna foto profilo temporanea disponibile, riprova",
+"No crop data provided" => "Raccolta dati non prevista",
 "Sunday" => "Domenica",
 "Monday" => "Lunedì",
 "Tuesday" => "Martedì",
@@ -48,9 +53,11 @@ $TRANSLATIONS = array(
 "last year" => "anno scorso",
 "years ago" => "anni fa",
 "Choose" => "Scegli",
+"Error loading file picker template: {error}" => "Errore durante il caricamento del modello del selettore file: {error}",
 "Yes" => "Sì",
 "No" => "No",
 "Ok" => "Ok",
+"Error loading message template: {error}" => "Errore durante il caricamento del modello di messaggio: {error}",
 "The object type is not specified." => "Il tipo di oggetto non è specificato.",
 "Error" => "Errore",
 "The app name is not specified." => "Il nome dell'applicazione non è specificato.",
diff --git a/core/l10n/ja_JP.php b/core/l10n/ja_JP.php
index 343fffd09b..2416f23c8e 100644
--- a/core/l10n/ja_JP.php
+++ b/core/l10n/ja_JP.php
@@ -16,6 +16,10 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "お気に入りに %s を追加エラー",
 "No categories selected for deletion." => "削除するカテゴリが選択されていません。",
 "Error removing %s from favorites." => "お気に入りから %s の削除エラー",
+"No image or file provided" => "画像もしくはファイルが提供されていません",
+"Unknown filetype" => "不明なファイルタイプ",
+"Invalid image" => "無効な画像",
+"No temporary profile picture available, try again" => "一時的なプロファイル用画像が利用できません。もう一度試して下さい",
 "Sunday" => "日",
 "Monday" => "月",
 "Tuesday" => "火",
@@ -48,9 +52,11 @@ $TRANSLATIONS = array(
 "last year" => "一年前",
 "years ago" => "年前",
 "Choose" => "選択",
+"Error loading file picker template: {error}" => "ファイル選択テンプレートの読み込みエラー: {error}",
 "Yes" => "はい",
 "No" => "いいえ",
 "Ok" => "OK",
+"Error loading message template: {error}" => "メッセージテンプレートの読み込みエラー: {error}",
 "The object type is not specified." => "オブジェクタイプが指定されていません。",
 "Error" => "エラー",
 "The app name is not specified." => "アプリ名がしていされていません。",
diff --git a/core/l10n/lt_LT.php b/core/l10n/lt_LT.php
index 7b5ad39b81..1fbcf89106 100644
--- a/core/l10n/lt_LT.php
+++ b/core/l10n/lt_LT.php
@@ -16,6 +16,11 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Klaida perkeliant %s į jūsų mėgstamiausius.",
 "No categories selected for deletion." => "Trynimui nepasirinkta jokia kategorija.",
 "Error removing %s from favorites." => "Klaida ištrinant %s iš jūsų mėgstamiausius.",
+"No image or file provided" => "Nenurodytas paveikslėlis ar failas",
+"Unknown filetype" => "Nežinomas failo tipas",
+"Invalid image" => "Netinkamas paveikslėlis",
+"No temporary profile picture available, try again" => "Nėra laikino profilio paveikslėlio, bandykite dar kartą",
+"No crop data provided" => "Nenurodyti apkirpimo duomenys",
 "Sunday" => "Sekmadienis",
 "Monday" => "Pirmadienis",
 "Tuesday" => "Antradienis",
@@ -48,9 +53,11 @@ $TRANSLATIONS = array(
 "last year" => "praeitais metais",
 "years ago" => "prieš metus",
 "Choose" => "Pasirinkite",
+"Error loading file picker template: {error}" => "Klaida įkeliant failo parinkimo ruošinį: {error}",
 "Yes" => "Taip",
 "No" => "Ne",
 "Ok" => "Gerai",
+"Error loading message template: {error}" => "Klaida įkeliant žinutės ruošinį: {error}",
 "The object type is not specified." => "Objekto tipas nenurodytas.",
 "Error" => "Klaida",
 "The app name is not specified." => "Nenurodytas programos pavadinimas.",
diff --git a/core/l10n/nl.php b/core/l10n/nl.php
index e181eee702..be0b93f33c 100644
--- a/core/l10n/nl.php
+++ b/core/l10n/nl.php
@@ -2,6 +2,12 @@
 $TRANSLATIONS = array(
 "%s shared »%s« with you" => "%s deelde »%s« met jou",
 "group" => "groep",
+"Turned on maintenance mode" => "Onderhoudsmodus ingeschakeld",
+"Turned off maintenance mode" => "Onderhoudsmodus uitgeschakeld",
+"Updated database" => "Database bijgewerkt",
+"Updating filecache, this may take really long..." => "Bijwerken bestandscache. Dit kan even duren...",
+"Updated filecache" => "Bestandscache bijgewerkt",
+"... %d%% done ..." => "... %d%% gereed ...",
 "Category type not provided." => "Categorie type niet opgegeven.",
 "No category to add?" => "Geen categorie om toe te voegen?",
 "This category already exists: %s" => "Deze categorie bestaat al: %s",
@@ -10,6 +16,11 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Toevoegen van %s aan favorieten is mislukt.",
 "No categories selected for deletion." => "Geen categorie geselecteerd voor verwijdering.",
 "Error removing %s from favorites." => "Verwijderen %s van favorieten is mislukt.",
+"No image or file provided" => "Geen afbeelding of bestand opgegeven",
+"Unknown filetype" => "Onbekend bestandsformaat",
+"Invalid image" => "Ongeldige afbeelding",
+"No temporary profile picture available, try again" => "Geen tijdelijke profielafbeelding beschikbaar. Probeer het opnieuw",
+"No crop data provided" => "Geen bijsnijdingsgegevens opgegeven",
 "Sunday" => "zondag",
 "Monday" => "maandag",
 "Tuesday" => "dinsdag",
@@ -42,9 +53,11 @@ $TRANSLATIONS = array(
 "last year" => "vorig jaar",
 "years ago" => "jaar geleden",
 "Choose" => "Kies",
+"Error loading file picker template: {error}" => "Fout bij laden bestandenselecteur sjabloon: {error}",
 "Yes" => "Ja",
 "No" => "Nee",
 "Ok" => "Ok",
+"Error loading message template: {error}" => "Fout bij laden berichtensjabloon: {error}",
 "The object type is not specified." => "Het object type is niet gespecificeerd.",
 "Error" => "Fout",
 "The app name is not specified." => "De app naam is niet gespecificeerd.",
diff --git a/core/l10n/pa.php b/core/l10n/pa.php
new file mode 100644
index 0000000000..d51c26da8e
--- /dev/null
+++ b/core/l10n/pa.php
@@ -0,0 +1,45 @@
+<?php
+$TRANSLATIONS = array(
+"Sunday" => "ਐਤਵਾਰ",
+"Monday" => "ਸੋਮਵਾਰ",
+"Tuesday" => "ਮੰਗਲਵਾਰ",
+"Wednesday" => "ਬੁੱਧਵਾਰ",
+"Thursday" => "ਵੀਰਵਾਰ",
+"Friday" => "ਸ਼ੁੱਕਰਵਾਰ",
+"Saturday" => "ਸ਼ਨਿੱਚਰਵਾਰ",
+"January" => "ਜਨਵਰੀ",
+"February" => "ਫਰਵਰੀ",
+"March" => "ਮਾਰਚ",
+"April" => "ਅਪਰੈ",
+"May" => "ਮਈ",
+"June" => "ਜੂਨ",
+"July" => "ਜੁਲਾਈ",
+"August" => "ਅਗਸਤ",
+"September" => "ਸਤੰਬ",
+"October" => "ਅਕਤੂਬਰ",
+"November" => "ਨਵੰਬ",
+"December" => "ਦਸੰਬਰ",
+"Settings" => "ਸੈਟਿੰਗ",
+"seconds ago" => "ਸਕਿੰਟ ਪਹਿਲਾਂ",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
+"today" => "ਅੱਜ",
+"yesterday" => "ਕੱਲ੍ਹ",
+"_%n day ago_::_%n days ago_" => array("",""),
+"last month" => "ਪਿਛਲੇ ਮਹੀਨੇ",
+"_%n month ago_::_%n months ago_" => array("",""),
+"months ago" => "ਮਹੀਨੇ ਪਹਿਲਾਂ",
+"last year" => "ਪਿਛਲੇ ਸਾਲ",
+"years ago" => "ਸਾਲਾਂ ਪਹਿਲਾਂ",
+"Choose" => "ਚੁਣੋ",
+"Yes" => "ਹਾਂ",
+"No" => "ਨਹੀਂ",
+"Ok" => "ਠੀਕ ਹੈ",
+"Error" => "ਗਲ",
+"Share" => "ਸਾਂਝਾ ਕਰੋ",
+"Password" => "ਪਾਸਵਰ",
+"Send" => "ਭੇਜੋ",
+"Username" => "ਯੂਜ਼ਰ-ਨਾਂ",
+"Security Warning" => "ਸੁਰੱਖਿਆ ਚੇਤਾਵਨੀ"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/pt_BR.php b/core/l10n/pt_BR.php
index f758c0e9bc..b25927ef23 100644
--- a/core/l10n/pt_BR.php
+++ b/core/l10n/pt_BR.php
@@ -16,6 +16,11 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Erro ao adicionar %s aos favoritos.",
 "No categories selected for deletion." => "Nenhuma categoria selecionada para remoção.",
 "Error removing %s from favorites." => "Erro ao remover %s dos favoritos.",
+"No image or file provided" => "Nenhuma imagem ou arquivo fornecido",
+"Unknown filetype" => "Tipo de arquivo desconhecido",
+"Invalid image" => "Imagem inválida",
+"No temporary profile picture available, try again" => "Sem imagem no perfil temporário disponível, tente novamente",
+"No crop data provided" => "Nenhum dado para coleta foi fornecido",
 "Sunday" => "Domingo",
 "Monday" => "Segunda-feira",
 "Tuesday" => "Terça-feira",
@@ -48,9 +53,11 @@ $TRANSLATIONS = array(
 "last year" => "último ano",
 "years ago" => "anos atrás",
 "Choose" => "Escolha",
+"Error loading file picker template: {error}" => "Erro no seletor de carregamento modelo de arquivos: {error}",
 "Yes" => "Sim",
 "No" => "Não",
 "Ok" => "Ok",
+"Error loading message template: {error}" => "Erro no carregamento de modelo de mensagem: {error}",
 "The object type is not specified." => "O tipo de objeto não foi especificado.",
 "Error" => "Erro",
 "The app name is not specified." => "O nome do app não foi especificado.",
diff --git a/l10n/ach/settings.po b/l10n/ach/settings.po
index 391035008e..583ddc7569 100644
--- a/l10n/ach/settings.po
+++ b/l10n/ach/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Acoli (http://www.transifex.com/projects/p/owncloud/language/ach/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/af_ZA/settings.po b/l10n/af_ZA/settings.po
index a7e6614598..ee1052086e 100644
--- a/l10n/af_ZA/settings.po
+++ b/l10n/af_ZA/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/ar/settings.po b/l10n/ar/settings.po
index 89f4050805..d047380c94 100644
--- a/l10n/ar/settings.po
+++ b/l10n/ar/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr "فشل تحميل القائمة من الآب ستور"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "لم يتم التأكد من الشخصية بنجاح"
 
@@ -84,6 +84,39 @@ msgstr "فشل إزالة المستخدم من المجموعة %s"
 msgid "Couldn't update app."
 msgstr "تعذر تحديث التطبيق."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "تم التحديث الى "
@@ -128,15 +161,15 @@ msgstr "حدث"
 msgid "Updated"
 msgstr "تم التحديث بنجاح"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "جاري الحفظ..."
 
diff --git a/l10n/be/settings.po b/l10n/be/settings.po
index 9142225347..211f77281b 100644
--- a/l10n/be/settings.po
+++ b/l10n/be/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/bg_BG/settings.po b/l10n/bg_BG/settings.po
index f83f6218c7..24ca5a353c 100644
--- a/l10n/bg_BG/settings.po
+++ b/l10n/bg_BG/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Възникна проблем с идентификацията"
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Обновяване до {appversion}"
@@ -128,15 +161,15 @@ msgstr "Обновяване"
 msgid "Updated"
 msgstr "Обновено"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Записване..."
 
diff --git a/l10n/bn_BD/settings.po b/l10n/bn_BD/settings.po
index dc3e3ab4ae..e40fc9e716 100644
--- a/l10n/bn_BD/settings.po
+++ b/l10n/bn_BD/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr "অ্যাপস্টোর থেকে তালিকা লোড করতে সক্ষম নয়"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "অনুমোদন ঘটিত সমস্যা"
 
@@ -84,6 +84,39 @@ msgstr "%s গোষ্ঠী থেকে ব্যবহারকারীক
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr "পরিবর্ধন"
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "সংরক্ষণ করা হচ্ছে.."
 
diff --git a/l10n/bs/settings.po b/l10n/bs/settings.po
index b77acd17b7..0034003535 100644
--- a/l10n/bs/settings.po
+++ b/l10n/bs/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bosnian (http://www.transifex.com/projects/p/owncloud/language/bs/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Spašavam..."
 
diff --git a/l10n/ca/core.po b/l10n/ca/core.po
index 900c6cb8f0..6295fd0d36 100644
--- a/l10n/ca/core.po
+++ b/l10n/ca/core.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:31+0000\n"
+"Last-Translator: rogerc\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"
@@ -94,23 +94,23 @@ msgstr "Error en eliminar %s dels preferits."
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "No s'han proporcionat imatges o fitxers"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Tipus de fitxer desconegut"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Imatge no vàlida"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "No hi ha imatge temporal de perfil disponible, torneu a intentar-ho"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "No heu proporcionat dades del retall"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -250,7 +250,7 @@ msgstr "Escull"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "Error en carregar la plantilla de càrrega de fitxers: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -266,7 +266,7 @@ msgstr "D'acord"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr ""
+msgstr "Error en carregar la plantilla de missatge: {error}"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/ca/lib.po b/l10n/ca/lib.po
index 641242729f..c82e5efacb 100644
--- a/l10n/ca/lib.po
+++ b/l10n/ca/lib.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:32+0000\n"
+"Last-Translator: rogerc\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"
@@ -56,15 +56,15 @@ msgstr "Ha fallat l'actualització \"%s\"."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "Les imatges de perfil personals encara no funcionen amb encriptació"
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Tipus de fitxer desconegut"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Imatge no vàlida"
 
 #: defaults.php:35
 msgid "web services under your control"
diff --git a/l10n/ca/settings.po b/l10n/ca/settings.po
index 7f010b29f5..27282ac4a9 100644
--- a/l10n/ca/settings.po
+++ b/l10n/ca/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
 "MIME-Version: 1.0\n"
@@ -24,7 +24,7 @@ msgid "Unable to load list from App Store"
 msgstr "No s'ha pogut carregar la llista des de l'App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Error d'autenticació"
 
@@ -86,6 +86,39 @@ msgstr "No es pot eliminar l'usuari del grup %s"
 msgid "Couldn't update app."
 msgstr "No s'ha pogut actualitzar l'aplicació."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Actualitza a {appversion}"
@@ -130,15 +163,15 @@ msgstr "Actualitza"
 msgid "Updated"
 msgstr "Actualitzada"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Seleccioneu una imatge de perfil"
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Desencriptant fitxers... Espereu, això pot trigar una estona."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Desant..."
 
@@ -462,31 +495,31 @@ msgstr "Ompliu el correu electrònic per activar la recuperació de contrasenya"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Foto de perfil"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Puja'n una de nova"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Selecciona'n una de nova dels fitxers"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Elimina imatge"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Pot ser png o jpg. Idealment quadrada, però podreu retallar-la."
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Cancel·la"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Selecciona com a imatge de perfil"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/cs_CZ/core.po b/l10n/cs_CZ/core.po
index e16afa26bb..9f985c26df 100644
--- a/l10n/cs_CZ/core.po
+++ b/l10n/cs_CZ/core.po
@@ -12,9 +12,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 18:20+0000\n"
+"Last-Translator: pstast <petr@stastny.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"
@@ -97,23 +97,23 @@ msgstr "Chyba při odebírání %s z oblíbených."
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "Soubor nebo obrázek nebyl zadán"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Neznámý typ souboru"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Chybný obrázek"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "Dočasný profilový obrázek není k dispozici, zkuste to znovu"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "Nebyla poskytnuta data pro oříznutí obrázku"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -257,7 +257,7 @@ msgstr "Vybrat"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "Chyba při nahrávání šablony výběru souborů: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -273,7 +273,7 @@ msgstr "Ok"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr ""
+msgstr "Chyba při nahrávání šablony zprávy: {error}"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/cs_CZ/lib.po b/l10n/cs_CZ/lib.po
index 183bc420e8..ef75336427 100644
--- a/l10n/cs_CZ/lib.po
+++ b/l10n/cs_CZ/lib.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 18:20+0000\n"
+"Last-Translator: pstast <petr@stastny.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"
@@ -58,15 +58,15 @@ msgstr "Selhala aktualizace verze \"%s\"."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "Vlastní profilové obrázky zatím nefungují v kombinaci se šifrováním"
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Neznámý typ souboru"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Chybný obrázek"
 
 #: defaults.php:35
 msgid "web services under your control"
diff --git a/l10n/cs_CZ/settings.po b/l10n/cs_CZ/settings.po
index 3d030548d8..971650d2c9 100644
--- a/l10n/cs_CZ/settings.po
+++ b/l10n/cs_CZ/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
 "MIME-Version: 1.0\n"
@@ -26,7 +26,7 @@ msgid "Unable to load list from App Store"
 msgstr "Nelze načíst seznam z App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Chyba přihlášení"
 
@@ -88,6 +88,39 @@ msgstr "Nelze odebrat uživatele ze skupiny %s"
 msgid "Couldn't update app."
 msgstr "Nelze aktualizovat aplikaci."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Aktualizovat na {appversion}"
@@ -132,15 +165,15 @@ msgstr "Aktualizovat"
 msgid "Updated"
 msgstr "Aktualizováno"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Vyberte profilový obrázek"
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Probíhá dešifrování souborů... Čekejte prosím, tato operace může trvat nějakou dobu."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Ukládám..."
 
@@ -464,31 +497,31 @@ msgstr "Pro povolení obnovy hesla vyplňte e-mailovou adresu"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profilová fotka"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Nahrát nový"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Vyberte nový ze souborů"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Odebrat obrázek"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "png nebo jpg, nejlépe čtvercový, ale budete mít možnost jej oříznout."
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Přerušit"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Vybrat jako profilový obrázek"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/cy_GB/settings.po b/l10n/cy_GB/settings.po
index 98cd0448cb..93b67e8505 100644
--- a/l10n/cy_GB/settings.po
+++ b/l10n/cy_GB/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Welsh (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/cy_GB/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Gwall dilysu"
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Yn cadw..."
 
diff --git a/l10n/da/settings.po b/l10n/da/settings.po
index faa811aa78..44feb2e844 100644
--- a/l10n/da/settings.po
+++ b/l10n/da/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
 "MIME-Version: 1.0\n"
@@ -25,7 +25,7 @@ msgid "Unable to load list from App Store"
 msgstr "Kunne ikke indlæse listen fra App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Adgangsfejl"
 
@@ -87,6 +87,39 @@ msgstr "Brugeren kan ikke fjernes fra gruppen %s"
 msgid "Couldn't update app."
 msgstr "Kunne ikke opdatere app'en."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Opdatér til {appversion}"
@@ -131,15 +164,15 @@ msgstr "Opdater"
 msgid "Updated"
 msgstr "Opdateret"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Vælg et profilbillede"
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Dekryptere filer... Vent venligst, dette kan tage lang tid. "
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Gemmer..."
 
@@ -463,31 +496,31 @@ msgstr "Indtast en emailadresse for at kunne få påmindelse om adgangskode"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profilbillede"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Upload nyt"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Vælg nyt fra Filer"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Fjern billede"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Enten png eller jpg. Ideelt firkantet men du har mulighed for at beskære det. "
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Afbryd"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Vælg som profilbillede"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/de/core.po b/l10n/de/core.po
index fa8b284b67..46627cf2e0 100644
--- a/l10n/de/core.po
+++ b/l10n/de/core.po
@@ -15,9 +15,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:05+0000\n"
+"Last-Translator: Mario Siegmann <mario_siegmann@web.de>\n"
 "Language-Team: German <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -100,23 +100,23 @@ msgstr "Fehler beim Entfernen von %s von den Favoriten."
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "Kein Bild oder Datei zur Verfügung gestellt"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Unbekannter Dateityp"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Ungültiges Bild"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "Kein temporäres Profilbild verfügbar, bitte versuche es nochmal"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "Keine Zuschnittdaten zur Verfügung gestellt"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -256,7 +256,7 @@ msgstr "Auswählen"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "Fehler beim Laden der Dateiauswahlvorlage: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -272,7 +272,7 @@ msgstr "OK"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr ""
+msgstr "Fehler beim Laden der Nachrichtenvorlage: {error}"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/de/lib.po b/l10n/de/lib.po
index 2a01484425..c054df799c 100644
--- a/l10n/de/lib.po
+++ b/l10n/de/lib.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:05+0000\n"
+"Last-Translator: Mario Siegmann <mario_siegmann@web.de>\n"
 "Language-Team: German <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -59,15 +59,15 @@ msgstr "Konnte \"%s\" nicht aktualisieren."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "Individuelle Profilbilder werden noch nicht von der Verschlüsselung unterstützt"
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Unbekannter Dateityp"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Ungültiges Bild"
 
 #: defaults.php:35
 msgid "web services under your control"
diff --git a/l10n/de/settings.po b/l10n/de/settings.po
index 1a8503a379..312f288f6d 100644
--- a/l10n/de/settings.po
+++ b/l10n/de/settings.po
@@ -12,8 +12,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
@@ -27,7 +27,7 @@ msgid "Unable to load list from App Store"
 msgstr "Die Liste der Anwendungen im Store konnte nicht geladen werden."
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Fehler bei der Anmeldung"
 
@@ -89,6 +89,39 @@ msgstr "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden"
 msgid "Couldn't update app."
 msgstr "Die App konnte nicht aktualisiert werden."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Aktualisiere zu {appversion}"
@@ -133,15 +166,15 @@ msgstr "Aktualisierung durchführen"
 msgid "Updated"
 msgstr "Aktualisiert"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Wähle ein Profilbild"
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Entschlüssle Dateien ... Bitte warten, denn dieser Vorgang kann einige Zeit beanspruchen."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Speichern..."
 
@@ -465,31 +498,31 @@ msgstr "Trage eine E-Mail-Adresse ein, um die Passwort-Wiederherstellung zu akti
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profilbild"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Neues hochladen"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Neues aus den Dateien wählen"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Bild entfernen"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Entweder PNG oder JPG. Im Idealfall quadratisch, aber du kannst es zuschneiden."
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Abbrechen"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Als Profilbild wählen"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/de_AT/settings.po b/l10n/de_AT/settings.po
index d75c8166a6..d78892f164 100644
--- a/l10n/de_AT/settings.po
+++ b/l10n/de_AT/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Austria) (http://www.transifex.com/projects/p/owncloud/language/de_AT/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/de_CH/settings.po b/l10n/de_CH/settings.po
index 0e4f92b5e6..d1623c88a2 100644
--- a/l10n/de_CH/settings.po
+++ b/l10n/de_CH/settings.po
@@ -15,8 +15,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Switzerland) (http://www.transifex.com/projects/p/owncloud/language/de_CH/)\n"
 "MIME-Version: 1.0\n"
@@ -30,7 +30,7 @@ msgid "Unable to load list from App Store"
 msgstr "Die Liste der Anwendungen im Store konnte nicht geladen werden."
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Authentifizierungs-Fehler"
 
@@ -92,6 +92,39 @@ msgstr "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden"
 msgid "Couldn't update app."
 msgstr "Die App konnte nicht aktualisiert werden."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Update zu {appversion}"
@@ -136,15 +169,15 @@ msgstr "Update durchführen"
 msgid "Updated"
 msgstr "Aktualisiert"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Entschlüssel Dateien ... Bitte warten Sie, denn dieser Vorgang kann einige Zeit beanspruchen."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Speichern..."
 
diff --git a/l10n/de_DE/core.po b/l10n/de_DE/core.po
index f1d1a4a9c6..522345b926 100644
--- a/l10n/de_DE/core.po
+++ b/l10n/de_DE/core.po
@@ -15,9 +15,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:05+0000\n"
+"Last-Translator: Mario Siegmann <mario_siegmann@web.de>\n"
 "Language-Team: German (Germany) <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -100,23 +100,23 @@ msgstr "Fehler beim Entfernen von %s von den Favoriten."
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "Kein Bild oder Datei zur Verfügung gestellt"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Unbekannter Dateityp"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Ungültiges Bild"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "Kein temporäres Profilbild verfügbar, bitte versuchen Sie es nochmal"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "Keine Zuschnittdaten zur Verfügung gestellt"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -256,7 +256,7 @@ msgstr "Auswählen"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "Fehler beim Laden der Dateiauswahlvorlage: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -272,7 +272,7 @@ msgstr "OK"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr ""
+msgstr "Fehler beim Laden der Nachrichtenvorlage: {error}"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/de_DE/lib.po b/l10n/de_DE/lib.po
index 76d7fef148..e70bc08de2 100644
--- a/l10n/de_DE/lib.po
+++ b/l10n/de_DE/lib.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:05+0000\n"
+"Last-Translator: Mario Siegmann <mario_siegmann@web.de>\n"
 "Language-Team: German (Germany) <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -58,15 +58,15 @@ msgstr "Konnte \"%s\" nicht aktualisieren."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "Individuelle Profilbilder werden noch nicht von der Verschlüsselung unterstützt"
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Unbekannter Dateityp"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Ungültiges Bild"
 
 #: defaults.php:35
 msgid "web services under your control"
diff --git a/l10n/de_DE/settings.po b/l10n/de_DE/settings.po
index bd55435a00..bbcb8220fa 100644
--- a/l10n/de_DE/settings.po
+++ b/l10n/de_DE/settings.po
@@ -14,8 +14,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Germany) <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
@@ -29,7 +29,7 @@ msgid "Unable to load list from App Store"
 msgstr "Die Liste der Anwendungen im Store konnte nicht geladen werden."
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Authentifizierungs-Fehler"
 
@@ -91,6 +91,39 @@ msgstr "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden"
 msgid "Couldn't update app."
 msgstr "Die App konnte nicht aktualisiert werden."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Update zu {appversion}"
@@ -135,15 +168,15 @@ msgstr "Update durchführen"
 msgid "Updated"
 msgstr "Aktualisiert"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Wählen Sie ein Profilbild"
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Entschlüssle Dateien ... Bitte warten Sie, denn dieser Vorgang kann einige Zeit beanspruchen."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Speichern..."
 
@@ -467,31 +500,31 @@ msgstr "Bitte tragen Sie eine E-Mail-Adresse ein, um die Passwort-Wiederherstell
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profilbild"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Neues hochladen"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Neues aus den Dateien wählen"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Bild entfernen"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Entweder PNG oder JPG. Im Idealfall quadratisch, aber Sie können es zuschneiden."
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Abbrechen"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Als Profilbild wählen"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/el/settings.po b/l10n/el/settings.po
index 20c03f9adc..7b975e813e 100644
--- a/l10n/el/settings.po
+++ b/l10n/el/settings.po
@@ -13,8 +13,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
 "MIME-Version: 1.0\n"
@@ -28,7 +28,7 @@ msgid "Unable to load list from App Store"
 msgstr "Σφάλμα στην φόρτωση της λίστας από το App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Σφάλμα πιστοποίησης"
 
@@ -90,6 +90,39 @@ msgstr "Αδυναμία αφαίρεσης χρήστη από την ομάδ
 msgid "Couldn't update app."
 msgstr "Αδυναμία ενημέρωσης εφαρμογής"
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Ενημέρωση σε {appversion}"
@@ -134,15 +167,15 @@ msgstr "Ενημέρωση"
 msgid "Updated"
 msgstr "Ενημερώθηκε"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Γίνεται αποθήκευση..."
 
@@ -466,7 +499,7 @@ msgstr "Συμπληρώστε μια διεύθυνση ηλεκτρονικο
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Φωτογραφία προφίλ"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/en@pirate/settings.po b/l10n/en@pirate/settings.po
index b03ef2fbfb..34070d5228 100644
--- a/l10n/en@pirate/settings.po
+++ b/l10n/en@pirate/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Pirate English (http://www.transifex.com/projects/p/owncloud/language/en@pirate/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/en_GB/core.po b/l10n/en_GB/core.po
index c58c631790..e6d3d65737 100644
--- a/l10n/en_GB/core.po
+++ b/l10n/en_GB/core.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 13:30+0000\n"
+"Last-Translator: mnestis <transifex@mnestis.net>\n"
 "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -93,23 +93,23 @@ msgstr "Error removing %s from favourites."
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "No image or file provided"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Unknown filetype"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Invalid image"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "No temporary profile picture available, try again"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "No crop data provided"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -249,7 +249,7 @@ msgstr "Choose"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "Error loading file picker template: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -265,7 +265,7 @@ msgstr "OK"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr ""
+msgstr "Error loading message template: {error}"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/en_GB/lib.po b/l10n/en_GB/lib.po
index 6f63460367..14e6d1c7a8 100644
--- a/l10n/en_GB/lib.po
+++ b/l10n/en_GB/lib.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 13:32+0000\n"
+"Last-Translator: mnestis <transifex@mnestis.net>\n"
 "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -56,15 +56,15 @@ msgstr "Failed to upgrade \"%s\"."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "Custom profile pictures don't work with encryption yet"
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Unknown filetype"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Invalid image"
 
 #: defaults.php:35
 msgid "web services under your control"
@@ -284,13 +284,13 @@ msgstr "seconds ago"
 #: template/functions.php:97
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
-msgstr[0] ""
+msgstr[0] "%n minute ago"
 msgstr[1] "%n minutes ago"
 
 #: template/functions.php:98
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
-msgstr[0] ""
+msgstr[0] "%n hour ago"
 msgstr[1] "%n hours ago"
 
 #: template/functions.php:99
@@ -304,7 +304,7 @@ msgstr "yesterday"
 #: template/functions.php:101
 msgid "%n day go"
 msgid_plural "%n days ago"
-msgstr[0] ""
+msgstr[0] "%n day go"
 msgstr[1] "%n days ago"
 
 #: template/functions.php:102
@@ -314,7 +314,7 @@ msgstr "last month"
 #: template/functions.php:103
 msgid "%n month ago"
 msgid_plural "%n months ago"
-msgstr[0] ""
+msgstr[0] "%n month ago"
 msgstr[1] "%n months ago"
 
 #: template/functions.php:104
diff --git a/l10n/en_GB/settings.po b/l10n/en_GB/settings.po
index 7187857ac8..27be15c752 100644
--- a/l10n/en_GB/settings.po
+++ b/l10n/en_GB/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
 "MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgid "Unable to load list from App Store"
 msgstr "Unable to load list from App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Authentication error"
 
@@ -85,6 +85,39 @@ msgstr "Unable to remove user from group %s"
 msgid "Couldn't update app."
 msgstr "Couldn't update app."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Update to {appversion}"
@@ -129,15 +162,15 @@ msgstr "Update"
 msgid "Updated"
 msgstr "Updated"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Select a profile picture"
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Decrypting files... Please wait, this can take some time."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Saving..."
 
@@ -461,31 +494,31 @@ msgstr "Fill in an email address to enable password recovery"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profile picture"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Upload new"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Select new from Files"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Remove image"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Either png or jpg. Ideally square but you will be able to crop it."
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Abort"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Choose as profile image"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/eo/settings.po b/l10n/eo/settings.po
index 405b43ad00..f773f8e97a 100644
--- a/l10n/eo/settings.po
+++ b/l10n/eo/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr "Ne eblis ŝargi liston el aplikaĵovendejo"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Aŭtentiga eraro"
 
@@ -84,6 +84,39 @@ msgstr "Ne eblis forigi la uzantan el la grupo %s"
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr "Ĝisdatigi"
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Konservante..."
 
@@ -460,7 +493,7 @@ msgstr "Enigu retpoŝtadreson por kapabligi pasvortan restaŭron"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profila bildo"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/es/settings.po b/l10n/es/settings.po
index 32d2de1aad..e93338b73e 100644
--- a/l10n/es/settings.po
+++ b/l10n/es/settings.po
@@ -15,8 +15,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
 "MIME-Version: 1.0\n"
@@ -30,7 +30,7 @@ msgid "Unable to load list from App Store"
 msgstr "Imposible cargar la lista desde el App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Error de autenticación"
 
@@ -92,6 +92,39 @@ msgstr "No se pudo eliminar al usuario del grupo %s"
 msgid "Couldn't update app."
 msgstr "No se pudo actualizar la aplicacion."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Actualizado a {appversion}"
@@ -136,15 +169,15 @@ msgstr "Actualizar"
 msgid "Updated"
 msgstr "Actualizado"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Descifrando archivos... Espere por favor, esto puede llevar algo de tiempo."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Guardando..."
 
@@ -468,7 +501,7 @@ msgstr "Escriba una dirección de correo electrónico para restablecer la contra
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Foto del perfil"
 
 #: templates/personal.php:90
 msgid "Upload new"
@@ -488,7 +521,7 @@ msgstr ""
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Abortar"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
diff --git a/l10n/es_AR/settings.po b/l10n/es_AR/settings.po
index e91cf0d780..512b5a949f 100644
--- a/l10n/es_AR/settings.po
+++ b/l10n/es_AR/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
 "MIME-Version: 1.0\n"
@@ -25,7 +25,7 @@ msgid "Unable to load list from App Store"
 msgstr "Imposible cargar la lista desde el App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Error al autenticar"
 
@@ -87,6 +87,39 @@ msgstr "No es posible borrar al usuario del grupo %s"
 msgid "Couldn't update app."
 msgstr "No se pudo actualizar la App."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Actualizar a {appversion}"
@@ -131,15 +164,15 @@ msgstr "Actualizar"
 msgid "Updated"
 msgstr "Actualizado"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Desencriptando archivos... Por favor espere, esto puede tardar."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Guardando..."
 
@@ -483,7 +516,7 @@ msgstr ""
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Abortar"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
diff --git a/l10n/es_MX/settings.po b/l10n/es_MX/settings.po
index e4d80e5f68..c0dcfcc0d5 100644
--- a/l10n/es_MX/settings.po
+++ b/l10n/es_MX/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (Mexico) (http://www.transifex.com/projects/p/owncloud/language/es_MX/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/et_EE/core.po b/l10n/et_EE/core.po
index 7e163f5efc..eb1f23ddad 100644
--- a/l10n/et_EE/core.po
+++ b/l10n/et_EE/core.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 08:20+0000\n"
+"Last-Translator: pisike.sipelgas <pisike.sipelgas@gmail.com>\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"
@@ -94,23 +94,23 @@ msgstr "Viga %s eemaldamisel lemmikutest."
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "Ühtegi pilti või faili ei pakutud"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Tundmatu failitüüp"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Vigane pilt"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "Ühtegi ajutist profiili pilti pole saadaval, proovi uuesti"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "Lõikeandmeid ei leitud"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -250,7 +250,7 @@ msgstr "Vali"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "Viga faili valija malli laadimisel:  {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -266,7 +266,7 @@ msgstr "Ok"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr ""
+msgstr "Viga sõnumi malli laadimisel:  {error}"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/et_EE/lib.po b/l10n/et_EE/lib.po
index 4883978e98..70416438c1 100644
--- a/l10n/et_EE/lib.po
+++ b/l10n/et_EE/lib.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 08:20+0000\n"
+"Last-Translator: pisike.sipelgas <pisike.sipelgas@gmail.com>\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"
@@ -57,15 +57,15 @@ msgstr "Ebaõnnestunud uuendus \"%s\"."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "Kohandatud profiili pildid ei toimi veel koos krüpteeringuga"
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Tundmatu failitüüp"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Vigane pilt"
 
 #: defaults.php:35
 msgid "web services under your control"
diff --git a/l10n/et_EE/settings.po b/l10n/et_EE/settings.po
index 99a5ced11e..fce1cc2fbc 100644
--- a/l10n/et_EE/settings.po
+++ b/l10n/et_EE/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
 "MIME-Version: 1.0\n"
@@ -24,7 +24,7 @@ msgid "Unable to load list from App Store"
 msgstr "App Store'i nimekirja laadimine ebaõnnestus"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Autentimise viga"
 
@@ -86,6 +86,39 @@ msgstr "Kasutajat ei saa eemaldada grupist %s"
 msgid "Couldn't update app."
 msgstr "Rakenduse uuendamine ebaõnnestus."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Uuenda versioonile {appversion}"
@@ -130,15 +163,15 @@ msgstr "Uuenda"
 msgid "Updated"
 msgstr "Uuendatud"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Vali profiili pilt"
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Dekrüpteerin faile... Palun oota, see võib võtta veidi aega."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Salvestamine..."
 
@@ -462,31 +495,31 @@ msgstr "Parooli taastamise sisse lülitamiseks sisesta e-posti aadress"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profiili pilt"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Laadi uus"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Vali failidest uus"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Eemalda pilt"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Kas png või jpg. Võimalikult ruudukujuline, kuid Sul on võimalus veel lõigata."
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Katkesta"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Vali kui profiili pilt"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/eu/settings.po b/l10n/eu/settings.po
index 2255ef9ef7..fd51682696 100644
--- a/l10n/eu/settings.po
+++ b/l10n/eu/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
 "MIME-Version: 1.0\n"
@@ -24,7 +24,7 @@ msgid "Unable to load list from App Store"
 msgstr "Ezin izan da App Dendatik zerrenda kargatu"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Autentifikazio errorea"
 
@@ -86,6 +86,39 @@ msgstr "Ezin izan da erabiltzailea %s taldetik ezabatu"
 msgid "Couldn't update app."
 msgstr "Ezin izan da aplikazioa eguneratu."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Eguneratu {appversion}-ra"
@@ -130,15 +163,15 @@ msgstr "Eguneratu"
 msgid "Updated"
 msgstr "Eguneratuta"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Gordetzen..."
 
@@ -462,7 +495,7 @@ msgstr "Idatz ezazu e-posta bat pasahitza berreskuratu ahal izateko"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profilaren irudia"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/fa/settings.po b/l10n/fa/settings.po
index 2682e4f123..587c70ba4a 100644
--- a/l10n/fa/settings.po
+++ b/l10n/fa/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
 "MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgid "Unable to load list from App Store"
 msgstr "قادر به بارگذاری لیست از فروشگاه اپ نیستم"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "خطا در اعتبار سنجی"
 
@@ -85,6 +85,39 @@ msgstr "امکان حذف کاربر از گروه %s نیست"
 msgid "Couldn't update app."
 msgstr "برنامه را نمی توان به هنگام ساخت."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "بهنگام شده به  {appversion}"
@@ -129,15 +162,15 @@ msgstr "به روز رسانی"
 msgid "Updated"
 msgstr "بروز رسانی انجام شد"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "در حال ذخیره سازی..."
 
@@ -461,7 +494,7 @@ msgstr "پست الکترونیکی را پرکنید  تا بازیابی گذ
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "تصویر پروفایل"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/fi_FI/core.po b/l10n/fi_FI/core.po
index 7935371a41..499d8b2d8d 100644
--- a/l10n/fi_FI/core.po
+++ b/l10n/fi_FI/core.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:05+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"
@@ -98,15 +98,15 @@ msgstr ""
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Tuntematon tiedostotyyppi"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Virhellinen kuva"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "Väliaikaista profiilikuvaa ei ole käytettävissä, yritä uudelleen"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
diff --git a/l10n/fi_FI/lib.po b/l10n/fi_FI/lib.po
index f6134419be..41e7241ad3 100644
--- a/l10n/fi_FI/lib.po
+++ b/l10n/fi_FI/lib.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:05+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"
@@ -27,7 +27,7 @@ msgstr "Sovellusta \"%s\" ei voi asentaa, koska se ei ole yhteensopiva käytöss
 
 #: app.php:250
 msgid "No app name specified"
-msgstr ""
+msgstr "Sovelluksen nimeä ei määritelty"
 
 #: app.php:361
 msgid "Help"
@@ -52,19 +52,19 @@ msgstr "Ylläpitäjä"
 #: app.php:839
 #, php-format
 msgid "Failed to upgrade \"%s\"."
-msgstr ""
+msgstr "Kohteen \"%s\" päivitys epäonnistui."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "Omavalintaiset profiilikuvat eivät toimi salauksen kanssa vielä"
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Tuntematon tiedostotyyppi"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Virheellinen kuva"
 
 #: defaults.php:35
 msgid "web services under your control"
@@ -124,13 +124,13 @@ msgstr "Sovellus ei sisällä info.xml-tiedostoa"
 
 #: installer.php:131
 msgid "App can't be installed because of not allowed code in the App"
-msgstr ""
+msgstr "Sovellusta ei voi asentaa, koska sovellus sisältää kiellettyä koodia"
 
 #: installer.php:140
 msgid ""
 "App can't be installed because it is not compatible with this version of "
 "ownCloud"
-msgstr ""
+msgstr "Sovellusta ei voi asentaa, koska se ei ole yhteensopiva käytössä olevan ownCloud-version kanssa"
 
 #: installer.php:146
 msgid ""
diff --git a/l10n/fi_FI/settings.po b/l10n/fi_FI/settings.po
index b9581c966b..60eda83c46 100644
--- a/l10n/fi_FI/settings.po
+++ b/l10n/fi_FI/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
 "MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgid "Unable to load list from App Store"
 msgstr "Ei pystytä lataamaan listaa sovellusvarastosta (App Store)"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Tunnistautumisvirhe"
 
@@ -85,6 +85,39 @@ msgstr "Käyttäjän poistaminen ryhmästä %s ei onnistu"
 msgid "Couldn't update app."
 msgstr "Sovelluksen päivitys epäonnistui."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Päivitä versioon {appversion}"
@@ -129,15 +162,15 @@ msgstr "Päivitä"
 msgid "Updated"
 msgstr "Päivitetty"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Valitse profiilikuva"
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Puretaan tiedostojen salausta... Odota, tämä voi kestää jonkin aikaa."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Tallennetaan..."
 
@@ -461,31 +494,31 @@ msgstr "Anna sähköpostiosoitteesi, jotta unohdettu salasana on mahdollista pal
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profiilikuva"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Lähetä uusi"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Valitse uusi tiedostoista"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Poista kuva"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Joko png- tai jpg-kuva. Mieluite neliö, voit kuitenkin rajata kuvaa."
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Keskeytä"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Valitse profiilikuvaksi"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po
index aab0b21d49..49cfd88024 100644
--- a/l10n/fr/settings.po
+++ b/l10n/fr/settings.po
@@ -6,13 +6,14 @@
 # Adalberto Rodrigues <rodrigues_adalberto@yahoo.fr>, 2013
 # Christophe Lherieau <skimpax@gmail.com>, 2013
 # lyly95, 2013
+# Mystyle <maelvstyle@gmail.com>, 2013
 # red0ne <red-0ne@smarty-concept.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
 "MIME-Version: 1.0\n"
@@ -26,7 +27,7 @@ msgid "Unable to load list from App Store"
 msgstr "Impossible de charger la liste depuis l'App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Erreur d'authentification"
 
@@ -88,6 +89,39 @@ msgstr "Impossible de supprimer l'utilisateur du groupe %s"
 msgid "Couldn't update app."
 msgstr "Impossible de mettre à jour l'application"
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Mettre à jour vers {appversion}"
@@ -132,15 +166,15 @@ msgstr "Mettre à jour"
 msgid "Updated"
 msgstr "Mise à jour effectuée avec succès"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Selectionner une photo de profil "
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Déchiffrement en cours... Cela peut prendre un certain temps."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Enregistrement..."
 
@@ -464,31 +498,31 @@ msgstr "Entrez votre adresse e-mail pour permettre la réinitialisation du mot d
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Photo de profil"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Télécharger nouveau"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Sélectionner un nouveau depuis les documents"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Supprimer l'image"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Soit png ou jpg. idéalement carée mais vous pourrez la recadrer ."
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Abandonner"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Choisir en temps que photo de profil "
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/gl/core.po b/l10n/gl/core.po
index ac5a3fc0f0..a4c485ede1 100644
--- a/l10n/gl/core.po
+++ b/l10n/gl/core.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:05+0000\n"
+"Last-Translator: mbouzada <mbouzada@gmail.com>\n"
 "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -93,23 +93,23 @@ msgstr "Produciuse un erro ao eliminar %s dos favoritos."
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "Non forneceu ningunha imaxe ou ficheiro"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Tipo de ficheiro descoñecido"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Imaxe incorrecta"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "Non hai unha imaxe temporal de perfil dispoñíbel, volva tentalo"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "Non indicou como recortar"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -249,7 +249,7 @@ msgstr "Escoller"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "Produciuse un erro ao cargar o modelo do selector: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -265,7 +265,7 @@ msgstr "Aceptar"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr ""
+msgstr "Produciuse un erro ao cargar o modelo da mensaxe: {error}"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/gl/lib.po b/l10n/gl/lib.po
index 430902b2c2..9cb8c43c36 100644
--- a/l10n/gl/lib.po
+++ b/l10n/gl/lib.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:05+0000\n"
+"Last-Translator: mbouzada <mbouzada@gmail.com>\n"
 "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -56,15 +56,15 @@ msgstr "Non foi posíbel anovar «%s»."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "As imaxes personalizadas de perfil aínda non funcionan co cifrado"
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Tipo de ficheiro descoñecido"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Imaxe incorrecta"
 
 #: defaults.php:35
 msgid "web services under your control"
diff --git a/l10n/gl/settings.po b/l10n/gl/settings.po
index 58154e88f4..df5d5ec729 100644
--- a/l10n/gl/settings.po
+++ b/l10n/gl/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 "MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgid "Unable to load list from App Store"
 msgstr "Non foi posíbel cargar a lista desde a App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Produciuse un erro de autenticación"
 
@@ -85,6 +85,39 @@ msgstr "Non é posíbel eliminar o usuario do grupo %s"
 msgid "Couldn't update app."
 msgstr "Non foi posíbel actualizar o aplicativo."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Actualizar á {appversion}"
@@ -129,15 +162,15 @@ msgstr "Actualizar"
 msgid "Updated"
 msgstr "Actualizado"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Seleccione unha imaxe para o perfil"
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Descifrando ficheiros... isto pode levar un anaco."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Gardando..."
 
@@ -461,31 +494,31 @@ msgstr "Escriba un enderezo de correo para activar o contrasinal de recuperació
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Imaxe do perfil"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Novo envío"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Seleccione unha nova de ficheiros"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Retirar a imaxe"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Calquera png ou jpg. É preferíbel que sexa cadrada, mais poderá recortala."
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Cancelar"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Escolla unha imaxe para o perfil"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/he/settings.po b/l10n/he/settings.po
index 7115b110ec..275d36704f 100644
--- a/l10n/he/settings.po
+++ b/l10n/he/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
 "MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgid "Unable to load list from App Store"
 msgstr "לא ניתן לטעון רשימה מה־App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "שגיאת הזדהות"
 
@@ -85,6 +85,39 @@ msgstr "לא ניתן להסיר משתמש מהקבוצה %s"
 msgid "Couldn't update app."
 msgstr "לא ניתן לעדכן את היישום."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "עדכון לגרסה {appversion}"
@@ -129,15 +162,15 @@ msgstr "עדכון"
 msgid "Updated"
 msgstr "מעודכן"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "שמירה…"
 
@@ -461,7 +494,7 @@ msgstr "נא למלא את כתובת הדוא״ל שלך כדי לאפשר שח
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "תמונת פרופיל"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/hi/core.po b/l10n/hi/core.po
index c90f0a4113..31d7caf5d3 100644
--- a/l10n/hi/core.po
+++ b/l10n/hi/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 15:30+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
 "MIME-Version: 1.0\n"
@@ -359,7 +359,7 @@ msgstr ""
 
 #: js/share.js:245
 msgid "No people found"
-msgstr ""
+msgstr "कोई व्यक्ति नहीं मिले "
 
 #: js/share.js:283
 msgid "Resharing is not allowed"
@@ -539,7 +539,7 @@ msgstr "डाले"
 #: templates/installation.php:24 templates/installation.php:31
 #: templates/installation.php:38
 msgid "Security Warning"
-msgstr ""
+msgstr "सुरक्षा चेतावनी "
 
 #: templates/installation.php:25
 msgid "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)"
diff --git a/l10n/hi/files.po b/l10n/hi/files.po
index 67aa5d887d..1be595e8e6 100644
--- a/l10n/hi/files.po
+++ b/l10n/hi/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:31-0400\n"
-"PO-Revision-Date: 2013-08-30 13:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:46-0400\n"
+"PO-Revision-Date: 2013-09-17 13:14+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
 "MIME-Version: 1.0\n"
@@ -86,32 +86,32 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
+#: js/file-upload.js:40
 msgid "Unable to upload your file as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:53
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:91
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:206
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:280
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:285 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:275 js/file-upload.js:291 js/files.js:511 js/files.js:549
+#: js/file-upload.js:317 js/file-upload.js:333 js/files.js:528 js/files.js:566
 msgid "Error"
 msgstr "त्रुटि"
 
@@ -127,57 +127,57 @@ msgstr ""
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:573
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:710
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:417 js/filelist.js:419
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:417 js/filelist.js:419
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:305
+#: js/filelist.js:417
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:417 js/filelist.js:419
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:464
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:464
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:422 js/filelist.js:488 js/files.js:580
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:597
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:423 js/filelist.js:489 js/files.js:586
+#: js/filelist.js:535 js/filelist.js:601 js/files.js:603
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:430
+#: js/filelist.js:542
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:561
+#: js/filelist.js:698
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:626
+#: js/filelist.js:763
 msgid "files uploading"
 msgstr ""
 
@@ -209,21 +209,21 @@ msgid ""
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:322
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:562 templates/index.php:67
+#: js/files.js:579 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:563 templates/index.php:78
+#: js/files.js:580 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:80
+#: js/files.js:581 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -232,9 +232,9 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
-msgstr ""
+msgstr "अपलोड "
 
 #: templates/admin.php:5
 msgid "File handling"
@@ -268,65 +268,65 @@ msgstr ""
 msgid "Save"
 msgstr "सहेजें"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:73
+#: templates/index.php:67
 msgid "Download"
 msgstr ""
 
-#: templates/index.php:85 templates/index.php:86
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:91 templates/index.php:92
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:105
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:107
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:112
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/hi/files_sharing.po b/l10n/hi/files_sharing.po
index c9f6dc720f..546e758e1c 100644
--- a/l10n/hi/files_sharing.po
+++ b/l10n/hi/files_sharing.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-07 04:40-0400\n"
-"PO-Revision-Date: 2013-09-05 11:51+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:14+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
 "MIME-Version: 1.0\n"
@@ -69,7 +69,7 @@ msgstr ""
 
 #: templates/public.php:43 templates/public.php:46
 msgid "Upload"
-msgstr ""
+msgstr "अपलोड "
 
 #: templates/public.php:56
 msgid "Cancel upload"
diff --git a/l10n/hi/settings.po b/l10n/hi/settings.po
index 4e7d9242b2..f54504cd72 100644
--- a/l10n/hi/settings.po
+++ b/l10n/hi/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr "अद्यतन"
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
@@ -187,7 +220,7 @@ msgstr ""
 
 #: templates/admin.php:15
 msgid "Security Warning"
-msgstr ""
+msgstr "सुरक्षा चेतावनी "
 
 #: templates/admin.php:18
 msgid ""
@@ -480,7 +513,7 @@ msgstr ""
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "रद्द करना "
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
diff --git a/l10n/hr/settings.po b/l10n/hr/settings.po
index 13772a8290..db3bfe8145 100644
--- a/l10n/hr/settings.po
+++ b/l10n/hr/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr "Nemogićnost učitavanja liste sa Apps Stora"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Greška kod autorizacije"
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Spremanje..."
 
diff --git a/l10n/hu_HU/settings.po b/l10n/hu_HU/settings.po
index 93228ebc6c..7643899f6d 100644
--- a/l10n/hu_HU/settings.po
+++ b/l10n/hu_HU/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
 "MIME-Version: 1.0\n"
@@ -25,7 +25,7 @@ msgid "Unable to load list from App Store"
 msgstr "Nem tölthető le a lista az App Store-ból"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Azonosítási hiba"
 
@@ -87,6 +87,39 @@ msgstr "A felhasználó nem távolítható el ebből a csoportból: %s"
 msgid "Couldn't update app."
 msgstr "A program frissítése nem sikerült."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Frissítés erre a verzióra: {appversion}"
@@ -131,15 +164,15 @@ msgstr "Frissítés"
 msgid "Updated"
 msgstr "Frissítve"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Mentés..."
 
@@ -463,7 +496,7 @@ msgstr "Adja meg az email címét, hogy jelszó-emlékeztetőt kérhessen, ha el
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profilkép"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/hy/settings.po b/l10n/hy/settings.po
index 3571285625..faf9956c06 100644
--- a/l10n/hy/settings.po
+++ b/l10n/hy/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/ia/settings.po b/l10n/ia/settings.po
index dfe9a6ffe8..b88c80f02c 100644
--- a/l10n/ia/settings.po
+++ b/l10n/ia/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr "Actualisar"
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
@@ -460,7 +493,7 @@ msgstr ""
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Imagine de profilo"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/id/settings.po b/l10n/id/settings.po
index 5f0fefa325..260df1998a 100644
--- a/l10n/id/settings.po
+++ b/l10n/id/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr "Tidak dapat memuat daftar dari App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Galat saat autentikasi"
 
@@ -84,6 +84,39 @@ msgstr "Tidak dapat menghapus pengguna dari grup %s"
 msgid "Couldn't update app."
 msgstr "Tidak dapat memperbarui aplikasi."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Perbarui ke {appversion}"
@@ -128,15 +161,15 @@ msgstr "Perbarui"
 msgid "Updated"
 msgstr "Diperbarui"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Menyimpan..."
 
diff --git a/l10n/is/settings.po b/l10n/is/settings.po
index f444914ef0..033cdb6233 100644
--- a/l10n/is/settings.po
+++ b/l10n/is/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
 "MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgid "Unable to load list from App Store"
 msgstr "Ekki tókst að hlaða lista frá forrita síðu"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Villa við auðkenningu"
 
@@ -85,6 +85,39 @@ msgstr "Ekki tókst að fjarlægja notanda úr hópnum %s"
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -129,15 +162,15 @@ msgstr "Uppfæra"
 msgid "Updated"
 msgstr "Uppfært"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Er að vista ..."
 
diff --git a/l10n/it/core.po b/l10n/it/core.po
index 10f3e72f5d..ab95d67cc3 100644
--- a/l10n/it/core.po
+++ b/l10n/it/core.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 22:30+0000\n"
+"Last-Translator: polxmod <paolo.velati@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"
@@ -95,23 +95,23 @@ msgstr "Errore durante la rimozione di %s dai preferiti."
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "Non è stata fornita alcun immagine o file"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Tipo file sconosciuto"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Immagine non valida"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "Nessuna foto profilo temporanea disponibile, riprova"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "Raccolta dati non prevista"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -251,7 +251,7 @@ msgstr "Scegli"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "Errore durante il caricamento del modello del selettore file: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -267,7 +267,7 @@ msgstr "Ok"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr ""
+msgstr "Errore durante il caricamento del modello di messaggio: {error}"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/it/lib.po b/l10n/it/lib.po
index 2fa3217657..8c5f8ced5f 100644
--- a/l10n/it/lib.po
+++ b/l10n/it/lib.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 22:30+0000\n"
+"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
 "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -58,15 +58,15 @@ msgstr "Aggiornamento non riuscito \"%s\"."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "Le immagini personalizzate del profilo non funzionano ancora con la cifratura."
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Tipo file sconosciuto"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Immagine non valida"
 
 #: defaults.php:35
 msgid "web services under your control"
diff --git a/l10n/it/settings.po b/l10n/it/settings.po
index cb888134db..6988cc5e5f 100644
--- a/l10n/it/settings.po
+++ b/l10n/it/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
 "MIME-Version: 1.0\n"
@@ -26,7 +26,7 @@ msgid "Unable to load list from App Store"
 msgstr "Impossibile caricare l'elenco dall'App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Errore di autenticazione"
 
@@ -88,6 +88,39 @@ msgstr "Impossibile rimuovere l'utente dal gruppo %s"
 msgid "Couldn't update app."
 msgstr "Impossibile aggiornate l'applicazione."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Aggiorna a {appversion}"
@@ -132,15 +165,15 @@ msgstr "Aggiorna"
 msgid "Updated"
 msgstr "Aggiornato"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Seleziona un'immagine del profilo"
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Decifratura dei file in corso... Attendi, potrebbe richiedere del tempo."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Salvataggio in corso..."
 
@@ -464,31 +497,31 @@ msgstr "Inserisci il tuo indirizzo email per abilitare il recupero della passwor
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Immagine del profilo"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Carica nuova"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Seleziona nuova da file"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Rimuovi immagine"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Sia png che jpg. Preferibilmente quadrata, ma potrai ritagliarla."
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Interrompi"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Scegli come immagine del profilo"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/ja_JP/core.po b/l10n/ja_JP/core.po
index b9f0531170..d6343899dc 100644
--- a/l10n/ja_JP/core.po
+++ b/l10n/ja_JP/core.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 05:50+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -96,19 +96,19 @@ msgstr "お気に入りから %s の削除エラー"
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "画像もしくはファイルが提供されていません"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "不明なファイルタイプ"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "無効な画像"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "一時的なプロファイル用画像が利用できません。もう一度試して下さい"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
@@ -248,7 +248,7 @@ msgstr "選択"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "ファイル選択テンプレートの読み込みエラー: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -264,7 +264,7 @@ msgstr "OK"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr ""
+msgstr "メッセージテンプレートの読み込みエラー: {error}"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/ja_JP/lib.po b/l10n/ja_JP/lib.po
index c910ea9099..7cae81c6ad 100644
--- a/l10n/ja_JP/lib.po
+++ b/l10n/ja_JP/lib.po
@@ -3,6 +3,7 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Daisuke Deguchi <ddeguchi@nagoya-u.jp>, 2013
 # plazmism <gomidori@live.jp>, 2013
 # Koichi MATSUMOTO <mzch@me.com>, 2013
 # tt yn <tetuyano+transi@gmail.com>, 2013
@@ -10,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 05:50+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -62,11 +63,11 @@ msgstr ""
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "不明なファイルタイプ"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "無効な画像"
 
 #: defaults.php:35
 msgid "web services under your control"
diff --git a/l10n/ja_JP/settings.po b/l10n/ja_JP/settings.po
index b0dd14f558..cc0e31052f 100644
--- a/l10n/ja_JP/settings.po
+++ b/l10n/ja_JP/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 "MIME-Version: 1.0\n"
@@ -25,7 +25,7 @@ msgid "Unable to load list from App Store"
 msgstr "アプリストアからリストをロードできません"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "認証エラー"
 
@@ -87,6 +87,39 @@ msgstr "ユーザをグループ %s から削除できません"
 msgid "Couldn't update app."
 msgstr "アプリを更新出来ませんでした。"
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "{appversion} に更新"
@@ -131,15 +164,15 @@ msgstr "更新"
 msgid "Updated"
 msgstr "更新済み"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "プロファイル画像を選択"
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "ファイルを複合中... しばらくお待ちください、この処理には少し時間がかかるかもしれません。"
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "保存中..."
 
@@ -463,7 +496,7 @@ msgstr "※パスワード回復を有効にするにはメールアドレスの
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "プロフィール写真"
 
 #: templates/personal.php:90
 msgid "Upload new"
@@ -475,7 +508,7 @@ msgstr ""
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "画像を削除"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
@@ -483,11 +516,11 @@ msgstr ""
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "中止"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "プロファイル画像として選択"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/ka/settings.po b/l10n/ka/settings.po
index 8e2b2cb50d..139784572d 100644
--- a/l10n/ka/settings.po
+++ b/l10n/ka/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Georgian (http://www.transifex.com/projects/p/owncloud/language/ka/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/ka_GE/settings.po b/l10n/ka_GE/settings.po
index b2b70884df..1b89539f14 100644
--- a/l10n/ka_GE/settings.po
+++ b/l10n/ka_GE/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
 "MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgid "Unable to load list from App Store"
 msgstr "აპლიკაციების სია ვერ ჩამოიტვირთა App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "ავთენტიფიკაციის შეცდომა"
 
@@ -85,6 +85,39 @@ msgstr "მომხმარებლის წაშლა ვერ მოხ
 msgid "Couldn't update app."
 msgstr "ვერ მოხერხდა აპლიკაციის განახლება."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "განაახლე {appversion}–მდე"
@@ -129,15 +162,15 @@ msgstr "განახლება"
 msgid "Updated"
 msgstr "განახლებულია"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "შენახვა..."
 
diff --git a/l10n/km/settings.po b/l10n/km/settings.po
index e32f2e8796..bf3b798590 100644
--- a/l10n/km/settings.po
+++ b/l10n/km/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Khmer (http://www.transifex.com/projects/p/owncloud/language/km/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/kn/settings.po b/l10n/kn/settings.po
index aa346b34b3..d2cde9a883 100644
--- a/l10n/kn/settings.po
+++ b/l10n/kn/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Kannada (http://www.transifex.com/projects/p/owncloud/language/kn/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/ko/settings.po b/l10n/ko/settings.po
index 59c2ed9d37..2633c90f1f 100644
--- a/l10n/ko/settings.po
+++ b/l10n/ko/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
 "MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgid "Unable to load list from App Store"
 msgstr "앱 스토어에서 목록을 가져올 수 없습니다"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "인증 오류"
 
@@ -85,6 +85,39 @@ msgstr "그룹 %s에서 사용자를 삭제할 수 없음"
 msgid "Couldn't update app."
 msgstr "앱을 업데이트할 수 없습니다."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "버전 {appversion}(으)로 업데이트"
@@ -129,15 +162,15 @@ msgstr "업데이트"
 msgid "Updated"
 msgstr "업데이트됨"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "저장 중..."
 
@@ -461,7 +494,7 @@ msgstr "암호 찾기 기능을 사용하려면 이메일 주소를 입력하십
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "프로필 사진"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/ku_IQ/settings.po b/l10n/ku_IQ/settings.po
index e9b1bff8ad..ac9ed94262 100644
--- a/l10n/ku_IQ/settings.po
+++ b/l10n/ku_IQ/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr "نوێکردنه‌وه"
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "پاشکه‌وتده‌کات..."
 
diff --git a/l10n/lb/settings.po b/l10n/lb/settings.po
index 7f406ee863..33639b80d3 100644
--- a/l10n/lb/settings.po
+++ b/l10n/lb/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
 "MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgid "Unable to load list from App Store"
 msgstr "Konnt Lescht net vum App Store lueden"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Authentifikatioun's Fehler"
 
@@ -85,6 +85,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -129,15 +162,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Speicheren..."
 
diff --git a/l10n/lt_LT/core.po b/l10n/lt_LT/core.po
index 23fb315c51..6c51d43a5d 100644
--- a/l10n/lt_LT/core.po
+++ b/l10n/lt_LT/core.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 14:50+0000\n"
+"Last-Translator: Liudas Ališauskas <liudas.alisauskas@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"
@@ -96,23 +96,23 @@ msgstr "Klaida ištrinant %s iš jūsų mėgstamiausius."
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "Nenurodytas paveikslėlis ar failas"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Nežinomas failo tipas"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Netinkamas paveikslėlis"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "Nėra laikino profilio paveikslėlio, bandykite dar kartą"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "Nenurodyti apkirpimo duomenys"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -256,7 +256,7 @@ msgstr "Pasirinkite"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "Klaida įkeliant failo parinkimo ruošinį: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -272,7 +272,7 @@ msgstr "Gerai"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr ""
+msgstr "Klaida įkeliant žinutės ruošinį: {error}"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/lt_LT/lib.po b/l10n/lt_LT/lib.po
index 7b189b6247..811ca96268 100644
--- a/l10n/lt_LT/lib.po
+++ b/l10n/lt_LT/lib.po
@@ -4,15 +4,16 @@
 # 
 # Translators:
 # fizikiukas <fizikiukas@gmail.com>, 2013
+# Liudas Ališauskas <liudas.alisauskas@gmail.com>, 2013
 # Liudas <liudas@aksioma.lt>, 2013
 # fizikiukas <fizikiukas@gmail.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 14:50+0000\n"
+"Last-Translator: Liudas Ališauskas <liudas.alisauskas@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"
@@ -58,15 +59,15 @@ msgstr "Nepavyko pakelti  „%s“ versijos."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "Saviti profilio paveiksliukai dar neveikia su šifravimu"
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Nežinomas failo tipas"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Netinkamas paveikslėlis"
 
 #: defaults.php:35
 msgid "web services under your control"
diff --git a/l10n/lt_LT/settings.po b/l10n/lt_LT/settings.po
index ce27047885..d651f76275 100644
--- a/l10n/lt_LT/settings.po
+++ b/l10n/lt_LT/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
 "MIME-Version: 1.0\n"
@@ -26,7 +26,7 @@ msgid "Unable to load list from App Store"
 msgstr "Neįmanoma įkelti sąrašo iš Programų Katalogo"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Autentikacijos klaida"
 
@@ -88,6 +88,39 @@ msgstr "Nepavyko ištrinti vartotojo iš grupės %s"
 msgid "Couldn't update app."
 msgstr "Nepavyko atnaujinti programos."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Atnaujinti iki {appversion}"
@@ -132,15 +165,15 @@ msgstr "Atnaujinti"
 msgid "Updated"
 msgstr "Atnaujinta"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Pažymėkite profilio paveikslėlį"
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Iššifruojami failai... Prašome palaukti, tai gali užtrukti."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Saugoma..."
 
@@ -464,31 +497,31 @@ msgstr "Pamiršto slaptažodžio atkūrimui įveskite savo el. pašto adresą"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profilio paveikslėlis"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Įkelti naują"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Pasirinkti naują iš failų"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Pašalinti paveikslėlį"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Arba png arba jpg. Geriausia kvadratinį, bet galėsite jį apkarpyti."
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Atšaukti"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Pasirinkite profilio paveiksliuką"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/lt_LT/user_ldap.po b/l10n/lt_LT/user_ldap.po
index 5baac49ff3..6649922b22 100644
--- a/l10n/lt_LT/user_ldap.po
+++ b/l10n/lt_LT/user_ldap.po
@@ -3,13 +3,14 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Liudas <liudas@aksioma.lt>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:47-0400\n"
-"PO-Revision-Date: 2013-09-12 21:00+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:05+0000\n"
+"Last-Translator: Liudas Ališauskas <liudas.alisauskas@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"
@@ -19,11 +20,11 @@ msgstr ""
 
 #: ajax/clearMappings.php:34
 msgid "Failed to clear the mappings."
-msgstr ""
+msgstr "Nepavyko išvalyti sąsajų."
 
 #: ajax/deleteConfiguration.php:34
 msgid "Failed to delete the server configuration"
-msgstr ""
+msgstr "Nepavyko pašalinti serverio konfigūracijos"
 
 #: ajax/testConfiguration.php:36
 msgid "The configuration is valid and the connection could be established!"
@@ -51,7 +52,7 @@ msgstr ""
 
 #: js/settings.js:83
 msgid "Keep settings?"
-msgstr ""
+msgstr "Išlaikyti nustatymus?"
 
 #: js/settings.js:97
 msgid "Cannot add server configuration"
@@ -59,11 +60,11 @@ msgstr ""
 
 #: js/settings.js:111
 msgid "mappings cleared"
-msgstr ""
+msgstr "susiejimai išvalyti"
 
 #: js/settings.js:112
 msgid "Success"
-msgstr ""
+msgstr "Sėkmingai"
 
 #: js/settings.js:117
 msgid "Error"
@@ -71,19 +72,19 @@ msgstr "Klaida"
 
 #: js/settings.js:141
 msgid "Connection test succeeded"
-msgstr ""
+msgstr "Ryšio patikrinimas pavyko"
 
 #: js/settings.js:146
 msgid "Connection test failed"
-msgstr ""
+msgstr "Ryšio patikrinimas nepavyko"
 
 #: js/settings.js:156
 msgid "Do you really want to delete the current Server Configuration?"
-msgstr ""
+msgstr "Ar tikrai norite ištrinti dabartinę serverio konfigūraciją?"
 
 #: js/settings.js:157
 msgid "Confirm Deletion"
-msgstr ""
+msgstr "Patvirtinkite trynimą"
 
 #: templates/settings.php:9
 msgid ""
@@ -100,11 +101,11 @@ msgstr ""
 
 #: templates/settings.php:16
 msgid "Server configuration"
-msgstr ""
+msgstr "Serverio konfigūravimas"
 
 #: templates/settings.php:32
 msgid "Add Server Configuration"
-msgstr ""
+msgstr "Pridėti serverio konfigūraciją"
 
 #: templates/settings.php:37
 msgid "Host"
@@ -117,11 +118,11 @@ msgstr ""
 
 #: templates/settings.php:40
 msgid "Base DN"
-msgstr ""
+msgstr "Bazinis DN"
 
 #: templates/settings.php:41
 msgid "One Base DN per line"
-msgstr ""
+msgstr "Vienas bazinis DN eilutėje"
 
 #: templates/settings.php:42
 msgid "You can specify Base DN for users and groups in the Advanced tab"
@@ -129,7 +130,7 @@ msgstr ""
 
 #: templates/settings.php:44
 msgid "User DN"
-msgstr ""
+msgstr "Naudotojas DN"
 
 #: templates/settings.php:46
 msgid ""
@@ -144,11 +145,11 @@ msgstr "Slaptažodis"
 
 #: templates/settings.php:50
 msgid "For anonymous access, leave DN and Password empty."
-msgstr ""
+msgstr "Anoniminiam prisijungimui, palikite DN ir Slaptažodis laukus tuščius."
 
 #: templates/settings.php:51
 msgid "User Login Filter"
-msgstr ""
+msgstr "Naudotojo prisijungimo filtras"
 
 #: templates/settings.php:54
 #, php-format
@@ -159,7 +160,7 @@ msgstr ""
 
 #: templates/settings.php:55
 msgid "User List Filter"
-msgstr ""
+msgstr "Naudotojo sąrašo filtras"
 
 #: templates/settings.php:58
 msgid ""
@@ -179,15 +180,15 @@ msgstr ""
 
 #: templates/settings.php:66
 msgid "Connection Settings"
-msgstr ""
+msgstr "Ryšio nustatymai"
 
 #: templates/settings.php:68
 msgid "Configuration Active"
-msgstr ""
+msgstr "Konfigūracija aktyvi"
 
 #: templates/settings.php:68
 msgid "When unchecked, this configuration will be skipped."
-msgstr ""
+msgstr "Kai nepažymėta, ši konfigūracija bus praleista."
 
 #: templates/settings.php:69
 msgid "Port"
@@ -195,7 +196,7 @@ msgstr "Prievadas"
 
 #: templates/settings.php:70
 msgid "Backup (Replica) Host"
-msgstr ""
+msgstr "Atsarginės kopijos (Replica) mazgas"
 
 #: templates/settings.php:70
 msgid ""
@@ -205,15 +206,15 @@ msgstr ""
 
 #: templates/settings.php:71
 msgid "Backup (Replica) Port"
-msgstr ""
+msgstr "Atsarginės kopijos (Replica) prievadas"
 
 #: templates/settings.php:72
 msgid "Disable Main Server"
-msgstr ""
+msgstr "Išjungti pagrindinį serverį"
 
 #: templates/settings.php:72
 msgid "Only connect to the replica server."
-msgstr ""
+msgstr "Tik prisijungti prie reprodukcinio (replica) serverio."
 
 #: templates/settings.php:73
 msgid "Use TLS"
@@ -248,7 +249,7 @@ msgstr ""
 
 #: templates/settings.php:78
 msgid "Directory Settings"
-msgstr ""
+msgstr "Katalogo nustatymai"
 
 #: templates/settings.php:80
 msgid "User Display Name Field"
@@ -260,7 +261,7 @@ msgstr ""
 
 #: templates/settings.php:81
 msgid "Base User Tree"
-msgstr ""
+msgstr "Bazinis naudotojo medis"
 
 #: templates/settings.php:81
 msgid "One User Base DN per line"
@@ -268,7 +269,7 @@ msgstr ""
 
 #: templates/settings.php:82
 msgid "User Search Attributes"
-msgstr ""
+msgstr "Naudotojo paieškos atributai"
 
 #: templates/settings.php:82 templates/settings.php:85
 msgid "Optional; one attribute per line"
@@ -284,7 +285,7 @@ msgstr ""
 
 #: templates/settings.php:84
 msgid "Base Group Tree"
-msgstr ""
+msgstr "Bazinis grupės medis"
 
 #: templates/settings.php:84
 msgid "One Group Base DN per line"
@@ -292,35 +293,35 @@ msgstr ""
 
 #: templates/settings.php:85
 msgid "Group Search Attributes"
-msgstr ""
+msgstr "Grupės paieškos atributai"
 
 #: templates/settings.php:86
 msgid "Group-Member association"
-msgstr ""
+msgstr "Grupės-Nario sąsaja"
 
 #: templates/settings.php:88
 msgid "Special Attributes"
-msgstr ""
+msgstr "Specialūs atributai"
 
 #: templates/settings.php:90
 msgid "Quota Field"
-msgstr ""
+msgstr "Kvotos laukas"
 
 #: templates/settings.php:91
 msgid "Quota Default"
-msgstr ""
+msgstr "Numatyta kvota"
 
 #: templates/settings.php:91
 msgid "in bytes"
-msgstr ""
+msgstr "baitais"
 
 #: templates/settings.php:92
 msgid "Email Field"
-msgstr ""
+msgstr "El. pašto laukas"
 
 #: templates/settings.php:93
 msgid "User Home Folder Naming Rule"
-msgstr ""
+msgstr "Naudotojo namų aplanko pavadinimo taisyklė"
 
 #: templates/settings.php:93
 msgid ""
@@ -330,7 +331,7 @@ msgstr ""
 
 #: templates/settings.php:98
 msgid "Internal Username"
-msgstr ""
+msgstr "Vidinis naudotojo vardas"
 
 #: templates/settings.php:99
 msgid ""
@@ -350,11 +351,11 @@ msgstr ""
 
 #: templates/settings.php:100
 msgid "Internal Username Attribute:"
-msgstr ""
+msgstr "Vidinis naudotojo vardo atributas:"
 
 #: templates/settings.php:101
 msgid "Override UUID detection"
-msgstr ""
+msgstr "Perrašyti UUID aptikimą"
 
 #: templates/settings.php:102
 msgid ""
@@ -369,11 +370,11 @@ msgstr ""
 
 #: templates/settings.php:103
 msgid "UUID Attribute:"
-msgstr ""
+msgstr "UUID atributas:"
 
 #: templates/settings.php:104
 msgid "Username-LDAP User Mapping"
-msgstr ""
+msgstr "Naudotojo vardo - LDAP naudotojo sąsaja"
 
 #: templates/settings.php:105
 msgid ""
@@ -391,15 +392,15 @@ msgstr ""
 
 #: templates/settings.php:106
 msgid "Clear Username-LDAP User Mapping"
-msgstr ""
+msgstr "Išvalyti naudotojo vardo - LDAP naudotojo sąsają"
 
 #: templates/settings.php:106
 msgid "Clear Groupname-LDAP Group Mapping"
-msgstr ""
+msgstr "Išvalyti grupės pavadinimo - LDAP naudotojo sąsają"
 
 #: templates/settings.php:108
 msgid "Test Configuration"
-msgstr ""
+msgstr "Bandyti konfigūraciją"
 
 #: templates/settings.php:108
 msgid "Help"
diff --git a/l10n/lv/settings.po b/l10n/lv/settings.po
index f04b2af573..9f3e95c717 100644
--- a/l10n/lv/settings.po
+++ b/l10n/lv/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
 "MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgid "Unable to load list from App Store"
 msgstr "Nevar lejupielādēt sarakstu no lietotņu veikala"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Autentifikācijas kļūda"
 
@@ -85,6 +85,39 @@ msgstr "Nevar izņemt lietotāju no grupas %s"
 msgid "Couldn't update app."
 msgstr "Nevarēja atjaunināt lietotni."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Atjaunināt uz {appversion}"
@@ -129,15 +162,15 @@ msgstr "Atjaunināt"
 msgid "Updated"
 msgstr "Atjaunināta"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Atšifrēju failus... Uzgaidiet tas var ilgt kādu laiku."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Saglabā..."
 
diff --git a/l10n/mk/settings.po b/l10n/mk/settings.po
index 38fa0d44ed..78ab0823ab 100644
--- a/l10n/mk/settings.po
+++ b/l10n/mk/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr "Неможам да вчитам листа од App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Грешка во автентикација"
 
@@ -84,6 +84,39 @@ msgstr "Неможе да избришам корисник од група %s"
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr "Ажурирај"
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Снимам..."
 
@@ -460,7 +493,7 @@ msgstr "Пополни ја адресата за е-пошта за да мож
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Фотографија за профил"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/ml_IN/settings.po b/l10n/ml_IN/settings.po
index 860543d098..eacef25fc6 100644
--- a/l10n/ml_IN/settings.po
+++ b/l10n/ml_IN/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Malayalam (India) (http://www.transifex.com/projects/p/owncloud/language/ml_IN/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/ms_MY/settings.po b/l10n/ms_MY/settings.po
index 96dcca28a9..f4ab52b45c 100644
--- a/l10n/ms_MY/settings.po
+++ b/l10n/ms_MY/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Ralat pengesahan"
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr "Kemaskini"
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Simpan..."
 
@@ -460,7 +493,7 @@ msgstr "Isi alamat emel anda untuk membolehkan pemulihan kata laluan"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Gambar profil"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/my_MM/settings.po b/l10n/my_MM/settings.po
index 985e6ce0a4..f8cd38d9c5 100644
--- a/l10n/my_MM/settings.po
+++ b/l10n/my_MM/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "ခွင့်ပြုချက်မအောင်မြင်"
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/nb_NO/settings.po b/l10n/nb_NO/settings.po
index ff63353afc..55c24f51b9 100644
--- a/l10n/nb_NO/settings.po
+++ b/l10n/nb_NO/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -24,7 +24,7 @@ msgid "Unable to load list from App Store"
 msgstr "Lasting av liste fra App Store feilet."
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Autentiseringsfeil"
 
@@ -86,6 +86,39 @@ msgstr "Kan ikke slette bruker fra gruppen %s"
 msgid "Couldn't update app."
 msgstr "Kunne ikke oppdatere app."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Oppdater til {appversion}"
@@ -130,15 +163,15 @@ msgstr "Oppdater"
 msgid "Updated"
 msgstr "Oppdatert"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Lagrer..."
 
@@ -462,7 +495,7 @@ msgstr "Oppi epostadressen du vil tilbakestille passordet for"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profilbilde"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/ne/settings.po b/l10n/ne/settings.po
index c3ea7fab11..0a5f4dc015 100644
--- a/l10n/ne/settings.po
+++ b/l10n/ne/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Nepali (http://www.transifex.com/projects/p/owncloud/language/ne/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/nl/core.po b/l10n/nl/core.po
index 5212bcfb80..42fe772e22 100644
--- a/l10n/nl/core.po
+++ b/l10n/nl/core.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:05+0000\n"
+"Last-Translator: André Koot <meneer@tken.net>\n"
 "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -31,28 +31,28 @@ msgstr "groep"
 
 #: ajax/update.php:11
 msgid "Turned on maintenance mode"
-msgstr ""
+msgstr "Onderhoudsmodus ingeschakeld"
 
 #: ajax/update.php:14
 msgid "Turned off maintenance mode"
-msgstr ""
+msgstr "Onderhoudsmodus uitgeschakeld"
 
 #: ajax/update.php:17
 msgid "Updated database"
-msgstr ""
+msgstr "Database bijgewerkt"
 
 #: ajax/update.php:20
 msgid "Updating filecache, this may take really long..."
-msgstr ""
+msgstr "Bijwerken bestandscache. Dit kan even duren..."
 
 #: ajax/update.php:23
 msgid "Updated filecache"
-msgstr ""
+msgstr "Bestandscache bijgewerkt"
 
 #: ajax/update.php:26
 #, php-format
 msgid "... %d%% done ..."
-msgstr ""
+msgstr "... %d%% gereed ..."
 
 #: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
 msgid "Category type not provided."
@@ -95,23 +95,23 @@ msgstr "Verwijderen %s van favorieten is mislukt."
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "Geen afbeelding of bestand opgegeven"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Onbekend bestandsformaat"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Ongeldige afbeelding"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "Geen tijdelijke profielafbeelding beschikbaar. Probeer het opnieuw"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "Geen bijsnijdingsgegevens opgegeven"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -251,7 +251,7 @@ msgstr "Kies"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "Fout bij laden bestandenselecteur sjabloon: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -267,7 +267,7 @@ msgstr "Ok"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr ""
+msgstr "Fout bij laden berichtensjabloon: {error}"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/nl/lib.po b/l10n/nl/lib.po
index 2c3f2413cd..918f3b09a7 100644
--- a/l10n/nl/lib.po
+++ b/l10n/nl/lib.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:05+0000\n"
+"Last-Translator: André Koot <meneer@tken.net>\n"
 "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -25,7 +25,7 @@ msgstr ""
 msgid ""
 "App \"%s\" can't be installed because it is not compatible with this version"
 " of ownCloud."
-msgstr ""
+msgstr "App \"%s\" kan niet worden geïnstalleerd omdat die niet compatible is met deze versie van ownCloud."
 
 #: app.php:250
 msgid "No app name specified"
@@ -58,15 +58,15 @@ msgstr "Upgrade \"%s\" mislukt."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "Maatwerk profielafbeelding werkt nog niet met versleuteling"
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Onbekend bestandsformaat"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Ongeldige afbeelding"
 
 #: defaults.php:35
 msgid "web services under your control"
@@ -101,59 +101,59 @@ msgstr "Download de bestanden in kleinere brokken, appart of vraag uw administra
 
 #: installer.php:63
 msgid "No source specified when installing app"
-msgstr ""
+msgstr "Geen bron opgegeven bij installatie van de app"
 
 #: installer.php:70
 msgid "No href specified when installing app from http"
-msgstr ""
+msgstr "Geen href opgegeven bij installeren van de app vanaf http"
 
 #: installer.php:75
 msgid "No path specified when installing app from local file"
-msgstr ""
+msgstr "Geen pad opgegeven bij installeren van de app vanaf een lokaal bestand"
 
 #: installer.php:89
 #, php-format
 msgid "Archives of type %s are not supported"
-msgstr ""
+msgstr "Archiefbestanden van type %s niet ondersteund"
 
 #: installer.php:103
 msgid "Failed to open archive when installing app"
-msgstr ""
+msgstr "Kon archiefbestand bij installatie van de app niet openen"
 
 #: installer.php:125
 msgid "App does not provide an info.xml file"
-msgstr ""
+msgstr "De app heeft geen info.xml bestand"
 
 #: installer.php:131
 msgid "App can't be installed because of not allowed code in the App"
-msgstr ""
+msgstr "De app kan niet worden geïnstalleerd wegens onjuiste code in de app"
 
 #: installer.php:140
 msgid ""
 "App can't be installed because it is not compatible with this version of "
 "ownCloud"
-msgstr ""
+msgstr "De app kan niet worden geïnstalleerd omdat die niet compatible is met deze versie van ownCloud"
 
 #: installer.php:146
 msgid ""
 "App can't be installed because it contains the <shipped>true</shipped> tag "
 "which is not allowed for non shipped apps"
-msgstr ""
+msgstr "De app kan niet worden geïnstallerd omdat het de <shipped>true</shipped> tag bevat die niet is toegestaan voor niet gepubliceerde apps"
 
 #: installer.php:152
 msgid ""
 "App can't be installed because the version in info.xml/version is not the "
 "same as the version reported from the app store"
-msgstr ""
+msgstr "De app kan niet worden geïnstalleerd omdat de versie in info.xml/version niet dezelfde is als de versie zoals die in de app store staat vermeld"
 
 #: installer.php:162
 msgid "App directory already exists"
-msgstr ""
+msgstr "App directory bestaat al"
 
 #: installer.php:175
 #, php-format
 msgid "Can't create app folder. Please fix permissions. %s"
-msgstr ""
+msgstr "Kan de app map niet aanmaken, Herstel de permissies. %s"
 
 #: json.php:28
 msgid "Application is not enabled"
diff --git a/l10n/nl/settings.po b/l10n/nl/settings.po
index 96f0a92125..1baf2c7cab 100644
--- a/l10n/nl/settings.po
+++ b/l10n/nl/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
 "MIME-Version: 1.0\n"
@@ -26,7 +26,7 @@ msgid "Unable to load list from App Store"
 msgstr "Kan de lijst niet van de App store laden"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Authenticatie fout"
 
@@ -88,6 +88,39 @@ msgstr "Niet in staat om gebruiker te verwijderen uit groep %s"
 msgid "Couldn't update app."
 msgstr "Kon de app niet bijwerken."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Bijwerken naar {appversion}"
@@ -132,15 +165,15 @@ msgstr "Bijwerken"
 msgid "Updated"
 msgstr "Bijgewerkt"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Kies een profielafbeelding"
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Bestanden worden gedecodeerd... Even geduld alstublieft, dit kan even duren."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Opslaan"
 
@@ -464,31 +497,31 @@ msgstr "Vul een mailadres in om je wachtwoord te kunnen herstellen"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profielafbeelding"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Upload een nieuwe"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Selecteer een nieuwe vanuit bestanden"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Verwijder afbeelding"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Of png, of jpg. Bij voorkeur vierkant, maar u kunt bijsnijden."
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Afbreken"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Kies als profielafbeelding"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/nn_NO/settings.po b/l10n/nn_NO/settings.po
index 50ceb17f76..8fa98b0bea 100644
--- a/l10n/nn_NO/settings.po
+++ b/l10n/nn_NO/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -25,7 +25,7 @@ msgid "Unable to load list from App Store"
 msgstr "Klarer ikkje å lasta inn liste fra app-butikken"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Autentiseringsfeil"
 
@@ -87,6 +87,39 @@ msgstr "Klarte ikkje fjerna brukaren frå gruppa %s"
 msgid "Couldn't update app."
 msgstr "Klarte ikkje oppdatera programmet."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Oppdater til {appversion}"
@@ -131,15 +164,15 @@ msgstr "Oppdater"
 msgid "Updated"
 msgstr "Oppdatert"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Dekrypterer filer … Ver venleg og vent, dette kan ta ei stund."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Lagrar …"
 
diff --git a/l10n/nqo/settings.po b/l10n/nqo/settings.po
index 8faee77648..4c9ef40f60 100644
--- a/l10n/nqo/settings.po
+++ b/l10n/nqo/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: N'ko (http://www.transifex.com/projects/p/owncloud/language/nqo/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/oc/settings.po b/l10n/oc/settings.po
index bbc9fecb0b..ed8d2ec20a 100644
--- a/l10n/oc/settings.po
+++ b/l10n/oc/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr "Pas possible de cargar la tièra dempuèi App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Error d'autentificacion"
 
@@ -84,6 +84,39 @@ msgstr "Pas capable de tira un usancièr del grop %s"
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Enregistra..."
 
diff --git a/l10n/pa/core.po b/l10n/pa/core.po
new file mode 100644
index 0000000000..695b684902
--- /dev/null
+++ b/l10n/pa/core.po
@@ -0,0 +1,672 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+# A S Alam <apreet.alam@gmail.com>, 2013
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:14+0000\n"
+"Last-Translator: A S Alam <apreet.alam@gmail.com>\n"
+"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pa\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/share.php:97
+#, php-format
+msgid "%s shared »%s« with you"
+msgstr ""
+
+#: ajax/share.php:227
+msgid "group"
+msgstr ""
+
+#: ajax/update.php:11
+msgid "Turned on maintenance mode"
+msgstr ""
+
+#: ajax/update.php:14
+msgid "Turned off maintenance mode"
+msgstr ""
+
+#: ajax/update.php:17
+msgid "Updated database"
+msgstr ""
+
+#: ajax/update.php:20
+msgid "Updating filecache, this may take really long..."
+msgstr ""
+
+#: ajax/update.php:23
+msgid "Updated filecache"
+msgstr ""
+
+#: ajax/update.php:26
+#, php-format
+msgid "... %d%% done ..."
+msgstr ""
+
+#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
+msgid "Category type not provided."
+msgstr ""
+
+#: ajax/vcategories/add.php:30
+msgid "No category to add?"
+msgstr ""
+
+#: ajax/vcategories/add.php:37
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
+
+#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
+#: ajax/vcategories/favorites.php:24
+#: ajax/vcategories/removeFromFavorites.php:26
+msgid "Object type not provided."
+msgstr ""
+
+#: ajax/vcategories/addToFavorites.php:30
+#: ajax/vcategories/removeFromFavorites.php:30
+#, php-format
+msgid "%s ID not provided."
+msgstr ""
+
+#: ajax/vcategories/addToFavorites.php:35
+#, php-format
+msgid "Error adding %s to favorites."
+msgstr ""
+
+#: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: ajax/vcategories/removeFromFavorites.php:35
+#, php-format
+msgid "Error removing %s from favorites."
+msgstr ""
+
+#: avatar/controller.php:62
+msgid "No image or file provided"
+msgstr ""
+
+#: avatar/controller.php:81
+msgid "Unknown filetype"
+msgstr ""
+
+#: avatar/controller.php:85
+msgid "Invalid image"
+msgstr ""
+
+#: avatar/controller.php:115 avatar/controller.php:142
+msgid "No temporary profile picture available, try again"
+msgstr ""
+
+#: avatar/controller.php:135
+msgid "No crop data provided"
+msgstr ""
+
+#: js/config.php:32
+msgid "Sunday"
+msgstr "ਐਤਵਾਰ"
+
+#: js/config.php:33
+msgid "Monday"
+msgstr "ਸੋਮਵਾਰ"
+
+#: js/config.php:34
+msgid "Tuesday"
+msgstr "ਮੰਗਲਵਾਰ"
+
+#: js/config.php:35
+msgid "Wednesday"
+msgstr "ਬੁੱਧਵਾਰ"
+
+#: js/config.php:36
+msgid "Thursday"
+msgstr "ਵੀਰਵਾਰ"
+
+#: js/config.php:37
+msgid "Friday"
+msgstr "ਸ਼ੁੱਕਰਵਾਰ"
+
+#: js/config.php:38
+msgid "Saturday"
+msgstr "ਸ਼ਨਿੱਚਰਵਾਰ"
+
+#: js/config.php:43
+msgid "January"
+msgstr "ਜਨਵਰੀ"
+
+#: js/config.php:44
+msgid "February"
+msgstr "ਫਰਵਰੀ"
+
+#: js/config.php:45
+msgid "March"
+msgstr "ਮਾਰਚ"
+
+#: js/config.php:46
+msgid "April"
+msgstr "ਅਪਰੈ"
+
+#: js/config.php:47
+msgid "May"
+msgstr "ਮਈ"
+
+#: js/config.php:48
+msgid "June"
+msgstr "ਜੂਨ"
+
+#: js/config.php:49
+msgid "July"
+msgstr "ਜੁਲਾਈ"
+
+#: js/config.php:50
+msgid "August"
+msgstr "ਅਗਸਤ"
+
+#: js/config.php:51
+msgid "September"
+msgstr "ਸਤੰਬ"
+
+#: js/config.php:52
+msgid "October"
+msgstr "ਅਕਤੂਬਰ"
+
+#: js/config.php:53
+msgid "November"
+msgstr "ਨਵੰਬ"
+
+#: js/config.php:54
+msgid "December"
+msgstr "ਦਸੰਬਰ"
+
+#: js/js.js:387
+msgid "Settings"
+msgstr "ਸੈਟਿੰਗ"
+
+#: js/js.js:853
+msgid "seconds ago"
+msgstr "ਸਕਿੰਟ ਪਹਿਲਾਂ"
+
+#: js/js.js:854
+msgid "%n minute ago"
+msgid_plural "%n minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/js.js:855
+msgid "%n hour ago"
+msgid_plural "%n hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/js.js:856
+msgid "today"
+msgstr "ਅੱਜ"
+
+#: js/js.js:857
+msgid "yesterday"
+msgstr "ਕੱਲ੍ਹ"
+
+#: js/js.js:858
+msgid "%n day ago"
+msgid_plural "%n days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/js.js:859
+msgid "last month"
+msgstr "ਪਿਛਲੇ ਮਹੀਨੇ"
+
+#: js/js.js:860
+msgid "%n month ago"
+msgid_plural "%n months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/js.js:861
+msgid "months ago"
+msgstr "ਮਹੀਨੇ ਪਹਿਲਾਂ"
+
+#: js/js.js:862
+msgid "last year"
+msgstr "ਪਿਛਲੇ ਸਾਲ"
+
+#: js/js.js:863
+msgid "years ago"
+msgstr "ਸਾਲਾਂ ਪਹਿਲਾਂ"
+
+#: js/oc-dialogs.js:123
+msgid "Choose"
+msgstr "ਚੁਣੋ"
+
+#: js/oc-dialogs.js:146
+msgid "Error loading file picker template: {error}"
+msgstr ""
+
+#: js/oc-dialogs.js:172
+msgid "Yes"
+msgstr "ਹਾਂ"
+
+#: js/oc-dialogs.js:182
+msgid "No"
+msgstr "ਨਹੀਂ"
+
+#: js/oc-dialogs.js:199
+msgid "Ok"
+msgstr "ਠੀਕ ਹੈ"
+
+#: js/oc-dialogs.js:219
+msgid "Error loading message template: {error}"
+msgstr ""
+
+#: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
+#: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
+msgid "The object type is not specified."
+msgstr ""
+
+#: js/oc-vcategories.js:14 js/oc-vcategories.js:80 js/oc-vcategories.js:95
+#: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
+#: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
+#: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
+#: js/share.js:645 js/share.js:657
+msgid "Error"
+msgstr "ਗਲ"
+
+#: js/oc-vcategories.js:179
+msgid "The app name is not specified."
+msgstr ""
+
+#: js/oc-vcategories.js:194
+msgid "The required file {file} is not installed!"
+msgstr ""
+
+#: js/share.js:30 js/share.js:45 js/share.js:87
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:90
+msgid "Share"
+msgstr "ਸਾਂਝਾ ਕਰੋ"
+
+#: js/share.js:131 js/share.js:685
+msgid "Error while sharing"
+msgstr ""
+
+#: js/share.js:142
+msgid "Error while unsharing"
+msgstr ""
+
+#: js/share.js:149
+msgid "Error while changing permissions"
+msgstr ""
+
+#: js/share.js:158
+msgid "Shared with you and the group {group} by {owner}"
+msgstr ""
+
+#: js/share.js:160
+msgid "Shared with you by {owner}"
+msgstr ""
+
+#: js/share.js:183
+msgid "Share with"
+msgstr ""
+
+#: js/share.js:188
+msgid "Share with link"
+msgstr ""
+
+#: js/share.js:191
+msgid "Password protect"
+msgstr ""
+
+#: js/share.js:193 templates/installation.php:57 templates/login.php:26
+msgid "Password"
+msgstr "ਪਾਸਵਰ"
+
+#: js/share.js:198
+msgid "Allow Public Upload"
+msgstr ""
+
+#: js/share.js:202
+msgid "Email link to person"
+msgstr ""
+
+#: js/share.js:203
+msgid "Send"
+msgstr "ਭੇਜੋ"
+
+#: js/share.js:208
+msgid "Set expiration date"
+msgstr ""
+
+#: js/share.js:209
+msgid "Expiration date"
+msgstr ""
+
+#: js/share.js:242
+msgid "Share via email:"
+msgstr ""
+
+#: js/share.js:245
+msgid "No people found"
+msgstr ""
+
+#: js/share.js:283
+msgid "Resharing is not allowed"
+msgstr ""
+
+#: js/share.js:319
+msgid "Shared in {item} with {user}"
+msgstr ""
+
+#: js/share.js:340
+msgid "Unshare"
+msgstr ""
+
+#: js/share.js:352
+msgid "can edit"
+msgstr ""
+
+#: js/share.js:354
+msgid "access control"
+msgstr ""
+
+#: js/share.js:357
+msgid "create"
+msgstr ""
+
+#: js/share.js:360
+msgid "update"
+msgstr ""
+
+#: js/share.js:363
+msgid "delete"
+msgstr ""
+
+#: js/share.js:366
+msgid "share"
+msgstr ""
+
+#: js/share.js:400 js/share.js:632
+msgid "Password protected"
+msgstr ""
+
+#: js/share.js:645
+msgid "Error unsetting expiration date"
+msgstr ""
+
+#: js/share.js:657
+msgid "Error setting expiration date"
+msgstr ""
+
+#: js/share.js:672
+msgid "Sending ..."
+msgstr ""
+
+#: js/share.js:683
+msgid "Email sent"
+msgstr ""
+
+#: js/update.js:17
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:21
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
+#: lostpassword/controller.php:62
+#, php-format
+msgid "%s password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:2
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:4
+msgid ""
+"The link to reset your password has been sent to your email.<br>If you do "
+"not receive it within a reasonable amount of time, check your spam/junk "
+"folders.<br>If it is not there ask your local administrator ."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:12
+msgid "Request failed!<br>Did you make sure your email/username was right?"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:15
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:18 templates/installation.php:51
+#: templates/login.php:19
+msgid "Username"
+msgstr "ਯੂਜ਼ਰ-ਨਾਂ"
+
+#: lostpassword/templates/lostpassword.php:22
+msgid ""
+"Your files are encrypted. If you haven't enabled the recovery key, there "
+"will be no way to get your data back after your password is reset. If you "
+"are not sure what to do, please contact your administrator before you "
+"continue. Do you really want to continue?"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:24
+msgid "Yes, I really want to reset my password now"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:27
+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 templates/layout.user.php:108
+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:15
+msgid "Cloud not found"
+msgstr ""
+
+#: templates/altmail.php:2
+#, php-format
+msgid ""
+"Hey there,\n"
+"\n"
+"just letting you know that %s shared %s with you.\n"
+"View it: %s\n"
+"\n"
+"Cheers!"
+msgstr ""
+
+#: templates/edit_categories_dialog.php:4
+msgid "Edit categories"
+msgstr ""
+
+#: templates/edit_categories_dialog.php:16
+msgid "Add"
+msgstr ""
+
+#: templates/installation.php:24 templates/installation.php:31
+#: templates/installation.php:38
+msgid "Security Warning"
+msgstr "ਸੁਰੱਖਿਆ ਚੇਤਾਵਨੀ"
+
+#: templates/installation.php:25
+msgid "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)"
+msgstr ""
+
+#: templates/installation.php:26
+#, php-format
+msgid "Please update your PHP installation to use %s securely."
+msgstr ""
+
+#: templates/installation.php:32
+msgid ""
+"No secure random number generator is available, please enable the PHP "
+"OpenSSL extension."
+msgstr ""
+
+#: templates/installation.php:33
+msgid ""
+"Without a secure random number generator an attacker may be able to predict "
+"password reset tokens and take over your account."
+msgstr ""
+
+#: templates/installation.php:39
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
+#: templates/installation.php:41
+#, php-format
+msgid ""
+"For information how to properly configure your server, please see the <a "
+"href=\"%s\" target=\"_blank\">documentation</a>."
+msgstr ""
+
+#: templates/installation.php:47
+msgid "Create an <strong>admin account</strong>"
+msgstr ""
+
+#: templates/installation.php:65
+msgid "Advanced"
+msgstr ""
+
+#: templates/installation.php:67
+msgid "Data folder"
+msgstr ""
+
+#: templates/installation.php:77
+msgid "Configure the database"
+msgstr ""
+
+#: templates/installation.php:82 templates/installation.php:94
+#: templates/installation.php:105 templates/installation.php:116
+#: templates/installation.php:128
+msgid "will be used"
+msgstr ""
+
+#: templates/installation.php:140
+msgid "Database user"
+msgstr ""
+
+#: templates/installation.php:147
+msgid "Database password"
+msgstr ""
+
+#: templates/installation.php:152
+msgid "Database name"
+msgstr ""
+
+#: templates/installation.php:160
+msgid "Database tablespace"
+msgstr ""
+
+#: templates/installation.php:167
+msgid "Database host"
+msgstr ""
+
+#: templates/installation.php:175
+msgid "Finish setup"
+msgstr ""
+
+#: templates/layout.user.php:41
+#, php-format
+msgid "%s is available. Get more information on how to update."
+msgstr ""
+
+#: templates/layout.user.php:69
+msgid "Log out"
+msgstr ""
+
+#: templates/login.php:9
+msgid "Automatic logon rejected!"
+msgstr ""
+
+#: templates/login.php:10
+msgid ""
+"If you did not change your password recently, your account may be "
+"compromised!"
+msgstr ""
+
+#: templates/login.php:12
+msgid "Please change your password to secure your account again."
+msgstr ""
+
+#: templates/login.php:32
+msgid "Lost your password?"
+msgstr ""
+
+#: templates/login.php:37
+msgid "remember"
+msgstr ""
+
+#: templates/login.php:39
+msgid "Log in"
+msgstr ""
+
+#: templates/login.php:45
+msgid "Alternative Logins"
+msgstr ""
+
+#: templates/mail.php:15
+#, php-format
+msgid ""
+"Hey there,<br><br>just letting you know that %s shared »%s« with you.<br><a "
+"href=\"%s\">View it!</a><br><br>Cheers!"
+msgstr ""
+
+#: templates/update.php:3
+#, php-format
+msgid "Updating ownCloud to version %s, this may take a while."
+msgstr ""
diff --git a/l10n/pa/files.po b/l10n/pa/files.po
new file mode 100644
index 0000000000..54e0656a99
--- /dev/null
+++ b/l10n/pa/files.po
@@ -0,0 +1,335 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-09-18 11:46-0400\n"
+"PO-Revision-Date: 2013-09-17 13:20+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pa\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/move.php:17
+#, php-format
+msgid "Could not move %s - File with this name already exists"
+msgstr ""
+
+#: ajax/move.php:27 ajax/move.php:30
+#, php-format
+msgid "Could not move %s"
+msgstr ""
+
+#: ajax/upload.php:16 ajax/upload.php:45
+msgid "Unable to set upload directory."
+msgstr ""
+
+#: ajax/upload.php:22
+msgid "Invalid Token"
+msgstr ""
+
+#: ajax/upload.php:59
+msgid "No file was uploaded. Unknown error"
+msgstr ""
+
+#: ajax/upload.php:66
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/upload.php:67
+msgid ""
+"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
+msgstr ""
+
+#: ajax/upload.php:69
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/upload.php:70
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/upload.php:71
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/upload.php:72
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/upload.php:73
+msgid "Failed to write to disk"
+msgstr ""
+
+#: ajax/upload.php:91
+msgid "Not enough storage available"
+msgstr ""
+
+#: ajax/upload.php:109
+msgid "Upload failed"
+msgstr "ਅੱਪਲੋਡ ਫੇਲ੍ਹ ਹੈ"
+
+#: ajax/upload.php:127
+msgid "Invalid directory."
+msgstr ""
+
+#: appinfo/app.php:12
+msgid "Files"
+msgstr "ਫਾਇਲਾਂ"
+
+#: js/file-upload.js:40
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr ""
+
+#: js/file-upload.js:53
+msgid "Not enough space available"
+msgstr ""
+
+#: js/file-upload.js:91
+msgid "Upload cancelled."
+msgstr ""
+
+#: js/file-upload.js:206
+msgid ""
+"File upload is in progress. Leaving the page now will cancel the upload."
+msgstr ""
+
+#: js/file-upload.js:280
+msgid "URL cannot be empty."
+msgstr ""
+
+#: js/file-upload.js:285 lib/app.php:53
+msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
+msgstr ""
+
+#: js/file-upload.js:317 js/file-upload.js:333 js/files.js:528 js/files.js:566
+msgid "Error"
+msgstr "ਗਲਤੀ"
+
+#: js/fileactions.js:116
+msgid "Share"
+msgstr "ਸਾਂਝਾ ਕਰੋ"
+
+#: js/fileactions.js:126
+msgid "Delete permanently"
+msgstr ""
+
+#: js/fileactions.js:192
+msgid "Rename"
+msgstr "ਨਾਂ ਬਦਲੋ"
+
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:710
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:417 js/filelist.js:419
+msgid "{new_name} already exists"
+msgstr ""
+
+#: js/filelist.js:417 js/filelist.js:419
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:417
+msgid "suggest name"
+msgstr ""
+
+#: js/filelist.js:417 js/filelist.js:419
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:464
+msgid "replaced {new_name} with {old_name}"
+msgstr ""
+
+#: js/filelist.js:464
+msgid "undo"
+msgstr "ਵਾਪਸ"
+
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:597
+msgid "%n folder"
+msgid_plural "%n folders"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/filelist.js:535 js/filelist.js:601 js/files.js:603
+msgid "%n file"
+msgid_plural "%n files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/filelist.js:542
+msgid "{dirs} and {files}"
+msgstr ""
+
+#: js/filelist.js:698
+msgid "Uploading %n file"
+msgid_plural "Uploading %n files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/filelist.js:763
+msgid "files uploading"
+msgstr ""
+
+#: js/files.js:52
+msgid "'.' is an invalid file name."
+msgstr ""
+
+#: js/files.js:56
+msgid "File name cannot be empty."
+msgstr ""
+
+#: js/files.js:64
+msgid ""
+"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
+"allowed."
+msgstr ""
+
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
+
+#: js/files.js:94
+msgid ""
+"Encryption was disabled but your files are still encrypted. Please go to "
+"your personal settings to decrypt your files."
+msgstr ""
+
+#: js/files.js:322
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:579 templates/index.php:61
+msgid "Name"
+msgstr ""
+
+#: js/files.js:580 templates/index.php:73
+msgid "Size"
+msgstr ""
+
+#: js/files.js:581 templates/index.php:75
+msgid "Modified"
+msgstr ""
+
+#: lib/app.php:73
+#, php-format
+msgid "%s could not be renamed"
+msgstr ""
+
+#: lib/helper.php:11 templates/index.php:17
+msgid "Upload"
+msgstr "ਅੱਪਲੋਡ"
+
+#: templates/admin.php:5
+msgid "File handling"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "Maximum upload size"
+msgstr ""
+
+#: templates/admin.php:10
+msgid "max. possible: "
+msgstr ""
+
+#: templates/admin.php:15
+msgid "Needed for multi-file and folder downloads."
+msgstr ""
+
+#: templates/admin.php:17
+msgid "Enable ZIP-download"
+msgstr ""
+
+#: templates/admin.php:20
+msgid "0 is unlimited"
+msgstr ""
+
+#: templates/admin.php:22
+msgid "Maximum input size for ZIP files"
+msgstr ""
+
+#: templates/admin.php:26
+msgid "Save"
+msgstr ""
+
+#: templates/index.php:6
+msgid "New"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:13
+msgid "From link"
+msgstr ""
+
+#: templates/index.php:33
+msgid "Deleted files"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Cancel upload"
+msgstr "ਅੱਪਲੋਡ ਰੱਦ ਕਰੋ"
+
+#: templates/index.php:45
+msgid "You don’t have write permissions here."
+msgstr ""
+
+#: templates/index.php:50
+msgid "Nothing in here. Upload something!"
+msgstr ""
+
+#: templates/index.php:67
+msgid "Download"
+msgstr "ਡਾਊਨਲੋਡ"
+
+#: templates/index.php:80 templates/index.php:81
+msgid "Unshare"
+msgstr ""
+
+#: templates/index.php:86 templates/index.php:87
+msgid "Delete"
+msgstr "ਹਟਾਓ"
+
+#: templates/index.php:100
+msgid "Upload too large"
+msgstr ""
+
+#: templates/index.php:102
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: templates/index.php:107
+msgid "Files are being scanned, please wait."
+msgstr ""
+
+#: templates/index.php:110
+msgid "Current scanning"
+msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/pa/files_encryption.po b/l10n/pa/files_encryption.po
new file mode 100644
index 0000000000..c49ed353a6
--- /dev/null
+++ b/l10n/pa/files_encryption.po
@@ -0,0 +1,176 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-09-18 11:46-0400\n"
+"PO-Revision-Date: 2013-09-17 13:14+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pa\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/adminrecovery.php:29
+msgid "Recovery key successfully enabled"
+msgstr ""
+
+#: ajax/adminrecovery.php:34
+msgid ""
+"Could not enable recovery key. Please check your recovery key password!"
+msgstr ""
+
+#: ajax/adminrecovery.php:48
+msgid "Recovery key successfully disabled"
+msgstr ""
+
+#: ajax/adminrecovery.php:53
+msgid ""
+"Could not disable recovery key. Please check your recovery key password!"
+msgstr ""
+
+#: ajax/changeRecoveryPassword.php:49
+msgid "Password successfully changed."
+msgstr ""
+
+#: ajax/changeRecoveryPassword.php:51
+msgid "Could not change the password. Maybe the old password was not correct."
+msgstr ""
+
+#: ajax/updatePrivateKeyPassword.php:51
+msgid "Private key password successfully updated."
+msgstr ""
+
+#: ajax/updatePrivateKeyPassword.php:53
+msgid ""
+"Could not update the private key password. Maybe the old password was not "
+"correct."
+msgstr ""
+
+#: files/error.php:7
+msgid ""
+"Your private key is not valid! Likely your password was changed outside the "
+"ownCloud system (e.g. your corporate directory). You can update your private"
+" key password in your personal settings to recover access to your encrypted "
+"files."
+msgstr ""
+
+#: hooks/hooks.php:53
+msgid "Missing requirements."
+msgstr ""
+
+#: hooks/hooks.php:54
+msgid ""
+"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL "
+"together with the PHP extension is enabled and configured properly. For now,"
+" the encryption app has been disabled."
+msgstr ""
+
+#: hooks/hooks.php:255
+msgid "Following users are not set up for encryption:"
+msgstr ""
+
+#: js/settings-admin.js:11
+msgid "Saving..."
+msgstr "...ਸੰਭਾਲਿਆ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: templates/invalid_private_key.php:5
+msgid ""
+"Your private key is not valid! Maybe the your password was changed from "
+"outside."
+msgstr ""
+
+#: templates/invalid_private_key.php:7
+msgid "You can unlock your private key in your "
+msgstr ""
+
+#: templates/invalid_private_key.php:7
+msgid "personal settings"
+msgstr ""
+
+#: templates/settings-admin.php:5 templates/settings-personal.php:4
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings-admin.php:10
+msgid ""
+"Enable recovery key (allow to recover users files in case of password loss):"
+msgstr ""
+
+#: templates/settings-admin.php:14
+msgid "Recovery key password"
+msgstr ""
+
+#: templates/settings-admin.php:21 templates/settings-personal.php:54
+msgid "Enabled"
+msgstr ""
+
+#: templates/settings-admin.php:29 templates/settings-personal.php:62
+msgid "Disabled"
+msgstr ""
+
+#: templates/settings-admin.php:34
+msgid "Change recovery key password:"
+msgstr ""
+
+#: templates/settings-admin.php:41
+msgid "Old Recovery key password"
+msgstr ""
+
+#: templates/settings-admin.php:48
+msgid "New Recovery key password"
+msgstr ""
+
+#: templates/settings-admin.php:53
+msgid "Change Password"
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "Your private key password no longer match your log-in password:"
+msgstr ""
+
+#: templates/settings-personal.php:14
+msgid "Set your old private key password to your current log-in password."
+msgstr ""
+
+#: templates/settings-personal.php:16
+msgid ""
+" If you don't remember your old password you can ask your administrator to "
+"recover your files."
+msgstr ""
+
+#: templates/settings-personal.php:24
+msgid "Old log-in password"
+msgstr ""
+
+#: templates/settings-personal.php:30
+msgid "Current log-in password"
+msgstr ""
+
+#: templates/settings-personal.php:35
+msgid "Update Private Key Password"
+msgstr ""
+
+#: templates/settings-personal.php:45
+msgid "Enable password recovery:"
+msgstr ""
+
+#: templates/settings-personal.php:47
+msgid ""
+"Enabling this option will allow you to reobtain access to your encrypted "
+"files in case of password loss"
+msgstr ""
+
+#: templates/settings-personal.php:63
+msgid "File recovery settings updated"
+msgstr ""
+
+#: templates/settings-personal.php:64
+msgid "Could not update file recovery"
+msgstr ""
diff --git a/l10n/pa/files_external.po b/l10n/pa/files_external.po
new file mode 100644
index 0000000000..95660c84db
--- /dev/null
+++ b/l10n/pa/files_external.po
@@ -0,0 +1,123 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:14+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pa\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/dropbox.js:7 js/dropbox.js:28 js/google.js:8 js/google.js:39
+msgid "Access granted"
+msgstr ""
+
+#: js/dropbox.js:30 js/dropbox.js:96 js/dropbox.js:102
+msgid "Error configuring Dropbox storage"
+msgstr ""
+
+#: js/dropbox.js:65 js/google.js:86
+msgid "Grant access"
+msgstr ""
+
+#: js/dropbox.js:101
+msgid "Please provide a valid Dropbox app key and secret."
+msgstr ""
+
+#: js/google.js:42 js/google.js:121
+msgid "Error configuring Google Drive storage"
+msgstr ""
+
+#: lib/config.php:453
+msgid ""
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
+"is not possible. Please ask your system administrator to install it."
+msgstr ""
+
+#: lib/config.php:457
+msgid ""
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
+" of FTP shares is not possible. Please ask your system administrator to "
+"install it."
+msgstr ""
+
+#: lib/config.php:460
+msgid ""
+"<b>Warning:</b> The Curl support in PHP is not enabled or installed. "
+"Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask "
+"your system administrator to install it."
+msgstr ""
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:9 templates/settings.php:28
+msgid "Folder name"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "External storage"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Add storage"
+msgstr ""
+
+#: templates/settings.php:90
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:92
+msgid "Groups"
+msgstr "ਗਰੁੱਪ"
+
+#: templates/settings.php:100
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:113 templates/settings.php:114
+#: templates/settings.php:149 templates/settings.php:150
+msgid "Delete"
+msgstr "ਹਟਾਓ"
+
+#: templates/settings.php:129
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:130
+msgid "Allow users to mount their own external storage"
+msgstr ""
+
+#: templates/settings.php:141
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:159
+msgid "Import Root Certificate"
+msgstr ""
diff --git a/l10n/pa/files_sharing.po b/l10n/pa/files_sharing.po
new file mode 100644
index 0000000000..5857f609be
--- /dev/null
+++ b/l10n/pa/files_sharing.po
@@ -0,0 +1,80 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:20+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pa\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: templates/authenticate.php:4
+msgid "The password is wrong. Try again."
+msgstr ""
+
+#: templates/authenticate.php:7
+msgid "Password"
+msgstr "ਪਾਸਵਰ"
+
+#: templates/authenticate.php:9
+msgid "Submit"
+msgstr ""
+
+#: templates/part.404.php:3
+msgid "Sorry, this link doesn’t seem to work anymore."
+msgstr ""
+
+#: templates/part.404.php:4
+msgid "Reasons might be:"
+msgstr ""
+
+#: templates/part.404.php:6
+msgid "the item was removed"
+msgstr ""
+
+#: templates/part.404.php:7
+msgid "the link expired"
+msgstr ""
+
+#: templates/part.404.php:8
+msgid "sharing is disabled"
+msgstr ""
+
+#: templates/part.404.php:10
+msgid "For more info, please ask the person who sent this link."
+msgstr ""
+
+#: templates/public.php:15
+#, php-format
+msgid "%s shared the folder %s with you"
+msgstr ""
+
+#: templates/public.php:18
+#, php-format
+msgid "%s shared the file %s with you"
+msgstr ""
+
+#: templates/public.php:26 templates/public.php:92
+msgid "Download"
+msgstr "ਡਾਊਨਲੋਡ"
+
+#: templates/public.php:43 templates/public.php:46
+msgid "Upload"
+msgstr "ਅੱਪਲੋਡ"
+
+#: templates/public.php:56
+msgid "Cancel upload"
+msgstr "ਅੱਪਲੋਡ ਰੱਦ ਕਰੋ"
+
+#: templates/public.php:89
+msgid "No preview available for"
+msgstr ""
diff --git a/l10n/pa/files_trashbin.po b/l10n/pa/files_trashbin.po
new file mode 100644
index 0000000000..b6c92523c5
--- /dev/null
+++ b/l10n/pa/files_trashbin.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:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:14+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pa\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:42
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:42
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:102
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:20 js/trash.js:49 js/trash.js:120 js/trash.js:148
+msgid "Error"
+msgstr "ਗਲਤੀ"
+
+#: js/trash.js:37
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:129
+msgid "Delete permanently"
+msgstr ""
+
+#: js/trash.js:190 templates/index.php:21
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:191 templates/index.php:31
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:199
+msgid "%n folder"
+msgid_plural "%n folders"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/trash.js:205
+msgid "%n file"
+msgid_plural "%n files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/trash.php:814 lib/trash.php:816
+msgid "restored"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:24 templates/index.php:26
+msgid "Restore"
+msgstr ""
+
+#: templates/index.php:34 templates/index.php:35
+msgid "Delete"
+msgstr "ਹਟਾਓ"
+
+#: templates/part.breadcrumb.php:9
+msgid "Deleted Files"
+msgstr ""
diff --git a/l10n/pa/files_versions.po b/l10n/pa/files_versions.po
new file mode 100644
index 0000000000..92bc707a3d
--- /dev/null
+++ b/l10n/pa/files_versions.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-16 20:50+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pa\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/rollbackVersion.php:13
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: js/versions.js:7
+msgid "Versions"
+msgstr ""
+
+#: js/versions.js:53
+msgid "Failed to revert {file} to revision {timestamp}."
+msgstr ""
+
+#: js/versions.js:79
+msgid "More versions..."
+msgstr ""
+
+#: js/versions.js:116
+msgid "No other versions available"
+msgstr ""
+
+#: js/versions.js:145
+msgid "Restore"
+msgstr ""
diff --git a/l10n/pa/lib.po b/l10n/pa/lib.po
new file mode 100644
index 0000000000..6747e51ba0
--- /dev/null
+++ b/l10n/pa/lib.po
@@ -0,0 +1,334 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:14+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pa\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: app.php:239
+#, php-format
+msgid ""
+"App \"%s\" can't be installed because it is not compatible with this version"
+" of ownCloud."
+msgstr ""
+
+#: app.php:250
+msgid "No app name specified"
+msgstr ""
+
+#: app.php:361
+msgid "Help"
+msgstr ""
+
+#: app.php:374
+msgid "Personal"
+msgstr ""
+
+#: app.php:385
+msgid "Settings"
+msgstr "ਸੈਟਿੰਗ"
+
+#: app.php:397
+msgid "Users"
+msgstr ""
+
+#: app.php:410
+msgid "Admin"
+msgstr ""
+
+#: app.php:839
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
+#: avatar.php:56
+msgid "Custom profile pictures don't work with encryption yet"
+msgstr ""
+
+#: avatar.php:64
+msgid "Unknown filetype"
+msgstr ""
+
+#: avatar.php:69
+msgid "Invalid image"
+msgstr ""
+
+#: defaults.php:35
+msgid "web services under your control"
+msgstr ""
+
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
+#: files.php:226
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:227
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:228 files.php:256
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:253
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: installer.php:63
+msgid "No source specified when installing app"
+msgstr ""
+
+#: installer.php:70
+msgid "No href specified when installing app from http"
+msgstr ""
+
+#: installer.php:75
+msgid "No path specified when installing app from local file"
+msgstr ""
+
+#: installer.php:89
+#, php-format
+msgid "Archives of type %s are not supported"
+msgstr ""
+
+#: installer.php:103
+msgid "Failed to open archive when installing app"
+msgstr ""
+
+#: installer.php:125
+msgid "App does not provide an info.xml file"
+msgstr ""
+
+#: installer.php:131
+msgid "App can't be installed because of not allowed code in the App"
+msgstr ""
+
+#: installer.php:140
+msgid ""
+"App can't be installed because it is not compatible with this version of "
+"ownCloud"
+msgstr ""
+
+#: installer.php:146
+msgid ""
+"App can't be installed because it contains the <shipped>true</shipped> tag "
+"which is not allowed for non shipped apps"
+msgstr ""
+
+#: installer.php:152
+msgid ""
+"App can't be installed because the version in info.xml/version is not the "
+"same as the version reported from the app store"
+msgstr ""
+
+#: installer.php:162
+msgid "App directory already exists"
+msgstr ""
+
+#: installer.php:175
+#, php-format
+msgid "Can't create app folder. Please fix permissions. %s"
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:62 json.php:73
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: search/provider/file.php:17 search/provider/file.php:35
+msgid "Files"
+msgstr "ਫਾਇਲਾਂ"
+
+#: search/provider/file.php:26 search/provider/file.php:33
+msgid "Text"
+msgstr ""
+
+#: search/provider/file.php:29
+msgid "Images"
+msgstr ""
+
+#: setup/abstractdatabase.php:22
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup/abstractdatabase.php:25
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup/abstractdatabase.php:28
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup/mssql.php:20
+#, php-format
+msgid "MS SQL username and/or password not valid: %s"
+msgstr ""
+
+#: setup/mssql.php:21 setup/mysql.php:13 setup/oci.php:114
+#: setup/postgresql.php:24 setup/postgresql.php:70
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup/mysql.php:12
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup/mysql.php:67 setup/oci.php:54 setup/oci.php:121 setup/oci.php:147
+#: setup/oci.php:154 setup/oci.php:165 setup/oci.php:172 setup/oci.php:181
+#: setup/oci.php:189 setup/oci.php:198 setup/oci.php:204
+#: setup/postgresql.php:89 setup/postgresql.php:98 setup/postgresql.php:115
+#: setup/postgresql.php:125 setup/postgresql.php:134
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup/mysql.php:68 setup/oci.php:55 setup/oci.php:122 setup/oci.php:148
+#: setup/oci.php:155 setup/oci.php:166 setup/oci.php:182 setup/oci.php:190
+#: setup/oci.php:199 setup/postgresql.php:90 setup/postgresql.php:99
+#: setup/postgresql.php:116 setup/postgresql.php:126 setup/postgresql.php:135
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup/mysql.php:85
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup/mysql.php:86
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup/mysql.php:91
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup/mysql.php:92
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup/oci.php:34
+msgid "Oracle connection could not be established"
+msgstr ""
+
+#: setup/oci.php:41 setup/oci.php:113
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup/oci.php:173 setup/oci.php:205
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup/postgresql.php:23 setup/postgresql.php:69
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:28
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:31
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:184
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:185
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template/functions.php:96
+msgid "seconds ago"
+msgstr "ਸਕਿੰਟ ਪਹਿਲਾਂ"
+
+#: template/functions.php:97
+msgid "%n minute ago"
+msgid_plural "%n minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: template/functions.php:98
+msgid "%n hour ago"
+msgid_plural "%n hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: template/functions.php:99
+msgid "today"
+msgstr "ਅੱਜ"
+
+#: template/functions.php:100
+msgid "yesterday"
+msgstr "ਕੱਲ੍ਹ"
+
+#: template/functions.php:101
+msgid "%n day go"
+msgid_plural "%n days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: template/functions.php:102
+msgid "last month"
+msgstr "ਪਿਛਲੇ ਮਹੀਨੇ"
+
+#: template/functions.php:103
+msgid "%n month ago"
+msgid_plural "%n months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: template/functions.php:104
+msgid "last year"
+msgstr "ਪਿਛਲੇ ਸਾਲ"
+
+#: template/functions.php:105
+msgid "years ago"
+msgstr "ਸਾਲਾਂ ਪਹਿਲਾਂ"
+
+#: template.php:297
+msgid "Caused by:"
+msgstr ""
+
+#: vcategories.php:188 vcategories.php:249
+#, php-format
+msgid "Could not find category \"%s\""
+msgstr ""
diff --git a/l10n/pa/settings.po b/l10n/pa/settings.po
new file mode 100644
index 0000000000..66a4588995
--- /dev/null
+++ b/l10n/pa/settings.po
@@ -0,0 +1,606 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+# A S Alam <apreet.alam@gmail.com>, 2013
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pa\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/apps/ocs.php:20
+msgid "Unable to load list from App Store"
+msgstr ""
+
+#: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/changedisplayname.php:31
+msgid "Your display name has been changed."
+msgstr ""
+
+#: ajax/changedisplayname.php:34
+msgid "Unable to change display name"
+msgstr ""
+
+#: ajax/creategroup.php:10
+msgid "Group already exists"
+msgstr ""
+
+#: ajax/creategroup.php:19
+msgid "Unable to add group"
+msgstr ""
+
+#: ajax/lostpassword.php:12
+msgid "Email saved"
+msgstr ""
+
+#: ajax/lostpassword.php:14
+msgid "Invalid email"
+msgstr ""
+
+#: ajax/removegroup.php:13
+msgid "Unable to delete group"
+msgstr ""
+
+#: ajax/removeuser.php:25
+msgid "Unable to delete user"
+msgstr ""
+
+#: ajax/setlanguage.php:15
+msgid "Language changed"
+msgstr "ਭਾਸ਼ਾ ਬਦਲੀ"
+
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr ""
+
+#: ajax/togglegroups.php:12
+msgid "Admins can't remove themself from the admin group"
+msgstr ""
+
+#: ajax/togglegroups.php:30
+#, php-format
+msgid "Unable to add user to group %s"
+msgstr ""
+
+#: ajax/togglegroups.php:36
+#, php-format
+msgid "Unable to remove user from group %s"
+msgstr ""
+
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
+#: js/apps.js:43
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:49 js/apps.js:82 js/apps.js:108
+msgid "Disable"
+msgstr "ਬੰਦ"
+
+#: js/apps.js:49 js/apps.js:89 js/apps.js:102 js/apps.js:117
+msgid "Enable"
+msgstr "ਚਾਲੂ"
+
+#: js/apps.js:71
+msgid "Please wait...."
+msgstr "...ਉਡੀਕੋ ਜੀ"
+
+#: js/apps.js:79 js/apps.js:80 js/apps.js:100
+msgid "Error while disabling app"
+msgstr ""
+
+#: js/apps.js:99 js/apps.js:112 js/apps.js:113
+msgid "Error while enabling app"
+msgstr ""
+
+#: js/apps.js:123
+msgid "Updating...."
+msgstr "...ਅੱਪਡੇਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: js/apps.js:126
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:126
+msgid "Error"
+msgstr "ਗਲਤੀ"
+
+#: js/apps.js:127 templates/apps.php:43
+msgid "Update"
+msgstr ""
+
+#: js/apps.js:130
+msgid "Updated"
+msgstr "ਅੱਪਡੇਟ ਕੀਤਾ"
+
+#: js/personal.js:220
+msgid "Select a profile picture"
+msgstr ""
+
+#: js/personal.js:265
+msgid "Decrypting files... Please wait, this can take some time."
+msgstr ""
+
+#: js/personal.js:287
+msgid "Saving..."
+msgstr "...ਸੰਭਾਲਿਆ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: js/users.js:47
+msgid "deleted"
+msgstr "ਹਟਾਈ"
+
+#: js/users.js:47
+msgid "undo"
+msgstr "ਵਾਪਸ"
+
+#: js/users.js:79
+msgid "Unable to remove user"
+msgstr ""
+
+#: js/users.js:92 templates/users.php:26 templates/users.php:90
+#: templates/users.php:118
+msgid "Groups"
+msgstr "ਗਰੁੱਪ"
+
+#: js/users.js:97 templates/users.php:92 templates/users.php:130
+msgid "Group Admin"
+msgstr "ਗਰੁੱਪ ਐਡਮਿਨ"
+
+#: js/users.js:120 templates/users.php:170
+msgid "Delete"
+msgstr "ਹਟਾਓ"
+
+#: js/users.js:277
+msgid "add group"
+msgstr "ਗਰੁੱਪ ਸ਼ਾਮਲ"
+
+#: js/users.js:436
+msgid "A valid username must be provided"
+msgstr ""
+
+#: js/users.js:437 js/users.js:443 js/users.js:458
+msgid "Error creating user"
+msgstr ""
+
+#: js/users.js:442
+msgid "A valid password must be provided"
+msgstr ""
+
+#: personal.php:45 personal.php:46
+msgid "__language_name__"
+msgstr "__ਭਾਸ਼ਾ_ਨਾਂ__"
+
+#: templates/admin.php:15
+msgid "Security Warning"
+msgstr "ਸੁਰੱਖਿਆ ਚੇਤਾਵਨੀ"
+
+#: templates/admin.php:18
+msgid ""
+"Your data directory and your files are probably accessible from the "
+"internet. The .htaccess file is not working. We strongly suggest that you "
+"configure your webserver in a way that the data directory is no longer "
+"accessible or you move the data directory outside the webserver document "
+"root."
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Setup Warning"
+msgstr "ਸੈਟਅੱਪ ਚੇਤਾਵਨੀ"
+
+#: templates/admin.php:32
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: templates/admin.php:33
+#, php-format
+msgid "Please double check the <a href=\"%s\">installation guides</a>."
+msgstr ""
+
+#: templates/admin.php:44
+msgid "Module 'fileinfo' missing"
+msgstr ""
+
+#: templates/admin.php:47
+msgid ""
+"The PHP module 'fileinfo' is missing. We strongly recommend to enable this "
+"module to get best results with mime-type detection."
+msgstr ""
+
+#: templates/admin.php:58
+msgid "Locale not working"
+msgstr ""
+
+#: templates/admin.php:63
+#, php-format
+msgid ""
+"System locale can't be set to %s. This means that there might be problems "
+"with certain characters in file names. We strongly suggest to install the "
+"required packages on your system to support %s."
+msgstr ""
+
+#: templates/admin.php:75
+msgid "Internet connection not working"
+msgstr ""
+
+#: templates/admin.php:78
+msgid ""
+"This server has no working internet connection. This means that some of the "
+"features like mounting of external storage, notifications about updates or "
+"installation of 3rd party apps don´t work. Accessing files from remote and "
+"sending of notification emails might also not work. We suggest to enable "
+"internet connection for this server if you want to have all features."
+msgstr ""
+
+#: templates/admin.php:92
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:99
+msgid "Execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:107
+msgid ""
+"cron.php is registered at a webcron service to call cron.php once a minute "
+"over http."
+msgstr ""
+
+#: templates/admin.php:115
+msgid "Use systems cron service to call the cron.php file once a minute."
+msgstr ""
+
+#: templates/admin.php:120
+msgid "Sharing"
+msgstr ""
+
+#: templates/admin.php:126
+msgid "Enable Share API"
+msgstr ""
+
+#: templates/admin.php:127
+msgid "Allow apps to use the Share API"
+msgstr ""
+
+#: templates/admin.php:134
+msgid "Allow links"
+msgstr ""
+
+#: templates/admin.php:135
+msgid "Allow users to share items to the public with links"
+msgstr ""
+
+#: templates/admin.php:143
+msgid "Allow public uploads"
+msgstr ""
+
+#: templates/admin.php:144
+msgid ""
+"Allow users to enable others to upload into their publicly shared folders"
+msgstr ""
+
+#: templates/admin.php:152
+msgid "Allow resharing"
+msgstr ""
+
+#: templates/admin.php:153
+msgid "Allow users to share items shared with them again"
+msgstr ""
+
+#: templates/admin.php:160
+msgid "Allow users to share with anyone"
+msgstr ""
+
+#: templates/admin.php:163
+msgid "Allow users to only share with users in their groups"
+msgstr ""
+
+#: templates/admin.php:170
+msgid "Security"
+msgstr ""
+
+#: templates/admin.php:183
+msgid "Enforce HTTPS"
+msgstr ""
+
+#: templates/admin.php:185
+#, php-format
+msgid "Forces the clients to connect to %s via an encrypted connection."
+msgstr ""
+
+#: templates/admin.php:191
+#, php-format
+msgid ""
+"Please connect to your %s via HTTPS to enable or disable the SSL "
+"enforcement."
+msgstr ""
+
+#: templates/admin.php:203
+msgid "Log"
+msgstr ""
+
+#: templates/admin.php:204
+msgid "Log level"
+msgstr ""
+
+#: templates/admin.php:235
+msgid "More"
+msgstr ""
+
+#: templates/admin.php:236
+msgid "Less"
+msgstr ""
+
+#: templates/admin.php:242 templates/personal.php:161
+msgid "Version"
+msgstr ""
+
+#: templates/admin.php:246 templates/personal.php:164
+msgid ""
+"Developed by the <a href=\"http://ownCloud.org/contact\" "
+"target=\"_blank\">ownCloud community</a>, the <a "
+"href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is "
+"licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" "
+"target=\"_blank\"><abbr title=\"Affero General Public "
+"License\">AGPL</abbr></a>."
+msgstr ""
+
+#: templates/apps.php:13
+msgid "Add your App"
+msgstr ""
+
+#: templates/apps.php:28
+msgid "More Apps"
+msgstr ""
+
+#: templates/apps.php:33
+msgid "Select an App"
+msgstr ""
+
+#: templates/apps.php:39
+msgid "See application page at apps.owncloud.com"
+msgstr ""
+
+#: templates/apps.php:41
+msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
+msgstr ""
+
+#: templates/help.php:4
+msgid "User Documentation"
+msgstr ""
+
+#: templates/help.php:6
+msgid "Administrator Documentation"
+msgstr ""
+
+#: templates/help.php:9
+msgid "Online Documentation"
+msgstr ""
+
+#: templates/help.php:11
+msgid "Forum"
+msgstr ""
+
+#: templates/help.php:14
+msgid "Bugtracker"
+msgstr ""
+
+#: templates/help.php:17
+msgid "Commercial Support"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "Get the apps to sync your files"
+msgstr ""
+
+#: templates/personal.php:19
+msgid "Show First Run Wizard again"
+msgstr ""
+
+#: templates/personal.php:27
+#, php-format
+msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
+msgstr ""
+
+#: templates/personal.php:39 templates/users.php:23 templates/users.php:89
+msgid "Password"
+msgstr "ਪਾਸਵਰ"
+
+#: templates/personal.php:40
+msgid "Your password was changed"
+msgstr ""
+
+#: templates/personal.php:41
+msgid "Unable to change your password"
+msgstr ""
+
+#: templates/personal.php:42
+msgid "Current password"
+msgstr ""
+
+#: templates/personal.php:44
+msgid "New password"
+msgstr ""
+
+#: templates/personal.php:46
+msgid "Change password"
+msgstr "ਪਾਸਵਰਡ ਬਦਲੋ"
+
+#: templates/personal.php:58 templates/users.php:88
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:73
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:75
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:76
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:86
+msgid "Profile picture"
+msgstr ""
+
+#: templates/personal.php:90
+msgid "Upload new"
+msgstr ""
+
+#: templates/personal.php:92
+msgid "Select new from Files"
+msgstr ""
+
+#: templates/personal.php:93
+msgid "Remove image"
+msgstr ""
+
+#: templates/personal.php:94
+msgid "Either png or jpg. Ideally square but you will be able to crop it."
+msgstr ""
+
+#: templates/personal.php:97
+msgid "Abort"
+msgstr ""
+
+#: templates/personal.php:98
+msgid "Choose as profile image"
+msgstr ""
+
+#: templates/personal.php:106 templates/personal.php:107
+msgid "Language"
+msgstr ""
+
+#: templates/personal.php:119
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:125
+msgid "WebDAV"
+msgstr ""
+
+#: templates/personal.php:127
+#, php-format
+msgid ""
+"Use this address to <a href=\"%s/server/5.0/user_manual/files/files.html\" "
+"target=\"_blank\">access your Files via WebDAV</a>"
+msgstr ""
+
+#: templates/personal.php:138
+msgid "Encryption"
+msgstr ""
+
+#: templates/personal.php:140
+msgid "The encryption app is no longer enabled, decrypt all your file"
+msgstr ""
+
+#: templates/personal.php:146
+msgid "Log-in password"
+msgstr ""
+
+#: templates/personal.php:151
+msgid "Decrypt all Files"
+msgstr ""
+
+#: templates/users.php:21
+msgid "Login Name"
+msgstr ""
+
+#: templates/users.php:30
+msgid "Create"
+msgstr ""
+
+#: templates/users.php:36
+msgid "Admin Recovery Password"
+msgstr ""
+
+#: templates/users.php:37 templates/users.php:38
+msgid ""
+"Enter the recovery password in order to recover the users files during "
+"password change"
+msgstr ""
+
+#: templates/users.php:42
+msgid "Default Storage"
+msgstr ""
+
+#: templates/users.php:48 templates/users.php:148
+msgid "Unlimited"
+msgstr ""
+
+#: templates/users.php:66 templates/users.php:163
+msgid "Other"
+msgstr ""
+
+#: templates/users.php:87
+msgid "Username"
+msgstr "ਯੂਜ਼ਰ-ਨਾਂ"
+
+#: templates/users.php:94
+msgid "Storage"
+msgstr ""
+
+#: templates/users.php:108
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:112
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:143
+msgid "Default"
+msgstr ""
diff --git a/l10n/pa/user_ldap.po b/l10n/pa/user_ldap.po
new file mode 100644
index 0000000000..0c8fff5039
--- /dev/null
+++ b/l10n/pa/user_ldap.po
@@ -0,0 +1,406 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:14+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pa\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/clearMappings.php:34
+msgid "Failed to clear the mappings."
+msgstr ""
+
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:36
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:39
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:43
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:111
+msgid "mappings cleared"
+msgstr ""
+
+#: js/settings.js:112
+msgid "Success"
+msgstr ""
+
+#: js/settings.js:117
+msgid "Error"
+msgstr "ਗਲਤੀ"
+
+#: js/settings.js:141
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:146
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:156
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:157
+msgid "Confirm Deletion"
+msgstr ""
+
+#: templates/settings.php:9
+msgid ""
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
+" experience unexpected behavior. Please ask your system administrator to "
+"disable one of them."
+msgstr ""
+
+#: templates/settings.php:12
+msgid ""
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr ""
+
+#: templates/settings.php:16
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:39
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:40
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:41
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:42
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:44
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:46
+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:47
+msgid "Password"
+msgstr "ਪਾਸਵਰ"
+
+#: templates/settings.php:50
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:51
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:54
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action. Example: \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:55
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:58
+msgid ""
+"Defines the filter to apply, when retrieving users (no placeholders). "
+"Example: \"objectClass=person\""
+msgstr ""
+
+#: templates/settings.php:59
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:62
+msgid ""
+"Defines the filter to apply, when retrieving groups (no placeholders). "
+"Example: \"objectClass=posixGroup\""
+msgstr ""
+
+#: templates/settings.php:66
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:68
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:68
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:70
+msgid "Backup (Replica) Host"
+msgstr ""
+
+#: templates/settings.php:70
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
+
+#: templates/settings.php:71
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:72
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:72
+msgid "Only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:73
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:73
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:74
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:75
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:75
+#, php-format
+msgid ""
+"Not recommended, use it for testing only! If connection only works with this"
+" option, import the LDAP server's SSL certificate in your %s server."
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache Time-To-Live"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:78
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "The LDAP attribute to use to generate the user's display name."
+msgstr ""
+
+#: templates/settings.php:81
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:81
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:82
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:82 templates/settings.php:85
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:83
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:83
+msgid "The LDAP attribute to use to generate the groups's display name."
+msgstr ""
+
+#: templates/settings.php:84
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:84
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:86
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:90
+msgid "Quota Field"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "Quota Default"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:92
+msgid "Email Field"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "User Home Folder Naming Rule"
+msgstr ""
+
+#: templates/settings.php:93
+msgid ""
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
+"attribute."
+msgstr ""
+
+#: templates/settings.php:98
+msgid "Internal Username"
+msgstr ""
+
+#: templates/settings.php:99
+msgid ""
+"By default the internal username will be created from the UUID attribute. It"
+" makes sure that the username is unique and characters do not need to be "
+"converted. The internal username has the restriction that only these "
+"characters are allowed: [ a-zA-Z0-9_.@- ].  Other characters are replaced "
+"with their ASCII correspondence or simply omitted. On collisions a number "
+"will be added/increased. The internal username is used to identify a user "
+"internally. It is also the default name for the user home folder. It is also"
+" a part of remote URLs, for instance for all *DAV services. With this "
+"setting, the default behavior can be overridden. To achieve a similar "
+"behavior as before ownCloud 5 enter the user display name attribute in the "
+"following field. Leave it empty for default behavior. Changes will have "
+"effect only on newly mapped (added) LDAP users."
+msgstr ""
+
+#: templates/settings.php:100
+msgid "Internal Username Attribute:"
+msgstr ""
+
+#: templates/settings.php:101
+msgid "Override UUID detection"
+msgstr ""
+
+#: templates/settings.php:102
+msgid ""
+"By default, the UUID attribute is automatically detected. The UUID attribute"
+" is used to doubtlessly identify LDAP users and groups. Also, the internal "
+"username will be created based on the UUID, if not specified otherwise "
+"above. You can override the setting and pass an attribute of your choice. "
+"You must make sure that the attribute of your choice can be fetched for both"
+" users and groups and it is unique. Leave it empty for default behavior. "
+"Changes will have effect only on newly mapped (added) LDAP users and groups."
+msgstr ""
+
+#: templates/settings.php:103
+msgid "UUID Attribute:"
+msgstr ""
+
+#: templates/settings.php:104
+msgid "Username-LDAP User Mapping"
+msgstr ""
+
+#: templates/settings.php:105
+msgid ""
+"Usernames are used to store and assign (meta) data. In order to precisely "
+"identify and recognize users, each LDAP user will have a internal username. "
+"This requires a mapping from username to LDAP user. The created username is "
+"mapped to the UUID of the LDAP user. Additionally the DN is cached as well "
+"to reduce LDAP interaction, but it is not used for identification. If the DN"
+" changes, the changes will be found. The internal username is used all over."
+" Clearing the mappings will have leftovers everywhere. Clearing the mappings"
+" is not configuration sensitive, it affects all LDAP configurations! Never "
+"clear the mappings in a production environment, only in a testing or "
+"experimental stage."
+msgstr ""
+
+#: templates/settings.php:106
+msgid "Clear Username-LDAP User Mapping"
+msgstr ""
+
+#: templates/settings.php:106
+msgid "Clear Groupname-LDAP Group Mapping"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Test Configuration"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Help"
+msgstr ""
diff --git a/l10n/pa/user_webdavauth.po b/l10n/pa/user_webdavauth.po
new file mode 100644
index 0000000000..ffc527fb28
--- /dev/null
+++ b/l10n/pa/user_webdavauth.po
@@ -0,0 +1,33 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-16 20:50+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pa\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Address: "
+msgstr ""
+
+#: templates/settings.php:7
+msgid ""
+"The user credentials will be sent to this address. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr ""
diff --git a/l10n/pl/settings.po b/l10n/pl/settings.po
index d0f1cfcc15..ae9f492421 100644
--- a/l10n/pl/settings.po
+++ b/l10n/pl/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
 "MIME-Version: 1.0\n"
@@ -24,7 +24,7 @@ msgid "Unable to load list from App Store"
 msgstr "Nie można wczytać listy aplikacji"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Błąd uwierzytelniania"
 
@@ -86,6 +86,39 @@ msgstr "Nie można usunąć użytkownika z grupy %s"
 msgid "Couldn't update app."
 msgstr "Nie można uaktualnić aplikacji."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Aktualizacja do {appversion}"
@@ -130,15 +163,15 @@ msgstr "Aktualizuj"
 msgid "Updated"
 msgstr "Zaktualizowano"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Odszyfrowuje pliki... Proszę czekać, to może zająć jakiś czas."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Zapisywanie..."
 
@@ -462,7 +495,7 @@ msgstr "Podaj adres e-mail, aby uzyskać możliwość odzyskania hasła"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Zdjęcie profilu"
 
 #: templates/personal.php:90
 msgid "Upload new"
@@ -482,7 +515,7 @@ msgstr ""
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Anuluj"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
diff --git a/l10n/pt_BR/core.po b/l10n/pt_BR/core.po
index f8c924a947..ad96fabaeb 100644
--- a/l10n/pt_BR/core.po
+++ b/l10n/pt_BR/core.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:05+0000\n"
+"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -94,23 +94,23 @@ msgstr "Erro ao remover %s dos favoritos."
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "Nenhuma imagem ou arquivo fornecido"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Tipo de arquivo desconhecido"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Imagem inválida"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "Sem imagem no perfil temporário disponível, tente novamente"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "Nenhum dado para coleta foi fornecido"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -250,7 +250,7 @@ msgstr "Escolha"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "Erro no seletor de carregamento modelo de arquivos: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -266,7 +266,7 @@ msgstr "Ok"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr ""
+msgstr "Erro no carregamento de modelo de mensagem: {error}"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/pt_BR/lib.po b/l10n/pt_BR/lib.po
index 31eb50030d..3159799494 100644
--- a/l10n/pt_BR/lib.po
+++ b/l10n/pt_BR/lib.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:05+0000\n"
+"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -56,15 +56,15 @@ msgstr "Falha na atualização de \"%s\"."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "Fotos de perfil personalizados ainda não funcionam com criptografia"
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Tipo de arquivo desconhecido"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Imagem inválida"
 
 #: defaults.php:35
 msgid "web services under your control"
diff --git a/l10n/pt_BR/settings.po b/l10n/pt_BR/settings.po
index dac1766f08..bfd40a0f93 100644
--- a/l10n/pt_BR/settings.po
+++ b/l10n/pt_BR/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
@@ -24,7 +24,7 @@ msgid "Unable to load list from App Store"
 msgstr "Não foi possível carregar lista da App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Erro de autenticação"
 
@@ -86,6 +86,39 @@ msgstr "Não foi possível remover usuário do grupo %s"
 msgid "Couldn't update app."
 msgstr "Não foi possível atualizar a app."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Atualizar para {appversion}"
@@ -130,15 +163,15 @@ msgstr "Atualizar"
 msgid "Updated"
 msgstr "Atualizado"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Selecione uma imagem para o perfil"
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Decriptando arquivos... Por favor aguarde, isso pode levar algum tempo."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Salvando..."
 
@@ -462,31 +495,31 @@ msgstr "Preencha um endereço de e-mail para habilitar a recuperação de senha"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Imagem para o perfil"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Enviar nova foto"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Selecinar uma nova dos Arquivos"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Remover imagem"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Ou png ou jpg. O ideal é quadrado, mas você vai ser capaz de cortá-la."
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Abortar"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Escolha como imagem para o perfil"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/pt_PT/settings.po b/l10n/pt_PT/settings.po
index 62b80e989c..240d92edaf 100644
--- a/l10n/pt_PT/settings.po
+++ b/l10n/pt_PT/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
@@ -26,7 +26,7 @@ msgid "Unable to load list from App Store"
 msgstr "Incapaz de carregar a lista da App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Erro na autenticação"
 
@@ -88,6 +88,39 @@ msgstr "Impossível apagar utilizador do grupo %s"
 msgid "Couldn't update app."
 msgstr "Não foi possível actualizar a aplicação."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Actualizar para a versão {appversion}"
@@ -132,15 +165,15 @@ msgstr "Actualizar"
 msgid "Updated"
 msgstr "Actualizado"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "A desencriptar os ficheiros... Por favor aguarde, esta operação pode demorar algum tempo."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "A guardar..."
 
@@ -464,7 +497,7 @@ msgstr "Preencha com o seu endereço de email para ativar a recuperação da pal
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Foto do perfil"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/ro/settings.po b/l10n/ro/settings.po
index 7e003bd6db..1016778fe3 100644
--- a/l10n/ro/settings.po
+++ b/l10n/ro/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
 "MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgid "Unable to load list from App Store"
 msgstr "Imposibil de actualizat lista din  App Store."
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Eroare la autentificare"
 
@@ -85,6 +85,39 @@ msgstr "Nu s-a putut elimina utilizatorul din grupul %s"
 msgid "Couldn't update app."
 msgstr "Aplicaţia nu s-a putut actualiza."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Actualizat la {versiuneaaplicaţiei}"
@@ -129,15 +162,15 @@ msgstr "Actualizare"
 msgid "Updated"
 msgstr "Actualizat"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Se salvează..."
 
diff --git a/l10n/ru/settings.po b/l10n/ru/settings.po
index 1d7aae06c0..edaeaf1932 100644
--- a/l10n/ru/settings.po
+++ b/l10n/ru/settings.po
@@ -14,8 +14,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
 "MIME-Version: 1.0\n"
@@ -29,7 +29,7 @@ msgid "Unable to load list from App Store"
 msgstr "Не удалось загрузить список из App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Ошибка аутентификации"
 
@@ -91,6 +91,39 @@ msgstr "Невозможно удалить пользователя из гру
 msgid "Couldn't update app."
 msgstr "Невозможно обновить приложение"
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Обновить до {версия приложения}"
@@ -135,15 +168,15 @@ msgstr "Обновить"
 msgid "Updated"
 msgstr "Обновлено"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Расшифровка файлов... Пожалуйста, подождите, это может занять некоторое время."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Сохранение..."
 
@@ -467,7 +500,7 @@ msgstr "Введите адрес электронной почты чтобы 
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Фото профиля"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/si_LK/settings.po b/l10n/si_LK/settings.po
index b5b5461558..78e5accf9e 100644
--- a/l10n/si_LK/settings.po
+++ b/l10n/si_LK/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "සත්‍යාපන දෝෂයක්"
 
@@ -84,6 +84,39 @@ msgstr "පරිශීලකයා %s කණ්ඩායමින් ඉවත
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr "යාවත්කාල කිරීම"
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "සුරැකෙමින් පවතී..."
 
diff --git a/l10n/sk/settings.po b/l10n/sk/settings.po
index f3a3428961..de97d238d7 100644
--- a/l10n/sk/settings.po
+++ b/l10n/sk/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/sk_SK/settings.po b/l10n/sk_SK/settings.po
index 5417b89d08..000abca08a 100644
--- a/l10n/sk_SK/settings.po
+++ b/l10n/sk_SK/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
 "MIME-Version: 1.0\n"
@@ -24,7 +24,7 @@ msgid "Unable to load list from App Store"
 msgstr "Nie je možné nahrať zoznam z App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Chyba autentifikácie"
 
@@ -86,6 +86,39 @@ msgstr "Nie je možné odstrániť používateľa zo skupiny %s"
 msgid "Couldn't update app."
 msgstr "Nemožno aktualizovať aplikáciu."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Aktualizovať na {appversion}"
@@ -130,15 +163,15 @@ msgstr "Aktualizovať"
 msgid "Updated"
 msgstr "Aktualizované"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Dešifrujem súbory ... Počkajte prosím, môže to chvíľu trvať."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Ukladám..."
 
@@ -462,7 +495,7 @@ msgstr "Vyplňte emailovú adresu pre aktivovanie obnovy hesla"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profilová fotka"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/sl/settings.po b/l10n/sl/settings.po
index c9e719828c..4a2acfea74 100644
--- a/l10n/sl/settings.po
+++ b/l10n/sl/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
 "MIME-Version: 1.0\n"
@@ -24,7 +24,7 @@ msgid "Unable to load list from App Store"
 msgstr "Ni mogoče naložiti seznama iz programskega središča"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Napaka med overjanjem"
 
@@ -86,6 +86,39 @@ msgstr "Uporabnika ni mogoče odstraniti iz skupine %s"
 msgid "Couldn't update app."
 msgstr "Programa ni mogoče posodobiti."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Posodobi na {appversion}"
@@ -130,15 +163,15 @@ msgstr "Posodobi"
 msgid "Updated"
 msgstr "Posodobljeno"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Poteka shranjevanje ..."
 
@@ -462,7 +495,7 @@ msgstr "Vpišite osebni elektronski naslov in s tem omogočite obnovitev gesla"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Slika profila"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/sq/settings.po b/l10n/sq/settings.po
index 1aad69565c..05680ab5d7 100644
--- a/l10n/sq/settings.po
+++ b/l10n/sq/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Albanian (http://www.transifex.com/projects/p/owncloud/language/sq/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Veprim i gabuar gjatë vërtetimit të identitetit"
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr "Azhurno"
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/sr/settings.po b/l10n/sr/settings.po
index 9f2fe8c7c8..ba7da173f2 100644
--- a/l10n/sr/settings.po
+++ b/l10n/sr/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr "Грешка приликом учитавања списка из Складишта Програма"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Грешка при провери идентитета"
 
@@ -84,6 +84,39 @@ msgstr "Не могу да уклоним корисника из групе %s"
 msgid "Couldn't update app."
 msgstr "Не могу да ажурирам апликацију."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Ажурирај на {appversion}"
@@ -128,15 +161,15 @@ msgstr "Ажурирај"
 msgid "Updated"
 msgstr "Ажурирано"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Чување у току..."
 
diff --git a/l10n/sr@latin/settings.po b/l10n/sr@latin/settings.po
index cc6f3b2d5b..28437f33e6 100644
--- a/l10n/sr@latin/settings.po
+++ b/l10n/sr@latin/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Greška pri autentifikaciji"
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/sv/settings.po b/l10n/sv/settings.po
index bed6751c58..f6ced07827 100644
--- a/l10n/sv/settings.po
+++ b/l10n/sv/settings.po
@@ -13,8 +13,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
 "MIME-Version: 1.0\n"
@@ -28,7 +28,7 @@ msgid "Unable to load list from App Store"
 msgstr "Kan inte ladda listan från App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Fel vid autentisering"
 
@@ -90,6 +90,39 @@ msgstr "Kan inte radera användare från gruppen %s"
 msgid "Couldn't update app."
 msgstr "Kunde inte uppdatera appen."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Uppdatera till {appversion}"
@@ -134,15 +167,15 @@ msgstr "Uppdatera"
 msgid "Updated"
 msgstr "Uppdaterad"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Dekrypterar filer... Vänligen vänta, detta kan ta en stund."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Sparar..."
 
@@ -466,7 +499,7 @@ msgstr "Fyll i en e-postadress för att aktivera återställning av lösenord"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profilbild"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/sw_KE/settings.po b/l10n/sw_KE/settings.po
index 4d21326ffb..efa5540596 100644
--- a/l10n/sw_KE/settings.po
+++ b/l10n/sw_KE/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/ta_LK/settings.po b/l10n/ta_LK/settings.po
index 0e74f284b2..c7ece05242 100644
--- a/l10n/ta_LK/settings.po
+++ b/l10n/ta_LK/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr "செயலி சேமிப்பிலிருந்து பட்டியலை ஏற்றமுடியாதுள்ளது"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "அத்தாட்சிப்படுத்தலில் வழு"
 
@@ -84,6 +84,39 @@ msgstr "குழு %s இலிருந்து பயனாளரை நீ
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr "இற்றைப்படுத்தல்"
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "சேமிக்கப்படுகிறது..."
 
diff --git a/l10n/te/settings.po b/l10n/te/settings.po
index 38c9a149cc..fae385a634 100644
--- a/l10n/te/settings.po
+++ b/l10n/te/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Telugu (http://www.transifex.com/projects/p/owncloud/language/te/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index 5f6e94f4ea..b33795587e 100644
--- a/l10n/templates/core.pot
+++ b/l10n/templates/core.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index 161d9755eb..eedc0a25df 100644
--- a/l10n/templates/files.pot
+++ b/l10n/templates/files.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
+"POT-Creation-Date: 2013-09-18 11:46-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -87,32 +87,32 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
+#: js/file-upload.js:40
 msgid "Unable to upload your file as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:53
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:73
+#: js/file-upload.js:91
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:167
+#: js/file-upload.js:206
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:241
+#: js/file-upload.js:280
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:246 lib/app.php:53
+#: js/file-upload.js:285 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:278 js/file-upload.js:294 js/files.js:528 js/files.js:566
+#: js/file-upload.js:317 js/file-upload.js:333 js/files.js:528 js/files.js:566
 msgid "Error"
 msgstr ""
 
diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot
index 4ecbd811f4..d3bea416f5 100644
--- a/l10n/templates/files_encryption.pot
+++ b/l10n/templates/files_encryption.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
+"POT-Creation-Date: 2013-09-18 11:46-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -60,18 +60,18 @@ msgid ""
 "files."
 msgstr ""
 
-#: hooks/hooks.php:51
+#: hooks/hooks.php:53
 msgid "Missing requirements."
 msgstr ""
 
-#: hooks/hooks.php:52
+#: hooks/hooks.php:54
 msgid ""
 "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL "
 "together with the PHP extension is enabled and configured properly. For now, "
 "the encryption app has been disabled."
 msgstr ""
 
-#: hooks/hooks.php:250
+#: hooks/hooks.php:255
 msgid "Following users are not set up for encryption:"
 msgstr ""
 
diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot
index 99b523228e..e479af01a2 100644
--- a/l10n/templates/files_external.pot
+++ b/l10n/templates/files_external.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot
index 864993c2e5..d7f497295d 100644
--- a/l10n/templates/files_sharing.pot
+++ b/l10n/templates/files_sharing.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot
index 21e54096a8..f64c3dfd3d 100644
--- a/l10n/templates/files_trashbin.pot
+++ b/l10n/templates/files_trashbin.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot
index 013e4ee266..b0fc9800d2 100644
--- a/l10n/templates/files_versions.pot
+++ b/l10n/templates/files_versions.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
index 662cfdfdd6..d10c7fb9fb 100644
--- a/l10n/templates/lib.pot
+++ b/l10n/templates/lib.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index e405f9529e..3d0cbd90cf 100644
--- a/l10n/templates/settings.pot
+++ b/l10n/templates/settings.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,38 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid "Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +160,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot
index 28316ceea3..cce14efa4e 100644
--- a/l10n/templates/user_ldap.pot
+++ b/l10n/templates/user_ldap.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot
index 8f3c15b8d8..ea6486423a 100644
--- a/l10n/templates/user_webdavauth.pot
+++ b/l10n/templates/user_webdavauth.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/th_TH/settings.po b/l10n/th_TH/settings.po
index 3426744f01..6c34842bf4 100644
--- a/l10n/th_TH/settings.po
+++ b/l10n/th_TH/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr "ไม่สามารถโหลดรายการจาก App Store ได้"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "เกิดข้อผิดพลาดในสิทธิ์การเข้าใช้งาน"
 
@@ -84,6 +84,39 @@ msgstr "ไม่สามารถลบผู้ใช้งานออกจ
 msgid "Couldn't update app."
 msgstr "ไม่สามารถอัพเดทแอปฯ"
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "อัพเดทไปเป็นรุ่น {appversion}"
@@ -128,15 +161,15 @@ msgstr "อัพเดท"
 msgid "Updated"
 msgstr "อัพเดทแล้ว"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "กำลังบันทึกข้อมูล..."
 
@@ -460,7 +493,7 @@ msgstr "กรอกที่อยู่อีเมล์ของคุณเ
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "รูปภาพโปรไฟล์"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/tr/settings.po b/l10n/tr/settings.po
index b7a8e83849..473a8a6790 100644
--- a/l10n/tr/settings.po
+++ b/l10n/tr/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
 "MIME-Version: 1.0\n"
@@ -26,7 +26,7 @@ msgid "Unable to load list from App Store"
 msgstr "App Store'dan liste yüklenemiyor"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Kimlik doğrulama hatası"
 
@@ -88,6 +88,39 @@ msgstr "%s grubundan kullanıcı kaldırılamıyor"
 msgid "Couldn't update app."
 msgstr "Uygulama güncellenemedi."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "{appversion} Güncelle"
@@ -132,15 +165,15 @@ msgstr "Güncelleme"
 msgid "Updated"
 msgstr "Güncellendi"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Dosyaların şifresi çözülüyor... Lütfen bekleyin, bu biraz zaman alabilir."
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Kaydediliyor..."
 
@@ -464,7 +497,7 @@ msgstr "Parola kurtarmayı etkinleştirmek için bir eposta adresi girin"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profil resmi"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/ug/settings.po b/l10n/ug/settings.po
index b6ec1cd7f0..63874495c3 100644
--- a/l10n/ug/settings.po
+++ b/l10n/ug/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Uighur <uqkun@outlook.com>\n"
 "MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgid "Unable to load list from App Store"
 msgstr "ئەپ بازىرىدىن تىزىمنى يۈكلىيەلمىدى"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "سالاھىيەت دەلىللەش خاتالىقى"
 
@@ -85,6 +85,39 @@ msgstr "ئىشلەتكۈچىنى %s گۇرۇپپىدىن چىقىرىۋېتەل
 msgid "Couldn't update app."
 msgstr "ئەپنى يېڭىلىيالمايدۇ."
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "{appversion} غا يېڭىلايدۇ"
@@ -129,15 +162,15 @@ msgstr "يېڭىلا"
 msgid "Updated"
 msgstr "يېڭىلاندى"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "ساقلاۋاتىدۇ…"
 
diff --git a/l10n/uk/files_encryption.po b/l10n/uk/files_encryption.po
index d36a9a3a53..46c45f13fe 100644
--- a/l10n/uk/files_encryption.po
+++ b/l10n/uk/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 13:31+0000\n"
+"POT-Creation-Date: 2013-09-18 11:46-0400\n"
+"PO-Revision-Date: 2013-09-17 13:05+0000\n"
 "Last-Translator: zubr139 <zubr139@ukr.net>\n"
 "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
 "MIME-Version: 1.0\n"
@@ -62,18 +62,18 @@ msgid ""
 "files."
 msgstr ""
 
-#: hooks/hooks.php:51
+#: hooks/hooks.php:53
 msgid "Missing requirements."
 msgstr ""
 
-#: hooks/hooks.php:52
+#: hooks/hooks.php:54
 msgid ""
 "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL "
 "together with the PHP extension is enabled and configured properly. For now,"
 " the encryption app has been disabled."
 msgstr ""
 
-#: hooks/hooks.php:250
+#: hooks/hooks.php:255
 msgid "Following users are not set up for encryption:"
 msgstr ""
 
diff --git a/l10n/uk/settings.po b/l10n/uk/settings.po
index 3611f7952d..53d7986461 100644
--- a/l10n/uk/settings.po
+++ b/l10n/uk/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr "Не вдалося завантажити список з App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Помилка автентифікації"
 
@@ -84,6 +84,39 @@ msgstr "Не вдалося видалити користувача із гру
 msgid "Couldn't update app."
 msgstr "Не вдалося оновити програму. "
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Оновити до {appversion}"
@@ -128,15 +161,15 @@ msgstr "Оновити"
 msgid "Updated"
 msgstr "Оновлено"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Зберігаю..."
 
diff --git a/l10n/uk/user_webdavauth.po b/l10n/uk/user_webdavauth.po
index b25b14fad2..7f61f7a3e3 100644
--- a/l10n/uk/user_webdavauth.po
+++ b/l10n/uk/user_webdavauth.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 13:52+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-17 13:04+0000\n"
 "Last-Translator: zubr139 <zubr139@ukr.net>\n"
 "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
 "MIME-Version: 1.0\n"
diff --git a/l10n/ur_PK/settings.po b/l10n/ur_PK/settings.po
index 4c01294a25..92dc0e5d07 100644
--- a/l10n/ur_PK/settings.po
+++ b/l10n/ur_PK/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Urdu (Pakistan) (http://www.transifex.com/projects/p/owncloud/language/ur_PK/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/vi/settings.po b/l10n/vi/settings.po
index 1297da2664..37f3d2e0da 100644
--- a/l10n/vi/settings.po
+++ b/l10n/vi/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr "Không thể tải danh sách ứng dụng từ App Store"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "Lỗi xác thực"
 
@@ -84,6 +84,39 @@ msgstr "Không thể xóa người dùng từ nhóm %s"
 msgid "Couldn't update app."
 msgstr "Không thể cập nhật ứng dụng"
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Cập nhật lên {appversion}"
@@ -128,15 +161,15 @@ msgstr "Cập nhật"
 msgid "Updated"
 msgstr "Đã cập nhật"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "Đang lưu..."
 
diff --git a/l10n/zh_CN/settings.po b/l10n/zh_CN/settings.po
index f6c57de60c..2e9ea7f2a6 100644
--- a/l10n/zh_CN/settings.po
+++ b/l10n/zh_CN/settings.po
@@ -12,8 +12,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
 "MIME-Version: 1.0\n"
@@ -27,7 +27,7 @@ msgid "Unable to load list from App Store"
 msgstr "无法从应用商店载入列表"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "认证出错"
 
@@ -89,6 +89,39 @@ msgstr "无法从组%s中移除用户"
 msgid "Couldn't update app."
 msgstr "无法更新 app。"
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "更新至 {appversion}"
@@ -133,15 +166,15 @@ msgstr "更新"
 msgid "Updated"
 msgstr "已更新"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "正在解密文件... 请稍等,可能需要一些时间。"
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "保存中"
 
@@ -465,7 +498,7 @@ msgstr "填写电子邮件地址以启用密码恢复功能"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "联系人图片"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/l10n/zh_HK/settings.po b/l10n/zh_HK/settings.po
index ac0290157f..03c8c330da 100644
--- a/l10n/zh_HK/settings.po
+++ b/l10n/zh_HK/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgid "Unable to load list from App Store"
 msgstr ""
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr ""
 
@@ -84,6 +84,39 @@ msgstr ""
 msgid "Couldn't update app."
 msgstr ""
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr ""
@@ -128,15 +161,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/zh_TW/settings.po b/l10n/zh_TW/settings.po
index 207a0b4670..e6f825433a 100644
--- a/l10n/zh_TW/settings.po
+++ b/l10n/zh_TW/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"PO-Revision-Date: 2013-09-18 15:47+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
 "MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgid "Unable to load list from App Store"
 msgstr "無法從 App Store 讀取清單"
 
 #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20
+#: ajax/togglegroups.php:20 changepassword/controller.php:55
 msgid "Authentication error"
 msgstr "認證錯誤"
 
@@ -85,6 +85,39 @@ msgstr "使用者移出群組 %s 錯誤"
 msgid "Couldn't update app."
 msgstr "無法更新應用程式"
 
+#: changepassword/controller.php:20
+msgid "Wrong password"
+msgstr ""
+
+#: changepassword/controller.php:42
+msgid "No user supplied"
+msgstr ""
+
+#: changepassword/controller.php:74
+msgid ""
+"Please provide an admin recovery password, otherwise all user data will be "
+"lost"
+msgstr ""
+
+#: changepassword/controller.php:79
+msgid ""
+"Wrong admin recovery password. Please check the password and try again."
+msgstr ""
+
+#: changepassword/controller.php:87
+msgid ""
+"Back-end doesn't support password change, but the users encryption key was "
+"successfully updated."
+msgstr ""
+
+#: changepassword/controller.php:92
+msgid "message"
+msgstr ""
+
+#: changepassword/controller.php:103
+msgid "Unable to change password"
+msgstr ""
+
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "更新至 {appversion}"
@@ -129,15 +162,15 @@ msgstr "更新"
 msgid "Updated"
 msgstr "已更新"
 
-#: js/personal.js:217
+#: js/personal.js:220
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:262
+#: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "檔案解密中,請稍候。"
 
-#: js/personal.js:284
+#: js/personal.js:287
 msgid "Saving..."
 msgstr "儲存中..."
 
@@ -461,7 +494,7 @@ msgstr "請填入電子郵件信箱以便回復密碼"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "個人資料照片"
 
 #: templates/personal.php:90
 msgid "Upload new"
diff --git a/lib/l10n/ca.php b/lib/l10n/ca.php
index 166455e652..a876922470 100644
--- a/lib/l10n/ca.php
+++ b/lib/l10n/ca.php
@@ -8,6 +8,9 @@ $TRANSLATIONS = array(
 "Users" => "Usuaris",
 "Admin" => "Administració",
 "Failed to upgrade \"%s\"." => "Ha fallat l'actualització \"%s\".",
+"Custom profile pictures don't work with encryption yet" => "Les imatges de perfil personals encara no funcionen amb encriptació",
+"Unknown filetype" => "Tipus de fitxer desconegut",
+"Invalid image" => "Imatge no vàlida",
 "web services under your control" => "controleu els vostres serveis web",
 "cannot open \"%s\"" => "no es pot obrir \"%s\"",
 "ZIP download is turned off." => "La baixada en ZIP està desactivada.",
diff --git a/lib/l10n/cs_CZ.php b/lib/l10n/cs_CZ.php
index fed9ad03c0..ed31ae7952 100644
--- a/lib/l10n/cs_CZ.php
+++ b/lib/l10n/cs_CZ.php
@@ -8,6 +8,9 @@ $TRANSLATIONS = array(
 "Users" => "Uživatelé",
 "Admin" => "Administrace",
 "Failed to upgrade \"%s\"." => "Selhala aktualizace verze \"%s\".",
+"Custom profile pictures don't work with encryption yet" => "Vlastní profilové obrázky zatím nefungují v kombinaci se šifrováním",
+"Unknown filetype" => "Neznámý typ souboru",
+"Invalid image" => "Chybný obrázek",
 "web services under your control" => "webové služby pod Vaší kontrolou",
 "cannot open \"%s\"" => "nelze otevřít \"%s\"",
 "ZIP download is turned off." => "Stahování v ZIPu je vypnuto.",
diff --git a/lib/l10n/de.php b/lib/l10n/de.php
index 7a3e2c43e6..87e7a67b47 100644
--- a/lib/l10n/de.php
+++ b/lib/l10n/de.php
@@ -8,6 +8,9 @@ $TRANSLATIONS = array(
 "Users" => "Benutzer",
 "Admin" => "Administration",
 "Failed to upgrade \"%s\"." => "Konnte \"%s\" nicht aktualisieren.",
+"Custom profile pictures don't work with encryption yet" => "Individuelle Profilbilder werden noch nicht von der Verschlüsselung unterstützt",
+"Unknown filetype" => "Unbekannter Dateityp",
+"Invalid image" => "Ungültiges Bild",
 "web services under your control" => "Web-Services unter Deiner Kontrolle",
 "cannot open \"%s\"" => "Öffnen von \"%s\" fehlgeschlagen",
 "ZIP download is turned off." => "Der ZIP-Download ist deaktiviert.",
diff --git a/lib/l10n/de_DE.php b/lib/l10n/de_DE.php
index 0a72f443e4..09be0eea22 100644
--- a/lib/l10n/de_DE.php
+++ b/lib/l10n/de_DE.php
@@ -8,6 +8,9 @@ $TRANSLATIONS = array(
 "Users" => "Benutzer",
 "Admin" => "Administrator",
 "Failed to upgrade \"%s\"." => "Konnte \"%s\" nicht aktualisieren.",
+"Custom profile pictures don't work with encryption yet" => "Individuelle Profilbilder werden noch nicht von der Verschlüsselung unterstützt",
+"Unknown filetype" => "Unbekannter Dateityp",
+"Invalid image" => "Ungültiges Bild",
 "web services under your control" => "Web-Services unter Ihrer Kontrolle",
 "cannot open \"%s\"" => "Öffnen von \"%s\" fehlgeschlagen",
 "ZIP download is turned off." => "Der ZIP-Download ist deaktiviert.",
diff --git a/lib/l10n/en_GB.php b/lib/l10n/en_GB.php
index f799c071c7..d02f553eda 100644
--- a/lib/l10n/en_GB.php
+++ b/lib/l10n/en_GB.php
@@ -8,6 +8,9 @@ $TRANSLATIONS = array(
 "Users" => "Users",
 "Admin" => "Admin",
 "Failed to upgrade \"%s\"." => "Failed to upgrade \"%s\".",
+"Custom profile pictures don't work with encryption yet" => "Custom profile pictures don't work with encryption yet",
+"Unknown filetype" => "Unknown filetype",
+"Invalid image" => "Invalid image",
 "web services under your control" => "web services under your control",
 "cannot open \"%s\"" => "cannot open \"%s\"",
 "ZIP download is turned off." => "ZIP download is turned off.",
@@ -54,13 +57,13 @@ $TRANSLATIONS = array(
 "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Your web server is not yet properly setup to allow files synchronisation because the WebDAV interface seems to be broken.",
 "Please double check the <a href='%s'>installation guides</a>." => "Please double check the <a href='%s'>installation guides</a>.",
 "seconds ago" => "seconds ago",
-"_%n minute ago_::_%n minutes ago_" => array("","%n minutes ago"),
-"_%n hour ago_::_%n hours ago_" => array("","%n hours ago"),
+"_%n minute ago_::_%n minutes ago_" => array("%n minute ago","%n minutes ago"),
+"_%n hour ago_::_%n hours ago_" => array("%n hour ago","%n hours ago"),
 "today" => "today",
 "yesterday" => "yesterday",
-"_%n day go_::_%n days ago_" => array("","%n days ago"),
+"_%n day go_::_%n days ago_" => array("%n day go","%n days ago"),
 "last month" => "last month",
-"_%n month ago_::_%n months ago_" => array("","%n months ago"),
+"_%n month ago_::_%n months ago_" => array("%n month ago","%n months ago"),
 "last year" => "last year",
 "years ago" => "years ago",
 "Caused by:" => "Caused by:",
diff --git a/lib/l10n/et_EE.php b/lib/l10n/et_EE.php
index 8e3aa55c4e..85dfaeb52d 100644
--- a/lib/l10n/et_EE.php
+++ b/lib/l10n/et_EE.php
@@ -8,6 +8,9 @@ $TRANSLATIONS = array(
 "Users" => "Kasutajad",
 "Admin" => "Admin",
 "Failed to upgrade \"%s\"." => "Ebaõnnestunud uuendus \"%s\".",
+"Custom profile pictures don't work with encryption yet" => "Kohandatud profiili pildid ei toimi veel koos krüpteeringuga",
+"Unknown filetype" => "Tundmatu failitüüp",
+"Invalid image" => "Vigane pilt",
 "web services under your control" => "veebitenused sinu kontrolli all",
 "cannot open \"%s\"" => "ei suuda avada \"%s\"",
 "ZIP download is turned off." => "ZIP-ina allalaadimine on välja lülitatud.",
diff --git a/lib/l10n/fi_FI.php b/lib/l10n/fi_FI.php
index 2e69df43ad..1d2bdab749 100644
--- a/lib/l10n/fi_FI.php
+++ b/lib/l10n/fi_FI.php
@@ -1,11 +1,16 @@
 <?php
 $TRANSLATIONS = array(
 "App \"%s\" can't be installed because it is not compatible with this version of ownCloud." => "Sovellusta \"%s\" ei voi asentaa, koska se ei ole yhteensopiva käytössä olevan ownCloud-version kanssa.",
+"No app name specified" => "Sovelluksen nimeä ei määritelty",
 "Help" => "Ohje",
 "Personal" => "Henkilökohtainen",
 "Settings" => "Asetukset",
 "Users" => "Käyttäjät",
 "Admin" => "Ylläpitäjä",
+"Failed to upgrade \"%s\"." => "Kohteen \"%s\" päivitys epäonnistui.",
+"Custom profile pictures don't work with encryption yet" => "Omavalintaiset profiilikuvat eivät toimi salauksen kanssa vielä",
+"Unknown filetype" => "Tuntematon tiedostotyyppi",
+"Invalid image" => "Virheellinen kuva",
 "web services under your control" => "verkkopalvelut hallinnassasi",
 "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.",
@@ -15,6 +20,8 @@ $TRANSLATIONS = array(
 "No path specified when installing app from local file" => "Polkua ei määritelty sovellusta asennettaessa paikallisesta tiedostosta",
 "Archives of type %s are not supported" => "Tyypin %s arkistot eivät ole tuettuja",
 "App does not provide an info.xml file" => "Sovellus ei sisällä info.xml-tiedostoa",
+"App can't be installed because of not allowed code in the App" => "Sovellusta ei voi asentaa, koska sovellus sisältää kiellettyä koodia",
+"App can't be installed because it is not compatible with this version of ownCloud" => "Sovellusta ei voi asentaa, koska se ei ole yhteensopiva käytössä olevan ownCloud-version kanssa",
 "App directory already exists" => "Sovelluskansio on jo olemassa",
 "Can't create app folder. Please fix permissions. %s" => "Sovelluskansion luominen ei onnistu. Korjaa käyttöoikeudet. %s",
 "Application is not enabled" => "Sovellusta ei ole otettu käyttöön",
diff --git a/lib/l10n/gl.php b/lib/l10n/gl.php
index a8fee3b1bc..406272d690 100644
--- a/lib/l10n/gl.php
+++ b/lib/l10n/gl.php
@@ -8,6 +8,9 @@ $TRANSLATIONS = array(
 "Users" => "Usuarios",
 "Admin" => "Administración",
 "Failed to upgrade \"%s\"." => "Non foi posíbel anovar «%s».",
+"Custom profile pictures don't work with encryption yet" => "As imaxes personalizadas de perfil aínda non funcionan co cifrado",
+"Unknown filetype" => "Tipo de ficheiro descoñecido",
+"Invalid image" => "Imaxe incorrecta",
 "web services under your control" => "servizos web baixo o seu control",
 "cannot open \"%s\"" => "non foi posíbel abrir «%s»",
 "ZIP download is turned off." => "As descargas ZIP están desactivadas.",
diff --git a/lib/l10n/it.php b/lib/l10n/it.php
index c3a040048e..2dab6dee15 100644
--- a/lib/l10n/it.php
+++ b/lib/l10n/it.php
@@ -8,6 +8,9 @@ $TRANSLATIONS = array(
 "Users" => "Utenti",
 "Admin" => "Admin",
 "Failed to upgrade \"%s\"." => "Aggiornamento non riuscito \"%s\".",
+"Custom profile pictures don't work with encryption yet" => "Le immagini personalizzate del profilo non funzionano ancora con la cifratura.",
+"Unknown filetype" => "Tipo file sconosciuto",
+"Invalid image" => "Immagine non valida",
 "web services under your control" => "servizi web nelle tue mani",
 "cannot open \"%s\"" => "impossibile aprire \"%s\"",
 "ZIP download is turned off." => "Lo scaricamento in formato ZIP è stato disabilitato.",
diff --git a/lib/l10n/ja_JP.php b/lib/l10n/ja_JP.php
index 2d37001ca1..746ef17c57 100644
--- a/lib/l10n/ja_JP.php
+++ b/lib/l10n/ja_JP.php
@@ -8,6 +8,8 @@ $TRANSLATIONS = array(
 "Users" => "ユーザ",
 "Admin" => "管理",
 "Failed to upgrade \"%s\"." => "\"%s\" へのアップグレードに失敗しました。",
+"Unknown filetype" => "不明なファイルタイプ",
+"Invalid image" => "無効な画像",
 "web services under your control" => "管理下のウェブサービス",
 "cannot open \"%s\"" => "\"%s\" が開けません",
 "ZIP download is turned off." => "ZIPダウンロードは無効です。",
diff --git a/lib/l10n/lt_LT.php b/lib/l10n/lt_LT.php
index 1fd9b9ea63..db8d96c101 100644
--- a/lib/l10n/lt_LT.php
+++ b/lib/l10n/lt_LT.php
@@ -8,6 +8,9 @@ $TRANSLATIONS = array(
 "Users" => "Vartotojai",
 "Admin" => "Administravimas",
 "Failed to upgrade \"%s\"." => "Nepavyko pakelti  „%s“ versijos.",
+"Custom profile pictures don't work with encryption yet" => "Saviti profilio paveiksliukai dar neveikia su šifravimu",
+"Unknown filetype" => "Nežinomas failo tipas",
+"Invalid image" => "Netinkamas paveikslėlis",
 "web services under your control" => "jūsų valdomos web paslaugos",
 "cannot open \"%s\"" => "nepavyksta atverti „%s“",
 "ZIP download is turned off." => "ZIP atsisiuntimo galimybė yra išjungta.",
diff --git a/lib/l10n/nl.php b/lib/l10n/nl.php
index e546c1f317..20374f1f0f 100644
--- a/lib/l10n/nl.php
+++ b/lib/l10n/nl.php
@@ -1,5 +1,6 @@
 <?php
 $TRANSLATIONS = array(
+"App \"%s\" can't be installed because it is not compatible with this version of ownCloud." => "App \"%s\" kan niet worden geïnstalleerd omdat die niet compatible is met deze versie van ownCloud.",
 "No app name specified" => "De app naam is niet gespecificeerd.",
 "Help" => "Help",
 "Personal" => "Persoonlijk",
@@ -7,6 +8,9 @@ $TRANSLATIONS = array(
 "Users" => "Gebruikers",
 "Admin" => "Beheerder",
 "Failed to upgrade \"%s\"." => "Upgrade \"%s\" mislukt.",
+"Custom profile pictures don't work with encryption yet" => "Maatwerk profielafbeelding werkt nog niet met versleuteling",
+"Unknown filetype" => "Onbekend bestandsformaat",
+"Invalid image" => "Ongeldige afbeelding",
 "web services under your control" => "Webdiensten in eigen beheer",
 "cannot open \"%s\"" => "Kon \"%s\" niet openen",
 "ZIP download is turned off." => "ZIP download is uitgeschakeld.",
@@ -14,6 +18,18 @@ $TRANSLATIONS = array(
 "Back to Files" => "Terug naar bestanden",
 "Selected files too large to generate zip file." => "De geselecteerde bestanden zijn te groot om een zip bestand te maken.",
 "Download the files in smaller chunks, seperately or kindly ask your administrator." => "Download de bestanden in kleinere brokken, appart of vraag uw administrator.",
+"No source specified when installing app" => "Geen bron opgegeven bij installatie van de app",
+"No href specified when installing app from http" => "Geen href opgegeven bij installeren van de app vanaf http",
+"No path specified when installing app from local file" => "Geen pad opgegeven bij installeren van de app vanaf een lokaal bestand",
+"Archives of type %s are not supported" => "Archiefbestanden van type %s niet ondersteund",
+"Failed to open archive when installing app" => "Kon archiefbestand bij installatie van de app niet openen",
+"App does not provide an info.xml file" => "De app heeft geen info.xml bestand",
+"App can't be installed because of not allowed code in the App" => "De app kan niet worden geïnstalleerd wegens onjuiste code in de app",
+"App can't be installed because it is not compatible with this version of ownCloud" => "De app kan niet worden geïnstalleerd omdat die niet compatible is met deze versie van ownCloud",
+"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" => "De app kan niet worden geïnstallerd omdat het de <shipped>true</shipped> tag bevat die niet is toegestaan voor niet gepubliceerde apps",
+"App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" => "De app kan niet worden geïnstalleerd omdat de versie in info.xml/version niet dezelfde is als de versie zoals die in de app store staat vermeld",
+"App directory already exists" => "App directory bestaat al",
+"Can't create app folder. Please fix permissions. %s" => "Kan de app map niet aanmaken, Herstel de permissies. %s",
 "Application is not enabled" => "De applicatie is niet actief",
 "Authentication error" => "Authenticatie fout",
 "Token expired. Please reload page." => "Token verlopen.  Herlaad de pagina.",
diff --git a/lib/l10n/pa.php b/lib/l10n/pa.php
new file mode 100644
index 0000000000..069fea6e71
--- /dev/null
+++ b/lib/l10n/pa.php
@@ -0,0 +1,16 @@
+<?php
+$TRANSLATIONS = array(
+"Settings" => "ਸੈਟਿੰਗ",
+"Files" => "ਫਾਇਲਾਂ",
+"seconds ago" => "ਸਕਿੰਟ ਪਹਿਲਾਂ",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
+"today" => "ਅੱਜ",
+"yesterday" => "ਕੱਲ੍ਹ",
+"_%n day go_::_%n days ago_" => array("",""),
+"last month" => "ਪਿਛਲੇ ਮਹੀਨੇ",
+"_%n month ago_::_%n months ago_" => array("",""),
+"last year" => "ਪਿਛਲੇ ਸਾਲ",
+"years ago" => "ਸਾਲਾਂ ਪਹਿਲਾਂ"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/l10n/pt_BR.php b/lib/l10n/pt_BR.php
index 72bc1f36a1..7a58079970 100644
--- a/lib/l10n/pt_BR.php
+++ b/lib/l10n/pt_BR.php
@@ -8,6 +8,9 @@ $TRANSLATIONS = array(
 "Users" => "Usuários",
 "Admin" => "Admin",
 "Failed to upgrade \"%s\"." => "Falha na atualização de \"%s\".",
+"Custom profile pictures don't work with encryption yet" => "Fotos de perfil personalizados ainda não funcionam com criptografia",
+"Unknown filetype" => "Tipo de arquivo desconhecido",
+"Invalid image" => "Imagem inválida",
 "web services under your control" => "serviços web sob seu controle",
 "cannot open \"%s\"" => "não pode abrir \"%s\"",
 "ZIP download is turned off." => "Download ZIP está desligado.",
diff --git a/settings/l10n/ca.php b/settings/l10n/ca.php
index 6de7d4518c..c442fb84b9 100644
--- a/settings/l10n/ca.php
+++ b/settings/l10n/ca.php
@@ -27,6 +27,7 @@ $TRANSLATIONS = array(
 "Error" => "Error",
 "Update" => "Actualitza",
 "Updated" => "Actualitzada",
+"Select a profile picture" => "Seleccioneu una imatge de perfil",
 "Decrypting files... Please wait, this can take some time." => "Desencriptant fitxers... Espereu, això pot trigar una estona.",
 "Saving..." => "Desant...",
 "deleted" => "esborrat",
@@ -100,6 +101,13 @@ $TRANSLATIONS = array(
 "Email" => "Correu electrònic",
 "Your email address" => "Correu electrònic",
 "Fill in an email address to enable password recovery" => "Ompliu el correu electrònic per activar la recuperació de contrasenya",
+"Profile picture" => "Foto de perfil",
+"Upload new" => "Puja'n una de nova",
+"Select new from Files" => "Selecciona'n una de nova dels fitxers",
+"Remove image" => "Elimina imatge",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Pot ser png o jpg. Idealment quadrada, però podreu retallar-la.",
+"Abort" => "Cancel·la",
+"Choose as profile image" => "Selecciona com a imatge de perfil",
 "Language" => "Idioma",
 "Help translate" => "Ajudeu-nos amb la traducció",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/cs_CZ.php b/settings/l10n/cs_CZ.php
index 09caacbb5a..7e2ec23846 100644
--- a/settings/l10n/cs_CZ.php
+++ b/settings/l10n/cs_CZ.php
@@ -27,6 +27,7 @@ $TRANSLATIONS = array(
 "Error" => "Chyba",
 "Update" => "Aktualizovat",
 "Updated" => "Aktualizováno",
+"Select a profile picture" => "Vyberte profilový obrázek",
 "Decrypting files... Please wait, this can take some time." => "Probíhá dešifrování souborů... Čekejte prosím, tato operace může trvat nějakou dobu.",
 "Saving..." => "Ukládám...",
 "deleted" => "smazáno",
@@ -100,6 +101,13 @@ $TRANSLATIONS = array(
 "Email" => "E-mail",
 "Your email address" => "Vaše e-mailová adresa",
 "Fill in an email address to enable password recovery" => "Pro povolení obnovy hesla vyplňte e-mailovou adresu",
+"Profile picture" => "Profilová fotka",
+"Upload new" => "Nahrát nový",
+"Select new from Files" => "Vyberte nový ze souborů",
+"Remove image" => "Odebrat obrázek",
+"Either png or jpg. Ideally square but you will be able to crop it." => "png nebo jpg, nejlépe čtvercový, ale budete mít možnost jej oříznout.",
+"Abort" => "Přerušit",
+"Choose as profile image" => "Vybrat jako profilový obrázek",
 "Language" => "Jazyk",
 "Help translate" => "Pomoci s překladem",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/da.php b/settings/l10n/da.php
index b34625f75e..9872d3f5e0 100644
--- a/settings/l10n/da.php
+++ b/settings/l10n/da.php
@@ -27,6 +27,7 @@ $TRANSLATIONS = array(
 "Error" => "Fejl",
 "Update" => "Opdater",
 "Updated" => "Opdateret",
+"Select a profile picture" => "Vælg et profilbillede",
 "Decrypting files... Please wait, this can take some time." => "Dekryptere filer... Vent venligst, dette kan tage lang tid. ",
 "Saving..." => "Gemmer...",
 "deleted" => "Slettet",
@@ -100,6 +101,13 @@ $TRANSLATIONS = array(
 "Email" => "E-mail",
 "Your email address" => "Din emailadresse",
 "Fill in an email address to enable password recovery" => "Indtast en emailadresse for at kunne få påmindelse om adgangskode",
+"Profile picture" => "Profilbillede",
+"Upload new" => "Upload nyt",
+"Select new from Files" => "Vælg nyt fra Filer",
+"Remove image" => "Fjern billede",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Enten png eller jpg. Ideelt firkantet men du har mulighed for at beskære det. ",
+"Abort" => "Afbryd",
+"Choose as profile image" => "Vælg som profilbillede",
 "Language" => "Sprog",
 "Help translate" => "Hjælp med oversættelsen",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/de.php b/settings/l10n/de.php
index 87e935a93c..05c02e530e 100644
--- a/settings/l10n/de.php
+++ b/settings/l10n/de.php
@@ -27,6 +27,7 @@ $TRANSLATIONS = array(
 "Error" => "Fehler",
 "Update" => "Aktualisierung durchführen",
 "Updated" => "Aktualisiert",
+"Select a profile picture" => "Wähle ein Profilbild",
 "Decrypting files... Please wait, this can take some time." => "Entschlüssle Dateien ... Bitte warten, denn dieser Vorgang kann einige Zeit beanspruchen.",
 "Saving..." => "Speichern...",
 "deleted" => "gelöscht",
@@ -100,6 +101,13 @@ $TRANSLATIONS = array(
 "Email" => "E-Mail",
 "Your email address" => "Deine E-Mail-Adresse",
 "Fill in an email address to enable password recovery" => "Trage eine E-Mail-Adresse ein, um die Passwort-Wiederherstellung zu aktivieren.",
+"Profile picture" => "Profilbild",
+"Upload new" => "Neues hochladen",
+"Select new from Files" => "Neues aus den Dateien wählen",
+"Remove image" => "Bild entfernen",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Entweder PNG oder JPG. Im Idealfall quadratisch, aber du kannst es zuschneiden.",
+"Abort" => "Abbrechen",
+"Choose as profile image" => "Als Profilbild wählen",
 "Language" => "Sprache",
 "Help translate" => "Hilf bei der Übersetzung",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/de_DE.php b/settings/l10n/de_DE.php
index 6998b51042..15511569a1 100644
--- a/settings/l10n/de_DE.php
+++ b/settings/l10n/de_DE.php
@@ -27,6 +27,7 @@ $TRANSLATIONS = array(
 "Error" => "Fehler",
 "Update" => "Update durchführen",
 "Updated" => "Aktualisiert",
+"Select a profile picture" => "Wählen Sie ein Profilbild",
 "Decrypting files... Please wait, this can take some time." => "Entschlüssle Dateien ... Bitte warten Sie, denn dieser Vorgang kann einige Zeit beanspruchen.",
 "Saving..." => "Speichern...",
 "deleted" => "gelöscht",
@@ -100,6 +101,13 @@ $TRANSLATIONS = array(
 "Email" => "E-Mail",
 "Your email address" => "Ihre E-Mail-Adresse",
 "Fill in an email address to enable password recovery" => "Bitte tragen Sie eine E-Mail-Adresse ein, um die Passwort-Wiederherstellung zu aktivieren.",
+"Profile picture" => "Profilbild",
+"Upload new" => "Neues hochladen",
+"Select new from Files" => "Neues aus den Dateien wählen",
+"Remove image" => "Bild entfernen",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Entweder PNG oder JPG. Im Idealfall quadratisch, aber Sie können es zuschneiden.",
+"Abort" => "Abbrechen",
+"Choose as profile image" => "Als Profilbild wählen",
 "Language" => "Sprache",
 "Help translate" => "Helfen Sie bei der Übersetzung",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/el.php b/settings/l10n/el.php
index 8daa9ccf8b..a4876d854d 100644
--- a/settings/l10n/el.php
+++ b/settings/l10n/el.php
@@ -87,6 +87,7 @@ $TRANSLATIONS = array(
 "Email" => "Ηλ. ταχυδρομείο",
 "Your email address" => "Η διεύθυνση ηλεκτρονικού ταχυδρομείου σας",
 "Fill in an email address to enable password recovery" => "Συμπληρώστε μια διεύθυνση ηλεκτρονικού ταχυδρομείου για να ενεργοποιηθεί η ανάκτηση συνθηματικού",
+"Profile picture" => "Φωτογραφία προφίλ",
 "Language" => "Γλώσσα",
 "Help translate" => "Βοηθήστε στη μετάφραση",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/en_GB.php b/settings/l10n/en_GB.php
index e1a0064390..edac115210 100644
--- a/settings/l10n/en_GB.php
+++ b/settings/l10n/en_GB.php
@@ -27,6 +27,7 @@ $TRANSLATIONS = array(
 "Error" => "Error",
 "Update" => "Update",
 "Updated" => "Updated",
+"Select a profile picture" => "Select a profile picture",
 "Decrypting files... Please wait, this can take some time." => "Decrypting files... Please wait, this can take some time.",
 "Saving..." => "Saving...",
 "deleted" => "deleted",
@@ -100,6 +101,13 @@ $TRANSLATIONS = array(
 "Email" => "Email",
 "Your email address" => "Your email address",
 "Fill in an email address to enable password recovery" => "Fill in an email address to enable password recovery",
+"Profile picture" => "Profile picture",
+"Upload new" => "Upload new",
+"Select new from Files" => "Select new from Files",
+"Remove image" => "Remove image",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Either png or jpg. Ideally square but you will be able to crop it.",
+"Abort" => "Abort",
+"Choose as profile image" => "Choose as profile image",
 "Language" => "Language",
 "Help translate" => "Help translate",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/eo.php b/settings/l10n/eo.php
index 6c3adf2ddc..4c797e1a8d 100644
--- a/settings/l10n/eo.php
+++ b/settings/l10n/eo.php
@@ -64,6 +64,7 @@ $TRANSLATIONS = array(
 "Email" => "Retpoŝto",
 "Your email address" => "Via retpoŝta adreso",
 "Fill in an email address to enable password recovery" => "Enigu retpoŝtadreson por kapabligi pasvortan restaŭron",
+"Profile picture" => "Profila bildo",
 "Language" => "Lingvo",
 "Help translate" => "Helpu traduki",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/es.php b/settings/l10n/es.php
index 52610e1c4f..027bd23c3e 100644
--- a/settings/l10n/es.php
+++ b/settings/l10n/es.php
@@ -100,6 +100,8 @@ $TRANSLATIONS = array(
 "Email" => "E-mail",
 "Your email address" => "Su dirección de correo",
 "Fill in an email address to enable password recovery" => "Escriba una dirección de correo electrónico para restablecer la contraseña",
+"Profile picture" => "Foto del perfil",
+"Abort" => "Abortar",
 "Language" => "Idioma",
 "Help translate" => "Ayúdanos a traducir",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/es_AR.php b/settings/l10n/es_AR.php
index 252692ea4c..aba4b604a2 100644
--- a/settings/l10n/es_AR.php
+++ b/settings/l10n/es_AR.php
@@ -100,6 +100,7 @@ $TRANSLATIONS = array(
 "Email" => "e-mail",
 "Your email address" => "Tu dirección de e-mail",
 "Fill in an email address to enable password recovery" => "Escribí una dirección de e-mail para restablecer la contraseña",
+"Abort" => "Abortar",
 "Language" => "Idioma",
 "Help translate" => "Ayudanos a traducir",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/et_EE.php b/settings/l10n/et_EE.php
index d779a36cb9..0a1b66e6ae 100644
--- a/settings/l10n/et_EE.php
+++ b/settings/l10n/et_EE.php
@@ -27,6 +27,7 @@ $TRANSLATIONS = array(
 "Error" => "Viga",
 "Update" => "Uuenda",
 "Updated" => "Uuendatud",
+"Select a profile picture" => "Vali profiili pilt",
 "Decrypting files... Please wait, this can take some time." => "Dekrüpteerin faile... Palun oota, see võib võtta veidi aega.",
 "Saving..." => "Salvestamine...",
 "deleted" => "kustutatud",
@@ -100,6 +101,13 @@ $TRANSLATIONS = array(
 "Email" => "E-post",
 "Your email address" => "Sinu e-posti aadress",
 "Fill in an email address to enable password recovery" => "Parooli taastamise sisse lülitamiseks sisesta e-posti aadress",
+"Profile picture" => "Profiili pilt",
+"Upload new" => "Laadi uus",
+"Select new from Files" => "Vali failidest uus",
+"Remove image" => "Eemalda pilt",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Kas png või jpg. Võimalikult ruudukujuline, kuid Sul on võimalus veel lõigata.",
+"Abort" => "Katkesta",
+"Choose as profile image" => "Vali kui profiili pilt",
 "Language" => "Keel",
 "Help translate" => "Aita tõlkida",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/eu.php b/settings/l10n/eu.php
index 6491c7fc2d..63a3bf3f62 100644
--- a/settings/l10n/eu.php
+++ b/settings/l10n/eu.php
@@ -94,6 +94,7 @@ $TRANSLATIONS = array(
 "Email" => "E-posta",
 "Your email address" => "Zure e-posta",
 "Fill in an email address to enable password recovery" => "Idatz ezazu e-posta bat pasahitza berreskuratu ahal izateko",
+"Profile picture" => "Profilaren irudia",
 "Language" => "Hizkuntza",
 "Help translate" => "Lagundu itzultzen",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/fa.php b/settings/l10n/fa.php
index 74a49b9b05..b4ae186e30 100644
--- a/settings/l10n/fa.php
+++ b/settings/l10n/fa.php
@@ -87,6 +87,7 @@ $TRANSLATIONS = array(
 "Email" => "ایمیل",
 "Your email address" => "پست الکترونیکی شما",
 "Fill in an email address to enable password recovery" => "پست الکترونیکی را پرکنید  تا بازیابی گذرواژه فعال شود",
+"Profile picture" => "تصویر پروفایل",
 "Language" => "زبان",
 "Help translate" => "به ترجمه آن کمک کنید",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/fi_FI.php b/settings/l10n/fi_FI.php
index cf2ff5041c..81ec9b483e 100644
--- a/settings/l10n/fi_FI.php
+++ b/settings/l10n/fi_FI.php
@@ -27,6 +27,7 @@ $TRANSLATIONS = array(
 "Error" => "Virhe",
 "Update" => "Päivitä",
 "Updated" => "Päivitetty",
+"Select a profile picture" => "Valitse profiilikuva",
 "Decrypting files... Please wait, this can take some time." => "Puretaan tiedostojen salausta... Odota, tämä voi kestää jonkin aikaa.",
 "Saving..." => "Tallennetaan...",
 "deleted" => "poistettu",
@@ -87,6 +88,13 @@ $TRANSLATIONS = array(
 "Email" => "Sähköpostiosoite",
 "Your email address" => "Sähköpostiosoitteesi",
 "Fill in an email address to enable password recovery" => "Anna sähköpostiosoitteesi, jotta unohdettu salasana on mahdollista palauttaa",
+"Profile picture" => "Profiilikuva",
+"Upload new" => "Lähetä uusi",
+"Select new from Files" => "Valitse uusi tiedostoista",
+"Remove image" => "Poista kuva",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Joko png- tai jpg-kuva. Mieluite neliö, voit kuitenkin rajata kuvaa.",
+"Abort" => "Keskeytä",
+"Choose as profile image" => "Valitse profiilikuvaksi",
 "Language" => "Kieli",
 "Help translate" => "Auta kääntämisessä",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php
index d973ab30af..6b1a829435 100644
--- a/settings/l10n/fr.php
+++ b/settings/l10n/fr.php
@@ -27,6 +27,7 @@ $TRANSLATIONS = array(
 "Error" => "Erreur",
 "Update" => "Mettre à jour",
 "Updated" => "Mise à jour effectuée avec succès",
+"Select a profile picture" => "Selectionner une photo de profil ",
 "Decrypting files... Please wait, this can take some time." => "Déchiffrement en cours... Cela peut prendre un certain temps.",
 "Saving..." => "Enregistrement...",
 "deleted" => "supprimé",
@@ -100,6 +101,13 @@ $TRANSLATIONS = array(
 "Email" => "Adresse mail",
 "Your email address" => "Votre adresse e-mail",
 "Fill in an email address to enable password recovery" => "Entrez votre adresse e-mail pour permettre la réinitialisation du mot de passe",
+"Profile picture" => "Photo de profil",
+"Upload new" => "Télécharger nouveau",
+"Select new from Files" => "Sélectionner un nouveau depuis les documents",
+"Remove image" => "Supprimer l'image",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Soit png ou jpg. idéalement carée mais vous pourrez la recadrer .",
+"Abort" => "Abandonner",
+"Choose as profile image" => "Choisir en temps que photo de profil ",
 "Language" => "Langue",
 "Help translate" => "Aidez à traduire",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/gl.php b/settings/l10n/gl.php
index b3e3dfec91..e2537255fc 100644
--- a/settings/l10n/gl.php
+++ b/settings/l10n/gl.php
@@ -27,6 +27,7 @@ $TRANSLATIONS = array(
 "Error" => "Erro",
 "Update" => "Actualizar",
 "Updated" => "Actualizado",
+"Select a profile picture" => "Seleccione unha imaxe para o perfil",
 "Decrypting files... Please wait, this can take some time." => "Descifrando ficheiros... isto pode levar un anaco.",
 "Saving..." => "Gardando...",
 "deleted" => "eliminado",
@@ -100,6 +101,13 @@ $TRANSLATIONS = array(
 "Email" => "Correo",
 "Your email address" => "O seu enderezo de correo",
 "Fill in an email address to enable password recovery" => "Escriba un enderezo de correo para activar o contrasinal de recuperación",
+"Profile picture" => "Imaxe do perfil",
+"Upload new" => "Novo envío",
+"Select new from Files" => "Seleccione unha nova de ficheiros",
+"Remove image" => "Retirar a imaxe",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Calquera png ou jpg. É preferíbel que sexa cadrada, mais poderá recortala.",
+"Abort" => "Cancelar",
+"Choose as profile image" => "Escolla unha imaxe para o perfil",
 "Language" => "Idioma",
 "Help translate" => "Axude na tradución",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/he.php b/settings/l10n/he.php
index 5207a05de1..bdfa7f5699 100644
--- a/settings/l10n/he.php
+++ b/settings/l10n/he.php
@@ -85,6 +85,7 @@ $TRANSLATIONS = array(
 "Email" => "דואר אלקטרוני",
 "Your email address" => "כתובת הדוא״ל שלך",
 "Fill in an email address to enable password recovery" => "נא למלא את כתובת הדוא״ל שלך כדי לאפשר שחזור ססמה",
+"Profile picture" => "תמונת פרופיל",
 "Language" => "פה",
 "Help translate" => "עזרה בתרגום",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/hi.php b/settings/l10n/hi.php
index 094a9dba29..2c65a26dae 100644
--- a/settings/l10n/hi.php
+++ b/settings/l10n/hi.php
@@ -2,8 +2,10 @@
 $TRANSLATIONS = array(
 "Error" => "त्रुटि",
 "Update" => "अद्यतन",
+"Security Warning" => "सुरक्षा चेतावनी ",
 "Password" => "पासवर्ड",
 "New password" => "नया पासवर्ड",
+"Abort" => "रद्द करना ",
 "Username" => "प्रयोक्ता का नाम"
 );
 $PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/settings/l10n/hu_HU.php b/settings/l10n/hu_HU.php
index f5a469e3c2..f31826c149 100644
--- a/settings/l10n/hu_HU.php
+++ b/settings/l10n/hu_HU.php
@@ -97,6 +97,7 @@ $TRANSLATIONS = array(
 "Email" => "Email",
 "Your email address" => "Az Ön email címe",
 "Fill in an email address to enable password recovery" => "Adja meg az email címét, hogy jelszó-emlékeztetőt kérhessen, ha elfelejtette a jelszavát!",
+"Profile picture" => "Profilkép",
 "Language" => "Nyelv",
 "Help translate" => "Segítsen a fordításban!",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/ia.php b/settings/l10n/ia.php
index 91df05ada3..b51bc32a2f 100644
--- a/settings/l10n/ia.php
+++ b/settings/l10n/ia.php
@@ -19,6 +19,7 @@ $TRANSLATIONS = array(
 "Change password" => "Cambiar contrasigno",
 "Email" => "E-posta",
 "Your email address" => "Tu adresse de e-posta",
+"Profile picture" => "Imagine de profilo",
 "Language" => "Linguage",
 "Help translate" => "Adjuta a traducer",
 "Create" => "Crear",
diff --git a/settings/l10n/it.php b/settings/l10n/it.php
index 29594a95dc..b06fc2a0f6 100644
--- a/settings/l10n/it.php
+++ b/settings/l10n/it.php
@@ -27,6 +27,7 @@ $TRANSLATIONS = array(
 "Error" => "Errore",
 "Update" => "Aggiorna",
 "Updated" => "Aggiornato",
+"Select a profile picture" => "Seleziona un'immagine del profilo",
 "Decrypting files... Please wait, this can take some time." => "Decifratura dei file in corso... Attendi, potrebbe richiedere del tempo.",
 "Saving..." => "Salvataggio in corso...",
 "deleted" => "eliminati",
@@ -100,6 +101,13 @@ $TRANSLATIONS = array(
 "Email" => "Posta elettronica",
 "Your email address" => "Il tuo indirizzo email",
 "Fill in an email address to enable password recovery" => "Inserisci il tuo indirizzo email per abilitare il recupero della password",
+"Profile picture" => "Immagine del profilo",
+"Upload new" => "Carica nuova",
+"Select new from Files" => "Seleziona nuova da file",
+"Remove image" => "Rimuovi immagine",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Sia png che jpg. Preferibilmente quadrata, ma potrai ritagliarla.",
+"Abort" => "Interrompi",
+"Choose as profile image" => "Scegli come immagine del profilo",
 "Language" => "Lingua",
 "Help translate" => "Migliora la traduzione",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/ja_JP.php b/settings/l10n/ja_JP.php
index 63e83cab4d..12784e3f53 100644
--- a/settings/l10n/ja_JP.php
+++ b/settings/l10n/ja_JP.php
@@ -27,6 +27,7 @@ $TRANSLATIONS = array(
 "Error" => "エラー",
 "Update" => "更新",
 "Updated" => "更新済み",
+"Select a profile picture" => "プロファイル画像を選択",
 "Decrypting files... Please wait, this can take some time." => "ファイルを複合中... しばらくお待ちください、この処理には少し時間がかかるかもしれません。",
 "Saving..." => "保存中...",
 "deleted" => "削除",
@@ -100,6 +101,10 @@ $TRANSLATIONS = array(
 "Email" => "メール",
 "Your email address" => "あなたのメールアドレス",
 "Fill in an email address to enable password recovery" => "※パスワード回復を有効にするにはメールアドレスの入力が必要です",
+"Profile picture" => "プロフィール写真",
+"Remove image" => "画像を削除",
+"Abort" => "中止",
+"Choose as profile image" => "プロファイル画像として選択",
 "Language" => "言語",
 "Help translate" => "翻訳に協力する",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/ko.php b/settings/l10n/ko.php
index 5feb1d5694..cbf693d712 100644
--- a/settings/l10n/ko.php
+++ b/settings/l10n/ko.php
@@ -87,6 +87,7 @@ $TRANSLATIONS = array(
 "Email" => "이메일",
 "Your email address" => "이메일 주소",
 "Fill in an email address to enable password recovery" => "암호 찾기 기능을 사용하려면 이메일 주소를 입력하십시오",
+"Profile picture" => "프로필 사진",
 "Language" => "언어",
 "Help translate" => "번역 돕기",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/lt_LT.php b/settings/l10n/lt_LT.php
index 31c9e2be59..a23d21ed7f 100644
--- a/settings/l10n/lt_LT.php
+++ b/settings/l10n/lt_LT.php
@@ -27,6 +27,7 @@ $TRANSLATIONS = array(
 "Error" => "Klaida",
 "Update" => "Atnaujinti",
 "Updated" => "Atnaujinta",
+"Select a profile picture" => "Pažymėkite profilio paveikslėlį",
 "Decrypting files... Please wait, this can take some time." => "Iššifruojami failai... Prašome palaukti, tai gali užtrukti.",
 "Saving..." => "Saugoma...",
 "deleted" => "ištrinta",
@@ -100,6 +101,13 @@ $TRANSLATIONS = array(
 "Email" => "El. Paštas",
 "Your email address" => "Jūsų el. pašto adresas",
 "Fill in an email address to enable password recovery" => "Pamiršto slaptažodžio atkūrimui įveskite savo el. pašto adresą",
+"Profile picture" => "Profilio paveikslėlis",
+"Upload new" => "Įkelti naują",
+"Select new from Files" => "Pasirinkti naują iš failų",
+"Remove image" => "Pašalinti paveikslėlį",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Arba png arba jpg. Geriausia kvadratinį, bet galėsite jį apkarpyti.",
+"Abort" => "Atšaukti",
+"Choose as profile image" => "Pasirinkite profilio paveiksliuką",
 "Language" => "Kalba",
 "Help translate" => "Padėkite išversti",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/mk.php b/settings/l10n/mk.php
index 42d8311564..901ef9106e 100644
--- a/settings/l10n/mk.php
+++ b/settings/l10n/mk.php
@@ -50,6 +50,7 @@ $TRANSLATIONS = array(
 "Email" => "Е-пошта",
 "Your email address" => "Вашата адреса за е-пошта",
 "Fill in an email address to enable password recovery" => "Пополни ја адресата за е-пошта за да може да ја обновуваш лозинката",
+"Profile picture" => "Фотографија за профил",
 "Language" => "Јазик",
 "Help translate" => "Помогни во преводот",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/ms_MY.php b/settings/l10n/ms_MY.php
index 3d14df3d65..0ba601dd72 100644
--- a/settings/l10n/ms_MY.php
+++ b/settings/l10n/ms_MY.php
@@ -29,6 +29,7 @@ $TRANSLATIONS = array(
 "Email" => "Email",
 "Your email address" => "Alamat emel anda",
 "Fill in an email address to enable password recovery" => "Isi alamat emel anda untuk membolehkan pemulihan kata laluan",
+"Profile picture" => "Gambar profil",
 "Language" => "Bahasa",
 "Help translate" => "Bantu terjemah",
 "Create" => "Buat",
diff --git a/settings/l10n/nb_NO.php b/settings/l10n/nb_NO.php
index e017e965e9..ba46cd654e 100644
--- a/settings/l10n/nb_NO.php
+++ b/settings/l10n/nb_NO.php
@@ -87,6 +87,7 @@ $TRANSLATIONS = array(
 "Email" => "Epost",
 "Your email address" => "Din e-postadresse",
 "Fill in an email address to enable password recovery" => "Oppi epostadressen du vil tilbakestille passordet for",
+"Profile picture" => "Profilbilde",
 "Language" => "Språk",
 "Help translate" => "Bidra til oversettelsen",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/nl.php b/settings/l10n/nl.php
index 6e82c9c92f..7b486768b0 100644
--- a/settings/l10n/nl.php
+++ b/settings/l10n/nl.php
@@ -27,6 +27,7 @@ $TRANSLATIONS = array(
 "Error" => "Fout",
 "Update" => "Bijwerken",
 "Updated" => "Bijgewerkt",
+"Select a profile picture" => "Kies een profielafbeelding",
 "Decrypting files... Please wait, this can take some time." => "Bestanden worden gedecodeerd... Even geduld alstublieft, dit kan even duren.",
 "Saving..." => "Opslaan",
 "deleted" => "verwijderd",
@@ -100,6 +101,13 @@ $TRANSLATIONS = array(
 "Email" => "E-mailadres",
 "Your email address" => "Uw e-mailadres",
 "Fill in an email address to enable password recovery" => "Vul een mailadres in om je wachtwoord te kunnen herstellen",
+"Profile picture" => "Profielafbeelding",
+"Upload new" => "Upload een nieuwe",
+"Select new from Files" => "Selecteer een nieuwe vanuit bestanden",
+"Remove image" => "Verwijder afbeelding",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Of png, of jpg. Bij voorkeur vierkant, maar u kunt bijsnijden.",
+"Abort" => "Afbreken",
+"Choose as profile image" => "Kies als profielafbeelding",
 "Language" => "Taal",
 "Help translate" => "Help met vertalen",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/pa.php b/settings/l10n/pa.php
new file mode 100644
index 0000000000..795a80f7d4
--- /dev/null
+++ b/settings/l10n/pa.php
@@ -0,0 +1,24 @@
+<?php
+$TRANSLATIONS = array(
+"Language changed" => "ਭਾਸ਼ਾ ਬਦਲੀ",
+"Disable" => "ਬੰਦ",
+"Enable" => "ਚਾਲੂ",
+"Please wait...." => "...ਉਡੀਕੋ ਜੀ",
+"Updating...." => "...ਅੱਪਡੇਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ",
+"Error" => "ਗਲਤੀ",
+"Updated" => "ਅੱਪਡੇਟ ਕੀਤਾ",
+"Saving..." => "...ਸੰਭਾਲਿਆ ਜਾ ਰਿਹਾ ਹੈ",
+"deleted" => "ਹਟਾਈ",
+"undo" => "ਵਾਪਸ",
+"Groups" => "ਗਰੁੱਪ",
+"Group Admin" => "ਗਰੁੱਪ ਐਡਮਿਨ",
+"Delete" => "ਹਟਾਓ",
+"add group" => "ਗਰੁੱਪ ਸ਼ਾਮਲ",
+"__language_name__" => "__ਭਾਸ਼ਾ_ਨਾਂ__",
+"Security Warning" => "ਸੁਰੱਖਿਆ ਚੇਤਾਵਨੀ",
+"Setup Warning" => "ਸੈਟਅੱਪ ਚੇਤਾਵਨੀ",
+"Password" => "ਪਾਸਵਰ",
+"Change password" => "ਪਾਸਵਰਡ ਬਦਲੋ",
+"Username" => "ਯੂਜ਼ਰ-ਨਾਂ"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/settings/l10n/pl.php b/settings/l10n/pl.php
index a8bc60ffed..d07d1f7a4d 100644
--- a/settings/l10n/pl.php
+++ b/settings/l10n/pl.php
@@ -100,6 +100,8 @@ $TRANSLATIONS = array(
 "Email" => "Email",
 "Your email address" => "Twój adres e-mail",
 "Fill in an email address to enable password recovery" => "Podaj adres e-mail, aby uzyskać możliwość odzyskania hasła",
+"Profile picture" => "Zdjęcie profilu",
+"Abort" => "Anuluj",
 "Language" => "Język",
 "Help translate" => "Pomóż w tłumaczeniu",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/pt_BR.php b/settings/l10n/pt_BR.php
index 7b51025356..7d36468e1a 100644
--- a/settings/l10n/pt_BR.php
+++ b/settings/l10n/pt_BR.php
@@ -27,6 +27,7 @@ $TRANSLATIONS = array(
 "Error" => "Erro",
 "Update" => "Atualizar",
 "Updated" => "Atualizado",
+"Select a profile picture" => "Selecione uma imagem para o perfil",
 "Decrypting files... Please wait, this can take some time." => "Decriptando arquivos... Por favor aguarde, isso pode levar algum tempo.",
 "Saving..." => "Salvando...",
 "deleted" => "excluído",
@@ -100,6 +101,13 @@ $TRANSLATIONS = array(
 "Email" => "E-mail",
 "Your email address" => "Seu endereço de e-mail",
 "Fill in an email address to enable password recovery" => "Preencha um endereço de e-mail para habilitar a recuperação de senha",
+"Profile picture" => "Imagem para o perfil",
+"Upload new" => "Enviar nova foto",
+"Select new from Files" => "Selecinar uma nova dos Arquivos",
+"Remove image" => "Remover imagem",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Ou png ou jpg. O ideal é quadrado, mas você vai ser capaz de cortá-la.",
+"Abort" => "Abortar",
+"Choose as profile image" => "Escolha como imagem para o perfil",
 "Language" => "Idioma",
 "Help translate" => "Ajude a traduzir",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/pt_PT.php b/settings/l10n/pt_PT.php
index e1299bb964..cf0e66a24d 100644
--- a/settings/l10n/pt_PT.php
+++ b/settings/l10n/pt_PT.php
@@ -100,6 +100,7 @@ $TRANSLATIONS = array(
 "Email" => "Email",
 "Your email address" => "O seu endereço de email",
 "Fill in an email address to enable password recovery" => "Preencha com o seu endereço de email para ativar a recuperação da palavra-chave",
+"Profile picture" => "Foto do perfil",
 "Language" => "Idioma",
 "Help translate" => "Ajude a traduzir",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/ru.php b/settings/l10n/ru.php
index 63e502b8d5..40dbbd4500 100644
--- a/settings/l10n/ru.php
+++ b/settings/l10n/ru.php
@@ -98,6 +98,7 @@ $TRANSLATIONS = array(
 "Email" => "E-mail",
 "Your email address" => "Ваш адрес электронной почты",
 "Fill in an email address to enable password recovery" => "Введите адрес электронной почты чтобы появилась возможность восстановления пароля",
+"Profile picture" => "Фото профиля",
 "Language" => "Язык",
 "Help translate" => "Помочь с переводом",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/sk_SK.php b/settings/l10n/sk_SK.php
index b83407fc3b..cd44e5f94c 100644
--- a/settings/l10n/sk_SK.php
+++ b/settings/l10n/sk_SK.php
@@ -100,6 +100,7 @@ $TRANSLATIONS = array(
 "Email" => "Email",
 "Your email address" => "Vaša emailová adresa",
 "Fill in an email address to enable password recovery" => "Vyplňte emailovú adresu pre aktivovanie obnovy hesla",
+"Profile picture" => "Profilová fotka",
 "Language" => "Jazyk",
 "Help translate" => "Pomôcť s prekladom",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/sl.php b/settings/l10n/sl.php
index 63477b0b9f..0fbf324802 100644
--- a/settings/l10n/sl.php
+++ b/settings/l10n/sl.php
@@ -87,6 +87,7 @@ $TRANSLATIONS = array(
 "Email" => "Elektronski naslov",
 "Your email address" => "Osebni elektronski naslov",
 "Fill in an email address to enable password recovery" => "Vpišite osebni elektronski naslov in s tem omogočite obnovitev gesla",
+"Profile picture" => "Slika profila",
 "Language" => "Jezik",
 "Help translate" => "Sodelujte pri prevajanju",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/sv.php b/settings/l10n/sv.php
index 15e0ca9b8d..5f6313f182 100644
--- a/settings/l10n/sv.php
+++ b/settings/l10n/sv.php
@@ -100,6 +100,7 @@ $TRANSLATIONS = array(
 "Email" => "E-post",
 "Your email address" => "Din e-postadress",
 "Fill in an email address to enable password recovery" => "Fyll i en e-postadress för att aktivera återställning av lösenord",
+"Profile picture" => "Profilbild",
 "Language" => "Språk",
 "Help translate" => "Hjälp att översätta",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/th_TH.php b/settings/l10n/th_TH.php
index ef62f185c5..9004234255 100644
--- a/settings/l10n/th_TH.php
+++ b/settings/l10n/th_TH.php
@@ -71,6 +71,7 @@ $TRANSLATIONS = array(
 "Email" => "อีเมล",
 "Your email address" => "ที่อยู่อีเมล์ของคุณ",
 "Fill in an email address to enable password recovery" => "กรอกที่อยู่อีเมล์ของคุณเพื่อเปิดให้มีการกู้คืนรหัสผ่านได้",
+"Profile picture" => "รูปภาพโปรไฟล์",
 "Language" => "ภาษา",
 "Help translate" => "ช่วยกันแปล",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/tr.php b/settings/l10n/tr.php
index cd90d2f8a0..1f4ce98f55 100644
--- a/settings/l10n/tr.php
+++ b/settings/l10n/tr.php
@@ -100,6 +100,7 @@ $TRANSLATIONS = array(
 "Email" => "Eposta",
 "Your email address" => "Eposta adresiniz",
 "Fill in an email address to enable password recovery" => "Parola kurtarmayı etkinleştirmek için bir eposta adresi girin",
+"Profile picture" => "Profil resmi",
 "Language" => "Dil",
 "Help translate" => "Çevirilere yardım edin",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/zh_CN.php b/settings/l10n/zh_CN.php
index cc14a3648a..659c5bea1a 100644
--- a/settings/l10n/zh_CN.php
+++ b/settings/l10n/zh_CN.php
@@ -100,6 +100,7 @@ $TRANSLATIONS = array(
 "Email" => "电子邮件",
 "Your email address" => "您的电子邮件",
 "Fill in an email address to enable password recovery" => "填写电子邮件地址以启用密码恢复功能",
+"Profile picture" => "联系人图片",
 "Language" => "语言",
 "Help translate" => "帮助翻译",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/zh_TW.php b/settings/l10n/zh_TW.php
index 73c015d17a..add2f1fe00 100644
--- a/settings/l10n/zh_TW.php
+++ b/settings/l10n/zh_TW.php
@@ -100,6 +100,7 @@ $TRANSLATIONS = array(
 "Email" => "信箱",
 "Your email address" => "您的電子郵件信箱",
 "Fill in an email address to enable password recovery" => "請填入電子郵件信箱以便回復密碼",
+"Profile picture" => "個人資料照片",
 "Language" => "語言",
 "Help translate" => "幫助翻譯",
 "WebDAV" => "WebDAV",
-- 
GitLab


From 72d53008cc848f7bdaf55183d6e4be75c8bfae53 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Wed, 18 Sep 2013 17:58:15 +0200
Subject: [PATCH 108/248] indentation

---
 core/js/oc-dialogs.js | 86 +++++++++++++++++++++----------------------
 1 file changed, 43 insertions(+), 43 deletions(-)

diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index c4d1f34a09..ddd3cb4ac7 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -281,53 +281,53 @@ var OCdialogs = {
 
 		var addConflict = function(conflicts, original, replacement) {
 
-				var conflict = conflicts.find('.template').clone().removeClass('template').addClass('conflict');
-				
-				conflict.data('data',data);
-
-				conflict.find('.filename').text(original.name);
-				conflict.find('.original .size').text(humanFileSize(original.size));
-				conflict.find('.original .mtime').text(formatDate(original.mtime*1000));
-				// ie sucks
-				if (replacement.size && replacement.lastModifiedDate) {
-					conflict.find('.replacement .size').text(humanFileSize(replacement.size));
-					conflict.find('.replacement .mtime').text(formatDate(replacement.lastModifiedDate));
-				}
-				var path = getPathForPreview(original.name);
-				lazyLoadPreview(path, original.type, function(previewpath){
-					conflict.find('.original .icon').css('background-image','url('+previewpath+')');
-				});
-				getCroppedPreview(replacement).then(
-					function(path){
+			var conflict = conflicts.find('.template').clone().removeClass('template').addClass('conflict');
+
+			conflict.data('data',data);
+
+			conflict.find('.filename').text(original.name);
+			conflict.find('.original .size').text(humanFileSize(original.size));
+			conflict.find('.original .mtime').text(formatDate(original.mtime*1000));
+			// ie sucks
+			if (replacement.size && replacement.lastModifiedDate) {
+				conflict.find('.replacement .size').text(humanFileSize(replacement.size));
+				conflict.find('.replacement .mtime').text(formatDate(replacement.lastModifiedDate));
+			}
+			var path = getPathForPreview(original.name);
+			lazyLoadPreview(path, original.type, function(previewpath){
+				conflict.find('.original .icon').css('background-image','url('+previewpath+')');
+			});
+			getCroppedPreview(replacement).then(
+				function(path){
+					conflict.find('.replacement .icon').css('background-image','url(' + path + ')');
+				}, function(){
+					getMimeIcon(replacement.type,function(path){
 						conflict.find('.replacement .icon').css('background-image','url(' + path + ')');
-					}, function(){
-						getMimeIcon(replacement.type,function(path){
-							conflict.find('.replacement .icon').css('background-image','url(' + path + ')');
-						});
-					}
-				);
-				conflicts.append(conflict);
-
-				//set more recent mtime bold
-				// ie sucks
-				if (replacement.lastModifiedDate && replacement.lastModifiedDate.getTime() > original.mtime*1000) {
-					conflict.find('.replacement .mtime').css('font-weight', 'bold');
-				} else if (replacement.lastModifiedDate && replacement.lastModifiedDate.getTime() < original.mtime*1000) {
-					conflict.find('.original .mtime').css('font-weight', 'bold');
-				} else {
-					//TODO add to same mtime collection?
+					});
 				}
+			);
+			conflicts.append(conflict);
+
+			//set more recent mtime bold
+			// ie sucks
+			if (replacement.lastModifiedDate && replacement.lastModifiedDate.getTime() > original.mtime*1000) {
+				conflict.find('.replacement .mtime').css('font-weight', 'bold');
+			} else if (replacement.lastModifiedDate && replacement.lastModifiedDate.getTime() < original.mtime*1000) {
+				conflict.find('.original .mtime').css('font-weight', 'bold');
+			} else {
+				//TODO add to same mtime collection?
+			}
 
-				// set bigger size bold
-				if (replacement.size && replacement.size > original.size) {
-					conflict.find('.replacement .size').css('font-weight', 'bold');
-				} else if (replacement.size && replacement.size < original.size) {
-					conflict.find('.original .size').css('font-weight', 'bold');
-				} else {
-					//TODO add to same size collection?
-				}
+			// set bigger size bold
+			if (replacement.size && replacement.size > original.size) {
+				conflict.find('.replacement .size').css('font-weight', 'bold');
+			} else if (replacement.size && replacement.size < original.size) {
+				conflict.find('.original .size').css('font-weight', 'bold');
+			} else {
+				//TODO add to same size collection?
+			}
 
-				//TODO show skip action for files with same size and mtime in bottom row
+			//TODO show skip action for files with same size and mtime in bottom row
 
 		};
 		//var selection = controller.getSelection(data.originalFiles);
-- 
GitLab


From 1274d6116dc59a8238ad9d02d467260387fe2eac Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 18 Sep 2013 22:22:51 +0200
Subject: [PATCH 109/248] updating php docs

---
 lib/cache.php           | 15 ++++++++++-----
 lib/cache/broker.php    |  8 ++++++++
 lib/cache/usercache.php |  4 ++--
 lib/public/icache.php   |  2 +-
 tests/lib/cache.php     |  2 +-
 5 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/lib/cache.php b/lib/cache.php
index a4fa8be710..a311f10a00 100644
--- a/lib/cache.php
+++ b/lib/cache.php
@@ -10,17 +10,17 @@ namespace OC;
 
 class Cache {
 	/**
-	 * @var OC_Cache $user_cache
+	 * @var Cache $user_cache
 	 */
 	static protected $user_cache;
 	/**
-	 * @var OC_Cache $global_cache
+	 * @var Cache $global_cache
 	 */
 	static protected $global_cache;
 
 	/**
 	 * get the global cache
-	 * @return OC_Cache
+	 * @return Cache
 	 */
 	static public function getGlobalCache() {
 		if (!self::$global_cache) {
@@ -31,7 +31,7 @@ class Cache {
 
 	/**
 	 * get the user cache
-	 * @return OC_Cache
+	 * @return Cache
 	 */
 	static public function getUserCache() {
 		if (!self::$user_cache) {
@@ -87,7 +87,7 @@ class Cache {
 
 	/**
 	 * clear the user cache of all entries starting with a prefix
-	 * @param string prefix (optional)
+	 * @param string $prefix (optional)
 	 * @return bool
 	 */
 	static public function clear($prefix='') {
@@ -95,6 +95,11 @@ class Cache {
 		return $user_cache->clear($prefix);
 	}
 
+	/**
+	 * creates cache key based on the files given
+	 * @param $files
+	 * @return string
+	 */
 	static public function generateCacheKeyFromFiles($files) {
 		$key = '';
 		sort($files);
diff --git a/lib/cache/broker.php b/lib/cache/broker.php
index b7f1b67a6d..9b7e837e1b 100644
--- a/lib/cache/broker.php
+++ b/lib/cache/broker.php
@@ -9,7 +9,15 @@
 namespace OC\Cache;
 
 class Broker {
+
+	/**
+	 * @var \OC\Cache
+	 */
 	protected $fast_cache;
+
+	/**
+	 * @var \OC\Cache
+	 */
 	protected $slow_cache;
 
 	public function __construct($fast_cache, $slow_cache) {
diff --git a/lib/cache/usercache.php b/lib/cache/usercache.php
index aac3b39af3..baa8820700 100644
--- a/lib/cache/usercache.php
+++ b/lib/cache/usercache.php
@@ -13,7 +13,7 @@ namespace OC\Cache;
 class UserCache implements \OCP\ICache {
 
 	/**
-	 * @var OC\Cache\File $userCache
+	 * @var \OC\Cache\File $userCache
 	 */
 	protected $userCache;
 
@@ -68,7 +68,7 @@ class UserCache implements \OCP\ICache {
 
 	/**
 	 * clear the user cache of all entries starting with a prefix
-	 * @param string prefix (optional)
+	 * @param string $prefix (optional)
 	 * @return bool
 	 */
 	public function clear($prefix = '') {
diff --git a/lib/public/icache.php b/lib/public/icache.php
index 202459f7c2..436ee71b2b 100644
--- a/lib/public/icache.php
+++ b/lib/public/icache.php
@@ -48,7 +48,7 @@ interface ICache {
 
 	/**
 	 * clear the user cache of all entries starting with a prefix
-	 * @param string prefix (optional)
+	 * @param string $prefix (optional)
 	 * @return bool
 	 */
 	public function clear($prefix = '');
diff --git a/tests/lib/cache.php b/tests/lib/cache.php
index 3dcf39f7d6..8fefa25f65 100644
--- a/tests/lib/cache.php
+++ b/tests/lib/cache.php
@@ -8,7 +8,7 @@
 
 abstract class Test_Cache extends PHPUnit_Framework_TestCase {
 	/**
-	 * @var OC_Cache cache;
+	 * @var \OC\Cache cache;
 	 */
 	protected $instance;
 
-- 
GitLab


From 76f8be3b7aadbb2c78f6c341ef8919973275efc8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 18 Sep 2013 22:49:09 +0200
Subject: [PATCH 110/248] fixing namespaces and rename hasCategory to hasTag

---
 lib/tags.php | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/lib/tags.php b/lib/tags.php
index 4aafff8e1b..3320d9ea1a 100644
--- a/lib/tags.php
+++ b/lib/tags.php
@@ -113,7 +113,7 @@ class Tags implements \OCP\ITags {
 		$sql = 'SELECT COUNT(*) FROM `' . self::TAG_TABLE . '` '
 			. 'WHERE `uid` = ? AND `type` = ?';
 		try {
-			$stmt = OCP\DB::prepare($sql);
+			$stmt = \OCP\DB::prepare($sql);
 			$result = $stmt->execute(array($this->user, $this->type));
 			if (\OCP\DB::isError($result)) {
 				\OCP\Util::writeLog('core', __METHOD__. ', DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
@@ -191,7 +191,7 @@ class Tags implements \OCP\ITags {
 			$stmt = \OCP\DB::prepare($sql);
 			$result = $stmt->execute(array($tagId));
 			if (\OCP\DB::isError($result)) {
-				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
 				return false;
 			}
 		} catch(\Exception $e) {
@@ -381,7 +381,7 @@ class Tags implements \OCP\ITags {
 				. 'WHERE `uid` = ?');
 			$result = $stmt->execute(array($arguments['uid']));
 			if (\OCP\DB::isError($result)) {
-				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
 			}
 		} catch(\Exception $e) {
 			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
@@ -409,12 +409,12 @@ class Tags implements \OCP\ITags {
 			$stmt = \OCP\DB::prepare('DELETE FROM `' . self::TAG_TABLE . '` '
 				. 'WHERE `uid` = ?');
 			$result = $stmt->execute(array($arguments['uid']));
-			if (OCP\DB::isError($result)) {
+			if (\OCP\DB::isError($result)) {
 				\OCP\Util::writeLog('core', __METHOD__. ', DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
 			}
 		} catch(\Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__ . ', exception: '
-				. $e->getMessage(), OCP\Util::ERROR);
+			\OCP\Util::writeLog('core', __METHOD__ . ', exception: '
+				. $e->getMessage(), \OCP\Util::ERROR);
 		}
 	}
 
@@ -435,7 +435,7 @@ class Tags implements \OCP\ITags {
 			$query .= 'WHERE `objid` IN (' . str_repeat('?,', count($ids)-1) . '?) ';
 			$query .= 'AND `type`= ?';
 			$updates[] = $this->type;
-			$stmt = OCP\DB::prepare($query);
+			$stmt = \OCP\DB::prepare($query);
 			$result = $stmt->execute($updates);
 			if (\OCP\DB::isError($result)) {
 				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
@@ -471,7 +471,7 @@ class Tags implements \OCP\ITags {
 	* @return boolean
 	*/
 	public function addToFavorites($objid) {
-		if(!$this->hasCategory(self::TAG_FAVORITE)) {
+		if(!$this->hasTag(self::TAG_FAVORITE)) {
 			$this->add(self::TAG_FAVORITE, true);
 		}
 		return $this->tagAs($objid, self::TAG_FAVORITE, $this->type);
@@ -574,7 +574,7 @@ class Tags implements \OCP\ITags {
 					. '`uid` = ? AND `type` = ? AND `category` = ?');
 				$result = $stmt->execute(array($this->user, $this->type, $name));
 				if (\OCP\DB::isError($result)) {
-					\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+					\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
 				}
 			} catch(\Exception $e) {
 				\OCP\Util::writeLog('core', __METHOD__ . ', exception: '
-- 
GitLab


From 3c0e93e220f734e8d08ab60b84c5f0577a2d6b6d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 18 Sep 2013 23:06:48 +0200
Subject: [PATCH 111/248] no file actions during upload

---
 apps/files/js/filelist.js | 1 -
 1 file changed, 1 deletion(-)

diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index fe8b1c5591..33fde01beb 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -130,7 +130,6 @@ var FileList={
 		if (hidden) {
 			tr.hide();
 		}
-		FileActions.display(tr.find('td.filename'));
 		return tr;
 	},
 	addDir:function(name,size,lastModified,hidden){
-- 
GitLab


From 43a96621eaf96a61e27c1a333e662409f10ef263 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 18 Sep 2013 23:42:36 +0200
Subject: [PATCH 112/248] adding comma to get cleaner diffs in the future

---
 apps/files/ajax/upload.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index 4f10891058..41d3a3eca4 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -117,7 +117,7 @@ if (strpos($dir, '..') === false) {
 					'originalname' => $files['name'][$i],
 					'uploadMaxFilesize' => $maxUploadFileSize,
 					'maxHumanFilesize' => $maxHumanFileSize,
-					'permissions' => $meta['permissions']
+					'permissions' => $meta['permissions'],
 				);
 			}
 		}
-- 
GitLab


From de8d0783ed24adb25f4835cfdbccfd6253d4ebf0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 18 Sep 2013 23:46:58 +0200
Subject: [PATCH 113/248] fixing syntax error - it it that hard to test own
 code?

---
 settings/changepassword/controller.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/settings/changepassword/controller.php b/settings/changepassword/controller.php
index 1ecb644a96..e8c2a1943f 100644
--- a/settings/changepassword/controller.php
+++ b/settings/changepassword/controller.php
@@ -89,7 +89,7 @@ class Controller {
 					));
 				} elseif (!$result && !$recoveryPasswordSupported) {
 					$l = new \OC_L10n('settings');
-					\OC_JSON::error(array("data" => array( $l->t("message" => "Unable to change password" ) )));
+					\OC_JSON::error(array("data" => array( "message" => $l->t("Unable to change password" ) )));
 				} else {
 					\OC_JSON::success(array("data" => array( "username" => $username )));
 				}
-- 
GitLab


From f7800cd63ef55b9fc0e8379291adeb9e45356fb1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Thu, 19 Sep 2013 09:47:51 +0200
Subject: [PATCH 114/248] fix 'event is not defined' error

---
 core/js/oc-dialogs.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index ddd3cb4ac7..7ca94dcbaa 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -238,7 +238,7 @@ var OCdialogs = {
 			if (window.FileReader && type === 'image') {
 				var reader = new FileReader();
 				reader.onload = function (e) {
-					var blob = new Blob([event.target.result]);
+					var blob = new Blob([e.target.result]);
 					window.URL = window.URL || window.webkitURL;
 					var originalUrl = window.URL.createObjectURL(blob);
 					var image = new Image();
-- 
GitLab


From 0d81a53e12bed66e5ec9684424519913283110a5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Thu, 19 Sep 2013 10:00:42 +0200
Subject: [PATCH 115/248] use 96x96 as 64x64 thumbnails in conflicts dialog,
 64x64 looks very blocky ... maybe something is wrong there

---
 apps/files/js/files.js | 12 ++++++++----
 core/js/oc-dialogs.js  |  2 +-
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index afbb14c5e0..76f19b87cb 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -627,11 +627,15 @@ function getPathForPreview(name) {
 	return path;
 }
 
-function lazyLoadPreview(path, mime, ready) {
+function lazyLoadPreview(path, mime, ready, width, height) {
 	getMimeIcon(mime,ready);
-	var x = $('#filestable').data('preview-x');
-	var y = $('#filestable').data('preview-y');
-	var previewURL = OC.Router.generate('core_ajax_preview', {file: encodeURIComponent(path), x:x, y:y});
+	if (!width) {
+		width = $('#filestable').data('preview-x');
+	}
+	if (!height) {
+		height = $('#filestable').data('preview-y');
+	}
+	var previewURL = OC.Router.generate('core_ajax_preview', {file: encodeURIComponent(path), x:width, y:height});
 	$.get(previewURL, function() {
 		previewURL = previewURL.replace('(','%28');
 		previewURL = previewURL.replace(')','%29');
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index 7ca94dcbaa..d661a871a5 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -296,7 +296,7 @@ var OCdialogs = {
 			var path = getPathForPreview(original.name);
 			lazyLoadPreview(path, original.type, function(previewpath){
 				conflict.find('.original .icon').css('background-image','url('+previewpath+')');
-			});
+			}, 96, 96);
 			getCroppedPreview(replacement).then(
 				function(path){
 					conflict.find('.replacement .icon').css('background-image','url(' + path + ')');
-- 
GitLab


From cda58ae3dfc938edff0bee048f54a48f3e6451d7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Thu, 19 Sep 2013 10:14:07 +0200
Subject: [PATCH 116/248] css selectors never have a : before []

---
 core/js/share.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/js/share.js b/core/js/share.js
index 5d34faf8a5..5b93dd3074 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -483,7 +483,7 @@ $(document).ready(function() {
 		if (!$('.cruds', this).is(':visible')) {
 			$('a', this).hide();
 			if (!$('input[name="edit"]', this).is(':checked')) {
-				$('input:[type=checkbox]', this).hide();
+				$('input[type="checkbox"]', this).hide();
 				$('label', this).hide();
 			}
 		} else {
-- 
GitLab


From 89ed0007c021f27d1a867682005e0c36bcad433a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Thu, 19 Sep 2013 11:11:22 +0200
Subject: [PATCH 117/248] jsdoc types should go into {}

---
 apps/files/js/file-upload.js | 52 ++++++++++++++++++------------------
 1 file changed, 26 insertions(+), 26 deletions(-)

diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 8e9bcb885f..3cf43dff50 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -37,7 +37,7 @@ function supportAjaxUploadWithProgress() {
 
 /**
  * keeps track of uploads in progress and implements callbacks for the conflicts dialog
- * @type OC.Upload
+ * @type {OC.Upload}
  */
 OC.Upload = {
 	_uploads: [],
@@ -45,9 +45,9 @@ OC.Upload = {
 	 * cancels a single upload, 
 	 * @deprecated because it was only used when a file currently beeing uploaded was deleted. Now they are added after
 	 * they have been uploaded.
-	 * @param string dir
-	 * @param string filename
-	 * @returns unresolved
+	 * @param {string} dir
+	 * @param {string} filename
+	 * @returns {unresolved}
 	 */
 	cancelUpload:function(dir, filename) {
 		var self = this;
@@ -63,7 +63,7 @@ OC.Upload = {
 	},
 	/**
 	 * deletes the jqHXR object from a data selection
-	 * @param data data
+	 * @param {object} data
 	 */
 	deleteUpload:function(data) {
 		delete data.jqXHR;
@@ -86,7 +86,7 @@ OC.Upload = {
 	/**
 	 * Checks the currently known uploads.
 	 * returns true if any hxr has the state 'pending'
-	 * @returns Boolean
+	 * @returns {boolean}
 	 */
 	isProcessing:function(){
 		var count = 0;
@@ -100,7 +100,7 @@ OC.Upload = {
 	},
 	/**
 	 * callback for the conflicts dialog
-	 * @param data
+	 * @param {object} data
 	 */
 	onCancel:function(data) {
 		this.cancelUploads();
@@ -108,7 +108,7 @@ OC.Upload = {
 	/**
 	 * callback for the conflicts dialog
 	 * calls onSkip, onReplace or onAutorename for each conflict
-	 * @param conflicts list of conflict elements
+	 * @param {object} conflicts - list of conflict elements
 	 */
 	onContinue:function(conflicts) {
 		var self = this;
@@ -132,7 +132,7 @@ OC.Upload = {
 	},
 	/**
 	 * handle skipping an upload
-	 * @param data data
+	 * @param {object} data
 	 */
 	onSkip:function(data){
 		this.log('skip', null, data);
@@ -140,7 +140,7 @@ OC.Upload = {
 	},
 	/**
 	 * handle replacing a file on the server with an uploaded file
-	 * @param data data
+	 * @param {object} data
 	 */
 	onReplace:function(data){
 		this.log('replace', null, data);
@@ -149,7 +149,7 @@ OC.Upload = {
 	},
 	/**
 	 * handle uploading a file and letting the server decide a new name
-	 * @param data data
+	 * @param {object} data
 	 */
 	onAutorename:function(data){
 		this.log('autorename', null, data);
@@ -170,13 +170,13 @@ OC.Upload = {
 	/**
 	 * TODO checks the list of existing files prior to uploading and shows a simple dialog to choose
 	 * skip all, replace all or choosw which files to keep
-	 * @param array selection of files to upload
-	 * @param callbacks to call:
-	 *		onNoConflicts,
-	 *		onSkipConflicts,
-	 *		onReplaceConflicts,
-	 *		onChooseConflicts,
-	 *		onCancel
+	 * @param {array} selection of files to upload
+	 * @param {object} callbacks - object with several callback methods
+	 * @param {function} callbacks.onNoConflicts
+	 * @param {function} callbacks.onSkipConflicts
+	 * @param {function} callbacks.onReplaceConflicts
+	 * @param {function} callbacks.onChooseConflicts
+	 * @param {function} callbacks.onCancel
 	 */
 	checkExistingFiles: function (selection, callbacks){
 		// TODO check filelist before uploading and show dialog on conflicts, use callbacks
@@ -205,9 +205,9 @@ $(document).ready(function() {
 			 *       - when only new -> remember as single replace action
 			 *       - when both -> remember as single autorename action
 			 * - start uploading selection
-			 * @param {type} e
-			 * @param {type} data
-			 * @returns {Boolean}
+			 * @param {object} e
+			 * @param {object} data
+			 * @returns {boolean}
 			 */
 			add: function(e, data) {
 				OC.Upload.log('add', e, data);
@@ -300,7 +300,7 @@ $(document).ready(function() {
 			},
 			/**
 			 * called after the first add, does NOT have the data param
-			 * @param e
+			 * @param {object} e
 			 */
 			start: function(e) {
 				OC.Upload.log('start', e, null);
@@ -334,8 +334,8 @@ $(document).ready(function() {
 			},
 			/**
 			 * called for every successful upload
-			 * @param e
-			 * @param data
+			 * @param {object} e
+			 * @param {object} data
 			 */
 			done:function(e, data) {
 				OC.Upload.log('done', e, data);
@@ -372,8 +372,8 @@ $(document).ready(function() {
 			},
 			/**
 			 * called after last upload
-			 * @param e
-			 * @param data
+			 * @param {object} e
+			 * @param {object} data
 			 */
 			stop: function(e, data) {
 				OC.Upload.log('stop', e, data);
-- 
GitLab


From c30c153ea517403ee479be739a503bd91bab272e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Thu, 19 Sep 2013 11:13:11 +0200
Subject: [PATCH 118/248] fixing typos and l10n

---
 apps/files/js/file-upload.js | 2 +-
 apps/files/js/files.js       | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 8e9bcb885f..2c42f29445 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -169,7 +169,7 @@ OC.Upload = {
 	},
 	/**
 	 * TODO checks the list of existing files prior to uploading and shows a simple dialog to choose
-	 * skip all, replace all or choosw which files to keep
+	 * skip all, replace all or choose which files to keep
 	 * @param array selection of files to upload
 	 * @param callbacks to call:
 	 *		onNoConflicts,
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 76f19b87cb..ccb40e7216 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -499,7 +499,7 @@ var folderDropOptions={
 						$('#notification').fadeIn();
 					}
 				} else {
-					OC.dialogs.alert(t('Error moving file'), t('core', 'Error'));
+					OC.dialogs.alert(t('files', 'Error moving file'), t('files', 'Error'));
 				}
 			});
 		});
@@ -537,7 +537,7 @@ var crumbDropOptions={
 						$('#notification').fadeIn();
 					}
 				} else {
-					OC.dialogs.alert(t('Error moving file'), t('core', 'Error'));
+					OC.dialogs.alert(t('files', 'Error moving file'), t('files', 'Error'));
 				}
 			});
 		});
-- 
GitLab


From a6933efce358db5930c9e6bf516171baa81f8472 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Thu, 19 Sep 2013 11:25:41 +0200
Subject: [PATCH 119/248] use n to translate title

---
 core/js/oc-dialogs.js | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index d661a871a5..d6453d2d56 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -342,7 +342,13 @@ var OCdialogs = {
 				var conflicts = $(dialog_id+ ' .conflicts');
 				addConflict(conflicts, original, replacement);
 
-				var title = t('files','{count} file conflicts',{count:$(dialog_id+ ' .conflict').length});
+				var count = $(dialog_id+ ' .conflict').length;
+				var title = n('files',
+								'One file conflict',
+								'{count} file conflicts',
+								count,
+								{count:count}
+							);
 				$(dialog_id).parent().children('.oc-dialog-title').text(title);
 
 				//recalculate dimensions
-- 
GitLab


From 314ca843e81c2e26e83d58391e313503e0f30ebd Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Thu, 19 Sep 2013 11:27:13 +0200
Subject: [PATCH 120/248] Updated method names and added a few more tests.

---
 lib/public/itags.php |  6 ++---
 lib/tags.php         | 12 ++++-----
 tests/lib/tags.php   | 59 +++++++++++++++++++++++++++++++++++---------
 3 files changed, 57 insertions(+), 20 deletions(-)

diff --git a/lib/public/itags.php b/lib/public/itags.php
index 047d4f5f40..1264340054 100644
--- a/lib/public/itags.php
+++ b/lib/public/itags.php
@@ -65,7 +65,7 @@ interface ITags {
 	*
 	* @returns array
 	*/
-	public function tags();
+	public function getTags();
 
 	/**
 	* Get the a list if items tagged with $tag.
@@ -75,7 +75,7 @@ interface ITags {
 	* @param string|integer $tag Tag id or name.
 	* @return array An array of object ids or false on error.
 	*/
-	public function idsForTag($tag);
+	public function getIdsForTag($tag);
 
 	/**
 	* Checks whether a tag is already saved.
@@ -111,7 +111,7 @@ interface ITags {
 	* @param int|null $id int Optional object id to add to this|these tag(s)
 	* @return bool Returns false on error.
 	*/
-	public function addMulti($names, $sync=false, $id = null);
+	public function addMultiple($names, $sync=false, $id = null);
 
 	/**
 	* Delete tag/object relations from the db
diff --git a/lib/tags.php b/lib/tags.php
index 3320d9ea1a..2eaa603c1a 100644
--- a/lib/tags.php
+++ b/lib/tags.php
@@ -96,7 +96,7 @@ class Tags implements \OCP\ITags {
 		}
 
 		if(count($defaultTags) > 0 && count($this->tags) === 0) {
-			$this->addMulti($defaultTags, true);
+			$this->addMultiple($defaultTags, true);
 		}
 		\OCP\Util::writeLog('core', __METHOD__.', tags: ' . print_r($this->tags, true),
 			\OCP\Util::DEBUG);
@@ -119,7 +119,7 @@ class Tags implements \OCP\ITags {
 				\OCP\Util::writeLog('core', __METHOD__. ', DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
 				return false;
 			}
-			return ($result->numRows() === 0);
+			return ((int)$result->numRows() === 0);
 		} catch(\Exception $e) {
 			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
 				\OCP\Util::ERROR);
@@ -138,7 +138,7 @@ class Tags implements \OCP\ITags {
 	*
 	* @return array
 	*/
-	public function tags() {
+	public function getTags() {
 		if(!count($this->tags)) {
 			return array();
 		}
@@ -167,7 +167,7 @@ class Tags implements \OCP\ITags {
 	* @param string|integer $tag Tag id or name.
 	* @return array An array of object ids or false on error.
 	*/
-	public function idsForTag($tag) {
+	public function getIdsForTag($tag) {
 		$result = null;
 		if(is_numeric($tag)) {
 			$tagId = $tag;
@@ -293,7 +293,7 @@ class Tags implements \OCP\ITags {
 	* @param int|null $id int Optional object id to add to this|these tag(s)
 	* @return bool Returns false on error.
 	*/
-	public function addMulti($names, $sync=false, $id = null) {
+	public function addMultiple($names, $sync=false, $id = null) {
 		if(!is_array($names)) {
 			$names = array($names);
 		}
@@ -456,7 +456,7 @@ class Tags implements \OCP\ITags {
 	*/
 	public function getFavorites() {
 		try {
-			return $this->idsForTag(self::TAG_FAVORITE);
+			return $this->getIdsForTag(self::TAG_FAVORITE);
 		} catch(\Exception $e) {
 			\OCP\Util::writeLog('core', __METHOD__.', exception: ' . $e->getMessage(),
 				\OCP\Util::ERROR);
diff --git a/tests/lib/tags.php b/tests/lib/tags.php
index 06baebc0af..16a03f5645 100644
--- a/tests/lib/tags.php
+++ b/tests/lib/tags.php
@@ -48,7 +48,7 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 		$tagMgr = new OC\Tags($this->user);
 		$tagMgr->loadTagsFor($this->objectType, $defaultTags);
 
-		$this->assertEquals(4, count($tagMgr->tags()));
+		$this->assertEquals(4, count($tagMgr->getTags()));
 	}
 
 	public function testAddTags() {
@@ -65,7 +65,37 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 		$this->assertFalse($tagMgr->add('Family'));
 		$this->assertFalse($tagMgr->add('fAMILY'));
 
-		$this->assertEquals(4, count($tagMgr->tags()));
+		$this->assertEquals(4, count($tagMgr->getTags()));
+	}
+
+	public function testAddMultiple() {
+		$tags = array('Friends', 'Family', 'Work', 'Other');
+
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType);
+
+		foreach($tags as $tag) {
+			$this->assertFalse($tagMgr->hasTag($tag));
+		}
+
+		$result = $tagMgr->addMultiple($tags);
+		$this->assertTrue((bool)$result);
+
+		foreach($tags as $tag) {
+			$this->assertTrue($tagMgr->hasTag($tag));
+		}
+
+		$this->assertEquals(4, count($tagMgr->getTags()));
+	}
+
+	public function testIsEmpty() {
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType);
+
+		$this->assertEquals(0, count($tagMgr->getTags()));
+		$this->assertTrue($tagMgr->isEmpty());
+		$tagMgr->add('Tag');
+		$this->assertFalse($tagMgr->isEmpty());
 	}
 
 	public function testdeleteTags() {
@@ -73,13 +103,13 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 		$tagMgr = new OC\Tags($this->user);
 		$tagMgr->loadTagsFor($this->objectType, $defaultTags);
 
-		$this->assertEquals(4, count($tagMgr->tags()));
+		$this->assertEquals(4, count($tagMgr->getTags()));
 
 		$tagMgr->delete('family');
-		$this->assertEquals(3, count($tagMgr->tags()));
+		$this->assertEquals(3, count($tagMgr->getTags()));
 
 		$tagMgr->delete(array('Friends', 'Work', 'Other'));
-		$this->assertEquals(0, count($tagMgr->tags()));
+		$this->assertEquals(0, count($tagMgr->getTags()));
 
 	}
 
@@ -105,8 +135,8 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 			$tagMgr->tagAs($id, 'Family');
 		}
 
-		$this->assertEquals(1, count($tagMgr->tags()));
-		$this->assertEquals(9, count($tagMgr->idsForTag('Family')));
+		$this->assertEquals(1, count($tagMgr->getTags()));
+		$this->assertEquals(9, count($tagMgr->getIdsForTag('Family')));
 	}
 
 	/**
@@ -121,13 +151,20 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 		$tagMgr->loadTagsFor($this->objectType);
 
 		foreach($objIds as $id) {
-			$this->assertTrue(in_array($id, $tagMgr->idsForTag('Family')));
+			$this->assertTrue(in_array($id, $tagMgr->getIdsForTag('Family')));
 			$tagMgr->unTag($id, 'Family');
-			$this->assertFalse(in_array($id, $tagMgr->idsForTag('Family')));
+			$this->assertFalse(in_array($id, $tagMgr->getIdsForTag('Family')));
 		}
 
-		$this->assertEquals(1, count($tagMgr->tags()));
-		$this->assertEquals(0, count($tagMgr->idsForTag('Family')));
+		$this->assertEquals(1, count($tagMgr->getTags()));
+		$this->assertEquals(0, count($tagMgr->getIdsForTag('Family')));
+	}
+
+	public function testFavorite() {
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType);
+		$this->assertTrue($tagMgr->addToFavorites(1));
+		$this->assertTrue($tagMgr->removeFromFavorites(1));
 	}
 
 }
-- 
GitLab


From ae97fad6322c94765ce7bed0b7c2278d5aa0e701 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Thu, 19 Sep 2013 11:32:56 +0200
Subject: [PATCH 121/248] fix double translation of error message

---
 apps/files/js/file-upload.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 3cf43dff50..cca256a5ab 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -365,7 +365,7 @@ $(document).ready(function() {
 				} else if (result[0].status !== 'success') {
 					//delete data.jqXHR;
 					data.textStatus = 'servererror';
-					data.errorThrown = t('files', result.data.message);
+					data.errorThrown = result.data.message; // error message has been translated on server
 					var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
 					fu._trigger('fail', e, data);
 				}
-- 
GitLab


From 078bf0df2583a8a93f2fe8df15cf29f14c4ee02b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Thu, 19 Sep 2013 12:05:30 +0200
Subject: [PATCH 122/248] use {count} instead of 'One' for more versatile
 translation

---
 core/js/oc-dialogs.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index d6453d2d56..ac37b109e7 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -344,7 +344,7 @@ var OCdialogs = {
 
 				var count = $(dialog_id+ ' .conflict').length;
 				var title = n('files',
-								'One file conflict',
+								'{count} file conflict',
 								'{count} file conflicts',
 								count,
 								{count:count}
-- 
GitLab


From 9e4d13858c92e3b42e99152cee7b899a7ddb926b Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Thu, 19 Sep 2013 13:27:41 +0200
Subject: [PATCH 123/248] Fix syntax error

---
 lib/server.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/server.php b/lib/server.php
index 5c386593f1..4f5bcfbe67 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -113,7 +113,6 @@ class Server extends SimpleContainer implements IServerContainer {
 			$folder = $root->get($dir);
 		}
 		return $folder;
-
 	}
 
 	/**
@@ -132,6 +131,7 @@ class Server extends SimpleContainer implements IServerContainer {
 			$folder = $root->get($dir);
 		}
 		return $folder;
+	}
 
 	/**
 	 * Returns an ICache instance
-- 
GitLab


From de81210bec4b08034e130cd5db4a426fe2f7820e Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Thu, 19 Sep 2013 13:55:45 +0200
Subject: [PATCH 124/248] Add another test.

---
 tests/lib/tags.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/lib/tags.php b/tests/lib/tags.php
index 16a03f5645..92a96a1477 100644
--- a/tests/lib/tags.php
+++ b/tests/lib/tags.php
@@ -94,7 +94,7 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 
 		$this->assertEquals(0, count($tagMgr->getTags()));
 		$this->assertTrue($tagMgr->isEmpty());
-		$tagMgr->add('Tag');
+		$this->assertNotEquals(false, $tagMgr->add('Tag'));
 		$this->assertFalse($tagMgr->isEmpty());
 	}
 
-- 
GitLab


From 98ff8478301676c99ffefd5756ad22466dfb6acf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Thu, 19 Sep 2013 14:46:33 +0200
Subject: [PATCH 125/248] fix race condition in lazy preview loading

---
 apps/files/js/files.js | 30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index ccb40e7216..5ec65d8745 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -628,18 +628,24 @@ function getPathForPreview(name) {
 }
 
 function lazyLoadPreview(path, mime, ready, width, height) {
-	getMimeIcon(mime,ready);
-	if (!width) {
-		width = $('#filestable').data('preview-x');
-	}
-	if (!height) {
-		height = $('#filestable').data('preview-y');
-	}
-	var previewURL = OC.Router.generate('core_ajax_preview', {file: encodeURIComponent(path), x:width, y:height});
-	$.get(previewURL, function() {
-		previewURL = previewURL.replace('(','%28');
-		previewURL = previewURL.replace(')','%29');
-		ready(previewURL + '&reload=true');
+	// get mime icon url
+	getMimeIcon(mime, function(iconURL) {
+		ready(iconURL); // set mimeicon URL
+		
+		// now try getting a preview thumbnail URL
+		if ( ! width ) {
+			width = $('#filestable').data('preview-x');
+		}
+		if ( ! height ) {
+			height = $('#filestable').data('preview-y');
+		}
+		var previewURL = OC.Router.generate('core_ajax_preview', {file: encodeURIComponent(path), x:width, y:height});
+		$.get(previewURL, function() {
+			previewURL = previewURL.replace('(', '%28');
+			previewURL = previewURL.replace(')', '%29');
+			//set preview thumbnail URL
+			ready(previewURL + '&reload=true');
+		});
 	});
 }
 
-- 
GitLab


From 445d34a2a90295c11ace24171c20a93991ebfa87 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Sun, 3 Mar 2013 12:04:29 +0100
Subject: [PATCH 126/248] Convert OC_Preference to object interface

---
 lib/legacy/preferences.php | 137 ++++++++++++++++++++++++++++
 lib/preferences.php        | 153 ++++++++++++++++---------------
 tests/lib/preferences.php  | 179 +++++++++++++++++++++++++++++++++++++
 3 files changed, 397 insertions(+), 72 deletions(-)
 create mode 100644 lib/legacy/preferences.php

diff --git a/lib/legacy/preferences.php b/lib/legacy/preferences.php
new file mode 100644
index 0000000000..8bfac849a4
--- /dev/null
+++ b/lib/legacy/preferences.php
@@ -0,0 +1,137 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Frank Karlitschek
+ * @author Jakob Sack
+ * @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/>.
+ *
+ */
+
+/**
+ * This class provides an easy way for storing user preferences.
+ */
+OC_Preferences::$object = new \OC\Preferences(OC_DB::getConnection());
+class OC_Preferences{
+	public static $object;
+	/**
+	 * @brief Get all users using the preferences
+	 * @return array with user ids
+	 *
+	 * This function returns a list of all users that have at least one entry
+	 * in the preferences table.
+	 */
+	public static function getUsers() {
+		return self::$object->getUsers();
+	}
+
+	/**
+	 * @brief Get all apps of a user
+	 * @param string $user user
+	 * @return array with app ids
+	 *
+	 * This function returns a list of all apps of the user that have at least
+	 * one entry in the preferences table.
+	 */
+	public static function getApps( $user ) {
+		return self::$object->getApps( $user );
+	}
+
+	/**
+	 * @brief Get the available keys for an app
+	 * @param string $user user
+	 * @param string $app the app we are looking for
+	 * @return array with key names
+	 *
+	 * This function gets all keys of an app of an user. Please note that the
+	 * values are not returned.
+	 */
+	public static function getKeys( $user, $app ) {
+		return self::$object->getKeys( $user, $app );
+	}
+
+	/**
+	 * @brief Gets the preference
+	 * @param string $user user
+	 * @param string $app app
+	 * @param string $key key
+	 * @param string $default = null, default value if the key does not exist
+	 * @return string the value or $default
+	 *
+	 * This function gets a value from the preferences table. If the key does
+	 * not exist the default value will be returned
+	 */
+	public static function getValue( $user, $app, $key, $default = null ) {
+		return self::$object->getValue( $user, $app, $key, $default );
+	}
+
+	/**
+	 * @brief sets a value in the preferences
+	 * @param string $user user
+	 * @param string $app app
+	 * @param string $key key
+	 * @param string $value value
+	 *
+	 * Adds a value to the preferences. If the key did not exist before, it
+	 * will be added automagically.
+	 */
+	public static function setValue( $user, $app, $key, $value ) {
+		self::$object->setValue( $user, $app, $key, $value );
+	}
+
+	/**
+	 * @brief Deletes a key
+	 * @param string $user user
+	 * @param string $app app
+	 * @param string $key key
+	 *
+	 * Deletes a key.
+	 */
+	public function deleteKey( $user, $app, $key ) {
+		self::$object->deleteKey( $user, $app, $key );
+	}
+
+	/**
+	 * @brief Remove app of user from preferences
+	 * @param string $user user
+	 * @param string $app app
+	 *
+	 * Removes all keys in preferences belonging to the app and the user.
+	 */
+	public static function deleteApp( $user, $app ) {
+		self::$object->deleteApp( $user, $app );
+	}
+
+	/**
+	 * @brief Remove user from preferences
+	 * @param string $user user
+	 *
+	 * Removes all keys in preferences belonging to the user.
+	 */
+	public static function deleteUser( $user ) {
+		self::$object->deleteUser( $user );
+	}
+
+	/**
+	 * @brief Remove app from all users
+	 * @param string $app app
+	 *
+	 * Removes all keys in preferences belonging to the app.
+	 */
+	public static function deleteAppFromAllUsers( $app ) {
+		self::$object->deleteAppFromAllUsers( $app );
+	}
+}
diff --git a/lib/preferences.php b/lib/preferences.php
index 11ca760830..359d9a8358 100644
--- a/lib/preferences.php
+++ b/lib/preferences.php
@@ -34,10 +34,21 @@
  *
  */
 
+namespace OC;
+
+use \OC\DB\Connection;
+
+
 /**
  * This class provides an easy way for storing user preferences.
  */
-class OC_Preferences{
+class Preferences {
+	protected $conn;
+
+	public function __construct(Connection $conn) {
+		$this->conn = $conn;
+	}
+
 	/**
 	 * @brief Get all users using the preferences
 	 * @return array with user ids
@@ -45,14 +56,13 @@ class OC_Preferences{
 	 * This function returns a list of all users that have at least one entry
 	 * in the preferences table.
 	 */
-	public static function getUsers() {
-		// No need for more comments
-		$query = OC_DB::prepare( 'SELECT DISTINCT( `userid` ) FROM `*PREFIX*preferences`' );
-		$result = $query->execute();
+	public function getUsers() {
+		$query = 'SELECT DISTINCT `userid` FROM `*PREFIX*preferences`';
+		$result = $this->conn->executeQuery( $query );
 
 		$users = array();
-		while( $row = $result->fetchRow()) {
-			$users[] = $row["userid"];
+		while( $userid = $result->fetchColumn()) {
+			$users[] = $userid;
 		}
 
 		return $users;
@@ -66,14 +76,13 @@ class OC_Preferences{
 	 * This function returns a list of all apps of the user that have at least
 	 * one entry in the preferences table.
 	 */
-	public static function getApps( $user ) {
-		// No need for more comments
-		$query = OC_DB::prepare( 'SELECT DISTINCT( `appid` ) FROM `*PREFIX*preferences` WHERE `userid` = ?' );
-		$result = $query->execute( array( $user ));
+	public function getApps( $user ) {
+		$query = 'SELECT DISTINCT `appid` FROM `*PREFIX*preferences` WHERE `userid` = ?';
+		$result = $this->conn->executeQuery( $query, array( $user ) );
 
 		$apps = array();
-		while( $row = $result->fetchRow()) {
-			$apps[] = $row["appid"];
+		while( $appid = $result->fetchColumn()) {
+			$apps[] = $appid;
 		}
 
 		return $apps;
@@ -88,14 +97,13 @@ class OC_Preferences{
 	 * This function gets all keys of an app of an user. Please note that the
 	 * values are not returned.
 	 */
-	public static function getKeys( $user, $app ) {
-		// No need for more comments
-		$query = OC_DB::prepare( 'SELECT `configkey` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ?' );
-		$result = $query->execute( array( $user, $app ));
+	public function getKeys( $user, $app ) {
+		$query = 'SELECT `configkey` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ?';
+		$result = $this->conn->executeQuery( $query, array( $user, $app ));
 
 		$keys = array();
-		while( $row = $result->fetchRow()) {
-			$keys[] = $row["configkey"];
+		while( $key = $result->fetchColumn()) {
+			$keys[] = $key;
 		}
 
 		return $keys;
@@ -112,16 +120,14 @@ class OC_Preferences{
 	 * This function gets a value from the preferences table. If the key does
 	 * not exist the default value will be returned
 	 */
-	public static function getValue( $user, $app, $key, $default = null ) {
+	public function getValue( $user, $app, $key, $default = null ) {
 		// Try to fetch the value, return default if not exists.
-		$query = OC_DB::prepare( 'SELECT `configvalue` FROM `*PREFIX*preferences`'
-			.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
-		$result = $query->execute( array( $user, $app, $key ));
-
-		$row = $result->fetchRow();
+		$query = 'SELECT `configvalue` FROM `*PREFIX*preferences`'
+			.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?';
+		$row = $this->conn->fetchAssoc( $query, array( $user, $app, $key ));
 		if($row) {
 			return $row["configvalue"];
-		}else{
+		} else {
 			return $default;
 		}
 	}
@@ -132,29 +138,36 @@ class OC_Preferences{
 	 * @param string $app app
 	 * @param string $key key
 	 * @param string $value value
-	 * @return bool
 	 *
 	 * Adds a value to the preferences. If the key did not exist before, it
 	 * will be added automagically.
 	 */
-	public static function setValue( $user, $app, $key, $value ) {
+	public function setValue( $user, $app, $key, $value ) {
 		// Check if the key does exist
-		$query = OC_DB::prepare( 'SELECT `configvalue` FROM `*PREFIX*preferences`'
-			.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
-		$values=$query->execute(array($user, $app, $key))->fetchAll();
-		$exists=(count($values)>0);
+		$query = 'SELECT COUNT(*) FROM `*PREFIX*preferences`'
+			.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?';
+		$count = $this->conn->fetchColumn( $query, array( $user, $app, $key ));
+		$exists = $count > 0;
 
 		if( !$exists ) {
-			$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*preferences`'
-				.' ( `userid`, `appid`, `configkey`, `configvalue` ) VALUES( ?, ?, ?, ? )' );
-			$query->execute( array( $user, $app, $key, $value ));
+			$data = array(
+				'userid' => $user,
+				'appid' => $app,
+				'configkey' => $key,
+				'configvalue' => $value,
+			);
+			$this->conn->insert('*PREFIX*preferences', $data);
+		} else {
+			$data = array(
+				'configvalue' => $value,
+			);
+			$where = array(
+				'userid' => $user,
+				'appid' => $app,
+				'configkey' => $key,
+			);
+			$this->conn->update('*PREFIX*preferences', $data, $where);
 		}
-		else{
-			$query = OC_DB::prepare( 'UPDATE `*PREFIX*preferences` SET `configvalue` = ?'
-				.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
-			$query->execute( array( $value, $user, $app, $key ));
-		}
-		return true;
 	}
 
 	/**
@@ -162,62 +175,58 @@ class OC_Preferences{
 	 * @param string $user user
 	 * @param string $app app
 	 * @param string $key key
-	 * @return bool
 	 *
 	 * Deletes a key.
 	 */
-	public static function deleteKey( $user, $app, $key ) {
-		// No need for more comments
-		$query = OC_DB::prepare( 'DELETE FROM `*PREFIX*preferences`'
-			.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
-		$query->execute( array( $user, $app, $key ));
-
-		return true;
+	public function deleteKey( $user, $app, $key ) {
+		$where = array(
+			'userid' => $user,
+			'appid' => $app,
+			'configkey' => $key,
+		);
+		$this->conn->delete('*PREFIX*preferences', $where);
 	}
 
 	/**
 	 * @brief Remove app of user from preferences
 	 * @param string $user user
 	 * @param string $app app
-	 * @return bool
 	 *
-	 * Removes all keys in appconfig belonging to the app and the user.
+	 * Removes all keys in preferences belonging to the app and the user.
 	 */
-	public static function deleteApp( $user, $app ) {
-		// No need for more comments
-		$query = OC_DB::prepare( 'DELETE FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ?' );
-		$query->execute( array( $user, $app ));
-
-		return true;
+	public function deleteApp( $user, $app ) {
+		$where = array(
+			'userid' => $user,
+			'appid' => $app,
+		);
+		$this->conn->delete('*PREFIX*preferences', $where);
 	}
 
 	/**
 	 * @brief Remove user from preferences
 	 * @param string $user user
-	 * @return bool
 	 *
-	 * Removes all keys in appconfig belonging to the user.
+	 * Removes all keys in preferences belonging to the user.
 	 */
-	public static function deleteUser( $user ) {
-		// No need for more comments
-		$query = OC_DB::prepare( 'DELETE FROM `*PREFIX*preferences` WHERE `userid` = ?' );
-		$query->execute( array( $user ));
-
-		return true;
+	public function deleteUser( $user ) {
+		$where = array(
+			'userid' => $user,
+		);
+		$this->conn->delete('*PREFIX*preferences', $where);
 	}
 
 	/**
 	 * @brief Remove app from all users
 	 * @param string $app app
-	 * @return bool
 	 *
 	 * Removes all keys in preferences belonging to the app.
 	 */
-	public static function deleteAppFromAllUsers( $app ) {
-		// No need for more comments
-		$query = OC_DB::prepare( 'DELETE FROM `*PREFIX*preferences` WHERE `appid` = ?' );
-		$query->execute( array( $app ));
-
-		return true;
+	public function deleteAppFromAllUsers( $app ) {
+		$where = array(
+			'appid' => $app,
+		);
+		$this->conn->delete('*PREFIX*preferences', $where);
 	}
 }
+
+require_once __DIR__.'/legacy/'.basename(__FILE__);
diff --git a/tests/lib/preferences.php b/tests/lib/preferences.php
index 612cc81926..68b794e9ea 100644
--- a/tests/lib/preferences.php
+++ b/tests/lib/preferences.php
@@ -1,6 +1,7 @@
 <?php
 /**
  * Copyright (c) 2013 Christopher Schäpers <christopher@schaepers.it>
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
  * This file is licensed under the Affero General Public License version 3 or
  * later.
  * See the COPYING-README file.
@@ -124,3 +125,181 @@ class Test_Preferences extends PHPUnit_Framework_TestCase {
 		$this->assertEquals(0, $result->numRows());
 	}
 }
+
+class Test_Preferences_Object extends PHPUnit_Framework_TestCase {
+	public function testGetUsers()
+	{
+		$statementMock = $this->getMock('\Doctrine\DBAL\Statement', array(), array(), '', false);
+		$statementMock->expects($this->exactly(2))
+			->method('fetchColumn')
+			->will($this->onConsecutiveCalls('foo', false));
+		$connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+		$connectionMock->expects($this->once())
+			->method('executeQuery')
+			->with($this->equalTo('SELECT DISTINCT `userid` FROM `*PREFIX*preferences`'))
+			->will($this->returnValue($statementMock));
+
+		$preferences = new OC\Preferences($connectionMock);
+		$apps = $preferences->getUsers();
+		$this->assertEquals(array('foo'), $apps);
+	}
+
+	public function testGetApps()
+	{
+		$statementMock = $this->getMock('\Doctrine\DBAL\Statement', array(), array(), '', false);
+		$statementMock->expects($this->exactly(2))
+			->method('fetchColumn')
+			->will($this->onConsecutiveCalls('foo', false));
+		$connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+		$connectionMock->expects($this->once())
+			->method('executeQuery')
+			->with($this->equalTo('SELECT DISTINCT `appid` FROM `*PREFIX*preferences` WHERE `userid` = ?'),
+				$this->equalTo(array('bar')))
+			->will($this->returnValue($statementMock));
+
+		$preferences = new OC\Preferences($connectionMock);
+		$apps = $preferences->getApps('bar');
+		$this->assertEquals(array('foo'), $apps);
+	}
+
+	public function testGetKeys()
+	{
+		$statementMock = $this->getMock('\Doctrine\DBAL\Statement', array(), array(), '', false);
+		$statementMock->expects($this->exactly(2))
+			->method('fetchColumn')
+			->will($this->onConsecutiveCalls('foo', false));
+		$connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+		$connectionMock->expects($this->once())
+			->method('executeQuery')
+			->with($this->equalTo('SELECT `configkey` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ?'),
+				$this->equalTo(array('bar', 'moo')))
+			->will($this->returnValue($statementMock));
+
+		$preferences = new OC\Preferences($connectionMock);
+		$keys = $preferences->getKeys('bar', 'moo');
+		$this->assertEquals(array('foo'), $keys);
+	}
+
+	public function testGetValue()
+	{
+		$connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+		$connectionMock->expects($this->exactly(2))
+			->method('fetchAssoc')
+			->with($this->equalTo('SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?'),
+				$this->equalTo(array('grg', 'bar', 'red')))
+			->will($this->onConsecutiveCalls(array('configvalue'=>'foo'), null));
+
+		$preferences = new OC\Preferences($connectionMock);
+		$value = $preferences->getValue('grg', 'bar', 'red');
+		$this->assertEquals('foo', $value);
+		$value = $preferences->getValue('grg', 'bar', 'red', 'def');
+		$this->assertEquals('def', $value);
+	}
+
+	public function testSetValue()
+	{
+		$connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+		$connectionMock->expects($this->exactly(2))
+			->method('fetchColumn')
+			->with($this->equalTo('SELECT COUNT(*) FROM `*PREFIX*preferences`'
+				.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?'),
+				$this->equalTo(array('grg', 'bar', 'foo')))
+			->will($this->onConsecutiveCalls(0, 1));
+		$connectionMock->expects($this->once())
+			->method('insert')
+			->with($this->equalTo('*PREFIX*preferences'),
+				$this->equalTo(
+					array(
+						'userid' => 'grg',
+						'appid' => 'bar',
+						'configkey' => 'foo',
+						'configvalue' => 'v1',
+					)
+				));
+		$connectionMock->expects($this->once())
+			->method('update')
+			->with($this->equalTo('*PREFIX*preferences'),
+				$this->equalTo(
+					array(
+						'configvalue' => 'v2',
+					)),
+				$this->equalTo(
+					array(
+						'userid' => 'grg',
+						'appid' => 'bar',
+						'configkey' => 'foo',
+					)
+				));
+
+		$preferences = new OC\Preferences($connectionMock);
+		$preferences->setValue('grg', 'bar', 'foo', 'v1');
+		$preferences->setValue('grg', 'bar', 'foo', 'v2');
+	}
+
+	public function testDeleteKey()
+	{
+		$connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+		$connectionMock->expects($this->once())
+			->method('delete')
+			->with($this->equalTo('*PREFIX*preferences'),
+				$this->equalTo(
+					array(
+						'userid' => 'grg',
+						'appid' => 'bar',
+						'configkey' => 'foo',
+					)
+				));
+
+		$preferences = new OC\Preferences($connectionMock);
+		$preferences->deleteKey('grg', 'bar', 'foo');
+	}
+
+	public function testDeleteApp()
+	{
+		$connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+		$connectionMock->expects($this->once())
+			->method('delete')
+			->with($this->equalTo('*PREFIX*preferences'),
+				$this->equalTo(
+					array(
+						'userid' => 'grg',
+						'appid' => 'bar',
+					)
+				));
+
+		$preferences = new OC\Preferences($connectionMock);
+		$preferences->deleteApp('grg', 'bar');
+	}
+
+	public function testDeleteUser()
+	{
+		$connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+		$connectionMock->expects($this->once())
+			->method('delete')
+			->with($this->equalTo('*PREFIX*preferences'),
+				$this->equalTo(
+					array(
+						'userid' => 'grg',
+					)
+				));
+
+		$preferences = new OC\Preferences($connectionMock);
+		$preferences->deleteUser('grg');
+	}
+
+	public function testDeleteAppFromAllUsers()
+	{
+		$connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+		$connectionMock->expects($this->once())
+			->method('delete')
+			->with($this->equalTo('*PREFIX*preferences'),
+				$this->equalTo(
+					array(
+						'appid' => 'bar',
+					)
+				));
+
+		$preferences = new OC\Preferences($connectionMock);
+		$preferences->deleteAppFromAllUsers('bar');
+	}
+}
-- 
GitLab


From 395cc737a17fb2bd22f38b7cccf4ba1efd32cafd Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Sat, 31 Aug 2013 15:50:47 +0200
Subject: [PATCH 127/248] Add missing static

---
 lib/legacy/preferences.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/legacy/preferences.php b/lib/legacy/preferences.php
index 8bfac849a4..7b4cfca96b 100644
--- a/lib/legacy/preferences.php
+++ b/lib/legacy/preferences.php
@@ -100,7 +100,7 @@ class OC_Preferences{
 	 *
 	 * Deletes a key.
 	 */
-	public function deleteKey( $user, $app, $key ) {
+	public static function deleteKey( $user, $app, $key ) {
 		self::$object->deleteKey( $user, $app, $key );
 	}
 
-- 
GitLab


From f6284bdce735651a572474d97930239bd2315d52 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Sat, 31 Aug 2013 15:52:11 +0200
Subject: [PATCH 128/248] Add missing return true statements to legacy
 preferences functions

---
 lib/legacy/preferences.php | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/lib/legacy/preferences.php b/lib/legacy/preferences.php
index 7b4cfca96b..a663db7598 100644
--- a/lib/legacy/preferences.php
+++ b/lib/legacy/preferences.php
@@ -84,12 +84,14 @@ class OC_Preferences{
 	 * @param string $app app
 	 * @param string $key key
 	 * @param string $value value
+	 * @return bool
 	 *
 	 * Adds a value to the preferences. If the key did not exist before, it
 	 * will be added automagically.
 	 */
 	public static function setValue( $user, $app, $key, $value ) {
 		self::$object->setValue( $user, $app, $key, $value );
+		return true;
 	}
 
 	/**
@@ -102,36 +104,43 @@ class OC_Preferences{
 	 */
 	public static function deleteKey( $user, $app, $key ) {
 		self::$object->deleteKey( $user, $app, $key );
+		return true;
 	}
 
 	/**
 	 * @brief Remove app of user from preferences
 	 * @param string $user user
 	 * @param string $app app
+	 * @return bool
 	 *
 	 * Removes all keys in preferences belonging to the app and the user.
 	 */
 	public static function deleteApp( $user, $app ) {
 		self::$object->deleteApp( $user, $app );
+		return true;
 	}
 
 	/**
 	 * @brief Remove user from preferences
 	 * @param string $user user
+	 * @return bool
 	 *
 	 * Removes all keys in preferences belonging to the user.
 	 */
 	public static function deleteUser( $user ) {
 		self::$object->deleteUser( $user );
+		return true;
 	}
 
 	/**
 	 * @brief Remove app from all users
 	 * @param string $app app
+	 * @return bool
 	 *
 	 * Removes all keys in preferences belonging to the app.
 	 */
 	public static function deleteAppFromAllUsers( $app ) {
 		self::$object->deleteAppFromAllUsers( $app );
+		return true;
 	}
 }
-- 
GitLab


From 55efe1e56ced021ae99d7af6d6331882fd8244ba Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Sun, 1 Sep 2013 12:35:20 +0200
Subject: [PATCH 129/248] Fix insert/update/delete helper functions for oracle

---
 lib/db.php                  |  6 ++++-
 lib/db/oracleconnection.php | 50 +++++++++++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+), 1 deletion(-)
 create mode 100644 lib/db/oracleconnection.php

diff --git a/lib/db.php b/lib/db.php
index b9505b88d8..1e5d12649d 100644
--- a/lib/db.php
+++ b/lib/db.php
@@ -87,6 +87,7 @@ class OC_DB {
 							'driver' => 'pdo_sqlite',
 					);
 					$connectionParams['adapter'] = '\OC\DB\AdapterSqlite';
+					$connectionParams['wrapperClass'] = 'OC\DB\Connection';
 					break;
 				case 'mysql':
 					$connectionParams = array(
@@ -99,6 +100,7 @@ class OC_DB {
 							'driver' => 'pdo_mysql',
 					);
 					$connectionParams['adapter'] = '\OC\DB\Adapter';
+					$connectionParams['wrapperClass'] = 'OC\DB\Connection';
 					break;
 				case 'pgsql':
 					$connectionParams = array(
@@ -110,6 +112,7 @@ class OC_DB {
 							'driver' => 'pdo_pgsql',
 					);
 					$connectionParams['adapter'] = '\OC\DB\AdapterPgSql';
+					$connectionParams['wrapperClass'] = 'OC\DB\Connection';
 					break;
 				case 'oci':
 					$connectionParams = array(
@@ -124,6 +127,7 @@ class OC_DB {
 						$connectionParams['port'] = $port;
 					}
 					$connectionParams['adapter'] = '\OC\DB\AdapterOCI8';
+					$connectionParams['wrapperClass'] = 'OC\DB\OracleConnection';
 					$eventManager->addEventSubscriber(new \Doctrine\DBAL\Event\Listeners\OracleSessionInit);
 					break;
 				case 'mssql':
@@ -137,11 +141,11 @@ class OC_DB {
 							'driver' => 'pdo_sqlsrv',
 					);
 					$connectionParams['adapter'] = '\OC\DB\AdapterSQLSrv';
+					$connectionParams['wrapperClass'] = 'OC\DB\Connection';
 					break;
 				default:
 					return false;
 			}
-			$connectionParams['wrapperClass'] = 'OC\DB\Connection';
 			$connectionParams['tablePrefix'] = OC_Config::getValue('dbtableprefix', 'oc_' );
 			try {
 				self::$connection = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config, $eventManager);
diff --git a/lib/db/oracleconnection.php b/lib/db/oracleconnection.php
new file mode 100644
index 0000000000..3da3d91dbf
--- /dev/null
+++ b/lib/db/oracleconnection.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\DB;
+
+class OracleConnection extends Connection {
+	/**
+	 * Quote the keys of the array
+	 */
+	private function quoteKeys(array $data) {
+		$return = array();
+		foreach($data as $key => $value) {
+			$return[$this->quoteIdentifier($key)] = $value;
+		}
+		return $return;
+	}
+
+	/*
+	 * (inherit docs)
+	 */
+	public function insert($tableName, array $data, array $types = array()) {
+		$tableName = $this->quoteIdentifier($tableName);
+		$data = $this->quoteKeys($data);
+		return parent::insert($tableName, $data, $types);
+	}
+
+	/*
+	 * (inherit docs)
+	 */
+	public function update($tableName, array $data, array $identifier, array $types = array()) {
+		$tableName = $this->quoteIdentifier($tableName);
+		$data = $this->quoteKeys($data);
+		$identifier = $this->quoteKeys($identifier);
+		return parent::update($tableName, $data, $identifier, $types);
+	}
+
+	/*
+	 * (inherit docs)
+	 */
+	public function delete($tableName, array $identifier) {
+		$tableName = $this->quoteIdentifier($tableName);
+		$identifier = $this->quoteKeys($identifier);
+		return parent::delete($tableName, $identifier);
+	}
+}
-- 
GitLab


From 0a2a4cb12ec620fc6807e990223ba0648d43da77 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Wed, 18 Sep 2013 16:38:59 +0200
Subject: [PATCH 130/248] update inherit docs comment

---
 lib/db/oracleconnection.php | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/db/oracleconnection.php b/lib/db/oracleconnection.php
index 3da3d91dbf..e2fc4644f4 100644
--- a/lib/db/oracleconnection.php
+++ b/lib/db/oracleconnection.php
@@ -21,7 +21,7 @@ class OracleConnection extends Connection {
 	}
 
 	/*
-	 * (inherit docs)
+	 * {@inheritDoc}
 	 */
 	public function insert($tableName, array $data, array $types = array()) {
 		$tableName = $this->quoteIdentifier($tableName);
@@ -30,7 +30,7 @@ class OracleConnection extends Connection {
 	}
 
 	/*
-	 * (inherit docs)
+	 * {@inheritDoc}
 	 */
 	public function update($tableName, array $data, array $identifier, array $types = array()) {
 		$tableName = $this->quoteIdentifier($tableName);
@@ -40,7 +40,7 @@ class OracleConnection extends Connection {
 	}
 
 	/*
-	 * (inherit docs)
+	 * {@inheritDoc}
 	 */
 	public function delete($tableName, array $identifier) {
 		$tableName = $this->quoteIdentifier($tableName);
-- 
GitLab


From a9ea99e93d0dc982b5daa3ed7974e5bd419dcd1b Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Thu, 19 Sep 2013 19:12:16 +0200
Subject: [PATCH 131/248] Add copyright, remove starting blank line

---
 apps/files/command/scan.php | 7 +++++++
 console.php                 | 1 -
 core/command/status.php     | 6 ++++++
 3 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/apps/files/command/scan.php b/apps/files/command/scan.php
index c5631d1956..25ab70af36 100644
--- a/apps/files/command/scan.php
+++ b/apps/files/command/scan.php
@@ -1,4 +1,11 @@
 <?php
+/**
+ * Copyright (c) 2013 Thomas Müller <thomas.mueller@tmit.eu>
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
 
 namespace OCA\Files\Command;
 
diff --git a/console.php b/console.php
index b8dd5e0879..25b8b31253 100644
--- a/console.php
+++ b/console.php
@@ -1,4 +1,3 @@
-
 <?php
 /**
  * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
diff --git a/core/command/status.php b/core/command/status.php
index 2bd89919dd..ea9825b0f6 100644
--- a/core/command/status.php
+++ b/core/command/status.php
@@ -1,4 +1,10 @@
 <?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
 
 namespace OC\Core\Command;
 
-- 
GitLab


From e8bf576184fdafbe74f3394dc253a56c07be6507 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Fri, 26 Jul 2013 14:11:59 +0200
Subject: [PATCH 132/248] add initial search in shared files

---
 apps/files_sharing/lib/cache.php | 26 +++++++++++++++++++++++++-
 lib/public/share.php             |  2 +-
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
index 33cd142889..28e3cbdb2e 100644
--- a/apps/files_sharing/lib/cache.php
+++ b/apps/files_sharing/lib/cache.php
@@ -226,7 +226,31 @@ class Shared_Cache extends Cache {
 	 * @return array of file data
 	 */
 	public function search($pattern) {
-		// TODO
+
+		// normalize pattern
+		$pattern = $this->normalize($pattern);
+
+		$ids = \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_GET_ALL);
+		foreach ($ids as $file) {
+			$folderBackend = \OCP\Share::getBackend('folder');
+			$children = $folderBackend->getChildren($file);
+			foreach ($children as $child) {
+				$ids[] = (int)$child['source'];
+			}
+			
+		}
+		$placeholders = join(',', array_fill(0, count($ids), '?'));
+		
+		$sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `unencrypted_size`, `etag`
+				FROM `*PREFIX*filecache` WHERE `name` LIKE ? AND `fileid` IN (' . $placeholders . ')';
+		$result = \OC_DB::executeAudited($sql, array_merge(array($pattern), $ids));
+		$files = array();
+		while ($row = $result->fetchRow()) {
+			$row['mimetype'] = $this->getMimetype($row['mimetype']);
+			$row['mimepart'] = $this->getMimetype($row['mimepart']);
+			$files[] = $row;
+		}
+		return $files;
 	}
 
 	/**
diff --git a/lib/public/share.php b/lib/public/share.php
index 9ab956d84b..10922965ea 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -748,7 +748,7 @@ class Share {
 	* @param string Item type
 	* @return Sharing backend object
 	*/
-	private static function getBackend($itemType) {
+	public static function getBackend($itemType) {
 		if (isset(self::$backends[$itemType])) {
 			return self::$backends[$itemType];
 		} else if (isset(self::$backendTypes[$itemType]['class'])) {
-- 
GitLab


From 27511d9187a5ffd4d5a087602a9c648e9ec1c06e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Wed, 31 Jul 2013 15:13:00 +0200
Subject: [PATCH 133/248] divide ids into chunks of 1k

---
 apps/files_sharing/lib/cache.php | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
index 28e3cbdb2e..6386f1d2c6 100644
--- a/apps/files_sharing/lib/cache.php
+++ b/apps/files_sharing/lib/cache.php
@@ -239,16 +239,25 @@ class Shared_Cache extends Cache {
 			}
 			
 		}
-		$placeholders = join(',', array_fill(0, count($ids), '?'));
-		
-		$sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `unencrypted_size`, `etag`
-				FROM `*PREFIX*filecache` WHERE `name` LIKE ? AND `fileid` IN (' . $placeholders . ')';
-		$result = \OC_DB::executeAudited($sql, array_merge(array($pattern), $ids));
+
 		$files = array();
-		while ($row = $result->fetchRow()) {
-			$row['mimetype'] = $this->getMimetype($row['mimetype']);
-			$row['mimepart'] = $this->getMimetype($row['mimepart']);
-			$files[] = $row;
+		
+		// divide into 1k chunks
+		$chunks = array_chunk($ids, 1000);
+		
+		foreach ($chunks as $chunk) {
+			$placeholders = join(',', array_fill(0, count($chunk), '?'));
+
+			$sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `unencrypted_size`, `etag`
+					FROM `*PREFIX*filecache` WHERE `name` LIKE ? AND `fileid` IN (' . $placeholders . ')';
+			
+			$result = \OC_DB::executeAudited($sql, array_merge(array($pattern), $chunk));
+			
+			while ($row = $result->fetchRow()) {
+				$row['mimetype'] = $this->getMimetype($row['mimetype']);
+				$row['mimepart'] = $this->getMimetype($row['mimepart']);
+				$files[] = $row;
+			}
 		}
 		return $files;
 	}
-- 
GitLab


From 392c6b6832edfc37a2956ef3a77fab6020a7a746 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Wed, 7 Aug 2013 18:18:40 +0200
Subject: [PATCH 134/248] return fixed path, skip shared files outside of
 'files'

---
 apps/files_sharing/lib/cache.php | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
index 6386f1d2c6..a440246448 100644
--- a/apps/files_sharing/lib/cache.php
+++ b/apps/files_sharing/lib/cache.php
@@ -254,9 +254,12 @@ class Shared_Cache extends Cache {
 			$result = \OC_DB::executeAudited($sql, array_merge(array($pattern), $chunk));
 			
 			while ($row = $result->fetchRow()) {
-				$row['mimetype'] = $this->getMimetype($row['mimetype']);
-				$row['mimepart'] = $this->getMimetype($row['mimepart']);
-				$files[] = $row;
+				if (substr($row['path'], 0, 6)==='files/') {
+					$row['path'] = substr($row['path'],6); // remove 'files/' from path as it's relative to '/Shared'
+					$row['mimetype'] = $this->getMimetype($row['mimetype']);
+					$row['mimepart'] = $this->getMimetype($row['mimepart']);
+					$files[] = $row;
+				} // else skip results out of the files folder
 			}
 		}
 		return $files;
-- 
GitLab


From 466fd8acda010ad330930055925ce26ede1fbf06 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Wed, 28 Aug 2013 12:39:43 +0200
Subject: [PATCH 135/248] fix getAll(), refactor search by mime & search

---
 apps/files_sharing/lib/cache.php | 55 +++++++++++++++++++++-----------
 1 file changed, 37 insertions(+), 18 deletions(-)

diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
index a440246448..82588df42d 100644
--- a/apps/files_sharing/lib/cache.php
+++ b/apps/files_sharing/lib/cache.php
@@ -230,15 +230,7 @@ class Shared_Cache extends Cache {
 		// normalize pattern
 		$pattern = $this->normalize($pattern);
 
-		$ids = \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_GET_ALL);
-		foreach ($ids as $file) {
-			$folderBackend = \OCP\Share::getBackend('folder');
-			$children = $folderBackend->getChildren($file);
-			foreach ($children as $child) {
-				$ids[] = (int)$child['source'];
-			}
-			
-		}
+		$ids = $this->getAll();
 
 		$files = array();
 		
@@ -248,7 +240,8 @@ class Shared_Cache extends Cache {
 		foreach ($chunks as $chunk) {
 			$placeholders = join(',', array_fill(0, count($chunk), '?'));
 
-			$sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `unencrypted_size`, `etag`
+			$sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`,
+					`encrypted`, `unencrypted_size`, `etag`
 					FROM `*PREFIX*filecache` WHERE `name` LIKE ? AND `fileid` IN (' . $placeholders . ')';
 			
 			$result = \OC_DB::executeAudited($sql, array_merge(array($pattern), $chunk));
@@ -280,13 +273,30 @@ class Shared_Cache extends Cache {
 		}
 		$mimetype = $this->getMimetypeId($mimetype);
 		$ids = $this->getAll();
-		$placeholders = join(',', array_fill(0, count($ids), '?'));
-		$query = \OC_DB::prepare('
-			SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`
-			FROM `*PREFIX*filecache` WHERE ' . $where . ' AND `fileid` IN (' . $placeholders . ')'
-		);
-		$result = $query->execute(array_merge(array($mimetype), $ids));
-		return $result->fetchAll();
+
+		$files = array();
+		
+		// divide into 1k chunks
+		$chunks = array_chunk($ids, 1000);
+		
+		foreach ($chunks as $chunk) {
+			$placeholders = join(',', array_fill(0, count($ids), '?'));
+			$sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`,
+					`encrypted`, `unencrypted_size`, `etag`
+					FROM `*PREFIX*filecache` WHERE ' . $where . ' AND `fileid` IN (' . $placeholders . ')';
+			
+			$result = \OC_DB::executeAudited($sql, array_merge(array($mimetype), $chunk));
+
+			while ($row = $result->fetchRow()) {
+				if (substr($row['path'], 0, 6)==='files/') {
+					$row['path'] = substr($row['path'],6); // remove 'files/' from path as it's relative to '/Shared'
+					$row['mimetype'] = $this->getMimetype($row['mimetype']);
+					$row['mimepart'] = $this->getMimetype($row['mimepart']);
+					$files[] = $row;
+				} // else skip results out of the files folder
+			}
+		}
+		return $files;
 	}
 
 	/**
@@ -308,7 +318,16 @@ class Shared_Cache extends Cache {
 	 * @return int[]
 	 */
 	public function getAll() {
-		return \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_GET_ALL);
+		$ids = \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_GET_ALL);
+		$folderBackend = \OCP\Share::getBackend('folder');
+		foreach ($ids as $file) {
+			$children = $folderBackend->getChildren($file);
+			foreach ($children as $child) {
+				$ids[] = (int)$child['source'];
+			}
+			
+		}
+		return $ids;
 	}
 
 	/**
-- 
GitLab


From 3b4020e81131cd526a6bbffe14bc14f1cac4fd60 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Wed, 28 Aug 2013 21:04:21 +0200
Subject: [PATCH 136/248] add all results, sharing cache also returns entries
 for shared files in external storages

---
 apps/files_sharing/lib/cache.php | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
index 82588df42d..acb064f31a 100644
--- a/apps/files_sharing/lib/cache.php
+++ b/apps/files_sharing/lib/cache.php
@@ -249,10 +249,10 @@ class Shared_Cache extends Cache {
 			while ($row = $result->fetchRow()) {
 				if (substr($row['path'], 0, 6)==='files/') {
 					$row['path'] = substr($row['path'],6); // remove 'files/' from path as it's relative to '/Shared'
-					$row['mimetype'] = $this->getMimetype($row['mimetype']);
-					$row['mimepart'] = $this->getMimetype($row['mimepart']);
-					$files[] = $row;
-				} // else skip results out of the files folder
+				}
+				$row['mimetype'] = $this->getMimetype($row['mimetype']);
+				$row['mimepart'] = $this->getMimetype($row['mimepart']);
+				$files[] = $row;
 			}
 		}
 		return $files;
-- 
GitLab


From 6aeb0a99daf28ecb68b010d96369636a99ad77be Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Wed, 28 Aug 2013 21:10:06 +0200
Subject: [PATCH 137/248] same for search by mime

---
 apps/files_sharing/lib/cache.php | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
index acb064f31a..51e8713b97 100644
--- a/apps/files_sharing/lib/cache.php
+++ b/apps/files_sharing/lib/cache.php
@@ -290,10 +290,10 @@ class Shared_Cache extends Cache {
 			while ($row = $result->fetchRow()) {
 				if (substr($row['path'], 0, 6)==='files/') {
 					$row['path'] = substr($row['path'],6); // remove 'files/' from path as it's relative to '/Shared'
-					$row['mimetype'] = $this->getMimetype($row['mimetype']);
-					$row['mimepart'] = $this->getMimetype($row['mimepart']);
-					$files[] = $row;
-				} // else skip results out of the files folder
+				}
+				$row['mimetype'] = $this->getMimetype($row['mimetype']);
+				$row['mimepart'] = $this->getMimetype($row['mimepart']);
+				$files[] = $row;
 			}
 		}
 		return $files;
-- 
GitLab


From 944e9b8c69c4b78f7afbc6153d35cd50da060b09 Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Fri, 20 Sep 2013 12:40:21 +0200
Subject: [PATCH 138/248] make sure that both $permissions and $oldPermissions
 have the same type

---
 lib/public/share.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/public/share.php b/lib/public/share.php
index 91c5c477c8..91b0ef6dc6 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -463,7 +463,7 @@ class Share {
 				} else {
 					// reuse the already set password, but only if we change permissions
 					// otherwise the user disabled the password protection
-					if ($checkExists && (int)$permissions !== $oldPermissions) {
+					if ($checkExists && (int)$permissions !== (int)$oldPermissions) {
 						$shareWith = $checkExists['share_with'];
 					}
 				}
-- 
GitLab


From 12b4e7920148e1cf586fa96fafe7fee33a12523b Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Fri, 20 Sep 2013 13:11:05 +0200
Subject: [PATCH 139/248] calculate correct permissions while toggle the
 password protection

---
 core/js/share.js | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/core/js/share.js b/core/js/share.js
index 5d34faf8a5..f0fc4136e6 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -603,7 +603,17 @@ $(document).ready(function() {
 		if (!$('#showPassword').is(':checked') ) {
 			var itemType = $('#dropdown').data('item-type');
 			var itemSource = $('#dropdown').data('item-source');
-			OC.Share.share(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, '', OC.PERMISSION_READ);
+			var allowPublicUpload = $('#sharingDialogAllowPublicUpload').is(':checked');
+
+			// Calculate permissions
+			if (allowPublicUpload) {
+				permissions = OC.PERMISSION_UPDATE + OC.PERMISSION_CREATE + OC.PERMISSION_READ;
+			} else {
+				permissions = OC.PERMISSION_READ;
+			}
+
+
+			OC.Share.share(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, '', permissions);
 		} else {
 			$('#linkPassText').focus();
 		}
-- 
GitLab


From ac73ce1b2a9cbcafce29d9f6be768b0629f68ddb Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Fri, 20 Sep 2013 12:45:56 +0200
Subject: [PATCH 140/248] Add UserSession to server container

---
 lib/public/iservercontainer.php |  7 +++++
 lib/public/iusersession.php     | 30 ++++++++++++++++++
 lib/server.php                  | 55 +++++++++++++++++++++++++++++++++
 lib/user.php                    | 43 ++------------------------
 4 files changed, 94 insertions(+), 41 deletions(-)
 create mode 100644 lib/public/iusersession.php

diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index 1725b7c74e..ad71427666 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -62,6 +62,13 @@ interface IServerContainer {
 	 */
 	function getRootFolder();
 
+	/**
+	 * Returns the user session
+	 *
+	 * @return \OCP\IUserSession
+	 */
+	function getUserSession();
+
 	/**
 	 * Returns an ICache instance
 	 *
diff --git a/lib/public/iusersession.php b/lib/public/iusersession.php
new file mode 100644
index 0000000000..5dc1ecf71e
--- /dev/null
+++ b/lib/public/iusersession.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ * 
+ */
+
+namespace OCP;
+
+/**
+ * User session
+ */
+interface IUserSession {
+	/**
+	 * Do a user login
+	 * @param string $user the username
+	 * @param string $password the password
+	 * @return bool true if successful
+	 */
+	public function login($user, $password);
+
+	/**
+	 * @brief Logs the user out including all the session data
+	 * Logout, destroys session
+	 */
+	public function logout();
+
+}
diff --git a/lib/server.php b/lib/server.php
index f4dc22a2be..316ed39665 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -56,6 +56,47 @@ class Server extends SimpleContainer implements IServerContainer {
 			$view = new View();
 			return new Root($manager, $view, $user);
 		});
+		$this->registerService('UserManager', function($c) {
+			return new \OC\User\Manager();
+		});
+		$this->registerService('UserSession', function($c) {
+			$manager = $c->query('UserManager');
+			$userSession = new \OC\User\Session($manager, \OC::$session);
+			$userSession->listen('\OC\User', 'preCreateUser', function ($uid, $password) {
+				\OC_Hook::emit('OC_User', 'pre_createUser', array('run' => true, 'uid' => $uid, 'password' => $password));
+			});
+			$userSession->listen('\OC\User', 'postCreateUser', function ($user, $password) {
+				/** @var $user \OC\User\User */
+				\OC_Hook::emit('OC_User', 'post_createUser', array('uid' => $user->getUID(), 'password' => $password));
+			});
+			$userSession->listen('\OC\User', 'preDelete', function ($user) {
+				/** @var $user \OC\User\User */
+				\OC_Hook::emit('OC_User', 'pre_deleteUser', array('run' => true, 'uid' => $user->getUID()));
+			});
+			$userSession->listen('\OC\User', 'postDelete', function ($user) {
+				/** @var $user \OC\User\User */
+				\OC_Hook::emit('OC_User', 'post_deleteUser', array('uid' => $user->getUID()));
+			});
+			$userSession->listen('\OC\User', 'preSetPassword', function ($user, $password, $recoveryPassword) {
+				/** @var $user \OC\User\User */
+				\OC_Hook::emit('OC_User', 'pre_setPassword', array('run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword));
+			});
+			$userSession->listen('\OC\User', 'postSetPassword', function ($user, $password, $recoveryPassword) {
+				/** @var $user \OC\User\User */
+				\OC_Hook::emit('OC_User', 'post_setPassword', array('run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword));
+			});
+			$userSession->listen('\OC\User', 'preLogin', function ($uid, $password) {
+				\OC_Hook::emit('OC_User', 'pre_login', array('run' => true, 'uid' => $uid, 'password' => $password));
+			});
+			$userSession->listen('\OC\User', 'postLogin', function ($user, $password) {
+				/** @var $user \OC\User\User */
+				\OC_Hook::emit('OC_User', 'post_login', array('run' => true, 'uid' => $user->getUID(), 'password' => $password));
+			});
+			$userSession->listen('\OC\User', 'logout', function () {
+				\OC_Hook::emit('OC_User', 'logout', array());
+			});
+			return $userSession;
+		});
 		$this->registerService('UserCache', function($c) {
 			return new UserCache();
 		});
@@ -97,6 +138,20 @@ class Server extends SimpleContainer implements IServerContainer {
 		return $this->query('RootFolder');
 	}
 
+	/**
+	 * @return \OC\User\Manager
+	 */
+	function getUserManager() {
+		return $this->query('UserManager');
+	}
+
+	/**
+	 * @return \OC\User\Session
+	 */
+	function getUserSession() {
+		return $this->query('UserSession');
+	}
+
 	/**
 	 * Returns an ICache instance
 	 *
diff --git a/lib/user.php b/lib/user.php
index 0f6f40aec9..7f6a296c3e 100644
--- a/lib/user.php
+++ b/lib/user.php
@@ -37,54 +37,15 @@
  *   logout()
  */
 class OC_User {
-	public static $userSession = null;
-
 	public static function getUserSession() {
-		if (!self::$userSession) {
-			$manager = new \OC\User\Manager();
-			self::$userSession = new \OC\User\Session($manager, \OC::$session);
-			self::$userSession->listen('\OC\User', 'preCreateUser', function ($uid, $password) {
-				\OC_Hook::emit('OC_User', 'pre_createUser', array('run' => true, 'uid' => $uid, 'password' => $password));
-			});
-			self::$userSession->listen('\OC\User', 'postCreateUser', function ($user, $password) {
-				/** @var $user \OC\User\User */
-				\OC_Hook::emit('OC_User', 'post_createUser', array('uid' => $user->getUID(), 'password' => $password));
-			});
-			self::$userSession->listen('\OC\User', 'preDelete', function ($user) {
-				/** @var $user \OC\User\User */
-				\OC_Hook::emit('OC_User', 'pre_deleteUser', array('run' => true, 'uid' => $user->getUID()));
-			});
-			self::$userSession->listen('\OC\User', 'postDelete', function ($user) {
-				/** @var $user \OC\User\User */
-				\OC_Hook::emit('OC_User', 'post_deleteUser', array('uid' => $user->getUID()));
-			});
-			self::$userSession->listen('\OC\User', 'preSetPassword', function ($user, $password, $recoveryPassword) {
-				/** @var $user \OC\User\User */
-				OC_Hook::emit('OC_User', 'pre_setPassword', array('run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword));
-			});
-			self::$userSession->listen('\OC\User', 'postSetPassword', function ($user, $password, $recoveryPassword) {
-				/** @var $user \OC\User\User */
-				OC_Hook::emit('OC_User', 'post_setPassword', array('run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword));
-			});
-			self::$userSession->listen('\OC\User', 'preLogin', function ($uid, $password) {
-				\OC_Hook::emit('OC_User', 'pre_login', array('run' => true, 'uid' => $uid, 'password' => $password));
-			});
-			self::$userSession->listen('\OC\User', 'postLogin', function ($user, $password) {
-				/** @var $user \OC\User\User */
-				\OC_Hook::emit('OC_User', 'post_login', array('run' => true, 'uid' => $user->getUID(), 'password' => $password));
-			});
-			self::$userSession->listen('\OC\User', 'logout', function () {
-				\OC_Hook::emit('OC_User', 'logout', array());
-			});
-		}
-		return self::$userSession;
+		return OC::$server->getUserSession();
 	}
 
 	/**
 	 * @return \OC\User\Manager
 	 */
 	public static function getManager() {
-		return self::getUserSession()->getManager();
+		return OC::$server->getUserManager();
 	}
 
 	private static $_backends = array();
-- 
GitLab


From aa8a85f77d0c6705ee727d182e95d288ba7b7917 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Fri, 20 Sep 2013 14:33:45 +0200
Subject: [PATCH 141/248] Add DBConnection to server container

---
 lib/db/connection.php           |  2 +-
 lib/public/idbconnection.php    | 71 +++++++++++++++++++++++++++++++++
 lib/public/iservercontainer.php |  7 ++++
 lib/server.php                  |  8 ++++
 4 files changed, 87 insertions(+), 1 deletion(-)
 create mode 100644 lib/public/idbconnection.php

diff --git a/lib/db/connection.php b/lib/db/connection.php
index 2581969dbd..2d3193a148 100644
--- a/lib/db/connection.php
+++ b/lib/db/connection.php
@@ -12,7 +12,7 @@ use Doctrine\DBAL\Configuration;
 use Doctrine\DBAL\Cache\QueryCacheProfile;
 use Doctrine\Common\EventManager;
 
-class Connection extends \Doctrine\DBAL\Connection {
+class Connection extends \Doctrine\DBAL\Connection implements \OCP\IDBConnection {
 	/**
 	 * @var string $tablePrefix
 	 */
diff --git a/lib/public/idbconnection.php b/lib/public/idbconnection.php
new file mode 100644
index 0000000000..67dd7ccfc3
--- /dev/null
+++ b/lib/public/idbconnection.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ * 
+ */
+
+namespace OCP;
+
+/**
+ * TODO: Description
+ */
+interface IDBConnection {
+	/**
+	 * Used to abstract the owncloud database access away
+	 * @param string $sql the sql query with ? placeholder for params
+	 * @param int $limit the maximum number of rows
+	 * @param int $offset from which row we want to start
+	 * @return \Doctrine\DBAL\Driver\Statement The prepared statement.
+	 */
+	public function prepare($sql, $limit=null, $offset=null);
+
+	/**
+	 * Used to get the id of the just inserted element
+	 * @param string $tableName the name of the table where we inserted the item
+	 * @return int the id of the inserted element
+	 */
+	public function lastInsertId($table = null);
+
+	/**
+	 * @brief Insert a row if a matching row doesn't exists.
+	 * @param $table string The table name (will replace *PREFIX*) to perform the replace on.
+	 * @param $input array
+	 *
+	 * The input array if in the form:
+	 *
+	 * array ( 'id' => array ( 'value' => 6,
+	 *	'key' => true
+	 *	),
+	 *	'name' => array ('value' => 'Stoyan'),
+	 *	'family' => array ('value' => 'Stefanov'),
+	 *	'birth_date' => array ('value' => '1975-06-20')
+	 *	);
+	 * @return bool
+	 *
+	 */
+	public function insertIfNotExist($table, $input);
+
+	/**
+	 * @brief Start a transaction
+	 */
+	public function beginTransaction();
+
+	/**
+	 * @brief Commit the database changes done during a transaction that is in progress
+	 */
+	public function commit();
+
+	/**
+	 * @brief Rollback the database changes done during a transaction that is in progress
+	 */
+	public function rollBack();
+
+	/**
+	 * returns the error code and message as a string for logging
+	 * @return string
+	 */
+	public function getError();
+}
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index ad71427666..5481cd6ce6 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -83,4 +83,11 @@ interface IServerContainer {
 	 */
 	function getSession();
 
+	/**
+	 * Returns the current session
+	 *
+	 * @return \OCP\IDBConnection
+	 */
+	function getDatabaseConnection();
+
 }
diff --git a/lib/server.php b/lib/server.php
index 316ed39665..a5288fa148 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -170,4 +170,12 @@ class Server extends SimpleContainer implements IServerContainer {
 		return \OC::$session;
 	}
 
+	/**
+	 * Returns the current session
+	 *
+	 * @return \OCP\IDBConnection
+	 */
+	function getDatabaseConnection() {
+		return \OC_DB::getConnection();
+	}
 }
-- 
GitLab


From 71e129f295996a65e2e7d73c5e6a964ba9f8bebf Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Fri, 20 Sep 2013 15:47:33 +0200
Subject: [PATCH 142/248] initialize variable

---
 core/js/share.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/core/js/share.js b/core/js/share.js
index f0fc4136e6..094b0be929 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -604,6 +604,7 @@ $(document).ready(function() {
 			var itemType = $('#dropdown').data('item-type');
 			var itemSource = $('#dropdown').data('item-source');
 			var allowPublicUpload = $('#sharingDialogAllowPublicUpload').is(':checked');
+			var permissions = 0;
 
 			// Calculate permissions
 			if (allowPublicUpload) {
-- 
GitLab


From 9e39118b526afe6464fc15ea3fa5ed6301f1f63d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Fri, 20 Sep 2013 16:37:07 +0200
Subject: [PATCH 143/248] namespaces use upcasefirst parts when _ is left in
 namespace and files are named after their classes the autoloader will also
 find classes in the lib folder of an app its magic!

---
 apps/files/ajax/delete.php                          | 2 +-
 apps/files/ajax/getstoragestats.php                 | 2 +-
 apps/files/ajax/list.php                            | 6 +++---
 apps/files/ajax/rawlist.php                         | 6 +++---
 apps/files/ajax/upload.php                          | 4 ++--
 apps/files/index.php                                | 6 +++---
 apps/files/lib/helper.php                           | 6 +++---
 apps/files_sharing/public.php                       | 2 +-
 apps/files_trashbin/ajax/list.php                   | 4 ++--
 apps/files_trashbin/appinfo/app.php                 | 4 ++--
 apps/files_trashbin/index.php                       | 4 ++--
 apps/files_trashbin/lib/helper.php                  | 6 +++---
 apps/files_trashbin/lib/{trash.php => trashbin.php} | 0
 13 files changed, 26 insertions(+), 26 deletions(-)
 rename apps/files_trashbin/lib/{trash.php => trashbin.php} (100%)

diff --git a/apps/files/ajax/delete.php b/apps/files/ajax/delete.php
index 5f4856ec79..ad79549e5e 100644
--- a/apps/files/ajax/delete.php
+++ b/apps/files/ajax/delete.php
@@ -24,7 +24,7 @@ foreach ($files as $file) {
 }
 
 // get array with updated storage stats (e.g. max file size) after upload
-$storageStats = \OCA\files\lib\Helper::buildFileStorageStatistics($dir);
+$storageStats = \OCA\Files\Lib\Helper::buildFileStorageStatistics($dir);
 
 if ($success) {
 	OCP\JSON::success(array("data" => array_merge(array("dir" => $dir, "files" => $files), $storageStats)));
diff --git a/apps/files/ajax/getstoragestats.php b/apps/files/ajax/getstoragestats.php
index 7a2b642a9b..ace261ba76 100644
--- a/apps/files/ajax/getstoragestats.php
+++ b/apps/files/ajax/getstoragestats.php
@@ -6,4 +6,4 @@ $RUNTIME_APPTYPES = array('filesystem');
 OCP\JSON::checkLoggedIn();
 
 // send back json
-OCP\JSON::success(array('data' => \OCA\files\lib\Helper::buildFileStorageStatistics('/')));
+OCP\JSON::success(array('data' => \OCA\Files\Lib\Helper::buildFileStorageStatistics('/')));
diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php
index f1b713b553..869c9b9e34 100644
--- a/apps/files/ajax/list.php
+++ b/apps/files/ajax/list.php
@@ -20,11 +20,11 @@ $doBreadcrumb = isset($_GET['breadcrumb']);
 $data = array();
 $baseUrl = OCP\Util::linkTo('files', 'index.php') . '?dir=';
 
-$permissions = \OCA\files\lib\Helper::getDirPermissions($dir);
+$permissions = \OCA\Files\Lib\Helper::getDirPermissions($dir);
 
 // Make breadcrumb
 if($doBreadcrumb) {
-	$breadcrumb = \OCA\files\lib\Helper::makeBreadcrumb($dir);
+	$breadcrumb = \OCA\Files\Lib\Helper::makeBreadcrumb($dir);
 
 	$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
 	$breadcrumbNav->assign('breadcrumb', $breadcrumb, false);
@@ -34,7 +34,7 @@ if($doBreadcrumb) {
 }
 
 // make filelist
-$files = \OCA\files\lib\Helper::getFiles($dir);
+$files = \OCA\Files\Lib\Helper::getFiles($dir);
 
 $list = new OCP\Template("files", "part.list", "");
 $list->assign('files', $files, false);
diff --git a/apps/files/ajax/rawlist.php b/apps/files/ajax/rawlist.php
index 9ccd4cc299..742da4d2da 100644
--- a/apps/files/ajax/rawlist.php
+++ b/apps/files/ajax/rawlist.php
@@ -28,7 +28,7 @@ if($mimetypes && !in_array('httpd/unix-directory', $mimetypes)) {
 		$file['directory'] = $dir;
 		$file['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($file['mimetype']);
 		$file["date"] = OCP\Util::formatDate($file["mtime"]);
-		$file['mimetype_icon'] = \OCA\files\lib\Helper::determineIcon($file);
+		$file['mimetype_icon'] = \OCA\Files\Lib\Helper::determineIcon($file);
 		$files[] = $file;
 	}
 }
@@ -39,7 +39,7 @@ if (is_array($mimetypes) && count($mimetypes)) {
 			$file['directory'] = $dir;
 			$file['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($file['mimetype']);
 			$file["date"] = OCP\Util::formatDate($file["mtime"]);
-			$file['mimetype_icon'] = \OCA\files\lib\Helper::determineIcon($file);
+			$file['mimetype_icon'] = \OCA\Files\Lib\Helper::determineIcon($file);
 			$files[] = $file;
 		}
 	}
@@ -48,7 +48,7 @@ if (is_array($mimetypes) && count($mimetypes)) {
 		$file['directory'] = $dir;
 		$file['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($file['mimetype']);
 		$file["date"] = OCP\Util::formatDate($file["mtime"]);
-		$file['mimetype_icon'] = \OCA\files\lib\Helper::determineIcon($file);
+		$file['mimetype_icon'] = \OCA\Files\Lib\Helper::determineIcon($file);
 		$files[] = $file;
 	}
 }
diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index 3d5314afc8..e07e2c07f3 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -53,7 +53,7 @@ OCP\JSON::callCheck();
 
 
 // get array with current storage stats (e.g. max file size)
-$storageStats = \OCA\files\lib\Helper::buildFileStorageStatistics($dir);
+$storageStats = \OCA\Files\Lib\Helper::buildFileStorageStatistics($dir);
 
 if (!isset($_FILES['files'])) {
 	OCP\JSON::error(array('data' => array_merge(array('message' => $l->t('No file was uploaded. Unknown error')), $storageStats)));
@@ -113,7 +113,7 @@ if (strpos($dir, '..') === false) {
 			if (is_uploaded_file($files['tmp_name'][$i]) and \OC\Files\Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) {
 				
 				// updated max file size after upload
-				$storageStats = \OCA\files\lib\Helper::buildFileStorageStatistics($dir);
+				$storageStats = \OCA\Files\Lib\Helper::buildFileStorageStatistics($dir);
 				
 				$meta = \OC\Files\Filesystem::getFileInfo($target);
 				if ($meta === false) {
diff --git a/apps/files/index.php b/apps/files/index.php
index 9e54a706c0..32c3e09cd6 100644
--- a/apps/files/index.php
+++ b/apps/files/index.php
@@ -74,14 +74,14 @@ if (\OC\Files\Cache\Upgrade::needUpgrade($user)) { //dont load anything if we ne
 		$ajaxLoad = true;
 	}
 	else{
-		$files = \OCA\files\lib\Helper::getFiles($dir);
+		$files = \OCA\Files\Lib\Helper::getFiles($dir);
 	}
 	$freeSpace = \OC\Files\Filesystem::free_space($dir);
 	$needUpgrade = false;
 }
 
 // Make breadcrumb
-$breadcrumb = \OCA\files\lib\Helper::makeBreadcrumb($dir);
+$breadcrumb = \OCA\Files\Lib\Helper::makeBreadcrumb($dir);
 
 // make breadcrumb und filelist markup
 $list = new OCP\Template('files', 'part.list', '');
@@ -93,7 +93,7 @@ $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
 $breadcrumbNav->assign('breadcrumb', $breadcrumb);
 $breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=');
 
-$permissions = \OCA\files\lib\Helper::getDirPermissions($dir);
+$permissions = \OCA\Files\Lib\Helper::getDirPermissions($dir);
 
 if ($needUpgrade) {
 	OCP\Util::addscript('files', 'upgrade');
diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php
index 3c13b8ea6e..5b454127a7 100644
--- a/apps/files/lib/helper.php
+++ b/apps/files/lib/helper.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace OCA\files\lib;
+namespace OCA\Files\Lib;
 
 class Helper
 {
@@ -85,11 +85,11 @@ class Helper
 			}
 			$i['directory'] = $dir;
 			$i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($i['mimetype']);
-			$i['icon'] = \OCA\files\lib\Helper::determineIcon($i);
+			$i['icon'] = \OCA\Files\Lib\Helper::determineIcon($i);
 			$files[] = $i;
 		}
 
-		usort($files, array('\OCA\files\lib\Helper', 'fileCmp'));
+		usort($files, array('\OCA\Files\Lib\Helper', 'fileCmp'));
 
 		return $files;
 	}
diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php
index c997a7950c..02201c16ed 100644
--- a/apps/files_sharing/public.php
+++ b/apps/files_sharing/public.php
@@ -22,7 +22,7 @@ function fileCmp($a, $b) {
 function determineIcon($file, $sharingRoot, $sharingToken) {
 	// for folders we simply reuse the files logic
 	if($file['type'] == 'dir') {
-		return \OCA\files\lib\Helper::determineIcon($file);
+		return \OCA\Files\Lib\Helper::determineIcon($file);
 	}
 
 	$relativePath = substr($file['path'], 6);
diff --git a/apps/files_trashbin/ajax/list.php b/apps/files_trashbin/ajax/list.php
index e72e67b01d..c9dc13b784 100644
--- a/apps/files_trashbin/ajax/list.php
+++ b/apps/files_trashbin/ajax/list.php
@@ -15,7 +15,7 @@ $data = array();
 
 // Make breadcrumb
 if($doBreadcrumb) {
-	$breadcrumb = \OCA\files_trashbin\lib\Helper::makeBreadcrumb($dir);
+	$breadcrumb = \OCA\Files_Trashbin\Helper::makeBreadcrumb($dir);
 
 	$breadcrumbNav = new OCP\Template('files_trashbin', 'part.breadcrumb', '');
 	$breadcrumbNav->assign('breadcrumb', $breadcrumb, false);
@@ -26,7 +26,7 @@ if($doBreadcrumb) {
 }
 
 // make filelist
-$files = \OCA\files_trashbin\lib\Helper::getTrashFiles($dir);
+$files = \OCA\Files_Trashbin\Helper::getTrashFiles($dir);
 
 if ($files === null){
 	header("HTTP/1.0 404 Not Found");
diff --git a/apps/files_trashbin/appinfo/app.php b/apps/files_trashbin/appinfo/app.php
index 2c101f0a72..d30a601ef5 100644
--- a/apps/files_trashbin/appinfo/app.php
+++ b/apps/files_trashbin/appinfo/app.php
@@ -1,7 +1,7 @@
 <?php
 
-OC::$CLASSPATH['OCA\Files_Trashbin\Hooks'] = 'files_trashbin/lib/hooks.php';
-OC::$CLASSPATH['OCA\Files_Trashbin\Trashbin'] = 'files_trashbin/lib/trash.php';
+//OC::$CLASSPATH['OCA\Files_Trashbin\Hooks'] = 'files_trashbin/lib/hooks.php';
+//OC::$CLASSPATH['OCA\Files_Trashbin\Trashbin'] = 'files_trashbin/lib/trash.php';
 
 // register hooks
 \OCA\Files_Trashbin\Trashbin::registerHooks();
diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php
index 9f17448a75..d8661e170a 100644
--- a/apps/files_trashbin/index.php
+++ b/apps/files_trashbin/index.php
@@ -36,7 +36,7 @@ if ($isIE8 && isset($_GET['dir'])){
 $ajaxLoad = false;
 
 if (!$isIE8){
-	$files = \OCA\files_trashbin\lib\Helper::getTrashFiles($dir);
+	$files = \OCA\Files_Trashbin\Helper::getTrashFiles($dir);
 }
 else{
 	$files = array();
@@ -54,7 +54,7 @@ if ($dir && $dir !== '/') {
     $dirlisting = true;
 }
 
-$breadcrumb = \OCA\files_trashbin\lib\Helper::makeBreadcrumb($dir);
+$breadcrumb = \OCA\Files_Trashbin\Helper::makeBreadcrumb($dir);
 
 $breadcrumbNav = new OCP\Template('files_trashbin', 'part.breadcrumb', '');
 $breadcrumbNav->assign('breadcrumb', $breadcrumb);
diff --git a/apps/files_trashbin/lib/helper.php b/apps/files_trashbin/lib/helper.php
index 098fc0b54b..1c89eaf2c2 100644
--- a/apps/files_trashbin/lib/helper.php
+++ b/apps/files_trashbin/lib/helper.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace OCA\files_trashbin\lib;
+namespace OCA\Files_Trashbin;
 
 class Helper
 {
@@ -62,11 +62,11 @@ class Helper
 			}
 			$i['permissions'] = \OCP\PERMISSION_READ;
 			$i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($r['mime']);
-			$i['icon'] = \OCA\files\lib\Helper::determineIcon($i);
+			$i['icon'] = \OCA\Files\Lib\Helper::determineIcon($i);
 			$files[] = $i;
 		}
 
-		usort($files, array('\OCA\files\lib\Helper', 'fileCmp'));
+		usort($files, array('\OCA\Files\Lib\Helper', 'fileCmp'));
 
 		return $files;
 	}
diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trashbin.php
similarity index 100%
rename from apps/files_trashbin/lib/trash.php
rename to apps/files_trashbin/lib/trashbin.php
-- 
GitLab


From 4b3e56bcf9a040db67a1ec3cc9bddda751a79bdb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Fri, 20 Sep 2013 16:46:33 +0200
Subject: [PATCH 144/248] remove unneccessary lib in namespace

---
 apps/files/ajax/delete.php          | 2 +-
 apps/files/ajax/getstoragestats.php | 2 +-
 apps/files/ajax/list.php            | 6 +++---
 apps/files/ajax/rawlist.php         | 6 +++---
 apps/files/ajax/upload.php          | 4 ++--
 apps/files/appinfo/app.php          | 1 -
 apps/files/index.php                | 6 +++---
 apps/files/lib/helper.php           | 6 +++---
 apps/files_sharing/public.php       | 2 +-
 apps/files_trashbin/lib/helper.php  | 4 ++--
 10 files changed, 19 insertions(+), 20 deletions(-)

diff --git a/apps/files/ajax/delete.php b/apps/files/ajax/delete.php
index ad79549e5e..c69f5a8860 100644
--- a/apps/files/ajax/delete.php
+++ b/apps/files/ajax/delete.php
@@ -24,7 +24,7 @@ foreach ($files as $file) {
 }
 
 // get array with updated storage stats (e.g. max file size) after upload
-$storageStats = \OCA\Files\Lib\Helper::buildFileStorageStatistics($dir);
+$storageStats = \OCA\Files\Helper::buildFileStorageStatistics($dir);
 
 if ($success) {
 	OCP\JSON::success(array("data" => array_merge(array("dir" => $dir, "files" => $files), $storageStats)));
diff --git a/apps/files/ajax/getstoragestats.php b/apps/files/ajax/getstoragestats.php
index ace261ba76..32a77bff6c 100644
--- a/apps/files/ajax/getstoragestats.php
+++ b/apps/files/ajax/getstoragestats.php
@@ -6,4 +6,4 @@ $RUNTIME_APPTYPES = array('filesystem');
 OCP\JSON::checkLoggedIn();
 
 // send back json
-OCP\JSON::success(array('data' => \OCA\Files\Lib\Helper::buildFileStorageStatistics('/')));
+OCP\JSON::success(array('data' => \OCA\Files\Helper::buildFileStorageStatistics('/')));
diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php
index 869c9b9e34..350fc7fa5f 100644
--- a/apps/files/ajax/list.php
+++ b/apps/files/ajax/list.php
@@ -20,11 +20,11 @@ $doBreadcrumb = isset($_GET['breadcrumb']);
 $data = array();
 $baseUrl = OCP\Util::linkTo('files', 'index.php') . '?dir=';
 
-$permissions = \OCA\Files\Lib\Helper::getDirPermissions($dir);
+$permissions = \OCA\Files\Helper::getDirPermissions($dir);
 
 // Make breadcrumb
 if($doBreadcrumb) {
-	$breadcrumb = \OCA\Files\Lib\Helper::makeBreadcrumb($dir);
+	$breadcrumb = \OCA\Files\Helper::makeBreadcrumb($dir);
 
 	$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
 	$breadcrumbNav->assign('breadcrumb', $breadcrumb, false);
@@ -34,7 +34,7 @@ if($doBreadcrumb) {
 }
 
 // make filelist
-$files = \OCA\Files\Lib\Helper::getFiles($dir);
+$files = \OCA\Files\Helper::getFiles($dir);
 
 $list = new OCP\Template("files", "part.list", "");
 $list->assign('files', $files, false);
diff --git a/apps/files/ajax/rawlist.php b/apps/files/ajax/rawlist.php
index 742da4d2da..5ca0d5e811 100644
--- a/apps/files/ajax/rawlist.php
+++ b/apps/files/ajax/rawlist.php
@@ -28,7 +28,7 @@ if($mimetypes && !in_array('httpd/unix-directory', $mimetypes)) {
 		$file['directory'] = $dir;
 		$file['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($file['mimetype']);
 		$file["date"] = OCP\Util::formatDate($file["mtime"]);
-		$file['mimetype_icon'] = \OCA\Files\Lib\Helper::determineIcon($file);
+		$file['mimetype_icon'] = \OCA\Files\Helper::determineIcon($file);
 		$files[] = $file;
 	}
 }
@@ -39,7 +39,7 @@ if (is_array($mimetypes) && count($mimetypes)) {
 			$file['directory'] = $dir;
 			$file['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($file['mimetype']);
 			$file["date"] = OCP\Util::formatDate($file["mtime"]);
-			$file['mimetype_icon'] = \OCA\Files\Lib\Helper::determineIcon($file);
+			$file['mimetype_icon'] = \OCA\Files\Helper::determineIcon($file);
 			$files[] = $file;
 		}
 	}
@@ -48,7 +48,7 @@ if (is_array($mimetypes) && count($mimetypes)) {
 		$file['directory'] = $dir;
 		$file['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($file['mimetype']);
 		$file["date"] = OCP\Util::formatDate($file["mtime"]);
-		$file['mimetype_icon'] = \OCA\Files\Lib\Helper::determineIcon($file);
+		$file['mimetype_icon'] = \OCA\Files\Helper::determineIcon($file);
 		$files[] = $file;
 	}
 }
diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index e07e2c07f3..0920bf6210 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -53,7 +53,7 @@ OCP\JSON::callCheck();
 
 
 // get array with current storage stats (e.g. max file size)
-$storageStats = \OCA\Files\Lib\Helper::buildFileStorageStatistics($dir);
+$storageStats = \OCA\Files\Helper::buildFileStorageStatistics($dir);
 
 if (!isset($_FILES['files'])) {
 	OCP\JSON::error(array('data' => array_merge(array('message' => $l->t('No file was uploaded. Unknown error')), $storageStats)));
@@ -113,7 +113,7 @@ if (strpos($dir, '..') === false) {
 			if (is_uploaded_file($files['tmp_name'][$i]) and \OC\Files\Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) {
 				
 				// updated max file size after upload
-				$storageStats = \OCA\Files\Lib\Helper::buildFileStorageStatistics($dir);
+				$storageStats = \OCA\Files\Helper::buildFileStorageStatistics($dir);
 				
 				$meta = \OC\Files\Filesystem::getFileInfo($target);
 				if ($meta === false) {
diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php
index bd3245ded3..909baca92e 100644
--- a/apps/files/appinfo/app.php
+++ b/apps/files/appinfo/app.php
@@ -1,5 +1,4 @@
 <?php
-OC::$CLASSPATH['OCA\Files\Capabilities'] = 'apps/files/lib/capabilities.php';
 
 $l = OC_L10N::get('files');
 
diff --git a/apps/files/index.php b/apps/files/index.php
index 32c3e09cd6..6f22fdfdc1 100644
--- a/apps/files/index.php
+++ b/apps/files/index.php
@@ -74,14 +74,14 @@ if (\OC\Files\Cache\Upgrade::needUpgrade($user)) { //dont load anything if we ne
 		$ajaxLoad = true;
 	}
 	else{
-		$files = \OCA\Files\Lib\Helper::getFiles($dir);
+		$files = \OCA\Files\Helper::getFiles($dir);
 	}
 	$freeSpace = \OC\Files\Filesystem::free_space($dir);
 	$needUpgrade = false;
 }
 
 // Make breadcrumb
-$breadcrumb = \OCA\Files\Lib\Helper::makeBreadcrumb($dir);
+$breadcrumb = \OCA\Files\Helper::makeBreadcrumb($dir);
 
 // make breadcrumb und filelist markup
 $list = new OCP\Template('files', 'part.list', '');
@@ -93,7 +93,7 @@ $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
 $breadcrumbNav->assign('breadcrumb', $breadcrumb);
 $breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=');
 
-$permissions = \OCA\Files\Lib\Helper::getDirPermissions($dir);
+$permissions = \OCA\Files\Helper::getDirPermissions($dir);
 
 if ($needUpgrade) {
 	OCP\Util::addscript('files', 'upgrade');
diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php
index 5b454127a7..08c807d7f7 100644
--- a/apps/files/lib/helper.php
+++ b/apps/files/lib/helper.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace OCA\Files\Lib;
+namespace OCA\Files;
 
 class Helper
 {
@@ -85,11 +85,11 @@ class Helper
 			}
 			$i['directory'] = $dir;
 			$i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($i['mimetype']);
-			$i['icon'] = \OCA\Files\Lib\Helper::determineIcon($i);
+			$i['icon'] = \OCA\Files\Helper::determineIcon($i);
 			$files[] = $i;
 		}
 
-		usort($files, array('\OCA\Files\Lib\Helper', 'fileCmp'));
+		usort($files, array('\OCA\Files\Helper', 'fileCmp'));
 
 		return $files;
 	}
diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php
index 02201c16ed..136767aeb4 100644
--- a/apps/files_sharing/public.php
+++ b/apps/files_sharing/public.php
@@ -22,7 +22,7 @@ function fileCmp($a, $b) {
 function determineIcon($file, $sharingRoot, $sharingToken) {
 	// for folders we simply reuse the files logic
 	if($file['type'] == 'dir') {
-		return \OCA\Files\Lib\Helper::determineIcon($file);
+		return \OCA\Files\Helper::determineIcon($file);
 	}
 
 	$relativePath = substr($file['path'], 6);
diff --git a/apps/files_trashbin/lib/helper.php b/apps/files_trashbin/lib/helper.php
index 1c89eaf2c2..99f534565f 100644
--- a/apps/files_trashbin/lib/helper.php
+++ b/apps/files_trashbin/lib/helper.php
@@ -62,11 +62,11 @@ class Helper
 			}
 			$i['permissions'] = \OCP\PERMISSION_READ;
 			$i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($r['mime']);
-			$i['icon'] = \OCA\Files\Lib\Helper::determineIcon($i);
+			$i['icon'] = \OCA\Files\Helper::determineIcon($i);
 			$files[] = $i;
 		}
 
-		usort($files, array('\OCA\Files\Lib\Helper', 'fileCmp'));
+		usort($files, array('\OCA\Files\Helper', 'fileCmp'));
 
 		return $files;
 	}
-- 
GitLab


From 5b95e7aa0f0487d7ddb07588c71d25cd973c2bb6 Mon Sep 17 00:00:00 2001
From: Jenkins for ownCloud <thomas.mueller@tmit.eu>
Date: Fri, 20 Sep 2013 10:50:14 -0400
Subject: [PATCH 145/248] [tx-robot] updated from transifex

---
 apps/files/l10n/ar.php                |   3 -
 apps/files/l10n/bg_BG.php             |   1 -
 apps/files/l10n/bn_BD.php             |   1 -
 apps/files/l10n/ca.php                |   3 -
 apps/files/l10n/cs_CZ.php             |   3 -
 apps/files/l10n/cy_GB.php             |   3 -
 apps/files/l10n/da.php                |   3 -
 apps/files/l10n/de.php                |   3 -
 apps/files/l10n/de_CH.php             |   3 -
 apps/files/l10n/de_DE.php             |   3 -
 apps/files/l10n/el.php                |   3 -
 apps/files/l10n/en_GB.php             |   3 -
 apps/files/l10n/eo.php                |   3 -
 apps/files/l10n/es.php                |   3 -
 apps/files/l10n/es_AR.php             |   3 -
 apps/files/l10n/et_EE.php             |   3 -
 apps/files/l10n/eu.php                |   3 -
 apps/files/l10n/fa.php                |   3 -
 apps/files/l10n/fi_FI.php             |   2 -
 apps/files/l10n/fr.php                |   3 -
 apps/files/l10n/gl.php                |   3 -
 apps/files/l10n/he.php                |   3 -
 apps/files/l10n/hr.php                |   2 -
 apps/files/l10n/hu_HU.php             |   3 -
 apps/files/l10n/id.php                |   2 -
 apps/files/l10n/is.php                |   1 -
 apps/files/l10n/it.php                |   3 -
 apps/files/l10n/ja_JP.php             |   3 -
 apps/files/l10n/ka_GE.php             |   3 -
 apps/files/l10n/ko.php                |   3 -
 apps/files/l10n/lb.php                |   1 -
 apps/files/l10n/lt_LT.php             |   3 -
 apps/files/l10n/lv.php                |   3 -
 apps/files/l10n/mk.php                |   1 -
 apps/files/l10n/ms_MY.php             |   1 -
 apps/files/l10n/nb_NO.php             |   3 -
 apps/files/l10n/nl.php                |   3 -
 apps/files/l10n/nn_NO.php             |   3 -
 apps/files/l10n/oc.php                |   2 -
 apps/files/l10n/pa.php                |   1 -
 apps/files/l10n/pl.php                |   3 -
 apps/files/l10n/pt_BR.php             |   3 -
 apps/files/l10n/pt_PT.php             |   3 -
 apps/files/l10n/ro.php                |   3 -
 apps/files/l10n/ru.php                |   5 +-
 apps/files/l10n/si_LK.php             |   1 -
 apps/files/l10n/sk_SK.php             |   3 -
 apps/files/l10n/sl.php                |   3 -
 apps/files/l10n/sq.php                |   3 -
 apps/files/l10n/sr.php                |   3 -
 apps/files/l10n/sr@latin.php          |   3 +
 apps/files/l10n/sv.php                |   3 -
 apps/files/l10n/ta_LK.php             |   2 -
 apps/files/l10n/th_TH.php             |   3 -
 apps/files/l10n/tr.php                |   3 -
 apps/files/l10n/ug.php                |   1 -
 apps/files/l10n/uk.php                |   3 -
 apps/files/l10n/vi.php                |   3 -
 apps/files/l10n/zh_CN.php             |   3 -
 apps/files/l10n/zh_TW.php             |   3 -
 apps/files_trashbin/l10n/en_GB.php    |   4 +-
 apps/files_trashbin/l10n/sr@latin.php |   1 +
 apps/user_ldap/l10n/ru.php            |   3 +
 apps/user_ldap/l10n/sr@latin.php      |   1 +
 core/l10n/ach.php                     |   3 +-
 core/l10n/af_ZA.php                   |   1 +
 core/l10n/ar.php                      |   1 +
 core/l10n/be.php                      |   1 +
 core/l10n/bg_BG.php                   |   1 +
 core/l10n/bn_BD.php                   |   1 +
 core/l10n/bs.php                      |   1 +
 core/l10n/ca.php                      |   1 +
 core/l10n/cs_CZ.php                   |   1 +
 core/l10n/cy_GB.php                   |   1 +
 core/l10n/da.php                      |   1 +
 core/l10n/de.php                      |   1 +
 core/l10n/de_AT.php                   |   3 +-
 core/l10n/de_CH.php                   |   1 +
 core/l10n/de_DE.php                   |   1 +
 core/l10n/el.php                      |   1 +
 core/l10n/en@pirate.php               |   1 +
 core/l10n/en_GB.php                   |   3 +-
 core/l10n/eo.php                      |   1 +
 core/l10n/es.php                      |   1 +
 core/l10n/es_AR.php                   |   1 +
 core/l10n/es_MX.php                   |   3 +-
 core/l10n/et_EE.php                   |   1 +
 core/l10n/eu.php                      |   1 +
 core/l10n/fa.php                      |   1 +
 core/l10n/fi_FI.php                   |   1 +
 core/l10n/fr.php                      |   6 +
 core/l10n/gl.php                      |   1 +
 core/l10n/he.php                      |   1 +
 core/l10n/hi.php                      |   1 +
 core/l10n/hr.php                      |   1 +
 core/l10n/hu_HU.php                   |   1 +
 core/l10n/hy.php                      |   3 +-
 core/l10n/ia.php                      |   1 +
 core/l10n/id.php                      |   1 +
 core/l10n/is.php                      |   1 +
 core/l10n/it.php                      |   7 +-
 core/l10n/ja_JP.php                   |   1 +
 core/l10n/ka.php                      |   1 +
 core/l10n/ka_GE.php                   |   1 +
 core/l10n/km.php                      |   3 +-
 core/l10n/kn.php                      |   3 +-
 core/l10n/ko.php                      |   1 +
 core/l10n/ku_IQ.php                   |   1 +
 core/l10n/lb.php                      |   1 +
 core/l10n/lt_LT.php                   |   1 +
 core/l10n/lv.php                      |   1 +
 core/l10n/mk.php                      |   1 +
 core/l10n/ml_IN.php                   |   3 +-
 core/l10n/ms_MY.php                   |   1 +
 core/l10n/my_MM.php                   |   1 +
 core/l10n/nb_NO.php                   |   1 +
 core/l10n/ne.php                      |   3 +-
 core/l10n/nl.php                      |   1 +
 core/l10n/nn_NO.php                   |   1 +
 core/l10n/nqo.php                     |   3 +-
 core/l10n/oc.php                      |   1 +
 core/l10n/pa.php                      |   1 +
 core/l10n/pl.php                      |   1 +
 core/l10n/pt_BR.php                   |   1 +
 core/l10n/pt_PT.php                   |   6 +
 core/l10n/ro.php                      |   1 +
 core/l10n/ru.php                      |  10 +-
 core/l10n/si_LK.php                   |   1 +
 core/l10n/sk.php                      |   3 +-
 core/l10n/sk_SK.php                   |   1 +
 core/l10n/sl.php                      |   1 +
 core/l10n/sq.php                      |   1 +
 core/l10n/sr.php                      |   1 +
 core/l10n/sr@latin.php                |  70 ++++++++-
 core/l10n/sv.php                      |   1 +
 core/l10n/sw_KE.php                   |   3 +-
 core/l10n/ta_LK.php                   |   1 +
 core/l10n/te.php                      |   1 +
 core/l10n/th_TH.php                   |   1 +
 core/l10n/tr.php                      |   1 +
 core/l10n/ug.php                      |   1 +
 core/l10n/uk.php                      |   1 +
 core/l10n/ur_PK.php                   |   1 +
 core/l10n/vi.php                      |   1 +
 core/l10n/zh_CN.php                   |   1 +
 core/l10n/zh_HK.php                   |   1 +
 core/l10n/zh_TW.php                   |   1 +
 l10n/ach/core.po                      |  66 +++++++--
 l10n/ach/files.po                     | 122 ++++++++-------
 l10n/ach/settings.po                  |  10 +-
 l10n/af_ZA/core.po                    |  66 +++++++--
 l10n/af_ZA/files.po                   | 122 ++++++++-------
 l10n/af_ZA/settings.po                |  10 +-
 l10n/ar/core.po                       |  70 +++++++--
 l10n/ar/files.po                      | 128 ++++++++--------
 l10n/ar/settings.po                   |  10 +-
 l10n/be/core.po                       |  68 +++++++--
 l10n/be/files.po                      | 122 ++++++++-------
 l10n/be/settings.po                   |  10 +-
 l10n/bg_BG/core.po                    |  66 +++++++--
 l10n/bg_BG/files.po                   | 124 ++++++++--------
 l10n/bg_BG/settings.po                |  10 +-
 l10n/bn_BD/core.po                    |  66 +++++++--
 l10n/bn_BD/files.po                   | 124 ++++++++--------
 l10n/bn_BD/settings.po                |  10 +-
 l10n/bs/core.po                       |  67 +++++++--
 l10n/bs/files.po                      | 122 ++++++++-------
 l10n/bs/settings.po                   |  10 +-
 l10n/ca/core.po                       |  68 +++++++--
 l10n/ca/files.po                      | 128 ++++++++--------
 l10n/ca/settings.po                   |  10 +-
 l10n/cs_CZ/core.po                    |  69 +++++++--
 l10n/cs_CZ/files.po                   | 128 ++++++++--------
 l10n/cs_CZ/settings.po                |  22 ++-
 l10n/cy_GB/core.po                    |  68 +++++++--
 l10n/cy_GB/files.po                   | 126 ++++++++--------
 l10n/cy_GB/settings.po                |  10 +-
 l10n/da/core.po                       |  66 +++++++--
 l10n/da/files.po                      | 128 ++++++++--------
 l10n/da/settings.po                   |  10 +-
 l10n/de/core.po                       |  68 +++++++--
 l10n/de/files.po                      | 128 ++++++++--------
 l10n/de/settings.po                   |  22 ++-
 l10n/de_AT/core.po                    |  66 +++++++--
 l10n/de_AT/files.po                   | 122 ++++++++-------
 l10n/de_AT/settings.po                |  13 +-
 l10n/de_CH/core.po                    |  66 +++++++--
 l10n/de_CH/files.po                   | 126 ++++++++--------
 l10n/de_CH/settings.po                |  13 +-
 l10n/de_DE/core.po                    |  68 +++++++--
 l10n/de_DE/files.po                   | 128 ++++++++--------
 l10n/de_DE/settings.po                |  22 ++-
 l10n/el/core.po                       |  66 +++++++--
 l10n/el/files.po                      | 126 ++++++++--------
 l10n/el/settings.po                   |  10 +-
 l10n/en@pirate/core.po                |  66 +++++++--
 l10n/en@pirate/files.po               | 122 ++++++++-------
 l10n/en@pirate/settings.po            |  10 +-
 l10n/en_GB/core.po                    |  70 +++++++--
 l10n/en_GB/files.po                   | 128 ++++++++--------
 l10n/en_GB/files_external.po          |   4 +-
 l10n/en_GB/files_sharing.po           |   4 +-
 l10n/en_GB/files_trashbin.po          |  20 +--
 l10n/en_GB/files_versions.po          |   4 +-
 l10n/en_GB/settings.po                |  26 ++--
 l10n/en_GB/user_webdavauth.po         |   4 +-
 l10n/eo/core.po                       |  66 +++++++--
 l10n/eo/files.po                      | 126 ++++++++--------
 l10n/eo/settings.po                   |  10 +-
 l10n/es/core.po                       |  66 +++++++--
 l10n/es/files.po                      | 128 ++++++++--------
 l10n/es/settings.po                   |  27 ++--
 l10n/es_AR/core.po                    |  66 +++++++--
 l10n/es_AR/files.po                   | 128 ++++++++--------
 l10n/es_AR/settings.po                |  10 +-
 l10n/es_MX/core.po                    |  66 +++++++--
 l10n/es_MX/files.po                   | 122 ++++++++-------
 l10n/es_MX/settings.po                |  10 +-
 l10n/et_EE/core.po                    |  68 +++++++--
 l10n/et_EE/files.po                   | 128 ++++++++--------
 l10n/et_EE/settings.po                |  22 ++-
 l10n/eu/core.po                       |  66 +++++++--
 l10n/eu/files.po                      | 126 ++++++++--------
 l10n/eu/settings.po                   |  10 +-
 l10n/fa/core.po                       |  65 ++++++--
 l10n/fa/files.po                      | 126 ++++++++--------
 l10n/fa/settings.po                   |  10 +-
 l10n/fi_FI/core.po                    |  68 +++++++--
 l10n/fi_FI/files.po                   | 128 ++++++++--------
 l10n/fi_FI/settings.po                |  14 +-
 l10n/fr/core.po                       |  75 +++++++---
 l10n/fr/files.po                      | 128 ++++++++--------
 l10n/fr/lib.po                        |  19 +--
 l10n/fr/settings.po                   |  17 +--
 l10n/gl/core.po                       |  68 +++++++--
 l10n/gl/files.po                      | 128 ++++++++--------
 l10n/gl/settings.po                   |  22 ++-
 l10n/he/core.po                       |  66 +++++++--
 l10n/he/files.po                      | 126 ++++++++--------
 l10n/he/settings.po                   |  10 +-
 l10n/hi/core.po                       |  66 +++++++--
 l10n/hi/files.po                      |  90 ++++++------
 l10n/hi/settings.po                   |  10 +-
 l10n/hr/core.po                       |  67 +++++++--
 l10n/hr/files.po                      | 124 ++++++++--------
 l10n/hr/settings.po                   |  10 +-
 l10n/hu_HU/core.po                    |  66 +++++++--
 l10n/hu_HU/files.po                   | 126 ++++++++--------
 l10n/hu_HU/settings.po                |  10 +-
 l10n/hy/core.po                       |  66 +++++++--
 l10n/hy/files.po                      | 122 ++++++++-------
 l10n/hy/settings.po                   |  10 +-
 l10n/ia/core.po                       |  66 +++++++--
 l10n/ia/files.po                      | 122 ++++++++-------
 l10n/ia/settings.po                   |  10 +-
 l10n/id/core.po                       |  65 ++++++--
 l10n/id/files.po                      | 124 ++++++++--------
 l10n/id/settings.po                   |  10 +-
 l10n/is/core.po                       |  66 +++++++--
 l10n/is/files.po                      | 124 ++++++++--------
 l10n/is/settings.po                   |  10 +-
 l10n/it/core.po                       |  74 +++++++---
 l10n/it/files.po                      | 128 ++++++++--------
 l10n/it/lib.po                        |  14 +-
 l10n/it/settings.po                   |  22 ++-
 l10n/ja_JP/core.po                    |  67 +++++++--
 l10n/ja_JP/files.po                   | 128 ++++++++--------
 l10n/ja_JP/settings.po                |  10 +-
 l10n/ka/core.po                       |  65 ++++++--
 l10n/ka/files.po                      | 122 ++++++++-------
 l10n/ka/settings.po                   |  10 +-
 l10n/ka_GE/core.po                    |  65 ++++++--
 l10n/ka_GE/files.po                   | 126 ++++++++--------
 l10n/ka_GE/settings.po                |  10 +-
 l10n/km/core.po                       |  65 ++++++--
 l10n/km/files.po                      | 122 ++++++++-------
 l10n/km/settings.po                   |  10 +-
 l10n/kn/core.po                       |  65 ++++++--
 l10n/kn/files.po                      | 122 ++++++++-------
 l10n/kn/settings.po                   |  10 +-
 l10n/ko/core.po                       |  65 ++++++--
 l10n/ko/files.po                      | 126 ++++++++--------
 l10n/ko/settings.po                   |  10 +-
 l10n/ku_IQ/core.po                    |  66 +++++++--
 l10n/ku_IQ/files.po                   | 122 ++++++++-------
 l10n/ku_IQ/settings.po                |  10 +-
 l10n/lb/core.po                       |  66 +++++++--
 l10n/lb/files.po                      | 124 ++++++++--------
 l10n/lb/settings.po                   |  10 +-
 l10n/lt_LT/core.po                    |  69 +++++++--
 l10n/lt_LT/files.po                   | 128 ++++++++--------
 l10n/lt_LT/settings.po                |  10 +-
 l10n/lv/core.po                       |  67 +++++++--
 l10n/lv/files.po                      | 126 ++++++++--------
 l10n/lv/settings.po                   |  10 +-
 l10n/mk/core.po                       |  66 +++++++--
 l10n/mk/files.po                      | 124 ++++++++--------
 l10n/mk/settings.po                   |  10 +-
 l10n/ml_IN/core.po                    |  66 +++++++--
 l10n/ml_IN/files.po                   | 122 ++++++++-------
 l10n/ml_IN/settings.po                |  10 +-
 l10n/ms_MY/core.po                    |  65 ++++++--
 l10n/ms_MY/files.po                   | 124 ++++++++--------
 l10n/ms_MY/settings.po                |  10 +-
 l10n/my_MM/core.po                    |  65 ++++++--
 l10n/my_MM/files.po                   | 122 ++++++++-------
 l10n/my_MM/settings.po                |  10 +-
 l10n/nb_NO/core.po                    |  66 +++++++--
 l10n/nb_NO/files.po                   | 126 ++++++++--------
 l10n/nb_NO/settings.po                |  10 +-
 l10n/ne/core.po                       |  66 +++++++--
 l10n/ne/files.po                      | 122 ++++++++-------
 l10n/ne/settings.po                   |  10 +-
 l10n/nl/core.po                       |  68 +++++++--
 l10n/nl/files.po                      | 128 ++++++++--------
 l10n/nl/settings.po                   |  10 +-
 l10n/nn_NO/core.po                    |  66 +++++++--
 l10n/nn_NO/files.po                   | 128 ++++++++--------
 l10n/nn_NO/settings.po                |  10 +-
 l10n/nqo/core.po                      |  65 ++++++--
 l10n/nqo/files.po                     | 122 ++++++++-------
 l10n/nqo/settings.po                  |  10 +-
 l10n/oc/core.po                       |  66 +++++++--
 l10n/oc/files.po                      | 124 ++++++++--------
 l10n/oc/settings.po                   |  10 +-
 l10n/pa/core.po                       |  68 +++++++--
 l10n/pa/files.po                      |  92 ++++++------
 l10n/pa/settings.po                   |  10 +-
 l10n/pl/core.po                       |  67 +++++++--
 l10n/pl/files.po                      | 128 ++++++++--------
 l10n/pl/settings.po                   |  10 +-
 l10n/pt_BR/core.po                    |  68 +++++++--
 l10n/pt_BR/files.po                   | 128 ++++++++--------
 l10n/pt_BR/settings.po                |  22 ++-
 l10n/pt_PT/core.po                    |  75 +++++++---
 l10n/pt_PT/files.po                   | 128 ++++++++--------
 l10n/pt_PT/lib.po                     |  14 +-
 l10n/pt_PT/settings.po                |  12 +-
 l10n/ro/core.po                       |  67 +++++++--
 l10n/ro/files.po                      | 128 ++++++++--------
 l10n/ro/settings.po                   |  10 +-
 l10n/ru/core.po                       |  82 ++++++++---
 l10n/ru/files.po                      | 131 +++++++++--------
 l10n/ru/lib.po                        |  40 ++---
 l10n/ru/settings.po                   |  41 +++---
 l10n/ru/user_ldap.po                  |  13 +-
 l10n/si_LK/core.po                    |  66 +++++++--
 l10n/si_LK/files.po                   | 124 ++++++++--------
 l10n/si_LK/settings.po                |  10 +-
 l10n/sk/core.po                       |  67 +++++++--
 l10n/sk/files.po                      | 122 ++++++++-------
 l10n/sk/settings.po                   |  10 +-
 l10n/sk_SK/core.po                    |  67 +++++++--
 l10n/sk_SK/files.po                   | 126 ++++++++--------
 l10n/sk_SK/settings.po                |  10 +-
 l10n/sl/core.po                       |  68 +++++++--
 l10n/sl/files.po                      | 126 ++++++++--------
 l10n/sl/settings.po                   |  10 +-
 l10n/sq/core.po                       |  66 +++++++--
 l10n/sq/files.po                      | 128 ++++++++--------
 l10n/sq/settings.po                   |  10 +-
 l10n/sr/core.po                       |  67 +++++++--
 l10n/sr/files.po                      | 126 ++++++++--------
 l10n/sr/settings.po                   |  10 +-
 l10n/sr@latin/core.po                 | 204 ++++++++++++++++----------
 l10n/sr@latin/files.po                | 128 ++++++++--------
 l10n/sr@latin/files_trashbin.po       |  28 ++--
 l10n/sr@latin/lib.po                  |  22 +--
 l10n/sr@latin/settings.po             |  14 +-
 l10n/sr@latin/user_ldap.po            |   6 +-
 l10n/sv/core.po                       |  66 +++++++--
 l10n/sv/files.po                      | 128 ++++++++--------
 l10n/sv/settings.po                   |  10 +-
 l10n/sw_KE/core.po                    |  66 +++++++--
 l10n/sw_KE/files.po                   | 122 ++++++++-------
 l10n/sw_KE/settings.po                |  10 +-
 l10n/ta_LK/core.po                    |  66 +++++++--
 l10n/ta_LK/files.po                   | 126 ++++++++--------
 l10n/ta_LK/settings.po                |  10 +-
 l10n/te/core.po                       |  66 +++++++--
 l10n/te/files.po                      | 122 ++++++++-------
 l10n/te/settings.po                   |  10 +-
 l10n/templates/core.pot               |  64 ++++++--
 l10n/templates/files.pot              |  88 ++++++-----
 l10n/templates/files_encryption.pot   |   2 +-
 l10n/templates/files_external.pot     |   2 +-
 l10n/templates/files_sharing.pot      |   2 +-
 l10n/templates/files_trashbin.pot     |   2 +-
 l10n/templates/files_versions.pot     |   2 +-
 l10n/templates/lib.pot                |   8 +-
 l10n/templates/settings.pot           |   8 +-
 l10n/templates/user_ldap.pot          |   2 +-
 l10n/templates/user_webdavauth.pot    |   2 +-
 l10n/th_TH/core.po                    |  65 ++++++--
 l10n/th_TH/files.po                   | 126 ++++++++--------
 l10n/th_TH/settings.po                |  10 +-
 l10n/tr/core.po                       |  66 +++++++--
 l10n/tr/files.po                      | 126 ++++++++--------
 l10n/tr/settings.po                   |  10 +-
 l10n/ug/core.po                       |  65 ++++++--
 l10n/ug/files.po                      | 122 ++++++++-------
 l10n/ug/settings.po                   |  10 +-
 l10n/uk/core.po                       |  67 +++++++--
 l10n/uk/files.po                      | 128 ++++++++--------
 l10n/uk/settings.po                   |  10 +-
 l10n/ur_PK/core.po                    |  66 +++++++--
 l10n/ur_PK/files.po                   | 122 ++++++++-------
 l10n/ur_PK/settings.po                |  10 +-
 l10n/vi/core.po                       |  65 ++++++--
 l10n/vi/files.po                      | 126 ++++++++--------
 l10n/vi/settings.po                   |  10 +-
 l10n/zh_CN/core.po                    |  65 ++++++--
 l10n/zh_CN/files.po                   | 126 ++++++++--------
 l10n/zh_CN/settings.po                |  10 +-
 l10n/zh_HK/core.po                    |  65 ++++++--
 l10n/zh_HK/files.po                   | 122 ++++++++-------
 l10n/zh_HK/settings.po                |  10 +-
 l10n/zh_TW/core.po                    |  65 ++++++--
 l10n/zh_TW/files.po                   | 128 ++++++++--------
 l10n/zh_TW/settings.po                |  10 +-
 lib/l10n/fr.php                       |   3 +
 lib/l10n/it.php                       |   4 +-
 lib/l10n/pt_PT.php                    |   2 +
 lib/l10n/ru.php                       |  13 ++
 lib/l10n/sr@latin.php                 |   8 +-
 settings/l10n/cs_CZ.php               |   6 +
 settings/l10n/de.php                  |   6 +
 settings/l10n/de_AT.php               |   5 +
 settings/l10n/de_CH.php               |   2 +-
 settings/l10n/de_DE.php               |   6 +
 settings/l10n/en_GB.php               |  10 +-
 settings/l10n/es.php                  |   8 +
 settings/l10n/et_EE.php               |   6 +
 settings/l10n/fi_FI.php               |   2 +
 settings/l10n/fr.php                  |   3 +
 settings/l10n/gl.php                  |   6 +
 settings/l10n/it.php                  |   6 +
 settings/l10n/pt_BR.php               |   6 +
 settings/l10n/pt_PT.php               |   1 +
 settings/l10n/ru.php                  |  15 ++
 settings/l10n/sr@latin.php            |   2 +
 441 files changed, 10867 insertions(+), 7022 deletions(-)
 create mode 100644 settings/l10n/de_AT.php

diff --git a/apps/files/l10n/ar.php b/apps/files/l10n/ar.php
index 99eb409a36..67a3414819 100644
--- a/apps/files/l10n/ar.php
+++ b/apps/files/l10n/ar.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "المجلد المؤقت غير موجود",
 "Failed to write to disk" => "خطأ في الكتابة على القرص الصلب",
 "Not enough storage available" => "لا يوجد مساحة تخزينية كافية",
-"Upload failed" => "عملية الرفع فشلت",
 "Invalid directory." => "مسار غير صحيح.",
 "Files" => "الملفات",
-"Unable to upload your file as it is a directory or has 0 bytes" => "فشل في رفع ملفاتك , إما أنها مجلد أو حجمها 0 بايت",
 "Not enough space available" => "لا توجد مساحة كافية",
 "Upload cancelled." => "تم إلغاء عملية رفع الملفات .",
 "File upload is in progress. Leaving the page now will cancel the upload." => "عملية رفع الملفات قيد التنفيذ. اغلاق الصفحة سوف يلغي عملية رفع الملفات.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("","","","","",""),
 "{dirs} and {files}" => "{dirs} و {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("","","","","",""),
-"files uploading" => "يتم تحميل الملفات",
 "'.' is an invalid file name." => "\".\" اسم ملف غير صحيح.",
 "File name cannot be empty." => "اسم الملف لا يجوز أن يكون فارغا",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "اسم غير صحيح , الرموز  '\\', '/', '<', '>', ':', '\"', '|', '?' و \"*\" غير مسموح استخدامها",
diff --git a/apps/files/l10n/bg_BG.php b/apps/files/l10n/bg_BG.php
index 913875e863..e7dafd1c43 100644
--- a/apps/files/l10n/bg_BG.php
+++ b/apps/files/l10n/bg_BG.php
@@ -6,7 +6,6 @@ $TRANSLATIONS = array(
 "No file was uploaded" => "Фахлът не бе качен",
 "Missing a temporary folder" => "Липсва временна папка",
 "Failed to write to disk" => "Възникна проблем при запис в диска",
-"Upload failed" => "Качването е неуспешно",
 "Invalid directory." => "Невалидна директория.",
 "Files" => "Файлове",
 "Upload cancelled." => "Качването е спряно.",
diff --git a/apps/files/l10n/bn_BD.php b/apps/files/l10n/bn_BD.php
index 2265c232a1..66ac3a2165 100644
--- a/apps/files/l10n/bn_BD.php
+++ b/apps/files/l10n/bn_BD.php
@@ -12,7 +12,6 @@ $TRANSLATIONS = array(
 "Failed to write to disk" => "ডিস্কে লিখতে ব্যর্থ",
 "Invalid directory." => "ভুল ডিরেক্টরি",
 "Files" => "ফাইল",
-"Unable to upload your file as it is a directory or has 0 bytes" => "আপনার ফাইলটি আপলোড করা সম্ভব হলো না, কেননা এটি হয় একটি ফোল্ডার কিংবা এর আকার ০ বাইট",
 "Not enough space available" => "যথেষ্ঠ পরিমাণ স্থান নেই",
 "Upload cancelled." => "আপলোড বাতিল করা হয়েছে।",
 "File upload is in progress. Leaving the page now will cancel the upload." => "ফাইল আপলোড চলমান। এই পৃষ্ঠা পরিত্যাগ করলে আপলোড বাতিল করা হবে।",
diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php
index eb724d1954..8fd72ac0a6 100644
--- a/apps/files/l10n/ca.php
+++ b/apps/files/l10n/ca.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Falta un fitxer temporal",
 "Failed to write to disk" => "Ha fallat en escriure al disc",
 "Not enough storage available" => "No hi ha prou espai disponible",
-"Upload failed" => "La pujada ha fallat",
 "Invalid directory." => "Directori no vàlid.",
 "Files" => "Fitxers",
-"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",
 "Not enough space available" => "No hi ha prou espai disponible",
 "Upload cancelled." => "La pujada s'ha cancel·lat.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n fitxer","%n fitxers"),
 "{dirs} and {files}" => "{dirs} i {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("Pujant %n fitxer","Pujant %n fitxers"),
-"files uploading" => "fitxers pujant",
 "'.' is an invalid file name." => "'.' és un nom no vàlid per un fitxer.",
 "File name cannot be empty." => "El nom del fitxer no pot ser buit.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "El nóm no és vàlid, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' no estan permesos.",
diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php
index 691cc92f1a..f67283ec6e 100644
--- a/apps/files/l10n/cs_CZ.php
+++ b/apps/files/l10n/cs_CZ.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Chybí adresář pro dočasné soubory",
 "Failed to write to disk" => "Zápis na disk selhal",
 "Not enough storage available" => "Nedostatek dostupného úložného prostoru",
-"Upload failed" => "Odesílání selhalo",
 "Invalid directory." => "Neplatný adresář",
 "Files" => "Soubory",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Nelze odeslat Váš soubor, protože je to adresář nebo jeho velikost je 0 bajtů",
 "Not enough space available" => "Nedostatek volného místa",
 "Upload cancelled." => "Odesílání zrušeno.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Probíhá odesílání souboru. Opuštění stránky způsobí zrušení nahrávání.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n soubor","%n soubory","%n souborů"),
 "{dirs} and {files}" => "{dirs} a {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("Nahrávám %n soubor","Nahrávám %n soubory","Nahrávám %n souborů"),
-"files uploading" => "soubory se odesílají",
 "'.' is an invalid file name." => "'.' je neplatným názvem souboru.",
 "File name cannot be empty." => "Název souboru nemůže být prázdný řetězec.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Neplatný název, znaky '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nejsou povoleny.",
diff --git a/apps/files/l10n/cy_GB.php b/apps/files/l10n/cy_GB.php
index 157f4f89a2..86e5f65e7b 100644
--- a/apps/files/l10n/cy_GB.php
+++ b/apps/files/l10n/cy_GB.php
@@ -11,10 +11,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Plygell dros dro yn eisiau",
 "Failed to write to disk" => "Methwyd ysgrifennu i'r ddisg",
 "Not enough storage available" => "Dim digon o le storio ar gael",
-"Upload failed" => "Methwyd llwytho i fyny",
 "Invalid directory." => "Cyfeiriadur annilys.",
 "Files" => "Ffeiliau",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Methu llwytho'ch ffeil i fyny gan ei fod yn gyferiadur neu'n cynnwys 0 beit",
 "Not enough space available" => "Dim digon o le ar gael",
 "Upload cancelled." => "Diddymwyd llwytho i fyny.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Mae ffeiliau'n cael eu llwytho i fyny. Bydd gadael y dudalen hon nawr yn diddymu'r broses.",
@@ -33,7 +31,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("","","",""),
 "_%n file_::_%n files_" => array("","","",""),
 "_Uploading %n file_::_Uploading %n files_" => array("","","",""),
-"files uploading" => "ffeiliau'n llwytho i fyny",
 "'.' is an invalid file name." => "Mae '.' yn enw ffeil annilys.",
 "File name cannot be empty." => "Does dim hawl cael enw ffeil gwag.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Enw annilys, ni chaniateir, '\\', '/', '<', '>', ':', '\"', '|', '?' na '*'.",
diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php
index aab12986ec..c2a20931ba 100644
--- a/apps/files/l10n/da.php
+++ b/apps/files/l10n/da.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Manglende midlertidig mappe.",
 "Failed to write to disk" => "Fejl ved skrivning til disk.",
 "Not enough storage available" => "Der er ikke nok plads til rådlighed",
-"Upload failed" => "Upload fejlede",
 "Invalid directory." => "Ugyldig mappe.",
 "Files" => "Filer",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Kan ikke uploade din fil - det er enten en mappe eller en fil med et indhold på 0 bytes.",
 "Not enough space available" => "ikke nok tilgængelig ledig plads ",
 "Upload cancelled." => "Upload afbrudt.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n fil","%n filer"),
 "{dirs} and {files}" => "{dirs} og {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("Uploader %n fil","Uploader %n filer"),
-"files uploading" => "uploader filer",
 "'.' is an invalid file name." => "'.' er et ugyldigt filnavn.",
 "File name cannot be empty." => "Filnavnet kan ikke stå tomt.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ugyldigt navn, '\\', '/', '<', '>', ':' | '?', '\"', '', og '*' er ikke tilladt.",
diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php
index 947d4f0746..64017b7dba 100644
--- a/apps/files/l10n/de.php
+++ b/apps/files/l10n/de.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Kein temporärer Ordner vorhanden",
 "Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
 "Not enough storage available" => "Nicht genug Speicher vorhanden.",
-"Upload failed" => "Hochladen fehlgeschlagen",
 "Invalid directory." => "Ungültiges Verzeichnis.",
 "Files" => "Dateien",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Deine Datei kann nicht hochgeladen werden, weil es sich um einen Ordner handelt oder 0 Bytes groß ist.",
 "Not enough space available" => "Nicht genug Speicherplatz verfügbar",
 "Upload cancelled." => "Upload abgebrochen.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n Datei","%n Dateien"),
 "{dirs} and {files}" => "{dirs} und {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("%n Datei wird hochgeladen","%n Dateien werden hochgeladen"),
-"files uploading" => "Dateien werden hoch geladen",
 "'.' is an invalid file name." => "'.' ist kein gültiger Dateiname.",
 "File name cannot be empty." => "Der Dateiname darf nicht leer sein.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig.",
diff --git a/apps/files/l10n/de_CH.php b/apps/files/l10n/de_CH.php
index 2895135d17..a7074a8b1c 100644
--- a/apps/files/l10n/de_CH.php
+++ b/apps/files/l10n/de_CH.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Kein temporärer Ordner vorhanden",
 "Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
 "Not enough storage available" => "Nicht genug Speicher vorhanden.",
-"Upload failed" => "Hochladen fehlgeschlagen",
 "Invalid directory." => "Ungültiges Verzeichnis.",
 "Files" => "Dateien",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Ihre Datei kann nicht hochgeladen werden, weil es sich um einen Ordner handelt oder 0 Bytes gross ist.",
 "Not enough space available" => "Nicht genügend Speicherplatz verfügbar",
 "Upload cancelled." => "Upload abgebrochen.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.",
@@ -36,7 +34,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("","%n Ordner"),
 "_%n file_::_%n files_" => array("","%n Dateien"),
 "_Uploading %n file_::_Uploading %n files_" => array("%n Datei wird hochgeladen","%n Dateien werden hochgeladen"),
-"files uploading" => "Dateien werden hoch geladen",
 "'.' is an invalid file name." => "'.' ist kein gültiger Dateiname.",
 "File name cannot be empty." => "Der Dateiname darf nicht leer sein.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ungültiger Name, «\\», «/», «<», «>», «:», «\"», «|», «?» und «*» sind nicht zulässig.",
diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php
index db07ed7fad..4f9da43445 100644
--- a/apps/files/l10n/de_DE.php
+++ b/apps/files/l10n/de_DE.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Kein temporärer Ordner vorhanden",
 "Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
 "Not enough storage available" => "Nicht genug Speicher vorhanden.",
-"Upload failed" => "Hochladen fehlgeschlagen",
 "Invalid directory." => "Ungültiges Verzeichnis.",
 "Files" => "Dateien",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Ihre Datei kann nicht hochgeladen werden, weil es sich um einen Ordner handelt oder 0 Bytes groß ist.",
 "Not enough space available" => "Nicht genügend Speicherplatz verfügbar",
 "Upload cancelled." => "Upload abgebrochen.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n Datei","%n Dateien"),
 "{dirs} and {files}" => "{dirs} und {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("%n Datei wird hoch geladen","%n Dateien werden hoch geladen"),
-"files uploading" => "Dateien werden hoch geladen",
 "'.' is an invalid file name." => "'.' ist kein gültiger Dateiname.",
 "File name cannot be empty." => "Der Dateiname darf nicht leer sein.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig.",
diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php
index 8c89e5e1fe..37a61c6b95 100644
--- a/apps/files/l10n/el.php
+++ b/apps/files/l10n/el.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Λείπει ο προσωρινός φάκελος",
 "Failed to write to disk" => "Αποτυχία εγγραφής στο δίσκο",
 "Not enough storage available" => "Μη επαρκής διαθέσιμος αποθηκευτικός χώρος",
-"Upload failed" => "Η μεταφόρτωση απέτυχε",
 "Invalid directory." => "Μη έγκυρος φάκελος.",
 "Files" => "Αρχεία",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Αδυναμία στην αποστολή του αρχείου σας αφού είναι φάκελος ή έχει 0 bytes",
 "Not enough space available" => "Δεν υπάρχει αρκετός διαθέσιμος χώρος",
 "Upload cancelled." => "Η αποστολή ακυρώθηκε.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή.",
@@ -36,7 +34,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("%n φάκελος","%n φάκελοι"),
 "_%n file_::_%n files_" => array("%n αρχείο","%n αρχεία"),
 "_Uploading %n file_::_Uploading %n files_" => array("Ανέβασμα %n αρχείου","Ανέβασμα %n αρχείων"),
-"files uploading" => "αρχεία ανεβαίνουν",
 "'.' is an invalid file name." => "'.' είναι μη έγκυρο όνομα αρχείου.",
 "File name cannot be empty." => "Το όνομα αρχείου δεν μπορεί να είναι κενό.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Μη έγκυρο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' και '*' δεν επιτρέπονται.",
diff --git a/apps/files/l10n/en_GB.php b/apps/files/l10n/en_GB.php
index a13399a8db..e67719efba 100644
--- a/apps/files/l10n/en_GB.php
+++ b/apps/files/l10n/en_GB.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Missing a temporary folder",
 "Failed to write to disk" => "Failed to write to disk",
 "Not enough storage available" => "Not enough storage available",
-"Upload failed" => "Upload failed",
 "Invalid directory." => "Invalid directory.",
 "Files" => "Files",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Unable to upload your file as it is a directory or has 0 bytes",
 "Not enough space available" => "Not enough space available",
 "Upload cancelled." => "Upload cancelled.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "File upload is in progress. Leaving the page now will cancel the upload.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n file","%n files"),
 "{dirs} and {files}" => "{dirs} and {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("Uploading %n file","Uploading %n files"),
-"files uploading" => "files uploading",
 "'.' is an invalid file name." => "'.' is an invalid file name.",
 "File name cannot be empty." => "File name cannot be empty.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed.",
diff --git a/apps/files/l10n/eo.php b/apps/files/l10n/eo.php
index ad538f2f2a..eb6e6ba2d3 100644
--- a/apps/files/l10n/eo.php
+++ b/apps/files/l10n/eo.php
@@ -11,10 +11,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Mankas provizora dosierujo.",
 "Failed to write to disk" => "Malsukcesis skribo al disko",
 "Not enough storage available" => "Ne haveblas sufiĉa memoro",
-"Upload failed" => "Alŝuto malsukcesis",
 "Invalid directory." => "Nevalida dosierujo.",
 "Files" => "Dosieroj",
-"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",
 "Not enough space available" => "Ne haveblas sufiĉa spaco",
 "Upload cancelled." => "La alŝuto nuliĝis.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Dosieralŝuto plenumiĝas. Lasi la paĝon nun nuligus la alŝuton.",
@@ -34,7 +32,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("",""),
 "_%n file_::_%n files_" => array("",""),
 "_Uploading %n file_::_Uploading %n files_" => array("",""),
-"files uploading" => "dosieroj estas alŝutataj",
 "'.' is an invalid file name." => "'.' ne estas valida dosiernomo.",
 "File name cannot be empty." => "Dosiernomo devas ne malpleni.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nevalida nomo: “\\”, “/”, “<”, “>”, “:”, “\"”, “|”, “?” kaj “*” ne permesatas.",
diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php
index ce92ff8f18..90d760587d 100644
--- a/apps/files/l10n/es.php
+++ b/apps/files/l10n/es.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Falta la carpeta temporal",
 "Failed to write to disk" => "Falló al escribir al disco",
 "Not enough storage available" => "No hay suficiente espacio disponible",
-"Upload failed" => "Error en la subida",
 "Invalid directory." => "Directorio inválido.",
 "Files" => "Archivos",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Incapaz de subir su archivo, es un directorio o tiene 0 bytes",
 "Not enough space available" => "No hay suficiente espacio disponible",
 "Upload cancelled." => "Subida cancelada.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "La subida del archivo está en proceso. Si sale de la página ahora cancelará la subida.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("","%n archivos"),
 "{dirs} and {files}" => "{dirs} y {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("Subiendo %n archivo","Subiendo %n archivos"),
-"files uploading" => "subiendo archivos",
 "'.' is an invalid file name." => "'.' no es un nombre de archivo válido.",
 "File name cannot be empty." => "El nombre de archivo no puede estar vacío.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nombre Invalido, \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" no están permitidos ",
diff --git a/apps/files/l10n/es_AR.php b/apps/files/l10n/es_AR.php
index d9d1036263..be16f3f99a 100644
--- a/apps/files/l10n/es_AR.php
+++ b/apps/files/l10n/es_AR.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Falta un directorio temporal",
 "Failed to write to disk" => "Error al escribir en el disco",
 "Not enough storage available" => "No hay suficiente almacenamiento",
-"Upload failed" => "Error al subir el archivo",
 "Invalid directory." => "Directorio inválido.",
 "Files" => "Archivos",
-"Unable to upload your file as it is a directory or has 0 bytes" => "No fue posible subir el archivo porque es un directorio o porque su tamaño es 0 bytes",
 "Not enough space available" => "No hay suficiente espacio disponible",
 "Upload cancelled." => "La subida fue cancelada",
 "File upload is in progress. Leaving the page now will cancel the upload." => "La subida del archivo está en proceso. Si salís de la página ahora, la subida se cancelará.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n archivo","%n archivos"),
 "{dirs} and {files}" => "{carpetas} y {archivos}",
 "_Uploading %n file_::_Uploading %n files_" => array("Subiendo %n archivo","Subiendo %n archivos"),
-"files uploading" => "Subiendo archivos",
 "'.' is an invalid file name." => "'.' es un nombre de archivo inválido.",
 "File name cannot be empty." => "El nombre del archivo no puede quedar vacío.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nombre invalido, '\\', '/', '<', '>', ':', '\"', '|', '?' y '*' no están permitidos.",
diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php
index 52ba119170..9f674b27e6 100644
--- a/apps/files/l10n/et_EE.php
+++ b/apps/files/l10n/et_EE.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Ajutiste failide kaust puudub",
 "Failed to write to disk" => "Kettale kirjutamine ebaõnnestus",
 "Not enough storage available" => "Saadaval pole piisavalt ruumi",
-"Upload failed" => "Üleslaadimine ebaõnnestus",
 "Invalid directory." => "Vigane kaust.",
 "Files" => "Failid",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Faili ei saa üles laadida, kuna see on kaust või selle suurus on 0 baiti",
 "Not enough space available" => "Pole piisavalt ruumi",
 "Upload cancelled." => "Üleslaadimine tühistati.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n fail","%n faili"),
 "{dirs} and {files}" => "{dirs} ja {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("Laadin üles %n faili","Laadin üles %n faili"),
-"files uploading" => "faili üleslaadimisel",
 "'.' is an invalid file name." => "'.' on vigane failinimi.",
 "File name cannot be empty." => "Faili nimi ei saa olla tühi.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Vigane nimi, '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' pole lubatud.",
diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php
index 524be56af0..33ea47d5f0 100644
--- a/apps/files/l10n/eu.php
+++ b/apps/files/l10n/eu.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Aldi bateko karpeta falta da",
 "Failed to write to disk" => "Errore bat izan da diskoan idazterakoan",
 "Not enough storage available" => "Ez dago behar aina leku erabilgarri,",
-"Upload failed" => "igotzeak huts egin du",
 "Invalid directory." => "Baliogabeko karpeta.",
 "Files" => "Fitxategiak",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Ezin izan da zure fitxategia igo karpeta bat delako edo 0 byte dituelako",
 "Not enough space available" => "Ez dago leku nahikorik.",
 "Upload cancelled." => "Igoera ezeztatuta",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.",
@@ -36,7 +34,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("karpeta %n","%n karpeta"),
 "_%n file_::_%n files_" => array("fitxategi %n","%n fitxategi"),
 "_Uploading %n file_::_Uploading %n files_" => array("Fitxategi %n igotzen","%n fitxategi igotzen"),
-"files uploading" => "fitxategiak igotzen",
 "'.' is an invalid file name." => "'.' ez da fitxategi izen baliogarria.",
 "File name cannot be empty." => "Fitxategi izena ezin da hutsa izan.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "IZen aliogabea, '\\', '/', '<', '>', ':', '\"', '|', '?' eta '*' ez daude baimenduta.",
diff --git a/apps/files/l10n/fa.php b/apps/files/l10n/fa.php
index 24584f715b..46d7cfe73e 100644
--- a/apps/files/l10n/fa.php
+++ b/apps/files/l10n/fa.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "یک پوشه موقت گم شده",
 "Failed to write to disk" => "نوشتن بر روی دیسک سخت ناموفق بود",
 "Not enough storage available" => "فضای کافی در دسترس نیست",
-"Upload failed" => "بارگزاری ناموفق بود",
 "Invalid directory." => "فهرست راهنما نامعتبر می باشد.",
 "Files" => "پرونده‌ها",
-"Unable to upload your file as it is a directory or has 0 bytes" => "ناتوان در بارگذاری یا فایل یک پوشه است یا 0بایت دارد",
 "Not enough space available" => "فضای کافی در دسترس نیست",
 "Upload cancelled." => "بار گذاری لغو شد",
 "File upload is in progress. Leaving the page now will cancel the upload." => "آپلودکردن پرونده در حال پیشرفت است. در صورت خروج از صفحه آپلود لغو میگردد. ",
@@ -36,7 +34,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array(""),
 "_%n file_::_%n files_" => array(""),
 "_Uploading %n file_::_Uploading %n files_" => array(""),
-"files uploading" => "بارگذاری فایل ها",
 "'.' is an invalid file name." => "'.'   یک نام پرونده نامعتبر است.",
 "File name cannot be empty." => "نام پرونده نمی تواند خالی باشد.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "نام نامعتبر ،  '\\', '/', '<', '>', ':', '\"', '|', '?'  و '*'  مجاز نمی باشند.",
diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php
index 1d29dbf79d..ab443b2864 100644
--- a/apps/files/l10n/fi_FI.php
+++ b/apps/files/l10n/fi_FI.php
@@ -11,10 +11,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Tilapäiskansio puuttuu",
 "Failed to write to disk" => "Levylle kirjoitus epäonnistui",
 "Not enough storage available" => "Tallennustilaa ei ole riittävästi käytettävissä",
-"Upload failed" => "Lähetys epäonnistui",
 "Invalid directory." => "Virheellinen kansio.",
 "Files" => "Tiedostot",
-"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.",
 "Not enough space available" => "Tilaa ei ole riittävästi",
 "Upload cancelled." => "Lähetys peruttu.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen.",
diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php
index 2d538262a0..d647045808 100644
--- a/apps/files/l10n/fr.php
+++ b/apps/files/l10n/fr.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Absence de dossier temporaire.",
 "Failed to write to disk" => "Erreur d'écriture sur le disque",
 "Not enough storage available" => "Plus assez d'espace de stockage disponible",
-"Upload failed" => "Échec de l'envoi",
 "Invalid directory." => "Dossier invalide.",
 "Files" => "Fichiers",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Impossible d'envoyer votre fichier dans la mesure où il s'agit d'un répertoire ou d'un fichier de taille nulle",
 "Not enough space available" => "Espace disponible insuffisant",
 "Upload cancelled." => "Envoi annulé.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n fichier","%n fichiers"),
 "{dirs} and {files}" => "{dir} et {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("Téléversement de %n fichier","Téléversement de %n fichiers"),
-"files uploading" => "fichiers en cours d'envoi",
 "'.' is an invalid file name." => "'.' n'est pas un nom de fichier valide.",
 "File name cannot be empty." => "Le nom de fichier ne peut être vide.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nom invalide, les caractères '\\', '/', '<', '>', ':', '\"', '|', '?' et '*' ne sont pas autorisés.",
diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php
index 01a6b54f84..0eba94f7d6 100644
--- a/apps/files/l10n/gl.php
+++ b/apps/files/l10n/gl.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Falta o cartafol temporal",
 "Failed to write to disk" => "Produciuse un erro ao escribir no disco",
 "Not enough storage available" => "Non hai espazo de almacenamento abondo",
-"Upload failed" => "Produciuse un fallou no envío",
 "Invalid directory." => "O directorio é incorrecto.",
 "Files" => "Ficheiros",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Non foi posíbel enviar o ficheiro pois ou é un directorio ou ten 0 bytes",
 "Not enough space available" => "O espazo dispoñíbel é insuficiente",
 "Upload cancelled." => "Envío cancelado.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "O envío do ficheiro está en proceso. Saír agora da páxina cancelará o envío.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n ficheiro","%n ficheiros"),
 "{dirs} and {files}" => "{dirs} e {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("Cargando %n ficheiro","Cargando %n ficheiros"),
-"files uploading" => "ficheiros enviándose",
 "'.' is an invalid file name." => "«.» é un nome de ficheiro incorrecto",
 "File name cannot be empty." => "O nome de ficheiro non pode estar baleiro",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome incorrecto, non se permite «\\», «/», «<», «>», «:», «\"», «|», «?» e «*».",
diff --git a/apps/files/l10n/he.php b/apps/files/l10n/he.php
index 40d7cc9c55..bc7ecdb071 100644
--- a/apps/files/l10n/he.php
+++ b/apps/files/l10n/he.php
@@ -11,10 +11,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "תקיה זמנית חסרה",
 "Failed to write to disk" => "הכתיבה לכונן נכשלה",
 "Not enough storage available" => "אין די שטח פנוי באחסון",
-"Upload failed" => "ההעלאה נכשלה",
 "Invalid directory." => "תיקייה שגויה.",
 "Files" => "קבצים",
-"Unable to upload your file as it is a directory or has 0 bytes" => "לא יכול להעלות את הקובץ מכיוון שזו תקיה או שמשקל הקובץ 0 בתים",
 "Upload cancelled." => "ההעלאה בוטלה.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "מתבצעת כעת העלאת קבצים. עזיבה של העמוד תבטל את ההעלאה.",
 "URL cannot be empty." => "קישור אינו יכול להיות ריק.",
@@ -32,7 +30,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("",""),
 "_%n file_::_%n files_" => array("",""),
 "_Uploading %n file_::_Uploading %n files_" => array("",""),
-"files uploading" => "קבצים בהעלאה",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "השם שגוי, אסור להשתמש בתווים '\\', '/', '<', '>', ':', '\"', '|', '?' ו־'*'.",
 "Name" => "שם",
 "Size" => "גודל",
diff --git a/apps/files/l10n/hr.php b/apps/files/l10n/hr.php
index 57f1ad9700..60f1da8440 100644
--- a/apps/files/l10n/hr.php
+++ b/apps/files/l10n/hr.php
@@ -7,7 +7,6 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Nedostaje privremeni direktorij",
 "Failed to write to disk" => "Neuspjelo pisanje na disk",
 "Files" => "Datoteke",
-"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 cancelled." => "Slanje poništeno.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Učitavanje datoteke. Napuštanjem stranice će prekinuti učitavanje.",
 "Error" => "Greška",
@@ -21,7 +20,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("","",""),
 "_%n file_::_%n files_" => array("","",""),
 "_Uploading %n file_::_Uploading %n files_" => array("","",""),
-"files uploading" => "datoteke se učitavaju",
 "Name" => "Ime",
 "Size" => "Veličina",
 "Modified" => "Zadnja promjena",
diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php
index 66edbefbca..5d313ff248 100644
--- a/apps/files/l10n/hu_HU.php
+++ b/apps/files/l10n/hu_HU.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Hiányzik egy ideiglenes mappa",
 "Failed to write to disk" => "Nem sikerült a lemezre történő írás",
 "Not enough storage available" => "Nincs elég szabad hely.",
-"Upload failed" => "A feltöltés nem sikerült",
 "Invalid directory." => "Érvénytelen mappa.",
 "Files" => "Fájlok",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Nem tölthető fel, mert mappa volt, vagy 0 byte méretű",
 "Not enough space available" => "Nincs elég szabad hely",
 "Upload cancelled." => "A feltöltést megszakítottuk.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést.",
@@ -36,7 +34,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("",""),
 "_%n file_::_%n files_" => array("",""),
 "_Uploading %n file_::_Uploading %n files_" => array("",""),
-"files uploading" => "fájl töltődik föl",
 "'.' is an invalid file name." => "'.' fájlnév érvénytelen.",
 "File name cannot be empty." => "A fájlnév nem lehet semmi.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Érvénytelen elnevezés. Ezek a karakterek nem használhatók: '\\', '/', '<', '>', ':', '\"', '|', '?' és '*'",
diff --git a/apps/files/l10n/id.php b/apps/files/l10n/id.php
index ce7cfe5ef4..c8b3194eb6 100644
--- a/apps/files/l10n/id.php
+++ b/apps/files/l10n/id.php
@@ -13,7 +13,6 @@ $TRANSLATIONS = array(
 "Not enough storage available" => "Ruang penyimpanan tidak mencukupi",
 "Invalid directory." => "Direktori tidak valid.",
 "Files" => "Berkas",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Gagal mengunggah berkas Anda karena berupa direktori atau mempunyai ukuran 0 byte",
 "Not enough space available" => "Ruang penyimpanan tidak mencukupi",
 "Upload cancelled." => "Pengunggahan dibatalkan.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Berkas sedang diunggah. Meninggalkan halaman ini akan membatalkan proses.",
@@ -32,7 +31,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array(""),
 "_%n file_::_%n files_" => array(""),
 "_Uploading %n file_::_Uploading %n files_" => array(""),
-"files uploading" => "berkas diunggah",
 "'.' is an invalid file name." => "'.' bukan nama berkas yang valid.",
 "File name cannot be empty." => "Nama berkas tidak boleh kosong.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nama tidak valid, karakter '\\', '/', '<', '>', ':', '\"', '|', '?' dan '*' tidak diizinkan.",
diff --git a/apps/files/l10n/is.php b/apps/files/l10n/is.php
index 2cf195d0a1..ef49341820 100644
--- a/apps/files/l10n/is.php
+++ b/apps/files/l10n/is.php
@@ -12,7 +12,6 @@ $TRANSLATIONS = array(
 "Failed to write to disk" => "Tókst ekki að skrifa á disk",
 "Invalid directory." => "Ógild mappa.",
 "Files" => "Skrár",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Innsending á skrá mistókst, hugsanlega sendir þú möppu eða skráin er 0 bæti.",
 "Not enough space available" => "Ekki nægt pláss tiltækt",
 "Upload cancelled." => "Hætt við innsendingu.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending misheppnast.",
diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php
index b0ec954d90..6eef9c4f69 100644
--- a/apps/files/l10n/it.php
+++ b/apps/files/l10n/it.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Manca una cartella temporanea",
 "Failed to write to disk" => "Scrittura su disco non riuscita",
 "Not enough storage available" => "Spazio di archiviazione insufficiente",
-"Upload failed" => "Caricamento non riuscito",
 "Invalid directory." => "Cartella non valida.",
 "Files" => "File",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Impossibile caricare il file poiché è una cartella o ha una dimensione di 0 byte",
 "Not enough space available" => "Spazio disponibile insufficiente",
 "Upload cancelled." => "Invio annullato",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n file","%n file"),
 "{dirs} and {files}" => "{dirs} e {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("Caricamento di %n file in corso","Caricamento di %n file in corso"),
-"files uploading" => "caricamento file",
 "'.' is an invalid file name." => "'.' non è un nome file valido.",
 "File name cannot be empty." => "Il nome del file non può essere vuoto.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome non valido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non sono consentiti.",
diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php
index 5438cbb497..5944b47434 100644
--- a/apps/files/l10n/ja_JP.php
+++ b/apps/files/l10n/ja_JP.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "一時保存フォルダが見つかりません",
 "Failed to write to disk" => "ディスクへの書き込みに失敗しました",
 "Not enough storage available" => "ストレージに十分な空き容量がありません",
-"Upload failed" => "アップロードに失敗",
 "Invalid directory." => "無効なディレクトリです。",
 "Files" => "ファイル",
-"Unable to upload your file as it is a directory or has 0 bytes" => "ディレクトリもしくは0バイトのファイルはアップロードできません",
 "Not enough space available" => "利用可能なスペースが十分にありません",
 "Upload cancelled." => "アップロードはキャンセルされました。",
 "File upload is in progress. Leaving the page now will cancel the upload." => "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n個のファイル"),
 "{dirs} and {files}" => "{dirs} と {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("%n 個のファイルをアップロード中"),
-"files uploading" => "ファイルをアップロード中",
 "'.' is an invalid file name." => "'.' は無効なファイル名です。",
 "File name cannot be empty." => "ファイル名を空にすることはできません。",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "無効な名前、'\\', '/', '<', '>', ':', '\"', '|', '?', '*' は使用できません。",
diff --git a/apps/files/l10n/ka_GE.php b/apps/files/l10n/ka_GE.php
index 455e3211a5..b931395771 100644
--- a/apps/files/l10n/ka_GE.php
+++ b/apps/files/l10n/ka_GE.php
@@ -11,10 +11,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "დროებითი საქაღალდე არ არსებობს",
 "Failed to write to disk" => "შეცდომა დისკზე ჩაწერისას",
 "Not enough storage available" => "საცავში საკმარისი ადგილი არ არის",
-"Upload failed" => "ატვირთვა ვერ განხორციელდა",
 "Invalid directory." => "დაუშვებელი დირექტორია.",
 "Files" => "ფაილები",
-"Unable to upload your file as it is a directory or has 0 bytes" => "თქვენი ფაილის ატვირთვა ვერ მოხერხდა. ის არის საქაღალდე და შეიცავს 0 ბაიტს",
 "Not enough space available" => "საკმარისი ადგილი არ არის",
 "Upload cancelled." => "ატვირთვა შეჩერებულ იქნა.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "მიმდინარეობს ფაილის ატვირთვა. სხვა გვერდზე გადასვლა გამოიწვევს ატვირთვის შეჩერებას",
@@ -33,7 +31,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array(""),
 "_%n file_::_%n files_" => array(""),
 "_Uploading %n file_::_Uploading %n files_" => array(""),
-"files uploading" => "ფაილები იტვირთება",
 "'.' is an invalid file name." => "'.' არის დაუშვებელი ფაილის სახელი.",
 "File name cannot be empty." => "ფაილის სახელი არ შეიძლება იყოს ცარიელი.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "არადაშვებადი სახელი, '\\', '/', '<', '>', ':', '\"', '|', '?' და  '*' არ არის დაიშვებული.",
diff --git a/apps/files/l10n/ko.php b/apps/files/l10n/ko.php
index e2b787e7f9..502acefcf3 100644
--- a/apps/files/l10n/ko.php
+++ b/apps/files/l10n/ko.php
@@ -11,10 +11,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "임시 폴더가 없음",
 "Failed to write to disk" => "디스크에 쓰지 못했습니다",
 "Not enough storage available" => "저장소가 용량이 충분하지 않습니다.",
-"Upload failed" => "업로드 실패",
 "Invalid directory." => "올바르지 않은 디렉터리입니다.",
 "Files" => "파일",
-"Unable to upload your file as it is a directory or has 0 bytes" => "디렉터리 및 빈 파일은 업로드할 수 없습니다",
 "Not enough space available" => "여유 공간이 부족합니다",
 "Upload cancelled." => "업로드가 취소되었습니다.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다.",
@@ -33,7 +31,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array(""),
 "_%n file_::_%n files_" => array(""),
 "_Uploading %n file_::_Uploading %n files_" => array(""),
-"files uploading" => "파일 업로드중",
 "'.' is an invalid file name." => "'.' 는 올바르지 않은 파일 이름 입니다.",
 "File name cannot be empty." => "파일 이름이 비어 있을 수 없습니다.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "폴더 이름이 올바르지 않습니다. 이름에 문자 '\\', '/', '<', '>', ':', '\"', '|', '? ', '*'는 사용할 수 없습니다.",
diff --git a/apps/files/l10n/lb.php b/apps/files/l10n/lb.php
index deefe9caa1..cd68b2b9ad 100644
--- a/apps/files/l10n/lb.php
+++ b/apps/files/l10n/lb.php
@@ -7,7 +7,6 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Et feelt en temporären Dossier",
 "Failed to write to disk" => "Konnt net op den Disk schreiwen",
 "Files" => "Dateien",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Kann deng Datei net eroplueden well et en Dossier ass oder 0 byte grouss ass.",
 "Upload cancelled." => "Upload ofgebrach.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach.",
 "Error" => "Fehler",
diff --git a/apps/files/l10n/lt_LT.php b/apps/files/l10n/lt_LT.php
index 83ed8e8688..2b32a129d5 100644
--- a/apps/files/l10n/lt_LT.php
+++ b/apps/files/l10n/lt_LT.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Nėra laikinojo katalogo",
 "Failed to write to disk" => "Nepavyko įrašyti į diską",
 "Not enough storage available" => "Nepakanka vietos serveryje",
-"Upload failed" => "Nusiuntimas nepavyko",
 "Invalid directory." => "Neteisingas aplankas",
 "Files" => "Failai",
-"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",
 "Not enough space available" => "Nepakanka vietos",
 "Upload cancelled." => "Įkėlimas atšauktas.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n failas","%n failai","%n failų"),
 "{dirs} and {files}" => "{dirs} ir {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("Įkeliamas %n failas","Įkeliami %n failai","Įkeliama %n failų"),
-"files uploading" => "įkeliami failai",
 "'.' is an invalid file name." => "'.' yra neleidžiamas failo pavadinime.",
 "File name cannot be empty." => "Failo pavadinimas negali būti tuščias.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Neleistinas pavadinimas, '\\', '/', '<', '>', ':', '\"', '|', '?' ir '*' yra neleidžiami.",
diff --git a/apps/files/l10n/lv.php b/apps/files/l10n/lv.php
index d24aaca9e4..cefaea6281 100644
--- a/apps/files/l10n/lv.php
+++ b/apps/files/l10n/lv.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Trūkst pagaidu mapes",
 "Failed to write to disk" => "Neizdevās saglabāt diskā",
 "Not enough storage available" => "Nav pietiekami daudz vietas",
-"Upload failed" => "Neizdevās augšupielādēt",
 "Invalid directory." => "Nederīga direktorija.",
 "Files" => "Datnes",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Nevar augšupielādēt jūsu datni, jo tā ir direktorija vai arī tā ir 0 baitu liela",
 "Not enough space available" => "Nepietiek brīvas vietas",
 "Upload cancelled." => "Augšupielāde ir atcelta.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde.",
@@ -36,7 +34,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("%n mapes","%n mape","%n mapes"),
 "_%n file_::_%n files_" => array("%n faili","%n fails","%n faili"),
 "_Uploading %n file_::_Uploading %n files_" => array("%n","Augšupielāde %n failu","Augšupielāde %n failus"),
-"files uploading" => "fails augšupielādējas",
 "'.' is an invalid file name." => "'.' ir nederīgs datnes nosaukums.",
 "File name cannot be empty." => "Datnes nosaukums nevar būt tukšs.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nederīgs nosaukums, nav atļauti '\\', '/', '<', '>', ':', '\"', '|', '?' un '*'.",
diff --git a/apps/files/l10n/mk.php b/apps/files/l10n/mk.php
index 7a9a8641f8..2306db6921 100644
--- a/apps/files/l10n/mk.php
+++ b/apps/files/l10n/mk.php
@@ -9,7 +9,6 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Недостасува привремена папка",
 "Failed to write to disk" => "Неуспеав да запишам на диск",
 "Files" => "Датотеки",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Не може да се преземе вашата датотека бидејќи фолдерот во кој се наоѓа фајлот има големина од 0 бајти",
 "Upload cancelled." => "Преземањето е прекинато.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Подигање на датотека е во тек. Напуштење на страницата ќе го прекине.",
 "URL cannot be empty." => "Адресата неможе да биде празна.",
diff --git a/apps/files/l10n/ms_MY.php b/apps/files/l10n/ms_MY.php
index 59d0bbfb33..61bbf81cd8 100644
--- a/apps/files/l10n/ms_MY.php
+++ b/apps/files/l10n/ms_MY.php
@@ -8,7 +8,6 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Direktori sementara hilang",
 "Failed to write to disk" => "Gagal untuk disimpan",
 "Files" => "Fail-fail",
-"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 cancelled." => "Muatnaik dibatalkan.",
 "Error" => "Ralat",
 "Share" => "Kongsi",
diff --git a/apps/files/l10n/nb_NO.php b/apps/files/l10n/nb_NO.php
index 55ce978d2a..8fda251a2b 100644
--- a/apps/files/l10n/nb_NO.php
+++ b/apps/files/l10n/nb_NO.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Mangler midlertidig mappe",
 "Failed to write to disk" => "Klarte ikke å skrive til disk",
 "Not enough storage available" => "Ikke nok lagringsplass",
-"Upload failed" => "Opplasting feilet",
 "Invalid directory." => "Ugyldig katalog.",
 "Files" => "Filer",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Kan ikke laste opp filen din siden det er en mappe eller den har 0 bytes",
 "Not enough space available" => "Ikke nok lagringsplass",
 "Upload cancelled." => "Opplasting avbrutt.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen.",
@@ -36,7 +34,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("%n mappe","%n mapper"),
 "_%n file_::_%n files_" => array("%n fil","%n filer"),
 "_Uploading %n file_::_Uploading %n files_" => array("Laster opp %n fil","Laster opp %n filer"),
-"files uploading" => "filer lastes opp",
 "'.' is an invalid file name." => "'.' er et ugyldig filnavn.",
 "File name cannot be empty." => "Filnavn kan ikke være tomt.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ugyldig navn, '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' er ikke tillatt.",
diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php
index 8e9454e794..65ad526523 100644
--- a/apps/files/l10n/nl.php
+++ b/apps/files/l10n/nl.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Er ontbreekt een tijdelijke map",
 "Failed to write to disk" => "Schrijven naar schijf mislukt",
 "Not enough storage available" => "Niet genoeg opslagruimte beschikbaar",
-"Upload failed" => "Upload mislukt",
 "Invalid directory." => "Ongeldige directory.",
 "Files" => "Bestanden",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Het lukt niet om uw bestand te uploaded, omdat het een folder of 0 bytes is",
 "Not enough space available" => "Niet genoeg ruimte beschikbaar",
 "Upload cancelled." => "Uploaden geannuleerd.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("","%n bestanden"),
 "{dirs} and {files}" => "{dirs} en {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("%n bestand aan het uploaden","%n bestanden aan het uploaden"),
-"files uploading" => "bestanden aan het uploaden",
 "'.' is an invalid file name." => "'.' is een ongeldige bestandsnaam.",
 "File name cannot be empty." => "Bestandsnaam kan niet leeg zijn.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Onjuiste naam; '\\', '/', '<', '>', ':', '\"', '|', '?' en '*' zijn niet toegestaan.",
diff --git a/apps/files/l10n/nn_NO.php b/apps/files/l10n/nn_NO.php
index 58aafac27c..04c47c31fb 100644
--- a/apps/files/l10n/nn_NO.php
+++ b/apps/files/l10n/nn_NO.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Manglar ei mellombels mappe",
 "Failed to write to disk" => "Klarte ikkje skriva til disk",
 "Not enough storage available" => "Ikkje nok lagringsplass tilgjengeleg",
-"Upload failed" => "Feil ved opplasting",
 "Invalid directory." => "Ugyldig mappe.",
 "Files" => "Filer",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Klarte ikkje lasta opp fila sidan ho er ei mappe eller er på 0 byte",
 "Not enough space available" => "Ikkje nok lagringsplass tilgjengeleg",
 "Upload cancelled." => "Opplasting avbroten.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Fila lastar no opp. Viss du forlèt sida no vil opplastinga verta avbroten.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n fil","%n filer"),
 "{dirs} and {files}" => "{dirs} og {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("Lastar opp %n fil","Lastar opp %n filer"),
-"files uploading" => "filer lastar opp",
 "'.' is an invalid file name." => "«.» er eit ugyldig filnamn.",
 "File name cannot be empty." => "Filnamnet kan ikkje vera tomt.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ugyldig namn, «\\», «/», «<», «>», «:», «\"», «|», «?» og «*» er ikkje tillate.",
diff --git a/apps/files/l10n/oc.php b/apps/files/l10n/oc.php
index 63e572059b..a6d8f91458 100644
--- a/apps/files/l10n/oc.php
+++ b/apps/files/l10n/oc.php
@@ -7,7 +7,6 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Un dorsièr temporari manca",
 "Failed to write to disk" => "L'escriptura sul disc a fracassat",
 "Files" => "Fichièrs",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Impossible d'amontcargar lo teu fichièr qu'es un repertòri o que ten pas que 0 octet.",
 "Upload cancelled." => "Amontcargar anullat.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. ",
 "Error" => "Error",
@@ -21,7 +20,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("",""),
 "_%n file_::_%n files_" => array("",""),
 "_Uploading %n file_::_Uploading %n files_" => array("",""),
-"files uploading" => "fichièrs al amontcargar",
 "Name" => "Nom",
 "Size" => "Talha",
 "Modified" => "Modificat",
diff --git a/apps/files/l10n/pa.php b/apps/files/l10n/pa.php
index b28cb29622..d8c50f2d1b 100644
--- a/apps/files/l10n/pa.php
+++ b/apps/files/l10n/pa.php
@@ -1,6 +1,5 @@
 <?php
 $TRANSLATIONS = array(
-"Upload failed" => "ਅੱਪਲੋਡ ਫੇਲ੍ਹ ਹੈ",
 "Files" => "ਫਾਇਲਾਂ",
 "Error" => "ਗਲਤੀ",
 "Share" => "ਸਾਂਝਾ ਕਰੋ",
diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php
index d8edf7173a..3ad8097581 100644
--- a/apps/files/l10n/pl.php
+++ b/apps/files/l10n/pl.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Brak folderu tymczasowego",
 "Failed to write to disk" => "Błąd zapisu na dysk",
 "Not enough storage available" => "Za mało dostępnego miejsca",
-"Upload failed" => "Wysyłanie nie powiodło się",
 "Invalid directory." => "Zła ścieżka.",
 "Files" => "Pliki",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Nie można wczytać pliku, ponieważ jest on katalogiem lub ma 0 bajtów",
 "Not enough space available" => "Za mało miejsca",
 "Upload cancelled." => "Wczytywanie anulowane.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Wysyłanie pliku jest w toku. Jeśli opuścisz tę stronę, wysyłanie zostanie przerwane.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n plik","%n pliki","%n plików"),
 "{dirs} and {files}" => "{katalogi} and {pliki}",
 "_Uploading %n file_::_Uploading %n files_" => array("Wysyłanie %n pliku","Wysyłanie %n plików","Wysyłanie %n plików"),
-"files uploading" => "pliki wczytane",
 "'.' is an invalid file name." => "„.” jest nieprawidłową nazwą pliku.",
 "File name cannot be empty." => "Nazwa pliku nie może być pusta.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nieprawidłowa nazwa. Znaki '\\', '/', '<', '>', ':', '\"', '|', '?' oraz '*' są niedozwolone.",
diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php
index f9915f251b..e7370491b5 100644
--- a/apps/files/l10n/pt_BR.php
+++ b/apps/files/l10n/pt_BR.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Pasta temporária não encontrada",
 "Failed to write to disk" => "Falha ao escrever no disco",
 "Not enough storage available" => "Espaço de armazenamento insuficiente",
-"Upload failed" => "Falha no envio",
 "Invalid directory." => "Diretório inválido.",
 "Files" => "Arquivos",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Impossível enviar seus arquivo por ele ser um diretório ou ter 0 bytes.",
 "Not enough space available" => "Espaço de armazenamento insuficiente",
 "Upload cancelled." => "Envio cancelado.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Upload em andamento. Sair da página agora resultará no cancelamento do envio.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n arquivo","%n arquivos"),
 "{dirs} and {files}" => "{dirs} e {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("Enviando %n arquivo","Enviando %n arquivos"),
-"files uploading" => "enviando arquivos",
 "'.' is an invalid file name." => "'.' é um nome de arquivo inválido.",
 "File name cannot be empty." => "O nome do arquivo não pode estar vazio.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome inválido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos.",
diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php
index 33ec8cddce..f6d61fc987 100644
--- a/apps/files/l10n/pt_PT.php
+++ b/apps/files/l10n/pt_PT.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Está a faltar a pasta temporária",
 "Failed to write to disk" => "Falhou a escrita no disco",
 "Not enough storage available" => "Não há espaço suficiente em disco",
-"Upload failed" => "Carregamento falhou",
 "Invalid directory." => "Directório Inválido",
 "Files" => "Ficheiros",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Não é possível fazer o envio do ficheiro devido a ser uma pasta ou ter 0 bytes",
 "Not enough space available" => "Espaço em disco insuficiente!",
 "Upload cancelled." => "Envio cancelado.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Envio de ficheiro em progresso. Irá cancelar o envio se sair da página agora.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n ficheiro","%n ficheiros"),
 "{dirs} and {files}" => "{dirs} e {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("A carregar %n ficheiro","A carregar %n ficheiros"),
-"files uploading" => "A enviar os ficheiros",
 "'.' is an invalid file name." => "'.' não é um nome de ficheiro válido!",
 "File name cannot be empty." => "O nome do ficheiro não pode estar vazio.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome Inválido, os caracteres '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos.",
diff --git a/apps/files/l10n/ro.php b/apps/files/l10n/ro.php
index 0a96eaa247..481e070eac 100644
--- a/apps/files/l10n/ro.php
+++ b/apps/files/l10n/ro.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Lipsește un dosar temporar",
 "Failed to write to disk" => "Eroare la scrierea discului",
 "Not enough storage available" => "Nu este suficient spațiu disponibil",
-"Upload failed" => "Încărcarea a eșuat",
 "Invalid directory." => "registru invalid.",
 "Files" => "Fișiere",
-"Unable to upload your file as it is a directory or has 0 bytes" => "lista nu se poate incarca poate fi un fisier sau are 0 bytes",
 "Not enough space available" => "Nu este suficient spațiu disponibil",
 "Upload cancelled." => "Încărcare anulată.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea.",
@@ -36,7 +34,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("","",""),
 "_%n file_::_%n files_" => array("","",""),
 "_Uploading %n file_::_Uploading %n files_" => array("","",""),
-"files uploading" => "fișiere se încarcă",
 "'.' is an invalid file name." => "'.' este un nume invalid de fișier.",
 "File name cannot be empty." => "Numele fișierului nu poate rămâne gol.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nume invalide, '\\', '/', '<', '>', ':', '\"', '|', '?' si '*' nu sunt permise.",
diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php
index 96f52a9045..083df116f6 100644
--- a/apps/files/l10n/ru.php
+++ b/apps/files/l10n/ru.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Отсутствует временная папка",
 "Failed to write to disk" => "Ошибка записи на диск",
 "Not enough storage available" => "Недостаточно доступного места в хранилище",
-"Upload failed" => "Ошибка загрузки",
 "Invalid directory." => "Неправильный каталог.",
 "Files" => "Файлы",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Файл не был загружен: его размер 0 байт либо это не файл, а директория.",
 "Not enough space available" => "Недостаточно свободного места",
 "Upload cancelled." => "Загрузка отменена.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Файл в процессе загрузки. Покинув страницу вы прервёте загрузку.",
@@ -35,13 +33,14 @@ $TRANSLATIONS = array(
 "undo" => "отмена",
 "_%n folder_::_%n folders_" => array("%n папка","%n папки","%n папок"),
 "_%n file_::_%n files_" => array("%n файл","%n файла","%n файлов"),
+"{dirs} and {files}" => "{dirs} и {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("Закачка %n файла","Закачка %n файлов","Закачка %n файлов"),
-"files uploading" => "файлы загружаются",
 "'.' is an invalid file name." => "'.' - неправильное имя файла.",
 "File name cannot be empty." => "Имя файла не может быть пустым.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Неправильное имя, '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' недопустимы.",
 "Your storage is full, files can not be updated or synced anymore!" => "Ваше дисковое пространство полностью заполнено, произведите очистку перед загрузкой новых файлов.",
 "Your storage is almost full ({usedSpacePercent}%)" => "Ваше хранилище почти заполнено ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Шифрование было отключено, но ваши файлы все еще зашифрованы. Пожалуйста, зайдите на страницу персональных настроек для того, чтобы расшифровать ваши файлы.",
 "Your download is being prepared. This might take some time if the files are big." => "Загрузка началась. Это может потребовать много времени, если файл большого размера.",
 "Name" => "Имя",
 "Size" => "Размер",
diff --git a/apps/files/l10n/si_LK.php b/apps/files/l10n/si_LK.php
index 1fd18d0c56..7d24370a09 100644
--- a/apps/files/l10n/si_LK.php
+++ b/apps/files/l10n/si_LK.php
@@ -7,7 +7,6 @@ $TRANSLATIONS = array(
 "No file was uploaded" => "ගොනුවක් උඩුගත නොවුණි",
 "Missing a temporary folder" => "තාවකාලික ෆොල්ඩරයක් අතුරුදහන්",
 "Failed to write to disk" => "තැටිගත කිරීම අසාර්ථකයි",
-"Upload failed" => "උඩුගත කිරීම අසාර්ථකයි",
 "Files" => "ගොනු",
 "Upload cancelled." => "උඩුගත කිරීම අත් හරින්න ලදී",
 "File upload is in progress. Leaving the page now will cancel the upload." => "උඩුගතකිරීමක් සිදුවේ. පිටුව හැර යාමෙන් එය නැවතෙනු ඇත",
diff --git a/apps/files/l10n/sk_SK.php b/apps/files/l10n/sk_SK.php
index b30f263d24..962ce7d7e9 100644
--- a/apps/files/l10n/sk_SK.php
+++ b/apps/files/l10n/sk_SK.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Chýba dočasný priečinok",
 "Failed to write to disk" => "Zápis na disk sa nepodaril",
 "Not enough storage available" => "Nedostatok dostupného úložného priestoru",
-"Upload failed" => "Odoslanie bolo neúspešné",
 "Invalid directory." => "Neplatný priečinok.",
 "Files" => "Súbory",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Nedá sa odoslať Váš súbor, pretože je to priečinok, alebo je jeho veľkosť 0 bajtov",
 "Not enough space available" => "Nie je k dispozícii dostatok miesta",
 "Upload cancelled." => "Odosielanie zrušené.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Opustenie stránky zruší práve prebiehajúce odosielanie súboru.",
@@ -36,7 +34,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("%n priečinok","%n priečinky","%n priečinkov"),
 "_%n file_::_%n files_" => array("%n súbor","%n súbory","%n súborov"),
 "_Uploading %n file_::_Uploading %n files_" => array("Nahrávam %n súbor","Nahrávam %n súbory","Nahrávam %n súborov"),
-"files uploading" => "nahrávanie súborov",
 "'.' is an invalid file name." => "'.' je neplatné meno súboru.",
 "File name cannot be empty." => "Meno súboru nemôže byť prázdne",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nesprávne meno, '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nie sú povolené hodnoty.",
diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php
index 08f789ff86..7190753eac 100644
--- a/apps/files/l10n/sl.php
+++ b/apps/files/l10n/sl.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Manjka začasna mapa",
 "Failed to write to disk" => "Pisanje na disk je spodletelo",
 "Not enough storage available" => "Na voljo ni dovolj prostora",
-"Upload failed" => "Pošiljanje je spodletelo",
 "Invalid directory." => "Neveljavna mapa.",
 "Files" => "Datoteke",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Pošiljanja ni mogoče izvesti, saj gre za mapo oziroma datoteko velikosti 0 bajtov.",
 "Not enough space available" => "Na voljo ni dovolj prostora.",
 "Upload cancelled." => "Pošiljanje je preklicano.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano.",
@@ -36,7 +34,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("","","",""),
 "_%n file_::_%n files_" => array("","","",""),
 "_Uploading %n file_::_Uploading %n files_" => array("","","",""),
-"files uploading" => "poteka pošiljanje datotek",
 "'.' is an invalid file name." => "'.' je neveljavno ime datoteke.",
 "File name cannot be empty." => "Ime datoteke ne sme biti prazno polje.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Neveljavno ime, znaki '\\', '/', '<', '>', ':', '\"', '|', '?' in '*' niso dovoljeni.",
diff --git a/apps/files/l10n/sq.php b/apps/files/l10n/sq.php
index 3207e3a165..ecc066a284 100644
--- a/apps/files/l10n/sq.php
+++ b/apps/files/l10n/sq.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Një dosje e përkohshme nuk u gjet",
 "Failed to write to disk" => "Ruajtja në disk dështoi",
 "Not enough storage available" => "Nuk ka mbetur hapësirë memorizimi e mjaftueshme",
-"Upload failed" => "Ngarkimi dështoi",
 "Invalid directory." => "Dosje e pavlefshme.",
 "Files" => "Skedarët",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Nuk është i mundur ngarkimi i skedarit tuaj sepse është dosje ose ka dimension 0 byte",
 "Not enough space available" => "Nuk ka hapësirë memorizimi e mjaftueshme",
 "Upload cancelled." => "Ngarkimi u anulua.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Ngarkimi i skedarit është në vazhdim. Nqse ndërroni faqen tani ngarkimi do të anulohet.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n skedar","%n skedarë"),
 "{dirs} and {files}" => "{dirs} dhe {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("Po ngarkoj %n skedar","Po ngarkoj %n skedarë"),
-"files uploading" => "po ngarkoj skedarët",
 "'.' is an invalid file name." => "'.' është emër i pavlefshëm.",
 "File name cannot be empty." => "Emri i skedarit nuk mund të jetë bosh.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Emër i pavlefshëm, '\\', '/', '<', '>', ':', '\"', '|', '?' dhe '*' nuk lejohen.",
diff --git a/apps/files/l10n/sr.php b/apps/files/l10n/sr.php
index 73f8ace5c8..fd3b2a2912 100644
--- a/apps/files/l10n/sr.php
+++ b/apps/files/l10n/sr.php
@@ -11,10 +11,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Недостаје привремена фасцикла",
 "Failed to write to disk" => "Не могу да пишем на диск",
 "Not enough storage available" => "Нема довољно простора",
-"Upload failed" => "Отпремање није успело",
 "Invalid directory." => "неисправна фасцикла.",
 "Files" => "Датотеке",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Не могу да отпремим датотеку као фасциклу или она има 0 бајтова",
 "Not enough space available" => "Нема довољно простора",
 "Upload cancelled." => "Отпремање је прекинуто.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Отпремање датотеке је у току. Ако сада напустите страницу, прекинућете отпремање.",
@@ -33,7 +31,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("","",""),
 "_%n file_::_%n files_" => array("","",""),
 "_Uploading %n file_::_Uploading %n files_" => array("","",""),
-"files uploading" => "датотеке се отпремају",
 "'.' is an invalid file name." => "Датотека „.“ је неисправног имена.",
 "File name cannot be empty." => "Име датотеке не може бити празно.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Неисправан назив. Следећи знакови нису дозвољени: \\, /, <, >, :, \", |, ? и *.",
diff --git a/apps/files/l10n/sr@latin.php b/apps/files/l10n/sr@latin.php
index 1965479fe6..8831d1a1be 100644
--- a/apps/files/l10n/sr@latin.php
+++ b/apps/files/l10n/sr@latin.php
@@ -6,6 +6,8 @@ $TRANSLATIONS = array(
 "No file was uploaded" => "Nijedan fajl nije poslat",
 "Missing a temporary folder" => "Nedostaje privremena fascikla",
 "Files" => "Fajlovi",
+"Error" => "Greška",
+"Share" => "Podeli",
 "_%n folder_::_%n folders_" => array("","",""),
 "_%n file_::_%n files_" => array("","",""),
 "_Uploading %n file_::_Uploading %n files_" => array("","",""),
@@ -17,6 +19,7 @@ $TRANSLATIONS = array(
 "Save" => "Snimi",
 "Nothing in here. Upload something!" => "Ovde nema ničeg. Pošaljite nešto!",
 "Download" => "Preuzmi",
+"Unshare" => "Ukljoni deljenje",
 "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 fbbe1f1591..208dcd4ea1 100644
--- a/apps/files/l10n/sv.php
+++ b/apps/files/l10n/sv.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "En temporär mapp saknas",
 "Failed to write to disk" => "Misslyckades spara till disk",
 "Not enough storage available" => "Inte tillräckligt med lagringsutrymme tillgängligt",
-"Upload failed" => "Misslyckad uppladdning",
 "Invalid directory." => "Felaktig mapp.",
 "Files" => "Filer",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Kan inte ladda upp din fil eftersom det är en katalog eller har 0 bytes",
 "Not enough space available" => "Inte tillräckligt med utrymme tillgängligt",
 "Upload cancelled." => "Uppladdning avbruten.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n fil","%n filer"),
 "{dirs} and {files}" => "{dirs} och {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("Laddar upp %n fil","Laddar upp %n filer"),
-"files uploading" => "filer laddas upp",
 "'.' is an invalid file name." => "'.' är ett ogiltigt filnamn.",
 "File name cannot be empty." => "Filnamn kan inte vara tomt.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte tillåtet.",
diff --git a/apps/files/l10n/ta_LK.php b/apps/files/l10n/ta_LK.php
index 154e0d6796..f05990b94f 100644
--- a/apps/files/l10n/ta_LK.php
+++ b/apps/files/l10n/ta_LK.php
@@ -7,9 +7,7 @@ $TRANSLATIONS = array(
 "No file was uploaded" => "எந்த கோப்பும் பதிவேற்றப்படவில்லை",
 "Missing a temporary folder" => "ஒரு தற்காலிகமான கோப்புறையை காணவில்லை",
 "Failed to write to disk" => "வட்டில் எழுத முடியவில்லை",
-"Upload failed" => "பதிவேற்றல் தோல்வியுற்றது",
 "Files" => "கோப்புகள்",
-"Unable to upload your file as it is a directory or has 0 bytes" => "அடைவு அல்லது 0 bytes ஐ கொண்டுள்ளதால் உங்களுடைய கோப்பை பதிவேற்ற முடியவில்லை",
 "Upload cancelled." => "பதிவேற்றல் இரத்து செய்யப்பட்டுள்ளது",
 "File upload is in progress. Leaving the page now will cancel the upload." => "கோப்பு பதிவேற்றம் செயல்பாட்டில் உள்ளது. இந்தப் பக்கத்திலிருந்து வெறியேறுவதானது பதிவேற்றலை இரத்து செய்யும்.",
 "URL cannot be empty." => "URL  வெறுமையாக இருக்கமுடியாது.",
diff --git a/apps/files/l10n/th_TH.php b/apps/files/l10n/th_TH.php
index aa8cf4e9b5..37144ebc88 100644
--- a/apps/files/l10n/th_TH.php
+++ b/apps/files/l10n/th_TH.php
@@ -11,10 +11,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "โฟลเดอร์ชั่วคราวเกิดการสูญหาย",
 "Failed to write to disk" => "เขียนข้อมูลลงแผ่นดิสก์ล้มเหลว",
 "Not enough storage available" => "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน",
-"Upload failed" => "อัพโหลดล้มเหลว",
 "Invalid directory." => "ไดเร็กทอรี่ไม่ถูกต้อง",
 "Files" => "ไฟล์",
-"Unable to upload your file as it is a directory or has 0 bytes" => "ไม่สามารถอัพโหลดไฟล์ของคุณได้ เนื่องจากไฟล์ดังกล่าวเป็นไดเร็กทอรี่ หรือ มีขนาดไฟล์ 0 ไบต์",
 "Not enough space available" => "มีพื้นที่เหลือไม่เพียงพอ",
 "Upload cancelled." => "การอัพโหลดถูกยกเลิก",
 "File upload is in progress. Leaving the page now will cancel the upload." => "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก",
@@ -32,7 +30,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array(""),
 "_%n file_::_%n files_" => array(""),
 "_Uploading %n file_::_Uploading %n files_" => array(""),
-"files uploading" => "การอัพโหลดไฟล์",
 "'.' is an invalid file name." => "'.' เป็นชื่อไฟล์ที่ไม่ถูกต้อง",
 "File name cannot be empty." => "ชื่อไฟล์ไม่สามารถเว้นว่างได้",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "ชื่อที่ใช้ไม่ถูกต้อง, '\\', '/', '<', '>', ':', '\"', '|', '?' และ '*' ไม่ได้รับอนุญาตให้ใช้งานได้",
diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php
index dd089757d5..8cb05e16ac 100644
--- a/apps/files/l10n/tr.php
+++ b/apps/files/l10n/tr.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Geçici dizin eksik",
 "Failed to write to disk" => "Diske yazılamadı",
 "Not enough storage available" => "Yeterli disk alanı yok",
-"Upload failed" => "Yükleme başarısız",
 "Invalid directory." => "Geçersiz dizin.",
 "Files" => "Dosyalar",
-"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",
 "Not enough space available" => "Yeterli disk alanı yok",
 "Upload cancelled." => "Yükleme iptal edildi.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Dosya yükleme işlemi sürüyor. Şimdi sayfadan ayrılırsanız işleminiz iptal olur.",
@@ -36,7 +34,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("%n dizin","%n dizin"),
 "_%n file_::_%n files_" => array("%n dosya","%n dosya"),
 "_Uploading %n file_::_Uploading %n files_" => array("%n dosya yükleniyor","%n dosya yükleniyor"),
-"files uploading" => "Dosyalar yükleniyor",
 "'.' is an invalid file name." => "'.' geçersiz dosya adı.",
 "File name cannot be empty." => "Dosya adı boş olamaz.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Geçersiz isim, '\\', '/', '<', '>', ':', '\"', '|', '?' ve '*' karakterlerine izin verilmemektedir.",
diff --git a/apps/files/l10n/ug.php b/apps/files/l10n/ug.php
index 920d077e4e..a38ce706ef 100644
--- a/apps/files/l10n/ug.php
+++ b/apps/files/l10n/ug.php
@@ -23,7 +23,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array(""),
 "_%n file_::_%n files_" => array(""),
 "_Uploading %n file_::_Uploading %n files_" => array(""),
-"files uploading" => "ھۆججەت يۈكلىنىۋاتىدۇ",
 "Name" => "ئاتى",
 "Size" => "چوڭلۇقى",
 "Modified" => "ئۆزگەرتكەن",
diff --git a/apps/files/l10n/uk.php b/apps/files/l10n/uk.php
index bea1d93079..fac7cea529 100644
--- a/apps/files/l10n/uk.php
+++ b/apps/files/l10n/uk.php
@@ -12,10 +12,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Відсутній тимчасовий каталог",
 "Failed to write to disk" => "Невдалося записати на диск",
 "Not enough storage available" => "Місця більше немає",
-"Upload failed" => "Помилка завантаження",
 "Invalid directory." => "Невірний каталог.",
 "Files" => "Файли",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Неможливо завантажити ваш файл тому, що він тека або файл розміром 0 байт",
 "Not enough space available" => "Місця більше немає",
 "Upload cancelled." => "Завантаження перервано.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Виконується завантаження файлу. Закриття цієї сторінки приведе до відміни завантаження.",
@@ -34,7 +32,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("","",""),
 "_%n file_::_%n files_" => array("","",""),
 "_Uploading %n file_::_Uploading %n files_" => array("","",""),
-"files uploading" => "файли завантажуються",
 "'.' is an invalid file name." => "'.' це невірне ім'я файлу.",
 "File name cannot be empty." => " Ім'я файлу не може бути порожнім.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Невірне ім'я, '\\', '/', '<', '>', ':', '\"', '|', '?' та '*' не дозволені.",
diff --git a/apps/files/l10n/vi.php b/apps/files/l10n/vi.php
index b98a14f6d7..2d63128aa2 100644
--- a/apps/files/l10n/vi.php
+++ b/apps/files/l10n/vi.php
@@ -11,10 +11,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Không tìm thấy thư mục tạm",
 "Failed to write to disk" => "Không thể ghi ",
 "Not enough storage available" => "Không đủ không gian lưu trữ",
-"Upload failed" => "Tải lên thất bại",
 "Invalid directory." => "Thư mục không hợp lệ",
 "Files" => "Tập tin",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Không thể tải lên tập tin của bạn ,nó như là một thư mục hoặc có 0 byte",
 "Not enough space available" => "Không đủ chỗ trống cần thiết",
 "Upload cancelled." => "Hủy tải lên",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này.",
@@ -33,7 +31,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array(""),
 "_%n file_::_%n files_" => array(""),
 "_Uploading %n file_::_Uploading %n files_" => array(""),
-"files uploading" => "tệp tin đang được tải lên",
 "'.' is an invalid file name." => "'.' là một tên file không hợp lệ",
 "File name cannot be empty." => "Tên file không được rỗng",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Tên không hợp lệ, '\\', '/', '<', '>', ':', '\"', '|', '?' và '*' thì không được phép dùng.",
diff --git a/apps/files/l10n/zh_CN.php b/apps/files/l10n/zh_CN.php
index 59b09ad950..b739b72ce7 100644
--- a/apps/files/l10n/zh_CN.php
+++ b/apps/files/l10n/zh_CN.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "缺少临时目录",
 "Failed to write to disk" => "写入磁盘失败",
 "Not enough storage available" => "没有足够的存储空间",
-"Upload failed" => "上传失败",
 "Invalid directory." => "无效文件夹。",
 "Files" => "文件",
-"Unable to upload your file as it is a directory or has 0 bytes" => "无法上传您的文件,文件夹或者空文件",
 "Not enough space available" => "没有足够可用空间",
 "Upload cancelled." => "上传已取消",
 "File upload is in progress. Leaving the page now will cancel the upload." => "文件正在上传中。现在离开此页会导致上传动作被取消。",
@@ -36,7 +34,6 @@ $TRANSLATIONS = array(
 "_%n folder_::_%n folders_" => array("%n 文件夹"),
 "_%n file_::_%n files_" => array("%n个文件"),
 "_Uploading %n file_::_Uploading %n files_" => array(""),
-"files uploading" => "文件上传中",
 "'.' is an invalid file name." => "'.' 是一个无效的文件名。",
 "File name cannot be empty." => "文件名不能为空。",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "无效名称,'\\', '/', '<', '>', ':', '\"', '|', '?' 和 '*' 不被允许使用。",
diff --git a/apps/files/l10n/zh_TW.php b/apps/files/l10n/zh_TW.php
index 21c929f81a..214812d7ad 100644
--- a/apps/files/l10n/zh_TW.php
+++ b/apps/files/l10n/zh_TW.php
@@ -13,10 +13,8 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "找不到暫存資料夾",
 "Failed to write to disk" => "寫入硬碟失敗",
 "Not enough storage available" => "儲存空間不足",
-"Upload failed" => "上傳失敗",
 "Invalid directory." => "無效的資料夾",
 "Files" => "檔案",
-"Unable to upload your file as it is a directory or has 0 bytes" => "無法上傳您的檔案,因為它可能是一個目錄或檔案大小為0",
 "Not enough space available" => "沒有足夠的可用空間",
 "Upload cancelled." => "上傳已取消",
 "File upload is in progress. Leaving the page now will cancel the upload." => "檔案上傳中,離開此頁面將會取消上傳。",
@@ -37,7 +35,6 @@ $TRANSLATIONS = array(
 "_%n file_::_%n files_" => array("%n 個檔案"),
 "{dirs} and {files}" => "{dirs} 和 {files}",
 "_Uploading %n file_::_Uploading %n files_" => array("%n 個檔案正在上傳"),
-"files uploading" => "檔案上傳中",
 "'.' is an invalid file name." => "'.' 是不合法的檔名",
 "File name cannot be empty." => "檔名不能為空",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "檔名不合法,不允許 \\ / < > : \" | ? * 字元",
diff --git a/apps/files_trashbin/l10n/en_GB.php b/apps/files_trashbin/l10n/en_GB.php
index bcfcfc8624..be9d8b9f52 100644
--- a/apps/files_trashbin/l10n/en_GB.php
+++ b/apps/files_trashbin/l10n/en_GB.php
@@ -8,8 +8,8 @@ $TRANSLATIONS = array(
 "Delete permanently" => "Delete permanently",
 "Name" => "Name",
 "Deleted" => "Deleted",
-"_%n folder_::_%n folders_" => array("","%n folders"),
-"_%n file_::_%n files_" => array("","%n files"),
+"_%n folder_::_%n folders_" => array("%n folder","%n folders"),
+"_%n file_::_%n files_" => array("%n file","%n files"),
 "restored" => "restored",
 "Nothing in here. Your trash bin is empty!" => "Nothing in here. Your recycle bin is empty!",
 "Restore" => "Restore",
diff --git a/apps/files_trashbin/l10n/sr@latin.php b/apps/files_trashbin/l10n/sr@latin.php
index 483d1e3ca2..fa30afcf4b 100644
--- a/apps/files_trashbin/l10n/sr@latin.php
+++ b/apps/files_trashbin/l10n/sr@latin.php
@@ -1,5 +1,6 @@
 <?php
 $TRANSLATIONS = array(
+"Error" => "Greška",
 "Name" => "Ime",
 "_%n folder_::_%n folders_" => array("","",""),
 "_%n file_::_%n files_" => array("","",""),
diff --git a/apps/user_ldap/l10n/ru.php b/apps/user_ldap/l10n/ru.php
index f26e26f1e7..40cab1c541 100644
--- a/apps/user_ldap/l10n/ru.php
+++ b/apps/user_ldap/l10n/ru.php
@@ -40,6 +40,7 @@ $TRANSLATIONS = array(
 "Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Укажите дополнительный резервный сервер. Он должен быть репликой главного LDAP/AD сервера.",
 "Backup (Replica) Port" => "Порт резервного сервера",
 "Disable Main Server" => "Отключение главного сервера",
+"Only connect to the replica server." => "Только подключение к серверу реплик.",
 "Use TLS" => "Использовать TLS",
 "Do not use it additionally for LDAPS connections, it will fail." => "Не используйте совместно с безопасными подключениями (LDAPS), это не сработает.",
 "Case insensitve LDAP server (Windows)" => "Нечувствительный к регистру сервер LDAP (Windows)",
@@ -48,11 +49,13 @@ $TRANSLATIONS = array(
 "in seconds. A change empties the cache." => "в секундах. Изменение очистит кэш.",
 "Directory Settings" => "Настройки каталога",
 "User Display Name Field" => "Поле отображаемого имени пользователя",
+"The LDAP attribute to use to generate the user's display name." => "Атрибут LDAP, который используется для генерации отображаемого имени пользователя.",
 "Base User Tree" => "База пользовательского дерева",
 "One User Base DN per line" => "По одной базовому DN пользователей в строке.",
 "User Search Attributes" => "Поисковые атрибуты пользователя",
 "Optional; one attribute per line" => "Опционально; один атрибут на линию",
 "Group Display Name Field" => "Поле отображаемого имени группы",
+"The LDAP attribute to use to generate the groups's display name." => "Атрибут LDAP, который используется для генерации отображаемого имени группы.",
 "Base Group Tree" => "База группового дерева",
 "One Group Base DN per line" => "По одной базовому DN групп в строке.",
 "Group Search Attributes" => "Атрибуты поиска для группы",
diff --git a/apps/user_ldap/l10n/sr@latin.php b/apps/user_ldap/l10n/sr@latin.php
index 07db505ecf..24fff94fc6 100644
--- a/apps/user_ldap/l10n/sr@latin.php
+++ b/apps/user_ldap/l10n/sr@latin.php
@@ -1,5 +1,6 @@
 <?php
 $TRANSLATIONS = array(
+"Error" => "Greška",
 "Password" => "Lozinka",
 "Help" => "Pomoć"
 );
diff --git a/core/l10n/ach.php b/core/l10n/ach.php
index 25f1137e8c..2cbbaa45ca 100644
--- a/core/l10n/ach.php
+++ b/core/l10n/ach.php
@@ -3,6 +3,7 @@ $TRANSLATIONS = array(
 "_%n minute ago_::_%n minutes ago_" => array("",""),
 "_%n hour ago_::_%n hours ago_" => array("",""),
 "_%n day ago_::_%n days ago_" => array("",""),
-"_%n month ago_::_%n months ago_" => array("","")
+"_%n month ago_::_%n months ago_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("","")
 );
 $PLURAL_FORMS = "nplurals=2; plural=(n > 1);";
diff --git a/core/l10n/af_ZA.php b/core/l10n/af_ZA.php
index 4144705560..6a0bbc53ac 100644
--- a/core/l10n/af_ZA.php
+++ b/core/l10n/af_ZA.php
@@ -5,6 +5,7 @@ $TRANSLATIONS = array(
 "_%n hour ago_::_%n hours ago_" => array("",""),
 "_%n day ago_::_%n days ago_" => array("",""),
 "_%n month ago_::_%n months ago_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "Password" => "Wagwoord",
 "Use the following link to reset your password: {link}" => "Gebruik die volgende skakel om jou wagwoord te herstel: {link}",
 "You will receive a link to reset your password via Email." => "Jy sal `n skakel via e-pos ontvang om jou wagwoord te herstel.",
diff --git a/core/l10n/ar.php b/core/l10n/ar.php
index 17c3ab293c..62a9580b12 100644
--- a/core/l10n/ar.php
+++ b/core/l10n/ar.php
@@ -44,6 +44,7 @@ $TRANSLATIONS = array(
 "Yes" => "نعم",
 "No" => "لا",
 "Ok" => "موافق",
+"_{count} file conflict_::_{count} file conflicts_" => array("","","","","",""),
 "The object type is not specified." => "نوع العنصر غير محدد.",
 "Error" => "خطأ",
 "The app name is not specified." => "اسم التطبيق غير محدد.",
diff --git a/core/l10n/be.php b/core/l10n/be.php
index 83f0d99a2e..2481806bcb 100644
--- a/core/l10n/be.php
+++ b/core/l10n/be.php
@@ -4,6 +4,7 @@ $TRANSLATIONS = array(
 "_%n hour ago_::_%n hours ago_" => array("","","",""),
 "_%n day ago_::_%n days ago_" => array("","","",""),
 "_%n month ago_::_%n months ago_" => array("","","",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("","","",""),
 "Advanced" => "Дасведчаны",
 "Finish setup" => "Завяршыць ўстаноўку."
 );
diff --git a/core/l10n/bg_BG.php b/core/l10n/bg_BG.php
index 8afe42f206..a4f1585420 100644
--- a/core/l10n/bg_BG.php
+++ b/core/l10n/bg_BG.php
@@ -34,6 +34,7 @@ $TRANSLATIONS = array(
 "Yes" => "Да",
 "No" => "Не",
 "Ok" => "Добре",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "Error" => "Грешка",
 "Share" => "Споделяне",
 "Share with" => "Споделено с",
diff --git a/core/l10n/bn_BD.php b/core/l10n/bn_BD.php
index 5e65d681ec..aaf982b9e5 100644
--- a/core/l10n/bn_BD.php
+++ b/core/l10n/bn_BD.php
@@ -42,6 +42,7 @@ $TRANSLATIONS = array(
 "Yes" => "হ্যাঁ",
 "No" => "না",
 "Ok" => "তথাস্তু",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "অবজেক্টের ধরণটি সুনির্দিষ্ট নয়।",
 "Error" => "সমস্যা",
 "The app name is not specified." => "অ্যাপের নামটি  সুনির্দিষ্ট নয়।",
diff --git a/core/l10n/bs.php b/core/l10n/bs.php
index 885518f913..ee8196e974 100644
--- a/core/l10n/bs.php
+++ b/core/l10n/bs.php
@@ -4,6 +4,7 @@ $TRANSLATIONS = array(
 "_%n hour ago_::_%n hours ago_" => array("","",""),
 "_%n day ago_::_%n days ago_" => array("","",""),
 "_%n month ago_::_%n months ago_" => array("","",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
 "Share" => "Podijeli",
 "Add" => "Dodaj"
 );
diff --git a/core/l10n/ca.php b/core/l10n/ca.php
index bc1960053a..448fbae0ad 100644
--- a/core/l10n/ca.php
+++ b/core/l10n/ca.php
@@ -58,6 +58,7 @@ $TRANSLATIONS = array(
 "No" => "No",
 "Ok" => "D'acord",
 "Error loading message template: {error}" => "Error en carregar la plantilla de missatge: {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "No s'ha especificat el tipus d'objecte.",
 "Error" => "Error",
 "The app name is not specified." => "No s'ha especificat el nom de l'aplicació.",
diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php
index aa5fd620c3..9ee5dd471f 100644
--- a/core/l10n/cs_CZ.php
+++ b/core/l10n/cs_CZ.php
@@ -58,6 +58,7 @@ $TRANSLATIONS = array(
 "No" => "Ne",
 "Ok" => "Ok",
 "Error loading message template: {error}" => "Chyba při nahrávání šablony zprávy: {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
 "The object type is not specified." => "Není určen typ objektu.",
 "Error" => "Chyba",
 "The app name is not specified." => "Není určen název aplikace.",
diff --git a/core/l10n/cy_GB.php b/core/l10n/cy_GB.php
index 1f6c50524b..a8b1e894e7 100644
--- a/core/l10n/cy_GB.php
+++ b/core/l10n/cy_GB.php
@@ -44,6 +44,7 @@ $TRANSLATIONS = array(
 "Yes" => "Ie",
 "No" => "Na",
 "Ok" => "Iawn",
+"_{count} file conflict_::_{count} file conflicts_" => array("","","",""),
 "The object type is not specified." => "Nid yw'r math o wrthrych wedi cael ei nodi.",
 "Error" => "Gwall",
 "The app name is not specified." => "Nid yw enw'r pecyn wedi cael ei nodi.",
diff --git a/core/l10n/da.php b/core/l10n/da.php
index 3fd0fff94e..0f7f8cfc63 100644
--- a/core/l10n/da.php
+++ b/core/l10n/da.php
@@ -51,6 +51,7 @@ $TRANSLATIONS = array(
 "Yes" => "Ja",
 "No" => "Nej",
 "Ok" => "OK",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Objekttypen er ikke angivet.",
 "Error" => "Fejl",
 "The app name is not specified." => "Den app navn er ikke angivet.",
diff --git a/core/l10n/de.php b/core/l10n/de.php
index 934e227f91..302ebe2f2f 100644
--- a/core/l10n/de.php
+++ b/core/l10n/de.php
@@ -58,6 +58,7 @@ $TRANSLATIONS = array(
 "No" => "Nein",
 "Ok" => "OK",
 "Error loading message template: {error}" => "Fehler beim Laden der Nachrichtenvorlage: {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Der Objekttyp ist nicht angegeben.",
 "Error" => "Fehler",
 "The app name is not specified." => "Der App-Name ist nicht angegeben.",
diff --git a/core/l10n/de_AT.php b/core/l10n/de_AT.php
index 93c8e33f3e..ffcdde48d4 100644
--- a/core/l10n/de_AT.php
+++ b/core/l10n/de_AT.php
@@ -3,6 +3,7 @@ $TRANSLATIONS = array(
 "_%n minute ago_::_%n minutes ago_" => array("",""),
 "_%n hour ago_::_%n hours ago_" => array("",""),
 "_%n day ago_::_%n days ago_" => array("",""),
-"_%n month ago_::_%n months ago_" => array("","")
+"_%n month ago_::_%n months ago_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("","")
 );
 $PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/de_CH.php b/core/l10n/de_CH.php
index 5ac614b257..7e2d4d9f15 100644
--- a/core/l10n/de_CH.php
+++ b/core/l10n/de_CH.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "Yes" => "Ja",
 "No" => "Nein",
 "Ok" => "OK",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Der Objekttyp ist nicht angegeben.",
 "Error" => "Fehler",
 "The app name is not specified." => "Der App-Name ist nicht angegeben.",
diff --git a/core/l10n/de_DE.php b/core/l10n/de_DE.php
index 652ef737b6..30825d5b4b 100644
--- a/core/l10n/de_DE.php
+++ b/core/l10n/de_DE.php
@@ -58,6 +58,7 @@ $TRANSLATIONS = array(
 "No" => "Nein",
 "Ok" => "OK",
 "Error loading message template: {error}" => "Fehler beim Laden der Nachrichtenvorlage: {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Der Objekttyp ist nicht angegeben.",
 "Error" => "Fehler",
 "The app name is not specified." => "Der App-Name ist nicht angegeben.",
diff --git a/core/l10n/el.php b/core/l10n/el.php
index 6e0733b706..929caad1dc 100644
--- a/core/l10n/el.php
+++ b/core/l10n/el.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "Yes" => "Ναι",
 "No" => "Όχι",
 "Ok" => "Οκ",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Δεν καθορίστηκε ο τύπος του αντικειμένου.",
 "Error" => "Σφάλμα",
 "The app name is not specified." => "Δεν καθορίστηκε το όνομα της εφαρμογής.",
diff --git a/core/l10n/en@pirate.php b/core/l10n/en@pirate.php
index 997d1f88c4..461a44dd23 100644
--- a/core/l10n/en@pirate.php
+++ b/core/l10n/en@pirate.php
@@ -4,6 +4,7 @@ $TRANSLATIONS = array(
 "_%n hour ago_::_%n hours ago_" => array("",""),
 "_%n day ago_::_%n days ago_" => array("",""),
 "_%n month ago_::_%n months ago_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "Password" => "Passcode"
 );
 $PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/en_GB.php b/core/l10n/en_GB.php
index 2d588ab243..05d945be6d 100644
--- a/core/l10n/en_GB.php
+++ b/core/l10n/en_GB.php
@@ -58,6 +58,7 @@ $TRANSLATIONS = array(
 "No" => "No",
 "Ok" => "OK",
 "Error loading message template: {error}" => "Error loading message template: {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "The object type is not specified.",
 "Error" => "Error",
 "The app name is not specified." => "The app name is not specified.",
@@ -100,7 +101,7 @@ $TRANSLATIONS = array(
 "Use the following link to reset your password: {link}" => "Use the following link to reset your password: {link}",
 "The link to reset your password has been sent to your email.<br>If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator ." => "The link to reset your password has been sent to your email.<br>If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator .",
 "Request failed!<br>Did you make sure your email/username was right?" => "Request failed!<br>Did you make sure your email/username was correct?",
-"You will receive a link to reset your password via Email." => "You will receive a link to reset your password via Email.",
+"You will receive a link to reset your password via Email." => "You will receive a link to reset your password via email.",
 "Username" => "Username",
 "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" => "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?",
 "Yes, I really want to reset my password now" => "Yes, I really want to reset my password now",
diff --git a/core/l10n/eo.php b/core/l10n/eo.php
index 669f677d46..d86c2bfacd 100644
--- a/core/l10n/eo.php
+++ b/core/l10n/eo.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "Yes" => "Jes",
 "No" => "Ne",
 "Ok" => "Akcepti",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Ne indikiĝis tipo de la objekto.",
 "Error" => "Eraro",
 "The app name is not specified." => "Ne indikiĝis nomo de la aplikaĵo.",
diff --git a/core/l10n/es.php b/core/l10n/es.php
index a38050bccc..b94e6b561d 100644
--- a/core/l10n/es.php
+++ b/core/l10n/es.php
@@ -51,6 +51,7 @@ $TRANSLATIONS = array(
 "Yes" => "Sí",
 "No" => "No",
 "Ok" => "Aceptar",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "El tipo de objeto no está especificado.",
 "Error" => "Error",
 "The app name is not specified." => "El nombre de la aplicación no está especificado.",
diff --git a/core/l10n/es_AR.php b/core/l10n/es_AR.php
index 2c699266c5..e079d5bcff 100644
--- a/core/l10n/es_AR.php
+++ b/core/l10n/es_AR.php
@@ -51,6 +51,7 @@ $TRANSLATIONS = array(
 "Yes" => "Sí",
 "No" => "No",
 "Ok" => "Aceptar",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "El tipo de objeto no está especificado. ",
 "Error" => "Error",
 "The app name is not specified." => "El nombre de la App no está especificado.",
diff --git a/core/l10n/es_MX.php b/core/l10n/es_MX.php
index 93c8e33f3e..ffcdde48d4 100644
--- a/core/l10n/es_MX.php
+++ b/core/l10n/es_MX.php
@@ -3,6 +3,7 @@ $TRANSLATIONS = array(
 "_%n minute ago_::_%n minutes ago_" => array("",""),
 "_%n hour ago_::_%n hours ago_" => array("",""),
 "_%n day ago_::_%n days ago_" => array("",""),
-"_%n month ago_::_%n months ago_" => array("","")
+"_%n month ago_::_%n months ago_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("","")
 );
 $PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/et_EE.php b/core/l10n/et_EE.php
index 48fc5adcbb..233756a835 100644
--- a/core/l10n/et_EE.php
+++ b/core/l10n/et_EE.php
@@ -58,6 +58,7 @@ $TRANSLATIONS = array(
 "No" => "Ei",
 "Ok" => "Ok",
 "Error loading message template: {error}" => "Viga sõnumi malli laadimisel:  {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Objekti tüüp pole määratletud.",
 "Error" => "Viga",
 "The app name is not specified." => "Rakenduse nimi ole määratletud.",
diff --git a/core/l10n/eu.php b/core/l10n/eu.php
index 1c11caee9e..77a1c18167 100644
--- a/core/l10n/eu.php
+++ b/core/l10n/eu.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "Yes" => "Bai",
 "No" => "Ez",
 "Ok" => "Ados",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Objetu mota ez dago zehaztuta.",
 "Error" => "Errorea",
 "The app name is not specified." => "App izena ez dago zehaztuta.",
diff --git a/core/l10n/fa.php b/core/l10n/fa.php
index b0423577b0..ab5d3628a0 100644
--- a/core/l10n/fa.php
+++ b/core/l10n/fa.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "Yes" => "بله",
 "No" => "نه",
 "Ok" => "قبول",
+"_{count} file conflict_::_{count} file conflicts_" => array(""),
 "The object type is not specified." => "نوع شی تعیین نشده است.",
 "Error" => "خطا",
 "The app name is not specified." => "نام برنامه تعیین نشده است.",
diff --git a/core/l10n/fi_FI.php b/core/l10n/fi_FI.php
index cb98a67b29..d4a922924d 100644
--- a/core/l10n/fi_FI.php
+++ b/core/l10n/fi_FI.php
@@ -52,6 +52,7 @@ $TRANSLATIONS = array(
 "Yes" => "Kyllä",
 "No" => "Ei",
 "Ok" => "Ok",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "Error" => "Virhe",
 "The app name is not specified." => "Sovelluksen nimeä ei ole määritelty.",
 "The required file {file} is not installed!" => "Vaadittua tiedostoa {file} ei ole asennettu!",
diff --git a/core/l10n/fr.php b/core/l10n/fr.php
index 8b8b7c19f2..aac4ef99e5 100644
--- a/core/l10n/fr.php
+++ b/core/l10n/fr.php
@@ -16,6 +16,9 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Erreur lors de l'ajout de %s aux favoris.",
 "No categories selected for deletion." => "Pas de catégorie sélectionnée pour la suppression.",
 "Error removing %s from favorites." => "Erreur lors de la suppression de %s des favoris.",
+"No image or file provided" => "Aucune image ou fichier fourni",
+"Unknown filetype" => "Type de fichier inconnu",
+"Invalid image" => "Image invalide",
 "Sunday" => "Dimanche",
 "Monday" => "Lundi",
 "Tuesday" => "Mardi",
@@ -48,9 +51,12 @@ $TRANSLATIONS = array(
 "last year" => "l'année dernière",
 "years ago" => "il y a plusieurs années",
 "Choose" => "Choisir",
+"Error loading file picker template: {error}" => "Erreur de chargement du modèle de sélectionneur de fichiers : {error}",
 "Yes" => "Oui",
 "No" => "Non",
 "Ok" => "Ok",
+"Error loading message template: {error}" => "Erreur de chargement du modèle de message : {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Le type d'objet n'est pas spécifié.",
 "Error" => "Erreur",
 "The app name is not specified." => "Le nom de l'application n'est pas spécifié.",
diff --git a/core/l10n/gl.php b/core/l10n/gl.php
index ec137a4e04..5212348872 100644
--- a/core/l10n/gl.php
+++ b/core/l10n/gl.php
@@ -58,6 +58,7 @@ $TRANSLATIONS = array(
 "No" => "Non",
 "Ok" => "Aceptar",
 "Error loading message template: {error}" => "Produciuse un erro ao cargar o modelo da mensaxe: {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Non se especificou o tipo de obxecto.",
 "Error" => "Erro",
 "The app name is not specified." => "Non se especificou o nome do aplicativo.",
diff --git a/core/l10n/he.php b/core/l10n/he.php
index a10765c3a8..32dcde40a9 100644
--- a/core/l10n/he.php
+++ b/core/l10n/he.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "Yes" => "כן",
 "No" => "לא",
 "Ok" => "בסדר",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "סוג הפריט לא צוין.",
 "Error" => "שגיאה",
 "The app name is not specified." => "שם היישום לא צוין.",
diff --git a/core/l10n/hi.php b/core/l10n/hi.php
index e69f2ffcf5..e783ec88d1 100644
--- a/core/l10n/hi.php
+++ b/core/l10n/hi.php
@@ -27,6 +27,7 @@ $TRANSLATIONS = array(
 "_%n hour ago_::_%n hours ago_" => array("",""),
 "_%n day ago_::_%n days ago_" => array("",""),
 "_%n month ago_::_%n months ago_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "Error" => "त्रुटि",
 "Share" => "साझा करें",
 "Share with" => "के साथ साझा",
diff --git a/core/l10n/hr.php b/core/l10n/hr.php
index 97fbfb8b97..b53301583d 100644
--- a/core/l10n/hr.php
+++ b/core/l10n/hr.php
@@ -37,6 +37,7 @@ $TRANSLATIONS = array(
 "Yes" => "Da",
 "No" => "Ne",
 "Ok" => "U redu",
+"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
 "Error" => "Greška",
 "Share" => "Podijeli",
 "Error while sharing" => "Greška prilikom djeljenja",
diff --git a/core/l10n/hu_HU.php b/core/l10n/hu_HU.php
index 92e51d977e..2c30fe68b7 100644
--- a/core/l10n/hu_HU.php
+++ b/core/l10n/hu_HU.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "Yes" => "Igen",
 "No" => "Nem",
 "Ok" => "Ok",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Az objektum típusa nincs megadva.",
 "Error" => "Hiba",
 "The app name is not specified." => "Az alkalmazás neve nincs megadva.",
diff --git a/core/l10n/hy.php b/core/l10n/hy.php
index 9965d4731b..d2b68819c7 100644
--- a/core/l10n/hy.php
+++ b/core/l10n/hy.php
@@ -22,6 +22,7 @@ $TRANSLATIONS = array(
 "_%n minute ago_::_%n minutes ago_" => array("",""),
 "_%n hour ago_::_%n hours ago_" => array("",""),
 "_%n day ago_::_%n days ago_" => array("",""),
-"_%n month ago_::_%n months ago_" => array("","")
+"_%n month ago_::_%n months ago_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("","")
 );
 $PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/ia.php b/core/l10n/ia.php
index 0556d5d129..9f530d4730 100644
--- a/core/l10n/ia.php
+++ b/core/l10n/ia.php
@@ -24,6 +24,7 @@ $TRANSLATIONS = array(
 "_%n hour ago_::_%n hours ago_" => array("",""),
 "_%n day ago_::_%n days ago_" => array("",""),
 "_%n month ago_::_%n months ago_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "Error" => "Error",
 "Share" => "Compartir",
 "Password" => "Contrasigno",
diff --git a/core/l10n/id.php b/core/l10n/id.php
index 0f222918c9..d800628091 100644
--- a/core/l10n/id.php
+++ b/core/l10n/id.php
@@ -44,6 +44,7 @@ $TRANSLATIONS = array(
 "Yes" => "Ya",
 "No" => "Tidak",
 "Ok" => "Oke",
+"_{count} file conflict_::_{count} file conflicts_" => array(""),
 "The object type is not specified." => "Tipe objek tidak ditentukan.",
 "Error" => "Galat",
 "The app name is not specified." => "Nama aplikasi tidak ditentukan.",
diff --git a/core/l10n/is.php b/core/l10n/is.php
index 8211421cf3..7aad8ea43e 100644
--- a/core/l10n/is.php
+++ b/core/l10n/is.php
@@ -42,6 +42,7 @@ $TRANSLATIONS = array(
 "Yes" => "Já",
 "No" => "Nei",
 "Ok" => "Í lagi",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Tegund ekki tilgreind",
 "Error" => "Villa",
 "The app name is not specified." => "Nafn forrits ekki tilgreint",
diff --git a/core/l10n/it.php b/core/l10n/it.php
index 72fb2756d2..fa85f0ae94 100644
--- a/core/l10n/it.php
+++ b/core/l10n/it.php
@@ -17,10 +17,10 @@ $TRANSLATIONS = array(
 "No categories selected for deletion." => "Nessuna categoria selezionata per l'eliminazione.",
 "Error removing %s from favorites." => "Errore durante la rimozione di %s dai preferiti.",
 "No image or file provided" => "Non è stata fornita alcun immagine o file",
-"Unknown filetype" => "Tipo file sconosciuto",
+"Unknown filetype" => "Tipo di file sconosciuto",
 "Invalid image" => "Immagine non valida",
-"No temporary profile picture available, try again" => "Nessuna foto profilo temporanea disponibile, riprova",
-"No crop data provided" => "Raccolta dati non prevista",
+"No temporary profile picture available, try again" => "Nessuna foto di profilo temporanea disponibile, riprova",
+"No crop data provided" => "Dati di ritaglio non forniti",
 "Sunday" => "Domenica",
 "Monday" => "Lunedì",
 "Tuesday" => "Martedì",
@@ -58,6 +58,7 @@ $TRANSLATIONS = array(
 "No" => "No",
 "Ok" => "Ok",
 "Error loading message template: {error}" => "Errore durante il caricamento del modello di messaggio: {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Il tipo di oggetto non è specificato.",
 "Error" => "Errore",
 "The app name is not specified." => "Il nome dell'applicazione non è specificato.",
diff --git a/core/l10n/ja_JP.php b/core/l10n/ja_JP.php
index 2416f23c8e..8c36f96559 100644
--- a/core/l10n/ja_JP.php
+++ b/core/l10n/ja_JP.php
@@ -57,6 +57,7 @@ $TRANSLATIONS = array(
 "No" => "いいえ",
 "Ok" => "OK",
 "Error loading message template: {error}" => "メッセージテンプレートの読み込みエラー: {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array(""),
 "The object type is not specified." => "オブジェクタイプが指定されていません。",
 "Error" => "エラー",
 "The app name is not specified." => "アプリ名がしていされていません。",
diff --git a/core/l10n/ka.php b/core/l10n/ka.php
index b6700f00f9..4805886c32 100644
--- a/core/l10n/ka.php
+++ b/core/l10n/ka.php
@@ -7,6 +7,7 @@ $TRANSLATIONS = array(
 "yesterday" => "გუშინ",
 "_%n day ago_::_%n days ago_" => array(""),
 "_%n month ago_::_%n months ago_" => array(""),
+"_{count} file conflict_::_{count} file conflicts_" => array(""),
 "Password" => "პაროლი",
 "Personal" => "პერსონა",
 "Users" => "მომხმარებლები",
diff --git a/core/l10n/ka_GE.php b/core/l10n/ka_GE.php
index 15cacc8b21..42af86b232 100644
--- a/core/l10n/ka_GE.php
+++ b/core/l10n/ka_GE.php
@@ -44,6 +44,7 @@ $TRANSLATIONS = array(
 "Yes" => "კი",
 "No" => "არა",
 "Ok" => "დიახ",
+"_{count} file conflict_::_{count} file conflicts_" => array(""),
 "The object type is not specified." => "ობიექტის ტიპი არ არის მითითებული.",
 "Error" => "შეცდომა",
 "The app name is not specified." => "აპლიკაციის სახელი არ არის მითითებული.",
diff --git a/core/l10n/km.php b/core/l10n/km.php
index 556cca20da..dbedde7e63 100644
--- a/core/l10n/km.php
+++ b/core/l10n/km.php
@@ -3,6 +3,7 @@ $TRANSLATIONS = array(
 "_%n minute ago_::_%n minutes ago_" => array(""),
 "_%n hour ago_::_%n hours ago_" => array(""),
 "_%n day ago_::_%n days ago_" => array(""),
-"_%n month ago_::_%n months ago_" => array("")
+"_%n month ago_::_%n months ago_" => array(""),
+"_{count} file conflict_::_{count} file conflicts_" => array("")
 );
 $PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/core/l10n/kn.php b/core/l10n/kn.php
index 556cca20da..dbedde7e63 100644
--- a/core/l10n/kn.php
+++ b/core/l10n/kn.php
@@ -3,6 +3,7 @@ $TRANSLATIONS = array(
 "_%n minute ago_::_%n minutes ago_" => array(""),
 "_%n hour ago_::_%n hours ago_" => array(""),
 "_%n day ago_::_%n days ago_" => array(""),
-"_%n month ago_::_%n months ago_" => array("")
+"_%n month ago_::_%n months ago_" => array(""),
+"_{count} file conflict_::_{count} file conflicts_" => array("")
 );
 $PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/core/l10n/ko.php b/core/l10n/ko.php
index 0265f38dc0..3c0ca5f4ff 100644
--- a/core/l10n/ko.php
+++ b/core/l10n/ko.php
@@ -44,6 +44,7 @@ $TRANSLATIONS = array(
 "Yes" => "예",
 "No" => "아니요",
 "Ok" => "승락",
+"_{count} file conflict_::_{count} file conflicts_" => array(""),
 "The object type is not specified." => "객체 유형이 지정되지 않았습니다.",
 "Error" => "오류",
 "The app name is not specified." => "앱 이름이 지정되지 않았습니다.",
diff --git a/core/l10n/ku_IQ.php b/core/l10n/ku_IQ.php
index 5ce6ce9c82..2feb6db272 100644
--- a/core/l10n/ku_IQ.php
+++ b/core/l10n/ku_IQ.php
@@ -5,6 +5,7 @@ $TRANSLATIONS = array(
 "_%n hour ago_::_%n hours ago_" => array("",""),
 "_%n day ago_::_%n days ago_" => array("",""),
 "_%n month ago_::_%n months ago_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "Error" => "هه‌ڵه",
 "Share" => "هاوبەشی کردن",
 "Password" => "وشەی تێپەربو",
diff --git a/core/l10n/lb.php b/core/l10n/lb.php
index 6a0b41b667..c82f88d66d 100644
--- a/core/l10n/lb.php
+++ b/core/l10n/lb.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "Yes" => "Jo",
 "No" => "Nee",
 "Ok" => "OK",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Den Typ vum Object ass net uginn.",
 "Error" => "Feeler",
 "The app name is not specified." => "Den Numm vun der App ass net uginn.",
diff --git a/core/l10n/lt_LT.php b/core/l10n/lt_LT.php
index 1fbcf89106..630d66ce67 100644
--- a/core/l10n/lt_LT.php
+++ b/core/l10n/lt_LT.php
@@ -58,6 +58,7 @@ $TRANSLATIONS = array(
 "No" => "Ne",
 "Ok" => "Gerai",
 "Error loading message template: {error}" => "Klaida įkeliant žinutės ruošinį: {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
 "The object type is not specified." => "Objekto tipas nenurodytas.",
 "Error" => "Klaida",
 "The app name is not specified." => "Nenurodytas programos pavadinimas.",
diff --git a/core/l10n/lv.php b/core/l10n/lv.php
index 465a497e88..48bb7b5381 100644
--- a/core/l10n/lv.php
+++ b/core/l10n/lv.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "Yes" => "Jā",
 "No" => "Nē",
 "Ok" => "Labi",
+"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
 "The object type is not specified." => "Nav norādīts objekta tips.",
 "Error" => "Kļūda",
 "The app name is not specified." => "Nav norādīts lietotnes nosaukums.",
diff --git a/core/l10n/mk.php b/core/l10n/mk.php
index 6a8ec50061..4caabfa7ef 100644
--- a/core/l10n/mk.php
+++ b/core/l10n/mk.php
@@ -43,6 +43,7 @@ $TRANSLATIONS = array(
 "Yes" => "Да",
 "No" => "Не",
 "Ok" => "Во ред",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Не е специфициран типот на објект.",
 "Error" => "Грешка",
 "The app name is not specified." => "Името на апликацијата не е специфицирано.",
diff --git a/core/l10n/ml_IN.php b/core/l10n/ml_IN.php
index 93c8e33f3e..ffcdde48d4 100644
--- a/core/l10n/ml_IN.php
+++ b/core/l10n/ml_IN.php
@@ -3,6 +3,7 @@ $TRANSLATIONS = array(
 "_%n minute ago_::_%n minutes ago_" => array("",""),
 "_%n hour ago_::_%n hours ago_" => array("",""),
 "_%n day ago_::_%n days ago_" => array("",""),
-"_%n month ago_::_%n months ago_" => array("","")
+"_%n month ago_::_%n months ago_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("","")
 );
 $PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/ms_MY.php b/core/l10n/ms_MY.php
index fc3698d58d..f6517f9e51 100644
--- a/core/l10n/ms_MY.php
+++ b/core/l10n/ms_MY.php
@@ -29,6 +29,7 @@ $TRANSLATIONS = array(
 "Yes" => "Ya",
 "No" => "Tidak",
 "Ok" => "Ok",
+"_{count} file conflict_::_{count} file conflicts_" => array(""),
 "Error" => "Ralat",
 "Share" => "Kongsi",
 "Password" => "Kata laluan",
diff --git a/core/l10n/my_MM.php b/core/l10n/my_MM.php
index 1016ec5f51..672067508f 100644
--- a/core/l10n/my_MM.php
+++ b/core/l10n/my_MM.php
@@ -28,6 +28,7 @@ $TRANSLATIONS = array(
 "Yes" => "ဟုတ်",
 "No" => "မဟုတ်ဘူး",
 "Ok" => "အိုကေ",
+"_{count} file conflict_::_{count} file conflicts_" => array(""),
 "Password" => "စကားဝှက်",
 "Set expiration date" => "သက်တမ်းကုန်ဆုံးမည့်ရက်သတ်မှတ်မည်",
 "Expiration date" => "သက်တမ်းကုန်ဆုံးမည့်ရက်",
diff --git a/core/l10n/nb_NO.php b/core/l10n/nb_NO.php
index 132b65daab..5e08668feb 100644
--- a/core/l10n/nb_NO.php
+++ b/core/l10n/nb_NO.php
@@ -40,6 +40,7 @@ $TRANSLATIONS = array(
 "Yes" => "Ja",
 "No" => "Nei",
 "Ok" => "Ok",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "Error" => "Feil",
 "Shared" => "Delt",
 "Share" => "Del",
diff --git a/core/l10n/ne.php b/core/l10n/ne.php
index 93c8e33f3e..ffcdde48d4 100644
--- a/core/l10n/ne.php
+++ b/core/l10n/ne.php
@@ -3,6 +3,7 @@ $TRANSLATIONS = array(
 "_%n minute ago_::_%n minutes ago_" => array("",""),
 "_%n hour ago_::_%n hours ago_" => array("",""),
 "_%n day ago_::_%n days ago_" => array("",""),
-"_%n month ago_::_%n months ago_" => array("","")
+"_%n month ago_::_%n months ago_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("","")
 );
 $PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/nl.php b/core/l10n/nl.php
index be0b93f33c..a7e9cc5301 100644
--- a/core/l10n/nl.php
+++ b/core/l10n/nl.php
@@ -58,6 +58,7 @@ $TRANSLATIONS = array(
 "No" => "Nee",
 "Ok" => "Ok",
 "Error loading message template: {error}" => "Fout bij laden berichtensjabloon: {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Het object type is niet gespecificeerd.",
 "Error" => "Fout",
 "The app name is not specified." => "De app naam is niet gespecificeerd.",
diff --git a/core/l10n/nn_NO.php b/core/l10n/nn_NO.php
index 86c46471a1..3b6566f40a 100644
--- a/core/l10n/nn_NO.php
+++ b/core/l10n/nn_NO.php
@@ -51,6 +51,7 @@ $TRANSLATIONS = array(
 "Yes" => "Ja",
 "No" => "Nei",
 "Ok" => "Greitt",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Objekttypen er ikkje spesifisert.",
 "Error" => "Feil",
 "The app name is not specified." => "Programnamnet er ikkje spesifisert.",
diff --git a/core/l10n/nqo.php b/core/l10n/nqo.php
index 556cca20da..dbedde7e63 100644
--- a/core/l10n/nqo.php
+++ b/core/l10n/nqo.php
@@ -3,6 +3,7 @@ $TRANSLATIONS = array(
 "_%n minute ago_::_%n minutes ago_" => array(""),
 "_%n hour ago_::_%n hours ago_" => array(""),
 "_%n day ago_::_%n days ago_" => array(""),
-"_%n month ago_::_%n months ago_" => array("")
+"_%n month ago_::_%n months ago_" => array(""),
+"_{count} file conflict_::_{count} file conflicts_" => array("")
 );
 $PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/core/l10n/oc.php b/core/l10n/oc.php
index 0ca3cc427a..2de644e00a 100644
--- a/core/l10n/oc.php
+++ b/core/l10n/oc.php
@@ -38,6 +38,7 @@ $TRANSLATIONS = array(
 "Yes" => "Òc",
 "No" => "Non",
 "Ok" => "D'accòrdi",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "Error" => "Error",
 "Share" => "Parteja",
 "Error while sharing" => "Error al partejar",
diff --git a/core/l10n/pa.php b/core/l10n/pa.php
index d51c26da8e..5fc13bd1f7 100644
--- a/core/l10n/pa.php
+++ b/core/l10n/pa.php
@@ -35,6 +35,7 @@ $TRANSLATIONS = array(
 "Yes" => "ਹਾਂ",
 "No" => "ਨਹੀਂ",
 "Ok" => "ਠੀਕ ਹੈ",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "Error" => "ਗਲ",
 "Share" => "ਸਾਂਝਾ ਕਰੋ",
 "Password" => "ਪਾਸਵਰ",
diff --git a/core/l10n/pl.php b/core/l10n/pl.php
index deb4b4c81c..dc6e8d365b 100644
--- a/core/l10n/pl.php
+++ b/core/l10n/pl.php
@@ -51,6 +51,7 @@ $TRANSLATIONS = array(
 "Yes" => "Tak",
 "No" => "Nie",
 "Ok" => "OK",
+"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
 "The object type is not specified." => "Nie określono typu obiektu.",
 "Error" => "Błąd",
 "The app name is not specified." => "Nie określono nazwy aplikacji.",
diff --git a/core/l10n/pt_BR.php b/core/l10n/pt_BR.php
index b25927ef23..5f22193d0d 100644
--- a/core/l10n/pt_BR.php
+++ b/core/l10n/pt_BR.php
@@ -58,6 +58,7 @@ $TRANSLATIONS = array(
 "No" => "Não",
 "Ok" => "Ok",
 "Error loading message template: {error}" => "Erro no carregamento de modelo de mensagem: {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "O tipo de objeto não foi especificado.",
 "Error" => "Erro",
 "The app name is not specified." => "O nome do app não foi especificado.",
diff --git a/core/l10n/pt_PT.php b/core/l10n/pt_PT.php
index 4554b64d40..f2dcf4ffd3 100644
--- a/core/l10n/pt_PT.php
+++ b/core/l10n/pt_PT.php
@@ -16,6 +16,10 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Erro a adicionar %s aos favoritos",
 "No categories selected for deletion." => "Nenhuma categoria seleccionada para eliminar.",
 "Error removing %s from favorites." => "Erro a remover %s dos favoritos.",
+"No image or file provided" => "Não foi selecionado nenhum ficheiro para importar",
+"Unknown filetype" => "Ficheiro desconhecido",
+"Invalid image" => "Imagem inválida",
+"No temporary profile picture available, try again" => "Foto temporária de perfil indisponível, tente novamente",
 "Sunday" => "Domingo",
 "Monday" => "Segunda",
 "Tuesday" => "Terça",
@@ -51,6 +55,8 @@ $TRANSLATIONS = array(
 "Yes" => "Sim",
 "No" => "Não",
 "Ok" => "Ok",
+"Error loading message template: {error}" => "Erro ao carregar o template: {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "O tipo de objecto não foi especificado",
 "Error" => "Erro",
 "The app name is not specified." => "O nome da aplicação não foi especificado",
diff --git a/core/l10n/ro.php b/core/l10n/ro.php
index 8b274cb140..5b0f5e6538 100644
--- a/core/l10n/ro.php
+++ b/core/l10n/ro.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "Yes" => "Da",
 "No" => "Nu",
 "Ok" => "Ok",
+"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
 "The object type is not specified." => "Tipul obiectului nu este specificat.",
 "Error" => "Eroare",
 "The app name is not specified." => "Numele aplicației nu este specificat.",
diff --git a/core/l10n/ru.php b/core/l10n/ru.php
index 0fe2e86091..973f5f38bb 100644
--- a/core/l10n/ru.php
+++ b/core/l10n/ru.php
@@ -2,6 +2,9 @@
 $TRANSLATIONS = array(
 "%s shared »%s« with you" => "%s поделился »%s« с вами",
 "group" => "группа",
+"Updated database" => "База данных обновлена",
+"Updating filecache, this may take really long..." => "Обновление файлового кэша, это может занять некоторое время...",
+"Updated filecache" => "Обновлен файловый кэш",
 "Category type not provided." => "Тип категории не предоставлен",
 "No category to add?" => "Нет категорий для добавления?",
 "This category already exists: %s" => "Эта категория уже существует: %s",
@@ -10,6 +13,8 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Ошибка добавления %s в избранное",
 "No categories selected for deletion." => "Нет категорий для удаления.",
 "Error removing %s from favorites." => "Ошибка удаления %s из избранного",
+"Unknown filetype" => "Неизвестный тип файла",
+"Invalid image" => "Изображение повреждено",
 "Sunday" => "Воскресенье",
 "Monday" => "Понедельник",
 "Tuesday" => "Вторник",
@@ -45,6 +50,7 @@ $TRANSLATIONS = array(
 "Yes" => "Да",
 "No" => "Нет",
 "Ok" => "Ок",
+"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
 "The object type is not specified." => "Тип объекта не указан",
 "Error" => "Ошибка",
 "The app name is not specified." => "Имя приложения не указано",
@@ -118,8 +124,8 @@ $TRANSLATIONS = array(
 "Data folder" => "Директория с данными",
 "Configure the database" => "Настройка базы данных",
 "will be used" => "будет использовано",
-"Database user" => "Имя пользователя для базы данных",
-"Database password" => "Пароль для базы данных",
+"Database user" => "Пользователь базы данных",
+"Database password" => "Пароль базы данных",
 "Database name" => "Название базы данных",
 "Database tablespace" => "Табличое пространство базы данных",
 "Database host" => "Хост базы данных",
diff --git a/core/l10n/si_LK.php b/core/l10n/si_LK.php
index 184566b5f1..6752352e34 100644
--- a/core/l10n/si_LK.php
+++ b/core/l10n/si_LK.php
@@ -37,6 +37,7 @@ $TRANSLATIONS = array(
 "Yes" => "ඔව්",
 "No" => "එපා",
 "Ok" => "හරි",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "Error" => "දෝෂයක්",
 "Share" => "බෙදා හදා ගන්න",
 "Share with" => "බෙදාගන්න",
diff --git a/core/l10n/sk.php b/core/l10n/sk.php
index 7285020288..50c3ecaf66 100644
--- a/core/l10n/sk.php
+++ b/core/l10n/sk.php
@@ -3,6 +3,7 @@ $TRANSLATIONS = array(
 "_%n minute ago_::_%n minutes ago_" => array("","",""),
 "_%n hour ago_::_%n hours ago_" => array("","",""),
 "_%n day ago_::_%n days ago_" => array("","",""),
-"_%n month ago_::_%n months ago_" => array("","","")
+"_%n month ago_::_%n months ago_" => array("","",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("","","")
 );
 $PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/core/l10n/sk_SK.php b/core/l10n/sk_SK.php
index f36445950a..55451d4536 100644
--- a/core/l10n/sk_SK.php
+++ b/core/l10n/sk_SK.php
@@ -51,6 +51,7 @@ $TRANSLATIONS = array(
 "Yes" => "Áno",
 "No" => "Nie",
 "Ok" => "Ok",
+"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
 "The object type is not specified." => "Nešpecifikovaný typ objektu.",
 "Error" => "Chyba",
 "The app name is not specified." => "Nešpecifikované meno aplikácie.",
diff --git a/core/l10n/sl.php b/core/l10n/sl.php
index e88b7a6fb5..71a653dc62 100644
--- a/core/l10n/sl.php
+++ b/core/l10n/sl.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "Yes" => "Da",
 "No" => "Ne",
 "Ok" => "V redu",
+"_{count} file conflict_::_{count} file conflicts_" => array("","","",""),
 "The object type is not specified." => "Vrsta predmeta ni podana.",
 "Error" => "Napaka",
 "The app name is not specified." => "Ime programa ni podano.",
diff --git a/core/l10n/sq.php b/core/l10n/sq.php
index c8462573ff..a3c9e5ed6e 100644
--- a/core/l10n/sq.php
+++ b/core/l10n/sq.php
@@ -51,6 +51,7 @@ $TRANSLATIONS = array(
 "Yes" => "Po",
 "No" => "Jo",
 "Ok" => "Në rregull",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Nuk është specifikuar tipi i objektit.",
 "Error" => "Veprim i gabuar",
 "The app name is not specified." => "Nuk është specifikuar emri i app-it.",
diff --git a/core/l10n/sr.php b/core/l10n/sr.php
index 89c13c4925..fcf01301c7 100644
--- a/core/l10n/sr.php
+++ b/core/l10n/sr.php
@@ -43,6 +43,7 @@ $TRANSLATIONS = array(
 "Yes" => "Да",
 "No" => "Не",
 "Ok" => "У реду",
+"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
 "The object type is not specified." => "Врста објекта није подешена.",
 "Error" => "Грешка",
 "The app name is not specified." => "Име програма није унето.",
diff --git a/core/l10n/sr@latin.php b/core/l10n/sr@latin.php
index 62ed061ca0..756fdae939 100644
--- a/core/l10n/sr@latin.php
+++ b/core/l10n/sr@latin.php
@@ -1,5 +1,13 @@
 <?php
 $TRANSLATIONS = array(
+"Category type not provided." => "Tip kategorije nije zadan.",
+"No category to add?" => "Bez dodavanja kategorije?",
+"This category already exists: %s" => "Kategorija već postoji: %s",
+"Object type not provided." => "Tip objekta nije zadan.",
+"%s ID not provided." => "%s ID nije zadan.",
+"Error adding %s to favorites." => "Greška u dodavanju %s u omiljeno.",
+"No categories selected for deletion." => "Kategorije za brisanje nisu izabrane.",
+"Error removing %s from favorites." => "Greška u uklanjanju %s iz omiljeno.",
 "Sunday" => "Nedelja",
 "Monday" => "Ponedeljak",
 "Tuesday" => "Utorak",
@@ -20,15 +28,65 @@ $TRANSLATIONS = array(
 "November" => "Novembar",
 "December" => "Decembar",
 "Settings" => "Podešavanja",
+"seconds ago" => "Pre par sekundi",
 "_%n minute ago_::_%n minutes ago_" => array("","",""),
 "_%n hour ago_::_%n hours ago_" => array("","",""),
+"today" => "Danas",
+"yesterday" => "juče",
 "_%n day ago_::_%n days ago_" => array("","",""),
+"last month" => "prošlog meseca",
 "_%n month ago_::_%n months ago_" => array("","",""),
+"months ago" => "pre nekoliko meseci",
+"last year" => "prošle godine",
+"years ago" => "pre nekoliko godina",
+"Choose" => "Izaberi",
+"Yes" => "Da",
+"No" => "Ne",
+"Ok" => "Ok",
+"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
+"The object type is not specified." => "Tip objekta nije zadan.",
+"Error" => "Greška",
+"The app name is not specified." => "Ime aplikacije nije precizirano.",
+"The required file {file} is not installed!" => "Potreban fajl {file} nije instaliran!",
+"Shared" => "Deljeno",
+"Share" => "Podeli",
+"Error while sharing" => "Greška pri deljenju",
+"Error while unsharing" => "Greška u uklanjanju deljenja",
+"Error while changing permissions" => "Greška u promeni dozvola",
+"Shared with you and the group {group} by {owner}" => "{owner} podelio sa Vama i grupom {group} ",
+"Shared with you by {owner}" => "Sa vama podelio {owner}",
+"Share with" => "Podeli sa",
+"Share with link" => "Podeli koristei link",
+"Password protect" => "Zaštita lozinkom",
 "Password" => "Lozinka",
+"Email link to person" => "Pošalji link e-mailom",
+"Send" => "Pošalji",
+"Set expiration date" => "Datum isteka",
+"Expiration date" => "Datum isteka",
+"Share via email:" => "Deli putem e-maila",
+"No people found" => "Nema pronađenih ljudi",
+"Resharing is not allowed" => "Dalje deljenje nije dozvoljeno",
+"Shared in {item} with {user}" => "Deljeno u {item} sa {user}",
+"Unshare" => "Ukljoni deljenje",
+"can edit" => "dozvoljene izmene",
+"access control" => "kontrola pristupa",
+"create" => "napravi",
+"update" => "ažuriranje",
+"delete" => "brisanje",
+"share" => "deljenje",
+"Password protected" => "Zaštćeno lozinkom",
+"Error unsetting expiration date" => "Greška u uklanjanju datuma isteka",
+"Error setting expiration date" => "Greška u postavljanju datuma isteka",
+"Sending ..." => "Slanje...",
+"Email sent" => "Email poslat",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "Ažuriranje nije uspelo. Molimo obavestite <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud zajednicu</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "Ažuriranje je uspelo. Prosleđivanje na ownCloud.",
+"Use the following link to reset your password: {link}" => "Koristite sledeći link za reset lozinke: {link}",
 "You will receive a link to reset your password via Email." => "Dobićete vezu za resetovanje lozinke putem e-pošte.",
 "Username" => "Korisničko ime",
 "Request reset" => "Zahtevaj resetovanje",
 "Your password was reset" => "Vaša lozinka je resetovana",
+"To login page" => "Na login stranicu",
 "New password" => "Nova lozinka",
 "Reset password" => "Resetuj lozinku",
 "Personal" => "Lično",
@@ -36,18 +94,28 @@ $TRANSLATIONS = array(
 "Apps" => "Programi",
 "Admin" => "Adninistracija",
 "Help" => "Pomoć",
+"Access forbidden" => "Pristup zabranjen",
 "Cloud not found" => "Oblak nije nađen",
+"Edit categories" => "Izmena kategorija",
+"Add" => "Dodaj",
+"Security Warning" => "Bezbednosno upozorenje",
+"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Vaša PHP verzija je ranjiva na ",
+"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nije dostupan generator slučajnog broja, molimo omogućite PHP OpenSSL ekstenziju.",
+"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez generatora slučajnog broja napadač može predvideti token za reset lozinke i preuzeti Vaš nalog.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Vaši podaci i direktorijumi su verovatno dostupni sa interneta jer .htaccess fajl ne funkcioniše.",
 "Create an <strong>admin account</strong>" => "Napravi <strong>administrativni nalog</strong>",
 "Advanced" => "Napredno",
-"Data folder" => "Facikla podataka",
+"Data folder" => "Fascikla podataka",
 "Configure the database" => "Podešavanje baze",
 "will be used" => "će biti korišćen",
 "Database user" => "Korisnik baze",
 "Database password" => "Lozinka baze",
 "Database name" => "Ime baze",
+"Database tablespace" => "tablespace baze",
 "Database host" => "Domaćin baze",
 "Finish setup" => "Završi podešavanje",
 "Log out" => "Odjava",
+"Automatic logon rejected!" => "Automatsko logovanje odbijeno!",
 "Lost your password?" => "Izgubili ste lozinku?",
 "remember" => "upamti"
 );
diff --git a/core/l10n/sv.php b/core/l10n/sv.php
index b358fdc8a9..6d7cfa2dfc 100644
--- a/core/l10n/sv.php
+++ b/core/l10n/sv.php
@@ -51,6 +51,7 @@ $TRANSLATIONS = array(
 "Yes" => "Ja",
 "No" => "Nej",
 "Ok" => "Ok",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Objekttypen är inte specificerad.",
 "Error" => "Fel",
 "The app name is not specified." => " Namnet på appen är inte specificerad.",
diff --git a/core/l10n/sw_KE.php b/core/l10n/sw_KE.php
index 93c8e33f3e..ffcdde48d4 100644
--- a/core/l10n/sw_KE.php
+++ b/core/l10n/sw_KE.php
@@ -3,6 +3,7 @@ $TRANSLATIONS = array(
 "_%n minute ago_::_%n minutes ago_" => array("",""),
 "_%n hour ago_::_%n hours ago_" => array("",""),
 "_%n day ago_::_%n days ago_" => array("",""),
-"_%n month ago_::_%n months ago_" => array("","")
+"_%n month ago_::_%n months ago_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("","")
 );
 $PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/ta_LK.php b/core/l10n/ta_LK.php
index a1a286275e..4dcb618818 100644
--- a/core/l10n/ta_LK.php
+++ b/core/l10n/ta_LK.php
@@ -43,6 +43,7 @@ $TRANSLATIONS = array(
 "Yes" => "ஆம்",
 "No" => "இல்லை",
 "Ok" => "சரி",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "பொருள் வகை குறிப்பிடப்படவில்லை.",
 "Error" => "வழு",
 "The app name is not specified." => "செயலி பெயர் குறிப்பிடப்படவில்லை.",
diff --git a/core/l10n/te.php b/core/l10n/te.php
index 2e2bb8f8fe..880c29bc2a 100644
--- a/core/l10n/te.php
+++ b/core/l10n/te.php
@@ -35,6 +35,7 @@ $TRANSLATIONS = array(
 "Yes" => "అవును",
 "No" => "కాదు",
 "Ok" => "సరే",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "Error" => "పొరపాటు",
 "Password" => "సంకేతపదం",
 "Send" => "పంపించు",
diff --git a/core/l10n/th_TH.php b/core/l10n/th_TH.php
index 90fec245c9..1069ce9d8c 100644
--- a/core/l10n/th_TH.php
+++ b/core/l10n/th_TH.php
@@ -43,6 +43,7 @@ $TRANSLATIONS = array(
 "Yes" => "ตกลง",
 "No" => "ไม่ตกลง",
 "Ok" => "ตกลง",
+"_{count} file conflict_::_{count} file conflicts_" => array(""),
 "The object type is not specified." => "ชนิดของวัตถุยังไม่ได้รับการระบุ",
 "Error" => "ข้อผิดพลาด",
 "The app name is not specified." => "ชื่อของแอปยังไม่ได้รับการระบุชื่อ",
diff --git a/core/l10n/tr.php b/core/l10n/tr.php
index a4c80638d8..b3777e94bd 100644
--- a/core/l10n/tr.php
+++ b/core/l10n/tr.php
@@ -51,6 +51,7 @@ $TRANSLATIONS = array(
 "Yes" => "Evet",
 "No" => "Hayır",
 "Ok" => "Tamam",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "The object type is not specified." => "Nesne türü belirtilmemiş.",
 "Error" => "Hata",
 "The app name is not specified." => "uygulama adı belirtilmedi.",
diff --git a/core/l10n/ug.php b/core/l10n/ug.php
index e77718233d..6298df3135 100644
--- a/core/l10n/ug.php
+++ b/core/l10n/ug.php
@@ -30,6 +30,7 @@ $TRANSLATIONS = array(
 "Yes" => "ھەئە",
 "No" => "ياق",
 "Ok" => "جەزملە",
+"_{count} file conflict_::_{count} file conflicts_" => array(""),
 "Error" => "خاتالىق",
 "Share" => "ھەمبەھىر",
 "Share with" => "ھەمبەھىر",
diff --git a/core/l10n/uk.php b/core/l10n/uk.php
index 8e74855dd0..71b1c8ba26 100644
--- a/core/l10n/uk.php
+++ b/core/l10n/uk.php
@@ -44,6 +44,7 @@ $TRANSLATIONS = array(
 "Yes" => "Так",
 "No" => "Ні",
 "Ok" => "Ok",
+"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
 "The object type is not specified." => "Не визначено тип об'єкту.",
 "Error" => "Помилка",
 "The app name is not specified." => "Не визначено ім'я програми.",
diff --git a/core/l10n/ur_PK.php b/core/l10n/ur_PK.php
index 96871a54d0..5bb9255fe5 100644
--- a/core/l10n/ur_PK.php
+++ b/core/l10n/ur_PK.php
@@ -23,6 +23,7 @@ $TRANSLATIONS = array(
 "Yes" => "ہاں",
 "No" => "نہیں",
 "Ok" => "اوکے",
+"_{count} file conflict_::_{count} file conflicts_" => array("",""),
 "Error" => "ایرر",
 "Error while sharing" => "شئیرنگ کے دوران ایرر",
 "Error while unsharing" => "شئیرنگ ختم کرنے  کے دوران ایرر",
diff --git a/core/l10n/vi.php b/core/l10n/vi.php
index 1ccf03c0aa..91f756e266 100644
--- a/core/l10n/vi.php
+++ b/core/l10n/vi.php
@@ -44,6 +44,7 @@ $TRANSLATIONS = array(
 "Yes" => "Có",
 "No" => "Không",
 "Ok" => "Đồng ý",
+"_{count} file conflict_::_{count} file conflicts_" => array(""),
 "The object type is not specified." => "Loại đối tượng không được chỉ định.",
 "Error" => "Lỗi",
 "The app name is not specified." => "Tên ứng dụng không được chỉ định.",
diff --git a/core/l10n/zh_CN.php b/core/l10n/zh_CN.php
index ce61618111..471aa735c4 100644
--- a/core/l10n/zh_CN.php
+++ b/core/l10n/zh_CN.php
@@ -51,6 +51,7 @@ $TRANSLATIONS = array(
 "Yes" => "是",
 "No" => "否",
 "Ok" => "好",
+"_{count} file conflict_::_{count} file conflicts_" => array(""),
 "The object type is not specified." => "未指定对象类型。",
 "Error" => "错误",
 "The app name is not specified." => "未指定应用名称。",
diff --git a/core/l10n/zh_HK.php b/core/l10n/zh_HK.php
index 8bfa1f5861..f8e9cc2176 100644
--- a/core/l10n/zh_HK.php
+++ b/core/l10n/zh_HK.php
@@ -31,6 +31,7 @@ $TRANSLATIONS = array(
 "Yes" => "Yes",
 "No" => "No",
 "Ok" => "OK",
+"_{count} file conflict_::_{count} file conflicts_" => array(""),
 "Error" => "錯誤",
 "Shared" => "已分享",
 "Share" => "分享",
diff --git a/core/l10n/zh_TW.php b/core/l10n/zh_TW.php
index a6e2588e0d..0a9a9db733 100644
--- a/core/l10n/zh_TW.php
+++ b/core/l10n/zh_TW.php
@@ -51,6 +51,7 @@ $TRANSLATIONS = array(
 "Yes" => "是",
 "No" => "否",
 "Ok" => "好",
+"_{count} file conflict_::_{count} file conflicts_" => array(""),
 "The object type is not specified." => "未指定物件類型。",
 "Error" => "錯誤",
 "The app name is not specified." => "沒有指定 app 名稱。",
diff --git a/l10n/ach/core.po b/l10n/ach/core.po
index f61d3994ee..070293766e 100644
--- a/l10n/ach/core.po
+++ b/l10n/ach/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Acoli (http://www.transifex.com/projects/p/owncloud/language/ach/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -266,6 +266,46 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/ach/files.po b/l10n/ach/files.po
index 1edc94cfa5..b8a81660f4 100644
--- a/l10n/ach/files.po
+++ b/l10n/ach/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-07 04:39-0400\n"
-"PO-Revision-Date: 2013-09-07 07:27+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Acoli (http://www.transifex.com/projects/p/owncloud/language/ach/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -232,7 +240,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -268,65 +276,65 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr ""
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/ach/settings.po b/l10n/ach/settings.po
index 583ddc7569..591268ad38 100644
--- a/l10n/ach/settings.po
+++ b/l10n/ach/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Acoli (http://www.transifex.com/projects/p/owncloud/language/ach/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/af_ZA/core.po b/l10n/af_ZA/core.po
index 67360d8c10..ba46eb4cfa 100644
--- a/l10n/af_ZA/core.po
+++ b/l10n/af_ZA/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr ""
 msgid "Settings"
 msgstr "Instellings"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -266,6 +266,46 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/af_ZA/files.po b/l10n/af_ZA/files.po
index e02365d637..1a0f6c3fbf 100644
--- a/l10n/af_ZA/files.po
+++ b/l10n/af_ZA/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:31-0400\n"
-"PO-Revision-Date: 2013-08-30 13:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:275 js/file-upload.js:291 js/files.js:511 js/files.js:549
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:573
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:305
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:422 js/filelist.js:488 js/files.js:580
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:423 js/filelist.js:489 js/files.js:586
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:430
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:561
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:626
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:562 templates/index.php:67
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:563 templates/index.php:78
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:80
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -232,7 +240,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -268,65 +276,65 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:73
+#: templates/index.php:67
 msgid "Download"
 msgstr ""
 
-#: templates/index.php:85 templates/index.php:86
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:91 templates/index.php:92
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:105
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:107
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:112
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/af_ZA/settings.po b/l10n/af_ZA/settings.po
index ee1052086e..1a474f8b03 100644
--- a/l10n/af_ZA/settings.po
+++ b/l10n/af_ZA/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/ar/core.po b/l10n/ar/core.po
index 362057faca..fd75a547f8 100644
--- a/l10n/ar/core.po
+++ b/l10n/ar/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
 "MIME-Version: 1.0\n"
@@ -190,11 +190,11 @@ msgstr "كانون الاول"
 msgid "Settings"
 msgstr "إعدادات"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "منذ ثواني"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
@@ -204,7 +204,7 @@ msgstr[3] ""
 msgstr[4] ""
 msgstr[5] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
@@ -214,15 +214,15 @@ msgstr[3] ""
 msgstr[4] ""
 msgstr[5] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "اليوم"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "يوم أمس"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
@@ -232,11 +232,11 @@ msgstr[3] ""
 msgstr[4] ""
 msgstr[5] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "الشهر الماضي"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
@@ -246,15 +246,15 @@ msgstr[3] ""
 msgstr[4] ""
 msgstr[5] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "شهر مضى"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "السنةالماضية"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "سنة مضت"
 
@@ -282,6 +282,50 @@ msgstr "موافق"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/ar/files.po b/l10n/ar/files.po
index 565d98c14c..5e431360f9 100644
--- a/l10n/ar/files.po
+++ b/l10n/ar/files.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: ibrahim_9090 <ibrahim9090@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -75,11 +75,15 @@ msgstr "خطأ في الكتابة على القرص الصلب"
 msgid "Not enough storage available"
 msgstr "لا يوجد مساحة تخزينية كافية"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "عملية الرفع فشلت"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "مسار غير صحيح."
 
@@ -87,76 +91,80 @@ msgstr "مسار غير صحيح."
 msgid "Files"
 msgstr "الملفات"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "فشل في رفع ملفاتك , إما أنها مجلد أو حجمها 0 بايت"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "لا توجد مساحة كافية"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "تم إلغاء عملية رفع الملفات ."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "عملية رفع الملفات قيد التنفيذ. اغلاق الصفحة سوف يلغي عملية رفع الملفات."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "عنوان ال URL  لا يجوز أن يكون فارغا."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "تسمية ملف غير صالحة. استخدام الاسم \"shared\" محجوز بواسطة ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "خطأ"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "شارك"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "حذف بشكل دائم"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "إعادة تسميه"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "قيد الانتظار"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} موجود مسبقا"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "استبدال"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "اقترح إسم"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "إلغاء"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "استبدل {new_name}  بـ  {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "تراجع"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
@@ -166,7 +174,7 @@ msgstr[3] ""
 msgstr[4] ""
 msgstr[5] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
@@ -176,11 +184,11 @@ msgstr[3] ""
 msgstr[4] ""
 msgstr[5] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} و {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
@@ -190,53 +198,53 @@ msgstr[3] ""
 msgstr[4] ""
 msgstr[5] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "يتم تحميل الملفات"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "\".\" اسم ملف غير صحيح."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "اسم الملف لا يجوز أن يكون فارغا"
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "اسم غير صحيح , الرموز  '\\', '/', '<', '>', ':', '\"', '|', '?' و \"*\" غير مسموح استخدامها"
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "مساحتك التخزينية ممتلئة, لا يمكم تحديث ملفاتك أو مزامنتها بعد الآن !"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "مساحتك التخزينية امتلأت تقريبا "
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "تم تعطيل التشفير لكن ملفاتك لا تزال مشفرة. فضلا اذهب إلى الإعدادات الشخصية لإزالة التشفير عن ملفاتك."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "جاري تجهيز عملية التحميل. قد تستغرق بعض الوقت اذا كان حجم الملفات كبير."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "اسم"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "حجم"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "معدل"
 
@@ -245,7 +253,7 @@ msgstr "معدل"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "رفع"
 
@@ -281,65 +289,65 @@ msgstr "الحد الأقصى المسموح به لملفات ZIP"
 msgid "Save"
 msgstr "حفظ"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "جديد"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "ملف"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "مجلد"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "من رابط"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "حذف الملفات"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "إلغاء رفع الملفات"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "لا تملك صلاحيات الكتابة هنا."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "لا يوجد شيء هنا. إرفع بعض الملفات!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "تحميل"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "إلغاء مشاركة"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "إلغاء"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "حجم الترفيع أعلى من المسموح"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "حجم الملفات التي تريد ترفيعها أعلى من المسموح على الخادم."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "يرجى الانتظار , جاري فحص الملفات ."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "الفحص الحالي"
 
diff --git a/l10n/ar/settings.po b/l10n/ar/settings.po
index d047380c94..42761603ac 100644
--- a/l10n/ar/settings.po
+++ b/l10n/ar/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/be/core.po b/l10n/be/core.po
index 7e415d6b9d..9b8d51d257 100644
--- a/l10n/be/core.po
+++ b/l10n/be/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n"
 "MIME-Version: 1.0\n"
@@ -190,11 +190,11 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
@@ -202,7 +202,7 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
@@ -210,15 +210,15 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
@@ -226,11 +226,11 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
@@ -238,15 +238,15 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -274,6 +274,48 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/be/files.po b/l10n/be/files.po
index ef6881506f..ebc97c0f97 100644
--- a/l10n/be/files.po
+++ b/l10n/be/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:31-0400\n"
-"PO-Revision-Date: 2013-08-30 13:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,76 +90,80 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:275 js/file-upload.js:291 js/files.js:511 js/files.js:549
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:573
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:305
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:422 js/filelist.js:488 js/files.js:580
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
@@ -163,7 +171,7 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/filelist.js:423 js/filelist.js:489 js/files.js:586
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
@@ -171,11 +179,11 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/filelist.js:430
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:561
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
@@ -183,53 +191,53 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/filelist.js:626
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:562 templates/index.php:67
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:563 templates/index.php:78
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:80
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -238,7 +246,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -274,65 +282,65 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:73
+#: templates/index.php:67
 msgid "Download"
 msgstr ""
 
-#: templates/index.php:85 templates/index.php:86
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:91 templates/index.php:92
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:105
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:107
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:112
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/be/settings.po b/l10n/be/settings.po
index 211f77281b..28e5d3884c 100644
--- a/l10n/be/settings.po
+++ b/l10n/be/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/bg_BG/core.po b/l10n/bg_BG/core.po
index fa51807332..4237a77998 100644
--- a/l10n/bg_BG/core.po
+++ b/l10n/bg_BG/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr "Декември"
 msgid "Settings"
 msgstr "Настройки"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "преди секунди"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "днес"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "вчера"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "последният месец"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "последната година"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "последните години"
 
@@ -266,6 +266,46 @@ msgstr "Добре"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/bg_BG/files.po b/l10n/bg_BG/files.po
index 69c221b386..58667fa74a 100644
--- a/l10n/bg_BG/files.po
+++ b/l10n/bg_BG/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr "Възникна проблем при запис в диска"
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Качването е неуспешно"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Невалидна директория."
 
@@ -86,144 +90,148 @@ msgstr "Невалидна директория."
 msgid "Files"
 msgstr "Файлове"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Качването е спряно."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Грешка"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Споделяне"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Изтриване завинаги"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Преименуване"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Чакащо"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "препокриване"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "отказ"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "възтановяване"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Име"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Размер"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Променено"
 
@@ -232,7 +240,7 @@ msgstr "Променено"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Качване"
 
@@ -268,65 +276,65 @@ msgstr ""
 msgid "Save"
 msgstr "Запис"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Ново"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Текстов файл"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Папка"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Спри качването"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Няма нищо тук. Качете нещо."
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Изтегляне"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Изтриване"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Файлът който сте избрали за качване е прекалено голям"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Файловете които се опитвате да качите са по-големи от позволеното за сървъра."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Файловете се претърсват, изчакайте."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/bg_BG/settings.po b/l10n/bg_BG/settings.po
index 24ca5a353c..215c006717 100644
--- a/l10n/bg_BG/settings.po
+++ b/l10n/bg_BG/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/bn_BD/core.po b/l10n/bn_BD/core.po
index d42a8ce045..9c545be382 100644
--- a/l10n/bn_BD/core.po
+++ b/l10n/bn_BD/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr "ডিসেম্বর"
 msgid "Settings"
 msgstr "নিয়ামকসমূহ"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "সেকেন্ড পূর্বে"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "আজ"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "গতকাল"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "গত মাস"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "মাস পূর্বে"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "গত বছর"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "বছর পূর্বে"
 
@@ -266,6 +266,46 @@ msgstr "তথাস্তু"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/bn_BD/files.po b/l10n/bn_BD/files.po
index e2785070c3..10ce6739f1 100644
--- a/l10n/bn_BD/files.po
+++ b/l10n/bn_BD/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr "ডিস্কে লিখতে ব্যর্থ"
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "ভুল ডিরেক্টরি"
 
@@ -86,144 +90,148 @@ msgstr "ভুল ডিরেক্টরি"
 msgid "Files"
 msgstr "ফাইল"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "আপনার ফাইলটি আপলোড করা সম্ভব হলো না, কেননা এটি হয় একটি ফোল্ডার কিংবা এর আকার ০ বাইট"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "যথেষ্ঠ পরিমাণ স্থান নেই"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "আপলোড বাতিল করা হয়েছে।"
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "ফাইল আপলোড চলমান। এই পৃষ্ঠা পরিত্যাগ করলে আপলোড বাতিল করা হবে।"
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL ফাঁকা রাখা যাবে না।"
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "সমস্যা"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "ভাগাভাগি কর"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "পূনঃনামকরণ"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "মুলতুবি"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} টি বিদ্যমান"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "প্রতিস্থাপন"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "নাম সুপারিশ করুন"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "বাতিল"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "{new_name} কে {old_name} নামে প্রতিস্থাপন করা হয়েছে"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "ক্রিয়া প্রত্যাহার"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "টি একটি অননুমোদিত নাম।"
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "ফাইলের নামটি ফাঁকা রাখা যাবে না।"
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "নামটি সঠিক নয়,  '\\', '/', '<', '>', ':', '\"', '|', '?' এবং  '*'  অনুমোদিত নয়।"
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "রাম"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "আকার"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "পরিবর্তিত"
 
@@ -232,7 +240,7 @@ msgstr "পরিবর্তিত"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "আপলোড"
 
@@ -268,65 +276,65 @@ msgstr "ZIP ফাইলের ইনপুটের সর্বোচ্চ 
 msgid "Save"
 msgstr "সংরক্ষণ"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "নতুন"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "টেক্সট ফাইল"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "ফোল্ডার"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr " লিংক থেকে"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "আপলোড বাতিল কর"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "এখানে কিছুই নেই। কিছু আপলোড করুন !"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "ডাউনলোড"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "ভাগাভাগি বাতিল "
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "মুছে"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "আপলোডের আকারটি অনেক বড়"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "আপনি এই সার্ভারে আপলোড করার জন্য অনুমোদিত ফাইলের সর্বোচ্চ আকারের চেয়ে বৃহদাকার ফাইল আপলোড করার চেষ্টা করছেন "
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "ফাইলগুলো স্ক্যান করা হচ্ছে, দয়া করে অপেক্ষা করুন।"
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "বর্তমান স্ক্যানিং"
 
diff --git a/l10n/bn_BD/settings.po b/l10n/bn_BD/settings.po
index e40fc9e716..b36011a8a5 100644
--- a/l10n/bn_BD/settings.po
+++ b/l10n/bn_BD/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/bs/core.po b/l10n/bs/core.po
index b8e1e43613..5b4df12a3c 100644
--- a/l10n/bs/core.po
+++ b/l10n/bs/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bosnian (http://www.transifex.com/projects/p/owncloud/language/bs/)\n"
 "MIME-Version: 1.0\n"
@@ -190,59 +190,59 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -270,6 +270,47 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/bs/files.po b/l10n/bs/files.po
index 6c304b9289..f825923a72 100644
--- a/l10n/bs/files.po
+++ b/l10n/bs/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:31-0400\n"
-"PO-Revision-Date: 2013-08-30 13:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bosnian (http://www.transifex.com/projects/p/owncloud/language/bs/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,147 +90,151 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:275 js/file-upload.js:291 js/files.js:511 js/files.js:549
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Podijeli"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:573
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:305
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:422 js/filelist.js:488 js/files.js:580
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:423 js/filelist.js:489 js/files.js:586
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:430
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:561
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:626
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:562 templates/index.php:67
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Ime"
 
-#: js/files.js:563 templates/index.php:78
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Veličina"
 
-#: js/files.js:564 templates/index.php:80
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -235,7 +243,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -271,65 +279,65 @@ msgstr ""
 msgid "Save"
 msgstr "Spasi"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Fasikla"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:73
+#: templates/index.php:67
 msgid "Download"
 msgstr ""
 
-#: templates/index.php:85 templates/index.php:86
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:91 templates/index.php:92
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:105
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:107
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:112
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/bs/settings.po b/l10n/bs/settings.po
index 0034003535..87fe921d45 100644
--- a/l10n/bs/settings.po
+++ b/l10n/bs/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bosnian (http://www.transifex.com/projects/p/owncloud/language/bs/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/ca/core.po b/l10n/ca/core.po
index 6295fd0d36..b9bcb7573d 100644
--- a/l10n/ca/core.po
+++ b/l10n/ca/core.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-17 13:31+0000\n"
-"Last-Translator: rogerc\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -192,55 +192,55 @@ msgstr "Desembre"
 msgid "Settings"
 msgstr "Configuració"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "segons enrere"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "fa %n minut"
 msgstr[1] "fa %n minuts"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "fa %n hora"
 msgstr[1] "fa %n hores"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "avui"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "ahir"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "fa %n dies"
 msgstr[1] "fa %n dies"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "el mes passat"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "fa %n mes"
 msgstr[1] "fa %n mesos"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "mesos enrere"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "l'any passat"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "anys enrere"
 
@@ -268,6 +268,46 @@ msgstr "D'acord"
 msgid "Error loading message template: {error}"
 msgstr "Error en carregar la plantilla de missatge: {error}"
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/ca/files.po b/l10n/ca/files.po
index ca6a524089..173aeb30ac 100644
--- a/l10n/ca/files.po
+++ b/l10n/ca/files.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: rogerc\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -76,11 +76,15 @@ msgstr "Ha fallat en escriure al disc"
 msgid "Not enough storage available"
 msgstr "No hi ha prou espai disponible"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "La pujada ha fallat"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Directori no vàlid."
 
@@ -88,144 +92,148 @@ msgstr "Directori no vàlid."
 msgid "Files"
 msgstr "Fitxers"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "No hi ha prou espai disponible"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "La pujada s'ha cancel·lat."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "La URL no pot ser buida"
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Nom de carpeta no vàlid. L'ús de 'Shared' està reservat per Owncloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Error"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Comparteix"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Esborra permanentment"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Reanomena"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Pendent"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} ja existeix"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "substitueix"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "sugereix un nom"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "cancel·la"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "s'ha substituït {old_name} per {new_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "desfés"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n carpeta"
 msgstr[1] "%n carpetes"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n fitxer"
 msgstr[1] "%n fitxers"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} i {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Pujant %n fitxer"
 msgstr[1] "Pujant %n fitxers"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "fitxers pujant"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' és un nom no vàlid per un fitxer."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "El nom del fitxer no pot ser buit."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "El nóm no és vàlid, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' no estan permesos."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "El vostre espai d'emmagatzemament és ple, els fitxers ja no es poden actualitzar o sincronitzar!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "El vostre espai d'emmagatzemament és gairebé ple ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "L'encriptació s'ha desactivat però els vostres fitxers segueixen encriptats. Aneu a la vostra configuració personal per desencriptar els vostres fitxers."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "S'està preparant la baixada. Pot trigar una estona si els fitxers són grans."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nom"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Mida"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Modificat"
 
@@ -234,7 +242,7 @@ msgstr "Modificat"
 msgid "%s could not be renamed"
 msgstr "%s no es pot canviar el nom"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Puja"
 
@@ -270,65 +278,65 @@ msgstr "Mida màxima d'entrada per fitxers ZIP"
 msgid "Save"
 msgstr "Desa"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Nou"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Fitxer de text"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Carpeta"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Des d'enllaç"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Fitxers esborrats"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Cancel·la la pujada"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "No teniu permisos d'escriptura aquí."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Res per aquí. Pugeu alguna cosa!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Baixa"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Deixa de compartir"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Esborra"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "La pujada és massa gran"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor"
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "S'estan escanejant els fitxers, espereu"
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Actualment escanejant"
 
diff --git a/l10n/ca/settings.po b/l10n/ca/settings.po
index 27282ac4a9..0aafc8549f 100644
--- a/l10n/ca/settings.po
+++ b/l10n/ca/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
 "MIME-Version: 1.0\n"
@@ -111,11 +111,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/cs_CZ/core.po b/l10n/cs_CZ/core.po
index 9f985c26df..038c8c297c 100644
--- a/l10n/cs_CZ/core.po
+++ b/l10n/cs_CZ/core.po
@@ -12,9 +12,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-17 18:20+0000\n"
-"Last-Translator: pstast <petr@stastny.eu>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -195,59 +195,59 @@ msgstr "Prosinec"
 msgid "Settings"
 msgstr "Nastavení"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "před pár vteřinami"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "před %n minutou"
 msgstr[1] "před %n minutami"
 msgstr[2] "před %n minutami"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "před %n hodinou"
 msgstr[1] "před %n hodinami"
 msgstr[2] "před %n hodinami"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "dnes"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "včera"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "před %n dnem"
 msgstr[1] "před %n dny"
 msgstr[2] "před %n dny"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "minulý měsíc"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "před %n měsícem"
 msgstr[1] "před %n měsíci"
 msgstr[2] "před %n měsíci"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "před měsíci"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "minulý rok"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "před lety"
 
@@ -275,6 +275,47 @@ msgstr "Ok"
 msgid "Error loading message template: {error}"
 msgstr "Chyba při nahrávání šablony zprávy: {error}"
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/cs_CZ/files.po b/l10n/cs_CZ/files.po
index 92e790b878..7ce4b33052 100644
--- a/l10n/cs_CZ/files.po
+++ b/l10n/cs_CZ/files.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: pstast <petr@stastny.eu>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -78,11 +78,15 @@ msgstr "Zápis na disk selhal"
 msgid "Not enough storage available"
 msgstr "Nedostatek dostupného úložného prostoru"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Odesílání selhalo"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Neplatný adresář"
 
@@ -90,147 +94,151 @@ msgstr "Neplatný adresář"
 msgid "Files"
 msgstr "Soubory"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Nelze odeslat Váš soubor, protože je to adresář nebo jeho velikost je 0 bajtů"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Nedostatek volného místa"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Odesílání zrušeno."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Probíhá odesílání souboru. Opuštění stránky způsobí zrušení nahrávání."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL nemůže být prázdná."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Název složky nelze použít. Použití názvu 'Shared' je ownCloudem rezervováno"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Chyba"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Sdílet"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Trvale odstranit"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Přejmenovat"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Nevyřízené"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} již existuje"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "nahradit"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "navrhnout název"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "zrušit"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "nahrazeno {new_name} s {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "vrátit zpět"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n složka"
 msgstr[1] "%n složky"
 msgstr[2] "%n složek"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n soubor"
 msgstr[1] "%n soubory"
 msgstr[2] "%n souborů"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} a {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Nahrávám %n soubor"
 msgstr[1] "Nahrávám %n soubory"
 msgstr[2] "Nahrávám %n souborů"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "soubory se odesílají"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' je neplatným názvem souboru."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Název souboru nemůže být prázdný řetězec."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Neplatný název, znaky '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nejsou povoleny."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Vaše úložiště je plné, nelze aktualizovat ani synchronizovat soubory."
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Vaše úložiště je téměř plné ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Šifrování bylo vypnuto, vaše soubory jsou však stále zašifrované. Běžte prosím do osobního nastavení, kde soubory odšifrujete."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Vaše soubory ke stažení se připravují. Pokud jsou velké, může to chvíli trvat."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Název"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Velikost"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Upraveno"
 
@@ -239,7 +247,7 @@ msgstr "Upraveno"
 msgid "%s could not be renamed"
 msgstr "%s nemůže být přejmenován"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Odeslat"
 
@@ -275,65 +283,65 @@ msgstr "Maximální velikost vstupu pro ZIP soubory"
 msgid "Save"
 msgstr "Uložit"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Nový"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Textový soubor"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Složka"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Z odkazu"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Odstraněné soubory"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Zrušit odesílání"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Nemáte zde práva zápisu."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Žádný obsah. Nahrajte něco."
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Stáhnout"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Zrušit sdílení"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Smazat"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Odesílaný soubor je příliš velký"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Soubory, které se snažíte odeslat, překračují limit velikosti odesílání na tomto serveru."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Soubory se prohledávají, prosím čekejte."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Aktuální prohledávání"
 
diff --git a/l10n/cs_CZ/settings.po b/l10n/cs_CZ/settings.po
index 971650d2c9..b979460916 100644
--- a/l10n/cs_CZ/settings.po
+++ b/l10n/cs_CZ/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
 "MIME-Version: 1.0\n"
@@ -90,36 +90,32 @@ msgstr "Nelze aktualizovat aplikaci."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Nesprávné heslo"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "Nebyl uveden uživatel"
 
 #: changepassword/controller.php:74
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Zadejte prosím administrátorské heslo pro obnovu, jinak budou všechna data ztracena"
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "Chybné administrátorské heslo pro obnovu. Překontrolujte správnost hesla a zkuste to znovu."
 
 #: changepassword/controller.php:87
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
-
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
+msgstr "Úložiště nepodporuje změnu hesla, ale šifrovací klíč uživatelů byl úspěšně změněn."
 
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Změna hesla se nezdařila"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
diff --git a/l10n/cy_GB/core.po b/l10n/cy_GB/core.po
index fbafa1ed11..986f5a871a 100644
--- a/l10n/cy_GB/core.po
+++ b/l10n/cy_GB/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Welsh (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/cy_GB/)\n"
 "MIME-Version: 1.0\n"
@@ -191,11 +191,11 @@ msgstr "Rhagfyr"
 msgid "Settings"
 msgstr "Gosodiadau"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "eiliad yn ôl"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
@@ -203,7 +203,7 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
@@ -211,15 +211,15 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "heddiw"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "ddoe"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
@@ -227,11 +227,11 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "mis diwethaf"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
@@ -239,15 +239,15 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "misoedd yn ôl"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "y llynedd"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "blwyddyn yn ôl"
 
@@ -275,6 +275,48 @@ msgstr "Iawn"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/cy_GB/files.po b/l10n/cy_GB/files.po
index aa66788943..e2d27216bb 100644
--- a/l10n/cy_GB/files.po
+++ b/l10n/cy_GB/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Welsh (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/cy_GB/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr "Methwyd ysgrifennu i'r ddisg"
 msgid "Not enough storage available"
 msgstr "Dim digon o le storio ar gael"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Methwyd llwytho i fyny"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Cyfeiriadur annilys."
 
@@ -86,76 +90,80 @@ msgstr "Cyfeiriadur annilys."
 msgid "Files"
 msgstr "Ffeiliau"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Methu llwytho'ch ffeil i fyny gan ei fod yn gyferiadur neu'n cynnwys 0 beit"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Dim digon o le ar gael"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Diddymwyd llwytho i fyny."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Mae ffeiliau'n cael eu llwytho i fyny. Bydd gadael y dudalen hon nawr yn diddymu'r broses."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "Does dim hawl cael URL gwag."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Gwall"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Rhannu"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Dileu'n barhaol"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Ailenwi"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "I ddod"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} yn bodoli'n barod"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "amnewid"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "awgrymu enw"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "diddymu"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "newidiwyd {new_name} yn lle {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "dadwneud"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
@@ -163,7 +171,7 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
@@ -171,11 +179,11 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
@@ -183,53 +191,53 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "ffeiliau'n llwytho i fyny"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "Mae '.' yn enw ffeil annilys."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Does dim hawl cael enw ffeil gwag."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Enw annilys, ni chaniateir, '\\', '/', '<', '>', ':', '\"', '|', '?' na '*'."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Mae eich storfa'n llawn, ni ellir diweddaru a chydweddu ffeiliau mwyach!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Mae eich storfa bron a bod yn llawn ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Wrthi'n paratoi i lwytho i lawr. Gall gymryd peth amser os yw'r ffeiliau'n fawr."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Enw"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Maint"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Addaswyd"
 
@@ -238,7 +246,7 @@ msgstr "Addaswyd"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Llwytho i fyny"
 
@@ -274,65 +282,65 @@ msgstr "Maint mewnbynnu mwyaf ffeiliau ZIP"
 msgid "Save"
 msgstr "Cadw"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Newydd"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Ffeil destun"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Plygell"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Dolen o"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Ffeiliau ddilewyd"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Diddymu llwytho i fyny"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Nid oes gennych hawliau ysgrifennu fan hyn."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Does dim byd fan hyn. Llwythwch rhywbeth i fyny!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Llwytho i lawr"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Dad-rannu"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Dileu"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Maint llwytho i fyny'n rhy fawr"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Mae'r ffeiliau rydych yn ceisio llwytho i fyny'n fwy na maint mwyaf llwytho ffeiliau i fyny ar y gweinydd hwn."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Arhoswch, mae ffeiliau'n cael eu sganio."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Sganio cyfredol"
 
diff --git a/l10n/cy_GB/settings.po b/l10n/cy_GB/settings.po
index 93b67e8505..6a1d7704d0 100644
--- a/l10n/cy_GB/settings.po
+++ b/l10n/cy_GB/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Welsh (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/cy_GB/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/da/core.po b/l10n/da/core.po
index 534ae03e95..e1bdb36d52 100644
--- a/l10n/da/core.po
+++ b/l10n/da/core.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
 "MIME-Version: 1.0\n"
@@ -194,55 +194,55 @@ msgstr "December"
 msgid "Settings"
 msgstr "Indstillinger"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "sekunder siden"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "%n minut siden"
 msgstr[1] "%n minutter siden"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "%n time siden"
 msgstr[1] "%n timer siden"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "i dag"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "i går"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "%n dag siden"
 msgstr[1] "%n dage siden"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "sidste måned"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "%n måned siden"
 msgstr[1] "%n måneder siden"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "måneder siden"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "sidste år"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "år siden"
 
@@ -270,6 +270,46 @@ msgstr "OK"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/da/files.po b/l10n/da/files.po
index 81e48316be..b6cf95c8d9 100644
--- a/l10n/da/files.po
+++ b/l10n/da/files.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: Sappe\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -77,11 +77,15 @@ msgstr "Fejl ved skrivning til disk."
 msgid "Not enough storage available"
 msgstr "Der er ikke nok plads til rådlighed"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Upload fejlede"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Ugyldig mappe."
 
@@ -89,144 +93,148 @@ msgstr "Ugyldig mappe."
 msgid "Files"
 msgstr "Filer"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Kan ikke uploade din fil - det er enten en mappe eller en fil med et indhold på 0 bytes."
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "ikke nok tilgængelig ledig plads "
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Upload afbrudt."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URLen kan ikke være tom."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Ugyldigt mappenavn. Brug af 'Shared' er forbeholdt af ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Fejl"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Del"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Slet permanent"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Omdøb"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Afventer"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} eksisterer allerede"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "erstat"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "foreslå navn"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "fortryd"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "erstattede {new_name} med {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "fortryd"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n mappe"
 msgstr[1] "%n mapper"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n fil"
 msgstr[1] "%n filer"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} og {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Uploader %n fil"
 msgstr[1] "Uploader %n filer"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "uploader filer"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' er et ugyldigt filnavn."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Filnavnet kan ikke stå tomt."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Ugyldigt navn, '\\', '/', '<', '>', ':' | '?', '\"', '', og '*' er ikke tilladt."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Din opbevaringsplads er fyldt op, filer kan ikke opdateres eller synkroniseres længere!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Din opbevaringsplads er næsten fyldt op ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Krypteringen blev deaktiveret, men dine filer er stadig krypteret. Gå venligst til dine personlige indstillinger for at dekryptere dine filer. "
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Dit download forberedes. Dette kan tage lidt tid ved større filer."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Navn"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Størrelse"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Ændret"
 
@@ -235,7 +243,7 @@ msgstr "Ændret"
 msgid "%s could not be renamed"
 msgstr "%s kunne ikke omdøbes"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Upload"
 
@@ -271,65 +279,65 @@ msgstr "Maksimal størrelse på ZIP filer"
 msgid "Save"
 msgstr "Gem"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Ny"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Tekstfil"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Mappe"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Fra link"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Slettede filer"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Fortryd upload"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Du har ikke skriverettigheder her."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Her er tomt. Upload noget!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Download"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Fjern deling"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Slet"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Upload er for stor"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Filerne bliver indlæst, vent venligst."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Indlæser"
 
diff --git a/l10n/da/settings.po b/l10n/da/settings.po
index 44feb2e844..accacfac32 100644
--- a/l10n/da/settings.po
+++ b/l10n/da/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
 "MIME-Version: 1.0\n"
@@ -112,11 +112,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/de/core.po b/l10n/de/core.po
index 46627cf2e0..0f23d0cd3f 100644
--- a/l10n/de/core.po
+++ b/l10n/de/core.po
@@ -15,9 +15,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-17 13:05+0000\n"
-"Last-Translator: Mario Siegmann <mario_siegmann@web.de>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -198,55 +198,55 @@ msgstr "Dezember"
 msgid "Settings"
 msgstr "Einstellungen"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "Gerade eben"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "Vor %n Minute"
 msgstr[1] "Vor %n Minuten"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "Vor %n Stunde"
 msgstr[1] "Vor %n Stunden"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "Heute"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "Gestern"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "Vor %n Tag"
 msgstr[1] "Vor %n Tagen"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "Letzten Monat"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "Vor %n Monat"
 msgstr[1] "Vor %n Monaten"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "Vor Monaten"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "Letztes Jahr"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "Vor Jahren"
 
@@ -274,6 +274,46 @@ msgstr "OK"
 msgid "Error loading message template: {error}"
 msgstr "Fehler beim Laden der Nachrichtenvorlage: {error}"
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/de/files.po b/l10n/de/files.po
index 3e0c024b6c..0178601564 100644
--- a/l10n/de/files.po
+++ b/l10n/de/files.po
@@ -13,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: Mario Siegmann <mario_siegmann@web.de>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -80,11 +80,15 @@ msgstr "Fehler beim Schreiben auf die Festplatte"
 msgid "Not enough storage available"
 msgstr "Nicht genug Speicher vorhanden."
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Hochladen fehlgeschlagen"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Ungültiges Verzeichnis."
 
@@ -92,144 +96,148 @@ msgstr "Ungültiges Verzeichnis."
 msgid "Files"
 msgstr "Dateien"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Deine Datei kann nicht hochgeladen werden, weil es sich um einen Ordner handelt oder 0 Bytes groß ist."
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Nicht genug Speicherplatz verfügbar"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Upload abgebrochen."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "Die URL darf nicht leer sein."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Der Ordnername ist ungültig. Nur ownCloud kann den Ordner \"Shared\" anlegen"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Fehler"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Teilen"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Endgültig löschen"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Umbenennen"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Ausstehend"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} existiert bereits"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "ersetzen"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "Namen vorschlagen"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "abbrechen"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "{old_name} ersetzt durch {new_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "rückgängig machen"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n Ordner"
 msgstr[1] "%n Ordner"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n Datei"
 msgstr[1] "%n Dateien"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} und {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "%n Datei wird hochgeladen"
 msgstr[1] "%n Dateien werden hochgeladen"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "Dateien werden hoch geladen"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' ist kein gültiger Dateiname."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Der Dateiname darf nicht leer sein."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Dein Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Dein Speicher ist fast voll ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Die Verschlüsselung wurde deaktiviert, jedoch sind deine Dateien nach wie vor verschlüsselt. Bitte gehe zu deinen persönlichen Einstellungen, um deine Dateien zu entschlüsseln."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Dein Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Name"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Größe"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Geändert"
 
@@ -238,7 +246,7 @@ msgstr "Geändert"
 msgid "%s could not be renamed"
 msgstr "%s konnte nicht umbenannt werden"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Hochladen"
 
@@ -274,65 +282,65 @@ msgstr "Maximale Größe für ZIP-Dateien"
 msgid "Save"
 msgstr "Speichern"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Neu"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Textdatei"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Ordner"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Von einem Link"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Gelöschte Dateien"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Upload abbrechen"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Du hast hier keine Schreib-Berechtigung."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Alles leer. Lade etwas hoch!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Herunterladen"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Freigabe aufheben"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Löschen"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Der Upload ist zu groß"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Dateien werden gescannt, bitte warten."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Scanne"
 
diff --git a/l10n/de/settings.po b/l10n/de/settings.po
index 312f288f6d..4cf53d6658 100644
--- a/l10n/de/settings.po
+++ b/l10n/de/settings.po
@@ -12,8 +12,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
@@ -91,36 +91,32 @@ msgstr "Die App konnte nicht aktualisiert werden."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Falsches Passwort"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "Keinen Benutzer übermittelt"
 
 #: changepassword/controller.php:74
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Bitte gib ein Wiederherstellungspasswort für das Admin-Konto an, da sonst alle Benutzer Daten verloren gehen können"
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "Falsches Wiederherstellungspasswort für das Admin-Konto. Bitte überprüfe das Passwort und versuche es erneut."
 
 #: changepassword/controller.php:87
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
+msgstr "Das Back-End unterstützt die Passwortänderung nicht, aber der Benutzerschlüssel wurde erfolgreich aktualisiert."
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Passwort konnte nicht geändert werden"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
diff --git a/l10n/de_AT/core.po b/l10n/de_AT/core.po
index 6812c21bb5..0c8f3a25ae 100644
--- a/l10n/de_AT/core.po
+++ b/l10n/de_AT/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Austria) (http://www.transifex.com/projects/p/owncloud/language/de_AT/)\n"
 "MIME-Version: 1.0\n"
@@ -191,55 +191,55 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -267,6 +267,46 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/de_AT/files.po b/l10n/de_AT/files.po
index d3f9d2d421..7c47140c84 100644
--- a/l10n/de_AT/files.po
+++ b/l10n/de_AT/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:31-0400\n"
-"PO-Revision-Date: 2013-08-30 13:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Austria) (http://www.transifex.com/projects/p/owncloud/language/de_AT/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:275 js/file-upload.js:291 js/files.js:511 js/files.js:549
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:573
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:305
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:422 js/filelist.js:488 js/files.js:580
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:423 js/filelist.js:489 js/files.js:586
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:430
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:561
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:626
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:562 templates/index.php:67
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:563 templates/index.php:78
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:80
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -232,7 +240,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -268,65 +276,65 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:73
+#: templates/index.php:67
 msgid "Download"
 msgstr ""
 
-#: templates/index.php:85 templates/index.php:86
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:91 templates/index.php:92
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:105
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:107
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:112
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/de_AT/settings.po b/l10n/de_AT/settings.po
index d78892f164..c39c070ed5 100644
--- a/l10n/de_AT/settings.po
+++ b/l10n/de_AT/settings.po
@@ -3,12 +3,13 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# I Robot <owncloud-bot@tmit.eu>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Austria) (http://www.transifex.com/projects/p/owncloud/language/de_AT/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +110,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
@@ -216,7 +213,7 @@ msgstr ""
 
 #: personal.php:45 personal.php:46
 msgid "__language_name__"
-msgstr ""
+msgstr "Deutsch (Österreich)"
 
 #: templates/admin.php:15
 msgid "Security Warning"
diff --git a/l10n/de_CH/core.po b/l10n/de_CH/core.po
index 827bc1f7a6..cef773ced7 100644
--- a/l10n/de_CH/core.po
+++ b/l10n/de_CH/core.po
@@ -16,8 +16,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Switzerland) (http://www.transifex.com/projects/p/owncloud/language/de_CH/)\n"
 "MIME-Version: 1.0\n"
@@ -199,55 +199,55 @@ msgstr "Dezember"
 msgid "Settings"
 msgstr "Einstellungen"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "Gerade eben"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "Vor %n Minute"
 msgstr[1] "Vor %n Minuten"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "Vor %n Stunde"
 msgstr[1] "Vor %n Stunden"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "Heute"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "Gestern"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "Vor %n Tag"
 msgstr[1] "Vor %n Tagen"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "Letzten Monat"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "Vor %n Monat"
 msgstr[1] "Vor %n Monaten"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "Vor Monaten"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "Letztes Jahr"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "Vor Jahren"
 
@@ -275,6 +275,46 @@ msgstr "OK"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/de_CH/files.po b/l10n/de_CH/files.po
index bd65b087c3..0d4817bb29 100644
--- a/l10n/de_CH/files.po
+++ b/l10n/de_CH/files.po
@@ -16,8 +16,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Switzerland) (http://www.transifex.com/projects/p/owncloud/language/de_CH/)\n"
 "MIME-Version: 1.0\n"
@@ -83,11 +83,15 @@ msgstr "Fehler beim Schreiben auf die Festplatte"
 msgid "Not enough storage available"
 msgstr "Nicht genug Speicher vorhanden."
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Hochladen fehlgeschlagen"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Ungültiges Verzeichnis."
 
@@ -95,144 +99,148 @@ msgstr "Ungültiges Verzeichnis."
 msgid "Files"
 msgstr "Dateien"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Ihre Datei kann nicht hochgeladen werden, weil es sich um einen Ordner handelt oder 0 Bytes gross ist."
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Nicht genügend Speicherplatz verfügbar"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Upload abgebrochen."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "Die URL darf nicht leer sein."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Ungültiger Ordnername. Die Verwendung von «Shared» ist ownCloud vorbehalten."
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Fehler"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Teilen"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Endgültig löschen"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Umbenennen"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Ausstehend"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} existiert bereits"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "ersetzen"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "Namen vorschlagen"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "abbrechen"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "{old_name} wurde ersetzt durch {new_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "rückgängig machen"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] "%n Ordner"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] "%n Dateien"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "%n Datei wird hochgeladen"
 msgstr[1] "%n Dateien werden hochgeladen"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "Dateien werden hoch geladen"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' ist kein gültiger Dateiname."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Der Dateiname darf nicht leer sein."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Ungültiger Name, «\\», «/», «<», «>», «:», «\"», «|», «?» und «*» sind nicht zulässig."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Ihr Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Ihr Speicher ist fast voll ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Die Verschlüsselung wurde deaktiviert, jedoch sind Ihre Dateien nach wie vor verschlüsselt. Bitte gehen Sie zu Ihren persönlichen Einstellungen, um Ihre Dateien zu entschlüsseln."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Ihr Download wird vorbereitet. Dies kann bei grösseren Dateien etwas dauern."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Name"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Grösse"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Geändert"
 
@@ -241,7 +249,7 @@ msgstr "Geändert"
 msgid "%s could not be renamed"
 msgstr "%s konnte nicht umbenannt werden"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Hochladen"
 
@@ -277,65 +285,65 @@ msgstr "Maximale Grösse für ZIP-Dateien"
 msgid "Save"
 msgstr "Speichern"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Neu"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Textdatei"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Ordner"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Von einem Link"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Gelöschte Dateien"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Upload abbrechen"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Sie haben hier keine Schreib-Berechtigungen."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Alles leer. Laden Sie etwas hoch!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Herunterladen"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Freigabe aufheben"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Löschen"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Der Upload ist zu gross"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Die Datei überschreitet die Maximalgrösse für Uploads auf diesem Server."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Dateien werden gescannt, bitte warten."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Scanne"
 
diff --git a/l10n/de_CH/settings.po b/l10n/de_CH/settings.po
index d1623c88a2..745b7eec82 100644
--- a/l10n/de_CH/settings.po
+++ b/l10n/de_CH/settings.po
@@ -7,6 +7,7 @@
 # a.tangemann <a.tangemann@web.de>, 2013
 # FlorianScholz <work@bgstyle.de>, 2013
 # FlorianScholz <work@bgstyle.de>, 2013
+# I Robot <owncloud-bot@tmit.eu>, 2013
 # kabum <uu.kabum@gmail.com>, 2013
 # Mario Siegmann <mario_siegmann@web.de>, 2013
 # Mirodin <blobbyjj@ymail.com>, 2013
@@ -15,8 +16,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Switzerland) (http://www.transifex.com/projects/p/owncloud/language/de_CH/)\n"
 "MIME-Version: 1.0\n"
@@ -117,11 +118,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
@@ -224,7 +221,7 @@ msgstr "Es muss ein gültiges Passwort angegeben werden"
 
 #: personal.php:45 personal.php:46
 msgid "__language_name__"
-msgstr "Deutsch (Förmlich: Sie)"
+msgstr "Deutsch (Schweiz)"
 
 #: templates/admin.php:15
 msgid "Security Warning"
diff --git a/l10n/de_DE/core.po b/l10n/de_DE/core.po
index 522345b926..a9bc9abea0 100644
--- a/l10n/de_DE/core.po
+++ b/l10n/de_DE/core.po
@@ -15,9 +15,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-17 13:05+0000\n"
-"Last-Translator: Mario Siegmann <mario_siegmann@web.de>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Germany) <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -198,55 +198,55 @@ msgstr "Dezember"
 msgid "Settings"
 msgstr "Einstellungen"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "Gerade eben"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "Vor %n Minute"
 msgstr[1] "Vor %n Minuten"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "Vor %n Stunde"
 msgstr[1] "Vor %n Stunden"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "Heute"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "Gestern"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "Vor %n Tag"
 msgstr[1] "Vor %n Tagen"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "Letzten Monat"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "Vor %n Monat"
 msgstr[1] "Vor %n Monaten"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "Vor Monaten"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "Letztes Jahr"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "Vor Jahren"
 
@@ -274,6 +274,46 @@ msgstr "OK"
 msgid "Error loading message template: {error}"
 msgstr "Fehler beim Laden der Nachrichtenvorlage: {error}"
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/de_DE/files.po b/l10n/de_DE/files.po
index e236b674b7..9e4d2a2438 100644
--- a/l10n/de_DE/files.po
+++ b/l10n/de_DE/files.po
@@ -16,9 +16,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: Mario Siegmann <mario_siegmann@web.de>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Germany) <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -83,11 +83,15 @@ msgstr "Fehler beim Schreiben auf die Festplatte"
 msgid "Not enough storage available"
 msgstr "Nicht genug Speicher vorhanden."
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Hochladen fehlgeschlagen"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Ungültiges Verzeichnis."
 
@@ -95,144 +99,148 @@ msgstr "Ungültiges Verzeichnis."
 msgid "Files"
 msgstr "Dateien"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Ihre Datei kann nicht hochgeladen werden, weil es sich um einen Ordner handelt oder 0 Bytes groß ist."
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Nicht genügend Speicherplatz verfügbar"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Upload abgebrochen."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "Die URL darf nicht leer sein."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Ungültiger Ordnername. Die Verwendung von \"Shared\" ist ownCloud vorbehalten."
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Fehler"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Teilen"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Endgültig löschen"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Umbenennen"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Ausstehend"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} existiert bereits"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "ersetzen"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "Namen vorschlagen"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "abbrechen"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "{old_name} wurde ersetzt durch {new_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "rückgängig machen"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n Ordner"
 msgstr[1] "%n Ordner"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n Datei"
 msgstr[1] "%n Dateien"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} und {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "%n Datei wird hoch geladen"
 msgstr[1] "%n Dateien werden hoch geladen"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "Dateien werden hoch geladen"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' ist kein gültiger Dateiname."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Der Dateiname darf nicht leer sein."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Ihr Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Ihr Speicher ist fast voll ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Die Verschlüsselung wurde deaktiviert, jedoch sind Ihre Dateien nach wie vor verschlüsselt. Bitte gehen Sie zu Ihren persönlichen Einstellungen, um Ihre Dateien zu entschlüsseln."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Ihr Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Name"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Größe"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Geändert"
 
@@ -241,7 +249,7 @@ msgstr "Geändert"
 msgid "%s could not be renamed"
 msgstr "%s konnte nicht umbenannt werden"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Hochladen"
 
@@ -277,65 +285,65 @@ msgstr "Maximale Größe für ZIP-Dateien"
 msgid "Save"
 msgstr "Speichern"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Neu"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Textdatei"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Ordner"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Von einem Link"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Gelöschte Dateien"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Upload abbrechen"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Sie haben hier keine Schreib-Berechtigungen."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Alles leer. Laden Sie etwas hoch!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Herunterladen"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Freigabe aufheben"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Löschen"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Der Upload ist zu groß"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Dateien werden gescannt, bitte warten."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Scanne"
 
diff --git a/l10n/de_DE/settings.po b/l10n/de_DE/settings.po
index bbcb8220fa..3a889bcbca 100644
--- a/l10n/de_DE/settings.po
+++ b/l10n/de_DE/settings.po
@@ -14,8 +14,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Germany) <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
@@ -93,36 +93,32 @@ msgstr "Die App konnte nicht aktualisiert werden."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Falsches Passwort"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "Keinen Benutzer übermittelt"
 
 #: changepassword/controller.php:74
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Bitte geben Sie ein Wiederherstellungspasswort für das Admin-Konto an, da sonst alle Benutzer Daten verloren gehen können"
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "Falsches Wiederherstellungspasswort für das Admin-Konto. Bitte überprüfen Sie das Passwort und versuchen Sie es erneut."
 
 #: changepassword/controller.php:87
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
-
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
+msgstr "Das Back-End unterstützt die Passwortänderung nicht, aber der Benutzerschlüssel wurde erfolgreich aktualisiert."
 
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Passwort konnte nicht geändert werden"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
diff --git a/l10n/el/core.po b/l10n/el/core.po
index f9d610d203..c045d09efe 100644
--- a/l10n/el/core.po
+++ b/l10n/el/core.po
@@ -14,8 +14,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
 "MIME-Version: 1.0\n"
@@ -197,55 +197,55 @@ msgstr "Δεκέμβριος"
 msgid "Settings"
 msgstr "Ρυθμίσεις"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "δευτερόλεπτα πριν"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "σήμερα"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "χτες"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "τελευταίο μήνα"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "μήνες πριν"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "τελευταίο χρόνο"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "χρόνια πριν"
 
@@ -273,6 +273,46 @@ msgstr "Οκ"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/el/files.po b/l10n/el/files.po
index 24da73a436..f6b7bcf82a 100644
--- a/l10n/el/files.po
+++ b/l10n/el/files.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
 "MIME-Version: 1.0\n"
@@ -77,11 +77,15 @@ msgstr "Αποτυχία εγγραφής στο δίσκο"
 msgid "Not enough storage available"
 msgstr "Μη επαρκής διαθέσιμος αποθηκευτικός χώρος"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Η μεταφόρτωση απέτυχε"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Μη έγκυρος φάκελος."
 
@@ -89,144 +93,148 @@ msgstr "Μη έγκυρος φάκελος."
 msgid "Files"
 msgstr "Αρχεία"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Αδυναμία στην αποστολή του αρχείου σας αφού είναι φάκελος ή έχει 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Δεν υπάρχει αρκετός διαθέσιμος χώρος"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Η αποστολή ακυρώθηκε."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "Η URL δεν μπορεί να είναι κενή."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Μη έγκυρο όνομα φακέλου. Η χρήση του 'Κοινόχρηστος' χρησιμοποιείται από το ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Σφάλμα"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Διαμοιρασμός"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Μόνιμη διαγραφή"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Μετονομασία"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Εκκρεμεί"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} υπάρχει ήδη"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "αντικατέστησε"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "συνιστώμενο όνομα"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "ακύρωση"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "αντικαταστάθηκε το {new_name} με {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "αναίρεση"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n φάκελος"
 msgstr[1] "%n φάκελοι"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n αρχείο"
 msgstr[1] "%n αρχεία"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Ανέβασμα %n αρχείου"
 msgstr[1] "Ανέβασμα %n αρχείων"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "αρχεία ανεβαίνουν"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' είναι μη έγκυρο όνομα αρχείου."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Το όνομα αρχείου δεν μπορεί να είναι κενό."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Μη έγκυρο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' και '*' δεν επιτρέπονται."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Ο αποθηκευτικός σας χώρος είναι γεμάτος, τα αρχεία δεν μπορούν να ενημερωθούν ή να συγχρονιστούν πια!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Ο αποθηκευτικός χώρος είναι σχεδόν γεμάτος ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Η κρυπτογράφηση απενεργοποιήθηκε, αλλά τα αρχεία σας είναι ακόμα κρυπτογραφημένα. Παρακαλούμε απενεργοποιήσετε την κρυπτογράφηση αρχείων από τις προσωπικές σας ρυθμίσεις"
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Η λήψη προετοιμάζεται. Αυτό μπορεί να πάρει ώρα εάν τα αρχεία έχουν μεγάλο μέγεθος."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Όνομα"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Μέγεθος"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Τροποποιήθηκε"
 
@@ -235,7 +243,7 @@ msgstr "Τροποποιήθηκε"
 msgid "%s could not be renamed"
 msgstr "Αδυναμία μετονομασίας του %s"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Μεταφόρτωση"
 
@@ -271,65 +279,65 @@ msgstr "Μέγιστο μέγεθος για αρχεία ZIP"
 msgid "Save"
 msgstr "Αποθήκευση"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Νέο"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Αρχείο κειμένου"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Φάκελος"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Από σύνδεσμο"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Διαγραμμένα αρχεία"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Ακύρωση αποστολής"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Δεν έχετε δικαιώματα εγγραφής εδώ."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Δεν υπάρχει τίποτα εδώ. Ανεβάστε κάτι!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Λήψη"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Σταμάτημα διαμοιρασμού"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Διαγραφή"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Πολύ μεγάλο αρχείο προς αποστολή"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Τα αρχεία που προσπαθείτε να ανεβάσετε υπερβαίνουν το μέγιστο μέγεθος αποστολής αρχείων σε αυτόν τον διακομιστή."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Τα αρχεία σαρώνονται, παρακαλώ περιμένετε."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Τρέχουσα ανίχνευση"
 
diff --git a/l10n/el/settings.po b/l10n/el/settings.po
index 7b975e813e..1e84a673d3 100644
--- a/l10n/el/settings.po
+++ b/l10n/el/settings.po
@@ -13,8 +13,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
 "MIME-Version: 1.0\n"
@@ -115,11 +115,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/en@pirate/core.po b/l10n/en@pirate/core.po
index 14e0eb573c..8f786dfe21 100644
--- a/l10n/en@pirate/core.po
+++ b/l10n/en@pirate/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Pirate English (http://www.transifex.com/projects/p/owncloud/language/en@pirate/)\n"
 "MIME-Version: 1.0\n"
@@ -191,55 +191,55 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -267,6 +267,46 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/en@pirate/files.po b/l10n/en@pirate/files.po
index 5874adaf38..ea57ff8382 100644
--- a/l10n/en@pirate/files.po
+++ b/l10n/en@pirate/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:31-0400\n"
-"PO-Revision-Date: 2013-08-30 13:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Pirate English (http://www.transifex.com/projects/p/owncloud/language/en@pirate/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:275 js/file-upload.js:291 js/files.js:511 js/files.js:549
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:573
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:305
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:422 js/filelist.js:488 js/files.js:580
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:423 js/filelist.js:489 js/files.js:586
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:430
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:561
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:626
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:562 templates/index.php:67
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:563 templates/index.php:78
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:80
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -232,7 +240,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -268,65 +276,65 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:73
+#: templates/index.php:67
 msgid "Download"
 msgstr "Download"
 
-#: templates/index.php:85 templates/index.php:86
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:91 templates/index.php:92
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:105
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:107
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:112
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/en@pirate/settings.po b/l10n/en@pirate/settings.po
index 34070d5228..df5539ce0c 100644
--- a/l10n/en@pirate/settings.po
+++ b/l10n/en@pirate/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Pirate English (http://www.transifex.com/projects/p/owncloud/language/en@pirate/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/en_GB/core.po b/l10n/en_GB/core.po
index e6d3d65737..7e5c1ed079 100644
--- a/l10n/en_GB/core.po
+++ b/l10n/en_GB/core.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 13:30+0000\n"
-"Last-Translator: mnestis <transifex@mnestis.net>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -191,55 +191,55 @@ msgstr "December"
 msgid "Settings"
 msgstr "Settings"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "seconds ago"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "%n minute ago"
 msgstr[1] "%n minutes ago"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "%n hour ago"
 msgstr[1] "%n hours ago"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "today"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "yesterday"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "%n day ago"
 msgstr[1] "%n days ago"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "last month"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "%n month ago"
 msgstr[1] "%n months ago"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "months ago"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "last year"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "years ago"
 
@@ -267,6 +267,46 @@ msgstr "OK"
 msgid "Error loading message template: {error}"
 msgstr "Error loading message template: {error}"
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
@@ -449,7 +489,7 @@ msgstr "Request failed!<br>Did you make sure your email/username was correct?"
 
 #: lostpassword/templates/lostpassword.php:15
 msgid "You will receive a link to reset your password via Email."
-msgstr "You will receive a link to reset your password via Email."
+msgstr "You will receive a link to reset your password via email."
 
 #: lostpassword/templates/lostpassword.php:18 templates/installation.php:51
 #: templates/login.php:19
diff --git a/l10n/en_GB/files.po b/l10n/en_GB/files.po
index ee07f5bbe4..fe7922ffe9 100644
--- a/l10n/en_GB/files.po
+++ b/l10n/en_GB/files.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: mnestis <transifex@mnestis.net>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -75,11 +75,15 @@ msgstr "Failed to write to disk"
 msgid "Not enough storage available"
 msgstr "Not enough storage available"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Invalid directory."
 
@@ -87,144 +91,148 @@ msgstr "Invalid directory."
 msgid "Files"
 msgstr "Files"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Not enough space available"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Upload cancelled."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "File upload is in progress. Leaving the page now will cancel the upload."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL cannot be empty."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Error"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Share"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Delete permanently"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Rename"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Pending"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} already exists"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "replace"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "suggest name"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "cancel"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "replaced {new_name} with {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "undo"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n folder"
 msgstr[1] "%n folders"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n file"
 msgstr[1] "%n files"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} and {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Uploading %n file"
 msgstr[1] "Uploading %n files"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "files uploading"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' is an invalid file name."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "File name cannot be empty."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Your storage is full, files can not be updated or synced anymore!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Your storage is almost full ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Your download is being prepared. This might take some time if the files are big."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Name"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Size"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Modified"
 
@@ -233,7 +241,7 @@ msgstr "Modified"
 msgid "%s could not be renamed"
 msgstr "%s could not be renamed"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Upload"
 
@@ -269,65 +277,65 @@ msgstr "Maximum input size for ZIP files"
 msgid "Save"
 msgstr "Save"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "New"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Text file"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Folder"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "From link"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Deleted files"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Cancel upload"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "You don’t have write permission here."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Nothing in here. Upload something!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Download"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Unshare"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Delete"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Upload too large"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "The files you are trying to upload exceed the maximum size for file uploads on this server."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Files are being scanned, please wait."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Current scanning"
 
diff --git a/l10n/en_GB/files_external.po b/l10n/en_GB/files_external.po
index fc51da0a01..6190c95852 100644
--- a/l10n/en_GB/files_external.po
+++ b/l10n/en_GB/files_external.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:32-0400\n"
-"PO-Revision-Date: 2013-08-29 17:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-18 16:45+0000\n"
 "Last-Translator: mnestis <transifex@mnestis.net>\n"
 "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
 "MIME-Version: 1.0\n"
diff --git a/l10n/en_GB/files_sharing.po b/l10n/en_GB/files_sharing.po
index 99cac4331f..a0f4b32037 100644
--- a/l10n/en_GB/files_sharing.po
+++ b/l10n/en_GB/files_sharing.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:01+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-18 16:46+0000\n"
 "Last-Translator: mnestis <transifex@mnestis.net>\n"
 "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
 "MIME-Version: 1.0\n"
diff --git a/l10n/en_GB/files_trashbin.po b/l10n/en_GB/files_trashbin.po
index ae821adafa..6b87c1ddd4 100644
--- a/l10n/en_GB/files_trashbin.po
+++ b/l10n/en_GB/files_trashbin.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:32-0400\n"
-"PO-Revision-Date: 2013-08-29 17:10+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-18 16:48+0000\n"
 "Last-Translator: mnestis <transifex@mnestis.net>\n"
 "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
 "MIME-Version: 1.0\n"
@@ -44,24 +44,24 @@ msgstr "delete file permanently"
 msgid "Delete permanently"
 msgstr "Delete permanently"
 
-#: js/trash.js:184 templates/index.php:17
+#: js/trash.js:190 templates/index.php:21
 msgid "Name"
 msgstr "Name"
 
-#: js/trash.js:185 templates/index.php:27
+#: js/trash.js:191 templates/index.php:31
 msgid "Deleted"
 msgstr "Deleted"
 
-#: js/trash.js:193
+#: js/trash.js:199
 msgid "%n folder"
 msgid_plural "%n folders"
-msgstr[0] ""
+msgstr[0] "%n folder"
 msgstr[1] "%n folders"
 
-#: js/trash.js:199
+#: js/trash.js:205
 msgid "%n file"
 msgid_plural "%n files"
-msgstr[0] ""
+msgstr[0] "%n file"
 msgstr[1] "%n files"
 
 #: lib/trash.php:814 lib/trash.php:816
@@ -72,11 +72,11 @@ msgstr "restored"
 msgid "Nothing in here. Your trash bin is empty!"
 msgstr "Nothing in here. Your recycle bin is empty!"
 
-#: templates/index.php:20 templates/index.php:22
+#: templates/index.php:24 templates/index.php:26
 msgid "Restore"
 msgstr "Restore"
 
-#: templates/index.php:30 templates/index.php:31
+#: templates/index.php:34 templates/index.php:35
 msgid "Delete"
 msgstr "Delete"
 
diff --git a/l10n/en_GB/files_versions.po b/l10n/en_GB/files_versions.po
index e727185fa7..cc791b517d 100644
--- a/l10n/en_GB/files_versions.po
+++ b/l10n/en_GB/files_versions.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:32-0400\n"
-"PO-Revision-Date: 2013-08-29 17:10+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-18 16:49+0000\n"
 "Last-Translator: mnestis <transifex@mnestis.net>\n"
 "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
 "MIME-Version: 1.0\n"
diff --git a/l10n/en_GB/settings.po b/l10n/en_GB/settings.po
index 27be15c752..bcc1f4f64a 100644
--- a/l10n/en_GB/settings.po
+++ b/l10n/en_GB/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
 "MIME-Version: 1.0\n"
@@ -87,36 +87,32 @@ msgstr "Couldn't update app."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Incorrect password"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "No user supplied"
 
 #: changepassword/controller.php:74
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Please provide an admin recovery password, otherwise all user data will be lost"
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "Incorrect admin recovery password. Please check the password and try again."
 
 #: changepassword/controller.php:87
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
-
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
+msgstr "Back-end doesn't support password change, but the user's encryption key was successfully updated."
 
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Unable to change password"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
@@ -255,7 +251,7 @@ msgstr "Module 'fileinfo' missing"
 msgid ""
 "The PHP module 'fileinfo' is missing. We strongly recommend to enable this "
 "module to get best results with mime-type detection."
-msgstr "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection."
+msgstr "The PHP module 'fileinfo' is missing. We strongly recommend enabling this module to get best results with mime-type detection."
 
 #: templates/admin.php:58
 msgid "Locale not working"
@@ -393,7 +389,7 @@ msgid ""
 "licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" "
 "target=\"_blank\"><abbr title=\"Affero General Public "
 "License\">AGPL</abbr></a>."
-msgstr "Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>."
+msgstr "Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public Licence\">AGPL</abbr></a>."
 
 #: templates/apps.php:13
 msgid "Add your App"
diff --git a/l10n/en_GB/user_webdavauth.po b/l10n/en_GB/user_webdavauth.po
index 210787a40f..7688c63036 100644
--- a/l10n/en_GB/user_webdavauth.po
+++ b/l10n/en_GB/user_webdavauth.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:32-0400\n"
-"PO-Revision-Date: 2013-08-29 16:40+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-18 16:43+0000\n"
 "Last-Translator: mnestis <transifex@mnestis.net>\n"
 "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
 "MIME-Version: 1.0\n"
diff --git a/l10n/eo/core.po b/l10n/eo/core.po
index b3f65dc4fb..8c3e043383 100644
--- a/l10n/eo/core.po
+++ b/l10n/eo/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
 "MIME-Version: 1.0\n"
@@ -192,55 +192,55 @@ msgstr "Decembro"
 msgid "Settings"
 msgstr "Agordo"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "sekundoj antaŭe"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "hodiaŭ"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "hieraŭ"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "lastamonate"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "monatoj antaŭe"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "lastajare"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "jaroj antaŭe"
 
@@ -268,6 +268,46 @@ msgstr "Akcepti"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/eo/files.po b/l10n/eo/files.po
index 7458946888..0f9a143e22 100644
--- a/l10n/eo/files.po
+++ b/l10n/eo/files.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
 "MIME-Version: 1.0\n"
@@ -75,11 +75,15 @@ msgstr "Malsukcesis skribo al disko"
 msgid "Not enough storage available"
 msgstr "Ne haveblas sufiĉa memoro"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Alŝuto malsukcesis"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Nevalida dosierujo."
 
@@ -87,144 +91,148 @@ msgstr "Nevalida dosierujo."
 msgid "Files"
 msgstr "Dosieroj"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Ne eblis alŝuti vian dosieron ĉar ĝi estas dosierujo aŭ havas 0 duumokojn"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Ne haveblas sufiĉa spaco"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "La alŝuto nuliĝis."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Dosieralŝuto plenumiĝas. Lasi la paĝon nun nuligus la alŝuton."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL ne povas esti malplena."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Nevalida dosierujnomo. La uzo de “Shared” estas rezervita de ownCloud."
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Eraro"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Kunhavigi"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Forigi por ĉiam"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Alinomigi"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Traktotaj"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} jam ekzistas"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "anstataŭigi"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "sugesti nomon"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "nuligi"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "anstataŭiĝis {new_name} per {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "malfari"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "dosieroj estas alŝutataj"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' ne estas valida dosiernomo."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Dosiernomo devas ne malpleni."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Nevalida nomo: “\\”, “/”, “<”, “>”, “:”, “\"”, “|”, “?” kaj “*” ne permesatas."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Via memoro plenas, ne plu eblas ĝisdatigi aŭ sinkronigi dosierojn!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Via memoro preskaŭ plenas ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Via elŝuto pretiĝatas. Ĉi tio povas daŭri iom da tempo se la dosieroj grandas."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nomo"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Grando"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Modifita"
 
@@ -233,7 +241,7 @@ msgstr "Modifita"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Alŝuti"
 
@@ -269,65 +277,65 @@ msgstr "Maksimuma enirgrando por ZIP-dosieroj"
 msgid "Save"
 msgstr "Konservi"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Nova"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Tekstodosiero"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Dosierujo"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "El ligilo"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Forigitaj dosieroj"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Nuligi alŝuton"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Vi ne havas permeson skribi ĉi tie."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Nenio estas ĉi tie. Alŝutu ion!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Elŝuti"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Malkunhavigi"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Forigi"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Alŝuto tro larĝa"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por dosieralŝutoj en ĉi tiu servilo."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Dosieroj estas skanataj, bonvolu atendi."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Nuna skano"
 
diff --git a/l10n/eo/settings.po b/l10n/eo/settings.po
index f773f8e97a..d049887b7b 100644
--- a/l10n/eo/settings.po
+++ b/l10n/eo/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/es/core.po b/l10n/es/core.po
index 8b73e83c20..1e83ffd668 100644
--- a/l10n/es/core.po
+++ b/l10n/es/core.po
@@ -17,8 +17,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
 "MIME-Version: 1.0\n"
@@ -200,55 +200,55 @@ msgstr "Diciembre"
 msgid "Settings"
 msgstr "Ajustes"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "segundos antes"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "Hace %n minuto"
 msgstr[1] "Hace %n minutos"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "Hace %n hora"
 msgstr[1] "Hace %n horas"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "hoy"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "ayer"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "Hace %n día"
 msgstr[1] "Hace %n días"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "el mes pasado"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "Hace %n mes"
 msgstr[1] "Hace %n meses"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "meses antes"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "el año pasado"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "años antes"
 
@@ -276,6 +276,46 @@ msgstr "Aceptar"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/es/files.po b/l10n/es/files.po
index e68841cb87..a4058e8958 100644
--- a/l10n/es/files.po
+++ b/l10n/es/files.po
@@ -13,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-13 23:50+0000\n"
-"Last-Translator: Korrosivo <yo@rubendelcampo.es>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -80,11 +80,15 @@ msgstr "Falló al escribir al disco"
 msgid "Not enough storage available"
 msgstr "No hay suficiente espacio disponible"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Error en la subida"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Directorio inválido."
 
@@ -92,144 +96,148 @@ msgstr "Directorio inválido."
 msgid "Files"
 msgstr "Archivos"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Incapaz de subir su archivo, es un directorio o tiene 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "No hay suficiente espacio disponible"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Subida cancelada."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "La subida del archivo está en proceso. Si sale de la página ahora cancelará la subida."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "La URL no puede estar vacía."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Nombre de carpeta invalido. El uso de \"Shared\" está reservado por ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Error"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Compartir"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Eliminar permanentemente"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Renombrar"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Pendiente"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} ya existe"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "reemplazar"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "sugerir nombre"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "cancelar"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "reemplazado {new_name} con {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "deshacer"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] "%n carpetas"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] "%n archivos"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} y {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Subiendo %n archivo"
 msgstr[1] "Subiendo %n archivos"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "subiendo archivos"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' no es un nombre de archivo válido."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "El nombre de archivo no puede estar vacío."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Nombre Invalido, \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" no están permitidos "
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Su almacenamiento está lleno, ¡no se pueden actualizar o sincronizar más!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Su almacenamiento está casi lleno ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "El cifrado ha sido deshabilitado pero tus archivos permanecen cifrados. Por favor, ve a tus ajustes personales para descifrar tus archivos."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Su descarga está siendo preparada. Esto puede tardar algún tiempo si los archivos son grandes."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nombre"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Tamaño"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Modificado"
 
@@ -238,7 +246,7 @@ msgstr "Modificado"
 msgid "%s could not be renamed"
 msgstr "%s no se pudo renombrar"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Subir"
 
@@ -274,65 +282,65 @@ msgstr "Tamaño máximo para archivos ZIP de entrada"
 msgid "Save"
 msgstr "Guardar"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Nuevo"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Archivo de texto"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Carpeta"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Desde enlace"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Archivos eliminados"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Cancelar subida"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "No tiene permisos de escritura aquí."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "No hay nada aquí. ¡Suba algo!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Descargar"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Dejar de compartir"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Eliminar"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Subida demasido grande"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido en este servidor."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Los archivos están siendo escaneados,  por favor espere."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Escaneo actual"
 
diff --git a/l10n/es/settings.po b/l10n/es/settings.po
index e93338b73e..f11743ea95 100644
--- a/l10n/es/settings.po
+++ b/l10n/es/settings.po
@@ -4,6 +4,7 @@
 # 
 # Translators:
 # Art O. Pal <artopal@fastmail.fm>, 2013
+# asaez <asaez@asaez.eu>, 2013
 # eadeprado <eadeprado@outlook.com>, 2013
 # ggam <ggam@brainleakage.com>, 2013
 # pablomillaquen <pablomillaquen@gmail.com>, 2013
@@ -15,8 +16,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
 "MIME-Version: 1.0\n"
@@ -104,12 +105,12 @@ msgstr ""
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Por favor facilite una contraseña  de recuperación de administrador, sino se perderán todos los datos de usuario"
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "Contraseña de recuperación de administrador incorrecta. Por favor compruebe la contraseña e inténtelo de nuevo."
 
 #: changepassword/controller.php:87
 msgid ""
@@ -117,13 +118,9 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "No se ha podido cambiar la contraseña"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
@@ -171,7 +168,7 @@ msgstr "Actualizado"
 
 #: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Seleccionar una imagen de perfil"
 
 #: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
@@ -505,15 +502,15 @@ msgstr "Foto del perfil"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Subir nuevo"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Seleccionar nuevo desde Ficheros"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Borrar imagen"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
@@ -525,7 +522,7 @@ msgstr "Abortar"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Seleccionar como imagen de perfil"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/es_AR/core.po b/l10n/es_AR/core.po
index 570b13d5cc..dd3a48b0d1 100644
--- a/l10n/es_AR/core.po
+++ b/l10n/es_AR/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
 "MIME-Version: 1.0\n"
@@ -191,55 +191,55 @@ msgstr "diciembre"
 msgid "Settings"
 msgstr "Configuración"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "segundos atrás"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "Hace %n minuto"
 msgstr[1] "Hace %n minutos"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "Hace %n hora"
 msgstr[1] "Hace %n horas"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "hoy"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "ayer"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "Hace %n día"
 msgstr[1] "Hace %n días"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "el mes pasado"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "Hace %n mes"
 msgstr[1] "Hace %n meses"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "meses atrás"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "el año pasado"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "años atrás"
 
@@ -267,6 +267,46 @@ msgstr "Aceptar"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/es_AR/files.po b/l10n/es_AR/files.po
index 68680594d1..f502ba7168 100644
--- a/l10n/es_AR/files.po
+++ b/l10n/es_AR/files.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: cnngimenez\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -78,11 +78,15 @@ msgstr "Error al escribir en el disco"
 msgid "Not enough storage available"
 msgstr "No hay suficiente almacenamiento"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Error al subir el archivo"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Directorio inválido."
 
@@ -90,144 +94,148 @@ msgstr "Directorio inválido."
 msgid "Files"
 msgstr "Archivos"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "No fue posible subir el archivo porque es un directorio o porque su tamaño es 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "No hay suficiente espacio disponible"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "La subida fue cancelada"
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "La subida del archivo está en proceso. Si salís de la página ahora, la subida se cancelará."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "La URL no puede estar vacía"
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Nombre de directorio inválido. El uso de \"Shared\" está reservado por ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Error"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Compartir"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Borrar permanentemente"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Cambiar nombre"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Pendientes"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} ya existe"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "reemplazar"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "sugerir nombre"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "cancelar"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "se reemplazó {new_name} con {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "deshacer"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n carpeta"
 msgstr[1] "%n carpetas"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n archivo"
 msgstr[1] "%n archivos"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{carpetas} y {archivos}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Subiendo %n archivo"
 msgstr[1] "Subiendo %n archivos"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "Subiendo archivos"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' es un nombre de archivo inválido."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "El nombre del archivo no puede quedar vacío."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Nombre invalido, '\\', '/', '<', '>', ':', '\"', '|', '?' y '*' no están permitidos."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "El almacenamiento está lleno, los archivos no se pueden seguir actualizando ni sincronizando"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "El almacenamiento está casi lleno ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "El proceso de cifrado se ha desactivado, pero los archivos aún están encriptados. Por favor, vaya a la configuración personal para descifrar los archivos."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Tu descarga se está preparando. Esto puede demorar si los archivos son muy grandes."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nombre"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Tamaño"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Modificado"
 
@@ -236,7 +244,7 @@ msgstr "Modificado"
 msgid "%s could not be renamed"
 msgstr "No se pudo renombrar %s"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Subir"
 
@@ -272,65 +280,65 @@ msgstr "Tamaño máximo para archivos ZIP de entrada"
 msgid "Save"
 msgstr "Guardar"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Nuevo"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Archivo de texto"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Carpeta"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Desde enlace"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Archivos borrados"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Cancelar subida"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "No tenés permisos de escritura acá."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "No hay nada. ¡Subí contenido!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Descargar"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Dejar de compartir"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Borrar"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "El tamaño del archivo que querés subir es demasiado grande"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Los archivos que intentás subir sobrepasan el tamaño máximo "
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Se están escaneando los archivos, por favor esperá."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Escaneo actual"
 
diff --git a/l10n/es_AR/settings.po b/l10n/es_AR/settings.po
index 512b5a949f..faf86eb460 100644
--- a/l10n/es_AR/settings.po
+++ b/l10n/es_AR/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
 "MIME-Version: 1.0\n"
@@ -112,11 +112,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/es_MX/core.po b/l10n/es_MX/core.po
index 9a6e9cbb09..d351beb1b7 100644
--- a/l10n/es_MX/core.po
+++ b/l10n/es_MX/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (Mexico) (http://www.transifex.com/projects/p/owncloud/language/es_MX/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -266,6 +266,46 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/es_MX/files.po b/l10n/es_MX/files.po
index 0e1dc47804..7405f7a77b 100644
--- a/l10n/es_MX/files.po
+++ b/l10n/es_MX/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-07 04:39-0400\n"
-"PO-Revision-Date: 2013-09-07 07:27+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (Mexico) (http://www.transifex.com/projects/p/owncloud/language/es_MX/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -232,7 +240,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -268,65 +276,65 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr ""
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/es_MX/settings.po b/l10n/es_MX/settings.po
index c0dcfcc0d5..7b7e92dc23 100644
--- a/l10n/es_MX/settings.po
+++ b/l10n/es_MX/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (Mexico) (http://www.transifex.com/projects/p/owncloud/language/es_MX/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/et_EE/core.po b/l10n/et_EE/core.po
index eb1f23ddad..b94690c975 100644
--- a/l10n/et_EE/core.po
+++ b/l10n/et_EE/core.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 08:20+0000\n"
-"Last-Translator: pisike.sipelgas <pisike.sipelgas@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -192,55 +192,55 @@ msgstr "Detsember"
 msgid "Settings"
 msgstr "Seaded"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "sekundit tagasi"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "%n minut tagasi"
 msgstr[1] "%n minutit tagasi"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "%n tund tagasi"
 msgstr[1] "%n tundi tagasi"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "täna"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "eile"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "%n päev tagasi"
 msgstr[1] "%n päeva tagasi"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "viimasel kuul"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "%n kuu tagasi"
 msgstr[1] "%n kuud tagasi"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "kuu tagasi"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "viimasel aastal"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "aastat tagasi"
 
@@ -268,6 +268,46 @@ msgstr "Ok"
 msgid "Error loading message template: {error}"
 msgstr "Viga sõnumi malli laadimisel:  {error}"
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/et_EE/files.po b/l10n/et_EE/files.po
index 943c2186c0..52bcf2de8f 100644
--- a/l10n/et_EE/files.po
+++ b/l10n/et_EE/files.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: pisike.sipelgas <pisike.sipelgas@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -76,11 +76,15 @@ msgstr "Kettale kirjutamine ebaõnnestus"
 msgid "Not enough storage available"
 msgstr "Saadaval pole piisavalt ruumi"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Üleslaadimine ebaõnnestus"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Vigane kaust."
 
@@ -88,144 +92,148 @@ msgstr "Vigane kaust."
 msgid "Files"
 msgstr "Failid"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Faili ei saa üles laadida, kuna see on kaust või selle suurus on 0 baiti"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Pole piisavalt ruumi"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Üleslaadimine tühistati."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL ei saa olla tühi."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Vigane kausta nimi. 'Shared' kasutamine on reserveeritud ownCloud poolt."
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Viga"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Jaga"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Kustuta jäädavalt"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Nimeta ümber"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Ootel"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} on juba olemas"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "asenda"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "soovita nime"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "loobu"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "asendas nime {old_name} nimega {new_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "tagasi"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n kataloog"
 msgstr[1] "%n kataloogi"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n fail"
 msgstr[1] "%n faili"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} ja {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Laadin üles %n faili"
 msgstr[1] "Laadin üles %n faili"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "faili üleslaadimisel"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' on vigane failinimi."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Faili nimi ei saa olla tühi."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Vigane nimi, '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' pole lubatud."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Sinu andmemaht on täis! Faile ei uuendata ega sünkroniseerita!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Su andmemaht on peaaegu täis ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Krüpteering on keelatud, kuid sinu failid on endiselt krüpteeritud. Palun vaata oma personaalseid seadeid oma failide dekrüpteerimiseks."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Valmistatakse allalaadimist. See võib võtta veidi aega, kui on tegu suurte failidega. "
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nimi"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Suurus"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Muudetud"
 
@@ -234,7 +242,7 @@ msgstr "Muudetud"
 msgid "%s could not be renamed"
 msgstr "%s ümbernimetamine ebaõnnestus"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Lae üles"
 
@@ -270,65 +278,65 @@ msgstr "Maksimaalne ZIP-faili sisestatava faili suurus"
 msgid "Save"
 msgstr "Salvesta"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Uus"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Tekstifail"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Kaust"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Allikast"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Kustutatud failid"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Tühista üleslaadimine"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Siin puudvad sul kirjutamisõigused."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Siin pole midagi. Lae midagi üles!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Lae alla"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Lõpeta jagamine"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Kustuta"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Üleslaadimine on liiga suur"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Failid, mida sa proovid üles laadida, ületab serveri poolt üleslaetavatele failidele määratud maksimaalse suuruse."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Faile skannitakse, palun oota."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Praegune skannimine"
 
diff --git a/l10n/et_EE/settings.po b/l10n/et_EE/settings.po
index fce1cc2fbc..72d666a7d0 100644
--- a/l10n/et_EE/settings.po
+++ b/l10n/et_EE/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
 "MIME-Version: 1.0\n"
@@ -88,36 +88,32 @@ msgstr "Rakenduse uuendamine ebaõnnestus."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Vale parool"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "Kasutajat ei sisestatud"
 
 #: changepassword/controller.php:74
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Palun sisesta administraatori taasteparool, muidu kaotad kõik kasutajate andmed"
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "Vale administraatori taasteparool. Palun kontrolli parooli ning proovi uuesti."
 
 #: changepassword/controller.php:87
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
-
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
+msgstr "Tagarakend ei toeta parooli vahetust, kuid kasutaja krüptimisvõti uuendati edukalt."
 
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Ei suuda parooli muuta"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
diff --git a/l10n/eu/core.po b/l10n/eu/core.po
index 6c943bef9e..ccac1c7de4 100644
--- a/l10n/eu/core.po
+++ b/l10n/eu/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
 "MIME-Version: 1.0\n"
@@ -192,55 +192,55 @@ msgstr "Abendua"
 msgid "Settings"
 msgstr "Ezarpenak"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "segundu"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "orain dela minutu %n"
 msgstr[1] "orain dela %n minutu"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "orain dela ordu %n"
 msgstr[1] "orain dela %n ordu"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "gaur"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "atzo"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "orain dela egun %n"
 msgstr[1] "orain dela %n egun"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "joan den hilabetean"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "orain dela hilabete %n"
 msgstr[1] "orain dela %n hilabete"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "hilabete"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "joan den urtean"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "urte"
 
@@ -268,6 +268,46 @@ msgstr "Ados"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/eu/files.po b/l10n/eu/files.po
index d48f767a56..46b992abc3 100644
--- a/l10n/eu/files.po
+++ b/l10n/eu/files.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
 "MIME-Version: 1.0\n"
@@ -76,11 +76,15 @@ msgstr "Errore bat izan da diskoan idazterakoan"
 msgid "Not enough storage available"
 msgstr "Ez dago behar aina leku erabilgarri,"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "igotzeak huts egin du"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Baliogabeko karpeta."
 
@@ -88,144 +92,148 @@ msgstr "Baliogabeko karpeta."
 msgid "Files"
 msgstr "Fitxategiak"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Ezin izan da zure fitxategia igo karpeta bat delako edo 0 byte dituelako"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Ez dago leku nahikorik."
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Igoera ezeztatuta"
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URLa ezin da hutsik egon."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Karpeta izne baliogabea. \"Shared\" karpeta erabilpena OwnCloudentzat erreserbaturik dago."
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Errorea"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Elkarbanatu"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Ezabatu betirako"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Berrizendatu"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Zain"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} dagoeneko existitzen da"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "ordeztu"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "aholkatu izena"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "ezeztatu"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr " {new_name}-k {old_name} ordezkatu du"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "desegin"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "karpeta %n"
 msgstr[1] "%n karpeta"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "fitxategi %n"
 msgstr[1] "%n fitxategi"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Fitxategi %n igotzen"
 msgstr[1] "%n fitxategi igotzen"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "fitxategiak igotzen"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' ez da fitxategi izen baliogarria."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Fitxategi izena ezin da hutsa izan."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "IZen aliogabea, '\\', '/', '<', '>', ':', '\"', '|', '?' eta '*' ez daude baimenduta."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Zure biltegiratzea beterik dago, ezingo duzu aurrerantzean fitxategirik igo edo sinkronizatu!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Zure biltegiratzea nahiko beterik dago (%{usedSpacePercent})"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Enkriptazioa desgaitua izan da baina zure fitxategiak oraindik enkriptatuta daude. Mesedez  jo zure ezarpen pertsonaletara zure fitxategiak dekodifikatzeko."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Zure deskarga prestatu egin behar da. Denbora bat har lezake fitxategiak handiak badira. "
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Izena"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Tamaina"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Aldatuta"
 
@@ -234,7 +242,7 @@ msgstr "Aldatuta"
 msgid "%s could not be renamed"
 msgstr "%s ezin da berrizendatu"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Igo"
 
@@ -270,65 +278,65 @@ msgstr "ZIP fitxategien gehienezko tamaina"
 msgid "Save"
 msgstr "Gorde"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Berria"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Testu fitxategia"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Karpeta"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Estekatik"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Ezabatutako fitxategiak"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Ezeztatu igoera"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Ez duzu hemen idazteko baimenik."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Ez dago ezer. Igo zerbait!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Deskargatu"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Ez elkarbanatu"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Ezabatu"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Igoera handiegia da"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Igotzen saiatzen ari zaren fitxategiak zerbitzari honek igotzeko onartzen duena baino handiagoak dira."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Fitxategiak eskaneatzen ari da, itxoin mezedez."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Orain eskaneatzen ari da"
 
diff --git a/l10n/eu/settings.po b/l10n/eu/settings.po
index fd51682696..fc5007d857 100644
--- a/l10n/eu/settings.po
+++ b/l10n/eu/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
 "MIME-Version: 1.0\n"
@@ -111,11 +111,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/fa/core.po b/l10n/fa/core.po
index c0dfd2514b..a4e9885b05 100644
--- a/l10n/fa/core.po
+++ b/l10n/fa/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
 "MIME-Version: 1.0\n"
@@ -191,51 +191,51 @@ msgstr "دسامبر"
 msgid "Settings"
 msgstr "تنظیمات"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "ثانیه‌ها پیش"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "امروز"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "دیروز"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "ماه قبل"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "ماه‌های قبل"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "سال قبل"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "سال‌های قبل"
 
@@ -263,6 +263,45 @@ msgstr "قبول"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/fa/files.po b/l10n/fa/files.po
index 4c7fbe5528..b6b078cb36 100644
--- a/l10n/fa/files.po
+++ b/l10n/fa/files.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
 "MIME-Version: 1.0\n"
@@ -75,11 +75,15 @@ msgstr "نوشتن بر روی دیسک سخت ناموفق بود"
 msgid "Not enough storage available"
 msgstr "فضای کافی در دسترس نیست"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "بارگزاری ناموفق بود"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "فهرست راهنما نامعتبر می باشد."
 
@@ -87,141 +91,145 @@ msgstr "فهرست راهنما نامعتبر می باشد."
 msgid "Files"
 msgstr "پرونده‌ها"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "ناتوان در بارگذاری یا فایل یک پوشه است یا 0بایت دارد"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "فضای کافی در دسترس نیست"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "بار گذاری لغو شد"
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "آپلودکردن پرونده در حال پیشرفت است. در صورت خروج از صفحه آپلود لغو میگردد. "
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL  نمی تواند خالی باشد."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "نام پوشه نامعتبر است. استفاده از 'به اشتراک گذاشته شده' متعلق به ownCloud میباشد."
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "خطا"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "اشتراک‌گذاری"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "حذف قطعی"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "تغییرنام"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "در انتظار"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{نام _جدید} در حال حاضر وجود دارد."
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "جایگزین"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "پیشنهاد نام"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "لغو"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "{نام_جدید} با { نام_قدیمی} جایگزین شد."
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "بازگشت"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "بارگذاری فایل ها"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.'   یک نام پرونده نامعتبر است."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "نام پرونده نمی تواند خالی باشد."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "نام نامعتبر ،  '\\', '/', '<', '>', ':', '\"', '|', '?'  و '*'  مجاز نمی باشند."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "فضای ذخیره ی شما کاملا پر است، بیش از این فایلها بهنگام یا همگام سازی نمی توانند بشوند!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "فضای ذخیره ی شما تقریبا پر است ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "دانلود شما در حال آماده شدن است. در صورتیکه پرونده ها بزرگ باشند ممکن است مدتی طول بکشد."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "نام"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "اندازه"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "تاریخ"
 
@@ -230,7 +238,7 @@ msgstr "تاریخ"
 msgid "%s could not be renamed"
 msgstr "%s نمیتواند تغییر نام دهد."
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "بارگزاری"
 
@@ -266,65 +274,65 @@ msgstr "حداکثرمقدار برای بار گزاری پرونده های ف
 msgid "Save"
 msgstr "ذخیره"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "جدید"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "فایل متنی"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "پوشه"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "از پیوند"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "فایل های حذف شده"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "متوقف کردن بار گذاری"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "شما اجازه ی نوشتن در اینجا را ندارید"
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "اینجا هیچ چیز نیست."
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "دانلود"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "لغو اشتراک"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "حذف"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "سایز فایل برای آپلود زیاد است(م.تنظیمات در php.ini)"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "فایلها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر فایل php,ini میتوان این محدودیت را برطرف کرد"
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "پرونده ها در حال بازرسی هستند لطفا صبر کنید"
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "بازرسی کنونی"
 
diff --git a/l10n/fa/settings.po b/l10n/fa/settings.po
index 587c70ba4a..7a3f31a719 100644
--- a/l10n/fa/settings.po
+++ b/l10n/fa/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
 "MIME-Version: 1.0\n"
@@ -110,11 +110,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/fi_FI/core.po b/l10n/fi_FI/core.po
index 499d8b2d8d..6eecad24ce 100644
--- a/l10n/fi_FI/core.po
+++ b/l10n/fi_FI/core.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-17 13:05+0000\n"
-"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -192,55 +192,55 @@ msgstr "joulukuu"
 msgid "Settings"
 msgstr "Asetukset"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "sekuntia sitten"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "%n minuutti sitten"
 msgstr[1] "%n minuuttia sitten"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "%n tunti sitten"
 msgstr[1] "%n tuntia sitten"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "tänään"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "eilen"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "%n päivä sitten"
 msgstr[1] "%n päivää sitten"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "viime kuussa"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "%n kuukausi sitten"
 msgstr[1] "%n kuukautta sitten"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "kuukautta sitten"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "viime vuonna"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "vuotta sitten"
 
@@ -268,6 +268,46 @@ msgstr "Ok"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/fi_FI/files.po b/l10n/fi_FI/files.po
index 34fe35c6ce..cc0dfaf5c1 100644
--- a/l10n/fi_FI/files.po
+++ b/l10n/fi_FI/files.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -75,11 +75,15 @@ msgstr "Levylle kirjoitus epäonnistui"
 msgid "Not enough storage available"
 msgstr "Tallennustilaa ei ole riittävästi käytettävissä"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Lähetys epäonnistui"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Virheellinen kansio."
 
@@ -87,144 +91,148 @@ msgstr "Virheellinen kansio."
 msgid "Files"
 msgstr "Tiedostot"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Tiedoston lähetys epäonnistui, koska sen koko on 0 tavua tai kyseessä on kansio."
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Tilaa ei ole riittävästi"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Lähetys peruttu."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "Verkko-osoite ei voi olla tyhjä"
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Virhe"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Jaa"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Poista pysyvästi"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Nimeä uudelleen"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Odottaa"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} on jo olemassa"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "korvaa"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "ehdota nimeä"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "peru"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "kumoa"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n kansio"
 msgstr[1] "%n kansiota"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n tiedosto"
 msgstr[1] "%n tiedostoa"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} ja {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Lähetetään %n tiedosto"
 msgstr[1] "Lähetetään %n tiedostoa"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' on virheellinen nimi tiedostolle."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Tiedoston nimi ei voi olla tyhjä."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Virheellinen nimi, merkit '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' eivät ole sallittuja."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Tallennustila on loppu, tiedostoja ei voi enää päivittää tai synkronoida!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Tallennustila on melkein loppu ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Lataustasi valmistellaan. Tämä saattaa kestää hetken, jos tiedostot ovat suuria kooltaan."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nimi"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Koko"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Muokattu"
 
@@ -233,7 +241,7 @@ msgstr "Muokattu"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Lähetä"
 
@@ -269,65 +277,65 @@ msgstr "ZIP-tiedostojen enimmäiskoko"
 msgid "Save"
 msgstr "Tallenna"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Uusi"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Tekstitiedosto"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Kansio"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Linkistä"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Poistetut tiedostot"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Peru lähetys"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Tunnuksellasi ei ole kirjoitusoikeuksia tänne."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Täällä ei ole mitään. Lähetä tänne jotakin!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Lataa"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Peru jakaminen"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Poista"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Lähetettävä tiedosto on liian suuri"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Lähetettäväksi valitsemasi tiedostot ylittävät palvelimen salliman tiedostokoon rajan."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Tiedostoja tarkistetaan, odota hetki."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Tämänhetkinen tutkinta"
 
diff --git a/l10n/fi_FI/settings.po b/l10n/fi_FI/settings.po
index 60eda83c46..2b9b270367 100644
--- a/l10n/fi_FI/settings.po
+++ b/l10n/fi_FI/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
 "MIME-Version: 1.0\n"
@@ -87,7 +87,7 @@ msgstr "Sovelluksen päivitys epäonnistui."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Väärä salasana"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
@@ -110,13 +110,9 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Salasanan vaihto ei onnistunut"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
diff --git a/l10n/fr/core.po b/l10n/fr/core.po
index 7ba9214216..011e6dbd15 100644
--- a/l10n/fr/core.po
+++ b/l10n/fr/core.po
@@ -6,14 +6,15 @@
 # Adalberto Rodrigues <rodrigues_adalberto@yahoo.fr>, 2013
 # Christophe Lherieau <skimpax@gmail.com>, 2013
 # msoko <sokolovitch@yahoo.com>, 2013
+# ogre_sympathique <ogre.sympathique@speed.1s.fr>, 2013
 # plachance <patlachance@gmail.com>, 2013
 # red0ne <red-0ne@smarty-concept.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
 "MIME-Version: 1.0\n"
@@ -97,15 +98,15 @@ msgstr "Erreur lors de la suppression de %s des favoris."
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "Aucune image ou fichier fourni"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Type de fichier inconnu"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Image invalide"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
@@ -195,55 +196,55 @@ msgstr "décembre"
 msgid "Settings"
 msgstr "Paramètres"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "il y a quelques secondes"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "il y a %n minute"
 msgstr[1] "il y a %n minutes"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "Il y a %n heure"
 msgstr[1] "Il y a %n heures"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "aujourd'hui"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "hier"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "il y a %n jour"
 msgstr[1] "il y a %n jours"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "le mois dernier"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "Il y a %n mois"
 msgstr[1] "Il y a %n mois"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "il y a plusieurs mois"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "l'année dernière"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "il y a plusieurs années"
 
@@ -253,7 +254,7 @@ msgstr "Choisir"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "Erreur de chargement du modèle de sélectionneur de fichiers : {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -269,6 +270,46 @@ msgstr "Ok"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
+msgstr "Erreur de chargement du modèle de message : {error}"
+
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
 msgstr ""
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
diff --git a/l10n/fr/files.po b/l10n/fr/files.po
index f3e3767ce8..fcbbbad254 100644
--- a/l10n/fr/files.po
+++ b/l10n/fr/files.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: ogre_sympathique <ogre.sympathique@speed.1s.fr>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -78,11 +78,15 @@ msgstr "Erreur d'écriture sur le disque"
 msgid "Not enough storage available"
 msgstr "Plus assez d'espace de stockage disponible"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Échec de l'envoi"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Dossier invalide."
 
@@ -90,144 +94,148 @@ msgstr "Dossier invalide."
 msgid "Files"
 msgstr "Fichiers"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Impossible d'envoyer votre fichier dans la mesure où il s'agit d'un répertoire ou d'un fichier de taille nulle"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Espace disponible insuffisant"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Envoi annulé."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "L'URL ne peut-être vide"
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Nom de dossier invalide. L'utilisation du mot 'Shared' est réservée à Owncloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Erreur"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Partager"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Supprimer de façon définitive"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Renommer"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "En attente"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} existe déjà"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "remplacer"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "Suggérer un nom"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "annuler"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "{new_name} a été remplacé par {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "annuler"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n dossier"
 msgstr[1] "%n dossiers"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n fichier"
 msgstr[1] "%n fichiers"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dir} et {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Téléversement de %n fichier"
 msgstr[1] "Téléversement de %n fichiers"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "fichiers en cours d'envoi"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' n'est pas un nom de fichier valide."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Le nom de fichier ne peut être vide."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Nom invalide, les caractères '\\', '/', '<', '>', ':', '\"', '|', '?' et '*' ne sont pas autorisés."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Votre espage de stockage est plein, les fichiers ne peuvent plus être téléversés ou synchronisés !"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Votre espace de stockage est presque plein ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Le chiffrement était désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos Paramètres personnels pour déchiffrer vos fichiers."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Votre téléchargement est cours de préparation. Ceci peut nécessiter un certain temps si les fichiers sont volumineux."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nom"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Taille"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Modifié"
 
@@ -236,7 +244,7 @@ msgstr "Modifié"
 msgid "%s could not be renamed"
 msgstr "%s ne peut être renommé"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Envoyer"
 
@@ -272,65 +280,65 @@ msgstr "Taille maximale pour les fichiers ZIP"
 msgid "Save"
 msgstr "Sauvegarder"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Nouveau"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Fichier texte"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Dossier"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Depuis le lien"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Fichiers supprimés"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Annuler l'envoi"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Vous n'avez pas le droit d'écriture ici."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Il n'y a rien ici ! Envoyez donc quelque chose :)"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Télécharger"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Ne plus partager"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Supprimer"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Téléversement trop volumineux"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Les fichiers que vous essayez d'envoyer dépassent la taille maximale permise par ce serveur."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Les fichiers sont en cours d'analyse, veuillez patienter."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Analyse en cours"
 
diff --git a/l10n/fr/lib.po b/l10n/fr/lib.po
index 547f24c023..792ec31010 100644
--- a/l10n/fr/lib.po
+++ b/l10n/fr/lib.po
@@ -5,13 +5,14 @@
 # Translators:
 # Christophe Lherieau <skimpax@gmail.com>, 2013
 # Cyril Glapa <kyriog@gmail.com>, 2013
+# ogre_sympathique <ogre.sympathique@speed.1s.fr>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-19 13:10+0000\n"
+"Last-Translator: ogre_sympathique <ogre.sympathique@speed.1s.fr>\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"
@@ -57,15 +58,15 @@ msgstr "Echec de la mise à niveau \"%s\"."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "Les images de profil personnalisées ne fonctionnent pas encore avec le système de chiffrement."
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Type de fichier inconnu"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Image invalide"
 
 #: defaults.php:35
 msgid "web services under your control"
@@ -166,15 +167,15 @@ msgstr "Erreur d'authentification"
 msgid "Token expired. Please reload page."
 msgstr "La session a expiré. Veuillez recharger la page."
 
-#: search/provider/file.php:17 search/provider/file.php:35
+#: search/provider/file.php:18 search/provider/file.php:36
 msgid "Files"
 msgstr "Fichiers"
 
-#: search/provider/file.php:26 search/provider/file.php:33
+#: search/provider/file.php:27 search/provider/file.php:34
 msgid "Text"
 msgstr "Texte"
 
-#: search/provider/file.php:29
+#: search/provider/file.php:30
 msgid "Images"
 msgstr "Images"
 
diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po
index 49cfd88024..529e2e8c35 100644
--- a/l10n/fr/settings.po
+++ b/l10n/fr/settings.po
@@ -7,13 +7,14 @@
 # Christophe Lherieau <skimpax@gmail.com>, 2013
 # lyly95, 2013
 # Mystyle <maelvstyle@gmail.com>, 2013
+# ogre_sympathique <ogre.sympathique@speed.1s.fr>, 2013
 # red0ne <red-0ne@smarty-concept.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
 "MIME-Version: 1.0\n"
@@ -91,11 +92,11 @@ msgstr "Impossible de mettre à jour l'application"
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Mot de passe incorrect"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "Aucun utilisateur fourni"
 
 #: changepassword/controller.php:74
 msgid ""
@@ -114,13 +115,9 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Impossible de modifier le mot de passe"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
diff --git a/l10n/gl/core.po b/l10n/gl/core.po
index a4c485ede1..25a8ee333f 100644
--- a/l10n/gl/core.po
+++ b/l10n/gl/core.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-17 13:05+0000\n"
-"Last-Translator: mbouzada <mbouzada@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -191,55 +191,55 @@ msgstr "decembro"
 msgid "Settings"
 msgstr "Axustes"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "segundos atrás"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "hai %n minuto"
 msgstr[1] "hai %n minutos"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "hai %n hora"
 msgstr[1] "hai %n horas"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "hoxe"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "onte"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "hai %n día"
 msgstr[1] "hai %n días"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "último mes"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "hai %n mes"
 msgstr[1] "hai %n meses"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "meses atrás"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "último ano"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "anos atrás"
 
@@ -267,6 +267,46 @@ msgstr "Aceptar"
 msgid "Error loading message template: {error}"
 msgstr "Produciuse un erro ao cargar o modelo da mensaxe: {error}"
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/gl/files.po b/l10n/gl/files.po
index f1ef8190bb..45a9129ab2 100644
--- a/l10n/gl/files.po
+++ b/l10n/gl/files.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: mbouzada <mbouzada@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -75,11 +75,15 @@ msgstr "Produciuse un erro ao escribir no disco"
 msgid "Not enough storage available"
 msgstr "Non hai espazo de almacenamento abondo"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Produciuse un fallou no envío"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "O directorio é incorrecto."
 
@@ -87,144 +91,148 @@ msgstr "O directorio é incorrecto."
 msgid "Files"
 msgstr "Ficheiros"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Non foi posíbel enviar o ficheiro pois ou é un directorio ou ten 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "O espazo dispoñíbel é insuficiente"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Envío cancelado."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "O envío do ficheiro está en proceso. Saír agora da páxina cancelará o envío."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "O URL non pode quedar baleiro."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Nome de cartafol incorrecto. O uso de «Compartido» e «Shared» está reservado para o ownClod"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Erro"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Compartir"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Eliminar permanentemente"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Renomear"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Pendentes"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "Xa existe un {new_name}"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "substituír"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "suxerir nome"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "cancelar"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "substituír {new_name} por {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "desfacer"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n cartafol"
 msgstr[1] "%n cartafoles"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n ficheiro"
 msgstr[1] "%n ficheiros"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} e {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Cargando %n ficheiro"
 msgstr[1] "Cargando %n ficheiros"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "ficheiros enviándose"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "«.» é un nome de ficheiro incorrecto"
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "O nome de ficheiro non pode estar baleiro"
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Nome incorrecto, non se permite «\\», «/», «<», «>», «:», «\"», «|», «?» e «*»."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "O seu espazo de almacenamento está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "O seu espazo de almacenamento está case cheo ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "O cifrado foi desactivado, mais os ficheiros están cifrados. Vaia á configuración persoal para descifrar os ficheiros."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Está a prepararse a súa descarga. Isto pode levar bastante tempo se os ficheiros son grandes."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nome"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Tamaño"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Modificado"
 
@@ -233,7 +241,7 @@ msgstr "Modificado"
 msgid "%s could not be renamed"
 msgstr "%s non pode cambiar de nome"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Enviar"
 
@@ -269,65 +277,65 @@ msgstr "Tamaño máximo de descarga para os ficheiros ZIP"
 msgid "Save"
 msgstr "Gardar"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Novo"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Ficheiro de texto"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Cartafol"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Desde a ligazón"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Ficheiros eliminados"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Cancelar o envío"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Non ten permisos para escribir aquí."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Aquí non hai nada. Envíe algo."
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Descargar"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Deixar de compartir"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Eliminar"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Envío demasiado grande"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Os ficheiros que tenta enviar exceden do tamaño máximo permitido neste servidor"
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Estanse analizando os ficheiros. Agarde."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Análise actual"
 
diff --git a/l10n/gl/settings.po b/l10n/gl/settings.po
index df5d5ec729..8533d9c17c 100644
--- a/l10n/gl/settings.po
+++ b/l10n/gl/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 "MIME-Version: 1.0\n"
@@ -87,36 +87,32 @@ msgstr "Non foi posíbel actualizar o aplicativo."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Contrasinal incorrecto"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "Non subministrado polo usuario"
 
 #: changepassword/controller.php:74
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Forneza un contrasinal de recuperación do administrador de recuperación, senón perderanse todos os datos do usuario"
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "Contrasinal de recuperación do administrador incorrecto. Comprobe o contrasinal e tenteo de novo."
 
 #: changepassword/controller.php:87
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
-
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
+msgstr "A infraestrutura non admite o cambio de contrasinal, mais a chave de cifrado dos usuarios foi actualizada correctamente."
 
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Non é posíbel cambiar o contrasinal"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
diff --git a/l10n/he/core.po b/l10n/he/core.po
index ecb35c7ac7..1f7da9c025 100644
--- a/l10n/he/core.po
+++ b/l10n/he/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
 "MIME-Version: 1.0\n"
@@ -192,55 +192,55 @@ msgstr "דצמבר"
 msgid "Settings"
 msgstr "הגדרות"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "שניות"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "לפני %n דקה"
 msgstr[1] "לפני %n דקות"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "לפני %n שעה"
 msgstr[1] "לפני %n שעות"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "היום"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "אתמול"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "לפני %n יום"
 msgstr[1] "לפני %n ימים"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "חודש שעבר"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "לפני %n חודש"
 msgstr[1] "לפני %n חודשים"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "חודשים"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "שנה שעברה"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "שנים"
 
@@ -268,6 +268,46 @@ msgstr "בסדר"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/he/files.po b/l10n/he/files.po
index 653e107a6e..15a0138955 100644
--- a/l10n/he/files.po
+++ b/l10n/he/files.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
 "MIME-Version: 1.0\n"
@@ -75,11 +75,15 @@ msgstr "הכתיבה לכונן נכשלה"
 msgid "Not enough storage available"
 msgstr "אין די שטח פנוי באחסון"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "ההעלאה נכשלה"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "תיקייה שגויה."
 
@@ -87,144 +91,148 @@ msgstr "תיקייה שגויה."
 msgid "Files"
 msgstr "קבצים"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "לא יכול להעלות את הקובץ מכיוון שזו תקיה או שמשקל הקובץ 0 בתים"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "ההעלאה בוטלה."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "מתבצעת כעת העלאת קבצים. עזיבה של העמוד תבטל את ההעלאה."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "קישור אינו יכול להיות ריק."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "שגיאה"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "שתף"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "מחק לצמיתות"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "שינוי שם"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "ממתין"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} כבר קיים"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "החלפה"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "הצעת שם"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "ביטול"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "{new_name} הוחלף ב־{old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "ביטול"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "קבצים בהעלאה"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "השם שגוי, אסור להשתמש בתווים '\\', '/', '<', '>', ':', '\"', '|', '?' ו־'*'."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "שם"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "גודל"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "זמן שינוי"
 
@@ -233,7 +241,7 @@ msgstr "זמן שינוי"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "העלאה"
 
@@ -269,65 +277,65 @@ msgstr "גודל הקלט המרבי לקובצי ZIP"
 msgid "Save"
 msgstr "שמירה"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "חדש"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "קובץ טקסט"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "תיקייה"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "מקישור"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "ביטול ההעלאה"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "אין כאן שום דבר. אולי ברצונך להעלות משהו?"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "הורדה"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "הסר שיתוף"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "מחיקה"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "העלאה גדולה מידי"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "הקבצים שניסית להעלות חרגו מהגודל המקסימלי להעלאת קבצים על שרת זה."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "הקבצים נסרקים, נא להמתין."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "הסריקה הנוכחית"
 
diff --git a/l10n/he/settings.po b/l10n/he/settings.po
index 275d36704f..25d1901bcc 100644
--- a/l10n/he/settings.po
+++ b/l10n/he/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
 "MIME-Version: 1.0\n"
@@ -110,11 +110,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/hi/core.po b/l10n/hi/core.po
index 31d7caf5d3..834b2c48eb 100644
--- a/l10n/hi/core.po
+++ b/l10n/hi/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-17 15:30+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
 "MIME-Version: 1.0\n"
@@ -192,55 +192,55 @@ msgstr "दिसम्बर"
 msgid "Settings"
 msgstr "सेटिंग्स"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -268,6 +268,46 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/hi/files.po b/l10n/hi/files.po
index 1be595e8e6..f6fcb10b39 100644
--- a/l10n/hi/files.po
+++ b/l10n/hi/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:46-0400\n"
-"PO-Revision-Date: 2013-09-17 13:14+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:40
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:53
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:91
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:206
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:280
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:285 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:317 js/file-upload.js:333 js/files.js:528 js/files.js:566
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "त्रुटि"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "साझा करें"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:710
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:417 js/filelist.js:419
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:417 js/filelist.js:419
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:417
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:417 js/filelist.js:419
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:464
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:464
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:534 js/filelist.js:600 js/files.js:597
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:535 js/filelist.js:601 js/files.js:603
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:542
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:698
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:763
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:322
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:579 templates/index.php:61
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:580 templates/index.php:73
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:581 templates/index.php:75
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
diff --git a/l10n/hi/settings.po b/l10n/hi/settings.po
index f54504cd72..fc8e5837c9 100644
--- a/l10n/hi/settings.po
+++ b/l10n/hi/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/hr/core.po b/l10n/hr/core.po
index d8b8a3018c..583405240b 100644
--- a/l10n/hr/core.po
+++ b/l10n/hr/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
 "MIME-Version: 1.0\n"
@@ -190,59 +190,59 @@ msgstr "Prosinac"
 msgid "Settings"
 msgstr "Postavke"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "sekundi prije"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "danas"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "jučer"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "prošli mjesec"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "mjeseci"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "prošlu godinu"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "godina"
 
@@ -270,6 +270,47 @@ msgstr "U redu"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/hr/files.po b/l10n/hr/files.po
index fad167ba7b..3eab0bfde8 100644
--- a/l10n/hr/files.po
+++ b/l10n/hr/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr "Neuspjelo pisanje na disk"
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,147 +90,151 @@ msgstr ""
 msgid "Files"
 msgstr "Datoteke"
 
-#: js/file-upload.js:11
-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/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Slanje poništeno."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Učitavanje datoteke. Napuštanjem stranice će prekinuti učitavanje."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Greška"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Podijeli"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Promjeni ime"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "U tijeku"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "zamjeni"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "predloži ime"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "odustani"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "vrati"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "datoteke se učitavaju"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Ime"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Veličina"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Zadnja promjena"
 
@@ -235,7 +243,7 @@ msgstr "Zadnja promjena"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Učitaj"
 
@@ -271,65 +279,65 @@ msgstr "Maksimalna veličina za ZIP datoteke"
 msgid "Save"
 msgstr "Snimi"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "novo"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "tekstualna datoteka"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "mapa"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Prekini upload"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Nema ničega u ovoj mapi. Pošalji nešto!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Preuzimanje"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Makni djeljenje"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Obriši"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Prijenos je preobiman"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Datoteke koje pokušavate prenijeti prelaze maksimalnu veličinu za prijenos datoteka na ovom poslužitelju."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Datoteke se skeniraju, molimo pričekajte."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Trenutno skeniranje"
 
diff --git a/l10n/hr/settings.po b/l10n/hr/settings.po
index db3bfe8145..aec94bb5df 100644
--- a/l10n/hr/settings.po
+++ b/l10n/hr/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/hu_HU/core.po b/l10n/hu_HU/core.po
index 18378d4b15..9a7ab1014f 100644
--- a/l10n/hu_HU/core.po
+++ b/l10n/hu_HU/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
 "MIME-Version: 1.0\n"
@@ -192,55 +192,55 @@ msgstr "december"
 msgid "Settings"
 msgstr "Beállítások"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "pár másodperce"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "ma"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "tegnap"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "múlt hónapban"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "több hónapja"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "tavaly"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "több éve"
 
@@ -268,6 +268,46 @@ msgstr "Ok"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/hu_HU/files.po b/l10n/hu_HU/files.po
index 7843881e21..51bd0806da 100644
--- a/l10n/hu_HU/files.po
+++ b/l10n/hu_HU/files.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
 "MIME-Version: 1.0\n"
@@ -75,11 +75,15 @@ msgstr "Nem sikerült a lemezre történő írás"
 msgid "Not enough storage available"
 msgstr "Nincs elég szabad hely."
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "A feltöltés nem sikerült"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Érvénytelen mappa."
 
@@ -87,144 +91,148 @@ msgstr "Érvénytelen mappa."
 msgid "Files"
 msgstr "Fájlok"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Nem tölthető fel, mert mappa volt, vagy 0 byte méretű"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Nincs elég szabad hely"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "A feltöltést megszakítottuk."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "Az URL nem lehet semmi."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Érvénytelen mappanév. A 'Shared' az ownCloud számára fenntartott elnevezés"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Hiba"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Megosztás"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Végleges törlés"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Átnevezés"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Folyamatban"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} már létezik"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "írjuk fölül"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "legyen más neve"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "mégse"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "{new_name} fájlt kicseréltük ezzel:  {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "visszavonás"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "fájl töltődik föl"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' fájlnév érvénytelen."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "A fájlnév nem lehet semmi."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Érvénytelen elnevezés. Ezek a karakterek nem használhatók: '\\', '/', '<', '>', ':', '\"', '|', '?' és '*'"
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "A tároló tele van, a fájlok nem frissíthetőek vagy szinkronizálhatóak a jövőben."
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "A tároló majdnem tele van ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Készül a letöltendő állomány. Ez eltarthat egy ideig, ha nagyok a fájlok."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Név"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Méret"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Módosítva"
 
@@ -233,7 +241,7 @@ msgstr "Módosítva"
 msgid "%s could not be renamed"
 msgstr "%s átnevezése nem sikerült"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Feltöltés"
 
@@ -269,65 +277,65 @@ msgstr "ZIP-fájlok maximális kiindulási mérete"
 msgid "Save"
 msgstr "Mentés"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Új"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Szövegfájl"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Mappa"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Feltöltés linkről"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Törölt fájlok"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "A feltöltés megszakítása"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Itt nincs írásjoga."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Itt nincs semmi. Töltsön fel valamit!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Letöltés"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "A megosztás visszavonása"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Törlés"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "A feltöltés túl nagy"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "A feltöltendő állományok mérete meghaladja a kiszolgálón megengedett maximális méretet."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "A fájllista ellenőrzése zajlik, kis türelmet!"
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Ellenőrzés alatt"
 
diff --git a/l10n/hu_HU/settings.po b/l10n/hu_HU/settings.po
index 7643899f6d..7ef4a07d1a 100644
--- a/l10n/hu_HU/settings.po
+++ b/l10n/hu_HU/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
 "MIME-Version: 1.0\n"
@@ -112,11 +112,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/hy/core.po b/l10n/hy/core.po
index 3200bbb853..cfc83cf773 100644
--- a/l10n/hy/core.po
+++ b/l10n/hy/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr "Դեկտեմբեր"
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -266,6 +266,46 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/hy/files.po b/l10n/hy/files.po
index 6c477202b4..46e6544393 100644
--- a/l10n/hy/files.po
+++ b/l10n/hy/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:31-0400\n"
-"PO-Revision-Date: 2013-08-30 13:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:275 js/file-upload.js:291 js/files.js:511 js/files.js:549
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:573
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:305
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:422 js/filelist.js:488 js/files.js:580
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:423 js/filelist.js:489 js/files.js:586
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:430
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:561
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:626
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:562 templates/index.php:67
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:563 templates/index.php:78
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:80
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -232,7 +240,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -268,65 +276,65 @@ msgstr ""
 msgid "Save"
 msgstr "Պահպանել"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:73
+#: templates/index.php:67
 msgid "Download"
 msgstr "Բեռնել"
 
-#: templates/index.php:85 templates/index.php:86
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:91 templates/index.php:92
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Ջնջել"
 
-#: templates/index.php:105
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:107
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:112
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/hy/settings.po b/l10n/hy/settings.po
index faf9956c06..ecc4b3e278 100644
--- a/l10n/hy/settings.po
+++ b/l10n/hy/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/ia/core.po b/l10n/ia/core.po
index 51ad0cc856..5a048cfc14 100644
--- a/l10n/ia/core.po
+++ b/l10n/ia/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr "Decembre"
 msgid "Settings"
 msgstr "Configurationes"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -266,6 +266,46 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/ia/files.po b/l10n/ia/files.po
index 391f76c987..5244ffda62 100644
--- a/l10n/ia/files.po
+++ b/l10n/ia/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr "Files"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Error"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Compartir"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nomine"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Dimension"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Modificate"
 
@@ -232,7 +240,7 @@ msgstr "Modificate"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Incargar"
 
@@ -268,65 +276,65 @@ msgstr ""
 msgid "Save"
 msgstr "Salveguardar"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Nove"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "File de texto"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Dossier"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Nihil hic. Incarga alcun cosa!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Discargar"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Deler"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Incargamento troppo longe"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/ia/settings.po b/l10n/ia/settings.po
index b88c80f02c..3097b240fc 100644
--- a/l10n/ia/settings.po
+++ b/l10n/ia/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/id/core.po b/l10n/id/core.po
index 6330d1f9d2..355807ff03 100644
--- a/l10n/id/core.po
+++ b/l10n/id/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
 "MIME-Version: 1.0\n"
@@ -190,51 +190,51 @@ msgstr "Desember"
 msgid "Settings"
 msgstr "Setelan"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "beberapa detik yang lalu"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "hari ini"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "kemarin"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "bulan kemarin"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "beberapa bulan lalu"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "tahun kemarin"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "beberapa tahun lalu"
 
@@ -262,6 +262,45 @@ msgstr "Oke"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/id/files.po b/l10n/id/files.po
index 2ce822890c..dc0c2272b6 100644
--- a/l10n/id/files.po
+++ b/l10n/id/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr "Gagal menulis ke disk"
 msgid "Not enough storage available"
 msgstr "Ruang penyimpanan tidak mencukupi"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Direktori tidak valid."
 
@@ -86,141 +90,145 @@ msgstr "Direktori tidak valid."
 msgid "Files"
 msgstr "Berkas"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Gagal mengunggah berkas Anda karena berupa direktori atau mempunyai ukuran 0 byte"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Ruang penyimpanan tidak mencukupi"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Pengunggahan dibatalkan."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Berkas sedang diunggah. Meninggalkan halaman ini akan membatalkan proses."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL tidak boleh kosong"
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Galat"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Bagikan"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Hapus secara permanen"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Ubah nama"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Menunggu"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} sudah ada"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "ganti"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "sarankan nama"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "batalkan"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "mengganti {new_name} dengan {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "urungkan"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "berkas diunggah"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' bukan nama berkas yang valid."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Nama berkas tidak boleh kosong."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Nama tidak valid, karakter '\\', '/', '<', '>', ':', '\"', '|', '?' dan '*' tidak diizinkan."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Ruang penyimpanan Anda penuh, berkas tidak dapat diperbarui atau disinkronkan lagi!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Ruang penyimpanan hampir penuh ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Unduhan Anda sedang disiapkan. Prosesnya dapat berlangsung agak lama jika ukuran berkasnya besar."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nama"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Ukuran"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Dimodifikasi"
 
@@ -229,7 +237,7 @@ msgstr "Dimodifikasi"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Unggah"
 
@@ -265,65 +273,65 @@ msgstr "Ukuran masukan maksimum untuk berkas ZIP"
 msgid "Save"
 msgstr "Simpan"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Baru"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Berkas teks"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Folder"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Dari tautan"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Berkas yang dihapus"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Batal pengunggahan"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Anda tidak memiliki izin menulis di sini."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Tidak ada apa-apa di sini. Unggah sesuatu!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Unduh"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Batalkan berbagi"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Hapus"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Yang diunggah terlalu besar"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Berkas yang dicoba untuk diunggah melebihi ukuran maksimum pengunggahan berkas di server ini."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Berkas sedang dipindai, silakan tunggu."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Yang sedang dipindai"
 
diff --git a/l10n/id/settings.po b/l10n/id/settings.po
index 260df1998a..7f2ef31f55 100644
--- a/l10n/id/settings.po
+++ b/l10n/id/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/is/core.po b/l10n/is/core.po
index a9ac308228..e4e28667ba 100644
--- a/l10n/is/core.po
+++ b/l10n/is/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
 "MIME-Version: 1.0\n"
@@ -191,55 +191,55 @@ msgstr "Desember"
 msgid "Settings"
 msgstr "Stillingar"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "sek."
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "í dag"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "í gær"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "síðasta mánuði"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "mánuðir síðan"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "síðasta ári"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "einhverjum árum"
 
@@ -267,6 +267,46 @@ msgstr "Í lagi"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/is/files.po b/l10n/is/files.po
index b5561e4900..e53fa55a72 100644
--- a/l10n/is/files.po
+++ b/l10n/is/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr "Tókst ekki að skrifa á disk"
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Ógild mappa."
 
@@ -86,144 +90,148 @@ msgstr "Ógild mappa."
 msgid "Files"
 msgstr "Skrár"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Innsending á skrá mistókst, hugsanlega sendir þú möppu eða skráin er 0 bæti."
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Ekki nægt pláss tiltækt"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Hætt við innsendingu."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending misheppnast."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "Vefslóð má ekki vera tóm."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Villa"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Deila"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Endurskýra"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Bíður"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} er þegar til"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "yfirskrifa"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "stinga upp á nafni"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "hætta við"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "yfirskrifaði {new_name} með {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "afturkalla"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' er ekki leyfilegt nafn."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Nafn skráar má ekki vera tómt"
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Ógilt nafn, táknin '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' eru ekki leyfð."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nafn"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Stærð"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Breytt"
 
@@ -232,7 +240,7 @@ msgstr "Breytt"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Senda inn"
 
@@ -268,65 +276,65 @@ msgstr "Hámarks inntaksstærð fyrir ZIP skrár"
 msgid "Save"
 msgstr "Vista"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Nýtt"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Texta skrá"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Mappa"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Af tengli"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Hætta við innsendingu"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Ekkert hér. Settu eitthvað inn!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Niðurhal"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Hætta deilingu"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Eyða"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Innsend skrá er of stór"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Verið er að skima skrár, vinsamlegast hinkraðu."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Er að skima"
 
diff --git a/l10n/is/settings.po b/l10n/is/settings.po
index 033cdb6233..928b148001 100644
--- a/l10n/is/settings.po
+++ b/l10n/is/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
 "MIME-Version: 1.0\n"
@@ -110,11 +110,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/it/core.po b/l10n/it/core.po
index ab95d67cc3..4189836997 100644
--- a/l10n/it/core.po
+++ b/l10n/it/core.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-17 22:30+0000\n"
-"Last-Translator: polxmod <paolo.velati@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -99,7 +99,7 @@ msgstr "Non è stata fornita alcun immagine o file"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr "Tipo file sconosciuto"
+msgstr "Tipo di file sconosciuto"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
@@ -107,11 +107,11 @@ msgstr "Immagine non valida"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr "Nessuna foto profilo temporanea disponibile, riprova"
+msgstr "Nessuna foto di profilo temporanea disponibile, riprova"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr "Raccolta dati non prevista"
+msgstr "Dati di ritaglio non forniti"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -193,55 +193,55 @@ msgstr "Dicembre"
 msgid "Settings"
 msgstr "Impostazioni"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "secondi fa"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "%n minuto fa"
 msgstr[1] "%n minuti fa"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "%n ora fa"
 msgstr[1] "%n ore fa"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "oggi"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "ieri"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "%n giorno fa"
 msgstr[1] "%n giorni fa"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "mese scorso"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "%n mese fa"
 msgstr[1] "%n mesi fa"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "mesi fa"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "anno scorso"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "anni fa"
 
@@ -269,6 +269,46 @@ msgstr "Ok"
 msgid "Error loading message template: {error}"
 msgstr "Errore durante il caricamento del modello di messaggio: {error}"
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/it/files.po b/l10n/it/files.po
index b97ed25936..cde611190e 100644
--- a/l10n/it/files.po
+++ b/l10n/it/files.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -76,11 +76,15 @@ msgstr "Scrittura su disco non riuscita"
 msgid "Not enough storage available"
 msgstr "Spazio di archiviazione insufficiente"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Caricamento non riuscito"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Cartella non valida."
 
@@ -88,144 +92,148 @@ msgstr "Cartella non valida."
 msgid "Files"
 msgstr "File"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Impossibile caricare il file poiché è una cartella o ha una dimensione di 0 byte"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Spazio disponibile insufficiente"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Invio annullato"
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "L'URL non può essere vuoto."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Nome della cartella non valido. L'uso di 'Shared' è riservato a ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Errore"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Condividi"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Elimina definitivamente"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Rinomina"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "In corso"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} esiste già"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "sostituisci"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "suggerisci nome"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "annulla"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "sostituito {new_name} con {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "annulla"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n cartella"
 msgstr[1] "%n cartelle"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n file"
 msgstr[1] "%n file"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} e {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Caricamento di %n file in corso"
 msgstr[1] "Caricamento di %n file in corso"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "caricamento file"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' non è un nome file valido."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Il nome del file non può essere vuoto."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Nome non valido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non sono consentiti."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Lo spazio di archiviazione è pieno, i file non possono essere più aggiornati o sincronizzati!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Lo spazio di archiviazione è quasi pieno ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "La cifratura è stata disabilitata ma i tuoi file sono ancora cifrati. Vai nelle impostazioni personali per decifrare i file."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Il tuo scaricamento è in fase di preparazione. Ciò potrebbe richiedere del tempo se i file sono grandi."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nome"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Dimensione"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Modificato"
 
@@ -234,7 +242,7 @@ msgstr "Modificato"
 msgid "%s could not be renamed"
 msgstr "%s non può essere rinominato"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Carica"
 
@@ -270,65 +278,65 @@ msgstr "Dimensione massima per i file ZIP"
 msgid "Save"
 msgstr "Salva"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Nuovo"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "File di testo"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Cartella"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Da collegamento"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "File eliminati"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Annulla invio"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Qui non hai i permessi di scrittura."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Non c'è niente qui. Carica qualcosa!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Scarica"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Rimuovi condivisione"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Elimina"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Caricamento troppo grande"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "I file che stai provando a caricare superano la dimensione massima consentita su questo server."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Scansione dei file in corso, attendi"
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Scansione corrente"
 
diff --git a/l10n/it/lib.po b/l10n/it/lib.po
index 8c5f8ced5f..27b7c76e85 100644
--- a/l10n/it/lib.po
+++ b/l10n/it/lib.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-17 22:30+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-19 05:50+0000\n"
 "Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
 "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
 "MIME-Version: 1.0\n"
@@ -58,11 +58,11 @@ msgstr "Aggiornamento non riuscito \"%s\"."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr "Le immagini personalizzate del profilo non funzionano ancora con la cifratura."
+msgstr "Le immagini personalizzate del profilo non funzionano ancora con la cifratura"
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr "Tipo file sconosciuto"
+msgstr "Tipo di file sconosciuto"
 
 #: avatar.php:69
 msgid "Invalid image"
@@ -167,15 +167,15 @@ msgstr "Errore di autenticazione"
 msgid "Token expired. Please reload page."
 msgstr "Token scaduto. Ricarica la pagina."
 
-#: search/provider/file.php:17 search/provider/file.php:35
+#: search/provider/file.php:18 search/provider/file.php:36
 msgid "Files"
 msgstr "File"
 
-#: search/provider/file.php:26 search/provider/file.php:33
+#: search/provider/file.php:27 search/provider/file.php:34
 msgid "Text"
 msgstr "Testo"
 
-#: search/provider/file.php:29
+#: search/provider/file.php:30
 msgid "Images"
 msgstr "Immagini"
 
diff --git a/l10n/it/settings.po b/l10n/it/settings.po
index 6988cc5e5f..0e5f28a4d1 100644
--- a/l10n/it/settings.po
+++ b/l10n/it/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
 "MIME-Version: 1.0\n"
@@ -90,36 +90,32 @@ msgstr "Impossibile aggiornate l'applicazione."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Password errata"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "Non è stato fornito alcun utente"
 
 #: changepassword/controller.php:74
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Fornisci una password amministrativa di ripristino altrimenti tutti i dati degli utenti saranno persi."
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "Password amministrativa di ripristino errata. Controlla la password e prova ancora."
 
 #: changepassword/controller.php:87
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
-
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
+msgstr "Il motore non supporta la modifica della password, ma la chiave di cifratura dell'utente è stata aggiornata correttamente."
 
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Impossibile cambiare la password"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
diff --git a/l10n/ja_JP/core.po b/l10n/ja_JP/core.po
index d6343899dc..f72301efcb 100644
--- a/l10n/ja_JP/core.po
+++ b/l10n/ja_JP/core.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 05:50+0000\n"
-"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -194,51 +194,51 @@ msgstr "12月"
 msgid "Settings"
 msgstr "設定"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "数秒前"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "%n 分前"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "%n 時間後"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "今日"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "昨日"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "%n 日後"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "一月前"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "%n カ月後"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "月前"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "一年前"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "年前"
 
@@ -266,6 +266,45 @@ msgstr "OK"
 msgid "Error loading message template: {error}"
 msgstr "メッセージテンプレートの読み込みエラー: {error}"
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/ja_JP/files.po b/l10n/ja_JP/files.po
index bcb42ff87e..b712c8b95a 100644
--- a/l10n/ja_JP/files.po
+++ b/l10n/ja_JP/files.po
@@ -12,9 +12,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: tt yn <tetuyano+transi@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -79,11 +79,15 @@ msgstr "ディスクへの書き込みに失敗しました"
 msgid "Not enough storage available"
 msgstr "ストレージに十分な空き容量がありません"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "アップロードに失敗"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "無効なディレクトリです。"
 
@@ -91,141 +95,145 @@ msgstr "無効なディレクトリです。"
 msgid "Files"
 msgstr "ファイル"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "ディレクトリもしくは0バイトのファイルはアップロードできません"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "利用可能なスペースが十分にありません"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "アップロードはキャンセルされました。"
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。"
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URLは空にできません。"
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "無効なフォルダ名です。'Shared' の利用はownCloudで予約済みです"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "エラー"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "共有"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "完全に削除する"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "名前の変更"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "中断"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} はすでに存在しています"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "置き換え"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "推奨名称"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "キャンセル"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "{old_name} を {new_name} に置換"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "元に戻す"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n個のフォルダ"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n個のファイル"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} と {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "%n 個のファイルをアップロード中"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "ファイルをアップロード中"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' は無効なファイル名です。"
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "ファイル名を空にすることはできません。"
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "無効な名前、'\\', '/', '<', '>', ':', '\"', '|', '?', '*' は使用できません。"
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "あなたのストレージは一杯です。ファイルの更新と同期はもうできません!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "あなたのストレージはほぼ一杯です({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "暗号化の機能は無効化されましたが、ファイルはすでに暗号化されています。個人設定からファイルを複合を行ってください。"
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "ダウンロードの準備中です。ファイルサイズが大きい場合は少し時間がかかるかもしれません。"
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "名前"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "サイズ"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "変更"
 
@@ -234,7 +242,7 @@ msgstr "変更"
 msgid "%s could not be renamed"
 msgstr "%sの名前を変更できませんでした"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "アップロード"
 
@@ -270,65 +278,65 @@ msgstr "ZIPファイルへの最大入力サイズ"
 msgid "Save"
 msgstr "保存"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "新規作成"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "テキストファイル"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "フォルダ"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "リンク"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "削除ファイル"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "アップロードをキャンセル"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "あなたには書き込み権限がありません。"
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "ここには何もありません。何かアップロードしてください。"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "ダウンロード"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "共有解除"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "削除"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "アップロードには大きすぎます。"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "アップロードしようとしているファイルは、サーバで規定された最大サイズを超えています。"
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "ファイルをスキャンしています、しばらくお待ちください。"
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "スキャン中"
 
diff --git a/l10n/ja_JP/settings.po b/l10n/ja_JP/settings.po
index cc0e31052f..c9851b54de 100644
--- a/l10n/ja_JP/settings.po
+++ b/l10n/ja_JP/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 "MIME-Version: 1.0\n"
@@ -112,11 +112,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/ka/core.po b/l10n/ka/core.po
index 90fa5a82e6..e6a62126cc 100644
--- a/l10n/ka/core.po
+++ b/l10n/ka/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Georgian (http://www.transifex.com/projects/p/owncloud/language/ka/)\n"
 "MIME-Version: 1.0\n"
@@ -190,51 +190,51 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "წამის წინ"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "დღეს"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "გუშინ"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -262,6 +262,45 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/ka/files.po b/l10n/ka/files.po
index 8189ecec47..84143c9cd2 100644
--- a/l10n/ka/files.po
+++ b/l10n/ka/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:31-0400\n"
-"PO-Revision-Date: 2013-08-30 13:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Georgian (http://www.transifex.com/projects/p/owncloud/language/ka/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,141 +90,145 @@ msgstr ""
 msgid "Files"
 msgstr "ფაილები"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:275 js/file-upload.js:291 js/files.js:511 js/files.js:549
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:573
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:305
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:422 js/filelist.js:488 js/files.js:580
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 
-#: js/filelist.js:423 js/filelist.js:489 js/files.js:586
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 
-#: js/filelist.js:430
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:561
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 
-#: js/filelist.js:626
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:562 templates/index.php:67
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:563 templates/index.php:78
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:80
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -229,7 +237,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -265,65 +273,65 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:73
+#: templates/index.php:67
 msgid "Download"
 msgstr "გადმოწერა"
 
-#: templates/index.php:85 templates/index.php:86
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:91 templates/index.php:92
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:105
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:107
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:112
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/ka/settings.po b/l10n/ka/settings.po
index 139784572d..86e902ed4f 100644
--- a/l10n/ka/settings.po
+++ b/l10n/ka/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Georgian (http://www.transifex.com/projects/p/owncloud/language/ka/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/ka_GE/core.po b/l10n/ka_GE/core.po
index 64a9519691..247c6892b0 100644
--- a/l10n/ka_GE/core.po
+++ b/l10n/ka_GE/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
 "MIME-Version: 1.0\n"
@@ -190,51 +190,51 @@ msgstr "დეკემბერი"
 msgid "Settings"
 msgstr "პარამეტრები"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "წამის წინ"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "დღეს"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "გუშინ"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "გასულ თვეში"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "თვის წინ"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "ბოლო წელს"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "წლის წინ"
 
@@ -262,6 +262,45 @@ msgstr "დიახ"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/ka_GE/files.po b/l10n/ka_GE/files.po
index 56fff63712..a9e38b7176 100644
--- a/l10n/ka_GE/files.po
+++ b/l10n/ka_GE/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr "შეცდომა დისკზე ჩაწერისას"
 msgid "Not enough storage available"
 msgstr "საცავში საკმარისი ადგილი არ არის"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "ატვირთვა ვერ განხორციელდა"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "დაუშვებელი დირექტორია."
 
@@ -86,141 +90,145 @@ msgstr "დაუშვებელი დირექტორია."
 msgid "Files"
 msgstr "ფაილები"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "თქვენი ფაილის ატვირთვა ვერ მოხერხდა. ის არის საქაღალდე და შეიცავს 0 ბაიტს"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "საკმარისი ადგილი არ არის"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "ატვირთვა შეჩერებულ იქნა."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "მიმდინარეობს ფაილის ატვირთვა. სხვა გვერდზე გადასვლა გამოიწვევს ატვირთვის შეჩერებას"
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL არ შეიძლება იყოს ცარიელი."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "შეცდომა"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "გაზიარება"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "სრულად წაშლა"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "გადარქმევა"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "მოცდის რეჟიმში"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} უკვე არსებობს"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "შეცვლა"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "სახელის შემოთავაზება"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "უარყოფა"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "{new_name} შეცვლილია {old_name}–ით"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "დაბრუნება"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "ფაილები იტვირთება"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' არის დაუშვებელი ფაილის სახელი."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "ფაილის სახელი არ შეიძლება იყოს ცარიელი."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "არადაშვებადი სახელი, '\\', '/', '<', '>', ':', '\"', '|', '?' და  '*' არ არის დაიშვებული."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "თქვენი საცავი გადაივსო. ფაილების განახლება და სინქრონიზირება ვერ მოხერხდება!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "თქვენი საცავი თითქმის გადაივსო ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "გადმოწერის მოთხოვნა მუშავდება. ის მოითხოვს გარკვეულ დროს რაგდან ფაილები არის დიდი ზომის."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "სახელი"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "ზომა"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "შეცვლილია"
 
@@ -229,7 +237,7 @@ msgstr "შეცვლილია"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "ატვირთვა"
 
@@ -265,65 +273,65 @@ msgstr "ZIP ფაილების მაქსიმუმ დასაშვ
 msgid "Save"
 msgstr "შენახვა"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "ახალი"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "ტექსტური ფაილი"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "საქაღალდე"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "მისამართიდან"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "წაშლილი ფაილები"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "ატვირთვის გაუქმება"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "თქვენ არ გაქვთ ჩაწერის უფლება აქ."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "აქ არაფერი არ არის. ატვირთე რამე!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "ჩამოტვირთვა"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "გაუზიარებადი"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "წაშლა"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "ასატვირთი ფაილი ძალიან დიდია"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "ფაილის ზომა რომლის ატვირთვასაც თქვენ აპირებთ, აჭარბებს სერვერზე დაშვებულ მაქსიმუმს."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "მიმდინარეობს ფაილების სკანირება, გთხოვთ დაელოდოთ."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "მიმდინარე სკანირება"
 
diff --git a/l10n/ka_GE/settings.po b/l10n/ka_GE/settings.po
index 1b89539f14..fc613d4b9e 100644
--- a/l10n/ka_GE/settings.po
+++ b/l10n/ka_GE/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
 "MIME-Version: 1.0\n"
@@ -110,11 +110,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/km/core.po b/l10n/km/core.po
index 1ae42ef89f..437612ba9d 100644
--- a/l10n/km/core.po
+++ b/l10n/km/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Khmer (http://www.transifex.com/projects/p/owncloud/language/km/)\n"
 "MIME-Version: 1.0\n"
@@ -190,51 +190,51 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -262,6 +262,45 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/km/files.po b/l10n/km/files.po
index 286dded35f..a6b9b1775e 100644
--- a/l10n/km/files.po
+++ b/l10n/km/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-12 11:11+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Khmer (http://www.transifex.com/projects/p/owncloud/language/km/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,141 +90,145 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -229,7 +237,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -265,65 +273,65 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr ""
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/km/settings.po b/l10n/km/settings.po
index bf3b798590..c46c22d8be 100644
--- a/l10n/km/settings.po
+++ b/l10n/km/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Khmer (http://www.transifex.com/projects/p/owncloud/language/km/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/kn/core.po b/l10n/kn/core.po
index 3ee58ec531..c5dd4fc62e 100644
--- a/l10n/kn/core.po
+++ b/l10n/kn/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Kannada (http://www.transifex.com/projects/p/owncloud/language/kn/)\n"
 "MIME-Version: 1.0\n"
@@ -190,51 +190,51 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -262,6 +262,45 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/kn/files.po b/l10n/kn/files.po
index 59f02ce2c4..3297285e0e 100644
--- a/l10n/kn/files.po
+++ b/l10n/kn/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:31-0400\n"
-"PO-Revision-Date: 2013-08-30 13:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Kannada (http://www.transifex.com/projects/p/owncloud/language/kn/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,141 +90,145 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:275 js/file-upload.js:291 js/files.js:511 js/files.js:549
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:573
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:305
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:422 js/filelist.js:488 js/files.js:580
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 
-#: js/filelist.js:423 js/filelist.js:489 js/files.js:586
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 
-#: js/filelist.js:430
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:561
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 
-#: js/filelist.js:626
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:562 templates/index.php:67
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:563 templates/index.php:78
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:80
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -229,7 +237,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -265,65 +273,65 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:73
+#: templates/index.php:67
 msgid "Download"
 msgstr ""
 
-#: templates/index.php:85 templates/index.php:86
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:91 templates/index.php:92
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:105
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:107
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:112
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/kn/settings.po b/l10n/kn/settings.po
index d2cde9a883..21659f91a5 100644
--- a/l10n/kn/settings.po
+++ b/l10n/kn/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Kannada (http://www.transifex.com/projects/p/owncloud/language/kn/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/ko/core.po b/l10n/ko/core.po
index f1c6f8bdfc..b545b194b2 100644
--- a/l10n/ko/core.po
+++ b/l10n/ko/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
 "MIME-Version: 1.0\n"
@@ -192,51 +192,51 @@ msgstr "12월"
 msgid "Settings"
 msgstr "설정"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "초 전"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "%n분 전 "
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "%n시간 전 "
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "오늘"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "어제"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "%n일 전 "
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "지난 달"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "%n달 전 "
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "개월 전"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "작년"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "년 전"
 
@@ -264,6 +264,45 @@ msgstr "승락"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/ko/files.po b/l10n/ko/files.po
index 1ab0e4053a..b2497ad349 100644
--- a/l10n/ko/files.po
+++ b/l10n/ko/files.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
 "MIME-Version: 1.0\n"
@@ -76,11 +76,15 @@ msgstr "디스크에 쓰지 못했습니다"
 msgid "Not enough storage available"
 msgstr "저장소가 용량이 충분하지 않습니다."
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "업로드 실패"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "올바르지 않은 디렉터리입니다."
 
@@ -88,141 +92,145 @@ msgstr "올바르지 않은 디렉터리입니다."
 msgid "Files"
 msgstr "파일"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "디렉터리 및 빈 파일은 업로드할 수 없습니다"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "여유 공간이 부족합니다"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "업로드가 취소되었습니다."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL을 입력해야 합니다."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "오류"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "공유"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "영원히 삭제"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "이름 바꾸기"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "대기 중"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name}이(가) 이미 존재함"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "바꾸기"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "이름 제안"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "취소"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "{old_name}이(가) {new_name}(으)로 대체됨"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "되돌리기"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "파일 업로드중"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' 는 올바르지 않은 파일 이름 입니다."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "파일 이름이 비어 있을 수 없습니다."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "폴더 이름이 올바르지 않습니다. 이름에 문자 '\\', '/', '<', '>', ':', '\"', '|', '? ', '*'는 사용할 수 없습니다."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "저장 공간이 가득 찼습니다. 파일을 업데이트하거나 동기화할 수 없습니다!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "저장 공간이 거의 가득 찼습니다 ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "다운로드가 준비 중입니다. 파일 크기가 크다면 시간이 오래 걸릴 수도 있습니다."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "이름"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "크기"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "수정됨"
 
@@ -231,7 +239,7 @@ msgstr "수정됨"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "업로드"
 
@@ -267,65 +275,65 @@ msgstr "ZIP 파일 최대 크기"
 msgid "Save"
 msgstr "저장"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "새로 만들기"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "텍스트 파일"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "폴더"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "링크에서"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "파일 삭제됨"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "업로드 취소"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "당신은 여기에 쓰기를 할 수 있는 권한이 없습니다."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "내용이 없습니다. 업로드할 수 있습니다!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "다운로드"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "공유 해제"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "삭제"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "업로드한 파일이 너무 큼"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "이 파일이 서버에서 허용하는 최대 업로드 가능 용량보다 큽니다."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "파일을 검색하고 있습니다. 기다려 주십시오."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "현재 검색"
 
diff --git a/l10n/ko/settings.po b/l10n/ko/settings.po
index 2633c90f1f..8b3678ceec 100644
--- a/l10n/ko/settings.po
+++ b/l10n/ko/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
 "MIME-Version: 1.0\n"
@@ -110,11 +110,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/ku_IQ/core.po b/l10n/ku_IQ/core.po
index b1c2c88c0d..e29ae2d875 100644
--- a/l10n/ku_IQ/core.po
+++ b/l10n/ku_IQ/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr ""
 msgid "Settings"
 msgstr "ده‌ستكاری"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -266,6 +266,46 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/ku_IQ/files.po b/l10n/ku_IQ/files.po
index 99b5793ea0..9bb3b4faa5 100644
--- a/l10n/ku_IQ/files.po
+++ b/l10n/ku_IQ/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "ناونیشانی به‌سته‌ر نابێت به‌تاڵ بێت."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "هه‌ڵه"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "هاوبەشی کردن"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "ناو"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -232,7 +240,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "بارکردن"
 
@@ -268,65 +276,65 @@ msgstr ""
 msgid "Save"
 msgstr "پاشکه‌وتکردن"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "بوخچه"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "داگرتن"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/ku_IQ/settings.po b/l10n/ku_IQ/settings.po
index ac9ed94262..6ea9fd128b 100644
--- a/l10n/ku_IQ/settings.po
+++ b/l10n/ku_IQ/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/lb/core.po b/l10n/lb/core.po
index d3769f8267..d0e584ef60 100644
--- a/l10n/lb/core.po
+++ b/l10n/lb/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
 "MIME-Version: 1.0\n"
@@ -191,55 +191,55 @@ msgstr "Dezember"
 msgid "Settings"
 msgstr "Astellungen"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "Sekonnen hir"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "haut"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "gëschter"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "leschte Mount"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "Méint hir"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "Lescht Joer"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "Joren hir"
 
@@ -267,6 +267,46 @@ msgstr "OK"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/lb/files.po b/l10n/lb/files.po
index 94e9d24264..40727c4472 100644
--- a/l10n/lb/files.po
+++ b/l10n/lb/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr "Konnt net op den Disk schreiwen"
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr "Dateien"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Kann deng Datei net eroplueden well et en Dossier ass oder 0 byte grouss ass."
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Upload ofgebrach."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Fehler"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Deelen"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "ersetzen"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "ofbriechen"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "réckgängeg man"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Numm"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Gréisst"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Geännert"
 
@@ -232,7 +240,7 @@ msgstr "Geännert"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Eroplueden"
 
@@ -268,65 +276,65 @@ msgstr "Maximal Gréisst fir ZIP Fichieren"
 msgid "Save"
 msgstr "Späicheren"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Nei"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Text Fichier"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Dossier"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Upload ofbriechen"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Hei ass näischt. Lued eppes rop!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Download"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Net méi deelen"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Läschen"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Upload ze grouss"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Fichieren gi gescannt, war weg."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Momentane Scan"
 
diff --git a/l10n/lb/settings.po b/l10n/lb/settings.po
index 33639b80d3..d09ca81058 100644
--- a/l10n/lb/settings.po
+++ b/l10n/lb/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
 "MIME-Version: 1.0\n"
@@ -110,11 +110,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/lt_LT/core.po b/l10n/lt_LT/core.po
index 6c51d43a5d..87de0d1aaa 100644
--- a/l10n/lt_LT/core.po
+++ b/l10n/lt_LT/core.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 14:50+0000\n"
-"Last-Translator: Liudas Ališauskas <liudas.alisauskas@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -194,59 +194,59 @@ msgstr "Gruodis"
 msgid "Settings"
 msgstr "Nustatymai"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "prieš sekundę"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] " prieš %n minutę"
 msgstr[1] " prieš %n minučių"
 msgstr[2] " prieš %n minučių"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "prieš %n valandą"
 msgstr[1] "prieš %n valandų"
 msgstr[2] "prieš %n valandų"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "šiandien"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "vakar"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "prieš %n dieną"
 msgstr[1] "prieš %n dienas"
 msgstr[2] "prieš %n dienų"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "praeitą mėnesį"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "prieš %n mėnesį"
 msgstr[1] "prieš %n mėnesius"
 msgstr[2] "prieš %n mėnesių"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "prieš mėnesį"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "praeitais metais"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "prieš metus"
 
@@ -274,6 +274,47 @@ msgstr "Gerai"
 msgid "Error loading message template: {error}"
 msgstr "Klaida įkeliant žinutės ruošinį: {error}"
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/lt_LT/files.po b/l10n/lt_LT/files.po
index 13c09972ea..da69b0a419 100644
--- a/l10n/lt_LT/files.po
+++ b/l10n/lt_LT/files.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: Liudas Ališauskas <liudas.alisauskas@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -76,11 +76,15 @@ msgstr "Nepavyko įrašyti į diską"
 msgid "Not enough storage available"
 msgstr "Nepakanka vietos serveryje"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Nusiuntimas nepavyko"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Neteisingas aplankas"
 
@@ -88,147 +92,151 @@ msgstr "Neteisingas aplankas"
 msgid "Files"
 msgstr "Failai"
 
-#: js/file-upload.js:11
-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/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Nepakanka vietos"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Įkėlimas atšauktas."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL negali būti tuščias."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Negalimas aplanko pavadinimas. 'Shared' pavadinimas yra rezervuotas ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Klaida"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Dalintis"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Ištrinti negrįžtamai"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Pervadinti"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Laukiantis"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} jau egzistuoja"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "pakeisti"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "pasiūlyti pavadinimą"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "atšaukti"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "pakeiskite {new_name} į {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "anuliuoti"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n aplankas"
 msgstr[1] "%n aplankai"
 msgstr[2] "%n aplankų"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n failas"
 msgstr[1] "%n failai"
 msgstr[2] "%n failų"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} ir {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Įkeliamas %n failas"
 msgstr[1] "Įkeliami %n failai"
 msgstr[2] "Įkeliama %n failų"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "įkeliami failai"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' yra neleidžiamas failo pavadinime."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Failo pavadinimas negali būti tuščias."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Neleistinas pavadinimas, '\\', '/', '<', '>', ':', '\"', '|', '?' ir '*' yra neleidžiami."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Jūsų visa vieta serveryje užimta"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Jūsų vieta serveryje beveik visa užimta ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Šifravimas buvo išjungtas, bet Jūsų failai vis dar užšifruoti. Prašome eiti į asmeninius nustatymus ir iššifruoti savo failus."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Jūsų atsisiuntimas yra paruošiamas. tai gali užtrukti jei atsisiunčiamas didelis failas."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Pavadinimas"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Dydis"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Pakeista"
 
@@ -237,7 +245,7 @@ msgstr "Pakeista"
 msgid "%s could not be renamed"
 msgstr "%s negali būti pervadintas"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Įkelti"
 
@@ -273,65 +281,65 @@ msgstr "Maksimalus ZIP archyvo failo dydis"
 msgid "Save"
 msgstr "Išsaugoti"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Naujas"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Teksto failas"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Katalogas"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Iš nuorodos"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Ištrinti failai"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Atšaukti siuntimą"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Jūs neturite rašymo leidimo."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Čia tuščia. Įkelkite ką nors!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Atsisiųsti"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Nebesidalinti"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Ištrinti"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Įkėlimui failas per didelis"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Bandomų įkelti failų dydis viršija maksimalų, kuris leidžiamas šiame serveryje"
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Skenuojami failai, prašome palaukti."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Šiuo metu skenuojama"
 
diff --git a/l10n/lt_LT/settings.po b/l10n/lt_LT/settings.po
index d651f76275..14592409dd 100644
--- a/l10n/lt_LT/settings.po
+++ b/l10n/lt_LT/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
 "MIME-Version: 1.0\n"
@@ -113,11 +113,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/lv/core.po b/l10n/lv/core.po
index a0a14df889..b4f827bd08 100644
--- a/l10n/lv/core.po
+++ b/l10n/lv/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
 "MIME-Version: 1.0\n"
@@ -191,59 +191,59 @@ msgstr "Decembris"
 msgid "Settings"
 msgstr "Iestatījumi"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "sekundes atpakaļ"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "Tagad, %n minūtes"
 msgstr[1] "Pirms %n minūtes"
 msgstr[2] "Pirms %n minūtēm"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "Šodien, %n stundas"
 msgstr[1] "Pirms %n stundas"
 msgstr[2] "Pirms %n stundām"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "šodien"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "vakar"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "Šodien, %n dienas"
 msgstr[1] "Pirms %n dienas"
 msgstr[2] "Pirms %n dienām"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "pagājušajā mēnesī"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "Šomēnes, %n mēneši"
 msgstr[1] "Pirms %n mēneša"
 msgstr[2] "Pirms %n mēnešiem"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "mēnešus atpakaļ"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "gājušajā gadā"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "gadus atpakaļ"
 
@@ -271,6 +271,47 @@ msgstr "Labi"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/lv/files.po b/l10n/lv/files.po
index c173b6e331..c2bec93c45 100644
--- a/l10n/lv/files.po
+++ b/l10n/lv/files.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
 "MIME-Version: 1.0\n"
@@ -75,11 +75,15 @@ msgstr "Neizdevās saglabāt diskā"
 msgid "Not enough storage available"
 msgstr "Nav pietiekami daudz vietas"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Neizdevās augšupielādēt"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Nederīga direktorija."
 
@@ -87,147 +91,151 @@ msgstr "Nederīga direktorija."
 msgid "Files"
 msgstr "Datnes"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Nevar augšupielādēt jūsu datni, jo tā ir direktorija vai arī tā ir 0 baitu liela"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Nepietiek brīvas vietas"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Augšupielāde ir atcelta."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL nevar būt tukšs."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Kļūdains mapes nosaukums. 'Shared' lietošana ir rezervēta no ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Kļūda"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Dalīties"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Dzēst pavisam"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Pārsaukt"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Gaida savu kārtu"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} jau eksistē"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "aizvietot"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "ieteiktais nosaukums"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "atcelt"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "aizvietoja {new_name} ar {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "atsaukt"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n mapes"
 msgstr[1] "%n mape"
 msgstr[2] "%n mapes"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n faili"
 msgstr[1] "%n fails"
 msgstr[2] "%n faili"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "%n"
 msgstr[1] "Augšupielāde %n failu"
 msgstr[2] "Augšupielāde %n failus"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "fails augšupielādējas"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' ir nederīgs datnes nosaukums."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Datnes nosaukums nevar būt tukšs."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Nederīgs nosaukums, nav atļauti '\\', '/', '<', '>', ':', '\"', '|', '?' un '*'."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Jūsu krātuve ir pilna, datnes vairs nevar augšupielādēt vai sinhronizēt!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Jūsu krātuve ir gandrīz pilna ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Šifrēšana tika atslēgta, tomēr jūsu faili joprojām ir šifrēti. Atšifrēt failus var Personiskajos uzstādījumos."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Tiek sagatavota lejupielāde. Tas var aizņemt kādu laiciņu, ja datnes ir lielas."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nosaukums"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Izmērs"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Mainīts"
 
@@ -236,7 +244,7 @@ msgstr "Mainīts"
 msgid "%s could not be renamed"
 msgstr "%s nevar tikt pārsaukts"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Augšupielādēt"
 
@@ -272,65 +280,65 @@ msgstr "Maksimālais ievades izmērs ZIP datnēm"
 msgid "Save"
 msgstr "Saglabāt"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Jauna"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Teksta datne"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Mape"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "No saites"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Dzēstās datnes"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Atcelt augšupielādi"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Jums nav tiesību šeit rakstīt."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Te vēl nekas nav. Rīkojies, sāc augšupielādēt!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Lejupielādēt"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Pārtraukt dalīšanos"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Dzēst"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Datne ir par lielu, lai to augšupielādētu"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Augšupielādējamās datnes pārsniedz servera pieļaujamo datņu augšupielādes apjomu"
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Datnes šobrīd tiek caurskatītas, lūdzu, uzgaidiet."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Šobrīd tiek caurskatīts"
 
diff --git a/l10n/lv/settings.po b/l10n/lv/settings.po
index 9f3e95c717..68f2e3c4db 100644
--- a/l10n/lv/settings.po
+++ b/l10n/lv/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
 "MIME-Version: 1.0\n"
@@ -110,11 +110,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/mk/core.po b/l10n/mk/core.po
index 4adcd52cb6..94b36d5a9c 100644
--- a/l10n/mk/core.po
+++ b/l10n/mk/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr "Декември"
 msgid "Settings"
 msgstr "Подесувања"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "пред секунди"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "денеска"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "вчера"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "минатиот месец"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "пред месеци"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "минатата година"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "пред години"
 
@@ -266,6 +266,46 @@ msgstr "Во ред"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/mk/files.po b/l10n/mk/files.po
index 3d0602225b..a075f4d8f8 100644
--- a/l10n/mk/files.po
+++ b/l10n/mk/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr "Неуспеав да запишам на диск"
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr "Датотеки"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Не може да се преземе вашата датотека бидејќи фолдерот во кој се наоѓа фајлот има големина од 0 бајти"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Преземањето е прекинато."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Подигање на датотека е во тек. Напуштење на страницата ќе го прекине."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "Адресата неможе да биде празна."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Грешка"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Сподели"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Преименувај"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Чека"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} веќе постои"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "замени"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "предложи име"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "откажи"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "заменета {new_name} со {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "врати"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Неправилно име. , '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' не се дозволени."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Име"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Големина"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Променето"
 
@@ -232,7 +240,7 @@ msgstr "Променето"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Подигни"
 
@@ -268,65 +276,65 @@ msgstr "Максимална големина за внес на ZIP датот
 msgid "Save"
 msgstr "Сними"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Ново"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Текстуална датотека"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Папка"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Од врска"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Откажи прикачување"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Тука нема ништо. Снимете нешто!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Преземи"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Не споделувај"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Избриши"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Фајлот кој се вчитува е преголем"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Датотеките кои се обидувате да ги подигнете ја надминуваат максималната големина за подигнување датотеки на овој сервер."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Се скенираат датотеки, ве молам почекајте."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Моментално скенирам"
 
diff --git a/l10n/mk/settings.po b/l10n/mk/settings.po
index 78ab0823ab..d8573ecf00 100644
--- a/l10n/mk/settings.po
+++ b/l10n/mk/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/ml_IN/core.po b/l10n/ml_IN/core.po
index 18bc15e9ed..8e7523af26 100644
--- a/l10n/ml_IN/core.po
+++ b/l10n/ml_IN/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Malayalam (India) (http://www.transifex.com/projects/p/owncloud/language/ml_IN/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -266,6 +266,46 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/ml_IN/files.po b/l10n/ml_IN/files.po
index 6f1d3f841e..5a25ca3910 100644
--- a/l10n/ml_IN/files.po
+++ b/l10n/ml_IN/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:31-0400\n"
-"PO-Revision-Date: 2013-08-30 13:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Malayalam (India) (http://www.transifex.com/projects/p/owncloud/language/ml_IN/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:275 js/file-upload.js:291 js/files.js:511 js/files.js:549
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:573
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:305
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:422 js/filelist.js:488 js/files.js:580
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:423 js/filelist.js:489 js/files.js:586
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:430
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:561
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:626
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:562 templates/index.php:67
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:563 templates/index.php:78
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:80
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -232,7 +240,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -268,65 +276,65 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:73
+#: templates/index.php:67
 msgid "Download"
 msgstr ""
 
-#: templates/index.php:85 templates/index.php:86
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:91 templates/index.php:92
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:105
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:107
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:112
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/ml_IN/settings.po b/l10n/ml_IN/settings.po
index eacef25fc6..127decca79 100644
--- a/l10n/ml_IN/settings.po
+++ b/l10n/ml_IN/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Malayalam (India) (http://www.transifex.com/projects/p/owncloud/language/ml_IN/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/ms_MY/core.po b/l10n/ms_MY/core.po
index 18895df227..38457ad111 100644
--- a/l10n/ms_MY/core.po
+++ b/l10n/ms_MY/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
 "MIME-Version: 1.0\n"
@@ -190,51 +190,51 @@ msgstr "Disember"
 msgid "Settings"
 msgstr "Tetapan"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -262,6 +262,45 @@ msgstr "Ok"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/ms_MY/files.po b/l10n/ms_MY/files.po
index 27f7519e9d..05de8db4dc 100644
--- a/l10n/ms_MY/files.po
+++ b/l10n/ms_MY/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr "Gagal untuk disimpan"
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,141 +90,145 @@ msgstr ""
 msgid "Files"
 msgstr "Fail-fail"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Tidak boleh memuatnaik fail anda kerana mungkin ianya direktori atau saiz fail 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Muatnaik dibatalkan."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Ralat"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Kongsi"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Dalam proses"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "ganti"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "Batal"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nama"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Saiz"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Dimodifikasi"
 
@@ -229,7 +237,7 @@ msgstr "Dimodifikasi"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Muat naik"
 
@@ -265,65 +273,65 @@ msgstr "Saiz maksimum input untuk fail ZIP"
 msgid "Save"
 msgstr "Simpan"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Baru"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Fail teks"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Folder"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Batal muat naik"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Tiada apa-apa di sini. Muat naik sesuatu!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Muat turun"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Padam"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Muatnaik terlalu besar"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Fail yang cuba dimuat naik melebihi saiz maksimum fail upload server"
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Fail sedang diimbas, harap bersabar."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Imbasan semasa"
 
diff --git a/l10n/ms_MY/settings.po b/l10n/ms_MY/settings.po
index f4ab52b45c..c144cf2096 100644
--- a/l10n/ms_MY/settings.po
+++ b/l10n/ms_MY/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/my_MM/core.po b/l10n/my_MM/core.po
index 3732fcec7a..d66c528d96 100644
--- a/l10n/my_MM/core.po
+++ b/l10n/my_MM/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n"
 "MIME-Version: 1.0\n"
@@ -190,51 +190,51 @@ msgstr "ဒီဇင်ဘာ"
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "စက္ကန့်အနည်းငယ်က"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "ယနေ့"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "မနေ့က"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "ပြီးခဲ့သောလ"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "မနှစ်က"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "နှစ် အရင်က"
 
@@ -262,6 +262,45 @@ msgstr "အိုကေ"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/my_MM/files.po b/l10n/my_MM/files.po
index 65da5b1877..a143e19659 100644
--- a/l10n/my_MM/files.po
+++ b/l10n/my_MM/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:31-0400\n"
-"PO-Revision-Date: 2013-08-30 13:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,141 +90,145 @@ msgstr ""
 msgid "Files"
 msgstr "ဖိုင်များ"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:275 js/file-upload.js:291 js/files.js:511 js/files.js:549
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:573
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:305
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:422 js/filelist.js:488 js/files.js:580
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 
-#: js/filelist.js:423 js/filelist.js:489 js/files.js:586
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 
-#: js/filelist.js:430
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:561
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 
-#: js/filelist.js:626
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:562 templates/index.php:67
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:563 templates/index.php:78
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:80
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -229,7 +237,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -265,65 +273,65 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:73
+#: templates/index.php:67
 msgid "Download"
 msgstr "ဒေါင်းလုတ်"
 
-#: templates/index.php:85 templates/index.php:86
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:91 templates/index.php:92
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:105
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:107
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:112
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/my_MM/settings.po b/l10n/my_MM/settings.po
index f8cd38d9c5..144af1c421 100644
--- a/l10n/my_MM/settings.po
+++ b/l10n/my_MM/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/nb_NO/core.po b/l10n/nb_NO/core.po
index 74f64d6762..7d6a9bedeb 100644
--- a/l10n/nb_NO/core.po
+++ b/l10n/nb_NO/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -191,55 +191,55 @@ msgstr "Desember"
 msgid "Settings"
 msgstr "Innstillinger"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "sekunder siden"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "i dag"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "i går"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "forrige måned"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "måneder siden"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "forrige år"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "år siden"
 
@@ -267,6 +267,46 @@ msgstr "Ok"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/nb_NO/files.po b/l10n/nb_NO/files.po
index 318d4d445a..e5f3ebc6c8 100644
--- a/l10n/nb_NO/files.po
+++ b/l10n/nb_NO/files.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -77,11 +77,15 @@ msgstr "Klarte ikke å skrive til disk"
 msgid "Not enough storage available"
 msgstr "Ikke nok lagringsplass"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Opplasting feilet"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Ugyldig katalog."
 
@@ -89,144 +93,148 @@ msgstr "Ugyldig katalog."
 msgid "Files"
 msgstr "Filer"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Kan ikke laste opp filen din siden det er en mappe eller den har 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Ikke nok lagringsplass"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Opplasting avbrutt."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL-en kan ikke være tom."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Ugyldig mappenavn. Bruk av \"Shared\" er reservert av ownCloud."
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Feil"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Del"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Slett permanent"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Gi nytt navn"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Ventende"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} finnes allerede"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "erstatt"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "foreslå navn"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "avbryt"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "erstattet {new_name} med {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "angre"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n mappe"
 msgstr[1] "%n mapper"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n fil"
 msgstr[1] "%n filer"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Laster opp %n fil"
 msgstr[1] "Laster opp %n filer"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "filer lastes opp"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' er et ugyldig filnavn."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Filnavn kan ikke være tomt."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Ugyldig navn, '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' er ikke tillatt."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Lagringsplass er oppbrukt, filer kan ikke lenger oppdateres eller synkroniseres!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Lagringsplass er nesten brukt opp ([usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Nedlastingen din klargjøres. Hvis filene er store kan dette ta litt tid."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Navn"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Størrelse"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Endret"
 
@@ -235,7 +243,7 @@ msgstr "Endret"
 msgid "%s could not be renamed"
 msgstr "Kunne ikke gi nytt navn til %s"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Last opp"
 
@@ -271,65 +279,65 @@ msgstr "Maksimal størrelse på ZIP-filer"
 msgid "Save"
 msgstr "Lagre"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Ny"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Tekstfil"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Mappe"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Fra link"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Slettet filer"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Avbryt opplasting"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Du har ikke skrivetilgang her."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Ingenting her. Last opp noe!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Last ned"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Avslutt deling"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Slett"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Filen er for stor"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Filene du prøver å laste opp er for store for å laste opp til denne serveren."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Skanner filer, vennligst vent."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Pågående skanning"
 
diff --git a/l10n/nb_NO/settings.po b/l10n/nb_NO/settings.po
index 55c24f51b9..fe0d19856a 100644
--- a/l10n/nb_NO/settings.po
+++ b/l10n/nb_NO/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -111,11 +111,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/ne/core.po b/l10n/ne/core.po
index 10549b66ba..52425ae2ab 100644
--- a/l10n/ne/core.po
+++ b/l10n/ne/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Nepali (http://www.transifex.com/projects/p/owncloud/language/ne/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -266,6 +266,46 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/ne/files.po b/l10n/ne/files.po
index 16ee274737..99b4c54221 100644
--- a/l10n/ne/files.po
+++ b/l10n/ne/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:31-0400\n"
-"PO-Revision-Date: 2013-08-30 13:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Nepali (http://www.transifex.com/projects/p/owncloud/language/ne/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:275 js/file-upload.js:291 js/files.js:511 js/files.js:549
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:573
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:305
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:422 js/filelist.js:488 js/files.js:580
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:423 js/filelist.js:489 js/files.js:586
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:430
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:561
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:626
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:562 templates/index.php:67
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:563 templates/index.php:78
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:80
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -232,7 +240,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -268,65 +276,65 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:73
+#: templates/index.php:67
 msgid "Download"
 msgstr ""
 
-#: templates/index.php:85 templates/index.php:86
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:91 templates/index.php:92
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:105
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:107
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:112
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/ne/settings.po b/l10n/ne/settings.po
index 0a5f4dc015..855bab38ba 100644
--- a/l10n/ne/settings.po
+++ b/l10n/ne/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Nepali (http://www.transifex.com/projects/p/owncloud/language/ne/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/nl/core.po b/l10n/nl/core.po
index 42fe772e22..9b6abbaf29 100644
--- a/l10n/nl/core.po
+++ b/l10n/nl/core.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-17 13:05+0000\n"
-"Last-Translator: André Koot <meneer@tken.net>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -193,55 +193,55 @@ msgstr "december"
 msgid "Settings"
 msgstr "Instellingen"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "seconden geleden"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] "%n minuten geleden"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] "%n uur geleden"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "vandaag"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "gisteren"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] "%n dagen geleden"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "vorige maand"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] "%n maanden geleden"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "maanden geleden"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "vorig jaar"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "jaar geleden"
 
@@ -269,6 +269,46 @@ msgstr "Ok"
 msgid "Error loading message template: {error}"
 msgstr "Fout bij laden berichtensjabloon: {error}"
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/nl/files.po b/l10n/nl/files.po
index e8546df4ad..68d1ce8e06 100644
--- a/l10n/nl/files.po
+++ b/l10n/nl/files.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: kwillems <kwillems@zonnet.nl>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -76,11 +76,15 @@ msgstr "Schrijven naar schijf mislukt"
 msgid "Not enough storage available"
 msgstr "Niet genoeg opslagruimte beschikbaar"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Upload mislukt"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Ongeldige directory."
 
@@ -88,144 +92,148 @@ msgstr "Ongeldige directory."
 msgid "Files"
 msgstr "Bestanden"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Het lukt niet om uw bestand te uploaded, omdat het een folder of 0 bytes is"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Niet genoeg ruimte beschikbaar"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Uploaden geannuleerd."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL kan niet leeg zijn."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Ongeldige mapnaam. Gebruik van 'Gedeeld' is voorbehouden aan Owncloud zelf"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Fout"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Delen"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Verwijder definitief"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Hernoem"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "In behandeling"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} bestaat al"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "vervang"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "Stel een naam voor"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "annuleren"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "verving {new_name} met {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "ongedaan maken"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] "%n mappen"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] "%n bestanden"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} en {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "%n bestand aan het uploaden"
 msgstr[1] "%n bestanden aan het uploaden"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "bestanden aan het uploaden"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' is een ongeldige bestandsnaam."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Bestandsnaam kan niet leeg zijn."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Onjuiste naam; '\\', '/', '<', '>', ':', '\"', '|', '?' en '*' zijn niet toegestaan."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Uw opslagruimte zit vol, Bestanden kunnen niet meer worden ge-upload of gesynchroniseerd!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Uw opslagruimte zit bijna vol ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Encryptie is uitgeschakeld maar uw bestanden zijn nog steeds versleuteld. Ga naar uw persoonlijke instellingen om uw bestanden te decoderen."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Uw download wordt voorbereid. Dit kan enige tijd duren bij grote bestanden."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Naam"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Grootte"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Aangepast"
 
@@ -234,7 +242,7 @@ msgstr "Aangepast"
 msgid "%s could not be renamed"
 msgstr "%s kon niet worden hernoemd"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Uploaden"
 
@@ -270,65 +278,65 @@ msgstr "Maximale grootte voor ZIP bestanden"
 msgid "Save"
 msgstr "Bewaren"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Nieuw"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Tekstbestand"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Map"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Vanaf link"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Verwijderde bestanden"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Upload afbreken"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "U hebt hier geen schrijfpermissies."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Er bevindt zich hier niets. Upload een bestand!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Downloaden"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Stop met delen"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Verwijder"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Upload is te groot"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "De bestanden die u probeert te uploaden zijn groter dan de maximaal toegestane  bestandsgrootte voor deze server."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Bestanden worden gescand, even wachten."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Er wordt gescand"
 
diff --git a/l10n/nl/settings.po b/l10n/nl/settings.po
index 1baf2c7cab..68edba7080 100644
--- a/l10n/nl/settings.po
+++ b/l10n/nl/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
 "MIME-Version: 1.0\n"
@@ -113,11 +113,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/nn_NO/core.po b/l10n/nn_NO/core.po
index 87a27da4b8..42a5e395e0 100644
--- a/l10n/nn_NO/core.po
+++ b/l10n/nn_NO/core.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -193,55 +193,55 @@ msgstr "Desember"
 msgid "Settings"
 msgstr "Innstillingar"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "sekund sidan"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "%n minutt sidan"
 msgstr[1] "%n minutt sidan"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "%n time sidan"
 msgstr[1] "%n timar sidan"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "i dag"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "i går"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "%n dag sidan"
 msgstr[1] "%n dagar sidan"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "førre månad"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "%n månad sidan"
 msgstr[1] "%n månadar sidan"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "månadar sidan"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "i fjor"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "år sidan"
 
@@ -269,6 +269,46 @@ msgstr "Greitt"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/nn_NO/files.po b/l10n/nn_NO/files.po
index 049246c47e..0573ecf295 100644
--- a/l10n/nn_NO/files.po
+++ b/l10n/nn_NO/files.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: unhammer <unhammer+dill@mm.st>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -76,11 +76,15 @@ msgstr "Klarte ikkje skriva til disk"
 msgid "Not enough storage available"
 msgstr "Ikkje nok lagringsplass tilgjengeleg"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Feil ved opplasting"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Ugyldig mappe."
 
@@ -88,144 +92,148 @@ msgstr "Ugyldig mappe."
 msgid "Files"
 msgstr "Filer"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Klarte ikkje lasta opp fila sidan ho er ei mappe eller er på 0 byte"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Ikkje nok lagringsplass tilgjengeleg"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Opplasting avbroten."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Fila lastar no opp. Viss du forlèt sida no vil opplastinga verta avbroten."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "Nettadressa kan ikkje vera tom."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Ugyldig mappenamn. Mappa «Shared» er reservert av ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Feil"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Del"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Slett for godt"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Endra namn"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Under vegs"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} finst allereie"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "byt ut"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "føreslå namn"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "avbryt"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "bytte ut {new_name} med {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "angre"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n mappe"
 msgstr[1] "%n mapper"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n fil"
 msgstr[1] "%n filer"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} og {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Lastar opp %n fil"
 msgstr[1] "Lastar opp %n filer"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "filer lastar opp"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "«.» er eit ugyldig filnamn."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Filnamnet kan ikkje vera tomt."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Ugyldig namn, «\\», «/», «<», «>», «:», «\"», «|», «?» og «*» er ikkje tillate."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Lagringa di er full, kan ikkje lenger oppdatera eller synkronisera!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Lagringa di er nesten full ({usedSpacePercent} %)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Kryptering er skrudd av, men filene dine er enno krypterte. Du kan dekryptera filene i personlege innstillingar."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Gjer klar nedlastinga di. Dette kan ta ei stund viss filene er store."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Namn"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Storleik"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Endra"
 
@@ -234,7 +242,7 @@ msgstr "Endra"
 msgid "%s could not be renamed"
 msgstr "Klarte ikkje å omdøypa på %s"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Last opp"
 
@@ -270,65 +278,65 @@ msgstr "Maksimal storleik for ZIP-filer"
 msgid "Save"
 msgstr "Lagre"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Ny"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Tekst fil"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Mappe"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Frå lenkje"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Sletta filer"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Avbryt opplasting"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Du har ikkje skriverettar her."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Ingenting her. Last noko opp!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Last ned"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Udel"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Slett"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "For stor opplasting"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Filene du prøver å lasta opp er større enn maksgrensa til denne tenaren."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Skannar filer, ver venleg og vent."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Køyrande skanning"
 
diff --git a/l10n/nn_NO/settings.po b/l10n/nn_NO/settings.po
index 8fa98b0bea..6100216bbd 100644
--- a/l10n/nn_NO/settings.po
+++ b/l10n/nn_NO/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -112,11 +112,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/nqo/core.po b/l10n/nqo/core.po
index 27d872844d..e50801d30b 100644
--- a/l10n/nqo/core.po
+++ b/l10n/nqo/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: N'ko (http://www.transifex.com/projects/p/owncloud/language/nqo/)\n"
 "MIME-Version: 1.0\n"
@@ -190,51 +190,51 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -262,6 +262,45 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/nqo/files.po b/l10n/nqo/files.po
index ee3f40afbc..4749e89f26 100644
--- a/l10n/nqo/files.po
+++ b/l10n/nqo/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-07 04:39-0400\n"
-"PO-Revision-Date: 2013-09-07 07:28+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: N'ko (http://www.transifex.com/projects/p/owncloud/language/nqo/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,141 +90,145 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -229,7 +237,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -265,65 +273,65 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr ""
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/nqo/settings.po b/l10n/nqo/settings.po
index 4c9ef40f60..aafbac399b 100644
--- a/l10n/nqo/settings.po
+++ b/l10n/nqo/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: N'ko (http://www.transifex.com/projects/p/owncloud/language/nqo/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/oc/core.po b/l10n/oc/core.po
index 42aeba0c18..91003bba79 100644
--- a/l10n/oc/core.po
+++ b/l10n/oc/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr "Decembre"
 msgid "Settings"
 msgstr "Configuracion"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "segonda a"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "uèi"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "ièr"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "mes passat"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "meses  a"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "an passat"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "ans a"
 
@@ -266,6 +266,46 @@ msgstr "D'accòrdi"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/oc/files.po b/l10n/oc/files.po
index 1630f02255..df81825fe3 100644
--- a/l10n/oc/files.po
+++ b/l10n/oc/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr "L'escriptura sul disc a fracassat"
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr "Fichièrs"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Impossible d'amontcargar lo teu fichièr qu'es un repertòri o que ten pas que 0 octet."
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Amontcargar anullat."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. "
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Error"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Parteja"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Torna nomenar"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Al esperar"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "remplaça"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "nom prepausat"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "anulla"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "defar"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "fichièrs al amontcargar"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nom"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Talha"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Modificat"
 
@@ -232,7 +240,7 @@ msgstr "Modificat"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Amontcarga"
 
@@ -268,65 +276,65 @@ msgstr "Talha maximum de dintrada per fichièrs ZIP"
 msgid "Save"
 msgstr "Enregistra"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Nòu"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Fichièr de tèxte"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Dorsièr"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr " Anulla l'amontcargar"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Pas res dedins. Amontcarga qualquaren"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Avalcarga"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Pas partejador"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Escafa"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Amontcargament tròp gròs"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Los fichièrs que sias a amontcargar son tròp pesucs per la talha maxi pel servidor."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Los fiichièrs son a èsser explorats, "
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Exploracion en cors"
 
diff --git a/l10n/oc/settings.po b/l10n/oc/settings.po
index ed8d2ec20a..bd0c36692d 100644
--- a/l10n/oc/settings.po
+++ b/l10n/oc/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/pa/core.po b/l10n/pa/core.po
index 695b684902..a7fc0e1e13 100644
--- a/l10n/pa/core.po
+++ b/l10n/pa/core.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-17 13:14+0000\n"
-"Last-Translator: A S Alam <apreet.alam@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -191,55 +191,55 @@ msgstr "ਦਸੰਬਰ"
 msgid "Settings"
 msgstr "ਸੈਟਿੰਗ"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "ਸਕਿੰਟ ਪਹਿਲਾਂ"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "ਅੱਜ"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "ਕੱਲ੍ਹ"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "ਪਿਛਲੇ ਮਹੀਨੇ"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "ਮਹੀਨੇ ਪਹਿਲਾਂ"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "ਪਿਛਲੇ ਸਾਲ"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "ਸਾਲਾਂ ਪਹਿਲਾਂ"
 
@@ -267,6 +267,46 @@ msgstr "ਠੀਕ ਹੈ"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/pa/files.po b/l10n/pa/files.po
index 54e0656a99..93b8cdfacd 100644
--- a/l10n/pa/files.po
+++ b/l10n/pa/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:46-0400\n"
-"PO-Revision-Date: 2013-09-17 13:20+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "ਅੱਪਲੋਡ ਫੇਲ੍ਹ ਹੈ"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr "ਫਾਇਲਾਂ"
 
-#: js/file-upload.js:40
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:53
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:91
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:206
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:280
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:285 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:317 js/file-upload.js:333 js/files.js:528 js/files.js:566
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "ਗਲਤੀ"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "ਸਾਂਝਾ ਕਰੋ"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "ਨਾਂ ਬਦਲੋ"
 
-#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:710
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:417 js/filelist.js:419
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:417 js/filelist.js:419
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:417
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:417 js/filelist.js:419
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:464
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:464
+#: js/filelist.js:463
 msgid "undo"
 msgstr "ਵਾਪਸ"
 
-#: js/filelist.js:534 js/filelist.js:600 js/files.js:597
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:535 js/filelist.js:601 js/files.js:603
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:542
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:698
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:763
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:322
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:579 templates/index.php:61
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:580 templates/index.php:73
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:581 templates/index.php:75
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
diff --git a/l10n/pa/settings.po b/l10n/pa/settings.po
index 66a4588995..8095ea1076 100644
--- a/l10n/pa/settings.po
+++ b/l10n/pa/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
 "MIME-Version: 1.0\n"
@@ -110,11 +110,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/pl/core.po b/l10n/pl/core.po
index 7e3a4dd2ba..1e9839e6f6 100644
--- a/l10n/pl/core.po
+++ b/l10n/pl/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
 "MIME-Version: 1.0\n"
@@ -192,59 +192,59 @@ msgstr "Grudzień"
 msgid "Settings"
 msgstr "Ustawienia"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "sekund temu"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "%n minute temu"
 msgstr[1] "%n minut temu"
 msgstr[2] "%n minut temu"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "%n godzine temu"
 msgstr[1] "%n godzin temu"
 msgstr[2] "%n godzin temu"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "dziś"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "wczoraj"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "%n dzień temu"
 msgstr[1] "%n dni temu"
 msgstr[2] "%n dni temu"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "w zeszłym miesiącu"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "%n miesiąc temu"
 msgstr[1] "%n miesięcy temu"
 msgstr[2] "%n miesięcy temu"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "miesięcy temu"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "w zeszłym roku"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "lat temu"
 
@@ -272,6 +272,47 @@ msgstr "OK"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/pl/files.po b/l10n/pl/files.po
index 780faa39bc..b94335006b 100644
--- a/l10n/pl/files.po
+++ b/l10n/pl/files.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: Cyryl Sochacki <cyrylsochacki@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -77,11 +77,15 @@ msgstr "Błąd zapisu na dysk"
 msgid "Not enough storage available"
 msgstr "Za mało dostępnego miejsca"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Wysyłanie nie powiodło się"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Zła ścieżka."
 
@@ -89,147 +93,151 @@ msgstr "Zła ścieżka."
 msgid "Files"
 msgstr "Pliki"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Nie można wczytać pliku, ponieważ jest on katalogiem lub ma 0 bajtów"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Za mało miejsca"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Wczytywanie anulowane."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Wysyłanie pliku jest w toku. Jeśli opuścisz tę stronę, wysyłanie zostanie przerwane."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL nie może być pusty."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Nieprawidłowa nazwa folderu. Wykorzystanie 'Shared' jest zarezerwowane przez ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Błąd"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Udostępnij"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Trwale usuń"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Zmień nazwę"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Oczekujące"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} już istnieje"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "zastąp"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "zasugeruj nazwę"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "anuluj"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "zastąpiono {new_name} przez {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "cofnij"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n katalog"
 msgstr[1] "%n katalogi"
 msgstr[2] "%n katalogów"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n plik"
 msgstr[1] "%n pliki"
 msgstr[2] "%n plików"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{katalogi} and {pliki}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Wysyłanie %n pliku"
 msgstr[1] "Wysyłanie %n plików"
 msgstr[2] "Wysyłanie %n plików"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "pliki wczytane"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "„.” jest nieprawidłową nazwą pliku."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Nazwa pliku nie może być pusta."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Nieprawidłowa nazwa. Znaki '\\', '/', '<', '>', ':', '\"', '|', '?' oraz '*' są niedozwolone."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Magazyn jest pełny. Pliki nie mogą zostać zaktualizowane lub zsynchronizowane!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Twój magazyn jest prawie pełny ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Szyfrowanie zostało wyłączone, ale nadal pliki są zaszyfrowane. Przejdź do ustawień osobistych i tam odszyfruj pliki."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Pobieranie jest przygotowywane. Może to zająć trochę czasu jeśli pliki są duże."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nazwa"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Rozmiar"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Modyfikacja"
 
@@ -238,7 +246,7 @@ msgstr "Modyfikacja"
 msgid "%s could not be renamed"
 msgstr "%s nie można zmienić nazwy"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Wyślij"
 
@@ -274,65 +282,65 @@ msgstr "Maksymalna wielkość pliku wejściowego ZIP "
 msgid "Save"
 msgstr "Zapisz"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Nowy"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Plik tekstowy"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Folder"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Z odnośnika"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Pliki usunięte"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Anuluj wysyłanie"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Nie masz uprawnień do zapisu w tym miejscu."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Pusto. Wyślij coś!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Pobierz"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Zatrzymaj współdzielenie"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Usuń"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Ładowany plik jest za duży"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Pliki, które próbujesz przesłać, przekraczają maksymalną dopuszczalną wielkość."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Skanowanie plików, proszę czekać."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Aktualnie skanowane"
 
diff --git a/l10n/pl/settings.po b/l10n/pl/settings.po
index ae9f492421..5b5e435ef1 100644
--- a/l10n/pl/settings.po
+++ b/l10n/pl/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
 "MIME-Version: 1.0\n"
@@ -111,11 +111,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/pt_BR/core.po b/l10n/pt_BR/core.po
index ad96fabaeb..06857800f3 100644
--- a/l10n/pt_BR/core.po
+++ b/l10n/pt_BR/core.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-17 13:05+0000\n"
-"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -192,55 +192,55 @@ msgstr "dezembro"
 msgid "Settings"
 msgstr "Ajustes"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "segundos atrás"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] " ha %n minuto"
 msgstr[1] "ha %n minutos"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "ha %n hora"
 msgstr[1] "ha %n horas"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "hoje"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "ontem"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "ha %n dia"
 msgstr[1] "ha %n dias"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "último mês"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "ha %n mês"
 msgstr[1] "ha %n meses"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "meses atrás"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "último ano"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "anos atrás"
 
@@ -268,6 +268,46 @@ msgstr "Ok"
 msgid "Error loading message template: {error}"
 msgstr "Erro no carregamento de modelo de mensagem: {error}"
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/pt_BR/files.po b/l10n/pt_BR/files.po
index b38bee5e90..d9d4aaf18f 100644
--- a/l10n/pt_BR/files.po
+++ b/l10n/pt_BR/files.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -77,11 +77,15 @@ msgstr "Falha ao escrever no disco"
 msgid "Not enough storage available"
 msgstr "Espaço de armazenamento insuficiente"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Falha no envio"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Diretório inválido."
 
@@ -89,144 +93,148 @@ msgstr "Diretório inválido."
 msgid "Files"
 msgstr "Arquivos"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Impossível enviar seus arquivo por ele ser um diretório ou ter 0 bytes."
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Espaço de armazenamento insuficiente"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Envio cancelado."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Upload em andamento. Sair da página agora resultará no cancelamento do envio."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL não pode ficar em branco"
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Nome de pasta inválido. O uso do nome 'Compartilhado' é reservado ao ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Erro"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Compartilhar"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Excluir permanentemente"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Renomear"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Pendente"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} já existe"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "substituir"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "sugerir nome"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "cancelar"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "Substituído {old_name} por {new_name} "
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "desfazer"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n pasta"
 msgstr[1] "%n pastas"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n arquivo"
 msgstr[1] "%n arquivos"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} e {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Enviando %n arquivo"
 msgstr[1] "Enviando %n arquivos"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "enviando arquivos"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' é um nome de arquivo inválido."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "O nome do arquivo não pode estar vazio."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Nome inválido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Seu armazenamento está cheio, arquivos não podem mais ser atualizados ou sincronizados!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Seu armazenamento está quase cheio ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Encriptação foi desabilitada mas seus arquivos continuam encriptados. Por favor vá a suas configurações pessoais para descriptar seus arquivos."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Seu download está sendo preparado. Isto pode levar algum tempo se os arquivos forem grandes."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nome"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Tamanho"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Modificado"
 
@@ -235,7 +243,7 @@ msgstr "Modificado"
 msgid "%s could not be renamed"
 msgstr "%s não pode ser renomeado"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Upload"
 
@@ -271,65 +279,65 @@ msgstr "Tamanho máximo para arquivo ZIP"
 msgid "Save"
 msgstr "Guardar"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Novo"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Arquivo texto"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Pasta"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Do link"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Arquivos apagados"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Cancelar upload"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Você não possui permissão de escrita aqui."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Nada aqui.Carrege alguma coisa!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Baixar"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Descompartilhar"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Excluir"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Upload muito grande"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Os arquivos que você está tentando carregar excedeu o tamanho máximo para arquivos no servidor."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Arquivos sendo escaneados, por favor aguarde."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Scanning atual"
 
diff --git a/l10n/pt_BR/settings.po b/l10n/pt_BR/settings.po
index bfd40a0f93..c8608696d6 100644
--- a/l10n/pt_BR/settings.po
+++ b/l10n/pt_BR/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
@@ -88,36 +88,32 @@ msgstr "Não foi possível atualizar a app."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Senha errada"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "Nenhum usuário fornecido"
 
 #: changepassword/controller.php:74
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Por favor, forneça uma senha de recuperação admin, caso contrário todos os dados do usuário serão perdidos"
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "Senha de recuperação do administrador errada. Por favor verifique a senha e tente novamente."
 
 #: changepassword/controller.php:87
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
-
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
+msgstr "Back-end não suporta alteração de senha, mas a chave de criptografia de usuários foi atualizado com sucesso...."
 
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Impossível modificar senha"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
diff --git a/l10n/pt_PT/core.po b/l10n/pt_PT/core.po
index b355ad56e0..d0a28fbf40 100644
--- a/l10n/pt_PT/core.po
+++ b/l10n/pt_PT/core.po
@@ -6,13 +6,14 @@
 # Bruno Martins <bruno@bmartins.eu>, 2013
 # bmgmatias <bmgmatias@gmail.com>, 2013
 # Mouxy <daniel@mouxy.net>, 2013
+# Gontxi <goncalo.baiao@gmail.com>, 2013
 # Helder Meneses <helder.meneses@gmail.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
@@ -96,19 +97,19 @@ msgstr "Erro a remover %s dos favoritos."
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "Não foi selecionado nenhum ficheiro para importar"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Ficheiro desconhecido"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Imagem inválida"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "Foto temporária de perfil indisponível, tente novamente"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
@@ -194,55 +195,55 @@ msgstr "Dezembro"
 msgid "Settings"
 msgstr "Configurações"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "Minutos atrás"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "%n minuto atrás"
 msgstr[1] "%n minutos atrás"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "%n hora atrás"
 msgstr[1] "%n horas atrás"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "hoje"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "ontem"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "%n dia atrás"
 msgstr[1] "%n dias atrás"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "ultímo mês"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "%n mês atrás"
 msgstr[1] "%n meses atrás"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "meses atrás"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "ano passado"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "anos atrás"
 
@@ -268,6 +269,46 @@ msgstr "Ok"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
+msgstr "Erro ao carregar o template: {error}"
+
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
 msgstr ""
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
diff --git a/l10n/pt_PT/files.po b/l10n/pt_PT/files.po
index 7bd460d366..7a35987288 100644
--- a/l10n/pt_PT/files.po
+++ b/l10n/pt_PT/files.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: Helder Meneses <helder.meneses@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -77,11 +77,15 @@ msgstr "Falhou a escrita no disco"
 msgid "Not enough storage available"
 msgstr "Não há espaço suficiente em disco"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Carregamento falhou"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Directório Inválido"
 
@@ -89,144 +93,148 @@ msgstr "Directório Inválido"
 msgid "Files"
 msgstr "Ficheiros"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Não é possível fazer o envio do ficheiro devido a ser uma pasta ou ter 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Espaço em disco insuficiente!"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Envio cancelado."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Envio de ficheiro em progresso. Irá cancelar o envio se sair da página agora."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "O URL não pode estar vazio."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Nome da pasta inválido. Palavra 'Shared' é reservado pela ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Erro"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Partilhar"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Eliminar permanentemente"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Renomear"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Pendente"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "O nome {new_name} já existe"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "substituir"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "sugira um nome"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "cancelar"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "substituido {new_name} por {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "desfazer"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n pasta"
 msgstr[1] "%n pastas"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n ficheiro"
 msgstr[1] "%n ficheiros"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} e {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "A carregar %n ficheiro"
 msgstr[1] "A carregar %n ficheiros"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "A enviar os ficheiros"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' não é um nome de ficheiro válido!"
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "O nome do ficheiro não pode estar vazio."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Nome Inválido, os caracteres '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "O seu armazenamento está cheio, os ficheiros não podem ser sincronizados."
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "O seu espaço de armazenamento está quase cheiro ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "A encriptação foi desactivada mas os seus ficheiros continuam encriptados.  Por favor consulte as suas definições pessoais para desencriptar os ficheiros."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "O seu download está a ser preparado. Este processo pode demorar algum tempo se os ficheiros forem grandes."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nome"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Tamanho"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Modificado"
 
@@ -235,7 +243,7 @@ msgstr "Modificado"
 msgid "%s could not be renamed"
 msgstr "%s não pode ser renomeada"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Carregar"
 
@@ -271,65 +279,65 @@ msgstr "Tamanho máximo para ficheiros ZIP"
 msgid "Save"
 msgstr "Guardar"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Novo"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Ficheiro de texto"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Pasta"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Da ligação"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Ficheiros eliminados"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Cancelar envio"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Não tem permissões de escrita aqui."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Vazio. Envie alguma coisa!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Transferir"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Deixar de partilhar"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Eliminar"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Upload muito grande"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Os ficheiro que está a tentar enviar excedem o tamanho máximo de envio neste servidor."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Os ficheiros estão a ser analisados, por favor aguarde."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Análise actual"
 
diff --git a/l10n/pt_PT/lib.po b/l10n/pt_PT/lib.po
index a71bf02322..937940f957 100644
--- a/l10n/pt_PT/lib.po
+++ b/l10n/pt_PT/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-19 18:40+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
@@ -60,11 +60,11 @@ msgstr ""
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Ficheiro desconhecido"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Imagem inválida"
 
 #: defaults.php:35
 msgid "web services under your control"
@@ -165,15 +165,15 @@ msgstr "Erro na autenticação"
 msgid "Token expired. Please reload page."
 msgstr "O token expirou. Por favor recarregue a página."
 
-#: search/provider/file.php:17 search/provider/file.php:35
+#: search/provider/file.php:18 search/provider/file.php:36
 msgid "Files"
 msgstr "Ficheiros"
 
-#: search/provider/file.php:26 search/provider/file.php:33
+#: search/provider/file.php:27 search/provider/file.php:34
 msgid "Text"
 msgstr "Texto"
 
-#: search/provider/file.php:29
+#: search/provider/file.php:30
 msgid "Images"
 msgstr "Imagens"
 
diff --git a/l10n/pt_PT/settings.po b/l10n/pt_PT/settings.po
index 240d92edaf..f171929bbc 100644
--- a/l10n/pt_PT/settings.po
+++ b/l10n/pt_PT/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
@@ -113,11 +113,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
@@ -517,7 +513,7 @@ msgstr ""
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Abortar"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
diff --git a/l10n/ro/core.po b/l10n/ro/core.po
index 171346b912..db5393d90c 100644
--- a/l10n/ro/core.po
+++ b/l10n/ro/core.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
 "MIME-Version: 1.0\n"
@@ -194,59 +194,59 @@ msgstr "Decembrie"
 msgid "Settings"
 msgstr "Setări"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "secunde în urmă"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "astăzi"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "ieri"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "ultima lună"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "luni în urmă"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "ultimul an"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "ani în urmă"
 
@@ -274,6 +274,47 @@ msgstr "Ok"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/ro/files.po b/l10n/ro/files.po
index 0ac14ca3c9..e40c8605cf 100644
--- a/l10n/ro/files.po
+++ b/l10n/ro/files.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: inaina <ina.c.ina@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -78,11 +78,15 @@ msgstr "Eroare la scrierea discului"
 msgid "Not enough storage available"
 msgstr "Nu este suficient spațiu disponibil"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Încărcarea a eșuat"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "registru invalid."
 
@@ -90,147 +94,151 @@ msgstr "registru invalid."
 msgid "Files"
 msgstr "Fișiere"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "lista nu se poate incarca poate fi un fisier sau are 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Nu este suficient spațiu disponibil"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Încărcare anulată."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "Adresa URL nu poate fi golita"
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Nume de dosar invalid. Utilizarea 'Shared' e rezervată de ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Eroare"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "a imparti"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Stergere permanenta"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Redenumire"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "in timpul"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} deja exista"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "înlocuire"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "sugerează nume"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "anulare"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "{new_name} inlocuit cu {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "Anulează ultima acțiune"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "fișiere se încarcă"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' este un nume invalid de fișier."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Numele fișierului nu poate rămâne gol."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Nume invalide, '\\', '/', '<', '>', ':', '\"', '|', '?' si '*' nu sunt permise."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Spatiul de stocare este plin, fisierele nu mai pot fi actualizate sau sincronizate"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Spatiul de stocare este aproape plin {spatiu folosit}%"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "criptarea a fost disactivata dar fisierele sant inca criptate.va rog intrati in setarile personale pentru a decripta fisierele"
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "in curs de descarcare. Aceasta poate să dureze ceva timp dacă fișierele sunt mari."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Nume"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Dimensiune"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Modificat"
 
@@ -239,7 +247,7 @@ msgstr "Modificat"
 msgid "%s could not be renamed"
 msgstr "%s nu a putut fi redenumit"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Încărcare"
 
@@ -275,65 +283,65 @@ msgstr "Dimensiunea maximă de intrare pentru fișiere compresate"
 msgid "Save"
 msgstr "Salvează"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Nou"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "lista"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Dosar"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "de la adresa"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Sterge fisierele"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Anulează încărcarea"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Nu ai permisiunea de a scrie aici."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Nimic aici. Încarcă ceva!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Descarcă"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Anulare"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Șterge"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Fișierul încărcat este prea mare"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Fișierul care l-ai încărcat a depășită limita maximă admisă la încărcare pe acest server."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Fișierele sunt scanate, asteptati va rog"
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "În curs de scanare"
 
diff --git a/l10n/ro/settings.po b/l10n/ro/settings.po
index 1016778fe3..858e3cb2a1 100644
--- a/l10n/ro/settings.po
+++ b/l10n/ro/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
 "MIME-Version: 1.0\n"
@@ -110,11 +110,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/ru/core.po b/l10n/ru/core.po
index 1f90ed5e5e..6570bde063 100644
--- a/l10n/ru/core.po
+++ b/l10n/ru/core.po
@@ -7,6 +7,7 @@
 # lord93 <lordakryl@gmail.com>, 2013
 # foool <andrglad@mail.ru>, 2013
 # eurekafag <rkfg@rkfg.me>, 2013
+# sk.avenger <sk.avenger@adygnet.ru>, 2013
 # Victor Bravo <>, 2013
 # Vyacheslav Muranov <s@neola.ru>, 2013
 # Den4md <denstarr@mail.md>, 2013
@@ -15,8 +16,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
 "MIME-Version: 1.0\n"
@@ -44,15 +45,15 @@ msgstr ""
 
 #: ajax/update.php:17
 msgid "Updated database"
-msgstr ""
+msgstr "База данных обновлена"
 
 #: ajax/update.php:20
 msgid "Updating filecache, this may take really long..."
-msgstr ""
+msgstr "Обновление файлового кэша, это может занять некоторое время..."
 
 #: ajax/update.php:23
 msgid "Updated filecache"
-msgstr ""
+msgstr "Обновлен файловый кэш"
 
 #: ajax/update.php:26
 #, php-format
@@ -104,11 +105,11 @@ msgstr ""
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Неизвестный тип файла"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Изображение повреждено"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
@@ -198,59 +199,59 @@ msgstr "Декабрь"
 msgid "Settings"
 msgstr "Конфигурация"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "несколько секунд назад"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "%n минуту назад"
 msgstr[1] "%n минуты назад"
 msgstr[2] "%n минут назад"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "%n час назад"
 msgstr[1] "%n часа назад"
 msgstr[2] "%n часов назад"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "сегодня"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "вчера"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "%n день назад"
 msgstr[1] "%n дня назад"
 msgstr[2] "%n дней назад"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "в прошлом месяце"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "%n месяц назад"
 msgstr[1] "%n месяца назад"
 msgstr[2] "%n месяцев назад"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "несколько месяцев назад"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "в прошлом году"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "несколько лет назад"
 
@@ -278,6 +279,47 @@ msgstr "Ок"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
@@ -609,11 +651,11 @@ msgstr "будет использовано"
 
 #: templates/installation.php:140
 msgid "Database user"
-msgstr "Имя пользователя для базы данных"
+msgstr "Пользователь базы данных"
 
 #: templates/installation.php:147
 msgid "Database password"
-msgstr "Пароль для базы данных"
+msgstr "Пароль базы данных"
 
 #: templates/installation.php:152
 msgid "Database name"
diff --git a/l10n/ru/files.po b/l10n/ru/files.po
index 2db89c27da..bb956fc01c 100644
--- a/l10n/ru/files.po
+++ b/l10n/ru/files.po
@@ -6,14 +6,15 @@
 # lord93 <lordakryl@gmail.com>, 2013
 # eurekafag <rkfg@rkfg.me>, 2013
 # Victor Bravo <>, 2013
+# navigator666 <yuriy.malyovaniy@gmail.com>, 2013
 # hackproof <hackproof.ai@gmail.com>, 2013
 # Friktor <antonshramko@yandex.ru>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
 "MIME-Version: 1.0\n"
@@ -79,11 +80,15 @@ msgstr "Ошибка записи на диск"
 msgid "Not enough storage available"
 msgstr "Недостаточно доступного места в хранилище"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Ошибка загрузки"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Неправильный каталог."
 
@@ -91,147 +96,151 @@ msgstr "Неправильный каталог."
 msgid "Files"
 msgstr "Файлы"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Файл не был загружен: его размер 0 байт либо это не файл, а директория."
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Недостаточно свободного места"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Загрузка отменена."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Файл в процессе загрузки. Покинув страницу вы прервёте загрузку."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "Ссылка не может быть пустой."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Неправильное имя каталога. Имя 'Shared' зарезервировано."
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Ошибка"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Открыть доступ"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Удалено навсегда"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Переименовать"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Ожидание"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} уже существует"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "заменить"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "предложить название"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "отмена"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "заменено {new_name} на {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "отмена"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n папка"
 msgstr[1] "%n папки"
 msgstr[2] "%n папок"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n файл"
 msgstr[1] "%n файла"
 msgstr[2] "%n файлов"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
-msgstr ""
+msgstr "{dirs} и {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Закачка %n файла"
 msgstr[1] "Закачка %n файлов"
 msgstr[2] "Закачка %n файлов"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "файлы загружаются"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' - неправильное имя файла."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Имя файла не может быть пустым."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Неправильное имя, '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' недопустимы."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Ваше дисковое пространство полностью заполнено, произведите очистку перед загрузкой новых файлов."
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Ваше хранилище почти заполнено ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
-msgstr ""
+msgstr "Шифрование было отключено, но ваши файлы все еще зашифрованы. Пожалуйста, зайдите на страницу персональных настроек для того, чтобы расшифровать ваши файлы."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Загрузка началась. Это может потребовать много времени, если файл большого размера."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Имя"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Размер"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Изменён"
 
@@ -240,7 +249,7 @@ msgstr "Изменён"
 msgid "%s could not be renamed"
 msgstr "%s не может быть переименован"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Загрузка"
 
@@ -276,65 +285,65 @@ msgstr "Максимальный исходный размер для ZIP фай
 msgid "Save"
 msgstr "Сохранить"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Новый"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Текстовый файл"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Папка"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Из ссылки"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Удалённые файлы"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Отмена загрузки"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "У вас нет разрешений на запись здесь."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Здесь ничего нет. Загрузите что-нибудь!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Скачать"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Закрыть общий доступ"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Удалить"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Файл слишком велик"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Файлы, которые вы пытаетесь загрузить, превышают лимит для файлов на этом сервере."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Подождите, файлы сканируются."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Текущее сканирование"
 
diff --git a/l10n/ru/lib.po b/l10n/ru/lib.po
index 2f638c5bcd..0312034544 100644
--- a/l10n/ru/lib.po
+++ b/l10n/ru/lib.po
@@ -5,14 +5,16 @@
 # Translators:
 # Alexander Shashkevych <alex@stunpix.com>, 2013
 # eurekafag <rkfg@rkfg.me>, 2013
+# sk.avenger <sk.avenger@adygnet.ru>, 2013
+# navigator666 <yuriy.malyovaniy@gmail.com>, 2013
 # Friktor <antonshramko@yandex.ru>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 12:50+0000\n"
+"Last-Translator: sk.avenger <sk.avenger@adygnet.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"
@@ -25,11 +27,11 @@ msgstr ""
 msgid ""
 "App \"%s\" can't be installed because it is not compatible with this version"
 " of ownCloud."
-msgstr ""
+msgstr "Приложение \"%s\" нельзя установить, так как оно не совместимо с текущей версией ownCloud."
 
 #: app.php:250
 msgid "No app name specified"
-msgstr ""
+msgstr "Не выбрано имя приложения"
 
 #: app.php:361
 msgid "Help"
@@ -62,11 +64,11 @@ msgstr ""
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Неизвестный тип файла"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Изображение повреждено"
 
 #: defaults.php:35
 msgid "web services under your control"
@@ -101,38 +103,38 @@ msgstr "Загрузите файл маленьшими порциями, ра
 
 #: installer.php:63
 msgid "No source specified when installing app"
-msgstr ""
+msgstr "Не указан источник при установке приложения"
 
 #: installer.php:70
 msgid "No href specified when installing app from http"
-msgstr ""
+msgstr "Не указан атрибут href при установке приложения через http"
 
 #: installer.php:75
 msgid "No path specified when installing app from local file"
-msgstr ""
+msgstr "Не указан путь при установке приложения из локального файла"
 
 #: installer.php:89
 #, php-format
 msgid "Archives of type %s are not supported"
-msgstr ""
+msgstr "Архивы %s не поддерживаются"
 
 #: installer.php:103
 msgid "Failed to open archive when installing app"
-msgstr ""
+msgstr "Не возможно открыть архив при установке приложения"
 
 #: installer.php:125
 msgid "App does not provide an info.xml file"
-msgstr ""
+msgstr "Приложение не имеет файла info.xml"
 
 #: installer.php:131
 msgid "App can't be installed because of not allowed code in the App"
-msgstr ""
+msgstr "Приложение невозможно установить. В нем содержится запрещенный код."
 
 #: installer.php:140
 msgid ""
 "App can't be installed because it is not compatible with this version of "
 "ownCloud"
-msgstr ""
+msgstr "Приложение невозможно установить. Не совместимо с текущей версией ownCloud."
 
 #: installer.php:146
 msgid ""
@@ -148,7 +150,7 @@ msgstr ""
 
 #: installer.php:162
 msgid "App directory already exists"
-msgstr ""
+msgstr "Папка приложения уже существует"
 
 #: installer.php:175
 #, php-format
@@ -167,15 +169,15 @@ msgstr "Ошибка аутентификации"
 msgid "Token expired. Please reload page."
 msgstr "Токен просрочен. Перезагрузите страницу."
 
-#: search/provider/file.php:17 search/provider/file.php:35
+#: search/provider/file.php:18 search/provider/file.php:36
 msgid "Files"
 msgstr "Файлы"
 
-#: search/provider/file.php:26 search/provider/file.php:33
+#: search/provider/file.php:27 search/provider/file.php:34
 msgid "Text"
 msgstr "Текст"
 
-#: search/provider/file.php:29
+#: search/provider/file.php:30
 msgid "Images"
 msgstr "Изображения"
 
diff --git a/l10n/ru/settings.po b/l10n/ru/settings.po
index edaeaf1932..e70eab1bd4 100644
--- a/l10n/ru/settings.po
+++ b/l10n/ru/settings.po
@@ -8,14 +8,15 @@
 # alfsoft <alfsoft@gmail.com>, 2013
 # lord93 <lordakryl@gmail.com>, 2013
 # eurekafag <rkfg@rkfg.me>, 2013
+# navigator666 <yuriy.malyovaniy@gmail.com>, 2013
 # hackproof <hackproof.ai@gmail.com>, 2013
 # Friktor <antonshramko@yandex.ru>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
 "MIME-Version: 1.0\n"
@@ -93,7 +94,7 @@ msgstr "Невозможно обновить приложение"
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Неправильный пароль"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
@@ -108,7 +109,7 @@ msgstr ""
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "Неправильный пароль восстановления. Проверьте пароль и попробуйте еще раз."
 
 #: changepassword/controller.php:87
 msgid ""
@@ -116,13 +117,9 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Невозможно изменить пароль"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
@@ -142,11 +139,11 @@ msgstr "Подождите..."
 
 #: js/apps.js:79 js/apps.js:80 js/apps.js:100
 msgid "Error while disabling app"
-msgstr ""
+msgstr "Ошибка отключения приложения"
 
 #: js/apps.js:99 js/apps.js:112 js/apps.js:113
 msgid "Error while enabling app"
-msgstr ""
+msgstr "Ошибка включения приложения"
 
 #: js/apps.js:123
 msgid "Updating...."
@@ -170,7 +167,7 @@ msgstr "Обновлено"
 
 #: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Выберите картинку профиля"
 
 #: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
@@ -504,27 +501,27 @@ msgstr "Фото профиля"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Закачать новую"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Выберите новый из файлов"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Удалить изображение"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Либо png, либо jpg. Изображение должно быть квадратным, но вы сможете обрезать его позже."
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Отмена"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Выберите изображение профиля"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
@@ -551,15 +548,15 @@ msgstr "Шифрование"
 
 #: templates/personal.php:140
 msgid "The encryption app is no longer enabled, decrypt all your file"
-msgstr ""
+msgstr "Приложение шифрования не активно, отмените шифрование всех ваших файлов."
 
 #: templates/personal.php:146
 msgid "Log-in password"
-msgstr ""
+msgstr "Пароль входа"
 
 #: templates/personal.php:151
 msgid "Decrypt all Files"
-msgstr ""
+msgstr "Снять шифрование со всех файлов"
 
 #: templates/users.php:21
 msgid "Login Name"
diff --git a/l10n/ru/user_ldap.po b/l10n/ru/user_ldap.po
index b231595c2f..a454bfc58e 100644
--- a/l10n/ru/user_ldap.po
+++ b/l10n/ru/user_ldap.po
@@ -6,13 +6,14 @@
 # Alexander Shashkevych <alex@stunpix.com>, 2013
 # Fenuks <fenuksuh@ya.ru>, 2013
 # alfsoft <alfsoft@gmail.com>, 2013
+# navigator666 <yuriy.malyovaniy@gmail.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-07 04:40-0400\n"
-"PO-Revision-Date: 2013-09-05 11:51+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 08:20+0000\n"
+"Last-Translator: navigator666 <yuriy.malyovaniy@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"
@@ -216,7 +217,7 @@ msgstr "Отключение главного сервера"
 
 #: templates/settings.php:72
 msgid "Only connect to the replica server."
-msgstr ""
+msgstr "Только подключение к серверу реплик."
 
 #: templates/settings.php:73
 msgid "Use TLS"
@@ -259,7 +260,7 @@ msgstr "Поле отображаемого имени пользователя"
 
 #: templates/settings.php:80
 msgid "The LDAP attribute to use to generate the user's display name."
-msgstr ""
+msgstr "Атрибут LDAP, который используется для генерации отображаемого имени пользователя."
 
 #: templates/settings.php:81
 msgid "Base User Tree"
@@ -283,7 +284,7 @@ msgstr "Поле отображаемого имени группы"
 
 #: templates/settings.php:83
 msgid "The LDAP attribute to use to generate the groups's display name."
-msgstr ""
+msgstr "Атрибут LDAP, который используется для генерации отображаемого имени группы."
 
 #: templates/settings.php:84
 msgid "Base Group Tree"
diff --git a/l10n/si_LK/core.po b/l10n/si_LK/core.po
index a83cde1f4e..0bd8e5d646 100644
--- a/l10n/si_LK/core.po
+++ b/l10n/si_LK/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr "දෙසැම්බර්"
 msgid "Settings"
 msgstr "සිටුවම්"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "තත්පරයන්ට පෙර"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "අද"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "ඊයේ"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "පෙර මාසයේ"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "මාස කීපයකට පෙර"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "පෙර අවුරුද්දේ"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "අවුරුදු කීපයකට පෙර"
 
@@ -266,6 +266,46 @@ msgstr "හරි"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/si_LK/files.po b/l10n/si_LK/files.po
index 00c7fd92b1..6a62c6c1ea 100644
--- a/l10n/si_LK/files.po
+++ b/l10n/si_LK/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr "තැටිගත කිරීම අසාර්ථකයි"
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "උඩුගත කිරීම අසාර්ථකයි"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr "ගොනු"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "උඩුගත කිරීම අත් හරින්න ලදී"
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "උඩුගතකිරීමක් සිදුවේ. පිටුව හැර යාමෙන් එය නැවතෙනු ඇත"
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "යොමුව හිස් විය නොහැක"
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "දෝෂයක්"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "බෙදා හදා ගන්න"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "නැවත නම් කරන්න"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "ප්‍රතිස්ථාපනය කරන්න"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "නමක් යෝජනා කරන්න"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "අත් හරින්න"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "නිෂ්ප්‍රභ කරන්න"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "නම"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "ප්‍රමාණය"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "වෙනස් කළ"
 
@@ -232,7 +240,7 @@ msgstr "වෙනස් කළ"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "උඩුගත කරන්න"
 
@@ -268,65 +276,65 @@ msgstr "ZIP ගොනු සඳහා දැමිය හැකි උපරි
 msgid "Save"
 msgstr "සුරකින්න"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "නව"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "පෙළ ගොනුව"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "ෆෝල්ඩරය"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "යොමුවෙන්"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "උඩුගත කිරීම අත් හරින්න"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "මෙහි කිසිවක් නොමැත. යමක් උඩුගත කරන්න"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "බාන්න"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "නොබෙදු"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "මකා දමන්න"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "උඩුගත කිරීම විශාල වැඩිය"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "ඔබ උඩුගත කිරීමට තැත් කරන ගොනු මෙම සේවාදායකයා උඩුගත කිරීමට ඉඩදී ඇති උපරිම ගොනු විශාලත්වයට වඩා වැඩිය"
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "ගොනු පරික්ෂා කෙරේ. මඳක් රැඳී සිටින්න"
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "වර්තමාන පරික්ෂාව"
 
diff --git a/l10n/si_LK/settings.po b/l10n/si_LK/settings.po
index 78e5accf9e..dede6a46ee 100644
--- a/l10n/si_LK/settings.po
+++ b/l10n/si_LK/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/sk/core.po b/l10n/sk/core.po
index 0d0fc7e389..6970d1b3c7 100644
--- a/l10n/sk/core.po
+++ b/l10n/sk/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
 "MIME-Version: 1.0\n"
@@ -190,59 +190,59 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -270,6 +270,47 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/sk/files.po b/l10n/sk/files.po
index 17be34bd16..070448f726 100644
--- a/l10n/sk/files.po
+++ b/l10n/sk/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:31-0400\n"
-"PO-Revision-Date: 2013-08-30 13:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,147 +90,151 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:275 js/file-upload.js:291 js/files.js:511 js/files.js:549
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:573
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:305
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:422 js/filelist.js:488 js/files.js:580
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:423 js/filelist.js:489 js/files.js:586
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:430
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:561
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:626
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:562 templates/index.php:67
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:563 templates/index.php:78
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:80
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -235,7 +243,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -271,65 +279,65 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:73
+#: templates/index.php:67
 msgid "Download"
 msgstr ""
 
-#: templates/index.php:85 templates/index.php:86
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:91 templates/index.php:92
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:105
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:107
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:112
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/sk/settings.po b/l10n/sk/settings.po
index de97d238d7..864614817b 100644
--- a/l10n/sk/settings.po
+++ b/l10n/sk/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/sk_SK/core.po b/l10n/sk_SK/core.po
index d1abe24db2..22b868c88e 100644
--- a/l10n/sk_SK/core.po
+++ b/l10n/sk_SK/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
 "MIME-Version: 1.0\n"
@@ -192,59 +192,59 @@ msgstr "December"
 msgid "Settings"
 msgstr "Nastavenia"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "pred sekundami"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "pred %n minútou"
 msgstr[1] "pred %n minútami"
 msgstr[2] "pred %n minútami"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "pred %n hodinou"
 msgstr[1] "pred %n hodinami"
 msgstr[2] "pred %n hodinami"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "dnes"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "včera"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "pred %n dňom"
 msgstr[1] "pred %n dňami"
 msgstr[2] "pred %n dňami"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "minulý mesiac"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "pred %n mesiacom"
 msgstr[1] "pred %n mesiacmi"
 msgstr[2] "pred %n mesiacmi"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "pred mesiacmi"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "minulý rok"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "pred rokmi"
 
@@ -272,6 +272,47 @@ msgstr "Ok"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/sk_SK/files.po b/l10n/sk_SK/files.po
index 13b2c321e8..fd554f6c97 100644
--- a/l10n/sk_SK/files.po
+++ b/l10n/sk_SK/files.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
 "MIME-Version: 1.0\n"
@@ -75,11 +75,15 @@ msgstr "Zápis na disk sa nepodaril"
 msgid "Not enough storage available"
 msgstr "Nedostatok dostupného úložného priestoru"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Odoslanie bolo neúspešné"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Neplatný priečinok."
 
@@ -87,147 +91,151 @@ msgstr "Neplatný priečinok."
 msgid "Files"
 msgstr "Súbory"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Nedá sa odoslať Váš súbor, pretože je to priečinok, alebo je jeho veľkosť 0 bajtov"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Nie je k dispozícii dostatok miesta"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Odosielanie zrušené."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Opustenie stránky zruší práve prebiehajúce odosielanie súboru."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL nemôže byť prázdne."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Neplatný názov priečinka. Názov \"Shared\" je rezervovaný pre ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Chyba"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Zdieľať"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Zmazať  trvalo"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Premenovať"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Prebieha"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} už existuje"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "nahradiť"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "pomôcť s menom"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "zrušiť"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "prepísaný {new_name} súborom {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "vrátiť"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n priečinok"
 msgstr[1] "%n priečinky"
 msgstr[2] "%n priečinkov"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n súbor"
 msgstr[1] "%n súbory"
 msgstr[2] "%n súborov"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Nahrávam %n súbor"
 msgstr[1] "Nahrávam %n súbory"
 msgstr[2] "Nahrávam %n súborov"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "nahrávanie súborov"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' je neplatné meno súboru."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Meno súboru nemôže byť prázdne"
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Nesprávne meno, '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nie sú povolené hodnoty."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Vaše úložisko je plné. Súbory nemožno aktualizovať ani synchronizovať!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Vaše úložisko je takmer plné ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Šifrovanie bolo zakázané, ale vaše súbory sú stále zašifrované. Prosím, choďte do osobného nastavenia pre dešifrovanie súborov."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Vaše sťahovanie sa pripravuje. Ak sú sťahované súbory veľké, môže to chvíľu trvať."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Názov"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Veľkosť"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Upravené"
 
@@ -236,7 +244,7 @@ msgstr "Upravené"
 msgid "%s could not be renamed"
 msgstr "%s nemohol byť premenovaný"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Odoslať"
 
@@ -272,65 +280,65 @@ msgstr "Najväčšia veľkosť ZIP súborov"
 msgid "Save"
 msgstr "Uložiť"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Nová"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Textový súbor"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Priečinok"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Z odkazu"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Zmazané súbory"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Zrušiť odosielanie"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Nemáte oprávnenie na zápis."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Žiadny súbor. Nahrajte niečo!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Sťahovanie"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Zrušiť zdieľanie"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Zmazať"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Nahrávanie je príliš veľké"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Čakajte, súbory sú prehľadávané."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Práve prezerané"
 
diff --git a/l10n/sk_SK/settings.po b/l10n/sk_SK/settings.po
index 000abca08a..961d19a242 100644
--- a/l10n/sk_SK/settings.po
+++ b/l10n/sk_SK/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
 "MIME-Version: 1.0\n"
@@ -111,11 +111,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/sl/core.po b/l10n/sl/core.po
index 5df1c0fa5c..d67d119a51 100644
--- a/l10n/sl/core.po
+++ b/l10n/sl/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
 "MIME-Version: 1.0\n"
@@ -192,11 +192,11 @@ msgstr "december"
 msgid "Settings"
 msgstr "Nastavitve"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "pred nekaj sekundami"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
@@ -204,7 +204,7 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
@@ -212,15 +212,15 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "danes"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "včeraj"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
@@ -228,11 +228,11 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "zadnji mesec"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
@@ -240,15 +240,15 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "mesecev nazaj"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "lansko leto"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "let nazaj"
 
@@ -276,6 +276,48 @@ msgstr "V redu"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/sl/files.po b/l10n/sl/files.po
index 6b461d6107..d8dee234cc 100644
--- a/l10n/sl/files.po
+++ b/l10n/sl/files.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
 "MIME-Version: 1.0\n"
@@ -75,11 +75,15 @@ msgstr "Pisanje na disk je spodletelo"
 msgid "Not enough storage available"
 msgstr "Na voljo ni dovolj prostora"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Pošiljanje je spodletelo"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Neveljavna mapa."
 
@@ -87,76 +91,80 @@ msgstr "Neveljavna mapa."
 msgid "Files"
 msgstr "Datoteke"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Pošiljanja ni mogoče izvesti, saj gre za mapo oziroma datoteko velikosti 0 bajtov."
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Na voljo ni dovolj prostora."
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Pošiljanje je preklicano."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "Naslov URL ne sme biti prazna vrednost."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Ime mape je neveljavno. Uporaba oznake \"Souporaba\" je rezervirana za ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Napaka"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Souporaba"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Izbriši dokončno"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Preimenuj"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "V čakanju ..."
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} že obstaja"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "zamenjaj"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "predlagaj ime"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "prekliči"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "preimenovano ime {new_name} z imenom {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "razveljavi"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
@@ -164,7 +172,7 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
@@ -172,11 +180,11 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
@@ -184,53 +192,53 @@ msgstr[1] ""
 msgstr[2] ""
 msgstr[3] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "poteka pošiljanje datotek"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' je neveljavno ime datoteke."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Ime datoteke ne sme biti prazno polje."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Neveljavno ime, znaki '\\', '/', '<', '>', ':', '\"', '|', '?' in '*' niso dovoljeni."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Shramba je povsem napolnjena. Datotek ni več mogoče posodabljati in usklajevati!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Mesto za shranjevanje je skoraj polno ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Postopek priprave datoteke za prejem je lahko dolgotrajen, če je datoteka zelo velika."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Ime"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Velikost"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Spremenjeno"
 
@@ -239,7 +247,7 @@ msgstr "Spremenjeno"
 msgid "%s could not be renamed"
 msgstr "%s ni bilo mogoče preimenovati"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Pošlji"
 
@@ -275,65 +283,65 @@ msgstr "Največja vhodna velikost za datoteke ZIP"
 msgid "Save"
 msgstr "Shrani"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Novo"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Besedilna datoteka"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Mapa"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Iz povezave"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Izbrisane datoteke"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Prekliči pošiljanje"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Za to mesto ni ustreznih dovoljenj za pisanje."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Tukaj še ni ničesar. Najprej je treba kakšno datoteko poslati v oblak!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Prejmi"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Prekliči souporabo"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Izbriši"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Prekoračenje omejitve velikosti"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Datoteke, ki jih želite poslati, presegajo največjo dovoljeno velikost na strežniku."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Poteka preučevanje datotek, počakajte ..."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Trenutno poteka preučevanje"
 
diff --git a/l10n/sl/settings.po b/l10n/sl/settings.po
index 4a2acfea74..dd0437a4bd 100644
--- a/l10n/sl/settings.po
+++ b/l10n/sl/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
 "MIME-Version: 1.0\n"
@@ -111,11 +111,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/sq/core.po b/l10n/sq/core.po
index d87486309e..249f4fdcad 100644
--- a/l10n/sq/core.po
+++ b/l10n/sq/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Albanian (http://www.transifex.com/projects/p/owncloud/language/sq/)\n"
 "MIME-Version: 1.0\n"
@@ -192,55 +192,55 @@ msgstr "Dhjetor"
 msgid "Settings"
 msgstr "Parametra"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "sekonda më parë"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "%n minut më parë"
 msgstr[1] "%n minuta më parë"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "%n orë më parë"
 msgstr[1] "%n orë më parë"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "sot"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "dje"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "%n ditë më parë"
 msgstr[1] "%n ditë më parë"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "muajin e shkuar"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "%n muaj më parë"
 msgstr[1] "%n muaj më parë"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "muaj më parë"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "vitin e shkuar"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "vite më parë"
 
@@ -268,6 +268,46 @@ msgstr "Në rregull"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/sq/files.po b/l10n/sq/files.po
index 3bf0e4962c..a5b9a669e2 100644
--- a/l10n/sq/files.po
+++ b/l10n/sq/files.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: Odeen <rapid_odeen@zoho.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Albanian (http://www.transifex.com/projects/p/owncloud/language/sq/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -75,11 +75,15 @@ msgstr "Ruajtja në disk dështoi"
 msgid "Not enough storage available"
 msgstr "Nuk ka mbetur hapësirë memorizimi e mjaftueshme"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Ngarkimi dështoi"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Dosje e pavlefshme."
 
@@ -87,144 +91,148 @@ msgstr "Dosje e pavlefshme."
 msgid "Files"
 msgstr "Skedarët"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Nuk është i mundur ngarkimi i skedarit tuaj sepse është dosje ose ka dimension 0 byte"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Nuk ka hapësirë memorizimi e mjaftueshme"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Ngarkimi u anulua."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Ngarkimi i skedarit është në vazhdim. Nqse ndërroni faqen tani ngarkimi do të anulohet."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL-i nuk mund të jetë bosh."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Emri i dosjes është i pavlefshëm. Përdorimi i \"Shared\" është i rezervuar nga Owncloud-i"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Veprim i gabuar"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Nda"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Elimino përfundimisht"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Riemërto"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Pezulluar"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} ekziston"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "zëvëndëso"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "sugjero një emër"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "anulo"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "U zëvëndësua {new_name} me {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "anulo"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n dosje"
 msgstr[1] "%n dosje"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n skedar"
 msgstr[1] "%n skedarë"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} dhe {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Po ngarkoj %n skedar"
 msgstr[1] "Po ngarkoj %n skedarë"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "po ngarkoj skedarët"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' është emër i pavlefshëm."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Emri i skedarit nuk mund të jetë bosh."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Emër i pavlefshëm, '\\', '/', '<', '>', ':', '\"', '|', '?' dhe '*' nuk lejohen."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Hapësira juaj e memorizimit është plot, nuk mund të ngarkoni apo sinkronizoni më skedarët."
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Hapësira juaj e memorizimit është gati plot ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Kodifikimi u çaktivizua por skedarët tuaj vazhdojnë të jenë të kodifikuar. Ju lutem shkoni tek parametrat personale për të dekodifikuar skedarët tuaj."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Shkarkimi juaj po përgatitet. Mund të duhet pak kohë nqse skedarët janë të mëdhenj."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Emri"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Dimensioni"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Modifikuar"
 
@@ -233,7 +241,7 @@ msgstr "Modifikuar"
 msgid "%s could not be renamed"
 msgstr "Nuk është i mundur riemërtimi i %s"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Ngarko"
 
@@ -269,65 +277,65 @@ msgstr "Dimensioni maksimal i ngarkimit të skedarëve ZIP"
 msgid "Save"
 msgstr "Ruaj"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "I ri"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Skedar teksti"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Dosje"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Nga lidhja"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Skedarë të eliminuar"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Anulo ngarkimin"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Nuk keni të drejta për të shkruar këtu."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Këtu nuk ka asgjë. Ngarkoni diçka!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Shkarko"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Hiq ndarjen"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Elimino"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Ngarkimi është shumë i madh"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Skedarët që doni të ngarkoni tejkalojnë dimensionet maksimale për ngarkimet në këtë server."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Skedarët po analizohen, ju lutemi pritni."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Analizimi aktual"
 
diff --git a/l10n/sq/settings.po b/l10n/sq/settings.po
index 05680ab5d7..033a815c20 100644
--- a/l10n/sq/settings.po
+++ b/l10n/sq/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Albanian (http://www.transifex.com/projects/p/owncloud/language/sq/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/sr/core.po b/l10n/sr/core.po
index c146f275ab..6c29c2d9de 100644
--- a/l10n/sr/core.po
+++ b/l10n/sr/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
 "MIME-Version: 1.0\n"
@@ -190,59 +190,59 @@ msgstr "Децембар"
 msgid "Settings"
 msgstr "Поставке"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "пре неколико секунди"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "данас"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "јуче"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "прошлог месеца"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "месеци раније"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "прошле године"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "година раније"
 
@@ -270,6 +270,47 @@ msgstr "У реду"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/sr/files.po b/l10n/sr/files.po
index 31dda625a6..58518b339b 100644
--- a/l10n/sr/files.po
+++ b/l10n/sr/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr "Не могу да пишем на диск"
 msgid "Not enough storage available"
 msgstr "Нема довољно простора"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Отпремање није успело"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "неисправна фасцикла."
 
@@ -86,147 +90,151 @@ msgstr "неисправна фасцикла."
 msgid "Files"
 msgstr "Датотеке"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Не могу да отпремим датотеку као фасциклу или она има 0 бајтова"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Нема довољно простора"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Отпремање је прекинуто."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Отпремање датотеке је у току. Ако сада напустите страницу, прекинућете отпремање."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "Адреса не може бити празна."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Грешка"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Дели"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Обриши за стално"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Преименуј"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "На чекању"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} већ постоји"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "замени"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "предложи назив"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "откажи"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "замењено {new_name} са {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "опозови"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "датотеке се отпремају"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "Датотека „.“ је неисправног имена."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Име датотеке не може бити празно."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Неисправан назив. Следећи знакови нису дозвољени: \\, /, <, >, :, \", |, ? и *."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Ваше складиште је пуно. Датотеке више не могу бити ажуриране ни синхронизоване."
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Ваше складиште је скоро па пуно ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Припремам преузимање. Ово може да потраје ако су датотеке велике."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Име"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Величина"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Измењено"
 
@@ -235,7 +243,7 @@ msgstr "Измењено"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Отпреми"
 
@@ -271,65 +279,65 @@ msgstr "Највећа величина ZIP датотека"
 msgid "Save"
 msgstr "Сачувај"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Нова"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "текстуална датотека"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "фасцикла"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Са везе"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Обрисане датотеке"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Прекини отпремање"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Овде немате дозволу за писање."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Овде нема ничег. Отпремите нешто!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Преузми"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Укини дељење"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Обриши"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Датотека је превелика"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Датотеке које желите да отпремите прелазе ограничење у величини."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Скенирам датотеке…"
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Тренутно скенирање"
 
diff --git a/l10n/sr/settings.po b/l10n/sr/settings.po
index ba7da173f2..ee77f11fb6 100644
--- a/l10n/sr/settings.po
+++ b/l10n/sr/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/sr@latin/core.po b/l10n/sr@latin/core.po
index 89721e4a20..6fc014eedf 100644
--- a/l10n/sr@latin/core.po
+++ b/l10n/sr@latin/core.po
@@ -3,12 +3,13 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# lemi667 <lemi667@gmail.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
 "MIME-Version: 1.0\n"
@@ -53,42 +54,42 @@ msgstr ""
 
 #: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
 msgid "Category type not provided."
-msgstr ""
+msgstr "Tip kategorije nije zadan."
 
 #: ajax/vcategories/add.php:30
 msgid "No category to add?"
-msgstr ""
+msgstr "Bez dodavanja kategorije?"
 
 #: ajax/vcategories/add.php:37
 #, php-format
 msgid "This category already exists: %s"
-msgstr ""
+msgstr "Kategorija već postoji: %s"
 
 #: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
 #: ajax/vcategories/favorites.php:24
 #: ajax/vcategories/removeFromFavorites.php:26
 msgid "Object type not provided."
-msgstr ""
+msgstr "Tip objekta nije zadan."
 
 #: ajax/vcategories/addToFavorites.php:30
 #: ajax/vcategories/removeFromFavorites.php:30
 #, php-format
 msgid "%s ID not provided."
-msgstr ""
+msgstr "%s ID nije zadan."
 
 #: ajax/vcategories/addToFavorites.php:35
 #, php-format
 msgid "Error adding %s to favorites."
-msgstr ""
+msgstr "Greška u dodavanju %s u omiljeno."
 
 #: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136
 msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Kategorije za brisanje nisu izabrane."
 
 #: ajax/vcategories/removeFromFavorites.php:35
 #, php-format
 msgid "Error removing %s from favorites."
-msgstr ""
+msgstr "Greška u uklanjanju %s iz omiljeno."
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
@@ -190,65 +191,65 @@ msgstr "Decembar"
 msgid "Settings"
 msgstr "Podešavanja"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
-msgstr ""
+msgstr "Pre par sekundi"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
-msgstr ""
+msgstr "Danas"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
-msgstr ""
+msgstr "juče"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
-msgstr ""
+msgstr "prošlog meseca"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
-msgstr ""
+msgstr "pre nekoliko meseci"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
-msgstr ""
+msgstr "prošle godine"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
-msgstr ""
+msgstr "pre nekoliko godina"
 
 #: js/oc-dialogs.js:123
 msgid "Choose"
-msgstr ""
+msgstr "Izaberi"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
@@ -256,24 +257,65 @@ msgstr ""
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
-msgstr ""
+msgstr "Da"
 
 #: js/oc-dialogs.js:182
 msgid "No"
-msgstr ""
+msgstr "Ne"
 
 #: js/oc-dialogs.js:199
 msgid "Ok"
-msgstr ""
+msgstr "Ok"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
-msgstr ""
+msgstr "Tip objekta nije zadan."
 
 #: js/oc-vcategories.js:14 js/oc-vcategories.js:80 js/oc-vcategories.js:95
 #: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
@@ -281,55 +323,55 @@ msgstr ""
 #: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
 #: js/share.js:645 js/share.js:657
 msgid "Error"
-msgstr ""
+msgstr "Greška"
 
 #: js/oc-vcategories.js:179
 msgid "The app name is not specified."
-msgstr ""
+msgstr "Ime aplikacije nije precizirano."
 
 #: js/oc-vcategories.js:194
 msgid "The required file {file} is not installed!"
-msgstr ""
+msgstr "Potreban fajl {file} nije instaliran!"
 
 #: js/share.js:30 js/share.js:45 js/share.js:87
 msgid "Shared"
-msgstr ""
+msgstr "Deljeno"
 
 #: js/share.js:90
 msgid "Share"
-msgstr ""
+msgstr "Podeli"
 
 #: js/share.js:131 js/share.js:685
 msgid "Error while sharing"
-msgstr ""
+msgstr "Greška pri deljenju"
 
 #: js/share.js:142
 msgid "Error while unsharing"
-msgstr ""
+msgstr "Greška u uklanjanju deljenja"
 
 #: js/share.js:149
 msgid "Error while changing permissions"
-msgstr ""
+msgstr "Greška u promeni dozvola"
 
 #: js/share.js:158
 msgid "Shared with you and the group {group} by {owner}"
-msgstr ""
+msgstr "{owner} podelio sa Vama i grupom {group} "
 
 #: js/share.js:160
 msgid "Shared with you by {owner}"
-msgstr ""
+msgstr "Sa vama podelio {owner}"
 
 #: js/share.js:183
 msgid "Share with"
-msgstr ""
+msgstr "Podeli sa"
 
 #: js/share.js:188
 msgid "Share with link"
-msgstr ""
+msgstr "Podeli koristei link"
 
 #: js/share.js:191
 msgid "Password protect"
-msgstr ""
+msgstr "Zaštita lozinkom"
 
 #: js/share.js:193 templates/installation.php:57 templates/login.php:26
 msgid "Password"
@@ -341,94 +383,94 @@ msgstr ""
 
 #: js/share.js:202
 msgid "Email link to person"
-msgstr ""
+msgstr "Pošalji link e-mailom"
 
 #: js/share.js:203
 msgid "Send"
-msgstr ""
+msgstr "Pošalji"
 
 #: js/share.js:208
 msgid "Set expiration date"
-msgstr ""
+msgstr "Datum isteka"
 
 #: js/share.js:209
 msgid "Expiration date"
-msgstr ""
+msgstr "Datum isteka"
 
 #: js/share.js:242
 msgid "Share via email:"
-msgstr ""
+msgstr "Deli putem e-maila"
 
 #: js/share.js:245
 msgid "No people found"
-msgstr ""
+msgstr "Nema pronađenih ljudi"
 
 #: js/share.js:283
 msgid "Resharing is not allowed"
-msgstr ""
+msgstr "Dalje deljenje nije dozvoljeno"
 
 #: js/share.js:319
 msgid "Shared in {item} with {user}"
-msgstr ""
+msgstr "Deljeno u {item} sa {user}"
 
 #: js/share.js:340
 msgid "Unshare"
-msgstr ""
+msgstr "Ukljoni deljenje"
 
 #: js/share.js:352
 msgid "can edit"
-msgstr ""
+msgstr "dozvoljene izmene"
 
 #: js/share.js:354
 msgid "access control"
-msgstr ""
+msgstr "kontrola pristupa"
 
 #: js/share.js:357
 msgid "create"
-msgstr ""
+msgstr "napravi"
 
 #: js/share.js:360
 msgid "update"
-msgstr ""
+msgstr "ažuriranje"
 
 #: js/share.js:363
 msgid "delete"
-msgstr ""
+msgstr "brisanje"
 
 #: js/share.js:366
 msgid "share"
-msgstr ""
+msgstr "deljenje"
 
 #: js/share.js:400 js/share.js:632
 msgid "Password protected"
-msgstr ""
+msgstr "Zaštćeno lozinkom"
 
 #: js/share.js:645
 msgid "Error unsetting expiration date"
-msgstr ""
+msgstr "Greška u uklanjanju datuma isteka"
 
 #: js/share.js:657
 msgid "Error setting expiration date"
-msgstr ""
+msgstr "Greška u postavljanju datuma isteka"
 
 #: js/share.js:672
 msgid "Sending ..."
-msgstr ""
+msgstr "Slanje..."
 
 #: js/share.js:683
 msgid "Email sent"
-msgstr ""
+msgstr "Email poslat"
 
 #: js/update.js:17
 msgid ""
 "The update was unsuccessful. Please report this issue to the <a "
 "href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
 "community</a>."
-msgstr ""
+msgstr "Ažuriranje nije uspelo. Molimo obavestite <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud zajednicu</a>."
 
 #: js/update.js:21
 msgid "The update was successful. Redirecting you to ownCloud now."
-msgstr ""
+msgstr "Ažuriranje je uspelo. Prosleđivanje na ownCloud."
 
 #: lostpassword/controller.php:62
 #, php-format
@@ -437,7 +479,7 @@ msgstr ""
 
 #: lostpassword/templates/email.php:2
 msgid "Use the following link to reset your password: {link}"
-msgstr ""
+msgstr "Koristite sledeći link za reset lozinke: {link}"
 
 #: lostpassword/templates/lostpassword.php:4
 msgid ""
@@ -481,7 +523,7 @@ msgstr "Vaša lozinka je resetovana"
 
 #: lostpassword/templates/resetpassword.php:5
 msgid "To login page"
-msgstr ""
+msgstr "Na login stranicu"
 
 #: lostpassword/templates/resetpassword.php:8
 msgid "New password"
@@ -513,7 +555,7 @@ msgstr "Pomoć"
 
 #: templates/403.php:12
 msgid "Access forbidden"
-msgstr ""
+msgstr "Pristup zabranjen"
 
 #: templates/404.php:15
 msgid "Cloud not found"
@@ -532,20 +574,20 @@ msgstr ""
 
 #: templates/edit_categories_dialog.php:4
 msgid "Edit categories"
-msgstr ""
+msgstr "Izmena kategorija"
 
 #: templates/edit_categories_dialog.php:16
 msgid "Add"
-msgstr ""
+msgstr "Dodaj"
 
 #: templates/installation.php:24 templates/installation.php:31
 #: templates/installation.php:38
 msgid "Security Warning"
-msgstr ""
+msgstr "Bezbednosno upozorenje"
 
 #: templates/installation.php:25
 msgid "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)"
-msgstr ""
+msgstr "Vaša PHP verzija je ranjiva na "
 
 #: templates/installation.php:26
 #, php-format
@@ -556,19 +598,19 @@ msgstr ""
 msgid ""
 "No secure random number generator is available, please enable the PHP "
 "OpenSSL extension."
-msgstr ""
+msgstr "Nije dostupan generator slučajnog broja, molimo omogućite PHP OpenSSL ekstenziju."
 
 #: templates/installation.php:33
 msgid ""
 "Without a secure random number generator an attacker may be able to predict "
 "password reset tokens and take over your account."
-msgstr ""
+msgstr "Bez generatora slučajnog broja napadač može predvideti token za reset lozinke i preuzeti Vaš nalog."
 
 #: templates/installation.php:39
 msgid ""
 "Your data directory and files are probably accessible from the internet "
 "because the .htaccess file does not work."
-msgstr ""
+msgstr "Vaši podaci i direktorijumi su verovatno dostupni sa interneta jer .htaccess fajl ne funkcioniše."
 
 #: templates/installation.php:41
 #, php-format
@@ -587,7 +629,7 @@ msgstr "Napredno"
 
 #: templates/installation.php:67
 msgid "Data folder"
-msgstr "Facikla podataka"
+msgstr "Fascikla podataka"
 
 #: templates/installation.php:77
 msgid "Configure the database"
@@ -613,7 +655,7 @@ msgstr "Ime baze"
 
 #: templates/installation.php:160
 msgid "Database tablespace"
-msgstr ""
+msgstr "tablespace baze"
 
 #: templates/installation.php:167
 msgid "Database host"
@@ -634,7 +676,7 @@ msgstr "Odjava"
 
 #: templates/login.php:9
 msgid "Automatic logon rejected!"
-msgstr ""
+msgstr "Automatsko logovanje odbijeno!"
 
 #: templates/login.php:10
 msgid ""
diff --git a/l10n/sr@latin/files.po b/l10n/sr@latin/files.po
index c1b281b797..72c25ecb2e 100644
--- a/l10n/sr@latin/files.po
+++ b/l10n/sr@latin/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,147 +90,151 @@ msgstr ""
 msgid "Files"
 msgstr "Fajlovi"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
-msgstr ""
+msgstr "Greška"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
-msgstr ""
+msgstr "Podeli"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Ime"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Veličina"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Zadnja izmena"
 
@@ -235,7 +243,7 @@ msgstr "Zadnja izmena"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Pošalji"
 
@@ -271,65 +279,65 @@ msgstr ""
 msgid "Save"
 msgstr "Snimi"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Ovde nema ničeg. Pošaljite nešto!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Preuzmi"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
-msgstr ""
+msgstr "Ukljoni deljenje"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Obriši"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Pošiljka je prevelika"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Fajlovi koje želite da pošaljete prevazilaze ograničenje maksimalne veličine pošiljke na ovom serveru."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/sr@latin/files_trashbin.po b/l10n/sr@latin/files_trashbin.po
index f1524d3b93..0c52072bba 100644
--- a/l10n/sr@latin/files_trashbin.po
+++ b/l10n/sr@latin/files_trashbin.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-15 04:47-0400\n"
-"PO-Revision-Date: 2013-08-15 08:48+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 07:30+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
 "MIME-Version: 1.0\n"
@@ -27,45 +27,45 @@ msgstr ""
 msgid "Couldn't restore %s"
 msgstr ""
 
-#: js/trash.js:7 js/trash.js:100
+#: js/trash.js:7 js/trash.js:102
 msgid "perform restore operation"
 msgstr ""
 
-#: js/trash.js:20 js/trash.js:48 js/trash.js:118 js/trash.js:146
+#: js/trash.js:20 js/trash.js:49 js/trash.js:120 js/trash.js:148
 msgid "Error"
-msgstr ""
+msgstr "Greška"
 
-#: js/trash.js:36
+#: js/trash.js:37
 msgid "delete file permanently"
 msgstr ""
 
-#: js/trash.js:127
+#: js/trash.js:129
 msgid "Delete permanently"
 msgstr ""
 
-#: js/trash.js:182 templates/index.php:17
+#: js/trash.js:190 templates/index.php:21
 msgid "Name"
 msgstr "Ime"
 
-#: js/trash.js:183 templates/index.php:27
+#: js/trash.js:191 templates/index.php:31
 msgid "Deleted"
 msgstr ""
 
-#: js/trash.js:191
+#: js/trash.js:199
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/trash.js:197
+#: js/trash.js:205
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: lib/trash.php:819 lib/trash.php:821
+#: lib/trash.php:814 lib/trash.php:816
 msgid "restored"
 msgstr ""
 
@@ -73,11 +73,11 @@ msgstr ""
 msgid "Nothing in here. Your trash bin is empty!"
 msgstr ""
 
-#: templates/index.php:20 templates/index.php:22
+#: templates/index.php:24 templates/index.php:26
 msgid "Restore"
 msgstr ""
 
-#: templates/index.php:30 templates/index.php:31
+#: templates/index.php:34 templates/index.php:35
 msgid "Delete"
 msgstr "Obriši"
 
diff --git a/l10n/sr@latin/lib.po b/l10n/sr@latin/lib.po
index 6af1411e01..afa426b476 100644
--- a/l10n/sr@latin/lib.po
+++ b/l10n/sr@latin/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 07:30+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
 "MIME-Version: 1.0\n"
@@ -164,15 +164,15 @@ msgstr "Greška pri autentifikaciji"
 msgid "Token expired. Please reload page."
 msgstr ""
 
-#: search/provider/file.php:17 search/provider/file.php:35
+#: search/provider/file.php:18 search/provider/file.php:36
 msgid "Files"
 msgstr "Fajlovi"
 
-#: search/provider/file.php:26 search/provider/file.php:33
+#: search/provider/file.php:27 search/provider/file.php:34
 msgid "Text"
 msgstr "Tekst"
 
-#: search/provider/file.php:29
+#: search/provider/file.php:30
 msgid "Images"
 msgstr ""
 
@@ -278,7 +278,7 @@ msgstr ""
 
 #: template/functions.php:96
 msgid "seconds ago"
-msgstr ""
+msgstr "Pre par sekundi"
 
 #: template/functions.php:97
 msgid "%n minute ago"
@@ -296,11 +296,11 @@ msgstr[2] ""
 
 #: template/functions.php:99
 msgid "today"
-msgstr ""
+msgstr "Danas"
 
 #: template/functions.php:100
 msgid "yesterday"
-msgstr ""
+msgstr "juče"
 
 #: template/functions.php:101
 msgid "%n day go"
@@ -311,7 +311,7 @@ msgstr[2] ""
 
 #: template/functions.php:102
 msgid "last month"
-msgstr ""
+msgstr "prošlog meseca"
 
 #: template/functions.php:103
 msgid "%n month ago"
@@ -322,11 +322,11 @@ msgstr[2] ""
 
 #: template/functions.php:104
 msgid "last year"
-msgstr ""
+msgstr "prošle godine"
 
 #: template/functions.php:105
 msgid "years ago"
-msgstr ""
+msgstr "pre nekoliko godina"
 
 #: template.php:297
 msgid "Caused by:"
diff --git a/l10n/sr@latin/settings.po b/l10n/sr@latin/settings.po
index 28437f33e6..eaddf7af11 100644
--- a/l10n/sr@latin/settings.po
+++ b/l10n/sr@latin/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
@@ -151,7 +147,7 @@ msgstr ""
 
 #: js/apps.js:126
 msgid "Error"
-msgstr ""
+msgstr "Greška"
 
 #: js/apps.js:127 templates/apps.php:43
 msgid "Update"
@@ -220,7 +216,7 @@ msgstr ""
 
 #: templates/admin.php:15
 msgid "Security Warning"
-msgstr ""
+msgstr "Bezbednosno upozorenje"
 
 #: templates/admin.php:18
 msgid ""
diff --git a/l10n/sr@latin/user_ldap.po b/l10n/sr@latin/user_ldap.po
index cdb427f5c8..32f10400a2 100644
--- a/l10n/sr@latin/user_ldap.po
+++ b/l10n/sr@latin/user_ldap.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-07 04:40-0400\n"
-"PO-Revision-Date: 2013-09-05 11:51+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 07:30+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
 "MIME-Version: 1.0\n"
@@ -67,7 +67,7 @@ msgstr ""
 
 #: js/settings.js:117
 msgid "Error"
-msgstr ""
+msgstr "Greška"
 
 #: js/settings.js:141
 msgid "Connection test succeeded"
diff --git a/l10n/sv/core.po b/l10n/sv/core.po
index 4ed86320a2..84b71673c3 100644
--- a/l10n/sv/core.po
+++ b/l10n/sv/core.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
 "MIME-Version: 1.0\n"
@@ -194,55 +194,55 @@ msgstr "December"
 msgid "Settings"
 msgstr "Inställningar"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "sekunder sedan"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "%n minut sedan"
 msgstr[1] "%n minuter sedan"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "%n timme sedan"
 msgstr[1] "%n timmar sedan"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "i dag"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "i går"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "%n dag sedan"
 msgstr[1] "%n dagar sedan"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "förra månaden"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "%n månad sedan"
 msgstr[1] "%n månader sedan"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "månader sedan"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "förra året"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "år sedan"
 
@@ -270,6 +270,46 @@ msgstr "Ok"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/sv/files.po b/l10n/sv/files.po
index 6b498778cf..3fe12b46d5 100644
--- a/l10n/sv/files.po
+++ b/l10n/sv/files.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: Magnus Höglund <magnus@linux.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -78,11 +78,15 @@ msgstr "Misslyckades spara till disk"
 msgid "Not enough storage available"
 msgstr "Inte tillräckligt med lagringsutrymme tillgängligt"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Misslyckad uppladdning"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Felaktig mapp."
 
@@ -90,144 +94,148 @@ msgstr "Felaktig mapp."
 msgid "Files"
 msgstr "Filer"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Kan inte ladda upp din fil eftersom det är en katalog eller har 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Inte tillräckligt med utrymme tillgängligt"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Uppladdning avbruten."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL kan inte vara tom."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Ogiltigt mappnamn. Användning av 'Shared' är reserverad av ownCloud"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Fel"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Dela"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Radera permanent"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Byt namn"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Väntar"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} finns redan"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "ersätt"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "föreslå namn"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "avbryt"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "ersatt {new_name} med {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "ångra"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n mapp"
 msgstr[1] "%n mappar"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n fil"
 msgstr[1] "%n filer"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} och {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "Laddar upp %n fil"
 msgstr[1] "Laddar upp %n filer"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "filer laddas upp"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' är ett ogiltigt filnamn."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Filnamn kan inte vara tomt."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte tillåtet."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Ditt lagringsutrymme är fullt, filer kan inte längre uppdateras eller synkroniseras!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Ditt lagringsutrymme är nästan fullt ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Kryptering inaktiverades men dina filer är fortfarande krypterade. Vänligen gå till sidan för dina personliga inställningar för att dekryptera dina filer."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Din nedladdning förbereds. Det kan ta tid om det är stora filer."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Namn"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Storlek"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Ändrad"
 
@@ -236,7 +244,7 @@ msgstr "Ändrad"
 msgid "%s could not be renamed"
 msgstr "%s kunde inte namnändras"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Ladda upp"
 
@@ -272,65 +280,65 @@ msgstr "Största tillåtna storlek för ZIP-filer"
 msgid "Save"
 msgstr "Spara"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Ny"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Textfil"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Mapp"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Från länk"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Raderade filer"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Avbryt uppladdning"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Du saknar skrivbehörighet här."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Ingenting här. Ladda upp något!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Ladda ner"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Sluta dela"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Radera"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "För stor uppladdning"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Filer skannas, var god vänta"
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Aktuell skanning"
 
diff --git a/l10n/sv/settings.po b/l10n/sv/settings.po
index f6ced07827..284b1287a8 100644
--- a/l10n/sv/settings.po
+++ b/l10n/sv/settings.po
@@ -13,8 +13,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
 "MIME-Version: 1.0\n"
@@ -115,11 +115,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/sw_KE/core.po b/l10n/sw_KE/core.po
index 46d6c56432..7b0e710548 100644
--- a/l10n/sw_KE/core.po
+++ b/l10n/sw_KE/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -266,6 +266,46 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/sw_KE/files.po b/l10n/sw_KE/files.po
index f32f2a01fd..b12e3fb13d 100644
--- a/l10n/sw_KE/files.po
+++ b/l10n/sw_KE/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:31-0400\n"
-"PO-Revision-Date: 2013-08-30 13:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:275 js/file-upload.js:291 js/files.js:511 js/files.js:549
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:573
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:305
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:422 js/filelist.js:488 js/files.js:580
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:423 js/filelist.js:489 js/files.js:586
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:430
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:561
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:626
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:562 templates/index.php:67
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:563 templates/index.php:78
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:80
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -232,7 +240,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -268,65 +276,65 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:73
+#: templates/index.php:67
 msgid "Download"
 msgstr ""
 
-#: templates/index.php:85 templates/index.php:86
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:91 templates/index.php:92
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:105
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:107
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:112
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/sw_KE/settings.po b/l10n/sw_KE/settings.po
index efa5540596..da40717273 100644
--- a/l10n/sw_KE/settings.po
+++ b/l10n/sw_KE/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/ta_LK/core.po b/l10n/ta_LK/core.po
index a9b2566a89..511b0ca113 100644
--- a/l10n/ta_LK/core.po
+++ b/l10n/ta_LK/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr "மார்கழி"
 msgid "Settings"
 msgstr "அமைப்புகள்"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "செக்கன்களுக்கு முன்"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "இன்று"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "நேற்று"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "கடந்த மாதம்"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "மாதங்களுக்கு முன்"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "கடந்த வருடம்"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "வருடங்களுக்கு முன்"
 
@@ -266,6 +266,46 @@ msgstr "சரி"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/ta_LK/files.po b/l10n/ta_LK/files.po
index cb81b1d0b5..dd4a7dcf14 100644
--- a/l10n/ta_LK/files.po
+++ b/l10n/ta_LK/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr "வட்டில் எழுத முடியவில்லை"
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "பதிவேற்றல் தோல்வியுற்றது"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr "கோப்புகள்"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "அடைவு அல்லது 0 bytes ஐ கொண்டுள்ளதால் உங்களுடைய கோப்பை பதிவேற்ற முடியவில்லை"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "பதிவேற்றல் இரத்து செய்யப்பட்டுள்ளது"
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "கோப்பு பதிவேற்றம் செயல்பாட்டில் உள்ளது. இந்தப் பக்கத்திலிருந்து வெறியேறுவதானது பதிவேற்றலை இரத்து செய்யும்."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL  வெறுமையாக இருக்கமுடியாது."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "வழு"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "பகிர்வு"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "பெயர்மாற்றம்"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "நிலுவையிலுள்ள"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} ஏற்கனவே உள்ளது"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "மாற்றிடுக"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "பெயரை பரிந்துரைக்க"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "இரத்து செய்க"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "{new_name} ஆனது {old_name} இனால் மாற்றப்பட்டது"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "முன் செயல் நீக்கம் "
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "செல்லுபடியற்ற பெயர்,'\\', '/', '<', '>', ':', '\"', '|', '?' மற்றும் '*' ஆகியன அனுமதிக்கப்படமாட்டாது."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "பெயர்"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "அளவு"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "மாற்றப்பட்டது"
 
@@ -232,7 +240,7 @@ msgstr "மாற்றப்பட்டது"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "பதிவேற்றுக"
 
@@ -268,65 +276,65 @@ msgstr "ZIP கோப்புகளுக்கான ஆகக்கூடி
 msgid "Save"
 msgstr "சேமிக்க "
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "புதிய"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "கோப்பு உரை"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "கோப்புறை"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "இணைப்பிலிருந்து"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "பதிவேற்றலை இரத்து செய்க"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "இங்கு ஒன்றும் இல்லை. ஏதாவது பதிவேற்றுக!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "பதிவிறக்குக"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "பகிரப்படாதது"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "நீக்குக"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "பதிவேற்றல் மிகப்பெரியது"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "நீங்கள் பதிவேற்ற முயற்சிக்கும் கோப்புகளானது இந்த சேவையகத்தில் கோப்பு பதிவேற்றக்கூடிய ஆகக்கூடிய அளவிலும் கூடியது."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "கோப்புகள் வருடப்படுகின்றன, தயவுசெய்து காத்திருங்கள்."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "தற்போது வருடப்படுபவை"
 
diff --git a/l10n/ta_LK/settings.po b/l10n/ta_LK/settings.po
index c7ece05242..cafed635ec 100644
--- a/l10n/ta_LK/settings.po
+++ b/l10n/ta_LK/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/te/core.po b/l10n/te/core.po
index 9c2ae9cdb2..807fd91457 100644
--- a/l10n/te/core.po
+++ b/l10n/te/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Telugu (http://www.transifex.com/projects/p/owncloud/language/te/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr "డిసెంబర్"
 msgid "Settings"
 msgstr "అమరికలు"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "క్షణాల క్రితం"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "ఈరోజు"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "నిన్న"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "పోయిన నెల"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "నెలల క్రితం"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "పోయిన సంవత్సరం"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "సంవత్సరాల క్రితం"
 
@@ -266,6 +266,46 @@ msgstr "సరే"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/te/files.po b/l10n/te/files.po
index f414cfe474..6c0c87d218 100644
--- a/l10n/te/files.po
+++ b/l10n/te/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:31-0400\n"
-"PO-Revision-Date: 2013-08-30 13:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Telugu (http://www.transifex.com/projects/p/owncloud/language/te/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:275 js/file-upload.js:291 js/files.js:511 js/files.js:549
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "పొరపాటు"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "శాశ్వతంగా తొలగించు"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:573
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:305
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "రద్దుచేయి"
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:422 js/filelist.js:488 js/files.js:580
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:423 js/filelist.js:489 js/files.js:586
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:430
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:561
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:626
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:562 templates/index.php:67
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "పేరు"
 
-#: js/files.js:563 templates/index.php:78
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "పరిమాణం"
 
-#: js/files.js:564 templates/index.php:80
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -232,7 +240,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -268,65 +276,65 @@ msgstr ""
 msgid "Save"
 msgstr "భద్రపరచు"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "సంచయం"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:73
+#: templates/index.php:67
 msgid "Download"
 msgstr ""
 
-#: templates/index.php:85 templates/index.php:86
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr ""
 
-#: templates/index.php:91 templates/index.php:92
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "తొలగించు"
 
-#: templates/index.php:105
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:107
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:112
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/te/settings.po b/l10n/te/settings.po
index fae385a634..b9bb6933e6 100644
--- a/l10n/te/settings.po
+++ b/l10n/te/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Telugu (http://www.transifex.com/projects/p/owncloud/language/te/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index b33795587e..33882c8999 100644
--- a/l10n/templates/core.pot
+++ b/l10n/templates/core.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -191,55 +191,55 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -267,6 +267,46 @@ msgstr ""
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its "
+"name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index eedc0a25df..93b709990c 100644
--- a/l10n/templates/files.pot
+++ b/l10n/templates/files.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-18 11:46-0400\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -75,11 +75,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -87,144 +91,148 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:40
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:53
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:91
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:206
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:280
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:285 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:317 js/file-upload.js:333 js/files.js:528 js/files.js:566
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr ""
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:710
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:417 js/filelist.js:419
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:417 js/filelist.js:419
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:417
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:417 js/filelist.js:419
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:464
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:464
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:534 js/filelist.js:600 js/files.js:597
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:535 js/filelist.js:601 js/files.js:603
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:542
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:698
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:763
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:322
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:579 templates/index.php:61
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:580 templates/index.php:73
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:581 templates/index.php:75
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot
index d3bea416f5..30de1ff6de 100644
--- a/l10n/templates/files_encryption.pot
+++ b/l10n/templates/files_encryption.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-18 11:46-0400\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot
index e479af01a2..b5ecc6f796 100644
--- a/l10n/templates/files_external.pot
+++ b/l10n/templates/files_external.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot
index d7f497295d..7524db3041 100644
--- a/l10n/templates/files_sharing.pot
+++ b/l10n/templates/files_sharing.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot
index f64c3dfd3d..cd6766aee4 100644
--- a/l10n/templates/files_trashbin.pot
+++ b/l10n/templates/files_trashbin.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot
index b0fc9800d2..1735320391 100644
--- a/l10n/templates/files_versions.pot
+++ b/l10n/templates/files_versions.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
index d10c7fb9fb..2202934fcd 100644
--- a/l10n/templates/lib.pot
+++ b/l10n/templates/lib.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -165,15 +165,15 @@ msgstr ""
 msgid "Token expired. Please reload page."
 msgstr ""
 
-#: search/provider/file.php:17 search/provider/file.php:35
+#: search/provider/file.php:18 search/provider/file.php:36
 msgid "Files"
 msgstr ""
 
-#: search/provider/file.php:26 search/provider/file.php:33
+#: search/provider/file.php:27 search/provider/file.php:34
 msgid "Text"
 msgstr ""
 
-#: search/provider/file.php:29
+#: search/provider/file.php:30
 msgid "Images"
 msgstr ""
 
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index 3d0cbd90cf..034369dedd 100644
--- a/l10n/templates/settings.pot
+++ b/l10n/templates/settings.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -108,11 +108,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot
index cce14efa4e..1f0ca9c4ef 100644
--- a/l10n/templates/user_ldap.pot
+++ b/l10n/templates/user_ldap.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot
index ea6486423a..9ea999ee23 100644
--- a/l10n/templates/user_webdavauth.pot
+++ b/l10n/templates/user_webdavauth.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/th_TH/core.po b/l10n/th_TH/core.po
index 3ab10d3bf6..db30ee027e 100644
--- a/l10n/th_TH/core.po
+++ b/l10n/th_TH/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
 "MIME-Version: 1.0\n"
@@ -190,51 +190,51 @@ msgstr "ธันวาคม"
 msgid "Settings"
 msgstr "ตั้งค่า"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "วินาที ก่อนหน้านี้"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "วันนี้"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "เมื่อวานนี้"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "เดือนที่แล้ว"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "เดือน ที่ผ่านมา"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "ปีที่แล้ว"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "ปี ที่ผ่านมา"
 
@@ -262,6 +262,45 @@ msgstr "ตกลง"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/th_TH/files.po b/l10n/th_TH/files.po
index 2bb54ad25e..c6f5933318 100644
--- a/l10n/th_TH/files.po
+++ b/l10n/th_TH/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr "เขียนข้อมูลลงแผ่นดิสก์ล้
 msgid "Not enough storage available"
 msgstr "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "อัพโหลดล้มเหลว"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "ไดเร็กทอรี่ไม่ถูกต้อง"
 
@@ -86,141 +90,145 @@ msgstr "ไดเร็กทอรี่ไม่ถูกต้อง"
 msgid "Files"
 msgstr "ไฟล์"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "ไม่สามารถอัพโหลดไฟล์ของคุณได้ เนื่องจากไฟล์ดังกล่าวเป็นไดเร็กทอรี่ หรือ มีขนาดไฟล์ 0 ไบต์"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "มีพื้นที่เหลือไม่เพียงพอ"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "การอัพโหลดถูกยกเลิก"
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก"
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL ไม่สามารถเว้นว่างได้"
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "ข้อผิดพลาด"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "แชร์"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "เปลี่ยนชื่อ"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "อยู่ระหว่างดำเนินการ"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} มีอยู่แล้วในระบบ"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "แทนที่"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "แนะนำชื่อ"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "ยกเลิก"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "แทนที่ {new_name} ด้วย {old_name} แล้ว"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "เลิกทำ"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "การอัพโหลดไฟล์"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' เป็นชื่อไฟล์ที่ไม่ถูกต้อง"
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "ชื่อไฟล์ไม่สามารถเว้นว่างได้"
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "ชื่อที่ใช้ไม่ถูกต้อง, '\\', '/', '<', '>', ':', '\"', '|', '?' และ '*' ไม่ได้รับอนุญาตให้ใช้งานได้"
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานไฟล์ต่างๆได้อีกต่อไป"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "กำลังเตรียมดาวน์โหลดข้อมูล หากไฟล์มีขนาดใหญ่ อาจใช้เวลาสักครู่"
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "ชื่อ"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "ขนาด"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "แก้ไขแล้ว"
 
@@ -229,7 +237,7 @@ msgstr "แก้ไขแล้ว"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "อัพโหลด"
 
@@ -265,65 +273,65 @@ msgstr "ขนาดไฟล์ ZIP สูงสุด"
 msgid "Save"
 msgstr "บันทึก"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "อัพโหลดไฟล์ใหม่"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "ไฟล์ข้อความ"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "แฟ้มเอกสาร"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "จากลิงก์"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "ยกเลิกการอัพโหลด"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "ยังไม่มีไฟล์ใดๆอยู่ที่นี่ กรุณาอัพโหลดไฟล์!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "ดาวน์โหลด"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "ยกเลิกการแชร์"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "ลบ"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "ไฟล์ที่อัพโหลดมีขนาดใหญ่เกินไป"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "ไฟล์ที่คุณพยายามที่จะอัพโหลดมีขนาดเกินกว่าขนาดสูงสุดที่กำหนดไว้ให้อัพโหลดได้สำหรับเซิร์ฟเวอร์นี้"
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "ไฟล์กำลังอยู่ระหว่างการสแกน, กรุณารอสักครู่."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "ไฟล์ที่กำลังสแกนอยู่ขณะนี้"
 
diff --git a/l10n/th_TH/settings.po b/l10n/th_TH/settings.po
index 6c34842bf4..1b369b9b75 100644
--- a/l10n/th_TH/settings.po
+++ b/l10n/th_TH/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/tr/core.po b/l10n/tr/core.po
index eed4853b17..3c751e4cd3 100644
--- a/l10n/tr/core.po
+++ b/l10n/tr/core.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
 "MIME-Version: 1.0\n"
@@ -193,55 +193,55 @@ msgstr "Aralık"
 msgid "Settings"
 msgstr "Ayarlar"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "saniye önce"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "%n dakika önce"
 msgstr[1] "%n dakika önce"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "%n saat önce"
 msgstr[1] "%n saat önce"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "bugün"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "dün"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "%n gün önce"
 msgstr[1] "%n gün önce"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "geçen ay"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "%n ay önce"
 msgstr[1] "%n ay önce"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "ay önce"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "geçen yıl"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "yıl önce"
 
@@ -269,6 +269,46 @@ msgstr "Tamam"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/tr/files.po b/l10n/tr/files.po
index e4878d5cde..05c4ef5679 100644
--- a/l10n/tr/files.po
+++ b/l10n/tr/files.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
 "MIME-Version: 1.0\n"
@@ -77,11 +77,15 @@ msgstr "Diske yazılamadı"
 msgid "Not enough storage available"
 msgstr "Yeterli disk alanı yok"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Yükleme başarısız"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Geçersiz dizin."
 
@@ -89,144 +93,148 @@ msgstr "Geçersiz dizin."
 msgid "Files"
 msgstr "Dosyalar"
 
-#: js/file-upload.js:11
-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/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Yeterli disk alanı yok"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Yükleme iptal edildi."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Dosya yükleme işlemi sürüyor. Şimdi sayfadan ayrılırsanız işleminiz iptal olur."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL boş olamaz."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "Geçersiz dizin adı. 'Shared' dizin ismi kullanımı ownCloud tarafından rezerve edilmiştir."
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Hata"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Paylaş"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Kalıcı olarak sil"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "İsim değiştir."
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Bekliyor"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} zaten mevcut"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "değiştir"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "Öneri ad"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "iptal"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "{new_name} ismi {old_name} ile değiştirildi"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "geri al"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n dizin"
 msgstr[1] "%n dizin"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n dosya"
 msgstr[1] "%n dosya"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "%n dosya yükleniyor"
 msgstr[1] "%n dosya yükleniyor"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "Dosyalar yükleniyor"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' geçersiz dosya adı."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Dosya adı boş olamaz."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Geçersiz isim, '\\', '/', '<', '>', ':', '\"', '|', '?' ve '*' karakterlerine izin verilmemektedir."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Depolama alanınız dolu, artık dosyalar güncellenmeyecek yada senkronizasyon edilmeyecek."
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Depolama alanınız neredeyse dolu ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "Şifreleme işlemi durduruldu ancak dosyalarınız şifreli. Dosyalarınızın şifresini kaldırmak için lütfen kişisel ayarlar kısmına geçiniz."
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "İndirmeniz hazırlanıyor. Dosya büyük ise biraz zaman alabilir."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "İsim"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Boyut"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Değiştirilme"
 
@@ -235,7 +243,7 @@ msgstr "Değiştirilme"
 msgid "%s could not be renamed"
 msgstr "%s yeniden adlandırılamadı"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Yükle"
 
@@ -271,65 +279,65 @@ msgstr "ZIP dosyaları için en fazla girdi sayısı"
 msgid "Save"
 msgstr "Kaydet"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Yeni"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Metin dosyası"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Klasör"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Bağlantıdan"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Dosyalar silindi"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Yüklemeyi iptal et"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Buraya erişim hakkınız yok."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Burada hiçbir şey yok. Birşeyler yükleyin!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "İndir"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Paylaşılmayan"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Sil"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Yükleme çok büyük"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Yüklemeye çalıştığınız dosyalar bu sunucudaki maksimum yükleme boyutunu aşıyor."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Dosyalar taranıyor, lütfen bekleyin."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Güncel tarama"
 
diff --git a/l10n/tr/settings.po b/l10n/tr/settings.po
index 473a8a6790..8d168dd065 100644
--- a/l10n/tr/settings.po
+++ b/l10n/tr/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
 "MIME-Version: 1.0\n"
@@ -113,11 +113,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/ug/core.po b/l10n/ug/core.po
index 385f716e96..6078bee4c5 100644
--- a/l10n/ug/core.po
+++ b/l10n/ug/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Uighur <uqkun@outlook.com>\n"
 "MIME-Version: 1.0\n"
@@ -190,51 +190,51 @@ msgstr "كۆنەك"
 msgid "Settings"
 msgstr "تەڭشەكلەر"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "بۈگۈن"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "تۈنۈگۈن"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -262,6 +262,45 @@ msgstr "جەزملە"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/ug/files.po b/l10n/ug/files.po
index 3eabab5235..c029562d86 100644
--- a/l10n/ug/files.po
+++ b/l10n/ug/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Uighur <uqkun@outlook.com>\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr "دىسكىغا يازالمىدى"
 msgid "Not enough storage available"
 msgstr "يېتەرلىك ساقلاش بوشلۇقى يوق"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,141 +90,145 @@ msgstr ""
 msgid "Files"
 msgstr "ھۆججەتلەر"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "يېتەرلىك بوشلۇق يوق"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "يۈكلەشتىن ۋاز كەچتى."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "ھۆججەت يۈكلەش مەشغۇلاتى ئېلىپ بېرىلىۋاتىدۇ. Leaving the page now will cancel the upload."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "خاتالىق"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "ھەمبەھىر"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "مەڭگۈلۈك ئۆچۈر"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "ئات ئۆزگەرت"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "كۈتۈۋاتىدۇ"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} مەۋجۇت"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "ئالماشتۇر"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "تەۋسىيە ئات"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "ۋاز كەچ"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "يېنىۋال"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "ھۆججەت يۈكلىنىۋاتىدۇ"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "ئاتى"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "چوڭلۇقى"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "ئۆزگەرتكەن"
 
@@ -229,7 +237,7 @@ msgstr "ئۆزگەرتكەن"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "يۈكلە"
 
@@ -265,65 +273,65 @@ msgstr ""
 msgid "Save"
 msgstr "ساقلا"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "يېڭى"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "تېكىست ھۆججەت"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "قىسقۇچ"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "ئۆچۈرۈلگەن ھۆججەتلەر"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "يۈكلەشتىن ۋاز كەچ"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "بۇ جايدا ھېچنېمە يوق. Upload something!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "چۈشۈر"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "ھەمبەھىرلىمە"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "ئۆچۈر"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "يۈكلەندىغىنى بەك چوڭ"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/ug/settings.po b/l10n/ug/settings.po
index 63874495c3..84bd5ebb2a 100644
--- a/l10n/ug/settings.po
+++ b/l10n/ug/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Uighur <uqkun@outlook.com>\n"
 "MIME-Version: 1.0\n"
@@ -110,11 +110,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/uk/core.po b/l10n/uk/core.po
index 888399d1dc..b30a163377 100644
--- a/l10n/uk/core.po
+++ b/l10n/uk/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
 "MIME-Version: 1.0\n"
@@ -190,59 +190,59 @@ msgstr "Грудень"
 msgid "Settings"
 msgstr "Налаштування"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "секунди тому"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "сьогодні"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "вчора"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "минулого місяця"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "місяці тому"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "минулого року"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "роки тому"
 
@@ -270,6 +270,47 @@ msgstr "Ok"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/uk/files.po b/l10n/uk/files.po
index 13cbcf2461..23349e0800 100644
--- a/l10n/uk/files.po
+++ b/l10n/uk/files.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: zubr139 <zubr139@ukr.net>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -75,11 +75,15 @@ msgstr "Невдалося записати на диск"
 msgid "Not enough storage available"
 msgstr "Місця більше немає"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Помилка завантаження"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Невірний каталог."
 
@@ -87,147 +91,151 @@ msgstr "Невірний каталог."
 msgid "Files"
 msgstr "Файли"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Неможливо завантажити ваш файл тому, що він тека або файл розміром 0 байт"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Місця більше немає"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Завантаження перервано."
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Виконується завантаження файлу. Закриття цієї сторінки приведе до відміни завантаження."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL не може бути пустим."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Помилка"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Поділитися"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Видалити назавжди"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Перейменувати"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Очікування"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} вже існує"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "заміна"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "запропонуйте назву"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "відміна"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "замінено {new_name} на {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "відмінити"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "файли завантажуються"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' це невірне ім'я файлу."
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr " Ім'я файлу не може бути порожнім."
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Невірне ім'я, '\\', '/', '<', '>', ':', '\"', '|', '?' та '*' не дозволені."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Ваше сховище переповнене, файли більше не можуть бути оновлені або синхронізовані !"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Ваше сховище майже повне ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Ваше завантаження готується. Це може зайняти деякий час, якщо файли завеликі."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Ім'я"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Розмір"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Змінено"
 
@@ -236,7 +244,7 @@ msgstr "Змінено"
 msgid "%s could not be renamed"
 msgstr "%s не може бути перейменований"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Вивантажити"
 
@@ -272,65 +280,65 @@ msgstr "Максимальний розмір завантажуємого ZIP 
 msgid "Save"
 msgstr "Зберегти"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Створити"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Текстовий файл"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Папка"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "З посилання"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "Видалено файлів"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Перервати завантаження"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "У вас тут немає прав на запис."
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "Тут нічого немає. Відвантажте що-небудь!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Завантажити"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Закрити доступ"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Видалити"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Файл занадто великий"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Файли,що ви намагаєтесь відвантажити перевищують максимальний дозволений розмір файлів на цьому сервері."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Файли скануються, зачекайте, будь-ласка."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Поточне сканування"
 
diff --git a/l10n/uk/settings.po b/l10n/uk/settings.po
index 53d7986461..a96bef5878 100644
--- a/l10n/uk/settings.po
+++ b/l10n/uk/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/ur_PK/core.po b/l10n/ur_PK/core.po
index 5e22263ec5..4b4391115e 100644
--- a/l10n/ur_PK/core.po
+++ b/l10n/ur_PK/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Urdu (Pakistan) (http://www.transifex.com/projects/p/owncloud/language/ur_PK/)\n"
 "MIME-Version: 1.0\n"
@@ -190,55 +190,55 @@ msgstr "دسمبر"
 msgid "Settings"
 msgstr "سیٹینگز"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr ""
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr ""
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -266,6 +266,46 @@ msgstr "اوکے"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/ur_PK/files.po b/l10n/ur_PK/files.po
index e92fc72d7f..2efc8cf747 100644
--- a/l10n/ur_PK/files.po
+++ b/l10n/ur_PK/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-30 09:31-0400\n"
-"PO-Revision-Date: 2013-08-30 13:34+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Urdu (Pakistan) (http://www.transifex.com/projects/p/owncloud/language/ur_PK/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,144 +90,148 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:275 js/file-upload.js:291 js/files.js:511 js/files.js:549
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "ایرر"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr ""
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:573
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:305
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:305 js/filelist.js:307
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:352
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:422 js/filelist.js:488 js/files.js:580
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:423 js/filelist.js:489 js/files.js:586
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:430
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:561
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: js/filelist.js:626
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:562 templates/index.php:67
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr ""
 
-#: js/files.js:563 templates/index.php:78
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:564 templates/index.php:80
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -232,7 +240,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr ""
 
@@ -268,65 +276,65 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:73
+#: templates/index.php:67
 msgid "Download"
 msgstr ""
 
-#: templates/index.php:85 templates/index.php:86
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "شئیرنگ ختم کریں"
 
-#: templates/index.php:91 templates/index.php:92
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr ""
 
-#: templates/index.php:105
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:107
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:112
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/ur_PK/settings.po b/l10n/ur_PK/settings.po
index 92dc0e5d07..2893f05869 100644
--- a/l10n/ur_PK/settings.po
+++ b/l10n/ur_PK/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Urdu (Pakistan) (http://www.transifex.com/projects/p/owncloud/language/ur_PK/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/vi/core.po b/l10n/vi/core.po
index 6cdb4d2458..6d9203adc4 100644
--- a/l10n/vi/core.po
+++ b/l10n/vi/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 "MIME-Version: 1.0\n"
@@ -191,51 +191,51 @@ msgstr "Tháng 12"
 msgid "Settings"
 msgstr "Cài đặt"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "vài giây trước"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "hôm nay"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "hôm qua"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "tháng trước"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "tháng trước"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "năm trước"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "năm trước"
 
@@ -263,6 +263,45 @@ msgstr "Đồng ý"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/vi/files.po b/l10n/vi/files.po
index ffc9063f5d..df0a42f78e 100644
--- a/l10n/vi/files.po
+++ b/l10n/vi/files.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 "MIME-Version: 1.0\n"
@@ -75,11 +75,15 @@ msgstr "Không thể ghi "
 msgid "Not enough storage available"
 msgstr "Không đủ không gian lưu trữ"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "Tải lên thất bại"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Thư mục không hợp lệ"
 
@@ -87,141 +91,145 @@ msgstr "Thư mục không hợp lệ"
 msgid "Files"
 msgstr "Tập tin"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Không thể tải lên tập tin của bạn ,nó như là một thư mục hoặc có 0 byte"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "Không đủ chỗ trống cần thiết"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "Hủy tải lên"
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này."
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL không được để trống."
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "Lỗi"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "Chia sẻ"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "Xóa vĩnh vễn"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "Sửa tên"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "Đang chờ"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} đã tồn tại"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "thay thế"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "tên gợi ý"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "hủy"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "đã thay thế {new_name} bằng {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "lùi lại"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "tệp tin đang được tải lên"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' là một tên file không hợp lệ"
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "Tên file không được rỗng"
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "Tên không hợp lệ, '\\', '/', '<', '>', ':', '\"', '|', '?' và '*' thì không được phép dùng."
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "Your storage is full, files can not be updated or synced anymore!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "Your storage is almost full ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "Your download is being prepared. This might take some time if the files are big."
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "Tên"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "Kích cỡ"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "Thay đổi"
 
@@ -230,7 +238,7 @@ msgstr "Thay đổi"
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "Tải lên"
 
@@ -266,65 +274,65 @@ msgstr "Kích thước tối đa cho các tập tin ZIP"
 msgid "Save"
 msgstr "Lưu"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "Mới"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "Tập tin văn bản"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "Thư mục"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "Từ liên kết"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "File đã bị xóa"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "Hủy upload"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "Bạn không có quyền ghi vào đây."
 
-#: templates/index.php:59
+#: templates/index.php:50
 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:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "Tải về"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "Bỏ chia sẻ"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "Xóa"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "Tập tin tải lên quá lớn"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "Các tập tin bạn đang tải lên vượt quá kích thước tối đa cho phép trên máy chủ ."
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "Tập tin đang được quét ,vui lòng chờ."
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "Hiện tại đang quét"
 
diff --git a/l10n/vi/settings.po b/l10n/vi/settings.po
index 37f3d2e0da..a349959561 100644
--- a/l10n/vi/settings.po
+++ b/l10n/vi/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/zh_CN/core.po b/l10n/zh_CN/core.po
index 8d4cdaa172..50a09f4c32 100644
--- a/l10n/zh_CN/core.po
+++ b/l10n/zh_CN/core.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
 "MIME-Version: 1.0\n"
@@ -193,51 +193,51 @@ msgstr "十二月"
 msgid "Settings"
 msgstr "设置"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "秒前"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "%n 分钟前"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "%n 小时前"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "今天"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "昨天"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "%n 天前"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "上月"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "%n 月前"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "月前"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "去年"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "年前"
 
@@ -265,6 +265,45 @@ msgstr "好"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/zh_CN/files.po b/l10n/zh_CN/files.po
index e68d22da13..26678e7a45 100644
--- a/l10n/zh_CN/files.po
+++ b/l10n/zh_CN/files.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
 "MIME-Version: 1.0\n"
@@ -77,11 +77,15 @@ msgstr "写入磁盘失败"
 msgid "Not enough storage available"
 msgstr "没有足够的存储空间"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "上传失败"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "无效文件夹。"
 
@@ -89,141 +93,145 @@ msgstr "无效文件夹。"
 msgid "Files"
 msgstr "文件"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "无法上传您的文件,文件夹或者空文件"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "没有足够可用空间"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "上传已取消"
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "文件正在上传中。现在离开此页会导致上传动作被取消。"
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL不能为空"
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "无效的文件夹名。”Shared“ 是 Owncloud 预留的文件夹"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "错误"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "分享"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "永久删除"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "重命名"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "等待"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} 已存在"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "替换"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "建议名称"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "取消"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "已将 {old_name}替换成 {new_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "撤销"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n 文件夹"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n个文件"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "文件上传中"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' 是一个无效的文件名。"
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "文件名不能为空。"
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "无效名称,'\\', '/', '<', '>', ':', '\"', '|', '?' 和 '*' 不被允许使用。"
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "您的存储空间已满,文件将无法更新或同步!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "您的存储空间即将用完 ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "下载正在准备中。如果文件较大可能会花费一些时间。"
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "名称"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "大小"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "修改日期"
 
@@ -232,7 +240,7 @@ msgstr "修改日期"
 msgid "%s could not be renamed"
 msgstr "%s 不能被重命名"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "上传"
 
@@ -268,65 +276,65 @@ msgstr "ZIP 文件的最大输入大小"
 msgid "Save"
 msgstr "保存"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "新建"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "文本文件"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "文件夹"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "来自链接"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "已删除文件"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "取消上传"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "您没有写权限"
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "这里还什么都没有。上传些东西吧!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "下载"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "取消共享"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "删除"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "上传文件过大"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "您正尝试上传的文件超过了此服务器可以上传的最大容量限制"
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "文件正在被扫描,请稍候。"
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "当前扫描"
 
diff --git a/l10n/zh_CN/settings.po b/l10n/zh_CN/settings.po
index 2e9ea7f2a6..fc3228827b 100644
--- a/l10n/zh_CN/settings.po
+++ b/l10n/zh_CN/settings.po
@@ -12,8 +12,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
 "MIME-Version: 1.0\n"
@@ -114,11 +114,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/zh_HK/core.po b/l10n/zh_HK/core.po
index 51efb5c3cf..edcf03cc9d 100644
--- a/l10n/zh_HK/core.po
+++ b/l10n/zh_HK/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
 "MIME-Version: 1.0\n"
@@ -190,51 +190,51 @@ msgstr "十二月"
 msgid "Settings"
 msgstr "設定"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "今日"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "昨日"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] ""
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "前一月"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] ""
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "個月之前"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr ""
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr ""
 
@@ -262,6 +262,45 @@ msgstr "OK"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/zh_HK/files.po b/l10n/zh_HK/files.po
index ef901a270f..20aca3cb37 100644
--- a/l10n/zh_HK/files.po
+++ b/l10n/zh_HK/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
 "MIME-Version: 1.0\n"
@@ -74,11 +74,15 @@ msgstr ""
 msgid "Not enough storage available"
 msgstr ""
 
-#: ajax/upload.php:109
-msgid "Upload failed"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
 msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
+
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr ""
 
@@ -86,141 +90,145 @@ msgstr ""
 msgid "Files"
 msgstr "文件"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
 msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr ""
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr ""
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "錯誤"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "分享"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr ""
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] ""
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr ""
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr ""
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr ""
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr ""
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr ""
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr ""
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr ""
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr ""
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "名稱"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr ""
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr ""
 
@@ -229,7 +237,7 @@ msgstr ""
 msgid "%s could not be renamed"
 msgstr ""
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "上傳"
 
@@ -265,65 +273,65 @@ msgstr ""
 msgid "Save"
 msgstr "儲存"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr ""
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr ""
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr ""
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr ""
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr ""
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr ""
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr ""
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr ""
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "下載"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "取消分享"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "刪除"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr ""
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr ""
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr ""
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr ""
 
diff --git a/l10n/zh_HK/settings.po b/l10n/zh_HK/settings.po
index 03c8c330da..079b4a52dd 100644
--- a/l10n/zh_HK/settings.po
+++ b/l10n/zh_HK/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
 "MIME-Version: 1.0\n"
@@ -109,11 +109,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/l10n/zh_TW/core.po b/l10n/zh_TW/core.po
index 405447f811..76b1ce04f5 100644
--- a/l10n/zh_TW/core.po
+++ b/l10n/zh_TW/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:33+0000\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
 "MIME-Version: 1.0\n"
@@ -192,51 +192,51 @@ msgstr "十二月"
 msgid "Settings"
 msgstr "設定"
 
-#: js/js.js:853
+#: js/js.js:866
 msgid "seconds ago"
 msgstr "幾秒前"
 
-#: js/js.js:854
+#: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] "%n 分鐘前"
 
-#: js/js.js:855
+#: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] "%n 小時前"
 
-#: js/js.js:856
+#: js/js.js:869
 msgid "today"
 msgstr "今天"
 
-#: js/js.js:857
+#: js/js.js:870
 msgid "yesterday"
 msgstr "昨天"
 
-#: js/js.js:858
+#: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
 msgstr[0] "%n 天前"
 
-#: js/js.js:859
+#: js/js.js:872
 msgid "last month"
 msgstr "上個月"
 
-#: js/js.js:860
+#: js/js.js:873
 msgid "%n month ago"
 msgid_plural "%n months ago"
 msgstr[0] "%n 個月前"
 
-#: js/js.js:861
+#: js/js.js:874
 msgid "months ago"
 msgstr "幾個月前"
 
-#: js/js.js:862
+#: js/js.js:875
 msgid "last year"
 msgstr "去年"
 
-#: js/js.js:863
+#: js/js.js:876
 msgid "years ago"
 msgstr "幾年前"
 
@@ -264,6 +264,45 @@ msgstr "好"
 msgid "Error loading message template: {error}"
 msgstr ""
 
+#: js/oc-dialogs.js:347
+msgid "{count} file conflict"
+msgid_plural "{count} file conflicts"
+msgstr[0] ""
+
+#: js/oc-dialogs.js:361
+msgid "One file conflict"
+msgstr ""
+
+#: js/oc-dialogs.js:367
+msgid "Which files do you want to keep?"
+msgstr ""
+
+#: js/oc-dialogs.js:368
+msgid ""
+"If you select both versions, the copied file will have a number added to its"
+" name."
+msgstr ""
+
+#: js/oc-dialogs.js:376
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:386
+msgid "Continue"
+msgstr ""
+
+#: js/oc-dialogs.js:433 js/oc-dialogs.js:446
+msgid "(all selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:436 js/oc-dialogs.js:449
+msgid "({count} selected)"
+msgstr ""
+
+#: js/oc-dialogs.js:457
+msgid "Error loading file exists template"
+msgstr ""
+
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
 msgid "The object type is not specified."
diff --git a/l10n/zh_TW/files.po b/l10n/zh_TW/files.po
index cc65168506..60f8fdf7a0 100644
--- a/l10n/zh_TW/files.po
+++ b/l10n/zh_TW/files.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:00+0000\n"
-"Last-Translator: pellaeon <nfsmwlin@gmail.com>\n"
+"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -75,11 +75,15 @@ msgstr "寫入硬碟失敗"
 msgid "Not enough storage available"
 msgstr "儲存空間不足"
 
-#: ajax/upload.php:109
-msgid "Upload failed"
-msgstr "上傳失敗"
+#: ajax/upload.php:120 ajax/upload.php:143
+msgid "Upload failed. Could not get file info."
+msgstr ""
+
+#: ajax/upload.php:136
+msgid "Upload failed. Could not find uploaded file"
+msgstr ""
 
-#: ajax/upload.php:127
+#: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "無效的資料夾"
 
@@ -87,141 +91,145 @@ msgstr "無效的資料夾"
 msgid "Files"
 msgstr "檔案"
 
-#: js/file-upload.js:11
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "無法上傳您的檔案,因為它可能是一個目錄或檔案大小為0"
+#: js/file-upload.js:244
+msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
+msgstr ""
 
-#: js/file-upload.js:24
+#: js/file-upload.js:255
 msgid "Not enough space available"
 msgstr "沒有足夠的可用空間"
 
-#: js/file-upload.js:64
+#: js/file-upload.js:322
 msgid "Upload cancelled."
 msgstr "上傳已取消"
 
-#: js/file-upload.js:165
+#: js/file-upload.js:356
+msgid "Could not get result from server."
+msgstr ""
+
+#: js/file-upload.js:446
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "檔案上傳中,離開此頁面將會取消上傳。"
 
-#: js/file-upload.js:239
+#: js/file-upload.js:520
 msgid "URL cannot be empty."
 msgstr "URL 不能為空"
 
-#: js/file-upload.js:244 lib/app.php:53
+#: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
 msgstr "無效的資料夾名稱,'Shared' 的使用被 ownCloud 保留"
 
-#: js/file-upload.js:276 js/file-upload.js:292 js/files.js:512 js/files.js:550
+#: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
 msgstr "錯誤"
 
-#: js/fileactions.js:116
+#: js/fileactions.js:119
 msgid "Share"
 msgstr "分享"
 
-#: js/fileactions.js:126
+#: js/fileactions.js:131
 msgid "Delete permanently"
 msgstr "永久刪除"
 
-#: js/fileactions.js:192
+#: js/fileactions.js:197
 msgid "Rename"
 msgstr "重新命名"
 
-#: js/filelist.js:50 js/filelist.js:53 js/filelist.js:575
+#: js/filelist.js:71 js/filelist.js:74 js/filelist.js:788
 msgid "Pending"
 msgstr "等候中"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "{new_name} already exists"
 msgstr "{new_name} 已經存在"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "replace"
 msgstr "取代"
 
-#: js/filelist.js:307
+#: js/filelist.js:416
 msgid "suggest name"
 msgstr "建議檔名"
 
-#: js/filelist.js:307 js/filelist.js:309
+#: js/filelist.js:416 js/filelist.js:418
 msgid "cancel"
 msgstr "取消"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "replaced {new_name} with {old_name}"
 msgstr "使用 {new_name} 取代 {old_name}"
 
-#: js/filelist.js:354
+#: js/filelist.js:463
 msgid "undo"
 msgstr "復原"
 
-#: js/filelist.js:424 js/filelist.js:490 js/files.js:581
+#: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] "%n 個資料夾"
 
-#: js/filelist.js:425 js/filelist.js:491 js/files.js:587
+#: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] "%n 個檔案"
 
-#: js/filelist.js:432
+#: js/filelist.js:541
 msgid "{dirs} and {files}"
 msgstr "{dirs} 和 {files}"
 
-#: js/filelist.js:563
+#: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
 msgstr[0] "%n 個檔案正在上傳"
 
-#: js/filelist.js:628
-msgid "files uploading"
-msgstr "檔案上傳中"
-
-#: js/files.js:52
+#: js/files.js:25
 msgid "'.' is an invalid file name."
 msgstr "'.' 是不合法的檔名"
 
-#: js/files.js:56
+#: js/files.js:29
 msgid "File name cannot be empty."
 msgstr "檔名不能為空"
 
-#: js/files.js:64
+#: js/files.js:37
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
 msgstr "檔名不合法,不允許 \\ / < > : \" | ? * 字元"
 
-#: js/files.js:78
+#: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
 msgstr "您的儲存空間已滿,沒有辦法再更新或是同步檔案!"
 
-#: js/files.js:82
+#: js/files.js:55
 msgid "Your storage is almost full ({usedSpacePercent}%)"
 msgstr "您的儲存空間快要滿了 ({usedSpacePercent}%)"
 
-#: js/files.js:94
+#: js/files.js:67
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
 msgstr "加密已經被停用,但是您的舊檔案還是處於已加密的狀態,請前往個人設定以解密這些檔案。"
 
-#: js/files.js:245
+#: js/files.js:296
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
 msgstr "正在準備您的下載,若您的檔案較大,將會需要更多時間。"
 
-#: js/files.js:563 templates/index.php:69
+#: js/files.js:507 js/files.js:545
+msgid "Error moving file"
+msgstr ""
+
+#: js/files.js:558 templates/index.php:61
 msgid "Name"
 msgstr "名稱"
 
-#: js/files.js:564 templates/index.php:81
+#: js/files.js:559 templates/index.php:73
 msgid "Size"
 msgstr "大小"
 
-#: js/files.js:565 templates/index.php:83
+#: js/files.js:560 templates/index.php:75
 msgid "Modified"
 msgstr "修改時間"
 
@@ -230,7 +238,7 @@ msgstr "修改時間"
 msgid "%s could not be renamed"
 msgstr "無法重新命名 %s"
 
-#: lib/helper.php:11 templates/index.php:18
+#: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
 msgstr "上傳"
 
@@ -266,65 +274,65 @@ msgstr "ZIP 壓縮前的原始大小限制"
 msgid "Save"
 msgstr "儲存"
 
-#: templates/index.php:7
+#: templates/index.php:6
 msgid "New"
 msgstr "新增"
 
-#: templates/index.php:10
+#: templates/index.php:9
 msgid "Text file"
 msgstr "文字檔"
 
-#: templates/index.php:12
+#: templates/index.php:11
 msgid "Folder"
 msgstr "資料夾"
 
-#: templates/index.php:14
+#: templates/index.php:13
 msgid "From link"
 msgstr "從連結"
 
-#: templates/index.php:41
+#: templates/index.php:33
 msgid "Deleted files"
 msgstr "回收桶"
 
-#: templates/index.php:46
+#: templates/index.php:39
 msgid "Cancel upload"
 msgstr "取消上傳"
 
-#: templates/index.php:52
+#: templates/index.php:45
 msgid "You don’t have write permissions here."
 msgstr "您在這裡沒有編輯權"
 
-#: templates/index.php:59
+#: templates/index.php:50
 msgid "Nothing in here. Upload something!"
 msgstr "這裡還沒有東西,上傳一些吧!"
 
-#: templates/index.php:75
+#: templates/index.php:67
 msgid "Download"
 msgstr "下載"
 
-#: templates/index.php:88 templates/index.php:89
+#: templates/index.php:80 templates/index.php:81
 msgid "Unshare"
 msgstr "取消分享"
 
-#: templates/index.php:94 templates/index.php:95
+#: templates/index.php:86 templates/index.php:87
 msgid "Delete"
 msgstr "刪除"
 
-#: templates/index.php:108
+#: templates/index.php:100
 msgid "Upload too large"
 msgstr "上傳過大"
 
-#: templates/index.php:110
+#: templates/index.php:102
 msgid ""
 "The files you are trying to upload exceed the maximum size for file uploads "
 "on this server."
 msgstr "您試圖上傳的檔案大小超過伺服器的限制。"
 
-#: templates/index.php:115
+#: templates/index.php:107
 msgid "Files are being scanned, please wait."
 msgstr "正在掃描檔案,請稍等。"
 
-#: templates/index.php:118
+#: templates/index.php:110
 msgid "Current scanning"
 msgstr "正在掃描"
 
diff --git a/l10n/zh_TW/settings.po b/l10n/zh_TW/settings.po
index e6f825433a..5c24961e5c 100644
--- a/l10n/zh_TW/settings.po
+++ b/l10n/zh_TW/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 15:47+0000\n"
+"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"PO-Revision-Date: 2013-09-20 14:45+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
 "MIME-Version: 1.0\n"
@@ -110,11 +110,7 @@ msgid ""
 "successfully updated."
 msgstr ""
 
-#: changepassword/controller.php:92
-msgid "message"
-msgstr ""
-
-#: changepassword/controller.php:103
+#: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
 msgstr ""
 
diff --git a/lib/l10n/fr.php b/lib/l10n/fr.php
index da3ec4ce37..ab3d618849 100644
--- a/lib/l10n/fr.php
+++ b/lib/l10n/fr.php
@@ -8,6 +8,9 @@ $TRANSLATIONS = array(
 "Users" => "Utilisateurs",
 "Admin" => "Administration",
 "Failed to upgrade \"%s\"." => "Echec de la mise à niveau \"%s\".",
+"Custom profile pictures don't work with encryption yet" => "Les images de profil personnalisées ne fonctionnent pas encore avec le système de chiffrement.",
+"Unknown filetype" => "Type de fichier inconnu",
+"Invalid image" => "Image invalide",
 "web services under your control" => "services web sous votre contrôle",
 "cannot open \"%s\"" => "impossible d'ouvrir \"%s\"",
 "ZIP download is turned off." => "Téléchargement ZIP désactivé.",
diff --git a/lib/l10n/it.php b/lib/l10n/it.php
index 2dab6dee15..b00789bc86 100644
--- a/lib/l10n/it.php
+++ b/lib/l10n/it.php
@@ -8,8 +8,8 @@ $TRANSLATIONS = array(
 "Users" => "Utenti",
 "Admin" => "Admin",
 "Failed to upgrade \"%s\"." => "Aggiornamento non riuscito \"%s\".",
-"Custom profile pictures don't work with encryption yet" => "Le immagini personalizzate del profilo non funzionano ancora con la cifratura.",
-"Unknown filetype" => "Tipo file sconosciuto",
+"Custom profile pictures don't work with encryption yet" => "Le immagini personalizzate del profilo non funzionano ancora con la cifratura",
+"Unknown filetype" => "Tipo di file sconosciuto",
 "Invalid image" => "Immagine non valida",
 "web services under your control" => "servizi web nelle tue mani",
 "cannot open \"%s\"" => "impossibile aprire \"%s\"",
diff --git a/lib/l10n/pt_PT.php b/lib/l10n/pt_PT.php
index bf54001224..6e2bcba7b1 100644
--- a/lib/l10n/pt_PT.php
+++ b/lib/l10n/pt_PT.php
@@ -6,6 +6,8 @@ $TRANSLATIONS = array(
 "Users" => "Utilizadores",
 "Admin" => "Admin",
 "Failed to upgrade \"%s\"." => "A actualização \"%s\" falhou.",
+"Unknown filetype" => "Ficheiro desconhecido",
+"Invalid image" => "Imagem inválida",
 "web services under your control" => "serviços web sob o seu controlo",
 "cannot open \"%s\"" => "Não foi possível abrir \"%s\"",
 "ZIP download is turned off." => "Descarregamento em ZIP está desligado.",
diff --git a/lib/l10n/ru.php b/lib/l10n/ru.php
index c3b6a077b7..0fe88efef7 100644
--- a/lib/l10n/ru.php
+++ b/lib/l10n/ru.php
@@ -1,11 +1,15 @@
 <?php
 $TRANSLATIONS = array(
+"App \"%s\" can't be installed because it is not compatible with this version of ownCloud." => "Приложение \"%s\" нельзя установить, так как оно не совместимо с текущей версией ownCloud.",
+"No app name specified" => "Не выбрано имя приложения",
 "Help" => "Помощь",
 "Personal" => "Личное",
 "Settings" => "Конфигурация",
 "Users" => "Пользователи",
 "Admin" => "Admin",
 "Failed to upgrade \"%s\"." => "Не смог обновить \"%s\".",
+"Unknown filetype" => "Неизвестный тип файла",
+"Invalid image" => "Изображение повреждено",
 "web services under your control" => "веб-сервисы под вашим управлением",
 "cannot open \"%s\"" => "не могу открыть \"%s\"",
 "ZIP download is turned off." => "ZIP-скачивание отключено.",
@@ -13,6 +17,15 @@ $TRANSLATIONS = array(
 "Back to Files" => "Назад к файлам",
 "Selected files too large to generate zip file." => "Выбранные файлы слишком велики, чтобы создать zip файл.",
 "Download the files in smaller chunks, seperately or kindly ask your administrator." => "Загрузите файл маленьшими порциями, раздельно или вежливо попросите Вашего администратора.",
+"No source specified when installing app" => "Не указан источник при установке приложения",
+"No href specified when installing app from http" => "Не указан атрибут href при установке приложения через http",
+"No path specified when installing app from local file" => "Не указан путь при установке приложения из локального файла",
+"Archives of type %s are not supported" => "Архивы %s не поддерживаются",
+"Failed to open archive when installing app" => "Не возможно открыть архив при установке приложения",
+"App does not provide an info.xml file" => "Приложение не имеет файла info.xml",
+"App can't be installed because of not allowed code in the App" => "Приложение невозможно установить. В нем содержится запрещенный код.",
+"App can't be installed because it is not compatible with this version of ownCloud" => "Приложение невозможно установить. Не совместимо с текущей версией ownCloud.",
+"App directory already exists" => "Папка приложения уже существует",
 "Application is not enabled" => "Приложение не разрешено",
 "Authentication error" => "Ошибка аутентификации",
 "Token expired. Please reload page." => "Токен просрочен. Перезагрузите страницу.",
diff --git a/lib/l10n/sr@latin.php b/lib/l10n/sr@latin.php
index 5ba51bc0ba..d8fa928922 100644
--- a/lib/l10n/sr@latin.php
+++ b/lib/l10n/sr@latin.php
@@ -8,9 +8,15 @@ $TRANSLATIONS = array(
 "Authentication error" => "Greška pri autentifikaciji",
 "Files" => "Fajlovi",
 "Text" => "Tekst",
+"seconds ago" => "Pre par sekundi",
 "_%n minute ago_::_%n minutes ago_" => array("","",""),
 "_%n hour ago_::_%n hours ago_" => array("","",""),
+"today" => "Danas",
+"yesterday" => "juče",
 "_%n day go_::_%n days ago_" => array("","",""),
-"_%n month ago_::_%n months ago_" => array("","","")
+"last month" => "prošlog meseca",
+"_%n month ago_::_%n months ago_" => array("","",""),
+"last year" => "prošle godine",
+"years ago" => "pre nekoliko godina"
 );
 $PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/settings/l10n/cs_CZ.php b/settings/l10n/cs_CZ.php
index 7e2ec23846..9873d4d20a 100644
--- a/settings/l10n/cs_CZ.php
+++ b/settings/l10n/cs_CZ.php
@@ -16,6 +16,12 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Nelze přidat uživatele do skupiny %s",
 "Unable to remove user from group %s" => "Nelze odebrat uživatele ze skupiny %s",
 "Couldn't update app." => "Nelze aktualizovat aplikaci.",
+"Wrong password" => "Nesprávné heslo",
+"No user supplied" => "Nebyl uveden uživatel",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Zadejte prosím administrátorské heslo pro obnovu, jinak budou všechna data ztracena",
+"Wrong admin recovery password. Please check the password and try again." => "Chybné administrátorské heslo pro obnovu. Překontrolujte správnost hesla a zkuste to znovu.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Úložiště nepodporuje změnu hesla, ale šifrovací klíč uživatelů byl úspěšně změněn.",
+"Unable to change password" => "Změna hesla se nezdařila",
 "Update to {appversion}" => "Aktualizovat na {appversion}",
 "Disable" => "Zakázat",
 "Enable" => "Povolit",
diff --git a/settings/l10n/de.php b/settings/l10n/de.php
index 05c02e530e..ae2165873e 100644
--- a/settings/l10n/de.php
+++ b/settings/l10n/de.php
@@ -16,6 +16,12 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
 "Unable to remove user from group %s" => "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
 "Couldn't update app." => "Die App konnte nicht aktualisiert werden.",
+"Wrong password" => "Falsches Passwort",
+"No user supplied" => "Keinen Benutzer übermittelt",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Bitte gib ein Wiederherstellungspasswort für das Admin-Konto an, da sonst alle Benutzer Daten verloren gehen können",
+"Wrong admin recovery password. Please check the password and try again." => "Falsches Wiederherstellungspasswort für das Admin-Konto. Bitte überprüfe das Passwort und versuche es erneut.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Das Back-End unterstützt die Passwortänderung nicht, aber der Benutzerschlüssel wurde erfolgreich aktualisiert.",
+"Unable to change password" => "Passwort konnte nicht geändert werden",
 "Update to {appversion}" => "Aktualisiere zu {appversion}",
 "Disable" => "Deaktivieren",
 "Enable" => "Aktivieren",
diff --git a/settings/l10n/de_AT.php b/settings/l10n/de_AT.php
new file mode 100644
index 0000000000..d70f365826
--- /dev/null
+++ b/settings/l10n/de_AT.php
@@ -0,0 +1,5 @@
+<?php
+$TRANSLATIONS = array(
+"__language_name__" => "Deutsch (Österreich)"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/settings/l10n/de_CH.php b/settings/l10n/de_CH.php
index 45650a3b44..558071b3cb 100644
--- a/settings/l10n/de_CH.php
+++ b/settings/l10n/de_CH.php
@@ -39,7 +39,7 @@ $TRANSLATIONS = array(
 "A valid username must be provided" => "Es muss ein gültiger Benutzername angegeben werden",
 "Error creating user" => "Beim Erstellen des Benutzers ist ein Fehler aufgetreten",
 "A valid password must be provided" => "Es muss ein gültiges Passwort angegeben werden",
-"__language_name__" => "Deutsch (Förmlich: Sie)",
+"__language_name__" => "Deutsch (Schweiz)",
 "Security Warning" => "Sicherheitshinweis",
 "Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Ihr Datenverzeichnis und Ihre Dateien sind möglicher Weise aus dem Internet erreichbar. Die .htaccess-Datei funktioniert nicht. Wir raten Ihnen dringend, dass Sie Ihren Webserver dahingehend konfigurieren, dass Ihr Datenverzeichnis nicht länger aus dem Internet erreichbar ist, oder Sie verschieben das Datenverzeichnis ausserhalb des Wurzelverzeichnisses des Webservers.",
 "Setup Warning" => "Einrichtungswarnung",
diff --git a/settings/l10n/de_DE.php b/settings/l10n/de_DE.php
index 15511569a1..924792aa62 100644
--- a/settings/l10n/de_DE.php
+++ b/settings/l10n/de_DE.php
@@ -16,6 +16,12 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
 "Unable to remove user from group %s" => "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
 "Couldn't update app." => "Die App konnte nicht aktualisiert werden.",
+"Wrong password" => "Falsches Passwort",
+"No user supplied" => "Keinen Benutzer übermittelt",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Bitte geben Sie ein Wiederherstellungspasswort für das Admin-Konto an, da sonst alle Benutzer Daten verloren gehen können",
+"Wrong admin recovery password. Please check the password and try again." => "Falsches Wiederherstellungspasswort für das Admin-Konto. Bitte überprüfen Sie das Passwort und versuchen Sie es erneut.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Das Back-End unterstützt die Passwortänderung nicht, aber der Benutzerschlüssel wurde erfolgreich aktualisiert.",
+"Unable to change password" => "Passwort konnte nicht geändert werden",
 "Update to {appversion}" => "Update zu {appversion}",
 "Disable" => "Deaktivieren",
 "Enable" => "Aktivieren",
diff --git a/settings/l10n/en_GB.php b/settings/l10n/en_GB.php
index edac115210..abbc92709e 100644
--- a/settings/l10n/en_GB.php
+++ b/settings/l10n/en_GB.php
@@ -16,6 +16,12 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Unable to add user to group %s",
 "Unable to remove user from group %s" => "Unable to remove user from group %s",
 "Couldn't update app." => "Couldn't update app.",
+"Wrong password" => "Incorrect password",
+"No user supplied" => "No user supplied",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Please provide an admin recovery password, otherwise all user data will be lost",
+"Wrong admin recovery password. Please check the password and try again." => "Incorrect admin recovery password. Please check the password and try again.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Back-end doesn't support password change, but the user's encryption key was successfully updated.",
+"Unable to change password" => "Unable to change password",
 "Update to {appversion}" => "Update to {appversion}",
 "Disable" => "Disable",
 "Enable" => "Enable",
@@ -47,7 +53,7 @@ $TRANSLATIONS = array(
 "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Your web server is not yet properly setup to allow files synchronisation because the WebDAV interface seems to be broken.",
 "Please double check the <a href=\"%s\">installation guides</a>." => "Please double check the <a href=\"%s\">installation guides</a>.",
 "Module 'fileinfo' missing" => "Module 'fileinfo' missing",
-"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection.",
+"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "The PHP module 'fileinfo' is missing. We strongly recommend enabling this module to get best results with mime-type detection.",
 "Locale not working" => "Locale not working",
 "System locale can't be set to %s. This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support %s." => "System locale can't be set to %s. This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support %s.",
 "Internet connection not working" => "Internet connection not working",
@@ -76,7 +82,7 @@ $TRANSLATIONS = array(
 "More" => "More",
 "Less" => "Less",
 "Version" => "Version",
-"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
+"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public Licence\">AGPL</abbr></a>.",
 "Add your App" => "Add your App",
 "More Apps" => "More Apps",
 "Select an App" => "Select an App",
diff --git a/settings/l10n/es.php b/settings/l10n/es.php
index 027bd23c3e..b20a4acb29 100644
--- a/settings/l10n/es.php
+++ b/settings/l10n/es.php
@@ -16,6 +16,9 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "No se pudo añadir el usuario al grupo %s",
 "Unable to remove user from group %s" => "No se pudo eliminar al usuario del grupo %s",
 "Couldn't update app." => "No se pudo actualizar la aplicacion.",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Por favor facilite una contraseña  de recuperación de administrador, sino se perderán todos los datos de usuario",
+"Wrong admin recovery password. Please check the password and try again." => "Contraseña de recuperación de administrador incorrecta. Por favor compruebe la contraseña e inténtelo de nuevo.",
+"Unable to change password" => "No se ha podido cambiar la contraseña",
 "Update to {appversion}" => "Actualizado a {appversion}",
 "Disable" => "Desactivar",
 "Enable" => "Activar",
@@ -27,6 +30,7 @@ $TRANSLATIONS = array(
 "Error" => "Error",
 "Update" => "Actualizar",
 "Updated" => "Actualizado",
+"Select a profile picture" => "Seleccionar una imagen de perfil",
 "Decrypting files... Please wait, this can take some time." => "Descifrando archivos... Espere por favor, esto puede llevar algo de tiempo.",
 "Saving..." => "Guardando...",
 "deleted" => "Eliminado",
@@ -101,7 +105,11 @@ $TRANSLATIONS = array(
 "Your email address" => "Su dirección de correo",
 "Fill in an email address to enable password recovery" => "Escriba una dirección de correo electrónico para restablecer la contraseña",
 "Profile picture" => "Foto del perfil",
+"Upload new" => "Subir nuevo",
+"Select new from Files" => "Seleccionar nuevo desde Ficheros",
+"Remove image" => "Borrar imagen",
 "Abort" => "Abortar",
+"Choose as profile image" => "Seleccionar como imagen de perfil",
 "Language" => "Idioma",
 "Help translate" => "Ayúdanos a traducir",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/et_EE.php b/settings/l10n/et_EE.php
index 0a1b66e6ae..a93ea81742 100644
--- a/settings/l10n/et_EE.php
+++ b/settings/l10n/et_EE.php
@@ -16,6 +16,12 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Kasutajat ei saa lisada gruppi %s",
 "Unable to remove user from group %s" => "Kasutajat ei saa eemaldada grupist %s",
 "Couldn't update app." => "Rakenduse uuendamine ebaõnnestus.",
+"Wrong password" => "Vale parool",
+"No user supplied" => "Kasutajat ei sisestatud",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Palun sisesta administraatori taasteparool, muidu kaotad kõik kasutajate andmed",
+"Wrong admin recovery password. Please check the password and try again." => "Vale administraatori taasteparool. Palun kontrolli parooli ning proovi uuesti.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Tagarakend ei toeta parooli vahetust, kuid kasutaja krüptimisvõti uuendati edukalt.",
+"Unable to change password" => "Ei suuda parooli muuta",
 "Update to {appversion}" => "Uuenda versioonile {appversion}",
 "Disable" => "Lülita välja",
 "Enable" => "Lülita sisse",
diff --git a/settings/l10n/fi_FI.php b/settings/l10n/fi_FI.php
index 81ec9b483e..d50dc87e01 100644
--- a/settings/l10n/fi_FI.php
+++ b/settings/l10n/fi_FI.php
@@ -16,6 +16,8 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Käyttäjän tai ryhmän %s lisääminen ei onnistu",
 "Unable to remove user from group %s" => "Käyttäjän poistaminen ryhmästä %s ei onnistu",
 "Couldn't update app." => "Sovelluksen päivitys epäonnistui.",
+"Wrong password" => "Väärä salasana",
+"Unable to change password" => "Salasanan vaihto ei onnistunut",
 "Update to {appversion}" => "Päivitä versioon {appversion}",
 "Disable" => "Poista käytöstä",
 "Enable" => "Käytä",
diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php
index 6b1a829435..55c0e7fe9a 100644
--- a/settings/l10n/fr.php
+++ b/settings/l10n/fr.php
@@ -16,6 +16,9 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Impossible d'ajouter l'utilisateur au groupe %s",
 "Unable to remove user from group %s" => "Impossible de supprimer l'utilisateur du groupe %s",
 "Couldn't update app." => "Impossible de mettre à jour l'application",
+"Wrong password" => "Mot de passe incorrect",
+"No user supplied" => "Aucun utilisateur fourni",
+"Unable to change password" => "Impossible de modifier le mot de passe",
 "Update to {appversion}" => "Mettre à jour vers {appversion}",
 "Disable" => "Désactiver",
 "Enable" => "Activer",
diff --git a/settings/l10n/gl.php b/settings/l10n/gl.php
index e2537255fc..62a2f7b873 100644
--- a/settings/l10n/gl.php
+++ b/settings/l10n/gl.php
@@ -16,6 +16,12 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Non é posíbel engadir o usuario ao grupo %s",
 "Unable to remove user from group %s" => "Non é posíbel eliminar o usuario do grupo %s",
 "Couldn't update app." => "Non foi posíbel actualizar o aplicativo.",
+"Wrong password" => "Contrasinal incorrecto",
+"No user supplied" => "Non subministrado polo usuario",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Forneza un contrasinal de recuperación do administrador de recuperación, senón perderanse todos os datos do usuario",
+"Wrong admin recovery password. Please check the password and try again." => "Contrasinal de recuperación do administrador incorrecto. Comprobe o contrasinal e tenteo de novo.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "A infraestrutura non admite o cambio de contrasinal, mais a chave de cifrado dos usuarios foi actualizada correctamente.",
+"Unable to change password" => "Non é posíbel cambiar o contrasinal",
 "Update to {appversion}" => "Actualizar á {appversion}",
 "Disable" => "Desactivar",
 "Enable" => "Activar",
diff --git a/settings/l10n/it.php b/settings/l10n/it.php
index b06fc2a0f6..fc91bc5f17 100644
--- a/settings/l10n/it.php
+++ b/settings/l10n/it.php
@@ -16,6 +16,12 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Impossibile aggiungere l'utente al gruppo %s",
 "Unable to remove user from group %s" => "Impossibile rimuovere l'utente dal gruppo %s",
 "Couldn't update app." => "Impossibile aggiornate l'applicazione.",
+"Wrong password" => "Password errata",
+"No user supplied" => "Non è stato fornito alcun utente",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Fornisci una password amministrativa di ripristino altrimenti tutti i dati degli utenti saranno persi.",
+"Wrong admin recovery password. Please check the password and try again." => "Password amministrativa di ripristino errata. Controlla la password e prova ancora.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Il motore non supporta la modifica della password, ma la chiave di cifratura dell'utente è stata aggiornata correttamente.",
+"Unable to change password" => "Impossibile cambiare la password",
 "Update to {appversion}" => "Aggiorna a {appversion}",
 "Disable" => "Disabilita",
 "Enable" => "Abilita",
diff --git a/settings/l10n/pt_BR.php b/settings/l10n/pt_BR.php
index 7d36468e1a..6f3312fa78 100644
--- a/settings/l10n/pt_BR.php
+++ b/settings/l10n/pt_BR.php
@@ -16,6 +16,12 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Não foi possível adicionar usuário ao grupo %s",
 "Unable to remove user from group %s" => "Não foi possível remover usuário do grupo %s",
 "Couldn't update app." => "Não foi possível atualizar a app.",
+"Wrong password" => "Senha errada",
+"No user supplied" => "Nenhum usuário fornecido",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Por favor, forneça uma senha de recuperação admin, caso contrário todos os dados do usuário serão perdidos",
+"Wrong admin recovery password. Please check the password and try again." => "Senha de recuperação do administrador errada. Por favor verifique a senha e tente novamente.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Back-end não suporta alteração de senha, mas a chave de criptografia de usuários foi atualizado com sucesso....",
+"Unable to change password" => "Impossível modificar senha",
 "Update to {appversion}" => "Atualizar para {appversion}",
 "Disable" => "Desabilitar",
 "Enable" => "Habilitar",
diff --git a/settings/l10n/pt_PT.php b/settings/l10n/pt_PT.php
index cf0e66a24d..b664d2be3d 100644
--- a/settings/l10n/pt_PT.php
+++ b/settings/l10n/pt_PT.php
@@ -101,6 +101,7 @@ $TRANSLATIONS = array(
 "Your email address" => "O seu endereço de email",
 "Fill in an email address to enable password recovery" => "Preencha com o seu endereço de email para ativar a recuperação da palavra-chave",
 "Profile picture" => "Foto do perfil",
+"Abort" => "Abortar",
 "Language" => "Idioma",
 "Help translate" => "Ajude a traduzir",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/ru.php b/settings/l10n/ru.php
index 40dbbd4500..7bcceb8b90 100644
--- a/settings/l10n/ru.php
+++ b/settings/l10n/ru.php
@@ -16,15 +16,21 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Невозможно добавить пользователя в группу %s",
 "Unable to remove user from group %s" => "Невозможно удалить пользователя из группы %s",
 "Couldn't update app." => "Невозможно обновить приложение",
+"Wrong password" => "Неправильный пароль",
+"Wrong admin recovery password. Please check the password and try again." => "Неправильный пароль восстановления. Проверьте пароль и попробуйте еще раз.",
+"Unable to change password" => "Невозможно изменить пароль",
 "Update to {appversion}" => "Обновить до {версия приложения}",
 "Disable" => "Выключить",
 "Enable" => "Включить",
 "Please wait...." => "Подождите...",
+"Error while disabling app" => "Ошибка отключения приложения",
+"Error while enabling app" => "Ошибка включения приложения",
 "Updating...." => "Обновление...",
 "Error while updating app" => "Ошибка при обновлении приложения",
 "Error" => "Ошибка",
 "Update" => "Обновить",
 "Updated" => "Обновлено",
+"Select a profile picture" => "Выберите картинку профиля",
 "Decrypting files... Please wait, this can take some time." => "Расшифровка файлов... Пожалуйста, подождите, это может занять некоторое время.",
 "Saving..." => "Сохранение...",
 "deleted" => "удален",
@@ -99,11 +105,20 @@ $TRANSLATIONS = array(
 "Your email address" => "Ваш адрес электронной почты",
 "Fill in an email address to enable password recovery" => "Введите адрес электронной почты чтобы появилась возможность восстановления пароля",
 "Profile picture" => "Фото профиля",
+"Upload new" => "Закачать новую",
+"Select new from Files" => "Выберите новый из файлов",
+"Remove image" => "Удалить изображение",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Либо png, либо jpg. Изображение должно быть квадратным, но вы сможете обрезать его позже.",
+"Abort" => "Отмена",
+"Choose as profile image" => "Выберите изображение профиля",
 "Language" => "Язык",
 "Help translate" => "Помочь с переводом",
 "WebDAV" => "WebDAV",
 "Use this address to <a href=\"%s/server/5.0/user_manual/files/files.html\" target=\"_blank\">access your Files via WebDAV</a>" => "Используйте этот адрес чтобы получить доступ к вашим файлам через WebDav - <a href=\"%s/server/5.0/user_manual/files/files.html\" target=\"_blank\">",
 "Encryption" => "Шифрование",
+"The encryption app is no longer enabled, decrypt all your file" => "Приложение шифрования не активно, отмените шифрование всех ваших файлов.",
+"Log-in password" => "Пароль входа",
+"Decrypt all Files" => "Снять шифрование со всех файлов",
 "Login Name" => "Имя пользователя",
 "Create" => "Создать",
 "Admin Recovery Password" => "Восстановление Пароля Администратора",
diff --git a/settings/l10n/sr@latin.php b/settings/l10n/sr@latin.php
index f23e665bb2..b89f710c28 100644
--- a/settings/l10n/sr@latin.php
+++ b/settings/l10n/sr@latin.php
@@ -3,8 +3,10 @@ $TRANSLATIONS = array(
 "Authentication error" => "Greška pri autentifikaciji",
 "Language changed" => "Jezik je izmenjen",
 "Invalid request" => "Neispravan zahtev",
+"Error" => "Greška",
 "Groups" => "Grupe",
 "Delete" => "Obriši",
+"Security Warning" => "Bezbednosno upozorenje",
 "Select an App" => "Izaberite program",
 "Password" => "Lozinka",
 "Unable to change your password" => "Ne mogu da izmenim vašu lozinku",
-- 
GitLab


From e3013c580108e6b0cc332ba14976f3ffb4b7b274 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Fri, 20 Sep 2013 17:34:33 +0200
Subject: [PATCH 146/248] Add Navigation class to server container

---
 lib/app.php                       | 31 ++++++---------
 lib/navigationmanager.php         | 63 +++++++++++++++++++++++++++++++
 lib/public/inavigationmanager.php | 27 +++++++++++++
 lib/public/iservercontainer.php   |  5 +++
 lib/server.php                    | 10 +++++
 5 files changed, 117 insertions(+), 19 deletions(-)
 create mode 100644 lib/navigationmanager.php
 create mode 100644 lib/public/inavigationmanager.php

diff --git a/lib/app.php b/lib/app.php
index d98af2dc29..0ab1ee57f6 100644
--- a/lib/app.php
+++ b/lib/app.php
@@ -27,8 +27,6 @@
  * upgrading and removing apps.
  */
 class OC_App{
-	static private $activeapp = '';
-	static private $navigation = array();
 	static private $settingsForms = array();
 	static private $adminForms = array();
 	static private $personalForms = array();
@@ -271,7 +269,7 @@ class OC_App{
 
 	/**
 	 * @brief adds an entry to the navigation
-	 * @param string $data array containing the data
+	 * @param array $data array containing the data
 	 * @return bool
 	 *
 	 * This function adds a new entry to the navigation visible to users. $data
@@ -287,11 +285,7 @@ class OC_App{
 	 *     the navigation. Lower values come first.
 	 */
 	public static function addNavigationEntry( $data ) {
-		$data['active']=false;
-		if(!isset($data['icon'])) {
-			$data['icon']='';
-		}
-		OC_App::$navigation[] = $data;
+		OC::$server->getNavigationManager()->add($data);
 		return true;
 	}
 
@@ -305,9 +299,7 @@ class OC_App{
 	 * highlighting the current position of the user.
 	 */
 	public static function setActiveNavigationEntry( $id ) {
-		// load all the apps, to make sure we have all the navigation entries
-		self::loadApps();
-		self::$activeapp = $id;
+		OC::$server->getNavigationManager()->setActiveEntry($id);
 		return true;
 	}
 
@@ -315,15 +307,14 @@ class OC_App{
 	 * @brief Get the navigation entries for the $app
 	 * @param string $app app
 	 * @return array of the $data added with addNavigationEntry
+	 *
+	 * Warning: destroys the existing entries
 	 */
 	public static function getAppNavigationEntries($app) {
 		if(is_file(self::getAppPath($app).'/appinfo/app.php')) {
-			$save = self::$navigation;
-			self::$navigation = array();
+			OC::$server->getNavigationManager()->clear();
 			require $app.'/appinfo/app.php';
-			$app_entries = self::$navigation;
-			self::$navigation = $save;
-			return $app_entries;
+			return OC::$server->getNavigationManager()->getAll();
 		}
 		return array();
 	}
@@ -336,7 +327,7 @@ class OC_App{
 	 * setActiveNavigationEntry
 	 */
 	public static function getActiveNavigationEntry() {
-		return self::$activeapp;
+		return OC::$server->getNavigationManager()->getActiveEntry();
 	}
 
 	/**
@@ -419,8 +410,9 @@ class OC_App{
 
 	// This is private as well. It simply works, so don't ask for more details
 	private static function proceedNavigation( $list ) {
+		$activeapp = OC::$server->getNavigationManager()->getActiveEntry();
 		foreach( $list as &$naventry ) {
-			if( $naventry['id'] == self::$activeapp ) {
+			if( $naventry['id'] == $activeapp ) {
 				$naventry['active'] = true;
 			}
 			else{
@@ -572,7 +564,8 @@ class OC_App{
 	 *   - active: boolean, signals if the user is on this navigation entry
 	 */
 	public static function getNavigation() {
-		$navigation = self::proceedNavigation( self::$navigation );
+		$entries = OC::$server->getNavigationManager()->getAll();
+		$navigation = self::proceedNavigation( $entries );
 		return $navigation;
 	}
 
diff --git a/lib/navigationmanager.php b/lib/navigationmanager.php
new file mode 100644
index 0000000000..f032afd1fc
--- /dev/null
+++ b/lib/navigationmanager.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ *
+ */
+
+namespace OC;
+
+/**
+ * Manages the owncloud navigation
+ */
+class NavigationManager {
+	protected $entries = array();
+
+	/**
+	 * Creates a new navigation entry
+	 * @param array $entry containing: id, name, order, icon and href key
+	 */
+	public function add(array $entry) {
+		$entry['active'] = false;
+		if(!isset($entry['icon'])) {
+			$entry['icon'] = '';
+		}
+		$this->entries[] = $entry;
+	}
+
+	/**
+	 * @brief returns all the added Menu entries
+	 * @return array of the added entries
+	 */
+	public function getAll() {
+		return $this->entries;
+	}
+
+	/**
+	 * @brief removes all the entries
+	 */
+	public function clear() {
+		$this->entries = array();
+	}
+
+	/**
+	 * Sets the current navigation entry of the currently running app
+	 * @param string $id of the app entry to activate (from added $entry)
+	 */
+	public function setActiveEntry($id) {
+		$this->activeEntry = $id;
+	}
+
+	/**
+	 * @brief gets the active Menu entry
+	 * @return string id or empty string
+	 *
+	 * This function returns the id of the active navigation entry (set by
+	 * setActiveEntry
+	 */
+	public function getActiveEntry() {
+		return $this->activeEntry;
+	}
+}
diff --git a/lib/public/inavigationmanager.php b/lib/public/inavigationmanager.php
new file mode 100644
index 0000000000..21744dd1c2
--- /dev/null
+++ b/lib/public/inavigationmanager.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ * 
+ */
+
+namespace OCP;
+
+/**
+ * Manages the owncloud navigation
+ */
+interface INavigationManager {
+	/**
+	 * Creates a new navigation entry
+	 * @param array $entry containing: id, name, order, icon and href key
+	 */
+	public function add(array $entry);
+
+	/**
+	 * Sets the current navigation entry of the currently running app
+	 * @param string $appId id of the app entry to activate (from added $entry)
+	 */
+	public function setActiveEntry($appId);
+}
\ No newline at end of file
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index 5481cd6ce6..ebcc0fe4cd 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -69,6 +69,11 @@ interface IServerContainer {
 	 */
 	function getUserSession();
 
+	/**
+	 * @return \OCP\INavigationManager
+	 */
+	function getNavigationManager();
+
 	/**
 	 * Returns an ICache instance
 	 *
diff --git a/lib/server.php b/lib/server.php
index a5288fa148..13bda2dc30 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -97,6 +97,9 @@ class Server extends SimpleContainer implements IServerContainer {
 			});
 			return $userSession;
 		});
+		$this->registerService('NavigationManager', function($c) {
+			return new \OC\NavigationManager();
+		});
 		$this->registerService('UserCache', function($c) {
 			return new UserCache();
 		});
@@ -152,6 +155,13 @@ class Server extends SimpleContainer implements IServerContainer {
 		return $this->query('UserSession');
 	}
 
+	/**
+	 * @return \OC\NavigationManager
+	 */
+	function getNavigationManager() {
+		return $this->query('NavigationManager');
+	}
+
 	/**
 	 * Returns an ICache instance
 	 *
-- 
GitLab


From e92abfd4d8dfb9dbb42ccfc0c23193b1ddde3bbf Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Fri, 20 Sep 2013 20:21:24 +0200
Subject: [PATCH 147/248] Add Config container class to server container

---
 lib/allconfig.php               | 78 +++++++++++++++++++++++++++++++++
 lib/public/iconfig.php          | 59 +++++++++++++++++++++++++
 lib/public/iservercontainer.php |  5 +++
 lib/server.php                  |  9 ++++
 4 files changed, 151 insertions(+)
 create mode 100644 lib/allconfig.php
 create mode 100644 lib/public/iconfig.php

diff --git a/lib/allconfig.php b/lib/allconfig.php
new file mode 100644
index 0000000000..81c8892348
--- /dev/null
+++ b/lib/allconfig.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ * 
+ */
+
+namespace OC;
+
+/**
+ * Class to combine all the configuration options ownCloud offers
+ */
+class AllConfig implements \OCP\IConfig {
+	/**
+	 * Sets a new systemwide value
+	 * @param string $key the key of the value, under which will be saved
+	 * @param string $value the value that should be stored
+	 * @todo need a use case for this
+	 */
+// 	public function setSystemValue($key, $value) {
+// 		\OCP\Config::setSystemValue($key, $value);
+// 	}
+
+	/**
+	 * Looks up a systemwide defined value
+	 * @param string $key the key of the value, under which it was saved
+	 * @return string the saved value
+	 */
+	public function getSystemValue($key) {
+		return \OCP\Config::getSystemValue($key, '');
+	}
+
+
+	/**
+	 * Writes a new appwide value
+	 * @param string $appName the appName that we want to store the value under
+	 * @param string $key the key of the value, under which will be saved
+	 * @param string $value the value that should be stored
+	 */
+	public function setAppValue($appName, $key, $value) {
+		\OCP\Config::setAppValue($appName, $key, $value);
+	}
+
+	/**
+	 * Looks up an appwide defined value
+	 * @param string $appName the appName that we stored the value under
+	 * @param string $key the key of the value, under which it was saved
+	 * @return string the saved value
+	 */
+	public function getAppValue($appName, $key) {
+		return \OCP\Config::getAppValue($appName, $key, '');
+	}
+
+
+	/**
+	 * Set a user defined value
+	 * @param string $userId the userId of the user that we want to store the value under
+	 * @param string $appName the appName that we want to store the value under
+	 * @param string $key the key under which the value is being stored
+	 * @param string $value the value that you want to store
+	 */
+	public function setUserValue($userId, $appName, $key, $value) {
+		\OCP\Config::setUserValue($userId, $appName, $key, $value);
+	}
+
+
+	/**
+	 * Shortcut for getting a user defined value
+	 * @param string $userId the userId of the user that we want to store the value under
+	 * @param string $appName the appName that we stored the value under
+	 * @param string $key the key under which the value is being stored
+	 */
+	public function getUserValue($userId, $appName, $key){
+		return \OCP\Config::getUserValue($userId, $appName, $key);
+	}
+}
diff --git a/lib/public/iconfig.php b/lib/public/iconfig.php
new file mode 100644
index 0000000000..0c150ec351
--- /dev/null
+++ b/lib/public/iconfig.php
@@ -0,0 +1,59 @@
+<?php
+/** * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ * 
+ */
+namespace OCP;
+
+/**
+ * Access to all the configuration options ownCloud offers
+ */
+interface IConfig {
+	/**
+	 * Sets a new systemwide value
+	 * @param string $key the key of the value, under which will be saved
+	 * @param string $value the value that should be stored
+	 * @todo need a use case for this
+	 */
+// 	public function setSystemValue($key, $value);
+
+	/**
+	 * Looks up a systemwide defined value
+	 * @param string $key the key of the value, under which it was saved
+	 * @return string the saved value
+	 */
+	public function getSystemValue($key);
+
+
+	/**
+	 * Writes a new appwide value
+	 * @param string $key the key of the value, under which will be saved
+	 * @param string $value the value that should be stored
+	 */
+	public function setAppValue($key, $value, $appName=null);
+
+	/**
+	 * Looks up an appwide defined value
+	 * @param string $key the key of the value, under which it was saved
+	 * @return string the saved value
+	 */
+	public function getAppValue($key, $appName=null);
+
+
+	/**
+	 * Shortcut for setting a user defined value
+	 * @param string $key the key under which the value is being stored
+	 * @param string $value the value that you want to store
+	 * @param string $userId the userId of the user that we want to store the value under, defaults to the current one
+	 */
+	public function setUserValue($key, $value, $userId=null);
+
+	/**
+	 * Shortcut for getting a user defined value
+	 * @param string $key the key under which the value is being stored
+	 * @param string $userId the userId of the user that we want to store the value under, defaults to the current one
+	 */
+	public function getUserValue($key, $userId=null);
+}
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index ebcc0fe4cd..4478a4e8a6 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -74,6 +74,11 @@ interface IServerContainer {
 	 */
 	function getNavigationManager();
 
+	/**
+	 * @return \OCP\IConfig
+	 */
+	function getConfig();
+
 	/**
 	 * Returns an ICache instance
 	 *
diff --git a/lib/server.php b/lib/server.php
index 13bda2dc30..57e7f4ab4f 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -100,6 +100,9 @@ class Server extends SimpleContainer implements IServerContainer {
 		$this->registerService('NavigationManager', function($c) {
 			return new \OC\NavigationManager();
 		});
+		$this->registerService('AllConfig', function($c) {
+			return new \OC\AllConfig();
+		});
 		$this->registerService('UserCache', function($c) {
 			return new UserCache();
 		});
@@ -162,6 +165,12 @@ class Server extends SimpleContainer implements IServerContainer {
 		return $this->query('NavigationManager');
 	}
 
+	/**
+	 * @return \OC\Config
+	 */
+	function getConfig() {
+		return $this->query('AllConfig');
+	}
 	/**
 	 * Returns an ICache instance
 	 *
-- 
GitLab


From 45a7b0dbac307df9ea38a914fd3f1cfb9202a994 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Fri, 20 Sep 2013 20:29:15 +0200
Subject: [PATCH 148/248] Fix the apps enabling/disabling in settings

---
 settings/js/apps.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/settings/js/apps.js b/settings/js/apps.js
index 54810776d2..a55c55e24c 100644
--- a/settings/js/apps.js
+++ b/settings/js/apps.js
@@ -84,6 +84,7 @@ OC.Settings.Apps = OC.Settings.Apps || {
 				}
 				else {
 					appitem.data('active',false);
+					element.data('active',false);
 					OC.Settings.Apps.removeNavigation(appid);
 					appitem.removeClass('active');
 					element.val(t('settings','Enable'));
@@ -104,6 +105,7 @@ OC.Settings.Apps = OC.Settings.Apps || {
 				} else {
 					OC.Settings.Apps.addNavigation(appid);
 					appitem.data('active',true);
+					element.data('active',true);
 					appitem.addClass('active');
 					element.val(t('settings','Disable'));
 				}
@@ -158,7 +160,7 @@ OC.Settings.Apps = OC.Settings.Apps || {
 			if(response.status === 'success'){
 				var navIds=response.nav_ids;
 				for(var i=0; i< navIds.length; i++){
-					$('#apps').children('li[data-id="'+navIds[i]+'"]').remove();
+					$('#apps .wrapper').children('li[data-id="'+navIds[i]+'"]').remove();
 				}
 			}
 		});
-- 
GitLab


From d84d548618651c0a66bd2696d6547b33ca6b8e87 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Fri, 20 Sep 2013 20:34:17 +0200
Subject: [PATCH 149/248] when storing back the data field 'encrypted' it is
 necessary to cast the boolean to an integer to make pg happy

---
 lib/files/cache/scanner.php       | 2 ++
 tests/lib/files/cache/scanner.php | 1 +
 2 files changed, 3 insertions(+)

diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
index fdbce0d51f..d296c60686 100644
--- a/lib/files/cache/scanner.php
+++ b/lib/files/cache/scanner.php
@@ -121,6 +121,8 @@ class Scanner extends BasicEmitter {
 									}
 									$parentCacheData = $this->cache->get($parent);
 									$parentCacheData['etag'] = $this->storage->getETag($parent);
+									// the boolean to int conversion is necessary to make pg happy
+									$parentCacheData['encrypted'] = $parentCacheData['encrypted'] ? 1 : 0;
 									$this->cache->put($parent, $parentCacheData);
 								}
 							}
diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php
index b137799bbc..8112eada17 100644
--- a/tests/lib/files/cache/scanner.php
+++ b/tests/lib/files/cache/scanner.php
@@ -195,6 +195,7 @@ class Scanner extends \PHPUnit_Framework_TestCase {
 		$data1 = $this->cache->get('folder');
 		$data2 = $this->cache->get('');
 		$data0['etag'] = '';
+		$data0['encrypted'] = $data0['encrypted'] ? 1: 0;
 		$this->cache->put('folder/bar.txt', $data0);
 
 		// rescan
-- 
GitLab


From 3189ee2daf3723f9e592afbf48d124d6144e9d67 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Fri, 20 Sep 2013 20:47:24 +0200
Subject: [PATCH 150/248] setting a default on filecache column
 unencrypted_size

---
 db_structure.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/db_structure.xml b/db_structure.xml
index 24742c242e..86f9989e1c 100644
--- a/db_structure.xml
+++ b/db_structure.xml
@@ -299,7 +299,7 @@
             <field>
                 <name>unencrypted_size</name>
                 <type>integer</type>
-                <default></default>
+                <default>0</default>
                 <notnull>true</notnull>
                 <length>8</length>
             </field>
-- 
GitLab


From 9116303cfc5259f05ec348809bfbc8757d4657cb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Fri, 20 Sep 2013 21:40:54 +0200
Subject: [PATCH 151/248] fixing typos

---
 lib/allconfig.php      | 8 ++++----
 lib/public/iconfig.php | 8 ++++----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/lib/allconfig.php b/lib/allconfig.php
index 81c8892348..353608e5d2 100644
--- a/lib/allconfig.php
+++ b/lib/allconfig.php
@@ -14,7 +14,7 @@ namespace OC;
  */
 class AllConfig implements \OCP\IConfig {
 	/**
-	 * Sets a new systemwide value
+	 * Sets a new system wide value
 	 * @param string $key the key of the value, under which will be saved
 	 * @param string $value the value that should be stored
 	 * @todo need a use case for this
@@ -24,7 +24,7 @@ class AllConfig implements \OCP\IConfig {
 // 	}
 
 	/**
-	 * Looks up a systemwide defined value
+	 * Looks up a system wide defined value
 	 * @param string $key the key of the value, under which it was saved
 	 * @return string the saved value
 	 */
@@ -34,7 +34,7 @@ class AllConfig implements \OCP\IConfig {
 
 
 	/**
-	 * Writes a new appwide value
+	 * Writes a new app wide value
 	 * @param string $appName the appName that we want to store the value under
 	 * @param string $key the key of the value, under which will be saved
 	 * @param string $value the value that should be stored
@@ -44,7 +44,7 @@ class AllConfig implements \OCP\IConfig {
 	}
 
 	/**
-	 * Looks up an appwide defined value
+	 * Looks up an app wide defined value
 	 * @param string $appName the appName that we stored the value under
 	 * @param string $key the key of the value, under which it was saved
 	 * @return string the saved value
diff --git a/lib/public/iconfig.php b/lib/public/iconfig.php
index 0c150ec351..dab4590969 100644
--- a/lib/public/iconfig.php
+++ b/lib/public/iconfig.php
@@ -12,7 +12,7 @@ namespace OCP;
  */
 interface IConfig {
 	/**
-	 * Sets a new systemwide value
+	 * Sets a new system wide value
 	 * @param string $key the key of the value, under which will be saved
 	 * @param string $value the value that should be stored
 	 * @todo need a use case for this
@@ -20,7 +20,7 @@ interface IConfig {
 // 	public function setSystemValue($key, $value);
 
 	/**
-	 * Looks up a systemwide defined value
+	 * Looks up a system wide defined value
 	 * @param string $key the key of the value, under which it was saved
 	 * @return string the saved value
 	 */
@@ -28,14 +28,14 @@ interface IConfig {
 
 
 	/**
-	 * Writes a new appwide value
+	 * Writes a new app wide value
 	 * @param string $key the key of the value, under which will be saved
 	 * @param string $value the value that should be stored
 	 */
 	public function setAppValue($key, $value, $appName=null);
 
 	/**
-	 * Looks up an appwide defined value
+	 * Looks up an app wide defined value
 	 * @param string $key the key of the value, under which it was saved
 	 * @return string the saved value
 	 */
-- 
GitLab


From e31f6c01e85bea52e973df65a7610d490bf6336c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Fri, 20 Sep 2013 21:43:17 +0200
Subject: [PATCH 152/248] fixing PHPDoc

---
 lib/public/app.php | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/lib/public/app.php b/lib/public/app.php
index a1ecf524cc..0a5721b334 100644
--- a/lib/public/app.php
+++ b/lib/public/app.php
@@ -35,10 +35,10 @@ namespace OCP;
  */
 class App {
 	/**
-	 * @brief Makes owncloud aware of this app
+	 * @brief Makes ownCloud aware of this app
 	 * @brief This call is deprecated and not necessary to use.
 	 * @param $data array with all information
-	 * @returns true/false
+	 * @returns boolean
 	 *
 	 * @deprecated this method is deprecated
 	 * Do not call it anymore
@@ -52,7 +52,7 @@ class App {
 	/**
 	 * @brief adds an entry to the navigation
 	 * @param $data array containing the data
-	 * @returns true/false
+	 * @returns boolean
 	 *
 	 * This function adds a new entry to the navigation visible to users. $data
 	 * is an associative array.
@@ -72,8 +72,8 @@ class App {
 
 	/**
 	 * @brief marks a navigation entry as active
-	 * @param $id id of the entry
-	 * @returns true/false
+	 * @param $id string id of the entry
+	 * @returns boolean
 	 *
 	 * This function sets a navigation entry as active and removes the 'active'
 	 * property from all other entries. The templates can use this for
@@ -104,7 +104,7 @@ class App {
 	/**
 	 * @brief Read app metadata from the info.xml file
 	 * @param string $app id of the app or the path of the info.xml file
-	 * @param boolean path (optional)
+	 * @param boolean $path (optional)
 	 * @returns array
 	*/
 	public static function getAppInfo( $app, $path=false ) {
@@ -114,7 +114,7 @@ class App {
 	/**
 	 * @brief checks whether or not an app is enabled
 	 * @param $app app
-	 * @returns true/false
+	 * @returns boolean
 	 *
 	 * This function checks whether or not an app is enabled.
 	 */
@@ -133,7 +133,7 @@ class App {
 	/**
 	 * @brief Get the last version of the app, either from appinfo/version or from appinfo/info.xml
 	 * @param $app app
-	 * @returns true/false
+	 * @returns boolean
 	 */
 	public static function getAppVersion( $app ) {
 		return \OC_App::getAppVersion( $app );
-- 
GitLab


From f83f32326949d6bc16c2b0d7aefcdbb48f9119d7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Fri, 20 Sep 2013 21:45:27 +0200
Subject: [PATCH 153/248] fixing typos + adding missing filed $activeEntry

---
 lib/navigationmanager.php         | 3 ++-
 lib/public/inavigationmanager.php | 4 ++--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/lib/navigationmanager.php b/lib/navigationmanager.php
index f032afd1fc..cf3bf84d99 100644
--- a/lib/navigationmanager.php
+++ b/lib/navigationmanager.php
@@ -10,10 +10,11 @@
 namespace OC;
 
 /**
- * Manages the owncloud navigation
+ * Manages the ownCloud navigation
  */
 class NavigationManager {
 	protected $entries = array();
+	protected $activeEntry;
 
 	/**
 	 * Creates a new navigation entry
diff --git a/lib/public/inavigationmanager.php b/lib/public/inavigationmanager.php
index 21744dd1c2..f89e790c1d 100644
--- a/lib/public/inavigationmanager.php
+++ b/lib/public/inavigationmanager.php
@@ -10,7 +10,7 @@
 namespace OCP;
 
 /**
- * Manages the owncloud navigation
+ * Manages the ownCloud navigation
  */
 interface INavigationManager {
 	/**
@@ -24,4 +24,4 @@ interface INavigationManager {
 	 * @param string $appId id of the app entry to activate (from added $entry)
 	 */
 	public function setActiveEntry($appId);
-}
\ No newline at end of file
+}
-- 
GitLab


From d3d52dd23f3da9a3d9ed2b50b1abd1a229dc4be8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Fri, 20 Sep 2013 21:57:48 +0200
Subject: [PATCH 154/248] PHPDoc & get UserManager from container for RooFolder

---
 lib/server.php | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/lib/server.php b/lib/server.php
index 57e7f4ab4f..804af6b0ea 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -4,6 +4,7 @@ namespace OC;
 
 use OC\AppFramework\Http\Request;
 use OC\AppFramework\Utility\SimpleContainer;
+use OC\Cache\UserCache;
 use OC\Files\Node\Root;
 use OC\Files\View;
 use OCP\IServerContainer;
@@ -49,9 +50,11 @@ class Server extends SimpleContainer implements IServerContainer {
 			return new PreviewManager();
 		});
 		$this->registerService('RootFolder', function($c) {
-			// TODO: get user and user manager from container as well
+			// TODO: get user from container as well
 			$user = \OC_User::getUser();
-			$user = \OC_User::getManager()->get($user);
+			/** @var $c SimpleContainer */
+			$userManager = $c->query('UserManager');
+			$user = $userManager->get($user);
 			$manager = \OC\Files\Filesystem::getMountManager();
 			$view = new View();
 			return new Root($manager, $view, $user);
@@ -60,6 +63,7 @@ class Server extends SimpleContainer implements IServerContainer {
 			return new \OC\User\Manager();
 		});
 		$this->registerService('UserSession', function($c) {
+			/** @var $c SimpleContainer */
 			$manager = $c->query('UserManager');
 			$userSession = new \OC\User\Session($manager, \OC::$session);
 			$userSession->listen('\OC\User', 'preCreateUser', function ($uid, $password) {
-- 
GitLab


From 0c6dcdba6b890dc170f59a461ab80961a85a53db Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Fri, 20 Sep 2013 22:45:22 +0200
Subject: [PATCH 155/248] Add missing implements and fix parameters in IConfig

---
 lib/allconfig.php            |  1 -
 lib/navigationmanager.php    |  2 +-
 lib/public/iconfig.php       | 22 ++++++++++++++--------
 lib/public/idbconnection.php |  3 +++
 lib/user/session.php         |  2 +-
 5 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/lib/allconfig.php b/lib/allconfig.php
index 353608e5d2..72aabf6079 100644
--- a/lib/allconfig.php
+++ b/lib/allconfig.php
@@ -65,7 +65,6 @@ class AllConfig implements \OCP\IConfig {
 		\OCP\Config::setUserValue($userId, $appName, $key, $value);
 	}
 
-
 	/**
 	 * Shortcut for getting a user defined value
 	 * @param string $userId the userId of the user that we want to store the value under
diff --git a/lib/navigationmanager.php b/lib/navigationmanager.php
index cf3bf84d99..1f657b9ad8 100644
--- a/lib/navigationmanager.php
+++ b/lib/navigationmanager.php
@@ -12,7 +12,7 @@ namespace OC;
 /**
  * Manages the ownCloud navigation
  */
-class NavigationManager {
+class NavigationManager implements \OCP\INavigationManager {
 	protected $entries = array();
 	protected $activeEntry;
 
diff --git a/lib/public/iconfig.php b/lib/public/iconfig.php
index dab4590969..850bddf693 100644
--- a/lib/public/iconfig.php
+++ b/lib/public/iconfig.php
@@ -1,10 +1,12 @@
 <?php
-/** * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
  * This file is licensed under the Affero General Public License version 3 or
  * later.
  * See the COPYING-README file.
  * 
  */
+
 namespace OCP;
 
 /**
@@ -29,31 +31,35 @@ interface IConfig {
 
 	/**
 	 * Writes a new app wide value
+	 * @param string $appName the appName that we want to store the value under
 	 * @param string $key the key of the value, under which will be saved
 	 * @param string $value the value that should be stored
 	 */
-	public function setAppValue($key, $value, $appName=null);
+	public function setAppValue($appName, $key, $value);
 
 	/**
 	 * Looks up an app wide defined value
+	 * @param string $appName the appName that we stored the value under
 	 * @param string $key the key of the value, under which it was saved
 	 * @return string the saved value
 	 */
-	public function getAppValue($key, $appName=null);
+	public function getAppValue($appName, $key);
 
 
 	/**
-	 * Shortcut for setting a user defined value
+	 * Set a user defined value
+	 * @param string $userId the userId of the user that we want to store the value under
+	 * @param string $appName the appName that we want to store the value under
 	 * @param string $key the key under which the value is being stored
 	 * @param string $value the value that you want to store
-	 * @param string $userId the userId of the user that we want to store the value under, defaults to the current one
 	 */
-	public function setUserValue($key, $value, $userId=null);
+	public function setUserValue($userId, $appName, $key, $value);
 
 	/**
 	 * Shortcut for getting a user defined value
+	 * @param string $userId the userId of the user that we want to store the value under
+	 * @param string $appName the appName that we stored the value under
 	 * @param string $key the key under which the value is being stored
-	 * @param string $userId the userId of the user that we want to store the value under, defaults to the current one
 	 */
-	public function getUserValue($key, $userId=null);
+	public function getUserValue($userId, $appName, $key);
 }
diff --git a/lib/public/idbconnection.php b/lib/public/idbconnection.php
index 67dd7ccfc3..c741a0f061 100644
--- a/lib/public/idbconnection.php
+++ b/lib/public/idbconnection.php
@@ -50,16 +50,19 @@ interface IDBConnection {
 
 	/**
 	 * @brief Start a transaction
+	 * @return bool TRUE on success or FALSE on failure
 	 */
 	public function beginTransaction();
 
 	/**
 	 * @brief Commit the database changes done during a transaction that is in progress
+	 * @return bool TRUE on success or FALSE on failure
 	 */
 	public function commit();
 
 	/**
 	 * @brief Rollback the database changes done during a transaction that is in progress
+	 * @return bool TRUE on success or FALSE on failure
 	 */
 	public function rollBack();
 
diff --git a/lib/user/session.php b/lib/user/session.php
index 9a6c669e93..98a24d5bb0 100644
--- a/lib/user/session.php
+++ b/lib/user/session.php
@@ -27,7 +27,7 @@ use OC\Hooks\Emitter;
  *
  * @package OC\User
  */
-class Session implements Emitter {
+class Session implements Emitter, \OCP\IUserSession {
 	/**
 	 * @var \OC\User\Manager $manager
 	 */
-- 
GitLab


From a2f82da572eaf9cebfe4de53b329af700d63e93f Mon Sep 17 00:00:00 2001
From: Andreas Fischer <bantu@owncloud.com>
Date: Fri, 20 Sep 2013 23:52:05 +0200
Subject: [PATCH 156/248] Use update() instead of put().

---
 lib/files/cache/scanner.php | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
index d296c60686..3f1970fb4a 100644
--- a/lib/files/cache/scanner.php
+++ b/lib/files/cache/scanner.php
@@ -121,9 +121,7 @@ class Scanner extends BasicEmitter {
 									}
 									$parentCacheData = $this->cache->get($parent);
 									$parentCacheData['etag'] = $this->storage->getETag($parent);
-									// the boolean to int conversion is necessary to make pg happy
-									$parentCacheData['encrypted'] = $parentCacheData['encrypted'] ? 1 : 0;
-									$this->cache->put($parent, $parentCacheData);
+									$this->cache->update($parentCacheData['fileid'], $parentCacheData);
 								}
 							}
 						}
-- 
GitLab


From 011bca7b7f0a67c9cf23773b625ee334db1e6c06 Mon Sep 17 00:00:00 2001
From: Andreas Fischer <bantu@owncloud.com>
Date: Fri, 20 Sep 2013 23:53:02 +0200
Subject: [PATCH 157/248] Only update the etag. Do not re-submit any other
 unchanged data.

---
 lib/files/cache/scanner.php | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
index 3f1970fb4a..fcb8ccdc8d 100644
--- a/lib/files/cache/scanner.php
+++ b/lib/files/cache/scanner.php
@@ -120,8 +120,9 @@ class Scanner extends BasicEmitter {
 										$parent = '';
 									}
 									$parentCacheData = $this->cache->get($parent);
-									$parentCacheData['etag'] = $this->storage->getETag($parent);
-									$this->cache->update($parentCacheData['fileid'], $parentCacheData);
+									$this->cache->update($parentCacheData['fileid'], array(
+										'etag' => $this->storage->getETag($parent),
+									));
 								}
 							}
 						}
-- 
GitLab


From de2e6e137b3be966622b0b608a3b69f6282e2e56 Mon Sep 17 00:00:00 2001
From: Andreas Fischer <bantu@owncloud.com>
Date: Sat, 21 Sep 2013 00:12:13 +0200
Subject: [PATCH 158/248] Do not convert boolean to integer in tests. put()
 already does this.

---
 tests/lib/files/cache/scanner.php | 1 -
 1 file changed, 1 deletion(-)

diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php
index 8112eada17..b137799bbc 100644
--- a/tests/lib/files/cache/scanner.php
+++ b/tests/lib/files/cache/scanner.php
@@ -195,7 +195,6 @@ class Scanner extends \PHPUnit_Framework_TestCase {
 		$data1 = $this->cache->get('folder');
 		$data2 = $this->cache->get('');
 		$data0['etag'] = '';
-		$data0['encrypted'] = $data0['encrypted'] ? 1: 0;
 		$this->cache->put('folder/bar.txt', $data0);
 
 		// rescan
-- 
GitLab


From 2a17025d537c41b9366c9592c985b911d9394337 Mon Sep 17 00:00:00 2001
From: Andreas Fischer <bantu@owncloud.com>
Date: Sat, 21 Sep 2013 02:20:01 +0200
Subject: [PATCH 159/248] Move bool to int conversion to buildParts(), so it
 also happens for update().

---
 lib/files/cache/cache.php | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lib/files/cache/cache.php b/lib/files/cache/cache.php
index 39e36684b7..e69733727a 100644
--- a/lib/files/cache/cache.php
+++ b/lib/files/cache/cache.php
@@ -201,7 +201,6 @@ class Cache {
 			$data['path'] = $file;
 			$data['parent'] = $this->getParentId($file);
 			$data['name'] = \OC_Util::basename($file);
-			$data['encrypted'] = isset($data['encrypted']) ? ((int)$data['encrypted']) : 0;
 
 			list($queryParts, $params) = $this->buildParts($data);
 			$queryParts[] = '`storage`';
@@ -265,6 +264,9 @@ class Cache {
 						$params[] = $value;
 						$queryParts[] = '`mtime`';
 					}
+				} elseif ($name === 'encrypted') {
+					// Boolean to integer conversion
+					$value = $value ? 1 : 0;
 				}
 				$params[] = $value;
 				$queryParts[] = '`' . $name . '`';
-- 
GitLab


From a1d4eb1f956148fe9002dd17bdfef3bd66063bf0 Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind@owncloud.com>
Date: Sun, 22 Sep 2013 01:23:18 +0200
Subject: [PATCH 160/248] files: when filtering search results, ensure results
 are children of the fakeroot not just path starting the same

---
 lib/files/view.php       | 14 ++++++++------
 tests/lib/files/view.php | 14 ++++++++++++++
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/lib/files/view.php b/lib/files/view.php
index 968b755a66..aa08a5f7cc 100644
--- a/lib/files/view.php
+++ b/lib/files/view.php
@@ -500,7 +500,7 @@ class View {
 				} else {
 					if ($this->is_dir($path1) && ($dh = $this->opendir($path1))) {
 						$result = $this->mkdir($path2);
-						if(is_resource($dh)) {
+						if (is_resource($dh)) {
 							while (($file = readdir($dh)) !== false) {
 								if (!Filesystem::isIgnoredDir($file)) {
 									$result = $this->copy($path1 . '/' . $file, $path2 . '/' . $file);
@@ -975,7 +975,7 @@ class View {
 	/**
 	 * search for files by mimetype
 	 *
-	 * @param string $query
+	 * @param string $mimetype
 	 * @return array
 	 */
 	public function searchByMime($mimetype) {
@@ -998,7 +998,7 @@ class View {
 
 			$results = $cache->$method($query);
 			foreach ($results as $result) {
-				if (substr($mountPoint . $result['path'], 0, $rootLength) === $this->fakeRoot) {
+				if (substr($mountPoint . $result['path'], 0, $rootLength + 1) === $this->fakeRoot . '/') {
 					$result['path'] = substr($mountPoint . $result['path'], $rootLength);
 					$files[] = $result;
 				}
@@ -1012,9 +1012,11 @@ class View {
 
 					$relativeMountPoint = substr($mountPoint, $rootLength);
 					$results = $cache->$method($query);
-					foreach ($results as $result) {
-						$result['path'] = $relativeMountPoint . $result['path'];
-						$files[] = $result;
+					if ($results) {
+						foreach ($results as $result) {
+							$result['path'] = $relativeMountPoint . $result['path'];
+							$files[] = $result;
+						}
 					}
 				}
 			}
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index 0de436f570..3043f132b7 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -354,8 +354,22 @@ class View extends \PHPUnit_Framework_TestCase {
 		$this->hookPath = $params['path'];
 	}
 
+	public function testSearchNotOutsideView() {
+		$storage1 = $this->getTestStorage();
+		\OC\Files\Filesystem::mount($storage1, array(), '/');
+		$storage1->rename('folder', 'foo');
+		$scanner = $storage1->getScanner();
+		$scanner->scan('');
+
+		$view = new \OC\Files\View('/foo');
+
+		$result = $view->search('.txt');
+		$this->assertCount(1, $result);
+	}
+
 	/**
 	 * @param bool $scan
+	 * @param string $class
 	 * @return \OC\Files\Storage\Storage
 	 */
 	private function getTestStorage($scan = true, $class = '\OC\Files\Storage\Temporary') {
-- 
GitLab


From 28918d61d2375e879fdba582b8ab2f9377ff7a24 Mon Sep 17 00:00:00 2001
From: Jenkins for ownCloud <thomas.mueller@tmit.eu>
Date: Sun, 22 Sep 2013 12:58:42 -0400
Subject: [PATCH 161/248] [tx-robot] updated from transifex

---
 apps/files/l10n/de.php              |  5 ++++
 apps/files/l10n/de_DE.php           |  5 ++++
 apps/files/l10n/fi_FI.php           |  3 ++
 apps/files/l10n/it.php              |  5 ++++
 apps/files/l10n/pt_BR.php           |  5 ++++
 apps/files/l10n/ro.php              | 12 ++++++--
 apps/files/l10n/ru.php              |  5 ++++
 apps/files_trashbin/l10n/ro.php     |  4 +--
 apps/user_ldap/l10n/ru.php          |  7 +++++
 core/l10n/ar.php                    |  3 ++
 core/l10n/bg_BG.php                 |  1 +
 core/l10n/bn_BD.php                 |  1 +
 core/l10n/ca.php                    | 10 ++++++-
 core/l10n/cs_CZ.php                 |  1 +
 core/l10n/cy_GB.php                 |  1 +
 core/l10n/da.php                    |  1 +
 core/l10n/de.php                    | 10 ++++++-
 core/l10n/de_CH.php                 |  1 +
 core/l10n/de_DE.php                 | 10 ++++++-
 core/l10n/el.php                    |  1 +
 core/l10n/en_GB.php                 |  1 +
 core/l10n/eo.php                    |  1 +
 core/l10n/es.php                    |  1 +
 core/l10n/es_AR.php                 |  1 +
 core/l10n/et_EE.php                 |  1 +
 core/l10n/eu.php                    |  1 +
 core/l10n/fa.php                    |  1 +
 core/l10n/fi_FI.php                 |  4 +++
 core/l10n/fr.php                    |  1 +
 core/l10n/gl.php                    |  1 +
 core/l10n/he.php                    |  1 +
 core/l10n/hr.php                    |  1 +
 core/l10n/hu_HU.php                 |  1 +
 core/l10n/ia.php                    |  1 +
 core/l10n/id.php                    |  1 +
 core/l10n/is.php                    |  1 +
 core/l10n/it.php                    | 16 +++++++---
 core/l10n/ja_JP.php                 |  1 +
 core/l10n/ka_GE.php                 |  1 +
 core/l10n/ko.php                    |  1 +
 core/l10n/lb.php                    |  1 +
 core/l10n/lt_LT.php                 |  1 +
 core/l10n/lv.php                    |  1 +
 core/l10n/mk.php                    |  1 +
 core/l10n/ms_MY.php                 |  1 +
 core/l10n/my_MM.php                 |  1 +
 core/l10n/nb_NO.php                 |  1 +
 core/l10n/nl.php                    |  1 +
 core/l10n/nn_NO.php                 |  1 +
 core/l10n/oc.php                    |  1 +
 core/l10n/pa.php                    |  1 +
 core/l10n/pl.php                    |  1 +
 core/l10n/pt_BR.php                 | 10 ++++++-
 core/l10n/pt_PT.php                 |  1 +
 core/l10n/ro.php                    | 14 +++++++--
 core/l10n/ru.php                    | 18 ++++++++++-
 core/l10n/si_LK.php                 |  1 +
 core/l10n/sk_SK.php                 |  1 +
 core/l10n/sl.php                    |  1 +
 core/l10n/sq.php                    |  1 +
 core/l10n/sr.php                    |  1 +
 core/l10n/sr@latin.php              |  1 +
 core/l10n/sv.php                    |  1 +
 core/l10n/ta_LK.php                 |  1 +
 core/l10n/te.php                    |  1 +
 core/l10n/th_TH.php                 |  1 +
 core/l10n/tr.php                    |  1 +
 core/l10n/ug.php                    |  1 +
 core/l10n/uk.php                    |  1 +
 core/l10n/ur_PK.php                 |  1 +
 core/l10n/vi.php                    |  1 +
 core/l10n/zh_CN.php                 |  1 +
 core/l10n/zh_HK.php                 |  1 +
 core/l10n/zh_TW.php                 |  1 +
 l10n/ar/core.po                     | 13 ++++----
 l10n/bg_BG/core.po                  |  6 ++--
 l10n/bn_BD/core.po                  |  6 ++--
 l10n/ca/core.po                     | 26 ++++++++--------
 l10n/ca/settings.po                 | 18 +++++------
 l10n/cs_CZ/core.po                  |  6 ++--
 l10n/cy_GB/core.po                  |  6 ++--
 l10n/da/core.po                     |  6 ++--
 l10n/de/core.po                     | 26 ++++++++--------
 l10n/de/files.po                    | 18 +++++------
 l10n/de_CH/core.po                  |  6 ++--
 l10n/de_DE/core.po                  | 26 ++++++++--------
 l10n/de_DE/files.po                 | 18 +++++------
 l10n/el/core.po                     |  6 ++--
 l10n/en_GB/core.po                  |  6 ++--
 l10n/eo/core.po                     |  6 ++--
 l10n/es/core.po                     |  6 ++--
 l10n/es_AR/core.po                  |  6 ++--
 l10n/et_EE/core.po                  |  6 ++--
 l10n/eu/core.po                     |  6 ++--
 l10n/fa/core.po                     |  6 ++--
 l10n/fi_FI/core.po                  | 14 ++++-----
 l10n/fi_FI/files.po                 | 14 ++++-----
 l10n/fr/core.po                     |  6 ++--
 l10n/gl/core.po                     |  6 ++--
 l10n/he/core.po                     |  6 ++--
 l10n/hr/core.po                     |  6 ++--
 l10n/hu_HU/core.po                  |  6 ++--
 l10n/ia/core.po                     |  6 ++--
 l10n/id/core.po                     |  6 ++--
 l10n/is/core.po                     |  6 ++--
 l10n/it/core.po                     | 33 +++++++++++----------
 l10n/it/files.po                    | 18 +++++------
 l10n/ja_JP/core.po                  |  6 ++--
 l10n/ja_JP/lib.po                   | 14 ++++-----
 l10n/ka_GE/core.po                  |  6 ++--
 l10n/ko/core.po                     |  6 ++--
 l10n/lb/core.po                     |  6 ++--
 l10n/lt_LT/core.po                  |  6 ++--
 l10n/lv/core.po                     |  6 ++--
 l10n/mk/core.po                     |  6 ++--
 l10n/ms_MY/core.po                  |  6 ++--
 l10n/my_MM/core.po                  |  6 ++--
 l10n/nb_NO/core.po                  |  6 ++--
 l10n/nl/core.po                     |  6 ++--
 l10n/nn_NO/core.po                  |  6 ++--
 l10n/oc/core.po                     |  6 ++--
 l10n/pa/core.po                     |  6 ++--
 l10n/pl/core.po                     |  6 ++--
 l10n/pt_BR/core.po                  | 26 ++++++++--------
 l10n/pt_BR/files.po                 | 18 +++++------
 l10n/pt_PT/core.po                  |  6 ++--
 l10n/ro/core.po                     | 40 ++++++++++++-------------
 l10n/ro/files.po                    | 39 ++++++++++++------------
 l10n/ro/files_trashbin.po           | 30 +++++++++----------
 l10n/ro/lib.po                      | 20 ++++++-------
 l10n/ro/settings.po                 | 25 ++++++++--------
 l10n/ru/core.po                     | 46 +++++++++++++++--------------
 l10n/ru/files.po                    | 19 ++++++------
 l10n/ru/lib.po                      | 15 +++++-----
 l10n/ru/settings.po                 | 13 ++++----
 l10n/ru/user_ldap.po                | 21 ++++++-------
 l10n/si_LK/core.po                  |  6 ++--
 l10n/sk_SK/core.po                  |  6 ++--
 l10n/sl/core.po                     |  6 ++--
 l10n/sq/core.po                     |  6 ++--
 l10n/sr/core.po                     |  6 ++--
 l10n/sr@latin/core.po               |  6 ++--
 l10n/sv/core.po                     |  6 ++--
 l10n/ta_LK/core.po                  |  6 ++--
 l10n/te/core.po                     |  6 ++--
 l10n/templates/core.pot             |  2 +-
 l10n/templates/files.pot            |  4 +--
 l10n/templates/files_encryption.pot |  2 +-
 l10n/templates/files_external.pot   |  2 +-
 l10n/templates/files_sharing.pot    |  2 +-
 l10n/templates/files_trashbin.pot   |  4 +--
 l10n/templates/files_versions.pot   |  2 +-
 l10n/templates/lib.pot              |  2 +-
 l10n/templates/settings.pot         |  2 +-
 l10n/templates/user_ldap.pot        |  2 +-
 l10n/templates/user_webdavauth.pot  |  2 +-
 l10n/th_TH/core.po                  |  6 ++--
 l10n/tr/core.po                     |  6 ++--
 l10n/ug/core.po                     |  6 ++--
 l10n/uk/core.po                     |  6 ++--
 l10n/ur_PK/core.po                  |  6 ++--
 l10n/vi/core.po                     |  6 ++--
 l10n/zh_CN/core.po                  |  6 ++--
 l10n/zh_HK/core.po                  |  6 ++--
 l10n/zh_TW/core.po                  |  6 ++--
 lib/l10n/ja_JP.php                  |  1 +
 lib/l10n/ro.php                     |  8 +++--
 lib/l10n/ru.php                     |  4 +++
 settings/l10n/ca.php                |  6 ++++
 settings/l10n/ro.php                | 10 ++++++-
 settings/l10n/ru.php                |  3 ++
 171 files changed, 674 insertions(+), 472 deletions(-)

diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php
index 64017b7dba..143a5efc3d 100644
--- a/apps/files/l10n/de.php
+++ b/apps/files/l10n/de.php
@@ -13,10 +13,14 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Kein temporärer Ordner vorhanden",
 "Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
 "Not enough storage available" => "Nicht genug Speicher vorhanden.",
+"Upload failed. Could not get file info." => "Hochladen fehlgeschlagen. Dateiinformationen konnten nicht abgerufen werden.",
+"Upload failed. Could not find uploaded file" => "Hochladen fehlgeschlagen. Hochgeladene Datei konnte nicht gefunden werden.",
 "Invalid directory." => "Ungültiges Verzeichnis.",
 "Files" => "Dateien",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "Datei {filename} kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist",
 "Not enough space available" => "Nicht genug Speicherplatz verfügbar",
 "Upload cancelled." => "Upload abgebrochen.",
+"Could not get result from server." => "Ergebnis konnte nicht vom Server abgerufen werden.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen.",
 "URL cannot be empty." => "Die URL darf nicht leer sein.",
 "Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Der Ordnername ist ungültig. Nur ownCloud kann den Ordner \"Shared\" anlegen",
@@ -42,6 +46,7 @@ $TRANSLATIONS = array(
 "Your storage is almost full ({usedSpacePercent}%)" => "Dein Speicher ist fast voll ({usedSpacePercent}%)",
 "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Die Verschlüsselung wurde deaktiviert, jedoch sind deine Dateien nach wie vor verschlüsselt. Bitte gehe zu deinen persönlichen Einstellungen, um deine Dateien zu entschlüsseln.",
 "Your download is being prepared. This might take some time if the files are big." => "Dein Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern.",
+"Error moving file" => "Fehler beim Verschieben der Datei",
 "Name" => "Name",
 "Size" => "Größe",
 "Modified" => "Geändert",
diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php
index 4f9da43445..c58cb4bbe3 100644
--- a/apps/files/l10n/de_DE.php
+++ b/apps/files/l10n/de_DE.php
@@ -13,10 +13,14 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Kein temporärer Ordner vorhanden",
 "Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
 "Not enough storage available" => "Nicht genug Speicher vorhanden.",
+"Upload failed. Could not get file info." => "Hochladen fehlgeschlagen. Dateiinformationen konnten nicht abgerufen werden.",
+"Upload failed. Could not find uploaded file" => "Hochladen fehlgeschlagen. Hochgeladene Datei konnte nicht gefunden werden.",
 "Invalid directory." => "Ungültiges Verzeichnis.",
 "Files" => "Dateien",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "Datei {filename} kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist",
 "Not enough space available" => "Nicht genügend Speicherplatz verfügbar",
 "Upload cancelled." => "Upload abgebrochen.",
+"Could not get result from server." => "Ergebnis konnte nicht vom Server abgerufen werden.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.",
 "URL cannot be empty." => "Die URL darf nicht leer sein.",
 "Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Ungültiger Ordnername. Die Verwendung von \"Shared\" ist ownCloud vorbehalten.",
@@ -42,6 +46,7 @@ $TRANSLATIONS = array(
 "Your storage is almost full ({usedSpacePercent}%)" => "Ihr Speicher ist fast voll ({usedSpacePercent}%)",
 "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Die Verschlüsselung wurde deaktiviert, jedoch sind Ihre Dateien nach wie vor verschlüsselt. Bitte gehen Sie zu Ihren persönlichen Einstellungen, um Ihre Dateien zu entschlüsseln.",
 "Your download is being prepared. This might take some time if the files are big." => "Ihr Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern.",
+"Error moving file" => "Fehler beim Verschieben der Datei",
 "Name" => "Name",
 "Size" => "Größe",
 "Modified" => "Geändert",
diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php
index ab443b2864..5345bad902 100644
--- a/apps/files/l10n/fi_FI.php
+++ b/apps/files/l10n/fi_FI.php
@@ -13,8 +13,10 @@ $TRANSLATIONS = array(
 "Not enough storage available" => "Tallennustilaa ei ole riittävästi käytettävissä",
 "Invalid directory." => "Virheellinen kansio.",
 "Files" => "Tiedostot",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "Kohdetta {filename} ei voi lähettää, koska se on joko kansio tai sen koko on 0 tavua",
 "Not enough space available" => "Tilaa ei ole riittävästi",
 "Upload cancelled." => "Lähetys peruttu.",
+"Could not get result from server." => "Tuloksien saaminen palvelimelta ei onnistunut.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen.",
 "URL cannot be empty." => "Verkko-osoite ei voi olla tyhjä",
 "Error" => "Virhe",
@@ -37,6 +39,7 @@ $TRANSLATIONS = array(
 "Your storage is full, files can not be updated or synced anymore!" => "Tallennustila on loppu, tiedostoja ei voi enää päivittää tai synkronoida!",
 "Your storage is almost full ({usedSpacePercent}%)" => "Tallennustila on melkein loppu ({usedSpacePercent}%)",
 "Your download is being prepared. This might take some time if the files are big." => "Lataustasi valmistellaan. Tämä saattaa kestää hetken, jos tiedostot ovat suuria kooltaan.",
+"Error moving file" => "Virhe tiedostoa siirrettäessä",
 "Name" => "Nimi",
 "Size" => "Koko",
 "Modified" => "Muokattu",
diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php
index 6eef9c4f69..c24d30ae36 100644
--- a/apps/files/l10n/it.php
+++ b/apps/files/l10n/it.php
@@ -13,10 +13,14 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Manca una cartella temporanea",
 "Failed to write to disk" => "Scrittura su disco non riuscita",
 "Not enough storage available" => "Spazio di archiviazione insufficiente",
+"Upload failed. Could not get file info." => "Upload fallito. Impossibile ottenere informazioni sul file",
+"Upload failed. Could not find uploaded file" => "Upload fallit. Impossibile trovare file caricato",
 "Invalid directory." => "Cartella non valida.",
 "Files" => "File",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "Impossibile caricare {filename} poiché è una cartella oppure è di 0 byte",
 "Not enough space available" => "Spazio disponibile insufficiente",
 "Upload cancelled." => "Invio annullato",
+"Could not get result from server." => "Impossibile ottenere il risultato dal server.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.",
 "URL cannot be empty." => "L'URL non può essere vuoto.",
 "Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nome della cartella non valido. L'uso di 'Shared' è riservato a ownCloud",
@@ -42,6 +46,7 @@ $TRANSLATIONS = array(
 "Your storage is almost full ({usedSpacePercent}%)" => "Lo spazio di archiviazione è quasi pieno ({usedSpacePercent}%)",
 "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "La cifratura è stata disabilitata ma i tuoi file sono ancora cifrati. Vai nelle impostazioni personali per decifrare i file.",
 "Your download is being prepared. This might take some time if the files are big." => "Il tuo scaricamento è in fase di preparazione. Ciò potrebbe richiedere del tempo se i file sono grandi.",
+"Error moving file" => "Errore durante lo spostamento del file",
 "Name" => "Nome",
 "Size" => "Dimensione",
 "Modified" => "Modificato",
diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php
index e7370491b5..cd96020856 100644
--- a/apps/files/l10n/pt_BR.php
+++ b/apps/files/l10n/pt_BR.php
@@ -13,10 +13,14 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Pasta temporária não encontrada",
 "Failed to write to disk" => "Falha ao escrever no disco",
 "Not enough storage available" => "Espaço de armazenamento insuficiente",
+"Upload failed. Could not get file info." => "Falha no envio. Não foi possível obter informações do arquivo.",
+"Upload failed. Could not find uploaded file" => "Falha no envio. Não foi possível encontrar o arquivo enviado",
 "Invalid directory." => "Diretório inválido.",
 "Files" => "Arquivos",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "Incapaz de fazer o envio de {filename}, pois é um diretório ou tem 0 bytes",
 "Not enough space available" => "Espaço de armazenamento insuficiente",
 "Upload cancelled." => "Envio cancelado.",
+"Could not get result from server." => "Não foi possível obter o resultado do servidor.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Upload em andamento. Sair da página agora resultará no cancelamento do envio.",
 "URL cannot be empty." => "URL não pode ficar em branco",
 "Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nome de pasta inválido. O uso do nome 'Compartilhado' é reservado ao ownCloud",
@@ -42,6 +46,7 @@ $TRANSLATIONS = array(
 "Your storage is almost full ({usedSpacePercent}%)" => "Seu armazenamento está quase cheio ({usedSpacePercent}%)",
 "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Encriptação foi desabilitada mas seus arquivos continuam encriptados. Por favor vá a suas configurações pessoais para descriptar seus arquivos.",
 "Your download is being prepared. This might take some time if the files are big." => "Seu download está sendo preparado. Isto pode levar algum tempo se os arquivos forem grandes.",
+"Error moving file" => "Erro movendo o arquivo",
 "Name" => "Nome",
 "Size" => "Tamanho",
 "Modified" => "Modificado",
diff --git a/apps/files/l10n/ro.php b/apps/files/l10n/ro.php
index 481e070eac..b1b9af45d3 100644
--- a/apps/files/l10n/ro.php
+++ b/apps/files/l10n/ro.php
@@ -13,10 +13,14 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Lipsește un dosar temporar",
 "Failed to write to disk" => "Eroare la scrierea discului",
 "Not enough storage available" => "Nu este suficient spațiu disponibil",
+"Upload failed. Could not get file info." => "Încărcare eșuată. Nu se pot obține informații despre fișier.",
+"Upload failed. Could not find uploaded file" => "Încărcare eșuată. Nu se poate găsi fișierul încărcat",
 "Invalid directory." => "registru invalid.",
 "Files" => "Fișiere",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "Nu se poate încărca {filename} deoarece este un director sau are mărimea de 0 octeți",
 "Not enough space available" => "Nu este suficient spațiu disponibil",
 "Upload cancelled." => "Încărcare anulată.",
+"Could not get result from server." => "Nu se poate obține rezultatul de la server.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea.",
 "URL cannot be empty." => "Adresa URL nu poate fi golita",
 "Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nume de dosar invalid. Utilizarea 'Shared' e rezervată de ownCloud",
@@ -31,9 +35,10 @@ $TRANSLATIONS = array(
 "cancel" => "anulare",
 "replaced {new_name} with {old_name}" => "{new_name} inlocuit cu {old_name}",
 "undo" => "Anulează ultima acțiune",
-"_%n folder_::_%n folders_" => array("","",""),
-"_%n file_::_%n files_" => array("","",""),
-"_Uploading %n file_::_Uploading %n files_" => array("","",""),
+"_%n folder_::_%n folders_" => array("%n director","%n directoare","%n directoare"),
+"_%n file_::_%n files_" => array("%n fișier","%n fișiere","%n fișiere"),
+"{dirs} and {files}" => "{dirs} și {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("Se încarcă %n fișier.","Se încarcă %n fișiere.","Se încarcă %n fișiere."),
 "'.' is an invalid file name." => "'.' este un nume invalid de fișier.",
 "File name cannot be empty." => "Numele fișierului nu poate rămâne gol.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nume invalide, '\\', '/', '<', '>', ':', '\"', '|', '?' si '*' nu sunt permise.",
@@ -41,6 +46,7 @@ $TRANSLATIONS = array(
 "Your storage is almost full ({usedSpacePercent}%)" => "Spatiul de stocare este aproape plin {spatiu folosit}%",
 "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "criptarea a fost disactivata dar fisierele sant inca criptate.va rog intrati in setarile personale pentru a decripta fisierele",
 "Your download is being prepared. This might take some time if the files are big." => "in curs de descarcare. Aceasta poate să dureze ceva timp dacă fișierele sunt mari.",
+"Error moving file" => "Eroare la mutarea fișierului",
 "Name" => "Nume",
 "Size" => "Dimensiune",
 "Modified" => "Modificat",
diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php
index 083df116f6..143a3379ad 100644
--- a/apps/files/l10n/ru.php
+++ b/apps/files/l10n/ru.php
@@ -13,10 +13,14 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Отсутствует временная папка",
 "Failed to write to disk" => "Ошибка записи на диск",
 "Not enough storage available" => "Недостаточно доступного места в хранилище",
+"Upload failed. Could not get file info." => "Загрузка не удалась. Невозможно получить информацию о файле",
+"Upload failed. Could not find uploaded file" => "Загрузка не удалась. Невозможно найти загруженный файл",
 "Invalid directory." => "Неправильный каталог.",
 "Files" => "Файлы",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "Невозможно загрузить файл  {filename} так как он является директорией либо имеет размер 0 байт",
 "Not enough space available" => "Недостаточно свободного места",
 "Upload cancelled." => "Загрузка отменена.",
+"Could not get result from server." => "Не получен ответ от сервера",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Файл в процессе загрузки. Покинув страницу вы прервёте загрузку.",
 "URL cannot be empty." => "Ссылка не может быть пустой.",
 "Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Неправильное имя каталога. Имя 'Shared' зарезервировано.",
@@ -42,6 +46,7 @@ $TRANSLATIONS = array(
 "Your storage is almost full ({usedSpacePercent}%)" => "Ваше хранилище почти заполнено ({usedSpacePercent}%)",
 "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Шифрование было отключено, но ваши файлы все еще зашифрованы. Пожалуйста, зайдите на страницу персональных настроек для того, чтобы расшифровать ваши файлы.",
 "Your download is being prepared. This might take some time if the files are big." => "Загрузка началась. Это может потребовать много времени, если файл большого размера.",
+"Error moving file" => "Ошибка при перемещении файла",
 "Name" => "Имя",
 "Size" => "Размер",
 "Modified" => "Изменён",
diff --git a/apps/files_trashbin/l10n/ro.php b/apps/files_trashbin/l10n/ro.php
index 0b1d2cd9e1..12377bb065 100644
--- a/apps/files_trashbin/l10n/ro.php
+++ b/apps/files_trashbin/l10n/ro.php
@@ -3,8 +3,8 @@ $TRANSLATIONS = array(
 "Error" => "Eroare",
 "Delete permanently" => "Stergere permanenta",
 "Name" => "Nume",
-"_%n folder_::_%n folders_" => array("","",""),
-"_%n file_::_%n files_" => array("","",""),
+"_%n folder_::_%n folders_" => array("","","%n directoare"),
+"_%n file_::_%n files_" => array("","","%n fișiere"),
 "Delete" => "Șterge"
 );
 $PLURAL_FORMS = "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));";
diff --git a/apps/user_ldap/l10n/ru.php b/apps/user_ldap/l10n/ru.php
index 40cab1c541..f1cf51dc51 100644
--- a/apps/user_ldap/l10n/ru.php
+++ b/apps/user_ldap/l10n/ru.php
@@ -30,8 +30,11 @@ $TRANSLATIONS = array(
 "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. Example: \"uid=%%uid\"" => "Определяет фильтр для применения при попытке входа. %%uid заменяет имя пользователя при входе в систему. Например: \"uid=%%uid\"",
 "User List Filter" => "Фильтр списка пользователей",
+"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "Определяет фильтр, использующийся при получении пользователей (без подмены переменных). Например: \"objectClass=person\"",
 "Group Filter" => "Фильтр группы",
+"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "Определяет фильтр, использующийся при получении групп (без подмены переменных). Например: \"objectClass=posixGroup\"",
 "Connection Settings" => "Настройки подключения",
 "Configuration Active" => "Конфигурация активна",
 "When unchecked, this configuration will be skipped." => "Когда галочка снята, эта конфигурация будет пропущена.",
@@ -45,6 +48,7 @@ $TRANSLATIONS = array(
 "Do not use it additionally for LDAPS connections, it will fail." => "Не используйте совместно с безопасными подключениями (LDAPS), это не сработает.",
 "Case insensitve LDAP server (Windows)" => "Нечувствительный к регистру сервер LDAP (Windows)",
 "Turn off SSL certificate validation." => "Отключить проверку сертификата SSL.",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Не рекомендуется, используйте только в режиме тестирования! Если соединение работает только с этой опцией, импортируйте на ваш %s сервер сертификат SSL сервера LDAP.",
 "Cache Time-To-Live" => "Кэш времени жизни",
 "in seconds. A change empties the cache." => "в секундах. Изменение очистит кэш.",
 "Directory Settings" => "Настройки каталога",
@@ -68,10 +72,13 @@ $TRANSLATIONS = array(
 "User Home Folder Naming Rule" => "Правило именования Домашней Папки Пользователя",
 "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Оставьте имя пользователя пустым (по умолчанию). Иначе укажите атрибут LDAP/AD.",
 "Internal Username" => "Внутреннее имя пользователя",
+"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ].  Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." => "По-умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Таким образом имя пользователя становится уникальным и не требует конвертации символов. Внутреннее имя пользователя может состоять только из следующих символов: [ a-zA-Z0-9_.@- ]. Остальные символы замещаются соответствиями из таблицы ASCII или же просто пропускаются. При совпадении к имени будет добавлено число. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Также оно является именем по-умолчанию для папки пользователя в ownCloud. Оно также портом для удаленных ссылок, к примеру, для всех сервисов *DAV. С помощию данной настройки можно изменить поведение по-умолчанию. Чтобы достичь поведения, как было настроено до изменения, ownCloud 5 выводит атрибут имени пользователя в этом поле. Оставьте его пустым для режима по-умолчанию. Изменения будут иметь эффект только для новых подключенных (добавленных) пользователей LDAP.",
 "Internal Username Attribute:" => "Аттрибут для внутреннего имени:",
 "Override UUID detection" => "Переопределить нахождение UUID",
+"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." => "По-умолчанию, ownCloud определяет атрибут UUID автоматически. Этот атрибут используется для того, чтобы достоверно индентифицировать пользователей и группы LDAP. Также, на основании атрибута UUID создается внутреннее имя пользователя, если выше не указано иначе. Вы можете переопределить эту настройку и указать свой атрибут по выбору. Вы должны удостовериться, что выбранный вами атрибут может быть выбран для пользователей и групп, а также то, что он уникальный. Оставьте поле пустым для поведения по-умолчанию. Изменения вступят в силу только для новых подключенных (добавленных) пользователей и групп LDAP.",
 "UUID Attribute:" => "Аттрибут для UUID:",
 "Username-LDAP User Mapping" => "Соответствия Имя-Пользователь LDAP",
+"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." => "ownCloud использует имена пользователей для хранения и назначения метаданных. Для точной идентификации и распознавания пользователей, каждый пользователь LDAP будет иметь свое внутреннее имя пользователя. Это требует привязки имени пользователя ownCloud к пользователю LDAP. При создании имя пользователя назначается идентификатору UUID пользователя LDAP. Помимо этого кешируется доменное имя (DN) для уменьшения числа обращений к LDAP, однако оно не используется для идентификации. Если доменное имя было изменено, об этом станет известно ownCloud. Внутреннее имя ownCloud используется повсеместно в ownCloud. После сброса привязок в базе могут сохраниться остатки старой информации. Сброс привязок не привязан к конфигурации, он повлияет на все LDAP подключения! Ни в коем случае не рекомендуется сбрасывать привязки если система уже находится в эксплуатации, только на этапе тестирования.",
 "Clear Username-LDAP User Mapping" => "Очистить соответствия Имя-Пользователь LDAP",
 "Clear Groupname-LDAP Group Mapping" => "Очистить соответствия Группа-Группа LDAP",
 "Test Configuration" => "Тестовая конфигурация",
diff --git a/core/l10n/ar.php b/core/l10n/ar.php
index 62a9580b12..f61014e19e 100644
--- a/core/l10n/ar.php
+++ b/core/l10n/ar.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "No" => "لا",
 "Ok" => "موافق",
 "_{count} file conflict_::_{count} file conflicts_" => array("","","","","",""),
+"Cancel" => "الغاء",
 "The object type is not specified." => "نوع العنصر غير محدد.",
 "Error" => "خطأ",
 "The app name is not specified." => "اسم التطبيق غير محدد.",
@@ -83,6 +84,8 @@ $TRANSLATIONS = array(
 "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "حصل خطأ في عملية التحديث, يرجى ارسال تقرير بهذه المشكلة الى <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>.",
 "The update was successful. Redirecting you to ownCloud now." => "تم التحديث بنجاح , يتم اعادة توجيهك الان الى Owncloud",
 "Use the following link to reset your password: {link}" => "استخدم هذه الوصلة لاسترجاع كلمة السر: {link}",
+"The link to reset your password has been sent to your email.<br>If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator ." => "وصلة تحديث كلمة المرور بعثت الى بريدك الالكتروني.<br> اذا لم تستقبل البريد خلال فترة زمنية قصيره, ابحث في سلة مهملات بريدك.",
+"Request failed!<br>Did you make sure your email/username was right?" => "الطلب رفض! <br> هل انت متأكد أن الاسم/العنوان البريدي صحيح؟",
 "You will receive a link to reset your password via Email." => "سوف نرسل لك بريد يحتوي على وصلة لتجديد كلمة السر.",
 "Username" => "إسم المستخدم",
 "Request reset" => "طلب تعديل",
diff --git a/core/l10n/bg_BG.php b/core/l10n/bg_BG.php
index a4f1585420..4f5ae5993f 100644
--- a/core/l10n/bg_BG.php
+++ b/core/l10n/bg_BG.php
@@ -35,6 +35,7 @@ $TRANSLATIONS = array(
 "No" => "Не",
 "Ok" => "Добре",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Отказ",
 "Error" => "Грешка",
 "Share" => "Споделяне",
 "Share with" => "Споделено с",
diff --git a/core/l10n/bn_BD.php b/core/l10n/bn_BD.php
index aaf982b9e5..3b4b990ac2 100644
--- a/core/l10n/bn_BD.php
+++ b/core/l10n/bn_BD.php
@@ -43,6 +43,7 @@ $TRANSLATIONS = array(
 "No" => "না",
 "Ok" => "তথাস্তু",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "বাতির",
 "The object type is not specified." => "অবজেক্টের ধরণটি সুনির্দিষ্ট নয়।",
 "Error" => "সমস্যা",
 "The app name is not specified." => "অ্যাপের নামটি  সুনির্দিষ্ট নয়।",
diff --git a/core/l10n/ca.php b/core/l10n/ca.php
index 448fbae0ad..938d668b36 100644
--- a/core/l10n/ca.php
+++ b/core/l10n/ca.php
@@ -58,7 +58,15 @@ $TRANSLATIONS = array(
 "No" => "No",
 "Ok" => "D'acord",
 "Error loading message template: {error}" => "Error en carregar la plantilla de missatge: {error}",
-"_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("{count} conflicte de fitxer","{count} conflictes de fitxer"),
+"One file conflict" => "Un fitxer en conflicte",
+"Which files do you want to keep?" => "Quin fitxer voleu conservar?",
+"If you select both versions, the copied file will have a number added to its name." => "Si seleccioneu les dues versions, el fitxer copiat tindrà un número afegit al seu nom.",
+"Cancel" => "Cancel·la",
+"Continue" => "Continua",
+"(all selected)" => "(selecciona-ho tot)",
+"({count} selected)" => "({count} seleccionats)",
+"Error loading file exists template" => "Error en carregar la plantilla de fitxer existent",
 "The object type is not specified." => "No s'ha especificat el tipus d'objecte.",
 "Error" => "Error",
 "The app name is not specified." => "No s'ha especificat el nom de l'aplicació.",
diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php
index 9ee5dd471f..449a49f568 100644
--- a/core/l10n/cs_CZ.php
+++ b/core/l10n/cs_CZ.php
@@ -59,6 +59,7 @@ $TRANSLATIONS = array(
 "Ok" => "Ok",
 "Error loading message template: {error}" => "Chyba při nahrávání šablony zprávy: {error}",
 "_{count} file conflict_::_{count} file conflicts_" => array("","",""),
+"Cancel" => "Zrušit",
 "The object type is not specified." => "Není určen typ objektu.",
 "Error" => "Chyba",
 "The app name is not specified." => "Není určen název aplikace.",
diff --git a/core/l10n/cy_GB.php b/core/l10n/cy_GB.php
index a8b1e894e7..78eb6ba969 100644
--- a/core/l10n/cy_GB.php
+++ b/core/l10n/cy_GB.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "No" => "Na",
 "Ok" => "Iawn",
 "_{count} file conflict_::_{count} file conflicts_" => array("","","",""),
+"Cancel" => "Diddymu",
 "The object type is not specified." => "Nid yw'r math o wrthrych wedi cael ei nodi.",
 "Error" => "Gwall",
 "The app name is not specified." => "Nid yw enw'r pecyn wedi cael ei nodi.",
diff --git a/core/l10n/da.php b/core/l10n/da.php
index 0f7f8cfc63..e2399fdc5c 100644
--- a/core/l10n/da.php
+++ b/core/l10n/da.php
@@ -52,6 +52,7 @@ $TRANSLATIONS = array(
 "No" => "Nej",
 "Ok" => "OK",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Annuller",
 "The object type is not specified." => "Objekttypen er ikke angivet.",
 "Error" => "Fejl",
 "The app name is not specified." => "Den app navn er ikke angivet.",
diff --git a/core/l10n/de.php b/core/l10n/de.php
index 302ebe2f2f..b5ff8826ad 100644
--- a/core/l10n/de.php
+++ b/core/l10n/de.php
@@ -58,7 +58,15 @@ $TRANSLATIONS = array(
 "No" => "Nein",
 "Ok" => "OK",
 "Error loading message template: {error}" => "Fehler beim Laden der Nachrichtenvorlage: {error}",
-"_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("{count} Dateikonflikt","{count} Dateikonflikte"),
+"One file conflict" => "Ein Dateikonflikt",
+"Which files do you want to keep?" => "Welche Dateien möchtest du behalten?",
+"If you select both versions, the copied file will have a number added to its name." => "Wenn du beide Versionen auswählst, erhält die kopierte Datei eine Zahl am Ende des Dateinamens.",
+"Cancel" => "Abbrechen",
+"Continue" => "Fortsetzen",
+"(all selected)" => "(Alle ausgewählt)",
+"({count} selected)" => "({count} ausgewählt)",
+"Error loading file exists template" => "Fehler beim Laden der vorhanden Dateivorlage",
 "The object type is not specified." => "Der Objekttyp ist nicht angegeben.",
 "Error" => "Fehler",
 "The app name is not specified." => "Der App-Name ist nicht angegeben.",
diff --git a/core/l10n/de_CH.php b/core/l10n/de_CH.php
index 7e2d4d9f15..1fc6f6b7e1 100644
--- a/core/l10n/de_CH.php
+++ b/core/l10n/de_CH.php
@@ -46,6 +46,7 @@ $TRANSLATIONS = array(
 "No" => "Nein",
 "Ok" => "OK",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Abbrechen",
 "The object type is not specified." => "Der Objekttyp ist nicht angegeben.",
 "Error" => "Fehler",
 "The app name is not specified." => "Der App-Name ist nicht angegeben.",
diff --git a/core/l10n/de_DE.php b/core/l10n/de_DE.php
index 30825d5b4b..5b9b199f41 100644
--- a/core/l10n/de_DE.php
+++ b/core/l10n/de_DE.php
@@ -58,7 +58,15 @@ $TRANSLATIONS = array(
 "No" => "Nein",
 "Ok" => "OK",
 "Error loading message template: {error}" => "Fehler beim Laden der Nachrichtenvorlage: {error}",
-"_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("{count} Dateikonflikt","{count} Dateikonflikte"),
+"One file conflict" => "Ein Dateikonflikt",
+"Which files do you want to keep?" => "Welche Dateien möchten Sie behalten?",
+"If you select both versions, the copied file will have a number added to its name." => "Wenn Siebeide Versionen auswählen, erhält die kopierte Datei eine Zahl am Ende des Dateinamens.",
+"Cancel" => "Abbrechen",
+"Continue" => "Fortsetzen",
+"(all selected)" => "(Alle ausgewählt)",
+"({count} selected)" => "({count} ausgewählt)",
+"Error loading file exists template" => "Fehler beim Laden der vorhanden Dateivorlage",
 "The object type is not specified." => "Der Objekttyp ist nicht angegeben.",
 "Error" => "Fehler",
 "The app name is not specified." => "Der App-Name ist nicht angegeben.",
diff --git a/core/l10n/el.php b/core/l10n/el.php
index 929caad1dc..7fc58ca352 100644
--- a/core/l10n/el.php
+++ b/core/l10n/el.php
@@ -46,6 +46,7 @@ $TRANSLATIONS = array(
 "No" => "Όχι",
 "Ok" => "Οκ",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Άκυρο",
 "The object type is not specified." => "Δεν καθορίστηκε ο τύπος του αντικειμένου.",
 "Error" => "Σφάλμα",
 "The app name is not specified." => "Δεν καθορίστηκε το όνομα της εφαρμογής.",
diff --git a/core/l10n/en_GB.php b/core/l10n/en_GB.php
index 05d945be6d..feeacd481a 100644
--- a/core/l10n/en_GB.php
+++ b/core/l10n/en_GB.php
@@ -59,6 +59,7 @@ $TRANSLATIONS = array(
 "Ok" => "OK",
 "Error loading message template: {error}" => "Error loading message template: {error}",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Cancel",
 "The object type is not specified." => "The object type is not specified.",
 "Error" => "Error",
 "The app name is not specified." => "The app name is not specified.",
diff --git a/core/l10n/eo.php b/core/l10n/eo.php
index d86c2bfacd..712f97538f 100644
--- a/core/l10n/eo.php
+++ b/core/l10n/eo.php
@@ -46,6 +46,7 @@ $TRANSLATIONS = array(
 "No" => "Ne",
 "Ok" => "Akcepti",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Nuligi",
 "The object type is not specified." => "Ne indikiĝis tipo de la objekto.",
 "Error" => "Eraro",
 "The app name is not specified." => "Ne indikiĝis nomo de la aplikaĵo.",
diff --git a/core/l10n/es.php b/core/l10n/es.php
index b94e6b561d..3aa0c3f732 100644
--- a/core/l10n/es.php
+++ b/core/l10n/es.php
@@ -52,6 +52,7 @@ $TRANSLATIONS = array(
 "No" => "No",
 "Ok" => "Aceptar",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Cancelar",
 "The object type is not specified." => "El tipo de objeto no está especificado.",
 "Error" => "Error",
 "The app name is not specified." => "El nombre de la aplicación no está especificado.",
diff --git a/core/l10n/es_AR.php b/core/l10n/es_AR.php
index e079d5bcff..6dce47f760 100644
--- a/core/l10n/es_AR.php
+++ b/core/l10n/es_AR.php
@@ -52,6 +52,7 @@ $TRANSLATIONS = array(
 "No" => "No",
 "Ok" => "Aceptar",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Cancelar",
 "The object type is not specified." => "El tipo de objeto no está especificado. ",
 "Error" => "Error",
 "The app name is not specified." => "El nombre de la App no está especificado.",
diff --git a/core/l10n/et_EE.php b/core/l10n/et_EE.php
index 233756a835..17ce89543a 100644
--- a/core/l10n/et_EE.php
+++ b/core/l10n/et_EE.php
@@ -59,6 +59,7 @@ $TRANSLATIONS = array(
 "Ok" => "Ok",
 "Error loading message template: {error}" => "Viga sõnumi malli laadimisel:  {error}",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Loobu",
 "The object type is not specified." => "Objekti tüüp pole määratletud.",
 "Error" => "Viga",
 "The app name is not specified." => "Rakenduse nimi ole määratletud.",
diff --git a/core/l10n/eu.php b/core/l10n/eu.php
index 77a1c18167..1e6594adf6 100644
--- a/core/l10n/eu.php
+++ b/core/l10n/eu.php
@@ -46,6 +46,7 @@ $TRANSLATIONS = array(
 "No" => "Ez",
 "Ok" => "Ados",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Ezeztatu",
 "The object type is not specified." => "Objetu mota ez dago zehaztuta.",
 "Error" => "Errorea",
 "The app name is not specified." => "App izena ez dago zehaztuta.",
diff --git a/core/l10n/fa.php b/core/l10n/fa.php
index ab5d3628a0..930a5b0dcb 100644
--- a/core/l10n/fa.php
+++ b/core/l10n/fa.php
@@ -46,6 +46,7 @@ $TRANSLATIONS = array(
 "No" => "نه",
 "Ok" => "قبول",
 "_{count} file conflict_::_{count} file conflicts_" => array(""),
+"Cancel" => "منصرف شدن",
 "The object type is not specified." => "نوع شی تعیین نشده است.",
 "Error" => "خطا",
 "The app name is not specified." => "نام برنامه تعیین نشده است.",
diff --git a/core/l10n/fi_FI.php b/core/l10n/fi_FI.php
index d4a922924d..cf215159c3 100644
--- a/core/l10n/fi_FI.php
+++ b/core/l10n/fi_FI.php
@@ -53,6 +53,10 @@ $TRANSLATIONS = array(
 "No" => "Ei",
 "Ok" => "Ok",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Peru",
+"Continue" => "Jatka",
+"(all selected)" => "(kaikki valittu)",
+"({count} selected)" => "({count} valittu)",
 "Error" => "Virhe",
 "The app name is not specified." => "Sovelluksen nimeä ei ole määritelty.",
 "The required file {file} is not installed!" => "Vaadittua tiedostoa {file} ei ole asennettu!",
diff --git a/core/l10n/fr.php b/core/l10n/fr.php
index aac4ef99e5..d3229ddf99 100644
--- a/core/l10n/fr.php
+++ b/core/l10n/fr.php
@@ -57,6 +57,7 @@ $TRANSLATIONS = array(
 "Ok" => "Ok",
 "Error loading message template: {error}" => "Erreur de chargement du modèle de message : {error}",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Annuler",
 "The object type is not specified." => "Le type d'objet n'est pas spécifié.",
 "Error" => "Erreur",
 "The app name is not specified." => "Le nom de l'application n'est pas spécifié.",
diff --git a/core/l10n/gl.php b/core/l10n/gl.php
index 5212348872..9ba5ab645a 100644
--- a/core/l10n/gl.php
+++ b/core/l10n/gl.php
@@ -59,6 +59,7 @@ $TRANSLATIONS = array(
 "Ok" => "Aceptar",
 "Error loading message template: {error}" => "Produciuse un erro ao cargar o modelo da mensaxe: {error}",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Cancelar",
 "The object type is not specified." => "Non se especificou o tipo de obxecto.",
 "Error" => "Erro",
 "The app name is not specified." => "Non se especificou o nome do aplicativo.",
diff --git a/core/l10n/he.php b/core/l10n/he.php
index 32dcde40a9..704755da07 100644
--- a/core/l10n/he.php
+++ b/core/l10n/he.php
@@ -46,6 +46,7 @@ $TRANSLATIONS = array(
 "No" => "לא",
 "Ok" => "בסדר",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "ביטול",
 "The object type is not specified." => "סוג הפריט לא צוין.",
 "Error" => "שגיאה",
 "The app name is not specified." => "שם היישום לא צוין.",
diff --git a/core/l10n/hr.php b/core/l10n/hr.php
index b53301583d..7fa81db8a2 100644
--- a/core/l10n/hr.php
+++ b/core/l10n/hr.php
@@ -38,6 +38,7 @@ $TRANSLATIONS = array(
 "No" => "Ne",
 "Ok" => "U redu",
 "_{count} file conflict_::_{count} file conflicts_" => array("","",""),
+"Cancel" => "Odustani",
 "Error" => "Greška",
 "Share" => "Podijeli",
 "Error while sharing" => "Greška prilikom djeljenja",
diff --git a/core/l10n/hu_HU.php b/core/l10n/hu_HU.php
index 2c30fe68b7..d893269ee8 100644
--- a/core/l10n/hu_HU.php
+++ b/core/l10n/hu_HU.php
@@ -46,6 +46,7 @@ $TRANSLATIONS = array(
 "No" => "Nem",
 "Ok" => "Ok",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Mégsem",
 "The object type is not specified." => "Az objektum típusa nincs megadva.",
 "Error" => "Hiba",
 "The app name is not specified." => "Az alkalmazás neve nincs megadva.",
diff --git a/core/l10n/ia.php b/core/l10n/ia.php
index 9f530d4730..48d2588c00 100644
--- a/core/l10n/ia.php
+++ b/core/l10n/ia.php
@@ -25,6 +25,7 @@ $TRANSLATIONS = array(
 "_%n day ago_::_%n days ago_" => array("",""),
 "_%n month ago_::_%n months ago_" => array("",""),
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Cancellar",
 "Error" => "Error",
 "Share" => "Compartir",
 "Password" => "Contrasigno",
diff --git a/core/l10n/id.php b/core/l10n/id.php
index d800628091..69993d4405 100644
--- a/core/l10n/id.php
+++ b/core/l10n/id.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "No" => "Tidak",
 "Ok" => "Oke",
 "_{count} file conflict_::_{count} file conflicts_" => array(""),
+"Cancel" => "Batal",
 "The object type is not specified." => "Tipe objek tidak ditentukan.",
 "Error" => "Galat",
 "The app name is not specified." => "Nama aplikasi tidak ditentukan.",
diff --git a/core/l10n/is.php b/core/l10n/is.php
index 7aad8ea43e..729aaa4c9e 100644
--- a/core/l10n/is.php
+++ b/core/l10n/is.php
@@ -43,6 +43,7 @@ $TRANSLATIONS = array(
 "No" => "Nei",
 "Ok" => "Í lagi",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Hætta við",
 "The object type is not specified." => "Tegund ekki tilgreind",
 "Error" => "Villa",
 "The app name is not specified." => "Nafn forrits ekki tilgreint",
diff --git a/core/l10n/it.php b/core/l10n/it.php
index fa85f0ae94..94395b0226 100644
--- a/core/l10n/it.php
+++ b/core/l10n/it.php
@@ -19,7 +19,7 @@ $TRANSLATIONS = array(
 "No image or file provided" => "Non è stata fornita alcun immagine o file",
 "Unknown filetype" => "Tipo di file sconosciuto",
 "Invalid image" => "Immagine non valida",
-"No temporary profile picture available, try again" => "Nessuna foto di profilo temporanea disponibile, riprova",
+"No temporary profile picture available, try again" => "Nessuna immagine di profilo provvisoria disponibile, riprova",
 "No crop data provided" => "Dati di ritaglio non forniti",
 "Sunday" => "Domenica",
 "Monday" => "Lunedì",
@@ -53,12 +53,20 @@ $TRANSLATIONS = array(
 "last year" => "anno scorso",
 "years ago" => "anni fa",
 "Choose" => "Scegli",
-"Error loading file picker template: {error}" => "Errore durante il caricamento del modello del selettore file: {error}",
+"Error loading file picker template: {error}" => "Errore nel caricamento del modello del selettore file: {error}",
 "Yes" => "Sì",
 "No" => "No",
 "Ok" => "Ok",
-"Error loading message template: {error}" => "Errore durante il caricamento del modello di messaggio: {error}",
-"_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Error loading message template: {error}" => "Errore nel caricamento del modello di messaggio: {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("{count} file in conflitto","{count} file in conflitto"),
+"One file conflict" => "Un conflitto tra file",
+"Which files do you want to keep?" => "Quali file vuoi mantenere?",
+"If you select both versions, the copied file will have a number added to its name." => "Se selezioni entrambe le versioni, verrà aggiunto un numero al nome del file copiato.",
+"Cancel" => "Annulla",
+"Continue" => "Continua",
+"(all selected)" => "(tutti selezionati)",
+"({count} selected)" => "({count} selezionati)",
+"Error loading file exists template" => "Errore durante il caricamento del modello del file esistente",
 "The object type is not specified." => "Il tipo di oggetto non è specificato.",
 "Error" => "Errore",
 "The app name is not specified." => "Il nome dell'applicazione non è specificato.",
diff --git a/core/l10n/ja_JP.php b/core/l10n/ja_JP.php
index 8c36f96559..0baab441f9 100644
--- a/core/l10n/ja_JP.php
+++ b/core/l10n/ja_JP.php
@@ -58,6 +58,7 @@ $TRANSLATIONS = array(
 "Ok" => "OK",
 "Error loading message template: {error}" => "メッセージテンプレートの読み込みエラー: {error}",
 "_{count} file conflict_::_{count} file conflicts_" => array(""),
+"Cancel" => "キャンセル",
 "The object type is not specified." => "オブジェクタイプが指定されていません。",
 "Error" => "エラー",
 "The app name is not specified." => "アプリ名がしていされていません。",
diff --git a/core/l10n/ka_GE.php b/core/l10n/ka_GE.php
index 42af86b232..e051f9ce1d 100644
--- a/core/l10n/ka_GE.php
+++ b/core/l10n/ka_GE.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "No" => "არა",
 "Ok" => "დიახ",
 "_{count} file conflict_::_{count} file conflicts_" => array(""),
+"Cancel" => "უარყოფა",
 "The object type is not specified." => "ობიექტის ტიპი არ არის მითითებული.",
 "Error" => "შეცდომა",
 "The app name is not specified." => "აპლიკაციის სახელი არ არის მითითებული.",
diff --git a/core/l10n/ko.php b/core/l10n/ko.php
index 3c0ca5f4ff..947f5e9ee2 100644
--- a/core/l10n/ko.php
+++ b/core/l10n/ko.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "No" => "아니요",
 "Ok" => "승락",
 "_{count} file conflict_::_{count} file conflicts_" => array(""),
+"Cancel" => "취소",
 "The object type is not specified." => "객체 유형이 지정되지 않았습니다.",
 "Error" => "오류",
 "The app name is not specified." => "앱 이름이 지정되지 않았습니다.",
diff --git a/core/l10n/lb.php b/core/l10n/lb.php
index c82f88d66d..9e127d867c 100644
--- a/core/l10n/lb.php
+++ b/core/l10n/lb.php
@@ -46,6 +46,7 @@ $TRANSLATIONS = array(
 "No" => "Nee",
 "Ok" => "OK",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Ofbriechen",
 "The object type is not specified." => "Den Typ vum Object ass net uginn.",
 "Error" => "Feeler",
 "The app name is not specified." => "Den Numm vun der App ass net uginn.",
diff --git a/core/l10n/lt_LT.php b/core/l10n/lt_LT.php
index 630d66ce67..492aee12c1 100644
--- a/core/l10n/lt_LT.php
+++ b/core/l10n/lt_LT.php
@@ -59,6 +59,7 @@ $TRANSLATIONS = array(
 "Ok" => "Gerai",
 "Error loading message template: {error}" => "Klaida įkeliant žinutės ruošinį: {error}",
 "_{count} file conflict_::_{count} file conflicts_" => array("","",""),
+"Cancel" => "Atšaukti",
 "The object type is not specified." => "Objekto tipas nenurodytas.",
 "Error" => "Klaida",
 "The app name is not specified." => "Nenurodytas programos pavadinimas.",
diff --git a/core/l10n/lv.php b/core/l10n/lv.php
index 48bb7b5381..6bdbeaf5e2 100644
--- a/core/l10n/lv.php
+++ b/core/l10n/lv.php
@@ -46,6 +46,7 @@ $TRANSLATIONS = array(
 "No" => "Nē",
 "Ok" => "Labi",
 "_{count} file conflict_::_{count} file conflicts_" => array("","",""),
+"Cancel" => "Atcelt",
 "The object type is not specified." => "Nav norādīts objekta tips.",
 "Error" => "Kļūda",
 "The app name is not specified." => "Nav norādīts lietotnes nosaukums.",
diff --git a/core/l10n/mk.php b/core/l10n/mk.php
index 4caabfa7ef..1c998bb636 100644
--- a/core/l10n/mk.php
+++ b/core/l10n/mk.php
@@ -44,6 +44,7 @@ $TRANSLATIONS = array(
 "No" => "Не",
 "Ok" => "Во ред",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Откажи",
 "The object type is not specified." => "Не е специфициран типот на објект.",
 "Error" => "Грешка",
 "The app name is not specified." => "Името на апликацијата не е специфицирано.",
diff --git a/core/l10n/ms_MY.php b/core/l10n/ms_MY.php
index f6517f9e51..5aea25a3fd 100644
--- a/core/l10n/ms_MY.php
+++ b/core/l10n/ms_MY.php
@@ -30,6 +30,7 @@ $TRANSLATIONS = array(
 "No" => "Tidak",
 "Ok" => "Ok",
 "_{count} file conflict_::_{count} file conflicts_" => array(""),
+"Cancel" => "Batal",
 "Error" => "Ralat",
 "Share" => "Kongsi",
 "Password" => "Kata laluan",
diff --git a/core/l10n/my_MM.php b/core/l10n/my_MM.php
index 672067508f..0a07d15118 100644
--- a/core/l10n/my_MM.php
+++ b/core/l10n/my_MM.php
@@ -29,6 +29,7 @@ $TRANSLATIONS = array(
 "No" => "မဟုတ်ဘူး",
 "Ok" => "အိုကေ",
 "_{count} file conflict_::_{count} file conflicts_" => array(""),
+"Cancel" => "ပယ်ဖျက်မည်",
 "Password" => "စကားဝှက်",
 "Set expiration date" => "သက်တမ်းကုန်ဆုံးမည့်ရက်သတ်မှတ်မည်",
 "Expiration date" => "သက်တမ်းကုန်ဆုံးမည့်ရက်",
diff --git a/core/l10n/nb_NO.php b/core/l10n/nb_NO.php
index 5e08668feb..01dec88557 100644
--- a/core/l10n/nb_NO.php
+++ b/core/l10n/nb_NO.php
@@ -41,6 +41,7 @@ $TRANSLATIONS = array(
 "No" => "Nei",
 "Ok" => "Ok",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Avbryt",
 "Error" => "Feil",
 "Shared" => "Delt",
 "Share" => "Del",
diff --git a/core/l10n/nl.php b/core/l10n/nl.php
index a7e9cc5301..3dcdeaedec 100644
--- a/core/l10n/nl.php
+++ b/core/l10n/nl.php
@@ -59,6 +59,7 @@ $TRANSLATIONS = array(
 "Ok" => "Ok",
 "Error loading message template: {error}" => "Fout bij laden berichtensjabloon: {error}",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Annuleer",
 "The object type is not specified." => "Het object type is niet gespecificeerd.",
 "Error" => "Fout",
 "The app name is not specified." => "De app naam is niet gespecificeerd.",
diff --git a/core/l10n/nn_NO.php b/core/l10n/nn_NO.php
index 3b6566f40a..8ec3892a8a 100644
--- a/core/l10n/nn_NO.php
+++ b/core/l10n/nn_NO.php
@@ -52,6 +52,7 @@ $TRANSLATIONS = array(
 "No" => "Nei",
 "Ok" => "Greitt",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Avbryt",
 "The object type is not specified." => "Objekttypen er ikkje spesifisert.",
 "Error" => "Feil",
 "The app name is not specified." => "Programnamnet er ikkje spesifisert.",
diff --git a/core/l10n/oc.php b/core/l10n/oc.php
index 2de644e00a..fd84d0b2e3 100644
--- a/core/l10n/oc.php
+++ b/core/l10n/oc.php
@@ -39,6 +39,7 @@ $TRANSLATIONS = array(
 "No" => "Non",
 "Ok" => "D'accòrdi",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Annula",
 "Error" => "Error",
 "Share" => "Parteja",
 "Error while sharing" => "Error al partejar",
diff --git a/core/l10n/pa.php b/core/l10n/pa.php
index 5fc13bd1f7..c8078d06c7 100644
--- a/core/l10n/pa.php
+++ b/core/l10n/pa.php
@@ -36,6 +36,7 @@ $TRANSLATIONS = array(
 "No" => "ਨਹੀਂ",
 "Ok" => "ਠੀਕ ਹੈ",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "ਰੱਦ ਕਰੋ",
 "Error" => "ਗਲ",
 "Share" => "ਸਾਂਝਾ ਕਰੋ",
 "Password" => "ਪਾਸਵਰ",
diff --git a/core/l10n/pl.php b/core/l10n/pl.php
index dc6e8d365b..621038f79f 100644
--- a/core/l10n/pl.php
+++ b/core/l10n/pl.php
@@ -52,6 +52,7 @@ $TRANSLATIONS = array(
 "No" => "Nie",
 "Ok" => "OK",
 "_{count} file conflict_::_{count} file conflicts_" => array("","",""),
+"Cancel" => "Anuluj",
 "The object type is not specified." => "Nie określono typu obiektu.",
 "Error" => "Błąd",
 "The app name is not specified." => "Nie określono nazwy aplikacji.",
diff --git a/core/l10n/pt_BR.php b/core/l10n/pt_BR.php
index 5f22193d0d..5f8903a8ff 100644
--- a/core/l10n/pt_BR.php
+++ b/core/l10n/pt_BR.php
@@ -58,7 +58,15 @@ $TRANSLATIONS = array(
 "No" => "Não",
 "Ok" => "Ok",
 "Error loading message template: {error}" => "Erro no carregamento de modelo de mensagem: {error}",
-"_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("{count} conflito de arquivo","{count} conflitos de arquivos"),
+"One file conflict" => "Conflito em um arquivo",
+"Which files do you want to keep?" => "Qual arquivo você quer manter?",
+"If you select both versions, the copied file will have a number added to its name." => "Se você selecionar ambas as versões, o arquivo copiado terá um número adicionado ao seu nome.",
+"Cancel" => "Cancelar",
+"Continue" => "Continuar",
+"(all selected)" => "(todos os selecionados)",
+"({count} selected)" => "({count} selecionados)",
+"Error loading file exists template" => "Erro ao carregar arquivo existe modelo",
 "The object type is not specified." => "O tipo de objeto não foi especificado.",
 "Error" => "Erro",
 "The app name is not specified." => "O nome do app não foi especificado.",
diff --git a/core/l10n/pt_PT.php b/core/l10n/pt_PT.php
index f2dcf4ffd3..977d8e38cb 100644
--- a/core/l10n/pt_PT.php
+++ b/core/l10n/pt_PT.php
@@ -57,6 +57,7 @@ $TRANSLATIONS = array(
 "Ok" => "Ok",
 "Error loading message template: {error}" => "Erro ao carregar o template: {error}",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Cancelar",
 "The object type is not specified." => "O tipo de objecto não foi especificado",
 "Error" => "Erro",
 "The app name is not specified." => "O nome da aplicação não foi especificado",
diff --git a/core/l10n/ro.php b/core/l10n/ro.php
index 5b0f5e6538..12fbfa5f0c 100644
--- a/core/l10n/ro.php
+++ b/core/l10n/ro.php
@@ -2,6 +2,7 @@
 $TRANSLATIONS = array(
 "%s shared »%s« with you" => "%s Partajat »%s« cu tine de",
 "group" => "grup",
+"Updated database" => "Bază de date actualizată",
 "Category type not provided." => "Tipul de categorie nu a fost specificat.",
 "No category to add?" => "Nici o categorie de adăugat?",
 "This category already exists: %s" => "Această categorie deja există: %s",
@@ -10,6 +11,8 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Eroare la adăugarea %s la favorite.",
 "No categories selected for deletion." => "Nicio categorie selectată pentru ștergere.",
 "Error removing %s from favorites." => "Eroare la ștergerea %s din favorite.",
+"Unknown filetype" => "Tip fișier necunoscut",
+"Invalid image" => "Imagine invalidă",
 "Sunday" => "Duminică",
 "Monday" => "Luni",
 "Tuesday" => "Marți",
@@ -31,11 +34,11 @@ $TRANSLATIONS = array(
 "December" => "Decembrie",
 "Settings" => "Setări",
 "seconds ago" => "secunde în urmă",
-"_%n minute ago_::_%n minutes ago_" => array("","",""),
-"_%n hour ago_::_%n hours ago_" => array("","",""),
+"_%n minute ago_::_%n minutes ago_" => array("acum %n minut","acum %n minute","acum %n minute"),
+"_%n hour ago_::_%n hours ago_" => array("acum %n oră","acum %n ore","acum %n ore"),
 "today" => "astăzi",
 "yesterday" => "ieri",
-"_%n day ago_::_%n days ago_" => array("","",""),
+"_%n day ago_::_%n days ago_" => array("acum %n zi","acum %n zile","acum %n zile"),
 "last month" => "ultima lună",
 "_%n month ago_::_%n months ago_" => array("","",""),
 "months ago" => "luni în urmă",
@@ -46,6 +49,11 @@ $TRANSLATIONS = array(
 "No" => "Nu",
 "Ok" => "Ok",
 "_{count} file conflict_::_{count} file conflicts_" => array("","",""),
+"One file conflict" => "Un conflict de fișier",
+"Which files do you want to keep?" => "Ce fișiere vrei să păstrezi?",
+"If you select both versions, the copied file will have a number added to its name." => "Dacă alegi ambele versiuni, fișierul copiat va avea un număr atașat la denumirea sa.",
+"Cancel" => "Anulare",
+"Continue" => "Continuă",
 "The object type is not specified." => "Tipul obiectului nu este specificat.",
 "Error" => "Eroare",
 "The app name is not specified." => "Numele aplicației nu este specificat.",
diff --git a/core/l10n/ru.php b/core/l10n/ru.php
index 973f5f38bb..1b3133a1a6 100644
--- a/core/l10n/ru.php
+++ b/core/l10n/ru.php
@@ -2,9 +2,12 @@
 $TRANSLATIONS = array(
 "%s shared »%s« with you" => "%s поделился »%s« с вами",
 "group" => "группа",
+"Turned on maintenance mode" => "Режим отладки включён",
+"Turned off maintenance mode" => "Режим отладки отключён",
 "Updated database" => "База данных обновлена",
 "Updating filecache, this may take really long..." => "Обновление файлового кэша, это может занять некоторое время...",
 "Updated filecache" => "Обновлен файловый кэш",
+"... %d%% done ..." => "... %d%% завершено ...",
 "Category type not provided." => "Тип категории не предоставлен",
 "No category to add?" => "Нет категорий для добавления?",
 "This category already exists: %s" => "Эта категория уже существует: %s",
@@ -13,8 +16,11 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Ошибка добавления %s в избранное",
 "No categories selected for deletion." => "Нет категорий для удаления.",
 "Error removing %s from favorites." => "Ошибка удаления %s из избранного",
+"No image or file provided" => "Не указано изображение или файл",
 "Unknown filetype" => "Неизвестный тип файла",
 "Invalid image" => "Изображение повреждено",
+"No temporary profile picture available, try again" => "Временная картинка профиля недоступна, повторите попытку",
+"No crop data provided" => "Не указана информация о кадрировании",
 "Sunday" => "Воскресенье",
 "Monday" => "Понедельник",
 "Tuesday" => "Вторник",
@@ -47,10 +53,20 @@ $TRANSLATIONS = array(
 "last year" => "в прошлом году",
 "years ago" => "несколько лет назад",
 "Choose" => "Выбрать",
+"Error loading file picker template: {error}" => "Ошибка при загрузке шаблона выбора файлов: {error}",
 "Yes" => "Да",
 "No" => "Нет",
 "Ok" => "Ок",
-"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
+"Error loading message template: {error}" => "Ошибка загрузки шаблона сообщений: {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("{count} конфликт в файлах","{count} конфликта в файлах","{count} конфликтов в файлах"),
+"One file conflict" => "Один конфликт в файлах",
+"Which files do you want to keep?" => "Какие файлы вы хотите сохранить?",
+"If you select both versions, the copied file will have a number added to its name." => "При выборе обоих версий,  к названию копируемого файла будет добавлена цифра",
+"Cancel" => "Отменить",
+"Continue" => "Продолжить",
+"(all selected)" => "(выбраны все)",
+"({count} selected)" => "({count} выбрано)",
+"Error loading file exists template" => "Ошибка при загрузке шаблона существующего файла",
 "The object type is not specified." => "Тип объекта не указан",
 "Error" => "Ошибка",
 "The app name is not specified." => "Имя приложения не указано",
diff --git a/core/l10n/si_LK.php b/core/l10n/si_LK.php
index 6752352e34..2d922657ea 100644
--- a/core/l10n/si_LK.php
+++ b/core/l10n/si_LK.php
@@ -38,6 +38,7 @@ $TRANSLATIONS = array(
 "No" => "එපා",
 "Ok" => "හරි",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "එපා",
 "Error" => "දෝෂයක්",
 "Share" => "බෙදා හදා ගන්න",
 "Share with" => "බෙදාගන්න",
diff --git a/core/l10n/sk_SK.php b/core/l10n/sk_SK.php
index 55451d4536..ac45947459 100644
--- a/core/l10n/sk_SK.php
+++ b/core/l10n/sk_SK.php
@@ -52,6 +52,7 @@ $TRANSLATIONS = array(
 "No" => "Nie",
 "Ok" => "Ok",
 "_{count} file conflict_::_{count} file conflicts_" => array("","",""),
+"Cancel" => "Zrušiť",
 "The object type is not specified." => "Nešpecifikovaný typ objektu.",
 "Error" => "Chyba",
 "The app name is not specified." => "Nešpecifikované meno aplikácie.",
diff --git a/core/l10n/sl.php b/core/l10n/sl.php
index 71a653dc62..84cd83fa2f 100644
--- a/core/l10n/sl.php
+++ b/core/l10n/sl.php
@@ -46,6 +46,7 @@ $TRANSLATIONS = array(
 "No" => "Ne",
 "Ok" => "V redu",
 "_{count} file conflict_::_{count} file conflicts_" => array("","","",""),
+"Cancel" => "Prekliči",
 "The object type is not specified." => "Vrsta predmeta ni podana.",
 "Error" => "Napaka",
 "The app name is not specified." => "Ime programa ni podano.",
diff --git a/core/l10n/sq.php b/core/l10n/sq.php
index a3c9e5ed6e..e0fde3f129 100644
--- a/core/l10n/sq.php
+++ b/core/l10n/sq.php
@@ -52,6 +52,7 @@ $TRANSLATIONS = array(
 "No" => "Jo",
 "Ok" => "Në rregull",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Anulo",
 "The object type is not specified." => "Nuk është specifikuar tipi i objektit.",
 "Error" => "Veprim i gabuar",
 "The app name is not specified." => "Nuk është specifikuar emri i app-it.",
diff --git a/core/l10n/sr.php b/core/l10n/sr.php
index fcf01301c7..064984cca5 100644
--- a/core/l10n/sr.php
+++ b/core/l10n/sr.php
@@ -44,6 +44,7 @@ $TRANSLATIONS = array(
 "No" => "Не",
 "Ok" => "У реду",
 "_{count} file conflict_::_{count} file conflicts_" => array("","",""),
+"Cancel" => "Откажи",
 "The object type is not specified." => "Врста објекта није подешена.",
 "Error" => "Грешка",
 "The app name is not specified." => "Име програма није унето.",
diff --git a/core/l10n/sr@latin.php b/core/l10n/sr@latin.php
index 756fdae939..8c0d28ef1c 100644
--- a/core/l10n/sr@latin.php
+++ b/core/l10n/sr@latin.php
@@ -44,6 +44,7 @@ $TRANSLATIONS = array(
 "No" => "Ne",
 "Ok" => "Ok",
 "_{count} file conflict_::_{count} file conflicts_" => array("","",""),
+"Cancel" => "Otkaži",
 "The object type is not specified." => "Tip objekta nije zadan.",
 "Error" => "Greška",
 "The app name is not specified." => "Ime aplikacije nije precizirano.",
diff --git a/core/l10n/sv.php b/core/l10n/sv.php
index 6d7cfa2dfc..660cab0a62 100644
--- a/core/l10n/sv.php
+++ b/core/l10n/sv.php
@@ -52,6 +52,7 @@ $TRANSLATIONS = array(
 "No" => "Nej",
 "Ok" => "Ok",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "Avbryt",
 "The object type is not specified." => "Objekttypen är inte specificerad.",
 "Error" => "Fel",
 "The app name is not specified." => " Namnet på appen är inte specificerad.",
diff --git a/core/l10n/ta_LK.php b/core/l10n/ta_LK.php
index 4dcb618818..43c7f451e4 100644
--- a/core/l10n/ta_LK.php
+++ b/core/l10n/ta_LK.php
@@ -44,6 +44,7 @@ $TRANSLATIONS = array(
 "No" => "இல்லை",
 "Ok" => "சரி",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "இரத்து செய்க",
 "The object type is not specified." => "பொருள் வகை குறிப்பிடப்படவில்லை.",
 "Error" => "வழு",
 "The app name is not specified." => "செயலி பெயர் குறிப்பிடப்படவில்லை.",
diff --git a/core/l10n/te.php b/core/l10n/te.php
index 880c29bc2a..d54eeabb69 100644
--- a/core/l10n/te.php
+++ b/core/l10n/te.php
@@ -36,6 +36,7 @@ $TRANSLATIONS = array(
 "No" => "కాదు",
 "Ok" => "సరే",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "రద్దుచేయి",
 "Error" => "పొరపాటు",
 "Password" => "సంకేతపదం",
 "Send" => "పంపించు",
diff --git a/core/l10n/th_TH.php b/core/l10n/th_TH.php
index 1069ce9d8c..8eab771822 100644
--- a/core/l10n/th_TH.php
+++ b/core/l10n/th_TH.php
@@ -44,6 +44,7 @@ $TRANSLATIONS = array(
 "No" => "ไม่ตกลง",
 "Ok" => "ตกลง",
 "_{count} file conflict_::_{count} file conflicts_" => array(""),
+"Cancel" => "ยกเลิก",
 "The object type is not specified." => "ชนิดของวัตถุยังไม่ได้รับการระบุ",
 "Error" => "ข้อผิดพลาด",
 "The app name is not specified." => "ชื่อของแอปยังไม่ได้รับการระบุชื่อ",
diff --git a/core/l10n/tr.php b/core/l10n/tr.php
index b3777e94bd..d8d9709949 100644
--- a/core/l10n/tr.php
+++ b/core/l10n/tr.php
@@ -52,6 +52,7 @@ $TRANSLATIONS = array(
 "No" => "Hayır",
 "Ok" => "Tamam",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "İptal",
 "The object type is not specified." => "Nesne türü belirtilmemiş.",
 "Error" => "Hata",
 "The app name is not specified." => "uygulama adı belirtilmedi.",
diff --git a/core/l10n/ug.php b/core/l10n/ug.php
index 6298df3135..36023cb165 100644
--- a/core/l10n/ug.php
+++ b/core/l10n/ug.php
@@ -31,6 +31,7 @@ $TRANSLATIONS = array(
 "No" => "ياق",
 "Ok" => "جەزملە",
 "_{count} file conflict_::_{count} file conflicts_" => array(""),
+"Cancel" => "ۋاز كەچ",
 "Error" => "خاتالىق",
 "Share" => "ھەمبەھىر",
 "Share with" => "ھەمبەھىر",
diff --git a/core/l10n/uk.php b/core/l10n/uk.php
index 71b1c8ba26..2320765473 100644
--- a/core/l10n/uk.php
+++ b/core/l10n/uk.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "No" => "Ні",
 "Ok" => "Ok",
 "_{count} file conflict_::_{count} file conflicts_" => array("","",""),
+"Cancel" => "Відмінити",
 "The object type is not specified." => "Не визначено тип об'єкту.",
 "Error" => "Помилка",
 "The app name is not specified." => "Не визначено ім'я програми.",
diff --git a/core/l10n/ur_PK.php b/core/l10n/ur_PK.php
index 5bb9255fe5..fc73677912 100644
--- a/core/l10n/ur_PK.php
+++ b/core/l10n/ur_PK.php
@@ -24,6 +24,7 @@ $TRANSLATIONS = array(
 "No" => "نہیں",
 "Ok" => "اوکے",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Cancel" => "منسوخ کریں",
 "Error" => "ایرر",
 "Error while sharing" => "شئیرنگ کے دوران ایرر",
 "Error while unsharing" => "شئیرنگ ختم کرنے  کے دوران ایرر",
diff --git a/core/l10n/vi.php b/core/l10n/vi.php
index 91f756e266..1c99aad9a4 100644
--- a/core/l10n/vi.php
+++ b/core/l10n/vi.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
 "No" => "Không",
 "Ok" => "Đồng ý",
 "_{count} file conflict_::_{count} file conflicts_" => array(""),
+"Cancel" => "Hủy",
 "The object type is not specified." => "Loại đối tượng không được chỉ định.",
 "Error" => "Lỗi",
 "The app name is not specified." => "Tên ứng dụng không được chỉ định.",
diff --git a/core/l10n/zh_CN.php b/core/l10n/zh_CN.php
index 471aa735c4..04c4630b22 100644
--- a/core/l10n/zh_CN.php
+++ b/core/l10n/zh_CN.php
@@ -52,6 +52,7 @@ $TRANSLATIONS = array(
 "No" => "否",
 "Ok" => "好",
 "_{count} file conflict_::_{count} file conflicts_" => array(""),
+"Cancel" => "取消",
 "The object type is not specified." => "未指定对象类型。",
 "Error" => "错误",
 "The app name is not specified." => "未指定应用名称。",
diff --git a/core/l10n/zh_HK.php b/core/l10n/zh_HK.php
index f8e9cc2176..f6c4003af6 100644
--- a/core/l10n/zh_HK.php
+++ b/core/l10n/zh_HK.php
@@ -32,6 +32,7 @@ $TRANSLATIONS = array(
 "No" => "No",
 "Ok" => "OK",
 "_{count} file conflict_::_{count} file conflicts_" => array(""),
+"Cancel" => "取消",
 "Error" => "錯誤",
 "Shared" => "已分享",
 "Share" => "分享",
diff --git a/core/l10n/zh_TW.php b/core/l10n/zh_TW.php
index 0a9a9db733..759a4fdc35 100644
--- a/core/l10n/zh_TW.php
+++ b/core/l10n/zh_TW.php
@@ -52,6 +52,7 @@ $TRANSLATIONS = array(
 "No" => "否",
 "Ok" => "好",
 "_{count} file conflict_::_{count} file conflicts_" => array(""),
+"Cancel" => "取消",
 "The object type is not specified." => "未指定物件類型。",
 "Error" => "錯誤",
 "The app name is not specified." => "沒有指定 app 名稱。",
diff --git a/l10n/ar/core.po b/l10n/ar/core.po
index fd75a547f8..56e2c293e4 100644
--- a/l10n/ar/core.po
+++ b/l10n/ar/core.po
@@ -3,13 +3,14 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# blackcoder <tarek.taha@gmail.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-22 00:50+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"
@@ -308,7 +309,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "الغاء"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
@@ -500,11 +501,11 @@ msgid ""
 "The link to reset your password has been sent to your email.<br>If you do "
 "not receive it within a reasonable amount of time, check your spam/junk "
 "folders.<br>If it is not there ask your local administrator ."
-msgstr ""
+msgstr "وصلة تحديث كلمة المرور بعثت الى بريدك الالكتروني.<br> اذا لم تستقبل البريد خلال فترة زمنية قصيره, ابحث في سلة مهملات بريدك."
 
 #: lostpassword/templates/lostpassword.php:12
 msgid "Request failed!<br>Did you make sure your email/username was right?"
-msgstr ""
+msgstr "الطلب رفض! <br> هل انت متأكد أن الاسم/العنوان البريدي صحيح؟"
 
 #: lostpassword/templates/lostpassword.php:15
 msgid "You will receive a link to reset your password via Email."
diff --git a/l10n/bg_BG/core.po b/l10n/bg_BG/core.po
index 4237a77998..432e35d927 100644
--- a/l10n/bg_BG/core.po
+++ b/l10n/bg_BG/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
 "MIME-Version: 1.0\n"
@@ -288,7 +288,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Отказ"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/bn_BD/core.po b/l10n/bn_BD/core.po
index 9c545be382..36e98dacda 100644
--- a/l10n/bn_BD/core.po
+++ b/l10n/bn_BD/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
 "MIME-Version: 1.0\n"
@@ -288,7 +288,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "বাতির"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/ca/core.po b/l10n/ca/core.po
index b9bcb7573d..aaabc519ac 100644
--- a/l10n/ca/core.po
+++ b/l10n/ca/core.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:30+0000\n"
+"Last-Translator: rogerc\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"
@@ -271,42 +271,42 @@ msgstr "Error en carregar la plantilla de missatge: {error}"
 #: js/oc-dialogs.js:347
 msgid "{count} file conflict"
 msgid_plural "{count} file conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{count} conflicte de fitxer"
+msgstr[1] "{count} conflictes de fitxer"
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "Un fitxer en conflicte"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
-msgstr ""
+msgstr "Quin fitxer voleu conservar?"
 
 #: js/oc-dialogs.js:368
 msgid ""
 "If you select both versions, the copied file will have a number added to its"
 " name."
-msgstr ""
+msgstr "Si seleccioneu les dues versions, el fitxer copiat tindrà un número afegit al seu nom."
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Cancel·la"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Continua"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr ""
+msgstr "(selecciona-ho tot)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
-msgstr ""
+msgstr "({count} seleccionats)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
-msgstr ""
+msgstr "Error en carregar la plantilla de fitxer existent"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/ca/settings.po b/l10n/ca/settings.po
index 0aafc8549f..1053dcb243 100644
--- a/l10n/ca/settings.po
+++ b/l10n/ca/settings.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:45-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:56-0400\n"
+"PO-Revision-Date: 2013-09-20 15:20+0000\n"
+"Last-Translator: rogerc\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"
@@ -88,32 +88,32 @@ msgstr "No s'ha pogut actualitzar l'aplicació."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Contrasenya incorrecta"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "No heu proporcionat cap usuari"
 
 #: changepassword/controller.php:74
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Sisplau, proporcioneu una contrasenya de recuperació d'administrador, altrament totes les dades d'usuari es perdran"
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "La contrasenya de recuperació d'administrador és incorrecta. Comproveu-la i torneu-ho a intentar."
 
 #: changepassword/controller.php:87
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
+msgstr "El dorsal no permet canviar la contrasenya, però la clau d'encripació d'usuaris s'ha actualitzat correctament."
 
 #: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "No es pot canviar la contrasenya"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
diff --git a/l10n/cs_CZ/core.po b/l10n/cs_CZ/core.po
index 038c8c297c..61a7e861b2 100644
--- a/l10n/cs_CZ/core.po
+++ b/l10n/cs_CZ/core.po
@@ -12,8 +12,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
 "MIME-Version: 1.0\n"
@@ -298,7 +298,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Zrušit"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/cy_GB/core.po b/l10n/cy_GB/core.po
index 986f5a871a..1e0692c377 100644
--- a/l10n/cy_GB/core.po
+++ b/l10n/cy_GB/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Welsh (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/cy_GB/)\n"
 "MIME-Version: 1.0\n"
@@ -299,7 +299,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Diddymu"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/da/core.po b/l10n/da/core.po
index e1bdb36d52..690bb46c21 100644
--- a/l10n/da/core.po
+++ b/l10n/da/core.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
 "MIME-Version: 1.0\n"
@@ -292,7 +292,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Annuller"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/de/core.po b/l10n/de/core.po
index 0f23d0cd3f..44eb6eec04 100644
--- a/l10n/de/core.po
+++ b/l10n/de/core.po
@@ -15,9 +15,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-21 10:00+0000\n"
+"Last-Translator: Mario Siegmann <mario_siegmann@web.de>\n"
 "Language-Team: German <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -277,42 +277,42 @@ msgstr "Fehler beim Laden der Nachrichtenvorlage: {error}"
 #: js/oc-dialogs.js:347
 msgid "{count} file conflict"
 msgid_plural "{count} file conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{count} Dateikonflikt"
+msgstr[1] "{count} Dateikonflikte"
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "Ein Dateikonflikt"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
-msgstr ""
+msgstr "Welche Dateien möchtest du behalten?"
 
 #: js/oc-dialogs.js:368
 msgid ""
 "If you select both versions, the copied file will have a number added to its"
 " name."
-msgstr ""
+msgstr "Wenn du beide Versionen auswählst, erhält die kopierte Datei eine Zahl am Ende des Dateinamens."
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Abbrechen"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Fortsetzen"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr ""
+msgstr "(Alle ausgewählt)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
-msgstr ""
+msgstr "({count} ausgewählt)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
-msgstr ""
+msgstr "Fehler beim Laden der vorhanden Dateivorlage"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/de/files.po b/l10n/de/files.po
index 0178601564..06bce64463 100644
--- a/l10n/de/files.po
+++ b/l10n/de/files.po
@@ -13,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:51-0400\n"
+"PO-Revision-Date: 2013-09-21 10:00+0000\n"
+"Last-Translator: Mario Siegmann <mario_siegmann@web.de>\n"
 "Language-Team: German <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -82,23 +82,23 @@ msgstr "Nicht genug Speicher vorhanden."
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr ""
+msgstr "Hochladen fehlgeschlagen. Dateiinformationen konnten nicht abgerufen werden."
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr ""
+msgstr "Hochladen fehlgeschlagen. Hochgeladene Datei konnte nicht gefunden werden."
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Ungültiges Verzeichnis."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Dateien"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Datei {filename} kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist"
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -110,7 +110,7 @@ msgstr "Upload abgebrochen."
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "Ergebnis konnte nicht vom Server abgerufen werden."
 
 #: js/file-upload.js:446
 msgid ""
@@ -227,7 +227,7 @@ msgstr "Dein Download wird vorbereitet. Dies kann bei größeren Dateien etwas d
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Fehler beim Verschieben der Datei"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/de_CH/core.po b/l10n/de_CH/core.po
index cef773ced7..cb7631fdc2 100644
--- a/l10n/de_CH/core.po
+++ b/l10n/de_CH/core.po
@@ -16,8 +16,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Switzerland) (http://www.transifex.com/projects/p/owncloud/language/de_CH/)\n"
 "MIME-Version: 1.0\n"
@@ -297,7 +297,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Abbrechen"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/de_DE/core.po b/l10n/de_DE/core.po
index a9bc9abea0..cfdcd67997 100644
--- a/l10n/de_DE/core.po
+++ b/l10n/de_DE/core.po
@@ -15,9 +15,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-21 10:00+0000\n"
+"Last-Translator: Mario Siegmann <mario_siegmann@web.de>\n"
 "Language-Team: German (Germany) <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -277,42 +277,42 @@ msgstr "Fehler beim Laden der Nachrichtenvorlage: {error}"
 #: js/oc-dialogs.js:347
 msgid "{count} file conflict"
 msgid_plural "{count} file conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{count} Dateikonflikt"
+msgstr[1] "{count} Dateikonflikte"
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "Ein Dateikonflikt"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
-msgstr ""
+msgstr "Welche Dateien möchten Sie behalten?"
 
 #: js/oc-dialogs.js:368
 msgid ""
 "If you select both versions, the copied file will have a number added to its"
 " name."
-msgstr ""
+msgstr "Wenn Siebeide Versionen auswählen, erhält die kopierte Datei eine Zahl am Ende des Dateinamens."
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Abbrechen"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Fortsetzen"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr ""
+msgstr "(Alle ausgewählt)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
-msgstr ""
+msgstr "({count} ausgewählt)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
-msgstr ""
+msgstr "Fehler beim Laden der vorhanden Dateivorlage"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/de_DE/files.po b/l10n/de_DE/files.po
index 9e4d2a2438..ce852eb583 100644
--- a/l10n/de_DE/files.po
+++ b/l10n/de_DE/files.po
@@ -16,9 +16,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:51-0400\n"
+"PO-Revision-Date: 2013-09-21 10:00+0000\n"
+"Last-Translator: Mario Siegmann <mario_siegmann@web.de>\n"
 "Language-Team: German (Germany) <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -85,23 +85,23 @@ msgstr "Nicht genug Speicher vorhanden."
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr ""
+msgstr "Hochladen fehlgeschlagen. Dateiinformationen konnten nicht abgerufen werden."
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr ""
+msgstr "Hochladen fehlgeschlagen. Hochgeladene Datei konnte nicht gefunden werden."
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Ungültiges Verzeichnis."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Dateien"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Datei {filename} kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist"
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -113,7 +113,7 @@ msgstr "Upload abgebrochen."
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "Ergebnis konnte nicht vom Server abgerufen werden."
 
 #: js/file-upload.js:446
 msgid ""
@@ -230,7 +230,7 @@ msgstr "Ihr Download wird vorbereitet. Dies kann bei größeren Dateien etwas da
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Fehler beim Verschieben der Datei"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/el/core.po b/l10n/el/core.po
index c045d09efe..9b88a333be 100644
--- a/l10n/el/core.po
+++ b/l10n/el/core.po
@@ -14,8 +14,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
 "MIME-Version: 1.0\n"
@@ -295,7 +295,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Άκυρο"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/en_GB/core.po b/l10n/en_GB/core.po
index 7e5c1ed079..5ac5d34f56 100644
--- a/l10n/en_GB/core.po
+++ b/l10n/en_GB/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
 "MIME-Version: 1.0\n"
@@ -289,7 +289,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Cancel"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/eo/core.po b/l10n/eo/core.po
index 8c3e043383..1ea5a60749 100644
--- a/l10n/eo/core.po
+++ b/l10n/eo/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
 "MIME-Version: 1.0\n"
@@ -290,7 +290,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Nuligi"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/es/core.po b/l10n/es/core.po
index 1e83ffd668..5e96058e82 100644
--- a/l10n/es/core.po
+++ b/l10n/es/core.po
@@ -17,8 +17,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
 "MIME-Version: 1.0\n"
@@ -298,7 +298,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Cancelar"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/es_AR/core.po b/l10n/es_AR/core.po
index dd3a48b0d1..6c72e8a9b0 100644
--- a/l10n/es_AR/core.po
+++ b/l10n/es_AR/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
 "MIME-Version: 1.0\n"
@@ -289,7 +289,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Cancelar"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/et_EE/core.po b/l10n/et_EE/core.po
index b94690c975..872a66ae6a 100644
--- a/l10n/et_EE/core.po
+++ b/l10n/et_EE/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
 "MIME-Version: 1.0\n"
@@ -290,7 +290,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Loobu"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/eu/core.po b/l10n/eu/core.po
index ccac1c7de4..456f415e68 100644
--- a/l10n/eu/core.po
+++ b/l10n/eu/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
 "MIME-Version: 1.0\n"
@@ -290,7 +290,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Ezeztatu"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/fa/core.po b/l10n/fa/core.po
index a4e9885b05..971a51aa87 100644
--- a/l10n/fa/core.po
+++ b/l10n/fa/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
 "MIME-Version: 1.0\n"
@@ -284,7 +284,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "منصرف شدن"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/fi_FI/core.po b/l10n/fi_FI/core.po
index 6eecad24ce..2a2872e255 100644
--- a/l10n/fi_FI/core.po
+++ b/l10n/fi_FI/core.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-21 10:30+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"
@@ -290,19 +290,19 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Peru"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Jatka"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr ""
+msgstr "(kaikki valittu)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
-msgstr ""
+msgstr "({count} valittu)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
diff --git a/l10n/fi_FI/files.po b/l10n/fi_FI/files.po
index cc0dfaf5c1..3e4e67e31d 100644
--- a/l10n/fi_FI/files.po
+++ b/l10n/fi_FI/files.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:51-0400\n"
+"PO-Revision-Date: 2013-09-21 10:30+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"
@@ -87,13 +87,13 @@ msgstr ""
 msgid "Invalid directory."
 msgstr "Virheellinen kansio."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Tiedostot"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Kohdetta {filename} ei voi lähettää, koska se on joko kansio tai sen koko on 0 tavua"
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -105,7 +105,7 @@ msgstr "Lähetys peruttu."
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "Tuloksien saaminen palvelimelta ei onnistunut."
 
 #: js/file-upload.js:446
 msgid ""
@@ -222,7 +222,7 @@ msgstr "Lataustasi valmistellaan. Tämä saattaa kestää hetken, jos tiedostot
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Virhe tiedostoa siirrettäessä"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/fr/core.po b/l10n/fr/core.po
index 011e6dbd15..76dc658c71 100644
--- a/l10n/fr/core.po
+++ b/l10n/fr/core.po
@@ -13,8 +13,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
 "MIME-Version: 1.0\n"
@@ -294,7 +294,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Annuler"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/gl/core.po b/l10n/gl/core.po
index 25a8ee333f..72986b81c8 100644
--- a/l10n/gl/core.po
+++ b/l10n/gl/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 "MIME-Version: 1.0\n"
@@ -289,7 +289,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Cancelar"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/he/core.po b/l10n/he/core.po
index 1f7da9c025..c8ae1beb1e 100644
--- a/l10n/he/core.po
+++ b/l10n/he/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
 "MIME-Version: 1.0\n"
@@ -290,7 +290,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "ביטול"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/hr/core.po b/l10n/hr/core.po
index 583405240b..59f10907b0 100644
--- a/l10n/hr/core.po
+++ b/l10n/hr/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
 "MIME-Version: 1.0\n"
@@ -293,7 +293,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Odustani"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/hu_HU/core.po b/l10n/hu_HU/core.po
index 9a7ab1014f..7b484995d4 100644
--- a/l10n/hu_HU/core.po
+++ b/l10n/hu_HU/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
 "MIME-Version: 1.0\n"
@@ -290,7 +290,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Mégsem"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/ia/core.po b/l10n/ia/core.po
index 5a048cfc14..194b8863ff 100644
--- a/l10n/ia/core.po
+++ b/l10n/ia/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
 "MIME-Version: 1.0\n"
@@ -288,7 +288,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Cancellar"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/id/core.po b/l10n/id/core.po
index 355807ff03..2a8ac8b61c 100644
--- a/l10n/id/core.po
+++ b/l10n/id/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
 "MIME-Version: 1.0\n"
@@ -283,7 +283,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Batal"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/is/core.po b/l10n/is/core.po
index e4e28667ba..f2fe78f0c1 100644
--- a/l10n/is/core.po
+++ b/l10n/is/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
 "MIME-Version: 1.0\n"
@@ -289,7 +289,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Hætta við"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/it/core.po b/l10n/it/core.po
index 4189836997..d587e95953 100644
--- a/l10n/it/core.po
+++ b/l10n/it/core.po
@@ -3,6 +3,7 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# nappo <leone@inventati.org>, 2013
 # idetao <marcxosm@gmail.com>, 2013
 # polxmod <paolo.velati@gmail.com>, 2013
 # Vincenzo Reale <vinx.reale@gmail.com>, 2013
@@ -10,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-22 13:40+0000\n"
+"Last-Translator: nappo <leone@inventati.org>\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"
@@ -107,7 +108,7 @@ msgstr "Immagine non valida"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr "Nessuna foto di profilo temporanea disponibile, riprova"
+msgstr "Nessuna immagine di profilo provvisoria disponibile, riprova"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
@@ -251,7 +252,7 @@ msgstr "Scegli"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr "Errore durante il caricamento del modello del selettore file: {error}"
+msgstr "Errore nel caricamento del modello del selettore file: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -267,47 +268,47 @@ msgstr "Ok"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr "Errore durante il caricamento del modello di messaggio: {error}"
+msgstr "Errore nel caricamento del modello di messaggio: {error}"
 
 #: js/oc-dialogs.js:347
 msgid "{count} file conflict"
 msgid_plural "{count} file conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{count} file in conflitto"
+msgstr[1] "{count} file in conflitto"
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "Un conflitto tra file"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
-msgstr ""
+msgstr "Quali file vuoi mantenere?"
 
 #: js/oc-dialogs.js:368
 msgid ""
 "If you select both versions, the copied file will have a number added to its"
 " name."
-msgstr ""
+msgstr "Se selezioni entrambe le versioni, verrà aggiunto un numero al nome del file copiato."
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Annulla"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Continua"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr ""
+msgstr "(tutti selezionati)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
-msgstr ""
+msgstr "({count} selezionati)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
-msgstr ""
+msgstr "Errore durante il caricamento del modello del file esistente"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/it/files.po b/l10n/it/files.po
index cde611190e..4711aa723a 100644
--- a/l10n/it/files.po
+++ b/l10n/it/files.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:51-0400\n"
+"PO-Revision-Date: 2013-09-21 17:50+0000\n"
+"Last-Translator: polxmod <paolo.velati@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"
@@ -78,23 +78,23 @@ msgstr "Spazio di archiviazione insufficiente"
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr ""
+msgstr "Upload fallito. Impossibile ottenere informazioni sul file"
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr ""
+msgstr "Upload fallit. Impossibile trovare file caricato"
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Cartella non valida."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "File"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Impossibile caricare {filename} poiché è una cartella oppure è di 0 byte"
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -106,7 +106,7 @@ msgstr "Invio annullato"
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "Impossibile ottenere il risultato dal server."
 
 #: js/file-upload.js:446
 msgid ""
@@ -223,7 +223,7 @@ msgstr "Il tuo scaricamento è in fase di preparazione. Ciò potrebbe richiedere
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Errore durante lo spostamento del file"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/ja_JP/core.po b/l10n/ja_JP/core.po
index f72301efcb..0e8b19b17e 100644
--- a/l10n/ja_JP/core.po
+++ b/l10n/ja_JP/core.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 "MIME-Version: 1.0\n"
@@ -287,7 +287,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "キャンセル"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/ja_JP/lib.po b/l10n/ja_JP/lib.po
index 7cae81c6ad..6b0484f521 100644
--- a/l10n/ja_JP/lib.po
+++ b/l10n/ja_JP/lib.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:47-0400\n"
-"PO-Revision-Date: 2013-09-18 05:50+0000\n"
-"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
+"POT-Creation-Date: 2013-09-22 12:56-0400\n"
+"PO-Revision-Date: 2013-09-21 13:50+0000\n"
+"Last-Translator: tt yn <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"
@@ -59,7 +59,7 @@ msgstr "\"%s\" へのアップグレードに失敗しました。"
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "暗号無しでは利用不可なカスタムプロフィール画像"
 
 #: avatar.php:64
 msgid "Unknown filetype"
@@ -168,15 +168,15 @@ msgstr "認証エラー"
 msgid "Token expired. Please reload page."
 msgstr "トークンが無効になりました。ページを再読込してください。"
 
-#: search/provider/file.php:17 search/provider/file.php:35
+#: search/provider/file.php:18 search/provider/file.php:36
 msgid "Files"
 msgstr "ファイル"
 
-#: search/provider/file.php:26 search/provider/file.php:33
+#: search/provider/file.php:27 search/provider/file.php:34
 msgid "Text"
 msgstr "TTY TDD"
 
-#: search/provider/file.php:29
+#: search/provider/file.php:30
 msgid "Images"
 msgstr "画像"
 
diff --git a/l10n/ka_GE/core.po b/l10n/ka_GE/core.po
index 247c6892b0..5c70d01e3e 100644
--- a/l10n/ka_GE/core.po
+++ b/l10n/ka_GE/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
 "MIME-Version: 1.0\n"
@@ -283,7 +283,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "უარყოფა"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/ko/core.po b/l10n/ko/core.po
index b545b194b2..ee7f0753f7 100644
--- a/l10n/ko/core.po
+++ b/l10n/ko/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
 "MIME-Version: 1.0\n"
@@ -285,7 +285,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "취소"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/lb/core.po b/l10n/lb/core.po
index d0e584ef60..0ee9039e60 100644
--- a/l10n/lb/core.po
+++ b/l10n/lb/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
 "MIME-Version: 1.0\n"
@@ -289,7 +289,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Ofbriechen"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/lt_LT/core.po b/l10n/lt_LT/core.po
index 87de0d1aaa..f340c7a46d 100644
--- a/l10n/lt_LT/core.po
+++ b/l10n/lt_LT/core.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
 "MIME-Version: 1.0\n"
@@ -297,7 +297,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Atšaukti"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/lv/core.po b/l10n/lv/core.po
index b4f827bd08..813a554583 100644
--- a/l10n/lv/core.po
+++ b/l10n/lv/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
 "MIME-Version: 1.0\n"
@@ -294,7 +294,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Atcelt"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/mk/core.po b/l10n/mk/core.po
index 94b36d5a9c..c1f6fdbed9 100644
--- a/l10n/mk/core.po
+++ b/l10n/mk/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
 "MIME-Version: 1.0\n"
@@ -288,7 +288,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Откажи"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/ms_MY/core.po b/l10n/ms_MY/core.po
index 38457ad111..3809aef14e 100644
--- a/l10n/ms_MY/core.po
+++ b/l10n/ms_MY/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
 "MIME-Version: 1.0\n"
@@ -283,7 +283,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Batal"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/my_MM/core.po b/l10n/my_MM/core.po
index d66c528d96..f2f4b06658 100644
--- a/l10n/my_MM/core.po
+++ b/l10n/my_MM/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n"
 "MIME-Version: 1.0\n"
@@ -283,7 +283,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "ပယ်ဖျက်မည်"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/nb_NO/core.po b/l10n/nb_NO/core.po
index 7d6a9bedeb..b9a4a85d03 100644
--- a/l10n/nb_NO/core.po
+++ b/l10n/nb_NO/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -289,7 +289,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Avbryt"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/nl/core.po b/l10n/nl/core.po
index 9b6abbaf29..1c2702b714 100644
--- a/l10n/nl/core.po
+++ b/l10n/nl/core.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
 "MIME-Version: 1.0\n"
@@ -291,7 +291,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Annuleer"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/nn_NO/core.po b/l10n/nn_NO/core.po
index 42a5e395e0..40a6de51ba 100644
--- a/l10n/nn_NO/core.po
+++ b/l10n/nn_NO/core.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -291,7 +291,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Avbryt"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/oc/core.po b/l10n/oc/core.po
index 91003bba79..10cb246431 100644
--- a/l10n/oc/core.po
+++ b/l10n/oc/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
 "MIME-Version: 1.0\n"
@@ -288,7 +288,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Annula"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/pa/core.po b/l10n/pa/core.po
index a7fc0e1e13..184ac05da0 100644
--- a/l10n/pa/core.po
+++ b/l10n/pa/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
 "MIME-Version: 1.0\n"
@@ -289,7 +289,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "ਰੱਦ ਕਰੋ"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/pl/core.po b/l10n/pl/core.po
index 1e9839e6f6..3d7aae83ba 100644
--- a/l10n/pl/core.po
+++ b/l10n/pl/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
 "MIME-Version: 1.0\n"
@@ -295,7 +295,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Anuluj"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/pt_BR/core.po b/l10n/pt_BR/core.po
index 06857800f3..281471b1b9 100644
--- a/l10n/pt_BR/core.po
+++ b/l10n/pt_BR/core.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 16:40+0000\n"
+"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -271,42 +271,42 @@ msgstr "Erro no carregamento de modelo de mensagem: {error}"
 #: js/oc-dialogs.js:347
 msgid "{count} file conflict"
 msgid_plural "{count} file conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{count} conflito de arquivo"
+msgstr[1] "{count} conflitos de arquivos"
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "Conflito em um arquivo"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
-msgstr ""
+msgstr "Qual arquivo você quer manter?"
 
 #: js/oc-dialogs.js:368
 msgid ""
 "If you select both versions, the copied file will have a number added to its"
 " name."
-msgstr ""
+msgstr "Se você selecionar ambas as versões, o arquivo copiado terá um número adicionado ao seu nome."
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Cancelar"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Continuar"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr ""
+msgstr "(todos os selecionados)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
-msgstr ""
+msgstr "({count} selecionados)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
-msgstr ""
+msgstr "Erro ao carregar arquivo existe modelo"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/pt_BR/files.po b/l10n/pt_BR/files.po
index d9d4aaf18f..1b491703bd 100644
--- a/l10n/pt_BR/files.po
+++ b/l10n/pt_BR/files.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:51-0400\n"
+"PO-Revision-Date: 2013-09-20 16:40+0000\n"
+"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -79,23 +79,23 @@ msgstr "Espaço de armazenamento insuficiente"
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr ""
+msgstr "Falha no envio. Não foi possível obter informações do arquivo."
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr ""
+msgstr "Falha no envio. Não foi possível encontrar o arquivo enviado"
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Diretório inválido."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Arquivos"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Incapaz de fazer o envio de {filename}, pois é um diretório ou tem 0 bytes"
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -107,7 +107,7 @@ msgstr "Envio cancelado."
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "Não foi possível obter o resultado do servidor."
 
 #: js/file-upload.js:446
 msgid ""
@@ -224,7 +224,7 @@ msgstr "Seu download está sendo preparado. Isto pode levar algum tempo se os ar
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Erro movendo o arquivo"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/pt_PT/core.po b/l10n/pt_PT/core.po
index d0a28fbf40..974950a164 100644
--- a/l10n/pt_PT/core.po
+++ b/l10n/pt_PT/core.po
@@ -12,8 +12,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
@@ -293,7 +293,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Cancelar"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/ro/core.po b/l10n/ro/core.po
index db5393d90c..5e6a50773f 100644
--- a/l10n/ro/core.po
+++ b/l10n/ro/core.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-21 20:00+0000\n"
+"Last-Translator: corneliu.e <corneliueva@yahoo.com>\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"
@@ -40,7 +40,7 @@ msgstr ""
 
 #: ajax/update.php:17
 msgid "Updated database"
-msgstr ""
+msgstr "Bază de date actualizată"
 
 #: ajax/update.php:20
 msgid "Updating filecache, this may take really long..."
@@ -100,11 +100,11 @@ msgstr ""
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Tip fișier necunoscut"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Imagine invalidă"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
@@ -201,16 +201,16 @@ msgstr "secunde în urmă"
 #: js/js.js:867
 msgid "%n minute ago"
 msgid_plural "%n minutes ago"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "acum %n minut"
+msgstr[1] "acum %n minute"
+msgstr[2] "acum %n minute"
 
 #: js/js.js:868
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "acum %n oră"
+msgstr[1] "acum %n ore"
+msgstr[2] "acum %n ore"
 
 #: js/js.js:869
 msgid "today"
@@ -223,9 +223,9 @@ msgstr "ieri"
 #: js/js.js:871
 msgid "%n day ago"
 msgid_plural "%n days ago"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "acum %n zi"
+msgstr[1] "acum %n zile"
+msgstr[2] "acum %n zile"
 
 #: js/js.js:872
 msgid "last month"
@@ -283,25 +283,25 @@ msgstr[2] ""
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "Un conflict de fișier"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
-msgstr ""
+msgstr "Ce fișiere vrei să păstrezi?"
 
 #: js/oc-dialogs.js:368
 msgid ""
 "If you select both versions, the copied file will have a number added to its"
 " name."
-msgstr ""
+msgstr "Dacă alegi ambele versiuni, fișierul copiat va avea un număr atașat la denumirea sa."
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Anulare"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Continuă"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
diff --git a/l10n/ro/files.po b/l10n/ro/files.po
index e40c8605cf..85ce986ea0 100644
--- a/l10n/ro/files.po
+++ b/l10n/ro/files.po
@@ -3,6 +3,7 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# corneliu.e <corneliueva@yahoo.com>, 2013
 # dimaursu16 <dima@ceata.org>, 2013
 # inaina <ina.c.ina@gmail.com>, 2013
 # ripkid666 <ripkid666@gmail.com>, 2013
@@ -11,9 +12,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:51-0400\n"
+"PO-Revision-Date: 2013-09-21 16:50+0000\n"
+"Last-Translator: corneliu.e <corneliueva@yahoo.com>\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"
@@ -80,23 +81,23 @@ msgstr "Nu este suficient spațiu disponibil"
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr ""
+msgstr "Încărcare eșuată. Nu se pot obține informații despre fișier."
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr ""
+msgstr "Încărcare eșuată. Nu se poate găsi fișierul încărcat"
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "registru invalid."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Fișiere"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Nu se poate încărca {filename} deoarece este un director sau are mărimea de 0 octeți"
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -108,7 +109,7 @@ msgstr "Încărcare anulată."
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "Nu se poate obține rezultatul de la server."
 
 #: js/file-upload.js:446
 msgid ""
@@ -170,27 +171,27 @@ msgstr "Anulează ultima acțiune"
 #: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "%n director"
+msgstr[1] "%n directoare"
+msgstr[2] "%n directoare"
 
 #: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "%n fișier"
+msgstr[1] "%n fișiere"
+msgstr[2] "%n fișiere"
 
 #: js/filelist.js:541
 msgid "{dirs} and {files}"
-msgstr ""
+msgstr "{dirs} și {files}"
 
 #: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Se încarcă %n fișier."
+msgstr[1] "Se încarcă %n fișiere."
+msgstr[2] "Se încarcă %n fișiere."
 
 #: js/files.js:25
 msgid "'.' is an invalid file name."
@@ -228,7 +229,7 @@ msgstr "in curs de descarcare. Aceasta poate să dureze ceva timp dacă fișiere
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Eroare la mutarea fișierului"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/ro/files_trashbin.po b/l10n/ro/files_trashbin.po
index 59197c9f4f..916fba8a41 100644
--- a/l10n/ro/files_trashbin.po
+++ b/l10n/ro/files_trashbin.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-15 04:47-0400\n"
-"PO-Revision-Date: 2013-08-15 08:48+0000\n"
+"POT-Creation-Date: 2013-09-22 12:54-0400\n"
+"PO-Revision-Date: 2013-09-21 16:50+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
 "MIME-Version: 1.0\n"
@@ -27,45 +27,45 @@ msgstr ""
 msgid "Couldn't restore %s"
 msgstr ""
 
-#: js/trash.js:7 js/trash.js:100
+#: js/trash.js:7 js/trash.js:102
 msgid "perform restore operation"
 msgstr ""
 
-#: js/trash.js:20 js/trash.js:48 js/trash.js:118 js/trash.js:146
+#: js/trash.js:20 js/trash.js:49 js/trash.js:120 js/trash.js:148
 msgid "Error"
 msgstr "Eroare"
 
-#: js/trash.js:36
+#: js/trash.js:37
 msgid "delete file permanently"
 msgstr ""
 
-#: js/trash.js:127
+#: js/trash.js:129
 msgid "Delete permanently"
 msgstr "Stergere permanenta"
 
-#: js/trash.js:182 templates/index.php:17
+#: js/trash.js:190 templates/index.php:21
 msgid "Name"
 msgstr "Nume"
 
-#: js/trash.js:183 templates/index.php:27
+#: js/trash.js:191 templates/index.php:31
 msgid "Deleted"
 msgstr ""
 
-#: js/trash.js:191
+#: js/trash.js:199
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
 msgstr[1] ""
-msgstr[2] ""
+msgstr[2] "%n directoare"
 
-#: js/trash.js:197
+#: js/trash.js:205
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
-msgstr[2] ""
+msgstr[2] "%n fișiere"
 
-#: lib/trash.php:819 lib/trash.php:821
+#: lib/trashbin.php:814 lib/trashbin.php:816
 msgid "restored"
 msgstr ""
 
@@ -73,11 +73,11 @@ msgstr ""
 msgid "Nothing in here. Your trash bin is empty!"
 msgstr ""
 
-#: templates/index.php:20 templates/index.php:22
+#: templates/index.php:24 templates/index.php:26
 msgid "Restore"
 msgstr ""
 
-#: templates/index.php:30 templates/index.php:31
+#: templates/index.php:34 templates/index.php:35
 msgid "Delete"
 msgstr "Șterge"
 
diff --git a/l10n/ro/lib.po b/l10n/ro/lib.po
index eae9302c75..8f288b515e 100644
--- a/l10n/ro/lib.po
+++ b/l10n/ro/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-22 12:56-0400\n"
+"PO-Revision-Date: 2013-09-21 20:00+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
 "MIME-Version: 1.0\n"
@@ -60,11 +60,11 @@ msgstr ""
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Tip fișier necunoscut"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Imagine invalidă"
 
 #: defaults.php:35
 msgid "web services under your control"
@@ -165,15 +165,15 @@ msgstr "Eroare la autentificare"
 msgid "Token expired. Please reload page."
 msgstr "Token expirat. Te rugăm să reîncarci pagina."
 
-#: search/provider/file.php:17 search/provider/file.php:35
+#: search/provider/file.php:18 search/provider/file.php:36
 msgid "Files"
 msgstr "Fișiere"
 
-#: search/provider/file.php:26 search/provider/file.php:33
+#: search/provider/file.php:27 search/provider/file.php:34
 msgid "Text"
 msgstr "Text"
 
-#: search/provider/file.php:29
+#: search/provider/file.php:30
 msgid "Images"
 msgstr "Imagini"
 
@@ -286,14 +286,14 @@ msgid "%n minute ago"
 msgid_plural "%n minutes ago"
 msgstr[0] ""
 msgstr[1] ""
-msgstr[2] ""
+msgstr[2] "acum %n minute"
 
 #: template/functions.php:98
 msgid "%n hour ago"
 msgid_plural "%n hours ago"
 msgstr[0] ""
 msgstr[1] ""
-msgstr[2] ""
+msgstr[2] "acum %n ore"
 
 #: template/functions.php:99
 msgid "today"
@@ -308,7 +308,7 @@ msgid "%n day go"
 msgid_plural "%n days ago"
 msgstr[0] ""
 msgstr[1] ""
-msgstr[2] ""
+msgstr[2] "acum %n zile"
 
 #: template/functions.php:102
 msgid "last month"
diff --git a/l10n/ro/settings.po b/l10n/ro/settings.po
index 858e3cb2a1..6f79f4b1e0 100644
--- a/l10n/ro/settings.po
+++ b/l10n/ro/settings.po
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# corneliu.e <corneliueva@yahoo.com>, 2013
 # sergiu_sechel <sergiu.sechel@gmail.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:45-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:56-0400\n"
+"PO-Revision-Date: 2013-09-21 20:00+0000\n"
+"Last-Translator: corneliu.e <corneliueva@yahoo.com>\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"
@@ -49,7 +50,7 @@ msgstr "E-mail salvat"
 
 #: ajax/lostpassword.php:14
 msgid "Invalid email"
-msgstr "E-mail nevalid"
+msgstr "E-mail invalid"
 
 #: ajax/removegroup.php:13
 msgid "Unable to delete group"
@@ -87,7 +88,7 @@ msgstr "Aplicaţia nu s-a putut actualiza."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Parolă greșită"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
@@ -112,7 +113,7 @@ msgstr ""
 
 #: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Imposibil de schimbat parola"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
@@ -318,7 +319,7 @@ msgstr "Permite utilizatorilor să partajeze fișiere în mod public prin legăt
 
 #: templates/admin.php:143
 msgid "Allow public uploads"
-msgstr ""
+msgstr "Permite încărcări publice"
 
 #: templates/admin.php:144
 msgid ""
@@ -490,7 +491,7 @@ msgstr "Completează o adresă de mail pentru a-ți putea recupera parola"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Imagine de profil"
 
 #: templates/personal.php:90
 msgid "Upload new"
@@ -502,7 +503,7 @@ msgstr ""
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Înlătură imagine"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
@@ -514,7 +515,7 @@ msgstr ""
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Alege drept imagine de profil"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
@@ -591,11 +592,11 @@ msgstr "Stocare"
 
 #: templates/users.php:108
 msgid "change display name"
-msgstr ""
+msgstr "schimbă numele afișat"
 
 #: templates/users.php:112
 msgid "set new password"
-msgstr ""
+msgstr "setează parolă nouă"
 
 #: templates/users.php:143
 msgid "Default"
diff --git a/l10n/ru/core.po b/l10n/ru/core.po
index 6570bde063..f5720110be 100644
--- a/l10n/ru/core.po
+++ b/l10n/ru/core.po
@@ -3,9 +3,11 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Alex <atrigub@gmail.com>, 2013
 # alfsoft <alfsoft@gmail.com>, 2013
 # lord93 <lordakryl@gmail.com>, 2013
 # foool <andrglad@mail.ru>, 2013
+# jekader <jekader@gmail.com>, 2013
 # eurekafag <rkfg@rkfg.me>, 2013
 # sk.avenger <sk.avenger@adygnet.ru>, 2013
 # Victor Bravo <>, 2013
@@ -16,9 +18,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-22 12:00+0000\n"
+"Last-Translator: jekader <jekader@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"
@@ -37,11 +39,11 @@ msgstr "группа"
 
 #: ajax/update.php:11
 msgid "Turned on maintenance mode"
-msgstr ""
+msgstr "Режим отладки включён"
 
 #: ajax/update.php:14
 msgid "Turned off maintenance mode"
-msgstr ""
+msgstr "Режим отладки отключён"
 
 #: ajax/update.php:17
 msgid "Updated database"
@@ -58,7 +60,7 @@ msgstr "Обновлен файловый кэш"
 #: ajax/update.php:26
 #, php-format
 msgid "... %d%% done ..."
-msgstr ""
+msgstr "... %d%% завершено ..."
 
 #: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
 msgid "Category type not provided."
@@ -101,7 +103,7 @@ msgstr "Ошибка удаления %s из избранного"
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "Не указано изображение или файл"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
@@ -113,11 +115,11 @@ msgstr "Изображение повреждено"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "Временная картинка профиля недоступна, повторите попытку"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "Не указана информация о кадрировании"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -261,7 +263,7 @@ msgstr "Выбрать"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "Ошибка при загрузке шаблона выбора файлов: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -277,48 +279,48 @@ msgstr "Ок"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr ""
+msgstr "Ошибка загрузки шаблона сообщений: {error}"
 
 #: js/oc-dialogs.js:347
 msgid "{count} file conflict"
 msgid_plural "{count} file conflicts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "{count} конфликт в файлах"
+msgstr[1] "{count} конфликта в файлах"
+msgstr[2] "{count} конфликтов в файлах"
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "Один конфликт в файлах"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
-msgstr ""
+msgstr "Какие файлы вы хотите сохранить?"
 
 #: js/oc-dialogs.js:368
 msgid ""
 "If you select both versions, the copied file will have a number added to its"
 " name."
-msgstr ""
+msgstr "При выборе обоих версий,  к названию копируемого файла будет добавлена цифра"
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Отменить"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Продолжить"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr ""
+msgstr "(выбраны все)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
-msgstr ""
+msgstr "({count} выбрано)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
-msgstr ""
+msgstr "Ошибка при загрузке шаблона существующего файла"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/ru/files.po b/l10n/ru/files.po
index bb956fc01c..114807f530 100644
--- a/l10n/ru/files.po
+++ b/l10n/ru/files.po
@@ -4,6 +4,7 @@
 # 
 # Translators:
 # lord93 <lordakryl@gmail.com>, 2013
+# jekader <jekader@gmail.com>, 2013
 # eurekafag <rkfg@rkfg.me>, 2013
 # Victor Bravo <>, 2013
 # navigator666 <yuriy.malyovaniy@gmail.com>, 2013
@@ -13,9 +14,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:51-0400\n"
+"PO-Revision-Date: 2013-09-21 12:30+0000\n"
+"Last-Translator: jekader <jekader@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"
@@ -82,23 +83,23 @@ msgstr "Недостаточно доступного места в хранил
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr ""
+msgstr "Загрузка не удалась. Невозможно получить информацию о файле"
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr ""
+msgstr "Загрузка не удалась. Невозможно найти загруженный файл"
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Неправильный каталог."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Файлы"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Невозможно загрузить файл  {filename} так как он является директорией либо имеет размер 0 байт"
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -110,7 +111,7 @@ msgstr "Загрузка отменена."
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "Не получен ответ от сервера"
 
 #: js/file-upload.js:446
 msgid ""
@@ -230,7 +231,7 @@ msgstr "Загрузка началась. Это может потребова
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Ошибка при перемещении файла"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/ru/lib.po b/l10n/ru/lib.po
index 0312034544..35f3070840 100644
--- a/l10n/ru/lib.po
+++ b/l10n/ru/lib.po
@@ -4,6 +4,7 @@
 # 
 # Translators:
 # Alexander Shashkevych <alex@stunpix.com>, 2013
+# jekader <jekader@gmail.com>, 2013
 # eurekafag <rkfg@rkfg.me>, 2013
 # sk.avenger <sk.avenger@adygnet.ru>, 2013
 # navigator666 <yuriy.malyovaniy@gmail.com>, 2013
@@ -12,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:45-0400\n"
-"PO-Revision-Date: 2013-09-20 12:50+0000\n"
-"Last-Translator: sk.avenger <sk.avenger@adygnet.ru>\n"
+"POT-Creation-Date: 2013-09-22 12:56-0400\n"
+"PO-Revision-Date: 2013-09-21 11:50+0000\n"
+"Last-Translator: jekader <jekader@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"
@@ -60,7 +61,7 @@ msgstr "Не смог обновить \"%s\"."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "Пользовательские картинки профиля ещё не поддерживают шифрование"
 
 #: avatar.php:64
 msgid "Unknown filetype"
@@ -140,13 +141,13 @@ msgstr "Приложение невозможно установить. Не с
 msgid ""
 "App can't be installed because it contains the <shipped>true</shipped> tag "
 "which is not allowed for non shipped apps"
-msgstr ""
+msgstr "Приложение невозможно установить. Оно содержит параметр <shipped>true</shipped> который не допустим для приложений, не входящих в поставку."
 
 #: installer.php:152
 msgid ""
 "App can't be installed because the version in info.xml/version is not the "
 "same as the version reported from the app store"
-msgstr ""
+msgstr "Приложение невозможно установить. Версия в info.xml/version не совпадает с версией заявленной в магазине приложений"
 
 #: installer.php:162
 msgid "App directory already exists"
@@ -155,7 +156,7 @@ msgstr "Папка приложения уже существует"
 #: installer.php:175
 #, php-format
 msgid "Can't create app folder. Please fix permissions. %s"
-msgstr ""
+msgstr "Не удалось создать директорию. Исправьте права доступа. %s"
 
 #: json.php:28
 msgid "Application is not enabled"
diff --git a/l10n/ru/settings.po b/l10n/ru/settings.po
index e70eab1bd4..94e073154d 100644
--- a/l10n/ru/settings.po
+++ b/l10n/ru/settings.po
@@ -7,6 +7,7 @@
 # Alexander Shashkevych <alex@stunpix.com>, 2013
 # alfsoft <alfsoft@gmail.com>, 2013
 # lord93 <lordakryl@gmail.com>, 2013
+# jekader <jekader@gmail.com>, 2013
 # eurekafag <rkfg@rkfg.me>, 2013
 # navigator666 <yuriy.malyovaniy@gmail.com>, 2013
 # hackproof <hackproof.ai@gmail.com>, 2013
@@ -15,9 +16,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:45-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-22 12:56-0400\n"
+"PO-Revision-Date: 2013-09-21 11:20+0000\n"
+"Last-Translator: jekader <jekader@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"
@@ -98,13 +99,13 @@ msgstr "Неправильный пароль"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "Пользователь не задан"
 
 #: changepassword/controller.php:74
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Пожалуйста введите администраторский пароль восстановления, иначе все пользовательские данные будут утеряны"
 
 #: changepassword/controller.php:79
 msgid ""
@@ -115,7 +116,7 @@ msgstr "Неправильный пароль восстановления. Пр
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
+msgstr "Используемый механизм не поддерживает смену паролей, но пользовательский ключ шифрования был успешно обновлён"
 
 #: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
diff --git a/l10n/ru/user_ldap.po b/l10n/ru/user_ldap.po
index a454bfc58e..68e53bc41e 100644
--- a/l10n/ru/user_ldap.po
+++ b/l10n/ru/user_ldap.po
@@ -6,14 +6,15 @@
 # Alexander Shashkevych <alex@stunpix.com>, 2013
 # Fenuks <fenuksuh@ya.ru>, 2013
 # alfsoft <alfsoft@gmail.com>, 2013
+# jekader <jekader@gmail.com>, 2013
 # navigator666 <yuriy.malyovaniy@gmail.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 08:20+0000\n"
-"Last-Translator: navigator666 <yuriy.malyovaniy@gmail.com>\n"
+"POT-Creation-Date: 2013-09-22 12:54-0400\n"
+"PO-Revision-Date: 2013-09-21 11:40+0000\n"
+"Last-Translator: jekader <jekader@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"
@@ -159,7 +160,7 @@ msgstr "Фильтр входа пользователей"
 msgid ""
 "Defines the filter to apply, when login is attempted. %%uid replaces the "
 "username in the login action. Example: \"uid=%%uid\""
-msgstr ""
+msgstr "Определяет фильтр для применения при попытке входа. %%uid заменяет имя пользователя при входе в систему. Например: \"uid=%%uid\""
 
 #: templates/settings.php:55
 msgid "User List Filter"
@@ -169,7 +170,7 @@ msgstr "Фильтр списка пользователей"
 msgid ""
 "Defines the filter to apply, when retrieving users (no placeholders). "
 "Example: \"objectClass=person\""
-msgstr ""
+msgstr "Определяет фильтр, использующийся при получении пользователей (без подмены переменных). Например: \"objectClass=person\""
 
 #: templates/settings.php:59
 msgid "Group Filter"
@@ -179,7 +180,7 @@ msgstr "Фильтр группы"
 msgid ""
 "Defines the filter to apply, when retrieving groups (no placeholders). "
 "Example: \"objectClass=posixGroup\""
-msgstr ""
+msgstr "Определяет фильтр, использующийся при получении групп (без подмены переменных). Например: \"objectClass=posixGroup\""
 
 #: templates/settings.php:66
 msgid "Connection Settings"
@@ -240,7 +241,7 @@ msgstr "Отключить проверку сертификата SSL."
 msgid ""
 "Not recommended, use it for testing only! If connection only works with this"
 " option, import the LDAP server's SSL certificate in your %s server."
-msgstr ""
+msgstr "Не рекомендуется, используйте только в режиме тестирования! Если соединение работает только с этой опцией, импортируйте на ваш %s сервер сертификат SSL сервера LDAP."
 
 #: templates/settings.php:76
 msgid "Cache Time-To-Live"
@@ -350,7 +351,7 @@ msgid ""
 "behavior as before ownCloud 5 enter the user display name attribute in the "
 "following field. Leave it empty for default behavior. Changes will have "
 "effect only on newly mapped (added) LDAP users."
-msgstr ""
+msgstr "По-умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Таким образом имя пользователя становится уникальным и не требует конвертации символов. Внутреннее имя пользователя может состоять только из следующих символов: [ a-zA-Z0-9_.@- ]. Остальные символы замещаются соответствиями из таблицы ASCII или же просто пропускаются. При совпадении к имени будет добавлено число. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Также оно является именем по-умолчанию для папки пользователя в ownCloud. Оно также портом для удаленных ссылок, к примеру, для всех сервисов *DAV. С помощию данной настройки можно изменить поведение по-умолчанию. Чтобы достичь поведения, как было настроено до изменения, ownCloud 5 выводит атрибут имени пользователя в этом поле. Оставьте его пустым для режима по-умолчанию. Изменения будут иметь эффект только для новых подключенных (добавленных) пользователей LDAP."
 
 #: templates/settings.php:100
 msgid "Internal Username Attribute:"
@@ -369,7 +370,7 @@ msgid ""
 "You must make sure that the attribute of your choice can be fetched for both"
 " users and groups and it is unique. Leave it empty for default behavior. "
 "Changes will have effect only on newly mapped (added) LDAP users and groups."
-msgstr ""
+msgstr "По-умолчанию, ownCloud определяет атрибут UUID автоматически. Этот атрибут используется для того, чтобы достоверно индентифицировать пользователей и группы LDAP. Также, на основании атрибута UUID создается внутреннее имя пользователя, если выше не указано иначе. Вы можете переопределить эту настройку и указать свой атрибут по выбору. Вы должны удостовериться, что выбранный вами атрибут может быть выбран для пользователей и групп, а также то, что он уникальный. Оставьте поле пустым для поведения по-умолчанию. Изменения вступят в силу только для новых подключенных (добавленных) пользователей и групп LDAP."
 
 #: templates/settings.php:103
 msgid "UUID Attribute:"
@@ -391,7 +392,7 @@ msgid ""
 " is not configuration sensitive, it affects all LDAP configurations! Never "
 "clear the mappings in a production environment, only in a testing or "
 "experimental stage."
-msgstr ""
+msgstr "ownCloud использует имена пользователей для хранения и назначения метаданных. Для точной идентификации и распознавания пользователей, каждый пользователь LDAP будет иметь свое внутреннее имя пользователя. Это требует привязки имени пользователя ownCloud к пользователю LDAP. При создании имя пользователя назначается идентификатору UUID пользователя LDAP. Помимо этого кешируется доменное имя (DN) для уменьшения числа обращений к LDAP, однако оно не используется для идентификации. Если доменное имя было изменено, об этом станет известно ownCloud. Внутреннее имя ownCloud используется повсеместно в ownCloud. После сброса привязок в базе могут сохраниться остатки старой информации. Сброс привязок не привязан к конфигурации, он повлияет на все LDAP подключения! Ни в коем случае не рекомендуется сбрасывать привязки если система уже находится в эксплуатации, только на этапе тестирования."
 
 #: templates/settings.php:106
 msgid "Clear Username-LDAP User Mapping"
diff --git a/l10n/si_LK/core.po b/l10n/si_LK/core.po
index 0bd8e5d646..e0d22e9b2b 100644
--- a/l10n/si_LK/core.po
+++ b/l10n/si_LK/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -288,7 +288,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "එපා"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/sk_SK/core.po b/l10n/sk_SK/core.po
index 22b868c88e..7c9758b4cc 100644
--- a/l10n/sk_SK/core.po
+++ b/l10n/sk_SK/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
 "MIME-Version: 1.0\n"
@@ -295,7 +295,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Zrušiť"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/sl/core.po b/l10n/sl/core.po
index d67d119a51..57c093c4ee 100644
--- a/l10n/sl/core.po
+++ b/l10n/sl/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
 "MIME-Version: 1.0\n"
@@ -300,7 +300,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Prekliči"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/sq/core.po b/l10n/sq/core.po
index 249f4fdcad..c2395b2d0b 100644
--- a/l10n/sq/core.po
+++ b/l10n/sq/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Albanian (http://www.transifex.com/projects/p/owncloud/language/sq/)\n"
 "MIME-Version: 1.0\n"
@@ -290,7 +290,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Anulo"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/sr/core.po b/l10n/sr/core.po
index 6c29c2d9de..b0063f1a94 100644
--- a/l10n/sr/core.po
+++ b/l10n/sr/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
 "MIME-Version: 1.0\n"
@@ -293,7 +293,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Откажи"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/sr@latin/core.po b/l10n/sr@latin/core.po
index 6fc014eedf..da5af6328b 100644
--- a/l10n/sr@latin/core.po
+++ b/l10n/sr@latin/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
 "MIME-Version: 1.0\n"
@@ -294,7 +294,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Otkaži"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/sv/core.po b/l10n/sv/core.po
index 84b71673c3..6495949816 100644
--- a/l10n/sv/core.po
+++ b/l10n/sv/core.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
 "MIME-Version: 1.0\n"
@@ -292,7 +292,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Avbryt"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/ta_LK/core.po b/l10n/ta_LK/core.po
index 511b0ca113..85ae869a75 100644
--- a/l10n/ta_LK/core.po
+++ b/l10n/ta_LK/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -288,7 +288,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "இரத்து செய்க"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/te/core.po b/l10n/te/core.po
index 807fd91457..fa997fc7fc 100644
--- a/l10n/te/core.po
+++ b/l10n/te/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Telugu (http://www.transifex.com/projects/p/owncloud/language/te/)\n"
 "MIME-Version: 1.0\n"
@@ -288,7 +288,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "రద్దుచేయి"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index 33882c8999..e3ee79caef 100644
--- a/l10n/templates/core.pot
+++ b/l10n/templates/core.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index 93b709990c..6dd2e8281c 100644
--- a/l10n/templates/files.pot
+++ b/l10n/templates/files.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"POT-Creation-Date: 2013-09-22 12:51-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -87,7 +87,7 @@ msgstr ""
 msgid "Invalid directory."
 msgstr ""
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr ""
 
diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot
index 30de1ff6de..17a33f8792 100644
--- a/l10n/templates/files_encryption.pot
+++ b/l10n/templates/files_encryption.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"POT-Creation-Date: 2013-09-22 12:51-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot
index b5ecc6f796..5d1b69c53a 100644
--- a/l10n/templates/files_external.pot
+++ b/l10n/templates/files_external.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"POT-Creation-Date: 2013-09-22 12:54-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot
index 7524db3041..bc0fb489f7 100644
--- a/l10n/templates/files_sharing.pot
+++ b/l10n/templates/files_sharing.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"POT-Creation-Date: 2013-09-22 12:54-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot
index cd6766aee4..c0b82eeb69 100644
--- a/l10n/templates/files_trashbin.pot
+++ b/l10n/templates/files_trashbin.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"POT-Creation-Date: 2013-09-22 12:54-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -64,7 +64,7 @@ msgid_plural "%n files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: lib/trash.php:814 lib/trash.php:816
+#: lib/trashbin.php:814 lib/trashbin.php:816
 msgid "restored"
 msgstr ""
 
diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot
index 1735320391..42221b0028 100644
--- a/l10n/templates/files_versions.pot
+++ b/l10n/templates/files_versions.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"POT-Creation-Date: 2013-09-22 12:54-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
index 2202934fcd..15b4f1c6d0 100644
--- a/l10n/templates/lib.pot
+++ b/l10n/templates/lib.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"POT-Creation-Date: 2013-09-22 12:56-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index 034369dedd..4602bc52d6 100644
--- a/l10n/templates/settings.pot
+++ b/l10n/templates/settings.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-20 10:45-0400\n"
+"POT-Creation-Date: 2013-09-22 12:56-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot
index 1f0ca9c4ef..c27848c366 100644
--- a/l10n/templates/user_ldap.pot
+++ b/l10n/templates/user_ldap.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"POT-Creation-Date: 2013-09-22 12:54-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot
index 9ea999ee23..e23c0a1dc5 100644
--- a/l10n/templates/user_webdavauth.pot
+++ b/l10n/templates/user_webdavauth.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
+"POT-Creation-Date: 2013-09-22 12:54-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/th_TH/core.po b/l10n/th_TH/core.po
index db30ee027e..8700d149b0 100644
--- a/l10n/th_TH/core.po
+++ b/l10n/th_TH/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
 "MIME-Version: 1.0\n"
@@ -283,7 +283,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "ยกเลิก"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/tr/core.po b/l10n/tr/core.po
index 3c751e4cd3..286f827c66 100644
--- a/l10n/tr/core.po
+++ b/l10n/tr/core.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
 "MIME-Version: 1.0\n"
@@ -291,7 +291,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "İptal"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/ug/core.po b/l10n/ug/core.po
index 6078bee4c5..2550b6d4ad 100644
--- a/l10n/ug/core.po
+++ b/l10n/ug/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Uighur <uqkun@outlook.com>\n"
 "MIME-Version: 1.0\n"
@@ -283,7 +283,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "ۋاز كەچ"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/uk/core.po b/l10n/uk/core.po
index b30a163377..2deda9a93d 100644
--- a/l10n/uk/core.po
+++ b/l10n/uk/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
 "MIME-Version: 1.0\n"
@@ -293,7 +293,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Відмінити"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/ur_PK/core.po b/l10n/ur_PK/core.po
index 4b4391115e..ab9aac58cf 100644
--- a/l10n/ur_PK/core.po
+++ b/l10n/ur_PK/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Urdu (Pakistan) (http://www.transifex.com/projects/p/owncloud/language/ur_PK/)\n"
 "MIME-Version: 1.0\n"
@@ -288,7 +288,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "منسوخ کریں"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/vi/core.po b/l10n/vi/core.po
index 6d9203adc4..d2f455e39e 100644
--- a/l10n/vi/core.po
+++ b/l10n/vi/core.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 "MIME-Version: 1.0\n"
@@ -284,7 +284,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "Hủy"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/zh_CN/core.po b/l10n/zh_CN/core.po
index 50a09f4c32..f321e4cfc4 100644
--- a/l10n/zh_CN/core.po
+++ b/l10n/zh_CN/core.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
 "MIME-Version: 1.0\n"
@@ -286,7 +286,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "取消"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/zh_HK/core.po b/l10n/zh_HK/core.po
index edcf03cc9d..b4aef3cc56 100644
--- a/l10n/zh_HK/core.po
+++ b/l10n/zh_HK/core.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
 "MIME-Version: 1.0\n"
@@ -283,7 +283,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "取消"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/l10n/zh_TW/core.po b/l10n/zh_TW/core.po
index 76b1ce04f5..4db9d316b8 100644
--- a/l10n/zh_TW/core.po
+++ b/l10n/zh_TW/core.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
+"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"PO-Revision-Date: 2013-09-20 15:01+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
 "MIME-Version: 1.0\n"
@@ -285,7 +285,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
-msgstr ""
+msgstr "取消"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
diff --git a/lib/l10n/ja_JP.php b/lib/l10n/ja_JP.php
index 746ef17c57..b9e6a0e692 100644
--- a/lib/l10n/ja_JP.php
+++ b/lib/l10n/ja_JP.php
@@ -8,6 +8,7 @@ $TRANSLATIONS = array(
 "Users" => "ユーザ",
 "Admin" => "管理",
 "Failed to upgrade \"%s\"." => "\"%s\" へのアップグレードに失敗しました。",
+"Custom profile pictures don't work with encryption yet" => "暗号無しでは利用不可なカスタムプロフィール画像",
 "Unknown filetype" => "不明なファイルタイプ",
 "Invalid image" => "無効な画像",
 "web services under your control" => "管理下のウェブサービス",
diff --git a/lib/l10n/ro.php b/lib/l10n/ro.php
index b338b34923..76dafcd03e 100644
--- a/lib/l10n/ro.php
+++ b/lib/l10n/ro.php
@@ -5,6 +5,8 @@ $TRANSLATIONS = array(
 "Settings" => "Setări",
 "Users" => "Utilizatori",
 "Admin" => "Admin",
+"Unknown filetype" => "Tip fișier necunoscut",
+"Invalid image" => "Imagine invalidă",
 "web services under your control" => "servicii web controlate de tine",
 "ZIP download is turned off." => "Descărcarea ZIP este dezactivată.",
 "Files need to be downloaded one by one." => "Fișierele trebuie descărcate unul câte unul.",
@@ -19,11 +21,11 @@ $TRANSLATIONS = array(
 "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Serverul de web nu este încă setat corespunzător pentru a permite sincronizarea fișierelor deoarece interfața WebDAV pare a fi întreruptă.",
 "Please double check the <a href='%s'>installation guides</a>." => "Vă rugăm să verificați <a href='%s'>ghiduri de instalare</a>.",
 "seconds ago" => "secunde în urmă",
-"_%n minute ago_::_%n minutes ago_" => array("","",""),
-"_%n hour ago_::_%n hours ago_" => array("","",""),
+"_%n minute ago_::_%n minutes ago_" => array("","","acum %n minute"),
+"_%n hour ago_::_%n hours ago_" => array("","","acum %n ore"),
 "today" => "astăzi",
 "yesterday" => "ieri",
-"_%n day go_::_%n days ago_" => array("","",""),
+"_%n day go_::_%n days ago_" => array("","","acum %n zile"),
 "last month" => "ultima lună",
 "_%n month ago_::_%n months ago_" => array("","",""),
 "last year" => "ultimul an",
diff --git a/lib/l10n/ru.php b/lib/l10n/ru.php
index 0fe88efef7..501065f8b5 100644
--- a/lib/l10n/ru.php
+++ b/lib/l10n/ru.php
@@ -8,6 +8,7 @@ $TRANSLATIONS = array(
 "Users" => "Пользователи",
 "Admin" => "Admin",
 "Failed to upgrade \"%s\"." => "Не смог обновить \"%s\".",
+"Custom profile pictures don't work with encryption yet" => "Пользовательские картинки профиля ещё не поддерживают шифрование",
 "Unknown filetype" => "Неизвестный тип файла",
 "Invalid image" => "Изображение повреждено",
 "web services under your control" => "веб-сервисы под вашим управлением",
@@ -25,7 +26,10 @@ $TRANSLATIONS = array(
 "App does not provide an info.xml file" => "Приложение не имеет файла info.xml",
 "App can't be installed because of not allowed code in the App" => "Приложение невозможно установить. В нем содержится запрещенный код.",
 "App can't be installed because it is not compatible with this version of ownCloud" => "Приложение невозможно установить. Не совместимо с текущей версией ownCloud.",
+"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" => "Приложение невозможно установить. Оно содержит параметр <shipped>true</shipped> который не допустим для приложений, не входящих в поставку.",
+"App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" => "Приложение невозможно установить. Версия в info.xml/version не совпадает с версией заявленной в магазине приложений",
 "App directory already exists" => "Папка приложения уже существует",
+"Can't create app folder. Please fix permissions. %s" => "Не удалось создать директорию. Исправьте права доступа. %s",
 "Application is not enabled" => "Приложение не разрешено",
 "Authentication error" => "Ошибка аутентификации",
 "Token expired. Please reload page." => "Токен просрочен. Перезагрузите страницу.",
diff --git a/settings/l10n/ca.php b/settings/l10n/ca.php
index c442fb84b9..c4c61c0354 100644
--- a/settings/l10n/ca.php
+++ b/settings/l10n/ca.php
@@ -16,6 +16,12 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "No es pot afegir l'usuari al grup %s",
 "Unable to remove user from group %s" => "No es pot eliminar l'usuari del grup %s",
 "Couldn't update app." => "No s'ha pogut actualitzar l'aplicació.",
+"Wrong password" => "Contrasenya incorrecta",
+"No user supplied" => "No heu proporcionat cap usuari",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Sisplau, proporcioneu una contrasenya de recuperació d'administrador, altrament totes les dades d'usuari es perdran",
+"Wrong admin recovery password. Please check the password and try again." => "La contrasenya de recuperació d'administrador és incorrecta. Comproveu-la i torneu-ho a intentar.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "El dorsal no permet canviar la contrasenya, però la clau d'encripació d'usuaris s'ha actualitzat correctament.",
+"Unable to change password" => "No es pot canviar la contrasenya",
 "Update to {appversion}" => "Actualitza a {appversion}",
 "Disable" => "Desactiva",
 "Enable" => "Habilita",
diff --git a/settings/l10n/ro.php b/settings/l10n/ro.php
index b0735af4aa..c3483f83de 100644
--- a/settings/l10n/ro.php
+++ b/settings/l10n/ro.php
@@ -7,7 +7,7 @@ $TRANSLATIONS = array(
 "Group already exists" => "Grupul există deja",
 "Unable to add group" => "Nu s-a putut adăuga grupul",
 "Email saved" => "E-mail salvat",
-"Invalid email" => "E-mail nevalid",
+"Invalid email" => "E-mail invalid",
 "Unable to delete group" => "Nu s-a putut șterge grupul",
 "Unable to delete user" => "Nu s-a putut șterge utilizatorul",
 "Language changed" => "Limba a fost schimbată",
@@ -16,6 +16,8 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Nu s-a putut adăuga utilizatorul la grupul %s",
 "Unable to remove user from group %s" => "Nu s-a putut elimina utilizatorul din grupul %s",
 "Couldn't update app." => "Aplicaţia nu s-a putut actualiza.",
+"Wrong password" => "Parolă greșită",
+"Unable to change password" => "Imposibil de schimbat parola",
 "Update to {appversion}" => "Actualizat la {versiuneaaplicaţiei}",
 "Disable" => "Dezactivați",
 "Enable" => "Activare",
@@ -51,6 +53,7 @@ $TRANSLATIONS = array(
 "Allow apps to use the Share API" => "Permite aplicațiilor să folosească API-ul de partajare",
 "Allow links" => "Pemite legături",
 "Allow users to share items to the public with links" => "Permite utilizatorilor să partajeze fișiere în mod public prin legături",
+"Allow public uploads" => "Permite încărcări publice",
 "Allow resharing" => "Permite repartajarea",
 "Allow users to share items shared with them again" => "Permite utilizatorilor să repartajeze fișiere partajate cu ei",
 "Allow users to share with anyone" => "Permite utilizatorilor să partajeze cu oricine",
@@ -84,6 +87,9 @@ $TRANSLATIONS = array(
 "Email" => "Email",
 "Your email address" => "Adresa ta de email",
 "Fill in an email address to enable password recovery" => "Completează o adresă de mail pentru a-ți putea recupera parola",
+"Profile picture" => "Imagine de profil",
+"Remove image" => "Înlătură imagine",
+"Choose as profile image" => "Alege drept imagine de profil",
 "Language" => "Limba",
 "Help translate" => "Ajută la traducere",
 "WebDAV" => "WebDAV",
@@ -94,6 +100,8 @@ $TRANSLATIONS = array(
 "Other" => "Altele",
 "Username" => "Nume utilizator",
 "Storage" => "Stocare",
+"change display name" => "schimbă numele afișat",
+"set new password" => "setează parolă nouă",
 "Default" => "Implicită"
 );
 $PLURAL_FORMS = "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));";
diff --git a/settings/l10n/ru.php b/settings/l10n/ru.php
index 7bcceb8b90..1bce6332c7 100644
--- a/settings/l10n/ru.php
+++ b/settings/l10n/ru.php
@@ -17,7 +17,10 @@ $TRANSLATIONS = array(
 "Unable to remove user from group %s" => "Невозможно удалить пользователя из группы %s",
 "Couldn't update app." => "Невозможно обновить приложение",
 "Wrong password" => "Неправильный пароль",
+"No user supplied" => "Пользователь не задан",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Пожалуйста введите администраторский пароль восстановления, иначе все пользовательские данные будут утеряны",
 "Wrong admin recovery password. Please check the password and try again." => "Неправильный пароль восстановления. Проверьте пароль и попробуйте еще раз.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Используемый механизм не поддерживает смену паролей, но пользовательский ключ шифрования был успешно обновлён",
 "Unable to change password" => "Невозможно изменить пароль",
 "Update to {appversion}" => "Обновить до {версия приложения}",
 "Disable" => "Выключить",
-- 
GitLab


From edd38e59481a98c56645a43ca6c9048fe1458d20 Mon Sep 17 00:00:00 2001
From: Georg Ehrke <developer@georgehrke.com>
Date: Mon, 23 Sep 2013 10:26:46 +0200
Subject: [PATCH 162/248] fix previews in shared folders

---
 apps/files/lib/helper.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php
index 08c807d7f7..1d431df04f 100644
--- a/apps/files/lib/helper.php
+++ b/apps/files/lib/helper.php
@@ -39,8 +39,8 @@ class Helper
 		}
 
 		if($file['isPreviewAvailable']) {
-			$relativePath = substr($file['path'], 6);
-			return \OC_Helper::previewIcon($relativePath);
+			$pathForPreview = $file['directory'] . '/' . $file['name'];
+			return \OC_Helper::previewIcon($pathForPreview);
 		}
 		return \OC_Helper::mimetypeIcon($file['mimetype']);
 	}
-- 
GitLab


From 8a1618bce56a32e311626cd9f0e322dd7cf330c4 Mon Sep 17 00:00:00 2001
From: Georg Ehrke <developer@georgehrke.com>
Date: Mon, 23 Sep 2013 12:27:05 +0200
Subject: [PATCH 163/248] implement previews for public upload

---
 apps/files/js/files.js | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 8ccb448abf..ec688eaf63 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -644,7 +644,11 @@ function lazyLoadPreview(path, mime, ready, width, height) {
 		if ( ! height ) {
 			height = $('#filestable').data('preview-y');
 		}
-		var previewURL = OC.Router.generate('core_ajax_preview', {file: encodeURIComponent(path), x:width, y:height});
+		if( $('#publicUploadButtonMock').length ) {
+			var previewURL = OC.Router.generate('core_ajax_public_preview', {file: encodeURIComponent(path), x:width, y:height, t:$('#dirToken').val()});
+		} else {
+			var previewURL = OC.Router.generate('core_ajax_preview', {file: encodeURIComponent(path), x:width, y:height});
+		}
 		$.get(previewURL, function() {
 			previewURL = previewURL.replace('(', '%28');
 			previewURL = previewURL.replace(')', '%29');
-- 
GitLab


From d9a36ee82ec3bffb83515248b69c287f5fd0170f Mon Sep 17 00:00:00 2001
From: Andreas Fischer <bantu@owncloud.com>
Date: Mon, 23 Sep 2013 12:45:02 +0200
Subject: [PATCH 164/248] Move setUp() and tearDown() up in
 tests/lib/files/cache/scanner.php.

---
 tests/lib/files/cache/scanner.php | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php
index 6956e7aa94..3f3a045377 100644
--- a/tests/lib/files/cache/scanner.php
+++ b/tests/lib/files/cache/scanner.php
@@ -24,6 +24,21 @@ class Scanner extends \PHPUnit_Framework_TestCase {
 	 */
 	private $cache;
 
+	function setUp() {
+		$this->storage = new \OC\Files\Storage\Temporary(array());
+		$this->scanner = new \OC\Files\Cache\Scanner($this->storage);
+		$this->cache = new \OC\Files\Cache\Cache($this->storage);
+	}
+
+	function tearDown() {
+		if ($this->cache) {
+			$ids = $this->cache->getAll();
+			$permissionsCache = $this->storage->getPermissionsCache();
+			$permissionsCache->removeMultiple($ids, \OC_User::getUser());
+			$this->cache->clear();
+		}
+	}
+
 	function testFile() {
 		$data = "dummy file data\n";
 		$this->storage->file_put_contents('foo.txt', $data);
@@ -218,19 +233,4 @@ class Scanner extends \PHPUnit_Framework_TestCase {
 		$this->assertNotEquals($data1['etag'], $newData1['etag']);
 		$this->assertNotEquals($data2['etag'], $newData2['etag']);
 	}
-
-	function setUp() {
-		$this->storage = new \OC\Files\Storage\Temporary(array());
-		$this->scanner = new \OC\Files\Cache\Scanner($this->storage);
-		$this->cache = new \OC\Files\Cache\Cache($this->storage);
-	}
-
-	function tearDown() {
-		if ($this->cache) {
-			$ids = $this->cache->getAll();
-			$permissionsCache = $this->storage->getPermissionsCache();
-			$permissionsCache->removeMultiple($ids, \OC_User::getUser());
-			$this->cache->clear();
-		}
-	}
 }
-- 
GitLab


From 0b4de847a93357160dc4acb3de651a7ee08a10df Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Mon, 23 Sep 2013 13:27:43 +0200
Subject: [PATCH 165/248] Added more error checking in add()

---
 lib/tags.php | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/lib/tags.php b/lib/tags.php
index 2eaa603c1a..e2e1a83dd9 100644
--- a/lib/tags.php
+++ b/lib/tags.php
@@ -233,17 +233,25 @@ class Tags implements \OCP\ITags {
 			return false;
 		}
 		try {
-			\OCP\DB::insertIfNotExist(self::TAG_TABLE,
+			$result = \OCP\DB::insertIfNotExist(
+				self::TAG_TABLE,
 				array(
 					'uid' => $this->user,
 					'type' => $this->type,
 					'category' => $name,
-				));
-			} catch(\Exception $e) {
-				\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-					\OCP\Util::ERROR);
+				)
+			);
+			if (\OCP\DB::isError($result)) {
+				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
 				return false;
+			} elseif((int)$result === 0) {
+				\OCP\Util::writeLog('core', __METHOD__.', Tag already exists: ' . $name, \OCP\Util::DEBUG);
 			}
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+				\OCP\Util::ERROR);
+			return false;
+		}
 		$id = \OCP\DB::insertid(self::TAG_TABLE);
 		\OCP\Util::writeLog('core', __METHOD__.', id: ' . $id, \OCP\Util::DEBUG);
 		$this->tags[$id] = $name;
-- 
GitLab


From 93258e11701205b47b3775dbbb5f187a3a76266b Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Mon, 23 Sep 2013 13:29:21 +0200
Subject: [PATCH 166/248] Forgot to return false if add() didn't add anything.

---
 lib/tags.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/tags.php b/lib/tags.php
index e2e1a83dd9..955eb3cd36 100644
--- a/lib/tags.php
+++ b/lib/tags.php
@@ -246,6 +246,7 @@ class Tags implements \OCP\ITags {
 				return false;
 			} elseif((int)$result === 0) {
 				\OCP\Util::writeLog('core', __METHOD__.', Tag already exists: ' . $name, \OCP\Util::DEBUG);
+				return false;
 			}
 		} catch(\Exception $e) {
 			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-- 
GitLab


From 910a0338bb296e2e51d6c9d37d0483f8d05b1c5c Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Mon, 23 Sep 2013 15:52:06 +0200
Subject: [PATCH 167/248] Use fetchOne() instead of numRows() when doing a
 COUNT(*).

---
 lib/tags.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/tags.php b/lib/tags.php
index 955eb3cd36..ff9f35ebc9 100644
--- a/lib/tags.php
+++ b/lib/tags.php
@@ -119,7 +119,7 @@ class Tags implements \OCP\ITags {
 				\OCP\Util::writeLog('core', __METHOD__. ', DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
 				return false;
 			}
-			return ((int)$result->numRows() === 0);
+			return ((int)$result->fetchOne() === 0);
 		} catch(\Exception $e) {
 			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
 				\OCP\Util::ERROR);
-- 
GitLab


From d27416edf767219f77a828d22bb070345a179631 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Mon, 23 Sep 2013 15:52:50 +0200
Subject: [PATCH 168/248] Moar tests.

---
 tests/lib/tags.php | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/tests/lib/tags.php b/tests/lib/tags.php
index 92a96a1477..75db9f50f7 100644
--- a/tests/lib/tags.php
+++ b/tests/lib/tags.php
@@ -59,13 +59,14 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 
 		foreach($tags as $tag) {
 			$result = $tagMgr->add($tag);
+			$this->assertGreaterThan(0, $result, 'add() returned an ID <= 0');
 			$this->assertTrue((bool)$result);
 		}
 
 		$this->assertFalse($tagMgr->add('Family'));
 		$this->assertFalse($tagMgr->add('fAMILY'));
 
-		$this->assertEquals(4, count($tagMgr->getTags()));
+		$this->assertCount(4, $tagMgr->getTags(), 'Wrong number of added tags');
 	}
 
 	public function testAddMultiple() {
@@ -85,7 +86,7 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 			$this->assertTrue($tagMgr->hasTag($tag));
 		}
 
-		$this->assertEquals(4, count($tagMgr->getTags()));
+		$this->assertCount(4, $tagMgr->getTags(), 'Not all tags added');
 	}
 
 	public function testIsEmpty() {
@@ -94,7 +95,10 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 
 		$this->assertEquals(0, count($tagMgr->getTags()));
 		$this->assertTrue($tagMgr->isEmpty());
-		$this->assertNotEquals(false, $tagMgr->add('Tag'));
+
+		$result = $tagMgr->add('Tag');
+		$this->assertGreaterThan(0, $result, 'add() returned an ID <= 0');
+		$this->assertNotEquals(false, $result, 'add() returned false');
 		$this->assertFalse($tagMgr->isEmpty());
 	}
 
-- 
GitLab


From d7409547aa0c6fe23cb408e266a09392b4752a72 Mon Sep 17 00:00:00 2001
From: kondou <kondou@ts.unde.re>
Date: Mon, 23 Sep 2013 16:39:42 +0200
Subject: [PATCH 169/248] Fix not displaying "Upload something!" message

Fix #4940
---
 apps/files/templates/index.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php
index bd991c3fcb..96a8073898 100644
--- a/apps/files/templates/index.php
+++ b/apps/files/templates/index.php
@@ -47,7 +47,7 @@
 	<input type="hidden" name="permissions" value="<?php p($_['permissions']); ?>" id="permissions">
 </div>
 
-<div id="emptycontent" <?php if (!isset($_['files']) or !$_['isCreatable'] or count($_['files']) > 0 or !$_['ajaxLoad']):?>class="hidden"<?php endif; ?>><?php p($l->t('Nothing in here. Upload something!'))?></div>
+<div id="emptycontent" <?php if (!isset($_['files']) or !$_['isCreatable'] or count($_['files']) > 0 or $_['ajaxLoad']):?>class="hidden"<?php endif; ?>><?php p($l->t('Nothing in here. Upload something!'))?></div>
 
 <input type="hidden" id="disableSharing" data-status="<?php p($_['disableSharing']); ?>"></input>
 
-- 
GitLab


From e55f25b64df09a3ba6535274eaf738e82910e1f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Mon, 23 Sep 2013 22:04:37 +0200
Subject: [PATCH 170/248] handle error situation of rename proper

---
 lib/connector/sabre/directory.php | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php
index 3181a4b310..9e0fe5e64e 100644
--- a/lib/connector/sabre/directory.php
+++ b/lib/connector/sabre/directory.php
@@ -88,7 +88,12 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
 			}
 
 			// rename to correct path
-			\OC\Files\Filesystem::rename($partpath, $newPath);
+			$renameOkay = \OC\Files\Filesystem::rename($partpath, $newPath);
+			if (!$renameOkay) {
+				\OC_Log::write('webdav', '\OC\Files\Filesystem::rename() failed', \OC_Log::ERROR);
+				\OC\Files\Filesystem::unlink($partpath);
+				throw new Sabre_DAV_Exception();
+			}
 
 			// allow sync clients to send the mtime along in a header
 			$mtime = OC_Request::hasModificationTime();
-- 
GitLab


From 5ca181eb23de7d3436b22ba924788db62976a059 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Wed, 4 Sep 2013 08:16:27 +0200
Subject: [PATCH 171/248] More trimming

---
 lib/vcategories.php | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/lib/vcategories.php b/lib/vcategories.php
index 8403695835..a7e4c54be2 100644
--- a/lib/vcategories.php
+++ b/lib/vcategories.php
@@ -179,6 +179,7 @@ class OC_VCategories {
 		if(is_numeric($category)) {
 			$catid = $category;
 		} elseif(is_string($category)) {
+			$category = trim($category);
 			$catid = $this->array_searchi($category, $this->categories);
 		}
 		OCP\Util::writeLog('core', __METHOD__.', category: '.$catid.' '.$category, OCP\Util::DEBUG);
@@ -240,6 +241,7 @@ class OC_VCategories {
 		if(is_numeric($category)) {
 			$catid = $category;
 		} elseif(is_string($category)) {
+			$category = trim($category);
 			$catid = $this->array_searchi($category, $this->categories);
 		}
 		OCP\Util::writeLog('core', __METHOD__.', category: '.$catid.' '.$category, OCP\Util::DEBUG);
@@ -301,6 +303,7 @@ class OC_VCategories {
 	* @returns int the id of the added category or false if it already exists.
 	*/
 	public function add($name) {
+		$name = trim($name);
 		OCP\Util::writeLog('core', __METHOD__.', name: ' . $name, OCP\Util::DEBUG);
 		if($this->hasCategory($name)) {
 			OCP\Util::writeLog('core', __METHOD__.', name: ' . $name. ' exists already', OCP\Util::DEBUG);
@@ -331,6 +334,8 @@ class OC_VCategories {
 	* @returns bool
 	*/
 	public function rename($from, $to) {
+		$from = trim($from);
+		$to = trim($to);
 		$id = $this->array_searchi($from, $this->categories);
 		if($id === false) {
 			OCP\Util::writeLog('core', __METHOD__.', category: ' . $from. ' does not exist', OCP\Util::DEBUG);
@@ -656,6 +661,7 @@ class OC_VCategories {
 	public function addToCategory($objid, $category, $type = null) {
 		$type = is_null($type) ? $this->type : $type;
 		if(is_string($category) && !is_numeric($category)) {
+			$category = trim($category);
 			if(!$this->hasCategory($category)) {
 				$this->add($category, true);
 			}
@@ -688,9 +694,13 @@ class OC_VCategories {
 	*/
 	public function removeFromCategory($objid, $category, $type = null) {
 		$type = is_null($type) ? $this->type : $type;
-		$categoryid = (is_string($category) && !is_numeric($category))
-			? $this->array_searchi($category, $this->categories)
-			: $category;
+		if(is_string($category) && !is_numeric($category)) {
+			$category = trim($category);
+			$categoryid =  $this->array_searchi($category, $this->categories);
+		} else {
+			$categoryid = $category;
+		}
+
 		try {
 			$sql = 'DELETE FROM `' . self::RELATION_TABLE . '` '
 					. 'WHERE `objid` = ? AND `categoryid` = ? AND `type` = ?';
@@ -716,6 +726,8 @@ class OC_VCategories {
 			$names = array($names);
 		}
 
+		$names = array_map('trim', $names);
+
 		OC_Log::write('core', __METHOD__ . ', before: '
 			. print_r($this->categories, true), OC_Log::DEBUG);
 		foreach($names as $name) {
-- 
GitLab


From 45f73feb6967b878b2e39fc4413aca92f0dbaf9f Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Wed, 18 Sep 2013 00:37:00 +0200
Subject: [PATCH 172/248] OC_VCategories=>OC\Tags. Public interface + getter in
 server container

---
 lib/public/iservercontainer.php |   7 +
 lib/public/itags.php            | 173 +++++++
 lib/server.php                  |  16 +-
 lib/tags.php                    | 621 ++++++++++++++++++++++++
 lib/vcategories.php             | 833 --------------------------------
 tests/lib/tags.php              | 133 +++++
 tests/lib/vcategories.php       | 128 -----
 7 files changed, 948 insertions(+), 963 deletions(-)
 create mode 100644 lib/public/itags.php
 create mode 100644 lib/tags.php
 delete mode 100644 lib/vcategories.php
 create mode 100644 tests/lib/tags.php
 delete mode 100644 tests/lib/vcategories.php

diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index 4478a4e8a6..0df746a28e 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -55,6 +55,13 @@ interface IServerContainer {
 	 */
 	function getPreviewManager();
 
+	/**
+	 * Returns the tag manager which can get and set tags for different object types
+	 *
+	 * @return \OCP\ITags
+	 */
+	function getTagManager();
+
 	/**
 	 * Returns the root folder of ownCloud's data directory
 	 *
diff --git a/lib/public/itags.php b/lib/public/itags.php
new file mode 100644
index 0000000000..047d4f5f40
--- /dev/null
+++ b/lib/public/itags.php
@@ -0,0 +1,173 @@
+<?php
+/**
+* ownCloud
+*
+* @author Thomas Tanghus
+* @copyright 2013 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/>.
+*
+*/
+
+namespace OCP;
+
+// FIXME: Where should I put this? Or should it be implemented as a Listener?
+\OC_Hook::connect('OC_User', 'post_deleteUser', 'OC\Tags', 'post_deleteUser');
+
+/**
+ * Class for easily tagging objects by their id
+ *
+ * A tag can be e.g. 'Family', 'Work', 'Chore', 'Special Occation' or
+ * anything else that is either parsed from a vobject or that the user chooses
+ * to add.
+ * Tag names are not case-sensitive, but will be saved with the case they
+ * are entered in. If a user already has a tag 'family' for a type, and
+ * tries to add a tag named 'Family' it will be silently ignored.
+ */
+
+interface ITags {
+
+	/**
+	* Load tags from db.
+	*
+	* @param string $type The type identifier e.g. 'contact' or 'event'.
+	* @param array $defaultTags An array of default tags to be used if none are stored.
+	* @return \OCP\ITags
+	*/
+	public function loadTagsFor($type, $defaultTags=array());
+
+	/**
+	* Check if any tags are saved for this type and user.
+	*
+	* @return boolean.
+	*/
+	public function isEmpty();
+
+	/**
+	* Get the tags for a specific user.
+	*
+	* This returns an array with id/name maps:
+	* [
+	* 	['id' => 0, 'name' = 'First tag'],
+	* 	['id' => 1, 'name' = 'Second tag'],
+	* ]
+	*
+	* @returns array
+	*/
+	public function tags();
+
+	/**
+	* Get the a list if items tagged with $tag.
+	*
+	* Throws an exception if the tag could not be found.
+	*
+	* @param string|integer $tag Tag id or name.
+	* @return array An array of object ids or false on error.
+	*/
+	public function idsForTag($tag);
+
+	/**
+	* Checks whether a tag is already saved.
+	*
+	* @param string $name The name to check for.
+	* @return bool
+	*/
+	public function hasTag($name);
+
+	/**
+	* Add a new tag.
+	*
+	* @param string $name A string with a name of the tag
+	* @return int the id of the added tag or false if it already exists.
+	*/
+	public function add($name);
+
+	/**
+	* Rename tag.
+	*
+	* @param string $from The name of the existing tag
+	* @param string $to The new name of the tag.
+	* @return bool
+	*/
+	public function rename($from, $to);
+
+	/**
+	* Add a list of new tags.
+	*
+	* @param string[] $names A string with a name or an array of strings containing
+	* the name(s) of the to add.
+	* @param bool $sync When true, save the tags
+	* @param int|null $id int Optional object id to add to this|these tag(s)
+	* @return bool Returns false on error.
+	*/
+	public function addMulti($names, $sync=false, $id = null);
+
+	/**
+	* Delete tag/object relations from the db
+	*
+	* @param array $ids The ids of the objects
+	* @return boolean Returns false on error.
+	*/
+	public function purgeObjects(array $ids);
+
+	/**
+	* Get favorites for an object type
+	*
+	* @return array An array of object ids.
+	*/
+	public function getFavorites();
+
+	/**
+	* Add an object to favorites
+	*
+	* @param int $objid The id of the object
+	* @return boolean
+	*/
+	public function addToFavorites($objid);
+
+	/**
+	* Remove an object from favorites
+	*
+	* @param int $objid The id of the object
+	* @return boolean
+	*/
+	public function removeFromFavorites($objid);
+
+	/**
+	* Creates a tag/object relation.
+	*
+	* @param int $objid The id of the object
+	* @param int|string $tag The id or name of the tag
+	* @return boolean Returns false on database error.
+	*/
+	public function tagAs($objid, $tag);
+
+	/**
+	* Delete single tag/object relation from the db
+	*
+	* @param int $objid The id of the object
+	* @param int|string $tag The id or name of the tag
+	* @return boolean
+	*/
+	public function unTag($objid, $tag);
+
+	/**
+	* Delete tags from the
+	*
+	* @param string[] $names An array of tags to delete
+	* @return bool Returns false on error
+	*/
+	public function delete($names);
+
+}
\ No newline at end of file
diff --git a/lib/server.php b/lib/server.php
index 804af6b0ea..b09d380b0e 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -49,8 +49,11 @@ class Server extends SimpleContainer implements IServerContainer {
 		$this->registerService('PreviewManager', function($c) {
 			return new PreviewManager();
 		});
-		$this->registerService('RootFolder', function($c) {
-			// TODO: get user from container as well
+		$this->registerService('TagManager', function($c){
+			return new Tags();
+		});
+		$this->registerService('RootFolder', function($c){
+			// TODO: get user and user manager from container as well
 			$user = \OC_User::getUser();
 			/** @var $c SimpleContainer */
 			$userManager = $c->query('UserManager');
@@ -139,6 +142,15 @@ class Server extends SimpleContainer implements IServerContainer {
 		return $this->query('PreviewManager');
 	}
 
+	/**
+	 * Returns the tag manager which can get and set tags for different object types
+	 *
+	 * @return \OCP\ITags
+	 */
+	function getTagManager() {
+		return $this->query('TagManager');
+	}
+
 	/**
 	 * Returns the root folder of ownCloud's data directory
 	 *
diff --git a/lib/tags.php b/lib/tags.php
new file mode 100644
index 0000000000..4aafff8e1b
--- /dev/null
+++ b/lib/tags.php
@@ -0,0 +1,621 @@
+<?php
+/**
+* ownCloud
+*
+* @author Thomas Tanghus
+* @copyright 2012-2013 Thomas Tanghus <thomas@tanghus.net>
+* @copyright 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 for easily tagging objects by their id
+ *
+ * A tag can be e.g. 'Family', 'Work', 'Chore', 'Special Occation' or
+ * anything else that is either parsed from a vobject or that the user chooses
+ * to add.
+ * Tag names are not case-sensitive, but will be saved with the case they
+ * are entered in. If a user already has a tag 'family' for a type, and
+ * tries to add a tag named 'Family' it will be silently ignored.
+ */
+
+namespace OC;
+
+class Tags implements \OCP\ITags {
+
+	/**
+	 * Tags
+	 */
+	private $tags = array();
+
+	/**
+	 * Used for storing objectid/categoryname pairs while rescanning.
+	 */
+	private static $relations = array();
+
+	private $type = null;
+	private $user = null;
+
+	const TAG_TABLE = '*PREFIX*vcategory';
+	const RELATION_TABLE = '*PREFIX*vcategory_to_object';
+
+	const TAG_FAVORITE = '_$!<Favorite>!$_';
+
+	/**
+	* Constructor.
+	*
+	* @param string $user The user whos data the object will operate on.
+	*/
+	public function __construct($user) {
+
+		$this->user = $user;
+
+	}
+
+	/**
+	* Load tags from db.
+	*
+	* @param string $type The type identifier e.g. 'contact' or 'event'.
+	* @param array $defaultTags An array of default tags to be used if none are stored.
+	* @return \OCP\ITags
+	*/
+	public function loadTagsFor($type, $defaultTags=array()) {
+		$this->type = $type;
+		$this->tags = array();
+		$result = null;
+		$sql = 'SELECT `id`, `category` FROM `' . self::TAG_TABLE . '` '
+			. 'WHERE `uid` = ? AND `type` = ? ORDER BY `category`';
+		try {
+			$stmt = \OCP\DB::prepare($sql);
+			$result = $stmt->execute(array($this->user, $this->type));
+			if (\OCP\DB::isError($result)) {
+				\OCP\Util::writeLog('core', __METHOD__. ', DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+			}
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+				\OCP\Util::ERROR);
+		}
+
+		if(!is_null($result)) {
+			while( $row = $result->fetchRow()) {
+				$this->tags[$row['id']] = $row['category'];
+			}
+		}
+
+		if(count($defaultTags) > 0 && count($this->tags) === 0) {
+			$this->addMulti($defaultTags, true);
+		}
+		\OCP\Util::writeLog('core', __METHOD__.', tags: ' . print_r($this->tags, true),
+			\OCP\Util::DEBUG);
+
+		return $this;
+	}
+
+	/**
+	* Check if any tags are saved for this type and user.
+	*
+	* @return boolean.
+	*/
+	public function isEmpty() {
+		$sql = 'SELECT COUNT(*) FROM `' . self::TAG_TABLE . '` '
+			. 'WHERE `uid` = ? AND `type` = ?';
+		try {
+			$stmt = OCP\DB::prepare($sql);
+			$result = $stmt->execute(array($this->user, $this->type));
+			if (\OCP\DB::isError($result)) {
+				\OCP\Util::writeLog('core', __METHOD__. ', DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+				return false;
+			}
+			return ($result->numRows() === 0);
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+				\OCP\Util::ERROR);
+			return false;
+		}
+	}
+
+	/**
+	* Get the tags for a specific user.
+	*
+	* This returns an array with id/name maps:
+	* [
+	* 	['id' => 0, 'name' = 'First tag'],
+	* 	['id' => 1, 'name' = 'Second tag'],
+	* ]
+	*
+	* @return array
+	*/
+	public function tags() {
+		if(!count($this->tags)) {
+			return array();
+		}
+
+		$tags = array_values($this->tags);
+		uasort($tags, 'strnatcasecmp');
+		$tagMap = array();
+
+		foreach($tags as $tag) {
+			if($tag !== self::TAG_FAVORITE) {
+				$tagMap[] = array(
+					'id' => $this->array_searchi($tag, $this->tags),
+					'name' => $tag
+					);
+			}
+		}
+		return $tagMap;
+
+	}
+
+	/**
+	* Get the a list if items tagged with $tag.
+	*
+	* Throws an exception if the tag could not be found.
+	*
+	* @param string|integer $tag Tag id or name.
+	* @return array An array of object ids or false on error.
+	*/
+	public function idsForTag($tag) {
+		$result = null;
+		if(is_numeric($tag)) {
+			$tagId = $tag;
+		} elseif(is_string($tag)) {
+			$tag = trim($tag);
+			$tagId = $this->array_searchi($tag, $this->tags);
+		}
+
+		if($tagId === false) {
+			$l10n = \OC_L10N::get('core');
+			throw new \Exception(
+				$l10n->t('Could not find category "%s"', $tag)
+			);
+		}
+
+		$ids = array();
+		$sql = 'SELECT `objid` FROM `' . self::RELATION_TABLE
+			. '` WHERE `categoryid` = ?';
+
+		try {
+			$stmt = \OCP\DB::prepare($sql);
+			$result = $stmt->execute(array($tagId));
+			if (\OCP\DB::isError($result)) {
+				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+				return false;
+			}
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+				\OCP\Util::ERROR);
+			return false;
+		}
+
+		if(!is_null($result)) {
+			while( $row = $result->fetchRow()) {
+				$ids[] = (int)$row['objid'];
+			}
+		}
+
+		return $ids;
+	}
+
+	/**
+	* Checks whether a tag is already saved.
+	*
+	* @param string $name The name to check for.
+	* @return bool
+	*/
+	public function hasTag($name) {
+		return $this->in_arrayi($name, $this->tags);
+	}
+
+	/**
+	* Add a new tag.
+	*
+	* @param string $name A string with a name of the tag
+	* @return int the id of the added tag or false if it already exists.
+	*/
+	public function add($name) {
+		$name = trim($name);
+
+		if($this->hasTag($name)) {
+			\OCP\Util::writeLog('core', __METHOD__.', name: ' . $name. ' exists already', \OCP\Util::DEBUG);
+			return false;
+		}
+		try {
+			\OCP\DB::insertIfNotExist(self::TAG_TABLE,
+				array(
+					'uid' => $this->user,
+					'type' => $this->type,
+					'category' => $name,
+				));
+			} catch(\Exception $e) {
+				\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+					\OCP\Util::ERROR);
+				return false;
+			}
+		$id = \OCP\DB::insertid(self::TAG_TABLE);
+		\OCP\Util::writeLog('core', __METHOD__.', id: ' . $id, \OCP\Util::DEBUG);
+		$this->tags[$id] = $name;
+		return $id;
+	}
+
+	/**
+	* Rename tag.
+	*
+	* @param string $from The name of the existing tag
+	* @param string $to The new name of the tag.
+	* @return bool
+	*/
+	public function rename($from, $to) {
+		$from = trim($from);
+		$to = trim($to);
+		$id = $this->array_searchi($from, $this->tags);
+		if($id === false) {
+			\OCP\Util::writeLog('core', __METHOD__.', tag: ' . $from. ' does not exist', \OCP\Util::DEBUG);
+			return false;
+		}
+
+		$sql = 'UPDATE `' . self::TAG_TABLE . '` SET `category` = ? '
+			. 'WHERE `uid` = ? AND `type` = ? AND `id` = ?';
+		try {
+			$stmt = \OCP\DB::prepare($sql);
+			$result = $stmt->execute(array($to, $this->user, $this->type, $id));
+			if (\OCP\DB::isError($result)) {
+				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+				return false;
+			}
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+				\OCP\Util::ERROR);
+			return false;
+		}
+		$this->tags[$id] = $to;
+		return true;
+	}
+
+	/**
+	* Add a list of new tags.
+	*
+	* @param string[] $names A string with a name or an array of strings containing
+	* the name(s) of the to add.
+	* @param bool $sync When true, save the tags
+	* @param int|null $id int Optional object id to add to this|these tag(s)
+	* @return bool Returns false on error.
+	*/
+	public function addMulti($names, $sync=false, $id = null) {
+		if(!is_array($names)) {
+			$names = array($names);
+		}
+		$names = array_map('trim', $names);
+		$newones = array();
+		foreach($names as $name) {
+			if(($this->in_arrayi(
+				$name, $this->tags) == false) && $name !== '') {
+				$newones[] = $name;
+			}
+			if(!is_null($id) ) {
+				// Insert $objectid, $categoryid  pairs if not exist.
+				self::$relations[] = array('objid' => $id, 'tag' => $name);
+			}
+		}
+		$this->tags = array_merge($this->tags, $newones);
+		if($sync === true) {
+			$this->save();
+		}
+
+		return true;
+	}
+
+	/**
+	 * Save the list of tags and their object relations
+	 */
+	protected function save() {
+		if(is_array($this->tags)) {
+			foreach($this->tags as $tag) {
+				try {
+					\OCP\DB::insertIfNotExist(self::TAG_TABLE,
+						array(
+							'uid' => $this->user,
+							'type' => $this->type,
+							'category' => $tag,
+						));
+				} catch(\Exception $e) {
+					\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+						\OCP\Util::ERROR);
+				}
+			}
+			// reload tags to get the proper ids.
+			$this->loadTagsFor($this->type);
+			// Loop through temporarily cached objectid/tagname pairs
+			// and save relations.
+			$tags = $this->tags;
+			// For some reason this is needed or array_search(i) will return 0..?
+			ksort($tags);
+			foreach(self::$relations as $relation) {
+				$tagId = $this->array_searchi($relation['tag'], $tags);
+				\OCP\Util::writeLog('core', __METHOD__ . 'catid, ' . $relation['tag'] . ' ' . $tagId, \OCP\Util::DEBUG);
+				if($tagId) {
+					try {
+						\OCP\DB::insertIfNotExist(self::RELATION_TABLE,
+							array(
+								'objid' => $relation['objid'],
+								'categoryid' => $tagId,
+								'type' => $this->type,
+								));
+					} catch(\Exception $e) {
+						\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+							\OCP\Util::ERROR);
+					}
+				}
+			}
+			self::$relations = array(); // reset
+		} else {
+			\OCP\Util::writeLog('core', __METHOD__.', $this->tags is not an array! '
+				. print_r($this->tags, true), \OCP\Util::ERROR);
+		}
+	}
+
+	/**
+	* Delete tags and tag/object relations for a user.
+	*
+	* For hooking up on post_deleteUser
+	*
+	* @param array
+	*/
+	public static function post_deleteUser($arguments) {
+		// Find all objectid/tagId pairs.
+		$result = null;
+		try {
+			$stmt = \OCP\DB::prepare('SELECT `id` FROM `' . self::TAG_TABLE . '` '
+				. 'WHERE `uid` = ?');
+			$result = $stmt->execute(array($arguments['uid']));
+			if (\OCP\DB::isError($result)) {
+				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+			}
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+				\OCP\Util::ERROR);
+		}
+
+		if(!is_null($result)) {
+			try {
+				$stmt = \OCP\DB::prepare('DELETE FROM `' . self::RELATION_TABLE . '` '
+					. 'WHERE `categoryid` = ?');
+				while( $row = $result->fetchRow()) {
+					try {
+						$stmt->execute(array($row['id']));
+					} catch(\Exception $e) {
+						\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+							\OCP\Util::ERROR);
+					}
+				}
+			} catch(\Exception $e) {
+				\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+					\OCP\Util::ERROR);
+			}
+		}
+		try {
+			$stmt = \OCP\DB::prepare('DELETE FROM `' . self::TAG_TABLE . '` '
+				. 'WHERE `uid` = ?');
+			$result = $stmt->execute(array($arguments['uid']));
+			if (OCP\DB::isError($result)) {
+				\OCP\Util::writeLog('core', __METHOD__. ', DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+			}
+		} catch(\Exception $e) {
+			OCP\Util::writeLog('core', __METHOD__ . ', exception: '
+				. $e->getMessage(), OCP\Util::ERROR);
+		}
+	}
+
+	/**
+	* Delete tag/object relations from the db
+	*
+	* @param array $ids The ids of the objects
+	* @return boolean Returns false on error.
+	*/
+	public function purgeObjects(array $ids) {
+		if(count($ids) === 0) {
+			// job done ;)
+			return true;
+		}
+		$updates = $ids;
+		try {
+			$query = 'DELETE FROM `' . self::RELATION_TABLE . '` ';
+			$query .= 'WHERE `objid` IN (' . str_repeat('?,', count($ids)-1) . '?) ';
+			$query .= 'AND `type`= ?';
+			$updates[] = $this->type;
+			$stmt = OCP\DB::prepare($query);
+			$result = $stmt->execute($updates);
+			if (\OCP\DB::isError($result)) {
+				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+				return false;
+			}
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: ' . $e->getMessage(),
+				\OCP\Util::ERROR);
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	* Get favorites for an object type
+	*
+	* @return array An array of object ids.
+	*/
+	public function getFavorites() {
+		try {
+			return $this->idsForTag(self::TAG_FAVORITE);
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: ' . $e->getMessage(),
+				\OCP\Util::ERROR);
+			return array();
+		}
+	}
+
+	/**
+	* Add an object to favorites
+	*
+	* @param int $objid The id of the object
+	* @return boolean
+	*/
+	public function addToFavorites($objid) {
+		if(!$this->hasCategory(self::TAG_FAVORITE)) {
+			$this->add(self::TAG_FAVORITE, true);
+		}
+		return $this->tagAs($objid, self::TAG_FAVORITE, $this->type);
+	}
+
+	/**
+	* Remove an object from favorites
+	*
+	* @param int $objid The id of the object
+	* @return boolean
+	*/
+	public function removeFromFavorites($objid) {
+		return $this->unTag($objid, self::TAG_FAVORITE, $this->type);
+	}
+
+	/**
+	* Creates a tag/object relation.
+	*
+	* @param int $objid The id of the object
+	* @param int|string $tag The id or name of the tag
+	* @return boolean Returns false on database error.
+	*/
+	public function tagAs($objid, $tag) {
+		if(is_string($tag) && !is_numeric($tag)) {
+			$tag = trim($tag);
+			if(!$this->hasTag($tag)) {
+				$this->add($tag, true);
+			}
+			$tagId =  $this->array_searchi($tag, $this->tags);
+		} else {
+			$tagId = $tag;
+		}
+		try {
+			\OCP\DB::insertIfNotExist(self::RELATION_TABLE,
+				array(
+					'objid' => $objid,
+					'categoryid' => $tagId,
+					'type' => $this->type,
+				));
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+				\OCP\Util::ERROR);
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	* Delete single tag/object relation from the db
+	*
+	* @param int $objid The id of the object
+	* @param int|string $tag The id or name of the tag
+	* @return boolean
+	*/
+	public function unTag($objid, $tag) {
+		if(is_string($tag) && !is_numeric($tag)) {
+			$tag = trim($tag);
+			$tagId =  $this->array_searchi($tag, $this->tags);
+		} else {
+			$tagId = $tag;
+		}
+
+		try {
+			$sql = 'DELETE FROM `' . self::RELATION_TABLE . '` '
+					. 'WHERE `objid` = ? AND `categoryid` = ? AND `type` = ?';
+			$stmt = \OCP\DB::prepare($sql);
+			$stmt->execute(array($objid, $tagId, $this->type));
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+				\OCP\Util::ERROR);
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	* Delete tags from the
+	*
+	* @param string[] $names An array of tags to delete
+	* @return bool Returns false on error
+	*/
+	public function delete($names) {
+		if(!is_array($names)) {
+			$names = array($names);
+		}
+
+		$names = array_map('trim', $names);
+
+		\OCP\Util::writeLog('core', __METHOD__ . ', before: '
+			. print_r($this->tags, true), \OCP\Util::DEBUG);
+		foreach($names as $name) {
+			$id = null;
+
+			if($this->hasTag($name)) {
+				$id = $this->array_searchi($name, $this->tags);
+				unset($this->tags[$id]);
+			}
+			try {
+				$stmt = \OCP\DB::prepare('DELETE FROM `' . self::TAG_TABLE . '` WHERE '
+					. '`uid` = ? AND `type` = ? AND `category` = ?');
+				$result = $stmt->execute(array($this->user, $this->type, $name));
+				if (\OCP\DB::isError($result)) {
+					\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+				}
+			} catch(\Exception $e) {
+				\OCP\Util::writeLog('core', __METHOD__ . ', exception: '
+					. $e->getMessage(), \OCP\Util::ERROR);
+				return false;
+			}
+			if(!is_null($id) && $id !== false) {
+				try {
+					$sql = 'DELETE FROM `' . self::RELATION_TABLE . '` '
+							. 'WHERE `categoryid` = ?';
+					$stmt = \OCP\DB::prepare($sql);
+					$result = $stmt->execute(array($id));
+					if (\OCP\DB::isError($result)) {
+						\OCP\Util::writeLog('core',
+							__METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result),
+							\OCP\Util::ERROR);
+						return false;
+					}
+				} catch(\Exception $e) {
+					\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+						\OCP\Util::ERROR);
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+
+	// 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/lib/vcategories.php b/lib/vcategories.php
deleted file mode 100644
index a7e4c54be2..0000000000
--- a/lib/vcategories.php
+++ /dev/null
@@ -1,833 +0,0 @@
-<?php
-/**
-* ownCloud
-*
-* @author Thomas Tanghus
-* @copyright 2012 Thomas Tanghus <thomas@tanghus.net>
-* @copyright 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/>.
-*
-*/
-
-OC_Hook::connect('OC_User', 'post_deleteUser', 'OC_VCategories', 'post_deleteUser');
-
-/**
- * Class for easy access to categories in VCARD, VEVENT, VTODO and VJOURNAL.
- * A Category can be e.g. 'Family', 'Work', 'Chore', 'Special Occation' or
- * anything else that is either parsed from a vobject or that the user chooses
- * to add.
- * Category names are not case-sensitive, but will be saved with the case they
- * are entered in. If a user already has a category 'family' for a type, and
- * tries to add a category named 'Family' it will be silently ignored.
- */
-class OC_VCategories {
-
-	/**
-	 * Categories
-	 */
-	private $categories = array();
-
-	/**
-	 * Used for storing objectid/categoryname pairs while rescanning.
-	 */
-	private static $relations = array();
-
-	private $type = null;
-	private $user = null;
-
-	const CATEGORY_TABLE = '*PREFIX*vcategory';
-	const RELATION_TABLE = '*PREFIX*vcategory_to_object';
-
-	const CATEGORY_FAVORITE = '_$!<Favorite>!$_';
-
-	const FORMAT_LIST = 0;
-	const FORMAT_MAP  = 1;
-
-	/**
-	* @brief Constructor.
-	* @param $type The type identifier e.g. 'contact' or 'event'.
-	* @param $user The user whos data the object will operate on. This
-	*   parameter should normally be omitted but to make an app able to
-	*   update categories for all users it is made possible to provide it.
-	* @param $defcategories An array of default categories to be used if none is stored.
-	*/
-	public function __construct($type, $user=null, $defcategories=array()) {
-		$this->type = $type;
-		$this->user = is_null($user) ? OC_User::getUser() : $user;
-
-		$this->loadCategories();
-		OCP\Util::writeLog('core', __METHOD__ . ', categories: '
-			. print_r($this->categories, true),
-			OCP\Util::DEBUG
-		);
-
-		if($defcategories && count($this->categories) === 0) {
-			$this->addMulti($defcategories, true);
-		}
-	}
-
-	/**
-	* @brief Load categories from db.
-	*/
-	private function loadCategories() {
-		$this->categories = array();
-		$result = null;
-		$sql = 'SELECT `id`, `category` FROM `' . self::CATEGORY_TABLE . '` '
-			. 'WHERE `uid` = ? AND `type` = ? ORDER BY `category`';
-		try {
-			$stmt = OCP\DB::prepare($sql);
-			$result = $stmt->execute(array($this->user, $this->type));
-			if (OC_DB::isError($result)) {
-				OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-			}
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-				OCP\Util::ERROR);
-		}
-
-		if(!is_null($result)) {
-			while( $row = $result->fetchRow()) {
-				// The keys are prefixed because array_search wouldn't work otherwise :-/
-				$this->categories[$row['id']] = $row['category'];
-			}
-		}
-		OCP\Util::writeLog('core', __METHOD__.', categories: ' . print_r($this->categories, true),
-			OCP\Util::DEBUG);
-	}
-
-
-	/**
-	* @brief Check if any categories are saved for this type and user.
-	* @returns boolean.
-	* @param $type The type identifier e.g. 'contact' or 'event'.
-	* @param $user The user whos categories will be checked. If not set current user will be used.
-	*/
-	public static function isEmpty($type, $user = null) {
-		$user = is_null($user) ? OC_User::getUser() : $user;
-		$sql = 'SELECT COUNT(*) FROM `' . self::CATEGORY_TABLE . '` '
-			. 'WHERE `uid` = ? AND `type` = ?';
-		try {
-			$stmt = OCP\DB::prepare($sql);
-			$result = $stmt->execute(array($user, $type));
-			if (OC_DB::isError($result)) {
-				OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-				return false;
-			}
-			return ($result->numRows() === 0);
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-				OCP\Util::ERROR);
-			return false;
-		}
-	}
-
-	/**
-	* @brief Get the categories for a specific user.
-	* @param
-	* @returns array containing the categories as strings.
-	*/
-	public function categories($format = null) {
-		if(!$this->categories) {
-			return array();
-		}
-		$categories = array_values($this->categories);
-		uasort($categories, 'strnatcasecmp');
-		if($format == self::FORMAT_MAP) {
-			$catmap = array();
-			foreach($categories as $category) {
-				if($category !== self::CATEGORY_FAVORITE) {
-					$catmap[] = array(
-						'id' => $this->array_searchi($category, $this->categories),
-						'name' => $category
-						);
-				}
-			}
-			return $catmap;
-		}
-
-		// Don't add favorites to normal categories.
-		$favpos = array_search(self::CATEGORY_FAVORITE, $categories);
-		if($favpos !== false) {
-			return array_splice($categories, $favpos);
-		} else {
-			return $categories;
-		}
-	}
-
-	/**
-	* Get the a list if items belonging to $category.
-	*
-	* Throws an exception if the category could not be found.
-	*
-	* @param string|integer $category Category id or name.
-	* @returns array An array of object ids or false on error.
-	*/
-	public function idsForCategory($category) {
-		$result = null;
-		if(is_numeric($category)) {
-			$catid = $category;
-		} elseif(is_string($category)) {
-			$category = trim($category);
-			$catid = $this->array_searchi($category, $this->categories);
-		}
-		OCP\Util::writeLog('core', __METHOD__.', category: '.$catid.' '.$category, OCP\Util::DEBUG);
-		if($catid === false) {
-			$l10n = OC_L10N::get('core');
-			throw new Exception(
-				$l10n->t('Could not find category "%s"', $category)
-			);
-		}
-
-		$ids = array();
-		$sql = 'SELECT `objid` FROM `' . self::RELATION_TABLE
-			. '` WHERE `categoryid` = ?';
-
-		try {
-			$stmt = OCP\DB::prepare($sql);
-			$result = $stmt->execute(array($catid));
-			if (OC_DB::isError($result)) {
-				OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-				return false;
-			}
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-				OCP\Util::ERROR);
-			return false;
-		}
-
-		if(!is_null($result)) {
-			while( $row = $result->fetchRow()) {
-				$ids[] = (int)$row['objid'];
-			}
-		}
-
-		return $ids;
-	}
-
-	/**
-	* Get the a list if items belonging to $category.
-	*
-	* Throws an exception if the category could not be found.
-	*
-	* @param string|integer $category Category id or name.
-	* @param array $tableinfo Array in the form {'tablename' => table, 'fields' => ['field1', 'field2']}
-	* @param int $limit
-	* @param int $offset
-	*
-	* This generic method queries a table assuming that the id
-	* field is called 'id' and the table name provided is in
-	* the form '*PREFIX*table_name'.
-	*
-	* If the category name cannot be resolved an exception is thrown.
-	*
-	* TODO: Maybe add the getting permissions for objects?
-	*
-	* @returns array containing the resulting items or false on error.
-	*/
-	public function itemsForCategory($category, $tableinfo, $limit = null, $offset = null) {
-		$result = null;
-		if(is_numeric($category)) {
-			$catid = $category;
-		} elseif(is_string($category)) {
-			$category = trim($category);
-			$catid = $this->array_searchi($category, $this->categories);
-		}
-		OCP\Util::writeLog('core', __METHOD__.', category: '.$catid.' '.$category, OCP\Util::DEBUG);
-		if($catid === false) {
-			$l10n = OC_L10N::get('core');
-			throw new Exception(
-				$l10n->t('Could not find category "%s"', $category)
-			);
-		}
-		$fields = '';
-		foreach($tableinfo['fields'] as $field) {
-			$fields .= '`' . $tableinfo['tablename'] . '`.`' . $field . '`,';
-		}
-		$fields = substr($fields, 0, -1);
-
-		$items = array();
-		$sql = 'SELECT `' . self::RELATION_TABLE . '`.`categoryid`, ' . $fields
-			. ' FROM `' . $tableinfo['tablename'] . '` JOIN `'
-			. self::RELATION_TABLE . '` ON `' . $tableinfo['tablename']
-			. '`.`id` = `' . self::RELATION_TABLE . '`.`objid` WHERE `'
-			. self::RELATION_TABLE . '`.`categoryid` = ?';
-
-		try {
-			$stmt = OCP\DB::prepare($sql, $limit, $offset);
-			$result = $stmt->execute(array($catid));
-			if (OC_DB::isError($result)) {
-				OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-				return false;
-			}
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-				OCP\Util::ERROR);
-			return false;
-		}
-
-		if(!is_null($result)) {
-			while( $row = $result->fetchRow()) {
-				$items[] = $row;
-			}
-		}
-		//OCP\Util::writeLog('core', __METHOD__.', count: ' . count($items), OCP\Util::DEBUG);
-		//OCP\Util::writeLog('core', __METHOD__.', sql: ' . $sql, OCP\Util::DEBUG);
-
-		return $items;
-	}
-
-	/**
-	* @brief Checks whether a category is already saved.
-	* @param $name The name to check for.
-	* @returns bool
-	*/
-	public function hasCategory($name) {
-		return $this->in_arrayi($name, $this->categories);
-	}
-
-	/**
-	* @brief Add a new category.
-	* @param $name A string with a name of the category
-	* @returns int the id of the added category or false if it already exists.
-	*/
-	public function add($name) {
-		$name = trim($name);
-		OCP\Util::writeLog('core', __METHOD__.', name: ' . $name, OCP\Util::DEBUG);
-		if($this->hasCategory($name)) {
-			OCP\Util::writeLog('core', __METHOD__.', name: ' . $name. ' exists already', OCP\Util::DEBUG);
-			return false;
-		}
-		try {
-			OCP\DB::insertIfNotExist(self::CATEGORY_TABLE,
-				array(
-					'uid' => $this->user,
-					'type' => $this->type,
-					'category' => $name,
-				));
-			} catch(Exception $e) {
-				OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-					OCP\Util::ERROR);
-				return false;
-			}
-		$id = OCP\DB::insertid(self::CATEGORY_TABLE);
-		OCP\Util::writeLog('core', __METHOD__.', id: ' . $id, OCP\Util::DEBUG);
-		$this->categories[$id] = $name;
-		return $id;
-	}
-
-	/**
-	* @brief Rename category.
-	* @param string $from The name of the existing category
-	* @param string $to The new name of the category.
-	* @returns bool
-	*/
-	public function rename($from, $to) {
-		$from = trim($from);
-		$to = trim($to);
-		$id = $this->array_searchi($from, $this->categories);
-		if($id === false) {
-			OCP\Util::writeLog('core', __METHOD__.', category: ' . $from. ' does not exist', OCP\Util::DEBUG);
-			return false;
-		}
-
-		$sql = 'UPDATE `' . self::CATEGORY_TABLE . '` SET `category` = ? '
-			. 'WHERE `uid` = ? AND `type` = ? AND `id` = ?';
-		try {
-			$stmt = OCP\DB::prepare($sql);
-			$result = $stmt->execute(array($to, $this->user, $this->type, $id));
-			if (OC_DB::isError($result)) {
-				OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-				return false;
-			}
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-				OCP\Util::ERROR);
-			return false;
-		}
-		$this->categories[$id] = $to;
-		return true;
-	}
-
-	/**
-	* @brief Add a new category.
-	* @param $names A string with a name or an array of strings containing
-	* the name(s) of the categor(y|ies) to add.
-	* @param $sync bool When true, save the categories
-	* @param $id int Optional object id to add to this|these categor(y|ies)
-	* @returns bool Returns false on error.
-	*/
-	public function addMulti($names, $sync=false, $id = null) {
-		if(!is_array($names)) {
-			$names = array($names);
-		}
-		$names = array_map('trim', $names);
-		$newones = array();
-		foreach($names as $name) {
-			if(($this->in_arrayi(
-				$name, $this->categories) == false) && $name != '') {
-				$newones[] = $name;
-			}
-			if(!is_null($id) ) {
-				// Insert $objectid, $categoryid  pairs if not exist.
-				self::$relations[] = array('objid' => $id, 'category' => $name);
-			}
-		}
-		$this->categories = array_merge($this->categories, $newones);
-		if($sync === true) {
-			$this->save();
-		}
-
-		return true;
-	}
-
-	/**
-	* @brief Extracts categories from a vobject and add the ones not already present.
-	* @param $vobject The instance of OC_VObject to load the categories from.
-	*/
-	public function loadFromVObject($id, $vobject, $sync=false) {
-		$this->addMulti($vobject->getAsArray('CATEGORIES'), $sync, $id);
-	}
-
-	/**
-	* @brief Reset saved categories and rescan supplied vobjects for categories.
-	* @param $objects An array of vobjects (as text).
-	* To get the object array, do something like:
-	*	// For Addressbook:
-	*	$categories = new OC_VCategories('contacts');
-	*	$stmt = OC_DB::prepare( 'SELECT `carddata` FROM `*PREFIX*contacts_cards`' );
-	*	$result = $stmt->execute();
-	*	$objects = array();
-	*	if(!is_null($result)) {
-	*		while( $row = $result->fetchRow()){
-	*			$objects[] = array($row['id'], $row['carddata']);
-	*		}
-	*	}
-	*	$categories->rescan($objects);
-	*/
-	public function rescan($objects, $sync=true, $reset=true) {
-
-		if($reset === true) {
-			$result = null;
-			// Find all objectid/categoryid pairs.
-			try {
-				$stmt = OCP\DB::prepare('SELECT `id` FROM `' . self::CATEGORY_TABLE . '` '
-					. 'WHERE `uid` = ? AND `type` = ?');
-				$result = $stmt->execute(array($this->user, $this->type));
-				if (OC_DB::isError($result)) {
-					OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-					return false;
-				}
-			} catch(Exception $e) {
-				OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-					OCP\Util::ERROR);
-			}
-
-			// And delete them.
-			if(!is_null($result)) {
-				$stmt = OCP\DB::prepare('DELETE FROM `' . self::RELATION_TABLE . '` '
-					. 'WHERE `categoryid` = ? AND `type`= ?');
-				while( $row = $result->fetchRow()) {
-					$stmt->execute(array($row['id'], $this->type));
-				}
-			}
-			try {
-				$stmt = OCP\DB::prepare('DELETE FROM `' . self::CATEGORY_TABLE . '` '
-					. 'WHERE `uid` = ? AND `type` = ?');
-				$result = $stmt->execute(array($this->user, $this->type));
-				if (OC_DB::isError($result)) {
-					OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-					return;
-				}
-			} catch(Exception $e) {
-				OCP\Util::writeLog('core', __METHOD__ . ', exception: '
-					. $e->getMessage(), OCP\Util::ERROR);
-				return;
-			}
-			$this->categories = array();
-		}
-		// Parse all the VObjects
-		foreach($objects as $object) {
-			$vobject = OC_VObject::parse($object[1]);
-			if(!is_null($vobject)) {
-				// Load the categories
-				$this->loadFromVObject($object[0], $vobject, $sync);
-			} else {
-				OC_Log::write('core', __METHOD__ . ', unable to parse. ID: ' . ', '
-					. substr($object, 0, 100) . '(...)', OC_Log::DEBUG);
-			}
-		}
-		$this->save();
-	}
-
-	/**
-	 * @brief Save the list with categories
-	 */
-	private function save() {
-		if(is_array($this->categories)) {
-			foreach($this->categories as $category) {
-				try {
-					OCP\DB::insertIfNotExist(self::CATEGORY_TABLE,
-						array(
-							'uid' => $this->user,
-							'type' => $this->type,
-							'category' => $category,
-						));
-				} catch(Exception $e) {
-					OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-						OCP\Util::ERROR);
-				}
-			}
-			// reload categories to get the proper ids.
-			$this->loadCategories();
-			// Loop through temporarily cached objectid/categoryname pairs
-			// and save relations.
-			$categories = $this->categories;
-			// For some reason this is needed or array_search(i) will return 0..?
-			ksort($categories);
-			foreach(self::$relations as $relation) {
-				$catid = $this->array_searchi($relation['category'], $categories);
-				OC_Log::write('core', __METHOD__ . 'catid, ' . $relation['category'] . ' ' . $catid, OC_Log::DEBUG);
-				if($catid) {
-					try {
-						OCP\DB::insertIfNotExist(self::RELATION_TABLE,
-							array(
-								'objid' => $relation['objid'],
-								'categoryid' => $catid,
-								'type' => $this->type,
-								));
-					} catch(Exception $e) {
-						OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-							OCP\Util::ERROR);
-					}
-				}
-			}
-			self::$relations = array(); // reset
-		} else {
-			OC_Log::write('core', __METHOD__.', $this->categories is not an array! '
-				. print_r($this->categories, true), OC_Log::ERROR);
-		}
-	}
-
-	/**
-	* @brief Delete categories and category/object relations for a user.
-	* For hooking up on post_deleteUser
-	* @param string $uid The user id for which entries should be purged.
-	*/
-	public static function post_deleteUser($arguments) {
-		// Find all objectid/categoryid pairs.
-		$result = null;
-		try {
-			$stmt = OCP\DB::prepare('SELECT `id` FROM `' . self::CATEGORY_TABLE . '` '
-				. 'WHERE `uid` = ?');
-			$result = $stmt->execute(array($arguments['uid']));
-			if (OC_DB::isError($result)) {
-				OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-			}
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-				OCP\Util::ERROR);
-		}
-
-		if(!is_null($result)) {
-			try {
-				$stmt = OCP\DB::prepare('DELETE FROM `' . self::RELATION_TABLE . '` '
-					. 'WHERE `categoryid` = ?');
-				while( $row = $result->fetchRow()) {
-					try {
-						$stmt->execute(array($row['id']));
-					} catch(Exception $e) {
-						OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-							OCP\Util::ERROR);
-					}
-				}
-			} catch(Exception $e) {
-				OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-					OCP\Util::ERROR);
-			}
-		}
-		try {
-			$stmt = OCP\DB::prepare('DELETE FROM `' . self::CATEGORY_TABLE . '` '
-				. 'WHERE `uid` = ?');
-			$result = $stmt->execute(array($arguments['uid']));
-			if (OC_DB::isError($result)) {
-				OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-			}
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__ . ', exception: '
-				. $e->getMessage(), OCP\Util::ERROR);
-		}
-	}
-
-	/**
-	* @brief Delete category/object relations from the db
-	* @param array $ids The ids of the objects
-	* @param string $type The type of object (event/contact/task/journal).
-	* 	Defaults to the type set in the instance
-	* @returns boolean Returns false on error.
-	*/
-	public function purgeObjects(array $ids, $type = null) {
-		$type = is_null($type) ? $this->type : $type;
-		if(count($ids) === 0) {
-			// job done ;)
-			return true;
-		}
-		$updates = $ids;
-		try {
-			$query = 'DELETE FROM `' . self::RELATION_TABLE . '` ';
-			$query .= 'WHERE `objid` IN (' . str_repeat('?,', count($ids)-1) . '?) ';
-			$query .= 'AND `type`= ?';
-			$updates[] = $type;
-			$stmt = OCP\DB::prepare($query);
-			$result = $stmt->execute($updates);
-			if (OC_DB::isError($result)) {
-				OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-				return false;
-			}
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: ' . $e->getMessage(),
-				OCP\Util::ERROR);
-			return false;
-		}
-		return true;
-	}
-
-	/**
-	* Get favorites for an object type
-	*
-	* @param string $type The type of object (event/contact/task/journal).
-	* 	Defaults to the type set in the instance
-	* @returns array An array of object ids.
-	*/
-	public function getFavorites($type = null) {
-		$type = is_null($type) ? $this->type : $type;
-
-		try {
-			return $this->idsForCategory(self::CATEGORY_FAVORITE);
-		} catch(Exception $e) {
-			// No favorites
-			return array();
-		}
-	}
-
-	/**
-	* Add an object to favorites
-	*
-	* @param int $objid The id of the object
-	* @param string $type The type of object (event/contact/task/journal).
-	* 	Defaults to the type set in the instance
-	* @returns boolean
-	*/
-	public function addToFavorites($objid, $type = null) {
-		$type = is_null($type) ? $this->type : $type;
-		if(!$this->hasCategory(self::CATEGORY_FAVORITE)) {
-			$this->add(self::CATEGORY_FAVORITE, true);
-		}
-		return $this->addToCategory($objid, self::CATEGORY_FAVORITE, $type);
-	}
-
-	/**
-	* Remove an object from favorites
-	*
-	* @param int $objid The id of the object
-	* @param string $type The type of object (event/contact/task/journal).
-	* 	Defaults to the type set in the instance
-	* @returns boolean
-	*/
-	public function removeFromFavorites($objid, $type = null) {
-		$type = is_null($type) ? $this->type : $type;
-		return $this->removeFromCategory($objid, self::CATEGORY_FAVORITE, $type);
-	}
-
-	/**
-	* @brief Creates a category/object relation.
-	* @param int $objid The id of the object
-	* @param int|string $category The id or name of the category
-	* @param string $type The type of object (event/contact/task/journal).
-	* 	Defaults to the type set in the instance
-	* @returns boolean Returns false on database error.
-	*/
-	public function addToCategory($objid, $category, $type = null) {
-		$type = is_null($type) ? $this->type : $type;
-		if(is_string($category) && !is_numeric($category)) {
-			$category = trim($category);
-			if(!$this->hasCategory($category)) {
-				$this->add($category, true);
-			}
-			$categoryid =  $this->array_searchi($category, $this->categories);
-		} else {
-			$categoryid = $category;
-		}
-		try {
-			OCP\DB::insertIfNotExist(self::RELATION_TABLE,
-				array(
-					'objid' => $objid,
-					'categoryid' => $categoryid,
-					'type' => $type,
-				));
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-				OCP\Util::ERROR);
-			return false;
-		}
-		return true;
-	}
-
-	/**
-	* @brief Delete single category/object relation from the db
-	* @param int $objid The id of the object
-	* @param int|string $category The id or name of the category
-	* @param string $type The type of object (event/contact/task/journal).
-	* 	Defaults to the type set in the instance
-	* @returns boolean
-	*/
-	public function removeFromCategory($objid, $category, $type = null) {
-		$type = is_null($type) ? $this->type : $type;
-		if(is_string($category) && !is_numeric($category)) {
-			$category = trim($category);
-			$categoryid =  $this->array_searchi($category, $this->categories);
-		} else {
-			$categoryid = $category;
-		}
-
-		try {
-			$sql = 'DELETE FROM `' . self::RELATION_TABLE . '` '
-					. 'WHERE `objid` = ? AND `categoryid` = ? AND `type` = ?';
-			OCP\Util::writeLog('core', __METHOD__.', sql: ' . $objid . ' ' . $categoryid . ' ' . $type,
-				OCP\Util::DEBUG);
-			$stmt = OCP\DB::prepare($sql);
-			$stmt->execute(array($objid, $categoryid, $type));
-		} catch(Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-				OCP\Util::ERROR);
-			return false;
-		}
-		return true;
-	}
-
-	/**
-	* @brief Delete categories from the db and from all the vobject supplied
-	* @param $names An array of categories to delete
-	* @param $objects An array of arrays with [id,vobject] (as text) pairs suitable for updating the apps object table.
-	*/
-	public function delete($names, array &$objects=null) {
-		if(!is_array($names)) {
-			$names = array($names);
-		}
-
-		$names = array_map('trim', $names);
-
-		OC_Log::write('core', __METHOD__ . ', before: '
-			. print_r($this->categories, true), OC_Log::DEBUG);
-		foreach($names as $name) {
-			$id = null;
-			OC_Log::write('core', __METHOD__.', '.$name, OC_Log::DEBUG);
-			if($this->hasCategory($name)) {
-				$id = $this->array_searchi($name, $this->categories);
-				unset($this->categories[$id]);
-			}
-			try {
-				$stmt = OCP\DB::prepare('DELETE FROM `' . self::CATEGORY_TABLE . '` WHERE '
-					. '`uid` = ? AND `type` = ? AND `category` = ?');
-				$result = $stmt->execute(array($this->user, $this->type, $name));
-				if (OC_DB::isError($result)) {
-					OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
-				}
-			} catch(Exception $e) {
-				OCP\Util::writeLog('core', __METHOD__ . ', exception: '
-					. $e->getMessage(), OCP\Util::ERROR);
-			}
-			if(!is_null($id) && $id !== false) {
-				try {
-					$sql = 'DELETE FROM `' . self::RELATION_TABLE . '` '
-							. 'WHERE `categoryid` = ?';
-					$stmt = OCP\DB::prepare($sql);
-					$result = $stmt->execute(array($id));
-					if (OC_DB::isError($result)) {
-						OC_Log::write('core',
-							__METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result),
-							OC_Log::ERROR);
-					}
-				} catch(Exception $e) {
-					OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-						OCP\Util::ERROR);
-					return false;
-				}
-			}
-		}
-		OC_Log::write('core', __METHOD__.', after: '
-			. print_r($this->categories, true), OC_Log::DEBUG);
-		if(!is_null($objects)) {
-			foreach($objects as $key=>&$value) {
-				$vobject = OC_VObject::parse($value[1]);
-				if(!is_null($vobject)) {
-					$object = null;
-					$componentname = '';
-					if (isset($vobject->VEVENT)) {
-						$object = $vobject->VEVENT;
-						$componentname = 'VEVENT';
-					} else
-					if (isset($vobject->VTODO)) {
-						$object = $vobject->VTODO;
-						$componentname = 'VTODO';
-					} else
-					if (isset($vobject->VJOURNAL)) {
-						$object = $vobject->VJOURNAL;
-						$componentname = 'VJOURNAL';
-					} else {
-						$object = $vobject;
-					}
-					$categories = $object->getAsArray('CATEGORIES');
-					foreach($names as $name) {
-						$idx = $this->array_searchi($name, $categories);
-						if($idx !== false) {
-							OC_Log::write('core', __METHOD__
-								.', unsetting: '
-								. $categories[$this->array_searchi($name, $categories)],
-								OC_Log::DEBUG);
-							unset($categories[$this->array_searchi($name, $categories)]);
-						}
-					}
-
-					$object->setString('CATEGORIES', implode(',', $categories));
-					if($vobject !== $object) {
-						$vobject[$componentname] = $object;
-					}
-					$value[1] = $vobject->serialize();
-					$objects[$key] = $value;
-				} else {
-					OC_Log::write('core', __METHOD__
-						.', unable to parse. ID: ' . $value[0] . ', '
-						. substr($value[1], 0, 50) . '(...)', OC_Log::DEBUG);
-				}
-			}
-		}
-	}
-
-	// 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/tests/lib/tags.php b/tests/lib/tags.php
new file mode 100644
index 0000000000..06baebc0af
--- /dev/null
+++ b/tests/lib/tags.php
@@ -0,0 +1,133 @@
+<?php
+/**
+* ownCloud
+*
+* @author Thomas Tanghus
+* @copyright 2012-13 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/>.
+*
+*/
+
+class Test_Tags extends PHPUnit_Framework_TestCase {
+
+	protected $objectType;
+	protected $user;
+	protected $backupGlobals = FALSE;
+
+	public function setUp() {
+
+		OC_User::clearBackends();
+		OC_User::useBackend('dummy');
+		$this->user = uniqid('user_');
+		$this->objectType = uniqid('type_');
+		OC_User::createUser($this->user, 'pass');
+		OC_User::setUserId($this->user);
+
+	}
+
+	public function tearDown() {
+		//$query = OC_DB::prepare('DELETE FROM `*PREFIX*vcategories` WHERE `item_type` = ?');
+		//$query->execute(array('test'));
+	}
+
+	public function testInstantiateWithDefaults() {
+		$defaultTags = array('Friends', 'Family', 'Work', 'Other');
+
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType, $defaultTags);
+
+		$this->assertEquals(4, count($tagMgr->tags()));
+	}
+
+	public function testAddTags() {
+		$tags = array('Friends', 'Family', 'Work', 'Other');
+
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType);
+
+		foreach($tags as $tag) {
+			$result = $tagMgr->add($tag);
+			$this->assertTrue((bool)$result);
+		}
+
+		$this->assertFalse($tagMgr->add('Family'));
+		$this->assertFalse($tagMgr->add('fAMILY'));
+
+		$this->assertEquals(4, count($tagMgr->tags()));
+	}
+
+	public function testdeleteTags() {
+		$defaultTags = array('Friends', 'Family', 'Work', 'Other');
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType, $defaultTags);
+
+		$this->assertEquals(4, count($tagMgr->tags()));
+
+		$tagMgr->delete('family');
+		$this->assertEquals(3, count($tagMgr->tags()));
+
+		$tagMgr->delete(array('Friends', 'Work', 'Other'));
+		$this->assertEquals(0, count($tagMgr->tags()));
+
+	}
+
+	public function testRenameTag() {
+		$defaultTags = array('Friends', 'Family', 'Wrok', 'Other');
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType, $defaultTags);
+
+		$this->assertTrue($tagMgr->rename('Wrok', 'Work'));
+		$this->assertTrue($tagMgr->hasTag('Work'));
+		$this->assertFalse($tagMgr->hastag('Wrok'));
+		$this->assertFalse($tagMgr->rename('Wrok', 'Work'));
+
+	}
+
+	public function testTagAs() {
+		$objids = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
+
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType);
+
+		foreach($objids as $id) {
+			$tagMgr->tagAs($id, 'Family');
+		}
+
+		$this->assertEquals(1, count($tagMgr->tags()));
+		$this->assertEquals(9, count($tagMgr->idsForTag('Family')));
+	}
+
+	/**
+	* @depends testTagAs
+	*/
+	public function testUnTag() {
+		$objIds = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
+
+		// Is this "legal"?
+		$this->testTagAs();
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType);
+
+		foreach($objIds as $id) {
+			$this->assertTrue(in_array($id, $tagMgr->idsForTag('Family')));
+			$tagMgr->unTag($id, 'Family');
+			$this->assertFalse(in_array($id, $tagMgr->idsForTag('Family')));
+		}
+
+		$this->assertEquals(1, count($tagMgr->tags()));
+		$this->assertEquals(0, count($tagMgr->idsForTag('Family')));
+	}
+
+}
diff --git a/tests/lib/vcategories.php b/tests/lib/vcategories.php
deleted file mode 100644
index df5f600f20..0000000000
--- a/tests/lib/vcategories.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-/**
-* ownCloud
-*
-* @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/>.
-*
-*/
-
-//require_once("../lib/template.php");
-
-class Test_VCategories extends PHPUnit_Framework_TestCase {
-
-	protected $objectType;
-	protected $user;
-	protected $backupGlobals = FALSE;
-
-	public function setUp() {
-
-		OC_User::clearBackends();
-		OC_User::useBackend('dummy');
-		$this->user = uniqid('user_');
-		$this->objectType = uniqid('type_');
-		OC_User::createUser($this->user, 'pass');
-		OC_User::setUserId($this->user);
-
-	}
-
-	public function tearDown() {
-		//$query = OC_DB::prepare('DELETE FROM `*PREFIX*vcategories` WHERE `item_type` = ?');
-		//$query->execute(array('test'));
-	}
-
-	public function testInstantiateWithDefaults() {
-		$defcategories = array('Friends', 'Family', 'Work', 'Other');
-
-		$catmgr = new OC_VCategories($this->objectType, $this->user, $defcategories);
-
-		$this->assertEquals(4, count($catmgr->categories()));
-	}
-
-	public function testAddCategories() {
-		$categories = array('Friends', 'Family', 'Work', 'Other');
-
-		$catmgr = new OC_VCategories($this->objectType, $this->user);
-
-		foreach($categories as $category) {
-			$result = $catmgr->add($category);
-			$this->assertTrue((bool)$result);
-		}
-
-		$this->assertFalse($catmgr->add('Family'));
-		$this->assertFalse($catmgr->add('fAMILY'));
-
-		$this->assertEquals(4, count($catmgr->categories()));
-	}
-
-	public function testdeleteCategories() {
-		$defcategories = array('Friends', 'Family', 'Work', 'Other');
-		$catmgr = new OC_VCategories($this->objectType, $this->user, $defcategories);
-		$this->assertEquals(4, count($catmgr->categories()));
-
-		$catmgr->delete('family');
-		$this->assertEquals(3, count($catmgr->categories()));
-
-		$catmgr->delete(array('Friends', 'Work', 'Other'));
-		$this->assertEquals(0, count($catmgr->categories()));
-
-	}
-
-	public function testrenameCategory() {
-		$defcategories = array('Friends', 'Family', 'Wrok', 'Other');
-		$catmgr = new OC_VCategories($this->objectType, $this->user, $defcategories);
-
-		$this->assertTrue($catmgr->rename('Wrok', 'Work'));
-		$this->assertTrue($catmgr->hasCategory('Work'));
-		$this->assertFalse($catmgr->hasCategory('Wrok'));
-		$this->assertFalse($catmgr->rename('Wrok', 'Work'));
-
-	}
-
-	public function testAddToCategory() {
-		$objids = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
-
-		$catmgr = new OC_VCategories($this->objectType, $this->user);
-
-		foreach($objids as $id) {
-			$catmgr->addToCategory($id, 'Family');
-		}
-
-		$this->assertEquals(1, count($catmgr->categories()));
-		$this->assertEquals(9, count($catmgr->idsForCategory('Family')));
-	}
-
-	/**
-	* @depends testAddToCategory
-	*/
-	public function testRemoveFromCategory() {
-		$objids = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
-
-		// Is this "legal"?
-		$this->testAddToCategory();
-		$catmgr = new OC_VCategories($this->objectType, $this->user);
-
-		foreach($objids as $id) {
-			$this->assertTrue(in_array($id, $catmgr->idsForCategory('Family')));
-			$catmgr->removeFromCategory($id, 'Family');
-			$this->assertFalse(in_array($id, $catmgr->idsForCategory('Family')));
-		}
-
-		$this->assertEquals(1, count($catmgr->categories()));
-		$this->assertEquals(0, count($catmgr->idsForCategory('Family')));
-	}
-
-}
-- 
GitLab


From b63acdb12599c4ad062d7509c0079fad0b1ccfa2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 18 Sep 2013 22:49:09 +0200
Subject: [PATCH 173/248] fixing namespaces and rename hasCategory to hasTag

---
 lib/tags.php | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/lib/tags.php b/lib/tags.php
index 4aafff8e1b..3320d9ea1a 100644
--- a/lib/tags.php
+++ b/lib/tags.php
@@ -113,7 +113,7 @@ class Tags implements \OCP\ITags {
 		$sql = 'SELECT COUNT(*) FROM `' . self::TAG_TABLE . '` '
 			. 'WHERE `uid` = ? AND `type` = ?';
 		try {
-			$stmt = OCP\DB::prepare($sql);
+			$stmt = \OCP\DB::prepare($sql);
 			$result = $stmt->execute(array($this->user, $this->type));
 			if (\OCP\DB::isError($result)) {
 				\OCP\Util::writeLog('core', __METHOD__. ', DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
@@ -191,7 +191,7 @@ class Tags implements \OCP\ITags {
 			$stmt = \OCP\DB::prepare($sql);
 			$result = $stmt->execute(array($tagId));
 			if (\OCP\DB::isError($result)) {
-				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
 				return false;
 			}
 		} catch(\Exception $e) {
@@ -381,7 +381,7 @@ class Tags implements \OCP\ITags {
 				. 'WHERE `uid` = ?');
 			$result = $stmt->execute(array($arguments['uid']));
 			if (\OCP\DB::isError($result)) {
-				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
 			}
 		} catch(\Exception $e) {
 			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
@@ -409,12 +409,12 @@ class Tags implements \OCP\ITags {
 			$stmt = \OCP\DB::prepare('DELETE FROM `' . self::TAG_TABLE . '` '
 				. 'WHERE `uid` = ?');
 			$result = $stmt->execute(array($arguments['uid']));
-			if (OCP\DB::isError($result)) {
+			if (\OCP\DB::isError($result)) {
 				\OCP\Util::writeLog('core', __METHOD__. ', DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
 			}
 		} catch(\Exception $e) {
-			OCP\Util::writeLog('core', __METHOD__ . ', exception: '
-				. $e->getMessage(), OCP\Util::ERROR);
+			\OCP\Util::writeLog('core', __METHOD__ . ', exception: '
+				. $e->getMessage(), \OCP\Util::ERROR);
 		}
 	}
 
@@ -435,7 +435,7 @@ class Tags implements \OCP\ITags {
 			$query .= 'WHERE `objid` IN (' . str_repeat('?,', count($ids)-1) . '?) ';
 			$query .= 'AND `type`= ?';
 			$updates[] = $this->type;
-			$stmt = OCP\DB::prepare($query);
+			$stmt = \OCP\DB::prepare($query);
 			$result = $stmt->execute($updates);
 			if (\OCP\DB::isError($result)) {
 				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
@@ -471,7 +471,7 @@ class Tags implements \OCP\ITags {
 	* @return boolean
 	*/
 	public function addToFavorites($objid) {
-		if(!$this->hasCategory(self::TAG_FAVORITE)) {
+		if(!$this->hasTag(self::TAG_FAVORITE)) {
 			$this->add(self::TAG_FAVORITE, true);
 		}
 		return $this->tagAs($objid, self::TAG_FAVORITE, $this->type);
@@ -574,7 +574,7 @@ class Tags implements \OCP\ITags {
 					. '`uid` = ? AND `type` = ? AND `category` = ?');
 				$result = $stmt->execute(array($this->user, $this->type, $name));
 				if (\OCP\DB::isError($result)) {
-					\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+					\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
 				}
 			} catch(\Exception $e) {
 				\OCP\Util::writeLog('core', __METHOD__ . ', exception: '
-- 
GitLab


From 1bbeb12e2e8acc47b94c23d6a17332fb45c2a97e Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Thu, 19 Sep 2013 11:27:13 +0200
Subject: [PATCH 174/248] Updated method names and added a few more tests.

---
 lib/public/itags.php |  6 ++---
 lib/tags.php         | 12 ++++-----
 tests/lib/tags.php   | 59 +++++++++++++++++++++++++++++++++++---------
 3 files changed, 57 insertions(+), 20 deletions(-)

diff --git a/lib/public/itags.php b/lib/public/itags.php
index 047d4f5f40..1264340054 100644
--- a/lib/public/itags.php
+++ b/lib/public/itags.php
@@ -65,7 +65,7 @@ interface ITags {
 	*
 	* @returns array
 	*/
-	public function tags();
+	public function getTags();
 
 	/**
 	* Get the a list if items tagged with $tag.
@@ -75,7 +75,7 @@ interface ITags {
 	* @param string|integer $tag Tag id or name.
 	* @return array An array of object ids or false on error.
 	*/
-	public function idsForTag($tag);
+	public function getIdsForTag($tag);
 
 	/**
 	* Checks whether a tag is already saved.
@@ -111,7 +111,7 @@ interface ITags {
 	* @param int|null $id int Optional object id to add to this|these tag(s)
 	* @return bool Returns false on error.
 	*/
-	public function addMulti($names, $sync=false, $id = null);
+	public function addMultiple($names, $sync=false, $id = null);
 
 	/**
 	* Delete tag/object relations from the db
diff --git a/lib/tags.php b/lib/tags.php
index 3320d9ea1a..2eaa603c1a 100644
--- a/lib/tags.php
+++ b/lib/tags.php
@@ -96,7 +96,7 @@ class Tags implements \OCP\ITags {
 		}
 
 		if(count($defaultTags) > 0 && count($this->tags) === 0) {
-			$this->addMulti($defaultTags, true);
+			$this->addMultiple($defaultTags, true);
 		}
 		\OCP\Util::writeLog('core', __METHOD__.', tags: ' . print_r($this->tags, true),
 			\OCP\Util::DEBUG);
@@ -119,7 +119,7 @@ class Tags implements \OCP\ITags {
 				\OCP\Util::writeLog('core', __METHOD__. ', DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
 				return false;
 			}
-			return ($result->numRows() === 0);
+			return ((int)$result->numRows() === 0);
 		} catch(\Exception $e) {
 			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
 				\OCP\Util::ERROR);
@@ -138,7 +138,7 @@ class Tags implements \OCP\ITags {
 	*
 	* @return array
 	*/
-	public function tags() {
+	public function getTags() {
 		if(!count($this->tags)) {
 			return array();
 		}
@@ -167,7 +167,7 @@ class Tags implements \OCP\ITags {
 	* @param string|integer $tag Tag id or name.
 	* @return array An array of object ids or false on error.
 	*/
-	public function idsForTag($tag) {
+	public function getIdsForTag($tag) {
 		$result = null;
 		if(is_numeric($tag)) {
 			$tagId = $tag;
@@ -293,7 +293,7 @@ class Tags implements \OCP\ITags {
 	* @param int|null $id int Optional object id to add to this|these tag(s)
 	* @return bool Returns false on error.
 	*/
-	public function addMulti($names, $sync=false, $id = null) {
+	public function addMultiple($names, $sync=false, $id = null) {
 		if(!is_array($names)) {
 			$names = array($names);
 		}
@@ -456,7 +456,7 @@ class Tags implements \OCP\ITags {
 	*/
 	public function getFavorites() {
 		try {
-			return $this->idsForTag(self::TAG_FAVORITE);
+			return $this->getIdsForTag(self::TAG_FAVORITE);
 		} catch(\Exception $e) {
 			\OCP\Util::writeLog('core', __METHOD__.', exception: ' . $e->getMessage(),
 				\OCP\Util::ERROR);
diff --git a/tests/lib/tags.php b/tests/lib/tags.php
index 06baebc0af..16a03f5645 100644
--- a/tests/lib/tags.php
+++ b/tests/lib/tags.php
@@ -48,7 +48,7 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 		$tagMgr = new OC\Tags($this->user);
 		$tagMgr->loadTagsFor($this->objectType, $defaultTags);
 
-		$this->assertEquals(4, count($tagMgr->tags()));
+		$this->assertEquals(4, count($tagMgr->getTags()));
 	}
 
 	public function testAddTags() {
@@ -65,7 +65,37 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 		$this->assertFalse($tagMgr->add('Family'));
 		$this->assertFalse($tagMgr->add('fAMILY'));
 
-		$this->assertEquals(4, count($tagMgr->tags()));
+		$this->assertEquals(4, count($tagMgr->getTags()));
+	}
+
+	public function testAddMultiple() {
+		$tags = array('Friends', 'Family', 'Work', 'Other');
+
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType);
+
+		foreach($tags as $tag) {
+			$this->assertFalse($tagMgr->hasTag($tag));
+		}
+
+		$result = $tagMgr->addMultiple($tags);
+		$this->assertTrue((bool)$result);
+
+		foreach($tags as $tag) {
+			$this->assertTrue($tagMgr->hasTag($tag));
+		}
+
+		$this->assertEquals(4, count($tagMgr->getTags()));
+	}
+
+	public function testIsEmpty() {
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType);
+
+		$this->assertEquals(0, count($tagMgr->getTags()));
+		$this->assertTrue($tagMgr->isEmpty());
+		$tagMgr->add('Tag');
+		$this->assertFalse($tagMgr->isEmpty());
 	}
 
 	public function testdeleteTags() {
@@ -73,13 +103,13 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 		$tagMgr = new OC\Tags($this->user);
 		$tagMgr->loadTagsFor($this->objectType, $defaultTags);
 
-		$this->assertEquals(4, count($tagMgr->tags()));
+		$this->assertEquals(4, count($tagMgr->getTags()));
 
 		$tagMgr->delete('family');
-		$this->assertEquals(3, count($tagMgr->tags()));
+		$this->assertEquals(3, count($tagMgr->getTags()));
 
 		$tagMgr->delete(array('Friends', 'Work', 'Other'));
-		$this->assertEquals(0, count($tagMgr->tags()));
+		$this->assertEquals(0, count($tagMgr->getTags()));
 
 	}
 
@@ -105,8 +135,8 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 			$tagMgr->tagAs($id, 'Family');
 		}
 
-		$this->assertEquals(1, count($tagMgr->tags()));
-		$this->assertEquals(9, count($tagMgr->idsForTag('Family')));
+		$this->assertEquals(1, count($tagMgr->getTags()));
+		$this->assertEquals(9, count($tagMgr->getIdsForTag('Family')));
 	}
 
 	/**
@@ -121,13 +151,20 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 		$tagMgr->loadTagsFor($this->objectType);
 
 		foreach($objIds as $id) {
-			$this->assertTrue(in_array($id, $tagMgr->idsForTag('Family')));
+			$this->assertTrue(in_array($id, $tagMgr->getIdsForTag('Family')));
 			$tagMgr->unTag($id, 'Family');
-			$this->assertFalse(in_array($id, $tagMgr->idsForTag('Family')));
+			$this->assertFalse(in_array($id, $tagMgr->getIdsForTag('Family')));
 		}
 
-		$this->assertEquals(1, count($tagMgr->tags()));
-		$this->assertEquals(0, count($tagMgr->idsForTag('Family')));
+		$this->assertEquals(1, count($tagMgr->getTags()));
+		$this->assertEquals(0, count($tagMgr->getIdsForTag('Family')));
+	}
+
+	public function testFavorite() {
+		$tagMgr = new OC\Tags($this->user);
+		$tagMgr->loadTagsFor($this->objectType);
+		$this->assertTrue($tagMgr->addToFavorites(1));
+		$this->assertTrue($tagMgr->removeFromFavorites(1));
 	}
 
 }
-- 
GitLab


From 8fab9eef28d2146c2c65f7e7f1aa826216915301 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Thu, 19 Sep 2013 13:55:45 +0200
Subject: [PATCH 175/248] Add another test.

---
 tests/lib/tags.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/lib/tags.php b/tests/lib/tags.php
index 16a03f5645..92a96a1477 100644
--- a/tests/lib/tags.php
+++ b/tests/lib/tags.php
@@ -94,7 +94,7 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 
 		$this->assertEquals(0, count($tagMgr->getTags()));
 		$this->assertTrue($tagMgr->isEmpty());
-		$tagMgr->add('Tag');
+		$this->assertNotEquals(false, $tagMgr->add('Tag'));
 		$this->assertFalse($tagMgr->isEmpty());
 	}
 
-- 
GitLab


From 8a02afd87ae1e9a8d223f20ca2df35145a16ce74 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Mon, 23 Sep 2013 13:27:43 +0200
Subject: [PATCH 176/248] Added more error checking in add()

---
 lib/tags.php | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/lib/tags.php b/lib/tags.php
index 2eaa603c1a..e2e1a83dd9 100644
--- a/lib/tags.php
+++ b/lib/tags.php
@@ -233,17 +233,25 @@ class Tags implements \OCP\ITags {
 			return false;
 		}
 		try {
-			\OCP\DB::insertIfNotExist(self::TAG_TABLE,
+			$result = \OCP\DB::insertIfNotExist(
+				self::TAG_TABLE,
 				array(
 					'uid' => $this->user,
 					'type' => $this->type,
 					'category' => $name,
-				));
-			} catch(\Exception $e) {
-				\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-					\OCP\Util::ERROR);
+				)
+			);
+			if (\OCP\DB::isError($result)) {
+				\OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
 				return false;
+			} elseif((int)$result === 0) {
+				\OCP\Util::writeLog('core', __METHOD__.', Tag already exists: ' . $name, \OCP\Util::DEBUG);
 			}
+		} catch(\Exception $e) {
+			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+				\OCP\Util::ERROR);
+			return false;
+		}
 		$id = \OCP\DB::insertid(self::TAG_TABLE);
 		\OCP\Util::writeLog('core', __METHOD__.', id: ' . $id, \OCP\Util::DEBUG);
 		$this->tags[$id] = $name;
-- 
GitLab


From be402fab53bb4eb3ce027ef9d6edb089e356a820 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Mon, 23 Sep 2013 13:29:21 +0200
Subject: [PATCH 177/248] Forgot to return false if add() didn't add anything.

---
 lib/tags.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/tags.php b/lib/tags.php
index e2e1a83dd9..955eb3cd36 100644
--- a/lib/tags.php
+++ b/lib/tags.php
@@ -246,6 +246,7 @@ class Tags implements \OCP\ITags {
 				return false;
 			} elseif((int)$result === 0) {
 				\OCP\Util::writeLog('core', __METHOD__.', Tag already exists: ' . $name, \OCP\Util::DEBUG);
+				return false;
 			}
 		} catch(\Exception $e) {
 			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
-- 
GitLab


From 60bff6c5896c22b31ee7864fa48026a1de5ce3fb Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Mon, 23 Sep 2013 15:52:06 +0200
Subject: [PATCH 178/248] Use fetchOne() instead of numRows() when doing a
 COUNT(*).

---
 lib/tags.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/tags.php b/lib/tags.php
index 955eb3cd36..ff9f35ebc9 100644
--- a/lib/tags.php
+++ b/lib/tags.php
@@ -119,7 +119,7 @@ class Tags implements \OCP\ITags {
 				\OCP\Util::writeLog('core', __METHOD__. ', DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
 				return false;
 			}
-			return ((int)$result->numRows() === 0);
+			return ((int)$result->fetchOne() === 0);
 		} catch(\Exception $e) {
 			\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
 				\OCP\Util::ERROR);
-- 
GitLab


From f022ea752ddd86feccaaf5f1f83f808fd6df5e20 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Mon, 23 Sep 2013 15:52:50 +0200
Subject: [PATCH 179/248] Moar tests.

---
 tests/lib/tags.php | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/tests/lib/tags.php b/tests/lib/tags.php
index 92a96a1477..75db9f50f7 100644
--- a/tests/lib/tags.php
+++ b/tests/lib/tags.php
@@ -59,13 +59,14 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 
 		foreach($tags as $tag) {
 			$result = $tagMgr->add($tag);
+			$this->assertGreaterThan(0, $result, 'add() returned an ID <= 0');
 			$this->assertTrue((bool)$result);
 		}
 
 		$this->assertFalse($tagMgr->add('Family'));
 		$this->assertFalse($tagMgr->add('fAMILY'));
 
-		$this->assertEquals(4, count($tagMgr->getTags()));
+		$this->assertCount(4, $tagMgr->getTags(), 'Wrong number of added tags');
 	}
 
 	public function testAddMultiple() {
@@ -85,7 +86,7 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 			$this->assertTrue($tagMgr->hasTag($tag));
 		}
 
-		$this->assertEquals(4, count($tagMgr->getTags()));
+		$this->assertCount(4, $tagMgr->getTags(), 'Not all tags added');
 	}
 
 	public function testIsEmpty() {
@@ -94,7 +95,10 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 
 		$this->assertEquals(0, count($tagMgr->getTags()));
 		$this->assertTrue($tagMgr->isEmpty());
-		$this->assertNotEquals(false, $tagMgr->add('Tag'));
+
+		$result = $tagMgr->add('Tag');
+		$this->assertGreaterThan(0, $result, 'add() returned an ID <= 0');
+		$this->assertNotEquals(false, $result, 'add() returned false');
 		$this->assertFalse($tagMgr->isEmpty());
 	}
 
-- 
GitLab


From 4d3e7fa78a3c4692a7dc8587dd6e126866fc9870 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Wed, 18 Sep 2013 12:34:10 +0200
Subject: [PATCH 180/248] Add getUserFolder/getAppFolder to Server.

---
 lib/public/iservercontainer.php | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index 4478a4e8a6..dcf8c162e6 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -86,6 +86,20 @@ interface IServerContainer {
 	 */
 	function getCache();
 
+	/**
+	 * Returns a view to ownCloud's files folder
+	 *
+	 * @return \OCP\Files\Folder
+	 */
+	function getUserFolder();
+
+	/**
+	 * Returns an app-specific view in ownClouds data directory
+	 *
+	 * @return \OCP\Files\Folder
+	 */
+	function getAppFolder();
+
 	/**
 	 * Returns the current session
 	 *
-- 
GitLab


From f2de5a34eff78add366b7a89c93a8128a097996f Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Wed, 18 Sep 2013 14:25:12 +0200
Subject: [PATCH 181/248] Don't try to be clever

---
 lib/server.php | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/lib/server.php b/lib/server.php
index 804af6b0ea..dcfd0a2db9 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -148,6 +148,42 @@ class Server extends SimpleContainer implements IServerContainer {
 		return $this->query('RootFolder');
 	}
 
+	/**
+	 * Returns a view to ownCloud's files folder
+	 *
+	 * @return \OCP\Files\Folder
+	 */
+	function getUserFolder() {
+
+		$dir = '/files';
+		$root = $this->getRootFolder();
+		$folder = null;
+		if(!$root->nodeExists($dir)) {
+			$folder = $root->newFolder($dir);
+		} else {
+			$folder = $root->get($dir);
+		}
+		return $folder;
+	}
+
+	/**
+	 * Returns an app-specific view in ownClouds data directory
+	 *
+	 * @return \OCP\Files\Folder
+	 */
+	function getAppFolder() {
+
+		$dir = '/' . \OC_App::getCurrentApp();
+		$root = $this->getRootFolder();
+		$folder = null;
+		if(!$root->nodeExists($dir)) {
+			$folder = $root->newFolder($dir);
+		} else {
+			$folder = $root->get($dir);
+		}
+		return $folder;
+	}
+
 	/**
 	 * @return \OC\User\Manager
 	 */
-- 
GitLab


From 8c469394e61b0f13c4e111a7804e27273cf62458 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Tue, 24 Sep 2013 00:12:23 +0200
Subject: [PATCH 182/248] Remove duplicate method definitions

---
 lib/public/iservercontainer.php | 15 +--------------
 1 file changed, 1 insertion(+), 14 deletions(-)

diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index d3ee5d15dc..6d29132195 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -75,6 +75,7 @@ interface IServerContainer {
 	 * @return \OCP\Files\Folder
 	 */
 	function getAppFolder();
+
 	/**
 	 * Returns the user session
 	 *
@@ -99,20 +100,6 @@ interface IServerContainer {
 	 */
 	function getCache();
 
-	/**
-	 * Returns a view to ownCloud's files folder
-	 *
-	 * @return \OCP\Files\Folder
-	 */
-	function getUserFolder();
-
-	/**
-	 * Returns an app-specific view in ownClouds data directory
-	 *
-	 * @return \OCP\Files\Folder
-	 */
-	function getAppFolder();
-
 	/**
 	 * Returns the current session
 	 *
-- 
GitLab


From 235517f111a6d570e43cff1cd3701553412fc1a3 Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind@owncloud.com>
Date: Thu, 19 Sep 2013 21:37:52 +0200
Subject: [PATCH 183/248] clear permissions cache when scanning a file

---
 lib/files/cache/scanner.php           | 15 ++++++++++++---
 tests/lib/files/cache/permissions.php | 17 +++++++++++++++++
 2 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
index a986c1ca72..af819c47c6 100644
--- a/lib/files/cache/scanner.php
+++ b/lib/files/cache/scanner.php
@@ -36,6 +36,11 @@ class Scanner extends BasicEmitter {
 	 */
 	private $cache;
 
+	/**
+	 * @var \OC\Files\Cache\Permissions $permissionsCache
+	 */
+	private $permissionsCache;
+
 	const SCAN_RECURSIVE = true;
 	const SCAN_SHALLOW = false;
 
@@ -46,6 +51,7 @@ class Scanner extends BasicEmitter {
 		$this->storage = $storage;
 		$this->storageId = $this->storage->getId();
 		$this->cache = $storage->getCache();
+		$this->permissionsCache = $storage->getPermissionsCache();
 	}
 
 	/**
@@ -96,7 +102,11 @@ class Scanner extends BasicEmitter {
 					}
 				}
 				$newData = $data;
-				if ($reuseExisting and $cacheData = $this->cache->get($file)) {
+				$cacheData = $this->cache->get($file);
+				if ($cacheData) {
+					$this->permissionsCache->remove($cacheData['fileid']);
+				}
+				if ($reuseExisting and $cacheData) {
 					// prevent empty etag
 					$etag = $cacheData['etag'];
 					$propagateETagChange = false;
@@ -104,7 +114,6 @@ class Scanner extends BasicEmitter {
 						$etag = $data['etag'];
 						$propagateETagChange = true;
 					}
-
 					// only reuse data if the file hasn't explicitly changed
 					if (isset($data['mtime']) && isset($cacheData['mtime']) && $data['mtime'] === $cacheData['mtime']) {
 						if (($reuseExisting & self::REUSE_SIZE) && ($data['size'] === -1)) {
@@ -182,7 +191,7 @@ class Scanner extends BasicEmitter {
 		$newChildren = array();
 		if ($this->storage->is_dir($path) && ($dh = $this->storage->opendir($path))) {
 			\OC_DB::beginTransaction();
-			if(is_resource($dh)) {
+			if (is_resource($dh)) {
 				while (($file = readdir($dh)) !== false) {
 					$child = ($path) ? $path . '/' . $file : $file;
 					if (!Filesystem::isIgnoredDir($file)) {
diff --git a/tests/lib/files/cache/permissions.php b/tests/lib/files/cache/permissions.php
index 7e6e11e2eb..4b284c2c8e 100644
--- a/tests/lib/files/cache/permissions.php
+++ b/tests/lib/files/cache/permissions.php
@@ -8,6 +8,8 @@
 
 namespace Test\Files\Cache;
 
+use OC\Files\Storage\Temporary;
+
 class Permissions extends \PHPUnit_Framework_TestCase {
 	/***
 	 * @var \OC\Files\Cache\Permissions $permissionsCache
@@ -55,4 +57,19 @@ class Permissions extends \PHPUnit_Framework_TestCase {
 
 		$this->permissionsCache->removeMultiple($ids, $user);
 	}
+
+	public function testUpdatePermissionsOnRescan() {
+		$storage = new Temporary(array());
+		$scanner = $storage->getScanner();
+		$cache = $storage->getCache();
+		$permissionsCache = $storage->getPermissionsCache();
+
+		$storage->file_put_contents('foo.txt', 'bar');
+		$scanner->scan('');
+		$id = $cache->getId('foo.txt');
+		$permissionsCache->set($id, 'test', 1);
+
+		$scanner->scan('');
+		$this->assertEquals(-1, $permissionsCache->get($id, 'test'));
+	}
 }
-- 
GitLab


From 21299745846eaa87988dcc5acd6f5604b363b03e Mon Sep 17 00:00:00 2001
From: Andreas Fischer <bantu@owncloud.com>
Date: Tue, 24 Sep 2013 00:59:23 +0200
Subject: [PATCH 184/248] Do not recheck $cacheData. Move if($reuseExisting)
 under if($cacheData).

---
 lib/files/cache/scanner.php | 54 ++++++++++++++++++-------------------
 1 file changed, 27 insertions(+), 27 deletions(-)

diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
index af819c47c6..96f84609cf 100644
--- a/lib/files/cache/scanner.php
+++ b/lib/files/cache/scanner.php
@@ -105,39 +105,39 @@ class Scanner extends BasicEmitter {
 				$cacheData = $this->cache->get($file);
 				if ($cacheData) {
 					$this->permissionsCache->remove($cacheData['fileid']);
-				}
-				if ($reuseExisting and $cacheData) {
-					// prevent empty etag
-					$etag = $cacheData['etag'];
-					$propagateETagChange = false;
-					if (empty($etag)) {
-						$etag = $data['etag'];
-						$propagateETagChange = true;
-					}
-					// only reuse data if the file hasn't explicitly changed
-					if (isset($data['mtime']) && isset($cacheData['mtime']) && $data['mtime'] === $cacheData['mtime']) {
-						if (($reuseExisting & self::REUSE_SIZE) && ($data['size'] === -1)) {
-							$data['size'] = $cacheData['size'];
+					if ($reuseExisting) {
+						// prevent empty etag
+						$etag = $cacheData['etag'];
+						$propagateETagChange = false;
+						if (empty($etag)) {
+							$etag = $data['etag'];
+							$propagateETagChange = true;
 						}
-						if ($reuseExisting & self::REUSE_ETAG) {
-							$data['etag'] = $etag;
-							if ($propagateETagChange) {
-								$parent = $file;
-								while ($parent !== '') {
-									$parent = dirname($parent);
-									if ($parent === '.') {
-										$parent = '';
+						// only reuse data if the file hasn't explicitly changed
+						if (isset($data['mtime']) && isset($cacheData['mtime']) && $data['mtime'] === $cacheData['mtime']) {
+							if (($reuseExisting & self::REUSE_SIZE) && ($data['size'] === -1)) {
+								$data['size'] = $cacheData['size'];
+							}
+							if ($reuseExisting & self::REUSE_ETAG) {
+								$data['etag'] = $etag;
+								if ($propagateETagChange) {
+									$parent = $file;
+									while ($parent !== '') {
+										$parent = dirname($parent);
+										if ($parent === '.') {
+											$parent = '';
+										}
+										$parentCacheData = $this->cache->get($parent);
+										$this->cache->update($parentCacheData['fileid'], array(
+											'etag' => $this->storage->getETag($parent),
+										));
 									}
-									$parentCacheData = $this->cache->get($parent);
-									$this->cache->update($parentCacheData['fileid'], array(
-										'etag' => $this->storage->getETag($parent),
-									));
 								}
 							}
 						}
+						// Only update metadata that has changed
+						$newData = array_diff($data, $cacheData);
 					}
-					// Only update metadata that has changed
-					$newData = array_diff($data, $cacheData);
 				}
 				if (!empty($newData)) {
 					$this->cache->put($file, $newData);
-- 
GitLab


From 00c998c5bb611ea775f2b1a294ef4f2029a52c89 Mon Sep 17 00:00:00 2001
From: Boris Rybalkin <ribalkin@gmail.com>
Date: Mon, 23 Sep 2013 21:08:58 -0400
Subject: [PATCH 185/248] fixing typo

Typo in comment "feature" => "future"
---
 cron.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cron.php b/cron.php
index d39800c884..8e1a3376d5 100644
--- a/cron.php
+++ b/cron.php
@@ -79,7 +79,7 @@ try {
 
 		// We call ownCloud from the CLI (aka cron)
 		if ($appmode != 'cron') {
-			// Use cron in feature!
+			// Use cron in future!
 			OC_BackgroundJob::setExecutionType('cron');
 		}
 
-- 
GitLab


From cd2421c7ee04e6d46481a1d0ae36387757b204fe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 24 Sep 2013 10:37:58 +0200
Subject: [PATCH 186/248] adding PHPDoc comments to getBackend ensure
 getChildren() is called on an instance of Share_Backend_Collection

---
 apps/files_sharing/lib/cache.php | 15 ++++++++++-----
 lib/public/share.php             |  4 ++--
 2 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
index 51e8713b97..123268e240 100644
--- a/apps/files_sharing/lib/cache.php
+++ b/apps/files_sharing/lib/cache.php
@@ -20,6 +20,7 @@
  */
 
 namespace OC\Files\Cache;
+use OCP\Share_Backend_Collection;
 
 /**
  * Metadata cache for shared files
@@ -320,13 +321,17 @@ class Shared_Cache extends Cache {
 	public function getAll() {
 		$ids = \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_GET_ALL);
 		$folderBackend = \OCP\Share::getBackend('folder');
-		foreach ($ids as $file) {
-			$children = $folderBackend->getChildren($file);
-			foreach ($children as $child) {
-				$ids[] = (int)$child['source'];
+		if ($folderBackend instanceof Share_Backend_Collection) {
+			foreach ($ids as $file) {
+				/** @var $folderBackend Share_Backend_Collection */
+				$children = $folderBackend->getChildren($file);
+				foreach ($children as $child) {
+					$ids[] = (int)$child['source'];
+				}
+
 			}
-			
 		}
+
 		return $ids;
 	}
 
diff --git a/lib/public/share.php b/lib/public/share.php
index 10922965ea..41f5ccbf40 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -745,8 +745,8 @@ class Share {
 
 	/**
 	* @brief Get the backend class for the specified item type
-	* @param string Item type
-	* @return Sharing backend object
+	* @param string $itemType
+	* @return Share_Backend
 	*/
 	public static function getBackend($itemType) {
 		if (isset(self::$backends[$itemType])) {
-- 
GitLab


From 31d2048eb83d60007183cec43a54d7a112d7a3b2 Mon Sep 17 00:00:00 2001
From: Georg Ehrke <developer@georgehrke.com>
Date: Tue, 24 Sep 2013 11:00:08 +0200
Subject: [PATCH 187/248] add blacklist to txt preview backend

---
 lib/preview/txt.php | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/lib/preview/txt.php b/lib/preview/txt.php
index a487330691..77e728eb36 100644
--- a/lib/preview/txt.php
+++ b/lib/preview/txt.php
@@ -9,11 +9,21 @@ namespace OC\Preview;
 
 class TXT extends Provider {
 
+	private static $blacklist = array(
+		'text/calendar',
+		'text/vcard',
+	);
+
 	public function getMimeType() {
 		return '/text\/.*/';
 	}
 
 	public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+		$mimetype = $fileview->getMimeType($path);
+		if(in_array($mimetype, self::$blacklist)) {
+			return false;
+		}
+
 		$content = $fileview->fopen($path, 'r');
 		$content = stream_get_contents($content);
 
-- 
GitLab


From b693b5085c3da7a3242c1efe9251c2f579027d76 Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Tue, 24 Sep 2013 13:08:55 +0200
Subject: [PATCH 188/248] don't remember login if the encrypion app is enabled
 because the user needs to log-in again in order to decrypt his private key
 with his password

---
 core/templates/login.php |  3 ++-
 lib/base.php             |  1 +
 lib/util.php             | 13 +++++++------
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/core/templates/login.php b/core/templates/login.php
index ee761f0aa5..3e736f164e 100644
--- a/core/templates/login.php
+++ b/core/templates/login.php
@@ -32,9 +32,10 @@
 			<?php p($l->t('Lost your password?')); ?>
 		</a>
 		<?php endif; ?>
-
+		<?php if ($_['encryption_enabled'] === false) : ?>
 		<input type="checkbox" name="remember_login" value="1" id="remember_login" checked />
 		<label for="remember_login"><?php p($l->t('remember')); ?></label>
+		<?php endif; ?>
 		<input type="hidden" name="timezone-offset" id="timezone-offset"/>
 		<input type="submit" id="submit" class="login primary" value="<?php p($l->t('Log in')); ?>"/>
 	</fieldset>
diff --git a/lib/base.php b/lib/base.php
index 395d8486a5..b4e12bc7eb 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -760,6 +760,7 @@ class OC {
 			|| !isset($_COOKIE["oc_token"])
 			|| !isset($_COOKIE["oc_username"])
 			|| !$_COOKIE["oc_remember_login"]
+			|| OC_App::isEnabled('files_encryption')
 		) {
 			return false;
 		}
diff --git a/lib/util.php b/lib/util.php
index 41f5f1d16b..ef42ff2aea 100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -414,10 +414,10 @@ class OC_Util {
 				$encryptedFiles = true;
 			}
 		}
-		
+
 		return $encryptedFiles;
 	}
-	
+
 	/**
 	 * @brief Check for correct file permissions of data directory
 	 * @paran string $dataDirectory
@@ -467,6 +467,7 @@ class OC_Util {
 		}
 
 		$parameters['alt_login'] = OC_App::getAlternativeLogIns();
+		$parameters['encryption_enabled'] = OC_App::isEnabled('files_encryption');
 		OC_Template::printGuestPage("", "login", $parameters);
 	}
 
@@ -654,16 +655,16 @@ class OC_Util {
 		}
 		return $value;
 	}
-	
+
 	/**
 	 * @brief Public function to encode url parameters
 	 *
 	 * This function is used to encode path to file before output.
 	 * Encoding is done according to RFC 3986 with one exception:
-	 * Character '/' is preserved as is. 
+	 * Character '/' is preserved as is.
 	 *
 	 * @param string $component part of URI to encode
-	 * @return string 
+	 * @return string
 	 */
 	public static function encodePath($component) {
 		$encoded = rawurlencode($component);
@@ -810,7 +811,7 @@ class OC_Util {
 			}
 		}
 	}
-	
+
 	/**
 	 * @brief Check if the connection to the internet is disabled on purpose
 	 * @return bool
-- 
GitLab


From ee1f627155cad4153f3da3160ca6040c137841d3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 24 Sep 2013 13:26:12 +0200
Subject: [PATCH 189/248] adding privilege check on move and rename operations

---
 lib/connector/sabre/node.php       | 11 +++++++++++
 lib/connector/sabre/objecttree.php | 24 +++++++++++++++++++++++-
 2 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/lib/connector/sabre/node.php b/lib/connector/sabre/node.php
index 0bffa58af7..29b7f9e53a 100644
--- a/lib/connector/sabre/node.php
+++ b/lib/connector/sabre/node.php
@@ -78,6 +78,11 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
 	 */
 	public function setName($name) {
 
+		// rename is only allowed if the update privilege is granted
+		if (!\OC\Files\Filesystem::isUpdatable($this->path)) {
+			throw new \Sabre_DAV_Exception_Forbidden();
+		}
+
 		list($parentPath, ) = Sabre_DAV_URLUtil::splitPath($this->path);
 		list(, $newName) = Sabre_DAV_URLUtil::splitPath($name);
 
@@ -135,6 +140,12 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
 	 *  Even if the modification time is set to a custom value the access time is set to now.
 	 */
 	public function touch($mtime) {
+
+		// touch is only allowed if the update privilege is granted
+		if (!\OC\Files\Filesystem::isUpdatable($this->path)) {
+			throw new \Sabre_DAV_Exception_Forbidden();
+		}
+
 		\OC\Files\Filesystem::touch($this->path, $mtime);
 	}
 
diff --git a/lib/connector/sabre/objecttree.php b/lib/connector/sabre/objecttree.php
index acff45ed5e..7accf98c8e 100644
--- a/lib/connector/sabre/objecttree.php
+++ b/lib/connector/sabre/objecttree.php
@@ -64,7 +64,29 @@ class ObjectTree extends \Sabre_DAV_ObjectTree {
 		list($sourceDir,) = \Sabre_DAV_URLUtil::splitPath($sourcePath);
 		list($destinationDir,) = \Sabre_DAV_URLUtil::splitPath($destinationPath);
 
-		Filesystem::rename($sourcePath, $destinationPath);
+		// check update privileges
+		if ($sourceDir === $destinationDir) {
+			// for renaming it's enough to check if the sourcePath can be updated
+			if (!\OC\Files\Filesystem::isUpdatable($sourcePath)) {
+				throw new \Sabre_DAV_Exception_Forbidden();
+			}
+		} else {
+			// for a full move we need update privileges on sourcePath and sourceDir as well as destinationDir
+			if (!\OC\Files\Filesystem::isUpdatable($sourcePath)) {
+				throw new \Sabre_DAV_Exception_Forbidden();
+			}
+			if (!\OC\Files\Filesystem::isUpdatable($sourceDir)) {
+				throw new \Sabre_DAV_Exception_Forbidden();
+			}
+			if (!\OC\Files\Filesystem::isUpdatable($destinationDir)) {
+				throw new \Sabre_DAV_Exception_Forbidden();
+			}
+		}
+
+		$renameOkay = Filesystem::rename($sourcePath, $destinationPath);
+		if (!$renameOkay) {
+			throw new \Sabre_DAV_Exception_Forbidden('');
+		}
 
 		$this->markDirty($sourceDir);
 		$this->markDirty($destinationDir);
-- 
GitLab


From 52f1d5856dfaa9186a05d529674c2dbab9cc90b7 Mon Sep 17 00:00:00 2001
From: Georg Ehrke <developer@georgehrke.com>
Date: Tue, 24 Sep 2013 13:26:51 +0200
Subject: [PATCH 190/248] add test data for cal and contact preview

---
 tests/data/testcal.ics     | 13 +++++++++++++
 tests/data/testcontact.vcf |  6 ++++++
 2 files changed, 19 insertions(+)
 create mode 100644 tests/data/testcal.ics
 create mode 100644 tests/data/testcontact.vcf

diff --git a/tests/data/testcal.ics b/tests/data/testcal.ics
new file mode 100644
index 0000000000..e05f01ba1c
--- /dev/null
+++ b/tests/data/testcal.ics
@@ -0,0 +1,13 @@
+BEGIN:VCALENDAR
+PRODID:-//some random cal software//EN
+VERSION:2.0
+BEGIN:VEVENT
+CREATED:20130102T120000Z
+LAST-MODIFIED:20130102T120000Z
+DTSTAMP:20130102T120000Z
+UID:f106ecdf-c716-43ef-9d94-4e6f19f2fcfb
+SUMMARY:a test cal file
+DTSTART;VALUE=DATE:20130101
+DTEND;VALUE=DATE:20130102
+END:VEVENT
+END:VCALENDAR
\ No newline at end of file
diff --git a/tests/data/testcontact.vcf b/tests/data/testcontact.vcf
new file mode 100644
index 0000000000..2af963d691
--- /dev/null
+++ b/tests/data/testcontact.vcf
@@ -0,0 +1,6 @@
+BEGIN:VCARD
+VERSION:3.0
+PRODID:-//some random contact software//EN
+N:def;abc;;;
+FN:abc def
+END:VCARD
\ No newline at end of file
-- 
GitLab


From d101ff42f16ef7288b40666eba20c69621481ea4 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon <blizzz@owncloud.com>
Date: Mon, 16 Sep 2013 14:15:35 +0200
Subject: [PATCH 191/248] User: move checkPassword from User to Manager to not
 break API

---
 lib/public/user.php        |  2 +-
 lib/user.php               | 14 +++++---------
 lib/user/http.php          |  6 +++++-
 lib/user/manager.php       | 17 +++++++++++++++++
 lib/user/session.php       | 19 ++++++++++---------
 lib/user/user.php          | 18 ------------------
 tests/lib/user/session.php | 32 ++++++++++----------------------
 7 files changed, 48 insertions(+), 60 deletions(-)

diff --git a/lib/public/user.php b/lib/public/user.php
index 23ff991642..576a64d704 100644
--- a/lib/public/user.php
+++ b/lib/public/user.php
@@ -102,7 +102,7 @@ class User {
 	 * @brief Check if the password is correct
 	 * @param $uid The username
 	 * @param $password The password
-	 * @returns true/false
+	 * @returns mixed username on success, false otherwise
 	 *
 	 * Check if the password is correct without logging in the user
 	 */
diff --git a/lib/user.php b/lib/user.php
index 0f6f40aec9..8868428ce2 100644
--- a/lib/user.php
+++ b/lib/user.php
@@ -416,16 +416,12 @@ class OC_User {
 	 * returns the user id or false
 	 */
 	public static function checkPassword($uid, $password) {
-		$user = self::getManager()->get($uid);
-		if ($user) {
-			if ($user->checkPassword($password)) {
-				return $user->getUID();
-			} else {
-				return false;
-			}
-		} else {
-			return false;
+		$manager = self::getManager();
+		$username = $manager->checkPassword($uid, $password);
+		if ($username !== false) {
+			return $manger->get($username);
 		}
+		return false;
 	}
 
 	/**
diff --git a/lib/user/http.php b/lib/user/http.php
index 1e044ed418..ea14cb57c9 100644
--- a/lib/user/http.php
+++ b/lib/user/http.php
@@ -79,7 +79,11 @@ class OC_User_HTTP extends OC_User_Backend {
 
 		curl_close($ch);
 
-		return $status==200;
+		if($status == 200) {
+			return $uid;
+		}
+
+		return false;
 	}
 
 	/**
diff --git a/lib/user/manager.php b/lib/user/manager.php
index 8dc9bfe272..2de694a3d9 100644
--- a/lib/user/manager.php
+++ b/lib/user/manager.php
@@ -118,6 +118,23 @@ class Manager extends PublicEmitter {
 		return ($user !== null);
 	}
 
+	/**
+	 * Check if the password is valid for the user
+	 *
+	 * @param $loginname
+	 * @param $password
+	 * @return mixed the User object on success, false otherwise
+	 */
+	public function checkPassword($loginname, $password) {
+		foreach ($this->backends as $backend) {
+			$uid = $backend->checkPassword($loginname, $password);
+			if ($uid !== false) {
+				return $this->getUserObject($uid, $backend);
+			}
+		}
+		return null;
+	}
+
 	/**
 	 * search by user id
 	 *
diff --git a/lib/user/session.php b/lib/user/session.php
index 9a6c669e93..b5e9385234 100644
--- a/lib/user/session.php
+++ b/lib/user/session.php
@@ -121,15 +121,16 @@ class Session implements Emitter {
 	 */
 	public function login($uid, $password) {
 		$this->manager->emit('\OC\User', 'preLogin', array($uid, $password));
-		$user = $this->manager->get($uid);
-		if ($user) {
-			$result = $user->checkPassword($password);
-			if ($result and $user->isEnabled()) {
-				$this->setUser($user);
-				$this->manager->emit('\OC\User', 'postLogin', array($user, $password));
-				return true;
-			} else {
-				return false;
+		$user = $this->manager->checkPassword($uid, $password);
+		if($user !== false) {
+			if (!is_null($user)) {
+				if ($user->isEnabled()) {
+					$this->setUser($user);
+					$this->manager->emit('\OC\User', 'postLogin', array($user, $password));
+					return true;
+				} else {
+					return false;
+				}
 			}
 		} else {
 			return false;
diff --git a/lib/user/user.php b/lib/user/user.php
index 8115c43198..e5f842944f 100644
--- a/lib/user/user.php
+++ b/lib/user/user.php
@@ -105,24 +105,6 @@ class User {
 		return !($result === false);
 	}
 
-	/**
-	 * Check if the password is valid for the user
-	 *
-	 * @param $password
-	 * @return bool
-	 */
-	public function checkPassword($password) {
-		if ($this->backend->implementsActions(\OC_USER_BACKEND_CHECK_PASSWORD)) {
-			$result = $this->backend->checkPassword($this->uid, $password);
-			if ($result !== false) {
-				$this->uid = $result;
-			}
-			return !($result === false);
-		} else {
-			return false;
-		}
-	}
-
 	/**
 	 * Set the password of the user
 	 *
diff --git a/tests/lib/user/session.php b/tests/lib/user/session.php
index 274e9e2831..e457a7bda3 100644
--- a/tests/lib/user/session.php
+++ b/tests/lib/user/session.php
@@ -61,10 +61,6 @@ class Session extends \PHPUnit_Framework_TestCase {
 		$backend = $this->getMock('OC_User_Dummy');
 
 		$user = $this->getMock('\OC\User\User', array(), array('foo', $backend));
-		$user->expects($this->once())
-			->method('checkPassword')
-			->with('bar')
-			->will($this->returnValue(true));
 		$user->expects($this->once())
 			->method('isEnabled')
 			->will($this->returnValue(true));
@@ -73,8 +69,8 @@ class Session extends \PHPUnit_Framework_TestCase {
 			->will($this->returnValue('foo'));
 
 		$manager->expects($this->once())
-			->method('get')
-			->with('foo')
+			->method('checkPassword')
+			->with('foo', 'bar')
 			->will($this->returnValue($user));
 
 		$userSession = new \OC\User\Session($manager, $session);
@@ -92,17 +88,13 @@ class Session extends \PHPUnit_Framework_TestCase {
 		$backend = $this->getMock('OC_User_Dummy');
 
 		$user = $this->getMock('\OC\User\User', array(), array('foo', $backend));
-		$user->expects($this->once())
-			->method('checkPassword')
-			->with('bar')
-			->will($this->returnValue(true));
 		$user->expects($this->once())
 			->method('isEnabled')
 			->will($this->returnValue(false));
 
 		$manager->expects($this->once())
-			->method('get')
-			->with('foo')
+			->method('checkPassword')
+			->with('foo', 'bar')
 			->will($this->returnValue($user));
 
 		$userSession = new \OC\User\Session($manager, $session);
@@ -119,17 +111,13 @@ class Session extends \PHPUnit_Framework_TestCase {
 		$backend = $this->getMock('OC_User_Dummy');
 
 		$user = $this->getMock('\OC\User\User', array(), array('foo', $backend));
-		$user->expects($this->once())
-			->method('checkPassword')
-			->with('bar')
-			->will($this->returnValue(false));
 		$user->expects($this->never())
 			->method('isEnabled');
 
 		$manager->expects($this->once())
-			->method('get')
-			->with('foo')
-			->will($this->returnValue($user));
+			->method('checkPassword')
+			->with('foo', 'bar')
+			->will($this->returnValue(false));
 
 		$userSession = new \OC\User\Session($manager, $session);
 		$userSession->login('foo', 'bar');
@@ -145,9 +133,9 @@ class Session extends \PHPUnit_Framework_TestCase {
 		$backend = $this->getMock('OC_User_Dummy');
 
 		$manager->expects($this->once())
-			->method('get')
-			->with('foo')
-			->will($this->returnValue(null));
+			->method('checkPassword')
+			->with('foo', 'bar')
+			->will($this->returnValue(false));
 
 		$userSession = new \OC\User\Session($manager, $session);
 		$userSession->login('foo', 'bar');
-- 
GitLab


From fe88a62d6e9ee4bb138ac4fb0fe81d8fbe082e09 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon <blizzz@owncloud.com>
Date: Tue, 24 Sep 2013 13:51:33 +0200
Subject: [PATCH 192/248] === not ==

---
 lib/user/http.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/user/http.php b/lib/user/http.php
index ea14cb57c9..e99afe59ba 100644
--- a/lib/user/http.php
+++ b/lib/user/http.php
@@ -79,7 +79,7 @@ class OC_User_HTTP extends OC_User_Backend {
 
 		curl_close($ch);
 
-		if($status == 200) {
+		if($status === 200) {
 			return $uid;
 		}
 
-- 
GitLab


From 6c5466a540340a22e487d71a2605dcda3498a658 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 24 Sep 2013 13:53:32 +0200
Subject: [PATCH 193/248] adding file_exists check just to be on the save side

---
 lib/connector/sabre/directory.php | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php
index 9e0fe5e64e..a50098df79 100644
--- a/lib/connector/sabre/directory.php
+++ b/lib/connector/sabre/directory.php
@@ -89,7 +89,8 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
 
 			// rename to correct path
 			$renameOkay = \OC\Files\Filesystem::rename($partpath, $newPath);
-			if (!$renameOkay) {
+			$fileExists = \OC\Files\Filesystem::file_exists($newPath);
+			if ($renameOkay === false || $fileExists === false) {
 				\OC_Log::write('webdav', '\OC\Files\Filesystem::rename() failed', \OC_Log::ERROR);
 				\OC\Files\Filesystem::unlink($partpath);
 				throw new Sabre_DAV_Exception();
-- 
GitLab


From e9eb34f1872a0237b7474496e8c759a4a3ef1156 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 24 Sep 2013 13:54:18 +0200
Subject: [PATCH 194/248] duplicate code :sigh: - will fix this in a second pr

---
 lib/connector/sabre/file.php | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php
index 61bdcd5e0a..433b114855 100644
--- a/lib/connector/sabre/file.php
+++ b/lib/connector/sabre/file.php
@@ -74,7 +74,14 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
 		}
 
 		// rename to correct path
-		\OC\Files\Filesystem::rename($partpath, $this->path);
+		$renameOkay = \OC\Files\Filesystem::rename($partpath, $this->path);
+		$fileExists = \OC\Files\Filesystem::file_exists($this->path);
+		if ($renameOkay === false || $fileExists === false) {
+			\OC_Log::write('webdav', '\OC\Files\Filesystem::rename() failed', \OC_Log::ERROR);
+			\OC\Files\Filesystem::unlink($partpath);
+			throw new Sabre_DAV_Exception();
+		}
+
 
 		//allow sync clients to send the mtime along in a header
 		$mtime = OC_Request::hasModificationTime();
-- 
GitLab


From 0a7ee7c3f7b6825815a5aae1e41725481dbbfb08 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon <blizzz@owncloud.com>
Date: Tue, 24 Sep 2013 14:11:47 +0200
Subject: [PATCH 195/248] Fix return value from User object to User ID

---
 lib/user.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/user.php b/lib/user.php
index 8868428ce2..ba6036bad9 100644
--- a/lib/user.php
+++ b/lib/user.php
@@ -419,7 +419,7 @@ class OC_User {
 		$manager = self::getManager();
 		$username = $manager->checkPassword($uid, $password);
 		if ($username !== false) {
-			return $manger->get($username);
+			return $manager->get($username)->getUID();
 		}
 		return false;
 	}
-- 
GitLab


From 63324e23472071f34746e2f6132a6246babe7e74 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon <blizzz@owncloud.com>
Date: Tue, 24 Sep 2013 14:12:44 +0200
Subject: [PATCH 196/248] Fix doc

---
 lib/user.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/user.php b/lib/user.php
index ba6036bad9..da774ff86f 100644
--- a/lib/user.php
+++ b/lib/user.php
@@ -410,7 +410,7 @@ class OC_User {
 	 * @brief Check if the password is correct
 	 * @param string $uid The username
 	 * @param string $password The password
-	 * @return bool
+	 * @return mixed user id a string on success, false otherwise
 	 *
 	 * Check if the password is correct without logging in the user
 	 * returns the user id or false
-- 
GitLab


From 14a160e176135cb86191eed46b4cc3b3b0e58f44 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon <blizzz@owncloud.com>
Date: Tue, 24 Sep 2013 17:10:01 +0200
Subject: [PATCH 197/248] Adjust Tests and satisfy them

---
 lib/user/manager.php       | 10 +++++----
 tests/lib/user/manager.php | 45 ++++++++++++++++++++++++++++++++++++++
 tests/lib/user/user.php    | 40 ---------------------------------
 3 files changed, 51 insertions(+), 44 deletions(-)

diff --git a/lib/user/manager.php b/lib/user/manager.php
index 2de694a3d9..13286bc28a 100644
--- a/lib/user/manager.php
+++ b/lib/user/manager.php
@@ -127,12 +127,14 @@ class Manager extends PublicEmitter {
 	 */
 	public function checkPassword($loginname, $password) {
 		foreach ($this->backends as $backend) {
-			$uid = $backend->checkPassword($loginname, $password);
-			if ($uid !== false) {
-				return $this->getUserObject($uid, $backend);
+			if($backend->implementsActions(\OC_USER_BACKEND_CHECK_PASSWORD)) {
+				$uid = $backend->checkPassword($loginname, $password);
+				if ($uid !== false) {
+					return $this->getUserObject($uid, $backend);
+				}
 			}
 		}
-		return null;
+		return false;
 	}
 
 	/**
diff --git a/tests/lib/user/manager.php b/tests/lib/user/manager.php
index bc49f6db4b..00901dd411 100644
--- a/tests/lib/user/manager.php
+++ b/tests/lib/user/manager.php
@@ -98,6 +98,51 @@ class Manager extends \PHPUnit_Framework_TestCase {
 		$this->assertTrue($manager->userExists('foo'));
 	}
 
+	public function testCheckPassword() {
+		/**
+		 * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+		 */
+		$backend = $this->getMock('\OC_User_Dummy');
+		$backend->expects($this->once())
+			->method('checkPassword')
+			->with($this->equalTo('foo'), $this->equalTo('bar'))
+			->will($this->returnValue(true));
+
+		$backend->expects($this->any())
+			->method('implementsActions')
+			->will($this->returnCallback(function ($actions) {
+				if ($actions === \OC_USER_BACKEND_CHECK_PASSWORD) {
+					return true;
+				} else {
+					return false;
+				}
+			}));
+
+		$manager = new \OC\User\Manager();
+		$manager->registerBackend($backend);
+
+		$user = $manager->checkPassword('foo', 'bar');
+		$this->assertTrue($user instanceof \OC\User\User);
+	}
+
+	public function testCheckPasswordNotSupported() {
+		/**
+		 * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+		 */
+		$backend = $this->getMock('\OC_User_Dummy');
+		$backend->expects($this->never())
+			->method('checkPassword');
+
+		$backend->expects($this->any())
+			->method('implementsActions')
+			->will($this->returnValue(false));
+
+		$manager = new \OC\User\Manager();
+		$manager->registerBackend($backend);
+
+		$this->assertFalse($manager->checkPassword('foo', 'bar'));
+	}
+
 	public function testGetOneBackendExists() {
 		/**
 		 * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend
diff --git a/tests/lib/user/user.php b/tests/lib/user/user.php
index b0d170cbfc..de5ccbf38c 100644
--- a/tests/lib/user/user.php
+++ b/tests/lib/user/user.php
@@ -100,46 +100,6 @@ class User extends \PHPUnit_Framework_TestCase {
 		$this->assertTrue($user->delete());
 	}
 
-	public function testCheckPassword() {
-		/**
-		 * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
-		 */
-		$backend = $this->getMock('\OC_User_Dummy');
-		$backend->expects($this->once())
-			->method('checkPassword')
-			->with($this->equalTo('foo'), $this->equalTo('bar'))
-			->will($this->returnValue(true));
-
-		$backend->expects($this->any())
-			->method('implementsActions')
-			->will($this->returnCallback(function ($actions) {
-				if ($actions === \OC_USER_BACKEND_CHECK_PASSWORD) {
-					return true;
-				} else {
-					return false;
-				}
-			}));
-
-		$user = new \OC\User\User('foo', $backend);
-		$this->assertTrue($user->checkPassword('bar'));
-	}
-
-	public function testCheckPasswordNotSupported() {
-		/**
-		 * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
-		 */
-		$backend = $this->getMock('\OC_User_Dummy');
-		$backend->expects($this->never())
-			->method('checkPassword');
-
-		$backend->expects($this->any())
-			->method('implementsActions')
-			->will($this->returnValue(false));
-
-		$user = new \OC\User\User('foo', $backend);
-		$this->assertFalse($user->checkPassword('bar'));
-	}
-
 	public function testGetHome() {
 		/**
 		 * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
-- 
GitLab


From aaed871cee445633cb81f0aa230ba2f65c667803 Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Tue, 24 Sep 2013 17:10:01 +0200
Subject: [PATCH 198/248] Add factory class for the server container.

---
 lib/public/iservercontainer.php |  3 +-
 lib/public/itagmanager.php      | 48 +++++++++++++++++
 lib/public/itags.php            |  9 ----
 lib/server.php                  |  3 +-
 lib/tagmanager.php              | 68 ++++++++++++++++++++++++
 lib/tags.php                    | 28 +++++++---
 tests/lib/tags.php              | 92 +++++++++++++++------------------
 7 files changed, 182 insertions(+), 69 deletions(-)
 create mode 100644 lib/public/itagmanager.php
 create mode 100644 lib/tagmanager.php

diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index 0df746a28e..f37bdb10f8 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -58,7 +58,8 @@ interface IServerContainer {
 	/**
 	 * Returns the tag manager which can get and set tags for different object types
 	 *
-	 * @return \OCP\ITags
+	 * @see \OCP\ITagManager::load()
+	 * @return \OCP\ITagManager
 	 */
 	function getTagManager();
 
diff --git a/lib/public/itagmanager.php b/lib/public/itagmanager.php
new file mode 100644
index 0000000000..07e1d12fc0
--- /dev/null
+++ b/lib/public/itagmanager.php
@@ -0,0 +1,48 @@
+<?php
+/**
+* ownCloud
+*
+* @author Thomas Tanghus
+* @copyright 2013 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/>.
+*
+*/
+
+/**
+ * Factory class creating instances of \OCP\ITags
+ *
+ * A tag can be e.g. 'Family', 'Work', 'Chore', 'Special Occation' or
+ * anything else that is either parsed from a vobject or that the user chooses
+ * to add.
+ * Tag names are not case-sensitive, but will be saved with the case they
+ * are entered in. If a user already has a tag 'family' for a type, and
+ * tries to add a tag named 'Family' it will be silently ignored.
+ */
+
+namespace OCP;
+
+interface ITagManager {
+
+	/**
+	* Create a new \OCP\ITags instance and load tags from db.
+	*
+	* @see \OCP\ITags
+	* @param string $type The type identifier e.g. 'contact' or 'event'.
+	* @param array $defaultTags An array of default tags to be used if none are stored.
+	* @return \OCP\ITags
+	*/
+	public function load($type, $defaultTags=array());
+
+}
\ No newline at end of file
diff --git a/lib/public/itags.php b/lib/public/itags.php
index 1264340054..5b1ebd189d 100644
--- a/lib/public/itags.php
+++ b/lib/public/itags.php
@@ -38,15 +38,6 @@ namespace OCP;
 
 interface ITags {
 
-	/**
-	* Load tags from db.
-	*
-	* @param string $type The type identifier e.g. 'contact' or 'event'.
-	* @param array $defaultTags An array of default tags to be used if none are stored.
-	* @return \OCP\ITags
-	*/
-	public function loadTagsFor($type, $defaultTags=array());
-
 	/**
 	* Check if any tags are saved for this type and user.
 	*
diff --git a/lib/server.php b/lib/server.php
index f3c79aa797..c47f0e2b46 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -146,7 +146,8 @@ class Server extends SimpleContainer implements IServerContainer {
 	/**
 	 * Returns the tag manager which can get and set tags for different object types
 	 *
-	 * @return \OCP\ITags
+	 * @see \OCP\ITagManager::load()
+	 * @return \OCP\ITagManager
 	 */
 	function getTagManager() {
 		return $this->query('TagManager');
diff --git a/lib/tagmanager.php b/lib/tagmanager.php
new file mode 100644
index 0000000000..9a371a1125
--- /dev/null
+++ b/lib/tagmanager.php
@@ -0,0 +1,68 @@
+<?php
+/**
+* ownCloud
+*
+* @author Thomas Tanghus
+* @copyright 2013 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/>.
+*
+*/
+
+/**
+ * Factory class creating instances of \OCP\ITags
+ *
+ * A tag can be e.g. 'Family', 'Work', 'Chore', 'Special Occation' or
+ * anything else that is either parsed from a vobject or that the user chooses
+ * to add.
+ * Tag names are not case-sensitive, but will be saved with the case they
+ * are entered in. If a user already has a tag 'family' for a type, and
+ * tries to add a tag named 'Family' it will be silently ignored.
+ */
+
+namespace OC;
+
+class TagManager implements \OCP\ITagManager {
+
+	/**
+	 * User
+	 *
+	 * @var string
+	 */
+	private $user = null;
+
+	/**
+	* Constructor.
+	*
+	* @param string $user The user whos data the object will operate on.
+	*/
+	public function __construct($user) {
+
+		$this->user = $user;
+
+	}
+
+	/**
+	* Create a new \OCP\ITags instance and load tags from db.
+	*
+	* @see \OCP\ITags
+	* @param string $type The type identifier e.g. 'contact' or 'event'.
+	* @param array $defaultTags An array of default tags to be used if none are stored.
+	* @return \OCP\ITags
+	*/
+	public function load($type, $defaultTags=array()) {
+		return new Tags($this->user, $type, $defaultTags);
+	}
+
+}
\ No newline at end of file
diff --git a/lib/tags.php b/lib/tags.php
index ff9f35ebc9..9fdb35a7d6 100644
--- a/lib/tags.php
+++ b/lib/tags.php
@@ -38,15 +38,30 @@ class Tags implements \OCP\ITags {
 
 	/**
 	 * Tags
+	 *
+	 * @var array
 	 */
 	private $tags = array();
 
 	/**
 	 * Used for storing objectid/categoryname pairs while rescanning.
+	 *
+	 * @var array
 	 */
 	private static $relations = array();
 
+	/**
+	 * Type
+	 *
+	 * @var string
+	 */
 	private $type = null;
+
+	/**
+	 * User
+	 *
+	 * @var string
+	 */
 	private $user = null;
 
 	const TAG_TABLE = '*PREFIX*vcategory';
@@ -59,10 +74,10 @@ class Tags implements \OCP\ITags {
 	*
 	* @param string $user The user whos data the object will operate on.
 	*/
-	public function __construct($user) {
-
+	public function __construct($user, $type, $defaultTags = array()) {
 		$this->user = $user;
-
+		$this->type = $type;
+		$this->loadTags($defaultTags);
 	}
 
 	/**
@@ -70,10 +85,8 @@ class Tags implements \OCP\ITags {
 	*
 	* @param string $type The type identifier e.g. 'contact' or 'event'.
 	* @param array $defaultTags An array of default tags to be used if none are stored.
-	* @return \OCP\ITags
 	*/
-	public function loadTagsFor($type, $defaultTags=array()) {
-		$this->type = $type;
+	protected function loadTags($defaultTags=array()) {
 		$this->tags = array();
 		$result = null;
 		$sql = 'SELECT `id`, `category` FROM `' . self::TAG_TABLE . '` '
@@ -101,7 +114,6 @@ class Tags implements \OCP\ITags {
 		\OCP\Util::writeLog('core', __METHOD__.', tags: ' . print_r($this->tags, true),
 			\OCP\Util::DEBUG);
 
-		return $this;
 	}
 
 	/**
@@ -345,7 +357,7 @@ class Tags implements \OCP\ITags {
 				}
 			}
 			// reload tags to get the proper ids.
-			$this->loadTagsFor($this->type);
+			$this->loadTags();
 			// Loop through temporarily cached objectid/tagname pairs
 			// and save relations.
 			$tags = $this->tags;
diff --git a/tests/lib/tags.php b/tests/lib/tags.php
index 75db9f50f7..97e3734cfd 100644
--- a/tests/lib/tags.php
+++ b/tests/lib/tags.php
@@ -34,6 +34,7 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 		$this->objectType = uniqid('type_');
 		OC_User::createUser($this->user, 'pass');
 		OC_User::setUserId($this->user);
+		$this->tagMgr = new OC\TagManager($this->user);
 
 	}
 
@@ -45,102 +46,95 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 	public function testInstantiateWithDefaults() {
 		$defaultTags = array('Friends', 'Family', 'Work', 'Other');
 
-		$tagMgr = new OC\Tags($this->user);
-		$tagMgr->loadTagsFor($this->objectType, $defaultTags);
+		$tagger = $this->tagMgr->load($this->objectType, $defaultTags);
 
-		$this->assertEquals(4, count($tagMgr->getTags()));
+		$this->assertEquals(4, count($tagger->getTags()));
 	}
 
 	public function testAddTags() {
 		$tags = array('Friends', 'Family', 'Work', 'Other');
 
-		$tagMgr = new OC\Tags($this->user);
-		$tagMgr->loadTagsFor($this->objectType);
+		$tagger = $this->tagMgr->load($this->objectType);
 
 		foreach($tags as $tag) {
-			$result = $tagMgr->add($tag);
+			$result = $tagger->add($tag);
 			$this->assertGreaterThan(0, $result, 'add() returned an ID <= 0');
 			$this->assertTrue((bool)$result);
 		}
 
-		$this->assertFalse($tagMgr->add('Family'));
-		$this->assertFalse($tagMgr->add('fAMILY'));
+		$this->assertFalse($tagger->add('Family'));
+		$this->assertFalse($tagger->add('fAMILY'));
 
-		$this->assertCount(4, $tagMgr->getTags(), 'Wrong number of added tags');
+		$this->assertCount(4, $tagger->getTags(), 'Wrong number of added tags');
 	}
 
 	public function testAddMultiple() {
 		$tags = array('Friends', 'Family', 'Work', 'Other');
 
-		$tagMgr = new OC\Tags($this->user);
-		$tagMgr->loadTagsFor($this->objectType);
+		$tagger = $this->tagMgr->load($this->objectType);
 
 		foreach($tags as $tag) {
-			$this->assertFalse($tagMgr->hasTag($tag));
+			$this->assertFalse($tagger->hasTag($tag));
 		}
 
-		$result = $tagMgr->addMultiple($tags);
+		$result = $tagger->addMultiple($tags);
 		$this->assertTrue((bool)$result);
 
 		foreach($tags as $tag) {
-			$this->assertTrue($tagMgr->hasTag($tag));
+			$this->assertTrue($tagger->hasTag($tag));
 		}
 
-		$this->assertCount(4, $tagMgr->getTags(), 'Not all tags added');
+		$this->assertCount(4, $tagger->getTags(), 'Not all tags added');
 	}
 
 	public function testIsEmpty() {
-		$tagMgr = new OC\Tags($this->user);
-		$tagMgr->loadTagsFor($this->objectType);
+		$tagger = $this->tagMgr->load($this->objectType);
 
-		$this->assertEquals(0, count($tagMgr->getTags()));
-		$this->assertTrue($tagMgr->isEmpty());
+		$this->assertEquals(0, count($tagger->getTags()));
+		$this->assertTrue($tagger->isEmpty());
 
-		$result = $tagMgr->add('Tag');
+		$result = $tagger->add('Tag');
 		$this->assertGreaterThan(0, $result, 'add() returned an ID <= 0');
 		$this->assertNotEquals(false, $result, 'add() returned false');
-		$this->assertFalse($tagMgr->isEmpty());
+		$this->assertFalse($tagger->isEmpty());
 	}
 
 	public function testdeleteTags() {
 		$defaultTags = array('Friends', 'Family', 'Work', 'Other');
-		$tagMgr = new OC\Tags($this->user);
-		$tagMgr->loadTagsFor($this->objectType, $defaultTags);
+		$tagger = $this->tagMgr->load($this->objectType, $defaultTags);
 
-		$this->assertEquals(4, count($tagMgr->getTags()));
+		$this->assertEquals(4, count($tagger->getTags()));
 
-		$tagMgr->delete('family');
-		$this->assertEquals(3, count($tagMgr->getTags()));
+		$tagger->delete('family');
+		$this->assertEquals(3, count($tagger->getTags()));
 
-		$tagMgr->delete(array('Friends', 'Work', 'Other'));
-		$this->assertEquals(0, count($tagMgr->getTags()));
+		$tagger->delete(array('Friends', 'Work', 'Other'));
+		$this->assertEquals(0, count($tagger->getTags()));
 
 	}
 
 	public function testRenameTag() {
 		$defaultTags = array('Friends', 'Family', 'Wrok', 'Other');
-		$tagMgr = new OC\Tags($this->user);
-		$tagMgr->loadTagsFor($this->objectType, $defaultTags);
+		$tagger = $this->tagMgr->load($this->objectType, $defaultTags);
 
-		$this->assertTrue($tagMgr->rename('Wrok', 'Work'));
-		$this->assertTrue($tagMgr->hasTag('Work'));
-		$this->assertFalse($tagMgr->hastag('Wrok'));
-		$this->assertFalse($tagMgr->rename('Wrok', 'Work'));
+		$this->assertTrue($tagger->rename('Wrok', 'Work'));
+		$this->assertTrue($tagger->hasTag('Work'));
+		$this->assertFalse($tagger->hastag('Wrok'));
+		$this->assertFalse($tagger->rename('Wrok', 'Work'));
 
 	}
 
 	public function testTagAs() {
 		$objids = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
 
-		$tagMgr = new OC\Tags($this->user);
-		$tagMgr->loadTagsFor($this->objectType);
+		$tagger = $this->tagMgr->load($this->objectType);
 
 		foreach($objids as $id) {
-			$tagMgr->tagAs($id, 'Family');
+			$tagger->tagAs($id, 'Family');
 		}
 
-		$this->assertEquals(1, count($tagMgr->getTags()));
-		$this->assertEquals(9, count($tagMgr->getIdsForTag('Family')));
+		$this->assertEquals(1, count($tagger->getTags()));
+		$this->assertEquals(9, count($tagger->getIdsForTag('Family')));
 	}
 
 	/**
@@ -151,24 +145,22 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
 
 		// Is this "legal"?
 		$this->testTagAs();
-		$tagMgr = new OC\Tags($this->user);
-		$tagMgr->loadTagsFor($this->objectType);
+		$tagger = $this->tagMgr->load($this->objectType);
 
 		foreach($objIds as $id) {
-			$this->assertTrue(in_array($id, $tagMgr->getIdsForTag('Family')));
-			$tagMgr->unTag($id, 'Family');
-			$this->assertFalse(in_array($id, $tagMgr->getIdsForTag('Family')));
+			$this->assertTrue(in_array($id, $tagger->getIdsForTag('Family')));
+			$tagger->unTag($id, 'Family');
+			$this->assertFalse(in_array($id, $tagger->getIdsForTag('Family')));
 		}
 
-		$this->assertEquals(1, count($tagMgr->getTags()));
-		$this->assertEquals(0, count($tagMgr->getIdsForTag('Family')));
+		$this->assertEquals(1, count($tagger->getTags()));
+		$this->assertEquals(0, count($tagger->getIdsForTag('Family')));
 	}
 
 	public function testFavorite() {
-		$tagMgr = new OC\Tags($this->user);
-		$tagMgr->loadTagsFor($this->objectType);
-		$this->assertTrue($tagMgr->addToFavorites(1));
-		$this->assertTrue($tagMgr->removeFromFavorites(1));
+		$tagger = $this->tagMgr->load($this->objectType);
+		$this->assertTrue($tagger->addToFavorites(1));
+		$this->assertTrue($tagger->removeFromFavorites(1));
 	}
 
 }
-- 
GitLab


From c486fc76089ebc0f421a983e0ef62286e36e533c Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Tue, 24 Sep 2013 18:01:34 +0200
Subject: [PATCH 199/248] introduce OC_Util::rememberLoginAllowed()

---
 core/templates/login.php |  2 +-
 lib/base.php             |  2 +-
 lib/util.php             | 13 ++++++++++++-
 3 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/core/templates/login.php b/core/templates/login.php
index 3e736f164e..06f64d41e3 100644
--- a/core/templates/login.php
+++ b/core/templates/login.php
@@ -32,7 +32,7 @@
 			<?php p($l->t('Lost your password?')); ?>
 		</a>
 		<?php endif; ?>
-		<?php if ($_['encryption_enabled'] === false) : ?>
+		<?php if ($_['rememberLoginAllowed'] === true) : ?>
 		<input type="checkbox" name="remember_login" value="1" id="remember_login" checked />
 		<label for="remember_login"><?php p($l->t('remember')); ?></label>
 		<?php endif; ?>
diff --git a/lib/base.php b/lib/base.php
index b4e12bc7eb..d0aed230dd 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -760,7 +760,7 @@ class OC {
 			|| !isset($_COOKIE["oc_token"])
 			|| !isset($_COOKIE["oc_username"])
 			|| !$_COOKIE["oc_remember_login"]
-			|| OC_App::isEnabled('files_encryption')
+			|| !OC_Util::rememberLoginAllowed()
 		) {
 			return false;
 		}
diff --git a/lib/util.php b/lib/util.php
index ef42ff2aea..e12f753d5a 100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -467,7 +467,7 @@ class OC_Util {
 		}
 
 		$parameters['alt_login'] = OC_App::getAlternativeLogIns();
-		$parameters['encryption_enabled'] = OC_App::isEnabled('files_encryption');
+		$parameters['rememberLoginAllowed'] = self::rememberLoginAllowed();
 		OC_Template::printGuestPage("", "login", $parameters);
 	}
 
@@ -509,6 +509,17 @@ class OC_Util {
 		}
 	}
 
+	/**
+	 * Check if it is allowed to remember login.
+	 * E.g. if encryption is enabled the user needs to log-in every time he visites
+	 * ownCloud in order to decrypt the private key.
+	 *
+	 * @return bool
+	 */
+	public static function rememberLoginAllowed() {
+		return !OC_App::isEnabled('files_encryption');
+	}
+
 	/**
 	 * @brief Check if the user is a subadmin, redirects to home if not
 	 * @return array $groups where the current user is subadmin
-- 
GitLab


From 2d12e52769a30ba37d5760b1194f613bcc71035b Mon Sep 17 00:00:00 2001
From: Jenkins for ownCloud <thomas.mueller@tmit.eu>
Date: Tue, 24 Sep 2013 12:59:48 -0400
Subject: [PATCH 200/248] [tx-robot] updated from transifex

---
 apps/files/l10n/ca.php              |  5 +++
 apps/files/l10n/en_GB.php           |  7 +++-
 apps/files/l10n/fr.php              |  5 +++
 apps/files/l10n/gl.php              |  5 +++
 apps/files/l10n/nn_NO.php           |  5 +++
 core/l10n/en_GB.php                 |  9 ++++-
 core/l10n/fr.php                    |  6 +++-
 core/l10n/gl.php                    |  9 ++++-
 core/l10n/nn_NO.php                 | 16 ++++++++-
 l10n/ca/files.po                    | 18 +++++-----
 l10n/da/settings.po                 | 34 +++++++++----------
 l10n/en_GB/core.po                  | 38 ++++++++++-----------
 l10n/en_GB/files.po                 | 20 +++++------
 l10n/fr/core.po                     | 32 +++++++++---------
 l10n/fr/files.po                    | 18 +++++-----
 l10n/gl/core.po                     | 38 ++++++++++-----------
 l10n/gl/files.po                    | 18 +++++-----
 l10n/nn_NO/core.po                  | 52 ++++++++++++++---------------
 l10n/nn_NO/files.po                 | 19 ++++++-----
 l10n/nn_NO/lib.po                   | 14 ++++----
 l10n/nn_NO/settings.po              | 52 ++++++++++++++---------------
 l10n/templates/core.pot             | 16 ++++-----
 l10n/templates/files.pot            |  2 +-
 l10n/templates/files_encryption.pot |  2 +-
 l10n/templates/files_external.pot   |  2 +-
 l10n/templates/files_sharing.pot    |  2 +-
 l10n/templates/files_trashbin.pot   |  2 +-
 l10n/templates/files_versions.pot   |  2 +-
 l10n/templates/lib.pot              |  2 +-
 l10n/templates/settings.pot         | 20 +++++------
 l10n/templates/user_ldap.pot        |  2 +-
 l10n/templates/user_webdavauth.pot  |  2 +-
 lib/l10n/nn_NO.php                  |  2 ++
 settings/l10n/da.php                |  5 +++
 settings/l10n/nn_NO.php             | 14 ++++++++
 35 files changed, 287 insertions(+), 208 deletions(-)

diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php
index 8fd72ac0a6..5c2cade8d6 100644
--- a/apps/files/l10n/ca.php
+++ b/apps/files/l10n/ca.php
@@ -13,10 +13,14 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Falta un fitxer temporal",
 "Failed to write to disk" => "Ha fallat en escriure al disc",
 "Not enough storage available" => "No hi ha prou espai disponible",
+"Upload failed. Could not get file info." => "La pujada ha fallat. No s'ha pogut obtenir informació del fitxer.",
+"Upload failed. Could not find uploaded file" => "La pujada ha fallat. El fitxer pujat no s'ha trobat.",
 "Invalid directory." => "Directori no vàlid.",
 "Files" => "Fitxers",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "No es pot pujar {filename} perquè és una carpeta o té 0 bytes",
 "Not enough space available" => "No hi ha prou espai disponible",
 "Upload cancelled." => "La pujada s'ha cancel·lat.",
+"Could not get result from server." => "No hi ha resposta del servidor.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.",
 "URL cannot be empty." => "La URL no pot ser buida",
 "Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nom de carpeta no vàlid. L'ús de 'Shared' està reservat per Owncloud",
@@ -42,6 +46,7 @@ $TRANSLATIONS = array(
 "Your storage is almost full ({usedSpacePercent}%)" => "El vostre espai d'emmagatzemament és gairebé ple ({usedSpacePercent}%)",
 "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "L'encriptació s'ha desactivat però els vostres fitxers segueixen encriptats. Aneu a la vostra configuració personal per desencriptar els vostres fitxers.",
 "Your download is being prepared. This might take some time if the files are big." => "S'està preparant la baixada. Pot trigar una estona si els fitxers són grans.",
+"Error moving file" => "Error en moure el fitxer",
 "Name" => "Nom",
 "Size" => "Mida",
 "Modified" => "Modificat",
diff --git a/apps/files/l10n/en_GB.php b/apps/files/l10n/en_GB.php
index e67719efba..c747555e40 100644
--- a/apps/files/l10n/en_GB.php
+++ b/apps/files/l10n/en_GB.php
@@ -13,10 +13,14 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Missing a temporary folder",
 "Failed to write to disk" => "Failed to write to disk",
 "Not enough storage available" => "Not enough storage available",
+"Upload failed. Could not get file info." => "Upload failed. Could not get file info.",
+"Upload failed. Could not find uploaded file" => "Upload failed. Could not find uploaded file",
 "Invalid directory." => "Invalid directory.",
 "Files" => "Files",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "Unable to upload {filename} as it is a directory or has 0 bytes",
 "Not enough space available" => "Not enough space available",
 "Upload cancelled." => "Upload cancelled.",
+"Could not get result from server." => "Could not get result from server.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "File upload is in progress. Leaving the page now will cancel the upload.",
 "URL cannot be empty." => "URL cannot be empty.",
 "Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Invalid folder name. Usage of 'Shared' is reserved by ownCloud",
@@ -37,11 +41,12 @@ $TRANSLATIONS = array(
 "_Uploading %n file_::_Uploading %n files_" => array("Uploading %n file","Uploading %n files"),
 "'.' is an invalid file name." => "'.' is an invalid file name.",
 "File name cannot be empty." => "File name cannot be empty.",
-"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed.",
+"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Invalid name: '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed.",
 "Your storage is full, files can not be updated or synced anymore!" => "Your storage is full, files can not be updated or synced anymore!",
 "Your storage is almost full ({usedSpacePercent}%)" => "Your storage is almost full ({usedSpacePercent}%)",
 "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files.",
 "Your download is being prepared. This might take some time if the files are big." => "Your download is being prepared. This might take some time if the files are big.",
+"Error moving file" => "Error moving file",
 "Name" => "Name",
 "Size" => "Size",
 "Modified" => "Modified",
diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php
index d647045808..03505a2a26 100644
--- a/apps/files/l10n/fr.php
+++ b/apps/files/l10n/fr.php
@@ -13,10 +13,14 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Absence de dossier temporaire.",
 "Failed to write to disk" => "Erreur d'écriture sur le disque",
 "Not enough storage available" => "Plus assez d'espace de stockage disponible",
+"Upload failed. Could not get file info." => "L'envoi a échoué. Impossible d'obtenir les informations du fichier.",
+"Upload failed. Could not find uploaded file" => "L'envoi a échoué. Impossible de trouver le fichier envoyé.",
 "Invalid directory." => "Dossier invalide.",
 "Files" => "Fichiers",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "Impossible d'envoyer {filename} car il s'agit d'un répertoire ou d'un fichier de taille nulle",
 "Not enough space available" => "Espace disponible insuffisant",
 "Upload cancelled." => "Envoi annulé.",
+"Could not get result from server." => "Ne peut recevoir les résultats du serveur.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.",
 "URL cannot be empty." => "L'URL ne peut-être vide",
 "Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nom de dossier invalide. L'utilisation du mot 'Shared' est réservée à Owncloud",
@@ -42,6 +46,7 @@ $TRANSLATIONS = array(
 "Your storage is almost full ({usedSpacePercent}%)" => "Votre espace de stockage est presque plein ({usedSpacePercent}%)",
 "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Le chiffrement était désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos Paramètres personnels pour déchiffrer vos fichiers.",
 "Your download is being prepared. This might take some time if the files are big." => "Votre téléchargement est cours de préparation. Ceci peut nécessiter un certain temps si les fichiers sont volumineux.",
+"Error moving file" => "Erreur lors du déplacement du fichier",
 "Name" => "Nom",
 "Size" => "Taille",
 "Modified" => "Modifié",
diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php
index 0eba94f7d6..2766478650 100644
--- a/apps/files/l10n/gl.php
+++ b/apps/files/l10n/gl.php
@@ -13,10 +13,14 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Falta o cartafol temporal",
 "Failed to write to disk" => "Produciuse un erro ao escribir no disco",
 "Not enough storage available" => "Non hai espazo de almacenamento abondo",
+"Upload failed. Could not get file info." => "O envío fracasou. Non foi posíbel obter información do ficheiro.",
+"Upload failed. Could not find uploaded file" => "O envío fracasou. Non foi posíbel atopar o ficheiro enviado",
 "Invalid directory." => "O directorio é incorrecto.",
 "Files" => "Ficheiros",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "Non é posíbel enviar {filename}, xa que ou é un directorio ou ten 0 bytes",
 "Not enough space available" => "O espazo dispoñíbel é insuficiente",
 "Upload cancelled." => "Envío cancelado.",
+"Could not get result from server." => "Non foi posíbel obter o resultado do servidor.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "O envío do ficheiro está en proceso. Saír agora da páxina cancelará o envío.",
 "URL cannot be empty." => "O URL non pode quedar baleiro.",
 "Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nome de cartafol incorrecto. O uso de «Compartido» e «Shared» está reservado para o ownClod",
@@ -42,6 +46,7 @@ $TRANSLATIONS = array(
 "Your storage is almost full ({usedSpacePercent}%)" => "O seu espazo de almacenamento está case cheo ({usedSpacePercent}%)",
 "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "O cifrado foi desactivado, mais os ficheiros están cifrados. Vaia á configuración persoal para descifrar os ficheiros.",
 "Your download is being prepared. This might take some time if the files are big." => "Está a prepararse a súa descarga. Isto pode levar bastante tempo se os ficheiros son grandes.",
+"Error moving file" => "Produciuse un erro ao mover o ficheiro",
 "Name" => "Nome",
 "Size" => "Tamaño",
 "Modified" => "Modificado",
diff --git a/apps/files/l10n/nn_NO.php b/apps/files/l10n/nn_NO.php
index 04c47c31fb..e29b1d3ad3 100644
--- a/apps/files/l10n/nn_NO.php
+++ b/apps/files/l10n/nn_NO.php
@@ -13,10 +13,14 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Manglar ei mellombels mappe",
 "Failed to write to disk" => "Klarte ikkje skriva til disk",
 "Not enough storage available" => "Ikkje nok lagringsplass tilgjengeleg",
+"Upload failed. Could not get file info." => "Feil ved opplasting. Klarte ikkje å henta filinfo.",
+"Upload failed. Could not find uploaded file" => "Feil ved opplasting. Klarte ikkje å finna opplasta fil.",
 "Invalid directory." => "Ugyldig mappe.",
 "Files" => "Filer",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "Klarte ikkje å lasta opp {filename} sidan det er ei mappe eller er 0 byte.",
 "Not enough space available" => "Ikkje nok lagringsplass tilgjengeleg",
 "Upload cancelled." => "Opplasting avbroten.",
+"Could not get result from server." => "Klarte ikkje å henta resultat frå tenaren.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Fila lastar no opp. Viss du forlèt sida no vil opplastinga verta avbroten.",
 "URL cannot be empty." => "Nettadressa kan ikkje vera tom.",
 "Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Ugyldig mappenamn. Mappa «Shared» er reservert av ownCloud",
@@ -42,6 +46,7 @@ $TRANSLATIONS = array(
 "Your storage is almost full ({usedSpacePercent}%)" => "Lagringa di er nesten full ({usedSpacePercent} %)",
 "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Kryptering er skrudd av, men filene dine er enno krypterte. Du kan dekryptera filene i personlege innstillingar.",
 "Your download is being prepared. This might take some time if the files are big." => "Gjer klar nedlastinga di. Dette kan ta ei stund viss filene er store.",
+"Error moving file" => "Feil ved flytting av fil",
 "Name" => "Namn",
 "Size" => "Storleik",
 "Modified" => "Endra",
diff --git a/core/l10n/en_GB.php b/core/l10n/en_GB.php
index feeacd481a..bb26f1469d 100644
--- a/core/l10n/en_GB.php
+++ b/core/l10n/en_GB.php
@@ -58,8 +58,15 @@ $TRANSLATIONS = array(
 "No" => "No",
 "Ok" => "OK",
 "Error loading message template: {error}" => "Error loading message template: {error}",
-"_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("{count} file conflict","{count} file conflicts"),
+"One file conflict" => "One file conflict",
+"Which files do you want to keep?" => "Which files do you wish to keep?",
+"If you select both versions, the copied file will have a number added to its name." => "If you select both versions, the copied file will have a number added to its name.",
 "Cancel" => "Cancel",
+"Continue" => "Continue",
+"(all selected)" => "(all selected)",
+"({count} selected)" => "({count} selected)",
+"Error loading file exists template" => "Error loading file exists template",
 "The object type is not specified." => "The object type is not specified.",
 "Error" => "Error",
 "The app name is not specified." => "The app name is not specified.",
diff --git a/core/l10n/fr.php b/core/l10n/fr.php
index d3229ddf99..29489e86b7 100644
--- a/core/l10n/fr.php
+++ b/core/l10n/fr.php
@@ -56,8 +56,12 @@ $TRANSLATIONS = array(
 "No" => "Non",
 "Ok" => "Ok",
 "Error loading message template: {error}" => "Erreur de chargement du modèle de message : {error}",
-"_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("{count} fichier en conflit","{count} fichiers en conflit"),
+"One file conflict" => "Un conflit de fichier",
+"Which files do you want to keep?" => "Quels fichiers désirez-vous garder ?",
+"If you select both versions, the copied file will have a number added to its name." => "Si vous sélectionnez les deux versions, un nombre sera ajouté au nom du fichier copié.",
 "Cancel" => "Annuler",
+"({count} selected)" => "({count} sélectionnés)",
 "The object type is not specified." => "Le type d'objet n'est pas spécifié.",
 "Error" => "Erreur",
 "The app name is not specified." => "Le nom de l'application n'est pas spécifié.",
diff --git a/core/l10n/gl.php b/core/l10n/gl.php
index 9ba5ab645a..e3be94537e 100644
--- a/core/l10n/gl.php
+++ b/core/l10n/gl.php
@@ -58,8 +58,15 @@ $TRANSLATIONS = array(
 "No" => "Non",
 "Ok" => "Aceptar",
 "Error loading message template: {error}" => "Produciuse un erro ao cargar o modelo da mensaxe: {error}",
-"_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("{count} conflito de ficheiro","{count} conflitos de ficheiros"),
+"One file conflict" => "Un conflito de ficheiro",
+"Which files do you want to keep?" => "Que ficheiros quere conservar?",
+"If you select both versions, the copied file will have a number added to its name." => "Se selecciona ambas versións, o ficheiro copiado terá un número engadido ao nome.",
 "Cancel" => "Cancelar",
+"Continue" => "Continuar",
+"(all selected)" => "(todo o seleccionado)",
+"({count} selected)" => "({count} seleccionados)",
+"Error loading file exists template" => "Produciuse un erro ao cargar o modelo de ficheiro existente",
 "The object type is not specified." => "Non se especificou o tipo de obxecto.",
 "Error" => "Erro",
 "The app name is not specified." => "Non se especificou o nome do aplicativo.",
diff --git a/core/l10n/nn_NO.php b/core/l10n/nn_NO.php
index 8ec3892a8a..d596605dbc 100644
--- a/core/l10n/nn_NO.php
+++ b/core/l10n/nn_NO.php
@@ -16,6 +16,11 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Klarte ikkje leggja til %s i favorittar.",
 "No categories selected for deletion." => "Ingen kategoriar valt for sletting.",
 "Error removing %s from favorites." => "Klarte ikkje fjerna %s frå favorittar.",
+"No image or file provided" => "Inga bilete eller fil gitt",
+"Unknown filetype" => "Ukjend filtype",
+"Invalid image" => "Ugyldig bilete",
+"No temporary profile picture available, try again" => "Inga midlertidig profilbilete tilgjengeleg, prøv igjen",
+"No crop data provided" => "Ingen beskjeringsdata gitt",
 "Sunday" => "Søndag",
 "Monday" => "Måndag",
 "Tuesday" => "Tysdag",
@@ -48,11 +53,20 @@ $TRANSLATIONS = array(
 "last year" => "i fjor",
 "years ago" => "år sidan",
 "Choose" => "Vel",
+"Error loading file picker template: {error}" => "Klarte ikkje å lasta filplukkarmal: {error}",
 "Yes" => "Ja",
 "No" => "Nei",
 "Ok" => "Greitt",
-"_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Error loading message template: {error}" => "Klarte ikkje å lasta meldingsmal: {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("{count} filkonflikt","{count} filkonfliktar"),
+"One file conflict" => "Éin filkonflikt",
+"Which files do you want to keep?" => "Kva filer vil du spara?",
+"If you select both versions, the copied file will have a number added to its name." => "Viss du vel begge utgåvene, vil den kopierte fila få eit tal lagt til namnet.",
 "Cancel" => "Avbryt",
+"Continue" => "Gå vidare",
+"(all selected)" => "(alle valte)",
+"({count} selected)" => "({count} valte)",
+"Error loading file exists template" => "Klarte ikkje å lasta fil-finst-mal",
 "The object type is not specified." => "Objekttypen er ikkje spesifisert.",
 "Error" => "Feil",
 "The app name is not specified." => "Programnamnet er ikkje spesifisert.",
diff --git a/l10n/ca/files.po b/l10n/ca/files.po
index 173aeb30ac..82091cf75b 100644
--- a/l10n/ca/files.po
+++ b/l10n/ca/files.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"PO-Revision-Date: 2013-09-24 15:10+0000\n"
+"Last-Translator: rogerc\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"
@@ -78,23 +78,23 @@ msgstr "No hi ha prou espai disponible"
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr ""
+msgstr "La pujada ha fallat. No s'ha pogut obtenir informació del fitxer."
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr ""
+msgstr "La pujada ha fallat. El fitxer pujat no s'ha trobat."
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Directori no vàlid."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Fitxers"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "No es pot pujar {filename} perquè és una carpeta o té 0 bytes"
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -106,7 +106,7 @@ msgstr "La pujada s'ha cancel·lat."
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "No hi ha resposta del servidor."
 
 #: js/file-upload.js:446
 msgid ""
@@ -223,7 +223,7 @@ msgstr "S'està preparant la baixada. Pot trigar una estona si els fitxers són
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Error en moure el fitxer"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/da/settings.po b/l10n/da/settings.po
index accacfac32..7251a13d4f 100644
--- a/l10n/da/settings.po
+++ b/l10n/da/settings.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:45-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"PO-Revision-Date: 2013-09-24 16:59+0000\n"
+"Last-Translator: Sappe\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"
@@ -89,28 +89,28 @@ msgstr "Kunne ikke opdatere app'en."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Forkert kodeord"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "Intet brugernavn givet"
 
 #: changepassword/controller.php:74
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Angiv venligst en admininstrator gendannelseskode, ellers vil alt brugerdata gå tabt"
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "Forkert admin gendannelseskode. Se venligst koden efter og prøv igen."
 
 #: changepassword/controller.php:87
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
+msgstr "Serveren understøtter ikke kodeordsskifte, men brugernes krypteringsnøgle blev opdateret."
 
 #: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
@@ -120,11 +120,11 @@ msgstr ""
 msgid "Update to {appversion}"
 msgstr "Opdatér til {appversion}"
 
-#: js/apps.js:49 js/apps.js:82 js/apps.js:108
+#: js/apps.js:49 js/apps.js:82 js/apps.js:110
 msgid "Disable"
 msgstr "Deaktiver"
 
-#: js/apps.js:49 js/apps.js:89 js/apps.js:102 js/apps.js:117
+#: js/apps.js:49 js/apps.js:90 js/apps.js:103 js/apps.js:119
 msgid "Enable"
 msgstr "Aktiver"
 
@@ -132,31 +132,31 @@ msgstr "Aktiver"
 msgid "Please wait...."
 msgstr "Vent venligst..."
 
-#: js/apps.js:79 js/apps.js:80 js/apps.js:100
+#: js/apps.js:79 js/apps.js:80 js/apps.js:101
 msgid "Error while disabling app"
 msgstr "Kunne ikke deaktivere app"
 
-#: js/apps.js:99 js/apps.js:112 js/apps.js:113
+#: js/apps.js:100 js/apps.js:114 js/apps.js:115
 msgid "Error while enabling app"
 msgstr "Kunne ikke aktivere app"
 
-#: js/apps.js:123
+#: js/apps.js:125
 msgid "Updating...."
 msgstr "Opdaterer...."
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error while updating app"
 msgstr "Der opstod en fejl under app opgraderingen"
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error"
 msgstr "Fejl"
 
-#: js/apps.js:127 templates/apps.php:43
+#: js/apps.js:129 templates/apps.php:43
 msgid "Update"
 msgstr "Opdater"
 
-#: js/apps.js:130
+#: js/apps.js:132
 msgid "Updated"
 msgstr "Opdateret"
 
diff --git a/l10n/en_GB/core.po b/l10n/en_GB/core.po
index 5ac5d34f56..f9b0f0d24f 100644
--- a/l10n/en_GB/core.po
+++ b/l10n/en_GB/core.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-22 12:55-0400\n"
-"PO-Revision-Date: 2013-09-20 15:01+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"PO-Revision-Date: 2013-09-23 16:10+0000\n"
+"Last-Translator: mnestis <transifex@mnestis.net>\n"
 "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -270,22 +270,22 @@ msgstr "Error loading message template: {error}"
 #: js/oc-dialogs.js:347
 msgid "{count} file conflict"
 msgid_plural "{count} file conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{count} file conflict"
+msgstr[1] "{count} file conflicts"
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "One file conflict"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
-msgstr ""
+msgstr "Which files do you wish to keep?"
 
 #: js/oc-dialogs.js:368
 msgid ""
 "If you select both versions, the copied file will have a number added to its"
 " name."
-msgstr ""
+msgstr "If you select both versions, the copied file will have a number added to its name."
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
@@ -293,19 +293,19 @@ msgstr "Cancel"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Continue"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr ""
+msgstr "(all selected)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
-msgstr ""
+msgstr "({count} selected)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
-msgstr ""
+msgstr "Error loading file exists template"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
@@ -316,7 +316,7 @@ msgstr "The object type is not specified."
 #: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
 #: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
 #: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
-#: js/share.js:645 js/share.js:657
+#: js/share.js:656 js/share.js:668
 msgid "Error"
 msgstr "Error"
 
@@ -336,7 +336,7 @@ msgstr "Shared"
 msgid "Share"
 msgstr "Share"
 
-#: js/share.js:131 js/share.js:685
+#: js/share.js:131 js/share.js:696
 msgid "Error while sharing"
 msgstr "Error whilst sharing"
 
@@ -436,23 +436,23 @@ msgstr "delete"
 msgid "share"
 msgstr "share"
 
-#: js/share.js:400 js/share.js:632
+#: js/share.js:400 js/share.js:643
 msgid "Password protected"
 msgstr "Password protected"
 
-#: js/share.js:645
+#: js/share.js:656
 msgid "Error unsetting expiration date"
 msgstr "Error unsetting expiration date"
 
-#: js/share.js:657
+#: js/share.js:668
 msgid "Error setting expiration date"
 msgstr "Error setting expiration date"
 
-#: js/share.js:672
+#: js/share.js:683
 msgid "Sending ..."
 msgstr "Sending ..."
 
-#: js/share.js:683
+#: js/share.js:694
 msgid "Email sent"
 msgstr "Email sent"
 
diff --git a/l10n/en_GB/files.po b/l10n/en_GB/files.po
index fe7922ffe9..bf8e937434 100644
--- a/l10n/en_GB/files.po
+++ b/l10n/en_GB/files.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"PO-Revision-Date: 2013-09-24 16:00+0000\n"
+"Last-Translator: mnestis <transifex@mnestis.net>\n"
 "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -77,23 +77,23 @@ msgstr "Not enough storage available"
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr ""
+msgstr "Upload failed. Could not get file info."
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr ""
+msgstr "Upload failed. Could not find uploaded file"
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Invalid directory."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Files"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Unable to upload {filename} as it is a directory or has 0 bytes"
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -105,7 +105,7 @@ msgstr "Upload cancelled."
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "Could not get result from server."
 
 #: js/file-upload.js:446
 msgid ""
@@ -198,7 +198,7 @@ msgstr "File name cannot be empty."
 msgid ""
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
 "allowed."
-msgstr "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed."
+msgstr "Invalid name: '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed."
 
 #: js/files.js:51
 msgid "Your storage is full, files can not be updated or synced anymore!"
@@ -222,7 +222,7 @@ msgstr "Your download is being prepared. This might take some time if the files
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Error moving file"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/fr/core.po b/l10n/fr/core.po
index 76dc658c71..4c7f6be045 100644
--- a/l10n/fr/core.po
+++ b/l10n/fr/core.po
@@ -13,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-22 12:55-0400\n"
-"PO-Revision-Date: 2013-09-20 15:01+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"PO-Revision-Date: 2013-09-23 19:40+0000\n"
+"Last-Translator: ogre_sympathique <ogre.sympathique@speed.1s.fr>\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"
@@ -275,22 +275,22 @@ msgstr "Erreur de chargement du modèle de message : {error}"
 #: js/oc-dialogs.js:347
 msgid "{count} file conflict"
 msgid_plural "{count} file conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{count} fichier en conflit"
+msgstr[1] "{count} fichiers en conflit"
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "Un conflit de fichier"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
-msgstr ""
+msgstr "Quels fichiers désirez-vous garder ?"
 
 #: js/oc-dialogs.js:368
 msgid ""
 "If you select both versions, the copied file will have a number added to its"
 " name."
-msgstr ""
+msgstr "Si vous sélectionnez les deux versions, un nombre sera ajouté au nom du fichier copié."
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
@@ -306,7 +306,7 @@ msgstr ""
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
-msgstr ""
+msgstr "({count} sélectionnés)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
@@ -321,7 +321,7 @@ msgstr "Le type d'objet n'est pas spécifié."
 #: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
 #: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
 #: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
-#: js/share.js:645 js/share.js:657
+#: js/share.js:656 js/share.js:668
 msgid "Error"
 msgstr "Erreur"
 
@@ -341,7 +341,7 @@ msgstr "Partagé"
 msgid "Share"
 msgstr "Partager"
 
-#: js/share.js:131 js/share.js:685
+#: js/share.js:131 js/share.js:696
 msgid "Error while sharing"
 msgstr "Erreur lors de la mise en partage"
 
@@ -441,23 +441,23 @@ msgstr "supprimer"
 msgid "share"
 msgstr "partager"
 
-#: js/share.js:400 js/share.js:632
+#: js/share.js:400 js/share.js:643
 msgid "Password protected"
 msgstr "Protégé par un mot de passe"
 
-#: js/share.js:645
+#: js/share.js:656
 msgid "Error unsetting expiration date"
 msgstr "Une erreur est survenue pendant la suppression de la date d'expiration"
 
-#: js/share.js:657
+#: js/share.js:668
 msgid "Error setting expiration date"
 msgstr "Erreur lors de la spécification de la date d'expiration"
 
-#: js/share.js:672
+#: js/share.js:683
 msgid "Sending ..."
 msgstr "En cours d'envoi ..."
 
-#: js/share.js:683
+#: js/share.js:694
 msgid "Email sent"
 msgstr "Email envoyé"
 
diff --git a/l10n/fr/files.po b/l10n/fr/files.po
index fcbbbad254..72963e3573 100644
--- a/l10n/fr/files.po
+++ b/l10n/fr/files.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"PO-Revision-Date: 2013-09-23 19:30+0000\n"
+"Last-Translator: ogre_sympathique <ogre.sympathique@speed.1s.fr>\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"
@@ -80,23 +80,23 @@ msgstr "Plus assez d'espace de stockage disponible"
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr ""
+msgstr "L'envoi a échoué. Impossible d'obtenir les informations du fichier."
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr ""
+msgstr "L'envoi a échoué. Impossible de trouver le fichier envoyé."
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Dossier invalide."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Fichiers"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Impossible d'envoyer {filename} car il s'agit d'un répertoire ou d'un fichier de taille nulle"
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -108,7 +108,7 @@ msgstr "Envoi annulé."
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "Ne peut recevoir les résultats du serveur."
 
 #: js/file-upload.js:446
 msgid ""
@@ -225,7 +225,7 @@ msgstr "Votre téléchargement est cours de préparation. Ceci peut nécessiter
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Erreur lors du déplacement du fichier"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/gl/core.po b/l10n/gl/core.po
index 72986b81c8..b8bcfd4eea 100644
--- a/l10n/gl/core.po
+++ b/l10n/gl/core.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-22 12:55-0400\n"
-"PO-Revision-Date: 2013-09-20 15:01+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"PO-Revision-Date: 2013-09-23 10:30+0000\n"
+"Last-Translator: mbouzada <mbouzada@gmail.com>\n"
 "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -270,22 +270,22 @@ msgstr "Produciuse un erro ao cargar o modelo da mensaxe: {error}"
 #: js/oc-dialogs.js:347
 msgid "{count} file conflict"
 msgid_plural "{count} file conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{count} conflito de ficheiro"
+msgstr[1] "{count} conflitos de ficheiros"
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "Un conflito de ficheiro"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
-msgstr ""
+msgstr "Que ficheiros quere conservar?"
 
 #: js/oc-dialogs.js:368
 msgid ""
 "If you select both versions, the copied file will have a number added to its"
 " name."
-msgstr ""
+msgstr "Se selecciona ambas versións, o ficheiro copiado terá un número engadido ao nome."
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
@@ -293,19 +293,19 @@ msgstr "Cancelar"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Continuar"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr ""
+msgstr "(todo o seleccionado)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
-msgstr ""
+msgstr "({count} seleccionados)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
-msgstr ""
+msgstr "Produciuse un erro ao cargar o modelo de ficheiro existente"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
@@ -316,7 +316,7 @@ msgstr "Non se especificou o tipo de obxecto."
 #: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
 #: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
 #: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
-#: js/share.js:645 js/share.js:657
+#: js/share.js:656 js/share.js:668
 msgid "Error"
 msgstr "Erro"
 
@@ -336,7 +336,7 @@ msgstr "Compartir"
 msgid "Share"
 msgstr "Compartir"
 
-#: js/share.js:131 js/share.js:685
+#: js/share.js:131 js/share.js:696
 msgid "Error while sharing"
 msgstr "Produciuse un erro ao compartir"
 
@@ -436,23 +436,23 @@ msgstr "eliminar"
 msgid "share"
 msgstr "compartir"
 
-#: js/share.js:400 js/share.js:632
+#: js/share.js:400 js/share.js:643
 msgid "Password protected"
 msgstr "Protexido con contrasinal"
 
-#: js/share.js:645
+#: js/share.js:656
 msgid "Error unsetting expiration date"
 msgstr "Produciuse un erro ao retirar a data de caducidade"
 
-#: js/share.js:657
+#: js/share.js:668
 msgid "Error setting expiration date"
 msgstr "Produciuse un erro ao definir a data de caducidade"
 
-#: js/share.js:672
+#: js/share.js:683
 msgid "Sending ..."
 msgstr "Enviando..."
 
-#: js/share.js:683
+#: js/share.js:694
 msgid "Email sent"
 msgstr "Correo enviado"
 
diff --git a/l10n/gl/files.po b/l10n/gl/files.po
index 45a9129ab2..33e76e8487 100644
--- a/l10n/gl/files.po
+++ b/l10n/gl/files.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"PO-Revision-Date: 2013-09-23 10:30+0000\n"
+"Last-Translator: mbouzada <mbouzada@gmail.com>\n"
 "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -77,23 +77,23 @@ msgstr "Non hai espazo de almacenamento abondo"
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr ""
+msgstr "O envío fracasou. Non foi posíbel obter información do ficheiro."
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr ""
+msgstr "O envío fracasou. Non foi posíbel atopar o ficheiro enviado"
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "O directorio é incorrecto."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Ficheiros"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Non é posíbel enviar {filename}, xa que ou é un directorio ou ten 0 bytes"
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -105,7 +105,7 @@ msgstr "Envío cancelado."
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "Non foi posíbel obter o resultado do servidor."
 
 #: js/file-upload.js:446
 msgid ""
@@ -222,7 +222,7 @@ msgstr "Está a prepararse a súa descarga. Isto pode levar bastante tempo se os
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Produciuse un erro ao mover o ficheiro"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/nn_NO/core.po b/l10n/nn_NO/core.po
index 40a6de51ba..e16776a098 100644
--- a/l10n/nn_NO/core.po
+++ b/l10n/nn_NO/core.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-22 12:55-0400\n"
-"PO-Revision-Date: 2013-09-20 15:01+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"PO-Revision-Date: 2013-09-24 08:30+0000\n"
+"Last-Translator: unhammer <unhammer+dill@mm.st>\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"
@@ -95,23 +95,23 @@ msgstr "Klarte ikkje fjerna %s frå favorittar."
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "Inga bilete eller fil gitt"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Ukjend filtype"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Ugyldig bilete"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "Inga midlertidig profilbilete tilgjengeleg, prøv igjen"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "Ingen beskjeringsdata gitt"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -251,7 +251,7 @@ msgstr "Vel"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "Klarte ikkje å lasta filplukkarmal: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -267,27 +267,27 @@ msgstr "Greitt"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr ""
+msgstr "Klarte ikkje å lasta meldingsmal: {error}"
 
 #: js/oc-dialogs.js:347
 msgid "{count} file conflict"
 msgid_plural "{count} file conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{count} filkonflikt"
+msgstr[1] "{count} filkonfliktar"
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "Éin filkonflikt"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
-msgstr ""
+msgstr "Kva filer vil du spara?"
 
 #: js/oc-dialogs.js:368
 msgid ""
 "If you select both versions, the copied file will have a number added to its"
 " name."
-msgstr ""
+msgstr "Viss du vel begge utgåvene, vil den kopierte fila få eit tal lagt til namnet."
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
@@ -295,19 +295,19 @@ msgstr "Avbryt"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Gå vidare"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr ""
+msgstr "(alle valte)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
-msgstr ""
+msgstr "({count} valte)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
-msgstr ""
+msgstr "Klarte ikkje å lasta fil-finst-mal"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
@@ -318,7 +318,7 @@ msgstr "Objekttypen er ikkje spesifisert."
 #: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
 #: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
 #: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
-#: js/share.js:645 js/share.js:657
+#: js/share.js:656 js/share.js:668
 msgid "Error"
 msgstr "Feil"
 
@@ -338,7 +338,7 @@ msgstr "Delt"
 msgid "Share"
 msgstr "Del"
 
-#: js/share.js:131 js/share.js:685
+#: js/share.js:131 js/share.js:696
 msgid "Error while sharing"
 msgstr "Feil ved deling"
 
@@ -438,23 +438,23 @@ msgstr "slett"
 msgid "share"
 msgstr "del"
 
-#: js/share.js:400 js/share.js:632
+#: js/share.js:400 js/share.js:643
 msgid "Password protected"
 msgstr "Passordverna"
 
-#: js/share.js:645
+#: js/share.js:656
 msgid "Error unsetting expiration date"
 msgstr "Klarte ikkje fjerna utløpsdato"
 
-#: js/share.js:657
+#: js/share.js:668
 msgid "Error setting expiration date"
 msgstr "Klarte ikkje setja utløpsdato"
 
-#: js/share.js:672
+#: js/share.js:683
 msgid "Sending ..."
 msgstr "Sender …"
 
-#: js/share.js:683
+#: js/share.js:694
 msgid "Email sent"
 msgstr "E-post sendt"
 
diff --git a/l10n/nn_NO/files.po b/l10n/nn_NO/files.po
index 0573ecf295..dc82bdca1b 100644
--- a/l10n/nn_NO/files.po
+++ b/l10n/nn_NO/files.po
@@ -5,13 +5,14 @@
 # Translators:
 # unhammer <unhammer+dill@mm.st>, 2013
 # unhammer <unhammer+dill@mm.st>, 2013
+# unhammer <unhammer+dill@mm.st>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"PO-Revision-Date: 2013-09-24 08:20+0000\n"
+"Last-Translator: unhammer <unhammer+dill@mm.st>\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"
@@ -78,23 +79,23 @@ msgstr "Ikkje nok lagringsplass tilgjengeleg"
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr ""
+msgstr "Feil ved opplasting. Klarte ikkje å henta filinfo."
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr ""
+msgstr "Feil ved opplasting. Klarte ikkje å finna opplasta fil."
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Ugyldig mappe."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Filer"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Klarte ikkje å lasta opp {filename} sidan det er ei mappe eller er 0 byte."
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -106,7 +107,7 @@ msgstr "Opplasting avbroten."
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "Klarte ikkje å henta resultat frå tenaren."
 
 #: js/file-upload.js:446
 msgid ""
@@ -223,7 +224,7 @@ msgstr "Gjer klar nedlastinga di. Dette kan ta ei stund viss filene er store."
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Feil ved flytting av fil"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/nn_NO/lib.po b/l10n/nn_NO/lib.po
index dd499893e3..9e73f6fe6a 100644
--- a/l10n/nn_NO/lib.po
+++ b/l10n/nn_NO/lib.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"PO-Revision-Date: 2013-09-24 08:30+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -61,11 +61,11 @@ msgstr ""
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Ukjend filtype"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Ugyldig bilete"
 
 #: defaults.php:35
 msgid "web services under your control"
@@ -166,15 +166,15 @@ msgstr "Feil i autentisering"
 msgid "Token expired. Please reload page."
 msgstr ""
 
-#: search/provider/file.php:17 search/provider/file.php:35
+#: search/provider/file.php:18 search/provider/file.php:36
 msgid "Files"
 msgstr "Filer"
 
-#: search/provider/file.php:26 search/provider/file.php:33
+#: search/provider/file.php:27 search/provider/file.php:34
 msgid "Text"
 msgstr "Tekst"
 
-#: search/provider/file.php:29
+#: search/provider/file.php:30
 msgid "Images"
 msgstr ""
 
diff --git a/l10n/nn_NO/settings.po b/l10n/nn_NO/settings.po
index 6100216bbd..761b9f4627 100644
--- a/l10n/nn_NO/settings.po
+++ b/l10n/nn_NO/settings.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:45-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"PO-Revision-Date: 2013-09-24 08:30+0000\n"
+"Last-Translator: unhammer <unhammer+dill@mm.st>\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"
@@ -89,42 +89,42 @@ msgstr "Klarte ikkje oppdatera programmet."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Feil passord"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "Ingen brukar gitt"
 
 #: changepassword/controller.php:74
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Ver venleg og gi eit admingjenopprettingspassord, elles vil all brukardata gå tapt."
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "Feil admingjenopprettingspassord. Ver venleg og sjekk passordet og prøv igjen."
 
 #: changepassword/controller.php:87
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
+msgstr "Bakstykket støttar ikkje passordendring, men krypteringsnøkkelen til brukaren blei oppdatert."
 
 #: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Klarte ikkje å endra passordet"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Oppdater til {appversion}"
 
-#: js/apps.js:49 js/apps.js:82 js/apps.js:108
+#: js/apps.js:49 js/apps.js:82 js/apps.js:110
 msgid "Disable"
 msgstr "Slå av"
 
-#: js/apps.js:49 js/apps.js:89 js/apps.js:102 js/apps.js:117
+#: js/apps.js:49 js/apps.js:90 js/apps.js:103 js/apps.js:119
 msgid "Enable"
 msgstr "Slå på"
 
@@ -132,37 +132,37 @@ msgstr "Slå på"
 msgid "Please wait...."
 msgstr "Ver venleg og vent …"
 
-#: js/apps.js:79 js/apps.js:80 js/apps.js:100
+#: js/apps.js:79 js/apps.js:80 js/apps.js:101
 msgid "Error while disabling app"
 msgstr "Klarte ikkje å skru av programmet"
 
-#: js/apps.js:99 js/apps.js:112 js/apps.js:113
+#: js/apps.js:100 js/apps.js:114 js/apps.js:115
 msgid "Error while enabling app"
 msgstr "Klarte ikkje å skru på programmet"
 
-#: js/apps.js:123
+#: js/apps.js:125
 msgid "Updating...."
 msgstr "Oppdaterer …"
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error while updating app"
 msgstr "Feil ved oppdatering av app"
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error"
 msgstr "Feil"
 
-#: js/apps.js:127 templates/apps.php:43
+#: js/apps.js:129 templates/apps.php:43
 msgid "Update"
 msgstr "Oppdater"
 
-#: js/apps.js:130
+#: js/apps.js:132
 msgid "Updated"
 msgstr "Oppdatert"
 
 #: js/personal.js:220
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Vel eit profilbilete"
 
 #: js/personal.js:265
 msgid "Decrypting files... Please wait, this can take some time."
@@ -492,31 +492,31 @@ msgstr "Fyll inn e-postadressa di for å gjera passordgjenoppretting mogleg"
 
 #: templates/personal.php:86
 msgid "Profile picture"
-msgstr ""
+msgstr "Profilbilete"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Last opp ny"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Vel ny frå Filer"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Fjern bilete"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Anten PNG eller JPG. Helst kvadratisk, men du får moglegheita til å beskjera det."
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Avbryt"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Vel som profilbilete"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index e3ee79caef..a57486f5ed 100644
--- a/l10n/templates/core.pot
+++ b/l10n/templates/core.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-22 12:55-0400\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -316,7 +316,7 @@ msgstr ""
 #: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
 #: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
 #: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
-#: js/share.js:645 js/share.js:657
+#: js/share.js:656 js/share.js:668
 msgid "Error"
 msgstr ""
 
@@ -336,7 +336,7 @@ msgstr ""
 msgid "Share"
 msgstr ""
 
-#: js/share.js:131 js/share.js:685
+#: js/share.js:131 js/share.js:696
 msgid "Error while sharing"
 msgstr ""
 
@@ -436,23 +436,23 @@ msgstr ""
 msgid "share"
 msgstr ""
 
-#: js/share.js:400 js/share.js:632
+#: js/share.js:400 js/share.js:643
 msgid "Password protected"
 msgstr ""
 
-#: js/share.js:645
+#: js/share.js:656
 msgid "Error unsetting expiration date"
 msgstr ""
 
-#: js/share.js:657
+#: js/share.js:668
 msgid "Error setting expiration date"
 msgstr ""
 
-#: js/share.js:672
+#: js/share.js:683
 msgid "Sending ..."
 msgstr ""
 
-#: js/share.js:683
+#: js/share.js:694
 msgid "Email sent"
 msgstr ""
 
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index 6dd2e8281c..23d0cd0b17 100644
--- a/l10n/templates/files.pot
+++ b/l10n/templates/files.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-22 12:51-0400\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot
index 17a33f8792..44e17a2fcb 100644
--- a/l10n/templates/files_encryption.pot
+++ b/l10n/templates/files_encryption.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-22 12:51-0400\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot
index 5d1b69c53a..abdd985cfd 100644
--- a/l10n/templates/files_external.pot
+++ b/l10n/templates/files_external.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-22 12:54-0400\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot
index bc0fb489f7..34ed992660 100644
--- a/l10n/templates/files_sharing.pot
+++ b/l10n/templates/files_sharing.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-22 12:54-0400\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot
index c0b82eeb69..45fa700a43 100644
--- a/l10n/templates/files_trashbin.pot
+++ b/l10n/templates/files_trashbin.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-22 12:54-0400\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot
index 42221b0028..2e73cce980 100644
--- a/l10n/templates/files_versions.pot
+++ b/l10n/templates/files_versions.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-22 12:54-0400\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
index 15b4f1c6d0..0733e0c273 100644
--- a/l10n/templates/lib.pot
+++ b/l10n/templates/lib.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-22 12:56-0400\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index 4602bc52d6..66c00629bd 100644
--- a/l10n/templates/settings.pot
+++ b/l10n/templates/settings.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-22 12:56-0400\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -116,11 +116,11 @@ msgstr ""
 msgid "Update to {appversion}"
 msgstr ""
 
-#: js/apps.js:49 js/apps.js:82 js/apps.js:108
+#: js/apps.js:49 js/apps.js:82 js/apps.js:110
 msgid "Disable"
 msgstr ""
 
-#: js/apps.js:49 js/apps.js:89 js/apps.js:102 js/apps.js:117
+#: js/apps.js:49 js/apps.js:90 js/apps.js:103 js/apps.js:119
 msgid "Enable"
 msgstr ""
 
@@ -128,31 +128,31 @@ msgstr ""
 msgid "Please wait...."
 msgstr ""
 
-#: js/apps.js:79 js/apps.js:80 js/apps.js:100
+#: js/apps.js:79 js/apps.js:80 js/apps.js:101
 msgid "Error while disabling app"
 msgstr ""
 
-#: js/apps.js:99 js/apps.js:112 js/apps.js:113
+#: js/apps.js:100 js/apps.js:114 js/apps.js:115
 msgid "Error while enabling app"
 msgstr ""
 
-#: js/apps.js:123
+#: js/apps.js:125
 msgid "Updating...."
 msgstr ""
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error while updating app"
 msgstr ""
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error"
 msgstr ""
 
-#: js/apps.js:127 templates/apps.php:43
+#: js/apps.js:129 templates/apps.php:43
 msgid "Update"
 msgstr ""
 
-#: js/apps.js:130
+#: js/apps.js:132
 msgid "Updated"
 msgstr ""
 
diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot
index c27848c366..919a39b405 100644
--- a/l10n/templates/user_ldap.pot
+++ b/l10n/templates/user_ldap.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-22 12:54-0400\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot
index e23c0a1dc5..dfb732ed0c 100644
--- a/l10n/templates/user_webdavauth.pot
+++ b/l10n/templates/user_webdavauth.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-22 12:54-0400\n"
+"POT-Creation-Date: 2013-09-24 12:58-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/lib/l10n/nn_NO.php b/lib/l10n/nn_NO.php
index d5da8c6441..e8bf8dfdef 100644
--- a/lib/l10n/nn_NO.php
+++ b/lib/l10n/nn_NO.php
@@ -5,6 +5,8 @@ $TRANSLATIONS = array(
 "Settings" => "Innstillingar",
 "Users" => "Brukarar",
 "Admin" => "Administrer",
+"Unknown filetype" => "Ukjend filtype",
+"Invalid image" => "Ugyldig bilete",
 "web services under your control" => "Vev tjenester under din kontroll",
 "Authentication error" => "Feil i autentisering",
 "Files" => "Filer",
diff --git a/settings/l10n/da.php b/settings/l10n/da.php
index 9872d3f5e0..fcff9dbcfd 100644
--- a/settings/l10n/da.php
+++ b/settings/l10n/da.php
@@ -16,6 +16,11 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Brugeren kan ikke tilføjes til gruppen %s",
 "Unable to remove user from group %s" => "Brugeren kan ikke fjernes fra gruppen %s",
 "Couldn't update app." => "Kunne ikke opdatere app'en.",
+"Wrong password" => "Forkert kodeord",
+"No user supplied" => "Intet brugernavn givet",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Angiv venligst en admininstrator gendannelseskode, ellers vil alt brugerdata gå tabt",
+"Wrong admin recovery password. Please check the password and try again." => "Forkert admin gendannelseskode. Se venligst koden efter og prøv igen.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Serveren understøtter ikke kodeordsskifte, men brugernes krypteringsnøgle blev opdateret.",
 "Update to {appversion}" => "Opdatér til {appversion}",
 "Disable" => "Deaktiver",
 "Enable" => "Aktiver",
diff --git a/settings/l10n/nn_NO.php b/settings/l10n/nn_NO.php
index 822a17e783..9eb31a887b 100644
--- a/settings/l10n/nn_NO.php
+++ b/settings/l10n/nn_NO.php
@@ -16,6 +16,12 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Klarte ikkje leggja til brukaren til gruppa %s",
 "Unable to remove user from group %s" => "Klarte ikkje fjerna brukaren frå gruppa %s",
 "Couldn't update app." => "Klarte ikkje oppdatera programmet.",
+"Wrong password" => "Feil passord",
+"No user supplied" => "Ingen brukar gitt",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Ver venleg og gi eit admingjenopprettingspassord, elles vil all brukardata gå tapt.",
+"Wrong admin recovery password. Please check the password and try again." => "Feil admingjenopprettingspassord. Ver venleg og sjekk passordet og prøv igjen.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Bakstykket støttar ikkje passordendring, men krypteringsnøkkelen til brukaren blei oppdatert.",
+"Unable to change password" => "Klarte ikkje å endra passordet",
 "Update to {appversion}" => "Oppdater til {appversion}",
 "Disable" => "Slå av",
 "Enable" => "Slå på",
@@ -27,6 +33,7 @@ $TRANSLATIONS = array(
 "Error" => "Feil",
 "Update" => "Oppdater",
 "Updated" => "Oppdatert",
+"Select a profile picture" => "Vel eit profilbilete",
 "Decrypting files... Please wait, this can take some time." => "Dekrypterer filer … Ver venleg og vent, dette kan ta ei stund.",
 "Saving..." => "Lagrar …",
 "deleted" => "sletta",
@@ -100,6 +107,13 @@ $TRANSLATIONS = array(
 "Email" => "E-post",
 "Your email address" => "Di epost-adresse",
 "Fill in an email address to enable password recovery" => "Fyll inn e-postadressa di for å gjera passordgjenoppretting mogleg",
+"Profile picture" => "Profilbilete",
+"Upload new" => "Last opp ny",
+"Select new from Files" => "Vel ny frå Filer",
+"Remove image" => "Fjern bilete",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Anten PNG eller JPG. Helst kvadratisk, men du får moglegheita til å beskjera det.",
+"Abort" => "Avbryt",
+"Choose as profile image" => "Vel som profilbilete",
 "Language" => "Språk",
 "Help translate" => "Hjelp oss å omsetja",
 "WebDAV" => "WebDAV",
-- 
GitLab


From 9e4fe103291133ea78427af18693d93bd78d2bd0 Mon Sep 17 00:00:00 2001
From: Georg Ehrke <developer@georgehrke.com>
Date: Wed, 25 Sep 2013 10:20:40 +0200
Subject: [PATCH 201/248] add test for txt blacklist

---
 tests/lib/preview.php | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/tests/lib/preview.php b/tests/lib/preview.php
index bebdc12b50..c40b2d03ef 100644
--- a/tests/lib/preview.php
+++ b/tests/lib/preview.php
@@ -92,6 +92,44 @@ class Preview extends \PHPUnit_Framework_TestCase {
 		$this->assertEquals($image->height(), $maxY);
 	}
 
+	public function testTxtBlacklist() {
+		$user = $this->initFS();
+
+		$x = 32;
+		$y = 32;
+
+		$txt = 'random text file';
+		$ics = file_get_contents(__DIR__ . '/../data/testcal.ics');
+		$vcf = file_get_contents(__DIR__ . '/../data/testcontact.vcf');
+
+		$rootView = new \OC\Files\View('');
+		$rootView->mkdir('/'.$user);
+		$rootView->mkdir('/'.$user.'/files');
+
+		$toTest = array('txt',
+						'ics',
+						'vcf');
+
+		foreach($toTest as $test) {
+			$sample = '/'.$user.'/files/test.'.$test;
+			$rootView->file_put_contents($sample, ${$test});
+			$preview = new \OC\Preview($user, 'files/', 'test.'.$test, $x, $y);
+			$image = $preview->getPreview();
+			$resource = $image->resource();
+
+			//http://stackoverflow.com/questions/5702953/imagecolorat-and-transparency
+			$colorIndex = imagecolorat($resource, 1, 1);
+			$colorInfo = imagecolorsforindex($resource, $colorIndex);
+			$isTransparent = ($colorInfo['alpha'] === 127);
+
+			if($test === 'txt') {
+				$this->assertEquals($isTransparent, false);
+			} else {
+				$this->assertEquals($isTransparent, true);
+			}
+		}
+	}
+
 	private function initFS() {
 		if(\OC\Files\Filesystem::getView()){
 			$user = \OC_User::getUser();
-- 
GitLab


From b2ef978d1069d5e7e172806a9e2426de2717a1f2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 25 Sep 2013 10:30:48 +0200
Subject: [PATCH 202/248] AppFramework: - get request from the server container
 - implement registerMiddleWare() - adding getAppName() to app container

---
 .../dependencyinjection/dicontainer.php       | 50 +++++++++----------
 lib/public/appframework/iappcontainer.php     | 12 +++++
 2 files changed, 37 insertions(+), 25 deletions(-)

diff --git a/lib/appframework/dependencyinjection/dicontainer.php b/lib/appframework/dependencyinjection/dicontainer.php
index 2ef885d7b2..5487826693 100644
--- a/lib/appframework/dependencyinjection/dicontainer.php
+++ b/lib/appframework/dependencyinjection/dicontainer.php
@@ -34,6 +34,8 @@ use OC\AppFramework\Utility\SimpleContainer;
 use OC\AppFramework\Utility\TimeFactory;
 use OCP\AppFramework\IApi;
 use OCP\AppFramework\IAppContainer;
+use OCP\AppFramework\IMiddleWare;
+use OCP\IServerContainer;
 
 
 class DIContainer extends SimpleContainer implements IAppContainer{
@@ -57,31 +59,10 @@ class DIContainer extends SimpleContainer implements IAppContainer{
 		 * Http
 		 */
 		$this['Request'] = $this->share(function($c) {
-
-			$params = array();
-
-			// we json decode the body only in case of content type json
-			if (isset($_SERVER['CONTENT_TYPE']) && stripos($_SERVER['CONTENT_TYPE'],'json') === true ) {
-				$params = json_decode(file_get_contents('php://input'), true);
-				$params = is_array($params) ? $params: array();
-			}
-
-			return new Request(
-				array(
-					'get' => $_GET,
-					'post' => $_POST,
-					'files' => $_FILES,
-					'server' => $_SERVER,
-					'env' => $_ENV,
-					'session' => $_SESSION,
-					'cookies' => $_COOKIE,
-					'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD']))
-							? $_SERVER['REQUEST_METHOD']
-							: null,
-					'params' => $params,
-					'urlParams' => $c['urlParams']
-				)
-			);
+			/** @var $c SimpleContainer */
+			/** @var $server IServerContainer */
+			$server = $c->query('ServerContainer');
+			return $server->getRequest();
 		});
 
 		$this['Protocol'] = $this->share(function($c){
@@ -138,4 +119,23 @@ class DIContainer extends SimpleContainer implements IAppContainer{
 	{
 		return $this->query('ServerContainer');
 	}
+
+	/**
+	 * @param IMiddleWare $middleWare
+	 * @return boolean
+	 */
+	function registerMiddleWare(IMiddleWare $middleWare) {
+		/** @var $dispatcher MiddlewareDispatcher */
+		$dispatcher = $this->query('MiddlewareDispatcher');
+		$dispatcher->registerMiddleware($middleWare);
+
+	}
+
+	/**
+	 * used to return the appname of the set application
+	 * @return string the name of your application
+	 */
+	function getAppName() {
+		return $this->query('AppName');
+	}
 }
diff --git a/lib/public/appframework/iappcontainer.php b/lib/public/appframework/iappcontainer.php
index c8f6229dd9..7d3b4b3bac 100644
--- a/lib/public/appframework/iappcontainer.php
+++ b/lib/public/appframework/iappcontainer.php
@@ -33,6 +33,12 @@ use OCP\IContainer;
  */
 interface IAppContainer extends IContainer{
 
+	/**
+	 * used to return the appname of the set application
+	 * @return string the name of your application
+	 */
+	function getAppName();
+
 	/**
 	 * @return IApi
 	 */
@@ -42,4 +48,10 @@ interface IAppContainer extends IContainer{
 	 * @return \OCP\IServerContainer
 	 */
 	function getServer();
+
+	/**
+	 * @param IMiddleWare $middleWare
+	 * @return boolean
+	 */
+	function registerMiddleWare(IMiddleWare $middleWare);
 }
-- 
GitLab


From b168d5aa3b16501e9cb4eaa3b665939dde5de52b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 25 Sep 2013 11:05:24 +0200
Subject: [PATCH 203/248] class API decommissioning part 1

---
 lib/appframework/core/api.php    | 217 +++----------------------------
 lib/public/appframework/iapi.php |  89 +------------
 2 files changed, 21 insertions(+), 285 deletions(-)

diff --git a/lib/appframework/core/api.php b/lib/appframework/core/api.php
index 337e3b57d6..39522ee3dd 100644
--- a/lib/appframework/core/api.php
+++ b/lib/appframework/core/api.php
@@ -46,24 +46,6 @@ class API implements IApi{
 	}
 
 
-	/**
-	 * used to return the appname of the set application
-	 * @return string the name of your application
-	 */
-	public function getAppName(){
-		return $this->appName;
-	}
-
-
-	/**
-	 * Creates a new navigation entry
-	 * @param array $entry containing: id, name, order, icon and href key
-	 */
-	public function addNavigationEntry(array $entry){
-		\OCP\App::addNavigationEntry($entry);
-	}
-
-
 	/**
 	 * Gets the userid of the current user
 	 * @return string the user id of the current user
@@ -73,14 +55,6 @@ class API implements IApi{
 	}
 
 
-	/**
-	 * Sets the current navigation entry to the currently running app
-	 */
-	public function activateNavigationEntry(){
-		\OCP\App::setActiveNavigationEntry($this->appName);
-	}
-
-
 	/**
 	 * Adds a new javascript file
 	 * @param string $scriptName the name of the javascript in js/ without the suffix
@@ -124,79 +98,6 @@ class API implements IApi{
 		\OCP\Util::addStyle($this->appName . '/3rdparty', $name);
 	}
 
-	/**
-	 * Looks up a systemwide defined value
-	 * @param string $key the key of the value, under which it was saved
-	 * @return string the saved value
-	 */
-	public function getSystemValue($key){
-		return \OCP\Config::getSystemValue($key, '');
-	}
-
-
-	/**
-	 * Sets a new systemwide value
-	 * @param string $key the key of the value, under which will be saved
-	 * @param string $value the value that should be stored
-	 */
-	public function setSystemValue($key, $value){
-		return \OCP\Config::setSystemValue($key, $value);
-	}
-
-
-	/**
-	 * Looks up an appwide defined value
-	 * @param string $key the key of the value, under which it was saved
-	 * @return string the saved value
-	 */
-	public function getAppValue($key, $appName=null){
-		if($appName === null){
-			$appName = $this->appName;
-		}
-		return \OCP\Config::getAppValue($appName, $key, '');
-	}
-
-
-	/**
-	 * Writes a new appwide value
-	 * @param string $key the key of the value, under which will be saved
-	 * @param string $value the value that should be stored
-	 */
-	public function setAppValue($key, $value, $appName=null){
-		if($appName === null){
-			$appName = $this->appName;
-		}
-		return \OCP\Config::setAppValue($appName, $key, $value);
-	}
-
-
-
-	/**
-	 * Shortcut for setting a user defined value
-	 * @param string $key the key under which the value is being stored
-	 * @param string $value the value that you want to store
-	 * @param string $userId the userId of the user that we want to store the value under, defaults to the current one
-	 */
-	public function setUserValue($key, $value, $userId=null){
-		if($userId === null){
-			$userId = $this->getUserId();
-		}
-		\OCP\Config::setUserValue($userId, $this->appName, $key, $value);
-	}
-
-
-	/**
-	 * Shortcut for getting a user defined value
-	 * @param string $key the key under which the value is being stored
-	 * @param string $userId the userId of the user that we want to store the value under, defaults to the current one
-	 */
-	public function getUserValue($key, $userId=null){
-		if($userId === null){
-			$userId = $this->getUserId();
-		}
-		return \OCP\Config::getUserValue($userId, $this->appName, $key);
-	}
-
 
 	/**
 	 * Returns the translation object
@@ -208,28 +109,6 @@ class API implements IApi{
 	}
 
 
-	/**
-	 * Used to abstract the owncloud database access away
-	 * @param string $sql the sql query with ? placeholder for params
-	 * @param int $limit the maximum number of rows
-	 * @param int $offset from which row we want to start
-	 * @return \OCP\DB a query object
-	 */
-	public function prepareQuery($sql, $limit=null, $offset=null){
-		return \OCP\DB::prepare($sql, $limit, $offset);
-	}
-
-
-	/**
-	 * Used to get the id of the just inserted element
-	 * @param string $tableName the name of the table where we inserted the item
-	 * @return int the id of the inserted element
-	 */
-	public function getInsertId($tableName){
-		return \OCP\DB::insertid($tableName);
-	}
-
-
 	/**
 	 * Returns the URL for a route
 	 * @param string $routeName the name of the route
@@ -293,37 +172,6 @@ class API implements IApi{
 	}
 
 
-	/**
-	 * Checks if the current user is logged in
-	 * @return bool true if logged in
-	 */
-	public function isLoggedIn(){
-		return \OCP\User::isLoggedIn();
-	}
-
-
-	/**
-	 * Checks if a user is an admin
-	 * @param string $userId the id of the user
-	 * @return bool true if admin
-	 */
-	public function isAdminUser($userId){
-		# TODO: use public api
-		return \OC_User::isAdminUser($userId);
-	}
-
-
-	/**
-	 * Checks if a user is an subadmin
-	 * @param string $userId the id of the user
-	 * @return bool true if subadmin
-	 */
-	public function isSubAdminUser($userId){
-		# TODO: use public api
-		return \OC_SubAdmin::isSubAdmin($userId);
-	}
-
-
 	/**
 	 * Checks if the CSRF check was correct
 	 * @return bool true if CSRF check passed
@@ -371,26 +219,6 @@ class API implements IApi{
 	}
 
 
-	/**
-	 * Returns a template
-	 * @param string $templateName the name of the template
-	 * @param string $renderAs how it should be rendered
-	 * @param string $appName the name of the app
-	 * @return \OCP\Template a new template
-	 */
-	public function getTemplate($templateName, $renderAs='user', $appName=null){
-		if($appName === null){
-			$appName = $this->appName;
-		}
-
-		if($renderAs === 'blank'){
-			return new \OCP\Template($appName, $templateName);
-		} else {
-			return new \OCP\Template($appName, $templateName, $renderAs);
-		}
-	}
-
-
 	/**
 	 * turns an owncloud path into a path on the filesystem
 	 * @param string path the path to the file on the oc filesystem
@@ -467,6 +295,26 @@ class API implements IApi{
 		\OCP\Backgroundjob::addRegularTask($className, $methodName);
 	}
 
+	/**
+	 * Returns a template
+	 * @param string $templateName the name of the template
+	 * @param string $renderAs how it should be rendered
+	 * @param string $appName the name of the app
+	 * @return \OCP\Template a new template
+	 */
+	public function getTemplate($templateName, $renderAs='user', $appName=null){
+		if($appName === null){
+			$appName = $this->appName;
+		}
+
+		if($renderAs === 'blank'){
+			return new \OCP\Template($appName, $templateName);
+		} else {
+			return new \OCP\Template($appName, $templateName, $renderAs);
+		}
+	}
+
+
 	/**
 	 * Tells ownCloud to include a template in the admin overview
 	 * @param string $mainPath the path to the main php file without the php
@@ -481,23 +329,6 @@ class API implements IApi{
 		\OCP\App::registerAdmin($appName, $mainPath);
 	}
 
-	/**
-	 * Do a user login
-	 * @param string $user the username
-	 * @param string $password the password
-	 * @return bool true if successful
-	 */
-	public function login($user, $password) {
-		return \OC_User::login($user, $password);
-	}
-
-	/**
-	 * @brief Loggs the user out including all the session data
-	 * Logout, destroys session
-	 */
-	public function logout() {
-		return \OCP\User::logout();
-	}
 
 	/**
 	 * get the filesystem info
@@ -514,12 +345,4 @@ class API implements IApi{
 		return \OC\Files\Filesystem::getFileInfo($path);
 	}
 
-	/**
-	 * get the view
-	 *
-	 * @return OC\Files\View instance
-	 */
-	public function getView() {
-		return \OC\Files\Filesystem::getView();
-	}
 }
diff --git a/lib/public/appframework/iapi.php b/lib/public/appframework/iapi.php
index 5374f0dcaf..fa6af5f596 100644
--- a/lib/public/appframework/iapi.php
+++ b/lib/public/appframework/iapi.php
@@ -30,19 +30,6 @@ namespace OCP\AppFramework;
  */
 interface IApi {
 
-	/**
-	 * used to return the appname of the set application
-	 * @return string the name of your application
-	 */
-	function getAppName();
-
-
-	/**
-	 * Creates a new navigation entry
-	 * @param array $entry containing: id, name, order, icon and href key
-	 */
-	function addNavigationEntry(array $entry);
-
 
 	/**
 	 * Gets the userid of the current user
@@ -51,12 +38,6 @@ interface IApi {
 	function getUserId();
 
 
-	/**
-	 * Sets the current navigation entry to the currently running app
-	 */
-	function activateNavigationEntry();
-
-
 	/**
 	 * Adds a new javascript file
 	 * @param string $scriptName the name of the javascript in js/ without the suffix
@@ -86,53 +67,6 @@ interface IApi {
 	 */
 	function add3rdPartyStyle($name);
 
-	/**
-	 * Looks up a system-wide defined value
-	 * @param string $key the key of the value, under which it was saved
-	 * @return string the saved value
-	 */
-	function getSystemValue($key);
-
-	/**
-	 * Sets a new system-wide value
-	 * @param string $key the key of the value, under which will be saved
-	 * @param string $value the value that should be stored
-	 */
-	function setSystemValue($key, $value);
-
-
-	/**
-	 * Looks up an app-specific defined value
-	 * @param string $key the key of the value, under which it was saved
-	 * @return string the saved value
-	 */
-	function getAppValue($key, $appName = null);
-
-
-	/**
-	 * Writes a new app-specific value
-	 * @param string $key the key of the value, under which will be saved
-	 * @param string $value the value that should be stored
-	 */
-	function setAppValue($key, $value, $appName = null);
-
-
-	/**
-	 * Shortcut for setting a user defined value
-	 * @param string $key the key under which the value is being stored
-	 * @param string $value the value that you want to store
-	 * @param string $userId the userId of the user that we want to store the value under, defaults to the current one
-	 */
-	function setUserValue($key, $value, $userId = null);
-
-
-	/**
-	 * Shortcut for getting a user defined value
-	 * @param string $key the key under which the value is being stored
-	 * @param string $userId the userId of the user that we want to store the value under, defaults to the current one
-	 */
-	function getUserValue($key, $userId = null);
-
 	/**
 	 * Returns the translation object
 	 * @return \OC_L10N the translation object
@@ -142,28 +76,6 @@ interface IApi {
 	function getTrans();
 
 
-	/**
-	 * Used to abstract the owncloud database access away
-	 * @param string $sql the sql query with ? placeholder for params
-	 * @param int $limit the maximum number of rows
-	 * @param int $offset from which row we want to start
-	 * @return \OCP\DB a query object
-	 *
-	 * FIXME: returns non public interface / object
-	 */
-	function prepareQuery($sql, $limit=null, $offset=null);
-
-
-	/**
-	 * Used to get the id of the just inserted element
-	 * @param string $tableName the name of the table where we inserted the item
-	 * @return int the id of the inserted element
-	 *
-	 * FIXME: move to db object
-	 */
-	function getInsertId($tableName);
-
-
 	/**
 	 * Returns the URL for a route
 	 * @param string $routeName the name of the route
@@ -235,4 +147,5 @@ interface IApi {
 	 * @return \OCP\Template a new template
 	 */
 	function getTemplate($templateName, $renderAs='user', $appName=null);
+
 }
-- 
GitLab


From 30286c06ab50a04424c415d1007bac66d452208d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 25 Sep 2013 11:05:59 +0200
Subject: [PATCH 204/248] stripos return value check

---
 lib/server.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/server.php b/lib/server.php
index fccb8fad4d..9de9f5a056 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -25,7 +25,7 @@ class Server extends SimpleContainer implements IServerContainer {
 			$params = array();
 
 			// we json decode the body only in case of content type json
-			if (isset($_SERVER['CONTENT_TYPE']) && stripos($_SERVER['CONTENT_TYPE'],'json') === true ) {
+			if (isset($_SERVER['CONTENT_TYPE']) && stripos($_SERVER['CONTENT_TYPE'],'json') !== false ) {
 				$params = json_decode(file_get_contents('php://input'), true);
 				$params = is_array($params) ? $params: array();
 			}
-- 
GitLab


From 24eb41548eb6fc08849619b9725cbb61679f04f6 Mon Sep 17 00:00:00 2001
From: kondou <kondou@ts.unde.re>
Date: Wed, 25 Sep 2013 12:57:41 +0200
Subject: [PATCH 205/248] Make it possible to have a different color than the
 username for placeholder

---
 core/js/placeholder.js | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/core/js/placeholder.js b/core/js/placeholder.js
index d63730547d..3c7b11ef46 100644
--- a/core/js/placeholder.js
+++ b/core/js/placeholder.js
@@ -36,10 +36,22 @@
  *
  * <div id="albumart" style="background-color: hsl(123, 90%, 65%); ... ">T</div>
  *
+ * You may also call it like this, to have a different background, than the seed:
+ *
+ * $('#albumart').placeholder('The Album Title', 'Album Title');
+ *
+ * Resulting in:
+ *
+ * <div id="albumart" style="background-color: hsl(123, 90%, 65%); ... ">A</div>
+ *
  */
 
 (function ($) {
-	$.fn.placeholder = function(seed) {
+	$.fn.placeholder = function(seed, text) {
+		if (typeof(text) === "undefined") {
+			text = seed;
+		}
+
 		var hash = md5(seed),
 			maxRange = parseInt('ffffffffffffffffffffffffffffffff', 16),
 			hue = parseInt(hash, 16) / maxRange * 256,
@@ -56,7 +68,7 @@
 		this.css('font-size', (height * 0.55) + 'px');
 
 		if(seed !== null && seed.length) {
-			this.html(seed[0].toUpperCase());
+			this.html(text[0].toUpperCase());
 		}
 	};
 }(jQuery));
-- 
GitLab


From 0486dc24adef5caf4582f54da00b8d1ee251aae6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 25 Sep 2013 14:41:03 +0200
Subject: [PATCH 206/248] collect coverage for all databases again -
 ci.owncloud.org has more RAM available

---
 autotest.sh | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/autotest.sh b/autotest.sh
index a343f6a25a..83f184fa9c 100755
--- a/autotest.sh
+++ b/autotest.sh
@@ -142,12 +142,7 @@ EOF
 	rm -rf coverage-html-$1
 	mkdir coverage-html-$1
 	php -f enable_all.php
-	if [ "$1" == "sqlite" ] ; then
-		# coverage only with sqlite - causes segfault on ci.tmit.eu - reason unknown
-		phpunit --configuration phpunit-autotest.xml --log-junit autotest-results-$1.xml --coverage-clover autotest-clover-$1.xml --coverage-html coverage-html-$1 $2 $3
-	else
-		phpunit --configuration phpunit-autotest.xml --log-junit autotest-results-$1.xml $2 $3
-	fi
+	phpunit --configuration phpunit-autotest.xml --log-junit autotest-results-$1.xml --coverage-clover autotest-clover-$1.xml --coverage-html coverage-html-$1 $2 $3
 }
 
 #
-- 
GitLab


From 1c976a7c9bd27f1fe3f2b1834fd3cbdf5f235bc1 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon <blizzz@owncloud.com>
Date: Wed, 25 Sep 2013 15:03:22 +0200
Subject: [PATCH 207/248] manager checkPassword now returns User object, adjust
 internal user class accordingly.

---
 lib/user.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/user.php b/lib/user.php
index da774ff86f..b5fd418acd 100644
--- a/lib/user.php
+++ b/lib/user.php
@@ -419,7 +419,7 @@ class OC_User {
 		$manager = self::getManager();
 		$username = $manager->checkPassword($uid, $password);
 		if ($username !== false) {
-			return $manager->get($username)->getUID();
+			return $username->getUID();
 		}
 		return false;
 	}
-- 
GitLab


From 09b64535a9099bdf9c71fa96b3aab2e49206ffde Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 25 Sep 2013 17:00:20 +0200
Subject: [PATCH 208/248] fixing copyright and add class documentation

---
 apps/files/appinfo/remote.php                 |   1 +
 .../sabre/aborteduploaddetectionplugin.php    | 105 ++++++++++++++++++
 lib/connector/sabre/directory.php             |  13 ---
 3 files changed, 106 insertions(+), 13 deletions(-)
 create mode 100644 lib/connector/sabre/aborteduploaddetectionplugin.php

diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php
index 9b114ca2e3..0c1f2e6580 100644
--- a/apps/files/appinfo/remote.php
+++ b/apps/files/appinfo/remote.php
@@ -48,6 +48,7 @@ $defaults = new OC_Defaults();
 $server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend, $defaults->getName()));
 $server->addPlugin(new Sabre_DAV_Locks_Plugin($lockBackend));
 $server->addPlugin(new Sabre_DAV_Browser_Plugin(false)); // Show something in the Browser, but no upload
+$server->addPlugin(new OC_Connector_Sabre_AbortedUploadDetectionPlugin());
 $server->addPlugin(new OC_Connector_Sabre_QuotaPlugin());
 $server->addPlugin(new OC_Connector_Sabre_MaintenancePlugin());
 
diff --git a/lib/connector/sabre/aborteduploaddetectionplugin.php b/lib/connector/sabre/aborteduploaddetectionplugin.php
new file mode 100644
index 0000000000..745c4a9942
--- /dev/null
+++ b/lib/connector/sabre/aborteduploaddetectionplugin.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Müller <thomas.mueller@tmit.eu>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+/**
+ * Class OC_Connector_Sabre_AbortedUploadDetectionPlugin
+ *
+ * This plugin will verify if the uploaded data has been stored completely.
+ * This is done by comparing the content length of the request with the file size on storage.
+ */
+class OC_Connector_Sabre_AbortedUploadDetectionPlugin extends Sabre_DAV_ServerPlugin {
+
+	/**
+	 * Reference to main server object
+	 *
+	 * @var Sabre_DAV_Server
+	 */
+	private $server;
+
+	/**
+	 * is kept public to allow overwrite for unit testing
+	 *
+	 * @var \OC\Files\View
+	 */
+	public $fileView;
+
+	/**
+	 * This initializes the plugin.
+	 *
+	 * This function is called by Sabre_DAV_Server, after
+	 * addPlugin is called.
+	 *
+	 * This method should set up the requires event subscriptions.
+	 *
+	 * @param Sabre_DAV_Server $server
+	 * @return void
+	 */
+	public function initialize(Sabre_DAV_Server $server) {
+
+		$this->server = $server;
+
+		$server->subscribeEvent('afterCreateFile', array($this, 'afterCreateFile'), 10);
+		$server->subscribeEvent('afterWriteContent', array($this, 'afterWriteContent'), 10);
+	}
+
+	function afterCreateFile($path, Sabre_DAV_ICollection $parent) {
+
+		$this->verifyContentLength($path);
+
+	}
+
+	function afterWriteContent($path, Sabre_DAV_IFile $node) {
+		$path = $path .'/'.$node->getName();
+		$this->verifyContentLength($path);
+	}
+
+	function verifyContentLength($filePath) {
+
+		// ownCloud chunked upload will be handled in it's own plugin
+		$chunkHeader = $this->server->httpRequest->getHeader('OC-Chunked');
+		if ($chunkHeader) {
+			return;
+		}
+
+		// compare expected and actual size
+		$expected = $this->getLength();
+		$actual = $this->getFileView()->filesize($filePath);
+		if ($actual != $expected) {
+			$this->getFileView()->unlink($filePath);
+			throw new Sabre_DAV_Exception_BadRequest('expected filesize ' . $expected . ' got ' . $actual);
+		}
+
+	}
+
+	/**
+	 * @return string
+	 */
+	public function getLength()
+	{
+		$req = $this->server->httpRequest;
+		$length = $req->getHeader('X-Expected-Entity-Length');
+		if (!$length) {
+			$length = $req->getHeader('Content-Length');
+		}
+
+		return $length;
+	}
+
+	/**
+	 * @return \OC\Files\View
+	 */
+	public function getFileView()
+	{
+		if (is_null($this->fileView)) {
+			// initialize fileView
+			$this->fileView = \OC\Files\Filesystem::getView();
+		}
+
+		return $this->fileView;
+	}
+}
diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php
index 3181a4b310..29374f7a6c 100644
--- a/lib/connector/sabre/directory.php
+++ b/lib/connector/sabre/directory.php
@@ -74,19 +74,6 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
 
 			\OC\Files\Filesystem::file_put_contents($partpath, $data);
 
-			//detect aborted upload
-			if (isset ($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'PUT' ) {
-				if (isset($_SERVER['CONTENT_LENGTH'])) {
-					$expected = $_SERVER['CONTENT_LENGTH'];
-					$actual = \OC\Files\Filesystem::filesize($partpath);
-					if ($actual != $expected) {
-						\OC\Files\Filesystem::unlink($partpath);
-						throw new Sabre_DAV_Exception_BadRequest(
-								'expected filesize ' . $expected . ' got ' . $actual);
-					}
-				}
-			}
-
 			// rename to correct path
 			\OC\Files\Filesystem::rename($partpath, $newPath);
 
-- 
GitLab


From 5e27ac4b1ade3a78941ced1eef5aaa2d2df0cedf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 25 Sep 2013 17:17:29 +0200
Subject: [PATCH 209/248] $path already contains the full path to the file

---
 lib/connector/sabre/aborteduploaddetectionplugin.php | 1 -
 1 file changed, 1 deletion(-)

diff --git a/lib/connector/sabre/aborteduploaddetectionplugin.php b/lib/connector/sabre/aborteduploaddetectionplugin.php
index 745c4a9942..1173ff2f9a 100644
--- a/lib/connector/sabre/aborteduploaddetectionplugin.php
+++ b/lib/connector/sabre/aborteduploaddetectionplugin.php
@@ -54,7 +54,6 @@ class OC_Connector_Sabre_AbortedUploadDetectionPlugin extends Sabre_DAV_ServerPl
 	}
 
 	function afterWriteContent($path, Sabre_DAV_IFile $node) {
-		$path = $path .'/'.$node->getName();
 		$this->verifyContentLength($path);
 	}
 
-- 
GitLab


From 5e7a7b3f6187365c60e63dfed8699e525be45a0b Mon Sep 17 00:00:00 2001
From: kondou <kondou@ts.unde.re>
Date: Wed, 25 Sep 2013 17:19:38 +0200
Subject: [PATCH 210/248] Shorten optional text-argument processing

---
 core/js/placeholder.js | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/core/js/placeholder.js b/core/js/placeholder.js
index 3c7b11ef46..ee2a8ce84c 100644
--- a/core/js/placeholder.js
+++ b/core/js/placeholder.js
@@ -48,9 +48,8 @@
 
 (function ($) {
 	$.fn.placeholder = function(seed, text) {
-		if (typeof(text) === "undefined") {
-			text = seed;
-		}
+		// set optional argument "text" to value of "seed" if undefined
+		text = text || seed;
 
 		var hash = md5(seed),
 			maxRange = parseInt('ffffffffffffffffffffffffffffffff', 16),
-- 
GitLab


From 0c44cdd4eaa82687bce4dbbb24338b16a3f4ed13 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 25 Sep 2013 17:28:45 +0200
Subject: [PATCH 211/248] remove unneccessary code

---
 .../sabre/aborteduploaddetectionplugin.php    | 24 +++++++++----------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/lib/connector/sabre/aborteduploaddetectionplugin.php b/lib/connector/sabre/aborteduploaddetectionplugin.php
index 1173ff2f9a..74c26f41b6 100644
--- a/lib/connector/sabre/aborteduploaddetectionplugin.php
+++ b/lib/connector/sabre/aborteduploaddetectionplugin.php
@@ -43,21 +43,16 @@ class OC_Connector_Sabre_AbortedUploadDetectionPlugin extends Sabre_DAV_ServerPl
 
 		$this->server = $server;
 
-		$server->subscribeEvent('afterCreateFile', array($this, 'afterCreateFile'), 10);
-		$server->subscribeEvent('afterWriteContent', array($this, 'afterWriteContent'), 10);
+		$server->subscribeEvent('afterCreateFile', array($this, 'verifyContentLength'), 10);
+		$server->subscribeEvent('afterWriteContent', array($this, 'verifyContentLength'), 10);
 	}
 
-	function afterCreateFile($path, Sabre_DAV_ICollection $parent) {
-
-		$this->verifyContentLength($path);
-
-	}
-
-	function afterWriteContent($path, Sabre_DAV_IFile $node) {
-		$this->verifyContentLength($path);
-	}
-
-	function verifyContentLength($filePath) {
+	/**
+	 * @param $filePath
+	 * @param Sabre_DAV_INode $node
+	 * @throws Sabre_DAV_Exception_BadRequest
+	 */
+	public function verifyContentLength($filePath, Sabre_DAV_INode $node = null) {
 
 		// ownCloud chunked upload will be handled in it's own plugin
 		$chunkHeader = $this->server->httpRequest->getHeader('OC-Chunked');
@@ -67,6 +62,9 @@ class OC_Connector_Sabre_AbortedUploadDetectionPlugin extends Sabre_DAV_ServerPl
 
 		// compare expected and actual size
 		$expected = $this->getLength();
+		if (!$expected) {
+			return;
+		}
 		$actual = $this->getFileView()->filesize($filePath);
 		if ($actual != $expected) {
 			$this->getFileView()->unlink($filePath);
-- 
GitLab


From 3fa5271f10369645564f19a5706e23e0660bbbc8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 25 Sep 2013 17:34:28 +0200
Subject: [PATCH 212/248] adding unit tests

---
 .../sabre/aborteduploaddetectionplugin.php    | 93 +++++++++++++++++++
 1 file changed, 93 insertions(+)
 create mode 100644 tests/lib/connector/sabre/aborteduploaddetectionplugin.php

diff --git a/tests/lib/connector/sabre/aborteduploaddetectionplugin.php b/tests/lib/connector/sabre/aborteduploaddetectionplugin.php
new file mode 100644
index 0000000000..8237bdbd9e
--- /dev/null
+++ b/tests/lib/connector/sabre/aborteduploaddetectionplugin.php
@@ -0,0 +1,93 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Müller <thomas.mueller@tmit.eu>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class Test_OC_Connector_Sabre_AbortedUploadDetectionPlugin extends PHPUnit_Framework_TestCase {
+
+	/**
+	 * @var Sabre_DAV_Server
+	 */
+	private $server;
+
+	/**
+	 * @var OC_Connector_Sabre_AbortedUploadDetectionPlugin
+	 */
+	private $plugin;
+
+	public function setUp() {
+		$this->server = new Sabre_DAV_Server();
+		$this->plugin = new OC_Connector_Sabre_AbortedUploadDetectionPlugin();
+		$this->plugin->initialize($this->server);
+	}
+
+	/**
+	 * @dataProvider lengthProvider
+	 */
+	public function testLength($expected, $headers)
+	{
+		$this->server->httpRequest = new Sabre_HTTP_Request($headers);
+		$length = $this->plugin->getLength();
+		$this->assertEquals($expected, $length);
+	}
+
+	/**
+	 * @dataProvider verifyContentLengthProvider
+	 */
+	public function testVerifyContentLength($fileSize, $headers)
+	{
+		$this->plugin->fileView = $this->buildFileViewMock($fileSize);
+
+		$this->server->httpRequest = new Sabre_HTTP_Request($headers);
+		$this->plugin->verifyContentLength('foo.txt');
+		$this->assertTrue(true);
+	}
+
+	/**
+	 * @dataProvider verifyContentLengthFailedProvider
+	 * @expectedException Sabre_DAV_Exception_BadRequest
+	 */
+	public function testVerifyContentLengthFailed($fileSize, $headers)
+	{
+		$this->plugin->fileView = $this->buildFileViewMock($fileSize);
+
+		$this->server->httpRequest = new Sabre_HTTP_Request($headers);
+		$this->plugin->verifyContentLength('foo.txt');
+	}
+
+	public function verifyContentLengthProvider() {
+		return array(
+			array(1024, array()),
+			array(1024, array('HTTP_X_EXPECTED_ENTITY_LENGTH' => '1024')),
+			array(512, array('HTTP_CONTENT_LENGTH' => '512')),
+		);
+	}
+
+	public function verifyContentLengthFailedProvider() {
+		return array(
+			array(1025, array('HTTP_X_EXPECTED_ENTITY_LENGTH' => '1024')),
+			array(525, array('HTTP_CONTENT_LENGTH' => '512')),
+		);
+	}
+
+	public function lengthProvider() {
+		return array(
+			array(null, array()),
+			array(1024, array('HTTP_X_EXPECTED_ENTITY_LENGTH' => '1024')),
+			array(512, array('HTTP_CONTENT_LENGTH' => '512')),
+			array(2048, array('HTTP_X_EXPECTED_ENTITY_LENGTH' => '2048', 'HTTP_CONTENT_LENGTH' => '1024')),
+		);
+	}
+
+	private function buildFileViewMock($fileSize) {
+		// mock filesysten
+		$view = $this->getMock('\OC\Files\View', array('filesize', 'unlink'), array(), '', FALSE);
+		$view->expects($this->any())->method('filesize')->withAnyParameters()->will($this->returnValue($fileSize));
+
+		return $view;
+	}
+
+}
-- 
GitLab


From 826c6bec8f9a8137e0a2e7660389c728b59f95d5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 25 Sep 2013 17:41:16 +0200
Subject: [PATCH 213/248] expect unlinkto be called

---
 tests/lib/connector/sabre/aborteduploaddetectionplugin.php | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/tests/lib/connector/sabre/aborteduploaddetectionplugin.php b/tests/lib/connector/sabre/aborteduploaddetectionplugin.php
index 8237bdbd9e..bef0e4c4d7 100644
--- a/tests/lib/connector/sabre/aborteduploaddetectionplugin.php
+++ b/tests/lib/connector/sabre/aborteduploaddetectionplugin.php
@@ -54,6 +54,10 @@ class Test_OC_Connector_Sabre_AbortedUploadDetectionPlugin extends PHPUnit_Frame
 	{
 		$this->plugin->fileView = $this->buildFileViewMock($fileSize);
 
+		// we expect unlink to be called
+		$this->plugin->fileView->expects($this->once())->method('unlink');
+
+
 		$this->server->httpRequest = new Sabre_HTTP_Request($headers);
 		$this->plugin->verifyContentLength('foo.txt');
 	}
-- 
GitLab


From 71bbb2ea8bd76697cc1785fe4324b54973c410b9 Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Wed, 25 Sep 2013 17:44:05 +0200
Subject: [PATCH 214/248] check if key exists before reading it

---
 apps/files_encryption/lib/keymanager.php | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/apps/files_encryption/lib/keymanager.php b/apps/files_encryption/lib/keymanager.php
index 9be3dda7ce..7143fcff0f 100755
--- a/apps/files_encryption/lib/keymanager.php
+++ b/apps/files_encryption/lib/keymanager.php
@@ -40,11 +40,14 @@ class Keymanager {
 	public static function getPrivateKey(\OC_FilesystemView $view, $user) {
 
 		$path = '/' . $user . '/' . 'files_encryption' . '/' . $user . '.private.key';
+		$key = false;
 
 		$proxyStatus = \OC_FileProxy::$enabled;
 		\OC_FileProxy::$enabled = false;
 
-		$key = $view->file_get_contents($path);
+		if ($view->file_exists($path)) {
+			$key = $view->file_get_contents($path);
+		}
 
 		\OC_FileProxy::$enabled = $proxyStatus;
 
-- 
GitLab


From b5ac672864b6d7ac892de0b4c36debd61e4a1588 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon <blizzz@owncloud.com>
Date: Wed, 25 Sep 2013 19:15:27 +0200
Subject: [PATCH 215/248] Missing Test for the previous commit

---
 tests/lib/user.php | 43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)
 create mode 100644 tests/lib/user.php

diff --git a/tests/lib/user.php b/tests/lib/user.php
new file mode 100644
index 0000000000..66c7f3f0d7
--- /dev/null
+++ b/tests/lib/user.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test;
+
+use OC\Hooks\PublicEmitter;
+
+class User extends \PHPUnit_Framework_TestCase {
+
+	public function testCheckPassword() {
+		/**
+		 * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+		 */
+		$backend = $this->getMock('\OC_User_Dummy');
+		$backend->expects($this->once())
+			->method('checkPassword')
+			->with($this->equalTo('foo'), $this->equalTo('bar'))
+			->will($this->returnValue('foo'));
+
+		$backend->expects($this->any())
+			->method('implementsActions')
+			->will($this->returnCallback(function ($actions) {
+				if ($actions === \OC_USER_BACKEND_CHECK_PASSWORD) {
+					return true;
+				} else {
+					return false;
+				}
+			}));
+
+		$manager = \OC_User::getManager();
+		$manager->registerBackend($backend);
+
+		$uid = \OC_User::checkPassword('foo', 'bar');
+		$this->assertEquals($uid, 'foo');
+	}
+
+}
\ No newline at end of file
-- 
GitLab


From 0b98427536d9ff951577273af096c0a4ab219a83 Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Wed, 25 Sep 2013 19:23:07 +0200
Subject: [PATCH 216/248] fix check if app is enabled

---
 apps/files_encryption/lib/proxy.php | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php
index eb7ba60cb9..4ec810a519 100644
--- a/apps/files_encryption/lib/proxy.php
+++ b/apps/files_encryption/lib/proxy.php
@@ -50,9 +50,8 @@ class Proxy extends \OC_FileProxy {
 	private static function shouldEncrypt($path) {
 
 		if (is_null(self::$enableEncryption)) {
-
 			if (
-				\OCP\Config::getAppValue('files_encryption', 'enable_encryption', 'true') === 'true'
+				\OCP\App::isEnabled('files_encryption') === true
 				&& Crypt::mode() === 'server'
 			) {
 
@@ -200,7 +199,7 @@ class Proxy extends \OC_FileProxy {
 	 */
 	public function preUnlink($path) {
 
-		// let the trashbin handle this  
+		// let the trashbin handle this
 		if (\OCP\App::isEnabled('files_trashbin')) {
 			return true;
 		}
@@ -291,7 +290,7 @@ class Proxy extends \OC_FileProxy {
 			// Close the original encrypted file
 			fclose($result);
 
-			// Open the file using the crypto stream wrapper 
+			// Open the file using the crypto stream wrapper
 			// protocol and let it do the decryption work instead
 			$result = fopen('crypt://' . $path, $meta['mode']);
 
-- 
GitLab


From b11d8799c17b24e7823de8d8dc171fb78f9b8442 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Thu, 26 Sep 2013 10:50:15 +0200
Subject: [PATCH 217/248] adding unit tests for ObjectTree::move()

---
 lib/connector/sabre/objecttree.php       |  44 +++++++---
 tests/lib/connector/sabre/objecttree.php | 104 +++++++++++++++++++++++
 2 files changed, 134 insertions(+), 14 deletions(-)
 create mode 100644 tests/lib/connector/sabre/objecttree.php

diff --git a/lib/connector/sabre/objecttree.php b/lib/connector/sabre/objecttree.php
index 7accf98c8e..80c3840b99 100644
--- a/lib/connector/sabre/objecttree.php
+++ b/lib/connector/sabre/objecttree.php
@@ -11,6 +11,14 @@ namespace OC\Connector\Sabre;
 use OC\Files\Filesystem;
 
 class ObjectTree extends \Sabre_DAV_ObjectTree {
+
+	/**
+	 * keep this public to allow mock injection during unit test
+	 *
+	 * @var \OC\Files\View
+	 */
+	public $fileView;
+
 	/**
 	 * Returns the INode object for the requested path
 	 *
@@ -21,14 +29,16 @@ class ObjectTree extends \Sabre_DAV_ObjectTree {
 	public function getNodeForPath($path) {
 
 		$path = trim($path, '/');
-		if (isset($this->cache[$path])) return $this->cache[$path];
+		if (isset($this->cache[$path])) {
+			return $this->cache[$path];
+		}
 
 		// Is it the root node?
 		if (!strlen($path)) {
 			return $this->rootNode;
 		}
 
-		$info = Filesystem::getFileInfo($path);
+		$info = $this->getFileView()->getFileInfo($path);
 
 		if (!$info) {
 			throw new \Sabre_DAV_Exception_NotFound('File with name ' . $path . ' could not be located');
@@ -65,25 +75,21 @@ class ObjectTree extends \Sabre_DAV_ObjectTree {
 		list($destinationDir,) = \Sabre_DAV_URLUtil::splitPath($destinationPath);
 
 		// check update privileges
-		if ($sourceDir === $destinationDir) {
-			// for renaming it's enough to check if the sourcePath can be updated
-			if (!\OC\Files\Filesystem::isUpdatable($sourcePath)) {
-				throw new \Sabre_DAV_Exception_Forbidden();
-			}
-		} else {
+		$fs = $this->getFileView();
+		if (!$fs->isUpdatable($sourcePath)) {
+			throw new \Sabre_DAV_Exception_Forbidden();
+		}
+		if ($sourceDir !== $destinationDir) {
 			// for a full move we need update privileges on sourcePath and sourceDir as well as destinationDir
-			if (!\OC\Files\Filesystem::isUpdatable($sourcePath)) {
-				throw new \Sabre_DAV_Exception_Forbidden();
-			}
-			if (!\OC\Files\Filesystem::isUpdatable($sourceDir)) {
+			if (!$fs->isUpdatable($sourceDir)) {
 				throw new \Sabre_DAV_Exception_Forbidden();
 			}
-			if (!\OC\Files\Filesystem::isUpdatable($destinationDir)) {
+			if (!$fs->isUpdatable($destinationDir)) {
 				throw new \Sabre_DAV_Exception_Forbidden();
 			}
 		}
 
-		$renameOkay = Filesystem::rename($sourcePath, $destinationPath);
+		$renameOkay = $fs->rename($sourcePath, $destinationPath);
 		if (!$renameOkay) {
 			throw new \Sabre_DAV_Exception_Forbidden('');
 		}
@@ -123,4 +129,14 @@ class ObjectTree extends \Sabre_DAV_ObjectTree {
 		list($destinationDir,) = \Sabre_DAV_URLUtil::splitPath($destination);
 		$this->markDirty($destinationDir);
 	}
+
+	/**
+	 * @return \OC\Files\View
+	 */
+	public function getFileView() {
+		if (is_null($this->fileView)) {
+			$this->fileView = \OC\Files\Filesystem::getView();
+		}
+		return $this->fileView;
+	}
 }
diff --git a/tests/lib/connector/sabre/objecttree.php b/tests/lib/connector/sabre/objecttree.php
new file mode 100644
index 0000000000..c920441c8b
--- /dev/null
+++ b/tests/lib/connector/sabre/objecttree.php
@@ -0,0 +1,104 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Müller <thomas.mueller@tmit.eu>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\OC\Connector\Sabre;
+
+
+use OC_Connector_Sabre_Directory;
+use PHPUnit_Framework_TestCase;
+use Sabre_DAV_Exception_Forbidden;
+
+class TestDoubleFileView extends \OC\Files\View{
+
+	public function __construct($updatables, $canRename = true) {
+		$this->updatables = $updatables;
+		$this->canRename = $canRename;
+	}
+
+	public function isUpdatable($path) {
+		return $this->updatables[$path];
+	}
+
+	public function rename($path1, $path2) {
+		return $this->canRename;
+	}
+}
+
+class ObjectTree extends PHPUnit_Framework_TestCase {
+
+	/**
+	 * @dataProvider moveFailedProvider
+	 * @expectedException Sabre_DAV_Exception_Forbidden
+	 */
+	public function testMoveFailed($source, $dest, $updatables) {
+		$rootDir = new OC_Connector_Sabre_Directory('');
+		$objectTree = $this->getMock('\OC\Connector\Sabre\ObjectTree',
+			array('nodeExists', 'getNodeForPath'),
+			array($rootDir));
+
+		$objectTree->expects($this->once())
+			->method('getNodeForPath')
+			->with($this->identicalTo('a/b'))
+			->will($this->returnValue(false));
+
+		/** @var $objectTree \OC\Connector\Sabre\ObjectTree */
+		$objectTree->fileView = new TestDoubleFileView($updatables);
+		$objectTree->move($source, $dest);
+	}
+
+	/**
+	 * @dataProvider moveSuccessProvider
+	 */
+	public function testMoveSuccess($source, $dest, $updatables) {
+		$rootDir = new OC_Connector_Sabre_Directory('');
+		$objectTree = $this->getMock('\OC\Connector\Sabre\ObjectTree',
+			array('nodeExists', 'getNodeForPath'),
+			array($rootDir));
+
+		$objectTree->expects($this->once())
+			->method('getNodeForPath')
+			->with($this->identicalTo('a/b'))
+			->will($this->returnValue(false));
+
+		/** @var $objectTree \OC\Connector\Sabre\ObjectTree */
+		$objectTree->fileView = new TestDoubleFileView($updatables);
+		$objectTree->move($source, $dest);
+		$this->assertTrue(true);
+	}
+
+	function moveFailedProvider() {
+		return array(
+			array('a/b', 'a/c', array('a' => false, 'a/b' => false, 'a/c' => false)),
+			array('a/b', 'b/b', array('a' => false, 'a/b' => false, 'b' => false, 'b/b' => false)),
+			array('a/b', 'b/b', array('a' => false, 'a/b' => true, 'b' => false, 'b/b' => false)),
+			array('a/b', 'b/b', array('a' => true, 'a/b' => true, 'b' => false, 'b/b' => false)),
+		);
+	}
+
+	function moveSuccessProvider() {
+		return array(
+			array('a/b', 'a/c', array('a' => false, 'a/b' => true, 'a/c' => false)),
+			array('a/b', 'b/b', array('a' => true, 'a/b' => true, 'b' => true, 'b/b' => false)),
+		);
+	}
+
+//	private function buildFileViewMock($updatables) {
+//		// mock filesysten
+//		$view = $this->getMock('\OC\Files\View', array('isUpdatable'), array(), '', FALSE);
+//
+//		foreach ($updatables as $path => $updatable) {
+//			$view->expects($this->any())
+//				->method('isUpdatable')
+//				->with($this->identicalTo($path))
+//				->will($this->returnValue($updatable));
+//		}
+//
+//		return $view;
+//	}
+
+}
-- 
GitLab


From d1b5d65622122b71dfb46cd5d1addf514552032a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Thu, 26 Sep 2013 12:02:06 +0200
Subject: [PATCH 218/248] run unit tests for apps as well

---
 tests/bootstrap.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/bootstrap.php b/tests/bootstrap.php
index fb667263e4..d273676f4c 100644
--- a/tests/bootstrap.php
+++ b/tests/bootstrap.php
@@ -1,7 +1,7 @@
 <?php
 
 global $RUNTIME_NOAPPS;
-$RUNTIME_NOAPPS = true;
+$RUNTIME_NOAPPS = false;
 
 define('PHPUNIT_RUN', 1);
 
-- 
GitLab


From e515509a817d06e646a7781fc2456fde227d2154 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Thu, 26 Sep 2013 13:34:47 +0200
Subject: [PATCH 219/248] prelogin apps have to be loaded within setupBackend()
 otherwise required classes cannot be loaded

---
 lib/user.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/user.php b/lib/user.php
index da774ff86f..62c2f318cc 100644
--- a/lib/user.php
+++ b/lib/user.php
@@ -177,6 +177,7 @@ class OC_User {
 	 * setup the configured backends in config.php
 	 */
 	public static function setupBackends() {
+		OC_App::loadApps(array('prelogin'));
 		$backends = OC_Config::getValue('user_backends', array());
 		foreach ($backends as $i => $config) {
 			$class = $config['class'];
-- 
GitLab


From f8933eaf922c82c369b48275510ad6920ac70b47 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Thu, 26 Sep 2013 14:03:04 +0200
Subject: [PATCH 220/248] Remove $RUNTIME_NOAPPS - setting to false was not
 enough

---
 tests/bootstrap.php | 2 --
 1 file changed, 2 deletions(-)

diff --git a/tests/bootstrap.php b/tests/bootstrap.php
index d273676f4c..581cfcff9f 100644
--- a/tests/bootstrap.php
+++ b/tests/bootstrap.php
@@ -1,7 +1,5 @@
 <?php
 
-global $RUNTIME_NOAPPS;
-$RUNTIME_NOAPPS = false;
 
 define('PHPUNIT_RUN', 1);
 
-- 
GitLab


From 1a398fba6702e509e1fcec893f0d22adc20d383c Mon Sep 17 00:00:00 2001
From: Andreas Fischer <bantu@owncloud.com>
Date: Thu, 26 Sep 2013 19:05:47 +0200
Subject: [PATCH 221/248] phpunit.xml: Port code coverage excludes from
 autotest to dist.

---
 tests/phpunit.xml.dist | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/tests/phpunit.xml.dist b/tests/phpunit.xml.dist
index 25dfc64cfe..71a4ff2762 100644
--- a/tests/phpunit.xml.dist
+++ b/tests/phpunit.xml.dist
@@ -11,7 +11,21 @@
 			<directory suffix=".php">..</directory>
 			<exclude>
 				<directory suffix=".php">../3rdparty</directory>
+				<directory suffix=".php">../apps/files/l10n</directory>
+				<directory suffix=".php">../apps/files_external/l10n</directory>
+				<directory suffix=".php">../apps/files_external/3rdparty</directory>
+				<directory suffix=".php">../apps/files_versions/l10n</directory>
+				<directory suffix=".php">../apps/files_encryption/l10n</directory>
+				<directory suffix=".php">../apps/files_encryption/3rdparty</directory>
+				<directory suffix=".php">../apps/files_sharing/l10n</directory>
+				<directory suffix=".php">../apps/files_trashbin/l10n</directory>
+				<directory suffix=".php">../apps/user_ldap/l10n</directory>
+				<directory suffix=".php">../apps/user_webdavauth/l10n</directory>
 				<directory suffix=".php">../lib/MDB2</directory>
+				<directory suffix=".php">../lib/l10n</directory>
+				<directory suffix=".php">../core/l10n</directory>
+				<directory suffix=".php">../settings/l10n</directory>
+				<directory suffix=".php">../tests</directory>
 			</exclude>
 		</whitelist>
 	</filter>
-- 
GitLab


From 9bb244cc59504b3686b58183315d046084b05fa6 Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Thu, 26 Sep 2013 19:34:28 +0200
Subject: [PATCH 222/248] check every enabled app if the remember login feature
 needs to be disabled

---
 lib/util.php | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/lib/util.php b/lib/util.php
index e12f753d5a..e1bec4aece 100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -511,13 +511,23 @@ class OC_Util {
 
 	/**
 	 * Check if it is allowed to remember login.
-	 * E.g. if encryption is enabled the user needs to log-in every time he visites
-	 * ownCloud in order to decrypt the private key.
+	 *
+	 * @note Every app can set 'rememberlogin' to 'false' to disable the remember login feature
 	 *
 	 * @return bool
 	 */
 	public static function rememberLoginAllowed() {
-		return !OC_App::isEnabled('files_encryption');
+
+		$apps = OC_App::getEnabledApps();
+
+		foreach ($apps as $app) {
+			$appInfo = OC_App::getAppInfo($app);
+			if (isset($appInfo['rememberlogin']) && $appInfo['rememberlogin'] === 'false') {
+				return false;
+			}
+
+		}
+		return true;
 	}
 
 	/**
-- 
GitLab


From 7e54e8831e1004575ed9feab9a65f11365e4a473 Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Thu, 26 Sep 2013 19:34:50 +0200
Subject: [PATCH 223/248] set rememberlogin to false for the encryption app

---
 apps/files_encryption/appinfo/info.xml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/apps/files_encryption/appinfo/info.xml b/apps/files_encryption/appinfo/info.xml
index 46f1375c98..9d495916d2 100644
--- a/apps/files_encryption/appinfo/info.xml
+++ b/apps/files_encryption/appinfo/info.xml
@@ -7,6 +7,7 @@
 	<author>Sam Tuke, Bjoern Schiessle, Florin Peter</author>
 	<require>4</require>
 	<shipped>true</shipped>
+	<rememberlogin>false</rememberlogin>
 	<types>
 		<filesystem/>
 	</types>
-- 
GitLab


From f31d31844e0a498ccb0364fa618d55b33cc30236 Mon Sep 17 00:00:00 2001
From: Jenkins for ownCloud <thomas.mueller@tmit.eu>
Date: Fri, 27 Sep 2013 00:02:30 -0400
Subject: [PATCH 224/248] [tx-robot] updated from transifex

---
 apps/files/l10n/el.php              |  1 +
 apps/files/l10n/hu_HU.php           | 13 ++++++++---
 apps/files_trashbin/l10n/hu_HU.php  |  4 ++--
 apps/user_ldap/l10n/hu_HU.php       |  8 +++++++
 core/l10n/cs_CZ.php                 |  1 +
 core/l10n/da.php                    |  2 ++
 core/l10n/fr.php                    |  5 +++++
 l10n/cs_CZ/core.po                  | 22 +++++++++----------
 l10n/da/core.po                     | 22 +++++++++----------
 l10n/da/lib.po                      | 18 +++++++--------
 l10n/da/settings.po                 |  6 ++---
 l10n/el/files.po                    | 11 +++++-----
 l10n/fr/core.po                     | 16 +++++++-------
 l10n/fr/settings.po                 | 30 ++++++++++++-------------
 l10n/hu_HU/files.po                 | 34 ++++++++++++++---------------
 l10n/hu_HU/files_trashbin.po        | 30 ++++++++++++-------------
 l10n/hu_HU/user_ldap.po             | 22 +++++++++----------
 l10n/templates/core.pot             |  2 +-
 l10n/templates/files.pot            |  2 +-
 l10n/templates/files_encryption.pot |  2 +-
 l10n/templates/files_external.pot   |  2 +-
 l10n/templates/files_sharing.pot    |  2 +-
 l10n/templates/files_trashbin.pot   |  2 +-
 l10n/templates/files_versions.pot   |  2 +-
 l10n/templates/lib.pot              |  2 +-
 l10n/templates/settings.pot         |  2 +-
 l10n/templates/user_ldap.pot        |  2 +-
 l10n/templates/user_webdavauth.pot  |  2 +-
 lib/l10n/da.php                     |  3 +++
 settings/l10n/da.php                |  1 +
 settings/l10n/fr.php                |  3 +++
 31 files changed, 153 insertions(+), 121 deletions(-)

diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php
index 37a61c6b95..de524f4dd9 100644
--- a/apps/files/l10n/el.php
+++ b/apps/files/l10n/el.php
@@ -41,6 +41,7 @@ $TRANSLATIONS = array(
 "Your storage is almost full ({usedSpacePercent}%)" => "Ο αποθηκευτικός χώρος είναι σχεδόν γεμάτος ({usedSpacePercent}%)",
 "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Η κρυπτογράφηση απενεργοποιήθηκε, αλλά τα αρχεία σας είναι ακόμα κρυπτογραφημένα. Παρακαλούμε απενεργοποιήσετε την κρυπτογράφηση αρχείων από τις προσωπικές σας ρυθμίσεις",
 "Your download is being prepared. This might take some time if the files are big." => "Η λήψη προετοιμάζεται. Αυτό μπορεί να πάρει ώρα εάν τα αρχεία έχουν μεγάλο μέγεθος.",
+"Error moving file" => "Σφάλμα κατά τη μετακίνηση του αρχείου",
 "Name" => "Όνομα",
 "Size" => "Μέγεθος",
 "Modified" => "Τροποποιήθηκε",
diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php
index 5d313ff248..4dd6a13d32 100644
--- a/apps/files/l10n/hu_HU.php
+++ b/apps/files/l10n/hu_HU.php
@@ -13,10 +13,14 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Hiányzik egy ideiglenes mappa",
 "Failed to write to disk" => "Nem sikerült a lemezre történő írás",
 "Not enough storage available" => "Nincs elég szabad hely.",
+"Upload failed. Could not get file info." => "A feltöltés nem sikerült. Az állományt leíró információk nem érhetők el.",
+"Upload failed. Could not find uploaded file" => "A feltöltés nem sikerült. Nem található a feltöltendő állomány.",
 "Invalid directory." => "Érvénytelen mappa.",
 "Files" => "Fájlok",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "A(z) {filename} állomány nem tölthető fel, mert ez vagy egy mappa, vagy pedig 0 bájtból áll.",
 "Not enough space available" => "Nincs elég szabad hely",
 "Upload cancelled." => "A feltöltést megszakítottuk.",
+"Could not get result from server." => "A kiszolgálótól nem kapható meg az eredmény.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést.",
 "URL cannot be empty." => "Az URL nem lehet semmi.",
 "Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Érvénytelen mappanév. A 'Shared' az ownCloud számára fenntartott elnevezés",
@@ -31,15 +35,18 @@ $TRANSLATIONS = array(
 "cancel" => "mégse",
 "replaced {new_name} with {old_name}" => "{new_name} fájlt kicseréltük ezzel:  {old_name}",
 "undo" => "visszavonás",
-"_%n folder_::_%n folders_" => array("",""),
-"_%n file_::_%n files_" => array("",""),
-"_Uploading %n file_::_Uploading %n files_" => array("",""),
+"_%n folder_::_%n folders_" => array("%n mappa","%n mappa"),
+"_%n file_::_%n files_" => array("%n állomány","%n állomány"),
+"{dirs} and {files}" => "{dirs} és {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("%n állomány feltöltése","%n állomány feltöltése"),
 "'.' is an invalid file name." => "'.' fájlnév érvénytelen.",
 "File name cannot be empty." => "A fájlnév nem lehet semmi.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Érvénytelen elnevezés. Ezek a karakterek nem használhatók: '\\', '/', '<', '>', ':', '\"', '|', '?' és '*'",
 "Your storage is full, files can not be updated or synced anymore!" => "A tároló tele van, a fájlok nem frissíthetőek vagy szinkronizálhatóak a jövőben.",
 "Your storage is almost full ({usedSpacePercent}%)" => "A tároló majdnem tele van ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "A titkosítási funkciót kikapcsolták, de az Ön állományai még mindig titkosított állapotban vannak. A személyes beállításoknál tudja a titkosítást feloldani.",
 "Your download is being prepared. This might take some time if the files are big." => "Készül a letöltendő állomány. Ez eltarthat egy ideig, ha nagyok a fájlok.",
+"Error moving file" => "Az állomány áthelyezése nem sikerült.",
 "Name" => "Név",
 "Size" => "Méret",
 "Modified" => "Módosítva",
diff --git a/apps/files_trashbin/l10n/hu_HU.php b/apps/files_trashbin/l10n/hu_HU.php
index aac6cf7800..766ddcbce4 100644
--- a/apps/files_trashbin/l10n/hu_HU.php
+++ b/apps/files_trashbin/l10n/hu_HU.php
@@ -8,8 +8,8 @@ $TRANSLATIONS = array(
 "Delete permanently" => "Végleges törlés",
 "Name" => "Név",
 "Deleted" => "Törölve",
-"_%n folder_::_%n folders_" => array("",""),
-"_%n file_::_%n files_" => array("",""),
+"_%n folder_::_%n folders_" => array("","%n mappa"),
+"_%n file_::_%n files_" => array("","%n állomány"),
 "restored" => "visszaállítva",
 "Nothing in here. Your trash bin is empty!" => "Itt nincs semmi. Az Ön szemetes mappája üres!",
 "Restore" => "Visszaállítás",
diff --git a/apps/user_ldap/l10n/hu_HU.php b/apps/user_ldap/l10n/hu_HU.php
index 6961869f3e..b41cf98e2b 100644
--- a/apps/user_ldap/l10n/hu_HU.php
+++ b/apps/user_ldap/l10n/hu_HU.php
@@ -16,6 +16,7 @@ $TRANSLATIONS = array(
 "Connection test failed" => "A kapcsolatellenőrzés eredménye: nem sikerült",
 "Do you really want to delete the current Server Configuration?" => "Tényleg törölni szeretné a kiszolgáló beállításait?",
 "Confirm Deletion" => "A törlés megerősítése",
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." => "<b>Figyelem:</b> a user_ldap és user_webdavauth alkalmazások nem kompatibilisek. Együttes használatuk váratlan eredményekhez vezethet. Kérje meg a rendszergazdát, hogy a kettő közül kapcsolja ki az egyiket.",
 "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Figyelmeztetés:</b> Az LDAP PHP modul nincs telepítve, ezért ez az alrendszer nem fog működni. Kérje meg a rendszergazdát, hogy telepítse!",
 "Server configuration" => "A kiszolgálók beállításai",
 "Add Server Configuration" => "Új kiszolgáló beállításának hozzáadása",
@@ -29,8 +30,11 @@ $TRANSLATIONS = array(
 "Password" => "Jelszó",
 "For anonymous access, leave DN and Password empty." => "Bejelentkezés nélküli eléréshez ne töltse ki a DN és Jelszó mezőket!",
 "User Login Filter" => "Szűrő a bejelentkezéshez",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Ez a szűrő érvényes a bejelentkezés megkísérlésekor. Ekkor az %%uid változó helyére a bejelentkezési név kerül. Például: \"uid=%%uid\"",
 "User List Filter" => "A felhasználók szűrője",
+"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "Ez a szűrő érvényes a felhasználók listázásakor (nincs helyettesíthető változó). Például: \"objectClass=person\"",
 "Group Filter" => "A csoportok szűrője",
+"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "Ez a szűrő érvényes a csoportok listázásakor (nincs helyettesíthető változó). Például: \"objectClass=posixGroup\"",
 "Connection Settings" => "Kapcsolati beállítások",
 "Configuration Active" => "A beállítás aktív",
 "When unchecked, this configuration will be skipped." => "Ha nincs kipipálva, ez a beállítás kihagyódik.",
@@ -39,19 +43,23 @@ $TRANSLATIONS = array(
 "Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Adjon meg egy opcionális másodkiszolgálót. Ez a fő LDAP/AD kiszolgáló szinkron másolata (replikája) kell legyen.",
 "Backup (Replica) Port" => "A másodkiszolgáló (replika) portszáma",
 "Disable Main Server" => "A fő szerver kihagyása",
+"Only connect to the replica server." => "Csak a másodlagos (másolati) kiszolgálóhoz kapcsolódjunk.",
 "Use TLS" => "Használjunk TLS-t",
 "Do not use it additionally for LDAPS connections, it will fail." => "LDAPS kapcsolatok esetén ne kapcsoljuk be, mert nem fog működni.",
 "Case insensitve LDAP server (Windows)" => "Az LDAP-kiszolgáló nem tesz különbséget a kis- és nagybetűk között (Windows)",
 "Turn off SSL certificate validation." => "Ne ellenőrizzük az SSL-tanúsítvány érvényességét",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Használata nem javasolt (kivéve tesztelési céllal). Ha a kapcsolat csak ezzel a beállítással működik, akkor importálja az LDAP-kiszolgáló SSL tanúsítványát a(z) %s kiszolgálóra!",
 "Cache Time-To-Live" => "A gyorsítótár tárolási időtartama",
 "in seconds. A change empties the cache." => "másodpercben. A változtatás törli a cache tartalmát.",
 "Directory Settings" => "Címtár beállítások",
 "User Display Name Field" => "A felhasználónév mezője",
+"The LDAP attribute to use to generate the user's display name." => "Ebből az LDAP attribútumból képződik a felhasználó megjelenítendő neve.",
 "Base User Tree" => "A felhasználói fa gyökere",
 "One User Base DN per line" => "Soronként egy felhasználói fa gyökerét adhatjuk meg",
 "User Search Attributes" => "A felhasználók lekérdezett attribútumai",
 "Optional; one attribute per line" => "Nem kötelező megadni, soronként egy attribútum",
 "Group Display Name Field" => "A csoport nevének mezője",
+"The LDAP attribute to use to generate the groups's display name." => "Ebből az LDAP attribútumból képződik a csoport megjelenítendő neve.",
 "Base Group Tree" => "A csoportfa gyökere",
 "One Group Base DN per line" => "Soronként egy csoportfa gyökerét adhatjuk meg",
 "Group Search Attributes" => "A csoportok lekérdezett attribútumai",
diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php
index 449a49f568..abed4a0fda 100644
--- a/core/l10n/cs_CZ.php
+++ b/core/l10n/cs_CZ.php
@@ -59,6 +59,7 @@ $TRANSLATIONS = array(
 "Ok" => "Ok",
 "Error loading message template: {error}" => "Chyba při nahrávání šablony zprávy: {error}",
 "_{count} file conflict_::_{count} file conflicts_" => array("","",""),
+"One file conflict" => "Jeden konflikt souboru",
 "Cancel" => "Zrušit",
 "The object type is not specified." => "Není určen typ objektu.",
 "Error" => "Chyba",
diff --git a/core/l10n/da.php b/core/l10n/da.php
index e2399fdc5c..8938f2107f 100644
--- a/core/l10n/da.php
+++ b/core/l10n/da.php
@@ -16,6 +16,8 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Fejl ved tilføjelse af %s til favoritter.",
 "No categories selected for deletion." => "Ingen kategorier valgt",
 "Error removing %s from favorites." => "Fejl ved fjernelse af %s fra favoritter.",
+"Unknown filetype" => "Ukendt filtype",
+"Invalid image" => "Ugyldigt billede",
 "Sunday" => "Søndag",
 "Monday" => "Mandag",
 "Tuesday" => "Tirsdag",
diff --git a/core/l10n/fr.php b/core/l10n/fr.php
index 29489e86b7..e7cb75e53f 100644
--- a/core/l10n/fr.php
+++ b/core/l10n/fr.php
@@ -19,6 +19,8 @@ $TRANSLATIONS = array(
 "No image or file provided" => "Aucune image ou fichier fourni",
 "Unknown filetype" => "Type de fichier inconnu",
 "Invalid image" => "Image invalide",
+"No temporary profile picture available, try again" => "Aucune image temporaire disponible pour le profil. Essayez à nouveau.",
+"No crop data provided" => "Aucune donnée de culture fournie",
 "Sunday" => "Dimanche",
 "Monday" => "Lundi",
 "Tuesday" => "Mardi",
@@ -61,7 +63,10 @@ $TRANSLATIONS = array(
 "Which files do you want to keep?" => "Quels fichiers désirez-vous garder ?",
 "If you select both versions, the copied file will have a number added to its name." => "Si vous sélectionnez les deux versions, un nombre sera ajouté au nom du fichier copié.",
 "Cancel" => "Annuler",
+"Continue" => "Poursuivre",
+"(all selected)" => "(tous sélectionnés)",
 "({count} selected)" => "({count} sélectionnés)",
+"Error loading file exists template" => "Erreur de chargement du modèle de fichier existant",
 "The object type is not specified." => "Le type d'objet n'est pas spécifié.",
 "Error" => "Erreur",
 "The app name is not specified." => "Le nom de l'application n'est pas spécifié.",
diff --git a/l10n/cs_CZ/core.po b/l10n/cs_CZ/core.po
index 61a7e861b2..40b693b988 100644
--- a/l10n/cs_CZ/core.po
+++ b/l10n/cs_CZ/core.po
@@ -12,9 +12,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-22 12:55-0400\n"
-"PO-Revision-Date: 2013-09-20 15:01+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"PO-Revision-Date: 2013-09-25 10:50+0000\n"
+"Last-Translator: pstast <petr@stastny.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"
@@ -284,7 +284,7 @@ msgstr[2] ""
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "Jeden konflikt souboru"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
@@ -325,7 +325,7 @@ msgstr "Není určen typ objektu."
 #: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
 #: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
 #: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
-#: js/share.js:645 js/share.js:657
+#: js/share.js:656 js/share.js:668
 msgid "Error"
 msgstr "Chyba"
 
@@ -345,7 +345,7 @@ msgstr "Sdílené"
 msgid "Share"
 msgstr "Sdílet"
 
-#: js/share.js:131 js/share.js:685
+#: js/share.js:131 js/share.js:696
 msgid "Error while sharing"
 msgstr "Chyba při sdílení"
 
@@ -445,23 +445,23 @@ msgstr "smazat"
 msgid "share"
 msgstr "sdílet"
 
-#: js/share.js:400 js/share.js:632
+#: js/share.js:400 js/share.js:643
 msgid "Password protected"
 msgstr "Chráněno heslem"
 
-#: js/share.js:645
+#: js/share.js:656
 msgid "Error unsetting expiration date"
 msgstr "Chyba při odstraňování data vypršení platnosti"
 
-#: js/share.js:657
+#: js/share.js:668
 msgid "Error setting expiration date"
 msgstr "Chyba při nastavení data vypršení platnosti"
 
-#: js/share.js:672
+#: js/share.js:683
 msgid "Sending ..."
 msgstr "Odesílám ..."
 
-#: js/share.js:683
+#: js/share.js:694
 msgid "Email sent"
 msgstr "E-mail odeslán"
 
diff --git a/l10n/da/core.po b/l10n/da/core.po
index 690bb46c21..89530e0745 100644
--- a/l10n/da/core.po
+++ b/l10n/da/core.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-22 12:55-0400\n"
-"PO-Revision-Date: 2013-09-20 15:01+0000\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"PO-Revision-Date: 2013-09-24 17:20+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
 "MIME-Version: 1.0\n"
@@ -100,11 +100,11 @@ msgstr ""
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Ukendt filtype"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Ugyldigt billede"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
@@ -319,7 +319,7 @@ msgstr "Objekttypen er ikke angivet."
 #: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
 #: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
 #: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
-#: js/share.js:645 js/share.js:657
+#: js/share.js:656 js/share.js:668
 msgid "Error"
 msgstr "Fejl"
 
@@ -339,7 +339,7 @@ msgstr "Delt"
 msgid "Share"
 msgstr "Del"
 
-#: js/share.js:131 js/share.js:685
+#: js/share.js:131 js/share.js:696
 msgid "Error while sharing"
 msgstr "Fejl under deling"
 
@@ -439,23 +439,23 @@ msgstr "slet"
 msgid "share"
 msgstr "del"
 
-#: js/share.js:400 js/share.js:632
+#: js/share.js:400 js/share.js:643
 msgid "Password protected"
 msgstr "Beskyttet med adgangskode"
 
-#: js/share.js:645
+#: js/share.js:656
 msgid "Error unsetting expiration date"
 msgstr "Fejl ved fjernelse af udløbsdato"
 
-#: js/share.js:657
+#: js/share.js:668
 msgid "Error setting expiration date"
 msgstr "Fejl under sætning af udløbsdato"
 
-#: js/share.js:672
+#: js/share.js:683
 msgid "Sending ..."
 msgstr "Sender ..."
 
-#: js/share.js:683
+#: js/share.js:694
 msgid "Email sent"
 msgstr "E-mail afsendt"
 
diff --git a/l10n/da/lib.po b/l10n/da/lib.po
index 0bacfcf5e8..7d01d7a969 100644
--- a/l10n/da/lib.po
+++ b/l10n/da/lib.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"PO-Revision-Date: 2013-09-24 17:20+0000\n"
+"Last-Translator: Sappe\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"
@@ -58,15 +58,15 @@ msgstr "Upgradering af \"%s\" fejlede"
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "Personligt profilbillede virker endnu ikke sammen med kryptering"
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Ukendt filtype"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Ugyldigt billede"
 
 #: defaults.php:35
 msgid "web services under your control"
@@ -167,15 +167,15 @@ msgstr "Adgangsfejl"
 msgid "Token expired. Please reload page."
 msgstr "Adgang er udløbet. Genindlæs siden."
 
-#: search/provider/file.php:17 search/provider/file.php:35
+#: search/provider/file.php:18 search/provider/file.php:36
 msgid "Files"
 msgstr "Filer"
 
-#: search/provider/file.php:26 search/provider/file.php:33
+#: search/provider/file.php:27 search/provider/file.php:34
 msgid "Text"
 msgstr "SMS"
 
-#: search/provider/file.php:29
+#: search/provider/file.php:30
 msgid "Images"
 msgstr "Billeder"
 
diff --git a/l10n/da/settings.po b/l10n/da/settings.po
index 7251a13d4f..e5f2b57e88 100644
--- a/l10n/da/settings.po
+++ b/l10n/da/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-24 12:58-0400\n"
-"PO-Revision-Date: 2013-09-24 16:59+0000\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"PO-Revision-Date: 2013-09-24 17:00+0000\n"
 "Last-Translator: Sappe\n"
 "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
 "MIME-Version: 1.0\n"
@@ -114,7 +114,7 @@ msgstr "Serveren understøtter ikke kodeordsskifte, men brugernes krypteringsnø
 
 #: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Kunne ikke ændre kodeord"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
diff --git a/l10n/el/files.po b/l10n/el/files.po
index f6b7bcf82a..87c112acc6 100644
--- a/l10n/el/files.po
+++ b/l10n/el/files.po
@@ -5,14 +5,15 @@
 # Translators:
 # Efstathios Iosifidis <iefstathios@gmail.com>, 2013
 # Efstathios Iosifidis <iosifidis@opensuse.org>, 2013
+# gtsamis <gtsamis@yahoo.com>, 2013
 # frerisp <petrosfreris@gmail.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"PO-Revision-Date: 2013-09-25 12:10+0000\n"
+"Last-Translator: gtsamis <gtsamis@yahoo.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"
@@ -89,7 +90,7 @@ msgstr ""
 msgid "Invalid directory."
 msgstr "Μη έγκυρος φάκελος."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Αρχεία"
 
@@ -224,7 +225,7 @@ msgstr "Η λήψη προετοιμάζεται. Αυτό μπορεί να π
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Σφάλμα κατά τη μετακίνηση του αρχείου"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/fr/core.po b/l10n/fr/core.po
index 4c7f6be045..bce932689a 100644
--- a/l10n/fr/core.po
+++ b/l10n/fr/core.po
@@ -13,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-24 12:58-0400\n"
-"PO-Revision-Date: 2013-09-23 19:40+0000\n"
-"Last-Translator: ogre_sympathique <ogre.sympathique@speed.1s.fr>\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"PO-Revision-Date: 2013-09-26 15:10+0000\n"
+"Last-Translator: Christophe Lherieau <skimpax@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"
@@ -110,11 +110,11 @@ msgstr "Image invalide"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "Aucune image temporaire disponible pour le profil. Essayez à nouveau."
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "Aucune donnée de culture fournie"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -298,11 +298,11 @@ msgstr "Annuler"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Poursuivre"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr ""
+msgstr "(tous sélectionnés)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
@@ -310,7 +310,7 @@ msgstr "({count} sélectionnés)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
-msgstr ""
+msgstr "Erreur de chargement du modèle de fichier existant"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po
index 529e2e8c35..21918cf68d 100644
--- a/l10n/fr/settings.po
+++ b/l10n/fr/settings.po
@@ -13,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:45-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"PO-Revision-Date: 2013-09-26 15:00+0000\n"
+"Last-Translator: Christophe Lherieau <skimpax@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"
@@ -102,18 +102,18 @@ msgstr "Aucun utilisateur fourni"
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Veuillez fournir un mot de passe administrateur de récupération de données, sinon toutes les données de l'utilisateur seront perdues"
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "Mot de passe administrateur de récupération de données invalide. Veuillez vérifier le mot de passe et essayer à nouveau."
 
 #: changepassword/controller.php:87
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
+msgstr "L'infrastructure d'arrière-plan ne supporte pas la modification de mot de passe, mais la clef de chiffrement des utilisateurs a été mise à jour avec succès."
 
 #: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
@@ -123,11 +123,11 @@ msgstr "Impossible de modifier le mot de passe"
 msgid "Update to {appversion}"
 msgstr "Mettre à jour vers {appversion}"
 
-#: js/apps.js:49 js/apps.js:82 js/apps.js:108
+#: js/apps.js:49 js/apps.js:82 js/apps.js:110
 msgid "Disable"
 msgstr "Désactiver"
 
-#: js/apps.js:49 js/apps.js:89 js/apps.js:102 js/apps.js:117
+#: js/apps.js:49 js/apps.js:90 js/apps.js:103 js/apps.js:119
 msgid "Enable"
 msgstr "Activer"
 
@@ -135,31 +135,31 @@ msgstr "Activer"
 msgid "Please wait...."
 msgstr "Veuillez patienter…"
 
-#: js/apps.js:79 js/apps.js:80 js/apps.js:100
+#: js/apps.js:79 js/apps.js:80 js/apps.js:101
 msgid "Error while disabling app"
 msgstr "Erreur lors de la désactivation de l'application"
 
-#: js/apps.js:99 js/apps.js:112 js/apps.js:113
+#: js/apps.js:100 js/apps.js:114 js/apps.js:115
 msgid "Error while enabling app"
 msgstr "Erreur lors de l'activation de l'application"
 
-#: js/apps.js:123
+#: js/apps.js:125
 msgid "Updating...."
 msgstr "Mise à jour..."
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error while updating app"
 msgstr "Erreur lors de la mise à jour de l'application"
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error"
 msgstr "Erreur"
 
-#: js/apps.js:127 templates/apps.php:43
+#: js/apps.js:129 templates/apps.php:43
 msgid "Update"
 msgstr "Mettre à jour"
 
-#: js/apps.js:130
+#: js/apps.js:132
 msgid "Updated"
 msgstr "Mise à jour effectuée avec succès"
 
diff --git a/l10n/hu_HU/files.po b/l10n/hu_HU/files.po
index 51bd0806da..e61d77e5cb 100644
--- a/l10n/hu_HU/files.po
+++ b/l10n/hu_HU/files.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"PO-Revision-Date: 2013-09-24 18:40+0000\n"
+"Last-Translator: Laszlo Tornoci <torlasz@gmail.com>\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"
@@ -77,23 +77,23 @@ msgstr "Nincs elég szabad hely."
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr ""
+msgstr "A feltöltés nem sikerült. Az állományt leíró információk nem érhetők el."
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr ""
+msgstr "A feltöltés nem sikerült. Nem található a feltöltendő állomány."
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Érvénytelen mappa."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Fájlok"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "A(z) {filename} állomány nem tölthető fel, mert ez vagy egy mappa, vagy pedig 0 bájtból áll."
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -105,7 +105,7 @@ msgstr "A feltöltést megszakítottuk."
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "A kiszolgálótól nem kapható meg az eredmény."
 
 #: js/file-upload.js:446
 msgid ""
@@ -167,24 +167,24 @@ msgstr "visszavonás"
 #: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%n mappa"
+msgstr[1] "%n mappa"
 
 #: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%n állomány"
+msgstr[1] "%n állomány"
 
 #: js/filelist.js:541
 msgid "{dirs} and {files}"
-msgstr ""
+msgstr "{dirs} és {files}"
 
 #: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%n állomány feltöltése"
+msgstr[1] "%n állomány feltöltése"
 
 #: js/files.js:25
 msgid "'.' is an invalid file name."
@@ -212,7 +212,7 @@ msgstr "A tároló majdnem tele van ({usedSpacePercent}%)"
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
-msgstr ""
+msgstr "A titkosítási funkciót kikapcsolták, de az Ön állományai még mindig titkosított állapotban vannak. A személyes beállításoknál tudja a titkosítást feloldani."
 
 #: js/files.js:296
 msgid ""
@@ -222,7 +222,7 @@ msgstr "Készül a letöltendő állomány. Ez eltarthat egy ideig, ha nagyok a
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Az állomány áthelyezése nem sikerült."
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/hu_HU/files_trashbin.po b/l10n/hu_HU/files_trashbin.po
index 4e5d7207c9..d0d6f3bc51 100644
--- a/l10n/hu_HU/files_trashbin.po
+++ b/l10n/hu_HU/files_trashbin.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-15 04:47-0400\n"
-"PO-Revision-Date: 2013-08-15 08:48+0000\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"PO-Revision-Date: 2013-09-24 18:40+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
 "MIME-Version: 1.0\n"
@@ -28,43 +28,43 @@ msgstr "Nem sikerült %s végleges törlése"
 msgid "Couldn't restore %s"
 msgstr "Nem sikerült %s visszaállítása"
 
-#: js/trash.js:7 js/trash.js:100
+#: js/trash.js:7 js/trash.js:102
 msgid "perform restore operation"
 msgstr "a visszaállítás végrehajtása"
 
-#: js/trash.js:20 js/trash.js:48 js/trash.js:118 js/trash.js:146
+#: js/trash.js:20 js/trash.js:49 js/trash.js:120 js/trash.js:148
 msgid "Error"
 msgstr "Hiba"
 
-#: js/trash.js:36
+#: js/trash.js:37
 msgid "delete file permanently"
 msgstr "az állomány végleges törlése"
 
-#: js/trash.js:127
+#: js/trash.js:129
 msgid "Delete permanently"
 msgstr "Végleges törlés"
 
-#: js/trash.js:182 templates/index.php:17
+#: js/trash.js:190 templates/index.php:21
 msgid "Name"
 msgstr "Név"
 
-#: js/trash.js:183 templates/index.php:27
+#: js/trash.js:191 templates/index.php:31
 msgid "Deleted"
 msgstr "Törölve"
 
-#: js/trash.js:191
+#: js/trash.js:199
 msgid "%n folder"
 msgid_plural "%n folders"
 msgstr[0] ""
-msgstr[1] ""
+msgstr[1] "%n mappa"
 
-#: js/trash.js:197
+#: js/trash.js:205
 msgid "%n file"
 msgid_plural "%n files"
 msgstr[0] ""
-msgstr[1] ""
+msgstr[1] "%n állomány"
 
-#: lib/trash.php:819 lib/trash.php:821
+#: lib/trashbin.php:814 lib/trashbin.php:816
 msgid "restored"
 msgstr "visszaállítva"
 
@@ -72,11 +72,11 @@ msgstr "visszaállítva"
 msgid "Nothing in here. Your trash bin is empty!"
 msgstr "Itt nincs semmi. Az Ön szemetes mappája üres!"
 
-#: templates/index.php:20 templates/index.php:22
+#: templates/index.php:24 templates/index.php:26
 msgid "Restore"
 msgstr "Visszaállítás"
 
-#: templates/index.php:30 templates/index.php:31
+#: templates/index.php:34 templates/index.php:35
 msgid "Delete"
 msgstr "Törlés"
 
diff --git a/l10n/hu_HU/user_ldap.po b/l10n/hu_HU/user_ldap.po
index 5b24b22ffd..87a2b14046 100644
--- a/l10n/hu_HU/user_ldap.po
+++ b/l10n/hu_HU/user_ldap.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-07 04:40-0400\n"
-"PO-Revision-Date: 2013-09-05 11:51+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"PO-Revision-Date: 2013-09-24 19:00+0000\n"
+"Last-Translator: Laszlo Tornoci <torlasz@gmail.com>\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"
@@ -92,7 +92,7 @@ msgid ""
 "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
 " experience unexpected behavior. Please ask your system administrator to "
 "disable one of them."
-msgstr ""
+msgstr "<b>Figyelem:</b> a user_ldap és user_webdavauth alkalmazások nem kompatibilisek. Együttes használatuk váratlan eredményekhez vezethet. Kérje meg a rendszergazdát, hogy a kettő közül kapcsolja ki az egyiket."
 
 #: templates/settings.php:12
 msgid ""
@@ -157,7 +157,7 @@ msgstr "Szűrő a bejelentkezéshez"
 msgid ""
 "Defines the filter to apply, when login is attempted. %%uid replaces the "
 "username in the login action. Example: \"uid=%%uid\""
-msgstr ""
+msgstr "Ez a szűrő érvényes a bejelentkezés megkísérlésekor. Ekkor az %%uid változó helyére a bejelentkezési név kerül. Például: \"uid=%%uid\""
 
 #: templates/settings.php:55
 msgid "User List Filter"
@@ -167,7 +167,7 @@ msgstr "A felhasználók szűrője"
 msgid ""
 "Defines the filter to apply, when retrieving users (no placeholders). "
 "Example: \"objectClass=person\""
-msgstr ""
+msgstr "Ez a szűrő érvényes a felhasználók listázásakor (nincs helyettesíthető változó). Például: \"objectClass=person\""
 
 #: templates/settings.php:59
 msgid "Group Filter"
@@ -177,7 +177,7 @@ msgstr "A csoportok szűrője"
 msgid ""
 "Defines the filter to apply, when retrieving groups (no placeholders). "
 "Example: \"objectClass=posixGroup\""
-msgstr ""
+msgstr "Ez a szűrő érvényes a csoportok listázásakor (nincs helyettesíthető változó). Például: \"objectClass=posixGroup\""
 
 #: templates/settings.php:66
 msgid "Connection Settings"
@@ -215,7 +215,7 @@ msgstr "A fő szerver kihagyása"
 
 #: templates/settings.php:72
 msgid "Only connect to the replica server."
-msgstr ""
+msgstr "Csak a másodlagos (másolati) kiszolgálóhoz kapcsolódjunk."
 
 #: templates/settings.php:73
 msgid "Use TLS"
@@ -238,7 +238,7 @@ msgstr "Ne ellenőrizzük az SSL-tanúsítvány érvényességét"
 msgid ""
 "Not recommended, use it for testing only! If connection only works with this"
 " option, import the LDAP server's SSL certificate in your %s server."
-msgstr ""
+msgstr "Használata nem javasolt (kivéve tesztelési céllal). Ha a kapcsolat csak ezzel a beállítással működik, akkor importálja az LDAP-kiszolgáló SSL tanúsítványát a(z) %s kiszolgálóra!"
 
 #: templates/settings.php:76
 msgid "Cache Time-To-Live"
@@ -258,7 +258,7 @@ msgstr "A felhasználónév mezője"
 
 #: templates/settings.php:80
 msgid "The LDAP attribute to use to generate the user's display name."
-msgstr ""
+msgstr "Ebből az LDAP attribútumból képződik a felhasználó megjelenítendő neve."
 
 #: templates/settings.php:81
 msgid "Base User Tree"
@@ -282,7 +282,7 @@ msgstr "A csoport nevének mezője"
 
 #: templates/settings.php:83
 msgid "The LDAP attribute to use to generate the groups's display name."
-msgstr ""
+msgstr "Ebből az LDAP attribútumból képződik a csoport megjelenítendő neve."
 
 #: templates/settings.php:84
 msgid "Base Group Tree"
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index a57486f5ed..ba60bef371 100644
--- a/l10n/templates/core.pot
+++ b/l10n/templates/core.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index 23d0cd0b17..601c663392 100644
--- a/l10n/templates/files.pot
+++ b/l10n/templates/files.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot
index 44e17a2fcb..52e8feed91 100644
--- a/l10n/templates/files_encryption.pot
+++ b/l10n/templates/files_encryption.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot
index abdd985cfd..a99fbf35c8 100644
--- a/l10n/templates/files_external.pot
+++ b/l10n/templates/files_external.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot
index 34ed992660..10bee89c27 100644
--- a/l10n/templates/files_sharing.pot
+++ b/l10n/templates/files_sharing.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot
index 45fa700a43..cfc69f2b2e 100644
--- a/l10n/templates/files_trashbin.pot
+++ b/l10n/templates/files_trashbin.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot
index 2e73cce980..284aca099f 100644
--- a/l10n/templates/files_versions.pot
+++ b/l10n/templates/files_versions.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
index 0733e0c273..0103b348e9 100644
--- a/l10n/templates/lib.pot
+++ b/l10n/templates/lib.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index 66c00629bd..c14bb4c3e5 100644
--- a/l10n/templates/settings.pot
+++ b/l10n/templates/settings.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot
index 919a39b405..822d615af9 100644
--- a/l10n/templates/user_ldap.pot
+++ b/l10n/templates/user_ldap.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot
index dfb732ed0c..3a0f240e93 100644
--- a/l10n/templates/user_webdavauth.pot
+++ b/l10n/templates/user_webdavauth.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-24 12:58-0400\n"
+"POT-Creation-Date: 2013-09-27 00:01-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/lib/l10n/da.php b/lib/l10n/da.php
index 2690314276..05a43f42ed 100644
--- a/lib/l10n/da.php
+++ b/lib/l10n/da.php
@@ -8,6 +8,9 @@ $TRANSLATIONS = array(
 "Users" => "Brugere",
 "Admin" => "Admin",
 "Failed to upgrade \"%s\"." => "Upgradering af \"%s\" fejlede",
+"Custom profile pictures don't work with encryption yet" => "Personligt profilbillede virker endnu ikke sammen med kryptering",
+"Unknown filetype" => "Ukendt filtype",
+"Invalid image" => "Ugyldigt billede",
 "web services under your control" => "Webtjenester under din kontrol",
 "cannot open \"%s\"" => "Kan ikke åbne \"%s\"",
 "ZIP download is turned off." => "ZIP-download er slået fra.",
diff --git a/settings/l10n/da.php b/settings/l10n/da.php
index fcff9dbcfd..f86559d675 100644
--- a/settings/l10n/da.php
+++ b/settings/l10n/da.php
@@ -21,6 +21,7 @@ $TRANSLATIONS = array(
 "Please provide an admin recovery password, otherwise all user data will be lost" => "Angiv venligst en admininstrator gendannelseskode, ellers vil alt brugerdata gå tabt",
 "Wrong admin recovery password. Please check the password and try again." => "Forkert admin gendannelseskode. Se venligst koden efter og prøv igen.",
 "Back-end doesn't support password change, but the users encryption key was successfully updated." => "Serveren understøtter ikke kodeordsskifte, men brugernes krypteringsnøgle blev opdateret.",
+"Unable to change password" => "Kunne ikke ændre kodeord",
 "Update to {appversion}" => "Opdatér til {appversion}",
 "Disable" => "Deaktiver",
 "Enable" => "Aktiver",
diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php
index 55c0e7fe9a..10a7d764bc 100644
--- a/settings/l10n/fr.php
+++ b/settings/l10n/fr.php
@@ -18,6 +18,9 @@ $TRANSLATIONS = array(
 "Couldn't update app." => "Impossible de mettre à jour l'application",
 "Wrong password" => "Mot de passe incorrect",
 "No user supplied" => "Aucun utilisateur fourni",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Veuillez fournir un mot de passe administrateur de récupération de données, sinon toutes les données de l'utilisateur seront perdues",
+"Wrong admin recovery password. Please check the password and try again." => "Mot de passe administrateur de récupération de données invalide. Veuillez vérifier le mot de passe et essayer à nouveau.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "L'infrastructure d'arrière-plan ne supporte pas la modification de mot de passe, mais la clef de chiffrement des utilisateurs a été mise à jour avec succès.",
 "Unable to change password" => "Impossible de modifier le mot de passe",
 "Update to {appversion}" => "Mettre à jour vers {appversion}",
 "Disable" => "Désactiver",
-- 
GitLab


From aa8a145ba8fe5a429698ac9c508704952a454358 Mon Sep 17 00:00:00 2001
From: Georg Ehrke <developer@georgehrke.com>
Date: Fri, 27 Sep 2013 09:59:04 +0200
Subject: [PATCH 225/248] use dataProvider for txt blacklist test

---
 tests/lib/preview.php | 53 +++++++++++++++++++++++--------------------
 1 file changed, 28 insertions(+), 25 deletions(-)

diff --git a/tests/lib/preview.php b/tests/lib/preview.php
index c40b2d03ef..5dc4a93acc 100644
--- a/tests/lib/preview.php
+++ b/tests/lib/preview.php
@@ -95,9 +95,6 @@ class Preview extends \PHPUnit_Framework_TestCase {
 	public function testTxtBlacklist() {
 		$user = $this->initFS();
 
-		$x = 32;
-		$y = 32;
-
 		$txt = 'random text file';
 		$ics = file_get_contents(__DIR__ . '/../data/testcal.ics');
 		$vcf = file_get_contents(__DIR__ . '/../data/testcontact.vcf');
@@ -106,28 +103,34 @@ class Preview extends \PHPUnit_Framework_TestCase {
 		$rootView->mkdir('/'.$user);
 		$rootView->mkdir('/'.$user.'/files');
 
-		$toTest = array('txt',
-						'ics',
-						'vcf');
-
-		foreach($toTest as $test) {
-			$sample = '/'.$user.'/files/test.'.$test;
-			$rootView->file_put_contents($sample, ${$test});
-			$preview = new \OC\Preview($user, 'files/', 'test.'.$test, $x, $y);
-			$image = $preview->getPreview();
-			$resource = $image->resource();
-
-			//http://stackoverflow.com/questions/5702953/imagecolorat-and-transparency
-			$colorIndex = imagecolorat($resource, 1, 1);
-			$colorInfo = imagecolorsforindex($resource, $colorIndex);
-			$isTransparent = ($colorInfo['alpha'] === 127);
-
-			if($test === 'txt') {
-				$this->assertEquals($isTransparent, false);
-			} else {
-				$this->assertEquals($isTransparent, true);
-			}
-		}
+		return array(
+			array('txt', $txt, $user, $rootView, false),
+			array('ics', $ics, $user, $rootView, true),
+			array('vcf', $vcf, $user, $rootView, true),
+		);
+	}
+
+	/**
+	 * @dataProvider testTxtBlacklist
+	 */
+	public function testIsTransparent($test, $data, $user, $rootView, $expectedResult) {
+		$x = 32;
+		$y = 32;
+
+		$sample = '/'.$user.'/files/test.'.$test;
+		$rootView->file_put_contents($sample, $data);
+		$preview = new \OC\Preview($user, 'files/', 'test.'.$test, $x, $y);
+		$image = $preview->getPreview();
+		$resource = $image->resource();
+
+		//http://stackoverflow.com/questions/5702953/imagecolorat-and-transparency
+		$colorIndex = imagecolorat($resource, 1, 1);
+		$colorInfo = imagecolorsforindex($resource, $colorIndex);
+		$this->assertEquals(
+			$expectedResult,
+			$colorInfo['alpha'] === 127,
+			'Failed asserting that only previews for text files are transparent.'
+		);
 	}
 
 	private function initFS() {
-- 
GitLab


From 1b13101096493c0c8f02826e373af761fd5cfac6 Mon Sep 17 00:00:00 2001
From: Georg Ehrke <developer@georgehrke.com>
Date: Fri, 27 Sep 2013 11:01:47 +0200
Subject: [PATCH 226/248] move fileView object initialization to
 testIsTransparent

---
 tests/lib/preview.php | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/tests/lib/preview.php b/tests/lib/preview.php
index 5dc4a93acc..98659a7e88 100644
--- a/tests/lib/preview.php
+++ b/tests/lib/preview.php
@@ -93,27 +93,27 @@ class Preview extends \PHPUnit_Framework_TestCase {
 	}
 
 	public function testTxtBlacklist() {
-		$user = $this->initFS();
-
 		$txt = 'random text file';
 		$ics = file_get_contents(__DIR__ . '/../data/testcal.ics');
 		$vcf = file_get_contents(__DIR__ . '/../data/testcontact.vcf');
 
-		$rootView = new \OC\Files\View('');
-		$rootView->mkdir('/'.$user);
-		$rootView->mkdir('/'.$user.'/files');
-
 		return array(
-			array('txt', $txt, $user, $rootView, false),
-			array('ics', $ics, $user, $rootView, true),
-			array('vcf', $vcf, $user, $rootView, true),
+			array('txt', $txt, false),
+			array('ics', $ics, true),
+			array('vcf', $vcf, true),
 		);
 	}
 
 	/**
 	 * @dataProvider testTxtBlacklist
 	 */
-	public function testIsTransparent($test, $data, $user, $rootView, $expectedResult) {
+	public function testIsTransparent($test, $data, $expectedResult) {
+		$user = $this->initFS();
+
+		$rootView = new \OC\Files\View('');
+		$rootView->mkdir('/'.$user);
+		$rootView->mkdir('/'.$user.'/files');
+
 		$x = 32;
 		$y = 32;
 
-- 
GitLab


From 4e9296a484fbec0a4c725f32ef47716f9e1b56bc Mon Sep 17 00:00:00 2001
From: Georg Ehrke <developer@georgehrke.com>
Date: Fri, 27 Sep 2013 11:33:37 +0200
Subject: [PATCH 227/248] rename testTxtBlacklist to txtBlacklist

---
 tests/lib/preview.php | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/tests/lib/preview.php b/tests/lib/preview.php
index 98659a7e88..01d8a57fc6 100644
--- a/tests/lib/preview.php
+++ b/tests/lib/preview.php
@@ -92,7 +92,7 @@ class Preview extends \PHPUnit_Framework_TestCase {
 		$this->assertEquals($image->height(), $maxY);
 	}
 
-	public function testTxtBlacklist() {
+	public function txtBlacklist() {
 		$txt = 'random text file';
 		$ics = file_get_contents(__DIR__ . '/../data/testcal.ics');
 		$vcf = file_get_contents(__DIR__ . '/../data/testcontact.vcf');
@@ -105,7 +105,7 @@ class Preview extends \PHPUnit_Framework_TestCase {
 	}
 
 	/**
-	 * @dataProvider testTxtBlacklist
+	 * @dataProvider txtBlacklist
 	 */
 	public function testIsTransparent($test, $data, $expectedResult) {
 		$user = $this->initFS();
@@ -146,4 +146,4 @@ class Preview extends \PHPUnit_Framework_TestCase {
 		
 		return $user;
 	}
-}
\ No newline at end of file
+}
-- 
GitLab


From 03d5ea6cec4e88dad36648a931ff0f39a1da23ee Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Fri, 27 Sep 2013 13:34:48 +0200
Subject: [PATCH 228/248] check not only if the keyfile folder exists but also
 if it contains keyfiles

---
 lib/util.php | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/lib/util.php b/lib/util.php
index 41f5f1d16b..dd6c72bfc7 100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -410,14 +410,18 @@ class OC_Util {
 		$encryptedFiles = false;
 		if (OC_App::isEnabled('files_encryption') === false) {
 			$view = new OC\Files\View('/' . OCP\User::getUser());
-			if ($view->file_exists('/files_encryption/keyfiles')) {
-				$encryptedFiles = true;
+			$keyfilePath = '/files_encryption/keyfiles';
+			if ($view->is_dir($keyfilePath)) {
+				$dircontent = $view->getDirectoryContent($keyfilePath);
+				if (!empty($dircontent)) {
+					$encryptedFiles = true;
+				}
 			}
 		}
-		
+
 		return $encryptedFiles;
 	}
-	
+
 	/**
 	 * @brief Check for correct file permissions of data directory
 	 * @paran string $dataDirectory
@@ -654,16 +658,16 @@ class OC_Util {
 		}
 		return $value;
 	}
-	
+
 	/**
 	 * @brief Public function to encode url parameters
 	 *
 	 * This function is used to encode path to file before output.
 	 * Encoding is done according to RFC 3986 with one exception:
-	 * Character '/' is preserved as is. 
+	 * Character '/' is preserved as is.
 	 *
 	 * @param string $component part of URI to encode
-	 * @return string 
+	 * @return string
 	 */
 	public static function encodePath($component) {
 		$encoded = rawurlencode($component);
@@ -810,7 +814,7 @@ class OC_Util {
 			}
 		}
 	}
-	
+
 	/**
 	 * @brief Check if the connection to the internet is disabled on purpose
 	 * @return bool
-- 
GitLab


From 79da35b698a398bef59f83f222de3055ddbb5a92 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Fri, 27 Sep 2013 13:41:23 +0200
Subject: [PATCH 229/248] code cleanup

---
 tests/lib/connector/sabre/objecttree.php | 61 +++++++++---------------
 1 file changed, 22 insertions(+), 39 deletions(-)

diff --git a/tests/lib/connector/sabre/objecttree.php b/tests/lib/connector/sabre/objecttree.php
index c920441c8b..1d76bb5967 100644
--- a/tests/lib/connector/sabre/objecttree.php
+++ b/tests/lib/connector/sabre/objecttree.php
@@ -36,38 +36,14 @@ class ObjectTree extends PHPUnit_Framework_TestCase {
 	 * @expectedException Sabre_DAV_Exception_Forbidden
 	 */
 	public function testMoveFailed($source, $dest, $updatables) {
-		$rootDir = new OC_Connector_Sabre_Directory('');
-		$objectTree = $this->getMock('\OC\Connector\Sabre\ObjectTree',
-			array('nodeExists', 'getNodeForPath'),
-			array($rootDir));
-
-		$objectTree->expects($this->once())
-			->method('getNodeForPath')
-			->with($this->identicalTo('a/b'))
-			->will($this->returnValue(false));
-
-		/** @var $objectTree \OC\Connector\Sabre\ObjectTree */
-		$objectTree->fileView = new TestDoubleFileView($updatables);
-		$objectTree->move($source, $dest);
+		$this->moveTest($source, $dest, $updatables);
 	}
 
 	/**
 	 * @dataProvider moveSuccessProvider
 	 */
 	public function testMoveSuccess($source, $dest, $updatables) {
-		$rootDir = new OC_Connector_Sabre_Directory('');
-		$objectTree = $this->getMock('\OC\Connector\Sabre\ObjectTree',
-			array('nodeExists', 'getNodeForPath'),
-			array($rootDir));
-
-		$objectTree->expects($this->once())
-			->method('getNodeForPath')
-			->with($this->identicalTo('a/b'))
-			->will($this->returnValue(false));
-
-		/** @var $objectTree \OC\Connector\Sabre\ObjectTree */
-		$objectTree->fileView = new TestDoubleFileView($updatables);
-		$objectTree->move($source, $dest);
+		$this->moveTest($source, $dest, $updatables);
 		$this->assertTrue(true);
 	}
 
@@ -87,18 +63,25 @@ class ObjectTree extends PHPUnit_Framework_TestCase {
 		);
 	}
 
-//	private function buildFileViewMock($updatables) {
-//		// mock filesysten
-//		$view = $this->getMock('\OC\Files\View', array('isUpdatable'), array(), '', FALSE);
-//
-//		foreach ($updatables as $path => $updatable) {
-//			$view->expects($this->any())
-//				->method('isUpdatable')
-//				->with($this->identicalTo($path))
-//				->will($this->returnValue($updatable));
-//		}
-//
-//		return $view;
-//	}
+	/**
+	 * @param $source
+	 * @param $dest
+	 * @param $updatables
+	 */
+	private function moveTest($source, $dest, $updatables) {
+		$rootDir = new OC_Connector_Sabre_Directory('');
+		$objectTree = $this->getMock('\OC\Connector\Sabre\ObjectTree',
+			array('nodeExists', 'getNodeForPath'),
+			array($rootDir));
+
+		$objectTree->expects($this->once())
+			->method('getNodeForPath')
+			->with($this->identicalTo($source))
+			->will($this->returnValue(false));
+
+		/** @var $objectTree \OC\Connector\Sabre\ObjectTree */
+		$objectTree->fileView = new TestDoubleFileView($updatables);
+		$objectTree->move($source, $dest);
+	}
 
 }
-- 
GitLab


From c5bcefe4dbd5a237693b1a7435a7041c7e85abd4 Mon Sep 17 00:00:00 2001
From: Georg Ehrke <developer@georgehrke.com>
Date: Fri, 27 Sep 2013 14:55:37 +0200
Subject: [PATCH 230/248] rename variable in testIsTransparent

---
 tests/lib/preview.php | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/tests/lib/preview.php b/tests/lib/preview.php
index 01d8a57fc6..d0cdd2c44f 100644
--- a/tests/lib/preview.php
+++ b/tests/lib/preview.php
@@ -107,7 +107,7 @@ class Preview extends \PHPUnit_Framework_TestCase {
 	/**
 	 * @dataProvider txtBlacklist
 	 */
-	public function testIsTransparent($test, $data, $expectedResult) {
+	public function testIsTransparent($extension, $data, $expectedResult) {
 		$user = $this->initFS();
 
 		$rootView = new \OC\Files\View('');
@@ -117,9 +117,9 @@ class Preview extends \PHPUnit_Framework_TestCase {
 		$x = 32;
 		$y = 32;
 
-		$sample = '/'.$user.'/files/test.'.$test;
+		$sample = '/'.$user.'/files/test.'.$extension;
 		$rootView->file_put_contents($sample, $data);
-		$preview = new \OC\Preview($user, 'files/', 'test.'.$test, $x, $y);
+		$preview = new \OC\Preview($user, 'files/', 'test.'.$extension, $x, $y);
 		$image = $preview->getPreview();
 		$resource = $image->resource();
 
-- 
GitLab


From adff34cb8a7c2e2a6046e4fe28da3a77cd6492ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Fri, 27 Sep 2013 17:08:48 +0200
Subject: [PATCH 231/248] fixing error in initialization of TagManager

---
 lib/server.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/server.php b/lib/server.php
index 2391952ea6..cabb15324e 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -51,7 +51,7 @@ class Server extends SimpleContainer implements IServerContainer {
 		});
 		$this->registerService('TagManager', function($c) {
 			$user = \OC_User::getUser();
-			return new Tags($user);
+			return new TagManager($user);
 		});
 		$this->registerService('RootFolder', function($c) {
 			// TODO: get user and user manager from container as well
-- 
GitLab


From 57f37c876b59d11dae8b4325bed5fa57de52ecd4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Fri, 27 Sep 2013 17:15:26 +0200
Subject: [PATCH 232/248] delay middleware registrations

---
 .../dependencyinjection/dicontainer.php             | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/lib/appframework/dependencyinjection/dicontainer.php b/lib/appframework/dependencyinjection/dicontainer.php
index 5487826693..380a0ee6d4 100644
--- a/lib/appframework/dependencyinjection/dicontainer.php
+++ b/lib/appframework/dependencyinjection/dicontainer.php
@@ -40,6 +40,10 @@ use OCP\IServerContainer;
 
 class DIContainer extends SimpleContainer implements IAppContainer{
 
+	/**
+	 * @var array
+	 */
+	private $middleWares;
 
 	/**
 	 * Put your class dependencies in here
@@ -89,6 +93,10 @@ class DIContainer extends SimpleContainer implements IAppContainer{
 			$dispatcher = new MiddlewareDispatcher();
 			$dispatcher->registerMiddleware($c['SecurityMiddleware']);
 
+			foreach($this->middleWares as $middleWare) {
+				$dispatcher->registerMiddleware($middleWare);
+			}
+
 			return $dispatcher;
 		});
 
@@ -125,10 +133,7 @@ class DIContainer extends SimpleContainer implements IAppContainer{
 	 * @return boolean
 	 */
 	function registerMiddleWare(IMiddleWare $middleWare) {
-		/** @var $dispatcher MiddlewareDispatcher */
-		$dispatcher = $this->query('MiddlewareDispatcher');
-		$dispatcher->registerMiddleware($middleWare);
-
+		array_push($this->middleWares, $middleWare);
 	}
 
 	/**
-- 
GitLab


From 4907685405ead5df56ef0a5ac0b9af7c86885487 Mon Sep 17 00:00:00 2001
From: kondou <kondou@ts.unde.re>
Date: Sat, 28 Sep 2013 16:46:53 +0200
Subject: [PATCH 233/248] Base defaultavatar text on displayname

Fix #4876
---
 core/avatar/controller.php | 2 +-
 core/js/jquery.avatar.js   | 6 +++++-
 settings/js/personal.js    | 1 +
 3 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/core/avatar/controller.php b/core/avatar/controller.php
index 9f7c0517c4..2269382446 100644
--- a/core/avatar/controller.php
+++ b/core/avatar/controller.php
@@ -33,7 +33,7 @@ class Controller {
 			$image->show();
 		} else {
 			// Signalizes $.avatar() to display a defaultavatar
-			\OC_JSON::success();
+			\OC_JSON::success(array("data"=> array("displayname"=> \OC_User::getDisplayName($user)) ));
 		}
 	}
 
diff --git a/core/js/jquery.avatar.js b/core/js/jquery.avatar.js
index f1382fd7d2..88a4c25d1e 100644
--- a/core/js/jquery.avatar.js
+++ b/core/js/jquery.avatar.js
@@ -69,7 +69,11 @@
 			var url = OC.Router.generate('core_avatar_get', {user: user, size: size})+'?requesttoken='+oc_requesttoken;
 			$.get(url, function(result) {
 				if (typeof(result) === 'object') {
-					$div.placeholder(user);
+					if (result.data && result.data.displayname) {
+						$div.placeholder(user, result.data.displayname);
+					} else {
+						$div.placeholder(user);
+					}
 				} else {
 					if (ie8fix === true) {
 						$div.html('<img src="'+url+'#'+Math.floor(Math.random()*1000)+'">');
diff --git a/settings/js/personal.js b/settings/js/personal.js
index eaaca32f5d..8944a7afa3 100644
--- a/settings/js/personal.js
+++ b/settings/js/personal.js
@@ -34,6 +34,7 @@ function changeDisplayName(){
                 $('#oldDisplayName').text($('#displayName').val());
                 // update displayName on the top right expand button
                 $('#expandDisplayName').text($('#displayName').val());
+		updateAvatar();
             }
             else{
                 $('#newdisplayname').val(data.data.displayName);
-- 
GitLab


From 24d092c4ba4264deb2b6b57299da2acc2971cedc Mon Sep 17 00:00:00 2001
From: kondou <kondou@ts.unde.re>
Date: Sat, 28 Sep 2013 17:49:07 +0200
Subject: [PATCH 234/248] Have uniform (wrong) indention

---
 settings/js/personal.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/settings/js/personal.js b/settings/js/personal.js
index 8944a7afa3..a923b47573 100644
--- a/settings/js/personal.js
+++ b/settings/js/personal.js
@@ -34,7 +34,7 @@ function changeDisplayName(){
                 $('#oldDisplayName').text($('#displayName').val());
                 // update displayName on the top right expand button
                 $('#expandDisplayName').text($('#displayName').val());
-		updateAvatar();
+                updateAvatar();
             }
             else{
                 $('#newdisplayname').val(data.data.displayName);
-- 
GitLab


From adcb738e47566d94a173116e86e3f5abe249dac1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Sat, 28 Sep 2013 20:40:25 +0200
Subject: [PATCH 235/248] initialize $middleWares

---
 lib/appframework/dependencyinjection/dicontainer.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/appframework/dependencyinjection/dicontainer.php b/lib/appframework/dependencyinjection/dicontainer.php
index 380a0ee6d4..3755d45fa0 100644
--- a/lib/appframework/dependencyinjection/dicontainer.php
+++ b/lib/appframework/dependencyinjection/dicontainer.php
@@ -43,7 +43,7 @@ class DIContainer extends SimpleContainer implements IAppContainer{
 	/**
 	 * @var array
 	 */
-	private $middleWares;
+	private $middleWares = array();
 
 	/**
 	 * Put your class dependencies in here
-- 
GitLab


From 59e4ff7d24b5df96998fbc65676b56d524af5ba6 Mon Sep 17 00:00:00 2001
From: Jenkins for ownCloud <thomas.mueller@tmit.eu>
Date: Sun, 29 Sep 2013 00:03:26 -0400
Subject: [PATCH 236/248] [tx-robot] updated from transifex

---
 apps/files/l10n/uk.php              |  5 ++-
 apps/files_encryption/l10n/uk.php   |  1 +
 core/l10n/it.php                    | 10 ++---
 core/l10n/sv.php                    | 16 +++++++-
 l10n/it/core.po                     | 30 +++++++--------
 l10n/sv/core.po                     | 53 ++++++++++++++-------------
 l10n/sv/settings.po                 | 57 +++++++++++++++--------------
 l10n/templates/core.pot             |  2 +-
 l10n/templates/files.pot            |  2 +-
 l10n/templates/files_encryption.pot |  2 +-
 l10n/templates/files_external.pot   |  2 +-
 l10n/templates/files_sharing.pot    |  2 +-
 l10n/templates/files_trashbin.pot   |  2 +-
 l10n/templates/files_versions.pot   |  2 +-
 l10n/templates/lib.pot              |  2 +-
 l10n/templates/settings.pot         |  8 ++--
 l10n/templates/user_ldap.pot        |  2 +-
 l10n/templates/user_webdavauth.pot  |  2 +-
 l10n/uk/files.po                    | 18 ++++-----
 l10n/uk/files_encryption.po         |  6 +--
 l10n/uk/settings.po                 | 35 +++++++++---------
 settings/l10n/sv.php                | 13 +++++++
 settings/l10n/uk.php                |  4 +-
 23 files changed, 154 insertions(+), 122 deletions(-)

diff --git a/apps/files/l10n/uk.php b/apps/files/l10n/uk.php
index fac7cea529..4aaeca2554 100644
--- a/apps/files/l10n/uk.php
+++ b/apps/files/l10n/uk.php
@@ -18,6 +18,7 @@ $TRANSLATIONS = array(
 "Upload cancelled." => "Завантаження перервано.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Виконується завантаження файлу. Закриття цієї сторінки приведе до відміни завантаження.",
 "URL cannot be empty." => "URL не може бути пустим.",
+"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Неправильне ім'я теки. Використання 'Shared' зарезервовано ownCloud",
 "Error" => "Помилка",
 "Share" => "Поділитися",
 "Delete permanently" => "Видалити назавжди",
@@ -29,7 +30,7 @@ $TRANSLATIONS = array(
 "cancel" => "відміна",
 "replaced {new_name} with {old_name}" => "замінено {new_name} на {old_name}",
 "undo" => "відмінити",
-"_%n folder_::_%n folders_" => array("","",""),
+"_%n folder_::_%n folders_" => array("%n тека","%n тека","%n теки"),
 "_%n file_::_%n files_" => array("","",""),
 "_Uploading %n file_::_Uploading %n files_" => array("","",""),
 "'.' is an invalid file name." => "'.' це невірне ім'я файлу.",
@@ -53,7 +54,7 @@ $TRANSLATIONS = array(
 "Save" => "Зберегти",
 "New" => "Створити",
 "Text file" => "Текстовий файл",
-"Folder" => "Папка",
+"Folder" => "Тека",
 "From link" => "З посилання",
 "Deleted files" => "Видалено файлів",
 "Cancel upload" => "Перервати завантаження",
diff --git a/apps/files_encryption/l10n/uk.php b/apps/files_encryption/l10n/uk.php
index e4fb053a71..5260dd3f2f 100644
--- a/apps/files_encryption/l10n/uk.php
+++ b/apps/files_encryption/l10n/uk.php
@@ -1,6 +1,7 @@
 <?php
 $TRANSLATIONS = array(
 "Saving..." => "Зберігаю...",
+"personal settings" => "особисті налаштування",
 "Encryption" => "Шифрування",
 "Change Password" => "Змінити Пароль"
 );
diff --git a/core/l10n/it.php b/core/l10n/it.php
index 94395b0226..bd2fad79c8 100644
--- a/core/l10n/it.php
+++ b/core/l10n/it.php
@@ -53,18 +53,18 @@ $TRANSLATIONS = array(
 "last year" => "anno scorso",
 "years ago" => "anni fa",
 "Choose" => "Scegli",
-"Error loading file picker template: {error}" => "Errore nel caricamento del modello del selettore file: {error}",
+"Error loading file picker template: {error}" => "Errore durante il caricamento del modello del selettore file: {error}",
 "Yes" => "Sì",
 "No" => "No",
 "Ok" => "Ok",
-"Error loading message template: {error}" => "Errore nel caricamento del modello di messaggio: {error}",
+"Error loading message template: {error}" => "Errore durante il caricamento del modello di messaggio: {error}",
 "_{count} file conflict_::_{count} file conflicts_" => array("{count} file in conflitto","{count} file in conflitto"),
-"One file conflict" => "Un conflitto tra file",
+"One file conflict" => "Un file in conflitto",
 "Which files do you want to keep?" => "Quali file vuoi mantenere?",
-"If you select both versions, the copied file will have a number added to its name." => "Se selezioni entrambe le versioni, verrà aggiunto un numero al nome del file copiato.",
+"If you select both versions, the copied file will have a number added to its name." => "Se selezioni entrambe le versioni, sarà aggiunto un numero al nome del file copiato.",
 "Cancel" => "Annulla",
 "Continue" => "Continua",
-"(all selected)" => "(tutti selezionati)",
+"(all selected)" => "(tutti i selezionati)",
 "({count} selected)" => "({count} selezionati)",
 "Error loading file exists template" => "Errore durante il caricamento del modello del file esistente",
 "The object type is not specified." => "Il tipo di oggetto non è specificato.",
diff --git a/core/l10n/sv.php b/core/l10n/sv.php
index 660cab0a62..0ea3259df6 100644
--- a/core/l10n/sv.php
+++ b/core/l10n/sv.php
@@ -16,6 +16,11 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Fel vid tillägg av %s till favoriter.",
 "No categories selected for deletion." => "Inga kategorier valda för radering.",
 "Error removing %s from favorites." => "Fel vid borttagning av %s från favoriter.",
+"No image or file provided" => "Ingen bild eller fil har tillhandahållits",
+"Unknown filetype" => "Okänd filtyp",
+"Invalid image" => "Ogiltig bild",
+"No temporary profile picture available, try again" => "Ingen temporär profilbild finns tillgänglig, försök igen",
+"No crop data provided" => "Ingen beskärdata har angivits",
 "Sunday" => "Söndag",
 "Monday" => "Måndag",
 "Tuesday" => "Tisdag",
@@ -48,11 +53,20 @@ $TRANSLATIONS = array(
 "last year" => "förra året",
 "years ago" => "år sedan",
 "Choose" => "Välj",
+"Error loading file picker template: {error}" => "Fel uppstod för filväljarmall: {error}",
 "Yes" => "Ja",
 "No" => "Nej",
 "Ok" => "Ok",
-"_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"Error loading message template: {error}" => "Fel uppstod under inläsningen av meddelandemallen: {error}",
+"_{count} file conflict_::_{count} file conflicts_" => array("{count} filkonflikt","{count} filkonflikter"),
+"One file conflict" => "En filkonflikt",
+"Which files do you want to keep?" => "Vilken fil vill du behålla?",
+"If you select both versions, the copied file will have a number added to its name." => "Om du väljer båda versionerna kommer de kopierade filerna ha nummer tillagda i filnamnet.",
 "Cancel" => "Avbryt",
+"Continue" => "Fortsätt",
+"(all selected)" => "(Alla valda)",
+"({count} selected)" => "({count} valda)",
+"Error loading file exists template" => "Fel uppstod filmall existerar",
 "The object type is not specified." => "Objekttypen är inte specificerad.",
 "Error" => "Fel",
 "The app name is not specified." => " Namnet på appen är inte specificerad.",
diff --git a/l10n/it/core.po b/l10n/it/core.po
index d587e95953..a5586707e4 100644
--- a/l10n/it/core.po
+++ b/l10n/it/core.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-22 12:55-0400\n"
-"PO-Revision-Date: 2013-09-22 13:40+0000\n"
-"Last-Translator: nappo <leone@inventati.org>\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"PO-Revision-Date: 2013-09-27 18:30+0000\n"
+"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
 "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -252,7 +252,7 @@ msgstr "Scegli"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr "Errore nel caricamento del modello del selettore file: {error}"
+msgstr "Errore durante il caricamento del modello del selettore file: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -268,7 +268,7 @@ msgstr "Ok"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr "Errore nel caricamento del modello di messaggio: {error}"
+msgstr "Errore durante il caricamento del modello di messaggio: {error}"
 
 #: js/oc-dialogs.js:347
 msgid "{count} file conflict"
@@ -278,7 +278,7 @@ msgstr[1] "{count} file in conflitto"
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr "Un conflitto tra file"
+msgstr "Un file in conflitto"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
@@ -288,7 +288,7 @@ msgstr "Quali file vuoi mantenere?"
 msgid ""
 "If you select both versions, the copied file will have a number added to its"
 " name."
-msgstr "Se selezioni entrambe le versioni, verrà aggiunto un numero al nome del file copiato."
+msgstr "Se selezioni entrambe le versioni, sarà aggiunto un numero al nome del file copiato."
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
@@ -300,7 +300,7 @@ msgstr "Continua"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr "(tutti selezionati)"
+msgstr "(tutti i selezionati)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
@@ -319,7 +319,7 @@ msgstr "Il tipo di oggetto non è specificato."
 #: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
 #: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
 #: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
-#: js/share.js:645 js/share.js:657
+#: js/share.js:656 js/share.js:668
 msgid "Error"
 msgstr "Errore"
 
@@ -339,7 +339,7 @@ msgstr "Condivisi"
 msgid "Share"
 msgstr "Condividi"
 
-#: js/share.js:131 js/share.js:685
+#: js/share.js:131 js/share.js:696
 msgid "Error while sharing"
 msgstr "Errore durante la condivisione"
 
@@ -439,23 +439,23 @@ msgstr "elimina"
 msgid "share"
 msgstr "condividi"
 
-#: js/share.js:400 js/share.js:632
+#: js/share.js:400 js/share.js:643
 msgid "Password protected"
 msgstr "Protetta da password"
 
-#: js/share.js:645
+#: js/share.js:656
 msgid "Error unsetting expiration date"
 msgstr "Errore durante la rimozione della data di scadenza"
 
-#: js/share.js:657
+#: js/share.js:668
 msgid "Error setting expiration date"
 msgstr "Errore durante l'impostazione della data di scadenza"
 
-#: js/share.js:672
+#: js/share.js:683
 msgid "Sending ..."
 msgstr "Invio in corso..."
 
-#: js/share.js:683
+#: js/share.js:694
 msgid "Email sent"
 msgstr "Messaggio inviato"
 
diff --git a/l10n/sv/core.po b/l10n/sv/core.po
index 6495949816..3d94872f70 100644
--- a/l10n/sv/core.po
+++ b/l10n/sv/core.po
@@ -3,6 +3,7 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Daniel Sandman <revoltism@gmail.com>, 2013
 # Gunnar Norin <blittan@xbmc.org>, 2013
 # medialabs, 2013
 # Magnus Höglund <magnus@linux.com>, 2013
@@ -11,9 +12,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-22 12:55-0400\n"
-"PO-Revision-Date: 2013-09-20 15:01+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"PO-Revision-Date: 2013-09-28 02:02+0000\n"
+"Last-Translator: Daniel Sandman <revoltism@gmail.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"
@@ -96,23 +97,23 @@ msgstr "Fel vid borttagning av %s från favoriter."
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "Ingen bild eller fil har tillhandahållits"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Okänd filtyp"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Ogiltig bild"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "Ingen temporär profilbild finns tillgänglig, försök igen"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "Ingen beskärdata har angivits"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -252,7 +253,7 @@ msgstr "Välj"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "Fel uppstod för filväljarmall: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -268,27 +269,27 @@ msgstr "Ok"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr ""
+msgstr "Fel uppstod under inläsningen av meddelandemallen: {error}"
 
 #: js/oc-dialogs.js:347
 msgid "{count} file conflict"
 msgid_plural "{count} file conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{count} filkonflikt"
+msgstr[1] "{count} filkonflikter"
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "En filkonflikt"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
-msgstr ""
+msgstr "Vilken fil vill du behålla?"
 
 #: js/oc-dialogs.js:368
 msgid ""
 "If you select both versions, the copied file will have a number added to its"
 " name."
-msgstr ""
+msgstr "Om du väljer båda versionerna kommer de kopierade filerna ha nummer tillagda i filnamnet."
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
@@ -296,19 +297,19 @@ msgstr "Avbryt"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Fortsätt"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr ""
+msgstr "(Alla valda)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
-msgstr ""
+msgstr "({count} valda)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
-msgstr ""
+msgstr "Fel uppstod filmall existerar"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
@@ -319,7 +320,7 @@ msgstr "Objekttypen är inte specificerad."
 #: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
 #: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
 #: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
-#: js/share.js:645 js/share.js:657
+#: js/share.js:656 js/share.js:668
 msgid "Error"
 msgstr "Fel"
 
@@ -339,7 +340,7 @@ msgstr "Delad"
 msgid "Share"
 msgstr "Dela"
 
-#: js/share.js:131 js/share.js:685
+#: js/share.js:131 js/share.js:696
 msgid "Error while sharing"
 msgstr "Fel vid delning"
 
@@ -439,23 +440,23 @@ msgstr "radera"
 msgid "share"
 msgstr "dela"
 
-#: js/share.js:400 js/share.js:632
+#: js/share.js:400 js/share.js:643
 msgid "Password protected"
 msgstr "Lösenordsskyddad"
 
-#: js/share.js:645
+#: js/share.js:656
 msgid "Error unsetting expiration date"
 msgstr "Fel vid borttagning av utgångsdatum"
 
-#: js/share.js:657
+#: js/share.js:668
 msgid "Error setting expiration date"
 msgstr "Fel vid sättning av utgångsdatum"
 
-#: js/share.js:672
+#: js/share.js:683
 msgid "Sending ..."
 msgstr "Skickar ..."
 
-#: js/share.js:683
+#: js/share.js:694
 msgid "Email sent"
 msgstr "E-post skickat"
 
diff --git a/l10n/sv/settings.po b/l10n/sv/settings.po
index 284b1287a8..a0a193043a 100644
--- a/l10n/sv/settings.po
+++ b/l10n/sv/settings.po
@@ -3,6 +3,7 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Daniel Sandman <revoltism@gmail.com>, 2013
 # Gunnar Norin <blittan@xbmc.org>, 2013
 # Jan Busk, 2013
 # Jan Busk, 2013
@@ -13,9 +14,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:45-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"PO-Revision-Date: 2013-09-28 01:44+0000\n"
+"Last-Translator: Daniel Sandman <revoltism@gmail.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"
@@ -92,42 +93,42 @@ msgstr "Kunde inte uppdatera appen."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Fel lösenord"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "Ingen användare angiven"
 
 #: changepassword/controller.php:74
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Ange ett återställningslösenord för administratören. Annars kommer all användardata förloras"
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "Felaktigt återställningslösenord för administratör. Kolla lösenordet och prova igen."
 
 #: changepassword/controller.php:87
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
+msgstr "Gränssnittet stödjer inte byte av lösenord, men användarnas krypteringsnyckel blev uppdaterad."
 
 #: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Kunde inte ändra lösenord"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Uppdatera till {appversion}"
 
-#: js/apps.js:49 js/apps.js:82 js/apps.js:108
+#: js/apps.js:49 js/apps.js:82 js/apps.js:110
 msgid "Disable"
 msgstr "Deaktivera"
 
-#: js/apps.js:49 js/apps.js:89 js/apps.js:102 js/apps.js:117
+#: js/apps.js:49 js/apps.js:90 js/apps.js:103 js/apps.js:119
 msgid "Enable"
 msgstr "Aktivera"
 
@@ -135,43 +136,43 @@ msgstr "Aktivera"
 msgid "Please wait...."
 msgstr "Var god vänta..."
 
-#: js/apps.js:79 js/apps.js:80 js/apps.js:100
+#: js/apps.js:79 js/apps.js:80 js/apps.js:101
 msgid "Error while disabling app"
 msgstr "Fel vid inaktivering av app"
 
-#: js/apps.js:99 js/apps.js:112 js/apps.js:113
+#: js/apps.js:100 js/apps.js:114 js/apps.js:115
 msgid "Error while enabling app"
 msgstr "Fel vid aktivering av app"
 
-#: js/apps.js:123
+#: js/apps.js:125
 msgid "Updating...."
 msgstr "Uppdaterar..."
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error while updating app"
 msgstr "Fel uppstod vid uppdatering av appen"
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error"
 msgstr "Fel"
 
-#: js/apps.js:127 templates/apps.php:43
+#: js/apps.js:129 templates/apps.php:43
 msgid "Update"
 msgstr "Uppdatera"
 
-#: js/apps.js:130
+#: js/apps.js:132
 msgid "Updated"
 msgstr "Uppdaterad"
 
-#: js/personal.js:220
+#: js/personal.js:221
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Välj en profilbild"
 
-#: js/personal.js:265
+#: js/personal.js:266
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Dekrypterar filer... Vänligen vänta, detta kan ta en stund."
 
-#: js/personal.js:287
+#: js/personal.js:288
 msgid "Saving..."
 msgstr "Sparar..."
 
@@ -499,27 +500,27 @@ msgstr "Profilbild"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Ladda upp ny"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Välj ny från filer"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Radera bild"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Antingen png eller jpg. Helst fyrkantig, men du kommer att kunna beskära den."
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Avbryt"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Välj som profilbild"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index ba60bef371..afb3a410c4 100644
--- a/l10n/templates/core.pot
+++ b/l10n/templates/core.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index 601c663392..1e72820c52 100644
--- a/l10n/templates/files.pot
+++ b/l10n/templates/files.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot
index 52e8feed91..aea2b2282e 100644
--- a/l10n/templates/files_encryption.pot
+++ b/l10n/templates/files_encryption.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot
index a99fbf35c8..ad32cfb2fc 100644
--- a/l10n/templates/files_external.pot
+++ b/l10n/templates/files_external.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot
index 10bee89c27..e9a596f361 100644
--- a/l10n/templates/files_sharing.pot
+++ b/l10n/templates/files_sharing.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot
index cfc69f2b2e..044fb375df 100644
--- a/l10n/templates/files_trashbin.pot
+++ b/l10n/templates/files_trashbin.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot
index 284aca099f..a61952105b 100644
--- a/l10n/templates/files_versions.pot
+++ b/l10n/templates/files_versions.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
index 0103b348e9..2f54bdc233 100644
--- a/l10n/templates/lib.pot
+++ b/l10n/templates/lib.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index c14bb4c3e5..a669dad822 100644
--- a/l10n/templates/settings.pot
+++ b/l10n/templates/settings.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -156,15 +156,15 @@ msgstr ""
 msgid "Updated"
 msgstr ""
 
-#: js/personal.js:220
+#: js/personal.js:221
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:265
+#: js/personal.js:266
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:287
+#: js/personal.js:288
 msgid "Saving..."
 msgstr ""
 
diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot
index 822d615af9..0848d99353 100644
--- a/l10n/templates/user_ldap.pot
+++ b/l10n/templates/user_ldap.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot
index 3a0f240e93..ec5a60a6ec 100644
--- a/l10n/templates/user_webdavauth.pot
+++ b/l10n/templates/user_webdavauth.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-27 00:01-0400\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/uk/files.po b/l10n/uk/files.po
index 23349e0800..d269f620d9 100644
--- a/l10n/uk/files.po
+++ b/l10n/uk/files.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"PO-Revision-Date: 2013-09-27 19:42+0000\n"
+"Last-Translator: zubr139 <zubr139@ukr.net>\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"
@@ -87,7 +87,7 @@ msgstr ""
 msgid "Invalid directory."
 msgstr "Невірний каталог."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Файли"
 
@@ -118,7 +118,7 @@ msgstr "URL не може бути пустим."
 
 #: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
-msgstr ""
+msgstr "Неправильне ім'я теки. Використання 'Shared' зарезервовано ownCloud"
 
 #: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
@@ -167,9 +167,9 @@ msgstr "відмінити"
 #: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "%n тека"
+msgstr[1] "%n тека"
+msgstr[2] "%n теки"
 
 #: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
@@ -290,7 +290,7 @@ msgstr "Текстовий файл"
 
 #: templates/index.php:11
 msgid "Folder"
-msgstr "Папка"
+msgstr "Тека"
 
 #: templates/index.php:13
 msgid "From link"
diff --git a/l10n/uk/files_encryption.po b/l10n/uk/files_encryption.po
index 46c45f13fe..6957679f93 100644
--- a/l10n/uk/files_encryption.po
+++ b/l10n/uk/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-18 11:46-0400\n"
-"PO-Revision-Date: 2013-09-17 13:05+0000\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"PO-Revision-Date: 2013-09-27 19:12+0000\n"
 "Last-Translator: zubr139 <zubr139@ukr.net>\n"
 "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
 "MIME-Version: 1.0\n"
@@ -93,7 +93,7 @@ msgstr ""
 
 #: templates/invalid_private_key.php:7
 msgid "personal settings"
-msgstr ""
+msgstr "особисті налаштування"
 
 #: templates/settings-admin.php:5 templates/settings-personal.php:4
 msgid "Encryption"
diff --git a/l10n/uk/settings.po b/l10n/uk/settings.po
index a96bef5878..912467cac9 100644
--- a/l10n/uk/settings.po
+++ b/l10n/uk/settings.po
@@ -3,13 +3,14 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# zubr139 <zubr139@ukr.net>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:45-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"PO-Revision-Date: 2013-09-27 19:43+0000\n"
+"Last-Translator: zubr139 <zubr139@ukr.net>\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"
@@ -32,7 +33,7 @@ msgstr ""
 
 #: ajax/changedisplayname.php:34
 msgid "Unable to change display name"
-msgstr "Не вдалося змінити зображене ім'я"
+msgstr "Не вдалося змінити ім'я"
 
 #: ajax/creategroup.php:10
 msgid "Group already exists"
@@ -117,11 +118,11 @@ msgstr ""
 msgid "Update to {appversion}"
 msgstr "Оновити до {appversion}"
 
-#: js/apps.js:49 js/apps.js:82 js/apps.js:108
+#: js/apps.js:49 js/apps.js:82 js/apps.js:110
 msgid "Disable"
 msgstr "Вимкнути"
 
-#: js/apps.js:49 js/apps.js:89 js/apps.js:102 js/apps.js:117
+#: js/apps.js:49 js/apps.js:90 js/apps.js:103 js/apps.js:119
 msgid "Enable"
 msgstr "Включити"
 
@@ -129,43 +130,43 @@ msgstr "Включити"
 msgid "Please wait...."
 msgstr "Зачекайте, будь ласка..."
 
-#: js/apps.js:79 js/apps.js:80 js/apps.js:100
+#: js/apps.js:79 js/apps.js:80 js/apps.js:101
 msgid "Error while disabling app"
 msgstr ""
 
-#: js/apps.js:99 js/apps.js:112 js/apps.js:113
+#: js/apps.js:100 js/apps.js:114 js/apps.js:115
 msgid "Error while enabling app"
 msgstr ""
 
-#: js/apps.js:123
+#: js/apps.js:125
 msgid "Updating...."
 msgstr "Оновлюється..."
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error while updating app"
 msgstr "Помилка при оновленні програми"
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error"
 msgstr "Помилка"
 
-#: js/apps.js:127 templates/apps.php:43
+#: js/apps.js:129 templates/apps.php:43
 msgid "Update"
 msgstr "Оновити"
 
-#: js/apps.js:130
+#: js/apps.js:132
 msgid "Updated"
 msgstr "Оновлено"
 
-#: js/personal.js:220
+#: js/personal.js:221
 msgid "Select a profile picture"
 msgstr ""
 
-#: js/personal.js:265
+#: js/personal.js:266
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr ""
 
-#: js/personal.js:287
+#: js/personal.js:288
 msgid "Saving..."
 msgstr "Зберігаю..."
 
@@ -590,7 +591,7 @@ msgstr "Сховище"
 
 #: templates/users.php:108
 msgid "change display name"
-msgstr "змінити зображене ім'я"
+msgstr "змінити ім'я"
 
 #: templates/users.php:112
 msgid "set new password"
diff --git a/settings/l10n/sv.php b/settings/l10n/sv.php
index 5f6313f182..4f8ad376db 100644
--- a/settings/l10n/sv.php
+++ b/settings/l10n/sv.php
@@ -16,6 +16,12 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Kan inte lägga till användare i gruppen %s",
 "Unable to remove user from group %s" => "Kan inte radera användare från gruppen %s",
 "Couldn't update app." => "Kunde inte uppdatera appen.",
+"Wrong password" => "Fel lösenord",
+"No user supplied" => "Ingen användare angiven",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Ange ett återställningslösenord för administratören. Annars kommer all användardata förloras",
+"Wrong admin recovery password. Please check the password and try again." => "Felaktigt återställningslösenord för administratör. Kolla lösenordet och prova igen.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Gränssnittet stödjer inte byte av lösenord, men användarnas krypteringsnyckel blev uppdaterad.",
+"Unable to change password" => "Kunde inte ändra lösenord",
 "Update to {appversion}" => "Uppdatera till {appversion}",
 "Disable" => "Deaktivera",
 "Enable" => "Aktivera",
@@ -27,6 +33,7 @@ $TRANSLATIONS = array(
 "Error" => "Fel",
 "Update" => "Uppdatera",
 "Updated" => "Uppdaterad",
+"Select a profile picture" => "Välj en profilbild",
 "Decrypting files... Please wait, this can take some time." => "Dekrypterar filer... Vänligen vänta, detta kan ta en stund.",
 "Saving..." => "Sparar...",
 "deleted" => "raderad",
@@ -101,6 +108,12 @@ $TRANSLATIONS = array(
 "Your email address" => "Din e-postadress",
 "Fill in an email address to enable password recovery" => "Fyll i en e-postadress för att aktivera återställning av lösenord",
 "Profile picture" => "Profilbild",
+"Upload new" => "Ladda upp ny",
+"Select new from Files" => "Välj ny från filer",
+"Remove image" => "Radera bild",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Antingen png eller jpg. Helst fyrkantig, men du kommer att kunna beskära den.",
+"Abort" => "Avbryt",
+"Choose as profile image" => "Välj som profilbild",
 "Language" => "Språk",
 "Help translate" => "Hjälp att översätta",
 "WebDAV" => "WebDAV",
diff --git a/settings/l10n/uk.php b/settings/l10n/uk.php
index 314b7de657..adb46e3ee8 100644
--- a/settings/l10n/uk.php
+++ b/settings/l10n/uk.php
@@ -2,7 +2,7 @@
 $TRANSLATIONS = array(
 "Unable to load list from App Store" => "Не вдалося завантажити список з App Store",
 "Authentication error" => "Помилка автентифікації",
-"Unable to change display name" => "Не вдалося змінити зображене ім'я",
+"Unable to change display name" => "Не вдалося змінити ім'я",
 "Group already exists" => "Група вже існує",
 "Unable to add group" => "Не вдалося додати групу",
 "Email saved" => "Адресу збережено",
@@ -97,7 +97,7 @@ $TRANSLATIONS = array(
 "Other" => "Інше",
 "Username" => "Ім'я користувача",
 "Storage" => "Сховище",
-"change display name" => "змінити зображене ім'я",
+"change display name" => "змінити ім'я",
 "set new password" => "встановити новий пароль",
 "Default" => "За замовчуванням"
 );
-- 
GitLab


From 710d3f139f45f7e82991364f561b31e71e4d787f Mon Sep 17 00:00:00 2001
From: Alessandro Cosentino <cosenal@gmail.com>
Date: Sun, 29 Sep 2013 01:46:23 -0400
Subject: [PATCH 237/248] followup of #4032 - makes the settings-button bigger
 and adds again padding at bottom of app-navigation

---
 core/css/apps.css | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/core/css/apps.css b/core/css/apps.css
index de63495e50..f6c20e6cc6 100644
--- a/core/css/apps.css
+++ b/core/css/apps.css
@@ -16,6 +16,7 @@
 	-moz-box-sizing: border-box; box-sizing: border-box;
 	background-color: #f8f8f8;
 	border-right: 1px solid #ccc;
+	padding-bottom: 44px;
 }
 #app-navigation > ul {
 	height: 100%;
@@ -192,7 +193,7 @@
 
 .settings-button {
 	display: block;
-	height: 32px;
+	height: 44px;
 	width: 100%;
 	padding: 0;
 	margin: 0;
-- 
GitLab


From b6fc143074ae55bc6f9732d825571681f88f46ed Mon Sep 17 00:00:00 2001
From: Evgeni Golov <evgeni@golov.de>
Date: Fri, 31 May 2013 18:21:31 +0200
Subject: [PATCH 238/248] cURL does not honour default_socket_timeout

SabreDAV uses cURL for the requests and as this does not honour
default_socket_timeout, setting it is useless and confusing as
people will expect the request to timeout faster than it actually
will do.

One has to use
 curl_setopt($curl, CURLOPT_TIMEOUT, x)
or
 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, x)
but there is currently no way to make SabreDAV pass this to cURL.
---
 lib/util.php | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/lib/util.php b/lib/util.php
index 41f5f1d16b..d4f4eed1ca 100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -730,12 +730,6 @@ class OC_Util {
 			'baseUri' => OC_Helper::linkToRemote('webdav'),
 		);
 
-		// save the old timeout so that we can restore it later
-		$oldTimeout = ini_get("default_socket_timeout");
-
-		// use a 5 sec timeout for the check. Should be enough for local requests.
-		ini_set("default_socket_timeout", 5);
-
 		$client = new \Sabre_DAV_Client($settings);
 
 		// for this self test we don't care if the ssl certificate is self signed and the peer cannot be verified.
@@ -752,9 +746,6 @@ class OC_Util {
 			$return = false;
 		}
 
-		// restore the original timeout
-		ini_set("default_socket_timeout", $oldTimeout);
-
 		return $return;
 	}
 
-- 
GitLab


From aaba0d83b5e9f8b67a739e74172da9464fa562b0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Mon, 30 Sep 2013 10:03:07 +0200
Subject: [PATCH 239/248] fixing PHPDoc & typo

---
 lib/connector/sabre/aborteduploaddetectionplugin.php | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/lib/connector/sabre/aborteduploaddetectionplugin.php b/lib/connector/sabre/aborteduploaddetectionplugin.php
index 74c26f41b6..15dca3a680 100644
--- a/lib/connector/sabre/aborteduploaddetectionplugin.php
+++ b/lib/connector/sabre/aborteduploaddetectionplugin.php
@@ -37,7 +37,6 @@ class OC_Connector_Sabre_AbortedUploadDetectionPlugin extends Sabre_DAV_ServerPl
 	 * This method should set up the requires event subscriptions.
 	 *
 	 * @param Sabre_DAV_Server $server
-	 * @return void
 	 */
 	public function initialize(Sabre_DAV_Server $server) {
 
@@ -54,7 +53,7 @@ class OC_Connector_Sabre_AbortedUploadDetectionPlugin extends Sabre_DAV_ServerPl
 	 */
 	public function verifyContentLength($filePath, Sabre_DAV_INode $node = null) {
 
-		// ownCloud chunked upload will be handled in it's own plugin
+		// ownCloud chunked upload will be handled in its own plugin
 		$chunkHeader = $this->server->httpRequest->getHeader('OC-Chunked');
 		if ($chunkHeader) {
 			return;
-- 
GitLab


From a711399e62d5a9f14d4b748efe4354ee37e61f13 Mon Sep 17 00:00:00 2001
From: Jenkins for ownCloud <thomas.mueller@tmit.eu>
Date: Mon, 30 Sep 2013 10:19:22 -0400
Subject: [PATCH 240/248] [tx-robot] updated from transifex

---
 apps/files/l10n/cs_CZ.php           |  1 +
 apps/files/l10n/it.php              |  6 +--
 apps/files/l10n/ja_JP.php           |  5 +++
 apps/files/l10n/ko.php              | 17 ++++++--
 apps/files/l10n/lt_LT.php           |  5 +++
 apps/files/l10n/pl.php              |  5 +++
 apps/files_sharing/l10n/ko.php      |  7 +++
 apps/files_trashbin/l10n/ko.php     | 14 ++++--
 apps/files_versions/l10n/ko.php     |  3 ++
 apps/user_ldap/l10n/hu_HU.php       |  1 +
 apps/user_webdavauth/l10n/hu_HU.php |  4 +-
 core/l10n/cs_CZ.php                 |  2 +
 core/l10n/hu_HU.php                 | 21 +++++++++
 core/l10n/ja_JP.php                 | 10 ++++-
 core/l10n/lt_LT.php                 |  9 +++-
 core/l10n/pl.php                    |  8 +++-
 l10n/cs_CZ/core.po                  | 11 ++---
 l10n/cs_CZ/files.po                 | 11 ++---
 l10n/hu_HU/core.po                  | 62 +++++++++++++-------------
 l10n/hu_HU/lib.po                   | 52 +++++++++++-----------
 l10n/hu_HU/settings.po              | 68 ++++++++++++++---------------
 l10n/hu_HU/user_ldap.po             |  8 ++--
 l10n/hu_HU/user_webdavauth.po       | 10 ++---
 l10n/it/files.po                    | 12 ++---
 l10n/it/settings.po                 | 30 ++++++-------
 l10n/ja_JP/core.po                  | 38 ++++++++--------
 l10n/ja_JP/files.po                 | 18 ++++----
 l10n/ja_JP/settings.po              | 48 ++++++++++----------
 l10n/ko/files.po                    | 37 ++++++++--------
 l10n/ko/files_sharing.po            | 21 ++++-----
 l10n/ko/files_trashbin.po           | 49 +++++++++++----------
 l10n/ko/files_versions.po           | 15 ++++---
 l10n/ko/lib.po                      | 46 +++++++++----------
 l10n/lt_LT/core.po                  | 40 ++++++++---------
 l10n/lt_LT/files.po                 | 18 ++++----
 l10n/lt_LT/settings.po              | 42 +++++++++---------
 l10n/pl/core.po                     | 38 ++++++++--------
 l10n/pl/files.po                    | 18 ++++----
 l10n/pl/lib.po                      | 44 +++++++++----------
 l10n/pl/settings.po                 | 44 +++++++++----------
 l10n/templates/core.pot             |  2 +-
 l10n/templates/files.pot            |  2 +-
 l10n/templates/files_encryption.pot |  2 +-
 l10n/templates/files_external.pot   |  2 +-
 l10n/templates/files_sharing.pot    |  2 +-
 l10n/templates/files_trashbin.pot   |  2 +-
 l10n/templates/files_versions.pot   |  2 +-
 l10n/templates/lib.pot              | 28 ++++++------
 l10n/templates/settings.pot         |  2 +-
 l10n/templates/user_ldap.pot        |  2 +-
 l10n/templates/user_webdavauth.pot  |  2 +-
 lib/l10n/hu_HU.php                  | 11 ++++-
 lib/l10n/ko.php                     |  8 +++-
 lib/l10n/pl.php                     |  7 ++-
 settings/l10n/hu_HU.php             | 19 ++++++++
 settings/l10n/ja_JP.php             |  9 ++++
 settings/l10n/lt_LT.php             |  6 +++
 settings/l10n/pl.php                |  7 +++
 58 files changed, 583 insertions(+), 430 deletions(-)

diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php
index f67283ec6e..f1e54ee5fc 100644
--- a/apps/files/l10n/cs_CZ.php
+++ b/apps/files/l10n/cs_CZ.php
@@ -42,6 +42,7 @@ $TRANSLATIONS = array(
 "Your storage is almost full ({usedSpacePercent}%)" => "Vaše úložiště je téměř plné ({usedSpacePercent}%)",
 "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifrování bylo vypnuto, vaše soubory jsou však stále zašifrované. Běžte prosím do osobního nastavení, kde soubory odšifrujete.",
 "Your download is being prepared. This might take some time if the files are big." => "Vaše soubory ke stažení se připravují. Pokud jsou velké, může to chvíli trvat.",
+"Error moving file" => "Chyba při přesunu souboru",
 "Name" => "Název",
 "Size" => "Velikost",
 "Modified" => "Upraveno",
diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php
index c24d30ae36..44b4e34195 100644
--- a/apps/files/l10n/it.php
+++ b/apps/files/l10n/it.php
@@ -13,11 +13,11 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Manca una cartella temporanea",
 "Failed to write to disk" => "Scrittura su disco non riuscita",
 "Not enough storage available" => "Spazio di archiviazione insufficiente",
-"Upload failed. Could not get file info." => "Upload fallito. Impossibile ottenere informazioni sul file",
-"Upload failed. Could not find uploaded file" => "Upload fallit. Impossibile trovare file caricato",
+"Upload failed. Could not get file info." => "Caricamento non riuscito. Impossibile ottenere informazioni sul file.",
+"Upload failed. Could not find uploaded file" => "Caricamento non riuscito. Impossibile trovare il file caricato.",
 "Invalid directory." => "Cartella non valida.",
 "Files" => "File",
-"Unable to upload {filename} as it is a directory or has 0 bytes" => "Impossibile caricare {filename} poiché è una cartella oppure è di 0 byte",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "Impossibile caricare {filename} poiché è una cartella oppure ha una dimensione di 0 byte.",
 "Not enough space available" => "Spazio disponibile insufficiente",
 "Upload cancelled." => "Invio annullato",
 "Could not get result from server." => "Impossibile ottenere il risultato dal server.",
diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php
index 5944b47434..07ee96f1eb 100644
--- a/apps/files/l10n/ja_JP.php
+++ b/apps/files/l10n/ja_JP.php
@@ -13,10 +13,14 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "一時保存フォルダが見つかりません",
 "Failed to write to disk" => "ディスクへの書き込みに失敗しました",
 "Not enough storage available" => "ストレージに十分な空き容量がありません",
+"Upload failed. Could not get file info." => "アップロードに失敗。ファイル情報を取得できませんでした。",
+"Upload failed. Could not find uploaded file" => "アップロードに失敗。アップロード済みのファイルを見つけることができませんでした。",
 "Invalid directory." => "無効なディレクトリです。",
 "Files" => "ファイル",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "ディレクトリもしくは0バイトのため {filename} をアップロードできません",
 "Not enough space available" => "利用可能なスペースが十分にありません",
 "Upload cancelled." => "アップロードはキャンセルされました。",
+"Could not get result from server." => "サーバから結果を取得できませんでした。",
 "File upload is in progress. Leaving the page now will cancel the upload." => "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。",
 "URL cannot be empty." => "URLは空にできません。",
 "Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "無効なフォルダ名です。'Shared' の利用はownCloudで予約済みです",
@@ -42,6 +46,7 @@ $TRANSLATIONS = array(
 "Your storage is almost full ({usedSpacePercent}%)" => "あなたのストレージはほぼ一杯です({usedSpacePercent}%)",
 "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "暗号化の機能は無効化されましたが、ファイルはすでに暗号化されています。個人設定からファイルを複合を行ってください。",
 "Your download is being prepared. This might take some time if the files are big." => "ダウンロードの準備中です。ファイルサイズが大きい場合は少し時間がかかるかもしれません。",
+"Error moving file" => "ファイルの移動エラー",
 "Name" => "名前",
 "Size" => "サイズ",
 "Modified" => "変更",
diff --git a/apps/files/l10n/ko.php b/apps/files/l10n/ko.php
index 502acefcf3..0174f8d0d2 100644
--- a/apps/files/l10n/ko.php
+++ b/apps/files/l10n/ko.php
@@ -2,6 +2,8 @@
 $TRANSLATIONS = array(
 "Could not move %s - File with this name already exists" => "%s 항목을 이동시키지 못하였음 - 파일 이름이 이미 존재함",
 "Could not move %s" => "%s 항목을 이딩시키지 못하였음",
+"Unable to set upload directory." => "업로드 디렉터리를 정할수 없습니다",
+"Invalid Token" => "잘못된 토큰",
 "No file was uploaded. Unknown error" => "파일이 업로드되지 않았습니다. 알 수 없는 오류입니다",
 "There is no error, the file uploaded with success" => "파일 업로드에 성공하였습니다.",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "업로드한 파일이 php.ini의 upload_max_filesize보다 큽니다:",
@@ -11,12 +13,17 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "임시 폴더가 없음",
 "Failed to write to disk" => "디스크에 쓰지 못했습니다",
 "Not enough storage available" => "저장소가 용량이 충분하지 않습니다.",
+"Upload failed. Could not get file info." => "업로드에 실패했습니다. 파일 정보를 가져올수 없습니다.",
+"Upload failed. Could not find uploaded file" => "업로드에 실패했습니다. 업로드할 파일을 찾을수 없습니다",
 "Invalid directory." => "올바르지 않은 디렉터리입니다.",
 "Files" => "파일",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "{filename}을 업로드 할수 없습니다. 폴더이거나 0 바이트 파일입니다.",
 "Not enough space available" => "여유 공간이 부족합니다",
 "Upload cancelled." => "업로드가 취소되었습니다.",
+"Could not get result from server." => "서버에서 결과를 가져올수 없습니다.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다.",
 "URL cannot be empty." => "URL을 입력해야 합니다.",
+"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "유효하지 않은 폴더명입니다. \"Shared\" 이름의 사용은 OwnCloud 가 이미 예약하고 있습니다.",
 "Error" => "오류",
 "Share" => "공유",
 "Delete permanently" => "영원히 삭제",
@@ -28,18 +35,22 @@ $TRANSLATIONS = array(
 "cancel" => "취소",
 "replaced {new_name} with {old_name}" => "{old_name}이(가) {new_name}(으)로 대체됨",
 "undo" => "되돌리기",
-"_%n folder_::_%n folders_" => array(""),
-"_%n file_::_%n files_" => array(""),
-"_Uploading %n file_::_Uploading %n files_" => array(""),
+"_%n folder_::_%n folders_" => array("폴더 %n"),
+"_%n file_::_%n files_" => array("파일 %n 개"),
+"{dirs} and {files}" => "{dirs} 그리고 {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("%n 개의 파일을 업로드중"),
 "'.' is an invalid file name." => "'.' 는 올바르지 않은 파일 이름 입니다.",
 "File name cannot be empty." => "파일 이름이 비어 있을 수 없습니다.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "폴더 이름이 올바르지 않습니다. 이름에 문자 '\\', '/', '<', '>', ':', '\"', '|', '? ', '*'는 사용할 수 없습니다.",
 "Your storage is full, files can not be updated or synced anymore!" => "저장 공간이 가득 찼습니다. 파일을 업데이트하거나 동기화할 수 없습니다!",
 "Your storage is almost full ({usedSpacePercent}%)" => "저장 공간이 거의 가득 찼습니다 ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "암호화는 해제되어 있지만, 파일은 아직 암호화 되어 있습니다. 개인 설저에 가셔서 암호를 해제하십시오",
 "Your download is being prepared. This might take some time if the files are big." => "다운로드가 준비 중입니다. 파일 크기가 크다면 시간이 오래 걸릴 수도 있습니다.",
+"Error moving file" => "파일 이동 오류",
 "Name" => "이름",
 "Size" => "크기",
 "Modified" => "수정됨",
+"%s could not be renamed" => "%s 의 이름을 변경할수 없습니다",
 "Upload" => "업로드",
 "File handling" => "파일 처리",
 "Maximum upload size" => "최대 업로드 크기",
diff --git a/apps/files/l10n/lt_LT.php b/apps/files/l10n/lt_LT.php
index 2b32a129d5..d064b0c652 100644
--- a/apps/files/l10n/lt_LT.php
+++ b/apps/files/l10n/lt_LT.php
@@ -13,10 +13,14 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Nėra laikinojo katalogo",
 "Failed to write to disk" => "Nepavyko įrašyti į diską",
 "Not enough storage available" => "Nepakanka vietos serveryje",
+"Upload failed. Could not get file info." => "Įkėlimas nepavyko. Nepavyko gauti failo informacijos.",
+"Upload failed. Could not find uploaded file" => "Įkėlimas nepavyko. Nepavyko rasti įkelto failo",
 "Invalid directory." => "Neteisingas aplankas",
 "Files" => "Failai",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "Nepavyksta įkelti {filename}, nes tai katalogas arba yra 0 baitų dydžio",
 "Not enough space available" => "Nepakanka vietos",
 "Upload cancelled." => "Įkėlimas atšauktas.",
+"Could not get result from server." => "Nepavyko gauti rezultato iš serverio.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.",
 "URL cannot be empty." => "URL negali būti tuščias.",
 "Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Negalimas aplanko pavadinimas. 'Shared' pavadinimas yra rezervuotas ownCloud",
@@ -42,6 +46,7 @@ $TRANSLATIONS = array(
 "Your storage is almost full ({usedSpacePercent}%)" => "Jūsų vieta serveryje beveik visa užimta ({usedSpacePercent}%)",
 "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifravimas buvo išjungtas, bet Jūsų failai vis dar užšifruoti. Prašome eiti į asmeninius nustatymus ir iššifruoti savo failus.",
 "Your download is being prepared. This might take some time if the files are big." => "Jūsų atsisiuntimas yra paruošiamas. tai gali užtrukti jei atsisiunčiamas didelis failas.",
+"Error moving file" => "Klaida perkeliant failą",
 "Name" => "Pavadinimas",
 "Size" => "Dydis",
 "Modified" => "Pakeista",
diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php
index 3ad8097581..50a247d2e0 100644
--- a/apps/files/l10n/pl.php
+++ b/apps/files/l10n/pl.php
@@ -13,10 +13,14 @@ $TRANSLATIONS = array(
 "Missing a temporary folder" => "Brak folderu tymczasowego",
 "Failed to write to disk" => "Błąd zapisu na dysk",
 "Not enough storage available" => "Za mało dostępnego miejsca",
+"Upload failed. Could not get file info." => "Nieudane przesłanie. Nie można pobrać informacji o pliku.",
+"Upload failed. Could not find uploaded file" => "Nieudane przesłanie. Nie można znaleźć przesyłanego pliku",
 "Invalid directory." => "Zła ścieżka.",
 "Files" => "Pliki",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "Nie można przesłać {filename} być może jest katalogiem lub posiada 0 bajtów",
 "Not enough space available" => "Za mało miejsca",
 "Upload cancelled." => "Wczytywanie anulowane.",
+"Could not get result from server." => "Nie można uzyskać wyniku z serwera.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Wysyłanie pliku jest w toku. Jeśli opuścisz tę stronę, wysyłanie zostanie przerwane.",
 "URL cannot be empty." => "URL nie może być pusty.",
 "Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Nieprawidłowa nazwa folderu. Wykorzystanie 'Shared' jest zarezerwowane przez ownCloud",
@@ -42,6 +46,7 @@ $TRANSLATIONS = array(
 "Your storage is almost full ({usedSpacePercent}%)" => "Twój magazyn jest prawie pełny ({usedSpacePercent}%)",
 "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Szyfrowanie zostało wyłączone, ale nadal pliki są zaszyfrowane. Przejdź do ustawień osobistych i tam odszyfruj pliki.",
 "Your download is being prepared. This might take some time if the files are big." => "Pobieranie jest przygotowywane. Może to zająć trochę czasu jeśli pliki są duże.",
+"Error moving file" => "Błąd prz przenoszeniu pliku",
 "Name" => "Nazwa",
 "Size" => "Rozmiar",
 "Modified" => "Modyfikacja",
diff --git a/apps/files_sharing/l10n/ko.php b/apps/files_sharing/l10n/ko.php
index f3a94a7097..f7eab1ac55 100644
--- a/apps/files_sharing/l10n/ko.php
+++ b/apps/files_sharing/l10n/ko.php
@@ -1,7 +1,14 @@
 <?php
 $TRANSLATIONS = array(
+"The password is wrong. Try again." => "비밀번호가 틀립니다. 다시 입력해주세요.",
 "Password" => "암호",
 "Submit" => "제출",
+"Sorry, this link doesn’t seem to work anymore." => "죄송합니다만 이 링크는 더이상 작동되지 않습니다.",
+"Reasons might be:" => "이유는 다음과 같을 수 있습니다:",
+"the item was removed" => "이 항목은 삭제되었습니다",
+"the link expired" => "링크가 만료되었습니다",
+"sharing is disabled" => "공유가 비활성되었습니다",
+"For more info, please ask the person who sent this link." => "더 자세한 설명은 링크를 보내신 분에게 여쭤보십시오",
 "%s shared the folder %s with you" => "%s 님이 폴더 %s을(를) 공유하였습니다",
 "%s shared the file %s with you" => "%s 님이 파일 %s을(를) 공유하였습니다",
 "Download" => "다운로드",
diff --git a/apps/files_trashbin/l10n/ko.php b/apps/files_trashbin/l10n/ko.php
index f2e604d759..9ac5f9802c 100644
--- a/apps/files_trashbin/l10n/ko.php
+++ b/apps/files_trashbin/l10n/ko.php
@@ -1,11 +1,19 @@
 <?php
 $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "%s를 영구적으로 삭제할수 없습니다",
+"Couldn't restore %s" => "%s를 복원할수 없습니다",
+"perform restore operation" => "복원 작업중",
 "Error" => "오류",
+"delete file permanently" => "영구적으로 파일 삭제하기",
 "Delete permanently" => "영원히 삭제",
 "Name" => "이름",
-"_%n folder_::_%n folders_" => array(""),
-"_%n file_::_%n files_" => array(""),
+"Deleted" => "삭제됨",
+"_%n folder_::_%n folders_" => array("폴더 %n개"),
+"_%n file_::_%n files_" => array("파일 %n개 "),
+"restored" => "복원됨",
+"Nothing in here. Your trash bin is empty!" => "현재 휴지통은 비어있습니다!",
 "Restore" => "복원",
-"Delete" => "삭제"
+"Delete" => "삭제",
+"Deleted Files" => "삭제된 파일들"
 );
 $PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_versions/l10n/ko.php b/apps/files_versions/l10n/ko.php
index 365adc2511..ba951c4107 100644
--- a/apps/files_versions/l10n/ko.php
+++ b/apps/files_versions/l10n/ko.php
@@ -2,6 +2,9 @@
 $TRANSLATIONS = array(
 "Could not revert: %s" => "되돌릴 수 없습니다: %s",
 "Versions" => "버전",
+"Failed to revert {file} to revision {timestamp}." => "{timestamp} 판의 {file}로 돌리는데 실패했습니다.",
+"More versions..." => "더 많은 버전들...",
+"No other versions available" => "다른 버전을 사용할수 없습니다",
 "Restore" => "복원"
 );
 $PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/user_ldap/l10n/hu_HU.php b/apps/user_ldap/l10n/hu_HU.php
index b41cf98e2b..b43dcbc2c8 100644
--- a/apps/user_ldap/l10n/hu_HU.php
+++ b/apps/user_ldap/l10n/hu_HU.php
@@ -72,6 +72,7 @@ $TRANSLATIONS = array(
 "User Home Folder Naming Rule" => "A home könyvtár elérési útvonala",
 "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Hagyja üresen, ha a felhasználónevet kívánja használni. Ellenkező esetben adjon meg egy LDAP/AD attribútumot!",
 "Internal Username" => "Belső felhasználónév",
+"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ].  Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." => "Alapértelmezetten a belső felhasználónév az UUID tulajdonságból jön létre. Ez biztosítja a felhasználónév egyediségét és hogy a nem kell konvertálni a karaktereket benne. A belső felhasználónévnél a megkötés az, hogy csak a következő karakterek engdélyezettek benne: [ a-zA-Z0-9_.@- ]. Ezeken a karaktereken kivül minden karakter le lesz cserélve az adott karakter ASCII kódtáblában használható párjára vagy ha ilyen nincs akkor egyszerűen ki lesz hagyva. Ha így mégis ütköznének a nevek akkor hozzá lesz füzve egy folyamatosan növekvő számláló rész. A  belső felhasználónevet lehet használni a felhasználó azonosítására a programon belül. Illetve ez lesz az alapáértelmezett neve a felhasználó kezdő könyvtárának az ownCloud-ban. Illetve...............................",
 "Internal Username Attribute:" => "A belső felhasználónév attribútuma:",
 "Override UUID detection" => "Az UUID-felismerés felülbírálása",
 "UUID Attribute:" => "UUID attribútum:",
diff --git a/apps/user_webdavauth/l10n/hu_HU.php b/apps/user_webdavauth/l10n/hu_HU.php
index 63fc084ff4..0b946e25e7 100644
--- a/apps/user_webdavauth/l10n/hu_HU.php
+++ b/apps/user_webdavauth/l10n/hu_HU.php
@@ -1,5 +1,7 @@
 <?php
 $TRANSLATIONS = array(
-"WebDAV Authentication" => "WebDAV hitelesítés"
+"WebDAV Authentication" => "WebDAV hitelesítés",
+"Address: " => "Címek:",
+"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "A felhasználói hitelesítő adatai el lesznek küldve erre a címre. Ez a bővítőmodul leellenőrzi a választ és ha a HTTP hibakód nem 401 vagy 403 azaz érvénytelen a hitelesítő adat, akkor minden más válasz érvényes lesz."
 );
 $PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php
index abed4a0fda..8b63079c87 100644
--- a/core/l10n/cs_CZ.php
+++ b/core/l10n/cs_CZ.php
@@ -60,7 +60,9 @@ $TRANSLATIONS = array(
 "Error loading message template: {error}" => "Chyba při nahrávání šablony zprávy: {error}",
 "_{count} file conflict_::_{count} file conflicts_" => array("","",""),
 "One file conflict" => "Jeden konflikt souboru",
+"Which files do you want to keep?" => "Které soubory chcete ponechat?",
 "Cancel" => "Zrušit",
+"Continue" => "Pokračovat",
 "The object type is not specified." => "Není určen typ objektu.",
 "Error" => "Chyba",
 "The app name is not specified." => "Není určen název aplikace.",
diff --git a/core/l10n/hu_HU.php b/core/l10n/hu_HU.php
index d893269ee8..107a5f04c0 100644
--- a/core/l10n/hu_HU.php
+++ b/core/l10n/hu_HU.php
@@ -2,6 +2,12 @@
 $TRANSLATIONS = array(
 "%s shared »%s« with you" => "%s megosztotta Önnel ezt:  »%s«",
 "group" => "csoport",
+"Turned on maintenance mode" => "A karbantartási mód bekapcsolva",
+"Turned off maintenance mode" => "A karbantartási mód kikapcsolva",
+"Updated database" => "Frissítet adatbázis",
+"Updating filecache, this may take really long..." => "A filecache frissítése folyamatban, ez a folyamat hosszabb ideig is eltarthat...",
+"Updated filecache" => "Filecache frissítve",
+"... %d%% done ..." => "... %d%% kész ...",
 "Category type not provided." => "Nincs megadva a kategória típusa.",
 "No category to add?" => "Nincs hozzáadandó kategória?",
 "This category already exists: %s" => "Ez a kategória már létezik: %s",
@@ -10,6 +16,11 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Nem sikerült a kedvencekhez adni ezt: %s",
 "No categories selected for deletion." => "Nincs törlésre jelölt kategória",
 "Error removing %s from favorites." => "Nem sikerült a kedvencekből törölni ezt: %s",
+"No image or file provided" => "Nincs kép vagy file megadva",
+"Unknown filetype" => "Ismeretlen file tipús",
+"Invalid image" => "Hibás kép",
+"No temporary profile picture available, try again" => "Az átmeneti profil kép nem elérhető, próbáld újra",
+"No crop data provided" => "Vágáshoz nincs adat megadva",
 "Sunday" => "vasárnap",
 "Monday" => "hétfő",
 "Tuesday" => "kedd",
@@ -42,11 +53,20 @@ $TRANSLATIONS = array(
 "last year" => "tavaly",
 "years ago" => "több éve",
 "Choose" => "Válasszon",
+"Error loading file picker template: {error}" => "Nem sikerült betölteni a fájlkiválasztó sablont: {error}",
 "Yes" => "Igen",
 "No" => "Nem",
 "Ok" => "Ok",
+"Error loading message template: {error}" => "Nem sikerült betölteni az üzenet sablont: {error}",
 "_{count} file conflict_::_{count} file conflicts_" => array("",""),
+"One file conflict" => "Egy file ütközik",
+"Which files do you want to keep?" => "Melyik file-okat akarod megtartani?",
+"If you select both versions, the copied file will have a number added to its name." => "Ha kiválasztod mindazokaz a verziókat, a másolt fileok neve sorszámozva lesz.",
 "Cancel" => "Mégsem",
+"Continue" => "Folytatás",
+"(all selected)" => "(all selected)",
+"({count} selected)" => "({count} kiválasztva)",
+"Error loading file exists template" => "Hiba a létező sablon betöltésekor",
 "The object type is not specified." => "Az objektum típusa nincs megadva.",
 "Error" => "Hiba",
 "The app name is not specified." => "Az alkalmazás neve nincs megadva.",
@@ -85,6 +105,7 @@ $TRANSLATIONS = array(
 "Email sent" => "Az emailt elküldtük",
 "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "A frissítés nem sikerült. Kérem értesítse erről a problémáról az <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud közösséget</a>.",
 "The update was successful. Redirecting you to ownCloud now." => "A frissítés sikeres volt. Visszairányítjuk az ownCloud szolgáltatáshoz.",
+"%s password reset" => "%s jelszó visszaállítás",
 "Use the following link to reset your password: {link}" => "Használja ezt a linket a jelszó ismételt beállításához: {link}",
 "The link to reset your password has been sent to your email.<br>If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator ." => "Emailben fog kapni egy linket, amivel új jelszót tud majd beállítani magának. <br>Ha a levél nem jött meg, holott úgy érzi, hogy már meg kellett volna érkeznie, akkor ellenőrizze a spam/levélszemét mappáját. <br>Ha ott sincsen, akkor érdeklődjön a rendszergazdánál.",
 "Request failed!<br>Did you make sure your email/username was right?" => "A kérést nem sikerült teljesíteni! <br>Biztos, hogy jó emailcímet/felhasználónevet adott meg?",
diff --git a/core/l10n/ja_JP.php b/core/l10n/ja_JP.php
index 0baab441f9..110e5b2120 100644
--- a/core/l10n/ja_JP.php
+++ b/core/l10n/ja_JP.php
@@ -20,6 +20,7 @@ $TRANSLATIONS = array(
 "Unknown filetype" => "不明なファイルタイプ",
 "Invalid image" => "無効な画像",
 "No temporary profile picture available, try again" => "一時的なプロファイル用画像が利用できません。もう一度試して下さい",
+"No crop data provided" => "クロップデータは提供されません",
 "Sunday" => "日",
 "Monday" => "月",
 "Tuesday" => "火",
@@ -57,8 +58,15 @@ $TRANSLATIONS = array(
 "No" => "いいえ",
 "Ok" => "OK",
 "Error loading message template: {error}" => "メッセージテンプレートの読み込みエラー: {error}",
-"_{count} file conflict_::_{count} file conflicts_" => array(""),
+"_{count} file conflict_::_{count} file conflicts_" => array("{count} ファイルが競合"),
+"One file conflict" => "1ファイルが競合",
+"Which files do you want to keep?" => "どちらのファイルを保持したいですか?",
+"If you select both versions, the copied file will have a number added to its name." => "両方のバージョンを選択した場合は、ファイル名の後ろに数字を追加したファイルのコピーを作成します。",
 "Cancel" => "キャンセル",
+"Continue" => "続ける",
+"(all selected)" => "(全て選択)",
+"({count} selected)" => "({count} 選択)",
+"Error loading file exists template" => "既存ファイルのテンプレートの読み込みエラー",
 "The object type is not specified." => "オブジェクタイプが指定されていません。",
 "Error" => "エラー",
 "The app name is not specified." => "アプリ名がしていされていません。",
diff --git a/core/l10n/lt_LT.php b/core/l10n/lt_LT.php
index 492aee12c1..610e7aeade 100644
--- a/core/l10n/lt_LT.php
+++ b/core/l10n/lt_LT.php
@@ -58,8 +58,15 @@ $TRANSLATIONS = array(
 "No" => "Ne",
 "Ok" => "Gerai",
 "Error loading message template: {error}" => "Klaida įkeliant žinutės ruošinį: {error}",
-"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("{count} failas konfliktuoja","{count} failai konfliktuoja","{count} failų konfliktų"),
+"One file conflict" => "Vienas failo konfliktas",
+"Which files do you want to keep?" => "Kuriuos failus norite laikyti?",
+"If you select both versions, the copied file will have a number added to its name." => "Jei pasirenkate abi versijas, nukopijuotas failas turės pridėtą numerį pavadinime.",
 "Cancel" => "Atšaukti",
+"Continue" => "Tęsti",
+"(all selected)" => "(visi pažymėti)",
+"({count} selected)" => "({count} pažymėtų)",
+"Error loading file exists template" => "Klaida įkeliant esančių failų ruošinį",
 "The object type is not specified." => "Objekto tipas nenurodytas.",
 "Error" => "Klaida",
 "The app name is not specified." => "Nenurodytas programos pavadinimas.",
diff --git a/core/l10n/pl.php b/core/l10n/pl.php
index 621038f79f..ad467fe100 100644
--- a/core/l10n/pl.php
+++ b/core/l10n/pl.php
@@ -16,6 +16,8 @@ $TRANSLATIONS = array(
 "Error adding %s to favorites." => "Błąd podczas dodawania %s do ulubionych.",
 "No categories selected for deletion." => "Nie zaznaczono kategorii do usunięcia.",
 "Error removing %s from favorites." => "Błąd podczas usuwania %s z ulubionych.",
+"Unknown filetype" => "Nieznany typ pliku",
+"Invalid image" => "Nieprawidłowe zdjęcie",
 "Sunday" => "Niedziela",
 "Monday" => "Poniedziałek",
 "Tuesday" => "Wtorek",
@@ -51,8 +53,12 @@ $TRANSLATIONS = array(
 "Yes" => "Tak",
 "No" => "Nie",
 "Ok" => "OK",
-"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
+"_{count} file conflict_::_{count} file conflicts_" => array("{count} konfliktów plików","{count} konfliktów plików","{count} konfliktów plików"),
+"One file conflict" => "Konflikt pliku",
 "Cancel" => "Anuluj",
+"Continue" => "Kontynuuj ",
+"(all selected)" => "(wszystkie zaznaczone)",
+"({count} selected)" => "({count} zaznaczonych)",
 "The object type is not specified." => "Nie określono typu obiektu.",
 "Error" => "Błąd",
 "The app name is not specified." => "Nie określono nazwy aplikacji.",
diff --git a/l10n/cs_CZ/core.po b/l10n/cs_CZ/core.po
index 40b693b988..914c6bcc20 100644
--- a/l10n/cs_CZ/core.po
+++ b/l10n/cs_CZ/core.po
@@ -4,6 +4,7 @@
 # 
 # Translators:
 # janinko <janinko.g@gmail.com>, 2013
+# dibalaj <dibalaj@dibalaj.cz>, 2013
 # Honza K. <honza889@gmail.com>, 2013
 # Martin <fireball@atlas.cz>, 2013
 # pstast <petr@stastny.eu>, 2013
@@ -12,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-27 00:01-0400\n"
-"PO-Revision-Date: 2013-09-25 10:50+0000\n"
-"Last-Translator: pstast <petr@stastny.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
+"PO-Revision-Date: 2013-09-29 16:57+0000\n"
+"Last-Translator: dibalaj <dibalaj@dibalaj.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"
@@ -288,7 +289,7 @@ msgstr "Jeden konflikt souboru"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
-msgstr ""
+msgstr "Které soubory chcete ponechat?"
 
 #: js/oc-dialogs.js:368
 msgid ""
@@ -302,7 +303,7 @@ msgstr "Zrušit"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Pokračovat"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
diff --git a/l10n/cs_CZ/files.po b/l10n/cs_CZ/files.po
index 7ce4b33052..5cff84e574 100644
--- a/l10n/cs_CZ/files.po
+++ b/l10n/cs_CZ/files.po
@@ -3,6 +3,7 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# dibalaj <dibalaj@dibalaj.cz>, 2013
 # Honza K. <honza889@gmail.com>, 2013
 # cvanca <mrs.jenkins.oh.yeah@gmail.com>, 2013
 # pstast <petr@stastny.eu>, 2013
@@ -11,9 +12,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:14-0400\n"
+"PO-Revision-Date: 2013-09-29 16:54+0000\n"
+"Last-Translator: dibalaj <dibalaj@dibalaj.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"
@@ -90,7 +91,7 @@ msgstr ""
 msgid "Invalid directory."
 msgstr "Neplatný adresář"
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Soubory"
 
@@ -228,7 +229,7 @@ msgstr "Vaše soubory ke stažení se připravují. Pokud jsou velké, může to
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Chyba při přesunu souboru"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/hu_HU/core.po b/l10n/hu_HU/core.po
index 7b484995d4..9a7a4428b5 100644
--- a/l10n/hu_HU/core.po
+++ b/l10n/hu_HU/core.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-22 12:55-0400\n"
-"PO-Revision-Date: 2013-09-20 15:01+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
+"PO-Revision-Date: 2013-09-30 00:42+0000\n"
+"Last-Translator: ebela <bela@dandre.hu>\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"
@@ -30,28 +30,28 @@ msgstr "csoport"
 
 #: ajax/update.php:11
 msgid "Turned on maintenance mode"
-msgstr ""
+msgstr "A karbantartási mód bekapcsolva"
 
 #: ajax/update.php:14
 msgid "Turned off maintenance mode"
-msgstr ""
+msgstr "A karbantartási mód kikapcsolva"
 
 #: ajax/update.php:17
 msgid "Updated database"
-msgstr ""
+msgstr "Frissítet adatbázis"
 
 #: ajax/update.php:20
 msgid "Updating filecache, this may take really long..."
-msgstr ""
+msgstr "A filecache frissítése folyamatban, ez a folyamat hosszabb ideig is eltarthat..."
 
 #: ajax/update.php:23
 msgid "Updated filecache"
-msgstr ""
+msgstr "Filecache frissítve"
 
 #: ajax/update.php:26
 #, php-format
 msgid "... %d%% done ..."
-msgstr ""
+msgstr "... %d%% kész ..."
 
 #: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
 msgid "Category type not provided."
@@ -94,23 +94,23 @@ msgstr "Nem sikerült a kedvencekből törölni ezt: %s"
 
 #: avatar/controller.php:62
 msgid "No image or file provided"
-msgstr ""
+msgstr "Nincs kép vagy file megadva"
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Ismeretlen file tipús"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Hibás kép"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
-msgstr ""
+msgstr "Az átmeneti profil kép nem elérhető, próbáld újra"
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "Vágáshoz nincs adat megadva"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -250,7 +250,7 @@ msgstr "Válasszon"
 
 #: js/oc-dialogs.js:146
 msgid "Error loading file picker template: {error}"
-msgstr ""
+msgstr "Nem sikerült betölteni a fájlkiválasztó sablont: {error}"
 
 #: js/oc-dialogs.js:172
 msgid "Yes"
@@ -266,7 +266,7 @@ msgstr "Ok"
 
 #: js/oc-dialogs.js:219
 msgid "Error loading message template: {error}"
-msgstr ""
+msgstr "Nem sikerült betölteni az üzenet sablont: {error}"
 
 #: js/oc-dialogs.js:347
 msgid "{count} file conflict"
@@ -276,17 +276,17 @@ msgstr[1] ""
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "Egy file ütközik"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
-msgstr ""
+msgstr "Melyik file-okat akarod megtartani?"
 
 #: js/oc-dialogs.js:368
 msgid ""
 "If you select both versions, the copied file will have a number added to its"
 " name."
-msgstr ""
+msgstr "Ha kiválasztod mindazokaz a verziókat, a másolt fileok neve sorszámozva lesz."
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
@@ -294,19 +294,19 @@ msgstr "Mégsem"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Folytatás"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr ""
+msgstr "(all selected)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
-msgstr ""
+msgstr "({count} kiválasztva)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
-msgstr ""
+msgstr "Hiba a létező sablon betöltésekor"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
@@ -317,7 +317,7 @@ msgstr "Az objektum típusa nincs megadva."
 #: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
 #: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
 #: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
-#: js/share.js:645 js/share.js:657
+#: js/share.js:656 js/share.js:668
 msgid "Error"
 msgstr "Hiba"
 
@@ -337,7 +337,7 @@ msgstr "Megosztott"
 msgid "Share"
 msgstr "Megosztás"
 
-#: js/share.js:131 js/share.js:685
+#: js/share.js:131 js/share.js:696
 msgid "Error while sharing"
 msgstr "Nem sikerült létrehozni a megosztást"
 
@@ -437,23 +437,23 @@ msgstr "töröl"
 msgid "share"
 msgstr "megoszt"
 
-#: js/share.js:400 js/share.js:632
+#: js/share.js:400 js/share.js:643
 msgid "Password protected"
 msgstr "Jelszóval van védve"
 
-#: js/share.js:645
+#: js/share.js:656
 msgid "Error unsetting expiration date"
 msgstr "Nem sikerült a lejárati időt törölni"
 
-#: js/share.js:657
+#: js/share.js:668
 msgid "Error setting expiration date"
 msgstr "Nem sikerült a lejárati időt beállítani"
 
-#: js/share.js:672
+#: js/share.js:683
 msgid "Sending ..."
 msgstr "Küldés ..."
 
-#: js/share.js:683
+#: js/share.js:694
 msgid "Email sent"
 msgstr "Az emailt elküldtük"
 
@@ -471,7 +471,7 @@ msgstr "A frissítés sikeres volt. Visszairányítjuk az ownCloud szolgáltatá
 #: lostpassword/controller.php:62
 #, php-format
 msgid "%s password reset"
-msgstr ""
+msgstr "%s jelszó visszaállítás"
 
 #: lostpassword/templates/email.php:2
 msgid "Use the following link to reset your password: {link}"
diff --git a/l10n/hu_HU/lib.po b/l10n/hu_HU/lib.po
index 6cd771a902..57212087ee 100644
--- a/l10n/hu_HU/lib.po
+++ b/l10n/hu_HU/lib.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
+"PO-Revision-Date: 2013-09-30 00:50+0000\n"
+"Last-Translator: ebela <bela@dandre.hu>\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"
@@ -19,38 +19,38 @@ msgstr ""
 "Language: hu_HU\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:239
+#: app.php:237
 #, php-format
 msgid ""
 "App \"%s\" can't be installed because it is not compatible with this version"
 " of ownCloud."
 msgstr ""
 
-#: app.php:250
+#: app.php:248
 msgid "No app name specified"
-msgstr ""
+msgstr "Nincs az alkalmazás név megadva."
 
-#: app.php:361
+#: app.php:352
 msgid "Help"
 msgstr "Súgó"
 
-#: app.php:374
+#: app.php:365
 msgid "Personal"
 msgstr "Személyes"
 
-#: app.php:385
+#: app.php:376
 msgid "Settings"
 msgstr "Beállítások"
 
-#: app.php:397
+#: app.php:388
 msgid "Users"
 msgstr "Felhasználók"
 
-#: app.php:410
+#: app.php:401
 msgid "Admin"
 msgstr "Adminsztráció"
 
-#: app.php:839
+#: app.php:832
 #, php-format
 msgid "Failed to upgrade \"%s\"."
 msgstr "Sikertelen Frissítés \"%s\"."
@@ -61,11 +61,11 @@ msgstr ""
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Ismeretlen file tipús"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Hibás kép"
 
 #: defaults.php:35
 msgid "web services under your control"
@@ -121,7 +121,7 @@ msgstr ""
 
 #: installer.php:125
 msgid "App does not provide an info.xml file"
-msgstr ""
+msgstr "Az alkalmazás nem szolgáltatott info.xml file-t"
 
 #: installer.php:131
 msgid "App can't be installed because of not allowed code in the App"
@@ -131,7 +131,7 @@ msgstr ""
 msgid ""
 "App can't be installed because it is not compatible with this version of "
 "ownCloud"
-msgstr ""
+msgstr "Az alalmazás nem telepíthető, mert nem kompatibilis az ownClod ezzel a verziójával."
 
 #: installer.php:146
 msgid ""
@@ -147,12 +147,12 @@ msgstr ""
 
 #: installer.php:162
 msgid "App directory already exists"
-msgstr ""
+msgstr "Az alkalmazás mappája már létezik"
 
 #: installer.php:175
 #, php-format
 msgid "Can't create app folder. Please fix permissions. %s"
-msgstr ""
+msgstr "Nem lehetett létrehozni az alkalmzás mappáját. Kérlek ellenőrizd a jogosultásgokat. %s"
 
 #: json.php:28
 msgid "Application is not enabled"
@@ -166,15 +166,15 @@ msgstr "Azonosítási hiba"
 msgid "Token expired. Please reload page."
 msgstr "A token lejárt. Frissítse az oldalt."
 
-#: search/provider/file.php:17 search/provider/file.php:35
+#: search/provider/file.php:18 search/provider/file.php:36
 msgid "Files"
 msgstr "Fájlok"
 
-#: search/provider/file.php:26 search/provider/file.php:33
+#: search/provider/file.php:27 search/provider/file.php:34
 msgid "Text"
 msgstr "Szöveg"
 
-#: search/provider/file.php:29
+#: search/provider/file.php:30
 msgid "Images"
 msgstr "Képek"
 
@@ -278,6 +278,11 @@ msgstr "Az Ön webkiszolgálója nincs megfelelően beállítva az állományok
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Kérjük tüzetesen tanulmányozza át a <a href='%s'>telepítési útmutatót</a>."
 
+#: tags.php:194
+#, php-format
+msgid "Could not find category \"%s\""
+msgstr "Ez a kategória nem található: \"%s\""
+
 #: template/functions.php:96
 msgid "seconds ago"
 msgstr "pár másodperce"
@@ -329,8 +334,3 @@ msgstr "több éve"
 #: template.php:297
 msgid "Caused by:"
 msgstr "Okozta:"
-
-#: vcategories.php:188 vcategories.php:249
-#, php-format
-msgid "Could not find category \"%s\""
-msgstr "Ez a kategória nem található: \"%s\""
diff --git a/l10n/hu_HU/settings.po b/l10n/hu_HU/settings.po
index 7ef4a07d1a..f1bb5c03cf 100644
--- a/l10n/hu_HU/settings.po
+++ b/l10n/hu_HU/settings.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:45-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:17-0400\n"
+"PO-Revision-Date: 2013-09-30 00:21+0000\n"
+"Last-Translator: ebela <bela@dandre.hu>\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"
@@ -89,42 +89,42 @@ msgstr "A program frissítése nem sikerült."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Hibás jelszó"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "Nincs felhasználó által mellékelve"
 
 #: changepassword/controller.php:74
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Add meg az admin helyreállító jelszót, máskülönben az összes felhasználói adat elveszik."
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "Hibás admin helyreállítási jelszó. Ellenörizd a jelszót és próbáld újra."
 
 #: changepassword/controller.php:87
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
+msgstr "A back-end nem támogatja a jelszó módosítást, de felhasználó titkosítási kulcsa sikeresen frissítve lett."
 
 #: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Nem sikerült megváltoztatni a jelszót"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Frissítés erre a verzióra: {appversion}"
 
-#: js/apps.js:49 js/apps.js:82 js/apps.js:108
+#: js/apps.js:49 js/apps.js:82 js/apps.js:110
 msgid "Disable"
 msgstr "Letiltás"
 
-#: js/apps.js:49 js/apps.js:89 js/apps.js:102 js/apps.js:117
+#: js/apps.js:49 js/apps.js:90 js/apps.js:103 js/apps.js:119
 msgid "Enable"
 msgstr "engedélyezve"
 
@@ -132,43 +132,43 @@ msgstr "engedélyezve"
 msgid "Please wait...."
 msgstr "Kérem várjon..."
 
-#: js/apps.js:79 js/apps.js:80 js/apps.js:100
+#: js/apps.js:79 js/apps.js:80 js/apps.js:101
 msgid "Error while disabling app"
-msgstr ""
+msgstr "Hiba az alkalmazás kikapcsolása közben"
 
-#: js/apps.js:99 js/apps.js:112 js/apps.js:113
+#: js/apps.js:100 js/apps.js:114 js/apps.js:115
 msgid "Error while enabling app"
-msgstr ""
+msgstr "Hiba az alalmazás engedélyezése közben"
 
-#: js/apps.js:123
+#: js/apps.js:125
 msgid "Updating...."
 msgstr "Frissítés folyamatban..."
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error while updating app"
 msgstr "Hiba történt a programfrissítés közben"
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error"
 msgstr "Hiba"
 
-#: js/apps.js:127 templates/apps.php:43
+#: js/apps.js:129 templates/apps.php:43
 msgid "Update"
 msgstr "Frissítés"
 
-#: js/apps.js:130
+#: js/apps.js:132
 msgid "Updated"
 msgstr "Frissítve"
 
-#: js/personal.js:220
+#: js/personal.js:221
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Válassz profil képet"
 
-#: js/personal.js:265
+#: js/personal.js:266
 msgid "Decrypting files... Please wait, this can take some time."
-msgstr ""
+msgstr "File-ok kititkosítása folyamatban... Kérlek várj, ez hosszabb ideig is eltarthat ..."
 
-#: js/personal.js:287
+#: js/personal.js:288
 msgid "Saving..."
 msgstr "Mentés..."
 
@@ -496,27 +496,27 @@ msgstr "Profilkép"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Új feltöltése"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Új kiválasztása Fileokból"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Kép eltávolítása"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "Egyaránt png vagy jpg. Az ideális ha négyzet alaku, de késöbb még átszabható"
 
 #: templates/personal.php:97
 msgid "Abort"
-msgstr ""
+msgstr "Megszakítás"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Válassz profil képet"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
@@ -543,15 +543,15 @@ msgstr "Titkosítás"
 
 #: templates/personal.php:140
 msgid "The encryption app is no longer enabled, decrypt all your file"
-msgstr ""
+msgstr "A titkosító alkalmzás a továbbiakban nincs engedélyezve, kititkosítja az összes fileodat"
 
 #: templates/personal.php:146
 msgid "Log-in password"
-msgstr ""
+msgstr "Bejelentkezési jelszó"
 
 #: templates/personal.php:151
 msgid "Decrypt all Files"
-msgstr ""
+msgstr "Kititkosítja az összes file-t"
 
 #: templates/users.php:21
 msgid "Login Name"
diff --git a/l10n/hu_HU/user_ldap.po b/l10n/hu_HU/user_ldap.po
index 87a2b14046..b1d5e5391c 100644
--- a/l10n/hu_HU/user_ldap.po
+++ b/l10n/hu_HU/user_ldap.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-27 00:01-0400\n"
-"PO-Revision-Date: 2013-09-24 19:00+0000\n"
-"Last-Translator: Laszlo Tornoci <torlasz@gmail.com>\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
+"PO-Revision-Date: 2013-09-30 00:22+0000\n"
+"Last-Translator: ebela <bela@dandre.hu>\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"
@@ -348,7 +348,7 @@ msgid ""
 "behavior as before ownCloud 5 enter the user display name attribute in the "
 "following field. Leave it empty for default behavior. Changes will have "
 "effect only on newly mapped (added) LDAP users."
-msgstr ""
+msgstr "Alapértelmezetten a belső felhasználónév az UUID tulajdonságból jön létre. Ez biztosítja a felhasználónév egyediségét és hogy a nem kell konvertálni a karaktereket benne. A belső felhasználónévnél a megkötés az, hogy csak a következő karakterek engdélyezettek benne: [ a-zA-Z0-9_.@- ]. Ezeken a karaktereken kivül minden karakter le lesz cserélve az adott karakter ASCII kódtáblában használható párjára vagy ha ilyen nincs akkor egyszerűen ki lesz hagyva. Ha így mégis ütköznének a nevek akkor hozzá lesz füzve egy folyamatosan növekvő számláló rész. A  belső felhasználónevet lehet használni a felhasználó azonosítására a programon belül. Illetve ez lesz az alapáértelmezett neve a felhasználó kezdő könyvtárának az ownCloud-ban. Illetve..............................."
 
 #: templates/settings.php:100
 msgid "Internal Username Attribute:"
diff --git a/l10n/hu_HU/user_webdavauth.po b/l10n/hu_HU/user_webdavauth.po
index fd49829f9c..35d7f6c913 100644
--- a/l10n/hu_HU/user_webdavauth.po
+++ b/l10n/hu_HU/user_webdavauth.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-27 01:56-0400\n"
-"PO-Revision-Date: 2013-07-27 05:57+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
+"PO-Revision-Date: 2013-09-30 00:32+0000\n"
+"Last-Translator: ebela <bela@dandre.hu>\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"
@@ -25,11 +25,11 @@ msgstr "WebDAV hitelesítés"
 
 #: templates/settings.php:4
 msgid "Address: "
-msgstr ""
+msgstr "Címek:"
 
 #: templates/settings.php:7
 msgid ""
 "The user credentials will be sent to this address. This plugin checks the "
 "response and will interpret the HTTP statuscodes 401 and 403 as invalid "
 "credentials, and all other responses as valid credentials."
-msgstr ""
+msgstr "A felhasználói hitelesítő adatai el lesznek küldve erre a címre. Ez a bővítőmodul leellenőrzi a választ és ha a HTTP hibakód nem 401 vagy 403 azaz érvénytelen a hitelesítő adat, akkor minden más válasz érvényes lesz."
diff --git a/l10n/it/files.po b/l10n/it/files.po
index 4711aa723a..3b8b0f6539 100644
--- a/l10n/it/files.po
+++ b/l10n/it/files.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-22 12:51-0400\n"
-"PO-Revision-Date: 2013-09-21 17:50+0000\n"
-"Last-Translator: polxmod <paolo.velati@gmail.com>\n"
+"POT-Creation-Date: 2013-09-30 10:14-0400\n"
+"PO-Revision-Date: 2013-09-30 12:15+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"
@@ -78,11 +78,11 @@ msgstr "Spazio di archiviazione insufficiente"
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr "Upload fallito. Impossibile ottenere informazioni sul file"
+msgstr "Caricamento non riuscito. Impossibile ottenere informazioni sul file."
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr "Upload fallit. Impossibile trovare file caricato"
+msgstr "Caricamento non riuscito. Impossibile trovare il file caricato."
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
@@ -94,7 +94,7 @@ msgstr "File"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr "Impossibile caricare {filename} poiché è una cartella oppure è di 0 byte"
+msgstr "Impossibile caricare {filename} poiché è una cartella oppure ha una dimensione di 0 byte."
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
diff --git a/l10n/it/settings.po b/l10n/it/settings.po
index 0e5f28a4d1..8248b45ef2 100644
--- a/l10n/it/settings.po
+++ b/l10n/it/settings.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:45-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:17-0400\n"
+"PO-Revision-Date: 2013-09-30 12:15+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"
@@ -121,11 +121,11 @@ msgstr "Impossibile cambiare la password"
 msgid "Update to {appversion}"
 msgstr "Aggiorna a {appversion}"
 
-#: js/apps.js:49 js/apps.js:82 js/apps.js:108
+#: js/apps.js:49 js/apps.js:82 js/apps.js:110
 msgid "Disable"
 msgstr "Disabilita"
 
-#: js/apps.js:49 js/apps.js:89 js/apps.js:102 js/apps.js:117
+#: js/apps.js:49 js/apps.js:90 js/apps.js:103 js/apps.js:119
 msgid "Enable"
 msgstr "Abilita"
 
@@ -133,43 +133,43 @@ msgstr "Abilita"
 msgid "Please wait...."
 msgstr "Attendere..."
 
-#: js/apps.js:79 js/apps.js:80 js/apps.js:100
+#: js/apps.js:79 js/apps.js:80 js/apps.js:101
 msgid "Error while disabling app"
 msgstr "Errore durante la disattivazione"
 
-#: js/apps.js:99 js/apps.js:112 js/apps.js:113
+#: js/apps.js:100 js/apps.js:114 js/apps.js:115
 msgid "Error while enabling app"
 msgstr "Errore durante l'attivazione"
 
-#: js/apps.js:123
+#: js/apps.js:125
 msgid "Updating...."
 msgstr "Aggiornamento in corso..."
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error while updating app"
 msgstr "Errore durante l'aggiornamento"
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error"
 msgstr "Errore"
 
-#: js/apps.js:127 templates/apps.php:43
+#: js/apps.js:129 templates/apps.php:43
 msgid "Update"
 msgstr "Aggiorna"
 
-#: js/apps.js:130
+#: js/apps.js:132
 msgid "Updated"
 msgstr "Aggiornato"
 
-#: js/personal.js:220
+#: js/personal.js:221
 msgid "Select a profile picture"
 msgstr "Seleziona un'immagine del profilo"
 
-#: js/personal.js:265
+#: js/personal.js:266
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Decifratura dei file in corso... Attendi, potrebbe richiedere del tempo."
 
-#: js/personal.js:287
+#: js/personal.js:288
 msgid "Saving..."
 msgstr "Salvataggio in corso..."
 
diff --git a/l10n/ja_JP/core.po b/l10n/ja_JP/core.po
index 0e8b19b17e..73ad535aee 100644
--- a/l10n/ja_JP/core.po
+++ b/l10n/ja_JP/core.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-22 12:55-0400\n"
-"PO-Revision-Date: 2013-09-20 15:01+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
+"PO-Revision-Date: 2013-09-30 06:25+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -112,7 +112,7 @@ msgstr "一時的なプロファイル用画像が利用できません。もう
 
 #: avatar/controller.php:135
 msgid "No crop data provided"
-msgstr ""
+msgstr "クロップデータは提供されません"
 
 #: js/config.php:32
 msgid "Sunday"
@@ -269,21 +269,21 @@ msgstr "メッセージテンプレートの読み込みエラー: {error}"
 #: js/oc-dialogs.js:347
 msgid "{count} file conflict"
 msgid_plural "{count} file conflicts"
-msgstr[0] ""
+msgstr[0] "{count} ファイルが競合"
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "1ファイルが競合"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
-msgstr ""
+msgstr "どちらのファイルを保持したいですか?"
 
 #: js/oc-dialogs.js:368
 msgid ""
 "If you select both versions, the copied file will have a number added to its"
 " name."
-msgstr ""
+msgstr "両方のバージョンを選択した場合は、ファイル名の後ろに数字を追加したファイルのコピーを作成します。"
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
@@ -291,19 +291,19 @@ msgstr "キャンセル"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "続ける"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr ""
+msgstr "(全て選択)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
-msgstr ""
+msgstr "({count} 選択)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
-msgstr ""
+msgstr "既存ファイルのテンプレートの読み込みエラー"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
@@ -314,7 +314,7 @@ msgstr "オブジェクタイプが指定されていません。"
 #: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
 #: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
 #: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
-#: js/share.js:645 js/share.js:657
+#: js/share.js:656 js/share.js:668
 msgid "Error"
 msgstr "エラー"
 
@@ -334,7 +334,7 @@ msgstr "共有中"
 msgid "Share"
 msgstr "共有"
 
-#: js/share.js:131 js/share.js:685
+#: js/share.js:131 js/share.js:696
 msgid "Error while sharing"
 msgstr "共有でエラー発生"
 
@@ -434,23 +434,23 @@ msgstr "削除"
 msgid "share"
 msgstr "共有"
 
-#: js/share.js:400 js/share.js:632
+#: js/share.js:400 js/share.js:643
 msgid "Password protected"
 msgstr "パスワード保護"
 
-#: js/share.js:645
+#: js/share.js:656
 msgid "Error unsetting expiration date"
 msgstr "有効期限の未設定エラー"
 
-#: js/share.js:657
+#: js/share.js:668
 msgid "Error setting expiration date"
 msgstr "有効期限の設定でエラー発生"
 
-#: js/share.js:672
+#: js/share.js:683
 msgid "Sending ..."
 msgstr "送信中..."
 
-#: js/share.js:683
+#: js/share.js:694
 msgid "Email sent"
 msgstr "メールを送信しました"
 
diff --git a/l10n/ja_JP/files.po b/l10n/ja_JP/files.po
index b712c8b95a..23062b0596 100644
--- a/l10n/ja_JP/files.po
+++ b/l10n/ja_JP/files.po
@@ -12,9 +12,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:14-0400\n"
+"PO-Revision-Date: 2013-09-30 06:27+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -81,23 +81,23 @@ msgstr "ストレージに十分な空き容量がありません"
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr ""
+msgstr "アップロードに失敗。ファイル情報を取得できませんでした。"
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr ""
+msgstr "アップロードに失敗。アップロード済みのファイルを見つけることができませんでした。"
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "無効なディレクトリです。"
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "ファイル"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "ディレクトリもしくは0バイトのため {filename} をアップロードできません"
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -109,7 +109,7 @@ msgstr "アップロードはキャンセルされました。"
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "サーバから結果を取得できませんでした。"
 
 #: js/file-upload.js:446
 msgid ""
@@ -223,7 +223,7 @@ msgstr "ダウンロードの準備中です。ファイルサイズが大きい
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "ファイルの移動エラー"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/ja_JP/settings.po b/l10n/ja_JP/settings.po
index c9851b54de..9414aa1720 100644
--- a/l10n/ja_JP/settings.po
+++ b/l10n/ja_JP/settings.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:45-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:17-0400\n"
+"PO-Revision-Date: 2013-09-30 06:33+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -89,42 +89,42 @@ msgstr "アプリを更新出来ませんでした。"
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "無効なパスワード"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "ユーザが指定されていません"
 
 #: changepassword/controller.php:74
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "復元用の管理者パスワードを入力してください。そうでない場合は、全ユーザのデータが失われます。"
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "無効な復元用の管理者パスワード。パスワードを確認して再度実行してください。"
 
 #: changepassword/controller.php:87
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
+msgstr "バックエンドはパスワード変更をサポートしていませんが、ユーザの暗号化キーは正常に更新されました。"
 
 #: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "パスワードを変更できません"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "{appversion} に更新"
 
-#: js/apps.js:49 js/apps.js:82 js/apps.js:108
+#: js/apps.js:49 js/apps.js:82 js/apps.js:110
 msgid "Disable"
 msgstr "無効"
 
-#: js/apps.js:49 js/apps.js:89 js/apps.js:102 js/apps.js:117
+#: js/apps.js:49 js/apps.js:90 js/apps.js:103 js/apps.js:119
 msgid "Enable"
 msgstr "有効化"
 
@@ -132,43 +132,43 @@ msgstr "有効化"
 msgid "Please wait...."
 msgstr "しばらくお待ちください。"
 
-#: js/apps.js:79 js/apps.js:80 js/apps.js:100
+#: js/apps.js:79 js/apps.js:80 js/apps.js:101
 msgid "Error while disabling app"
 msgstr "アプリ無効化中にエラーが発生"
 
-#: js/apps.js:99 js/apps.js:112 js/apps.js:113
+#: js/apps.js:100 js/apps.js:114 js/apps.js:115
 msgid "Error while enabling app"
 msgstr "アプリ有効化中にエラーが発生"
 
-#: js/apps.js:123
+#: js/apps.js:125
 msgid "Updating...."
 msgstr "更新中...."
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error while updating app"
 msgstr "アプリの更新中にエラーが発生"
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error"
 msgstr "エラー"
 
-#: js/apps.js:127 templates/apps.php:43
+#: js/apps.js:129 templates/apps.php:43
 msgid "Update"
 msgstr "更新"
 
-#: js/apps.js:130
+#: js/apps.js:132
 msgid "Updated"
 msgstr "更新済み"
 
-#: js/personal.js:220
+#: js/personal.js:221
 msgid "Select a profile picture"
 msgstr "プロファイル画像を選択"
 
-#: js/personal.js:265
+#: js/personal.js:266
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "ファイルを複合中... しばらくお待ちください、この処理には少し時間がかかるかもしれません。"
 
-#: js/personal.js:287
+#: js/personal.js:288
 msgid "Saving..."
 msgstr "保存中..."
 
@@ -496,11 +496,11 @@ msgstr "プロフィール写真"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "新規にアップロード"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "ファイルから新規に選択"
 
 #: templates/personal.php:93
 msgid "Remove image"
@@ -508,7 +508,7 @@ msgstr "画像を削除"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
+msgstr "png と jpg のいずれか。正方形が理想ですが、切り取って加工することも可能です。"
 
 #: templates/personal.php:97
 msgid "Abort"
diff --git a/l10n/ko/files.po b/l10n/ko/files.po
index b2497ad349..d3f72518cc 100644
--- a/l10n/ko/files.po
+++ b/l10n/ko/files.po
@@ -5,13 +5,14 @@
 # Translators:
 # ujuc Gang <potopro@gmail.com>, 2013
 # ujuc Gang <potopro@gmail.com>, 2013
+# smallsnail <bjh13579@gmail.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:14-0400\n"
+"PO-Revision-Date: 2013-09-29 10:06+0000\n"
+"Last-Translator: smallsnail <bjh13579@gmail.com>\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"
@@ -31,11 +32,11 @@ msgstr "%s 항목을 이딩시키지 못하였음"
 
 #: ajax/upload.php:16 ajax/upload.php:45
 msgid "Unable to set upload directory."
-msgstr ""
+msgstr "업로드 디렉터리를 정할수 없습니다"
 
 #: ajax/upload.php:22
 msgid "Invalid Token"
-msgstr ""
+msgstr "잘못된 토큰"
 
 #: ajax/upload.php:59
 msgid "No file was uploaded. Unknown error"
@@ -78,23 +79,23 @@ msgstr "저장소가 용량이 충분하지 않습니다."
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr ""
+msgstr "업로드에 실패했습니다. 파일 정보를 가져올수 없습니다."
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr ""
+msgstr "업로드에 실패했습니다. 업로드할 파일을 찾을수 없습니다"
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "올바르지 않은 디렉터리입니다."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "파일"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "{filename}을 업로드 할수 없습니다. 폴더이거나 0 바이트 파일입니다."
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -106,7 +107,7 @@ msgstr "업로드가 취소되었습니다."
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "서버에서 결과를 가져올수 없습니다."
 
 #: js/file-upload.js:446
 msgid ""
@@ -119,7 +120,7 @@ msgstr "URL을 입력해야 합니다."
 
 #: js/file-upload.js:525 lib/app.php:53
 msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud"
-msgstr ""
+msgstr "유효하지 않은 폴더명입니다. \"Shared\" 이름의 사용은 OwnCloud 가 이미 예약하고 있습니다."
 
 #: js/file-upload.js:557 js/file-upload.js:573 js/files.js:507 js/files.js:545
 msgid "Error"
@@ -168,21 +169,21 @@ msgstr "되돌리기"
 #: js/filelist.js:533 js/filelist.js:599 js/files.js:576
 msgid "%n folder"
 msgid_plural "%n folders"
-msgstr[0] ""
+msgstr[0] "폴더 %n"
 
 #: js/filelist.js:534 js/filelist.js:600 js/files.js:582
 msgid "%n file"
 msgid_plural "%n files"
-msgstr[0] ""
+msgstr[0] "파일 %n 개"
 
 #: js/filelist.js:541
 msgid "{dirs} and {files}"
-msgstr ""
+msgstr "{dirs} 그리고 {files}"
 
 #: js/filelist.js:731 js/filelist.js:769
 msgid "Uploading %n file"
 msgid_plural "Uploading %n files"
-msgstr[0] ""
+msgstr[0] "%n 개의 파일을 업로드중"
 
 #: js/files.js:25
 msgid "'.' is an invalid file name."
@@ -210,7 +211,7 @@ msgstr "저장 공간이 거의 가득 찼습니다 ({usedSpacePercent}%)"
 msgid ""
 "Encryption was disabled but your files are still encrypted. Please go to "
 "your personal settings to decrypt your files."
-msgstr ""
+msgstr "암호화는 해제되어 있지만, 파일은 아직 암호화 되어 있습니다. 개인 설저에 가셔서 암호를 해제하십시오"
 
 #: js/files.js:296
 msgid ""
@@ -220,7 +221,7 @@ msgstr "다운로드가 준비 중입니다. 파일 크기가 크다면 시간
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "파일 이동 오류"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
@@ -237,7 +238,7 @@ msgstr "수정됨"
 #: lib/app.php:73
 #, php-format
 msgid "%s could not be renamed"
-msgstr ""
+msgstr "%s 의 이름을 변경할수 없습니다"
 
 #: lib/helper.php:11 templates/index.php:17
 msgid "Upload"
diff --git a/l10n/ko/files_sharing.po b/l10n/ko/files_sharing.po
index 434e19ca27..da94ad3211 100644
--- a/l10n/ko/files_sharing.po
+++ b/l10n/ko/files_sharing.po
@@ -3,13 +3,14 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# smallsnail <bjh13579@gmail.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-13 21:46-0400\n"
-"PO-Revision-Date: 2013-09-14 00:01+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
+"PO-Revision-Date: 2013-09-29 10:14+0000\n"
+"Last-Translator: smallsnail <bjh13579@gmail.com>\n"
 "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,7 +20,7 @@ msgstr ""
 
 #: templates/authenticate.php:4
 msgid "The password is wrong. Try again."
-msgstr ""
+msgstr "비밀번호가 틀립니다. 다시 입력해주세요."
 
 #: templates/authenticate.php:7
 msgid "Password"
@@ -31,27 +32,27 @@ msgstr "제출"
 
 #: templates/part.404.php:3
 msgid "Sorry, this link doesn’t seem to work anymore."
-msgstr ""
+msgstr "죄송합니다만 이 링크는 더이상 작동되지 않습니다."
 
 #: templates/part.404.php:4
 msgid "Reasons might be:"
-msgstr ""
+msgstr "이유는 다음과 같을 수 있습니다:"
 
 #: templates/part.404.php:6
 msgid "the item was removed"
-msgstr ""
+msgstr "이 항목은 삭제되었습니다"
 
 #: templates/part.404.php:7
 msgid "the link expired"
-msgstr ""
+msgstr "링크가 만료되었습니다"
 
 #: templates/part.404.php:8
 msgid "sharing is disabled"
-msgstr ""
+msgstr "공유가 비활성되었습니다"
 
 #: templates/part.404.php:10
 msgid "For more info, please ask the person who sent this link."
-msgstr ""
+msgstr "더 자세한 설명은 링크를 보내신 분에게 여쭤보십시오"
 
 #: templates/public.php:15
 #, php-format
diff --git a/l10n/ko/files_trashbin.po b/l10n/ko/files_trashbin.po
index 3e48f534a1..4d39e2d9ac 100644
--- a/l10n/ko/files_trashbin.po
+++ b/l10n/ko/files_trashbin.po
@@ -3,13 +3,14 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# smallsnail <bjh13579@gmail.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-08-15 04:47-0400\n"
-"PO-Revision-Date: 2013-08-15 08:48+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
+"PO-Revision-Date: 2013-09-29 07:38+0000\n"
+"Last-Translator: smallsnail <bjh13579@gmail.com>\n"
 "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,63 +21,63 @@ msgstr ""
 #: ajax/delete.php:42
 #, php-format
 msgid "Couldn't delete %s permanently"
-msgstr ""
+msgstr "%s를 영구적으로 삭제할수 없습니다"
 
 #: ajax/undelete.php:42
 #, php-format
 msgid "Couldn't restore %s"
-msgstr ""
+msgstr "%s를 복원할수 없습니다"
 
-#: js/trash.js:7 js/trash.js:100
+#: js/trash.js:7 js/trash.js:102
 msgid "perform restore operation"
-msgstr ""
+msgstr "복원 작업중"
 
-#: js/trash.js:20 js/trash.js:48 js/trash.js:118 js/trash.js:146
+#: js/trash.js:20 js/trash.js:49 js/trash.js:120 js/trash.js:148
 msgid "Error"
 msgstr "오류"
 
-#: js/trash.js:36
+#: js/trash.js:37
 msgid "delete file permanently"
-msgstr ""
+msgstr "영구적으로 파일 삭제하기"
 
-#: js/trash.js:127
+#: js/trash.js:129
 msgid "Delete permanently"
 msgstr "영원히 삭제"
 
-#: js/trash.js:182 templates/index.php:17
+#: js/trash.js:190 templates/index.php:21
 msgid "Name"
 msgstr "이름"
 
-#: js/trash.js:183 templates/index.php:27
+#: js/trash.js:191 templates/index.php:31
 msgid "Deleted"
-msgstr ""
+msgstr "삭제됨"
 
-#: js/trash.js:191
+#: js/trash.js:199
 msgid "%n folder"
 msgid_plural "%n folders"
-msgstr[0] ""
+msgstr[0] "폴더 %n개"
 
-#: js/trash.js:197
+#: js/trash.js:205
 msgid "%n file"
 msgid_plural "%n files"
-msgstr[0] ""
+msgstr[0] "파일 %n개 "
 
-#: lib/trash.php:819 lib/trash.php:821
+#: lib/trashbin.php:814 lib/trashbin.php:816
 msgid "restored"
-msgstr ""
+msgstr "복원됨"
 
 #: templates/index.php:9
 msgid "Nothing in here. Your trash bin is empty!"
-msgstr ""
+msgstr "현재 휴지통은 비어있습니다!"
 
-#: templates/index.php:20 templates/index.php:22
+#: templates/index.php:24 templates/index.php:26
 msgid "Restore"
 msgstr "복원"
 
-#: templates/index.php:30 templates/index.php:31
+#: templates/index.php:34 templates/index.php:35
 msgid "Delete"
 msgstr "삭제"
 
 #: templates/part.breadcrumb.php:9
 msgid "Deleted Files"
-msgstr ""
+msgstr "삭제된 파일들"
diff --git a/l10n/ko/files_versions.po b/l10n/ko/files_versions.po
index 19ec188ee6..1a9375ae40 100644
--- a/l10n/ko/files_versions.po
+++ b/l10n/ko/files_versions.po
@@ -4,13 +4,14 @@
 # 
 # Translators:
 # Shinjo Park <kde@peremen.name>, 2013
+# smallsnail <bjh13579@gmail.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-28 01:56-0400\n"
-"PO-Revision-Date: 2013-07-27 06:10+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
+"PO-Revision-Date: 2013-09-29 10:18+0000\n"
+"Last-Translator: smallsnail <bjh13579@gmail.com>\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"
@@ -29,16 +30,16 @@ msgstr "버전"
 
 #: js/versions.js:53
 msgid "Failed to revert {file} to revision {timestamp}."
-msgstr ""
+msgstr "{timestamp} 판의 {file}로 돌리는데 실패했습니다."
 
 #: js/versions.js:79
 msgid "More versions..."
-msgstr ""
+msgstr "더 많은 버전들..."
 
 #: js/versions.js:116
 msgid "No other versions available"
-msgstr ""
+msgstr "다른 버전을 사용할수 없습니다"
 
-#: js/versions.js:149
+#: js/versions.js:145
 msgid "Restore"
 msgstr "복원"
diff --git a/l10n/ko/lib.po b/l10n/ko/lib.po
index 06627a7978..ca05c5e133 100644
--- a/l10n/ko/lib.po
+++ b/l10n/ko/lib.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
+"PO-Revision-Date: 2013-09-29 07:46+0000\n"
+"Last-Translator: smallsnail <bjh13579@gmail.com>\n"
 "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,53 +19,53 @@ msgstr ""
 "Language: ko\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: app.php:239
+#: app.php:237
 #, php-format
 msgid ""
 "App \"%s\" can't be installed because it is not compatible with this version"
 " of ownCloud."
 msgstr "현재 ownCloud 버전과 호환되지 않기 때문에 \"%s\" 앱을 설치할 수 없습니다."
 
-#: app.php:250
+#: app.php:248
 msgid "No app name specified"
 msgstr "앱 이름이 지정되지 않았습니다."
 
-#: app.php:361
+#: app.php:352
 msgid "Help"
 msgstr "도움말"
 
-#: app.php:374
+#: app.php:365
 msgid "Personal"
 msgstr "개인"
 
-#: app.php:385
+#: app.php:376
 msgid "Settings"
 msgstr "설정"
 
-#: app.php:397
+#: app.php:388
 msgid "Users"
 msgstr "사용자"
 
-#: app.php:410
+#: app.php:401
 msgid "Admin"
 msgstr "관리자"
 
-#: app.php:839
+#: app.php:832
 #, php-format
 msgid "Failed to upgrade \"%s\"."
 msgstr "\"%s\" 업그레이드에 실패했습니다."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "개개인의 프로필 사진은 아직은 암호화 되지 않습니다"
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "알수없는 파일형식"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "잘못된 그림"
 
 #: defaults.php:35
 msgid "web services under your control"
@@ -96,7 +96,7 @@ msgstr "선택한 파일들은 ZIP 파일을 생성하기에 너무 큽니다."
 msgid ""
 "Download the files in smaller chunks, seperately or kindly ask your "
 "administrator."
-msgstr ""
+msgstr "작은 조각들 안에 들어있는 파일들을 받고자 하신다면, 나누어서 받으시거나 혹은 시스템 관리자에게 정중하게 물어보십시오"
 
 #: installer.php:63
 msgid "No source specified when installing app"
@@ -166,15 +166,15 @@ msgstr "인증 오류"
 msgid "Token expired. Please reload page."
 msgstr "토큰이 만료되었습니다. 페이지를 새로 고치십시오."
 
-#: search/provider/file.php:17 search/provider/file.php:35
+#: search/provider/file.php:18 search/provider/file.php:36
 msgid "Files"
 msgstr "파일"
 
-#: search/provider/file.php:26 search/provider/file.php:33
+#: search/provider/file.php:27 search/provider/file.php:34
 msgid "Text"
 msgstr "텍스트"
 
-#: search/provider/file.php:29
+#: search/provider/file.php:30
 msgid "Images"
 msgstr "그림"
 
@@ -278,6 +278,11 @@ msgstr "WebDAV 인터페이스가 제대로 작동하지 않습니다. 웹 서
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "<a href='%s'>설치 가이드</a>를 다시 한 번 확인하십시오."
 
+#: tags.php:194
+#, php-format
+msgid "Could not find category \"%s\""
+msgstr "분류 \"%s\"을(를) 찾을 수 없습니다."
+
 #: template/functions.php:96
 msgid "seconds ago"
 msgstr "초 전"
@@ -325,8 +330,3 @@ msgstr "년 전"
 #: template.php:297
 msgid "Caused by:"
 msgstr "원인: "
-
-#: vcategories.php:188 vcategories.php:249
-#, php-format
-msgid "Could not find category \"%s\""
-msgstr "분류 \"%s\"을(를) 찾을 수 없습니다."
diff --git a/l10n/lt_LT/core.po b/l10n/lt_LT/core.po
index f340c7a46d..4a22a7c948 100644
--- a/l10n/lt_LT/core.po
+++ b/l10n/lt_LT/core.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-22 12:55-0400\n"
-"PO-Revision-Date: 2013-09-20 15:01+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
+"PO-Revision-Date: 2013-09-29 07:58+0000\n"
+"Last-Translator: Liudas Ališauskas <liudas.alisauskas@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"
@@ -277,23 +277,23 @@ msgstr "Klaida įkeliant žinutės ruošinį: {error}"
 #: js/oc-dialogs.js:347
 msgid "{count} file conflict"
 msgid_plural "{count} file conflicts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "{count} failas konfliktuoja"
+msgstr[1] "{count} failai konfliktuoja"
+msgstr[2] "{count} failų konfliktų"
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "Vienas failo konfliktas"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
-msgstr ""
+msgstr "Kuriuos failus norite laikyti?"
 
 #: js/oc-dialogs.js:368
 msgid ""
 "If you select both versions, the copied file will have a number added to its"
 " name."
-msgstr ""
+msgstr "Jei pasirenkate abi versijas, nukopijuotas failas turės pridėtą numerį pavadinime."
 
 #: js/oc-dialogs.js:376
 msgid "Cancel"
@@ -301,19 +301,19 @@ msgstr "Atšaukti"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Tęsti"
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr ""
+msgstr "(visi pažymėti)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
-msgstr ""
+msgstr "({count} pažymėtų)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
-msgstr ""
+msgstr "Klaida įkeliant esančių failų ruošinį"
 
 #: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
 #: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
@@ -324,7 +324,7 @@ msgstr "Objekto tipas nenurodytas."
 #: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
 #: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
 #: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
-#: js/share.js:645 js/share.js:657
+#: js/share.js:656 js/share.js:668
 msgid "Error"
 msgstr "Klaida"
 
@@ -344,7 +344,7 @@ msgstr "Dalinamasi"
 msgid "Share"
 msgstr "Dalintis"
 
-#: js/share.js:131 js/share.js:685
+#: js/share.js:131 js/share.js:696
 msgid "Error while sharing"
 msgstr "Klaida, dalijimosi metu"
 
@@ -444,23 +444,23 @@ msgstr "ištrinti"
 msgid "share"
 msgstr "dalintis"
 
-#: js/share.js:400 js/share.js:632
+#: js/share.js:400 js/share.js:643
 msgid "Password protected"
 msgstr "Apsaugota slaptažodžiu"
 
-#: js/share.js:645
+#: js/share.js:656
 msgid "Error unsetting expiration date"
 msgstr "Klaida nuimant galiojimo laiką"
 
-#: js/share.js:657
+#: js/share.js:668
 msgid "Error setting expiration date"
 msgstr "Klaida nustatant galiojimo laiką"
 
-#: js/share.js:672
+#: js/share.js:683
 msgid "Sending ..."
 msgstr "Siunčiama..."
 
-#: js/share.js:683
+#: js/share.js:694
 msgid "Email sent"
 msgstr "Laiškas išsiųstas"
 
diff --git a/l10n/lt_LT/files.po b/l10n/lt_LT/files.po
index da69b0a419..829d61188a 100644
--- a/l10n/lt_LT/files.po
+++ b/l10n/lt_LT/files.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:14-0400\n"
+"PO-Revision-Date: 2013-09-29 08:46+0000\n"
+"Last-Translator: Liudas Ališauskas <liudas.alisauskas@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"
@@ -78,23 +78,23 @@ msgstr "Nepakanka vietos serveryje"
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr ""
+msgstr "Įkėlimas nepavyko. Nepavyko gauti failo informacijos."
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr ""
+msgstr "Įkėlimas nepavyko. Nepavyko rasti įkelto failo"
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Neteisingas aplankas"
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Failai"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Nepavyksta įkelti {filename}, nes tai katalogas arba yra 0 baitų dydžio"
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -106,7 +106,7 @@ msgstr "Įkėlimas atšauktas."
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "Nepavyko gauti rezultato iš serverio."
 
 #: js/file-upload.js:446
 msgid ""
@@ -226,7 +226,7 @@ msgstr "Jūsų atsisiuntimas yra paruošiamas. tai gali užtrukti jei atsisiunč
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Klaida perkeliant failą"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/lt_LT/settings.po b/l10n/lt_LT/settings.po
index 14592409dd..ff719fb19f 100644
--- a/l10n/lt_LT/settings.po
+++ b/l10n/lt_LT/settings.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:45-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:17-0400\n"
+"PO-Revision-Date: 2013-09-29 08:49+0000\n"
+"Last-Translator: Liudas Ališauskas <liudas.alisauskas@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"
@@ -90,42 +90,42 @@ msgstr "Nepavyko atnaujinti programos."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Neteisingas slaptažodis"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
-msgstr ""
+msgstr "Nepateiktas naudotojas"
 
 #: changepassword/controller.php:74
 msgid ""
 "Please provide an admin recovery password, otherwise all user data will be "
 "lost"
-msgstr ""
+msgstr "Prašome įvesti administratoriaus atkūrimo slaptažodį, kitaip visi naudotojo suomenys bus prarasti"
 
 #: changepassword/controller.php:79
 msgid ""
 "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
+msgstr "Netinkamas administratoriau atkūrimo slaptažodis. Prašome pasitikrinti ir bandyti vėl."
 
 #: changepassword/controller.php:87
 msgid ""
 "Back-end doesn't support password change, but the users encryption key was "
 "successfully updated."
-msgstr ""
+msgstr "Sistema nepalaiko slaptažodžio keitimo, bet naudotojo šifravimo raktas buvo sėkmingai atnaujintas."
 
 #: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Nepavyksta pakeisti slaptažodžio"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Atnaujinti iki {appversion}"
 
-#: js/apps.js:49 js/apps.js:82 js/apps.js:108
+#: js/apps.js:49 js/apps.js:82 js/apps.js:110
 msgid "Disable"
 msgstr "Išjungti"
 
-#: js/apps.js:49 js/apps.js:89 js/apps.js:102 js/apps.js:117
+#: js/apps.js:49 js/apps.js:90 js/apps.js:103 js/apps.js:119
 msgid "Enable"
 msgstr "Įjungti"
 
@@ -133,43 +133,43 @@ msgstr "Įjungti"
 msgid "Please wait...."
 msgstr "Prašome palaukti..."
 
-#: js/apps.js:79 js/apps.js:80 js/apps.js:100
+#: js/apps.js:79 js/apps.js:80 js/apps.js:101
 msgid "Error while disabling app"
 msgstr "Klaida išjungiant programą"
 
-#: js/apps.js:99 js/apps.js:112 js/apps.js:113
+#: js/apps.js:100 js/apps.js:114 js/apps.js:115
 msgid "Error while enabling app"
 msgstr "Klaida įjungiant programą"
 
-#: js/apps.js:123
+#: js/apps.js:125
 msgid "Updating...."
 msgstr "Atnaujinama..."
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error while updating app"
 msgstr "Įvyko klaida atnaujinant programą"
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error"
 msgstr "Klaida"
 
-#: js/apps.js:127 templates/apps.php:43
+#: js/apps.js:129 templates/apps.php:43
 msgid "Update"
 msgstr "Atnaujinti"
 
-#: js/apps.js:130
+#: js/apps.js:132
 msgid "Updated"
 msgstr "Atnaujinta"
 
-#: js/personal.js:220
+#: js/personal.js:221
 msgid "Select a profile picture"
 msgstr "Pažymėkite profilio paveikslėlį"
 
-#: js/personal.js:265
+#: js/personal.js:266
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Iššifruojami failai... Prašome palaukti, tai gali užtrukti."
 
-#: js/personal.js:287
+#: js/personal.js:288
 msgid "Saving..."
 msgstr "Saugoma..."
 
diff --git a/l10n/pl/core.po b/l10n/pl/core.po
index 3d7aae83ba..d3f781b0e4 100644
--- a/l10n/pl/core.po
+++ b/l10n/pl/core.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-22 12:55-0400\n"
-"PO-Revision-Date: 2013-09-20 15:01+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
+"PO-Revision-Date: 2013-09-30 12:27+0000\n"
+"Last-Translator: Cyryl Sochacki <cyrylsochacki@gmail.com>\n"
 "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -98,11 +98,11 @@ msgstr ""
 
 #: avatar/controller.php:81
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Nieznany typ pliku"
 
 #: avatar/controller.php:85
 msgid "Invalid image"
-msgstr ""
+msgstr "Nieprawidłowe zdjęcie"
 
 #: avatar/controller.php:115 avatar/controller.php:142
 msgid "No temporary profile picture available, try again"
@@ -275,13 +275,13 @@ msgstr ""
 #: js/oc-dialogs.js:347
 msgid "{count} file conflict"
 msgid_plural "{count} file conflicts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "{count} konfliktów plików"
+msgstr[1] "{count} konfliktów plików"
+msgstr[2] "{count} konfliktów plików"
 
 #: js/oc-dialogs.js:361
 msgid "One file conflict"
-msgstr ""
+msgstr "Konflikt pliku"
 
 #: js/oc-dialogs.js:367
 msgid "Which files do you want to keep?"
@@ -299,15 +299,15 @@ msgstr "Anuluj"
 
 #: js/oc-dialogs.js:386
 msgid "Continue"
-msgstr ""
+msgstr "Kontynuuj "
 
 #: js/oc-dialogs.js:433 js/oc-dialogs.js:446
 msgid "(all selected)"
-msgstr ""
+msgstr "(wszystkie zaznaczone)"
 
 #: js/oc-dialogs.js:436 js/oc-dialogs.js:449
 msgid "({count} selected)"
-msgstr ""
+msgstr "({count} zaznaczonych)"
 
 #: js/oc-dialogs.js:457
 msgid "Error loading file exists template"
@@ -322,7 +322,7 @@ msgstr "Nie określono typu obiektu."
 #: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
 #: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
 #: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
-#: js/share.js:645 js/share.js:657
+#: js/share.js:656 js/share.js:668
 msgid "Error"
 msgstr "Błąd"
 
@@ -342,7 +342,7 @@ msgstr "Udostępniono"
 msgid "Share"
 msgstr "Udostępnij"
 
-#: js/share.js:131 js/share.js:685
+#: js/share.js:131 js/share.js:696
 msgid "Error while sharing"
 msgstr "Błąd podczas współdzielenia"
 
@@ -442,23 +442,23 @@ msgstr "usuń"
 msgid "share"
 msgstr "współdziel"
 
-#: js/share.js:400 js/share.js:632
+#: js/share.js:400 js/share.js:643
 msgid "Password protected"
 msgstr "Zabezpieczone hasłem"
 
-#: js/share.js:645
+#: js/share.js:656
 msgid "Error unsetting expiration date"
 msgstr "Błąd podczas usuwania daty wygaśnięcia"
 
-#: js/share.js:657
+#: js/share.js:668
 msgid "Error setting expiration date"
 msgstr "Błąd podczas ustawiania daty wygaśnięcia"
 
-#: js/share.js:672
+#: js/share.js:683
 msgid "Sending ..."
 msgstr "Wysyłanie..."
 
-#: js/share.js:683
+#: js/share.js:694
 msgid "Email sent"
 msgstr "E-mail wysłany"
 
diff --git a/l10n/pl/files.po b/l10n/pl/files.po
index b94335006b..a88ee97ad7 100644
--- a/l10n/pl/files.po
+++ b/l10n/pl/files.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:44-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:14-0400\n"
+"PO-Revision-Date: 2013-09-30 12:24+0000\n"
+"Last-Translator: Cyryl Sochacki <cyrylsochacki@gmail.com>\n"
 "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -79,23 +79,23 @@ msgstr "Za mało dostępnego miejsca"
 
 #: ajax/upload.php:120 ajax/upload.php:143
 msgid "Upload failed. Could not get file info."
-msgstr ""
+msgstr "Nieudane przesłanie. Nie można pobrać informacji o pliku."
 
 #: ajax/upload.php:136
 msgid "Upload failed. Could not find uploaded file"
-msgstr ""
+msgstr "Nieudane przesłanie. Nie można znaleźć przesyłanego pliku"
 
 #: ajax/upload.php:160
 msgid "Invalid directory."
 msgstr "Zła ścieżka."
 
-#: appinfo/app.php:12
+#: appinfo/app.php:11
 msgid "Files"
 msgstr "Pliki"
 
 #: js/file-upload.js:244
 msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Nie można przesłać {filename} być może jest katalogiem lub posiada 0 bajtów"
 
 #: js/file-upload.js:255
 msgid "Not enough space available"
@@ -107,7 +107,7 @@ msgstr "Wczytywanie anulowane."
 
 #: js/file-upload.js:356
 msgid "Could not get result from server."
-msgstr ""
+msgstr "Nie można uzyskać wyniku z serwera."
 
 #: js/file-upload.js:446
 msgid ""
@@ -227,7 +227,7 @@ msgstr "Pobieranie jest przygotowywane. Może to zająć trochę czasu jeśli pl
 
 #: js/files.js:507 js/files.js:545
 msgid "Error moving file"
-msgstr ""
+msgstr "Błąd prz przenoszeniu pliku"
 
 #: js/files.js:558 templates/index.php:61
 msgid "Name"
diff --git a/l10n/pl/lib.po b/l10n/pl/lib.po
index beae34e580..9e29c51c5a 100644
--- a/l10n/pl/lib.po
+++ b/l10n/pl/lib.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-16 11:33-0400\n"
-"PO-Revision-Date: 2013-09-16 15:34+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
+"PO-Revision-Date: 2013-09-30 12:26+0000\n"
+"Last-Translator: Cyryl Sochacki <cyrylsochacki@gmail.com>\n"
 "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -18,53 +18,53 @@ msgstr ""
 "Language: pl\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: app.php:239
+#: app.php:237
 #, php-format
 msgid ""
 "App \"%s\" can't be installed because it is not compatible with this version"
 " of ownCloud."
 msgstr "Aplikacja \"%s\" nie może zostać zainstalowana, ponieważ nie jest zgodna z tą wersją ownCloud."
 
-#: app.php:250
+#: app.php:248
 msgid "No app name specified"
 msgstr "Nie określono nazwy aplikacji"
 
-#: app.php:361
+#: app.php:352
 msgid "Help"
 msgstr "Pomoc"
 
-#: app.php:374
+#: app.php:365
 msgid "Personal"
 msgstr "Osobiste"
 
-#: app.php:385
+#: app.php:376
 msgid "Settings"
 msgstr "Ustawienia"
 
-#: app.php:397
+#: app.php:388
 msgid "Users"
 msgstr "Użytkownicy"
 
-#: app.php:410
+#: app.php:401
 msgid "Admin"
 msgstr "Administrator"
 
-#: app.php:839
+#: app.php:832
 #, php-format
 msgid "Failed to upgrade \"%s\"."
 msgstr "Błąd przy aktualizacji \"%s\"."
 
 #: avatar.php:56
 msgid "Custom profile pictures don't work with encryption yet"
-msgstr ""
+msgstr "Domyślny profil zdjęć nie działa z szyfrowaniem jeszcze"
 
 #: avatar.php:64
 msgid "Unknown filetype"
-msgstr ""
+msgstr "Nieznany typ pliku"
 
 #: avatar.php:69
 msgid "Invalid image"
-msgstr ""
+msgstr "Błędne zdjęcie"
 
 #: defaults.php:35
 msgid "web services under your control"
@@ -165,15 +165,15 @@ msgstr "Błąd uwierzytelniania"
 msgid "Token expired. Please reload page."
 msgstr "Token wygasł. Proszę ponownie załadować stronę."
 
-#: search/provider/file.php:17 search/provider/file.php:35
+#: search/provider/file.php:18 search/provider/file.php:36
 msgid "Files"
 msgstr "Pliki"
 
-#: search/provider/file.php:26 search/provider/file.php:33
+#: search/provider/file.php:27 search/provider/file.php:34
 msgid "Text"
 msgstr "Połączenie tekstowe"
 
-#: search/provider/file.php:29
+#: search/provider/file.php:30
 msgid "Images"
 msgstr "Obrazy"
 
@@ -277,6 +277,11 @@ msgstr "Serwer internetowy nie jest jeszcze poprawnie skonfigurowany, aby umożl
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Sprawdź ponownie <a href='%s'>przewodniki instalacji</a>."
 
+#: tags.php:194
+#, php-format
+msgid "Could not find category \"%s\""
+msgstr "Nie można odnaleźć kategorii \"%s\""
+
 #: template/functions.php:96
 msgid "seconds ago"
 msgstr "sekund temu"
@@ -332,8 +337,3 @@ msgstr "lat temu"
 #: template.php:297
 msgid "Caused by:"
 msgstr "Spowodowane przez:"
-
-#: vcategories.php:188 vcategories.php:249
-#, php-format
-msgid "Could not find category \"%s\""
-msgstr "Nie można odnaleźć kategorii \"%s\""
diff --git a/l10n/pl/settings.po b/l10n/pl/settings.po
index 5b5e435ef1..830b2045a3 100644
--- a/l10n/pl/settings.po
+++ b/l10n/pl/settings.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-09-20 10:45-0400\n"
-"PO-Revision-Date: 2013-09-20 14:45+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-09-30 10:17-0400\n"
+"PO-Revision-Date: 2013-09-30 12:15+0000\n"
+"Last-Translator: Cyryl Sochacki <cyrylsochacki@gmail.com>\n"
 "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -88,7 +88,7 @@ msgstr "Nie można uaktualnić aplikacji."
 
 #: changepassword/controller.php:20
 msgid "Wrong password"
-msgstr ""
+msgstr "Złe hasło"
 
 #: changepassword/controller.php:42
 msgid "No user supplied"
@@ -113,17 +113,17 @@ msgstr ""
 
 #: changepassword/controller.php:92 changepassword/controller.php:103
 msgid "Unable to change password"
-msgstr ""
+msgstr "Nie można zmienić hasła"
 
 #: js/apps.js:43
 msgid "Update to {appversion}"
 msgstr "Aktualizacja do {appversion}"
 
-#: js/apps.js:49 js/apps.js:82 js/apps.js:108
+#: js/apps.js:49 js/apps.js:82 js/apps.js:110
 msgid "Disable"
 msgstr "Wyłącz"
 
-#: js/apps.js:49 js/apps.js:89 js/apps.js:102 js/apps.js:117
+#: js/apps.js:49 js/apps.js:90 js/apps.js:103 js/apps.js:119
 msgid "Enable"
 msgstr "Włącz"
 
@@ -131,43 +131,43 @@ msgstr "Włącz"
 msgid "Please wait...."
 msgstr "Proszę czekać..."
 
-#: js/apps.js:79 js/apps.js:80 js/apps.js:100
+#: js/apps.js:79 js/apps.js:80 js/apps.js:101
 msgid "Error while disabling app"
 msgstr "Błąd podczas wyłączania aplikacji"
 
-#: js/apps.js:99 js/apps.js:112 js/apps.js:113
+#: js/apps.js:100 js/apps.js:114 js/apps.js:115
 msgid "Error while enabling app"
 msgstr "Błąd podczas włączania aplikacji"
 
-#: js/apps.js:123
+#: js/apps.js:125
 msgid "Updating...."
 msgstr "Aktualizacja w toku..."
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error while updating app"
 msgstr "Błąd podczas aktualizacji aplikacji"
 
-#: js/apps.js:126
+#: js/apps.js:128
 msgid "Error"
 msgstr "Błąd"
 
-#: js/apps.js:127 templates/apps.php:43
+#: js/apps.js:129 templates/apps.php:43
 msgid "Update"
 msgstr "Aktualizuj"
 
-#: js/apps.js:130
+#: js/apps.js:132
 msgid "Updated"
 msgstr "Zaktualizowano"
 
-#: js/personal.js:220
+#: js/personal.js:221
 msgid "Select a profile picture"
-msgstr ""
+msgstr "Wybierz zdjęcie profilu"
 
-#: js/personal.js:265
+#: js/personal.js:266
 msgid "Decrypting files... Please wait, this can take some time."
 msgstr "Odszyfrowuje pliki... Proszę czekać, to może zająć jakiś czas."
 
-#: js/personal.js:287
+#: js/personal.js:288
 msgid "Saving..."
 msgstr "Zapisywanie..."
 
@@ -495,15 +495,15 @@ msgstr "Zdjęcie profilu"
 
 #: templates/personal.php:90
 msgid "Upload new"
-msgstr ""
+msgstr "Wczytaj nowe"
 
 #: templates/personal.php:92
 msgid "Select new from Files"
-msgstr ""
+msgstr "Wybierz nowe z plików"
 
 #: templates/personal.php:93
 msgid "Remove image"
-msgstr ""
+msgstr "Usuń zdjęcie"
 
 #: templates/personal.php:94
 msgid "Either png or jpg. Ideally square but you will be able to crop it."
@@ -515,7 +515,7 @@ msgstr "Anuluj"
 
 #: templates/personal.php:98
 msgid "Choose as profile image"
-msgstr ""
+msgstr "Wybierz zdjęcie profilu"
 
 #: templates/personal.php:106 templates/personal.php:107
 msgid "Language"
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index afb3a410c4..687b168209 100644
--- a/l10n/templates/core.pot
+++ b/l10n/templates/core.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index 1e72820c52..5a5cf056be 100644
--- a/l10n/templates/files.pot
+++ b/l10n/templates/files.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"POT-Creation-Date: 2013-09-30 10:14-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot
index aea2b2282e..312f7f29bb 100644
--- a/l10n/templates/files_encryption.pot
+++ b/l10n/templates/files_encryption.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"POT-Creation-Date: 2013-09-30 10:15-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot
index ad32cfb2fc..0ec2c07091 100644
--- a/l10n/templates/files_external.pot
+++ b/l10n/templates/files_external.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot
index e9a596f361..77c296c9a7 100644
--- a/l10n/templates/files_sharing.pot
+++ b/l10n/templates/files_sharing.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot
index 044fb375df..b379edf9e9 100644
--- a/l10n/templates/files_trashbin.pot
+++ b/l10n/templates/files_trashbin.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot
index a61952105b..4d7bff6e8b 100644
--- a/l10n/templates/files_versions.pot
+++ b/l10n/templates/files_versions.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
index 2f54bdc233..cdaf465ab3 100644
--- a/l10n/templates/lib.pot
+++ b/l10n/templates/lib.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,38 +18,38 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: app.php:239
+#: app.php:237
 #, php-format
 msgid ""
 "App \"%s\" can't be installed because it is not compatible with this version "
 "of ownCloud."
 msgstr ""
 
-#: app.php:250
+#: app.php:248
 msgid "No app name specified"
 msgstr ""
 
-#: app.php:361
+#: app.php:352
 msgid "Help"
 msgstr ""
 
-#: app.php:374
+#: app.php:365
 msgid "Personal"
 msgstr ""
 
-#: app.php:385
+#: app.php:376
 msgid "Settings"
 msgstr ""
 
-#: app.php:397
+#: app.php:388
 msgid "Users"
 msgstr ""
 
-#: app.php:410
+#: app.php:401
 msgid "Admin"
 msgstr ""
 
-#: app.php:839
+#: app.php:832
 #, php-format
 msgid "Failed to upgrade \"%s\"."
 msgstr ""
@@ -277,6 +277,11 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
+#: tags.php:194
+#, php-format
+msgid "Could not find category \"%s\""
+msgstr ""
+
 #: template/functions.php:96
 msgid "seconds ago"
 msgstr ""
@@ -328,8 +333,3 @@ msgstr ""
 #: template.php:297
 msgid "Caused by:"
 msgstr ""
-
-#: vcategories.php:188 vcategories.php:249
-#, php-format
-msgid "Could not find category \"%s\""
-msgstr ""
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index a669dad822..af2b723680 100644
--- a/l10n/templates/settings.pot
+++ b/l10n/templates/settings.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"POT-Creation-Date: 2013-09-30 10:17-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot
index 0848d99353..ca738710f5 100644
--- a/l10n/templates/user_ldap.pot
+++ b/l10n/templates/user_ldap.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot
index ec5a60a6ec..d3a899a1fe 100644
--- a/l10n/templates/user_webdavauth.pot
+++ b/l10n/templates/user_webdavauth.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-09-29 00:02-0400\n"
+"POT-Creation-Date: 2013-09-30 10:16-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/lib/l10n/hu_HU.php b/lib/l10n/hu_HU.php
index 7ec7621a65..e944291cae 100644
--- a/lib/l10n/hu_HU.php
+++ b/lib/l10n/hu_HU.php
@@ -1,11 +1,14 @@
 <?php
 $TRANSLATIONS = array(
+"No app name specified" => "Nincs az alkalmazás név megadva.",
 "Help" => "Súgó",
 "Personal" => "Személyes",
 "Settings" => "Beállítások",
 "Users" => "Felhasználók",
 "Admin" => "Adminsztráció",
 "Failed to upgrade \"%s\"." => "Sikertelen Frissítés \"%s\".",
+"Unknown filetype" => "Ismeretlen file tipús",
+"Invalid image" => "Hibás kép",
 "web services under your control" => "webszolgáltatások saját kézben",
 "cannot open \"%s\"" => "nem sikerült megnyitni \"%s\"",
 "ZIP download is turned off." => "A ZIP-letöltés nincs engedélyezve.",
@@ -13,6 +16,10 @@ $TRANSLATIONS = array(
 "Back to Files" => "Vissza a Fájlokhoz",
 "Selected files too large to generate zip file." => "A kiválasztott fájlok túl nagyok a zip tömörítéshez.",
 "Download the files in smaller chunks, seperately or kindly ask your administrator." => "Tölts le a fileokat kisebb chunkokban, kölün vagy kérj segitséget a rendszergazdádtól.",
+"App does not provide an info.xml file" => "Az alkalmazás nem szolgáltatott info.xml file-t",
+"App can't be installed because it is not compatible with this version of ownCloud" => "Az alalmazás nem telepíthető, mert nem kompatibilis az ownClod ezzel a verziójával.",
+"App directory already exists" => "Az alkalmazás mappája már létezik",
+"Can't create app folder. Please fix permissions. %s" => "Nem lehetett létrehozni az alkalmzás mappáját. Kérlek ellenőrizd a jogosultásgokat. %s",
 "Application is not enabled" => "Az alkalmazás nincs engedélyezve",
 "Authentication error" => "Azonosítási hiba",
 "Token expired. Please reload page." => "A token lejárt. Frissítse az oldalt.",
@@ -39,6 +46,7 @@ $TRANSLATIONS = array(
 "Set an admin password." => "Állítson be egy jelszót az adminisztrációhoz.",
 "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Az Ön webkiszolgálója nincs megfelelően beállítva az állományok szinkronizálásához, mert a WebDAV-elérés úgy tűnik, nem működik.",
 "Please double check the <a href='%s'>installation guides</a>." => "Kérjük tüzetesen tanulmányozza át a <a href='%s'>telepítési útmutatót</a>.",
+"Could not find category \"%s\"" => "Ez a kategória nem található: \"%s\"",
 "seconds ago" => "pár másodperce",
 "_%n minute ago_::_%n minutes ago_" => array("",""),
 "_%n hour ago_::_%n hours ago_" => array("",""),
@@ -49,7 +57,6 @@ $TRANSLATIONS = array(
 "_%n month ago_::_%n months ago_" => array("",""),
 "last year" => "tavaly",
 "years ago" => "több éve",
-"Caused by:" => "Okozta:",
-"Could not find category \"%s\"" => "Ez a kategória nem található: \"%s\""
+"Caused by:" => "Okozta:"
 );
 $PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/l10n/ko.php b/lib/l10n/ko.php
index eec5be65ab..3ef39fefa6 100644
--- a/lib/l10n/ko.php
+++ b/lib/l10n/ko.php
@@ -8,12 +8,16 @@ $TRANSLATIONS = array(
 "Users" => "사용자",
 "Admin" => "관리자",
 "Failed to upgrade \"%s\"." => "\"%s\" 업그레이드에 실패했습니다.",
+"Custom profile pictures don't work with encryption yet" => "개개인의 프로필 사진은 아직은 암호화 되지 않습니다",
+"Unknown filetype" => "알수없는 파일형식",
+"Invalid image" => "잘못된 그림",
 "web services under your control" => "내가 관리하는 웹 서비스",
 "cannot open \"%s\"" => "\"%s\"을(를) 열 수 없습니다.",
 "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 파일을 생성하기에 너무 큽니다.",
+"Download the files in smaller chunks, seperately or kindly ask your administrator." => "작은 조각들 안에 들어있는 파일들을 받고자 하신다면, 나누어서 받으시거나 혹은 시스템 관리자에게 정중하게 물어보십시오",
 "No source specified when installing app" => "앱을 설치할 때 소스가 지정되지 않았습니다.",
 "No href specified when installing app from http" => "http에서 앱을 설치할 대 href가 지정되지 않았습니다.",
 "No path specified when installing app from local file" => "로컬 파일에서 앱을 설치할 때 경로가 지정되지 않았습니다.",
@@ -52,6 +56,7 @@ $TRANSLATIONS = array(
 "Set an admin password." => "관리자 비밀번호 설정",
 "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "WebDAV 인터페이스가 제대로 작동하지 않습니다. 웹 서버에서 파일 동기화를 사용할 수 있도록 설정이 제대로 되지 않은 것 같습니다.",
 "Please double check the <a href='%s'>installation guides</a>." => "<a href='%s'>설치 가이드</a>를 다시 한 번 확인하십시오.",
+"Could not find category \"%s\"" => "분류 \"%s\"을(를) 찾을 수 없습니다.",
 "seconds ago" => "초 전",
 "_%n minute ago_::_%n minutes ago_" => array("%n분 전 "),
 "_%n hour ago_::_%n hours ago_" => array("%n시간 전 "),
@@ -62,7 +67,6 @@ $TRANSLATIONS = array(
 "_%n month ago_::_%n months ago_" => array("%n달 전 "),
 "last year" => "작년",
 "years ago" => "년 전",
-"Caused by:" => "원인: ",
-"Could not find category \"%s\"" => "분류 \"%s\"을(를) 찾을 수 없습니다."
+"Caused by:" => "원인: "
 );
 $PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/lib/l10n/pl.php b/lib/l10n/pl.php
index 4acd735d69..270559b4e5 100644
--- a/lib/l10n/pl.php
+++ b/lib/l10n/pl.php
@@ -8,6 +8,9 @@ $TRANSLATIONS = array(
 "Users" => "Użytkownicy",
 "Admin" => "Administrator",
 "Failed to upgrade \"%s\"." => "Błąd przy aktualizacji \"%s\".",
+"Custom profile pictures don't work with encryption yet" => "Domyślny profil zdjęć nie działa z szyfrowaniem jeszcze",
+"Unknown filetype" => "Nieznany typ pliku",
+"Invalid image" => "Błędne zdjęcie",
 "web services under your control" => "Kontrolowane serwisy",
 "cannot open \"%s\"" => "Nie można otworzyć \"%s\"",
 "ZIP download is turned off." => "Pobieranie ZIP jest wyłączone.",
@@ -53,6 +56,7 @@ $TRANSLATIONS = array(
 "Set an admin password." => "Ustaw hasło administratora.",
 "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Serwer internetowy nie jest jeszcze poprawnie skonfigurowany, aby umożliwić synchronizację plików, ponieważ interfejs WebDAV wydaje się być uszkodzony.",
 "Please double check the <a href='%s'>installation guides</a>." => "Sprawdź ponownie <a href='%s'>przewodniki instalacji</a>.",
+"Could not find category \"%s\"" => "Nie można odnaleźć kategorii \"%s\"",
 "seconds ago" => "sekund temu",
 "_%n minute ago_::_%n minutes ago_" => array("%n minute temu","%n minut temu","%n minut temu"),
 "_%n hour ago_::_%n hours ago_" => array("%n godzinę temu","%n godzin temu","%n godzin temu"),
@@ -63,7 +67,6 @@ $TRANSLATIONS = array(
 "_%n month ago_::_%n months ago_" => array("%n miesiąc temu","%n miesięcy temu","%n miesięcy temu"),
 "last year" => "w zeszłym roku",
 "years ago" => "lat temu",
-"Caused by:" => "Spowodowane przez:",
-"Could not find category \"%s\"" => "Nie można odnaleźć kategorii \"%s\""
+"Caused by:" => "Spowodowane przez:"
 );
 $PLURAL_FORMS = "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/settings/l10n/hu_HU.php b/settings/l10n/hu_HU.php
index f31826c149..cba844e781 100644
--- a/settings/l10n/hu_HU.php
+++ b/settings/l10n/hu_HU.php
@@ -16,15 +16,25 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "A felhasználó nem adható hozzá ehhez a csoporthoz: %s",
 "Unable to remove user from group %s" => "A felhasználó nem távolítható el ebből a csoportból: %s",
 "Couldn't update app." => "A program frissítése nem sikerült.",
+"Wrong password" => "Hibás jelszó",
+"No user supplied" => "Nincs felhasználó által mellékelve",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Add meg az admin helyreállító jelszót, máskülönben az összes felhasználói adat elveszik.",
+"Wrong admin recovery password. Please check the password and try again." => "Hibás admin helyreállítási jelszó. Ellenörizd a jelszót és próbáld újra.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "A back-end nem támogatja a jelszó módosítást, de felhasználó titkosítási kulcsa sikeresen frissítve lett.",
+"Unable to change password" => "Nem sikerült megváltoztatni a jelszót",
 "Update to {appversion}" => "Frissítés erre a verzióra: {appversion}",
 "Disable" => "Letiltás",
 "Enable" => "engedélyezve",
 "Please wait...." => "Kérem várjon...",
+"Error while disabling app" => "Hiba az alkalmazás kikapcsolása közben",
+"Error while enabling app" => "Hiba az alalmazás engedélyezése közben",
 "Updating...." => "Frissítés folyamatban...",
 "Error while updating app" => "Hiba történt a programfrissítés közben",
 "Error" => "Hiba",
 "Update" => "Frissítés",
 "Updated" => "Frissítve",
+"Select a profile picture" => "Válassz profil képet",
+"Decrypting files... Please wait, this can take some time." => "File-ok kititkosítása folyamatban... Kérlek várj, ez hosszabb ideig is eltarthat ...",
 "Saving..." => "Mentés...",
 "deleted" => "törölve",
 "undo" => "visszavonás",
@@ -98,11 +108,20 @@ $TRANSLATIONS = array(
 "Your email address" => "Az Ön email címe",
 "Fill in an email address to enable password recovery" => "Adja meg az email címét, hogy jelszó-emlékeztetőt kérhessen, ha elfelejtette a jelszavát!",
 "Profile picture" => "Profilkép",
+"Upload new" => "Új feltöltése",
+"Select new from Files" => "Új kiválasztása Fileokból",
+"Remove image" => "Kép eltávolítása",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Egyaránt png vagy jpg. Az ideális ha négyzet alaku, de késöbb még átszabható",
+"Abort" => "Megszakítás",
+"Choose as profile image" => "Válassz profil képet",
 "Language" => "Nyelv",
 "Help translate" => "Segítsen a fordításban!",
 "WebDAV" => "WebDAV",
 "Use this address to <a href=\"%s/server/5.0/user_manual/files/files.html\" target=\"_blank\">access your Files via WebDAV</a>" => "Ezt a címet használja, ha <a href=\"%s/server/5.0/user_manual/files/files.html\" target=\"_blank\">WebDAV-on keresztül szeretné elérni az állományait</a>",
 "Encryption" => "Titkosítás",
+"The encryption app is no longer enabled, decrypt all your file" => "A titkosító alkalmzás a továbbiakban nincs engedélyezve, kititkosítja az összes fileodat",
+"Log-in password" => "Bejelentkezési jelszó",
+"Decrypt all Files" => "Kititkosítja az összes file-t",
 "Login Name" => "Bejelentkezési név",
 "Create" => "Létrehozás",
 "Admin Recovery Password" => "A jelszóvisszaállítás adminisztrációja",
diff --git a/settings/l10n/ja_JP.php b/settings/l10n/ja_JP.php
index 12784e3f53..bfaa9827b2 100644
--- a/settings/l10n/ja_JP.php
+++ b/settings/l10n/ja_JP.php
@@ -16,6 +16,12 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "ユーザをグループ %s に追加できません",
 "Unable to remove user from group %s" => "ユーザをグループ %s から削除できません",
 "Couldn't update app." => "アプリを更新出来ませんでした。",
+"Wrong password" => "無効なパスワード",
+"No user supplied" => "ユーザが指定されていません",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "復元用の管理者パスワードを入力してください。そうでない場合は、全ユーザのデータが失われます。",
+"Wrong admin recovery password. Please check the password and try again." => "無効な復元用の管理者パスワード。パスワードを確認して再度実行してください。",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "バックエンドはパスワード変更をサポートしていませんが、ユーザの暗号化キーは正常に更新されました。",
+"Unable to change password" => "パスワードを変更できません",
 "Update to {appversion}" => "{appversion} に更新",
 "Disable" => "無効",
 "Enable" => "有効化",
@@ -102,7 +108,10 @@ $TRANSLATIONS = array(
 "Your email address" => "あなたのメールアドレス",
 "Fill in an email address to enable password recovery" => "※パスワード回復を有効にするにはメールアドレスの入力が必要です",
 "Profile picture" => "プロフィール写真",
+"Upload new" => "新規にアップロード",
+"Select new from Files" => "ファイルから新規に選択",
 "Remove image" => "画像を削除",
+"Either png or jpg. Ideally square but you will be able to crop it." => "png と jpg のいずれか。正方形が理想ですが、切り取って加工することも可能です。",
 "Abort" => "中止",
 "Choose as profile image" => "プロファイル画像として選択",
 "Language" => "言語",
diff --git a/settings/l10n/lt_LT.php b/settings/l10n/lt_LT.php
index a23d21ed7f..df0247fc27 100644
--- a/settings/l10n/lt_LT.php
+++ b/settings/l10n/lt_LT.php
@@ -16,6 +16,12 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Nepavyko pridėti vartotojo prie grupės %s",
 "Unable to remove user from group %s" => "Nepavyko ištrinti vartotojo iš grupės %s",
 "Couldn't update app." => "Nepavyko atnaujinti programos.",
+"Wrong password" => "Neteisingas slaptažodis",
+"No user supplied" => "Nepateiktas naudotojas",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Prašome įvesti administratoriaus atkūrimo slaptažodį, kitaip visi naudotojo suomenys bus prarasti",
+"Wrong admin recovery password. Please check the password and try again." => "Netinkamas administratoriau atkūrimo slaptažodis. Prašome pasitikrinti ir bandyti vėl.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Sistema nepalaiko slaptažodžio keitimo, bet naudotojo šifravimo raktas buvo sėkmingai atnaujintas.",
+"Unable to change password" => "Nepavyksta pakeisti slaptažodžio",
 "Update to {appversion}" => "Atnaujinti iki {appversion}",
 "Disable" => "Išjungti",
 "Enable" => "Įjungti",
diff --git a/settings/l10n/pl.php b/settings/l10n/pl.php
index d07d1f7a4d..6cce72df4b 100644
--- a/settings/l10n/pl.php
+++ b/settings/l10n/pl.php
@@ -16,6 +16,8 @@ $TRANSLATIONS = array(
 "Unable to add user to group %s" => "Nie można dodać użytkownika do grupy %s",
 "Unable to remove user from group %s" => "Nie można usunąć użytkownika z grupy %s",
 "Couldn't update app." => "Nie można uaktualnić aplikacji.",
+"Wrong password" => "Złe hasło",
+"Unable to change password" => "Nie można zmienić hasła",
 "Update to {appversion}" => "Aktualizacja do {appversion}",
 "Disable" => "Wyłącz",
 "Enable" => "Włącz",
@@ -27,6 +29,7 @@ $TRANSLATIONS = array(
 "Error" => "Błąd",
 "Update" => "Aktualizuj",
 "Updated" => "Zaktualizowano",
+"Select a profile picture" => "Wybierz zdjęcie profilu",
 "Decrypting files... Please wait, this can take some time." => "Odszyfrowuje pliki... Proszę czekać, to może zająć jakiś czas.",
 "Saving..." => "Zapisywanie...",
 "deleted" => "usunięto",
@@ -101,7 +104,11 @@ $TRANSLATIONS = array(
 "Your email address" => "Twój adres e-mail",
 "Fill in an email address to enable password recovery" => "Podaj adres e-mail, aby uzyskać możliwość odzyskania hasła",
 "Profile picture" => "Zdjęcie profilu",
+"Upload new" => "Wczytaj nowe",
+"Select new from Files" => "Wybierz nowe z plików",
+"Remove image" => "Usuń zdjęcie",
 "Abort" => "Anuluj",
+"Choose as profile image" => "Wybierz zdjęcie profilu",
 "Language" => "Język",
 "Help translate" => "Pomóż w tłumaczeniu",
 "WebDAV" => "WebDAV",
-- 
GitLab


From 9c9dc276b7a1d2592c4fb0a887888632dc1f1e29 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 25 Sep 2013 13:36:30 +0200
Subject: [PATCH 241/248] move the private namespace OC into lib/private - OCP
 will stay in lib/public

Conflicts:
	lib/private/vcategories.php
---
 lib/autoloader.php                                     |  6 +++---
 lib/base.php                                           |  2 +-
 lib/{ => private}/allconfig.php                        |  0
 lib/{ => private}/api.php                              |  0
 lib/{ => private}/app.php                              |  0
 lib/{ => private}/appconfig.php                        |  0
 lib/{ => private}/appframework/app.php                 |  0
 .../appframework/controller/controller.php             |  0
 lib/{ => private}/appframework/core/api.php            |  0
 .../appframework/dependencyinjection/dicontainer.php   |  0
 lib/{ => private}/appframework/http/dispatcher.php     |  0
 .../appframework/http/downloadresponse.php             |  0
 lib/{ => private}/appframework/http/http.php           |  0
 .../appframework/http/redirectresponse.php             |  0
 lib/{ => private}/appframework/http/request.php        |  0
 .../appframework/middleware/middleware.php             |  0
 .../appframework/middleware/middlewaredispatcher.php   |  0
 .../middleware/security/securityexception.php          |  0
 .../middleware/security/securitymiddleware.php         |  0
 .../appframework/routing/routeactionhandler.php        |  0
 lib/{ => private}/appframework/routing/routeconfig.php |  0
 .../appframework/utility/methodannotationreader.php    |  0
 .../appframework/utility/simplecontainer.php           |  2 +-
 lib/{ => private}/appframework/utility/timefactory.php |  0
 lib/{ => private}/archive.php                          |  0
 lib/{ => private}/archive/tar.php                      |  0
 lib/{ => private}/archive/zip.php                      |  0
 lib/{ => private}/arrayparser.php                      |  0
 lib/{ => private}/avatar.php                           |  0
 lib/{ => private}/backgroundjob.php                    |  0
 lib/{ => private}/backgroundjob/job.php                |  0
 lib/{ => private}/backgroundjob/joblist.php            |  0
 lib/{ => private}/backgroundjob/legacy/queuedjob.php   |  0
 lib/{ => private}/backgroundjob/legacy/regularjob.php  |  0
 lib/{ => private}/backgroundjob/queuedjob.php          |  0
 lib/{ => private}/backgroundjob/timedjob.php           |  0
 lib/{ => private}/cache.php                            |  0
 lib/{ => private}/cache/broker.php                     |  0
 lib/{ => private}/cache/file.php                       |  0
 lib/{ => private}/cache/fileglobal.php                 |  0
 lib/{ => private}/cache/fileglobalgc.php               |  0
 lib/{ => private}/cache/usercache.php                  |  0
 lib/{ => private}/config.php                           |  0
 .../connector/sabre/ServiceUnavailable.php             |  0
 lib/{ => private}/connector/sabre/auth.php             |  0
 lib/{ => private}/connector/sabre/directory.php        |  0
 lib/{ => private}/connector/sabre/file.php             |  0
 lib/{ => private}/connector/sabre/locks.php            |  0
 .../connector/sabre/maintenanceplugin.php              |  0
 lib/{ => private}/connector/sabre/node.php             |  0
 lib/{ => private}/connector/sabre/objecttree.php       |  0
 lib/{ => private}/connector/sabre/principal.php        |  0
 lib/{ => private}/connector/sabre/quotaplugin.php      |  0
 lib/{ => private}/connector/sabre/request.php          |  0
 lib/{ => private}/contactsmanager.php                  |  0
 lib/{ => private}/db.php                               |  0
 lib/{ => private}/db/adapter.php                       |  0
 lib/{ => private}/db/adapteroci8.php                   |  0
 lib/{ => private}/db/adapterpgsql.php                  |  0
 lib/{ => private}/db/adaptersqlite.php                 |  0
 lib/{ => private}/db/adaptersqlsrv.php                 |  0
 lib/{ => private}/db/connection.php                    |  0
 lib/{ => private}/db/mdb2schemamanager.php             |  0
 lib/{ => private}/db/mdb2schemareader.php              |  0
 lib/{ => private}/db/mdb2schemawriter.php              |  0
 lib/{ => private}/db/oracleconnection.php              |  0
 lib/{ => private}/db/statementwrapper.php              |  0
 lib/{ => private}/defaults.php                         |  0
 lib/{ => private}/eventsource.php                      |  0
 lib/{ => private}/filechunking.php                     |  0
 lib/{ => private}/fileproxy.php                        |  0
 lib/{ => private}/fileproxy/fileoperations.php         |  0
 lib/{ => private}/files.php                            |  0
 lib/{ => private}/files/cache/backgroundwatcher.php    |  0
 lib/{ => private}/files/cache/cache.php                |  0
 lib/{ => private}/files/cache/legacy.php               |  0
 lib/{ => private}/files/cache/permissions.php          |  0
 lib/{ => private}/files/cache/scanner.php              |  0
 lib/{ => private}/files/cache/storage.php              |  0
 lib/{ => private}/files/cache/updater.php              |  0
 lib/{ => private}/files/cache/upgrade.php              |  0
 lib/{ => private}/files/cache/watcher.php              |  0
 lib/{ => private}/files/filesystem.php                 |  0
 lib/{ => private}/files/mapper.php                     |  0
 lib/{ => private}/files/mount/manager.php              |  0
 lib/{ => private}/files/mount/mount.php                |  0
 lib/{ => private}/files/node/file.php                  |  0
 lib/{ => private}/files/node/folder.php                |  0
 lib/{ => private}/files/node/node.php                  |  0
 lib/{ => private}/files/node/nonexistingfile.php       |  0
 lib/{ => private}/files/node/nonexistingfolder.php     |  0
 lib/{ => private}/files/node/root.php                  |  0
 lib/{ => private}/files/storage/common.php             |  0
 lib/{ => private}/files/storage/commontest.php         |  0
 lib/{ => private}/files/storage/loader.php             |  0
 lib/{ => private}/files/storage/local.php              |  0
 lib/{ => private}/files/storage/mappedlocal.php        |  0
 lib/{ => private}/files/storage/storage.php            |  0
 lib/{ => private}/files/storage/temporary.php          |  0
 lib/{ => private}/files/storage/wrapper/quota.php      |  0
 lib/{ => private}/files/storage/wrapper/wrapper.php    |  0
 lib/{ => private}/files/stream/close.php               |  0
 lib/{ => private}/files/stream/dir.php                 |  0
 lib/{ => private}/files/stream/oc.php                  |  0
 lib/{ => private}/files/stream/quota.php               |  0
 lib/{ => private}/files/stream/staticstream.php        |  0
 lib/{ => private}/files/type/detection.php             |  0
 lib/{ => private}/files/type/templatemanager.php       |  0
 lib/{ => private}/files/utils/scanner.php              |  0
 lib/{ => private}/files/view.php                       |  0
 lib/{ => private}/geo.php                              |  0
 lib/{ => private}/group.php                            |  0
 lib/{ => private}/group/backend.php                    |  0
 lib/{ => private}/group/database.php                   |  0
 lib/{ => private}/group/dummy.php                      |  0
 lib/{ => private}/group/example.php                    |  0
 lib/{ => private}/group/group.php                      |  0
 lib/{ => private}/group/interface.php                  |  0
 lib/{ => private}/group/manager.php                    |  0
 lib/{ => private}/helper.php                           |  0
 lib/{ => private}/hintexception.php                    |  0
 lib/{ => private}/hook.php                             |  0
 lib/{ => private}/hooks/basicemitter.php               |  0
 lib/{ => private}/hooks/emitter.php                    |  0
 lib/{ => private}/hooks/forwardingemitter.php          |  0
 lib/{ => private}/hooks/legacyemitter.php              |  0
 lib/{ => private}/hooks/publicemitter.php              |  0
 lib/{ => private}/image.php                            |  0
 lib/{ => private}/installer.php                        |  0
 lib/{ => private}/json.php                             |  0
 lib/{ => private}/l10n.php                             |  0
 lib/{ => private}/l10n/ach.php                         |  0
 lib/{ => private}/l10n/af_ZA.php                       |  0
 lib/{ => private}/l10n/ar.php                          |  0
 lib/{ => private}/l10n/be.php                          |  0
 lib/{ => private}/l10n/bg_BG.php                       |  0
 lib/{ => private}/l10n/bn_BD.php                       |  0
 lib/{ => private}/l10n/bs.php                          |  0
 lib/{ => private}/l10n/ca.php                          |  0
 lib/{ => private}/l10n/cs_CZ.php                       |  0
 lib/{ => private}/l10n/cy_GB.php                       |  0
 lib/{ => private}/l10n/da.php                          |  0
 lib/{ => private}/l10n/de.php                          |  0
 lib/{ => private}/l10n/de_AT.php                       |  0
 lib/{ => private}/l10n/de_CH.php                       |  0
 lib/{ => private}/l10n/de_DE.php                       |  0
 lib/{ => private}/l10n/el.php                          |  0
 lib/{ => private}/l10n/en@pirate.php                   |  0
 lib/{ => private}/l10n/en_GB.php                       |  0
 lib/{ => private}/l10n/eo.php                          |  0
 lib/{ => private}/l10n/es.php                          |  0
 lib/{ => private}/l10n/es_AR.php                       |  0
 lib/{ => private}/l10n/es_MX.php                       |  0
 lib/{ => private}/l10n/et_EE.php                       |  0
 lib/{ => private}/l10n/eu.php                          |  0
 lib/{ => private}/l10n/fa.php                          |  0
 lib/{ => private}/l10n/fi.php                          |  0
 lib/{ => private}/l10n/fi_FI.php                       |  0
 lib/{ => private}/l10n/fr.php                          |  0
 lib/{ => private}/l10n/gl.php                          |  0
 lib/{ => private}/l10n/he.php                          |  0
 lib/{ => private}/l10n/hi.php                          |  0
 lib/{ => private}/l10n/hr.php                          |  0
 lib/{ => private}/l10n/hu_HU.php                       |  0
 lib/{ => private}/l10n/hy.php                          |  0
 lib/{ => private}/l10n/ia.php                          |  0
 lib/{ => private}/l10n/id.php                          |  0
 lib/{ => private}/l10n/is.php                          |  0
 lib/{ => private}/l10n/it.php                          |  0
 lib/{ => private}/l10n/ja_JP.php                       |  0
 lib/{ => private}/l10n/ka.php                          |  0
 lib/{ => private}/l10n/ka_GE.php                       |  0
 lib/{ => private}/l10n/km.php                          |  0
 lib/{ => private}/l10n/kn.php                          |  0
 lib/{ => private}/l10n/ko.php                          |  0
 lib/{ => private}/l10n/ku_IQ.php                       |  0
 lib/{ => private}/l10n/lb.php                          |  0
 lib/{ => private}/l10n/lt_LT.php                       |  0
 lib/{ => private}/l10n/lv.php                          |  0
 lib/{ => private}/l10n/mk.php                          |  0
 lib/{ => private}/l10n/ml_IN.php                       |  0
 lib/{ => private}/l10n/ms_MY.php                       |  0
 lib/{ => private}/l10n/my_MM.php                       |  0
 lib/{ => private}/l10n/nb_NO.php                       |  0
 lib/{ => private}/l10n/ne.php                          |  0
 lib/{ => private}/l10n/nl.php                          |  0
 lib/{ => private}/l10n/nn_NO.php                       |  0
 lib/{ => private}/l10n/nqo.php                         |  0
 lib/{ => private}/l10n/oc.php                          |  0
 lib/{ => private}/l10n/pa.php                          |  0
 lib/{ => private}/l10n/pl.php                          |  0
 lib/{ => private}/l10n/pl_PL.php                       |  0
 lib/{ => private}/l10n/pt_BR.php                       |  0
 lib/{ => private}/l10n/pt_PT.php                       |  0
 lib/{ => private}/l10n/ro.php                          |  0
 lib/{ => private}/l10n/ru.php                          |  0
 lib/{ => private}/l10n/si_LK.php                       |  0
 lib/{ => private}/l10n/sk.php                          |  0
 lib/{ => private}/l10n/sk_SK.php                       |  0
 lib/{ => private}/l10n/sl.php                          |  0
 lib/{ => private}/l10n/sq.php                          |  0
 lib/{ => private}/l10n/sr.php                          |  0
 lib/{ => private}/l10n/sr@latin.php                    |  0
 lib/{ => private}/l10n/string.php                      |  0
 lib/{ => private}/l10n/sv.php                          |  0
 lib/{ => private}/l10n/sw_KE.php                       |  0
 lib/{ => private}/l10n/ta_LK.php                       |  0
 lib/{ => private}/l10n/te.php                          |  0
 lib/{ => private}/l10n/th_TH.php                       |  0
 lib/{ => private}/l10n/tr.php                          |  0
 lib/{ => private}/l10n/ug.php                          |  0
 lib/{ => private}/l10n/uk.php                          |  0
 lib/{ => private}/l10n/ur_PK.php                       |  0
 lib/{ => private}/l10n/vi.php                          |  0
 lib/{ => private}/l10n/zh_CN.php                       |  0
 lib/{ => private}/l10n/zh_HK.php                       |  0
 lib/{ => private}/l10n/zh_TW.php                       |  0
 lib/{ => private}/legacy/cache.php                     |  0
 lib/{ => private}/legacy/config.php                    |  0
 lib/{ => private}/legacy/filesystem.php                |  0
 lib/{ => private}/legacy/filesystemview.php            |  0
 lib/{ => private}/legacy/log.php                       |  0
 lib/{ => private}/legacy/preferences.php               |  0
 lib/{ => private}/legacy/updater.php                   |  0
 lib/{ => private}/log.php                              |  0
 lib/{ => private}/log/errorhandler.php                 |  0
 lib/{ => private}/log/owncloud.php                     |  0
 lib/{ => private}/log/rotate.php                       |  0
 lib/{ => private}/log/syslog.php                       |  0
 lib/{ => private}/mail.php                             |  0
 lib/{ => private}/memcache/apc.php                     |  0
 lib/{ => private}/memcache/apcu.php                    |  0
 lib/{ => private}/memcache/cache.php                   |  0
 lib/{ => private}/memcache/factory.php                 |  0
 lib/{ => private}/memcache/memcached.php               |  0
 lib/{ => private}/memcache/xcache.php                  |  0
 lib/{ => private}/migrate.php                          |  0
 lib/{ => private}/migration/content.php                |  0
 lib/{ => private}/migration/provider.php               |  0
 lib/{ => private}/mimetypes.list.php                   |  0
 lib/{ => private}/minimizer.php                        |  0
 lib/{ => private}/minimizer/css.php                    |  0
 lib/{ => private}/minimizer/js.php                     |  0
 lib/{ => private}/navigationmanager.php                |  0
 lib/{ => private}/notsquareexception.php               |  0
 lib/{ => private}/ocs.php                              |  0
 lib/{ => private}/ocs/cloud.php                        |  0
 lib/{ => private}/ocs/config.php                       |  0
 lib/{ => private}/ocs/person.php                       |  0
 lib/{ => private}/ocs/privatedata.php                  |  0
 lib/{ => private}/ocs/result.php                       |  0
 lib/{ => private}/ocsclient.php                        |  0
 lib/{ => private}/preferences.php                      |  0
 lib/{ => private}/preview.php                          |  0
 lib/{ => private}/preview/image.php                    |  0
 lib/{ => private}/preview/movies.php                   |  0
 lib/{ => private}/preview/mp3.php                      |  0
 lib/{ => private}/preview/office-cl.php                |  0
 lib/{ => private}/preview/office-fallback.php          |  0
 lib/{ => private}/preview/office.php                   |  0
 lib/{ => private}/preview/pdf.php                      |  0
 lib/{ => private}/preview/provider.php                 |  0
 lib/{ => private}/preview/svg.php                      |  0
 lib/{ => private}/preview/txt.php                      |  0
 lib/{ => private}/preview/unknown.php                  |  0
 lib/{ => private}/previewmanager.php                   |  0
 lib/{ => private}/request.php                          |  0
 lib/{ => private}/response.php                         |  0
 lib/{ => private}/route.php                            |  0
 lib/{ => private}/router.php                           |  0
 lib/{ => private}/search.php                           |  0
 lib/{ => private}/search/provider.php                  |  0
 lib/{ => private}/search/provider/file.php             |  0
 lib/{ => private}/search/result.php                    |  0
 lib/{ => private}/server.php                           |  0
 lib/{ => private}/session/internal.php                 |  0
 lib/{ => private}/session/memory.php                   |  0
 lib/{ => private}/session/session.php                  |  0
 lib/{ => private}/setup.php                            |  0
 lib/{ => private}/setup/abstractdatabase.php           |  0
 lib/{ => private}/setup/mssql.php                      |  0
 lib/{ => private}/setup/mysql.php                      |  0
 lib/{ => private}/setup/oci.php                        |  0
 lib/{ => private}/setup/postgresql.php                 |  0
 lib/{ => private}/setup/sqlite.php                     |  0
 lib/{ => private}/subadmin.php                         |  0
 lib/{ => private}/template.php                         |  0
 lib/{ => private}/template/base.php                    |  0
 lib/{ => private}/template/cssresourcelocator.php      |  0
 lib/{ => private}/template/functions.php               |  0
 lib/{ => private}/template/jsresourcelocator.php       |  0
 lib/{ => private}/template/resourcelocator.php         |  0
 lib/{ => private}/template/templatefilelocator.php     |  0
 lib/{ => private}/templatelayout.php                   |  0
 lib/{ => private}/updater.php                          |  0
 lib/{ => private}/user.php                             |  0
 lib/{ => private}/user/backend.php                     |  0
 lib/{ => private}/user/database.php                    |  0
 lib/{ => private}/user/dummy.php                       |  0
 lib/{ => private}/user/example.php                     |  0
 lib/{ => private}/user/http.php                        |  0
 lib/{ => private}/user/interface.php                   |  0
 lib/{ => private}/user/manager.php                     |  0
 lib/{ => private}/user/session.php                     |  0
 lib/{ => private}/user/user.php                        |  0
 lib/{ => private}/util.php                             |  0
 lib/{ => private}/vobject.php                          |  0
 lib/{ => private}/vobject/compoundproperty.php         |  0
 lib/{ => private}/vobject/stringproperty.php           |  0
 tests/lib/autoloader.php                               | 10 +++++-----
 310 files changed, 10 insertions(+), 10 deletions(-)
 rename lib/{ => private}/allconfig.php (100%)
 rename lib/{ => private}/api.php (100%)
 rename lib/{ => private}/app.php (100%)
 rename lib/{ => private}/appconfig.php (100%)
 rename lib/{ => private}/appframework/app.php (100%)
 rename lib/{ => private}/appframework/controller/controller.php (100%)
 rename lib/{ => private}/appframework/core/api.php (100%)
 rename lib/{ => private}/appframework/dependencyinjection/dicontainer.php (100%)
 rename lib/{ => private}/appframework/http/dispatcher.php (100%)
 rename lib/{ => private}/appframework/http/downloadresponse.php (100%)
 rename lib/{ => private}/appframework/http/http.php (100%)
 rename lib/{ => private}/appframework/http/redirectresponse.php (100%)
 rename lib/{ => private}/appframework/http/request.php (100%)
 rename lib/{ => private}/appframework/middleware/middleware.php (100%)
 rename lib/{ => private}/appframework/middleware/middlewaredispatcher.php (100%)
 rename lib/{ => private}/appframework/middleware/security/securityexception.php (100%)
 rename lib/{ => private}/appframework/middleware/security/securitymiddleware.php (100%)
 rename lib/{ => private}/appframework/routing/routeactionhandler.php (100%)
 rename lib/{ => private}/appframework/routing/routeconfig.php (100%)
 rename lib/{ => private}/appframework/utility/methodannotationreader.php (100%)
 rename lib/{ => private}/appframework/utility/simplecontainer.php (94%)
 rename lib/{ => private}/appframework/utility/timefactory.php (100%)
 rename lib/{ => private}/archive.php (100%)
 rename lib/{ => private}/archive/tar.php (100%)
 rename lib/{ => private}/archive/zip.php (100%)
 rename lib/{ => private}/arrayparser.php (100%)
 rename lib/{ => private}/avatar.php (100%)
 rename lib/{ => private}/backgroundjob.php (100%)
 rename lib/{ => private}/backgroundjob/job.php (100%)
 rename lib/{ => private}/backgroundjob/joblist.php (100%)
 rename lib/{ => private}/backgroundjob/legacy/queuedjob.php (100%)
 rename lib/{ => private}/backgroundjob/legacy/regularjob.php (100%)
 rename lib/{ => private}/backgroundjob/queuedjob.php (100%)
 rename lib/{ => private}/backgroundjob/timedjob.php (100%)
 rename lib/{ => private}/cache.php (100%)
 rename lib/{ => private}/cache/broker.php (100%)
 rename lib/{ => private}/cache/file.php (100%)
 rename lib/{ => private}/cache/fileglobal.php (100%)
 rename lib/{ => private}/cache/fileglobalgc.php (100%)
 rename lib/{ => private}/cache/usercache.php (100%)
 rename lib/{ => private}/config.php (100%)
 rename lib/{ => private}/connector/sabre/ServiceUnavailable.php (100%)
 rename lib/{ => private}/connector/sabre/auth.php (100%)
 rename lib/{ => private}/connector/sabre/directory.php (100%)
 rename lib/{ => private}/connector/sabre/file.php (100%)
 rename lib/{ => private}/connector/sabre/locks.php (100%)
 rename lib/{ => private}/connector/sabre/maintenanceplugin.php (100%)
 rename lib/{ => private}/connector/sabre/node.php (100%)
 rename lib/{ => private}/connector/sabre/objecttree.php (100%)
 rename lib/{ => private}/connector/sabre/principal.php (100%)
 rename lib/{ => private}/connector/sabre/quotaplugin.php (100%)
 rename lib/{ => private}/connector/sabre/request.php (100%)
 rename lib/{ => private}/contactsmanager.php (100%)
 rename lib/{ => private}/db.php (100%)
 rename lib/{ => private}/db/adapter.php (100%)
 rename lib/{ => private}/db/adapteroci8.php (100%)
 rename lib/{ => private}/db/adapterpgsql.php (100%)
 rename lib/{ => private}/db/adaptersqlite.php (100%)
 rename lib/{ => private}/db/adaptersqlsrv.php (100%)
 rename lib/{ => private}/db/connection.php (100%)
 rename lib/{ => private}/db/mdb2schemamanager.php (100%)
 rename lib/{ => private}/db/mdb2schemareader.php (100%)
 rename lib/{ => private}/db/mdb2schemawriter.php (100%)
 rename lib/{ => private}/db/oracleconnection.php (100%)
 rename lib/{ => private}/db/statementwrapper.php (100%)
 rename lib/{ => private}/defaults.php (100%)
 rename lib/{ => private}/eventsource.php (100%)
 rename lib/{ => private}/filechunking.php (100%)
 rename lib/{ => private}/fileproxy.php (100%)
 rename lib/{ => private}/fileproxy/fileoperations.php (100%)
 rename lib/{ => private}/files.php (100%)
 rename lib/{ => private}/files/cache/backgroundwatcher.php (100%)
 rename lib/{ => private}/files/cache/cache.php (100%)
 rename lib/{ => private}/files/cache/legacy.php (100%)
 rename lib/{ => private}/files/cache/permissions.php (100%)
 rename lib/{ => private}/files/cache/scanner.php (100%)
 rename lib/{ => private}/files/cache/storage.php (100%)
 rename lib/{ => private}/files/cache/updater.php (100%)
 rename lib/{ => private}/files/cache/upgrade.php (100%)
 rename lib/{ => private}/files/cache/watcher.php (100%)
 rename lib/{ => private}/files/filesystem.php (100%)
 rename lib/{ => private}/files/mapper.php (100%)
 rename lib/{ => private}/files/mount/manager.php (100%)
 rename lib/{ => private}/files/mount/mount.php (100%)
 rename lib/{ => private}/files/node/file.php (100%)
 rename lib/{ => private}/files/node/folder.php (100%)
 rename lib/{ => private}/files/node/node.php (100%)
 rename lib/{ => private}/files/node/nonexistingfile.php (100%)
 rename lib/{ => private}/files/node/nonexistingfolder.php (100%)
 rename lib/{ => private}/files/node/root.php (100%)
 rename lib/{ => private}/files/storage/common.php (100%)
 rename lib/{ => private}/files/storage/commontest.php (100%)
 rename lib/{ => private}/files/storage/loader.php (100%)
 rename lib/{ => private}/files/storage/local.php (100%)
 rename lib/{ => private}/files/storage/mappedlocal.php (100%)
 rename lib/{ => private}/files/storage/storage.php (100%)
 rename lib/{ => private}/files/storage/temporary.php (100%)
 rename lib/{ => private}/files/storage/wrapper/quota.php (100%)
 rename lib/{ => private}/files/storage/wrapper/wrapper.php (100%)
 rename lib/{ => private}/files/stream/close.php (100%)
 rename lib/{ => private}/files/stream/dir.php (100%)
 rename lib/{ => private}/files/stream/oc.php (100%)
 rename lib/{ => private}/files/stream/quota.php (100%)
 rename lib/{ => private}/files/stream/staticstream.php (100%)
 rename lib/{ => private}/files/type/detection.php (100%)
 rename lib/{ => private}/files/type/templatemanager.php (100%)
 rename lib/{ => private}/files/utils/scanner.php (100%)
 rename lib/{ => private}/files/view.php (100%)
 rename lib/{ => private}/geo.php (100%)
 rename lib/{ => private}/group.php (100%)
 rename lib/{ => private}/group/backend.php (100%)
 rename lib/{ => private}/group/database.php (100%)
 rename lib/{ => private}/group/dummy.php (100%)
 rename lib/{ => private}/group/example.php (100%)
 rename lib/{ => private}/group/group.php (100%)
 rename lib/{ => private}/group/interface.php (100%)
 rename lib/{ => private}/group/manager.php (100%)
 rename lib/{ => private}/helper.php (100%)
 rename lib/{ => private}/hintexception.php (100%)
 rename lib/{ => private}/hook.php (100%)
 rename lib/{ => private}/hooks/basicemitter.php (100%)
 rename lib/{ => private}/hooks/emitter.php (100%)
 rename lib/{ => private}/hooks/forwardingemitter.php (100%)
 rename lib/{ => private}/hooks/legacyemitter.php (100%)
 rename lib/{ => private}/hooks/publicemitter.php (100%)
 rename lib/{ => private}/image.php (100%)
 rename lib/{ => private}/installer.php (100%)
 rename lib/{ => private}/json.php (100%)
 rename lib/{ => private}/l10n.php (100%)
 rename lib/{ => private}/l10n/ach.php (100%)
 rename lib/{ => private}/l10n/af_ZA.php (100%)
 rename lib/{ => private}/l10n/ar.php (100%)
 rename lib/{ => private}/l10n/be.php (100%)
 rename lib/{ => private}/l10n/bg_BG.php (100%)
 rename lib/{ => private}/l10n/bn_BD.php (100%)
 rename lib/{ => private}/l10n/bs.php (100%)
 rename lib/{ => private}/l10n/ca.php (100%)
 rename lib/{ => private}/l10n/cs_CZ.php (100%)
 rename lib/{ => private}/l10n/cy_GB.php (100%)
 rename lib/{ => private}/l10n/da.php (100%)
 rename lib/{ => private}/l10n/de.php (100%)
 rename lib/{ => private}/l10n/de_AT.php (100%)
 rename lib/{ => private}/l10n/de_CH.php (100%)
 rename lib/{ => private}/l10n/de_DE.php (100%)
 rename lib/{ => private}/l10n/el.php (100%)
 rename lib/{ => private}/l10n/en@pirate.php (100%)
 rename lib/{ => private}/l10n/en_GB.php (100%)
 rename lib/{ => private}/l10n/eo.php (100%)
 rename lib/{ => private}/l10n/es.php (100%)
 rename lib/{ => private}/l10n/es_AR.php (100%)
 rename lib/{ => private}/l10n/es_MX.php (100%)
 rename lib/{ => private}/l10n/et_EE.php (100%)
 rename lib/{ => private}/l10n/eu.php (100%)
 rename lib/{ => private}/l10n/fa.php (100%)
 rename lib/{ => private}/l10n/fi.php (100%)
 rename lib/{ => private}/l10n/fi_FI.php (100%)
 rename lib/{ => private}/l10n/fr.php (100%)
 rename lib/{ => private}/l10n/gl.php (100%)
 rename lib/{ => private}/l10n/he.php (100%)
 rename lib/{ => private}/l10n/hi.php (100%)
 rename lib/{ => private}/l10n/hr.php (100%)
 rename lib/{ => private}/l10n/hu_HU.php (100%)
 rename lib/{ => private}/l10n/hy.php (100%)
 rename lib/{ => private}/l10n/ia.php (100%)
 rename lib/{ => private}/l10n/id.php (100%)
 rename lib/{ => private}/l10n/is.php (100%)
 rename lib/{ => private}/l10n/it.php (100%)
 rename lib/{ => private}/l10n/ja_JP.php (100%)
 rename lib/{ => private}/l10n/ka.php (100%)
 rename lib/{ => private}/l10n/ka_GE.php (100%)
 rename lib/{ => private}/l10n/km.php (100%)
 rename lib/{ => private}/l10n/kn.php (100%)
 rename lib/{ => private}/l10n/ko.php (100%)
 rename lib/{ => private}/l10n/ku_IQ.php (100%)
 rename lib/{ => private}/l10n/lb.php (100%)
 rename lib/{ => private}/l10n/lt_LT.php (100%)
 rename lib/{ => private}/l10n/lv.php (100%)
 rename lib/{ => private}/l10n/mk.php (100%)
 rename lib/{ => private}/l10n/ml_IN.php (100%)
 rename lib/{ => private}/l10n/ms_MY.php (100%)
 rename lib/{ => private}/l10n/my_MM.php (100%)
 rename lib/{ => private}/l10n/nb_NO.php (100%)
 rename lib/{ => private}/l10n/ne.php (100%)
 rename lib/{ => private}/l10n/nl.php (100%)
 rename lib/{ => private}/l10n/nn_NO.php (100%)
 rename lib/{ => private}/l10n/nqo.php (100%)
 rename lib/{ => private}/l10n/oc.php (100%)
 rename lib/{ => private}/l10n/pa.php (100%)
 rename lib/{ => private}/l10n/pl.php (100%)
 rename lib/{ => private}/l10n/pl_PL.php (100%)
 rename lib/{ => private}/l10n/pt_BR.php (100%)
 rename lib/{ => private}/l10n/pt_PT.php (100%)
 rename lib/{ => private}/l10n/ro.php (100%)
 rename lib/{ => private}/l10n/ru.php (100%)
 rename lib/{ => private}/l10n/si_LK.php (100%)
 rename lib/{ => private}/l10n/sk.php (100%)
 rename lib/{ => private}/l10n/sk_SK.php (100%)
 rename lib/{ => private}/l10n/sl.php (100%)
 rename lib/{ => private}/l10n/sq.php (100%)
 rename lib/{ => private}/l10n/sr.php (100%)
 rename lib/{ => private}/l10n/sr@latin.php (100%)
 rename lib/{ => private}/l10n/string.php (100%)
 rename lib/{ => private}/l10n/sv.php (100%)
 rename lib/{ => private}/l10n/sw_KE.php (100%)
 rename lib/{ => private}/l10n/ta_LK.php (100%)
 rename lib/{ => private}/l10n/te.php (100%)
 rename lib/{ => private}/l10n/th_TH.php (100%)
 rename lib/{ => private}/l10n/tr.php (100%)
 rename lib/{ => private}/l10n/ug.php (100%)
 rename lib/{ => private}/l10n/uk.php (100%)
 rename lib/{ => private}/l10n/ur_PK.php (100%)
 rename lib/{ => private}/l10n/vi.php (100%)
 rename lib/{ => private}/l10n/zh_CN.php (100%)
 rename lib/{ => private}/l10n/zh_HK.php (100%)
 rename lib/{ => private}/l10n/zh_TW.php (100%)
 rename lib/{ => private}/legacy/cache.php (100%)
 rename lib/{ => private}/legacy/config.php (100%)
 rename lib/{ => private}/legacy/filesystem.php (100%)
 rename lib/{ => private}/legacy/filesystemview.php (100%)
 rename lib/{ => private}/legacy/log.php (100%)
 rename lib/{ => private}/legacy/preferences.php (100%)
 rename lib/{ => private}/legacy/updater.php (100%)
 rename lib/{ => private}/log.php (100%)
 rename lib/{ => private}/log/errorhandler.php (100%)
 rename lib/{ => private}/log/owncloud.php (100%)
 rename lib/{ => private}/log/rotate.php (100%)
 rename lib/{ => private}/log/syslog.php (100%)
 rename lib/{ => private}/mail.php (100%)
 rename lib/{ => private}/memcache/apc.php (100%)
 rename lib/{ => private}/memcache/apcu.php (100%)
 rename lib/{ => private}/memcache/cache.php (100%)
 rename lib/{ => private}/memcache/factory.php (100%)
 rename lib/{ => private}/memcache/memcached.php (100%)
 rename lib/{ => private}/memcache/xcache.php (100%)
 rename lib/{ => private}/migrate.php (100%)
 rename lib/{ => private}/migration/content.php (100%)
 rename lib/{ => private}/migration/provider.php (100%)
 rename lib/{ => private}/mimetypes.list.php (100%)
 rename lib/{ => private}/minimizer.php (100%)
 rename lib/{ => private}/minimizer/css.php (100%)
 rename lib/{ => private}/minimizer/js.php (100%)
 rename lib/{ => private}/navigationmanager.php (100%)
 rename lib/{ => private}/notsquareexception.php (100%)
 rename lib/{ => private}/ocs.php (100%)
 rename lib/{ => private}/ocs/cloud.php (100%)
 rename lib/{ => private}/ocs/config.php (100%)
 rename lib/{ => private}/ocs/person.php (100%)
 rename lib/{ => private}/ocs/privatedata.php (100%)
 rename lib/{ => private}/ocs/result.php (100%)
 rename lib/{ => private}/ocsclient.php (100%)
 rename lib/{ => private}/preferences.php (100%)
 rename lib/{ => private}/preview.php (100%)
 rename lib/{ => private}/preview/image.php (100%)
 rename lib/{ => private}/preview/movies.php (100%)
 rename lib/{ => private}/preview/mp3.php (100%)
 rename lib/{ => private}/preview/office-cl.php (100%)
 rename lib/{ => private}/preview/office-fallback.php (100%)
 rename lib/{ => private}/preview/office.php (100%)
 rename lib/{ => private}/preview/pdf.php (100%)
 rename lib/{ => private}/preview/provider.php (100%)
 rename lib/{ => private}/preview/svg.php (100%)
 rename lib/{ => private}/preview/txt.php (100%)
 rename lib/{ => private}/preview/unknown.php (100%)
 rename lib/{ => private}/previewmanager.php (100%)
 rename lib/{ => private}/request.php (100%)
 rename lib/{ => private}/response.php (100%)
 rename lib/{ => private}/route.php (100%)
 rename lib/{ => private}/router.php (100%)
 rename lib/{ => private}/search.php (100%)
 rename lib/{ => private}/search/provider.php (100%)
 rename lib/{ => private}/search/provider/file.php (100%)
 rename lib/{ => private}/search/result.php (100%)
 rename lib/{ => private}/server.php (100%)
 rename lib/{ => private}/session/internal.php (100%)
 rename lib/{ => private}/session/memory.php (100%)
 rename lib/{ => private}/session/session.php (100%)
 rename lib/{ => private}/setup.php (100%)
 rename lib/{ => private}/setup/abstractdatabase.php (100%)
 rename lib/{ => private}/setup/mssql.php (100%)
 rename lib/{ => private}/setup/mysql.php (100%)
 rename lib/{ => private}/setup/oci.php (100%)
 rename lib/{ => private}/setup/postgresql.php (100%)
 rename lib/{ => private}/setup/sqlite.php (100%)
 rename lib/{ => private}/subadmin.php (100%)
 rename lib/{ => private}/template.php (100%)
 rename lib/{ => private}/template/base.php (100%)
 rename lib/{ => private}/template/cssresourcelocator.php (100%)
 rename lib/{ => private}/template/functions.php (100%)
 rename lib/{ => private}/template/jsresourcelocator.php (100%)
 rename lib/{ => private}/template/resourcelocator.php (100%)
 rename lib/{ => private}/template/templatefilelocator.php (100%)
 rename lib/{ => private}/templatelayout.php (100%)
 rename lib/{ => private}/updater.php (100%)
 rename lib/{ => private}/user.php (100%)
 rename lib/{ => private}/user/backend.php (100%)
 rename lib/{ => private}/user/database.php (100%)
 rename lib/{ => private}/user/dummy.php (100%)
 rename lib/{ => private}/user/example.php (100%)
 rename lib/{ => private}/user/http.php (100%)
 rename lib/{ => private}/user/interface.php (100%)
 rename lib/{ => private}/user/manager.php (100%)
 rename lib/{ => private}/user/session.php (100%)
 rename lib/{ => private}/user/user.php (100%)
 rename lib/{ => private}/util.php (100%)
 rename lib/{ => private}/vobject.php (100%)
 rename lib/{ => private}/vobject/compoundproperty.php (100%)
 rename lib/{ => private}/vobject/stringproperty.php (100%)

diff --git a/lib/autoloader.php b/lib/autoloader.php
index 01841f831b..7204120011 100644
--- a/lib/autoloader.php
+++ b/lib/autoloader.php
@@ -73,10 +73,10 @@ class Autoloader {
 			}
 		} elseif (strpos($class, 'OC_') === 0) {
 			// first check for legacy classes if underscores are used
-			$paths[] = 'legacy/' . strtolower(str_replace('_', '/', substr($class, 3)) . '.php');
-			$paths[] = strtolower(str_replace('_', '/', substr($class, 3)) . '.php');
+			$paths[] = 'private/legacy/' . strtolower(str_replace('_', '/', substr($class, 3)) . '.php');
+			$paths[] = 'private/' . strtolower(str_replace('_', '/', substr($class, 3)) . '.php');
 		} elseif (strpos($class, 'OC\\') === 0) {
-			$paths[] = strtolower(str_replace('\\', '/', substr($class, 3)) . '.php');
+			$paths[] = 'private/' . strtolower(str_replace('\\', '/', substr($class, 3)) . '.php');
 		} elseif (strpos($class, 'OCP\\') === 0) {
 			$paths[] = 'public/' . strtolower(str_replace('\\', '/', substr($class, 4)) . '.php');
 		} elseif (strpos($class, 'OCA\\') === 0) {
diff --git a/lib/base.php b/lib/base.php
index 58894be03e..7e237c35d2 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -164,7 +164,7 @@ class OC {
 
 		// set the right include path
 		set_include_path(
-			OC::$SERVERROOT . '/lib' . PATH_SEPARATOR .
+			OC::$SERVERROOT . '/lib/private' . PATH_SEPARATOR .
 			OC::$SERVERROOT . '/config' . PATH_SEPARATOR .
 			OC::$THIRDPARTYROOT . '/3rdparty' . PATH_SEPARATOR .
 			implode($paths, PATH_SEPARATOR) . PATH_SEPARATOR .
diff --git a/lib/allconfig.php b/lib/private/allconfig.php
similarity index 100%
rename from lib/allconfig.php
rename to lib/private/allconfig.php
diff --git a/lib/api.php b/lib/private/api.php
similarity index 100%
rename from lib/api.php
rename to lib/private/api.php
diff --git a/lib/app.php b/lib/private/app.php
similarity index 100%
rename from lib/app.php
rename to lib/private/app.php
diff --git a/lib/appconfig.php b/lib/private/appconfig.php
similarity index 100%
rename from lib/appconfig.php
rename to lib/private/appconfig.php
diff --git a/lib/appframework/app.php b/lib/private/appframework/app.php
similarity index 100%
rename from lib/appframework/app.php
rename to lib/private/appframework/app.php
diff --git a/lib/appframework/controller/controller.php b/lib/private/appframework/controller/controller.php
similarity index 100%
rename from lib/appframework/controller/controller.php
rename to lib/private/appframework/controller/controller.php
diff --git a/lib/appframework/core/api.php b/lib/private/appframework/core/api.php
similarity index 100%
rename from lib/appframework/core/api.php
rename to lib/private/appframework/core/api.php
diff --git a/lib/appframework/dependencyinjection/dicontainer.php b/lib/private/appframework/dependencyinjection/dicontainer.php
similarity index 100%
rename from lib/appframework/dependencyinjection/dicontainer.php
rename to lib/private/appframework/dependencyinjection/dicontainer.php
diff --git a/lib/appframework/http/dispatcher.php b/lib/private/appframework/http/dispatcher.php
similarity index 100%
rename from lib/appframework/http/dispatcher.php
rename to lib/private/appframework/http/dispatcher.php
diff --git a/lib/appframework/http/downloadresponse.php b/lib/private/appframework/http/downloadresponse.php
similarity index 100%
rename from lib/appframework/http/downloadresponse.php
rename to lib/private/appframework/http/downloadresponse.php
diff --git a/lib/appframework/http/http.php b/lib/private/appframework/http/http.php
similarity index 100%
rename from lib/appframework/http/http.php
rename to lib/private/appframework/http/http.php
diff --git a/lib/appframework/http/redirectresponse.php b/lib/private/appframework/http/redirectresponse.php
similarity index 100%
rename from lib/appframework/http/redirectresponse.php
rename to lib/private/appframework/http/redirectresponse.php
diff --git a/lib/appframework/http/request.php b/lib/private/appframework/http/request.php
similarity index 100%
rename from lib/appframework/http/request.php
rename to lib/private/appframework/http/request.php
diff --git a/lib/appframework/middleware/middleware.php b/lib/private/appframework/middleware/middleware.php
similarity index 100%
rename from lib/appframework/middleware/middleware.php
rename to lib/private/appframework/middleware/middleware.php
diff --git a/lib/appframework/middleware/middlewaredispatcher.php b/lib/private/appframework/middleware/middlewaredispatcher.php
similarity index 100%
rename from lib/appframework/middleware/middlewaredispatcher.php
rename to lib/private/appframework/middleware/middlewaredispatcher.php
diff --git a/lib/appframework/middleware/security/securityexception.php b/lib/private/appframework/middleware/security/securityexception.php
similarity index 100%
rename from lib/appframework/middleware/security/securityexception.php
rename to lib/private/appframework/middleware/security/securityexception.php
diff --git a/lib/appframework/middleware/security/securitymiddleware.php b/lib/private/appframework/middleware/security/securitymiddleware.php
similarity index 100%
rename from lib/appframework/middleware/security/securitymiddleware.php
rename to lib/private/appframework/middleware/security/securitymiddleware.php
diff --git a/lib/appframework/routing/routeactionhandler.php b/lib/private/appframework/routing/routeactionhandler.php
similarity index 100%
rename from lib/appframework/routing/routeactionhandler.php
rename to lib/private/appframework/routing/routeactionhandler.php
diff --git a/lib/appframework/routing/routeconfig.php b/lib/private/appframework/routing/routeconfig.php
similarity index 100%
rename from lib/appframework/routing/routeconfig.php
rename to lib/private/appframework/routing/routeconfig.php
diff --git a/lib/appframework/utility/methodannotationreader.php b/lib/private/appframework/utility/methodannotationreader.php
similarity index 100%
rename from lib/appframework/utility/methodannotationreader.php
rename to lib/private/appframework/utility/methodannotationreader.php
diff --git a/lib/appframework/utility/simplecontainer.php b/lib/private/appframework/utility/simplecontainer.php
similarity index 94%
rename from lib/appframework/utility/simplecontainer.php
rename to lib/private/appframework/utility/simplecontainer.php
index a51ace83a3..7e4db63bde 100644
--- a/lib/appframework/utility/simplecontainer.php
+++ b/lib/private/appframework/utility/simplecontainer.php
@@ -3,7 +3,7 @@
 namespace OC\AppFramework\Utility;
 
 // register 3rdparty autoloaders
-require_once __DIR__ . '/../../../3rdparty/Pimple/Pimple.php';
+require_once __DIR__ . '/../../../../3rdparty/Pimple/Pimple.php';
 
 /**
  * Class SimpleContainer
diff --git a/lib/appframework/utility/timefactory.php b/lib/private/appframework/utility/timefactory.php
similarity index 100%
rename from lib/appframework/utility/timefactory.php
rename to lib/private/appframework/utility/timefactory.php
diff --git a/lib/archive.php b/lib/private/archive.php
similarity index 100%
rename from lib/archive.php
rename to lib/private/archive.php
diff --git a/lib/archive/tar.php b/lib/private/archive/tar.php
similarity index 100%
rename from lib/archive/tar.php
rename to lib/private/archive/tar.php
diff --git a/lib/archive/zip.php b/lib/private/archive/zip.php
similarity index 100%
rename from lib/archive/zip.php
rename to lib/private/archive/zip.php
diff --git a/lib/arrayparser.php b/lib/private/arrayparser.php
similarity index 100%
rename from lib/arrayparser.php
rename to lib/private/arrayparser.php
diff --git a/lib/avatar.php b/lib/private/avatar.php
similarity index 100%
rename from lib/avatar.php
rename to lib/private/avatar.php
diff --git a/lib/backgroundjob.php b/lib/private/backgroundjob.php
similarity index 100%
rename from lib/backgroundjob.php
rename to lib/private/backgroundjob.php
diff --git a/lib/backgroundjob/job.php b/lib/private/backgroundjob/job.php
similarity index 100%
rename from lib/backgroundjob/job.php
rename to lib/private/backgroundjob/job.php
diff --git a/lib/backgroundjob/joblist.php b/lib/private/backgroundjob/joblist.php
similarity index 100%
rename from lib/backgroundjob/joblist.php
rename to lib/private/backgroundjob/joblist.php
diff --git a/lib/backgroundjob/legacy/queuedjob.php b/lib/private/backgroundjob/legacy/queuedjob.php
similarity index 100%
rename from lib/backgroundjob/legacy/queuedjob.php
rename to lib/private/backgroundjob/legacy/queuedjob.php
diff --git a/lib/backgroundjob/legacy/regularjob.php b/lib/private/backgroundjob/legacy/regularjob.php
similarity index 100%
rename from lib/backgroundjob/legacy/regularjob.php
rename to lib/private/backgroundjob/legacy/regularjob.php
diff --git a/lib/backgroundjob/queuedjob.php b/lib/private/backgroundjob/queuedjob.php
similarity index 100%
rename from lib/backgroundjob/queuedjob.php
rename to lib/private/backgroundjob/queuedjob.php
diff --git a/lib/backgroundjob/timedjob.php b/lib/private/backgroundjob/timedjob.php
similarity index 100%
rename from lib/backgroundjob/timedjob.php
rename to lib/private/backgroundjob/timedjob.php
diff --git a/lib/cache.php b/lib/private/cache.php
similarity index 100%
rename from lib/cache.php
rename to lib/private/cache.php
diff --git a/lib/cache/broker.php b/lib/private/cache/broker.php
similarity index 100%
rename from lib/cache/broker.php
rename to lib/private/cache/broker.php
diff --git a/lib/cache/file.php b/lib/private/cache/file.php
similarity index 100%
rename from lib/cache/file.php
rename to lib/private/cache/file.php
diff --git a/lib/cache/fileglobal.php b/lib/private/cache/fileglobal.php
similarity index 100%
rename from lib/cache/fileglobal.php
rename to lib/private/cache/fileglobal.php
diff --git a/lib/cache/fileglobalgc.php b/lib/private/cache/fileglobalgc.php
similarity index 100%
rename from lib/cache/fileglobalgc.php
rename to lib/private/cache/fileglobalgc.php
diff --git a/lib/cache/usercache.php b/lib/private/cache/usercache.php
similarity index 100%
rename from lib/cache/usercache.php
rename to lib/private/cache/usercache.php
diff --git a/lib/config.php b/lib/private/config.php
similarity index 100%
rename from lib/config.php
rename to lib/private/config.php
diff --git a/lib/connector/sabre/ServiceUnavailable.php b/lib/private/connector/sabre/ServiceUnavailable.php
similarity index 100%
rename from lib/connector/sabre/ServiceUnavailable.php
rename to lib/private/connector/sabre/ServiceUnavailable.php
diff --git a/lib/connector/sabre/auth.php b/lib/private/connector/sabre/auth.php
similarity index 100%
rename from lib/connector/sabre/auth.php
rename to lib/private/connector/sabre/auth.php
diff --git a/lib/connector/sabre/directory.php b/lib/private/connector/sabre/directory.php
similarity index 100%
rename from lib/connector/sabre/directory.php
rename to lib/private/connector/sabre/directory.php
diff --git a/lib/connector/sabre/file.php b/lib/private/connector/sabre/file.php
similarity index 100%
rename from lib/connector/sabre/file.php
rename to lib/private/connector/sabre/file.php
diff --git a/lib/connector/sabre/locks.php b/lib/private/connector/sabre/locks.php
similarity index 100%
rename from lib/connector/sabre/locks.php
rename to lib/private/connector/sabre/locks.php
diff --git a/lib/connector/sabre/maintenanceplugin.php b/lib/private/connector/sabre/maintenanceplugin.php
similarity index 100%
rename from lib/connector/sabre/maintenanceplugin.php
rename to lib/private/connector/sabre/maintenanceplugin.php
diff --git a/lib/connector/sabre/node.php b/lib/private/connector/sabre/node.php
similarity index 100%
rename from lib/connector/sabre/node.php
rename to lib/private/connector/sabre/node.php
diff --git a/lib/connector/sabre/objecttree.php b/lib/private/connector/sabre/objecttree.php
similarity index 100%
rename from lib/connector/sabre/objecttree.php
rename to lib/private/connector/sabre/objecttree.php
diff --git a/lib/connector/sabre/principal.php b/lib/private/connector/sabre/principal.php
similarity index 100%
rename from lib/connector/sabre/principal.php
rename to lib/private/connector/sabre/principal.php
diff --git a/lib/connector/sabre/quotaplugin.php b/lib/private/connector/sabre/quotaplugin.php
similarity index 100%
rename from lib/connector/sabre/quotaplugin.php
rename to lib/private/connector/sabre/quotaplugin.php
diff --git a/lib/connector/sabre/request.php b/lib/private/connector/sabre/request.php
similarity index 100%
rename from lib/connector/sabre/request.php
rename to lib/private/connector/sabre/request.php
diff --git a/lib/contactsmanager.php b/lib/private/contactsmanager.php
similarity index 100%
rename from lib/contactsmanager.php
rename to lib/private/contactsmanager.php
diff --git a/lib/db.php b/lib/private/db.php
similarity index 100%
rename from lib/db.php
rename to lib/private/db.php
diff --git a/lib/db/adapter.php b/lib/private/db/adapter.php
similarity index 100%
rename from lib/db/adapter.php
rename to lib/private/db/adapter.php
diff --git a/lib/db/adapteroci8.php b/lib/private/db/adapteroci8.php
similarity index 100%
rename from lib/db/adapteroci8.php
rename to lib/private/db/adapteroci8.php
diff --git a/lib/db/adapterpgsql.php b/lib/private/db/adapterpgsql.php
similarity index 100%
rename from lib/db/adapterpgsql.php
rename to lib/private/db/adapterpgsql.php
diff --git a/lib/db/adaptersqlite.php b/lib/private/db/adaptersqlite.php
similarity index 100%
rename from lib/db/adaptersqlite.php
rename to lib/private/db/adaptersqlite.php
diff --git a/lib/db/adaptersqlsrv.php b/lib/private/db/adaptersqlsrv.php
similarity index 100%
rename from lib/db/adaptersqlsrv.php
rename to lib/private/db/adaptersqlsrv.php
diff --git a/lib/db/connection.php b/lib/private/db/connection.php
similarity index 100%
rename from lib/db/connection.php
rename to lib/private/db/connection.php
diff --git a/lib/db/mdb2schemamanager.php b/lib/private/db/mdb2schemamanager.php
similarity index 100%
rename from lib/db/mdb2schemamanager.php
rename to lib/private/db/mdb2schemamanager.php
diff --git a/lib/db/mdb2schemareader.php b/lib/private/db/mdb2schemareader.php
similarity index 100%
rename from lib/db/mdb2schemareader.php
rename to lib/private/db/mdb2schemareader.php
diff --git a/lib/db/mdb2schemawriter.php b/lib/private/db/mdb2schemawriter.php
similarity index 100%
rename from lib/db/mdb2schemawriter.php
rename to lib/private/db/mdb2schemawriter.php
diff --git a/lib/db/oracleconnection.php b/lib/private/db/oracleconnection.php
similarity index 100%
rename from lib/db/oracleconnection.php
rename to lib/private/db/oracleconnection.php
diff --git a/lib/db/statementwrapper.php b/lib/private/db/statementwrapper.php
similarity index 100%
rename from lib/db/statementwrapper.php
rename to lib/private/db/statementwrapper.php
diff --git a/lib/defaults.php b/lib/private/defaults.php
similarity index 100%
rename from lib/defaults.php
rename to lib/private/defaults.php
diff --git a/lib/eventsource.php b/lib/private/eventsource.php
similarity index 100%
rename from lib/eventsource.php
rename to lib/private/eventsource.php
diff --git a/lib/filechunking.php b/lib/private/filechunking.php
similarity index 100%
rename from lib/filechunking.php
rename to lib/private/filechunking.php
diff --git a/lib/fileproxy.php b/lib/private/fileproxy.php
similarity index 100%
rename from lib/fileproxy.php
rename to lib/private/fileproxy.php
diff --git a/lib/fileproxy/fileoperations.php b/lib/private/fileproxy/fileoperations.php
similarity index 100%
rename from lib/fileproxy/fileoperations.php
rename to lib/private/fileproxy/fileoperations.php
diff --git a/lib/files.php b/lib/private/files.php
similarity index 100%
rename from lib/files.php
rename to lib/private/files.php
diff --git a/lib/files/cache/backgroundwatcher.php b/lib/private/files/cache/backgroundwatcher.php
similarity index 100%
rename from lib/files/cache/backgroundwatcher.php
rename to lib/private/files/cache/backgroundwatcher.php
diff --git a/lib/files/cache/cache.php b/lib/private/files/cache/cache.php
similarity index 100%
rename from lib/files/cache/cache.php
rename to lib/private/files/cache/cache.php
diff --git a/lib/files/cache/legacy.php b/lib/private/files/cache/legacy.php
similarity index 100%
rename from lib/files/cache/legacy.php
rename to lib/private/files/cache/legacy.php
diff --git a/lib/files/cache/permissions.php b/lib/private/files/cache/permissions.php
similarity index 100%
rename from lib/files/cache/permissions.php
rename to lib/private/files/cache/permissions.php
diff --git a/lib/files/cache/scanner.php b/lib/private/files/cache/scanner.php
similarity index 100%
rename from lib/files/cache/scanner.php
rename to lib/private/files/cache/scanner.php
diff --git a/lib/files/cache/storage.php b/lib/private/files/cache/storage.php
similarity index 100%
rename from lib/files/cache/storage.php
rename to lib/private/files/cache/storage.php
diff --git a/lib/files/cache/updater.php b/lib/private/files/cache/updater.php
similarity index 100%
rename from lib/files/cache/updater.php
rename to lib/private/files/cache/updater.php
diff --git a/lib/files/cache/upgrade.php b/lib/private/files/cache/upgrade.php
similarity index 100%
rename from lib/files/cache/upgrade.php
rename to lib/private/files/cache/upgrade.php
diff --git a/lib/files/cache/watcher.php b/lib/private/files/cache/watcher.php
similarity index 100%
rename from lib/files/cache/watcher.php
rename to lib/private/files/cache/watcher.php
diff --git a/lib/files/filesystem.php b/lib/private/files/filesystem.php
similarity index 100%
rename from lib/files/filesystem.php
rename to lib/private/files/filesystem.php
diff --git a/lib/files/mapper.php b/lib/private/files/mapper.php
similarity index 100%
rename from lib/files/mapper.php
rename to lib/private/files/mapper.php
diff --git a/lib/files/mount/manager.php b/lib/private/files/mount/manager.php
similarity index 100%
rename from lib/files/mount/manager.php
rename to lib/private/files/mount/manager.php
diff --git a/lib/files/mount/mount.php b/lib/private/files/mount/mount.php
similarity index 100%
rename from lib/files/mount/mount.php
rename to lib/private/files/mount/mount.php
diff --git a/lib/files/node/file.php b/lib/private/files/node/file.php
similarity index 100%
rename from lib/files/node/file.php
rename to lib/private/files/node/file.php
diff --git a/lib/files/node/folder.php b/lib/private/files/node/folder.php
similarity index 100%
rename from lib/files/node/folder.php
rename to lib/private/files/node/folder.php
diff --git a/lib/files/node/node.php b/lib/private/files/node/node.php
similarity index 100%
rename from lib/files/node/node.php
rename to lib/private/files/node/node.php
diff --git a/lib/files/node/nonexistingfile.php b/lib/private/files/node/nonexistingfile.php
similarity index 100%
rename from lib/files/node/nonexistingfile.php
rename to lib/private/files/node/nonexistingfile.php
diff --git a/lib/files/node/nonexistingfolder.php b/lib/private/files/node/nonexistingfolder.php
similarity index 100%
rename from lib/files/node/nonexistingfolder.php
rename to lib/private/files/node/nonexistingfolder.php
diff --git a/lib/files/node/root.php b/lib/private/files/node/root.php
similarity index 100%
rename from lib/files/node/root.php
rename to lib/private/files/node/root.php
diff --git a/lib/files/storage/common.php b/lib/private/files/storage/common.php
similarity index 100%
rename from lib/files/storage/common.php
rename to lib/private/files/storage/common.php
diff --git a/lib/files/storage/commontest.php b/lib/private/files/storage/commontest.php
similarity index 100%
rename from lib/files/storage/commontest.php
rename to lib/private/files/storage/commontest.php
diff --git a/lib/files/storage/loader.php b/lib/private/files/storage/loader.php
similarity index 100%
rename from lib/files/storage/loader.php
rename to lib/private/files/storage/loader.php
diff --git a/lib/files/storage/local.php b/lib/private/files/storage/local.php
similarity index 100%
rename from lib/files/storage/local.php
rename to lib/private/files/storage/local.php
diff --git a/lib/files/storage/mappedlocal.php b/lib/private/files/storage/mappedlocal.php
similarity index 100%
rename from lib/files/storage/mappedlocal.php
rename to lib/private/files/storage/mappedlocal.php
diff --git a/lib/files/storage/storage.php b/lib/private/files/storage/storage.php
similarity index 100%
rename from lib/files/storage/storage.php
rename to lib/private/files/storage/storage.php
diff --git a/lib/files/storage/temporary.php b/lib/private/files/storage/temporary.php
similarity index 100%
rename from lib/files/storage/temporary.php
rename to lib/private/files/storage/temporary.php
diff --git a/lib/files/storage/wrapper/quota.php b/lib/private/files/storage/wrapper/quota.php
similarity index 100%
rename from lib/files/storage/wrapper/quota.php
rename to lib/private/files/storage/wrapper/quota.php
diff --git a/lib/files/storage/wrapper/wrapper.php b/lib/private/files/storage/wrapper/wrapper.php
similarity index 100%
rename from lib/files/storage/wrapper/wrapper.php
rename to lib/private/files/storage/wrapper/wrapper.php
diff --git a/lib/files/stream/close.php b/lib/private/files/stream/close.php
similarity index 100%
rename from lib/files/stream/close.php
rename to lib/private/files/stream/close.php
diff --git a/lib/files/stream/dir.php b/lib/private/files/stream/dir.php
similarity index 100%
rename from lib/files/stream/dir.php
rename to lib/private/files/stream/dir.php
diff --git a/lib/files/stream/oc.php b/lib/private/files/stream/oc.php
similarity index 100%
rename from lib/files/stream/oc.php
rename to lib/private/files/stream/oc.php
diff --git a/lib/files/stream/quota.php b/lib/private/files/stream/quota.php
similarity index 100%
rename from lib/files/stream/quota.php
rename to lib/private/files/stream/quota.php
diff --git a/lib/files/stream/staticstream.php b/lib/private/files/stream/staticstream.php
similarity index 100%
rename from lib/files/stream/staticstream.php
rename to lib/private/files/stream/staticstream.php
diff --git a/lib/files/type/detection.php b/lib/private/files/type/detection.php
similarity index 100%
rename from lib/files/type/detection.php
rename to lib/private/files/type/detection.php
diff --git a/lib/files/type/templatemanager.php b/lib/private/files/type/templatemanager.php
similarity index 100%
rename from lib/files/type/templatemanager.php
rename to lib/private/files/type/templatemanager.php
diff --git a/lib/files/utils/scanner.php b/lib/private/files/utils/scanner.php
similarity index 100%
rename from lib/files/utils/scanner.php
rename to lib/private/files/utils/scanner.php
diff --git a/lib/files/view.php b/lib/private/files/view.php
similarity index 100%
rename from lib/files/view.php
rename to lib/private/files/view.php
diff --git a/lib/geo.php b/lib/private/geo.php
similarity index 100%
rename from lib/geo.php
rename to lib/private/geo.php
diff --git a/lib/group.php b/lib/private/group.php
similarity index 100%
rename from lib/group.php
rename to lib/private/group.php
diff --git a/lib/group/backend.php b/lib/private/group/backend.php
similarity index 100%
rename from lib/group/backend.php
rename to lib/private/group/backend.php
diff --git a/lib/group/database.php b/lib/private/group/database.php
similarity index 100%
rename from lib/group/database.php
rename to lib/private/group/database.php
diff --git a/lib/group/dummy.php b/lib/private/group/dummy.php
similarity index 100%
rename from lib/group/dummy.php
rename to lib/private/group/dummy.php
diff --git a/lib/group/example.php b/lib/private/group/example.php
similarity index 100%
rename from lib/group/example.php
rename to lib/private/group/example.php
diff --git a/lib/group/group.php b/lib/private/group/group.php
similarity index 100%
rename from lib/group/group.php
rename to lib/private/group/group.php
diff --git a/lib/group/interface.php b/lib/private/group/interface.php
similarity index 100%
rename from lib/group/interface.php
rename to lib/private/group/interface.php
diff --git a/lib/group/manager.php b/lib/private/group/manager.php
similarity index 100%
rename from lib/group/manager.php
rename to lib/private/group/manager.php
diff --git a/lib/helper.php b/lib/private/helper.php
similarity index 100%
rename from lib/helper.php
rename to lib/private/helper.php
diff --git a/lib/hintexception.php b/lib/private/hintexception.php
similarity index 100%
rename from lib/hintexception.php
rename to lib/private/hintexception.php
diff --git a/lib/hook.php b/lib/private/hook.php
similarity index 100%
rename from lib/hook.php
rename to lib/private/hook.php
diff --git a/lib/hooks/basicemitter.php b/lib/private/hooks/basicemitter.php
similarity index 100%
rename from lib/hooks/basicemitter.php
rename to lib/private/hooks/basicemitter.php
diff --git a/lib/hooks/emitter.php b/lib/private/hooks/emitter.php
similarity index 100%
rename from lib/hooks/emitter.php
rename to lib/private/hooks/emitter.php
diff --git a/lib/hooks/forwardingemitter.php b/lib/private/hooks/forwardingemitter.php
similarity index 100%
rename from lib/hooks/forwardingemitter.php
rename to lib/private/hooks/forwardingemitter.php
diff --git a/lib/hooks/legacyemitter.php b/lib/private/hooks/legacyemitter.php
similarity index 100%
rename from lib/hooks/legacyemitter.php
rename to lib/private/hooks/legacyemitter.php
diff --git a/lib/hooks/publicemitter.php b/lib/private/hooks/publicemitter.php
similarity index 100%
rename from lib/hooks/publicemitter.php
rename to lib/private/hooks/publicemitter.php
diff --git a/lib/image.php b/lib/private/image.php
similarity index 100%
rename from lib/image.php
rename to lib/private/image.php
diff --git a/lib/installer.php b/lib/private/installer.php
similarity index 100%
rename from lib/installer.php
rename to lib/private/installer.php
diff --git a/lib/json.php b/lib/private/json.php
similarity index 100%
rename from lib/json.php
rename to lib/private/json.php
diff --git a/lib/l10n.php b/lib/private/l10n.php
similarity index 100%
rename from lib/l10n.php
rename to lib/private/l10n.php
diff --git a/lib/l10n/ach.php b/lib/private/l10n/ach.php
similarity index 100%
rename from lib/l10n/ach.php
rename to lib/private/l10n/ach.php
diff --git a/lib/l10n/af_ZA.php b/lib/private/l10n/af_ZA.php
similarity index 100%
rename from lib/l10n/af_ZA.php
rename to lib/private/l10n/af_ZA.php
diff --git a/lib/l10n/ar.php b/lib/private/l10n/ar.php
similarity index 100%
rename from lib/l10n/ar.php
rename to lib/private/l10n/ar.php
diff --git a/lib/l10n/be.php b/lib/private/l10n/be.php
similarity index 100%
rename from lib/l10n/be.php
rename to lib/private/l10n/be.php
diff --git a/lib/l10n/bg_BG.php b/lib/private/l10n/bg_BG.php
similarity index 100%
rename from lib/l10n/bg_BG.php
rename to lib/private/l10n/bg_BG.php
diff --git a/lib/l10n/bn_BD.php b/lib/private/l10n/bn_BD.php
similarity index 100%
rename from lib/l10n/bn_BD.php
rename to lib/private/l10n/bn_BD.php
diff --git a/lib/l10n/bs.php b/lib/private/l10n/bs.php
similarity index 100%
rename from lib/l10n/bs.php
rename to lib/private/l10n/bs.php
diff --git a/lib/l10n/ca.php b/lib/private/l10n/ca.php
similarity index 100%
rename from lib/l10n/ca.php
rename to lib/private/l10n/ca.php
diff --git a/lib/l10n/cs_CZ.php b/lib/private/l10n/cs_CZ.php
similarity index 100%
rename from lib/l10n/cs_CZ.php
rename to lib/private/l10n/cs_CZ.php
diff --git a/lib/l10n/cy_GB.php b/lib/private/l10n/cy_GB.php
similarity index 100%
rename from lib/l10n/cy_GB.php
rename to lib/private/l10n/cy_GB.php
diff --git a/lib/l10n/da.php b/lib/private/l10n/da.php
similarity index 100%
rename from lib/l10n/da.php
rename to lib/private/l10n/da.php
diff --git a/lib/l10n/de.php b/lib/private/l10n/de.php
similarity index 100%
rename from lib/l10n/de.php
rename to lib/private/l10n/de.php
diff --git a/lib/l10n/de_AT.php b/lib/private/l10n/de_AT.php
similarity index 100%
rename from lib/l10n/de_AT.php
rename to lib/private/l10n/de_AT.php
diff --git a/lib/l10n/de_CH.php b/lib/private/l10n/de_CH.php
similarity index 100%
rename from lib/l10n/de_CH.php
rename to lib/private/l10n/de_CH.php
diff --git a/lib/l10n/de_DE.php b/lib/private/l10n/de_DE.php
similarity index 100%
rename from lib/l10n/de_DE.php
rename to lib/private/l10n/de_DE.php
diff --git a/lib/l10n/el.php b/lib/private/l10n/el.php
similarity index 100%
rename from lib/l10n/el.php
rename to lib/private/l10n/el.php
diff --git a/lib/l10n/en@pirate.php b/lib/private/l10n/en@pirate.php
similarity index 100%
rename from lib/l10n/en@pirate.php
rename to lib/private/l10n/en@pirate.php
diff --git a/lib/l10n/en_GB.php b/lib/private/l10n/en_GB.php
similarity index 100%
rename from lib/l10n/en_GB.php
rename to lib/private/l10n/en_GB.php
diff --git a/lib/l10n/eo.php b/lib/private/l10n/eo.php
similarity index 100%
rename from lib/l10n/eo.php
rename to lib/private/l10n/eo.php
diff --git a/lib/l10n/es.php b/lib/private/l10n/es.php
similarity index 100%
rename from lib/l10n/es.php
rename to lib/private/l10n/es.php
diff --git a/lib/l10n/es_AR.php b/lib/private/l10n/es_AR.php
similarity index 100%
rename from lib/l10n/es_AR.php
rename to lib/private/l10n/es_AR.php
diff --git a/lib/l10n/es_MX.php b/lib/private/l10n/es_MX.php
similarity index 100%
rename from lib/l10n/es_MX.php
rename to lib/private/l10n/es_MX.php
diff --git a/lib/l10n/et_EE.php b/lib/private/l10n/et_EE.php
similarity index 100%
rename from lib/l10n/et_EE.php
rename to lib/private/l10n/et_EE.php
diff --git a/lib/l10n/eu.php b/lib/private/l10n/eu.php
similarity index 100%
rename from lib/l10n/eu.php
rename to lib/private/l10n/eu.php
diff --git a/lib/l10n/fa.php b/lib/private/l10n/fa.php
similarity index 100%
rename from lib/l10n/fa.php
rename to lib/private/l10n/fa.php
diff --git a/lib/l10n/fi.php b/lib/private/l10n/fi.php
similarity index 100%
rename from lib/l10n/fi.php
rename to lib/private/l10n/fi.php
diff --git a/lib/l10n/fi_FI.php b/lib/private/l10n/fi_FI.php
similarity index 100%
rename from lib/l10n/fi_FI.php
rename to lib/private/l10n/fi_FI.php
diff --git a/lib/l10n/fr.php b/lib/private/l10n/fr.php
similarity index 100%
rename from lib/l10n/fr.php
rename to lib/private/l10n/fr.php
diff --git a/lib/l10n/gl.php b/lib/private/l10n/gl.php
similarity index 100%
rename from lib/l10n/gl.php
rename to lib/private/l10n/gl.php
diff --git a/lib/l10n/he.php b/lib/private/l10n/he.php
similarity index 100%
rename from lib/l10n/he.php
rename to lib/private/l10n/he.php
diff --git a/lib/l10n/hi.php b/lib/private/l10n/hi.php
similarity index 100%
rename from lib/l10n/hi.php
rename to lib/private/l10n/hi.php
diff --git a/lib/l10n/hr.php b/lib/private/l10n/hr.php
similarity index 100%
rename from lib/l10n/hr.php
rename to lib/private/l10n/hr.php
diff --git a/lib/l10n/hu_HU.php b/lib/private/l10n/hu_HU.php
similarity index 100%
rename from lib/l10n/hu_HU.php
rename to lib/private/l10n/hu_HU.php
diff --git a/lib/l10n/hy.php b/lib/private/l10n/hy.php
similarity index 100%
rename from lib/l10n/hy.php
rename to lib/private/l10n/hy.php
diff --git a/lib/l10n/ia.php b/lib/private/l10n/ia.php
similarity index 100%
rename from lib/l10n/ia.php
rename to lib/private/l10n/ia.php
diff --git a/lib/l10n/id.php b/lib/private/l10n/id.php
similarity index 100%
rename from lib/l10n/id.php
rename to lib/private/l10n/id.php
diff --git a/lib/l10n/is.php b/lib/private/l10n/is.php
similarity index 100%
rename from lib/l10n/is.php
rename to lib/private/l10n/is.php
diff --git a/lib/l10n/it.php b/lib/private/l10n/it.php
similarity index 100%
rename from lib/l10n/it.php
rename to lib/private/l10n/it.php
diff --git a/lib/l10n/ja_JP.php b/lib/private/l10n/ja_JP.php
similarity index 100%
rename from lib/l10n/ja_JP.php
rename to lib/private/l10n/ja_JP.php
diff --git a/lib/l10n/ka.php b/lib/private/l10n/ka.php
similarity index 100%
rename from lib/l10n/ka.php
rename to lib/private/l10n/ka.php
diff --git a/lib/l10n/ka_GE.php b/lib/private/l10n/ka_GE.php
similarity index 100%
rename from lib/l10n/ka_GE.php
rename to lib/private/l10n/ka_GE.php
diff --git a/lib/l10n/km.php b/lib/private/l10n/km.php
similarity index 100%
rename from lib/l10n/km.php
rename to lib/private/l10n/km.php
diff --git a/lib/l10n/kn.php b/lib/private/l10n/kn.php
similarity index 100%
rename from lib/l10n/kn.php
rename to lib/private/l10n/kn.php
diff --git a/lib/l10n/ko.php b/lib/private/l10n/ko.php
similarity index 100%
rename from lib/l10n/ko.php
rename to lib/private/l10n/ko.php
diff --git a/lib/l10n/ku_IQ.php b/lib/private/l10n/ku_IQ.php
similarity index 100%
rename from lib/l10n/ku_IQ.php
rename to lib/private/l10n/ku_IQ.php
diff --git a/lib/l10n/lb.php b/lib/private/l10n/lb.php
similarity index 100%
rename from lib/l10n/lb.php
rename to lib/private/l10n/lb.php
diff --git a/lib/l10n/lt_LT.php b/lib/private/l10n/lt_LT.php
similarity index 100%
rename from lib/l10n/lt_LT.php
rename to lib/private/l10n/lt_LT.php
diff --git a/lib/l10n/lv.php b/lib/private/l10n/lv.php
similarity index 100%
rename from lib/l10n/lv.php
rename to lib/private/l10n/lv.php
diff --git a/lib/l10n/mk.php b/lib/private/l10n/mk.php
similarity index 100%
rename from lib/l10n/mk.php
rename to lib/private/l10n/mk.php
diff --git a/lib/l10n/ml_IN.php b/lib/private/l10n/ml_IN.php
similarity index 100%
rename from lib/l10n/ml_IN.php
rename to lib/private/l10n/ml_IN.php
diff --git a/lib/l10n/ms_MY.php b/lib/private/l10n/ms_MY.php
similarity index 100%
rename from lib/l10n/ms_MY.php
rename to lib/private/l10n/ms_MY.php
diff --git a/lib/l10n/my_MM.php b/lib/private/l10n/my_MM.php
similarity index 100%
rename from lib/l10n/my_MM.php
rename to lib/private/l10n/my_MM.php
diff --git a/lib/l10n/nb_NO.php b/lib/private/l10n/nb_NO.php
similarity index 100%
rename from lib/l10n/nb_NO.php
rename to lib/private/l10n/nb_NO.php
diff --git a/lib/l10n/ne.php b/lib/private/l10n/ne.php
similarity index 100%
rename from lib/l10n/ne.php
rename to lib/private/l10n/ne.php
diff --git a/lib/l10n/nl.php b/lib/private/l10n/nl.php
similarity index 100%
rename from lib/l10n/nl.php
rename to lib/private/l10n/nl.php
diff --git a/lib/l10n/nn_NO.php b/lib/private/l10n/nn_NO.php
similarity index 100%
rename from lib/l10n/nn_NO.php
rename to lib/private/l10n/nn_NO.php
diff --git a/lib/l10n/nqo.php b/lib/private/l10n/nqo.php
similarity index 100%
rename from lib/l10n/nqo.php
rename to lib/private/l10n/nqo.php
diff --git a/lib/l10n/oc.php b/lib/private/l10n/oc.php
similarity index 100%
rename from lib/l10n/oc.php
rename to lib/private/l10n/oc.php
diff --git a/lib/l10n/pa.php b/lib/private/l10n/pa.php
similarity index 100%
rename from lib/l10n/pa.php
rename to lib/private/l10n/pa.php
diff --git a/lib/l10n/pl.php b/lib/private/l10n/pl.php
similarity index 100%
rename from lib/l10n/pl.php
rename to lib/private/l10n/pl.php
diff --git a/lib/l10n/pl_PL.php b/lib/private/l10n/pl_PL.php
similarity index 100%
rename from lib/l10n/pl_PL.php
rename to lib/private/l10n/pl_PL.php
diff --git a/lib/l10n/pt_BR.php b/lib/private/l10n/pt_BR.php
similarity index 100%
rename from lib/l10n/pt_BR.php
rename to lib/private/l10n/pt_BR.php
diff --git a/lib/l10n/pt_PT.php b/lib/private/l10n/pt_PT.php
similarity index 100%
rename from lib/l10n/pt_PT.php
rename to lib/private/l10n/pt_PT.php
diff --git a/lib/l10n/ro.php b/lib/private/l10n/ro.php
similarity index 100%
rename from lib/l10n/ro.php
rename to lib/private/l10n/ro.php
diff --git a/lib/l10n/ru.php b/lib/private/l10n/ru.php
similarity index 100%
rename from lib/l10n/ru.php
rename to lib/private/l10n/ru.php
diff --git a/lib/l10n/si_LK.php b/lib/private/l10n/si_LK.php
similarity index 100%
rename from lib/l10n/si_LK.php
rename to lib/private/l10n/si_LK.php
diff --git a/lib/l10n/sk.php b/lib/private/l10n/sk.php
similarity index 100%
rename from lib/l10n/sk.php
rename to lib/private/l10n/sk.php
diff --git a/lib/l10n/sk_SK.php b/lib/private/l10n/sk_SK.php
similarity index 100%
rename from lib/l10n/sk_SK.php
rename to lib/private/l10n/sk_SK.php
diff --git a/lib/l10n/sl.php b/lib/private/l10n/sl.php
similarity index 100%
rename from lib/l10n/sl.php
rename to lib/private/l10n/sl.php
diff --git a/lib/l10n/sq.php b/lib/private/l10n/sq.php
similarity index 100%
rename from lib/l10n/sq.php
rename to lib/private/l10n/sq.php
diff --git a/lib/l10n/sr.php b/lib/private/l10n/sr.php
similarity index 100%
rename from lib/l10n/sr.php
rename to lib/private/l10n/sr.php
diff --git a/lib/l10n/sr@latin.php b/lib/private/l10n/sr@latin.php
similarity index 100%
rename from lib/l10n/sr@latin.php
rename to lib/private/l10n/sr@latin.php
diff --git a/lib/l10n/string.php b/lib/private/l10n/string.php
similarity index 100%
rename from lib/l10n/string.php
rename to lib/private/l10n/string.php
diff --git a/lib/l10n/sv.php b/lib/private/l10n/sv.php
similarity index 100%
rename from lib/l10n/sv.php
rename to lib/private/l10n/sv.php
diff --git a/lib/l10n/sw_KE.php b/lib/private/l10n/sw_KE.php
similarity index 100%
rename from lib/l10n/sw_KE.php
rename to lib/private/l10n/sw_KE.php
diff --git a/lib/l10n/ta_LK.php b/lib/private/l10n/ta_LK.php
similarity index 100%
rename from lib/l10n/ta_LK.php
rename to lib/private/l10n/ta_LK.php
diff --git a/lib/l10n/te.php b/lib/private/l10n/te.php
similarity index 100%
rename from lib/l10n/te.php
rename to lib/private/l10n/te.php
diff --git a/lib/l10n/th_TH.php b/lib/private/l10n/th_TH.php
similarity index 100%
rename from lib/l10n/th_TH.php
rename to lib/private/l10n/th_TH.php
diff --git a/lib/l10n/tr.php b/lib/private/l10n/tr.php
similarity index 100%
rename from lib/l10n/tr.php
rename to lib/private/l10n/tr.php
diff --git a/lib/l10n/ug.php b/lib/private/l10n/ug.php
similarity index 100%
rename from lib/l10n/ug.php
rename to lib/private/l10n/ug.php
diff --git a/lib/l10n/uk.php b/lib/private/l10n/uk.php
similarity index 100%
rename from lib/l10n/uk.php
rename to lib/private/l10n/uk.php
diff --git a/lib/l10n/ur_PK.php b/lib/private/l10n/ur_PK.php
similarity index 100%
rename from lib/l10n/ur_PK.php
rename to lib/private/l10n/ur_PK.php
diff --git a/lib/l10n/vi.php b/lib/private/l10n/vi.php
similarity index 100%
rename from lib/l10n/vi.php
rename to lib/private/l10n/vi.php
diff --git a/lib/l10n/zh_CN.php b/lib/private/l10n/zh_CN.php
similarity index 100%
rename from lib/l10n/zh_CN.php
rename to lib/private/l10n/zh_CN.php
diff --git a/lib/l10n/zh_HK.php b/lib/private/l10n/zh_HK.php
similarity index 100%
rename from lib/l10n/zh_HK.php
rename to lib/private/l10n/zh_HK.php
diff --git a/lib/l10n/zh_TW.php b/lib/private/l10n/zh_TW.php
similarity index 100%
rename from lib/l10n/zh_TW.php
rename to lib/private/l10n/zh_TW.php
diff --git a/lib/legacy/cache.php b/lib/private/legacy/cache.php
similarity index 100%
rename from lib/legacy/cache.php
rename to lib/private/legacy/cache.php
diff --git a/lib/legacy/config.php b/lib/private/legacy/config.php
similarity index 100%
rename from lib/legacy/config.php
rename to lib/private/legacy/config.php
diff --git a/lib/legacy/filesystem.php b/lib/private/legacy/filesystem.php
similarity index 100%
rename from lib/legacy/filesystem.php
rename to lib/private/legacy/filesystem.php
diff --git a/lib/legacy/filesystemview.php b/lib/private/legacy/filesystemview.php
similarity index 100%
rename from lib/legacy/filesystemview.php
rename to lib/private/legacy/filesystemview.php
diff --git a/lib/legacy/log.php b/lib/private/legacy/log.php
similarity index 100%
rename from lib/legacy/log.php
rename to lib/private/legacy/log.php
diff --git a/lib/legacy/preferences.php b/lib/private/legacy/preferences.php
similarity index 100%
rename from lib/legacy/preferences.php
rename to lib/private/legacy/preferences.php
diff --git a/lib/legacy/updater.php b/lib/private/legacy/updater.php
similarity index 100%
rename from lib/legacy/updater.php
rename to lib/private/legacy/updater.php
diff --git a/lib/log.php b/lib/private/log.php
similarity index 100%
rename from lib/log.php
rename to lib/private/log.php
diff --git a/lib/log/errorhandler.php b/lib/private/log/errorhandler.php
similarity index 100%
rename from lib/log/errorhandler.php
rename to lib/private/log/errorhandler.php
diff --git a/lib/log/owncloud.php b/lib/private/log/owncloud.php
similarity index 100%
rename from lib/log/owncloud.php
rename to lib/private/log/owncloud.php
diff --git a/lib/log/rotate.php b/lib/private/log/rotate.php
similarity index 100%
rename from lib/log/rotate.php
rename to lib/private/log/rotate.php
diff --git a/lib/log/syslog.php b/lib/private/log/syslog.php
similarity index 100%
rename from lib/log/syslog.php
rename to lib/private/log/syslog.php
diff --git a/lib/mail.php b/lib/private/mail.php
similarity index 100%
rename from lib/mail.php
rename to lib/private/mail.php
diff --git a/lib/memcache/apc.php b/lib/private/memcache/apc.php
similarity index 100%
rename from lib/memcache/apc.php
rename to lib/private/memcache/apc.php
diff --git a/lib/memcache/apcu.php b/lib/private/memcache/apcu.php
similarity index 100%
rename from lib/memcache/apcu.php
rename to lib/private/memcache/apcu.php
diff --git a/lib/memcache/cache.php b/lib/private/memcache/cache.php
similarity index 100%
rename from lib/memcache/cache.php
rename to lib/private/memcache/cache.php
diff --git a/lib/memcache/factory.php b/lib/private/memcache/factory.php
similarity index 100%
rename from lib/memcache/factory.php
rename to lib/private/memcache/factory.php
diff --git a/lib/memcache/memcached.php b/lib/private/memcache/memcached.php
similarity index 100%
rename from lib/memcache/memcached.php
rename to lib/private/memcache/memcached.php
diff --git a/lib/memcache/xcache.php b/lib/private/memcache/xcache.php
similarity index 100%
rename from lib/memcache/xcache.php
rename to lib/private/memcache/xcache.php
diff --git a/lib/migrate.php b/lib/private/migrate.php
similarity index 100%
rename from lib/migrate.php
rename to lib/private/migrate.php
diff --git a/lib/migration/content.php b/lib/private/migration/content.php
similarity index 100%
rename from lib/migration/content.php
rename to lib/private/migration/content.php
diff --git a/lib/migration/provider.php b/lib/private/migration/provider.php
similarity index 100%
rename from lib/migration/provider.php
rename to lib/private/migration/provider.php
diff --git a/lib/mimetypes.list.php b/lib/private/mimetypes.list.php
similarity index 100%
rename from lib/mimetypes.list.php
rename to lib/private/mimetypes.list.php
diff --git a/lib/minimizer.php b/lib/private/minimizer.php
similarity index 100%
rename from lib/minimizer.php
rename to lib/private/minimizer.php
diff --git a/lib/minimizer/css.php b/lib/private/minimizer/css.php
similarity index 100%
rename from lib/minimizer/css.php
rename to lib/private/minimizer/css.php
diff --git a/lib/minimizer/js.php b/lib/private/minimizer/js.php
similarity index 100%
rename from lib/minimizer/js.php
rename to lib/private/minimizer/js.php
diff --git a/lib/navigationmanager.php b/lib/private/navigationmanager.php
similarity index 100%
rename from lib/navigationmanager.php
rename to lib/private/navigationmanager.php
diff --git a/lib/notsquareexception.php b/lib/private/notsquareexception.php
similarity index 100%
rename from lib/notsquareexception.php
rename to lib/private/notsquareexception.php
diff --git a/lib/ocs.php b/lib/private/ocs.php
similarity index 100%
rename from lib/ocs.php
rename to lib/private/ocs.php
diff --git a/lib/ocs/cloud.php b/lib/private/ocs/cloud.php
similarity index 100%
rename from lib/ocs/cloud.php
rename to lib/private/ocs/cloud.php
diff --git a/lib/ocs/config.php b/lib/private/ocs/config.php
similarity index 100%
rename from lib/ocs/config.php
rename to lib/private/ocs/config.php
diff --git a/lib/ocs/person.php b/lib/private/ocs/person.php
similarity index 100%
rename from lib/ocs/person.php
rename to lib/private/ocs/person.php
diff --git a/lib/ocs/privatedata.php b/lib/private/ocs/privatedata.php
similarity index 100%
rename from lib/ocs/privatedata.php
rename to lib/private/ocs/privatedata.php
diff --git a/lib/ocs/result.php b/lib/private/ocs/result.php
similarity index 100%
rename from lib/ocs/result.php
rename to lib/private/ocs/result.php
diff --git a/lib/ocsclient.php b/lib/private/ocsclient.php
similarity index 100%
rename from lib/ocsclient.php
rename to lib/private/ocsclient.php
diff --git a/lib/preferences.php b/lib/private/preferences.php
similarity index 100%
rename from lib/preferences.php
rename to lib/private/preferences.php
diff --git a/lib/preview.php b/lib/private/preview.php
similarity index 100%
rename from lib/preview.php
rename to lib/private/preview.php
diff --git a/lib/preview/image.php b/lib/private/preview/image.php
similarity index 100%
rename from lib/preview/image.php
rename to lib/private/preview/image.php
diff --git a/lib/preview/movies.php b/lib/private/preview/movies.php
similarity index 100%
rename from lib/preview/movies.php
rename to lib/private/preview/movies.php
diff --git a/lib/preview/mp3.php b/lib/private/preview/mp3.php
similarity index 100%
rename from lib/preview/mp3.php
rename to lib/private/preview/mp3.php
diff --git a/lib/preview/office-cl.php b/lib/private/preview/office-cl.php
similarity index 100%
rename from lib/preview/office-cl.php
rename to lib/private/preview/office-cl.php
diff --git a/lib/preview/office-fallback.php b/lib/private/preview/office-fallback.php
similarity index 100%
rename from lib/preview/office-fallback.php
rename to lib/private/preview/office-fallback.php
diff --git a/lib/preview/office.php b/lib/private/preview/office.php
similarity index 100%
rename from lib/preview/office.php
rename to lib/private/preview/office.php
diff --git a/lib/preview/pdf.php b/lib/private/preview/pdf.php
similarity index 100%
rename from lib/preview/pdf.php
rename to lib/private/preview/pdf.php
diff --git a/lib/preview/provider.php b/lib/private/preview/provider.php
similarity index 100%
rename from lib/preview/provider.php
rename to lib/private/preview/provider.php
diff --git a/lib/preview/svg.php b/lib/private/preview/svg.php
similarity index 100%
rename from lib/preview/svg.php
rename to lib/private/preview/svg.php
diff --git a/lib/preview/txt.php b/lib/private/preview/txt.php
similarity index 100%
rename from lib/preview/txt.php
rename to lib/private/preview/txt.php
diff --git a/lib/preview/unknown.php b/lib/private/preview/unknown.php
similarity index 100%
rename from lib/preview/unknown.php
rename to lib/private/preview/unknown.php
diff --git a/lib/previewmanager.php b/lib/private/previewmanager.php
similarity index 100%
rename from lib/previewmanager.php
rename to lib/private/previewmanager.php
diff --git a/lib/request.php b/lib/private/request.php
similarity index 100%
rename from lib/request.php
rename to lib/private/request.php
diff --git a/lib/response.php b/lib/private/response.php
similarity index 100%
rename from lib/response.php
rename to lib/private/response.php
diff --git a/lib/route.php b/lib/private/route.php
similarity index 100%
rename from lib/route.php
rename to lib/private/route.php
diff --git a/lib/router.php b/lib/private/router.php
similarity index 100%
rename from lib/router.php
rename to lib/private/router.php
diff --git a/lib/search.php b/lib/private/search.php
similarity index 100%
rename from lib/search.php
rename to lib/private/search.php
diff --git a/lib/search/provider.php b/lib/private/search/provider.php
similarity index 100%
rename from lib/search/provider.php
rename to lib/private/search/provider.php
diff --git a/lib/search/provider/file.php b/lib/private/search/provider/file.php
similarity index 100%
rename from lib/search/provider/file.php
rename to lib/private/search/provider/file.php
diff --git a/lib/search/result.php b/lib/private/search/result.php
similarity index 100%
rename from lib/search/result.php
rename to lib/private/search/result.php
diff --git a/lib/server.php b/lib/private/server.php
similarity index 100%
rename from lib/server.php
rename to lib/private/server.php
diff --git a/lib/session/internal.php b/lib/private/session/internal.php
similarity index 100%
rename from lib/session/internal.php
rename to lib/private/session/internal.php
diff --git a/lib/session/memory.php b/lib/private/session/memory.php
similarity index 100%
rename from lib/session/memory.php
rename to lib/private/session/memory.php
diff --git a/lib/session/session.php b/lib/private/session/session.php
similarity index 100%
rename from lib/session/session.php
rename to lib/private/session/session.php
diff --git a/lib/setup.php b/lib/private/setup.php
similarity index 100%
rename from lib/setup.php
rename to lib/private/setup.php
diff --git a/lib/setup/abstractdatabase.php b/lib/private/setup/abstractdatabase.php
similarity index 100%
rename from lib/setup/abstractdatabase.php
rename to lib/private/setup/abstractdatabase.php
diff --git a/lib/setup/mssql.php b/lib/private/setup/mssql.php
similarity index 100%
rename from lib/setup/mssql.php
rename to lib/private/setup/mssql.php
diff --git a/lib/setup/mysql.php b/lib/private/setup/mysql.php
similarity index 100%
rename from lib/setup/mysql.php
rename to lib/private/setup/mysql.php
diff --git a/lib/setup/oci.php b/lib/private/setup/oci.php
similarity index 100%
rename from lib/setup/oci.php
rename to lib/private/setup/oci.php
diff --git a/lib/setup/postgresql.php b/lib/private/setup/postgresql.php
similarity index 100%
rename from lib/setup/postgresql.php
rename to lib/private/setup/postgresql.php
diff --git a/lib/setup/sqlite.php b/lib/private/setup/sqlite.php
similarity index 100%
rename from lib/setup/sqlite.php
rename to lib/private/setup/sqlite.php
diff --git a/lib/subadmin.php b/lib/private/subadmin.php
similarity index 100%
rename from lib/subadmin.php
rename to lib/private/subadmin.php
diff --git a/lib/template.php b/lib/private/template.php
similarity index 100%
rename from lib/template.php
rename to lib/private/template.php
diff --git a/lib/template/base.php b/lib/private/template/base.php
similarity index 100%
rename from lib/template/base.php
rename to lib/private/template/base.php
diff --git a/lib/template/cssresourcelocator.php b/lib/private/template/cssresourcelocator.php
similarity index 100%
rename from lib/template/cssresourcelocator.php
rename to lib/private/template/cssresourcelocator.php
diff --git a/lib/template/functions.php b/lib/private/template/functions.php
similarity index 100%
rename from lib/template/functions.php
rename to lib/private/template/functions.php
diff --git a/lib/template/jsresourcelocator.php b/lib/private/template/jsresourcelocator.php
similarity index 100%
rename from lib/template/jsresourcelocator.php
rename to lib/private/template/jsresourcelocator.php
diff --git a/lib/template/resourcelocator.php b/lib/private/template/resourcelocator.php
similarity index 100%
rename from lib/template/resourcelocator.php
rename to lib/private/template/resourcelocator.php
diff --git a/lib/template/templatefilelocator.php b/lib/private/template/templatefilelocator.php
similarity index 100%
rename from lib/template/templatefilelocator.php
rename to lib/private/template/templatefilelocator.php
diff --git a/lib/templatelayout.php b/lib/private/templatelayout.php
similarity index 100%
rename from lib/templatelayout.php
rename to lib/private/templatelayout.php
diff --git a/lib/updater.php b/lib/private/updater.php
similarity index 100%
rename from lib/updater.php
rename to lib/private/updater.php
diff --git a/lib/user.php b/lib/private/user.php
similarity index 100%
rename from lib/user.php
rename to lib/private/user.php
diff --git a/lib/user/backend.php b/lib/private/user/backend.php
similarity index 100%
rename from lib/user/backend.php
rename to lib/private/user/backend.php
diff --git a/lib/user/database.php b/lib/private/user/database.php
similarity index 100%
rename from lib/user/database.php
rename to lib/private/user/database.php
diff --git a/lib/user/dummy.php b/lib/private/user/dummy.php
similarity index 100%
rename from lib/user/dummy.php
rename to lib/private/user/dummy.php
diff --git a/lib/user/example.php b/lib/private/user/example.php
similarity index 100%
rename from lib/user/example.php
rename to lib/private/user/example.php
diff --git a/lib/user/http.php b/lib/private/user/http.php
similarity index 100%
rename from lib/user/http.php
rename to lib/private/user/http.php
diff --git a/lib/user/interface.php b/lib/private/user/interface.php
similarity index 100%
rename from lib/user/interface.php
rename to lib/private/user/interface.php
diff --git a/lib/user/manager.php b/lib/private/user/manager.php
similarity index 100%
rename from lib/user/manager.php
rename to lib/private/user/manager.php
diff --git a/lib/user/session.php b/lib/private/user/session.php
similarity index 100%
rename from lib/user/session.php
rename to lib/private/user/session.php
diff --git a/lib/user/user.php b/lib/private/user/user.php
similarity index 100%
rename from lib/user/user.php
rename to lib/private/user/user.php
diff --git a/lib/util.php b/lib/private/util.php
similarity index 100%
rename from lib/util.php
rename to lib/private/util.php
diff --git a/lib/vobject.php b/lib/private/vobject.php
similarity index 100%
rename from lib/vobject.php
rename to lib/private/vobject.php
diff --git a/lib/vobject/compoundproperty.php b/lib/private/vobject/compoundproperty.php
similarity index 100%
rename from lib/vobject/compoundproperty.php
rename to lib/private/vobject/compoundproperty.php
diff --git a/lib/vobject/stringproperty.php b/lib/private/vobject/stringproperty.php
similarity index 100%
rename from lib/vobject/stringproperty.php
rename to lib/private/vobject/stringproperty.php
diff --git a/tests/lib/autoloader.php b/tests/lib/autoloader.php
index 0e7d606ccf..b182dc8747 100644
--- a/tests/lib/autoloader.php
+++ b/tests/lib/autoloader.php
@@ -19,15 +19,15 @@ class AutoLoader extends \PHPUnit_Framework_TestCase {
 	}
 
 	public function testLeadingSlashOnClassName() {
-		$this->assertEquals(array('files/storage/local.php'), $this->loader->findClass('\OC\Files\Storage\Local'));
+		$this->assertEquals(array('private/files/storage/local.php'), $this->loader->findClass('\OC\Files\Storage\Local'));
 	}
 
 	public function testNoLeadingSlashOnClassName() {
-		$this->assertEquals(array('files/storage/local.php'), $this->loader->findClass('OC\Files\Storage\Local'));
+		$this->assertEquals(array('private/files/storage/local.php'), $this->loader->findClass('OC\Files\Storage\Local'));
 	}
 
 	public function testLegacyPath() {
-		$this->assertEquals(array('legacy/files.php', 'files.php'), $this->loader->findClass('OC_Files'));
+		$this->assertEquals(array('private/legacy/files.php', 'private/files.php'), $this->loader->findClass('OC_Files'));
 	}
 
 	public function testClassPath() {
@@ -54,11 +54,11 @@ class AutoLoader extends \PHPUnit_Framework_TestCase {
 	}
 
 	public function testLoadCoreNamespace() {
-		$this->assertEquals(array('foo/bar.php'), $this->loader->findClass('OC\Foo\Bar'));
+		$this->assertEquals(array('private/foo/bar.php'), $this->loader->findClass('OC\Foo\Bar'));
 	}
 
 	public function testLoadCore() {
-		$this->assertEquals(array('legacy/foo/bar.php', 'foo/bar.php'), $this->loader->findClass('OC_Foo_Bar'));
+		$this->assertEquals(array('private/legacy/foo/bar.php', 'private/foo/bar.php'), $this->loader->findClass('OC_Foo_Bar'));
 	}
 
 	public function testLoadPublicNamespace() {
-- 
GitLab


From 8e0060405dd585a33f58d6a5520532726b3af5d6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Mon, 30 Sep 2013 16:39:03 +0200
Subject: [PATCH 242/248] reorganize file in lib

---
 .../connector/sabre/aborteduploaddetectionplugin.php              | 0
 lib/{ => private}/tagmanager.php                                  | 0
 lib/{ => private}/tags.php                                        | 0
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename lib/{ => private}/connector/sabre/aborteduploaddetectionplugin.php (100%)
 rename lib/{ => private}/tagmanager.php (100%)
 rename lib/{ => private}/tags.php (100%)

diff --git a/lib/connector/sabre/aborteduploaddetectionplugin.php b/lib/private/connector/sabre/aborteduploaddetectionplugin.php
similarity index 100%
rename from lib/connector/sabre/aborteduploaddetectionplugin.php
rename to lib/private/connector/sabre/aborteduploaddetectionplugin.php
diff --git a/lib/tagmanager.php b/lib/private/tagmanager.php
similarity index 100%
rename from lib/tagmanager.php
rename to lib/private/tagmanager.php
diff --git a/lib/tags.php b/lib/private/tags.php
similarity index 100%
rename from lib/tags.php
rename to lib/private/tags.php
-- 
GitLab


From b948c1a1b642e2cf99c3e59aff785d82ddec7645 Mon Sep 17 00:00:00 2001
From: Frank Karlitschek <frank@owncloud.org>
Date: Sat, 28 Sep 2013 17:43:14 +0200
Subject: [PATCH 243/248] prepare the updater for the new update channels

---
 lib/updater.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/updater.php b/lib/updater.php
index df7332a96a..9827d8a8c1 100644
--- a/lib/updater.php
+++ b/lib/updater.php
@@ -56,7 +56,7 @@ class Updater extends BasicEmitter {
 		$version = \OC_Util::getVersion();
 		$version['installed'] = \OC_Appconfig::getValue('core', 'installedat');
 		$version['updated'] = \OC_Appconfig::getValue('core', 'lastupdatedat');
-		$version['updatechannel'] = 'stable';
+		$version['updatechannel'] = \OC_Util::getChannel(); 
 		$version['edition'] = \OC_Util::getEditionString();
 		$versionString = implode('x', $version);
 
-- 
GitLab


From 69dd6af57489395527e94b033e3f0b8d5c73ca12 Mon Sep 17 00:00:00 2001
From: Frank Karlitschek <frank@owncloud.org>
Date: Sat, 28 Sep 2013 02:15:18 +0200
Subject: [PATCH 244/248] use === Shoudn't make a difference in this case but
 just in case

Conflicts:
	lib/ocsclient.php
---
 lib/ocsclient.php | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/lib/ocsclient.php b/lib/ocsclient.php
index bd0302a2a8..67966fe7cd 100644
--- a/lib/ocsclient.php
+++ b/lib/ocsclient.php
@@ -36,7 +36,12 @@ class OC_OCSClient{
 	 * to set it in the config file or it will fallback to the default
 	 */
 	private static function getAppStoreURL() {
-		$url = OC_Config::getValue('appstoreurl', 'http://api.apps.owncloud.com/v1');
+		if(OC_Util::getEditionString()===''){
+			$default='http://api.apps.owncloud.com/v1';
+		}else{
+			$default='';
+		}
+		$url = OC_Config::getValue('appstoreurl', $default);
 		return($url);
 	}
 
-- 
GitLab


From 2cf26ee0b16bebe83a08e4be89681f73208ba9ae Mon Sep 17 00:00:00 2001
From: Frank Karlitschek <frank@owncloud.org>
Date: Fri, 27 Sep 2013 23:41:24 +0200
Subject: [PATCH 245/248] put the current version and edition into a seperate
 file to simplify packaging. introduce update channels and build version for
 automated channel updates. More about that later

Conflicts:
	lib/ocsclient.php
	lib/util.php
---
 lib/util.php | 43 ++++++++++++++++++++++++++++++++++++++-----
 version.php  | 17 +++++++++++++++++
 2 files changed, 55 insertions(+), 5 deletions(-)
 create mode 100644 version.php

diff --git a/lib/util.php b/lib/util.php
index e03667b079..5bfa7d7422 100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -96,9 +96,8 @@ class OC_Util {
 	 * @return array
 	 */
 	public static function getVersion() {
-		// hint: We only can count up. Reset minor/patchlevel when
-		// updating major/minor version number.
-		return array(5, 80, 05);
+		OC_Util::loadVersion();
+		return $_SESSION['OC_Version'];
 	}
 
 	/**
@@ -106,7 +105,8 @@ class OC_Util {
 	 * @return string
 	 */
 	public static function getVersionString() {
-		return '6.0 pre alpha';
+		OC_Util::loadVersion();
+		return $_SESSION['OC_VersionString'];
 	}
 
 	/**
@@ -116,7 +116,40 @@ class OC_Util {
 	 * @return string
 	 */
 	public static function getEditionString() {
-		return '';
+		OC_Util::loadVersion();
+		return $_SESSION['OC_Edition'];
+	}
+
+	/**
+	 * @description get the update channel of the current installed of ownCloud.
+	 * @return string
+	 */
+	public static function getChannel() {
+		OC_Util::loadVersion();
+		return $_SESSION['OC_Channel'];
+	}
+        
+	/**
+	 * @description get the build number of the current installed of ownCloud.
+	 * @return string
+	 */
+	public static function getBuild() {
+		OC_Util::loadVersion();
+		return $_SESSION['OC_Build'];
+	}
+
+	/**
+	 * @description load the version.php into the session as cache
+	 */
+	private static function loadVersion() {
+		if(!isset($_SESSION['OC_Version'])){
+			require('version.php');
+			$_SESSION['OC_Version']=$OC_Version;
+			$_SESSION['OC_VersionString']=$OC_VersionString;
+			$_SESSION['OC_Edition']=$OC_Edition;
+			$_SESSION['OC_Channel']=$OC_Channel;
+			$_SESSION['OC_Build']=$OC_Build;
+		}
 	}
 
 	/**
diff --git a/version.php b/version.php
new file mode 100644
index 0000000000..dcdc288959
--- /dev/null
+++ b/version.php
@@ -0,0 +1,17 @@
+<?php
+
+// We only can count up. Reset minor/patchlevel when updating major/minor version number.
+$OC_Version=array(5, 80, 8);
+
+// The human radable string
+$OC_VersionString='6.0 pre alpha';
+
+// The ownCloud edition
+$OC_Edition='';
+
+// The ownCloud channel
+$OC_Channel='';
+
+// The build number
+$OC_Build='';
+
-- 
GitLab


From 7c659eb2917795ef2dd7ada24c00d7db861a5aec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Mon, 30 Sep 2013 20:28:00 +0200
Subject: [PATCH 246/248] use public api for session access from server
 container

---
 lib/util.php | 30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/lib/util.php b/lib/util.php
index 36969f096f..ea2eb98d23 100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -107,7 +107,7 @@ class OC_Util {
 	 */
 	public static function getVersion() {
 		OC_Util::loadVersion();
-		return $_SESSION['OC_Version'];
+		return \OC::$server->getSession()->get('OC_Version');
 	}
 
 	/**
@@ -116,7 +116,7 @@ class OC_Util {
 	 */
 	public static function getVersionString() {
 		OC_Util::loadVersion();
-		return $_SESSION['OC_VersionString'];
+		return \OC::$server->getSession()->get('OC_VersionString');
 	}
 
 	/**
@@ -127,7 +127,7 @@ class OC_Util {
 	 */
 	public static function getEditionString() {
 		OC_Util::loadVersion();
-		return $_SESSION['OC_Edition'];
+		return \OC::$server->getSession()->get('OC_Edition');
 	}
 
 	/**
@@ -136,7 +136,7 @@ class OC_Util {
 	 */
 	public static function getChannel() {
 		OC_Util::loadVersion();
-		return $_SESSION['OC_Channel'];
+		return \OC::$server->getSession()->get('OC_Channel');
 	}
         
 	/**
@@ -145,20 +145,26 @@ class OC_Util {
 	 */
 	public static function getBuild() {
 		OC_Util::loadVersion();
-		return $_SESSION['OC_Build'];
+		return \OC::$server->getSession()->get('OC_Build');
 	}
 
 	/**
 	 * @description load the version.php into the session as cache
 	 */
 	private static function loadVersion() {
-		if(!isset($_SESSION['OC_Version'])){
-			require('version.php');
-			$_SESSION['OC_Version']=$OC_Version;
-			$_SESSION['OC_VersionString']=$OC_VersionString;
-			$_SESSION['OC_Edition']=$OC_Edition;
-			$_SESSION['OC_Channel']=$OC_Channel;
-			$_SESSION['OC_Build']=$OC_Build;
+		if(!\OC::$server->getSession()->exists('OC_Version')) {
+			require 'version.php';
+			$session = \OC::$server->getSession();
+			/** @var $OC_Version string */
+			$session->set('OC_Version', $OC_Version);
+			/** @var $OC_VersionString string */
+			$session->set('OC_VersionString', $OC_VersionString);
+			/** @var $OC_Edition string */
+			$session->set('OC_Edition', $OC_Edition);
+			/** @var $OC_Channel string */
+			$session->set('OC_Channel', $OC_Channel);
+			/** @var $OC_Build string */
+			$session->set('OC_Build', $OC_Build);
 		}
 	}
 
-- 
GitLab


From bf0f3bf0da64b8b81405846169b5ee27a4289362 Mon Sep 17 00:00:00 2001
From: Frank Karlitschek <frank@owncloud.org>
Date: Tue, 1 Oct 2013 12:37:19 +0200
Subject: [PATCH 247/248] use a 4 digit number

---
 version.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/version.php b/version.php
index dcdc288959..3a9cac1d38 100644
--- a/version.php
+++ b/version.php
@@ -1,7 +1,7 @@
 <?php
 
 // We only can count up. Reset minor/patchlevel when updating major/minor version number.
-$OC_Version=array(5, 80, 8);
+$OC_Version=array(5, 80, 8, 0);
 
 // The human radable string
 $OC_VersionString='6.0 pre alpha';
-- 
GitLab


From 6cda88b49dc224514e6720a9452a1cea1476b960 Mon Sep 17 00:00:00 2001
From: Frank Karlitschek <frank@owncloud.org>
Date: Tue, 1 Oct 2013 14:28:59 +0200
Subject: [PATCH 248/248] add explanation

---
 version.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/version.php b/version.php
index 3a9cac1d38..eb2e9a4a68 100644
--- a/version.php
+++ b/version.php
@@ -1,6 +1,6 @@
 <?php
 
-// We only can count up. Reset minor/patchlevel when updating major/minor version number.
+// We only can count up. The 4. digit is only for the internal patchlevel to trigger DB upgrades between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel when updating major/minor version number.
 $OC_Version=array(5, 80, 8, 0);
 
 // The human radable string
-- 
GitLab