Compare commits
No commits in common. "master" and "3.6.0" have entirely different histories.
53 changed files with 1405 additions and 2333 deletions
2
.github/workflows/test_suite.yml
vendored
2
.github/workflows/test_suite.yml
vendored
|
@ -12,7 +12,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest]
|
||||
php-versions: ["7.3", "7.4", "8.0", "8.1", "8.2"]
|
||||
php-versions: ["7.3", "7.4", "8.0"]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
|
33
CHANGELOG.md
33
CHANGELOG.md
|
@ -5,39 +5,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||
|
||||
## Unreleased
|
||||
|
||||
## [3.7.0] - 2024-01-14
|
||||
### Added
|
||||
- Added support for vanity urls.
|
||||
- Added KDE integration for linux script.
|
||||
|
||||
### Changed
|
||||
- Updated translations.
|
||||
- File preview is now clickable to open the file.
|
||||
|
||||
### Fixed
|
||||
- Fixes for LDAP authentication.
|
||||
|
||||
## [3.6.3] - 2023-05-27
|
||||
### Fixed
|
||||
- Fix LDAP for php >= 8.1
|
||||
|
||||
## [3.6.2] - 2023-05-24
|
||||
### Changed
|
||||
- Support for PHP 8.2
|
||||
|
||||
### Removed
|
||||
- Azure blob storage driver
|
||||
|
||||
## [3.6.1] - 2022-11-27
|
||||
### Changed
|
||||
- Upgraded dependencies
|
||||
- Updated translations
|
||||
|
||||
### Fixed
|
||||
- Fixed error in export data (#499)
|
||||
- Fixed issues with reverse proxies (#495)
|
||||
- Fixed duplicated twitter tags
|
||||
|
||||
## [3.6.0] - 2022-06-20
|
||||
### Changed
|
||||
- Improved embedding on discord of large videos.
|
||||
|
|
|
@ -27,7 +27,7 @@ abstract class AuthController extends Controller
|
|||
|
||||
/**
|
||||
* Connects to LDAP server and logs in with service account (if configured)
|
||||
* @return \LDAP\Connection|resource|false
|
||||
* @return resource|false
|
||||
*/
|
||||
public function ldapConnect()
|
||||
{
|
||||
|
@ -39,7 +39,7 @@ abstract class AuthController extends Controller
|
|||
$ldapSchema=(@is_string($this->config['ldap']['schema'])) ?
|
||||
strtolower($this->config['ldap']['schema']) : 'ldap';
|
||||
$ldapURI="$ldapSchema://".$this->config['ldap']['host'].':'.$this->config['ldap']['port'];
|
||||
|
||||
|
||||
// Connecting to LDAP server
|
||||
$this->logger->debug("Connecting to $ldapURI");
|
||||
$server = ldap_connect($ldapURI);
|
||||
|
@ -48,18 +48,18 @@ abstract class AuthController extends Controller
|
|||
ldap_set_option($server, LDAP_OPT_REFERRALS, 0);
|
||||
ldap_set_option($server, LDAP_OPT_NETWORK_TIMEOUT, 10);
|
||||
} else {
|
||||
$this->logger->error('LDAP-URI was not parseable');
|
||||
$this->logger->error(ldap_error($server));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// Upgrade to StartTLS
|
||||
$useStartTLS = @is_bool($this->config['ldap']['useStartTLS']) ? $this->config['ldap']['useStartTLS'] : false;
|
||||
if (($useStartTLS === true) && (ldap_start_tls($server) === false)) {
|
||||
$this->logger->debug(ldap_error($server));
|
||||
$this->logger-debug(ldap_error($server));
|
||||
$this->logger->error("Failed to establish secure LDAP swith StartTLS");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// Authenticating LDAP service account (if configured)
|
||||
$serviceAccountFQDN= (@is_string($this->config['ldap']['service_account_dn'])) ?
|
||||
$this->config['ldap']['service_account_dn'] : null;
|
||||
|
@ -77,7 +77,7 @@ abstract class AuthController extends Controller
|
|||
/**
|
||||
* Returns User's LDAP DN
|
||||
* @param string $username
|
||||
* @param \LDAP\Connection|resource $server LDAP Server Resource
|
||||
* @param resource $server LDAP Server Resource
|
||||
* @return string|null
|
||||
*/
|
||||
protected function getLdapRdn(string $username, $server)
|
||||
|
@ -85,7 +85,7 @@ abstract class AuthController extends Controller
|
|||
//Dynamic LDAP User Binding
|
||||
if (@is_string($this->config['ldap']['search_filter'])) {
|
||||
//Replace ???? with username
|
||||
$searchFilter = str_replace('????', ldap_escape($username, '', LDAP_ESCAPE_FILTER), $this->config['ldap']['search_filter']);
|
||||
$searchFilter = str_replace('????', ldap_escape($username, null, LDAP_ESCAPE_FILTER), $this->config['ldap']['search_filter']);
|
||||
$ldapAddributes = array('dn');
|
||||
$this->logger->debug("LDAP Search filter: $searchFilter");
|
||||
$ldapSearchResp = ldap_search(
|
||||
|
@ -94,7 +94,7 @@ abstract class AuthController extends Controller
|
|||
$searchFilter,
|
||||
$ldapAddributes
|
||||
);
|
||||
if (!$ldapSearchResp) {
|
||||
if (!is_resource($ldapSearchResp)) {
|
||||
$this->logger->debug(ldap_error($server));
|
||||
$this->logger->error("User LDAP search for user $username failed");
|
||||
return null;
|
||||
|
@ -112,7 +112,7 @@ abstract class AuthController extends Controller
|
|||
if ($this->config['ldap']['user_domain'] !== null) {
|
||||
$bindString .= ','.$this->config['ldap']['user_domain'];
|
||||
}
|
||||
|
||||
|
||||
if ($this->config['ldap']['base_domain'] !== null) {
|
||||
$bindString .= ','.$this->config['ldap']['base_domain'];
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ use Slim\Exception\HttpNotFoundException;
|
|||
|
||||
class PasswordRecoveryController extends AuthController
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Response $response
|
||||
* @return Response
|
||||
|
|
|
@ -13,6 +13,7 @@ use Slim\Exception\HttpNotFoundException;
|
|||
|
||||
class RegisterController extends AuthController
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Response $response
|
||||
|
|
|
@ -114,35 +114,4 @@ class ClientController extends Controller
|
|||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Response $response
|
||||
* @param int $id
|
||||
*
|
||||
* @return Response
|
||||
* @throws \Twig\Error\LoaderError
|
||||
* @throws \Twig\Error\RuntimeError
|
||||
* @throws \Twig\Error\SyntaxError
|
||||
*/
|
||||
public function getKDEScript(Request $request, Response $response, int $id): Response
|
||||
{
|
||||
$user = make(UserRepository::class)->get($request, $id, true);
|
||||
|
||||
if (!$user->token) {
|
||||
$this->session->alert(lang('no_upload_token'), 'danger');
|
||||
|
||||
return redirect($response, $request->getHeaderLine('Referer'));
|
||||
}
|
||||
|
||||
return view()->render(
|
||||
$response->withHeader('Content-Disposition', 'attachment;filename="xbackbone_uploader_'.$user->username.'.sh"'),
|
||||
'scripts/xbackbone_kde_uploader.sh.twig',
|
||||
[
|
||||
'username' => $user->username,
|
||||
'upload_url' => route('upload'),
|
||||
'token' => $user->token,
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ class ExportController extends Controller
|
|||
|
||||
$medias = $this->database->query('SELECT `uploads`.`filename`, `uploads`.`storage_path` FROM `uploads` WHERE `user_id` = ?', $user->id);
|
||||
|
||||
$this->logger->info("User $user->id, $user->username, exporting data...");
|
||||
$this->logger->info("User $user->id, $user->name, exporting data...");
|
||||
|
||||
set_time_limit(0);
|
||||
ob_end_clean();
|
||||
|
|
|
@ -4,6 +4,7 @@ namespace App\Controllers;
|
|||
|
||||
use App\Database\Repositories\UserRepository;
|
||||
use App\Web\UA;
|
||||
use GuzzleHttp\Psr7\Stream;
|
||||
use Intervention\Image\Constraint;
|
||||
use Intervention\Image\ImageManagerStatic as Image;
|
||||
use League\Flysystem\FileNotFoundException;
|
||||
|
@ -13,7 +14,6 @@ use Psr\Http\Message\ServerRequestInterface as Request;
|
|||
use Slim\Exception\HttpBadRequestException;
|
||||
use Slim\Exception\HttpNotFoundException;
|
||||
use Slim\Exception\HttpUnauthorizedException;
|
||||
use Slim\Psr7\Stream;
|
||||
|
||||
class MediaController extends Controller
|
||||
{
|
||||
|
@ -188,43 +188,6 @@ class MediaController extends Controller
|
|||
return $this->streamMedia($request, $response, $this->storage, $media, 'attachment');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Response $response
|
||||
* @param string $vanity
|
||||
* @param string $id
|
||||
*
|
||||
* @return Response
|
||||
* @throws HttpNotFoundException
|
||||
* @throws HttpBadRequestException
|
||||
*/
|
||||
public function createVanity(Request $request, Response $response, int $id): Response
|
||||
{
|
||||
$media = $this->database->query('SELECT * FROM `uploads` WHERE `id` = ? LIMIT 1', $id)->fetch();
|
||||
|
||||
$vanity = param($request, 'vanity');
|
||||
$vanity = preg_replace('/[^a-z0-9]+/', '-', strtolower($vanity));
|
||||
|
||||
//handle collisions
|
||||
$collision = $this->database->query('SELECT * FROM `uploads` WHERE `code` = ? AND `id` != ? LIMIT 1', [$vanity, $id])->fetch();
|
||||
|
||||
if (!$media) {
|
||||
throw new HttpNotFoundException($request);
|
||||
}
|
||||
|
||||
if ($vanity === '' || $collision) {
|
||||
throw new HttpBadRequestException($request);
|
||||
}
|
||||
|
||||
$this->database->query('UPDATE `uploads` SET `code` = ? WHERE `id` = ?', [$vanity, $media->id]);
|
||||
$media->code = $vanity;
|
||||
$response->getBody()->write(json_encode($media));
|
||||
|
||||
$this->logger->info('User '.$this->session->get('username').' created a vanity link for media '.$media->id);
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Response $response
|
||||
|
|
|
@ -12,6 +12,7 @@ use Slim\Exception\HttpNotFoundException;
|
|||
|
||||
class TagController extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Response $response
|
||||
|
|
|
@ -208,7 +208,6 @@ class UploadController extends Controller
|
|||
|
||||
$this->json['message'] = 'OK';
|
||||
$this->json['url'] = urlFor("/{$user->user_code}/{$code}.{$fileInfo['extension']}");
|
||||
$this->json['raw_url'] = urlFor("/{$user->user_code}/{$code}/raw.{$fileInfo['extension']}");
|
||||
|
||||
$this->logger->info("User $user->username uploaded new media.", [$mediaId]);
|
||||
|
||||
|
|
|
@ -208,38 +208,21 @@ class MediaRepository
|
|||
array_multisort(array_column($files, 'size'), $this->buildOrderBy(), SORT_NUMERIC, $files);
|
||||
|
||||
$params = [];
|
||||
$queryPagesParams = [];
|
||||
|
||||
if ($this->text !== null) {
|
||||
if ($this->isAdmin) {
|
||||
[$queryMedia, $queryPages] = $this->buildAdminQueries();
|
||||
[$queryMedia,] = $this->buildAdminQueries();
|
||||
} else {
|
||||
[$queryMedia, $queryPages] = $this->buildUserQueries();
|
||||
[$queryMedia,] = $this->buildUserQueries();
|
||||
$params[] = $this->userId;
|
||||
}
|
||||
|
||||
$params[] = '%'.htmlentities($this->text).'%';
|
||||
$queryPagesParams = $params;
|
||||
$paths = array_column($files, 'path');
|
||||
} elseif ($this->tagId !== null) {
|
||||
if ($this->isAdmin) {
|
||||
[, $queryPages] = $this->buildAdminQueries();
|
||||
} else {
|
||||
[, $queryPages] = $this->buildUserQueries();
|
||||
$queryPagesParams[] = $this->userId;
|
||||
}
|
||||
|
||||
$paths = array_column($files, 'path');
|
||||
$ids = $this->getMediaIdsByTagId($this->tagId);
|
||||
$queryMedia = 'SELECT `uploads`.*, `users`.`user_code`, `users`.`username` FROM `uploads` LEFT JOIN `users` ON `uploads`.`user_id` = `users`.`id` WHERE `uploads`.`storage_path` IN ("'.implode('","', $paths).'") AND `uploads`.`id` IN ('.implode(',', $ids).')';
|
||||
} else {
|
||||
if ($this->isAdmin) {
|
||||
[, $queryPages] = $this->buildAdminQueries();
|
||||
} else {
|
||||
[, $queryPages] = $this->buildUserQueries();
|
||||
$queryPagesParams[] = $this->userId;
|
||||
}
|
||||
|
||||
$files = array_slice($files, $offset, $limit, true);
|
||||
$paths = array_column($files, 'path');
|
||||
$queryMedia = 'SELECT `uploads`.*, `users`.`user_code`, `users`.`username` FROM `uploads` LEFT JOIN `users` ON `uploads`.`user_id` = `users`.`id` WHERE `uploads`.`storage_path` IN ("'.implode('","', $paths).'")';
|
||||
|
@ -270,7 +253,7 @@ class MediaRepository
|
|||
}
|
||||
}
|
||||
|
||||
$this->pages = $this->db->query($queryPages, $queryPagesParams)->fetch()->count / $limit;
|
||||
$this->pages = count($this->media) / $limit;
|
||||
|
||||
if ($this->text !== null || $this->tagId !== null) {
|
||||
$this->media = array_slice($this->media, $offset, $limit, true);
|
||||
|
@ -362,7 +345,7 @@ class MediaRepository
|
|||
protected function getMediaIdsByTagId($tagId)
|
||||
{
|
||||
$mediaIds = $this->db->query('SELECT `upload_id` FROM `uploads_tags` WHERE `tag_id` = ?', $tagId)->fetchAll();
|
||||
$ids = [-1];
|
||||
$ids = [];
|
||||
foreach ($mediaIds as $pivot) {
|
||||
$ids[] = $pivot->upload_id;
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace App\Middleware;
|
||||
|
||||
use GuzzleHttp\Psr7\Response;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
use Psr\Http\Server\RequestHandlerInterface as RequestHandler;
|
||||
|
@ -15,7 +16,7 @@ class AdminMiddleware extends Middleware
|
|||
*
|
||||
* @throws HttpUnauthorizedException
|
||||
*
|
||||
* @return ResponseInterface
|
||||
* @return Response
|
||||
*/
|
||||
public function __invoke(Request $request, RequestHandler $handler): ResponseInterface
|
||||
{
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
namespace App\Middleware;
|
||||
|
||||
use GuzzleHttp\Psr7\Response;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
use Psr\Http\Server\RequestHandlerInterface as RequestHandler;
|
||||
use Slim\Psr7\Factory\ResponseFactory;
|
||||
|
||||
class AuthMiddleware extends Middleware
|
||||
{
|
||||
|
@ -18,16 +18,16 @@ class AuthMiddleware extends Middleware
|
|||
public function __invoke(Request $request, RequestHandler $handler): ResponseInterface
|
||||
{
|
||||
if (!$this->session->get('logged', false)) {
|
||||
$this->session->set('redirectTo', (string) $request->getUri()->getPath());
|
||||
$this->session->set('redirectTo', (string) $request->getUri());
|
||||
|
||||
return redirect((new ResponseFactory())->createResponse(), route('login.show'));
|
||||
return redirect(new Response(), route('login.show'));
|
||||
}
|
||||
|
||||
if (!$this->database->query('SELECT `id`, `active` FROM `users` WHERE `id` = ? LIMIT 1', [$this->session->get('user_id')])->fetch()->active) {
|
||||
$this->session->alert(lang('account_disabled'), 'danger');
|
||||
$this->session->set('logged', false);
|
||||
|
||||
return redirect((new ResponseFactory())->createResponse(), route('login.show'));
|
||||
return redirect(new Response(), route('login.show'));
|
||||
}
|
||||
|
||||
return $handler->handle($request);
|
||||
|
|
|
@ -4,6 +4,7 @@ namespace App\Web;
|
|||
|
||||
class UA
|
||||
{
|
||||
|
||||
/**
|
||||
* bot user agent => perform link embed
|
||||
* @var string[]
|
||||
|
|
|
@ -117,13 +117,13 @@ if (!function_exists('stringToBytes')) {
|
|||
switch ($last) {
|
||||
case 't':
|
||||
$val *= 1024;
|
||||
// no break
|
||||
// no break
|
||||
case 'g':
|
||||
$val *= 1024;
|
||||
// no break
|
||||
// no break
|
||||
case 'm':
|
||||
$val *= 1024;
|
||||
// no break
|
||||
// no break
|
||||
case 'k':
|
||||
$val *= 1024;
|
||||
}
|
||||
|
|
2
app/routes.php
Executable file → Normal file
2
app/routes.php
Executable file → Normal file
|
@ -57,13 +57,11 @@ $app->group('', function (RouteCollectorProxy $group) {
|
|||
$group->post('/user/{id}/refreshToken', [UserController::class, 'refreshToken'])->setName('refreshToken');
|
||||
$group->get('/user/{id}/config/sharex', [ClientController::class, 'getShareXConfig'])->setName('config.sharex');
|
||||
$group->get('/user/{id}/config/script', [ClientController::class, 'getBashScript'])->setName('config.script');
|
||||
$group->get('/user/{id}/config/kde_script', [ClientController::class, 'getKDEScript'])->setName('kde_config.script');
|
||||
|
||||
$group->get('/user/{id}/export', [ExportController::class, 'downloadData'])->setName('export.data');
|
||||
|
||||
$group->post('/upload/{id}/publish', [MediaController::class, 'togglePublish'])->setName('upload.publish');
|
||||
$group->post('/upload/{id}/unpublish', [MediaController::class, 'togglePublish'])->setName('upload.unpublish');
|
||||
$group->post('/upload/{id}/vanity', [MediaController::class, 'createVanity'])->setName('upload.vanity');
|
||||
$group->get('/upload/{id}/raw', [MediaController::class, 'getRawById'])->add(AdminMiddleware::class)->setName('upload.raw');
|
||||
$group->map(['GET', 'POST'], '/upload/{id}/delete', [MediaController::class, 'delete'])->setName('upload.delete');
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{
|
||||
"name": "sergix44/xbackbone",
|
||||
"license": "AGPL-3.0-only",
|
||||
"version": "3.7.0",
|
||||
"version": "3.6.0",
|
||||
"description": "A lightweight ShareX PHP backend",
|
||||
"type": "project",
|
||||
"require": {
|
||||
"php": ">=7.3",
|
||||
"php": ">=7.2",
|
||||
"ext-filter": "*",
|
||||
"ext-gd": "*",
|
||||
"ext-intl": "*",
|
||||
|
@ -13,15 +13,16 @@
|
|||
"ext-pdo": "*",
|
||||
"ext-zip": "*",
|
||||
"erusev/parsedown": "^1.7",
|
||||
"guzzlehttp/psr7": "^1.8",
|
||||
"intervention/image": "^2.6",
|
||||
"league/flysystem": "^1.1.4",
|
||||
"league/flysystem-aws-s3-v3": "^1.0",
|
||||
"league/flysystem-azure-blob-storage": "^0.1.6",
|
||||
"league/flysystem-cached-adapter": "^1.1",
|
||||
"maennchen/zipstream-php": "^2.0",
|
||||
"monolog/monolog": "^1.23",
|
||||
"php-di/slim-bridge": "^3.0",
|
||||
"sapphirecat/slim4-http-interop-adapter": "^1.0",
|
||||
"slim/psr7": "^1.5",
|
||||
"slim/slim": "^4.0",
|
||||
"spatie/flysystem-dropbox": "^1.0",
|
||||
"superbalist/flysystem-google-storage": "^7.2",
|
||||
|
@ -48,12 +49,10 @@
|
|||
"Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"prefer-stable": true,
|
||||
"require-dev": {
|
||||
"roave/security-advisories": "dev-latest",
|
||||
"phpstan/phpstan": "^0.11.5",
|
||||
"phpunit/phpunit": "^9.0",
|
||||
"phpunit/phpunit": "^8.5",
|
||||
"symfony/dom-crawler": "^4.4"
|
||||
}
|
||||
}
|
||||
|
|
2763
composer.lock
generated
2763
composer.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -5,39 +5,6 @@ nav_order: 9
|
|||
---
|
||||
# Changelog
|
||||
|
||||
## [3.7.0] - 2024-01-14
|
||||
### Added
|
||||
- Added support for vanity urls.
|
||||
- Added KDE integration for linux script.
|
||||
|
||||
### Changed
|
||||
- Updated translations.
|
||||
- File preview is now clickable to open the file.
|
||||
|
||||
### Fixed
|
||||
- Fixes for LDAP authentication.
|
||||
|
||||
## [3.6.3] - 2023-05-27
|
||||
### Fixed
|
||||
- Fix LDAP for php >= 8.1
|
||||
|
||||
## [3.6.2] - 2023-05-24
|
||||
### Changed
|
||||
- Support for PHP 8.2
|
||||
|
||||
### Removed
|
||||
- Azure blob storage driver
|
||||
|
||||
## [3.6.1] - 2022-11-27
|
||||
### Changed
|
||||
- Upgraded dependencies
|
||||
- Updated translations
|
||||
|
||||
### Fixed
|
||||
- Fixed error in export data (#499)
|
||||
- Fixed issues with reverse proxies (#495)
|
||||
- Fixed duplicated twitter tags (#496)
|
||||
|
||||
## [3.6.0] - 2022-06-20
|
||||
### Changed
|
||||
- Improved embedding on discord of large videos.
|
||||
|
|
|
@ -191,6 +191,19 @@ return array(
|
|||
);
|
||||
```
|
||||
|
||||
+ Azure Blob Storage
|
||||
```php
|
||||
return array(
|
||||
...
|
||||
'storage' => array (
|
||||
'driver' => 'azure',
|
||||
'account_name' => 'the-storage-account-name',
|
||||
'account_key' => 'the-account-key',
|
||||
'container_name' => 'container-name',
|
||||
),
|
||||
);
|
||||
```
|
||||
|
||||
## Changing themes
|
||||
XBackBone supports all [bootswatch.com](https://bootswatch.com/) themes.
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ nav_order: 2
|
|||
# Installation
|
||||
|
||||
### Prerequisites
|
||||
XBackBone require PHP >= `7.3`, with installed the required extensions:
|
||||
XBackBone require PHP >= `7.2`, with installed the required extensions:
|
||||
+ `php-sqlite3` for SQLite.
|
||||
+ `php-mysql` for MariaDB/MySQL.
|
||||
+ `php-gd` image manipualtion library.
|
||||
|
|
55
package-lock.json
generated
55
package-lock.json
generated
|
@ -339,12 +339,12 @@
|
|||
}
|
||||
},
|
||||
"node_modules/braces": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
|
||||
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
||||
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"fill-range": "^7.1.1"
|
||||
"fill-range": "^7.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
|
@ -805,9 +805,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/fill-range": {
|
||||
"version": "7.1.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
|
||||
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
||||
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"to-regex-range": "^5.0.1"
|
||||
|
@ -2148,9 +2148,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/minimatch": {
|
||||
"version": "3.0.8",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz",
|
||||
"integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==",
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
|
@ -2493,18 +2493,15 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/qs": {
|
||||
"version": "6.11.0",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
|
||||
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
|
||||
"version": "6.10.1",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz",
|
||||
"integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"side-channel": "^1.0.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.6"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/rangetouch": {
|
||||
|
@ -3216,12 +3213,12 @@
|
|||
}
|
||||
},
|
||||
"braces": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
|
||||
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
||||
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fill-range": "^7.1.1"
|
||||
"fill-range": "^7.0.1"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
|
@ -3609,9 +3606,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"fill-range": {
|
||||
"version": "7.1.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
|
||||
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
||||
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"to-regex-range": "^5.0.1"
|
||||
|
@ -4691,9 +4688,9 @@
|
|||
}
|
||||
},
|
||||
"minimatch": {
|
||||
"version": "3.0.8",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz",
|
||||
"integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==",
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
|
@ -4955,9 +4952,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"qs": {
|
||||
"version": "6.11.0",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
|
||||
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
|
||||
"version": "6.10.1",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz",
|
||||
"integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"side-channel": "^1.0.4"
|
||||
|
|
|
@ -17,9 +17,9 @@ return [
|
|||
'pager.next' => 'التالي',
|
||||
'pager.previous' => 'السابق',
|
||||
'copy_link' => 'نسخ الرابط',
|
||||
'public.telegram' => 'شارك على تيليجرام',
|
||||
'public.delete_text' => 'هل أنت متأكد من أنك تريد حذف هذا العنصر؟ لن تتمكن من استعادته',
|
||||
'preview' => 'استعراض',
|
||||
'public.telegram' => 'مشاركة عبر تلغرام',
|
||||
'public.delete_text' => 'هل تريد بالتأكيد حذف هذا العنصر؟ سيحذف نهائيا!',
|
||||
'preview' => 'السابق',
|
||||
'filename' => 'اسم الملف',
|
||||
'size' => 'حجم',
|
||||
'public' => 'عام',
|
||||
|
@ -59,13 +59,13 @@ return [
|
|||
'account_disabled' => 'حسابك معطل.',
|
||||
'welcome' => 'مرحبا، %s!',
|
||||
'goodbye' => 'وداعا!',
|
||||
'email_required' => 'عنوان البريد الإلكتروني مطلوب.',
|
||||
'email_taken' => 'عنوان البريد الإلكتروني قيد الاستخدام بالفعل.',
|
||||
'email_required' => 'البريد الإلكتروني مطلوب.',
|
||||
'email_taken' => 'البريد الإلكتروني قيد الاستخدام.',
|
||||
'username_required' => 'اسم المستخدم مطلوب.',
|
||||
'username_taken' => 'اسم المستخدم قيد الاستخدام.',
|
||||
'password_required' => 'كلمة المرور مطلوبة.',
|
||||
'user_created' => 'تم إنشاء المستخدم "٪s"!',
|
||||
'user_updated' => 'تم تحديث المستخدم "%s"!',
|
||||
'user_created' => 'المستخدم "%s" أنشئ!',
|
||||
'user_updated' => 'المستخدم "%s" تم تحديثه!',
|
||||
'profile_updated' => 'تم تحديث الملف الشخصي بنجاح!',
|
||||
'user_deleted' => 'تم حذف المستخدم.',
|
||||
'cannot_delete' => 'لا يمكنك حذف نفسك.',
|
||||
|
@ -73,8 +73,8 @@ return [
|
|||
'switch_to' => 'تبديل إلى',
|
||||
'gallery' => 'معرض',
|
||||
'table' => 'جدول',
|
||||
'dotted_search' => 'بحث…',
|
||||
'order_by' => 'ترتيب حسب…',
|
||||
'dotted_search' => 'بحث...',
|
||||
'order_by' => 'ترتيب حسب...',
|
||||
'time' => 'وقت',
|
||||
'name' => 'اسم',
|
||||
'maintenance' => 'صيانة',
|
||||
|
@ -88,7 +88,7 @@ return [
|
|||
'updates' => 'تحديثات',
|
||||
'cancel' => 'إلغاء',
|
||||
'auto_set' => 'حدد تلقائيا',
|
||||
'prerelease_channel' => 'قناة ما قبل الإصدار',
|
||||
'prerelease_channel' => 'قناة إصدار تجريبي',
|
||||
'drop_to_upload' => 'انقر أو اسحب ملفاتك هنا للرفع.',
|
||||
'donation' => 'تبرع',
|
||||
'remember_me' => 'تذكرني',
|
||||
|
@ -101,7 +101,7 @@ return [
|
|||
'password_recovery' => 'استعادة كلمة المرور',
|
||||
'no_account' => 'لا تملك حسابا؟',
|
||||
'register' => 'تسجيل',
|
||||
'register_success' => 'تم إنشاء الحساب، تم إرسال رسالة تأكيد عبر البريد الإلكتروني.',
|
||||
'register_success' => 'تم إنشاء الحساب، تم إرسال رسالة تأكيد إلكترونية.',
|
||||
'mail.activate_account' => '%s - تفعيل الحساب',
|
||||
'mail.recover_password' => '%s - استعادة كلمة المرور',
|
||||
'recover_email_sent' => 'إن وجد، سيتم إرسال رسالة إلكترونية لاستعادة كلمة المرور إلى الحساب المحدد.',
|
||||
|
@ -115,51 +115,8 @@ return [
|
|||
'clear_account' => 'مسح الحساب',
|
||||
'account_media_deleted' => 'كل الوسائط في الحساب تم حذفها.',
|
||||
'danger_zone' => 'منطقة خطرة',
|
||||
'send_notification' => 'إرسال إشعار بالبريد الإلكتروني',
|
||||
'send_notification' => 'إرسال رسالة إشعار إلكترونية',
|
||||
'mail.new_account' => '%s - إنشاء حساب جديد',
|
||||
'php_info' => 'معلومات الPHP',
|
||||
'enforce_language' => 'فرض اللغة',
|
||||
'image_embeds' => 'تضمين الصور',
|
||||
'token_not_found' => 'لم يتم العثور على الرمز المميز المحدد.',
|
||||
'clean_orphaned_uploads' => 'تنظيف التحميلات المعزولة',
|
||||
'show_all_tags' => 'إظهار جميع العلامات',
|
||||
'cannot_demote' => 'لا يمكنك تخفيض رتبتك.',
|
||||
'recaptcha_secret_key' => 'المفتاح السري reCAPTCHA',
|
||||
'recaptcha_failed' => 'فشل reCAPTCHA',
|
||||
'recaptcha_enabled' => 'تم تفعيل reCAPTCHA',
|
||||
'default_user_quota' => 'الحصة الافتراضية للمستخدم',
|
||||
'invalid_quota' => 'قيم غير صالحة كحصة مستخدم افتراضية.',
|
||||
'copy_url_behavior' => 'نسخ وضع الرابط',
|
||||
'token' => 'الرمز المميز',
|
||||
'vanity_url' => 'رابط مخصص',
|
||||
'orphaned_files' => 'الملفات المعزولة',
|
||||
'copied' => 'تم النسخ إلى الحافظة!',
|
||||
'client_config' => 'إعدادات العميل',
|
||||
'deleted_orphans' => 'تم حذف %d من الملفات المعزولة بنجاح.',
|
||||
'maintenance_in_progress' => 'المنصة تحت الصيانة، حاول مرة أخرى لاحقاً…',
|
||||
'default_lang_behavior' => 'سيحاول XBackBone مطابقة لغة المتصفح افتراضيا (الاحتياطي هو الإنجليزية).',
|
||||
'no_upload_token' => 'ليس لديك رمز مميز شخصي للتحميل. (قم بإنشاء واحد وحاول مرة أخرى.)',
|
||||
'donate_text' => 'إذا كنت تحب XBackBone، ففكر في التبرع لدعم التطوير!',
|
||||
'custom_head_html' => 'محتوى رأس HTML مخصص',
|
||||
'custom_head_html_hint' => 'ستتم إضافة هذا المحتوى عند علامة <head> في كل صفحة.',
|
||||
'custom_head_set' => 'تم تطبيق رأس HTML المخصص.',
|
||||
'max_user_quota' => 'الحد الأقصى لحصة المستخدم',
|
||||
'quota_enabled' => 'تفعيل حصة المستخدم',
|
||||
'recalculate_user_quota' => 'إعادة حساب حصة المستخدم من القرص',
|
||||
'mail.activate_text' => 'مرحبًا %s!<br>شكرًا لك على إنشاء حسابك على %s (<a href="%s">%s</a>)، انقر على الرابط التالي لتفعيله:<br><br><a href="%s">%s</a>',
|
||||
'quota_recalculated' => 'تمت إعادة حساب حصة المستخدم من القرص بنجاح.',
|
||||
'only_recaptcha_v3' => 'يتم دعم reCAPTCHA v3 فقط.',
|
||||
'recaptcha_site_key' => 'مفتاح موقع reCAPTCHA',
|
||||
'ldap_cant_connect' => 'لا يمكن الاتصال بخادم مصادقة LDAP.',
|
||||
'upload_max_file_size' => 'الحد الأقصى لحجم الملف حاليًا هو %s.',
|
||||
'zip_ext_not_loaded' => 'لم يتم تحميل الامتداد "zip" المطلوب',
|
||||
'no_tags' => 'لم تتم إضافة أي علامات',
|
||||
'changelog' => 'سجل التغيير',
|
||||
'show_changelog' => 'عرض سجل التغيير',
|
||||
'auto_tagging' => 'تحميل العلامات تلقائيًا',
|
||||
'recaptcha_keys_required' => 'جميع مفاتيح reCAPTCHA مطلوبة.',
|
||||
'user_create_password' => 'إذا تركت فارغة، فقد تحتاج إلى إرسال إعلام إلى عنوان البريد الإلكتروني للمستخدم.',
|
||||
'mail.recover_text' => 'مرحبًا %s،<br>لقد تم طلب إعادة تعيين كلمة المرور لحسابك. لإكمال الإجراء انقر على الرابط التالي:<br><br><a href="%s">%s</a><br><br>إذا لم تكن أنت من طلب إعادة تعيين كلمة المرور، فما عليك سوى تجاهل هذا البريد الإلكتروني.',
|
||||
'mail.new_account_text_with_reset' => 'مرحبًا %s!<br>تم إنشاء حساب جديد لك على %s (<a href="%s">%s</a>)، انقر على الرابط التالي لتعيين كلمة مرور وتنشيطها:<br ><br><a href="%s">%s</a>',
|
||||
'mail.new_account_text_with_pw' => 'مرحبًا %s!<br>تم إنشاء حساب جديد لك على %s (<a href="%s">%s</a>)، باستخدام بيانات الاعتماد التالية:<br><br>اسم المستخدم: %s <br>كلمة المرور: %s<br><br>انقر على الرابط التالي للانتقال إلى صفحة تسجيل الدخول:<br><a href="%s">%s</a>',
|
||||
'php_info' => 'معلومات PHP',
|
||||
'enforce_language' => 'اللغة الافتراضية',
|
||||
];
|
||||
|
|
|
@ -113,8 +113,8 @@ return [
|
|||
'mail.new_account_text_with_reset' => 'Zdravíme, %s!<br>Byl pro vás vytvořen nový účet na %s (<a href="%s">%s</a>). Klikněte na následující odkaz pro nastavení hesla a aktivaci účtu:<br><br><a href="%s">%s</a>',
|
||||
'mail.new_account' => '%s - tvorba nového účtu',
|
||||
'send_notification' => 'Poslat e-mailové oznámení',
|
||||
'recaptcha_secret_key' => 'reCAPTCHA Tajný klíč',
|
||||
'recaptcha_site_key' => 'reCAPTCHA Webový Klíč',
|
||||
'recaptcha_secret_key' => 'reCAPTCHA Secret Key',
|
||||
'recaptcha_site_key' => 'reCAPTCHA Site Key',
|
||||
'only_recaptcha_v3' => 'Je podporována pouze reCAPTCHA v3.',
|
||||
'recaptcha_keys_required' => 'Jsou vyžadovány všechny klíče reCAPTCHA.',
|
||||
'recaptcha_enabled' => 'reCAPTCHA povolena',
|
||||
|
@ -159,5 +159,4 @@ return [
|
|||
'donation' => 'Přispět',
|
||||
'drop_to_upload' => 'Klikněte nebo sem přetáhněte soubory pro nahrání.',
|
||||
'no_upload_token' => 'Nemáte osobní nahrávací token. (Vygenerujte si jej a zkuste to znovu.)',
|
||||
'image_embeds' => 'Vložené obrázky',
|
||||
];
|
||||
|
|
|
@ -54,7 +54,7 @@ return [
|
|||
'reg_date' => 'Registrierungsdatum',
|
||||
'none' => 'keine',
|
||||
'open' => 'Öffnen',
|
||||
'confirm' => 'Bestätigen',
|
||||
'confirm' => 'Bestätigung',
|
||||
'confirm_string' => 'Bist du sicher?',
|
||||
'installed' => 'Installation erfolgreich abgeschlossen!',
|
||||
'bad_login' => 'Falsche Anmeldeinformationen.',
|
||||
|
@ -153,7 +153,6 @@ return [
|
|||
'mail.new_account' => '%s – Erstellung von Konto',
|
||||
'user_create_password' => 'Wenn das leer bleibt, wollen Sie vielleicht eine Benachrichtigung an die Benutzer per E-Mail senden.',
|
||||
'no_tags' => 'Keine Tags hinzugefügt',
|
||||
'show_all_tags' => 'Alle Tags anzeigen',
|
||||
'upload_max_file_size' => 'Die maximale Dateigröße beträgt derzeit %s.',
|
||||
'ldap_cant_connect' => 'Es kann keine Verbindung zum LDAP-Auth-Server hergestellt werden.',
|
||||
'zip_ext_not_loaded' => 'Die zip-Erweiterung ist erforderlich',
|
||||
|
@ -166,5 +165,4 @@ return [
|
|||
'changelog' => 'Änderungsprotokoll',
|
||||
'copied' => 'In Zwischenablage kopiert!',
|
||||
'image_embeds' => 'Bilder einbetten',
|
||||
'vanity_url' => 'Benutzerdefinierte URL',
|
||||
];
|
||||
|
|
4
resources/lang/en.lang.php
Executable file → Normal file
4
resources/lang/en.lang.php
Executable file → Normal file
|
@ -30,8 +30,6 @@ return [
|
|||
'download' => 'Download',
|
||||
'upload' => 'Upload',
|
||||
'delete' => 'Delete',
|
||||
'confirm' => 'Confirm',
|
||||
'vanity_url' => 'Custom URL',
|
||||
'publish' => 'Publish',
|
||||
'hide' => 'Hide',
|
||||
'files' => 'Files',
|
||||
|
@ -60,6 +58,7 @@ return [
|
|||
'reg_date' => 'Registration Date',
|
||||
'none' => 'None',
|
||||
'open' => 'Open',
|
||||
'confirm' => 'Confirmation',
|
||||
'confirm_string' => 'Are you sure?',
|
||||
'installed' => 'Installation completed successfully!',
|
||||
'bad_login' => 'Wrong credentials.',
|
||||
|
@ -156,7 +155,6 @@ return [
|
|||
'ldap_cant_connect' => 'Can\'t connect to the LDAP auth server.',
|
||||
'upload_max_file_size' => 'The max file size is currently %s.',
|
||||
'no_tags' => 'No tags added',
|
||||
'show_all_tags' => 'Show all tags',
|
||||
'auto_tagging' => 'Auto upload tagging',
|
||||
'zip_ext_not_loaded' => 'The required "zip" extension is not loaded',
|
||||
'changelog' => 'Changelog',
|
||||
|
|
|
@ -54,7 +54,7 @@ return [
|
|||
'reg_date' => 'Fecha de Registración',
|
||||
'none' => 'Ninguno',
|
||||
'open' => 'Abrir',
|
||||
'confirm' => 'Confirmar',
|
||||
'confirm' => 'Confirmación',
|
||||
'confirm_string' => '¿Está seguro?',
|
||||
'installed' => '¡Instalación completa!',
|
||||
'bad_login' => 'Credenciales incorrectas.',
|
||||
|
@ -129,8 +129,8 @@ return [
|
|||
'upload_max_file_size' => 'El tamaño máximo del archivo es actualmente %s.',
|
||||
'ldap_cant_connect' => 'No se puede conectar con el servidor de autentificación LDAP.',
|
||||
'user_create_password' => 'Si se deja vacío, es posible que desee enviar una notificación a la dirección de correo electrónico del usuario.',
|
||||
'mail.new_account_text_with_pw' => '¡Hola %s!<br>se ha creado una nueva cuenta para ti en %s (<a href="%s">%s</a>), haz clic en el siguiente enlace para establecer una contraseña y activarla:<br><br><a href="%s">%s</a>',
|
||||
'mail.new_account_text_with_reset' => '¡Hola, %s!<br>Se creó una nueva cuenta para ti en %s (<a href="%s">%s</a>), haz clic en el siguiente enlace para establecer una contraseña y activarla:<br ><br><a href="%s">%s</a>',
|
||||
'mail.new_account_text_with_pw' => 'Hola %s!<br>se ha creado una nueva cuenta para ti en %s (<a href="%s">%s</a>), haz clic en el siguiente enlace para establecer una contraseña y activarla:<br><br><a href="%s">%s</a>',
|
||||
'mail.new_account_text_with_reset' => 'Hola %s!<br>se ha creado una nueva cuenta para ti en %s (<a href="%s">%s</a>), haz clic en el siguiente enlace para establecer una contraseña y activarla:<br><br><a href="%s">%s</a>',
|
||||
'recaptcha_enabled' => 'reCAPTCHA activado',
|
||||
'account_media_deleted' => 'Se han eliminado todos los archivos de la cuenta.',
|
||||
'clear_account' => 'Limpiar cuenta',
|
||||
|
@ -165,6 +165,4 @@ return [
|
|||
'recaptcha_site_key' => 'Clave del sitio reCAPTCHA',
|
||||
'only_recaptcha_v3' => 'Solo reCAPTCHA v3 está soportado.',
|
||||
'custom_head_set' => 'Cabecera HTML personalizada aplicada.',
|
||||
'vanity_url' => 'URL personalizada',
|
||||
'show_all_tags' => 'Mostrar todas las etiquetas',
|
||||
];
|
||||
|
|
|
@ -35,7 +35,7 @@ return [
|
|||
'bad_login' => 'Väärät kirjautumistiedot.',
|
||||
'installed' => 'Asennus suoritettu loppuun onnistuneesti!',
|
||||
'confirm_string' => 'Oletko varma?',
|
||||
'confirm' => 'Vahvista',
|
||||
'confirm' => 'Vahvistus',
|
||||
'open' => 'Auki',
|
||||
'none' => 'Ei mitään',
|
||||
'reg_date' => 'Rekisteröitymis päivä',
|
||||
|
@ -126,39 +126,4 @@ return [
|
|||
'password_repeat' => 'Toista salasana',
|
||||
'password_match' => 'Salasanan ja uudelleenkirjoitetun salasanan täytyy olla sama.',
|
||||
'password_restored' => 'Salana nollattu.',
|
||||
'image_embeds' => 'Kuvien upottaminen',
|
||||
'recalculate_user_quota' => 'Käyttäjäkiintiön laskeminen uudelleen levyltä',
|
||||
'quota_recalculated' => 'Käyttäjäkiintiö lasketaan uudelleen levyltä onnistuneesti.',
|
||||
'recaptcha_secret_key' => 'reCAPTCHA:n salainen avain',
|
||||
'recaptcha_keys_required' => 'Kaikki reCAPTCHA-näppäimet ovat pakollisia.',
|
||||
'mail.new_account' => '%s - Uuden tilin luominen',
|
||||
'no_tags' => 'Tunnisteita ei ole lisätty',
|
||||
'auto_tagging' => 'Automaattisen latauksen taggaus',
|
||||
'zip_ext_not_loaded' => 'Vaadittua "zip" -laajennusta ei ladata',
|
||||
'remember_me' => 'Muista minut',
|
||||
'copy_url_behavior' => 'Kopioi URL-osoite -tila',
|
||||
'register_enabled' => 'Rekisteröinnit käytössä',
|
||||
'no_upload_token' => 'Sinulla ei ole henkilökohtaista lataustunnusta. (Luo sellainen ja yritä uudelleen.)',
|
||||
'custom_head_html_hint' => 'Tämä sisältö lisätään <head> jokaisen sivun tunnisteeseen.',
|
||||
'custom_head_set' => 'Mukautettu HTML-pää käytössä.',
|
||||
'file_size_no_match' => 'Ladattu tiedosto ei vastaa oikeaa tiedostokokoa.',
|
||||
'prerelease_channel' => 'Ennakkojulkaisukanava',
|
||||
'default_user_quota' => 'Käyttäjän oletuskiintiö',
|
||||
'max_user_quota' => 'Käyttäjän enimmäiskiintiö',
|
||||
'mail.activate_account' => '%s - Tilin aktivointi',
|
||||
'recover_email_sent' => 'Jos sellainen on, tietylle tilille lähetettiin palautussähköpostiviesti.',
|
||||
'clear_account' => 'Tyhjennä tili',
|
||||
'user_create_password' => 'Jos sinut jätetään tyhjäksi, sinun kannattaa ehkä lähettää ilmoitus käyttäjän sähköpostiosoitteeseen.',
|
||||
'default_lang_behavior' => 'XBackBone yrittää oletusarvoisesti vastata selaimen kieltä (vara on englanti).',
|
||||
'mail.activate_text' => 'Hei %s! <br>kiitos, että loit tilisi %s(<a href="%s":lle">%s</a>), napsauta seuraavaa linkkiä aktivoidaksesi sen:<br><br><a href="%s">%s</a>',
|
||||
'account_media_deleted' => 'Kaikki tilin mediat on poistettu.',
|
||||
'mail.new_account_text_with_reset' => 'Hei %s! <br>sinulle luotiin uusi tili %s(<a href="%s">%s</a>), napsauta seuraavaa linkkiä asettaaksesi salasanan ja aktivoidaksesi sen:<br><br><a href="%s">%s</a>',
|
||||
'mail.new_account_text_with_pw' => 'Hei %s! <br>sinulle luotiin uusi tili %s(<a href="%s">%s</a>), jolla on seuraavat tunnistetiedot:<br><br>Käyttäjänimi: %s<br>Salasana: %s<br><br>Napsauta seuraavaa linkkiä siirtyäksesi kirjautumissivulle:<br><a href="%s">%s</a>',
|
||||
'ldap_cant_connect' => 'Yhteyden muodostaminen LDAP-todennuspalvelimeen ei onnistu.',
|
||||
'recaptcha_site_key' => 'reCAPTCHA-sivuston avain',
|
||||
'custom_head_html' => 'Mukautettu HTML Head -sisältö',
|
||||
'invalid_quota' => 'Virheelliset arvot oletuskäyttäjäkiintiönä.',
|
||||
'mail.recover_text' => 'Hei %s, <br>tilillesi on pyydetty salasanan palautusta. Suorita toimenpide napsauttamalla seuraavaa linkkiä:<br><br><a href="%s">%s</a><br><br>Jos et ollut sinä, joka pyysit salasanan vaihtamista, ohita tämä sähköposti.',
|
||||
'quota_enabled' => 'Käyttäjäkiintiön ottaminen käyttöön',
|
||||
'vanity_url' => 'Mukautettu URL',
|
||||
];
|
||||
|
|
|
@ -54,7 +54,7 @@ return [
|
|||
'reg_date' => 'Date d\'inscription',
|
||||
'none' => 'Aucun',
|
||||
'open' => 'Ouvrir',
|
||||
'confirm' => 'Confirmer',
|
||||
'confirm' => 'Confirmation',
|
||||
'confirm_string' => 'Êtes-vous sûr·e ?',
|
||||
'installed' => 'L\'installation s\'est déroulée avec succès !',
|
||||
'bad_login' => 'Identifiant ou mot de passe incorrect.',
|
||||
|
@ -162,5 +162,4 @@ return [
|
|||
'zip_ext_not_loaded' => 'L\'extension zip requise n\'est pas chargée',
|
||||
'copied' => 'Copié dans le presse-papier !',
|
||||
'image_embeds' => 'Intégrer des images',
|
||||
'vanity_url' => 'URL personnalisée',
|
||||
];
|
||||
|
|
|
@ -64,7 +64,7 @@ return [
|
|||
'cancel' => 'Annuler',
|
||||
'maintenance_in_progress' => 'Plateforme en maintenance, réessayez plus tard…',
|
||||
'updates' => 'Mises à jour',
|
||||
'upgrade' => 'Mettre à niveau',
|
||||
'upgrade' => 'Mettre à jour',
|
||||
'check_for_updates' => 'Vérifier les mises à jour',
|
||||
'file_size_no_match' => 'Le fichier téléchargé n\'a pas la taille correcte.',
|
||||
'cannot_retrieve_file' => 'Impossible de retrouver le fichier.',
|
||||
|
@ -107,7 +107,7 @@ return [
|
|||
'lang' => 'Français (Canada)',
|
||||
'mail.new_account_text_with_pw' => 'Bonjour %s! <br> un nouveau compte a été créé pour vous sur %s (<a href="%s">% s</a>), avec les informations d\'identification suivantes : <br> <br> Nom d\'utilisateur :%s <br> Mot de passe :%s <br> <br> Cliquez sur le lien suivant pour accéder à la page de connexion : <br> <a href="%s">%s </a>',
|
||||
'maintenance' => 'Maintenance',
|
||||
'confirm' => 'Confirmer',
|
||||
'confirm' => 'Confirmation',
|
||||
'user_create_password' => 'Si laissé vide, vous souhaiterez peut-être envoyer une notification à l\'utilisateur par courriel.',
|
||||
'mail.new_account' => '%s – Création d\'un nouveau compte',
|
||||
'mail.recover_password' => '%s – Récupération de mot de passe',
|
||||
|
@ -160,5 +160,4 @@ return [
|
|||
'enforce_language' => 'Forcer la langue',
|
||||
'copied' => 'Copié dans le presse-papier!',
|
||||
'image_embeds' => 'Intégrer des images',
|
||||
'vanity_url' => 'URL personnalisée',
|
||||
];
|
||||
|
|
|
@ -158,7 +158,5 @@ return [
|
|||
'no' => 'Nem',
|
||||
'yes' => 'Igen',
|
||||
'enforce_language' => 'A nyelv érvényesítése',
|
||||
'lang' => 'Magyar',
|
||||
'image_embeds' => 'Képek beágyazása',
|
||||
'vanity_url' => 'Egyedi URL',
|
||||
'lang' => 'Angol',
|
||||
];
|
||||
|
|
|
@ -159,6 +159,4 @@ return [
|
|||
'password_match' => 'Kata sandi harus sama.',
|
||||
'custom_head_set' => 'Head HTML khusus diterapkan.',
|
||||
'path_not_writable' => 'Destinasi berkas tidak dapat ditulis.',
|
||||
'image_embeds' => 'Sematkan gambar',
|
||||
'vanity_url' => 'URL kostum',
|
||||
];
|
||||
|
|
|
@ -39,10 +39,10 @@ return [
|
|||
'save' => 'Salva',
|
||||
'used' => 'Usato',
|
||||
'system_info' => 'Informazioni di Sistema',
|
||||
'user.create' => 'Crea utente',
|
||||
'user.edit' => 'Modifica utente',
|
||||
'is_active' => 'È attivo',
|
||||
'is_admin' => 'È amministratore',
|
||||
'user.create' => 'Crea Utente',
|
||||
'user.edit' => 'Modifica Utente',
|
||||
'is_active' => 'Attivo',
|
||||
'is_admin' => 'Amministratore',
|
||||
'your_profile' => 'Il tuo profilo',
|
||||
'token' => 'Token',
|
||||
'copy' => 'Copia',
|
||||
|
@ -162,5 +162,4 @@ return [
|
|||
'show_changelog' => 'Mostra registro dei cambiamenti',
|
||||
'copied' => 'Copiato negli appunti!',
|
||||
'image_embeds' => 'Incorpora immagini',
|
||||
'vanity_url' => 'URL personalizzato',
|
||||
];
|
||||
|
|
|
@ -35,7 +35,7 @@ return [
|
|||
'files' => 'ファイル',
|
||||
'orphaned_files' => '所有者のいないファイル',
|
||||
'theme' => 'テーマ',
|
||||
'click_to_load' => 'クリックしてロード…',
|
||||
'click_to_load' => 'クリックしてロード...',
|
||||
'apply' => '適用',
|
||||
'save' => '保存',
|
||||
'system_info' => 'システム情報',
|
||||
|
@ -90,25 +90,4 @@ return [
|
|||
'system_settings' => 'システム設定',
|
||||
'php_info' => 'PHPの情報',
|
||||
'used' => '使用済み',
|
||||
'switch_to' => '転換する:',
|
||||
'table' => 'テーブル形',
|
||||
'name' => 'ファイル名順',
|
||||
'clean_orphaned_uploads' => '所有者のないファイルを削除',
|
||||
'already_latest_version' => 'もうすでに最新のXbackboneを使っています。',
|
||||
'check_for_updates' => '更新を確認',
|
||||
'updates' => '更新内容',
|
||||
'cancel' => 'キャンセル',
|
||||
'default_lang_behavior' => 'Xbackboneで使用者のブラウザの言語を自動的に検索(Defaultは英語).',
|
||||
'donation' => '支援',
|
||||
'donate_text' => '支援も受け入れていますので、Xbackboneが気に入った場合、よろしくお願いいたします!',
|
||||
'custom_head_html' => 'HTML Headのコンテンツをカスタマイズ',
|
||||
'register_enabled' => '登録を活性化',
|
||||
'order_by' => '…順',
|
||||
'custom_head_set' => 'HTML Headのカスタマイズが適用されました。',
|
||||
'copied' => 'コピーしました!',
|
||||
'custom_head_html_hint' => 'この部分に入力した内容は全てのページの<head></head>の中に入ります.',
|
||||
'remember_me' => 'ログイン情報を保存',
|
||||
'please_wait' => '少々お待ちください…',
|
||||
'dont_close' => '作業を完了する前にはこのタブを閉じないでください。',
|
||||
'no_upload_token' => 'アップロードのための個人トークンがありません。(まず新しく生成してもう一度試してください)',
|
||||
];
|
||||
|
|
|
@ -101,7 +101,7 @@ return [
|
|||
'account_disabled' => '당신의 계정은 비활성 상태입니다.',
|
||||
'bad_login' => '잘못된 자격증명입니다.',
|
||||
'installed' => '설치가 완료되었어요!',
|
||||
'confirm' => '확인',
|
||||
'confirm' => '재확인',
|
||||
'confirm_string' => '확실한가요?',
|
||||
'open' => '열기',
|
||||
'none' => '없음',
|
||||
|
@ -160,5 +160,4 @@ return [
|
|||
'yes' => '확인',
|
||||
'enforce_language' => '언어 설정',
|
||||
'lang' => 'Korean',
|
||||
'vanity_url' => '사용자 정의 URL',
|
||||
];
|
||||
|
|
|
@ -54,7 +54,7 @@ return [
|
|||
'reg_date' => 'Registratiedatum',
|
||||
'none' => 'Geen',
|
||||
'open' => 'Open',
|
||||
'confirm' => 'Bevestig',
|
||||
'confirm' => 'Bevestiging',
|
||||
'confirm_string' => 'Weet je het zeker?',
|
||||
'installed' => 'Installatie succesvol voltooid!',
|
||||
'bad_login' => 'Verkeerde verificatiegegevens.',
|
||||
|
@ -101,9 +101,9 @@ return [
|
|||
'lang_name' => 'Taal',
|
||||
'default_lang_behavior' => 'XBackBone probeert standaard de taal van de browser te matchen (fallback is Engels).',
|
||||
'lang_set' => 'Systeemtaal "%s" afgedwongen',
|
||||
'show_changelog' => 'Wijzigingslog weergeven',
|
||||
'changelog' => 'Wijzigingslog',
|
||||
'zip_ext_not_loaded' => 'De vereiste "zip" extensie is niet geladen',
|
||||
'show_changelog' => 'Changelog weergeven',
|
||||
'changelog' => 'Changelog',
|
||||
'zip_ext_not_loaded' => 'De vereiste zip extensie is niet geladen',
|
||||
'auto_tagging' => 'Automatisch tags aanmaken',
|
||||
'no_tags' => 'Geen tags toegevoegd',
|
||||
'upload_max_file_size' => 'De maximale bestandsgrootte is momenteel %s.',
|
||||
|
@ -164,7 +164,4 @@ return [
|
|||
'php_info' => 'PHP Informatie',
|
||||
'upload' => 'Uploaden',
|
||||
'copied' => 'Gekopieerd naar klembord!',
|
||||
'vanity_url' => 'Eigen URL',
|
||||
'image_embeds' => 'Afbeeldingen insluiten',
|
||||
'show_all_tags' => 'Toon alle tags',
|
||||
];
|
||||
|
|
|
@ -38,7 +38,7 @@ return [
|
|||
'admin' => 'Admin',
|
||||
'reg_date' => 'Data rejestracji',
|
||||
'open' => 'Otwórz',
|
||||
'confirm' => 'Potwierdź',
|
||||
'confirm' => 'Potwierdzenie',
|
||||
'confirm_string' => 'Jesteś pewien?',
|
||||
'installed' => 'Instalacja zakończona pomyślnie!',
|
||||
'welcome' => 'Witaj, %s!',
|
||||
|
@ -162,5 +162,4 @@ return [
|
|||
'mail.activate_text' => 'Cześć %s!<br>dziękuję za utworzenie konta na %s (<a href="%s">%s</a>), kliknij w poniższy link, aby je aktywować:<br><br><a href="%s">%s</a>',
|
||||
'image_embeds' => 'Osadź obrazy',
|
||||
'copied' => 'Skopiowano!',
|
||||
'vanity_url' => 'Niestandardowy adres URL',
|
||||
];
|
||||
|
|
|
@ -26,7 +26,7 @@ return [
|
|||
'owner' => 'Dono',
|
||||
'date' => 'Data',
|
||||
'raw' => 'Mostrar raw',
|
||||
'download' => 'Descarregar',
|
||||
'download' => 'Transferir',
|
||||
'delete' => 'Apagar',
|
||||
'publish' => 'Publicar',
|
||||
'hide' => 'Esconder',
|
||||
|
@ -54,7 +54,7 @@ return [
|
|||
'reg_date' => 'Data de registo',
|
||||
'none' => 'Nenhum',
|
||||
'open' => 'Abrir',
|
||||
'confirm' => 'Confirmar',
|
||||
'confirm' => 'Confirmação',
|
||||
'confirm_string' => 'Tem a certeza?',
|
||||
'installed' => 'Instalação completa com sucesso!',
|
||||
'bad_login' => 'Login inválido.',
|
||||
|
@ -161,5 +161,4 @@ return [
|
|||
'register' => 'Registar',
|
||||
'settings_saved' => 'Definições de sistema guardadas!',
|
||||
'image_embeds' => 'Embutir imagens',
|
||||
'vanity_url' => 'URL personalizado',
|
||||
];
|
||||
|
|
|
@ -1,163 +0,0 @@
|
|||
<?php
|
||||
return [
|
||||
'login' => 'Autentificare',
|
||||
'password' => 'Parola',
|
||||
'lang' => 'Română',
|
||||
'enforce_language' => 'Aplică limba',
|
||||
'yes' => 'Da',
|
||||
'username' => 'Utilizator',
|
||||
'send' => 'Trimite',
|
||||
'no_media' => 'Nu s-a gasit media.',
|
||||
'login.username' => 'Utilizator sau E-Mail',
|
||||
'no' => 'Nu',
|
||||
'users' => 'Utilizatori',
|
||||
'system' => 'Sistem',
|
||||
'profile' => 'Profil',
|
||||
'pager.previous' => 'Anterior',
|
||||
'public.telegram' => 'Distribuie pe Telegram',
|
||||
'home' => 'Acasa',
|
||||
'logout' => 'Iesire',
|
||||
'pager.next' => 'Urmatorul',
|
||||
'copy_link' => 'Copiaza link-ul',
|
||||
'public.delete_text' => 'Esti sigur ca doresti sa stergi acest element? Nu il vei putea recupera',
|
||||
'preview' => 'Previzualizeaza',
|
||||
'filename' => 'Numele fisierului',
|
||||
'size' => 'Dimensiune',
|
||||
'public' => 'Public',
|
||||
'delete' => 'Elimina',
|
||||
'publish' => 'Publica',
|
||||
'hide' => 'Ascunde',
|
||||
'files' => 'Fisiere',
|
||||
'orphaned_files' => 'Fisiere Orfane',
|
||||
'theme' => 'Tema',
|
||||
'click_to_load' => 'Apasa pentru a incarca…',
|
||||
'apply' => 'Aplica',
|
||||
'save' => 'Salveaza',
|
||||
'used' => 'Folosit',
|
||||
'php_info' => 'Informatii PHP',
|
||||
'system_settings' => 'Setari de Sistem',
|
||||
'user.create' => 'Creaza Utilizator',
|
||||
'is_active' => 'Este activ',
|
||||
'is_admin' => 'Este administrator',
|
||||
'your_profile' => 'Profilul Tau',
|
||||
'token' => 'Token',
|
||||
'copy' => 'Copiaza',
|
||||
'copied' => 'Copiat in clipboard!',
|
||||
'update' => 'Actualizare',
|
||||
'edit' => 'Editare',
|
||||
'client_config' => 'Configuratie Client',
|
||||
'user_code' => 'Cod Utilizator',
|
||||
'active' => 'Activ',
|
||||
'admin' => 'Admin',
|
||||
'reg_date' => 'Data de Inregistrare',
|
||||
'none' => 'Nimic',
|
||||
'open' => 'Deschis',
|
||||
'confirm' => 'Confirmare',
|
||||
'bad_login' => 'Date gresite.',
|
||||
'account_disabled' => 'Contul tau este dezactivat.',
|
||||
'welcome' => 'Bine ai venit, %s!',
|
||||
'goodbye' => 'La revedere!',
|
||||
'email_required' => 'Adresa de e-mail este necesara.',
|
||||
'email_taken' => 'Adresa de e-mail este deja folosita.',
|
||||
'username_required' => 'Numele de utilizator este necesar.',
|
||||
'username_taken' => 'Numele de utilizator este deja folosit.',
|
||||
'cannot_demote' => 'Nu te poti retrograda.',
|
||||
'cannot_write_file' => 'Nu se poate scrie in calea de destinatie.',
|
||||
'deleted_orphans' => 'S-au sters cu succes %d fisiere orfane.',
|
||||
'switch_to' => 'Comuta la',
|
||||
'gallery' => 'Galerie',
|
||||
'order_by' => 'Comanda dupa…',
|
||||
'time' => 'Timp',
|
||||
'name' => 'Nume',
|
||||
'maintenance' => 'Mentenanta',
|
||||
'clean_orphaned_uploads' => 'Curata Incarcarile Orfane',
|
||||
'path_not_writable' => 'Nu se poate scrie in calea de iesire.',
|
||||
'already_latest_version' => 'Ai deja ultima versiune.',
|
||||
'new_version_available' => 'Versiune noua %s valabila!',
|
||||
'cannot_retrieve_file' => 'Nu se poate recupera fisierul.',
|
||||
'file_size_no_match' => 'Fisierul descarcat nu se potriveste cu dimensiunea corecta a fisierului.',
|
||||
'check_for_updates' => 'Verifica actualizari',
|
||||
'upgrade' => 'Actualizare',
|
||||
'updates' => 'Actualizari',
|
||||
'cancel' => 'Anuleaza',
|
||||
'auto_set' => 'Seteaza automat',
|
||||
'default_lang_behavior' => 'XBackBone va incerca in mod implicit sa foloseasca limba browser-ului (limba de rezerva este Engleza).',
|
||||
'prerelease_channel' => 'Canal Pre-Lansari',
|
||||
'no_upload_token' => 'Nu ai un token personal de incarcare. (Genereaza unul si incearca din nou.)',
|
||||
'drop_to_upload' => 'Apasa sau lasa fisierele aici pentru a le incarca.',
|
||||
'donation' => 'Donatie',
|
||||
'donate_text' => 'Daca-ti place XBackBone, ia in considerare o donatie pentru a sprijini dezvoltarea lui!',
|
||||
'custom_head_html' => 'Continut personalizat HTML Head',
|
||||
'custom_head_html_hint' => 'Acest continut va fi adaugat in tagul <head> pe fiecare pagina.',
|
||||
'custom_head_set' => 'HTML head personalizat aplicat.',
|
||||
'remember_me' => 'Nu ma uita',
|
||||
'please_wait' => 'Te rog sa astepti…',
|
||||
'dont_close' => 'Nu inchide acest tab inainte de finalizare.',
|
||||
'register_enabled' => 'Inregistrari active',
|
||||
'hide_by_default' => 'Ascunde media in mod implicit',
|
||||
'copy_url_behavior' => 'Modul Copiere URL',
|
||||
'settings_saved' => 'Setari de sistem salvate!',
|
||||
'export_data' => 'Exporta data',
|
||||
'password_recovery' => 'Recupereaza parola',
|
||||
'no_account' => 'Nu ai un cont?',
|
||||
'register' => 'Inregistrare',
|
||||
'register_success' => 'Contul a fost creat, un e-mail de confirmare a fost trimis.',
|
||||
'default_user_quota' => 'Quota User Implicit',
|
||||
'max_user_quota' => 'Quota User Maxim',
|
||||
'invalid_quota' => 'Valori invalide ca si user quota in mod implicit.',
|
||||
'mail.recover_password' => '%s - Recuperare Parola',
|
||||
'recover_email_sent' => 'Daca exista, un e-mail pentru recuperare a fost trimis catre contul specificat.',
|
||||
'account_activated' => 'Cont activat, acum te poti autentifica!',
|
||||
'quota_enabled' => 'Activeaza user quota',
|
||||
'password_repeat' => 'Repeta Parola',
|
||||
'password_match' => 'Parola si parola repetata trebuie sa fie identice.',
|
||||
'password_restored' => 'Parola resetata.',
|
||||
'recalculate_user_quota' => 'Recalculeaza user quota de pe disc',
|
||||
'quota_recalculated' => 'User quota recalculata de pe disc cu succes.',
|
||||
'used_space' => 'Spatiu Utilizat',
|
||||
'delete_selected' => 'Sterge cele Selectate',
|
||||
'delete_all' => 'Sterge Tot',
|
||||
'clear_account' => 'Curata Contul',
|
||||
'recaptcha_failed' => 'reCAPTCHA Esuat',
|
||||
'recaptcha_enabled' => 'reCAPTCHA Activat',
|
||||
'recaptcha_keys_required' => 'Toate cheile reCAPTCHA sunt necesare.',
|
||||
'only_recaptcha_v3' => 'Doar reCAPTCHA v3 este suportat.',
|
||||
'recaptcha_site_key' => 'reCAPTCHA Cheie Site',
|
||||
'recaptcha_secret_key' => 'reCAPTCHA Cheie Secreta',
|
||||
'send_notification' => 'Trimite Notificare prin E-mail',
|
||||
'mail.new_account' => '%s - Crearea Unui Cont Nou',
|
||||
'mail.new_account_text_with_reset' => 'Hey %s!<br>un nou cont a fost creat pentru tine pe %s (<a href="%s">%s</a>), apasa pe urmatorul link pentru a-ti seta o parola si a-ti activa contul:<br><br><a href="%s">%s</a>',
|
||||
'user_create_password' => 'Daca este lasat gol, este posibil sa doresti sa trimiti o notificare la adresa de e-mail a utilizatorului.',
|
||||
'ldap_cant_connect' => 'Nu se poate conecta la serverul de autentificare LDAP.',
|
||||
'upload_max_file_size' => 'In acest moment dimensiunea maxima pentru un fisier este %s.',
|
||||
'no_tags' => 'Nu s-au adaugat etichete',
|
||||
'auto_tagging' => 'Incarcare automata a etichetarii',
|
||||
'zip_ext_not_loaded' => 'Extensia "zip" necesara nu este incarcata',
|
||||
'show_changelog' => 'Afiseaza jurnalul cu schimbari',
|
||||
'image_embeds' => 'Incorporeaza imagini',
|
||||
'user_updated' => 'Utilizator "%s" actualizat!',
|
||||
'user_deleted' => 'Utilizator eliminat.',
|
||||
'owner' => 'Proprietar',
|
||||
'date' => 'Data',
|
||||
'upload' => 'Incarca',
|
||||
'user.edit' => 'Editeaza Utilizator',
|
||||
'confirm_string' => 'Esti sigur?',
|
||||
'raw' => 'Afiseaza brut',
|
||||
'download' => 'Descarca',
|
||||
'password_required' => 'Parola este necesara.',
|
||||
'user_created' => 'Utilizator "%s" creat!',
|
||||
'table' => 'Tabel',
|
||||
'dotted_search' => 'Cauta…',
|
||||
'installed' => 'Instalarea s-a completat cu succes!',
|
||||
'profile_updated' => 'Profil actualizat cu succes!',
|
||||
'mail.recover_text' => 'Hey %s,<br>o resetare de parola a fost ceruta pentru contul tau. Pentru a completa procedura, apasa pe urmatorul link:<br><br><a href="%s">%s</a><br><br>Daca nu ai fost tu cel care a cerut resetarea, te rog sa ignori acest e-mail.',
|
||||
'token_not_found' => 'Token-ul specificat nu a fost gasit.',
|
||||
'cannot_delete' => 'Nu te poti elimina pe tine.',
|
||||
'maintenance_in_progress' => 'Platforma este in mentenanta, incearca mai tarziu…',
|
||||
'mail.activate_text' => 'Hey %s!<br>iti multumesc ca ti-ai creat cont pe %s (<a href="%s">%s</a>), apasa pe urmatorul link pentru a-ti activa contul:<br><br><a href="%s">%s</a>',
|
||||
'danger_zone' => 'Zona Periculoasa',
|
||||
'mail.activate_account' => '%s - Activare Cont',
|
||||
'account_media_deleted' => 'Toata media de pe cont a fost eliminata.',
|
||||
'changelog' => 'Schimbari',
|
||||
'mail.new_account_text_with_pw' => 'Hey %s!<br>un nou cont a fost creat pentru tine pe %s (<a href="%s">%s</a>), cu urmatoarele date:<br><br>Nume de utilizator: %s<br>Parola: %s<br><br>Apasa pe urmatorul link pentru a te autentifica:<br><a href="%s">%s</a>',
|
||||
];
|
|
@ -45,16 +45,16 @@ return [
|
|||
'your_profile' => 'Ваш профиль',
|
||||
'token' => 'Ключ',
|
||||
'copy' => 'Копировать',
|
||||
'update' => 'Обновление',
|
||||
'update' => 'Обновить',
|
||||
'edit' => 'Редактировать',
|
||||
'client_config' => 'Конфигурация клиента',
|
||||
'user_code' => 'Код пользователя',
|
||||
'active' => 'Активный',
|
||||
'active' => 'Активен',
|
||||
'admin' => 'Админ',
|
||||
'reg_date' => 'Дата регистрации',
|
||||
'none' => 'Никак',
|
||||
'none' => 'Нет',
|
||||
'open' => 'Открыть',
|
||||
'confirm' => 'Потвердить',
|
||||
'confirm' => 'Подтверждение',
|
||||
'confirm_string' => 'Вы уверены?',
|
||||
'installed' => 'Установка успешно завершена!',
|
||||
'bad_login' => 'Неверные учетные данные.',
|
||||
|
@ -163,7 +163,5 @@ return [
|
|||
'copied' => 'Скопировано!',
|
||||
'system_settings' => 'Системные настройки',
|
||||
'upload' => 'Выгрузить',
|
||||
'php_info' => 'Информация о PHP',
|
||||
'image_embeds' => 'Встроенные изображения',
|
||||
'vanity_url' => 'Пользовательский URL',
|
||||
'php_info' => 'Инфо о PHP',
|
||||
];
|
||||
|
|
|
@ -155,11 +155,9 @@ return [
|
|||
'cannot_write_file' => 'Destinationens sökväg är ej skrivbar.',
|
||||
'cannot_demote' => 'Du kan inte degradera dig själv.',
|
||||
'token_not_found' => 'Den token som angavs hittades inte.',
|
||||
'confirm' => 'Bekräfta',
|
||||
'confirm' => 'Bekräftelse',
|
||||
'copied' => 'Kopierat till urklipp!',
|
||||
'token' => 'Token',
|
||||
'orphaned_files' => 'Föräldralösa Filer',
|
||||
'image_embeds' => 'Inbäddade bilder',
|
||||
'vanity_url' => 'Anpassad URL',
|
||||
'show_all_tags' => 'Visa alla taggar',
|
||||
];
|
||||
|
|
|
@ -1,165 +1,51 @@
|
|||
<?php
|
||||
return [
|
||||
'orphaned_files' => 'Sahipsiz Dosyalar',
|
||||
'orphaned_files' => 'Çöp dosyalar',
|
||||
'files' => 'Dosyalar',
|
||||
'hide' => 'Gizle',
|
||||
'publish' => 'Yayınla',
|
||||
'publish' => 'yayınla',
|
||||
'delete' => 'Sil',
|
||||
'upload' => 'Yükle',
|
||||
'download' => 'İndir',
|
||||
'raw' => 'Kaynak göster',
|
||||
'upload' => 'yükle',
|
||||
'download' => 'indir',
|
||||
'raw' => 'kaynak göster',
|
||||
'date' => 'Tarih',
|
||||
'owner' => 'Sahip',
|
||||
'public' => 'Herkese açık',
|
||||
'size' => 'Boyut',
|
||||
'size' => 'boyut',
|
||||
'filename' => 'Dosya adı',
|
||||
'preview' => 'Ön izleme',
|
||||
'public.delete_text' => 'Bu ögeyi silmek istediğinizden emin misiniz? Geri dönüşü olmayacaktır',
|
||||
'public.telegram' => 'Telegram\'da paylaş',
|
||||
'preview' => 'Önizle',
|
||||
'public.delete_text' => 'Bu öğeyi silmek istediğinizden emin misiniz? geri dönüşü olmayacaktır',
|
||||
'public.telegram' => 'Telegram\'da paylaş !',
|
||||
'copy_link' => 'Bağlantıyı kopyala',
|
||||
'pager.previous' => 'Önceki',
|
||||
'pager.next' => 'Sonraki',
|
||||
'logout' => 'Oturumu kapat',
|
||||
'logout' => 'Çıkış yap',
|
||||
'profile' => 'Profil',
|
||||
'system' => 'Sistem',
|
||||
'users' => 'Kullanıcılar',
|
||||
'home' => 'Ana sayfa',
|
||||
'home' => 'Anasayfa',
|
||||
'username' => 'Kullanıcı adı',
|
||||
'login' => 'Oturum aç',
|
||||
'password' => 'Parola',
|
||||
'login' => 'Giriş',
|
||||
'password' => 'Şifre',
|
||||
'login.username' => 'Kullanıcı adı veya e-posta',
|
||||
'no_media' => 'Medya ortamı bulunamadı.',
|
||||
'send' => 'Gönder',
|
||||
'no' => 'Hayır',
|
||||
'yes' => 'Evet',
|
||||
'enforce_language' => 'Dili uygula',
|
||||
'lang' => 'Türkçe',
|
||||
'enforce_language' => 'Mevcut dile zorla',
|
||||
'lang' => 'ingilizce',
|
||||
'copy' => 'Kopyala',
|
||||
'token' => 'Belirteç',
|
||||
'token' => 'Token',
|
||||
'your_profile' => 'Profiliniz',
|
||||
'is_admin' => 'Yönetici mi',
|
||||
'is_active' => 'Etkin mi',
|
||||
'user.edit' => 'Kullanıcıyı düzenle',
|
||||
'is_active' => 'Aktif mi',
|
||||
'user.edit' => 'Kullanıcı bilgilerini değiştir',
|
||||
'user.create' => 'Kullanıcı oluştur',
|
||||
'system_settings' => 'Sistem Ayarları',
|
||||
'php_info' => 'PHP Bilgileri',
|
||||
'used' => 'Kullanılan',
|
||||
'save' => 'Kaydet',
|
||||
'apply' => 'Uygula',
|
||||
'click_to_load' => 'Yüklemek için tıklayın…',
|
||||
'click_to_load' => 'Yüklemek için tıklayınız…',
|
||||
'theme' => 'Tema',
|
||||
'username_taken' => 'Kullanıcı adı zaten alınmış.',
|
||||
'password_required' => 'Parola gerekli.',
|
||||
'reg_date' => 'Kayıt Tarihi',
|
||||
'active' => 'Etkin',
|
||||
'none' => 'Yok',
|
||||
'open' => 'Açık',
|
||||
'admin' => 'Yönetici',
|
||||
'copied' => 'Panoya kopyalandı!',
|
||||
'update' => 'Güncelle',
|
||||
'edit' => 'Düzenle',
|
||||
'client_config' => 'İstemci Yapılandırması',
|
||||
'user_code' => 'Kullanıcı kodu',
|
||||
'confirm_string' => 'Emin misiniz?',
|
||||
'installed' => 'Kurulum başarıyla tamamlandı!',
|
||||
'bad_login' => 'Yanlış kimlik bilgileri.',
|
||||
'account_disabled' => 'Hesabınız devre dışı bırakıldı.',
|
||||
'welcome' => 'Hoş geldiniz, %s!',
|
||||
'goodbye' => 'Hoşça kal!',
|
||||
'token_not_found' => 'Belirtilen belirteç bulunamadı.',
|
||||
'email_required' => 'E-posta adresi gerekli.',
|
||||
'email_taken' => 'Bu e-posta adresi zaten kullanılıyor.',
|
||||
'username_required' => 'Kullanıcı adı gerekli.',
|
||||
'image_embeds' => 'Gömülü görüntü',
|
||||
'default_lang_behavior' => 'XBackBone varsayılan olarak tarayıcı diliyle eşleşmeye çalışacaktır (yedek dil İngilizce\'dir).',
|
||||
'no_upload_token' => 'Kişisel bir yükleme belirteciniz yok. (Bir tane oluşturun ve tekrar deneyin.)',
|
||||
'copy_url_behavior' => 'URL\'i kopyalama modu',
|
||||
'delete_all' => 'Hepsini Sil',
|
||||
'max_user_quota' => 'Azami Kullanıcı Kotası',
|
||||
'mail.recover_text' => 'Merhaba %s,<br>hesabınız için bir parola sıfırlama istendi. İşlemleri tamamlamak için aşağıdaki bağlantıya tıklayın:<br><br><a href="%s">%s</a><br><br>Parola sıfırlamayı isteyen siz değilseniz bu e-postayı dikkate almayın.',
|
||||
'clear_account' => 'Hesabı Temizle',
|
||||
'mail.new_account_text_with_pw' => 'Merhaba %s!<br>, %s (<a href="%s">%s</a>) tarihinde sizin için aşağıdaki kimlik bilgileriyle yeni bir hesap oluşturuldu:<br><br>Kullanıcı adı: %s<br>Parola: %s<br><br>Oturum açma sayfasına gitmek için aşağıdaki bağlantıya tıklayın:<br><a href="%s">%s</a>',
|
||||
'upload_max_file_size' => 'Azami dosya boyutu şu anda %s.',
|
||||
'recover_email_sent' => 'Varsa, belirtilen hesaba bir kurtarma e-postası gönderildi.',
|
||||
'cannot_demote' => 'Kendinizi rütbenizi indiremezsiniz.',
|
||||
'cannot_write_file' => 'Hedef yol yazılabilir değil.',
|
||||
'deleted_orphans' => '%d sahipsiz dosya başarıyla silindi.',
|
||||
'gallery' => 'Galeri',
|
||||
'table' => 'Tablo',
|
||||
'dotted_search' => 'Ara…',
|
||||
'time' => 'Zaman',
|
||||
'name' => 'Ad',
|
||||
'maintenance' => 'Bakım',
|
||||
'path_not_writable' => 'Çıkış yolu yazılabilir değil.',
|
||||
'already_latest_version' => 'Zaten son sürüme sahipsiniz.',
|
||||
'new_version_available' => 'Yeni %s sürümü var!',
|
||||
'cannot_retrieve_file' => 'Dosya alınamıyor.',
|
||||
'file_size_no_match' => 'İndirilen dosya doğru dosya boyutu ile eşleşmiyor.',
|
||||
'check_for_updates' => 'Güncellemeleri denetle',
|
||||
'upgrade' => 'Güncelle',
|
||||
'updates' => 'Güncellemeler',
|
||||
'maintenance_in_progress' => 'Platform bakımda, daha sonra tekrar deneyin…',
|
||||
'cancel' => 'İptal',
|
||||
'auto_set' => 'Otomatik olarak ayarla',
|
||||
'prerelease_channel' => 'Ön Yayın Kanalı',
|
||||
'drop_to_upload' => 'Yüklemek için dosyalarınızı buraya bırakın veya tıklayın.',
|
||||
'donation' => 'Bağış',
|
||||
'donate_text' => 'XBackBone\'u beğendiyseniz, geliştirmeyi desteklemek için bir bağış yapmayı düşünün!',
|
||||
'custom_head_html_hint' => 'Bu içerik her sayfanın <head> etiketine eklenecek.',
|
||||
'remember_me' => 'Beni hatırla',
|
||||
'please_wait' => 'Lütfen bekleyin…',
|
||||
'dont_close' => 'Tamamlanana kadar bu sekmeyi kapatmayın.',
|
||||
'register_enabled' => 'Kayıtlar etkinleştirildi',
|
||||
'hide_by_default' => 'Varsayılan olarak medyayı gizle',
|
||||
'settings_saved' => 'Sistem ayarları kaydedildi!',
|
||||
'export_data' => 'Veriyi dışarı çıkar',
|
||||
'password_recovery' => 'Parolayı kurtar',
|
||||
'no_account' => 'Hesabınız yok mu?',
|
||||
'register' => 'Kaydol',
|
||||
'register_success' => 'Hesap oluşturuldu, bir onay e-postası gönderildi.',
|
||||
'default_user_quota' => 'Varsayılan Kullanıcı Kotası',
|
||||
'invalid_quota' => 'Varsayılan kullanıcı kotası geçersiz değer.',
|
||||
'mail.activate_account' => '%s - Hesap Etkinleştirme',
|
||||
'mail.recover_password' => '%s - Parola Kurtarma',
|
||||
'account_activated' => 'Hesap etkinleştirildi, artık oturum açabilirsiniz!',
|
||||
'quota_enabled' => 'Kullanıcı kotasını etkinleştir',
|
||||
'password_repeat' => 'Parolayı Tekrarla',
|
||||
'password_match' => 'Parola ve tekrarlanan parola aynı olmalıdır.',
|
||||
'password_restored' => 'Parola sıfırlandı.',
|
||||
'recalculate_user_quota' => 'Diskten kullanıcı kotasını yeniden hesapla',
|
||||
'quota_recalculated' => 'Diskten kullanıcı kotası başarıyla yeniden hesaplandı.',
|
||||
'used_space' => 'Kullanılan Alan',
|
||||
'delete_selected' => 'Seçilenleri Sil',
|
||||
'account_media_deleted' => 'Hesaptaki tüm medya silindi.',
|
||||
'danger_zone' => 'Tehlike Bölgesi',
|
||||
'recaptcha_failed' => 'reCAPTCHA Başarısız oldu',
|
||||
'recaptcha_enabled' => 'reCAPTCHA etkinleştirildi',
|
||||
'recaptcha_keys_required' => 'Bütün reCAPTCHA anahtarları gerekli.',
|
||||
'only_recaptcha_v3' => 'Yalnızca reCAPTCHA v3 desteklenmektedir.',
|
||||
'recaptcha_site_key' => 'reCAPTCHA Site Anahtarı',
|
||||
'recaptcha_secret_key' => 'reCAPTCHA Gizli Anahtarı',
|
||||
'send_notification' => 'E-posta Bildirimi Gönder',
|
||||
'mail.new_account' => '%s - Yeni Hesap Oluşturma',
|
||||
'mail.new_account_text_with_reset' => 'Merhaba %s!<br>, %s (<a href="%s">%s</a>) tarihinde sizin için yeni bir hesap oluşturuldu, bir parola belirlemek ve etkinleştirmek için aşağıdaki bağlantıya tıklayın:<br><br><a href="%s">%s</a>',
|
||||
'user_create_password' => 'Boş bırakılırsa, kullanıcı e-posta adresine bir bildirim göndermek isteyebilirsiniz.',
|
||||
'ldap_cant_connect' => 'LDAP kimlik doğrulama sunucusuna bağlanılamıyor.',
|
||||
'no_tags' => 'Etiket eklenmedi',
|
||||
'auto_tagging' => 'Otomatik yükleme etiketleme',
|
||||
'zip_ext_not_loaded' => 'Gereken "zip" eklentisi yüklenmedi',
|
||||
'changelog' => 'Değişiklik Günlüğü (Yama Notları)',
|
||||
'show_changelog' => 'Değişiklik günlüğünü göster',
|
||||
'confirm' => 'Onayla',
|
||||
'user_created' => '"%s" kullanıcısı oluşturuldu!',
|
||||
'user_updated' => '"%s" kullanıcısı güncellendi!',
|
||||
'profile_updated' => 'Profil başarıyla güncellendi!',
|
||||
'user_deleted' => 'Kullanıcı silindi.',
|
||||
'cannot_delete' => 'Kendi kullanıcınızı silemezsiniz.',
|
||||
'order_by' => 'Sıralama ölçütü…',
|
||||
'clean_orphaned_uploads' => 'Sahipsiz Yüklemeleri Temizle',
|
||||
'custom_head_html' => 'Özel HTML başlık içeriği',
|
||||
'custom_head_set' => 'Özel HTML başlığı uygulandı.',
|
||||
'mail.activate_text' => 'Merhaba %s!<br>%s (<a href="%s">%s</a>) hesabınızı oluşturduğunuz için teşekkür ederiz, etkinleştirmek için aşağıdaki bağlantıya tıklayın:<br><br><a href="%s">%s</a>',
|
||||
'switch_to' => 'Şuna geç',
|
||||
'vanity_url' => 'Özel URL',
|
||||
'show_all_tags' => 'Tüm etiketleri göster',
|
||||
];
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
return [
|
||||
'yes' => 'Có',
|
||||
'reg_date' => 'Ngày đăng ký',
|
||||
'lang' => 'Tiếng Việt',
|
||||
'lang' => 'Tiếng Anh',
|
||||
'enforce_language' => 'Cài đặt ngôn ngữ',
|
||||
'send' => 'Gửi',
|
||||
'login.username' => 'Tên đăng nhập hoặc Email',
|
||||
|
@ -48,7 +48,7 @@ return [
|
|||
'confirm_string' => 'Bạn có chắc chứ?',
|
||||
'installed' => 'Đã hoàn thành cài đặt thành công!',
|
||||
'welcome' => 'Chào mừng vào XBackBone, %s!',
|
||||
'goodbye' => 'Gặp lại lần sau nhé!',
|
||||
'goodbye' => 'Tạm biệt nhé!',
|
||||
'token_not_found' => 'Mã token nhập vào không được tìm thấy.',
|
||||
'email_taken' => 'Địa chỉ email đã được sử dụng.',
|
||||
'username_taken' => 'Tên đăng nhập này đã có người sử dụng rồi.',
|
||||
|
@ -59,8 +59,8 @@ return [
|
|||
'cannot_demote' => 'Bạn không thể tự giáng cấp tài khoản người dùng của mình.',
|
||||
'cannot_write_file' => 'Đường dẫn đích không thể ghi dữ liệu vào được.',
|
||||
'switch_to' => 'Chuyển về',
|
||||
'gallery' => 'Xem theo ô',
|
||||
'table' => 'Xem dạng bảng',
|
||||
'gallery' => 'Chế độ hiển thị theo ô',
|
||||
'table' => 'Bảng',
|
||||
'path_not_writable' => 'Đường dẫn xuất ra không ghi dữ liệu vào được.',
|
||||
'already_latest_version' => 'Bạn đang dùng phiên bản mới nhất.',
|
||||
'cannot_retrieve_file' => 'Không thể trích xuất tập tin.',
|
||||
|
@ -73,7 +73,7 @@ return [
|
|||
'no_upload_token' => 'Bạn chưa có một mã tải lên cá nhân. (Hãy tạo một mã và thử lại nhé.)',
|
||||
'drop_to_upload' => 'Bấm vào hoặc bỏ tập tin của bạn vào đây để tải lên.',
|
||||
'donate_text' => 'Nếu bạn thích XBackBone, xin hãy quyên góp để hỗ trợ việc phát triển phần mềm cho người dùng!',
|
||||
'custom_head_html' => 'Nội dung phần đầu dạng HTML tuỳ chỉnh',
|
||||
'custom_head_html' => 'Nội dụng phần đầu dạng HTML tuỳ chỉnh',
|
||||
'remember_me' => 'Nhớ tên đăng nhập',
|
||||
'please_wait' => 'Xin chờ một chút…',
|
||||
'settings_saved' => 'Cài đặt hệ thống đã được lưu!',
|
||||
|
@ -133,7 +133,7 @@ return [
|
|||
'deleted_orphans' => 'Đã xoá %d tập tin không còn thư mục chính thành công.',
|
||||
'dotted_search' => 'Tìm kiếm…',
|
||||
'time' => 'Thời gian',
|
||||
'order_by' => 'Sắp xếp theo…',
|
||||
'order_by' => 'Sắp xếp bằng cách…',
|
||||
'new_version_available' => 'Đã có phiên bản %s mới!',
|
||||
'custom_head_html_hint' => 'Nội dung này sẽ được thêm vào phần thẻ <head> trên mỗi trang.',
|
||||
'clean_orphaned_uploads' => 'Xoá những phần tải lên với thư mục chính đã bị xoá',
|
||||
|
|
|
@ -5,7 +5,7 @@ return [
|
|||
'yes' => '是',
|
||||
'enforce_language' => '默认语言',
|
||||
'no' => '否',
|
||||
'lang' => '中文(简体)',
|
||||
'lang' => '英语',
|
||||
'copy_link' => '复制链接',
|
||||
'size' => '大小',
|
||||
'download' => '下载',
|
||||
|
@ -152,13 +152,4 @@ return [
|
|||
'no_tags' => '未添加标签',
|
||||
'mail.recover_text' => 'Hi %s,<br>已为您的帐户请求重置密码。要完成该过程,请单击以下链接:<br><br><a href="%s">%s</a><br><br>如果不是您要求重置密码,请忽略此电子邮件。',
|
||||
'used' => '使用中',
|
||||
'recaptcha_site_key' => 'reCAPTCHA 站点密钥',
|
||||
'only_recaptcha_v3' => '只支持reCAPTCHA v3.',
|
||||
'vanity_url' => '自定义网址',
|
||||
'mail.new_account' => '新帐户创建',
|
||||
'recaptcha_failed' => '验证失败',
|
||||
'recaptcha_enabled' => '验证码启用',
|
||||
'recaptcha_secret_key' => 'reCAPTCHA 密钥',
|
||||
'prerelease_channel' => '预发布渠道',
|
||||
'recaptcha_keys_required' => '所有 reCAPTCHA 密钥都是必需的。',
|
||||
];
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
<div class="modal fade" id="modalVanity" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog modal-sm">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">{{ lang('vanity_url') }}</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<input type="text" class="form-control" id="modalVanity-input" maxlength="64">
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-primary media-vanity" id="modalVanity-link"><i class="fas fa-check fa-fw"></i> {{ lang('confirm') }}</button>
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">{{ lang('no') }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
2
resources/templates/dashboard/grid.twig
Executable file → Normal file
2
resources/templates/dashboard/grid.twig
Executable file → Normal file
|
@ -28,7 +28,6 @@
|
|||
{% else %}
|
||||
<a class="btn btn-sm btn-info publish-toggle" data-toggle="tooltip" title="{{ lang('publish') }}" data-id="{{ media.id }}" data-published="{{ media.published }}"><i class="fas fa-check-circle"></i></a>
|
||||
{% endif %}
|
||||
<button class="btn btn-info btn-sm public-vanity" data-id="{{ media.id }}" data-toggle="tooltip" title="{{ lang('vanity_url') }}"><i class="fas fa-star"></i></button>
|
||||
<button type="button" class="btn btn-sm btn-danger media-delete" data-link="{{ route('upload.delete', {'id': media.id}) }}" data-id="{{ media.id }}" data-toggle="tooltip" title="{{ lang('delete') }}">
|
||||
<i class="fas fa-trash"></i>
|
||||
</button>
|
||||
|
@ -69,5 +68,4 @@
|
|||
<div class="text-center text-muted"><i>{{ lang('no_media') }}</i></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% include 'comp/modal_vanity.twig' %}
|
||||
{% endblock %}
|
||||
|
|
4
resources/templates/dashboard/list.twig
Executable file → Normal file
4
resources/templates/dashboard/list.twig
Executable file → Normal file
|
@ -6,7 +6,6 @@
|
|||
{% include 'comp/navbar.twig' %}
|
||||
<div class="container">
|
||||
{% include 'comp/alert.twig' %}
|
||||
{% include 'comp/modal_vanity.twig' %}
|
||||
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body">
|
||||
|
@ -33,7 +32,6 @@
|
|||
{% for media in medias %}
|
||||
<tr id="media_{{ media.id }}" class="bulk-selector" data-id="{{ media.id }}">
|
||||
<td class="text-center">
|
||||
<a href="{{ urlFor('/' ~ media.user_code ~ '/' ~ media.code ~ '.' ~ media.extension) }}" target="_blank" class="text-dark">
|
||||
{% if isDisplayableImage(media.mimetype) %}
|
||||
{% if media.username is not null %}
|
||||
<img src="{{ urlFor('/' ~ media.user_code ~ '/' ~ media.code ~ '.' ~ media.extension ~ '/raw?width=84&height=42') }}" class="img-fluid rounded">
|
||||
|
@ -43,7 +41,6 @@
|
|||
{% else %}
|
||||
<i class="far {{ mime2font(media.mimetype) }} fa-2x"></i>
|
||||
{% endif %}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<span class="text-maxlen">{{ media.filename }}</span>
|
||||
|
@ -80,7 +77,6 @@
|
|||
{% else %}
|
||||
<a href="javascript:void(0)" class="btn btn-sm btn-outline-info publish-toggle" data-toggle="tooltip" title="{{ lang('publish') }}" data-id="{{ media.id }}" data-published="{{ media.published }}"><i class="fas fa-check-circle"></i></a>
|
||||
{% endif %}
|
||||
<a href="javascript:void(0)" class="btn btn-sm btn-outline-info public-vanity" data-id="{{ media.id }}" data-toggle="tooltip" title="{{ lang('vanity_url') }}"><i class="fas fa-star"></i></a>
|
||||
<a href="javascript:void(0)" class="btn btn-sm btn-outline-danger media-delete" data-link="{{ route('upload.delete', {'id': media.id}) }}" data-id="{{ media.id }}" data-toggle="tooltip" title="{{ lang('delete') }}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</td>
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
{% if tags is empty %}
|
||||
<h6 class="dropdown-header">{{ lang('no_tags') }}</h6>
|
||||
{% else %}
|
||||
<a class="dropdown-item" href="{{ route('home') }}">{{ lang('show_all_tags') }}</a>
|
||||
{% for tag in tags %}
|
||||
<a class="dropdown-item {{ request.queryParams['tag'] == tag.id ? 'active' }}" href="{{ queryParams({'tag': tag.id}) }}" data-id="{{ tag.id }}">{{ tag.name }}</a>
|
||||
{% endfor %}
|
||||
|
|
|
@ -1,52 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
create_desktop_entry() {
|
||||
cat << "EOF" > "$HOME/.local/share/kio/servicemenus/xbackbone-uploader.desktop"
|
||||
[Desktop Entry]
|
||||
Type=Service
|
||||
ServiceTypes=KonqPopupMenu/Plugin
|
||||
Icon=imaga
|
||||
X-KDE-StartupNotify=false
|
||||
X-KDE-Priority=TopLevel
|
||||
MimeType=image/*;
|
||||
Actions=xbackbone_upload
|
||||
|
||||
[Desktop Action xbackbone_upload]
|
||||
Name=Upload with XBackBone
|
||||
Exec=sh -c 'RESPONSE="$(curl -s -F "token={{ token }}" -F "upload=@%u" {{ upload_url }})"; if [ "$(echo "${RESPONSE}" | jq -r ".message")" = "OK" ]; then URL="$(echo "${RESPONSE}" | jq -r ".url")"; if [ "${DESKTOP_SESSION}" != "" ]; then echo "${URL}" | xclip -selection c; notify-send "Upload completed!" "${URL}"; else echo "${URL}"; fi; exit 0; else MESSAGE="$(echo "${RESPONSE}" | jq -r ".message")"; if [ $? -ne 0 ]; then echo "Unexpected response:"; echo "${RESPONSE}"; exit 1; fi; if [ "${DESKTOP_SESSION}" != "" ]; then notify-send "Error!" "${MESSAGE}"; else echo "Error! ${MESSAGE}"; fi; exit 1; fi'
|
||||
Icon=image
|
||||
EOF
|
||||
|
||||
echo "Service menu created!";
|
||||
}
|
||||
|
||||
check() {
|
||||
ERRORS=0;
|
||||
|
||||
if [ ! -x "$(command -v jq)" ]; then
|
||||
echo "jq command not found.";
|
||||
ERRORS=1;
|
||||
fi
|
||||
|
||||
if [ ! -x "$(command -v curl)" ]; then
|
||||
echo "curl command not found.";
|
||||
ERRORS=1;
|
||||
fi
|
||||
|
||||
if [ ! -x "$(command -v xclip)" ] && [ "${DESKTOP_SESSION}" != "" ]; then
|
||||
echo "xclip command not found.";
|
||||
ERRORS=1;
|
||||
fi
|
||||
|
||||
if [ ! -x "$(command -v notify-send)" ] && [ "${DESKTOP_SESSION}" != "" ]; then
|
||||
echo "notify-send command not found.";
|
||||
ERRORS=1;
|
||||
fi
|
||||
|
||||
if [ "${ERRORS}" -eq 1 ]; then
|
||||
exit 1;
|
||||
fi
|
||||
}
|
||||
|
||||
check
|
||||
create_desktop_entry
|
4
resources/templates/upload/public.twig
Executable file → Normal file
4
resources/templates/upload/public.twig
Executable file → Normal file
|
@ -17,6 +17,8 @@
|
|||
<meta id="embed-image" property="og:image" content="{{ url }}/raw">
|
||||
<meta id="discord" name="twitter:image" content="{{ url }}/raw">
|
||||
<meta id="image-src" name="twitter:image:src" content="{{ url }}/raw">
|
||||
<meta id="discord" name="twitter:image" content="{{ url }}/raw">
|
||||
<meta id="image-src" name="twitter:image:src" content="{{ url }}/raw">
|
||||
{% elseif type == 'video' %}
|
||||
<meta name="twitter:card" content="player" />
|
||||
<meta name="twitter:title" content="{{ media.filename }} ({{ media.size }})" />
|
||||
|
@ -49,7 +51,6 @@
|
|||
<a href="{{ url }}/raw" class="btn btn-secondary my-2 my-sm-0" data-toggle="tooltip" title="{{ lang('raw') }}"><i class="fas fa-file-alt fa-lg fa-fw"></i></a>
|
||||
<a href="{{ url }}/download" class="btn btn-warning my-2 my-sm-0" data-toggle="tooltip" title="{{ lang('download') }}"><i class="fas fa-cloud-download-alt fa-lg fa-fw"></i></a>
|
||||
{% if session.get('logged') %}
|
||||
<a href="javascript:void(0)" class="btn btn-info my-2 my-sm-0 public-vanity" data-link="{{ route('upload.vanity', {'id': media.mediaId}) }}" data-id="{{ media.mediaId }}" data-toggle="tooltip" title="{{ lang('vanity') }}"><i class="fas fa-star fa-lg fa-fw"></i></a>
|
||||
<a href="javascript:void(0)" class="btn btn-danger my-2 my-sm-0 public-delete" data-link="{{ route('upload.delete', {'id': media.mediaId}) }}" data-toggle="tooltip" title="{{ lang('delete') }}"><i class="fas fa-trash fa-lg fa-fw"></i></a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
@ -163,5 +164,4 @@
|
|||
</div>
|
||||
</div>
|
||||
{% include 'comp/modal_delete.twig' %}
|
||||
{% include 'comp/modal_vanity.twig' %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -66,11 +66,7 @@
|
|||
<div class="btn-group">
|
||||
<a href="{{ route('config.sharex', {'id': user.id}) }}" class="btn btn-lg btn-outline-dark"><i class="fas fa-fw fa-download"></i> ShareX</a>
|
||||
<a href="javascript:alert('{{ lang('copied') }}')" data-clipboard-text="{{ route('config.screencloud', {'token': user.token}) }}" class="btn btn-lg btn-outline-info btn-clipboard"><i class="fas fa-fw fa-download"></i> Screencloud</a>
|
||||
<a href="{{ route('config.script', {'id': user.id}) }}" type="button" class="btn btn-lg btn-outline-danger"><i class="fas fa-fw fa-download"></i> Linux Script</a>
|
||||
<button type="button" class="btn btn-outline-danger dropdown-toggle dropdown-toggle-split" id="userDropdown" data-toggle="dropdown" aria-expanded="false"></button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a class="dropdown-item text-danger" href="{{ route('kde_config.script', {'id': user.id}) }}"><i class="fas fa-fw fa-download"></i> KDE Linux Script</a></li>
|
||||
</ul>
|
||||
<a href="{{ route('config.script', {'id': user.id}) }}" class="btn btn-lg btn-outline-danger"><i class="fas fa-fw fa-download"></i> Linux Script</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
45
src/js/app.js
Executable file → Normal file
45
src/js/app.js
Executable file → Normal file
|
@ -29,10 +29,8 @@ var app = {
|
|||
|
||||
$('.user-delete').click(app.modalDelete);
|
||||
$('.public-delete').click(app.modalDelete);
|
||||
$('.public-vanity').click(app.modalVanity);
|
||||
$('.media-delete').click(app.mediaDelete);
|
||||
$('.publish-toggle').click(app.publishToggle);
|
||||
|
||||
$('.refresh-token').click(app.refreshToken);
|
||||
$('#themes').mousedown(app.loadThemes);
|
||||
$('.checkForUpdatesButton').click(app.checkForUpdates);
|
||||
|
@ -48,10 +46,6 @@ var app = {
|
|||
$('.alert').slideUp(500);
|
||||
});
|
||||
|
||||
if ($('.dropzone').length > 0) {
|
||||
app.initClipboardPasteToUpload();
|
||||
}
|
||||
|
||||
new ClipboardJS('.btn-clipboard');
|
||||
new Plyr($('#player'), {ratio: '16:9'});
|
||||
|
||||
|
@ -63,30 +57,6 @@ var app = {
|
|||
$('#modalDelete-link').attr('href', $(this).data('link'));
|
||||
$('#modalDelete').modal('show');
|
||||
},
|
||||
modalVanity: function () {
|
||||
var id = $(this).data('id');
|
||||
$('#modalVanity').modal('show');
|
||||
$('#modalVanity-link').click(function () {
|
||||
var $callerButton = $(this);
|
||||
$.post(window.AppConfig.base_url + '/upload/' + id + '/vanity', {vanity: $('#modalVanity-input').val()}, function (responseData, status) {
|
||||
$callerButton.tooltip('dispose');
|
||||
$('#modalVanity').modal('hide');
|
||||
$('#modalVanity-input').val('');
|
||||
var parsedData = JSON.parse(responseData);
|
||||
if ($('#media_' + id).find('.btn-group').length > 0) {
|
||||
$('#media_' + id).find('.btn-group').find('a').each(function (item) {
|
||||
var oldUrl = $(this).attr('href');
|
||||
var newUrl = oldUrl.replace(oldUrl.substr(oldUrl.lastIndexOf('/') + 1), parsedData.code.code);
|
||||
$(this).attr('href', newUrl);
|
||||
});
|
||||
} else {
|
||||
var oldUrl = window.location.href;
|
||||
var newUrl = oldUrl.replace(oldUrl.substr(oldUrl.lastIndexOf('/') + 1), parsedData.code.code);
|
||||
window.location.href = newUrl;
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
publishToggle: function () {
|
||||
var id = $(this).data('id');
|
||||
var $callerButton = $(this);
|
||||
|
@ -256,20 +226,7 @@ var app = {
|
|||
$('#dropdown-tag-list > a[data-id="' + $tag.data('id') + '"]').remove();
|
||||
}
|
||||
});
|
||||
},
|
||||
initClipboardPasteToUpload: function() {
|
||||
document.onpaste = function(event){
|
||||
if (event.clipboardData || event.originalEvent.clipboardData) {
|
||||
const items = (event.clipboardData || event.originalEvent.clipboardData).items;
|
||||
items.forEach((item) => {
|
||||
if (item.kind === 'file') {
|
||||
// Add the file to the dropzone instance.
|
||||
Dropzone.forElement('.dropzone').addFile(item.getAsFile());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
app.init();
|
||||
|
|
|
@ -7,6 +7,7 @@ use Tests\TestCase;
|
|||
|
||||
class LoginControllerTest extends TestCase
|
||||
{
|
||||
|
||||
/** @test */
|
||||
public function it_loads_the_login_page()
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue