Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e87afae5b | ||
|
|
43063e4746 | ||
|
|
47359d3f4e | ||
|
|
eb8f3d80bc | ||
|
|
f380478197 | ||
|
|
f7a2f77008 | ||
|
|
dabc4ea36e | ||
|
|
7ec19c1659 | ||
|
|
8486c7a240 | ||
|
|
8194249b66 | ||
|
|
da77df785a | ||
|
|
00541fc469 | ||
|
|
7ca87c9163 | ||
|
|
f6a93653be | ||
|
|
85f35bc28f | ||
|
|
3a90a5916a | ||
|
|
6a6eb8abec | ||
|
|
bf024c7c84 | ||
|
|
d705da604c | ||
|
|
94f1c92d80 |
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
*.php text eol=lf
|
||||||
|
*.json text eol=lf
|
||||||
5
.github/workflows/PublishDocker.yml
vendored
5
.github/workflows/PublishDocker.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Docker meta
|
- name: Docker meta
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v3
|
uses: docker/metadata-action@v4
|
||||||
with:
|
with:
|
||||||
images: |
|
images: |
|
||||||
${{ secrets.DOCKERHUB_USERNAME }}/tinyfilemanager
|
${{ secrets.DOCKERHUB_USERNAME }}/tinyfilemanager
|
||||||
@@ -21,6 +21,8 @@ jobs:
|
|||||||
type=ref,event=branch
|
type=ref,event=branch
|
||||||
type=ref,event=pr
|
type=ref,event=pr
|
||||||
type=semver,pattern={{version}}
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v1
|
uses: docker/setup-qemu-action@v1
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
@@ -36,3 +38,4 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
push: true
|
push: true
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
7
assets/css/bootstrap.min.css
vendored
7
assets/css/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
1
assets/css/dropzone.min.css
vendored
1
assets/css/dropzone.min.css
vendored
File diff suppressed because one or more lines are too long
4
assets/css/font-awesome.min.css
vendored
4
assets/css/font-awesome.min.css
vendored
File diff suppressed because one or more lines are too long
1
assets/css/vs.min.css
vendored
1
assets/css/vs.min.css
vendored
@@ -1 +0,0 @@
|
|||||||
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.hljs-comment,.hljs-quote,.hljs-variable{color:green}.hljs-built_in,.hljs-keyword,.hljs-name,.hljs-selector-tag,.hljs-tag{color:#00f}.hljs-addition,.hljs-attribute,.hljs-literal,.hljs-section,.hljs-string,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type{color:#a31515}.hljs-deletion,.hljs-meta,.hljs-selector-attr,.hljs-selector-pseudo{color:#2b91af}.hljs-doctag{color:grey}.hljs-attr{color:red}.hljs-bullet,.hljs-link,.hljs-symbol{color:#00b0e8}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}
|
|
||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
Before Width: | Height: | Size: 434 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
7
assets/js/bootstrap.bundle.min.js
vendored
7
assets/js/bootstrap.bundle.min.js
vendored
File diff suppressed because one or more lines are too long
22
assets/js/datatables.min.js
vendored
22
assets/js/datatables.min.js
vendored
File diff suppressed because one or more lines are too long
1
assets/js/dropzone.min.js
vendored
1
assets/js/dropzone.min.js
vendored
File diff suppressed because one or more lines are too long
1361
assets/js/highlight.min.js
vendored
1361
assets/js/highlight.min.js
vendored
File diff suppressed because one or more lines are too long
2
assets/js/jquery-3.6.1.min.js
vendored
2
assets/js/jquery-3.6.1.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -4,7 +4,7 @@ $CONFIG = '{"lang":"en","error_reporting":false,"show_hidden":false,"hide_Cols":
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* H3K | Tiny File Manager V2.5.3
|
* H3K | Tiny File Manager V2.5.3
|
||||||
* @author Prasath Mani | CCP Programmers
|
* @author CCP Programmers
|
||||||
* @email ccpprogrammers@gmail.com
|
* @email ccpprogrammers@gmail.com
|
||||||
* @github https://github.com/prasathmani/tinyfilemanager
|
* @github https://github.com/prasathmani/tinyfilemanager
|
||||||
* @link https://tinyfilemanager.github.io
|
* @link https://tinyfilemanager.github.io
|
||||||
@@ -77,6 +77,12 @@ $iconv_input_encoding = 'UTF-8';
|
|||||||
// Doc - https://www.php.net/manual/en/function.date.php
|
// Doc - https://www.php.net/manual/en/function.date.php
|
||||||
$datetime_format = 'm/d/Y g:i A';
|
$datetime_format = 'm/d/Y g:i A';
|
||||||
|
|
||||||
|
// Path display mode when viewing file information
|
||||||
|
// 'full' => show full path
|
||||||
|
// 'relative' => show path relative to root_path
|
||||||
|
// 'host' => show path on the host
|
||||||
|
$path_display_mode = 'full';
|
||||||
|
|
||||||
// Allowed file extensions for create and rename files
|
// Allowed file extensions for create and rename files
|
||||||
// e.g. 'txt,html,css,js'
|
// e.g. 'txt,html,css,js'
|
||||||
$allowed_file_extensions = '';
|
$allowed_file_extensions = '';
|
||||||
@@ -136,20 +142,6 @@ $ip_blacklist = array(
|
|||||||
'::' // non-routable meta ipv6
|
'::' // non-routable meta ipv6
|
||||||
);
|
);
|
||||||
|
|
||||||
// External CDN resources that can be used in the HTML (replace for GDPR compliance)
|
|
||||||
$external = array(
|
|
||||||
'css-bootstrap' => '<link href="assets/css/bootstrap.min.css" rel="stylesheet">',
|
|
||||||
'css-dropzone' => '<link href="assets/css/dropzone.min.css" rel="stylesheet">',
|
|
||||||
'css-font-awesome' => '<link rel="stylesheet" href="assets/css/font-awesome.min.css" crossorigin="anonymous">',
|
|
||||||
'css-highlightjs' => '<link rel="stylesheet" href="assets/css/' . $highlightjs_style . '.min.css">',
|
|
||||||
'js-ace' => '<script src="assets/js/ace.js"></script>',
|
|
||||||
'js-bootstrap' => '<script src="assets/js/bootstrap.bundle.min.js"></script>',
|
|
||||||
'js-dropzone' => '<script src="assets/js/dropzone.min.js"></script>',
|
|
||||||
'js-jquery' => '<script src="assets/js/jquery-3.6.1.min.js"></script>',
|
|
||||||
'js-jquery-datatables' => '<script src="assets/js/dataTables.min.js"></script>',
|
|
||||||
'js-highlightjs' => '<script src="assets/js/highlight.min.js"></script>',
|
|
||||||
);
|
|
||||||
|
|
||||||
// if User has the external config file, try to use it to override the default config above [config.php]
|
// if User has the external config file, try to use it to override the default config above [config.php]
|
||||||
// sample config - https://tinyfilemanager.github.io/config-sample.txt
|
// sample config - https://tinyfilemanager.github.io/config-sample.txt
|
||||||
$config_file = __DIR__.'/config.php';
|
$config_file = __DIR__.'/config.php';
|
||||||
@@ -157,6 +149,22 @@ if (is_readable($config_file)) {
|
|||||||
@include($config_file);
|
@include($config_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// External CDN resources that can be used in the HTML (replace for GDPR compliance)
|
||||||
|
$external = array(
|
||||||
|
'css-bootstrap' => '<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">',
|
||||||
|
'css-dropzone' => '<link href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.9.3/min/dropzone.min.css" rel="stylesheet">',
|
||||||
|
'css-font-awesome' => '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" crossorigin="anonymous">',
|
||||||
|
'css-highlightjs' => '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/styles/' . $highlightjs_style . '.min.css">',
|
||||||
|
'js-ace' => '<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.13.1/ace.js"></script>',
|
||||||
|
'js-bootstrap' => '<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script>',
|
||||||
|
'js-dropzone' => '<script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.9.3/min/dropzone.min.js"></script>',
|
||||||
|
'js-jquery' => '<script src="https://code.jquery.com/jquery-3.6.1.min.js" integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>',
|
||||||
|
'js-jquery-datatables' => '<script src="https://cdn.datatables.net/1.13.1/js/jquery.dataTables.min.js" crossorigin="anonymous" defer></script>',
|
||||||
|
'js-highlightjs' => '<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js"></script>',
|
||||||
|
'pre-jsdelivr' => '<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin/><link rel="dns-prefetch" href="https://cdn.jsdelivr.net"/>',
|
||||||
|
'pre-cloudflare' => '<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin/><link rel="dns-prefetch" href="https://cdnjs.cloudflare.com"/>'
|
||||||
|
);
|
||||||
|
|
||||||
// --- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL ---
|
// --- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL ---
|
||||||
|
|
||||||
// max upload file size
|
// max upload file size
|
||||||
@@ -220,7 +228,7 @@ if (defined('FM_EMBED')) {
|
|||||||
mb_regex_encoding('UTF-8');
|
mb_regex_encoding('UTF-8');
|
||||||
}
|
}
|
||||||
|
|
||||||
session_cache_limiter('');
|
session_cache_limiter('nocache'); // Prevent logout issue after page was cached
|
||||||
session_name(FM_SESSION_ID );
|
session_name(FM_SESSION_ID );
|
||||||
function session_error_handling_function($code, $msg, $file, $line) {
|
function session_error_handling_function($code, $msg, $file, $line) {
|
||||||
// Permission denied for default session, try to create a new one
|
// Permission denied for default session, try to create a new one
|
||||||
@@ -235,9 +243,13 @@ if (defined('FM_EMBED')) {
|
|||||||
restore_error_handler();
|
restore_error_handler();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Genrating CSRF Token
|
//Generating CSRF Token
|
||||||
if (empty($_SESSION['token'])) {
|
if (empty($_SESSION['token'])) {
|
||||||
$_SESSION['token'] = bin2hex(random_bytes(32));
|
if (function_exists('random_bytes')) {
|
||||||
|
$_SESSION['token'] = bin2hex(random_bytes(32));
|
||||||
|
} else {
|
||||||
|
$_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($auth_users)) {
|
if (empty($auth_users)) {
|
||||||
@@ -320,11 +332,11 @@ if ($use_auth) {
|
|||||||
if (isset($auth_users[$_POST['fm_usr']]) && isset($_POST['fm_pwd']) && password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']]) && verifyToken($_POST['token'])) {
|
if (isset($auth_users[$_POST['fm_usr']]) && isset($_POST['fm_pwd']) && password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']]) && verifyToken($_POST['token'])) {
|
||||||
$_SESSION[FM_SESSION_ID]['logged'] = $_POST['fm_usr'];
|
$_SESSION[FM_SESSION_ID]['logged'] = $_POST['fm_usr'];
|
||||||
fm_set_msg(lng('You are logged in'));
|
fm_set_msg(lng('You are logged in'));
|
||||||
fm_redirect(FM_ROOT_URL);
|
fm_redirect(FM_SELF_URL);
|
||||||
} else {
|
} else {
|
||||||
unset($_SESSION[FM_SESSION_ID]['logged']);
|
unset($_SESSION[FM_SESSION_ID]['logged']);
|
||||||
fm_set_msg(lng('Login failed. Invalid username or password'), 'error');
|
fm_set_msg(lng('Login failed. Invalid username or password'), 'error');
|
||||||
fm_redirect(FM_ROOT_URL);
|
fm_redirect(FM_SELF_URL);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');;
|
fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');;
|
||||||
@@ -768,7 +780,7 @@ if (isset($_GET['copy'], $_GET['finish']) && !FM_READONLY) {
|
|||||||
$loop_count++;
|
$loop_count++;
|
||||||
}
|
}
|
||||||
if (fm_rcopy($from, $fn_duplicate, False)) {
|
if (fm_rcopy($from, $fn_duplicate, False)) {
|
||||||
fm_set_msg(sprintf('Copyied from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate)));
|
fm_set_msg(sprintf('Copied from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate)));
|
||||||
} else {
|
} else {
|
||||||
fm_set_msg(sprintf('Error while copying from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate)), 'error');
|
fm_set_msg(sprintf('Error while copying from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate)), 'error');
|
||||||
}
|
}
|
||||||
@@ -912,7 +924,6 @@ if (!empty($_FILES) && !FM_READONLY) {
|
|||||||
echo json_encode($response); exit();
|
echo json_encode($response); exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
$override_file_name = false;
|
|
||||||
$chunkIndex = $_POST['dzchunkindex'];
|
$chunkIndex = $_POST['dzchunkindex'];
|
||||||
$chunkTotal = $_POST['dztotalchunkcount'];
|
$chunkTotal = $_POST['dztotalchunkcount'];
|
||||||
$fullPathInput = fm_clean_path($_REQUEST['fullpath']);
|
$fullPathInput = fm_clean_path($_REQUEST['fullpath']);
|
||||||
@@ -950,11 +961,6 @@ if (!empty($_FILES) && !FM_READONLY) {
|
|||||||
$fullPath = $path . '/' . basename($fullPathInput);
|
$fullPath = $path . '/' . basename($fullPathInput);
|
||||||
$folder = substr($fullPath, 0, strrpos($fullPath, "/"));
|
$folder = substr($fullPath, 0, strrpos($fullPath, "/"));
|
||||||
|
|
||||||
if(file_exists ($fullPath) && !$override_file_name && !$chunks) {
|
|
||||||
$ext_1 = $ext ? '.'.$ext : '';
|
|
||||||
$fullPath = $path . '/' . basename($fullPathInput, $ext_1) .'_'. date('ymdHis'). $ext_1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_dir($folder)) {
|
if (!is_dir($folder)) {
|
||||||
$old = umask(0);
|
$old = umask(0);
|
||||||
mkdir($folder, 0777, true);
|
mkdir($folder, 0777, true);
|
||||||
@@ -967,7 +973,20 @@ if (!empty($_FILES) && !FM_READONLY) {
|
|||||||
if ($out) {
|
if ($out) {
|
||||||
$in = @fopen($tmp_name, "rb");
|
$in = @fopen($tmp_name, "rb");
|
||||||
if ($in) {
|
if ($in) {
|
||||||
while ($buff = fread($in, 4096)) { fwrite($out, $buff); }
|
if (PHP_VERSION_ID < 80009) {
|
||||||
|
// workaround https://bugs.php.net/bug.php?id=81145
|
||||||
|
do {
|
||||||
|
for (;;) {
|
||||||
|
$buff = fread($in, 4096);
|
||||||
|
if ($buff === false || $buff === '') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fwrite($out, $buff);
|
||||||
|
}
|
||||||
|
} while (!feof($in));
|
||||||
|
} else {
|
||||||
|
stream_copy_to_stream($in, $out);
|
||||||
|
}
|
||||||
$response = array (
|
$response = array (
|
||||||
'status' => 'success',
|
'status' => 'success',
|
||||||
'info' => "file upload successful"
|
'info' => "file upload successful"
|
||||||
@@ -995,7 +1014,13 @@ if (!empty($_FILES) && !FM_READONLY) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($chunkIndex == $chunkTotal - 1) {
|
if ($chunkIndex == $chunkTotal - 1) {
|
||||||
rename("{$fullPath}.part", $fullPath);
|
if (file_exists ($fullPath)) {
|
||||||
|
$ext_1 = $ext ? '.'.$ext : '';
|
||||||
|
$fullPathTarget = $path . '/' . basename($fullPathInput, $ext_1) .'_'. date('ymdHis'). $ext_1;
|
||||||
|
} else {
|
||||||
|
$fullPathTarget = $fullPath;
|
||||||
|
}
|
||||||
|
rename("{$fullPath}.part", $fullPathTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (move_uploaded_file($tmp_name, $fullPath)) {
|
} else if (move_uploaded_file($tmp_name, $fullPath)) {
|
||||||
@@ -1677,7 +1702,8 @@ if (isset($_GET['view'])) {
|
|||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<p class="break-word"><b><?php echo lng($view_title) ?> "<?php echo fm_enc(fm_convert_win($file)) ?>"</b></p>
|
<p class="break-word"><b><?php echo lng($view_title) ?> "<?php echo fm_enc(fm_convert_win($file)) ?>"</b></p>
|
||||||
<p class="break-word">
|
<p class="break-word">
|
||||||
<strong>Full path:</strong> <?php echo fm_enc(fm_convert_win($file_path)) ?><br>
|
<?php $display_path = fm_get_display_path($file_path); ?>
|
||||||
|
<strong><?php echo $display_path['label']; ?>:</strong> <?php echo $display_path['path']; ?><br>
|
||||||
<strong>File size:</strong> <?php echo ($filesize_raw <= 1000) ? "$filesize_raw bytes" : $filesize; ?><br>
|
<strong>File size:</strong> <?php echo ($filesize_raw <= 1000) ? "$filesize_raw bytes" : $filesize; ?><br>
|
||||||
<strong>MIME-type:</strong> <?php echo $mime_type ?><br>
|
<strong>MIME-type:</strong> <?php echo $mime_type ?><br>
|
||||||
<?php
|
<?php
|
||||||
@@ -1703,7 +1729,7 @@ if (isset($_GET['view'])) {
|
|||||||
// Image info
|
// Image info
|
||||||
if ($is_image) {
|
if ($is_image) {
|
||||||
$image_size = getimagesize($file_path);
|
$image_size = getimagesize($file_path);
|
||||||
echo lng('Image sizes').': ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '<br>';
|
echo '<strong>'.lng('Image size').':</strong> ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '<br>';
|
||||||
}
|
}
|
||||||
// Text info
|
// Text info
|
||||||
if ($is_text) {
|
if ($is_text) {
|
||||||
@@ -1776,7 +1802,7 @@ if (isset($_GET['view'])) {
|
|||||||
} elseif ($is_image) {
|
} elseif ($is_image) {
|
||||||
// Image content
|
// Image content
|
||||||
if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))) {
|
if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))) {
|
||||||
echo '<p><img src="' . fm_enc($file_url) . '" alt="image" class="preview-img-container" class="preview-img"></p>';
|
echo '<p><input type="checkbox" id="preview-img-zoomCheck"><label for="preview-img-zoomCheck"><img src="' . fm_enc($file_url) . '" alt="image" class="preview-img"></label></p>';
|
||||||
}
|
}
|
||||||
} elseif ($is_audio) {
|
} elseif ($is_audio) {
|
||||||
// Audio content
|
// Audio content
|
||||||
@@ -1936,7 +1962,8 @@ if (isset($_GET['chmod']) && !FM_READONLY && !FM_IS_WIN) {
|
|||||||
</h6>
|
</h6>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<p class="card-text">
|
<p class="card-text">
|
||||||
Full path: <?php echo $file_path ?><br>
|
<?php $display_path = fm_get_display_path($file_path); ?>
|
||||||
|
<?php echo $display_path['label']; ?>: <?php echo $display_path['path']; ?><br>
|
||||||
</p>
|
</p>
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
|
<input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
|
||||||
@@ -2049,6 +2076,12 @@ $tableTheme = (FM_THEME == "dark") ? "text-white bg-dark table-dark" : "bg-white
|
|||||||
if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
|
if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
|
||||||
$owner = posix_getpwuid(fileowner($path . '/' . $f));
|
$owner = posix_getpwuid(fileowner($path . '/' . $f));
|
||||||
$group = posix_getgrgid(filegroup($path . '/' . $f));
|
$group = posix_getgrgid(filegroup($path . '/' . $f));
|
||||||
|
if ($owner === false) {
|
||||||
|
$owner = array('name' => '?');
|
||||||
|
}
|
||||||
|
if ($group === false) {
|
||||||
|
$group = array('name' => '?');
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$owner = array('name' => '?');
|
$owner = array('name' => '?');
|
||||||
$group = array('name' => '?');
|
$group = array('name' => '?');
|
||||||
@@ -2102,6 +2135,12 @@ $tableTheme = (FM_THEME == "dark") ? "text-white bg-dark table-dark" : "bg-white
|
|||||||
if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
|
if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
|
||||||
$owner = posix_getpwuid(fileowner($path . '/' . $f));
|
$owner = posix_getpwuid(fileowner($path . '/' . $f));
|
||||||
$group = posix_getgrgid(filegroup($path . '/' . $f));
|
$group = posix_getgrgid(filegroup($path . '/' . $f));
|
||||||
|
if ($owner === false) {
|
||||||
|
$owner = array('name' => '?');
|
||||||
|
}
|
||||||
|
if ($group === false) {
|
||||||
|
$group = array('name' => '?');
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$owner = array('name' => '?');
|
$owner = array('name' => '?');
|
||||||
$group = array('name' => '?');
|
$group = array('name' => '?');
|
||||||
@@ -2210,7 +2249,6 @@ fm_show_footer();
|
|||||||
/**
|
/**
|
||||||
* It prints the css/js files into html
|
* It prints the css/js files into html
|
||||||
* @param key The key of the external file to print.
|
* @param key The key of the external file to print.
|
||||||
* @return The value of the key in the array.
|
|
||||||
*/
|
*/
|
||||||
function print_external($key) {
|
function print_external($key) {
|
||||||
global $external;
|
global $external;
|
||||||
@@ -2495,6 +2533,30 @@ function fm_get_parent_path($path)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function fm_get_display_path($file_path)
|
||||||
|
{
|
||||||
|
global $path_display_mode, $root_path, $root_url;
|
||||||
|
switch ($path_display_mode) {
|
||||||
|
case 'relative':
|
||||||
|
return array(
|
||||||
|
'label' => 'Path',
|
||||||
|
'path' => fm_enc(fm_convert_win(str_replace($root_path, '', $file_path)))
|
||||||
|
);
|
||||||
|
case 'host':
|
||||||
|
$relative_path = str_replace($root_path, '', $file_path);
|
||||||
|
return array(
|
||||||
|
'label' => 'Host Path',
|
||||||
|
'path' => fm_enc(fm_convert_win('/' . $root_url . '/' . ltrim(str_replace('\\', '/', $relative_path), '/')))
|
||||||
|
);
|
||||||
|
case 'full':
|
||||||
|
default:
|
||||||
|
return array(
|
||||||
|
'label' => 'Full Path',
|
||||||
|
'path' => fm_enc(fm_convert_win($file_path))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check file is in exclude list
|
* Check file is in exclude list
|
||||||
* @param string $file
|
* @param string $file
|
||||||
@@ -3505,7 +3567,7 @@ function fm_show_nav_path($path)
|
|||||||
<ul class="navbar-nav justify-content-end <?php echo fm_get_theme(); ?>">
|
<ul class="navbar-nav justify-content-end <?php echo fm_get_theme(); ?>">
|
||||||
<li class="nav-item mr-2">
|
<li class="nav-item mr-2">
|
||||||
<div class="input-group input-group-sm mr-1" style="margin-top:4px;">
|
<div class="input-group input-group-sm mr-1" style="margin-top:4px;">
|
||||||
<input type="text" class="form-control" placeholder="<?php echo lng('Filter') ?>" aria-label="<?php echo lng('Search') ?>" aria-describedby="search-addon2" id="search-addon">
|
<input type="text" class="form-control" placeholder="<?php echo lng('Search') ?>" aria-label="<?php echo lng('Search') ?>" aria-describedby="search-addon2" id="search-addon">
|
||||||
<div class="input-group-append">
|
<div class="input-group-append">
|
||||||
<span class="input-group-text brl-0 brr-0" id="search-addon2"><i class="fa fa-search"></i></span>
|
<span class="input-group-text brl-0 brr-0" id="search-addon2"><i class="fa fa-search"></i></span>
|
||||||
</div>
|
</div>
|
||||||
@@ -3703,7 +3765,9 @@ $isStickyNavBar = $sticky_navbar ? 'navbar-fixed' : 'navbar-normal';
|
|||||||
.message.ok { border-color:green;color:green }
|
.message.ok { border-color:green;color:green }
|
||||||
.message.error { border-color:red;color:red }
|
.message.error { border-color:red;color:red }
|
||||||
.message.alert { border-color:orange;color:orange }
|
.message.alert { border-color:orange;color:orange }
|
||||||
.preview-img { max-width:100%;max-height:80vh;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAKklEQVR42mL5//8/Azbw+PFjrOJMDCSCUQ3EABZc4S0rKzsaSvTTABBgAMyfCMsY4B9iAAAAAElFTkSuQmCC) }
|
.preview-img { max-width:100%;max-height:80vh;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAKklEQVR42mL5//8/Azbw+PFjrOJMDCSCUQ3EABZc4S0rKzsaSvTTABBgAMyfCMsY4B9iAAAAAElFTkSuQmCC);cursor:zoom-in }
|
||||||
|
input#preview-img-zoomCheck[type=checkbox] { display:none }
|
||||||
|
input#preview-img-zoomCheck[type=checkbox]:checked ~ label > img { max-width:none;max-height:none;cursor:zoom-out }
|
||||||
.inline-actions > a > i { font-size:1em;margin-left:5px;background:#3785c1;color:#fff;padding:3px 4px;border-radius:3px; }
|
.inline-actions > a > i { font-size:1em;margin-left:5px;background:#3785c1;color:#fff;padding:3px 4px;border-radius:3px; }
|
||||||
.preview-video { position:relative;max-width:100%;height:0;padding-bottom:62.5%;margin-bottom:10px }
|
.preview-video { position:relative;max-width:100%;height:0;padding-bottom:62.5%;margin-bottom:10px }
|
||||||
.preview-video video { position:absolute;width:100%;height:100%;left:0;top:0;background:#000 }
|
.preview-video video { position:absolute;width:100%;height:100%;left:0;top:0;background:#000 }
|
||||||
|
|||||||
210
translation.json
210
translation.json
@@ -8,79 +8,79 @@
|
|||||||
"translation": {
|
"translation": {
|
||||||
"AppName": "Tiny File Manager",
|
"AppName": "Tiny File Manager",
|
||||||
"AppTitle": "Titlu aplicație",
|
"AppTitle": "Titlu aplicație",
|
||||||
"Login": "Logare",
|
"Login": "Autentificare",
|
||||||
"Username": "Nume utilizator",
|
"Username": "Nume utilizator",
|
||||||
"Password": "Parola",
|
"Password": "Parolă",
|
||||||
"Logout": "Delogare",
|
"Logout": "Ieșire",
|
||||||
"Move": "Mută",
|
"Move": "Mută",
|
||||||
"Copy": "Copiază",
|
"Copy": "Copiază",
|
||||||
"Save": "Salvează",
|
"Save": "Salvează",
|
||||||
"SelectAll": "Selectează Tot",
|
"SelectAll": "Selectează tot",
|
||||||
"UnSelectAll": "Deselectează Tot",
|
"UnSelectAll": "Deselectează tot",
|
||||||
"File": "Fișier",
|
"File": "Fișier",
|
||||||
"Back": "Înapoi",
|
"Back": "Înapoi",
|
||||||
"Size": "Mărime",
|
"Size": "Dimensiune",
|
||||||
"Perms": "Permisiuni",
|
"Perms": "Permisiuni",
|
||||||
"Modified": "Modificat",
|
"Modified": "Modificat",
|
||||||
"Owner": "Titular",
|
"Owner": "Proprietar",
|
||||||
"Search": "Caută",
|
"Search": "Caută",
|
||||||
"NewItem": "Nou",
|
"NewItem": "Nou",
|
||||||
"Folder": "Dosar",
|
"Folder": "Dosar",
|
||||||
"Delete": "Șterge",
|
"Delete": "Șterge",
|
||||||
"Rename": "Redenumește",
|
"Rename": "Redenumește",
|
||||||
"CopyTo": "Copiază În",
|
"CopyTo": "Copiază în",
|
||||||
"DirectLink": "Link Direct",
|
"DirectLink": "Legătură directă",
|
||||||
"UploadingFiles": "Încarcă Fișiere",
|
"UploadingFiles": "Se încarcă fișiere",
|
||||||
"ChangePermissions": "Schimbă Permisiuni",
|
"ChangePermissions": "Schimbă permisiunile",
|
||||||
"Copying": "Copiază",
|
"Copying": "Se copiază",
|
||||||
"CreateNewItem": "Creează Obiect Nou",
|
"CreateNewItem": "Creează element nou",
|
||||||
"Name": "Nume",
|
"Name": "Denumire",
|
||||||
"AdvancedEditor": "Editor Avansat",
|
"AdvancedEditor": "Redactor avansat",
|
||||||
"RememberMe": "Ține-mă Minte",
|
"RememberMe": "Ține-mă minte",
|
||||||
"Actions": "Acțiuni",
|
"Actions": "Acțiuni",
|
||||||
"Upload": "Încarcă",
|
"Upload": "Încarcă",
|
||||||
"Cancel": "Anulează",
|
"Cancel": "Anulează",
|
||||||
"InvertSelection": "Selectare Inversă",
|
"InvertSelection": "Inversează selecția",
|
||||||
"DestinationFolder": "Dosar Destinație",
|
"DestinationFolder": "Dosar destinație",
|
||||||
"ItemType": "Tip Obiect",
|
"ItemType": "Tip element",
|
||||||
"ItemName": "Nume obiect",
|
"ItemName": "Denumire element",
|
||||||
"CreateNow": "Creează Acum",
|
"CreateNow": "Creează acum",
|
||||||
"Download": "Descarcă",
|
"Download": "Descarcă",
|
||||||
"Open": "Deschide",
|
"Open": "Deschide",
|
||||||
"UnZip": "Decomprimă",
|
"UnZip": "Decomprimă",
|
||||||
"UnZipToFolder": "Decomprimă în Dosar",
|
"UnZipToFolder": "Decomprimă în dosar",
|
||||||
"Edit": "Editează",
|
"Edit": "Modifică",
|
||||||
"NormalEditor": "Editor Standard",
|
"NormalEditor": "Redactor standard",
|
||||||
"BackUp": "Copie de Siguranță",
|
"BackUp": "Copie de rezervă",
|
||||||
"SourceFolder": "Dosar Sursă",
|
"SourceFolder": "Dosar sursă",
|
||||||
"Files": "Fișiere",
|
"Files": "Fișiere",
|
||||||
"Change": "Schimbă",
|
"Change": "Schimbă",
|
||||||
"Settings": "Setari",
|
"Settings": "Configurări",
|
||||||
"Language": "Limba",
|
"Language": "Limba",
|
||||||
"MemoryUsed": "Memorie Utilizată",
|
"MemoryUsed": "Memorie utilizată",
|
||||||
"PartitionSize": "Dimensiune Partiție",
|
"PartitionSize": "Dimensiune partiție",
|
||||||
"ErrorReporting": "Raportare de Erori",
|
"ErrorReporting": "Raportare erori",
|
||||||
"ShowHiddenFiles": "Arată Fișiere Ascunse",
|
"ShowHiddenFiles": "Arată fișiere ascunse",
|
||||||
"Full size": "Dimensiune Totală",
|
"Full size": "Dimensiune totală",
|
||||||
"Help": "Ajutor",
|
"Help": "Ajutor",
|
||||||
"Free of": "Liber din",
|
"Free of": "Liber din",
|
||||||
"Preview": "Previzualizează",
|
"Preview": "Previzualizează",
|
||||||
"Help Documents": "Documentație",
|
"Help Documents": "Documentație",
|
||||||
"Report Issue": "Raportează o Problemă",
|
"Report Issue": "Raportează defect",
|
||||||
"Generate": "Generează",
|
"Generate": "Generează",
|
||||||
"FullSize": "Mărime Maximă",
|
"FullSize": "Dimensiune completă",
|
||||||
"FreeOf": "Liber din",
|
"FreeOf": "Liber din",
|
||||||
"CalculateFolderSize": "Calculează spațiul acupat de dosar",
|
"CalculateFolderSize": "Calculează dimensiunea dosarului",
|
||||||
"ProcessID": "Id instanță",
|
"ProcessID": "Id. proces",
|
||||||
"Created": "Creat",
|
"Created": "Creat",
|
||||||
"HideColumns": "Ascunde Coloanele",
|
"HideColumns": "Ascunde coloanele",
|
||||||
"Folder is empty": "Dosarul este gol",
|
"Folder is empty": "Dosarul este gol",
|
||||||
"Check Latest Version": "Verifică ultima versiune",
|
"Check Latest Version": "Verifică ultima versiune",
|
||||||
"Generate new password hash": "Generează hash nou parolă",
|
"Generate new password hash": "Generează hash nou parolă",
|
||||||
"You are logged in": "Sunteti logat/ă",
|
"You are logged in": "Sunteți autentificat",
|
||||||
"Login failed. Invalid username or password": "Autentificare eșuată. Credențialele nu sunt valide (utilizator/parolă)",
|
"Login failed. Invalid username or password": "Autentificare eșuată. Utilizator sau parolă incorecte",
|
||||||
"password_hash not supported, Upgrade PHP version": "Generare hash parolă nesuportată, actualizați interpretorul PHP de pe server",
|
"password_hash not supported, Upgrade PHP version": "Generare hash parolă nesuportată, actualizați versiunea de PHP",
|
||||||
"Theme": "Tema",
|
"Theme": "Tematică",
|
||||||
"dark": "Întunecată",
|
"dark": "Întunecată",
|
||||||
"light": "Luminoasă"
|
"light": "Luminoasă"
|
||||||
}
|
}
|
||||||
@@ -2556,7 +2556,9 @@
|
|||||||
"Select Theme": "Kies thema",
|
"Select Theme": "Kies thema",
|
||||||
"Select Font Size": "Kies fontgrootte",
|
"Select Font Size": "Kies fontgrootte",
|
||||||
"Are you sure want to rename?": "Weet u zeker dat u de naam wilt wijzigen?",
|
"Are you sure want to rename?": "Weet u zeker dat u de naam wilt wijzigen?",
|
||||||
"Are you sure want to": "Verder gaan met"
|
"Are you sure want to": "Verder gaan met",
|
||||||
|
"dark": "donker",
|
||||||
|
"light": "licht"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2682,6 +2684,130 @@
|
|||||||
"password_hash not supported, Upgrade PHP version": "password_hash er ikke understøttet, opgrader PHP-versionen",
|
"password_hash not supported, Upgrade PHP version": "password_hash er ikke understøttet, opgrader PHP-versionen",
|
||||||
"to": "til"
|
"to": "til"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Bengali",
|
||||||
|
"code": "bn",
|
||||||
|
"translation": {
|
||||||
|
"Access denied. IP restriction applicable": "অ্যাক্সেস অস্বীকার করা হয়েছে৷ আইপি সীমাবদ্ধতা প্রযোজ্য",
|
||||||
|
"Actions": "একশন্স",
|
||||||
|
"Advanced Search": "উন্নত অনুসন্ধান",
|
||||||
|
"AdvancedEditor": "উন্নত এডিটর",
|
||||||
|
"AppTitle": "ফাইল ম্যানেজার",
|
||||||
|
"Archive not created": "আর্কাইভ তৈরি করা হয়নি",
|
||||||
|
"Archive not unpacked": "আর্কাইভ প্যাক করা হয়নি",
|
||||||
|
"Archive unpacked": "আর্কাইভ আনপ্যাক",
|
||||||
|
"Archive": "আর্কাইভ",
|
||||||
|
"Back": "পেছনে",
|
||||||
|
"BackUp": "ব্যাকআপ",
|
||||||
|
"CalculateFolderSize": "ফোল্ডার সাইজ গণনা করুন",
|
||||||
|
"Cancel": "বাতিল করুন",
|
||||||
|
"Change": "পরিবর্তন",
|
||||||
|
"ChangePermissions": "অনুমতি পরিবর্তন করুন",
|
||||||
|
"Check Latest Version": "সর্বশেষ সংস্করণ পরীক্ষা করুন",
|
||||||
|
"Copied from": "থেকে কপি করা হয়েছে",
|
||||||
|
"Copy": "কপি",
|
||||||
|
"CopyTo": "কপি করুন",
|
||||||
|
"Copying": "কপি করা হচ্ছে",
|
||||||
|
"Create archive?": "নতুন আর্কাইভ তৈরি করুন",
|
||||||
|
"CreateNewItem": "নতুন আইটেম তৈরি করুন",
|
||||||
|
"CreateNow": "এখন তৈরি করুন",
|
||||||
|
"Created": "তৈরি করা হয়েছে",
|
||||||
|
"Delete selected files and folders?": "নির্বাচিত ফাইল এবং ফোল্ডার মুছবেন?",
|
||||||
|
"Delete": "মুছে ফেলা",
|
||||||
|
"Deleted": "মুছে ফেলা হয়েছে",
|
||||||
|
"DestinationFolder": "গন্তব্য ফোল্ডার",
|
||||||
|
"DirectLink": "সরাসরি লিঙ্ক",
|
||||||
|
"Download": "ডাউনলোড",
|
||||||
|
"Edit": "এডিট",
|
||||||
|
"Error while copying from": "থেকে কপি করার সময় ত্রুটি",
|
||||||
|
"Error while deleting items": "থেকে মুছে ফেলার সময় ত্রুটি",
|
||||||
|
"Error while fetching archive info": "আর্কাইভ তথ্য আনার সময় ত্রুটি",
|
||||||
|
"Error while moving from": "থেকে সরানোর সময় ত্রুটি",
|
||||||
|
"Error while renaming from": "থেকে নাম পরিবর্তন করার সময় ত্রুটি",
|
||||||
|
"ErrorReporting": "এরর রিপোর্টিং",
|
||||||
|
"Execute": "এক্সিকিউট",
|
||||||
|
"FILE EXTENSION HAS NOT SUPPORTED": "ফাইল এক্সটেনশন সমর্থিত নয়",
|
||||||
|
"File Saved Successfully": "ফাইল সফলভাবে সংরক্ষিত হয়েছে৷",
|
||||||
|
"File extension is not allowed": "ফাইল এক্সটেনশন অনুমোদিত নয়",
|
||||||
|
"File not found": "ফাইল পাওয়া যায়নি",
|
||||||
|
"File or folder with this path already exists": "এই পথ সহ ফাইল বা ফোল্ডার ইতিমধ্যেই বিদ্যমান",
|
||||||
|
"File": "ফাইল",
|
||||||
|
"Files": "ফাইলস",
|
||||||
|
"Folder is empty": "ফোল্ডার খালি",
|
||||||
|
"Folder": "ফোল্ডার",
|
||||||
|
"FreeOf": "মুক্ত",
|
||||||
|
"FullSize": "ফুল সাইজ",
|
||||||
|
"Generate new password hash": "নতুন পাসওয়ার্ড হ্যাশ তৈরি করুন",
|
||||||
|
"Generate": "উৎপন্ন",
|
||||||
|
"Group": "গ্রুপ",
|
||||||
|
"Help Documents": "হেল্প ডকুমেন্টস",
|
||||||
|
"Help": "সাহায্য",
|
||||||
|
"HideColumns": "কলাম লুকান",
|
||||||
|
"Invalid characters in file name": "ফাইলের নামে অবৈধ অক্ষর",
|
||||||
|
"Invalid characters in file or folder name": "ফাইল বা ফোল্ডার নামের অবৈধ অক্ষর",
|
||||||
|
"Invalid file or folder name": "অবৈধ ফাইল বা ফোল্ডারের নাম",
|
||||||
|
"InvertSelection": "উল্টে নির্বাচন করুন",
|
||||||
|
"ItemName": "আইটেম নাম",
|
||||||
|
"ItemType": "আইটেম ধরন",
|
||||||
|
"Language": "ভাষা",
|
||||||
|
"Login failed. Invalid username or password": "লগইন ব্যর্থ. অবৈধ ব্যবহারকারীর নাম বা পাসওয়ার্ড",
|
||||||
|
"Login": "লগইন",
|
||||||
|
"Logout": "লগআউট",
|
||||||
|
"Modified": "পরিবর্তিত",
|
||||||
|
"Move": "সরান",
|
||||||
|
"Moved from": "থেকে সরানো",
|
||||||
|
"Name": "নাম",
|
||||||
|
"NewItem": "নতুন আইটেম",
|
||||||
|
"NormalEditor": "সাধারণ এডিটর",
|
||||||
|
"Nothing selected": "কিছুই নির্বাচিত নয়",
|
||||||
|
"Open": "খোলা",
|
||||||
|
"Operations with archives are not available": "আর্কাইভ সহ অপারেশন পাওয়া যায়নি",
|
||||||
|
"Other": "অন্যান্য",
|
||||||
|
"Owner": "মালিক",
|
||||||
|
"PartitionSize": "পার্টিশনের মাপ",
|
||||||
|
"Password": "পাসওয়ার্ড",
|
||||||
|
"Paths must be not equal": "পথ সমান হতে হবে না",
|
||||||
|
"Permissions changed": "অনুমতি পরিবর্তন",
|
||||||
|
"Permissions not changed": "অনুমতি পরিবর্তন করা হয়নি",
|
||||||
|
"Perms": "পারমস",
|
||||||
|
"Preview": "পূর্বরূপ",
|
||||||
|
"Read": "পড়ুন",
|
||||||
|
"Rename": "নাম পরিবর্তন করা হয়েছে",
|
||||||
|
"Renamed from": "থেকে নাম পরিবর্তন করা হয়েছে",
|
||||||
|
"Report Issue": "ইস্যুস রিপোর্ট করুন",
|
||||||
|
"Root path": "রুট পথ",
|
||||||
|
"Save": "সংরক্ষণ",
|
||||||
|
"Search file in folder and subfolders...": "ফোল্ডার এবং সাবফোল্ডারে ফাইল অনুসন্ধান করুন...",
|
||||||
|
"Search": "অনুসন্ধান করুন",
|
||||||
|
"Select folder": "ফোল্ডার নির্বাচন করুন",
|
||||||
|
"SelectAll": "সব নির্বাচন করুন",
|
||||||
|
"Selected files and folder deleted": "নির্বাচিত ফাইল এবং ফোল্ডার মুছে ফেলা হয়েছে",
|
||||||
|
"Settings": "সেটিংস",
|
||||||
|
"ShowHiddenFiles": "গোপন ফাইলগুলো দেখুন",
|
||||||
|
"Size": "সাইজ",
|
||||||
|
"Source path not defined": "সোর্স পথ সংজ্ঞায়িত করা হয়নি",
|
||||||
|
"SourceFolder": "সোর্স ফোল্ডার",
|
||||||
|
"Tar": "টার",
|
||||||
|
"Theme": "থিম",
|
||||||
|
"UnSelectAll": "সরিয়ে ফেলুন সব",
|
||||||
|
"UnZip": "আনজিপ করুন",
|
||||||
|
"UnZipToFolder": "ফোল্ডারে আনজিপ",
|
||||||
|
"Upload": "আপলোড",
|
||||||
|
"UploadingFiles": "ফাইল আপলোড করা হচ্ছে",
|
||||||
|
"Username": "ব্যবহারকারীর নাম",
|
||||||
|
"Write": "লিখুন",
|
||||||
|
"You are logged in": "আপনি লগ ইন করছেন",
|
||||||
|
"Zip": "জিপ",
|
||||||
|
"already exists": "আগে থেকেই আছে",
|
||||||
|
"dark": "ডার্ক",
|
||||||
|
"light": "লাইট",
|
||||||
|
"not created": "তৈরি করা হয়নি",
|
||||||
|
"not deleted": "মুছে ফেলা হয়নি",
|
||||||
|
"not found!": "পাওয়া যায় নি!",
|
||||||
|
"password_hash not supported, Upgrade PHP version": "পাসওয়ার্ড_হ্যাশ সমর্থিত নয়, পিএইচপি ভার্সন আপগ্রেড করুন",
|
||||||
|
"to": "to"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user