summaryrefslogtreecommitdiffstats
path: root/apps/files
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2012-10-30 22:59:55 +0100
committerRobin Appelman <icewind@owncloud.com>2012-10-30 22:59:55 +0100
commit6e9e2634978f08494a13bb3c5185032fc0ed7792 (patch)
tree8f0cf5eef65c29715c84b2c253834a2fa047bbd7 /apps/files
parent890fbb82993db294489fb6ecf14d91d7652763d1 (diff)
parent6738275b01abf514d32171da604da8d63a2808e0 (diff)
downloadnextcloud-server-6e9e2634978f08494a13bb3c5185032fc0ed7792.tar.gz
nextcloud-server-6e9e2634978f08494a13bb3c5185032fc0ed7792.zip
merge master into filesystem
Diffstat (limited to 'apps/files')
-rw-r--r--apps/files/ajax/move.php4
-rw-r--r--apps/files/ajax/timezone.php5
-rw-r--r--apps/files/appinfo/remote.php4
-rw-r--r--apps/files/index.php2
-rw-r--r--apps/files/js/fileactions.js208
-rw-r--r--apps/files/js/files.js8
-rw-r--r--apps/files/l10n/de.php2
-rw-r--r--apps/files/l10n/de_DE.php26
-rw-r--r--apps/files/l10n/th_TH.php14
9 files changed, 137 insertions, 136 deletions
diff --git a/apps/files/ajax/move.php b/apps/files/ajax/move.php
index e8b0aea063f..d4eacd962a0 100644
--- a/apps/files/ajax/move.php
+++ b/apps/files/ajax/move.php
@@ -9,9 +9,9 @@ OCP\JSON::callCheck();
// Get data
$dir = stripslashes($_GET["dir"]);
$file = stripslashes($_GET["file"]);
-$target = stripslashes(urldecode($_GET["target"]));
+$target = stripslashes(rawurldecode($_GET["target"]));
-if (OC_User::isLoggedIn() && ($dir != '' || $file != 'Shared')) {
+if ($dir != '' || $file != 'Shared') {
$targetFile = \OC\Files\Filesystem::normalizePath($dir . '/' . $file);
$sourceFile = \OC\Files\Filesystem::normalizePath($target . '/' . $file);
if(\OC\Files\Filesystem::rename($sourceFile, $targetFile)) {
diff --git a/apps/files/ajax/timezone.php b/apps/files/ajax/timezone.php
index b71fa3940cb..b547d162b3e 100644
--- a/apps/files/ajax/timezone.php
+++ b/apps/files/ajax/timezone.php
@@ -1,5 +1,2 @@
<?php
- // FIXME: this should start a secure session if forcessl is enabled
- // see lib/base.php for an example
- //session_start();
- $_SESSION['timezone'] = $_GET['time'];
+$_SESSION['timezone'] = $_GET['time'];
diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php
index a84216b61b7..9c7b9ab6d5b 100644
--- a/apps/files/appinfo/remote.php
+++ b/apps/files/appinfo/remote.php
@@ -23,7 +23,7 @@
*
*/
// only need filesystem apps
-$RUNTIME_APPTYPES=array('filesystem','authentication');
+$RUNTIME_APPTYPES=array('filesystem', 'authentication');
OC_App::loadApps($RUNTIME_APPTYPES);
// Backends
@@ -38,7 +38,7 @@ $server = new Sabre_DAV_Server($publicDir);
$server->setBaseUri($baseuri);
// Load plugins
-$server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend,'ownCloud'));
+$server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend, 'ownCloud'));
$server->addPlugin(new Sabre_DAV_Locks_Plugin($lockBackend));
$server->addPlugin(new Sabre_DAV_Browser_Plugin(false)); // Show something in the Browser, but no upload
diff --git a/apps/files/index.php b/apps/files/index.php
index 43a559d034e..cdb88ab83f2 100644
--- a/apps/files/index.php
+++ b/apps/files/index.php
@@ -36,7 +36,7 @@ if(!isset($_SESSION['timezone'])) {
}
OCP\App::setActiveNavigationEntry( 'files_index' );
// Load the files
-$dir = isset( $_GET['dir'] ) ? urldecode(stripslashes($_GET['dir'])) : '';
+$dir = isset( $_GET['dir'] ) ? rawurldecode(stripslashes($_GET['dir'])) : '';
// Redirect if directory does not exist
if(!\OC\Files\Filesystem::is_dir($dir.'/')) {
header('Location: '.$_SERVER['SCRIPT_NAME'].'');
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index 1cf80352bef..82d990bf780 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -1,191 +1,189 @@
-var FileActions={
- actions:{},
- defaults:{},
- icons:{},
- currentFile:null,
- register:function(mime,name,permissions,icon,action){
- if(!FileActions.actions[mime]){
- FileActions.actions[mime]={};
+var FileActions = {
+ actions: {},
+ defaults: {},
+ icons: {},
+ currentFile: null,
+ register: function (mime, name, permissions, icon, action) {
+ if (!FileActions.actions[mime]) {
+ FileActions.actions[mime] = {};
}
if (!FileActions.actions[mime][name]) {
FileActions.actions[mime][name] = {};
}
FileActions.actions[mime][name]['action'] = action;
FileActions.actions[mime][name]['permissions'] = permissions;
- FileActions.icons[name]=icon;
+ FileActions.icons[name] = icon;
},
- setDefault:function(mime,name){
- FileActions.defaults[mime]=name;
+ setDefault: function (mime, name) {
+ FileActions.defaults[mime] = name;
},
- get:function(mime,type,permissions){
- var actions={};
- if(FileActions.actions.all){
- actions=$.extend( actions, FileActions.actions.all );
+ get: function (mime, type, permissions) {
+ var actions = {};
+ if (FileActions.actions.all) {
+ actions = $.extend(actions, FileActions.actions.all);
}
- if(mime){
- if(FileActions.actions[mime]){
- actions=$.extend( actions, FileActions.actions[mime] );
+ if (mime) {
+ if (FileActions.actions[mime]) {
+ actions = $.extend(actions, FileActions.actions[mime]);
}
- var mimePart=mime.substr(0,mime.indexOf('/'));
- if(FileActions.actions[mimePart]){
- actions=$.extend( actions, FileActions.actions[mimePart] );
+ var mimePart = mime.substr(0, mime.indexOf('/'));
+ if (FileActions.actions[mimePart]) {
+ actions = $.extend(actions, FileActions.actions[mimePart]);
}
}
- if(type){//type is 'dir' or 'file'
- if(FileActions.actions[type]){
- actions=$.extend( actions, FileActions.actions[type] );
+ if (type) {//type is 'dir' or 'file'
+ if (FileActions.actions[type]) {
+ actions = $.extend(actions, FileActions.actions[type]);
}
}
var filteredActions = {};
- $.each(actions, function(name, action) {
+ $.each(actions, function (name, action) {
if (action.permissions & permissions) {
filteredActions[name] = action.action;
}
});
return filteredActions;
},
- getDefault:function(mime,type,permissions){
- if(mime){
- var mimePart=mime.substr(0,mime.indexOf('/'));
+ getDefault: function (mime, type, permissions) {
+ if (mime) {
+ var mimePart = mime.substr(0, mime.indexOf('/'));
}
- var name=false;
- if(mime && FileActions.defaults[mime]){
- name=FileActions.defaults[mime];
- }else if(mime && FileActions.defaults[mimePart]){
- name=FileActions.defaults[mimePart];
- }else if(type && FileActions.defaults[type]){
- name=FileActions.defaults[type];
- }else{
- name=FileActions.defaults.all;
+ var name = false;
+ if (mime && FileActions.defaults[mime]) {
+ name = FileActions.defaults[mime];
+ } else if (mime && FileActions.defaults[mimePart]) {
+ name = FileActions.defaults[mimePart];
+ } else if (type && FileActions.defaults[type]) {
+ name = FileActions.defaults[type];
+ } else {
+ name = FileActions.defaults.all;
}
- var actions=this.get(mime,type,permissions);
+ var actions = this.get(mime, type, permissions);
return actions[name];
},
- display:function(parent){
- FileActions.currentFile=parent;
- $('#fileList span.fileactions, #fileList td.date a.action').remove();
- var actions=FileActions.get(FileActions.getCurrentMimeType(),FileActions.getCurrentType(), FileActions.getCurrentPermissions());
- var file=FileActions.getCurrentFile();
- if($('tr').filterAttr('data-file',file).data('renaming')){
+ display: function (parent) {
+ FileActions.currentFile = parent;
+ var actions = FileActions.get(FileActions.getCurrentMimeType(), FileActions.getCurrentType(), FileActions.getCurrentPermissions());
+ var file = FileActions.getCurrentFile();
+ if ($('tr').filterAttr('data-file', file).data('renaming')) {
return;
}
parent.children('a.name').append('<span class="fileactions" />');
- var defaultAction=FileActions.getDefault(FileActions.getCurrentMimeType(),FileActions.getCurrentType(), FileActions.getCurrentPermissions());
- for(name in actions){
+ var defaultAction = FileActions.getDefault(FileActions.getCurrentMimeType(), FileActions.getCurrentType(), FileActions.getCurrentPermissions());
+ for (name in actions) {
// NOTE: Temporary fix to prevent rename action in root of Shared directory
- if (name == 'Rename' && $('#dir').val() == '/Shared') {
+ if (name === 'Rename' && $('#dir').val() === '/Shared') {
continue;
}
- if((name=='Download' || actions[name]!=defaultAction) && name!='Delete'){
- var img=FileActions.icons[name];
- if(img.call){
- img=img(file);
+ if ((name === 'Download' || actions[name] !== defaultAction) && name !== 'Delete') {
+ var img = FileActions.icons[name];
+ if (img.call) {
+ img = img(file);
}
- var html='<a href="#" class="action" style="display:none">';
- if(img) { html+='<img src="'+img+'"/> '; }
- html += t('files', name) +'</a>';
- var element=$(html);
- element.data('action',name);
- element.click(function(event){
+ var html = '<a href="#" class="action" data-action="'+name+'">';
+ if (img) {
+ html += '<img class ="svg" src="' + img + '"/> ';
+ }
+ html += t('files', name) + '</a>';
+ var element = $(html);
+ element.data('action', name);
+ element.click(function (event) {
+ FileActions.currentFile = $(this).parent().parent().parent();
event.stopPropagation();
event.preventDefault();
- var action=actions[$(this).data('action')];
- var currentFile=FileActions.getCurrentFile();
- FileActions.hide();
+ var action = actions[$(this).data('action')];
+ var currentFile = FileActions.getCurrentFile();
action(currentFile);
});
- element.hide();
parent.find('a.name>span.fileactions').append(element);
}
}
- if(actions['Delete']){
- var img=FileActions.icons['Delete'];
- if(img.call){
- img=img(file);
+ if (actions['Delete']) {
+ var img = FileActions.icons['Delete'];
+ if (img.call) {
+ img = img(file);
}
// NOTE: Temporary fix to allow unsharing of files in root of Shared folder
if ($('#dir').val() == '/Shared') {
- var html = '<a href="#" original-title="' + t('files', 'Unshare') + '" class="action delete" style="display:none" />';
+ var html = '<a href="#" original-title="' + t('files', 'Unshare') + '" class="action delete" />';
} else {
- var html='<a href="#" original-title="' + t('files', 'Delete') + '" class="action delete" style="display:none" />';
+ var html = '<a href="#" original-title="' + t('files', 'Delete') + '" class="action delete" />';
}
- var element=$(html);
- if(img){
- element.append($('<img src="'+img+'"/>'));
+ var element = $(html);
+ if (img) {
+ element.append($('<img class ="svg" src="' + img + '"/>'));
}
- element.data('action','Delete');
- element.click(function(event){
+ element.data('action', 'Delete');
+ element.click(function (event) {
event.stopPropagation();
event.preventDefault();
- var action=actions[$(this).data('action')];
- var currentFile=FileActions.getCurrentFile();
- FileActions.hide();
+ var action = actions[$(this).data('action')];
+ var currentFile = FileActions.getCurrentFile();
action(currentFile);
});
- element.hide();
parent.parent().children().last().append(element);
}
- $('#fileList .action').css('-o-transition-property','none');//temporarly disable
- $('#fileList .action').fadeIn(200,function(){
- $('#fileList .action').css('-o-transition-property','opacity');
- });
- return false;
- },
- hide:function(){
- $('#fileList span.fileactions, #fileList td.date a.action').fadeOut(200,function(){
- $(this).remove();
- });
},
- getCurrentFile:function(){
+ getCurrentFile: function () {
return FileActions.currentFile.parent().attr('data-file');
},
- getCurrentMimeType:function(){
+ getCurrentMimeType: function () {
return FileActions.currentFile.parent().attr('data-mime');
},
- getCurrentType:function(){
+ getCurrentType: function () {
return FileActions.currentFile.parent().attr('data-type');
},
- getCurrentPermissions:function() {
+ getCurrentPermissions: function () {
return FileActions.currentFile.parent().data('permissions');
}
};
-$(document).ready(function(){
- if($('#allowZipDownload').val() == 1){
+$(document).ready(function () {
+ if ($('#allowZipDownload').val() == 1) {
var downloadScope = 'all';
} else {
var downloadScope = 'file';
}
- FileActions.register(downloadScope,'Download', OC.PERMISSION_READ, function(){return OC.imagePath('core','actions/download');},function(filename){
- window.location=OC.filePath('files', 'ajax', 'download.php') + '?files='+encodeURIComponent(filename)+'&dir='+encodeURIComponent($('#dir').val());
+ FileActions.register(downloadScope, 'Download', OC.PERMISSION_READ, function () {
+ return OC.imagePath('core', 'actions/download');
+ }, function (filename) {
+ window.location = OC.filePath('files', 'ajax', 'download.php') + '?files=' + encodeURIComponent(filename) + '&dir=' + encodeURIComponent($('#dir').val());
+ });
+
+ $('#fileList tr').each(function(){
+ FileActions.display($(this).children('td.filename'));
});
});
-FileActions.register('all','Delete', OC.PERMISSION_DELETE, function(){return OC.imagePath('core','actions/delete');},function(filename){
- if(Files.cancelUpload(filename)) {
- if(filename.substr){
- filename=[filename];
+FileActions.register('all', 'Delete', OC.PERMISSION_DELETE, function () {
+ return OC.imagePath('core', 'actions/delete');
+}, function (filename) {
+ if (Files.cancelUpload(filename)) {
+ if (filename.substr) {
+ filename = [filename];
}
- $.each(filename,function(index,file){
- var filename = $('tr').filterAttr('data-file',file);
+ $.each(filename, function (index, file) {
+ var filename = $('tr').filterAttr('data-file', file);
filename.hide();
filename.find('input[type="checkbox"]').removeAttr('checked');
filename.removeClass('selected');
});
procesSelection();
- }else{
+ } else {
FileList.do_delete(filename);
}
$('.tipsy').remove();
});
// t('files', 'Rename')
-FileActions.register('all','Rename', OC.PERMISSION_UPDATE, function(){return OC.imagePath('core','actions/rename');},function(filename){
+FileActions.register('all', 'Rename', OC.PERMISSION_UPDATE, function () {
+ return OC.imagePath('core', 'actions/rename');
+}, function (filename) {
FileList.rename(filename);
});
-FileActions.register('dir','Open', OC.PERMISSION_READ, '', function(filename){
- window.location=OC.linkTo('files', 'index.php') + '?dir='+encodeURIComponent($('#dir').val()).replace(/%2F/g, '/')+'/'+encodeURIComponent(filename);
+FileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function (filename) {
+ window.location = OC.linkTo('files', 'index.php') + '?dir=' + encodeURIComponent($('#dir').val()).replace(/%2F/g, '/') + '/' + encodeURIComponent(filename);
});
-FileActions.setDefault('dir','Open');
+FileActions.setDefault('dir', 'Open');
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 549204e8572..2d9ccba424a 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -62,14 +62,6 @@ $(document).ready(function() {
return false;
});
- // Sets the file-action buttons behaviour :
- $('tr').live('mouseenter',function(event) {
- FileActions.display($(this).children('td.filename'));
- });
- $('tr').live('mouseleave',function(event) {
- FileActions.hide();
- });
-
var lastChecked;
// Sets the file link behaviour :
diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php
index 545f840d8ce..7dc5831e639 100644
--- a/apps/files/l10n/de.php
+++ b/apps/files/l10n/de.php
@@ -37,7 +37,7 @@
"{count} folders" => "{count} Ordner",
"1 file" => "1 Datei",
"{count} files" => "{count} Dateien",
-"seconds ago" => "Vor wenigen Sekunden",
+"seconds ago" => "Gerade eben",
"1 minute ago" => "vor einer Minute",
"{minutes} minutes ago" => "Vor {minutes} Minuten",
"today" => "Heute",
diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php
index 37e77472ab6..194bf6b4fda 100644
--- a/apps/files/l10n/de_DE.php
+++ b/apps/files/l10n/de_DE.php
@@ -1,10 +1,10 @@
<?php $TRANSLATIONS = array(
-"There is no error, the file uploaded with success" => "Datei fehlerfrei hochgeladen.",
+"There is no error, the file uploaded with success" => "Es sind keine Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Die Größe der hochzuladenden Datei überschreitet die upload_max_filesize-Richtlinie in php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Die Größe der hochzuladenden Datei überschreitet die MAX_FILE_SIZE-Richtlinie, die im HTML-Formular angegeben wurde",
"The uploaded file was only partially uploaded" => "Die Datei wurde nur teilweise hochgeladen.",
"No file was uploaded" => "Es wurde keine Datei hochgeladen.",
-"Missing a temporary folder" => "Temporärer Ordner fehlt.",
+"Missing a temporary folder" => "Der temporäre Ordner fehlt.",
"Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
"Files" => "Dateien",
"Unshare" => "Nicht mehr freigeben",
@@ -14,19 +14,19 @@
"replace" => "ersetzen",
"suggest name" => "Name vorschlagen",
"cancel" => "abbrechen",
-"replaced {new_name}" => "{new_name} ersetzt",
+"replaced {new_name}" => "{new_name} wurde ersetzt",
"undo" => "rückgängig machen",
-"replaced {new_name} with {old_name}" => "{old_name} ersetzt durch {new_name}",
+"replaced {new_name} with {old_name}" => "{old_name} wurde ersetzt durch {new_name}",
"unshared {files}" => "Freigabe für {files} beendet",
"deleted {files}" => "{files} gelöscht",
"generating ZIP-file, it may take some time." => "Erstelle ZIP-Datei. Dies kann eine Weile dauern.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ihre Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist.",
"Upload Error" => "Fehler beim Upload",
"Pending" => "Ausstehend",
-"1 file uploading" => "Eine Datei wird hoch geladen",
+"1 file uploading" => "1 Datei wird hochgeladen",
"{count} files uploading" => "{count} Dateien wurden hochgeladen",
"Upload cancelled." => "Upload abgebrochen.",
-"File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "Der Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.",
"Invalid name, '/' is not allowed." => "Ungültiger Name: \"/\" ist nicht erlaubt.",
"{count} files scanned" => "{count} Dateien wurden gescannt",
"error while scanning" => "Fehler beim Scannen",
@@ -37,16 +37,16 @@
"{count} folders" => "{count} Ordner",
"1 file" => "1 Datei",
"{count} files" => "{count} Dateien",
-"seconds ago" => "Vor wenigen Sekunden",
-"1 minute ago" => "vor einer Minute",
-"{minutes} minutes ago" => "vor {minutes} Minuten",
+"seconds ago" => "Gerade eben",
+"1 minute ago" => "Vor 1 Minute",
+"{minutes} minutes ago" => "Vor {minutes} Minuten",
"today" => "Heute",
"yesterday" => "Gestern",
-"{days} days ago" => "vor {days} Tage(en)",
+"{days} days ago" => "Vor {days} Tage(en)",
"last month" => "Letzten Monat",
-"months ago" => "Monate her",
+"months ago" => "Vor Monaten",
"last year" => "Letztes Jahr",
-"years ago" => "Jahre her",
+"years ago" => "Vor Jahren",
"File handling" => "Dateibehandlung",
"Maximum upload size" => "Maximale Upload-Größe",
"max. possible: " => "maximal möglich:",
@@ -64,7 +64,7 @@
"Nothing in here. Upload something!" => "Alles leer. Bitte laden Sie etwas hoch!",
"Share" => "Teilen",
"Download" => "Herunterladen",
-"Upload too large" => "Upload zu groß",
+"Upload too large" => "Der Upload ist zu groß",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.",
"Files are being scanned, please wait." => "Dateien werden gescannt, bitte warten.",
"Current scanning" => "Scanne"
diff --git a/apps/files/l10n/th_TH.php b/apps/files/l10n/th_TH.php
index 3645435e54b..9bde85229b4 100644
--- a/apps/files/l10n/th_TH.php
+++ b/apps/files/l10n/th_TH.php
@@ -10,25 +10,39 @@
"Unshare" => "ยกเลิกการแชร์ข้อมูล",
"Delete" => "ลบ",
"Rename" => "เปลี่ยนชื่อ",
+"{new_name} already exists" => "{new_name} มีอยู่แล้วในระบบ",
"replace" => "แทนที่",
"suggest name" => "แนะนำชื่อ",
"cancel" => "ยกเลิก",
+"replaced {new_name}" => "แทนที่ {new_name} แล้ว",
"undo" => "เลิกทำ",
+"replaced {new_name} with {old_name}" => "แทนที่ {new_name} ด้วย {old_name} แล้ว",
+"unshared {files}" => "ยกเลิกการแชร์แล้ว {files} ไฟล์",
+"deleted {files}" => "ลบไฟล์แล้ว {files} ไฟล์",
"generating ZIP-file, it may take some time." => "กำลังสร้างไฟล์บีบอัด ZIP อาจใช้เวลาสักครู่",
"Unable to upload your file as it is a directory or has 0 bytes" => "ไม่สามารถอัพโหลดไฟล์ของคุณได้ เนื่องจากไฟล์ดังกล่าวเป็นไดเร็กทอรี่หรือมีขนาด 0 ไบต์",
"Upload Error" => "เกิดข้อผิดพลาดในการอัพโหลด",
"Pending" => "อยู่ระหว่างดำเนินการ",
"1 file uploading" => "กำลังอัพโหลดไฟล์ 1 ไฟล์",
+"{count} files uploading" => "กำลังอัพโหลด {count} ไฟล์",
"Upload cancelled." => "การอัพโหลดถูกยกเลิก",
"File upload is in progress. Leaving the page now will cancel the upload." => "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก",
"Invalid name, '/' is not allowed." => "ชื่อที่ใช้ไม่ถูกต้อง '/' ไม่อนุญาตให้ใช้งาน",
+"{count} files scanned" => "สแกนไฟล์แล้ว {count} ไฟล์",
"error while scanning" => "พบข้อผิดพลาดในระหว่างการสแกนไฟล์",
"Name" => "ชื่อ",
"Size" => "ขนาด",
"Modified" => "ปรับปรุงล่าสุด",
+"1 folder" => "1 โฟลเดอร์",
+"{count} folders" => "{count} โฟลเดอร์",
+"1 file" => "1 ไฟล์",
+"{count} files" => "{count} ไฟล์",
"seconds ago" => "วินาที ก่อนหน้านี้",
+"1 minute ago" => "1 นาทีก่อนหน้านี้",
+"{minutes} minutes ago" => "{minutes} นาทีก่อนหน้านี้",
"today" => "วันนี้",
"yesterday" => "เมื่อวานนี้",
+"{days} days ago" => "{day} วันก่อนหน้านี้",
"last month" => "เดือนที่แล้ว",
"months ago" => "เดือน ที่ผ่านมา",
"last year" => "ปีที่แล้ว",