diff --git a/README.md b/README.md index 0010681..a066123 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Live demo](https://img.shields.io/badge/Live-Demo-brightgreen.svg?style=flat-square)](https://tinyfilemanager.github.io/demo/) [![Live demo](https://img.shields.io/badge/Help-Docs-lightgrey.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/wiki) -[![GitHub Release](https://img.shields.io/github/release/qubyte/rubidium.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/releases) +[![GitHub Release](https://img.shields.io/github/release/prasathmani/tinyfilemanager.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/releases) [![GitHub License](https://img.shields.io/github/license/prasathmani/tinyfilemanager.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/blob/master/LICENSE) [![Paypal](https://img.shields.io/badge/Donate-Paypal-lightgrey.svg?style=flat-square)](https://www.paypal.me/prasathmani) @@ -12,7 +12,6 @@ [Demo](https://tinyfilemanager.github.io/demo/) -Login Details : admin/admin@123 | user/12345 ## Documentation diff --git a/tinyfilemanager.php b/tinyfilemanager.php index 33a2417..5f55c37 100644 --- a/tinyfilemanager.php +++ b/tinyfilemanager.php @@ -4,13 +4,13 @@ $CONFIG = '{"lang":"en","error_reporting":false,"show_hidden":false,"hide_Cols": /** - * H3K | Tiny File Manager V2.4.6 + * H3K | Tiny File Manager V2.4.7 * CCP Programmers | ccpprogrammers@gmail.com * https://tinyfilemanager.github.io */ //TFM version -define('VERSION', '2.4.6'); +define('VERSION', '2.4.7'); //Application Title define('APP_TITLE', 'Tiny File Manager'); @@ -36,6 +36,13 @@ $readonly_users = array( 'user' ); +// Global readonly, including when auth is not being used +$global_readonly = false; + +// user specific directories +// array('Username' => 'Directory path', 'Username2' => 'Directory path', ...) +$directories_users = array(); + // Enable highlight.js (https://highlightjs.org/) on view's page $use_highlightjs = true; @@ -237,8 +244,19 @@ if (isset($_GET['logout'])) { } // Validate connection IP -if($ip_ruleset != 'OFF'){ - $clientIp = $_SERVER['REMOTE_ADDR']; +if ($ip_ruleset != 'OFF') { + function getClientIP() { + if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) { + return $_SERVER["HTTP_X_FORWARDED_FOR"]; + }else if (array_key_exists('REMOTE_ADDR', $_SERVER)) { + return $_SERVER['REMOTE_ADDR']; + }else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) { + return $_SERVER['HTTP_CLIENT_IP']; + } + return ''; + } + + $clientIp = getClientIP(); $proceed = false; @@ -438,14 +456,6 @@ if (isset($_POST['ajax']) && !FM_READONLY) { die(true); } - //search : get list of files from the current folder - if(isset($_POST['type']) && $_POST['type']=="search") { - $dir = FM_ROOT_PATH; - $response = scan(fm_clean_path($_POST['path']), $_POST['content']); - echo json_encode($response); - exit(); - } - // backup files if (isset($_POST['type']) && $_POST['type'] == "backup" && !empty($_POST['file'])) { $fileName = $_POST['file']; @@ -614,6 +624,16 @@ if (isset($_POST['ajax']) && !FM_READONLY) { exit(); } +if (isset($_POST['ajax'])) { + //search : get list of files from the current folder + if(isset($_POST['type']) && $_POST['type']=="search") { + $dir = FM_ROOT_PATH; + $response = scan(fm_clean_path($_POST['path']), $_POST['content']); + echo json_encode($response); + exit(); + } +} + // Delete file / folder if (isset($_GET['del']) && !FM_READONLY) { $del = str_replace( '/', '', fm_clean_path( $_GET['del'] ) ); @@ -871,7 +891,7 @@ if (!empty($_FILES) && !FM_READONLY) { $filename = $f['file']['name']; $tmp_name = $f['file']['tmp_name']; - $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); + $ext = pathinfo($filename, PATHINFO_FILENAME) != '' ? strtolower(pathinfo($filename, PATHINFO_EXTENSION)) : ''; $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; if(!fm_isvalid_filename($filename) && !fm_isvalid_filename($_REQUEST['fullpath'])) { @@ -884,12 +904,12 @@ if (!empty($_FILES) && !FM_READONLY) { $targetPath = $path . $ds; if ( is_writable($targetPath) ) { - $fullPath = $path . '/' . str_replace("./","_",$_REQUEST['fullpath']); + $fullPath = $path . '/' . basename($_REQUEST['fullpath']); $folder = substr($fullPath, 0, strrpos($fullPath, "/")); - + if(file_exists ($fullPath) && !$override_file_name && !$chunks) { $ext_1 = $ext ? '.'.$ext : ''; - $fullPath = str_replace($ext_1, '', $fullPath) .'_'. date('ymdHis'). $ext_1; + $fullPath = $path . '/' . basename($_REQUEST['fullpath'], $ext_1) .'_'. date('ymdHis'). $ext_1; } if (!is_dir($folder)) { @@ -898,16 +918,15 @@ if (!empty($_FILES) && !FM_READONLY) { umask($old); } - - if (empty($f['file']['error']) && !empty($tmp_name) && $tmp_name != 'none' && $isFileAllowed) { if ($chunkTotal){ $out = @fopen("{$fullPath}.part", $chunkIndex == 0 ? "wb" : "ab"); if ($out) { $in = @fopen($tmp_name, "rb"); - if ($in) { - while ($buff = fread($in, 4096)) { fwrite($out, $buff); } - } else { + + if ($in) { + while ($buff = fread($in, 4096)) { fwrite($out, $buff); } + } else { $response = array ( 'status' => 'error', 'info' => "failed to open output stream" @@ -916,25 +935,26 @@ if (!empty($_FILES) && !FM_READONLY) { @fclose($in); @fclose($out); @unlink($tmp_name); - + $response = array ( 'status' => 'success', 'info' => "file upload successful", 'fullPath' => $fullPath ); - } else { + + } else { + $response = array ( 'status' => 'error', 'info' => "failed to open output stream" ); } - - - if ($chunkIndex == $chunkTotal - 1) { - rename("{$fullPath}.part", $fullPath); + if ($chunkIndex == $chunkTotal - 1) { + rename("{$fullPath}.part", $fullPath); } - + + } else if (move_uploaded_file($tmp_name, $fullPath)) { // Be sure that the file has been uploaded if ( file_exists($fullPath) ) { @@ -1282,7 +1302,7 @@ if (isset($_GET['upload']) && !FM_READONLY) { }); }).on("success", function (res) { let _response = JSON.parse(res.xhr.response); - + if(_response.status == "error") { toast(_response.info); } @@ -1485,7 +1505,7 @@ if (isset($_GET['settings']) && !FM_READONLY) { - +
@@ -1651,7 +1671,7 @@ if (isset($_GET['view'])) { Files in archive:
Total size:
Size in archive:
- Compression: %
+ Compression: %
'. $file. ''; header('X-XSS-Protection:0'); fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path @@ -1970,9 +1991,9 @@ $tableTheme = (FM_THEME == "dark") ? "text-white bg-dark table-dark" : "bg-white ?> - .. - - + .. + + @@ -2012,14 +2033,14 @@ $tableTheme = (FM_THEME == "dark") ? "text-white bg-dark table-dark" : "bg-white
- + >
' . readlink($path . '/' . $f) . '' : '') ?>
- "> + "> - + @@ -2064,7 +2085,7 @@ $tableTheme = (FM_THEME == "dark") ? "text-white bg-dark table-dark" : "bg-white
- + >
@@ -2078,10 +2099,10 @@ $tableTheme = (FM_THEME == "dark") ? "text-white bg-dark table-dark" : "bg-white ' . readlink($path . '/' . $f) . '' : '') ?>
- "> + "> - + @@ -2554,24 +2575,20 @@ function fm_get_filesize($size) } /** - * Get director total size - * @param string $directory - * @return int + * Get total size of directory tree. + * + * @param string $directory Relative or absolute directory name. + * @return int Total number of bytes. */ function fm_get_directorysize($directory) { - global $calc_folder; - if ($calc_folder==true) { // Slower output - $size = 0; $count= 0; $dirCount= 0; - foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)) as $file) - if ($file->isFile()) - { $size+=$file->getSize(); - $count++; + $bytes = 0; + $directory = realpath($directory); + if ($directory !== false && $directory != '' && file_exists($directory)){ + foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory, FilesystemIterator::SKIP_DOTS)) as $file){ + $bytes += $file->getSize(); } - else if ($file->isDir()) { $dirCount++; } - // return [$size, $count, $dirCount]; - return $size; } - else return 'Folder'; // Quick output + return $bytes; } /** @@ -3043,9 +3060,14 @@ function fm_download_file($fileLocation, $fileName, $chunkSize = 1024) $extension = pathinfo($fileName, PATHINFO_EXTENSION); $contentType = fm_get_file_mimes($extension); + + if(is_array($contentType)) { + $contentType = implode(' ', $contentType); + } + header("Cache-Control: public"); header("Content-Transfer-Encoding: binary\n"); - header('Content-Type: $contentType'); + header("Content-Type: $contentType"); $contentDisposition = 'attachment'; @@ -3378,7 +3400,7 @@ class FM_Zipper_Tar */ function fm_show_nav_path($path) { - global $lang, $sticky_navbar; + global $lang, $sticky_navbar, $editFile; $isStickyNavBar = $sticky_navbar ? 'fixed-top' : ''; $getTheme = fm_get_theme(); $getTheme .= " navbar-light"; @@ -3411,7 +3433,7 @@ function fm_show_nav_path($path) } $root_url .= $sep . implode($sep, $array); } - echo '
' . $root_url . '
'; + echo '
' . $root_url . $editFile . '
'; ?>
@@ -3807,7 +3829,8 @@ $isStickyNavBar = $sticky_navbar ? 'navbar-fixed' : 'navbar-normal';
- + + @@ -3966,7 +3989,8 @@ $isStickyNavBar = $sticky_navbar ? 'navbar-fixed' : 'navbar-normal'; var $table = $('#main-table'), tableLng = $table.find('th').length, _targets = (tableLng && tableLng == 7 ) ? [0, 4,5,6] : tableLng == 5 ? [0,4] : [3], - mainTable = $('#main-table').DataTable({"paging": false, "info": false, "order": [], "columnDefs": [{"targets": _targets, "orderable": false}] + emptyType = $.fn.dataTable.absoluteOrder([{ value: '', position: 'top' }]); + mainTable = $('#main-table').DataTable({paging: false, info: false, order: [], columnDefs: [{targets: _targets, orderable: false}, {type: emptyType, targets: '_all',},] }); //search $('#search-addon').on( 'keyup', function () { @@ -4091,27 +4115,27 @@ function lng($txt) { $tr['en']['Generate'] = 'Generate'; $tr['en']['FullSize'] = 'Full Size'; $tr['en']['FreeOf'] = 'free of'; $tr['en']['CalculateFolderSize']= 'Calculate folder size'; $tr['en']['ProcessID'] = 'Process ID'; $tr['en']['Created'] = 'Created'; - $tr['en']['HideColumns'] = 'Hide Perms/Owner columns';$tr['en']['You are logged in'] = 'You are logged in'; + $tr['en']['HideColumns'] = 'Hide Perms/Owner columns';$tr['en']['You are logged in'] = 'You are logged in'; $tr['en']['Check Latest Version'] = 'Check Latest Version';$tr['en']['Generate new password hash'] = 'Generate new password hash'; $tr['en']['Login failed. Invalid username or password'] = 'Login failed. Invalid username or password'; $tr['en']['password_hash not supported, Upgrade PHP version'] = 'password_hash not supported, Upgrade PHP version'; - + // new - novos - - $tr['en']['Advanced Search'] = 'Advanced Search'; $tr['en']['Error while copying fro'] = 'Error while copying fro'; + + $tr['en']['Advanced Search'] = 'Advanced Search'; $tr['en']['Error while copying from'] = 'Error while copying from'; $tr['en']['Nothing selected'] = 'Nothing selected'; $tr['en']['Paths must be not equal'] = 'Paths must be not equal'; $tr['en']['Renamed from'] = 'Renamed from'; $tr['en']['Archive not unpacked'] = 'Archive not unpacked'; - $tr['en']['Deleted'] = 'Deleted'; $tr['en']['Archive not created'] = 'Archive not created'; + $tr['en']['Deleted'] = 'Deleted'; $tr['en']['Archive not created'] = 'Archive not created'; $tr['en']['Copied from'] = 'Copied from'; $tr['en']['Permissions changed'] = 'Permissions changed'; $tr['en']['to'] = 'to'; $tr['en']['Saved Successfully'] = 'Saved Successfully'; $tr['en']['not found!'] = 'not found!'; $tr['en']['File Saved Successfully'] = 'File Saved Successfully'; - $tr['en']['Archive'] = 'Archive'; $tr['en']['Permissions not changed'] = 'Permissions not changed'; + $tr['en']['Archive'] = 'Archive'; $tr['en']['Permissions not changed'] = 'Permissions not changed'; $tr['en']['Select folder'] = 'Select folder'; $tr['en']['Source path not defined'] = 'Source path not defined'; $tr['en']['already exists'] = 'already exists'; $tr['en']['Error while moving from'] = 'Error while moving from'; $tr['en']['Create archive?'] = 'Create archive?'; $tr['en']['Invalid file or folder name'] = 'Invalid file or folder name'; $tr['en']['Archive unpacked'] = 'Archive unpacked'; $tr['en']['File extension is not allowed'] = 'File extension is not allowed'; $tr['en']['Root path'] = 'Root path'; $tr['en']['Error while renaming from'] = 'Error while renaming from'; - $tr['en']['File not found'] = 'File not found'; $tr['en']['Error while deleting items'] = 'Error while deleting items'; + $tr['en']['File not found'] = 'File not found'; $tr['en']['Error while deleting items'] = 'Error while deleting items'; $tr['en']['Invalid characters in file name'] = 'Invalid characters in file name'; $tr['en']['FILE EXTENSION HAS NOT SUPPORTED'] = 'FILE EXTENSION HAS NOT SUPPORTED'; $tr['en']['Selected files and folder deleted'] = 'Selected files and folder deleted'; @@ -4122,8 +4146,8 @@ function lng($txt) { $tr['en']['Invalid characters in file or folder name'] = 'Invalid characters in file or folder name'; $tr['en']['Operations with archives are not available'] = 'Operations with archives are not available'; $tr['en']['File or folder with this path already exists'] = 'File or folder with this path already exists'; - - $tr['en']['Moved from'] = 'Moved from'; + + $tr['en']['Moved from'] = 'Moved from'; $i18n = fm_get_translations($tr); $tr = $i18n ? $i18n : $tr; diff --git a/translation.json b/translation.json index 29085cd..bc17bd9 100644 --- a/translation.json +++ b/translation.json @@ -1,6 +1,6 @@ { "appName": "Tiny File Manager", - "version": "2.4.6", + "version": "2.4.7", "language": [ { "name": "Română", @@ -85,7 +85,7 @@ "light": "Luminoasă" } }, - { + { "name": "Hungarian", "code": "hu", "translation": { @@ -590,6 +590,63 @@ "Language": "Lenguaje" } }, + { + "name": "Galego", + "code": "gl", + "translation": { + "AppName": "Pequeno Administrador de Arquivos", + "AppTitle": "Administrador de Arquivos", + "Login": "Iniciar Sesión", + "Username": "Nome de Usuario", + "Password": "Contrasinal", + "Logout": "Desconectarse", + "Move": "Mover", + "Copy": "Copiar", + "Save": "Gardar", + "SelectAll": "Seleccionar Todo", + "UnSelectAll": "Des-seleccionar Todo", + "File": "Arquivo", + "Back": "Atrás", + "Size": "Tamaño", + "Perms": "Permisos", + "Modified": "Modificado", + "Owner": "Propietario", + "Search": "Buscar", + "NewItem": "Novo Elemento", + "Folder": "Cartafol", + "Delete": "Borrar", + "Rename": "Renomear", + "CopyTo": "Copiar en", + "DirectLink": "Enlace Directo", + "UploadingFiles": "Subir Arquivos", + "ChangePermissions": "Cambiar Permisos", + "Copying": "Copiando", + "CreateNewItem": "Crear novo Elemento", + "Name": "Nome", + "AdvancedEditor": "Editor Avanzado", + "RememberMe": "Lémbrame", + "Actions": "Accións", + "Upload": "Subir", + "Cancel": "Cancelar", + "InvertSelection": "Invertir Selección", + "DestinationFolder": "Cartafol Destino", + "ItemType": "Tipo de Elemento", + "ItemName": "Nome do Elemento", + "CreateNow": "Crear", + "Download": "Descargar", + "Open": "Abrir", + "UnZip": "Descomprimir", + "UnZipToFolder": "Descomprimir no Cartafol", + "Edit": "Editar", + "NormalEditor": "Editor Normal", + "BackUp": "Copia de Seguridade", + "SourceFolder": "Cartafol Actual", + "Files": "Arquivos", + "Change": "Cambiar", + "Settings": "Preferencias", + "Language": "Linguaxe" + } + }, { "name": "Català", "code": "ca", @@ -675,7 +732,7 @@ "code": "de", "translation": { "AppName": "Tiny File Manager", - "AppTitle": "Datei Manager", + "AppTitle": "Dateimanager", "Login": "Einloggen", "Username": "Benutzername", "Password": "Passwort", @@ -691,7 +748,7 @@ "Perms": "Berechtigungen", "Modified": "Geändert", "Owner": "Eigentümer", - "Search": "Suchen", + "Search": "Suchbegriff eingeben", "NewItem": "Neues Element", "Folder": "Ordner", "Delete": "Löschen", @@ -718,16 +775,74 @@ "UnZip": "Entpacken", "UnZipToFolder": "Entpacken im Ordner", "Edit": "Bearbeiten", - "NormalEditor": "Standard Editor", + "NormalEditor": "Standard-Editor", "BackUp": "Backup", "SourceFolder": "Quellordner", "Files": "Dateien", "Change": "Ändern", "Settings": "Einstellungen", "Language": "Sprache", + "Folder is empty": "Ordner ist leer", + "PartitionSize": "Partitionsgröße", + "ErrorReporting": "Fehler-Berichterstattung", + "ShowHiddenFiles": "Versteckte Dateien anzeigen", + "Full size": "Gesamtgröße", + "Help": "Hilfe", + "Free of": "Frei von", + "Preview": "Vorschau", + "Help Documents": "Hilfe anzeigen (Englisch)", + "Report Issue": "Problem melden", + "Generate": "Erzeugen", + "FullSize": "Gesamtgröße", + "FreeOf": "frei von", + "CalculateFolderSize": "Ordnergröße berechnen", + "ProcessID": "Prozess-ID", + "Created": "Erstellt", + "HideColumns": "Spalten Berechtigungen / Besitzer verstecken", + "Generate new password hash": "Password-Hash neu erzeugen", + "Check Latest Version": "Auf neue Version überprüfen", "You are logged in": "Du bist eingeloggt.", "Login failed. Invalid username or password": "Login fehlgeschlagen. Falscher Benutzername oder Passwort.", - "password_hash not supported, Upgrade PHP version": "password_hash wird nicht unterstützt, aktualisiere die PHP-Version" + "password_hash not supported, Upgrade PHP version": "password_hash wird nicht unterstützt, aktualisiere die PHP-Version", + "Advanced Search": "Erweiterte Suche", + "Error while copying from": "Fehler beim Kopieren aus", + "Nothing selected": "Nichts ausgewählt", + "Paths must be not equal": "Quell- und Zielpfad dürfen nicht identisch sein", + "Renamed from": "Umbenannt von", + "Archive not unpacked": "Archiv nicht entpackt", + "Deleted": "Gelöscht", + "Archive not created": "Archiv nicht erstellt", + "Copied from": "Kopiert aus", + "Permissions changed": "Berechtigungen geändert", + "to": "nach", + "Saved Successfully": "Erfolgreich gespeichert", + "not found!": "nicht gefunden!", + "File Saved Successfully": "Datei erfolgreich gespeichert", + "Archive": "Archiv", + "Permissions not changed": "Berechtigungen nicht geändert", + "Select folder": "Ordner auswählen", + "Source path not defined": "Quellpfad nicht definiert", + "already exists": "existiert bereits", + "Error while moving from": "Fehler beim Verschieben aus", + "Create archive?": "Archiv erstellen?", + "Invalid file or folder name": "Ungältiger Datei- oder Ordnername", + "Archive unpacked": "Archive entpackt", + "File extension is not allowed": "Dateityp nicht erlaubt", + "Root path": "Quellverzeichnis", + "Error while renaming from": "Fehler beim Umbenennen von", + "File not found": "Datei nicht gefunden", + "Error while deleting items": "Fehler beim Löschen der Objekte", + "Invalid characters in file name": "Unzulässige Zeichen im Dateinamen", + "FILE EXTENSION HAS NOT SUPPORTED": "DATEITYP NICHT UNTERSTÜTZT", + "Selected files and folder deleted": "Ausgewählte Dateien und Ordner gelöscht", + "Error while fetching archive info": "Fehler beim Abrufen der Archiv-Informationen", + "Delete selected files and folders?": "Ausgewählte Dateien und Ordner löschen?", + "Search file in folder and subfolders...": "Suchen in Ordnern und Unterordnern...", + "Access denied. IP restriction applicable": "Zugriff verweigert - IP-Beschränkung.", + "Invalid characters in file or folder name": "Unzulässige Zeichen im Datei- oder Ordnernamen", + "Operations with archives are not available": "Archiv-Funktionen nicht verfägbar", + "File or folder with this path already exists": "Datei oder Ordner mit diesem Pfad existiert bereits", + "Moved from": "Verschoben aus" } }, { @@ -1272,125 +1387,125 @@ "name": "Tiếng Việt", "code": "vi", "translation": { - "AppName": "Trình quản lí tệp Tiny", - "AppTitle": "Quản lý tệp", - "Login": "Đăng nhập", - "Username": "Tên đăng nhập", - "Password": "Mật khẩu", - "Logout": "Đăng xuất", - "Move": "Di chuyển", - "Copy": "Sao chép", - "Save": "Lưu", - "SelectAll": "Chọn tất cả", - "UnSelectAll": "Hủy chọn tất cả", - "File": "Tệp tin", - "Back": "Trở về", - "Size": "Kích cỡ", - "Perms": "Quyền", - "Modified": "Sửa đổi lần cuối", - "Search": "Tìm kiếm", - "NewItem": "Tạo mới", - "Folder": "Thư mục", - "Delete": "Xóa", - "Rename": "Đổi tên", - "CopyTo": "Sao chép đến", - "DirectLink": "Đường dẫn URL", - "UploadingFiles": "Tải lên file", - "ChangePermissions": "Thay đổi quyền", - "Copying": "Sao chép", - "CreateNewItem": "Tạo mới", - "Name": "Tên", - "AdvancedEditor": "Chỉnh sửa nâng cao", - "RememberMe": "Ghi nhớ đăng nhập", - "Actions": "Tùy Chọn", - "Upload": "Tải lên", - "Cancel": "Hủy", - "InvertSelection": "Đảo ngược vùng chọn", - "DestinationFolder": "Đến", - "ItemType": "Tạo mới", - "ItemName": "Tên tệp/thư mục", - "CreateNow": "Tạo", - "Download": "Tải xuống", - "Open": "Mở", - "UnZip": "Giải nén", - "UnZipToFolder": "Giải nén đến thư mục", - "Edit": "Chỉnh sửa", - "NormalEditor": "Chỉnh sửa thông thường", - "BackUp": "Sao lưu", - "SourceFolder": "Từ", - "Files": "Tệp tin", - "Change": "Thay đổi", - "Settings": "Cài đặt", - "Language": "Ngôn ngữ", - "PartitionSize": "Còn trống", - "Advanced Search": "Tìm kiếm nâng cao", - "Full size": "Đã dùng", - "Folder is empty": "Thư mực rỗng", - "Search file in folder and subfolders...": "Tìm file toàn thư mục...", - "Help": "Trợ gúp", - "You are logged in": "Đăng nhập thành công", - "ErrorReporting": "Báo cáo lỗi", - "ShowHiddenFiles": "Hiển thị file ẩn", - "Preview": "Xem", - "Help Documents": "Hướng dẫn", - "Report Issue": "Báo cáo lỗi", - "Generate": "Tạo", - "FullSize": "Tổng dung lượng", - "FreeOf": "trong tổng số", - "Calculate folder size": "Kích thước thư mục", - "Check Latest Version": "Kiểm tra phiên bản mới", - "Generate new password hash": "Trình tạo mật khẩu mã hash", - "HideColumns": "Ẩn cột quyền/chủ sỡ hữu", - "Owner": "Chủ sở hữu/Owner", - "Group": "Nhóm/Group", - "Other": "Khác/Other", - "Read": "Đọc", - "Write": "Ghi", - "Execute": "Thực thi", - "enable": "Bật", - "disable": "Tắt", - "Free Of": "trong tổng số", - "CalculateFolderSize": "Tính toán kích thước thư mục", - "Nothing selected": "Không có gì được chọn", - "Renamed from": "Đã đổi tên từ", - "Deleted": "đã được xóa", - "Copied from": "Được sao chép từ", - "to": "sang", - "Not found": "Không tìm thấy", - "Archive": "Lưu trữ", - "Select folder": "Chọn thư mục", - "already exists": "đã tồn tại", - "Create archive?": "Tạo kho lưu trữ?", - "Archive unpacked": "Lưu trữ đã được giải nén", - "Root path": "Đường dẫn gốc", - "File not found": "Không tìm thấy tệp", - "Error while copying from": "Lỗi khi sao chép từ", - "Paths must be not equal": "Đường dẫn không được giống nhau", - "Archive not unpacked": "Lưu trữ chưa được giải nén", - "Archive not created": "Bản lưu trữ chưa được tạo", - "Permissions changed": "Đã thay đổi quyền", - "Saved Successfully": "Thành công ", - "File Saved Successfully": "Thành công ", - "Permissions not changed": "Quyền không được thay đổi", - "Source path not defined": "Đường dẫn nguồn không được xác định", - "Error while moving from": "Lỗi khi di chuyển từ", - "Invalid file or folder name": "Tên tệp hoặc thư mục không hợp lệ", - "File extension is not allowed": "Định dạng không được hỗ trợ", - "Error while renaming from": "Lỗi khi đổi tên từ", - "Error while deleting items": "Lỗi khi xóa các mục", - "Invalid characters in file name": "Ký tự không hợp lệ", - "FILE EXTENSION HAS NOT SUPPORTED": "ĐỊNH DẠNG KHÔNG ĐƯỢC HỖ TRỢ", - "Selected files and folder deleted": "Đã xóa các tệp và thư mục được chọn", - "Error while fetching archive info": "Lỗi", - "Delete selected files and folders?": "Xóa các tệp và thư mục đã chọn?", - "Access denied. IP restriction applicable": "Từ chối quyền truy cập", - "Invalid characters in file or folder name": "Ký tự không hợp lệ", - "Operations with archives are not available": "Không khả dụng", - "File or folder with this path already exists": "Tệp hoặc thư mục đã tồn tại", - "Moved from": "Chuyển từ", - "Created": "đã tạo", - "Login failed. Invalid username or password": "Không tìm thấy người dùng", - "Theme": "Chủ đề" + "AppName": "Trình quản lí tệp Tiny", + "AppTitle": "Quản lý tệp", + "Login": "Đăng nhập", + "Username": "Tên đăng nhập", + "Password": "Mật khẩu", + "Logout": "Đăng xuất", + "Move": "Di chuyển", + "Copy": "Sao chép", + "Save": "Lưu", + "SelectAll": "Chọn tất cả", + "UnSelectAll": "Hủy chọn tất cả", + "File": "Tệp tin", + "Back": "Trở về", + "Size": "Kích cỡ", + "Perms": "Quyền", + "Modified": "Sửa đổi lần cuối", + "Search": "Tìm kiếm", + "NewItem": "Tạo mới", + "Folder": "Thư mục", + "Delete": "Xóa", + "Rename": "Đổi tên", + "CopyTo": "Sao chép đến", + "DirectLink": "Đường dẫn URL", + "UploadingFiles": "Tải lên file", + "ChangePermissions": "Thay đổi quyền", + "Copying": "Sao chép", + "CreateNewItem": "Tạo mới", + "Name": "Tên", + "AdvancedEditor": "Chỉnh sửa nâng cao", + "RememberMe": "Ghi nhớ đăng nhập", + "Actions": "Tùy Chọn", + "Upload": "Tải lên", + "Cancel": "Hủy", + "InvertSelection": "Đảo ngược vùng chọn", + "DestinationFolder": "Đến", + "ItemType": "Tạo mới", + "ItemName": "Tên tệp/thư mục", + "CreateNow": "Tạo", + "Download": "Tải xuống", + "Open": "Mở", + "UnZip": "Giải nén", + "UnZipToFolder": "Giải nén đến thư mục", + "Edit": "Chỉnh sửa", + "NormalEditor": "Chỉnh sửa thông thường", + "BackUp": "Sao lưu", + "SourceFolder": "Từ", + "Files": "Tệp tin", + "Change": "Thay đổi", + "Settings": "Cài đặt", + "Language": "Ngôn ngữ", + "PartitionSize": "Còn trống", + "Advanced Search": "Tìm kiếm nâng cao", + "Full size": "Đã dùng", + "Folder is empty": "Thư mực rỗng", + "Search file in folder and subfolders...": "Tìm file toàn thư mục...", + "Help": "Trợ gúp", + "You are logged in": "Đăng nhập thành công", + "ErrorReporting": "Báo cáo lỗi", + "ShowHiddenFiles": "Hiển thị file ẩn", + "Preview": "Xem", + "Help Documents": "Hướng dẫn", + "Report Issue": "Báo cáo lỗi", + "Generate": "Tạo", + "FullSize": "Tổng dung lượng", + "FreeOf": "trong tổng số", + "Calculate folder size": "Kích thước thư mục", + "Check Latest Version": "Kiểm tra phiên bản mới", + "Generate new password hash": "Trình tạo mật khẩu mã hash", + "HideColumns": "Ẩn cột quyền/chủ sỡ hữu", + "Owner": "Chủ sở hữu/Owner", + "Group": "Nhóm/Group", + "Other": "Khác/Other", + "Read": "Đọc", + "Write": "Ghi", + "Execute": "Thực thi", + "enable": "Bật", + "disable": "Tắt", + "Free Of": "trong tổng số", + "CalculateFolderSize": "Tính toán kích thước thư mục", + "Nothing selected": "Không có gì được chọn", + "Renamed from": "Đã đổi tên từ", + "Deleted": "đã được xóa", + "Copied from": "Được sao chép từ", + "to": "sang", + "Not found": "Không tìm thấy", + "Archive": "Lưu trữ", + "Select folder": "Chọn thư mục", + "already exists": "đã tồn tại", + "Create archive?": "Tạo kho lưu trữ?", + "Archive unpacked": "Lưu trữ đã được giải nén", + "Root path": "Đường dẫn gốc", + "File not found": "Không tìm thấy tệp", + "Error while copying from": "Lỗi khi sao chép từ", + "Paths must be not equal": "Đường dẫn không được giống nhau", + "Archive not unpacked": "Lưu trữ chưa được giải nén", + "Archive not created": "Bản lưu trữ chưa được tạo", + "Permissions changed": "Đã thay đổi quyền", + "Saved Successfully": "Thành công ", + "File Saved Successfully": "Thành công ", + "Permissions not changed": "Quyền không được thay đổi", + "Source path not defined": "Đường dẫn nguồn không được xác định", + "Error while moving from": "Lỗi khi di chuyển từ", + "Invalid file or folder name": "Tên tệp hoặc thư mục không hợp lệ", + "File extension is not allowed": "Định dạng không được hỗ trợ", + "Error while renaming from": "Lỗi khi đổi tên từ", + "Error while deleting items": "Lỗi khi xóa các mục", + "Invalid characters in file name": "Ký tự không hợp lệ", + "FILE EXTENSION HAS NOT SUPPORTED": "ĐỊNH DẠNG KHÔNG ĐƯỢC HỖ TRỢ", + "Selected files and folder deleted": "Đã xóa các tệp và thư mục được chọn", + "Error while fetching archive info": "Lỗi", + "Delete selected files and folders?": "Xóa các tệp và thư mục đã chọn?", + "Access denied. IP restriction applicable": "Từ chối quyền truy cập", + "Invalid characters in file or folder name": "Ký tự không hợp lệ", + "Operations with archives are not available": "Không khả dụng", + "File or folder with this path already exists": "Tệp hoặc thư mục đã tồn tại", + "Moved from": "Chuyển từ", + "Created": "đã tạo", + "Login failed. Invalid username or password": "Không tìm thấy người dùng", + "Theme": "Chủ đề" } }, { @@ -2117,7 +2232,7 @@ "code": "nl", "translation": { "AppName": "Tiny File Manager", - "AppTitle": "Bestand beheerder ", + "AppTitle": "Bestandsbeheer ", "Login": "Inloggen", "Username": "Gebruikersnaam", "Password": "Wachtwoord", @@ -2130,7 +2245,7 @@ "Back": "Terug", "Size": "Grootte", "Perms": "Rechten", - "Modified": "Aangepast", + "Modified": "Bewerkt", "Owner": "Eigenaar", "Search": "Zoeken", "NewItem": "Nieuw item", @@ -2139,96 +2254,220 @@ "Rename": "Hernoem", "CopyTo": "Kopiëren naar", "DirectLink": "Directe link", - "UploadingFiles": "Bestanden opladen", + "UploadingFiles": "Bestanden uploaden", "ChangePermissions": "Rechten aanpassen", "Copying": "Bezig met kopiëren", - "CreateNewItem": "Maak nieuw item aan", + "CreateNewItem": "Maak nieuw item", "Name": "Naam", - "AdvancedEditor": "Geavanceerde bewerker", + "AdvancedEditor": "Geavanceerde editor", "RememberMe": "Onthoud mij", "Actions": "Acties", - "Upload": "Opladen", + "Upload": "Uploaden", "Cancel": "Annuleren", "InvertSelection": "Keer selectie om", "DestinationFolder": "Doelmap", "ItemType": "Item type", "ItemName": "Item naam", - "CreateNow": "Onmiddelijk aanmaken", + "CreateNow": "Nu aanmaken", "Download": "Download", "Open": "Openen", "UnZip": "Uitpakken", - "UnZipToFolder": "Uitpakken in folder", - "Edit": "Aanpassen", - "NormalEditor": "Standaard bewerker", - "BackUp": "Back-up aanmaken", + "UnZipToFolder": "Uitpakken in map", + "Edit": "Bewerken", + "NormalEditor": "Standaard editor", + "BackUp": "Back-up maken", "SourceFolder": "Bronmap", "Files": "Bestanden", - "Move":"Verplaatsen", + "Move": "Verplaatsen", "Change": "Aanpassen", "Settings": "Instellingen", "Language": "Taal", - "Folder is empty":"Map is leeg", - "PartitionSize":"Partitiegrootte", - "ErrorReporting":"Foutmeldingen", - "ShowHiddenFiles":"Toon onzichtbare bestanden", - "Full size":"Volledige groote", - "Help":"Hulp", - "Free of":"Ruimte vrij", - "Preview":"Voorbeeld", - "Help Documents":"Hulp documenten", - "Report Issue":"Probleem melden", - "Generate":"Genereer", - "FullSize":"Volledige groote", - "FreeOf":"Ruimte vrij", - "CalculateFolderSize":"Bereken map groote", - "ProcessID":"Proces-ID", - "Created":"Aangemaakt", - "HideColumns":"Verberg Rechten/Eigenaar kollomen", - "You are logged in":"U ben ingelogd", - "Check Latest Version":"Bekijk laatste versie", - "Generate new password hash":"Genereer een nieuw wachtwoord hash", - "Login failed. Invalid username or password":"Inloggen mislukt. Verkeerd wachtwoord of gebruikersnaam", - "password_hash not supported, Upgrade PHP version":"password_hash is niet ondersteund, Upgrade PHP versie", - "Advanced Search":"Geavanceerd zoeken", - "Error while copying from":"Fout bij het kopiëren van", - "Nothing selected":"Niets geselecteerd", - "Paths must be not equal":"Paden mogen niet gelijk zijn", - "Renamed from":"Hernoemd naar", - "Archive not unpacked":"Archief niet uitgepakt", - "Deleted":"Verwijdert", - "Archive not created":"Archief niet aangemaakt", - "Copied from":"Gekopiëerd van", - "Permissions change":"Rechten aanpassen", - "to":"naar", - "Saved Successfully":"Succesvol opgeslagen", - "not found!":"niet gevonden", - "File Saved Successfully":"Bestand succesvol opgeslagen", - "Archive":"Archief", - "Permissions not changed":"Rechten niet aangepast", - "Select folder":"Selecteer map", - "Source path not defined":"Bronmap is niet gedefinieerd", - "already exists":"bestaat al", - "Error while moving from":"Fout bij het verplaatsen van", - "Create archive?":"Creëer archief?", - "Invalid file or folder name":"Ongeldige bestand- of mapnaam", - "Archive unpacked":"Archief uitgepakt", - "File extension is not allowed":"Bestandstype is niet toegelaten", - "Root path":"Pad startpunt", - "Error while renaming from":"Fout bij het hernoemen van", - "File not found":"Bestand is niet gevonden", - "Error while deleting items":"Fout bij het verwijderen van items", - "Invalid characters in file name":"Ongeldige karakters in bestandsnaam", - "FILE EXTENSION HAS NOT SUPPORTED":"BESTANDSTYPE IS NIET ONDERSTEUND", - "Selected files and folder deleted":"Geselecteerde bestanden en mappen verwijderd", - "Error while fetching archive info":"Fout bij het verkrijgen van archief informatie", - "Delete selected files and folders?":"Verwijder de geselecteerde bestanden en mappen?", - "Search file in folder and subfolders...":"Zoek bestand in map en submappen...", - "Access denied. IP restriction applicable":"Toegang geweigerd. IP-beperking van toepassing", - "Invalid characters in file or folder name":"Ongeldige karakters in bestand- of mapnaam", - "Operations with archives are not available":"Bewerkingen met archieven zijn niet beschikbaar", - "File or folder with this path already exists":"Bestand of map met dit pad bestaat al", - "Moved from":"Verplaatst van" + "Folder is empty": "Map is leeg", + "PartitionSize": "Partitiegrootte", + "ErrorReporting": "Foutmeldingen", + "ShowHiddenFiles": "Toon verborgen bestanden", + "Full size": "Volledige grootte", + "Help": "Help", + "Free of": "Ruimte vrij", + "Preview": "Voorbeeld", + "Help Documents": "Help documenten", + "Report Issue": "Probleem melden", + "Generate": "Genereer", + "FullSize": "Volledige grootte", + "FreeOf": "Ruimte vrij", + "CalculateFolderSize": "Bereken map grootte", + "ProcessID": "Proces-ID", + "Created": "Aangemaakt", + "HideColumns": "Verberg Rechten/Eigenaar kolommen", + "You are logged in": "U bent ingelogd", + "Check Latest Version": "Bekijk laatste versie", + "Generate new password hash": "Genereer een nieuwe wachtwoord hash", + "Login failed. Invalid username or password": "Inloggen mislukt. Onjuiste gebruikersnaam/wachtwoord combinatie", + "password_hash not supported, Upgrade PHP version": "password_hash is niet ondersteund, Upgrade PHP versie", + "Advanced Search": "Geavanceerd zoeken", + "Error while copying from": "Fout bij het kopiëren van", + "Nothing selected": "Niets geselecteerd", + "Paths must be not equal": "Paden mogen niet gelijk zijn", + "Renamed from": "Hernoemd naar", + "Archive not unpacked": "Archief niet uitgepakt", + "Deleted": "Verwijderd", + "Archive not created": "Archief niet aangemaakt", + "Copied from": "Gekopiëerd van", + "Permissions change": "Rechten aanpassen", + "to": "naar", + "Saved Successfully": "Succesvol opgeslagen", + "not found!": "niet gevonden!", + "File Saved Successfully": "Bestand succesvol opgeslagen", + "Archive": "Archief", + "Permissions not changed": "Rechten niet aangepast", + "Select folder": "Selecteer map", + "Source path not defined": "Bronmap is niet gedefiniëerd", + "already exists": "bestaat al", + "Error while moving from": "Fout bij het verplaatsen van", + "Create archive?": "Maak archief?", + "Invalid file or folder name": "Ongeldige bestands- of mapnaam", + "Archive unpacked": "Archief uitgepakt", + "File extension is not allowed": "Bestandstype is niet toegestaan", + "Root path": "Pad startpunt", + "Error while renaming from": "Fout bij het hernoemen van", + "File not found": "Bestand is niet gevonden", + "Error while deleting items": "Fout bij het verwijderen van items", + "Invalid characters in file name": "Ongeldige karakters in bestandsnaam", + "FILE EXTENSION HAS NOT SUPPORTED": "BESTANDSTYPE IS NIET ONDERSTEUND", + "Selected files and folder deleted": "Geselecteerde bestanden en mappen verwijderd", + "Error while fetching archive info": "Fout bij het verkrijgen van archief informatie", + "Delete selected files and folders?": "Verwijder de geselecteerde bestanden en mappen?", + "Search file in folder and subfolders...": "Zoek bestand in map en submappen...", + "Access denied. IP restriction applicable": "Toegang geweigerd. IP-beperking van toepassing", + "Invalid characters in file or folder name": "Ongeldige karakters in bestands- of mapnaam", + "Operations with archives are not available": "Bewerkingen met archieven zijn niet beschikbaar", + "File or folder with this path already exists": "Bestand of map met dit pad bestaat al", + "Moved from": "Verplaatst van" } + }, + { + "name": "Dansk", + "code": "da", + "translation": { + "Access denied. IP restriction applicable": "Adgang nægtet. IP-begrænsning gælder", + "Actions": "Handlinger", + "Advanced Search": "Avanceret søgning", + "AdvancedEditor": "Advanceret Editor", + "AppTitle": "Filhåndtering", + "Archive not created": "Arkiv er ikke oprettet", + "Archive not unpacked": "Arkiv er ikke pakket ud", + "Archive unpacked": "Arkiv er udpakket", + "Archive": "Arkiv", + "Back": "Tilbage", + "BackUp": "Backup", + "CalculateFolderSize": "Beregn mappestørrelse", + "Cancel": "Afbryd", + "Change": "Ændre", + "ChangePermissions": "Ændre tilladelser", + "Check Latest Version": "Tjek seneste version", + "Copied from": "Kopieret fra", + "Copy": "Kopi", + "CopyTo": "Kopier til", + "Copying": "Kopierer", + "Create archive?": "Opret arkiv?", + "CreateNewItem": "Opret ny", + "CreateNow": "Opret nu", + "Created": "Oprettet", + "Delete selected files and folders?": "Slet valgte filer og mapper?", + "Delete": "Slet", + "Deleted": "Slettet", + "DestinationFolder": "Destinationsmappe", + "DirectLink": "Direkte link", + "Download": "Hent", + "Edit": "Rediger", + "Error while copying from": "Fejl ved kopiering fra", + "Error while deleting items": "Fejl ved sletning af elementer", + "Error while fetching archive info": "Fejl ved hentning af arkivoplysninger", + "Error while moving from": "Fejl ved flytning fra", + "Error while renaming from": "Fejl ved omdøbning fra", + "ErrorReporting": "Fejlrapportering", + "Execute": "Udfør", + "FILE EXTENSION HAS NOT SUPPORTED": "FILEXTENSION ER IKKE UNDERSTØTTET", + "File Saved Successfully": "Fil blev gemt", + "File extension is not allowed": "Filtypenavn er ikke tilladt", + "File not found": "Fil ikke fundet", + "File or folder with this path already exists": "Fil eller mappe med denne sti findes allerede", + "File": "Fil(er)", + "Files": "Filer", + "Folder is empty": "Mappen er tom", + "Folder": "Mappe(r)", + "FreeOf": "Ledig af", + "FullSize": "Fuld størrelse", + "Generate new password hash": "Generer ny adgangskode-hash", + "Generate": "Generer", + "Group": "Gruppe", + "Help Documents": "Hjælpedokumenter", + "Help": "Hjælp", + "HideColumns": "Skjul kolonner", + "Invalid characters in file name": "Ugyldige tegn i filnavn", + "Invalid characters in file or folder name": "Ugyldige tegn i fil- eller mappenavn", + "Invalid file or folder name": "Ugyldigt fil- eller mappenavn", + "InvertSelection": "Inverter valget", + "ItemName": "Emne navn", + "ItemType": "Emne type", + "Language": "Sprog", + "Login failed. Invalid username or password": "Login mislykkedes. Ugyldigt brugernavn eller adgangskode", + "Login": "Log på", + "Logout": "Log ud", + "Modified": "Ændret", + "Move": "Flyt", + "Moved from": "Flyttet fra", + "Name": "Navn", + "NewItem": "Nyt emne", + "NormalEditor": "Standard Editor", + "Nothing selected": "Intet valgt", + "Open": "Åben", + "Operations with archives are not available": "Operationer med arkiver er ikke tilgængelige", + "Other": "Andet", + "Owner": "Ejer", + "PartitionSize": "Partitionsstørrelse", + "Password": "Adgangskode", + "Paths must be not equal": "Stierne må ikke være ens", + "Permissions changed": "Tilladelser ændret", + "Permissions not changed": "Tilladelser ikke ændret", + "Perms": "Tilladelser", + "Preview": "Forhåndsvisning", + "Read": "Læs", + "Rename": "Omdøb", + "Renamed from": "Omdøbt fra", + "Report Issue": "Rapportér problem", + "Root path": "Rod mappe", + "Save": "Gem", + "Search file in folder and subfolders...": "Søg fil i mappe og undermapper...", + "Search": "Søg", + "Select folder": "Vælg mappe", + "SelectAll": "Vælg alle", + "Selected files and folder deleted": "Valgte filer og mappe slettet", + "Settings": "Indstillinger", + "ShowHiddenFiles": "Vis skjulte filer", + "Size": "Størrelse", + "Source path not defined": "Kildesti er ikke defineret", + "SourceFolder": "Kildemappe", + "Tar": "Tar", + "Theme": "Tema", + "UnSelectAll": "Fravælg alle", + "UnZip": "Pak ud", + "UnZipToFolder": "Pak ud i mappe", + "Upload": "Upload", + "UploadingFiles": "Uploader filer", + "Username": "Brugernavn", + "Write": "Skriv", + "You are logged in": "Du er logget ind", + "Zip": "Zip", + "already exists": "eksisterer allerede", + "dark": "mørkt", + "light": "lyst", + "not created": "ikke oprettet", + "not deleted": "ikke slettet", + "not found!": "ikke fundet!", + "password_hash not supported, Upgrade PHP version": "password_hash er ikke understøttet, opgrader PHP-versionen", + "to": "til" + } } ] }