mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-08 03:09:39 +03:00
Compare commits
10 Commits
v22.10.2
...
ldap_host_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
93433fdb0f | ||
|
|
77d4a28442 | ||
|
|
661d8059ed | ||
|
|
3d8df952b7 | ||
|
|
303dbf9b01 | ||
|
|
392eef8273 | ||
|
|
fc4380cbc7 | ||
|
|
8658459151 | ||
|
|
965258baf5 | ||
|
|
4bacc45fb7 |
@@ -368,4 +368,4 @@ LOG_FAILED_LOGIN_CHANNEL=errorlog_plain_webserver
|
||||
# IP address '146.191.42.4' would result in '146.191.x.x' being logged.
|
||||
# For the IPv6 address '2001:db8:85a3:8d3:1319:8a2e:370:7348' this would result as:
|
||||
# '2001:db8:85a3:8d3:x:x:x:x'
|
||||
IP_ADDRESS_PRECISION=4
|
||||
IP_ADDRESS_PRECISION=4
|
||||
|
||||
11
.github/translators.txt
vendored
11
.github/translators.txt
vendored
@@ -280,14 +280,3 @@ DerLinkman (derlinkman) :: German; German Informal
|
||||
TurnArabic :: Arabic
|
||||
Martin Sebek (sebekmartin) :: Czech
|
||||
Kuchinashi Hoshikawa (kuchinashi) :: Chinese Simplified
|
||||
digilady :: Greek
|
||||
Linus (LinusOP) :: Swedish
|
||||
Felipe Cardoso (felipecardosoruff) :: Portuguese, Brazilian
|
||||
RandomUser0815 :: German
|
||||
Ismael Mesquita (mesquitoliveira) :: Portuguese, Brazilian
|
||||
구인회 (laskdjlaskdj12) :: Korean
|
||||
LiZerui (CNLiZerui) :: Chinese Traditional
|
||||
Fabrice Boyer (FabriceBoyer) :: French
|
||||
mikael (bitcanon) :: Swedish
|
||||
Matthias Mai (schnapsidee) :: German
|
||||
Ufuk Ayyıldız (ufukayyildiz) :: Turkish
|
||||
|
||||
6
.gitignore
vendored
6
.gitignore
vendored
@@ -5,10 +5,10 @@ Homestead.yaml
|
||||
.idea
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
/public/dist/*.map
|
||||
/public/dist
|
||||
/public/plugins
|
||||
/public/css/*.map
|
||||
/public/js/*.map
|
||||
/public/css
|
||||
/public/js
|
||||
/public/bower
|
||||
/public/build/
|
||||
/storage/images
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace BookStack\Auth\Access\Guards;
|
||||
|
||||
use BookStack\Auth\Access\LdapService;
|
||||
use BookStack\Auth\Access\Ldap\LdapService;
|
||||
use BookStack\Auth\Access\RegistrationService;
|
||||
use BookStack\Auth\User;
|
||||
use BookStack\Exceptions\JsonDebugException;
|
||||
|
||||
@@ -1,136 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace BookStack\Auth\Access;
|
||||
|
||||
/**
|
||||
* Class Ldap
|
||||
* An object-orientated thin abstraction wrapper for common PHP LDAP functions.
|
||||
* Allows the standard LDAP functions to be mocked for testing.
|
||||
*/
|
||||
class Ldap
|
||||
{
|
||||
/**
|
||||
* Connect to an LDAP server.
|
||||
*
|
||||
* @return resource
|
||||
*/
|
||||
public function connect(string $hostName, int $port)
|
||||
{
|
||||
return ldap_connect($hostName, $port);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of a LDAP option for the given connection.
|
||||
*
|
||||
* @param resource $ldapConnection
|
||||
* @param mixed $value
|
||||
*/
|
||||
public function setOption($ldapConnection, int $option, $value): bool
|
||||
{
|
||||
return ldap_set_option($ldapConnection, $option, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Start TLS on the given LDAP connection.
|
||||
*/
|
||||
public function startTls($ldapConnection): bool
|
||||
{
|
||||
return ldap_start_tls($ldapConnection);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the version number for the given ldap connection.
|
||||
*
|
||||
* @param resource $ldapConnection
|
||||
*/
|
||||
public function setVersion($ldapConnection, int $version): bool
|
||||
{
|
||||
return $this->setOption($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, $version);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search LDAP tree using the provided filter.
|
||||
*
|
||||
* @param resource $ldapConnection
|
||||
* @param string $baseDn
|
||||
* @param string $filter
|
||||
* @param array|null $attributes
|
||||
*
|
||||
* @return resource
|
||||
*/
|
||||
public function search($ldapConnection, $baseDn, $filter, array $attributes = null)
|
||||
{
|
||||
return ldap_search($ldapConnection, $baseDn, $filter, $attributes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get entries from an ldap search result.
|
||||
*
|
||||
* @param resource $ldapConnection
|
||||
* @param resource $ldapSearchResult
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getEntries($ldapConnection, $ldapSearchResult)
|
||||
{
|
||||
return ldap_get_entries($ldapConnection, $ldapSearchResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search and get entries immediately.
|
||||
*
|
||||
* @param resource $ldapConnection
|
||||
* @param string $baseDn
|
||||
* @param string $filter
|
||||
* @param array|null $attributes
|
||||
*
|
||||
* @return resource
|
||||
*/
|
||||
public function searchAndGetEntries($ldapConnection, $baseDn, $filter, array $attributes = null)
|
||||
{
|
||||
$search = $this->search($ldapConnection, $baseDn, $filter, $attributes);
|
||||
|
||||
return $this->getEntries($ldapConnection, $search);
|
||||
}
|
||||
|
||||
/**
|
||||
* Bind to LDAP directory.
|
||||
*
|
||||
* @param resource $ldapConnection
|
||||
* @param string $bindRdn
|
||||
* @param string $bindPassword
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function bind($ldapConnection, $bindRdn = null, $bindPassword = null)
|
||||
{
|
||||
return ldap_bind($ldapConnection, $bindRdn, $bindPassword);
|
||||
}
|
||||
|
||||
/**
|
||||
* Explode a LDAP dn string into an array of components.
|
||||
*
|
||||
* @param string $dn
|
||||
* @param int $withAttrib
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function explodeDn(string $dn, int $withAttrib)
|
||||
{
|
||||
return ldap_explode_dn($dn, $withAttrib);
|
||||
}
|
||||
|
||||
/**
|
||||
* Escape a string for use in an LDAP filter.
|
||||
*
|
||||
* @param string $value
|
||||
* @param string $ignore
|
||||
* @param int $flags
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function escape(string $value, string $ignore = '', int $flags = 0)
|
||||
{
|
||||
return ldap_escape($value, $ignore, $flags);
|
||||
}
|
||||
}
|
||||
60
app/Auth/Access/Ldap/LdapConfig.php
Normal file
60
app/Auth/Access/Ldap/LdapConfig.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace BookStack\Auth\Access\Ldap;
|
||||
|
||||
class LdapConfig
|
||||
{
|
||||
/**
|
||||
* App provided config array.
|
||||
* @var array
|
||||
*/
|
||||
protected array $config;
|
||||
|
||||
public function __construct(array $config)
|
||||
{
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a value from the config.
|
||||
*/
|
||||
public function get(string $key)
|
||||
{
|
||||
return $this->config[$key] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse the potentially multi-value LDAP server host string and return an array of host/port detail pairs.
|
||||
* Multiple hosts are separated with a semicolon, for example: 'ldap.example.com:8069;ldaps://ldap.example.com'
|
||||
*
|
||||
* @return array<array{host: string, port: int}>
|
||||
*/
|
||||
public function getServers(): array
|
||||
{
|
||||
$serverStringList = explode(';', $this->get('server'));
|
||||
|
||||
return array_map(fn ($serverStr) => $this->parseSingleServerString($serverStr), $serverStringList);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse an LDAP server string and return the host and port for a connection.
|
||||
* Is flexible to formats such as 'ldap.example.com:8069' or 'ldaps://ldap.example.com'.
|
||||
*
|
||||
* @return array{host: string, port: int}
|
||||
*/
|
||||
protected function parseSingleServerString(string $serverString): array
|
||||
{
|
||||
$serverNameParts = explode(':', trim($serverString));
|
||||
|
||||
// If we have a protocol just return the full string since PHP will ignore a separate port.
|
||||
if ($serverNameParts[0] === 'ldaps' || $serverNameParts[0] === 'ldap') {
|
||||
return ['host' => $serverString, 'port' => 389];
|
||||
}
|
||||
|
||||
// Otherwise, extract the port out
|
||||
$hostName = $serverNameParts[0];
|
||||
$ldapPort = (count($serverNameParts) > 1) ? intval($serverNameParts[1]) : 389;
|
||||
|
||||
return ['host' => $hostName, 'port' => $ldapPort];
|
||||
}
|
||||
}
|
||||
135
app/Auth/Access/Ldap/LdapConnection.php
Normal file
135
app/Auth/Access/Ldap/LdapConnection.php
Normal file
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
namespace BookStack\Auth\Access\Ldap;
|
||||
|
||||
use ErrorException;
|
||||
|
||||
/**
|
||||
* An object-orientated wrapper for core ldap functions,
|
||||
* holding an internal connection instance.
|
||||
*/
|
||||
class LdapConnection
|
||||
{
|
||||
/**
|
||||
* The core ldap connection resource.
|
||||
* @var resource
|
||||
*/
|
||||
protected $connection;
|
||||
|
||||
protected string $hostName;
|
||||
protected int $port;
|
||||
|
||||
public function __construct(string $hostName, int $port)
|
||||
{
|
||||
$this->hostName = $hostName;
|
||||
$this->port = $port;
|
||||
$this->connection = $this->connect();
|
||||
}
|
||||
|
||||
/**
|
||||
* Start a connection to an LDAP server.
|
||||
* Does not actually call out to the external server until an action is performed.
|
||||
*
|
||||
* @return resource
|
||||
*/
|
||||
protected function connect()
|
||||
{
|
||||
return ldap_connect($this->hostName, $this->port);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of a LDAP option for the current connection.
|
||||
*
|
||||
* @param mixed $value
|
||||
*/
|
||||
public function setOption(int $option, $value): bool
|
||||
{
|
||||
return ldap_set_option($this->connection, $option, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Start TLS for this LDAP connection.
|
||||
*/
|
||||
public function startTls(): bool
|
||||
{
|
||||
return ldap_start_tls($this->connection);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the version number for this ldap connection.
|
||||
*/
|
||||
public function setVersion(int $version): bool
|
||||
{
|
||||
return $this->setOption(LDAP_OPT_PROTOCOL_VERSION, $version);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search LDAP tree using the provided filter.
|
||||
*
|
||||
* @return resource
|
||||
*/
|
||||
public function search(string $baseDn, string $filter, array $attributes = null)
|
||||
{
|
||||
return ldap_search($this->connection, $baseDn, $filter, $attributes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get entries from an ldap search result.
|
||||
*
|
||||
* @param resource $ldapSearchResult
|
||||
* @return array|false
|
||||
*/
|
||||
public function getEntries($ldapSearchResult)
|
||||
{
|
||||
return ldap_get_entries($this->connection, $ldapSearchResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search and get entries immediately.
|
||||
*
|
||||
* @return array|false
|
||||
*/
|
||||
public function searchAndGetEntries(string $baseDn, string $filter, array $attributes = null)
|
||||
{
|
||||
$search = $this->search($baseDn, $filter, $attributes);
|
||||
|
||||
return $this->getEntries($search);
|
||||
}
|
||||
|
||||
/**
|
||||
* Bind to LDAP directory.
|
||||
*
|
||||
* @throws ErrorException
|
||||
*/
|
||||
public function bind(string $bindRdn = null, string $bindPassword = null): bool
|
||||
{
|
||||
return ldap_bind($this->connection, $bindRdn, $bindPassword);
|
||||
}
|
||||
|
||||
/**
|
||||
* Explode a LDAP dn string into an array of components.
|
||||
*
|
||||
* @return array|false
|
||||
*/
|
||||
public static function explodeDn(string $dn, int $withAttrib)
|
||||
{
|
||||
return ldap_explode_dn($dn, $withAttrib);
|
||||
}
|
||||
|
||||
/**
|
||||
* Escape a string for use in an LDAP filter.
|
||||
*/
|
||||
public static function escape(string $value, string $ignore = '', int $flags = 0): string
|
||||
{
|
||||
return ldap_escape($value, $ignore, $flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a non-connection-specific LDAP option.
|
||||
* @param mixed $value
|
||||
*/
|
||||
public static function setGlobalOption(int $option, $value): bool
|
||||
{
|
||||
return ldap_set_option(null, $option, $value);
|
||||
}
|
||||
}
|
||||
121
app/Auth/Access/Ldap/LdapConnectionManager.php
Normal file
121
app/Auth/Access/Ldap/LdapConnectionManager.php
Normal file
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
namespace BookStack\Auth\Access\Ldap;
|
||||
|
||||
use BookStack\Exceptions\LdapException;
|
||||
use BookStack\Exceptions\LdapFailedBindException;
|
||||
use ErrorException;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class LdapConnectionManager
|
||||
{
|
||||
protected array $connectionCache = [];
|
||||
|
||||
/**
|
||||
* Attempt to start and bind to a new LDAP connection as the configured LDAP system user.
|
||||
*/
|
||||
public function startSystemBind(LdapConfig $config): LdapConnection
|
||||
{
|
||||
// Incoming options are string|false
|
||||
$dn = $config->get('dn');
|
||||
$pass = $config->get('pass');
|
||||
|
||||
$isAnonymous = ($dn === false || $pass === false);
|
||||
|
||||
try {
|
||||
return $this->startBind($dn ?: null, $pass ?: null, $config);
|
||||
} catch (LdapFailedBindException $exception) {
|
||||
$msg = ($isAnonymous ? trans('errors.ldap_fail_anonymous') : trans('errors.ldap_fail_authed'));
|
||||
throw new LdapFailedBindException($msg);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to start and bind to a new LDAP connection.
|
||||
* Will attempt against multiple defined fail-over hosts if set in the provided config.
|
||||
*
|
||||
* Throws a LdapFailedBindException error if the bind connected but failed.
|
||||
* Otherwise, generic LdapException errors would be thrown.
|
||||
*
|
||||
* @throws LdapException
|
||||
*/
|
||||
public function startBind(?string $dn, ?string $password, LdapConfig $config): LdapConnection
|
||||
{
|
||||
// Check LDAP extension in installed
|
||||
if (!function_exists('ldap_connect') && config('app.env') !== 'testing') {
|
||||
throw new LdapException(trans('errors.ldap_extension_not_installed'));
|
||||
}
|
||||
|
||||
// Disable certificate verification.
|
||||
// This option works globally and must be set before a connection is created.
|
||||
if ($config->get('tls_insecure')) {
|
||||
LdapConnection::setGlobalOption(LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_NEVER);
|
||||
}
|
||||
|
||||
$serverDetails = $config->getServers();
|
||||
$lastException = null;
|
||||
|
||||
foreach ($serverDetails as $server) {
|
||||
try {
|
||||
$connection = $this->startServerConnection($server['host'], $server['port'], $config);
|
||||
} catch (LdapException $exception) {
|
||||
$lastException = $exception;
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
$bound = $connection->bind($dn, $password);
|
||||
if (!$bound) {
|
||||
throw new LdapFailedBindException('Failed to perform LDAP bind');
|
||||
}
|
||||
} catch (ErrorException $exception) {
|
||||
Log::error('LDAP bind error: ' . $exception->getMessage());
|
||||
$lastException = new LdapException('Encountered error during LDAP bind');
|
||||
continue;
|
||||
}
|
||||
|
||||
$this->connectionCache[$server['host'] . ':' . $server['port']] = $connection;
|
||||
return $connection;
|
||||
}
|
||||
|
||||
throw $lastException;
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to start a server connection from the provided details.
|
||||
* @throws LdapException
|
||||
*/
|
||||
protected function startServerConnection(string $host, int $port, LdapConfig $config): LdapConnection
|
||||
{
|
||||
if (isset($this->connectionCache[$host . ':' . $port])) {
|
||||
return $this->connectionCache[$host . ':' . $port];
|
||||
}
|
||||
|
||||
/** @var LdapConnection $ldapConnection */
|
||||
$ldapConnection = app()->make(LdapConnection::class, [$host, $port]);
|
||||
|
||||
if (!$ldapConnection) {
|
||||
throw new LdapException(trans('errors.ldap_cannot_connect'));
|
||||
}
|
||||
|
||||
// Set any required options
|
||||
if ($config->get('version')) {
|
||||
$ldapConnection->setVersion($config->get('version'));
|
||||
}
|
||||
|
||||
// Start and verify TLS if it's enabled
|
||||
if ($config->get('start_tls')) {
|
||||
try {
|
||||
$tlsStarted = $ldapConnection->startTls();
|
||||
} catch (ErrorException $exception) {
|
||||
$tlsStarted = false;
|
||||
}
|
||||
|
||||
if (!$tlsStarted) {
|
||||
throw new LdapException('Could not start TLS connection');
|
||||
}
|
||||
}
|
||||
|
||||
return $ldapConnection;
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace BookStack\Auth\Access;
|
||||
namespace BookStack\Auth\Access\Ldap;
|
||||
|
||||
use BookStack\Auth\Access\GroupSyncService;
|
||||
use BookStack\Auth\User;
|
||||
use BookStack\Exceptions\JsonDebugException;
|
||||
use BookStack\Exceptions\LdapException;
|
||||
use BookStack\Exceptions\LdapFailedBindException;
|
||||
use BookStack\Uploads\UserAvatars;
|
||||
use ErrorException;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
/**
|
||||
@@ -15,36 +16,18 @@ use Illuminate\Support\Facades\Log;
|
||||
*/
|
||||
class LdapService
|
||||
{
|
||||
protected Ldap $ldap;
|
||||
protected LdapConnectionManager $ldap;
|
||||
protected GroupSyncService $groupSyncService;
|
||||
protected UserAvatars $userAvatars;
|
||||
|
||||
/**
|
||||
* @var resource
|
||||
*/
|
||||
protected $ldapConnection;
|
||||
protected LdapConfig $config;
|
||||
|
||||
protected array $config;
|
||||
protected bool $enabled;
|
||||
|
||||
/**
|
||||
* LdapService constructor.
|
||||
*/
|
||||
public function __construct(Ldap $ldap, UserAvatars $userAvatars, GroupSyncService $groupSyncService)
|
||||
public function __construct(LdapConnectionManager $ldap, UserAvatars $userAvatars, GroupSyncService $groupSyncService)
|
||||
{
|
||||
$this->ldap = $ldap;
|
||||
$this->userAvatars = $userAvatars;
|
||||
$this->groupSyncService = $groupSyncService;
|
||||
$this->config = config('services.ldap');
|
||||
$this->enabled = config('auth.method') === 'ldap';
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if groups should be synced.
|
||||
*/
|
||||
public function shouldSyncGroups(): bool
|
||||
{
|
||||
return $this->enabled && $this->config['user_to_groups'] !== false;
|
||||
$this->config = new LdapConfig(config('services.ldap'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -52,10 +35,9 @@ class LdapService
|
||||
*
|
||||
* @throws LdapException
|
||||
*/
|
||||
private function getUserWithAttributes(string $userName, array $attributes): ?array
|
||||
protected function getUserWithAttributes(string $userName, array $attributes): ?array
|
||||
{
|
||||
$ldapConnection = $this->getConnection();
|
||||
$this->bindSystemUser($ldapConnection);
|
||||
$connection = $this->ldap->startSystemBind($this->config);
|
||||
|
||||
// Clean attributes
|
||||
foreach ($attributes as $index => $attribute) {
|
||||
@@ -65,12 +47,12 @@ class LdapService
|
||||
}
|
||||
|
||||
// Find user
|
||||
$userFilter = $this->buildFilter($this->config['user_filter'], ['user' => $userName]);
|
||||
$baseDn = $this->config['base_dn'];
|
||||
$userFilter = $this->buildFilter($this->config->get('user_filter'), ['user' => $userName]);
|
||||
$baseDn = $this->config->get('base_dn');
|
||||
|
||||
$followReferrals = $this->config['follow_referrals'] ? 1 : 0;
|
||||
$this->ldap->setOption($ldapConnection, LDAP_OPT_REFERRALS, $followReferrals);
|
||||
$users = $this->ldap->searchAndGetEntries($ldapConnection, $baseDn, $userFilter, $attributes);
|
||||
$followReferrals = $this->config->get('follow_referrals') ? 1 : 0;
|
||||
$connection->setOption(LDAP_OPT_REFERRALS, $followReferrals);
|
||||
$users = $connection->searchAndGetEntries($baseDn, $userFilter, $attributes);
|
||||
if ($users['count'] === 0) {
|
||||
return null;
|
||||
}
|
||||
@@ -86,10 +68,10 @@ class LdapService
|
||||
*/
|
||||
public function getUserDetails(string $userName): ?array
|
||||
{
|
||||
$idAttr = $this->config['id_attribute'];
|
||||
$emailAttr = $this->config['email_attribute'];
|
||||
$displayNameAttr = $this->config['display_name_attribute'];
|
||||
$thumbnailAttr = $this->config['thumbnail_attribute'];
|
||||
$idAttr = $this->config->get('id_attribute');
|
||||
$emailAttr = $this->config->get('email_attribute');
|
||||
$displayNameAttr = $this->config->get('display_name_attribute');
|
||||
$thumbnailAttr = $this->config->get('thumbnail_attribute');
|
||||
|
||||
$user = $this->getUserWithAttributes($userName, array_filter([
|
||||
'cn', 'dn', $idAttr, $emailAttr, $displayNameAttr, $thumbnailAttr,
|
||||
@@ -108,7 +90,7 @@ class LdapService
|
||||
'avatar' => $thumbnailAttr ? $this->getUserResponseProperty($user, $thumbnailAttr, null) : null,
|
||||
];
|
||||
|
||||
if ($this->config['dump_user_details']) {
|
||||
if ($this->config->get('dump_user_details')) {
|
||||
throw new JsonDebugException([
|
||||
'details_from_ldap' => $user,
|
||||
'details_bookstack_parsed' => $formatted,
|
||||
@@ -155,110 +137,15 @@ class LdapService
|
||||
return false;
|
||||
}
|
||||
|
||||
$ldapConnection = $this->getConnection();
|
||||
|
||||
try {
|
||||
$ldapBind = $this->ldap->bind($ldapConnection, $ldapUserDetails['dn'], $password);
|
||||
} catch (ErrorException $e) {
|
||||
$ldapBind = false;
|
||||
$this->ldap->startBind($ldapUserDetails['dn'], $password, $this->config);
|
||||
} catch (LdapFailedBindException $e) {
|
||||
return false;
|
||||
} catch (LdapException $e) {
|
||||
throw $e;
|
||||
}
|
||||
|
||||
return $ldapBind;
|
||||
}
|
||||
|
||||
/**
|
||||
* Bind the system user to the LDAP connection using the given credentials
|
||||
* otherwise anonymous access is attempted.
|
||||
*
|
||||
* @param resource $connection
|
||||
*
|
||||
* @throws LdapException
|
||||
*/
|
||||
protected function bindSystemUser($connection)
|
||||
{
|
||||
$ldapDn = $this->config['dn'];
|
||||
$ldapPass = $this->config['pass'];
|
||||
|
||||
$isAnonymous = ($ldapDn === false || $ldapPass === false);
|
||||
if ($isAnonymous) {
|
||||
$ldapBind = $this->ldap->bind($connection);
|
||||
} else {
|
||||
$ldapBind = $this->ldap->bind($connection, $ldapDn, $ldapPass);
|
||||
}
|
||||
|
||||
if (!$ldapBind) {
|
||||
throw new LdapException(($isAnonymous ? trans('errors.ldap_fail_anonymous') : trans('errors.ldap_fail_authed')));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the connection to the LDAP server.
|
||||
* Creates a new connection if one does not exist.
|
||||
*
|
||||
* @throws LdapException
|
||||
*
|
||||
* @return resource
|
||||
*/
|
||||
protected function getConnection()
|
||||
{
|
||||
if ($this->ldapConnection !== null) {
|
||||
return $this->ldapConnection;
|
||||
}
|
||||
|
||||
// Check LDAP extension in installed
|
||||
if (!function_exists('ldap_connect') && config('app.env') !== 'testing') {
|
||||
throw new LdapException(trans('errors.ldap_extension_not_installed'));
|
||||
}
|
||||
|
||||
// Disable certificate verification.
|
||||
// This option works globally and must be set before a connection is created.
|
||||
if ($this->config['tls_insecure']) {
|
||||
$this->ldap->setOption(null, LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_NEVER);
|
||||
}
|
||||
|
||||
$serverDetails = $this->parseServerString($this->config['server']);
|
||||
$ldapConnection = $this->ldap->connect($serverDetails['host'], $serverDetails['port']);
|
||||
|
||||
if ($ldapConnection === false) {
|
||||
throw new LdapException(trans('errors.ldap_cannot_connect'));
|
||||
}
|
||||
|
||||
// Set any required options
|
||||
if ($this->config['version']) {
|
||||
$this->ldap->setVersion($ldapConnection, $this->config['version']);
|
||||
}
|
||||
|
||||
// Start and verify TLS if it's enabled
|
||||
if ($this->config['start_tls']) {
|
||||
$started = $this->ldap->startTls($ldapConnection);
|
||||
if (!$started) {
|
||||
throw new LdapException('Could not start TLS connection');
|
||||
}
|
||||
}
|
||||
|
||||
$this->ldapConnection = $ldapConnection;
|
||||
|
||||
return $this->ldapConnection;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a LDAP server string and return the host and port for a connection.
|
||||
* Is flexible to formats such as 'ldap.example.com:8069' or 'ldaps://ldap.example.com'.
|
||||
*/
|
||||
protected function parseServerString(string $serverString): array
|
||||
{
|
||||
$serverNameParts = explode(':', $serverString);
|
||||
|
||||
// If we have a protocol just return the full string since PHP will ignore a separate port.
|
||||
if ($serverNameParts[0] === 'ldaps' || $serverNameParts[0] === 'ldap') {
|
||||
return ['host' => $serverString, 'port' => 389];
|
||||
}
|
||||
|
||||
// Otherwise, extract the port out
|
||||
$hostName = $serverNameParts[0];
|
||||
$ldapPort = (count($serverNameParts) > 1) ? intval($serverNameParts[1]) : 389;
|
||||
|
||||
return ['host' => $hostName, 'port' => $ldapPort];
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -269,7 +156,7 @@ class LdapService
|
||||
$newAttrs = [];
|
||||
foreach ($attrs as $key => $attrText) {
|
||||
$newKey = '${' . $key . '}';
|
||||
$newAttrs[$newKey] = $this->ldap->escape($attrText);
|
||||
$newAttrs[$newKey] = LdapConnection::escape($attrText);
|
||||
}
|
||||
|
||||
return strtr($filterString, $newAttrs);
|
||||
@@ -283,7 +170,7 @@ class LdapService
|
||||
*/
|
||||
public function getUserGroups(string $userName): array
|
||||
{
|
||||
$groupsAttr = $this->config['group_attribute'];
|
||||
$groupsAttr = $this->config->get('group_attribute');
|
||||
$user = $this->getUserWithAttributes($userName, [$groupsAttr]);
|
||||
|
||||
if ($user === null) {
|
||||
@@ -293,7 +180,7 @@ class LdapService
|
||||
$userGroups = $this->groupFilter($user);
|
||||
$allGroups = $this->getGroupsRecursive($userGroups, []);
|
||||
|
||||
if ($this->config['dump_user_groups']) {
|
||||
if ($this->config->get('dump_user_groups')) {
|
||||
throw new JsonDebugException([
|
||||
'details_from_ldap' => $user,
|
||||
'parsed_direct_user_groups' => $userGroups,
|
||||
@@ -338,17 +225,16 @@ class LdapService
|
||||
*/
|
||||
private function getGroupGroups(string $groupName): array
|
||||
{
|
||||
$ldapConnection = $this->getConnection();
|
||||
$this->bindSystemUser($ldapConnection);
|
||||
$connection = $this->ldap->startSystemBind($this->config);
|
||||
|
||||
$followReferrals = $this->config['follow_referrals'] ? 1 : 0;
|
||||
$this->ldap->setOption($ldapConnection, LDAP_OPT_REFERRALS, $followReferrals);
|
||||
$followReferrals = $this->config->get('follow_referrals') ? 1 : 0;
|
||||
$connection->setOption(LDAP_OPT_REFERRALS, $followReferrals);
|
||||
|
||||
$baseDn = $this->config['base_dn'];
|
||||
$groupsAttr = strtolower($this->config['group_attribute']);
|
||||
$baseDn = $this->config->get('base_dn');
|
||||
$groupsAttr = strtolower($this->config->get('group_attribute'));
|
||||
|
||||
$groupFilter = 'CN=' . $this->ldap->escape($groupName);
|
||||
$groups = $this->ldap->searchAndGetEntries($ldapConnection, $baseDn, $groupFilter, [$groupsAttr]);
|
||||
$groupFilter = 'CN=' . LdapConnection::escape($groupName);
|
||||
$groups = $connection->searchAndGetEntries($baseDn, $groupFilter, [$groupsAttr]);
|
||||
if ($groups['count'] === 0) {
|
||||
return [];
|
||||
}
|
||||
@@ -362,7 +248,7 @@ class LdapService
|
||||
*/
|
||||
protected function groupFilter(array $userGroupSearchResponse): array
|
||||
{
|
||||
$groupsAttr = strtolower($this->config['group_attribute']);
|
||||
$groupsAttr = strtolower($this->config->get('group_attribute'));
|
||||
$ldapGroups = [];
|
||||
$count = 0;
|
||||
|
||||
@@ -371,7 +257,7 @@ class LdapService
|
||||
}
|
||||
|
||||
for ($i = 0; $i < $count; $i++) {
|
||||
$dnComponents = $this->ldap->explodeDn($userGroupSearchResponse[$groupsAttr][$i], 1);
|
||||
$dnComponents = LdapConnection::explodeDn($userGroupSearchResponse[$groupsAttr][$i], 1);
|
||||
if (!in_array($dnComponents[0], $ldapGroups)) {
|
||||
$ldapGroups[] = $dnComponents[0];
|
||||
}
|
||||
@@ -389,7 +275,15 @@ class LdapService
|
||||
public function syncGroups(User $user, string $username)
|
||||
{
|
||||
$userLdapGroups = $this->getUserGroups($username);
|
||||
$this->groupSyncService->syncUserWithFoundGroups($user, $userLdapGroups, $this->config['remove_from_groups']);
|
||||
$this->groupSyncService->syncUserWithFoundGroups($user, $userLdapGroups, $this->config->get('remove_from_groups'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if groups should be synced.
|
||||
*/
|
||||
public function shouldSyncGroups(): bool
|
||||
{
|
||||
return $this->config->get('user_to_groups') !== false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -398,7 +292,7 @@ class LdapService
|
||||
*/
|
||||
public function saveAndAttachAvatar(User $user, array $ldapUserDetails): void
|
||||
{
|
||||
if (is_null(config('services.ldap.thumbnail_attribute')) || is_null($ldapUserDetails['avatar'])) {
|
||||
if (is_null($this->config->get('thumbnail_attribute')) || is_null($ldapUserDetails['avatar'])) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -140,7 +140,6 @@ class JointPermissionBuilder
|
||||
return Book::query()->withTrashed()
|
||||
->select(['id', 'owned_by'])->with([
|
||||
'chapters' => function ($query) {
|
||||
$query->withTrashed()->select(['id', 'owned_by', 'book_id']);
|
||||
},
|
||||
'pages' => function ($query) {
|
||||
$query->withTrashed()->select(['id', 'owned_by', 'book_id', 'chapter_id']);
|
||||
|
||||
@@ -75,7 +75,7 @@ return [
|
||||
'locale' => env('APP_LANG', 'en'),
|
||||
|
||||
// Locales available
|
||||
'locales' => ['en', 'ar', 'bg', 'bs', 'ca', 'cs', 'cy', 'da', 'de', 'de_informal', 'el', 'es', 'es_AR', 'et', 'eu', 'fa', 'fr', 'he', 'hr', 'hu', 'id', 'it', 'ja', 'ko', 'lt', 'lv', 'nl', 'nb', 'pt', 'pt_BR', 'sk', 'sl', 'sv', 'pl', 'ro', 'ru', 'tr', 'uk', 'uz', 'vi', 'zh_CN', 'zh_TW'],
|
||||
'locales' => ['en', 'ar', 'bg', 'bs', 'ca', 'cs', 'cy', 'da', 'de', 'de_informal', 'es', 'es_AR', 'et', 'eu', 'fa', 'fr', 'he', 'hr', 'hu', 'id', 'it', 'ja', 'ko', 'lt', 'lv', 'nl', 'nb', 'pt', 'pt_BR', 'sk', 'sl', 'sv', 'pl', 'ro', 'ru', 'tr', 'uk', 'uz', 'vi', 'zh_CN', 'zh_TW'],
|
||||
|
||||
// Application Fallback Locale
|
||||
'fallback_locale' => 'en',
|
||||
|
||||
7
app/Exceptions/LdapFailedBindException.php
Normal file
7
app/Exceptions/LdapFailedBindException.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace BookStack\Exceptions;
|
||||
|
||||
class LdapFailedBindException extends LdapException
|
||||
{
|
||||
}
|
||||
@@ -6,7 +6,7 @@ use BookStack\Api\ApiTokenGuard;
|
||||
use BookStack\Auth\Access\ExternalBaseUserProvider;
|
||||
use BookStack\Auth\Access\Guards\AsyncExternalBaseSessionGuard;
|
||||
use BookStack\Auth\Access\Guards\LdapSessionGuard;
|
||||
use BookStack\Auth\Access\LdapService;
|
||||
use BookStack\Auth\Access\Ldap\LdapService;
|
||||
use BookStack\Auth\Access\LoginService;
|
||||
use BookStack\Auth\Access\RegistrationService;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
@@ -28,7 +28,6 @@ class LanguageManager
|
||||
'de' => ['iso' => 'de_DE', 'windows' => 'German'],
|
||||
'de_informal' => ['iso' => 'de_DE', 'windows' => 'German'],
|
||||
'en' => ['iso' => 'en_GB', 'windows' => 'English'],
|
||||
'el' => ['iso' => 'el_GR', 'windows' => 'Greek'],
|
||||
'es' => ['iso' => 'es_ES', 'windows' => 'Spanish'],
|
||||
'es_AR' => ['iso' => 'es_AR', 'windows' => 'Spanish'],
|
||||
'et' => ['iso' => 'et_EE', 'windows' => 'Estonian'],
|
||||
|
||||
62
public/dist/app.js
vendored
62
public/dist/app.js
vendored
File diff suppressed because one or more lines are too long
32
public/dist/code.js
vendored
32
public/dist/code.js
vendored
File diff suppressed because one or more lines are too long
1
public/dist/export-styles.css
vendored
1
public/dist/export-styles.css
vendored
File diff suppressed because one or more lines are too long
1
public/dist/print-styles.css
vendored
1
public/dist/print-styles.css
vendored
@@ -1 +0,0 @@
|
||||
:root{--color-primary: #206ea7;--color-primary-light: rgba(32,110,167,0.15);--color-page: #206ea7;--color-page-draft: #7e50b1;--color-chapter: #af4d0d;--color-book: #077b70;--color-bookshelf: #a94747;--bg-disabled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='100%25' width='100%25'%3E%3Cdefs%3E%3Cpattern id='doodad' width='19' height='19' viewBox='0 0 40 40' patternUnits='userSpaceOnUse' patternTransform='rotate(143)'%3E%3Crect width='100%25' height='100%25' fill='rgba(42, 67, 101,0)'/%3E%3Cpath d='M-10 30h60v20h-60zM-10-10h60v20h-60' fill='rgba(26, 32, 44,0)'/%3E%3Cpath d='M-10 10h60v20h-60zM-10-30h60v20h-60z' fill='rgba(0, 0, 0,0.05)'/%3E%3C/pattern%3E%3C/defs%3E%3Crect fill='url(%23doodad)' height='200%25' width='200%25'/%3E%3C/svg%3E")}:root.dark-mode{--bg-disabled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='100%25' width='100%25'%3E%3Cdefs%3E%3Cpattern id='doodad' width='19' height='19' viewBox='0 0 40 40' patternUnits='userSpaceOnUse' patternTransform='rotate(143)'%3E%3Crect width='100%25' height='100%25' fill='rgba(42, 67, 101,0)'/%3E%3Cpath d='M-10 30h60v20h-60zM-10-10h60v20h-60' fill='rgba(26, 32, 44,0)'/%3E%3Cpath d='M-10 10h60v20h-60zM-10-30h60v20h-60z' fill='rgba(255, 255, 255,0.05)'/%3E%3C/pattern%3E%3C/defs%3E%3Crect fill='url(%23doodad)' height='200%25' width='200%25'/%3E%3C/svg%3E")}header{display:none}html,body{font-size:12px;background-color:#fff}.page-content{margin:0 auto}.print-hidden{display:none !important}.tri-layout-container{grid-template-columns:1fr;grid-template-areas:"b";margin-inline-start:0;margin-inline-end:0;display:block}.card{box-shadow:none}.content-wrap.card{padding-inline-start:0;padding-inline-end:0}/*# sourceMappingURL=print-styles.css.map */
|
||||
1
public/dist/styles.css
vendored
1
public/dist/styles.css
vendored
File diff suppressed because one or more lines are too long
@@ -1,8 +1,6 @@
|
||||
/**
|
||||
* @extends {Component}
|
||||
*/
|
||||
import {htmlToDom} from "../services/dom";
|
||||
|
||||
class EntityPermissions {
|
||||
|
||||
setup() {
|
||||
@@ -55,8 +53,11 @@ class EntityPermissions {
|
||||
|
||||
// Get and insert new row
|
||||
const resp = await window.$http.get(`/permissions/form-row/${this.entityType}/${roleId}`);
|
||||
const row = htmlToDom(resp.data);
|
||||
const wrap = document.createElement('div');
|
||||
wrap.innerHTML = resp.data;
|
||||
const row = wrap.children[0];
|
||||
this.roleContainer.append(row);
|
||||
window.components.init(row);
|
||||
|
||||
this.roleSelect.disabled = false;
|
||||
}
|
||||
|
||||
@@ -38,7 +38,6 @@ import pageDisplay from "./page-display.js"
|
||||
import pageEditor from "./page-editor.js"
|
||||
import pagePicker from "./page-picker.js"
|
||||
import permissionsTable from "./permissions-table.js"
|
||||
import pointer from "./pointer.js";
|
||||
import popup from "./popup.js"
|
||||
import settingAppColorPicker from "./setting-app-color-picker.js"
|
||||
import settingColorPicker from "./setting-color-picker.js"
|
||||
@@ -96,7 +95,6 @@ const componentMapping = {
|
||||
"page-editor": pageEditor,
|
||||
"page-picker": pagePicker,
|
||||
"permissions-table": permissionsTable,
|
||||
"pointer": pointer,
|
||||
"popup": popup,
|
||||
"setting-app-color-picker": settingAppColorPicker,
|
||||
"setting-color-picker": settingColorPicker,
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import Clipboard from "clipboard/dist/clipboard.min";
|
||||
import * as DOM from "../services/dom";
|
||||
import {scrollAndHighlightElement} from "../services/util";
|
||||
|
||||
@@ -8,6 +9,7 @@ class PageDisplay {
|
||||
this.pageId = elem.getAttribute('page-display');
|
||||
|
||||
window.importVersioned('code').then(Code => Code.highlight());
|
||||
this.setupPointer();
|
||||
this.setupNavHighlighting();
|
||||
this.setupDetailsCodeBlockRefresh();
|
||||
|
||||
@@ -48,6 +50,108 @@ class PageDisplay {
|
||||
}
|
||||
}
|
||||
|
||||
setupPointer() {
|
||||
let pointer = document.getElementById('pointer');
|
||||
if (!pointer) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Set up pointer
|
||||
pointer = pointer.parentNode.removeChild(pointer);
|
||||
const pointerInner = pointer.querySelector('div.pointer');
|
||||
|
||||
// Instance variables
|
||||
let pointerShowing = false;
|
||||
let isSelection = false;
|
||||
let pointerModeLink = true;
|
||||
let pointerSectionId = '';
|
||||
|
||||
// Select all contents on input click
|
||||
DOM.onChildEvent(pointer, 'input', 'click', (event, input) => {
|
||||
input.select();
|
||||
event.stopPropagation();
|
||||
});
|
||||
|
||||
// Prevent closing pointer when clicked or focused
|
||||
DOM.onEvents(pointer, ['click', 'focus'], event => {
|
||||
event.stopPropagation();
|
||||
});
|
||||
|
||||
// Pointer mode toggle
|
||||
DOM.onChildEvent(pointer, 'span.icon', 'click', (event, icon) => {
|
||||
event.stopPropagation();
|
||||
pointerModeLink = !pointerModeLink;
|
||||
icon.querySelector('[data-icon="include"]').style.display = (!pointerModeLink) ? 'inline' : 'none';
|
||||
icon.querySelector('[data-icon="link"]').style.display = (pointerModeLink) ? 'inline' : 'none';
|
||||
updatePointerContent();
|
||||
});
|
||||
|
||||
// Set up clipboard
|
||||
new Clipboard(pointer.querySelector('button'));
|
||||
|
||||
// Hide pointer when clicking away
|
||||
DOM.onEvents(document.body, ['click', 'focus'], event => {
|
||||
if (!pointerShowing || isSelection) return;
|
||||
pointer = pointer.parentElement.removeChild(pointer);
|
||||
pointerShowing = false;
|
||||
});
|
||||
|
||||
let updatePointerContent = (element) => {
|
||||
let inputText = pointerModeLink ? window.baseUrl(`/link/${this.pageId}#${pointerSectionId}`) : `{{@${this.pageId}#${pointerSectionId}}}`;
|
||||
if (pointerModeLink && !inputText.startsWith('http')) {
|
||||
inputText = window.location.protocol + "//" + window.location.host + inputText;
|
||||
}
|
||||
|
||||
pointer.querySelector('input').value = inputText;
|
||||
|
||||
// Update anchor if present
|
||||
const editAnchor = pointer.querySelector('#pointer-edit');
|
||||
if (editAnchor && element) {
|
||||
const editHref = editAnchor.dataset.editHref;
|
||||
const elementId = element.id;
|
||||
|
||||
// get the first 50 characters.
|
||||
const queryContent = element.textContent && element.textContent.substring(0, 50);
|
||||
editAnchor.href = `${editHref}?content-id=${elementId}&content-text=${encodeURIComponent(queryContent)}`;
|
||||
}
|
||||
};
|
||||
|
||||
// Show pointer when selecting a single block of tagged content
|
||||
DOM.forEach('.page-content [id^="bkmrk"]', bookMarkElem => {
|
||||
DOM.onEvents(bookMarkElem, ['mouseup', 'keyup'], event => {
|
||||
event.stopPropagation();
|
||||
let selection = window.getSelection();
|
||||
if (selection.toString().length === 0) return;
|
||||
|
||||
// Show pointer and set link
|
||||
pointerSectionId = bookMarkElem.id;
|
||||
updatePointerContent(bookMarkElem);
|
||||
|
||||
bookMarkElem.parentNode.insertBefore(pointer, bookMarkElem);
|
||||
pointer.style.display = 'block';
|
||||
pointerShowing = true;
|
||||
isSelection = true;
|
||||
|
||||
// Set pointer to sit near mouse-up position
|
||||
requestAnimationFrame(() => {
|
||||
const bookMarkBounds = bookMarkElem.getBoundingClientRect();
|
||||
let pointerLeftOffset = (event.pageX - bookMarkBounds.left - 164);
|
||||
if (pointerLeftOffset < 0) {
|
||||
pointerLeftOffset = 0
|
||||
}
|
||||
const pointerLeftOffsetPercent = (pointerLeftOffset / bookMarkBounds.width) * 100;
|
||||
|
||||
pointerInner.style.left = pointerLeftOffsetPercent + '%';
|
||||
|
||||
setTimeout(() => {
|
||||
isSelection = false;
|
||||
}, 100);
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
setupNavHighlighting() {
|
||||
// Check if support is present for IntersectionObserver
|
||||
if (!('IntersectionObserver' in window) ||
|
||||
|
||||
@@ -1,131 +0,0 @@
|
||||
import * as DOM from "../services/dom";
|
||||
import Clipboard from "clipboard/dist/clipboard.min";
|
||||
|
||||
/**
|
||||
* @extends Component
|
||||
*/
|
||||
class Pointer {
|
||||
|
||||
setup() {
|
||||
this.container = this.$el;
|
||||
this.pageId = this.$opts.pageId;
|
||||
|
||||
// Instance variables
|
||||
this.showing = false;
|
||||
this.isSelection = false;
|
||||
this.pointerModeLink = true;
|
||||
this.pointerSectionId = '';
|
||||
|
||||
this.setupListeners();
|
||||
|
||||
// Set up clipboard
|
||||
new Clipboard(this.container.querySelector('button'));
|
||||
}
|
||||
|
||||
setupListeners() {
|
||||
// Select all contents on input click
|
||||
DOM.onChildEvent(this.container, 'input', 'click', (event, input) => {
|
||||
input.select();
|
||||
event.stopPropagation();
|
||||
});
|
||||
|
||||
// Prevent closing pointer when clicked or focused
|
||||
DOM.onEvents(this.container, ['click', 'focus'], event => {
|
||||
event.stopPropagation();
|
||||
});
|
||||
|
||||
// Pointer mode toggle
|
||||
DOM.onChildEvent(this.container, 'span.icon', 'click', (event, icon) => {
|
||||
event.stopPropagation();
|
||||
this.pointerModeLink = !this.pointerModeLink;
|
||||
icon.querySelector('[data-icon="include"]').style.display = (!this.pointerModeLink) ? 'inline' : 'none';
|
||||
icon.querySelector('[data-icon="link"]').style.display = (this.pointerModeLink) ? 'inline' : 'none';
|
||||
this.updateForTarget();
|
||||
});
|
||||
|
||||
// Hide pointer when clicking away
|
||||
DOM.onEvents(document.body, ['click', 'focus'], event => {
|
||||
if (!this.showing || this.isSelection) return;
|
||||
this.hidePointer();
|
||||
});
|
||||
|
||||
// Show pointer when selecting a single block of tagged content
|
||||
const pageContent = document.querySelector('.page-content');
|
||||
DOM.onEvents(pageContent, ['mouseup', 'keyup'], event => {
|
||||
event.stopPropagation();
|
||||
const targetEl = event.target.closest('[id^="bkmrk"]');
|
||||
if (targetEl) {
|
||||
this.showPointerAtTarget(targetEl, event.pageX);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
hidePointer() {
|
||||
this.container.style.display = null;
|
||||
this.showing = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Move and display the pointer at the given element, targeting the given screen x-position if possible.
|
||||
* @param {Element} element
|
||||
* @param {Number} xPosition
|
||||
*/
|
||||
showPointerAtTarget(element, xPosition) {
|
||||
const selection = window.getSelection();
|
||||
if (selection.toString().length === 0) return;
|
||||
|
||||
// Show pointer and set link
|
||||
this.pointerSectionId = element.id;
|
||||
this.updateForTarget(element);
|
||||
|
||||
this.container.style.display = 'block';
|
||||
const targetBounds = element.getBoundingClientRect();
|
||||
const pointerBounds = this.container.getBoundingClientRect();
|
||||
|
||||
const xTarget = Math.min(Math.max(xPosition, targetBounds.left), targetBounds.right);
|
||||
const xOffset = xTarget - (pointerBounds.width / 2);
|
||||
const yOffset = (targetBounds.top - pointerBounds.height) - 16;
|
||||
|
||||
this.container.style.left = `${xOffset}px`;
|
||||
this.container.style.top = `${yOffset}px`;
|
||||
|
||||
this.showing = true;
|
||||
this.isSelection = true;
|
||||
|
||||
setTimeout(() => {
|
||||
this.isSelection = false;
|
||||
}, 100);
|
||||
|
||||
const scrollListener = () => {
|
||||
this.hidePointer();
|
||||
window.removeEventListener('scroll', scrollListener, {passive: true});
|
||||
};
|
||||
window.addEventListener('scroll', scrollListener, {passive: true});
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the pointer inputs/content for the given target element.
|
||||
* @param {?Element} element
|
||||
*/
|
||||
updateForTarget(element) {
|
||||
let inputText = this.pointerModeLink ? window.baseUrl(`/link/${this.pageId}#${this.pointerSectionId}`) : `{{@${this.pageId}#${this.pointerSectionId}}}`;
|
||||
if (this.pointerModeLink && !inputText.startsWith('http')) {
|
||||
inputText = window.location.protocol + "//" + window.location.host + inputText;
|
||||
}
|
||||
|
||||
this.container.querySelector('input').value = inputText;
|
||||
|
||||
// Update anchor if present
|
||||
const editAnchor = this.container.querySelector('#pointer-edit');
|
||||
if (editAnchor && element) {
|
||||
const editHref = editAnchor.dataset.editHref;
|
||||
const elementId = element.id;
|
||||
|
||||
// get the first 50 characters.
|
||||
const queryContent = element.textContent && element.textContent.substring(0, 50);
|
||||
editAnchor.href = `${editHref}?content-id=${elementId}&content-text=${encodeURIComponent(queryContent)}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default Pointer;
|
||||
@@ -117,17 +117,4 @@ export function removeLoading(element) {
|
||||
for (const el of loadingEls) {
|
||||
el.remove();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the given html data into a live DOM element.
|
||||
* Initiates any components defined in the data.
|
||||
* @param {String} html
|
||||
* @returns {Element}
|
||||
*/
|
||||
export function htmlToDom(html) {
|
||||
const wrap = document.createElement('div');
|
||||
wrap.innerHTML = html;
|
||||
window.components.init(wrap);
|
||||
return wrap.children[0];
|
||||
}
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Insert/Edit Link',
|
||||
'insert_horizontal_line' => 'Insert horizontal line',
|
||||
'insert_code_block' => 'Insert code block',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'Insert/edit drawing',
|
||||
'drawing_manager' => 'Drawing manager',
|
||||
'insert_media' => 'Insert/edit media',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'الأذونات',
|
||||
'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
|
||||
'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
|
||||
'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
|
||||
'permissions_intro' => 'عند التفعيل، سوف تأخذ هذه الأذونات أولوية على أي صلاحية أخرى للدور.',
|
||||
'permissions_enable' => 'تفعيل الأذونات المخصصة',
|
||||
'permissions_save' => 'حفظ الأذونات',
|
||||
'permissions_owner' => 'Owner',
|
||||
'permissions_role_everyone_else' => 'Everyone Else',
|
||||
'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
|
||||
'permissions_role_override' => 'Override permissions for role',
|
||||
|
||||
// Search
|
||||
'search_results' => 'نتائج البحث',
|
||||
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Вмъкни/редактирай връзка',
|
||||
'insert_horizontal_line' => 'Вмъкни хоризонтална линия',
|
||||
'insert_code_block' => 'Въведи код',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'Вмъкни/редактирай рисунка',
|
||||
'drawing_manager' => 'Управление на рисунките',
|
||||
'insert_media' => 'Вмъкни/редактирай мултимедия',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Права',
|
||||
'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
|
||||
'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
|
||||
'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
|
||||
'permissions_intro' => 'Веднъж добавени, тези права ще вземат приоритет над всички други установени права.',
|
||||
'permissions_enable' => 'Разреши уникални права',
|
||||
'permissions_save' => 'Запази права',
|
||||
'permissions_owner' => 'Собственик',
|
||||
'permissions_role_everyone_else' => 'Everyone Else',
|
||||
'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
|
||||
'permissions_role_override' => 'Override permissions for role',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Резултати от търсенето',
|
||||
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Insert/Edit Link',
|
||||
'insert_horizontal_line' => 'Insert horizontal line',
|
||||
'insert_code_block' => 'Insert code block',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'Insert/edit drawing',
|
||||
'drawing_manager' => 'Drawing manager',
|
||||
'insert_media' => 'Insert/edit media',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Dozvole',
|
||||
'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
|
||||
'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
|
||||
'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
|
||||
'permissions_intro' => 'Jednom omogućene, ove dozvole imaju prednost nad dozvolama uloge.',
|
||||
'permissions_enable' => 'Omogući prilagođena dopuštenja',
|
||||
'permissions_save' => 'Snimi dozvole',
|
||||
'permissions_owner' => 'Vlasnik',
|
||||
'permissions_role_everyone_else' => 'Everyone Else',
|
||||
'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
|
||||
'permissions_role_override' => 'Override permissions for role',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Rezultati pretrage',
|
||||
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Insert/Edit Link',
|
||||
'insert_horizontal_line' => 'Insert horizontal line',
|
||||
'insert_code_block' => 'Insert code block',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'Insert/edit drawing',
|
||||
'drawing_manager' => 'Drawing manager',
|
||||
'insert_media' => 'Insert/edit media',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Permisos',
|
||||
'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
|
||||
'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
|
||||
'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
|
||||
'permissions_intro' => 'Si els activeu, aquests permisos tindran més prioritat que qualsevol permís de rol.',
|
||||
'permissions_enable' => 'Activa els permisos personalitzats',
|
||||
'permissions_save' => 'Desa els permisos',
|
||||
'permissions_owner' => 'Propietari',
|
||||
'permissions_role_everyone_else' => 'Everyone Else',
|
||||
'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
|
||||
'permissions_role_override' => 'Override permissions for role',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Resultats de la cerca',
|
||||
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Insert/Edit Link',
|
||||
'insert_horizontal_line' => 'Insert horizontal line',
|
||||
'insert_code_block' => 'Insert code block',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'Insert/edit drawing',
|
||||
'drawing_manager' => 'Drawing manager',
|
||||
'insert_media' => 'Insert/edit media',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Oprávnění',
|
||||
'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
|
||||
'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
|
||||
'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
|
||||
'permissions_intro' => 'Pokud je povoleno, tato oprávnění budou mít přednost před všemi nastavenými oprávněními role.',
|
||||
'permissions_enable' => 'Povolit vlastní oprávnění',
|
||||
'permissions_save' => 'Uložit oprávnění',
|
||||
'permissions_owner' => 'Vlastník',
|
||||
'permissions_role_everyone_else' => 'Everyone Else',
|
||||
'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
|
||||
'permissions_role_override' => 'Override permissions for role',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Výsledky hledání',
|
||||
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Insert/Edit Link',
|
||||
'insert_horizontal_line' => 'Insert horizontal line',
|
||||
'insert_code_block' => 'Insert code block',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'Insert/edit drawing',
|
||||
'drawing_manager' => 'Drawing manager',
|
||||
'insert_media' => 'Insert/edit media',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Permissions',
|
||||
'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
|
||||
'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
|
||||
'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
|
||||
'permissions_intro' => 'Once enabled, These permissions will take priority over any set role permissions.',
|
||||
'permissions_enable' => 'Enable Custom Permissions',
|
||||
'permissions_save' => 'Save Permissions',
|
||||
'permissions_owner' => 'Owner',
|
||||
'permissions_role_everyone_else' => 'Everyone Else',
|
||||
'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
|
||||
'permissions_role_override' => 'Override permissions for role',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Search Results',
|
||||
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Indsæt/Rediger Link',
|
||||
'insert_horizontal_line' => 'Indsæt vandret linje',
|
||||
'insert_code_block' => 'Indsæt kodeblok',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'Indsæt/rediger tegning',
|
||||
'drawing_manager' => 'Drawing manager',
|
||||
'insert_media' => 'Indsæt/rediger medie',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Rettigheder',
|
||||
'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
|
||||
'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
|
||||
'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
|
||||
'permissions_intro' => 'Når de er aktiveret, vil disse tilladelser have prioritet over alle indstillede rolletilladelser.',
|
||||
'permissions_enable' => 'Aktivér tilpassede tilladelser',
|
||||
'permissions_save' => 'Gem tilladelser',
|
||||
'permissions_owner' => 'Ejer',
|
||||
'permissions_role_everyone_else' => 'Everyone Else',
|
||||
'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
|
||||
'permissions_role_override' => 'Override permissions for role',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Søgeresultater',
|
||||
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
|
||||
@@ -48,7 +48,7 @@ return [
|
||||
'bookshelf_delete_notification' => 'Regal erfolgreich gelöscht',
|
||||
|
||||
// Favourites
|
||||
'favourite_add_notification' => '":name" wurde zu Ihren Favoriten hinzugefügt',
|
||||
'favourite_add_notification' => '":name" wurde zu deinen Favoriten hinzugefügt',
|
||||
'favourite_remove_notification' => '":name" wurde aus Ihren Favoriten entfernt',
|
||||
|
||||
// MFA
|
||||
|
||||
@@ -35,7 +35,7 @@ return [
|
||||
'register_thanks' => 'Vielen Dank für Ihre Registrierung!',
|
||||
'register_confirm' => 'Bitte prüfen Sie Ihren Posteingang und bestätigen Sie die Registrierung.',
|
||||
'registrations_disabled' => 'Eine Registrierung ist momentan nicht möglich',
|
||||
'registration_email_domain_invalid' => 'Sie können sich mit dieser E-Mail-Adresse nicht registrieren',
|
||||
'registration_email_domain_invalid' => 'Sie können sich mit dieser E-Mail nicht registrieren.',
|
||||
'register_success' => 'Vielen Dank für Ihre Registrierung! Die Daten sind gespeichert und Sie sind angemeldet.',
|
||||
|
||||
// Login auto-initiation
|
||||
@@ -58,7 +58,7 @@ return [
|
||||
'email_confirm_greeting' => 'Danke, dass Sie sich für :appName registriert haben!',
|
||||
'email_confirm_text' => 'Bitte bestätigen Sie Ihre E-Mail-Adresse, indem Sie auf die Schaltfläche klicken:',
|
||||
'email_confirm_action' => 'E-Mail-Adresse bestätigen',
|
||||
'email_confirm_send_error' => 'Leider konnte die für die Registrierung notwendige E-Mail zur Bestätigung Ihrer E-Mail-Adresse nicht versandt werden. Bitte kontaktieren Sie den Systemadministrator!',
|
||||
'email_confirm_send_error' => 'Leider konnte die für die Registrierung notwendige E-Mail zur bestätigung Ihrer E-Mail-Adresse nicht versandt werden. Bitte kontaktieren Sie den Systemadministrator!',
|
||||
'email_confirm_success' => 'Ihre E-Mail wurde bestätigt! Sie sollten nun in der Lage sein, sich mit dieser E-Mail-Adresse anzumelden.',
|
||||
'email_confirm_resent' => 'Bestätigungs-E-Mail wurde erneut versendet, bitte überprüfen Sie Ihren Posteingang.',
|
||||
|
||||
@@ -69,12 +69,12 @@ return [
|
||||
'email_not_confirmed_resend_button' => 'Bestätigungs-E-Mail erneut senden',
|
||||
|
||||
// User Invite
|
||||
'user_invite_email_subject' => 'Sie wurden eingeladen :appName beizutreten!',
|
||||
'user_invite_email_subject' => 'Du wurdest eingeladen :appName beizutreten!',
|
||||
'user_invite_email_greeting' => 'Ein Konto wurde für Sie auf :appName erstellt.',
|
||||
'user_invite_email_text' => 'Klicken Sie auf die Schaltfläche unten, um ein Passwort festzulegen und Zugriff zu erhalten:',
|
||||
'user_invite_email_action' => 'Account-Passwort festlegen',
|
||||
'user_invite_page_welcome' => 'Willkommen bei :appName!',
|
||||
'user_invite_page_text' => 'Um die Anmeldung abzuschließen und Zugriff auf :appName zu bekommen muss noch ein Passwort festgelegt werden. Dieses wird in Zukunft für die Anmeldung benötigt.',
|
||||
'user_invite_page_text' => 'Um die Anmeldung abzuschließen und Zugriff auf :appName zu bekommen muss noch ein Passwort festgelegt werden. Dieses wird in Zukunft zum Einloggen benötigt.',
|
||||
'user_invite_page_confirm_button' => 'Passwort bestätigen',
|
||||
'user_invite_success_login' => 'Passwort gesetzt, Sie sollten nun in der Lage sein, sich mit Ihrem Passwort an :appName anzumelden!',
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ return [
|
||||
'image_delete_used' => 'Dieses Bild wird auf den folgenden Seiten benutzt. ',
|
||||
'image_delete_confirm_text' => 'Möchten Sie dieses Bild wirklich löschen?',
|
||||
'image_select_image' => 'Bild auswählen',
|
||||
'image_dropzone' => 'Ziehen Sie Bilder hierher oder klicken Sie hier, um ein Bild auszuwählen',
|
||||
'image_dropzone' => 'Ziehen Sie Bilder hierher oder klicken Sie, um ein Bild auszuwählen',
|
||||
'images_deleted' => 'Bilder gelöscht',
|
||||
'image_preview' => 'Bildvorschau',
|
||||
'image_upload_success' => 'Bild erfolgreich hochgeladen',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Link einfügen/ändern',
|
||||
'insert_horizontal_line' => 'Horizontale Linie einfügen',
|
||||
'insert_code_block' => 'Code-Block einfügen',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'Zeichnung einfügen/ändern',
|
||||
'drawing_manager' => 'Zeichnungsmanager',
|
||||
'insert_media' => 'Medien einfügen/ändern',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Berechtigungen',
|
||||
'permissions_desc' => 'Legen Sie hier Berechtigungen fest, um die Standardberechtigungen von Benutzerrollen zu überschreiben.',
|
||||
'permissions_book_cascade' => 'In Büchern festgelegte Berechtigungen werden automatisch in untergeordnete Kapitel und Seiten kaskadiert, es sei denn, sie haben eigene Berechtigungen definiert.',
|
||||
'permissions_chapter_cascade' => 'In Kapiteln festgelegte Berechtigungen werden automatisch in untergeordnete Seiten kaskadiert, es sei denn, sie haben eigene Berechtigungen definiert.',
|
||||
'permissions_intro' => 'Wenn individuelle Berechtigungen aktiviert werden, überschreiben diese Einstellungen durch Rollen zugewiesene Berechtigungen.',
|
||||
'permissions_enable' => 'Individuelle Berechtigungen aktivieren',
|
||||
'permissions_save' => 'Berechtigungen speichern',
|
||||
'permissions_owner' => 'Besitzer',
|
||||
'permissions_role_everyone_else' => 'Alle anderen',
|
||||
'permissions_role_everyone_else_desc' => 'Berechtigungen für alle Rollen setzen, die nicht explizit überschrieben wurden.',
|
||||
'permissions_role_override' => 'Berechtigungen für Rolle überschreiben',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Suchergebnisse',
|
||||
|
||||
@@ -6,7 +6,7 @@ return [
|
||||
|
||||
// Permissions
|
||||
'permission' => 'Sie haben keine Zugriffsberechtigung auf die angeforderte Seite.',
|
||||
'permissionJson' => 'Sie haben keine Berechtigung die angeforderte Aktion auszuführen.',
|
||||
'permissionJson' => 'Sie haben keine Berechtigung, die angeforderte Aktion auszuführen.',
|
||||
|
||||
// Auth
|
||||
'error_user_exists_different_creds' => 'Ein Benutzer mit der E-Mail-Adresse :email ist bereits mit anderen Anmeldedaten registriert.',
|
||||
@@ -19,9 +19,9 @@ return [
|
||||
'ldap_extension_not_installed' => 'LDAP-PHP-Erweiterung ist nicht installiert.',
|
||||
'ldap_cannot_connect' => 'Die Verbindung zum LDAP-Server ist fehlgeschlagen. Beim initialen Verbindungsaufbau trat ein Fehler auf.',
|
||||
'saml_already_logged_in' => 'Sie sind bereits angemeldet',
|
||||
'saml_user_not_registered' => 'Es ist kein Benutzer mit ID :name registriert und die automatische Registrierung ist deaktiviert',
|
||||
'saml_user_not_registered' => 'Kein Benutzer mit ID :name registriert und die automatische Registrierung ist deaktiviert',
|
||||
'saml_no_email_address' => 'Es konnte keine E-Mail-Adresse für diesen Benutzer in den vom externen Authentifizierungssystem zur Verfügung gestellten Daten gefunden werden',
|
||||
'saml_invalid_response_id' => 'Die Anfrage vom externen Authentifizierungssystem wird von einem von dieser Anwendung gestarteten Prozess nicht erkannt. Das Zurückgehen nach einer Anmeldung könnte dieses Problem verursachen.',
|
||||
'saml_invalid_response_id' => 'Die Anfrage vom externen Authentifizierungssystem wird von einem von dieser Anwendung gestarteten Prozess nicht erkannt. Das Zurückgehen nach einem Login könnte dieses Problem verursachen.',
|
||||
'saml_fail_authed' => 'Anmeldung mit :system fehlgeschlagen, System konnte keine erfolgreiche Autorisierung bereitstellen',
|
||||
'oidc_already_logged_in' => 'Bereits angemeldet',
|
||||
'oidc_user_not_registered' => 'Der Benutzer :name ist nicht registriert und die automatische Registrierung ist deaktiviert',
|
||||
@@ -33,11 +33,11 @@ return [
|
||||
'social_account_email_in_use' => 'Die E-Mail-Adresse ":email" ist bereits registriert. Wenn Sie bereits registriert sind, können Sie Ihr :socialAccount-Konto in Ihren Profil-Einstellungen verknüpfen.',
|
||||
'social_account_existing' => 'Dieses :socialAccount-Konto ist bereits mit Ihrem Profil verknüpft.',
|
||||
'social_account_already_used_existing' => 'Dieses :socialAccount-Konto wird bereits von einem anderen Benutzer verwendet.',
|
||||
'social_account_not_used' => 'Dieses :socialAccount-Konto ist bisher keinem Benutzer zugeordnet. Sie können es in Ihren Profil-Einstellungen zuordnen. ',
|
||||
'social_account_not_used' => 'Dieses :socialAccount-Konto ist bisher keinem Benutzer zugeordnet. Sie können es in Ihren Profil-Einstellung.',
|
||||
'social_account_register_instructions' => 'Wenn Sie bisher keinen Social-Media Konto besitzen, können Sie ein solches Konto mit der :socialAccount Option anlegen.',
|
||||
'social_driver_not_found' => 'Treiber für Social-Media-Konten nicht gefunden',
|
||||
'social_driver_not_configured' => 'Ihr :socialAccount-Konto ist nicht korrekt konfiguriert.',
|
||||
'invite_token_expired' => 'Dieser Einladungslink ist abgelaufen. Sie können stattdessen versuchen Ihr Passwort zurückzusetzen.',
|
||||
'invite_token_expired' => 'Dieser Einladungslink ist abgelaufen. Sie können stattdessen versuchen, Ihr Passwort zurückzusetzen.',
|
||||
|
||||
// System
|
||||
'path_not_writable' => 'Die Datei kann nicht in den angegebenen Pfad :filePath hochgeladen werden. Stellen Sie sicher, dass dieser Ordner auf dem Server beschreibbar ist.',
|
||||
@@ -78,7 +78,7 @@ return [
|
||||
|
||||
// Comments
|
||||
'comment_list' => 'Beim Abrufen der Kommentare ist ein Fehler aufgetreten.',
|
||||
'cannot_add_comment_to_draft' => 'Sie können keine Kommentare zu einem Entwurf hinzufügen.',
|
||||
'cannot_add_comment_to_draft' => 'Du kannst keine Kommentare zu einem Entwurf hinzufügen.',
|
||||
'comment_add' => 'Beim Hinzufügen des Kommentars ist ein Fehler aufgetreten.',
|
||||
'comment_delete' => 'Beim Löschen des Kommentars ist ein Fehler aufgetreten.',
|
||||
'empty_comment' => 'Kann keinen leeren Kommentar hinzufügen.',
|
||||
|
||||
@@ -25,8 +25,8 @@ return [
|
||||
'app_public_access_toggle' => 'Öffentlichen Zugriff erlauben',
|
||||
'app_public_viewing' => 'Öffentliche Ansicht erlauben?',
|
||||
'app_secure_images' => 'Erhöhte Sicherheit für hochgeladene Bilder aktivieren?',
|
||||
'app_secure_images_toggle' => 'Aktiviere höhere Sicherheit für Bild-Uploads',
|
||||
'app_secure_images_desc' => 'Aus Leistungsgründen sind alle Bilder öffentlich sichtbar. Diese Option fügt zufällige, schwer zu erratende, Zeichenketten zu Bild-URLs hinzu. Stellen Sie sicher, dass Verzeichnisindizes deaktiviert sind, um einen einfachen Zugriff zu verhindern.',
|
||||
'app_secure_images_toggle' => 'Aktiviere Bild-Upload höherer Sicherheit',
|
||||
'app_secure_images_desc' => 'Aus Leistungsgründen sind alle Bilder öffentlich sichtbar. Diese Option fügt zufällige, schwer zu eratene, Zeichenketten zu Bild-URLs hinzu. Stellen sie sicher, dass Verzeichnisindizes deaktiviert sind, um einen einfachen Zugriff zu verhindern.',
|
||||
'app_default_editor' => 'Standard-Seiten-Editor',
|
||||
'app_default_editor_desc' => 'Wählen Sie aus, welcher Editor standardmäßig beim Bearbeiten neuer Seiten verwendet wird. Dies kann auf einer Seitenebene überschrieben werden, wenn es die Berechtigungen erlauben.',
|
||||
'app_custom_html' => 'Benutzerdefinierter HTML <head> Inhalt',
|
||||
@@ -37,12 +37,12 @@ return [
|
||||
Größere Bilder werden verkleinert.',
|
||||
'app_primary_color' => 'Primäre Anwendungsfarbe',
|
||||
'app_primary_color_desc' => 'Dies sollte ein HEX Wert sein.
|
||||
Wenn Sie nichts eingeben, wird die Anwendung auf die Standardfarbe zurückgesetzt.',
|
||||
Wenn Sie nicht eingeben, wird die Anwendung auf die Standardfarbe zurückgesetzt.',
|
||||
'app_homepage' => 'Startseite der Anwendung',
|
||||
'app_homepage_desc' => 'Wählen Sie eine Seite als Startseite aus, die statt der Standardansicht angezeigt werden soll. Seitenberechtigungen werden für die ausgewählten Seiten ignoriert.',
|
||||
'app_homepage_select' => 'Wählen Sie eine Seite aus',
|
||||
'app_footer_links' => 'Fußzeilen-Links',
|
||||
'app_footer_links_desc' => 'Fügen Sie Links hinzu, die innerhalb der Seitenfußzeile angezeigt werden. Diese werden am unteren Ende der meisten Seiten angezeigt, einschließlich derjenigen, die keine Anmeldung benötigen. Sie können die Bezeichnung "trans::<key>" verwenden, um systemdefinierte Übersetzungen zu verwenden. Beispiel: Mit "trans::common.privacy_policy" wird der übersetzte Text "Privacy Policy" bereitgestellt und "trans::common.terms_of_service" liefert den übersetzten Text "Terms of Service".',
|
||||
'app_footer_links_desc' => 'Fügen Sie Links hinzu, die innerhalb der Seitenfußzeile angezeigt werden. Diese werden am unteren Ende der meisten Seiten angezeigt, einschließlich derjenigen, die keinen Login benötigen. Sie können die Bezeichnung "trans::<key>" verwenden, um systemdefinierte Übersetzungen zu verwenden. Beispiel: Mit "trans::common.privacy_policy" wird der übersetzte Text "Privacy Policy" bereitgestellt und "trans::common.terms_of_service" liefert den übersetzten Text "Terms of Service".',
|
||||
'app_footer_links_label' => 'Link-Label',
|
||||
'app_footer_links_url' => 'Link-URL',
|
||||
'app_footer_links_add' => 'Fußzeilen-Link hinzufügen',
|
||||
@@ -70,8 +70,8 @@ Wenn Sie nichts eingeben, wird die Anwendung auf die Standardfarbe zurückgesetz
|
||||
'reg_email_confirmation_toggle' => 'Bestätigung per E-Mail erforderlich',
|
||||
'reg_confirm_email_desc' => 'Falls die Einschränkung für Domains genutzt wird, ist die Bestätigung per E-Mail zwingend erforderlich und der untenstehende Wert wird ignoriert.',
|
||||
'reg_confirm_restrict_domain' => 'Registrierung auf bestimmte Domains einschränken',
|
||||
'reg_confirm_restrict_domain_desc' => 'Fügen Sie eine durch Komma getrennte Liste von Domains hinzu, auf die die Registrierung eingeschränkt werden soll. Benutzern wird eine E-Mail gesendet, um ihre E-Mail-Adresse zu bestätigen, bevor diese die Anwendung nutzen können.
|
||||
Hinweis: Benutzer können ihre E-Mail-Adresse nach erfolgreicher Registrierung ändern.',
|
||||
'reg_confirm_restrict_domain_desc' => 'Fügen sie eine durch Komma getrennte Liste von Domains hinzu, auf die die Registrierung eingeschränkt werden soll. Benutzern wird eine E-Mail gesendet, um ihre E-Mail Adresse zu bestätigen, bevor sie diese Anwendung nutzen können.
|
||||
Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung ändern.',
|
||||
'reg_confirm_restrict_domain_placeholder' => 'Keine Einschränkung gesetzt',
|
||||
|
||||
// Maintenance settings
|
||||
@@ -283,7 +283,6 @@ Hinweis: Benutzer können ihre E-Mail-Adresse nach erfolgreicher Registrierung
|
||||
'da' => 'Dänisch',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Spanisch',
|
||||
'es_AR' => 'Spanisch Argentinisch',
|
||||
'et' => 'Estnisch',
|
||||
|
||||
@@ -44,7 +44,7 @@ return [
|
||||
'numeric' => ':attribute muss größer-gleich :value sein.',
|
||||
'file' => ':attribute muss mindestens :value Kilobytes groß sein.',
|
||||
'string' => ':attribute muss mindestens :value Zeichen enthalten.',
|
||||
'array' => ':attribute muss :value oder mehr Elemente haben.',
|
||||
'array' => ':attribute muss :value Elemente oder mehr haben.',
|
||||
],
|
||||
'exists' => ':attribute ist ungültig.',
|
||||
'image' => ':attribute muss ein Bild sein.',
|
||||
@@ -56,7 +56,7 @@ return [
|
||||
'ipv6' => ':attribute muss eine gültige IPv6-Adresse sein.',
|
||||
'json' => 'Das Attribut muss eine gültige JSON-Zeichenfolge sein.',
|
||||
'lt' => [
|
||||
'numeric' => ':attribute muss kleiner als :value sein.',
|
||||
'numeric' => ':attribute muss kleiner sein :value sein.',
|
||||
'file' => ':attribute muss kleiner als :value Kilobytes sein.',
|
||||
'string' => ':attribute muss weniger als :value Zeichen haben.',
|
||||
'array' => ':attribute muss weniger als :value Elemente haben.',
|
||||
|
||||
@@ -28,7 +28,7 @@ return [
|
||||
// Books
|
||||
'book_create' => 'erstellt Buch',
|
||||
'book_create_notification' => 'Buch erfolgreich erstellt',
|
||||
'book_create_from_chapter' => 'Kapitel zu Buch umgewandelt',
|
||||
'book_create_from_chapter' => 'umgewandeltes Kapitel zum Buch',
|
||||
'book_create_from_chapter_notification' => 'Kapitel erfolgreich in ein Buch umgewandelt',
|
||||
'book_update' => 'aktualisiert Buch',
|
||||
'book_update_notification' => 'Buch erfolgreich aktualisiert',
|
||||
@@ -38,13 +38,13 @@ return [
|
||||
'book_sort_notification' => 'Buch erfolgreich umsortiert',
|
||||
|
||||
// Bookshelves
|
||||
'bookshelf_create' => 'Regal erstellt',
|
||||
'bookshelf_create' => 'created shelf',
|
||||
'bookshelf_create_notification' => 'Regal erfolgreich erstellt',
|
||||
'bookshelf_create_from_book' => 'Buch zu Regal umgewandelt',
|
||||
'bookshelf_create_from_book' => 'converted book to shelf',
|
||||
'bookshelf_create_from_book_notification' => 'Buch erfolgreich zu einem Regal umgewandelt',
|
||||
'bookshelf_update' => 'Regal aktualisiert',
|
||||
'bookshelf_update' => 'updated shelf',
|
||||
'bookshelf_update_notification' => 'Regal erfolgreich aktualisiert',
|
||||
'bookshelf_delete' => 'Regal gelöscht',
|
||||
'bookshelf_delete' => 'deleted shelf',
|
||||
'bookshelf_delete_notification' => 'Regal erfolgreich gelöscht',
|
||||
|
||||
// Favourites
|
||||
|
||||
@@ -99,17 +99,17 @@ return [
|
||||
'mfa_gen_totp_desc' => 'Um Mehrfach-Faktor-Authentifizierung nutzen zu können, benötigen Sie eine mobile Anwendung, die TOTP unterstützt, wie Google Authenticator, Authy oder Microsoft Authenticator.',
|
||||
'mfa_gen_totp_scan' => 'Scannen Sie den QR-Code unten mit ihrer bevorzugten Authentifizierungs-App, um loszulegen.',
|
||||
'mfa_gen_totp_verify_setup' => 'Setup überprüfen',
|
||||
'mfa_gen_totp_verify_setup_desc' => 'Überprüfe, dass alles funktioniert, indem du einen Code aus deiner Authentifizierungs-App in das Eingabefeld unten eingibst:',
|
||||
'mfa_gen_totp_provide_code_here' => 'Gib hier den von der App generierten Code ein',
|
||||
'mfa_gen_totp_verify_setup_desc' => 'Überprüfen Sie, dass alles funktioniert, indem Sie einen Code in Ihrer Authentifizierungs-App in das Eingabefeld unten eingeben:',
|
||||
'mfa_gen_totp_provide_code_here' => 'Geben Sie hier Ihre App generierten Code ein',
|
||||
'mfa_verify_access' => 'Zugriff überprüfen',
|
||||
'mfa_verify_access_desc' => 'Dein Benutzerkonto erfordert, dass du deine Identität über eine zusätzliche Verifikationsebene bestätigst, bevor du Zugriff erhältst. Verifiziere diese mit einer deiner konfigurierten Methoden, um fortzufahren.',
|
||||
'mfa_verify_access_desc' => 'Ihr Benutzerkonto erfordert, dass Sie Ihre Identität über eine zusätzliche Verifikationsebene bestätigen, bevor Sie den Zugriff gewähren. Überprüfen Sie mit einer Ihrer konfigurierten Methoden, um fortzufahren.',
|
||||
'mfa_verify_no_methods' => 'Keine Methoden konfiguriert',
|
||||
'mfa_verify_no_methods_desc' => 'Es konnten keine Multi-Faktor-Authentifizierungsmethoden für dein Konto gefunden werden. Du musst mindestens eine Methode einrichten, bevor du Zugriff erhältst.',
|
||||
'mfa_verify_no_methods_desc' => 'Es konnten keine Mehrfach-Faktor-Authentifizierungsmethoden für Ihr Konto gefunden werden. Sie müssen mindestens eine Methode einrichten, bevor Sie Zugriff erhalten.',
|
||||
'mfa_verify_use_totp' => 'Mit einer mobilen App verifizieren',
|
||||
'mfa_verify_use_backup_codes' => 'Mit einem Backup-Code verifizieren',
|
||||
'mfa_verify_use_backup_codes' => 'Mit einem Backup-Code überprüfen',
|
||||
'mfa_verify_backup_code' => 'Backup-Code',
|
||||
'mfa_verify_backup_code_desc' => 'Gib einen deiner verbleibenden Backup-Codes unten ein:',
|
||||
'mfa_verify_backup_code_desc' => 'Geben Sie einen Ihrer verbleibenden Backup-Codes unten ein:',
|
||||
'mfa_verify_backup_code_enter_here' => 'Backup-Code hier eingeben',
|
||||
'mfa_verify_totp_desc' => 'Gib den Code ein, der mit deiner mobilen App generiert wurde:',
|
||||
'mfa_setup_login_notification' => 'Multi-Faktor-Methode konfiguriert. Bitte melde dich jetzt erneut mit der konfigurierten Methode an.',
|
||||
'mfa_verify_totp_desc' => 'Geben Sie den Code ein, der mit Ihrer mobilen App generiert wurde:',
|
||||
'mfa_setup_login_notification' => 'Multi-Faktor-Methode konfiguriert. Bitte melden Sie sich jetzt erneut mit der konfigurierten Methode an.',
|
||||
];
|
||||
|
||||
@@ -77,7 +77,7 @@ return [
|
||||
'status_active' => 'Aktiv',
|
||||
'status_inactive' => 'Inaktiv',
|
||||
'never' => 'Niemals',
|
||||
'none' => 'Keine',
|
||||
'none' => 'Nichts',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Header-Menü erweitern',
|
||||
|
||||
@@ -9,7 +9,7 @@ return [
|
||||
// General editor terms
|
||||
'general' => 'Allgemein',
|
||||
'advanced' => 'Erweitert',
|
||||
'none' => 'Keine',
|
||||
'none' => 'Keine Auswahl',
|
||||
'cancel' => 'Abbrechen',
|
||||
'save' => 'Speichern',
|
||||
'close' => 'Schließen',
|
||||
@@ -18,9 +18,9 @@ return [
|
||||
'left' => 'Links',
|
||||
'center' => 'Zentriert',
|
||||
'right' => 'Rechts',
|
||||
'top' => 'Oben',
|
||||
'top' => 'Nach oben',
|
||||
'middle' => 'Mittig',
|
||||
'bottom' => 'Unten',
|
||||
'bottom' => 'Nach unten',
|
||||
'width' => 'Breite',
|
||||
'height' => 'Höhe',
|
||||
'More' => 'Mehr',
|
||||
@@ -66,12 +66,11 @@ return [
|
||||
'insert_link_title' => 'Link einfügen/bearbeiten',
|
||||
'insert_horizontal_line' => 'Horizontale Linie einfügen',
|
||||
'insert_code_block' => 'Codeblock einfügen',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'Zeichnung einfügen/bearbeiten',
|
||||
'drawing_manager' => 'Zeichnungsmanager',
|
||||
'insert_media' => 'Medien einfügen/bearbeiten',
|
||||
'insert_media_title' => 'Medien einfügen/bearbeiten',
|
||||
'clear_formatting' => 'Formatierung löschen',
|
||||
'clear_formatting' => 'Formatierung zurücksetzen',
|
||||
'source_code' => 'Quellcode',
|
||||
'source_code_title' => 'Quellcode',
|
||||
'fullscreen' => 'Vollbild',
|
||||
@@ -131,8 +130,8 @@ return [
|
||||
'cell_border_double' => 'Doppelt',
|
||||
'cell_border_groove' => 'Rille',
|
||||
'cell_border_ridge' => 'Erhaben',
|
||||
'cell_border_inset' => 'Vertiefte Fläche',
|
||||
'cell_border_outset' => 'Erhabene Fläche',
|
||||
'cell_border_inset' => 'vertiefte Fläche',
|
||||
'cell_border_outset' => 'erhabene Fläche',
|
||||
'cell_border_none' => 'Keiner',
|
||||
'cell_border_hidden' => 'Versteckt',
|
||||
|
||||
@@ -140,7 +139,7 @@ return [
|
||||
'source' => 'Quelle',
|
||||
'alt_desc' => 'Alternative Beschreibung',
|
||||
'embed' => 'Einbetten',
|
||||
'paste_embed' => 'Füge deinen Einbettungscode unten ein:',
|
||||
'paste_embed' => 'Fügen Sie Ihren Einbettungscode unten ein:',
|
||||
'url' => 'URL',
|
||||
'text_to_display' => 'Anzuzeigender Text',
|
||||
'title' => 'Titel',
|
||||
@@ -161,7 +160,7 @@ return [
|
||||
'editor_tiny_license' => 'Dieser Editor wurde mit :tinyLink erstellt, das unter der MIT-Lizenz zur Verfügung gestellt wird.',
|
||||
'editor_tiny_license_link' => 'Die Copyright- und Lizenzdetails von TinyMCE findest du hier.',
|
||||
'save_continue' => 'Seite speichern & fortfahren',
|
||||
'callouts_cycle' => '(Drücke weiter, um durch die Typen zu schalten)',
|
||||
'callouts_cycle' => '(Drücken Sie weiter, um durch Typen umzuschalten)',
|
||||
'link_selector' => 'Inhalt verlinken',
|
||||
'shortcuts' => 'Kürzel',
|
||||
'shortcut' => 'Kürzel',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Berechtigungen',
|
||||
'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
|
||||
'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
|
||||
'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
|
||||
'permissions_intro' => 'Wenn benutzerdefinierte Berechtigungen aktiviert werden, überschreiben diese Einstellungen durch Rollen zugewiesene Berechtigungen.',
|
||||
'permissions_enable' => 'Benutzerdefinierte Berechtigungen aktivieren',
|
||||
'permissions_save' => 'Berechtigungen speichern',
|
||||
'permissions_owner' => 'Besitzer',
|
||||
'permissions_role_everyone_else' => 'Everyone Else',
|
||||
'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
|
||||
'permissions_role_override' => 'Override permissions for role',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Suchergebnisse',
|
||||
|
||||
@@ -92,9 +92,9 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung
|
||||
'maint_send_test_email_mail_text' => 'Glückwunsch! Da du diese E-Mail Benachrichtigung erhalten hast, scheinen deine E-Mail-Einstellungen korrekt konfiguriert zu sein.',
|
||||
'maint_recycle_bin_desc' => 'Gelöschte Regale, Bücher, Kapitel & Seiten werden in den Papierkorb verschoben, so dass sie wiederhergestellt oder dauerhaft gelöscht werden können. Ältere Einträge im Papierkorb können, in Abhängigkeit von der Systemkonfiguration, nach einer Weile automatisch entfernt werden.',
|
||||
'maint_recycle_bin_open' => 'Papierkorb öffnen',
|
||||
'maint_regen_references' => 'Verweise neu generieren',
|
||||
'maint_regen_references_desc' => 'Diese Aktion wird den Verweisindex innerhalb der Datenbank neu erstellen. Dies wird normalerweise automatisch ausgeführt, aber diese Aktion kann nützlich sein, um alte Inhalte oder Inhalte zu indizieren, die mittels inoffizieller Methoden hinzugefügt wurden.',
|
||||
'maint_regen_references_success' => 'Verweisindex wurde neu generiert!',
|
||||
'maint_regen_references' => 'Regenerate References',
|
||||
'maint_regen_references_desc' => 'This action will rebuild the cross-item reference index within the database. This is usually handled automatically but this action can be useful to index old content or content added via unofficial methods.',
|
||||
'maint_regen_references_success' => 'Reference index has been regenerated!',
|
||||
'maint_timeout_command_note' => 'Hinweis: Die Ausführung dieser Aktion kann einige Zeit in Anspruch nehmen, was in einigen Webumgebungen zu Timeout-Problemen führen kann. Alternativ kann diese Aktion auch mit einem Terminalbefehl ausgeführt werden.',
|
||||
|
||||
// Recycle Bin
|
||||
@@ -283,7 +283,6 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung
|
||||
'da' => 'Dänisch',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Spanisch',
|
||||
'es_AR' => 'Spanisch Argentinisch',
|
||||
'et' => 'Estnisch',
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Activity text strings.
|
||||
* Is used for all the text within activity logs & notifications.
|
||||
*/
|
||||
return [
|
||||
|
||||
// Pages
|
||||
'page_create' => 'σελίδα που δημιουργήθηκε',
|
||||
'page_create_notification' => 'Η σελίδα δημιουργήθηκε με επιτυχία',
|
||||
'page_update' => 'ενημερωμένη σελίδα',
|
||||
'page_update_notification' => 'Η σελίδα ενημερώθηκε με επιτυχία',
|
||||
'page_delete' => 'διαγραμμένη σελίδα',
|
||||
'page_delete_notification' => 'Η σελίδα διαγράφηκε επιτυχώς',
|
||||
'page_restore' => 'αποκατεστημένη σελίδα',
|
||||
'page_restore_notification' => 'Η σελίδα αποκαταστάθηκε με επιτυχία',
|
||||
'page_move' => 'Η σελίδα μετακινήθηκε',
|
||||
|
||||
// Chapters
|
||||
'chapter_create' => 'δημιουργήθηκε κεφάλαιο',
|
||||
'chapter_create_notification' => 'Το κεφάλαιο δημιουργήθηκε με επιτυχία',
|
||||
'chapter_update' => 'ενημερωμένο κεφάλαιο',
|
||||
'chapter_update_notification' => 'Το κεφάλαιο ενημερώθηκε με επιτυχία',
|
||||
'chapter_delete' => 'διαγραμμένο κεφάλαιο',
|
||||
'chapter_delete_notification' => 'Το κεφάλαιο διαγράφηκε επιτυχώς',
|
||||
'chapter_move' => 'το κεφάλαιο μετακινήθηκε',
|
||||
|
||||
// Books
|
||||
'book_create' => 'το βιβλίο δημιουργήθηκε',
|
||||
'book_create_notification' => 'Το βιβλίο δημιουργήθηκε με επιτυχία',
|
||||
'book_create_from_chapter' => 'Το κεφάλαιο μετατράπηκε επιτυχώς σε βιβλίο',
|
||||
'book_create_from_chapter_notification' => 'Το κεφάλαιο μετατράπηκε επιτυχώς σε βιβλίο',
|
||||
'book_update' => 'ενημερωμένο βιβλίο',
|
||||
'book_update_notification' => 'Το βιβλίο ενημερώθηκε με επιτυχία',
|
||||
'book_delete' => 'διαγραμμένο βιβλίο',
|
||||
'book_delete_notification' => 'Το βιβλίο διαγράφηκε επιτυχώς',
|
||||
'book_sort' => 'ταξινομημένο βιβλίο',
|
||||
'book_sort_notification' => 'Το βιβλίο επαναταξινομήθηκε επιτυχώς',
|
||||
|
||||
// Bookshelves
|
||||
'bookshelf_create' => 'δημιουργήθηκε ράφι',
|
||||
'bookshelf_create_notification' => 'Το ράφι δημιουργήθηκε με επιτυχία',
|
||||
'bookshelf_create_from_book' => 'το βιβλίο μετατράπηκε σε ράφι',
|
||||
'bookshelf_create_from_book_notification' => 'Το βιβλίο μετατράπηκε σε ράφι επιτυχώς',
|
||||
'bookshelf_update' => 'ενημερωμένο ράφι',
|
||||
'bookshelf_update_notification' => 'Το ράφι ενημερώθηκε επιτυχώς',
|
||||
'bookshelf_delete' => 'διαγραμμένο ράφι',
|
||||
'bookshelf_delete_notification' => 'Το ράφι ενημερώθηκε επιτυχώς',
|
||||
|
||||
// Favourites
|
||||
'favourite_add_notification' => '":name" προστέθηκε στα αγαπημένα σας',
|
||||
'favourite_remove_notification' => '":name" προστέθηκε στα αγαπημένα σας',
|
||||
|
||||
// MFA
|
||||
'mfa_setup_method_notification' => 'Η μέθοδος πολλαπλών παραγόντων διαμορφώθηκε επιτυχώς',
|
||||
'mfa_remove_method_notification' => 'Η μέθοδος πολλαπλών παραγόντων καταργήθηκε με επιτυχία',
|
||||
|
||||
// Webhooks
|
||||
'webhook_create' => 'Το webhook δημιουργήθηκε',
|
||||
'webhook_create_notification' => 'Το Webhook δημιουργήθηκε με επιτυχία',
|
||||
'webhook_update' => 'ενημερωμένο webhook',
|
||||
'webhook_update_notification' => 'Το Webhook ενημερώθηκε με επιτυχία',
|
||||
'webhook_delete' => 'διαγραμμένο webhook',
|
||||
'webhook_delete_notification' => 'Το Webhook διαγράφηκε επιτυχώς',
|
||||
|
||||
// Users
|
||||
'user_update_notification' => 'Ο Χρήστης ενημερώθηκε με επιτυχία',
|
||||
'user_delete_notification' => 'Ο Χρήστης αφαιρέθηκε επιτυχώς',
|
||||
|
||||
// Other
|
||||
'commented_on' => 'σχολίασε',
|
||||
'permissions_update' => 'ενημερωμένα δικαιώματα',
|
||||
];
|
||||
@@ -1,115 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Authentication Language Lines
|
||||
* The following language lines are used during authentication for various
|
||||
* messages that we need to display to the user.
|
||||
*/
|
||||
return [
|
||||
|
||||
'failed' => 'Αυτά τα διαπιστευτήρια δεν ταιριάζουν με τα αρχεία μας.',
|
||||
'throttle' => 'Πάρα πολλές προσπάθειες σύνδεσης. Δοκιμάστε ξανά σε :δευτερόλεπτα.',
|
||||
|
||||
// Login & Register
|
||||
'sign_up' => 'Εγγραφείτε',
|
||||
'log_in' => 'Σύνδεση',
|
||||
'log_in_with' => 'Συνδεθείτε με το :socialDriver',
|
||||
'sign_up_with' => 'Εγγραφείτε με το :socialDriver',
|
||||
'logout' => 'Αποσύνδεση',
|
||||
|
||||
'name' => 'Όνομα',
|
||||
'username' => 'Όνομα χρήστη',
|
||||
'email' => 'Email',
|
||||
'password' => 'Ο κωδικός σας',
|
||||
'password_confirm' => 'Επιβεβαιώστε τον κωδικό σας',
|
||||
'password_hint' => 'Πρέπει να αποτελείται από τουλάχιστον 8 χαρακτήρες',
|
||||
'forgot_password' => 'Ξεχάσατε τον κωδικό σας;',
|
||||
'remember_me' => 'Θυμήσου με',
|
||||
'ldap_email_hint' => 'Εισαγάγετε ένα email για χρήση για αυτόν τον λογαριασμό.',
|
||||
'create_account' => 'Δημιουργήστε λογαριασμό',
|
||||
'already_have_account' => 'Έχετε ήδη λογαριασμό;',
|
||||
'dont_have_account' => 'Δεν έχετε λογαριασμό;',
|
||||
'social_login' => 'Είσοδος με Social MEdia',
|
||||
'social_registration' => 'Εγγραφήμε Social MEdia ',
|
||||
'social_registration_text' => 'Εγγραφείτε και συνδεθείτε χρησιμοποιώντας άλλη υπηρεσία.',
|
||||
|
||||
'register_thanks' => 'Ευχαριστούμε για την εγγραφή!',
|
||||
'register_confirm' => 'Ελέγξτε το email σας και κάντε κλικ στο κουμπί επιβεβαίωσης για πρόσβαση στο :appName.',
|
||||
'registrations_disabled' => 'Οι εγγραφές είναι προς το παρόν απενεργοποιημένες',
|
||||
'registration_email_domain_invalid' => 'Αυτός ο τομέας ηλεκτρονικού ταχυδρομείου δεν έχει πρόσβαση σε αυτήν την εφαρμογή',
|
||||
'register_success' => 'Ευχαριστούμε για την εγγραφή! Είστε πλέον εγγεγραμμένοι και συνδεδεμένοι.',
|
||||
|
||||
// Login auto-initiation
|
||||
'auto_init_starting' => 'Προσπάθεια Σύνδεσης',
|
||||
'auto_init_starting_desc' => 'We\'re contacting your authentication system to start the login process. If there\'s no progress after 5 seconds you can try clicking the link below.',
|
||||
'auto_init_start_link' => 'Proceed with authentication',
|
||||
|
||||
// Password Reset
|
||||
'reset_password' => 'Επαναφορά κωδικού πρόσβασης',
|
||||
'reset_password_send_instructions' => 'Εισαγάγετε τη διεύθυνση του email σας παρακάτω και θα σας σταλεί ένα μήνυμα με έναν σύνδεσμο επαναφοράς του κωδικού πρόσβασης.',
|
||||
'reset_password_send_button' => 'Αποστολή Συνδέσμου Επαναφοράς',
|
||||
'reset_password_sent' => 'Ένας σύνδεσμος επαναφοράς κωδικού πρόσβασης θα αποσταλεί στο :email εάν αυτή η διεύθυνση email βρεθεί στο σύστημα.',
|
||||
'reset_password_success' => 'Ο κωδικός πρόσβασής σας επαναφέρθηκε με επιτυχία.',
|
||||
'email_reset_subject' => 'Επαναφέρετε τον κωδικό πρόσβασης :appName',
|
||||
'email_reset_text' => 'Λαμβάνετε αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου επειδή λάβαμε ένα αίτημα επαναφοράς κωδικού πρόσβασης για τον λογαριασμό σας.',
|
||||
'email_reset_not_requested' => 'Εάν δεν ζητήσατε επαναφορά του κωδικού πρόσβασης, δεν απαιτείται καμία περαιτέρω ενέργεια.',
|
||||
|
||||
// Email Confirmation
|
||||
'email_confirm_subject' => 'Επιβεβαιώστε το email σας στο :appName',
|
||||
'email_confirm_greeting' => 'Ευχαριστούμε για τη συμμετοχή σας στο :appName!',
|
||||
'email_confirm_text' => 'Επιβεβαιώστε τη διεύθυνση email σας κάνοντας κλικ στο παρακάτω κουμπί:',
|
||||
'email_confirm_action' => 'Επιβεβαίωση διεύθυνσης ηλεκτρονικού ταχυδρομείου',
|
||||
'email_confirm_send_error' => 'Απαιτείται επιβεβαίωση μέσω email, αλλά το σύστημα δεν μπόρεσε να στείλει το email. Επικοινωνήστε με τον διαχειριστή για να βεβαιωθείτε ότι το email έχει ρυθμιστεί σωστά.',
|
||||
'email_confirm_success' => 'Το email σας επιβεβαιώθηκε! Θα πρέπει τώρα να μπορείτε να συνδεθείτε χρησιμοποιώντας αυτήν τη διεύθυνση email.',
|
||||
'email_confirm_resent' => 'Το email επιβεβαίωσης στάλθηκε εκ νέου. Ελέγξτε τα εισερχόμενά σας.',
|
||||
|
||||
'email_not_confirmed' => 'Η διεύθυνση email δεν επιβεβαιώθηκε',
|
||||
'email_not_confirmed_text' => 'Η διεύθυνση email σας δεν έχει ακόμη επιβεβαιωθεί.',
|
||||
'email_not_confirmed_click_link' => 'Κάντε κλικ στο σύνδεσμο στο email που στάλθηκε λίγο μετά την εγγραφή σας.',
|
||||
'email_not_confirmed_resend' => 'Εάν δεν μπορείτε να βρείτε το email, μπορείτε να στείλετε ξανά το email επιβεβαίωσης υποβάλλοντας την παρακάτω φόρμα.',
|
||||
'email_not_confirmed_resend_button' => 'Ξαναστείλτε μήνυμα επιβεβαίωσης',
|
||||
|
||||
// User Invite
|
||||
'user_invite_email_subject' => 'Έχετε προσκληθεί να συμμετάσχετε :appName!',
|
||||
'user_invite_email_greeting' => 'Έχει δημιουργηθεί ένας λογαριασμός για εσάς στο :appName.',
|
||||
'user_invite_email_text' => 'Κάντε κλικ στο κουμπί παρακάτω για να ορίσετε έναν κωδικό πρόσβασης λογαριασμού και να αποκτήσετε πρόσβαση:',
|
||||
'user_invite_email_action' => 'Ορισμός κωδικού πρόσβασης λογαριασμού',
|
||||
'user_invite_page_welcome' => 'Καλωσόρισες στο :appName!',
|
||||
'user_invite_page_text' => 'Για να οριστικοποιήσετε τον λογαριασμό σας και να αποκτήσετε πρόσβαση, πρέπει να ορίσετε έναν κωδικό πρόσβασης που θα χρησιμοποιείται για να συνδεθείτε στο :appName σε μελλοντικές επισκέψεις.',
|
||||
'user_invite_page_confirm_button' => 'Επιβεβαίωση Κωδικού',
|
||||
'user_invite_success_login' => 'Ορίστηκε κωδικός πρόσβασης, θα πρέπει τώρα να μπορείτε να συνδεθείτε χρησιμοποιώντας τον καθορισμένο κωδικό πρόσβασης για να αποκτήσετε πρόσβαση στο :appName!',
|
||||
|
||||
// Multi-factor Authentication
|
||||
'mfa_setup' => 'Ρύθμιση ελέγχου ταυτότητας πολλαπλών παραγόντων',
|
||||
'mfa_setup_desc' => 'Ρυθμίστε τον έλεγχο ταυτότητας πολλαπλών παραγόντων ως ένα επιπλέον επίπεδο ασφάλειας για τον λογαριασμό χρήστη σας.',
|
||||
'mfa_setup_configured' => 'Έχει ήδη διαμορφωθεί',
|
||||
'mfa_setup_reconfigure' => 'Επαναδιαμόρφωση',
|
||||
'mfa_setup_remove_confirmation' => 'Είστε βέβαιοι ότι θέλετε να καταργήσετε αυτήν τη μέθοδο ελέγχου ταυτότητας πολλαπλών παραγόντων;',
|
||||
'mfa_setup_action' => 'Ρύθμιση',
|
||||
'mfa_backup_codes_usage_limit_warning' => 'Έχετε λιγότερους από 5 εφεδρικούς κωδικούς που απομένουν. Δημιουργήστε και αποθηκεύστε ένα νέο σύνολο προτού εξαντληθούν οι κωδικοί για να αποφύγετε τον αποκλεισμό του λογαριασμού σας.',
|
||||
'mfa_option_totp_title' => 'Εφαρμογή για κινητό',
|
||||
'mfa_option_totp_desc' => 'Για να χρησιμοποιήσετε τον έλεγχο ταυτότητας πολλαπλών παραγόντων, θα χρειαστείτε μια εφαρμογή για κινητά που υποστηρίζει TOTP, όπως το Google Authenticator, το Authy ή το Microsoft Authenticator.',
|
||||
'mfa_option_backup_codes_title' => 'Εφεδρικοί κωδικοί',
|
||||
'mfa_option_backup_codes_desc' => 'Αποθηκεύστε με ασφάλεια ένα σύνολο εφεδρικών κωδικών μίας χρήσης τους οποίους μπορείτε να εισαγάγετε για να επαληθεύσετε την ταυτότητά σας.',
|
||||
'mfa_gen_confirm_and_enable' => 'Επιβεβαίωση και ενεργοποίηση',
|
||||
'mfa_gen_backup_codes_title' => 'Ρύθμιση εφεδρικών κωδικών',
|
||||
'mfa_gen_backup_codes_desc' => 'Αποθηκεύστε την παρακάτω λίστα κωδικών σε ασφαλές μέρος. Κατά την πρόσβαση στο σύστημα, θα μπορείτε να χρησιμοποιήσετε έναν από τους κωδικούς ως δεύτερο μηχανισμό ελέγχου ταυτότητας.',
|
||||
'mfa_gen_backup_codes_download' => 'Λήψη κωδικών',
|
||||
'mfa_gen_backup_codes_usage_warning' => 'Κάθε κωδικός μπορεί να χρησιμοποιηθεί μόνο μία φορά',
|
||||
'mfa_gen_totp_title' => 'Ρύθμιση εφαρμογής για κινητά',
|
||||
'mfa_gen_totp_desc' => 'Για να χρησιμοποιήσετε τον έλεγχο ταυτότητας πολλαπλών παραγόντων, θα χρειαστείτε μια εφαρμογή για κινητά που υποστηρίζει TOTP, όπως το Google Authenticator, το Authy ή το Microsoft Authenticator.',
|
||||
'mfa_gen_totp_scan' => 'Σαρώστε τον παρακάτω κωδικό QR χρησιμοποιώντας την προτιμώμενη εφαρμογή ελέγχου ταυτότητας για να ξεκινήσετε.',
|
||||
'mfa_gen_totp_verify_setup' => 'Επαληθεύστε τη ρύθμιση',
|
||||
'mfa_gen_totp_verify_setup_desc' => 'Επαληθεύστε ότι όλα λειτουργούν εισάγοντας έναν κωδικό, που δημιουργήθηκε στην εφαρμογή ελέγχου ταυτότητας, στο παρακάτω πλαίσιο εισαγωγής:',
|
||||
'mfa_gen_totp_provide_code_here' => 'Εισάγετε τον κώδικα που δημιουργήθηκε από την εφαρμογή σας εδώ',
|
||||
'mfa_verify_access' => 'Επαλήθευση πρόσβασης',
|
||||
'mfa_verify_access_desc' => 'Ο λογαριασμός σας απαιτεί να επιβεβαιώσετε την ταυτότητά σας μέσω ενός πρόσθετου επιπέδου επαλήθευσης προτού σας παραχωρηθεί πρόσβαση. Επαληθεύστε χρησιμοποιώντας μία από τις διαμορφωμένες μεθόδους σας για να συνεχίσετε.',
|
||||
'mfa_verify_no_methods' => 'Δεν έχουν διαμορφωθεί μέθοδοι.',
|
||||
'mfa_verify_no_methods_desc' => 'Δεν βρέθηκαν μέθοδοι ελέγχου ταυτότητας πολλαπλών παραγόντων για τον λογαριασμό σας. Θα χρειαστεί να ρυθμίσετε τουλάχιστον μία μέθοδο προτού αποκτήσετε πρόσβαση.',
|
||||
'mfa_verify_use_totp' => 'Επαληθεύστε χρησιμοποιώντας μια εφαρμογή για κινητά',
|
||||
'mfa_verify_use_backup_codes' => 'Επαληθεύστε χρησιμοποιώντας έναν εφεδρικό κωδικό',
|
||||
'mfa_verify_backup_code' => 'Εφεδρικός κωδικός',
|
||||
'mfa_verify_backup_code_desc' => 'Εισαγάγετε έναν από τους υπόλοιπους εφεδρικούς κωδικούς σας παρακάτω:',
|
||||
'mfa_verify_backup_code_enter_here' => 'Εισαγάγετε τον εφεδρικό κωδικό εδώ:',
|
||||
'mfa_verify_totp_desc' => 'Εισαγάγετε τον κωδικό, που δημιουργήθηκε χρησιμοποιώντας την εφαρμογή σας για κινητά, παρακάτω:',
|
||||
'mfa_setup_login_notification' => 'Η μέθοδος πολλαπλών παραγόντων έχει διαμορφωθεί. Συνδεθείτε ξανά χρησιμοποιώντας τη ρυθμισμένη μέθοδο.',
|
||||
];
|
||||
@@ -1,104 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Common elements found throughout many areas of BookStack.
|
||||
*/
|
||||
return [
|
||||
|
||||
// Buttons
|
||||
'cancel' => 'Ακύρωση',
|
||||
'confirm' => 'Οκ',
|
||||
'back' => 'Πίσω',
|
||||
'save' => 'Αποθήκευση',
|
||||
'continue' => 'Συνέχεια',
|
||||
'select' => 'Επιλογή',
|
||||
'toggle_all' => 'Εναλλαγή όλων',
|
||||
'more' => 'Περισσότερα..',
|
||||
|
||||
// Form Labels
|
||||
'name' => 'Όνομα',
|
||||
'description' => 'Περιγραφή',
|
||||
'role' => 'Ρόλος',
|
||||
'cover_image' => 'Εικόνα εξώφυλλου',
|
||||
'cover_image_description' => 'Αυτή η εικόνα πρέπει να είναι περίπου 440x250px.',
|
||||
|
||||
// Actions
|
||||
'actions' => 'Ενέργειες',
|
||||
'view' => 'Προβολή',
|
||||
'view_all' => 'Προβολή όλων',
|
||||
'create' => 'Δημιουργία',
|
||||
'update' => 'Ενημέρωση',
|
||||
'edit' => 'Επεξεργασία',
|
||||
'sort' => 'Ταξινόμηση',
|
||||
'move' => 'Μετακίνηση',
|
||||
'copy' => 'Αντιγραφή',
|
||||
'reply' => 'Απάντηση',
|
||||
'delete' => 'Διαγραφή',
|
||||
'delete_confirm' => 'Επιβεβαίωση Διαγραφής',
|
||||
'search' => 'Αναζήτηση',
|
||||
'search_clear' => 'Εκκαθάριση Αναζήτησης',
|
||||
'reset' => 'Επαναφορά',
|
||||
'remove' => 'Αφαίρεση',
|
||||
'add' => 'Προσθήκη',
|
||||
'configure' => 'Διαμόρφωση',
|
||||
'fullscreen' => 'Πλήρης οθόνη',
|
||||
'favourite' => 'Αγαπημένα',
|
||||
'unfavourite' => 'Αφαίρεση από Αγαπημένα',
|
||||
'next' => 'Επόμενη',
|
||||
'previous' => 'Προηγούμενη',
|
||||
'filter_active' => 'Ενεργό φίλτρο:',
|
||||
'filter_clear' => 'Διαγραφή φίλτρου',
|
||||
'download' => 'Λήψη',
|
||||
'open_in_tab' => 'Άνοιγμα σε Καρτέλα',
|
||||
|
||||
// Sort Options
|
||||
'sort_options' => 'Επιλογές ταξινόμησης',
|
||||
'sort_direction_toggle' => 'Εναλλαγή κατεύθυνσης ταξινόμησης',
|
||||
'sort_ascending' => 'Αύξουσα ταξινόμηση',
|
||||
'sort_descending' => 'Ταξινόμηση Φθίνουσα',
|
||||
'sort_name' => 'Ονομα',
|
||||
'sort_default' => 'Προεπιλογή',
|
||||
'sort_created_at' => 'Δημιουργήθηκε',
|
||||
'sort_updated_at' => 'Ενημερώθηκε',
|
||||
|
||||
// Misc
|
||||
'deleted_user' => 'Διαγραμμένος χρήστης',
|
||||
'no_activity' => 'Δεν υπάρχει δραστηριότητα προς εμφάνιση',
|
||||
'no_items' => 'Δεν υπάρχουν διαθέσιμα στοιχεία',
|
||||
'back_to_top' => 'Επιστροφή στην κορυφή',
|
||||
'skip_to_main_content' => 'Μετάβαση στο κύριο περιεχόμενο',
|
||||
'toggle_details' => 'Εναλλαγή λεπτομερειών',
|
||||
'toggle_thumbnails' => 'Εναλλαγή μικρογραφιών',
|
||||
'details' => 'Λεπτομέριες',
|
||||
'grid_view' => 'Προβολή σε πλέγμα',
|
||||
'list_view' => 'Προβολή σε λίστα',
|
||||
'default' => 'Προκαθορισμένο',
|
||||
'breadcrumb' => 'Μπάρα πλοήγησης',
|
||||
'status' => 'Κατάσταση',
|
||||
'status_active' => 'Ενεργός',
|
||||
'status_inactive' => 'Αδρανής',
|
||||
'never' => 'Ποτέ',
|
||||
'none' => 'Κανένας',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'Αναπτύξτε το Head Menu',
|
||||
'profile_menu' => 'Μενού Προφίλ',
|
||||
'view_profile' => 'Προβολή προφίλ',
|
||||
'edit_profile' => 'Επεξεργασία προφίλ',
|
||||
'dark_mode' => 'Σκουρόχρωμη εμφάνιση',
|
||||
'light_mode' => 'Ανοιχτόχρωμη εμφάνιση',
|
||||
|
||||
// Layout tabs
|
||||
'tab_info' => 'Πληροφορίες',
|
||||
'tab_info_label' => 'Καρτέλα: Εμφάνιση δευτερευουσών πληροφοριών',
|
||||
'tab_content' => 'Περιεχόμενο',
|
||||
'tab_content_label' => 'Καρτέλα: Εμφάνιση κύριου περιεχομένου',
|
||||
|
||||
// Email Content
|
||||
'email_action_help' => 'Εάν αντιμετωπίζετε πρόβλημα κάνοντας κλικ στο κουμπί ":actionText", αντιγράψτε και επικολλήστε την παρακάτω διεύθυνση URL στο πρόγραμμα περιήγησής σας στον ιστό:',
|
||||
'email_rights' => 'Ολα τα πνευματικά δικαιώματα διατηρούνται',
|
||||
|
||||
// Footer Link Options
|
||||
// Not directly used but available for convenience to users.
|
||||
'privacy_policy' => 'Πολιτική Απορρήτου',
|
||||
'terms_of_service' => 'Όροι χρήσης',
|
||||
];
|
||||
@@ -1,34 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Text used in custom JavaScript driven components.
|
||||
*/
|
||||
return [
|
||||
|
||||
// Image Manager
|
||||
'image_select' => 'Επιλογή εικόνας',
|
||||
'image_all' => 'Όλες',
|
||||
'image_all_title' => 'Δείτε όλες τις εικόνες που υπάρχουν στο Server',
|
||||
'image_book_title' => 'Προβολή εικόνων που έχουν μεταφορτωθεί σε αυτό το βιβλίο',
|
||||
'image_page_title' => 'Προβολή εικόνων που έχουν δημοσιευτεί σε αυτήν τη σελίδα',
|
||||
'image_search_hint' => 'Αναζήτηση με όνομα εικόνας',
|
||||
'image_uploaded' => 'Μεταφορτώθηκε :uploadedDate',
|
||||
'image_load_more' => 'Φόρτωσε περισσότερα',
|
||||
'image_image_name' => 'Όνομα εικόνας',
|
||||
'image_delete_used' => 'Αυτή η εικόνα χρησιμοποιείται στις παρακάτω σελίδες.',
|
||||
'image_delete_confirm_text' => 'Είστε σίγουροι ότι θέλετε να διαγράψετε αυτήν την εικόνα;',
|
||||
'image_select_image' => 'Επιλέξτε Εικόνα',
|
||||
'image_dropzone' => 'Σύρτε ή κάντε κλικ εδώ για μεταφόρτωση εικόνων',
|
||||
'images_deleted' => 'Οι εικόνες διαγράφηκαν',
|
||||
'image_preview' => 'Προεπισκόπηση εικόνας',
|
||||
'image_upload_success' => 'Η εικόνα μεταφορτώθηκε με επιτυχία',
|
||||
'image_update_success' => 'Τα στοιχεία της εικόνας ενημερώθηκαν με επιτυχία',
|
||||
'image_delete_success' => 'Η εικόνα διαγράφηκε επιτυχώς',
|
||||
'image_upload_remove' => 'Αφαίρεση',
|
||||
|
||||
// Code Editor
|
||||
'code_editor' => 'Επεξεργασία κώδικα',
|
||||
'code_language' => 'Γλώσσα κώδικα',
|
||||
'code_content' => 'Περιεχόμενο κώδικα',
|
||||
'code_session_history' => 'Ιστορικό συνεδρίας',
|
||||
'code_save' => 'Αποθήκευση Κώδικα',
|
||||
];
|
||||
@@ -1,172 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Page Editor Lines
|
||||
* Contains text strings used within the user interface of the
|
||||
* WYSIWYG page editor. Some Markdown editor strings may still
|
||||
* exist in the 'entities' file instead since this was added later.
|
||||
*/
|
||||
return [
|
||||
// General editor terms
|
||||
'general' => 'Γενικά',
|
||||
'advanced' => 'Για Προχωρημένους',
|
||||
'none' => 'None',
|
||||
'cancel' => 'Ακύρωση',
|
||||
'save' => 'Αποθήκευση',
|
||||
'close' => 'Κλείσιμο',
|
||||
'undo' => 'Αναίρεση',
|
||||
'redo' => 'Επανάληψη',
|
||||
'left' => 'Αριστερά',
|
||||
'center' => 'Κέντρο',
|
||||
'right' => 'Δεξιά',
|
||||
'top' => 'Πάνω',
|
||||
'middle' => 'Κέντρο',
|
||||
'bottom' => 'Κάτω',
|
||||
'width' => 'Πλάτος',
|
||||
'height' => 'Ύψος',
|
||||
'More' => 'Περισσότερα',
|
||||
'select' => 'Επιλέξτε...',
|
||||
|
||||
// Toolbar
|
||||
'formats' => 'Μορφοποίηση',
|
||||
'header_large' => 'Μεγάλη κεφαλίδα',
|
||||
'header_medium' => 'Μεσαία κεφαλίδα',
|
||||
'header_small' => 'Μικρή κεφαλίδα',
|
||||
'header_tiny' => 'Μικροσκοπική κεφαλίδα',
|
||||
'paragraph' => 'Παράγραφος',
|
||||
'blockquote' => 'Blockquote',
|
||||
'inline_code' => 'Ενσωματωμένος κωδικός',
|
||||
'callouts' => 'Επεξηγήσεις',
|
||||
'callout_information' => 'Πληροφορίες',
|
||||
'callout_success' => 'Επιτυχία',
|
||||
'callout_warning' => 'Προειδοποίηση',
|
||||
'callout_danger' => 'Κίνδυνος',
|
||||
'bold' => 'Έντονη γραφή',
|
||||
'italic' => 'Πλάγια γραφή',
|
||||
'underline' => 'Υπογράμμιση',
|
||||
'strikethrough' => 'Διακριτή διαγραφή',
|
||||
'superscript' => 'Εκθέτης',
|
||||
'subscript' => 'Δείκτης',
|
||||
'text_color' => 'Χρώμα κειμένου',
|
||||
'custom_color' => 'Προσαρμογή χρώματος',
|
||||
'remove_color' => 'Αφαίρεση χρώματος',
|
||||
'background_color' => 'Χρώμα φόντου',
|
||||
'align_left' => 'Στοίχιση αριστερά',
|
||||
'align_center' => 'Στοίχιση κέντρο',
|
||||
'align_right' => 'Στοίχιση δεξιά',
|
||||
'align_justify' => 'Πλήρης στοίχιση',
|
||||
'list_bullet' => 'Λίστα με κουκκίδες',
|
||||
'list_numbered' => 'Λίστα με αρίθμηση',
|
||||
'list_task' => 'Λίστα εργασιών',
|
||||
'indent_increase' => 'Αύξηση εσοχήςt',
|
||||
'indent_decrease' => 'Μείωση εσοχής',
|
||||
'table' => 'Πίνακας',
|
||||
'insert_image' => 'Εισαγωγή εικόνας',
|
||||
'insert_image_title' => 'Εισαγωγή/Επεξεργασία εικόνας',
|
||||
'insert_link' => 'Εισαγωγή/επεξεργασία συνδέσμου',
|
||||
'insert_link_title' => 'Εισαγωγή/Επεξεργασία συνδέσμου',
|
||||
'insert_horizontal_line' => 'Εισαγωγή οριζόντιας γραμμής',
|
||||
'insert_code_block' => 'Εισαγωγή μπλοκ κώδικα',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'Εισαγωγή/Επεξεργασία σχεδίου',
|
||||
'drawing_manager' => 'Διαχειριστής σχεδίασης',
|
||||
'insert_media' => 'Εισαγωγή/Επεξεργασία πολυμέσων',
|
||||
'insert_media_title' => 'Εισαγωγή/Επεξεργασία πολυμέσων',
|
||||
'clear_formatting' => 'Διαγραφή μορφοποίησης',
|
||||
'source_code' => 'Πηγαίος κώδικας',
|
||||
'source_code_title' => 'Πηγαίος κώδικας',
|
||||
'fullscreen' => 'Πλήρης οθόνη',
|
||||
'image_options' => 'Επιλογές εικόνας',
|
||||
|
||||
// Tables
|
||||
'table_properties' => 'Ιδιότητες πίνακα',
|
||||
'table_properties_title' => 'Ιδιότητες πίνακα',
|
||||
'delete_table' => 'Διαγραφή πίνακα',
|
||||
'insert_row_before' => 'Εισαγωγή γραμμής πάνω',
|
||||
'insert_row_after' => 'Εισαγωγή γραμμής κάτω',
|
||||
'delete_row' => 'Διαγραφή γραμμής',
|
||||
'insert_column_before' => 'Εισαγωγή στήλης αριστερά',
|
||||
'insert_column_after' => 'Εισαγωγή στήλης δεξιά',
|
||||
'delete_column' => 'Διαγραφή στήλης',
|
||||
'table_cell' => 'Κελί',
|
||||
'table_row' => 'Γραμμή',
|
||||
'table_column' => 'Στήλη',
|
||||
'cell_properties' => 'Ιδιότητες κελιού',
|
||||
'cell_properties_title' => 'Ιδιότητες κελιού',
|
||||
'cell_type' => 'Τύπος κελιού',
|
||||
'cell_type_cell' => 'Κελί',
|
||||
'cell_scope' => 'Scope',
|
||||
'cell_type_header' => 'Κεφαλίδα κελιού',
|
||||
'merge_cells' => 'Συγχώνευση κελιών',
|
||||
'split_cell' => 'Διαίρεση κελιού',
|
||||
'table_row_group' => 'Ομάδα γραμμών',
|
||||
'table_column_group' => 'Ομάδα στηλών',
|
||||
'horizontal_align' => 'Οριζόντια στοίχιση',
|
||||
'vertical_align' => 'Κάθετη στοίχιση',
|
||||
'border_width' => 'Πάχος περιγράμματος',
|
||||
'border_style' => 'Στυλ περιγράμματος',
|
||||
'border_color' => 'Χρώμα περιγράμματος',
|
||||
'row_properties' => 'Ιδιότητες γραμμής',
|
||||
'row_properties_title' => 'Ιδιότητες γραμμής',
|
||||
'cut_row' => 'Αποκοπή γραμμής',
|
||||
'copy_row' => 'Αντιγραφή γραμμής',
|
||||
'paste_row_before' => 'Επικόλληση γραμμής πάνω',
|
||||
'paste_row_after' => 'Επικόλληση γραμμής κάτω',
|
||||
'row_type' => 'Τύπος γραμμής',
|
||||
'row_type_header' => 'Κεφαλίδα',
|
||||
'row_type_body' => 'Σώμα',
|
||||
'row_type_footer' => 'Υποσέλιδο',
|
||||
'alignment' => 'Ευθυγράμμιση',
|
||||
'cut_column' => 'Αποκοπή στήλης',
|
||||
'copy_column' => 'Αντιγραφή στήλης',
|
||||
'paste_column_before' => 'Επικόλληση στήλης αριστερά',
|
||||
'paste_column_after' => 'Επικόλληση στήλης δεξιά',
|
||||
'cell_padding' => 'Περιθώριο κελιών',
|
||||
'cell_spacing' => 'Απόσταση κελιών',
|
||||
'caption' => 'Τίτλος',
|
||||
'show_caption' => 'Εμφάνιση Τίτλου',
|
||||
'constrain' => 'Περιορισμός αναλογιών',
|
||||
'cell_border_solid' => 'Συμπαγής γραμμή',
|
||||
'cell_border_dotted' => 'Γραμμή με κουκκίδες',
|
||||
'cell_border_dashed' => 'Διακεκομμένη γραμμή',
|
||||
'cell_border_double' => 'Διπλή γραμμή',
|
||||
'cell_border_groove' => 'Groove',
|
||||
'cell_border_ridge' => 'Κορυφογραμμή',
|
||||
'cell_border_inset' => 'Inset',
|
||||
'cell_border_outset' => 'Outset',
|
||||
'cell_border_none' => 'Χωρίς',
|
||||
'cell_border_hidden' => '΄Διαφανές',
|
||||
|
||||
// Images, links, details/summary & embed
|
||||
'source' => 'Source',
|
||||
'alt_desc' => 'Εναλλακτική περιγραφή',
|
||||
'embed' => 'Ενσωματωμένο',
|
||||
'paste_embed' => 'Επικολλήστε τον κώδικα ενσωμάτωσης παρακάτω:',
|
||||
'url' => 'URL',
|
||||
'text_to_display' => 'Κείμενο εμφάνισης',
|
||||
'title' => 'Τίτλος',
|
||||
'open_link' => 'Άνοιγμα συνδέσμου σε...',
|
||||
'open_link_current' => 'Τρέχον παράθυρο',
|
||||
'open_link_new' => 'Νέο παράθυρο',
|
||||
'insert_collapsible' => 'Εισαγωγή πτυσσόμενου μπλοκ',
|
||||
'collapsible_unwrap' => 'Μετατροπή πτυσσόμενου μπλοκ σε παράγραφο',
|
||||
'edit_label' => 'Επεξεργασία ετικέτας',
|
||||
'toggle_open_closed' => 'Εναλλαγή ανοίγματος/κλεισίματος',
|
||||
'collapsible_edit' => 'Επεξεργασία πτυσσόμενου μπλοκ',
|
||||
'toggle_label' => 'Εναλλαγή ετικέτας',
|
||||
|
||||
// About view
|
||||
'about' => 'Σχετικά',
|
||||
'about_title' => 'Σχετικά με τον επεξεργαστή WYSIWYG',
|
||||
'editor_license' => 'Άδεια εκδότη και πνευματικά δικαιώματα',
|
||||
'editor_tiny_license' => 'Αυτός ο επεξεργαστής έχει δημιουργηθεί χρησιμοποιώντας :tinyLink που παρέχεται με την άδεια MIT.',
|
||||
'editor_tiny_license_link' => 'Τα πνευματικά δικαιώματα και τα στοιχεία άδειας χρήσης του TinyMCE μπορείτε να τα βρείτε εδώ.',
|
||||
'save_continue' => 'Αποθήκευση σελίδας & Συνέχεια',
|
||||
'callouts_cycle' => '(Συνεχίστε να πατάτε για εναλλαγή μεταξύ τύπων)',
|
||||
'link_selector' => 'Σύνδεσμος προς το περιεχόμενο',
|
||||
'shortcuts' => 'Συντομεύσεις',
|
||||
'shortcut' => 'Συντόμευση',
|
||||
'shortcuts_intro' => 'Οι ακόλουθες συντομεύσεις είναι διαθέσιμες στο πρόγραμμα επεξεργασίας:',
|
||||
'windows_linux' => '(Windows/Linux)',
|
||||
'mac' => '(Mac)',
|
||||
'description' => 'Περιγραφή',
|
||||
];
|
||||
@@ -1,382 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Text used for 'Entities' (Document Structure Elements) such as
|
||||
* Books, Shelves, Chapters & Pages
|
||||
*/
|
||||
return [
|
||||
|
||||
// Shared
|
||||
'recently_created' => 'Δημιουργήθηκε Πρόσφατα',
|
||||
'recently_created_pages' => 'Πρόσφατα Δημιουργημένες Σελίδες',
|
||||
'recently_updated_pages' => 'Πρόσφατες Ενημερώσεις',
|
||||
'recently_created_chapters' => 'Πρόσφατα Δημιουργημένα Κεφάλαια',
|
||||
'recently_created_books' => 'Πρόσφατα Δημιουργημένα Βιβλία',
|
||||
'recently_created_shelves' => 'Πρόσφατα Δημιουργημένα Ράφια',
|
||||
'recently_update' => 'Ενημερώθηκε πρόσφατα',
|
||||
'recently_viewed' => 'Πρόσφατα προβεβλημένα',
|
||||
'recent_activity' => 'Πρόσφατη Δραστηριότητα',
|
||||
'create_now' => 'Δημιουργία ενός τώρα',
|
||||
'revisions' => 'Αναθεωρήσεις',
|
||||
'meta_revision' => 'Αναθεώρηση #:revisionCount',
|
||||
'meta_created' => 'Δημιουργήθηκε :timeLength',
|
||||
'meta_created_name' => 'Δημιουργήθηκε :timeLength by :user',
|
||||
'meta_updated' => 'Ενημερώθηκε :timeLength',
|
||||
'meta_updated_name' => 'Ενημερώθηκε :timeLength by :user',
|
||||
'meta_owned_name' => 'Ανήκει στον :user',
|
||||
'meta_reference_page_count' => 'Αναφορά σε 1 σελίδα"Αναφερόμενη στο :count σελίδες',
|
||||
'entity_select' => 'Επιλογή Οντότητας',
|
||||
'entity_select_lack_permission' => 'Δεν έχετε τα απαιτούμενα δικαιώματα για να επιλέξετε αυτό το στοιχείο',
|
||||
'images' => 'Εικόνες',
|
||||
'my_recent_drafts' => 'Τα πρόσφατα προσχέδιά μου',
|
||||
'my_recently_viewed' => 'Είδα πρόσφατα',
|
||||
'my_most_viewed_favourites' => 'Συχνά Αγαπημένα',
|
||||
'my_favourites' => 'Τα αγαπημένα μου',
|
||||
'no_pages_viewed' => 'Δεν έχετε δει καμία σελίδα',
|
||||
'no_pages_recently_created' => 'Δεν έχουν δημιουργηθεί πρόσφατα σελίδες',
|
||||
'no_pages_recently_updated' => 'Δεν υπάρχουν πρόσφατα ενημερώσεις σελίδων',
|
||||
'export' => 'Εξαγωγή',
|
||||
'export_html' => 'Αρχείο Web',
|
||||
'export_pdf' => 'Αρχείο PDF',
|
||||
'export_text' => 'Αρχείο Απλού κειμένου',
|
||||
'export_md' => 'Αρχείο Markdown',
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Δικαιώματα',
|
||||
'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
|
||||
'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
|
||||
'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
|
||||
'permissions_save' => 'Αποθήκευση Δικαιωμάτων',
|
||||
'permissions_owner' => 'Ιδιοκτήτης / Κάτοχος',
|
||||
'permissions_role_everyone_else' => 'Everyone Else',
|
||||
'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
|
||||
'permissions_role_override' => 'Override permissions for role',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Αποτελέσματα αναζήτησης',
|
||||
'search_total_results_found' => ':count αποτέλεσμα που βρέθηκε:count συνολικά αποτελέσματα που βρέθηκαν',
|
||||
'search_clear' => 'Καθαρισμός αναζήτησης',
|
||||
'search_no_pages' => 'Καμία σελίδα δεν ταιριάζει με αυτήν την αναζήτηση',
|
||||
'search_for_term' => 'Αναζήτηση για :term',
|
||||
'search_more' => 'Περισσότερα αποτελέσματα',
|
||||
'search_advanced' => 'Προχωρημένη Αναζήτηση',
|
||||
'search_terms' => 'Αναζήτηση Όρων',
|
||||
'search_content_type' => 'Τύπος περιεχομένου',
|
||||
'search_exact_matches' => 'Ακριβείς αντιστοιχίες',
|
||||
'search_tags' => 'Αναζητήσεις Ετικετών',
|
||||
'search_options' => 'Επιλογές',
|
||||
'search_viewed_by_me' => 'Προβλήθηκε από μένα',
|
||||
'search_not_viewed_by_me' => 'Δεν προβλήθηκε από εμένα',
|
||||
'search_permissions_set' => 'Τα δικαιώματα ορίστηκαν',
|
||||
'search_created_by_me' => 'Δημιουργήθηκε από εμένα',
|
||||
'search_updated_by_me' => 'Ενημερώθηκε από εμένα',
|
||||
'search_owned_by_me' => 'Ανήκει σε μένα',
|
||||
'search_date_options' => 'Επιλογές Ημερομηνίας',
|
||||
'search_updated_before' => 'Ενημερώθηκε πριν',
|
||||
'search_updated_after' => 'Ενημερώθηκε μετά',
|
||||
'search_created_before' => 'Δημιουργήθηκε πριν',
|
||||
'search_created_after' => 'Δημιουργήθηκε μετά',
|
||||
'search_set_date' => 'Ορισμός Ημερομηνίας',
|
||||
'search_update' => 'Ενημέρωση Αναζήτησης',
|
||||
|
||||
// Shelves
|
||||
'shelf' => 'Ράφι',
|
||||
'shelves' => 'Ράφια',
|
||||
'x_shelves' => ':count Ράφι|:count Ράφια',
|
||||
'shelves_empty' => 'Δεν έχουν δημιουργηθεί ράφια',
|
||||
'shelves_create' => 'Δημιουργία νέου ραφιού',
|
||||
'shelves_popular' => 'Δημοφιλή Ράφια',
|
||||
'shelves_new' => 'Νέα Ράφια',
|
||||
'shelves_new_action' => 'Νέο Ράφι',
|
||||
'shelves_popular_empty' => 'Τα πιο δημοφιλή ράφια θα εμφανιστούν εδώ.',
|
||||
'shelves_new_empty' => 'Τα πιο πρόσφατα ράφια που δημιουργήθηκαν θα εμφανιστούν εδώ.',
|
||||
'shelves_save' => 'Αποθήκευση Ραφιού',
|
||||
'shelves_books' => 'Βιβλία σε αυτό το Ράφι',
|
||||
'shelves_add_books' => 'Διαθέσιμα Βιβλία, για προσθήκη στο Ράφι',
|
||||
'shelves_drag_books' => 'Σύρετε εδώ βιβλία της διπλανή λίστας, για να τα προσθέσετε στο Ράφι',
|
||||
'shelves_empty_contents' => 'Σε αυτό το Ράφι δεν έχουν εκχωρηθεί βιβλία',
|
||||
'shelves_edit_and_assign' => 'Επεξεργαστείτε το Ράφι για να εκχωρήσετε βιβλία',
|
||||
'shelves_edit_named' => 'Επεξεργασία Ραφιού :name',
|
||||
'shelves_edit' => 'Επεξεργασία Ραφιού',
|
||||
'shelves_delete' => 'Διαγραφή Ραφιού',
|
||||
'shelves_delete_named' => 'Delete Bookshelf :name',
|
||||
'shelves_delete_explain' => "This will delete the bookshelf with the name ':name'. Contained books will not be deleted.",
|
||||
'shelves_delete_confirmation' => 'Are you sure you want to delete this bookshelf?',
|
||||
'shelves_permissions' => 'Bookshelf Permissions',
|
||||
'shelves_permissions_updated' => 'Bookshelf Permissions Updated',
|
||||
'shelves_permissions_active' => 'Bookshelf Permissions Active',
|
||||
'shelves_permissions_cascade_warning' => 'Permissions on bookshelves do not automatically cascade to contained books. This is because a book can exist on multiple shelves. Permissions can however be copied down to child books using the option found below.',
|
||||
'shelves_copy_permissions_to_books' => 'Αντιγραφή δικαιωμάτων στα βιβλία',
|
||||
'shelves_copy_permissions' => 'Αντιγραφή Δικαιωμάτων',
|
||||
'shelves_copy_permissions_explain' => 'This will apply the current permission settings of this bookshelf to all books contained within. Before activating, ensure any changes to the permissions of this bookshelf have been saved.',
|
||||
'shelves_copy_permission_success' => 'Bookshelf permissions copied to :count books',
|
||||
|
||||
// Books
|
||||
'book' => 'Βιβλίο',
|
||||
'books' => 'Βιβλία',
|
||||
'x_books' => ':count Βιβλίο|:count Βιβλία',
|
||||
'books_empty' => 'Δεν έχουν δημιουργηθεί βιβλία ακόμα',
|
||||
'books_popular' => 'Δημοφιλή Βιβλία',
|
||||
'books_recent' => 'Πρόσφατα Βιβλία',
|
||||
'books_new' => 'Νέα Βιβλία',
|
||||
'books_new_action' => 'Νέο βιβλίο',
|
||||
'books_popular_empty' => 'Τα πιο δημοφιλή εμφανίζονται εδώ.',
|
||||
'books_new_empty' => 'Θα εμφανιστούν εδώ, αυτά που δημιουργήθηκαν πιο πρόσφατα.',
|
||||
'books_create' => 'Δημιουργία νέου βιβλίου',
|
||||
'books_delete' => 'Διαγραφή Βιβλίου',
|
||||
'books_delete_named' => 'Διαγραφή Βιβλίου :bookname',
|
||||
'books_delete_explain' => 'Αυτό θα διαγράψει το βιβλίο με το όνομα \':bookName\'. Όλες οι σελίδες και τα κεφάλαια θα αφαιρεθούν.',
|
||||
'books_delete_confirmation' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το βιβλίο;',
|
||||
'books_edit' => 'Επεξεργασία Βιβλίου',
|
||||
'books_edit_named' => 'Επεξεργασία Βιβλίου :bookname',
|
||||
'books_form_book_name' => 'Όνομα Βιβλίου',
|
||||
'books_save' => 'Αποθήκευση Βιβλίου',
|
||||
'books_permissions' => 'Άδειες Βιβλίου',
|
||||
'books_permissions_updated' => 'Τα Δικαιώματα Βιβλίου Ενημερώθηκαν',
|
||||
'books_empty_contents' => 'Δεν έχουν δημιουργηθεί σελίδες ή κεφάλαια για αυτό το βιβλίο.',
|
||||
'books_empty_create_page' => 'Δημιουργία νέας σελίδας',
|
||||
'books_empty_sort_current_book' => 'Ταξινόμηση του τρέχοντος βιβλίου',
|
||||
'books_empty_add_chapter' => 'Προσθήκη κεφαλαίου',
|
||||
'books_permissions_active' => 'Ενεργά Δικαιώματα ´Βιβλίου',
|
||||
'books_search_this' => 'Αναζήτηση σε αυτό το βιβλίο',
|
||||
'books_navigation' => 'Πλοήγηση Βιβλίου',
|
||||
'books_sort' => 'Ταξινόμηση Περιεχομένων Βιβλίου',
|
||||
'books_sort_named' => 'Ταξινόμηση Βιβλίου :bookname',
|
||||
'books_sort_name' => 'Ταξινόμηση κατά όνομα',
|
||||
'books_sort_created' => 'Ταξινόμηση κατά ημερομηνία δημιουργίας',
|
||||
'books_sort_updated' => 'Ταξινόμηση κατά ημερομηνία ενημέρωσης',
|
||||
'books_sort_chapters_first' => 'Τα Κεφάλαια Πρώτα',
|
||||
'books_sort_chapters_last' => 'Τελευταία Κεφάλαια',
|
||||
'books_sort_show_other' => 'Εμφάνιση Άλλων Βιβλίων',
|
||||
'books_sort_save' => 'Αποθήκευση Νέας Ταξινόμησης',
|
||||
'books_copy' => 'Αντιγραφή Βιβλίου',
|
||||
'books_copy_success' => 'Το βιβλίο αντιγράφηκε επιτυχώς',
|
||||
|
||||
// Chapters
|
||||
'chapter' => 'Κεφάλαιο',
|
||||
'chapters' => 'Κεφάλαια',
|
||||
'x_chapters' => ':count Κεφάλαιο:count Κεφάλαια',
|
||||
'chapters_popular' => 'Δημοφιλή Κεφάλαια',
|
||||
'chapters_new' => 'Νέο Κεφάλαιο',
|
||||
'chapters_create' => 'Δημιουργία Νέου Κεφαλαίου',
|
||||
'chapters_delete' => 'Διαγραφή Κεφαλαίου',
|
||||
'chapters_delete_named' => 'Διαγραφή Κεφαλαίου :chapterName',
|
||||
'chapters_delete_explain' => 'Αυτό θα διαγράψει το κεφάλαιο με το όνομα \':chapterName\'. Όλες οι σελίδες που υπάρχουν μέσα σε αυτό το κεφάλαιο θα διαγραφούν επίσης.',
|
||||
'chapters_delete_confirm' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το κεφάλαιο;',
|
||||
'chapters_edit' => 'Επεξεργασία Κεφαλαίου',
|
||||
'chapters_edit_named' => 'Επεξεργασία Κεφαλαίου :chapterName',
|
||||
'chapters_save' => 'Αποθήκευση Κεφαλαίου',
|
||||
'chapters_move' => 'Μετακίνηση Κεφαλαίου',
|
||||
'chapters_move_named' => 'Μετακίνηση Κεφαλαίου :chapterName',
|
||||
'chapter_move_success' => 'Το κεφάλαιο μεταφέρθηκε στο:bookName',
|
||||
'chapters_copy' => 'Αντιγραφή Κεφαλαίου',
|
||||
'chapters_copy_success' => 'Το κεφάλαιο αντιγράφηκε επιτυχώς',
|
||||
'chapters_permissions' => 'Δικαιώματα Κεφαλαίου',
|
||||
'chapters_empty' => 'Καμία σελίδα δεν βρίσκεται σε αυτό το κεφάλαιο.',
|
||||
'chapters_permissions_active' => 'Ενεργά Δικαιώματα Κεφαλαίου',
|
||||
'chapters_permissions_success' => 'Τα Δικαιώματα Κεφαλαίου Ενημερώθηκαν',
|
||||
'chapters_search_this' => 'Αναζήτηση σε αυτό το κεφάλαιο',
|
||||
'chapter_sort_book' => 'Ταξινόμηση Βιβλίου',
|
||||
|
||||
// Pages
|
||||
'page' => 'Σελίδα',
|
||||
'pages' => 'Σελίδες',
|
||||
'x_pages' => ':count Σελίδα:count Σελίδες',
|
||||
'pages_popular' => 'Δημοφιλείς Σελίδες',
|
||||
'pages_new' => 'Νέα Σελίδα',
|
||||
'pages_attachments' => 'Συνημμένα',
|
||||
'pages_navigation' => 'Πλοήγηση στη σελίδα',
|
||||
'pages_delete' => 'Διαγραφή Σελίδας',
|
||||
'pages_delete_named' => 'Διαγραφή Σελίδας :pageName',
|
||||
'pages_delete_draft_named' => 'Διαγραφή Προσχέδιας Σελίδας :pageName',
|
||||
'pages_delete_draft' => 'Διαγραφή Προσχέδιας Σελίδας',
|
||||
'pages_delete_success' => 'Η σελίδα διαγράφηκε',
|
||||
'pages_delete_draft_success' => 'Η προσχέδια (πρόχειρη) σελίδα διαγράφηκε',
|
||||
'pages_delete_confirm' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή τη σελίδα;',
|
||||
'pages_delete_draft_confirm' => 'Θέλετε σίγουρα να διαγράψετε την προσχέδια σελίδα;',
|
||||
'pages_editing_named' => 'Επεξεργασία Σελίδας :pageName',
|
||||
'pages_edit_draft_options' => 'Επιλογές Προσχεδίου',
|
||||
'pages_edit_save_draft' => 'Αποθήκευση Προχείρου (Προσχεδίου)',
|
||||
'pages_edit_draft' => 'Επεξεργασία Προσχεδίου Σελίδας',
|
||||
'pages_editing_draft' => 'Επεξεργασία Προσχεδίου',
|
||||
'pages_editing_page' => 'Επεξεργασία Σελίδας',
|
||||
'pages_edit_draft_save_at' => 'Το προσχέδιο αποθηκεύτηκε στις ',
|
||||
'pages_edit_delete_draft' => 'Διαγραφή Προσχεδίου',
|
||||
'pages_edit_discard_draft' => 'Απόρριψη Προσχεδίου',
|
||||
'pages_edit_switch_to_markdown' => 'Μετάβαση στον Επεξεργαστή Markdown',
|
||||
'pages_edit_switch_to_markdown_clean' => '(Καθαρισμός Περιεχομένου)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(Σταθερό Περιεχόμενο)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'Εναλλαγή στον επεξεργαστή WYSIWYG',
|
||||
'pages_edit_set_changelog' => 'Ορισμός καταγραφής αλλαγών',
|
||||
'pages_edit_enter_changelog_desc' => 'Εισάγετε μια σύντομη περιγραφή των αλλαγών που κάνατε',
|
||||
'pages_edit_enter_changelog' => 'Εισαγωγή Αρχείου Καταγραφής Αλλαγών',
|
||||
'pages_editor_switch_title' => 'Εναλλαγή Επεξεργαστή',
|
||||
'pages_editor_switch_are_you_sure' => 'Είστε βέβαιοι ότι θέλετε να αλλάξετε τον επεξεργαστή κειμένου για αυτή τη σελίδα;',
|
||||
'pages_editor_switch_consider_following' => 'Λάβετε υπόψη τα ακόλουθα όταν αλλάζετε συντάκτες:',
|
||||
'pages_editor_switch_consideration_a' => 'Μόλις αποθηκευτεί, η επιλογή του νέου επεξεργαστή κειμένου θα χρησιμοποιηθεί από τυχόν μελλοντικούς επεξεργαστές, συμπεριλαμβανομένων εκείνων που μπορεί να μην είναι σε θέση να αλλάξουν τον τύπο του επεξεργαστή κειμένου.',
|
||||
'pages_editor_switch_consideration_b' => 'Αυτό μπορεί να οδηγήσει σε απώλεια λεπτομερειών και κώδικα σε ορισμένες περιπτώσεις.',
|
||||
'pages_editor_switch_consideration_c' => 'Οι αλλαγές ετικετών ή αρχείων καταγραφής, που έγιναν από την τελευταία αποθήκευση, δεν θα συνεχιστούν σε αυτήν την αλλαγή.',
|
||||
'pages_save' => 'Αποθήκευση Σελίδας',
|
||||
'pages_title' => 'Τίτλος Σελίδας',
|
||||
'pages_name' => 'Όνομα Σελίδας',
|
||||
'pages_md_editor' => 'Επεξεργαστής',
|
||||
'pages_md_preview' => 'Προεπισκόπηση',
|
||||
'pages_md_insert_image' => 'Εισαγωγή Εικόνας',
|
||||
'pages_md_insert_link' => 'Εισαγωγή/Επεξεργασία συνδέσμου',
|
||||
'pages_md_insert_drawing' => 'Εισαγωγή Σχεδίου',
|
||||
'pages_not_in_chapter' => 'Η σελίδα δεν είναι σε κεφάλαιο',
|
||||
'pages_move' => 'Μετακίνηση Σελίδας',
|
||||
'pages_move_success' => 'Η σελίδα μετακινήθηκε στο ":parentName"',
|
||||
'pages_copy' => 'Αντιγραφή Σελίδας',
|
||||
'pages_copy_desination' => 'Αντιγραφή Προορισμού',
|
||||
'pages_copy_success' => 'Η σελίδα αντιγράφηκε επιτυχώς',
|
||||
'pages_permissions' => 'Δικαιώματα Σελίδας',
|
||||
'pages_permissions_success' => 'Τα δικαιώματα σελίδας ενημερώθηκαν',
|
||||
'pages_revision' => 'Αναθεώρηση',
|
||||
'pages_revisions' => 'Αναθεωρήσεις Σελίδας',
|
||||
'pages_revisions_named' => 'Αναθεωρήσεις σελίδας για :pageName',
|
||||
'pages_revision_named' => 'Αναθεώρηση σελίδας για :pageName',
|
||||
'pages_revision_restored_from' => 'Επαναφορά από #:id; :summary',
|
||||
'pages_revisions_created_by' => 'Δημιουργήθηκε από',
|
||||
'pages_revisions_date' => 'Ημερομηνία Αναθεώρησης',
|
||||
'pages_revisions_number' => '#',
|
||||
'pages_revisions_numbered' => 'Αναθεώρηση #',
|
||||
'pages_revisions_numbered_changes' => 'Αναθεώρηση #:id Αλλαγές',
|
||||
'pages_revisions_editor' => 'Τύπος Επεξεργαστή',
|
||||
'pages_revisions_changelog' => 'Αρχείο καταγραφής αλλαγών',
|
||||
'pages_revisions_changes' => 'Αλλαγές',
|
||||
'pages_revisions_current' => 'Τρέχουσα Έκδοση',
|
||||
'pages_revisions_preview' => 'Προεπισκόπηση',
|
||||
'pages_revisions_restore' => 'Επαναφορά',
|
||||
'pages_revisions_none' => 'Αυτή η σελίδα δεν έχει αναθεωρήσεις',
|
||||
'pages_copy_link' => 'Αντιγραφή Συνδέσμου',
|
||||
'pages_edit_content_link' => 'Επεξεργασία Περιεχομένου',
|
||||
'pages_permissions_active' => 'Ενεργά Δικαιώματα Σελίδας',
|
||||
'pages_initial_revision' => 'Αρχική δημοσίευση',
|
||||
'pages_references_update_revision' => 'Αυτόματη ενημέρωση του συστήματος των εσωτερικών συνδέσμων',
|
||||
'pages_initial_name' => 'Νέα Σελίδα',
|
||||
'pages_editing_draft_notification' => 'Αυτή τη στιγμή επεξεργάζεστε ένα προσχέδιο που αποθηκεύτηκε για τελευταία φορά :timeDiff.',
|
||||
'pages_draft_edited_notification' => 'Αυτή η σελίδα έχει ενημερωθεί από εκείνη τη στιγμή. Συνιστάται να απορρίψετε αυτό το προσχέδιο.',
|
||||
'pages_draft_page_changed_since_creation' => 'Αυτή η σελίδα έχει ενημερωθεί από τότε που δημιουργήθηκε αυτό το προσχέδιο. Συνιστάται να απορρίψετε αυτό το σχέδιο ή να φροντίσετε να μην αντικαταστήσετε τυχόν αλλαγές σελίδας.',
|
||||
'pages_draft_edit_active' => [
|
||||
'start_a' => ':count χρήστες έχουν αρχίσει να επεξεργάζονται αυτή τη σελίδα',
|
||||
'start_b' => ':userName έχει ξεκινήσει την επεξεργασία αυτής της σελίδας',
|
||||
'time_a' => 'από τότε που η σελίδα ενημερώθηκε τελευταία φορά',
|
||||
'time_b' => 'τα τελευταία :mint λεπτά',
|
||||
'message' => ':start :time. Προσέξτε να μην αντικαταστήσετε ο ένας τις ενημερώσεις του άλλου!',
|
||||
],
|
||||
'pages_draft_discarded' => 'Το προσχέδιο απορρίφθηκε, ο επεξεργαστής ενημερώθηκε με το τρέχον περιεχόμενο της σελίδας',
|
||||
'pages_specific' => 'Συγκεκριμένη Σελίδα',
|
||||
'pages_is_template' => 'Πρότυπο σελίδας',
|
||||
|
||||
// Editor Sidebar
|
||||
'page_tags' => 'Ετικέτες Σελίδας',
|
||||
'chapter_tags' => 'Ετικέτες Κεφαλαίου',
|
||||
'book_tags' => 'Ετικέτες Βιβλίου',
|
||||
'shelf_tags' => 'Ετικέτες Ραφιών',
|
||||
'tag' => 'Ετικέτα',
|
||||
'tags' => 'Ετικέτες',
|
||||
'tag_name' => 'Όνομα Ετικέτας',
|
||||
'tag_value' => 'Τιμή Ετικέτας (Προαιρετικό)',
|
||||
'tags_explain' => "Προσθέστε μερικές ετικέτες για να κατηγοριοποιήσετε καλύτερα το περιεχόμενό σας. \n Μπορείτε να αντιστοιχίσετε μια τιμή σε μια ετικέτα για πιο αναλυτική οργάνωση.",
|
||||
'tags_add' => 'Προσθήκη άλλης ετικέτας',
|
||||
'tags_remove' => 'Αφαίρεση ετικέτας',
|
||||
'tags_usages' => 'Συνολικές χρήσεις ετικετών',
|
||||
'tags_assigned_pages' => 'Ανατέθηκε σε σελίδες',
|
||||
'tags_assigned_chapters' => 'Ανατέθηκε στα κεφάλαια',
|
||||
'tags_assigned_books' => 'Ανατέθηκε σε Βιβλία',
|
||||
'tags_assigned_shelves' => 'Ανατέθηκε σε Ράφια',
|
||||
'tags_x_unique_values' => ':count μοναδικές τιμές',
|
||||
'tags_all_values' => 'Όλες οι τιμές',
|
||||
'tags_view_tags' => 'Προβολή Ετικετών',
|
||||
'tags_view_existing_tags' => 'Δείτε τις υπάρχουσες ετικέτες',
|
||||
'tags_list_empty_hint' => 'Οι ετικέτες μπορούν να εκχωρηθούν μέσω της πλαϊνής μπάρας συντάκτη σελίδας ή κατά την επεξεργασία των λεπτομερειών ενός βιβλίου, κεφαλαίου ή ράφι.',
|
||||
'attachments' => 'Συνημμένα',
|
||||
'attachments_explain' => 'Ανεβάστε μερικά αρχεία ή επισυνάψτε μερικούς συνδέσμους για να εμφανίσετε στη σελίδα σας. Αυτά είναι ορατά στην πλαϊνή μπάρα σελίδας.',
|
||||
'attachments_explain_instant_save' => 'Οι αλλαγές εδώ αποθηκεύονται αμέσως.',
|
||||
'attachments_items' => 'Συνημμένα Στοιχεία',
|
||||
'attachments_upload' => 'Μεταφόρτωση Αρχείου',
|
||||
'attachments_link' => 'Επισύναψη Δεσμού',
|
||||
'attachments_set_link' => 'Ορισμός Συνδέσμου',
|
||||
'attachments_delete' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το συνημμένο;',
|
||||
'attachments_dropzone' => 'Αποθέστε αρχεία ή κάντε κλικ εδώ για να επισυνάψετε ένα αρχείο',
|
||||
'attachments_no_files' => 'Δεν έχουν μεταφορτωθεί αρχεία',
|
||||
'attachments_explain_link' => 'Μπορείτε να επισυνάψετε έναν σύνδεσμο αν προτιμάτε να μην ανεβάσετε ένα αρχείο. Αυτό μπορεί να είναι ένας σύνδεσμος σε άλλη σελίδα ή ένας σύνδεσμος σε ένα αρχείο στο σύννεφο.',
|
||||
'attachments_link_name' => 'Όνομα Συνδέσμου',
|
||||
'attachment_link' => 'Σύνδεσμος συνημμένου',
|
||||
'attachments_link_url' => 'Σύνδεση σε αρχείο',
|
||||
'attachments_link_url_hint' => 'Url του ιστότοπου ή του αρχείου',
|
||||
'attach' => 'Επισύναψη',
|
||||
'attachments_insert_link' => 'Προσθήκη συνημμένου συνδέσμου στη σελίδα',
|
||||
'attachments_edit_file' => 'Επεξεργασία Αρχείου',
|
||||
'attachments_edit_file_name' => 'Όνομα Αρχείου',
|
||||
'attachments_edit_drop_upload' => 'Ρίξτε αρχεία ή κάντε κλικ εδώ για να ανεβάσετε και να αντικαταστήσετε',
|
||||
'attachments_order_updated' => 'Η παραγγελία συνημμένων ενημερώθηκε',
|
||||
'attachments_updated_success' => 'Οι λεπτομέρειες συνημμένου ενημερώθηκαν',
|
||||
'attachments_deleted' => 'Το συνημμένο διαγράφηκε',
|
||||
'attachments_file_uploaded' => 'Το αρχείο μεταφορτώθηκε επιτυχώς',
|
||||
'attachments_file_updated' => 'Το αρχείο ενημερώθηκε επιτυχώς',
|
||||
'attachments_link_attached' => 'Ο σύνδεσμος συνδέθηκε επιτυχώς στη σελίδα',
|
||||
'templates' => 'Πρότυπα',
|
||||
'templates_set_as_template' => 'Η σελίδα είναι πρότυπο',
|
||||
'templates_explain_set_as_template' => 'Μπορείτε να ορίσετε αυτή τη σελίδα ως πρότυπο, έτσι ώστε τα περιεχόμενά της να χρησιμοποιούνται κατά τη δημιουργία άλλων σελίδων. Άλλοι χρήστες θα μπορούν να χρησιμοποιήσουν αυτό το πρότυπο αν έχουν δικαιώματα προβολής για αυτή τη σελίδα.',
|
||||
'templates_replace_content' => 'Αντικατάσταση περιεχομένου σελίδας',
|
||||
'templates_append_content' => 'Προσθήκη στο περιεχόμενο της σελίδας',
|
||||
'templates_prepend_content' => 'Προεπιλογή στο περιεχόμενο της σελίδας',
|
||||
|
||||
// Profile View
|
||||
'profile_user_for_x' => 'Χρήστης για :time',
|
||||
'profile_created_content' => 'Δημιουργία Περιεχομένου',
|
||||
'profile_not_created_pages' => ':userName δεν έχει δημιουργήσει καμία σελίδα',
|
||||
'profile_not_created_chapters' => ':userName δεν έχει δημιουργήσει κεφάλαια',
|
||||
'profile_not_created_books' => ':userName δεν έχει δημιουργήσει βιβλία',
|
||||
'profile_not_created_shelves' => ':userName δεν έχει δημιουργήσει ράφια',
|
||||
|
||||
// Comments
|
||||
'comment' => 'Σχόλιο',
|
||||
'comments' => 'Σχόλια',
|
||||
'comment_add' => 'Προσθήκη Σχολίου',
|
||||
'comment_placeholder' => 'Αφήστε ένα σχόλιο εδώ',
|
||||
'comment_count' => '{0} Κανένα σχόλιο{1} 1 Σχόλιο [2,*] :count Σχόλια',
|
||||
'comment_save' => 'Αποθήκευση Σχολίου',
|
||||
'comment_saving' => 'Αποθήκευση σχολίου...',
|
||||
'comment_deleting' => 'Διαγραφή σχολίου...',
|
||||
'comment_new' => 'Νέο Σχόλιο',
|
||||
'comment_created' => 'σχολίασε :createDiff',
|
||||
'comment_updated' => 'Ενημερώθηκε :updateDiff από :username',
|
||||
'comment_deleted_success' => 'Σχόλιο διαγράφηκε',
|
||||
'comment_created_success' => 'Το σχόλιο προστέθηκε',
|
||||
'comment_updated_success' => 'Το σχόλιο ενημερώθηκε',
|
||||
'comment_delete_confirm' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το σχόλιο;',
|
||||
'comment_in_reply_to' => 'Σε απάντηση στο :commentId',
|
||||
|
||||
// Revision
|
||||
'revision_delete_confirm' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την αναθεώρηση;',
|
||||
'revision_restore_confirm' => 'Είστε βέβαιοι ότι θέλετε να επαναφέρετε αυτή την αναθεώρηση; Τα τρέχοντα περιεχόμενα της σελίδας θα αντικατασταθούν.',
|
||||
'revision_delete_success' => 'Η Αναθεώρηση διαγράφηκε',
|
||||
'revision_cannot_delete_latest' => 'Δεν είναι δυνατή η διαγραφή της τελευταίας αναθεώρησης.',
|
||||
|
||||
// Copy view
|
||||
'copy_consider' => 'Παρακαλώ σκεφτείτε τα παρακάτω κατά την αντιγραφή περιεχομένου.',
|
||||
'copy_consider_permissions' => 'Οι ρυθμίσεις προσαρμοσμένων δικαιωμάτων δεν θα αντιγραφούν.',
|
||||
'copy_consider_owner' => 'Θα γίνετε ο ιδιοκτήτης όλου του αντιγραμμένου περιεχομένου.',
|
||||
'copy_consider_images' => 'Τα αρχεία εικόνας σελίδας δεν θα αναπαραχθούν και οι αρχικές εικόνες θα διατηρήσουν τη σχέση τους με τη σελίδα στην οποία είχαν αρχικά μεταφορτωθεί.',
|
||||
'copy_consider_attachments' => 'Τα συνημμένα σελίδας δεν θα αντιγραφούν.',
|
||||
'copy_consider_access' => 'Μια αλλαγή της θέσης, του ιδιοκτήτη ή των δικαιωμάτων μπορεί να έχει ως αποτέλεσμα το περιεχόμενο αυτό να είναι προσβάσιμο σε χρήστες που προηγουμένως δεν είχαν πρόσβαση.',
|
||||
|
||||
// Conversions
|
||||
'convert_to_shelf' => 'Μετατροπή σε ράφι',
|
||||
'convert_to_shelf_contents_desc' => 'Μπορείτε να μετατρέψετε αυτό το βιβλίο σε ένα νέο ράφι με το ίδιο περιεχόμενο. Κεφάλαια που περιέχονται σε αυτό το βιβλίο θα μετατραπούν σε νέα βιβλία. Αν αυτό το βιβλίο περιέχει σελίδες που δεν βρίσκονται σε κεφάλαιο, αυτό το βιβλίο θα μετονομαστεί και περιέχει τέτοιες σελίδες, και αυτό το βιβλίο θα γίνει μέρος του νέου ράφι.',
|
||||
'convert_to_shelf_permissions_desc' => 'Τυχόν δικαιώματα που ορίζονται σε αυτό το βιβλίο θα αντιγραφούν στο νέο ράφι και σε όλα τα νέα θυγατρικά βιβλία στα οποία δεν επιβάλλονται τα δικά τους δικαιώματα. Λάβετε υπόψη ότι τα δικαιώματα στα ράφια δεν μεταφέρονται αυτόματα σε περιεχόμενο εντός, όπως συμβαίνει για τα βιβλία.',
|
||||
'convert_book' => 'Μετατροπή Βιβλίου',
|
||||
'convert_book_confirm' => 'Είστε σίγουροι ότι θέλετε να μετατρέψετε αυτό το βιβλίο;',
|
||||
'convert_undo_warning' => 'Αυτό δεν μπορεί να αναιρεθεί τόσο εύκολα.',
|
||||
'convert_to_book' => 'Μετατροπή σε βιβλίο',
|
||||
'convert_to_book_desc' => 'Μπορείτε να μετατρέψετε αυτό το κεφάλαιο σε ένα νέο βιβλίο με το ίδιο περιεχόμενο. Τυχόν δικαιώματα που έχουν οριστεί σε αυτό το κεφάλαιο θα αντιγραφούν στο νέο βιβλίο αλλά τυχόν κληρονομημένα δικαιώματα, από το γονικό βιβλίο, δεν θα αντιγραφούν το οποίο θα μπορούσε να οδηγήσει σε αλλαγή του ελέγχου πρόσβασης.',
|
||||
'convert_chapter' => 'Μετατροπή Κεφαλαίου',
|
||||
'convert_chapter_confirm' => 'Είστε βέβαιοι ότι θέλετε να μετατρέψετε αυτό το κεφάλαιο;',
|
||||
|
||||
// References
|
||||
'references' => 'Αναφορές',
|
||||
'references_none' => 'Δεν υπάρχουν αναφορές παρακολούθησης σε αυτό το στοιχείο.',
|
||||
'references_to_desc' => 'Παρακάτω εμφανίζονται όλες οι γνωστές σελίδες του συστήματος που συνδέονται με αυτό το στοιχείο.',
|
||||
];
|
||||
@@ -1,109 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Text shown in error messaging.
|
||||
*/
|
||||
return [
|
||||
|
||||
// Permissions
|
||||
'permission' => 'Δεν έχετε δικαίωμα πρόσβασης στη ζητούμενη σελίδα.',
|
||||
'permissionJson' => 'Δεν έχετε άδεια να εκτελέσετε την αιτούμενη ενέργεια.',
|
||||
|
||||
// Auth
|
||||
'error_user_exists_different_creds' => 'Ένας χρήστης με email :email υπάρχει ήδη αλλά με διαφορετικά διαπιστευτήρια.',
|
||||
'email_already_confirmed' => 'Το email έχει ήδη επιβεβαιωθεί, Δοκιμάστε να συνδεθείτε.',
|
||||
'email_confirmation_invalid' => 'Αυτό το διακριτικό επιβεβαίωσης δεν είναι έγκυρο ή έχει ήδη χρησιμοποιηθεί, Παρακαλώ δοκιμάστε να εγγραφείτε ξανά.',
|
||||
'email_confirmation_expired' => 'Το διακριτικό επιβεβαίωσης έχει λήξει, έχει σταλεί ένα νέο email επιβεβαίωσης.',
|
||||
'email_confirmation_awaiting' => 'Η διεύθυνση ηλεκτρονικού ταχυδρομείου για το λογαριασμό που χρησιμοποιείται πρέπει να επιβεβαιωθεί',
|
||||
'ldap_fail_anonymous' => 'Η πρόσβαση LDAP απέτυχε με ανώνυμη σύνδεση',
|
||||
'ldap_fail_authed' => 'Η πρόσβαση LDAP απέτυχε με τη χρήση δοσμένων λεπτομερειών dn & κωδικού πρόσβασης',
|
||||
'ldap_extension_not_installed' => 'Η επέκταση LDAP PHP δεν εγκαταστάθηκε',
|
||||
'ldap_cannot_connect' => 'Αδυναμία σύνδεσης στο διακομιστή ldap, η αρχική σύνδεση απέτυχε',
|
||||
'saml_already_logged_in' => 'Ήδη συνδεδεμένος',
|
||||
'saml_user_not_registered' => 'Ο χρήστης :name δεν είναι εγγεγραμμένος και η αυτόματη εγγραφή είναι απενεργοποιημένη',
|
||||
'saml_no_email_address' => 'Δεν ήταν δυνατή η εύρεση μιας διεύθυνσης ηλεκτρονικού ταχυδρομείου, για αυτόν τον χρήστη, στα δεδομένα που παρέχονται από το εξωτερικό σύστημα ελέγχου ταυτότητας',
|
||||
'saml_invalid_response_id' => 'Το αίτημα από το εξωτερικό σύστημα ελέγχου ταυτότητας δεν αναγνωρίζεται από μια διαδικασία που ξεκίνησε από αυτή την εφαρμογή. Η πλοήγηση πίσω μετά από μια σύνδεση θα μπορούσε να προκαλέσει αυτό το ζήτημα.',
|
||||
'saml_fail_authed' => 'Η σύνδεση με τη χρήση :system απέτυχε, το σύστημα δεν παρείχε επιτυχή εξουσιοδότηση',
|
||||
'oidc_already_logged_in' => 'Ήδη συνδεδεμένος',
|
||||
'oidc_user_not_registered' => 'Ο χρήστης :name δεν είναι εγγεγραμμένος και η αυτόματη εγγραφή είναι απενεργοποιημένη',
|
||||
'oidc_no_email_address' => 'Δεν ήταν δυνατή η εύρεση μιας διεύθυνσης ηλεκτρονικού ταχυδρομείου, για αυτόν τον χρήστη, στα δεδομένα που παρέχονται από το εξωτερικό σύστημα ελέγχου ταυτότητας',
|
||||
'oidc_fail_authed' => 'Η σύνδεση με τη χρήση :system απέτυχε, το σύστημα δεν παρείχε επιτυχή εξουσιοδότηση',
|
||||
'social_no_action_defined' => 'Καμία ενέργεια δεν ορίστηκε',
|
||||
'social_login_bad_response' => "Παρουσιάστηκε σφάλμα κατά τη διάρκεια :socialAccount login: \n:error",
|
||||
'social_account_in_use' => 'Αυτός ο λογαριασμός :socialAccount είναι ήδη σε χρήση, Δοκιμάστε να συνδεθείτε μέσω της επιλογής :socialAccount .',
|
||||
'social_account_email_in_use' => 'Το email :email είναι ήδη σε χρήση. Αν έχετε ήδη ένα λογαριασμό, μπορείτε να συνδέσετε τον :socialAccount λογαριασμό σας από τις ρυθμίσεις του προφίλ σας.',
|
||||
'social_account_existing' => 'Αυτός ο :socialAccount είναι ήδη συνδεδεμένος στο προφίλ σας.',
|
||||
'social_account_already_used_existing' => 'Αυτός ο :socialAccount λογαριασμός χρησιμοποιείται ήδη από άλλο χρήστη.',
|
||||
'social_account_not_used' => 'Αυτός ο :socialAccount λογαριασμός δεν είναι συνδεδεμένος με κανέναν χρήστη. Παρακαλώ επισυνάψτε τον στις ρυθμίσεις του προφίλ σας. ',
|
||||
'social_account_register_instructions' => 'Εάν δεν έχετε ακόμα λογαριασμό, μπορείτε να καταχωρήσετε ένα λογαριασμό χρησιμοποιώντας την επιλογή :socialAccount .',
|
||||
'social_driver_not_found' => 'Δεν βρέθηκε κοινωνικός οδηγός',
|
||||
'social_driver_not_configured' => 'Οι κοινωνικές ρυθμίσεις του :socialAccount δεν έχουν ρυθμιστεί σωστά.',
|
||||
'invite_token_expired' => 'Αυτός ο σύνδεσμος πρόσκλησης έχει λήξει. Αντ\' αυτού μπορείτε να προσπαθήσετε να επαναφέρετε τον κωδικό πρόσβασής σας.',
|
||||
|
||||
// System
|
||||
'path_not_writable' => 'Η διαδρομή αρχείου :filePath δεν μπόρεσε να μεταφορτωθεί. Βεβαιωθείτε ότι είναι εγγράψιμη στο διακομιστή.',
|
||||
'cannot_get_image_from_url' => 'Αδυναμία λήψης εικόνας από :url',
|
||||
'cannot_create_thumbs' => 'Ο διακομιστής δεν μπορεί να δημιουργήσει μικρογραφίες. Παρακαλώ ελέγξτε ότι έχετε την επέκταση GD PHP εγκατεστημένη.',
|
||||
'server_upload_limit' => 'Ο διακομιστής δεν επιτρέπει τη μεταφόρτωση αυτού του μεγέθους. Παρακαλώ δοκιμάστε ένα μικρότερο μέγεθος αρχείου.',
|
||||
'uploaded' => 'Ο διακομιστής δεν επιτρέπει τη μεταφόρτωση αυτού του μεγέθους. Παρακαλώ δοκιμάστε ένα μικρότερο μέγεθος αρχείου.',
|
||||
'image_upload_error' => 'Παρουσιάστηκε σφάλμα κατά το ανέβασμα της εικόνας.',
|
||||
'image_upload_type_error' => 'Ο τύπος εικόνας που μεταφορτώθηκε δεν είναι έγκυρος',
|
||||
'file_upload_timeout' => 'Το χρονικό όριο μεταφόρτωσης αρχείου έληξε.',
|
||||
|
||||
// Attachments
|
||||
'attachment_not_found' => 'Το συνημμένο δεν βρέθηκε',
|
||||
|
||||
// Pages
|
||||
'page_draft_autosave_fail' => 'Αποτυχία αποθήκευσης προσχέδιου. Βεβαιωθείτε ότι έχετε σύνδεση στο διαδίκτυο πριν την αποθήκευση αυτής της σελίδας',
|
||||
'page_custom_home_deletion' => 'Δεν μπορεί να διαγραφεί μια σελίδα ενώ έχει οριστεί ως αρχική σελίδα',
|
||||
|
||||
// Entities
|
||||
'entity_not_found' => 'Η οντότητα δεν βρέθηκε',
|
||||
'bookshelf_not_found' => 'Το ράφι δεν βρέθηκε',
|
||||
'book_not_found' => 'Το βιβλίο δεν βρέθηκε',
|
||||
'page_not_found' => 'Η σελίδα δεν βρέθηκε',
|
||||
'chapter_not_found' => 'Το κεφάλαιο δεν βρέθηκε',
|
||||
'selected_book_not_found' => 'Το επιλεγμένο βιβλίο δεν βρέθηκε',
|
||||
'selected_book_chapter_not_found' => 'Το επιλεγμένο βιβλίο ή κεφάλαιο δεν βρέθηκε',
|
||||
'guests_cannot_save_drafts' => 'Οι επισκέπτες δεν μπορούν να αποθηκεύσουν πρόχειρα',
|
||||
|
||||
// Users
|
||||
'users_cannot_delete_only_admin' => 'Δεν μπορείτε να διαγράψετε τον μοναδικό διαχειριστή',
|
||||
'users_cannot_delete_guest' => 'Δεν μπορείτε να διαγράψετε τον επισκέπτη',
|
||||
|
||||
// Roles
|
||||
'role_cannot_be_edited' => 'Αυτός ο ρόλος δεν μπορεί να επεξεργαστεί',
|
||||
'role_system_cannot_be_deleted' => 'Αυτός ο ρόλος είναι ρόλος συστήματος και δεν μπορεί να διαγραφεί',
|
||||
'role_registration_default_cannot_delete' => 'Αυτός ο ρόλος δεν μπορεί να διαγραφεί ενώ έχει οριστεί ως προεπιλεγμένος ρόλος εγγραφής',
|
||||
'role_cannot_remove_only_admin' => 'Αυτός ο χρήστης είναι ο μόνος χρήστης που έχει ανατεθεί στον ρόλο διαχειριστή. Εκχωρήστε τον ρόλο διαχειριστή σε άλλο χρήστη πριν επιχειρήσετε να τον καταργήσετε εδώ.',
|
||||
|
||||
// Comments
|
||||
'comment_list' => 'Παρουσιάστηκε σφάλμα κατά την λήψη σχολίων.',
|
||||
'cannot_add_comment_to_draft' => 'Δεν μπορείτε να προσθέσετε σχόλια σε ένα προσχέδιο.',
|
||||
'comment_add' => 'Παρουσιάστηκε σφάλμα κατά την προσθήκη / ενημέρωση του σχολίου.',
|
||||
'comment_delete' => 'Παρουσιάστηκε σφάλμα κατά τη διαγραφή του σχολίου.',
|
||||
'empty_comment' => 'Αδυναμία προσθήκης ενός κενού σχολίου.',
|
||||
|
||||
// Error pages
|
||||
'404_page_not_found' => 'Η Σελίδα δε βρέθηκε',
|
||||
'sorry_page_not_found' => 'Λυπούμαστε, Η σελίδα που αναζητάτε δεν βρέθηκε.',
|
||||
'sorry_page_not_found_permission_warning' => 'Αν περιμένατε να υπάρχει αυτή η σελίδα, ίσως να μην έχετε δικαίωμα να την δείτε.',
|
||||
'image_not_found' => 'Η Εικόνα δεν βρέθηκε',
|
||||
'image_not_found_subtitle' => 'Λυπούμαστε, το αρχείο εικόνας που αναζητάτε δεν μπορεί να βρεθεί.',
|
||||
'image_not_found_details' => 'Αν περιμένατε να υπάρχει αυτή η εικόνα, ίσως να έχει διαγραφεί.',
|
||||
'return_home' => 'Επιστροφή στην αρχική σελίδα',
|
||||
'error_occurred' => 'Προέκυψε Ένα Σφάλμα',
|
||||
'app_down' => ':appName είναι προσωρινά μη διαθέσιμη',
|
||||
'back_soon' => 'Θα υπάρξει σύντομα υποστήριξη.',
|
||||
|
||||
// API errors
|
||||
'api_no_authorization_found' => 'Δεν βρέθηκε διακριτικό εξουσιοδότησης κατόπιν αιτήματος',
|
||||
'api_bad_authorization_format' => 'Ένα διακριτικό εξουσιοδότησης βρέθηκε κατόπιν αιτήματος, αλλά η μορφή εμφανίστηκε εσφαλμένη',
|
||||
'api_user_token_not_found' => 'Δεν βρέθηκε αντίστοιχο διακριτικό API για το παρεχόμενο διακριτικό εξουσιοδότησης',
|
||||
'api_incorrect_token_secret' => 'Το μυστικό που παρέχεται για το δεδομένο χρησιμοποιημένο διακριτικό API είναι εσφαλμένο',
|
||||
'api_user_no_api_permission' => 'Ο ιδιοκτήτης του χρησιμοποιημένου διακριτικού API δεν έχει άδεια για να κάνει κλήσεις API',
|
||||
'api_user_token_expired' => 'Το διακριτικό εξουσιοδότησης που χρησιμοποιείται έχει λήξει',
|
||||
|
||||
// Settings & Maintenance
|
||||
'maintenance_test_email_failure' => 'Σφάλμα κατά την αποστολή δοκιμαστικού email:',
|
||||
|
||||
];
|
||||
@@ -1,12 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Pagination Language Lines
|
||||
* The following language lines are used by the paginator library to build
|
||||
* the simple pagination links.
|
||||
*/
|
||||
return [
|
||||
|
||||
'previous' => '« Προηγούμενο',
|
||||
'next' => 'Επόμενο »',
|
||||
|
||||
];
|
||||
@@ -1,15 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Password Reminder Language Lines
|
||||
* The following language lines are the default lines which match reasons
|
||||
* that are given by the password broker for a password update attempt has failed.
|
||||
*/
|
||||
return [
|
||||
|
||||
'password' => 'Ο κωδικός πρόσβασης πρέπει να αποτελείται από τουλάχιστον έξι χαρακτήρες και να ταιριάζει με τον κωδικό επιβεβαίωσης.',
|
||||
'user' => "Δεν μπορούμε να βρόυμε κάποιον χρήστη με αυτή τη διεύθυνση e-mail.",
|
||||
'token' => 'Το διακριτικό επαναφοράς κωδικού πρόσβασης δεν είναι έγκυρο για αυτή τη διεύθυνση ηλεκτρονικού ταχυδρομείου.',
|
||||
'sent' => 'Σας έχουμε στείλει e-mail με τον σύνδεσμο επαναφοράς του κωδικού πρόσβασης!',
|
||||
'reset' => 'Ο κωδικός σας έχει επαναφερθεί!',
|
||||
|
||||
];
|
||||
@@ -1,316 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Settings text strings
|
||||
* Contains all text strings used in the general settings sections of BookStack
|
||||
* including users and roles.
|
||||
*/
|
||||
return [
|
||||
|
||||
// Common Messages
|
||||
'settings' => 'Ρυθμίσεις',
|
||||
'settings_save' => 'Αποθήκευση ρυθμίσεων',
|
||||
'settings_save_success' => 'Οι ρυθμίσεις αποθηκεύτηκαν',
|
||||
'system_version' => 'Έκδοση εφαρμογής',
|
||||
'categories' => 'Κατηγορίες',
|
||||
|
||||
// App Settings
|
||||
'app_customization' => 'Προσαρμογή',
|
||||
'app_features_security' => 'Χαρακτηριστικά & Ασφάλεια',
|
||||
'app_name' => 'Όνομα Εφαρμογής',
|
||||
'app_name_desc' => 'Αυτό το όνομα εμφανίζεται στην κεφαλίδα της ιστοσελίδας και σε τυχόν μηνύματα ηλεκτρονικού ταχυδρομείου που αποστέλλονται από το σύστημα.',
|
||||
'app_name_header' => 'Εμφάνιση Ονόματος στην κεφαλίδα',
|
||||
'app_public_access' => 'Δημόσια Πρόσβαση',
|
||||
'app_public_access_desc' => 'Η ενεργοποίηση αυτής της επιλογής θα επιτρέψει στους επισκέπτες, που δεν είναι συνδεδεμένοι, να έχουν πρόσβαση στο περιεχόμενο της εφαρμογής BookStack.',
|
||||
'app_public_access_desc_guest' => 'Η πρόσβαση για δημόσιους επισκέπτες μπορεί να ελεγχθεί μέσω του χρήστη "Guest".',
|
||||
'app_public_access_toggle' => 'Να επιτρέπεται η δημόσια πρόσβαση',
|
||||
'app_public_viewing' => 'Να επιτρέπεται η δημόσια προβολή;',
|
||||
'app_secure_images' => 'Μεταφορτώσεις Εικόνων υψηλότερης Ασφάλειας',
|
||||
'app_secure_images_toggle' => 'Ενεργοποιήστε τις μεταφορτώσεις Εικόνων υψηλότερης Ασφάλειας',
|
||||
'app_secure_images_desc' => 'Για λόγους απόδοσης, όλες οι εικόνες είναι δημόσιες. Αυτή η επιλογή προσθέτει μια τυχαία συμβολοσειρά μπροστά από τις διευθύνσεις URL εικόνων, δύσκολο να τη μαντέψει κάποιος. Βεβαιωθείτε ότι τα ευρετήρια καταλόγου δεν είναι ενεργοποιημένα για να αποτρέψετε την εύκολη πρόσβαση.',
|
||||
'app_default_editor' => 'Προεπιλεγμένος Επεξεργαστής σελίδων',
|
||||
'app_default_editor_desc' => 'Επιλέξτε ποιο πρόγραμμα επεξεργασίας θα χρησιμοποιείται από προεπιλογή κατά την επεξεργασία νέων σελίδων. Αυτό μπορεί να παρακαμφθεί σε επίπεδο σελίδας όπου το επιτρέπουν τα δικαιώματα.',
|
||||
'app_custom_html' => 'Προσαρμοσμένο περιεχόμενο κεφαλίδας HTML',
|
||||
'app_custom_html_desc' => 'Οποιοδήποτε περιεχόμενο προστίθεται εδώ θα εισαχθεί στο κάτω μέρος της ενότητας <head> κάθε σελίδας. Αυτό είναι βολικό για την παράκαμψη ή προσθήκη στυλ καθώς και την προσθήκη κώδικα αναλυτικών στοιχείων.',
|
||||
'app_custom_html_disabled_notice' => 'Το προσαρμοσμένο περιεχόμενο κεφαλίδας HTML είναι απενεργοποιημένο σε αυτήν τη σελίδα ρυθμίσεων, για να διασφαλιστεί ότι τυχόν αλλαγές που θα πραγματοποιηθούν και θα προκαλέσουν δυσλειτουργία στην ιστοσελίδα σας, μπορούν να επαναφερθούν.',
|
||||
'app_logo' => 'Λογότυπο εφαρμογής',
|
||||
'app_logo_desc' => 'Αυτή η εικόνα πρέπει να έχει <b>μέγιστο ύψος</b> 43px. <br>Οι μεγάλες εικόνες θα μειωθούν.',
|
||||
'app_primary_color' => 'Βασικό, χρώμα εφαρμογής',
|
||||
'app_primary_color_desc' => 'Ορίζει το κύριο χρώμα για την εφαρμογή, συμπεριλαμβανομένων του banner, των κουμπιών και των συνδέσμων.',
|
||||
'app_homepage' => 'Αρχική σελίδα εφαρμογής',
|
||||
'app_homepage_desc' => 'Επιλέξτε μια προβολή για εμφάνιση στην αρχική σελίδα αντί για την προεπιλεγμένη προβολή. Τα δικαιώματα σελίδων αγνοούνται για επιλεγμένες σελίδες.',
|
||||
'app_homepage_select' => 'Επιλέξτε μια σελίδα',
|
||||
'app_footer_links' => 'Σύνδεσμοι υποσέλιδου',
|
||||
'app_footer_links_desc' => 'Προσθέστε συνδέσμους για εμφάνιση στο υποσέλιδο του ιστότοπου. Αυτά θα εμφανίζονται στο κάτω μέρος των περισσότερων σελίδων, συμπεριλαμβανομένων εκείνων που δεν απαιτούν σύνδεση. Μπορείτε να χρησιμοποιήσετε μια ετικέτα "trans::<key>" για να χρησιμοποιήσετε μεταφράσεις που καθορίζονται από το σύστημα. Για παράδειγμα: Η χρήση του "trans::common.privacy_policy" θα παρέχει το μεταφρασμένο κείμενο "Πολιτική Απορρήτου" και το "trans::common.terms_of_service" θα παρέχει το μεταφρασμένο κείμενο "Όροι Παροχής Υπηρεσιών".',
|
||||
'app_footer_links_label' => 'Ετικέτα Συνδέσμου',
|
||||
'app_footer_links_url' => 'URL Σύνδεσης',
|
||||
'app_footer_links_add' => 'Προσθήκη Συνδέσμου υποσέλιδου',
|
||||
'app_disable_comments' => 'Απενεργοποίηση Σχολίων',
|
||||
'app_disable_comments_toggle' => 'Απενεργοποίηση Σχολίων',
|
||||
'app_disable_comments_desc' => 'Απενεργοποιεί τα σχόλια σε όλες τις σελίδες της εφαρμογής. <br> Τα υπάρχοντα σχόλια δεν εμφανίζονται.',
|
||||
|
||||
// Color settings
|
||||
'content_colors' => 'Χρώματα εφαρμογής',
|
||||
'content_colors_desc' => 'Ορίζει τα χρώματα για όλα τα στοιχεία στην ιεραρχία οργάνωσης της ιστοσελίδας. <br/><b>Συνιστάται</b> η επιλογή χρωμάτων <u>με παρόμοια φωτεινότητα</u> με τα προεπιλεγμένα χρώματα για αναγνωσιμότητα.',
|
||||
'bookshelf_color' => 'Χρώμα Ραφιού',
|
||||
'book_color' => 'Χρώμα Βιβλίων',
|
||||
'chapter_color' => 'Χρώμα Κεφαλαίων Βιβλίων',
|
||||
'page_color' => 'Χρώμα Σελίδων',
|
||||
'page_draft_color' => 'Χρώμα Πρoσχέδιων Σελίδων (Draft page)',
|
||||
|
||||
// Registration Settings
|
||||
'reg_settings' => 'Εγγραφή',
|
||||
'reg_enable' => 'Ενεργοποίηση Εγγραφής',
|
||||
'reg_enable_toggle' => 'Ενεργοποίηση εγγραφής',
|
||||
'reg_enable_desc' => 'Όταν ενεργοποιηθεί η εγγραφή, ο χρήστης θα μπορεί να εγγραφεί ως χρήστης της εφαρμογής. Κατά την εγγραφή τους δίνεται ένας μοναδικός, προεπιλεγμένος ρόλος χρήστη.',
|
||||
'reg_default_role' => 'Προεπιλεγμένος ρόλος χρήστη μετά την εγγραφή',
|
||||
'reg_enable_external_warning' => 'Η παραπάνω επιλογή αγνοείται όταν ο εξωτερικός έλεγχος ταυτότητας LDAP ή SAML είναι ενεργός. Οι λογαριασμοί χρηστών για μη υπάρχοντα μέλη θα δημιουργηθούν αυτόματα εάν ο έλεγχος ταυτότητας, έναντι του εξωτερικού συστήματος που χρησιμοποιείται, είναι επιτυχής.',
|
||||
'reg_email_confirmation' => 'Επιβεβαίωση ηλεκτρονικού ταχυδρομείου',
|
||||
'reg_email_confirmation_toggle' => 'Απαιτείται η επιβεβαίωση μέσω email',
|
||||
'reg_confirm_email_desc' => 'Εάν χρησιμοποιείται περιορισμός τομέα, τότε θα απαιτείται επιβεβαίωση μέσω email και αυτή η επιλογή θα αγνοηθεί.',
|
||||
'reg_confirm_restrict_domain' => 'Περιορισμός Τομέα',
|
||||
'reg_confirm_restrict_domain_desc' => 'Εισαγάγετε μια λίστα διαχωρισμένων με κόμματα τομέων email στους οποίους θέλετε να περιορίσετε την εγγραφή. Θα σταλεί στους χρήστες ένα email για να επιβεβαιώσουν τη διεύθυνσή τους πριν τους επιτραπεί να αλληλεπιδράσουν με την εφαρμογή. <br> <strong>Σημειώστε ότι οι χρήστες θα μπορούν να αλλάξουν τις διευθύνσεις email τους μετά την επιτυχή εγγραφή</strong>.',
|
||||
'reg_confirm_restrict_domain_placeholder' => 'Δε έχουν ρυθμιστεί περιορισμοί ακόμα',
|
||||
|
||||
// Maintenance settings
|
||||
'maint' => 'Συντήρηση',
|
||||
'maint_image_cleanup' => 'Εκκαθάριση Εικόνων',
|
||||
'maint_image_cleanup_desc' => 'Σαρώνει το περιεχόμενο σελίδων και τις αναθεωρήσεις αυτών για να ελέγξει ποιες εικόνες και σχέδια χρησιμοποιούνται αυτήν τη στιγμή και ποιες είναι περιττές. Βεβαιωθείτε ότι έχετε δημιουργήσει ένα πλήρες αντίγραφο της βάση δεδομένων και των εικόνων προτού το εκτελέσετε.',
|
||||
'maint_delete_images_only_in_revisions' => 'Διαγράψτε επίσης εικόνες που υπάρχουν μόνο σε παλιές αναθεωρήσεις σελίδων',
|
||||
'maint_image_cleanup_run' => 'Εκτέλεση Εκκαθάρισης',
|
||||
'maint_image_cleanup_warning' => 'Βρέθηκαν :count δυνητικά αχρησιμοποίητες εικόνες. Είστε βέβαιοι ότι θέλετε να τις διαγράψετε αυτές;',
|
||||
'maint_image_cleanup_success' => ':count δυνητικά αχρησιμοποίητες εικόνες βρέθηκαν και διαγράφηκαν!',
|
||||
'maint_image_cleanup_nothing_found' => 'Δεν βρέθηκαν αχρησιμοποίητες εικόνες, τίποτα δεν διαγράφηκε!',
|
||||
'maint_send_test_email' => 'Στείλτε ένα δοκιμαστικό email',
|
||||
'maint_send_test_email_desc' => 'Αυτό στέλνει ένα δοκιμαστικό μήνυμα ηλεκτρονικού ταχυδρομείου στη διεύθυνση email σας που προσδιορίζεται στο προφίλ σας.',
|
||||
'maint_send_test_email_run' => 'Αποστολή δοκιμαστικού email',
|
||||
'maint_send_test_email_success' => 'Το email στάλθηκε στη διεύθυνση :address',
|
||||
'maint_send_test_email_mail_subject' => 'Δοκιμαστικό Email',
|
||||
'maint_send_test_email_mail_greeting' => 'Η παράδοση email φαίνεται να λειτουργεί!',
|
||||
'maint_send_test_email_mail_text' => 'Συγχαρητήρια! Καθώς λάβατε αυτήν την ειδοποίηση μέσω email, οι ρυθμίσεις email σας φαίνεται να έχουν διαμορφωθεί σωστά.',
|
||||
'maint_recycle_bin_desc' => 'Τα διαγραμμένα Ράφια και βιβλία, τα διαγραμμένα κεφάλαια και σελίδες αποστέλλονται στον κάδο ανακύκλωσης, έτσι ώστε να μπορούν να αποκατασταθούν ή να διαγραφούν οριστικά. Τα παλαιότερα αντικείμενα στον κάδο ανακύκλωσης ενδέχεται να αφαιρεθούν αυτόματα μετά από λίγο, ανάλογα με τη διαμόρφωση του συστήματος.',
|
||||
'maint_recycle_bin_open' => 'Άνοιγμα Κάδου Ανακύκλωσης',
|
||||
'maint_regen_references' => 'Αναδημιουργία Αναφορών',
|
||||
'maint_regen_references_desc' => 'Αυτή η ενέργεια θα ξαναχτίσει το ευρετήριο αναφοράς διαστοιχείου μέσα στη βάση δεδομένων. Αυτό συνήθως γίνεται αυτόματα αλλά αυτή η ενέργεια μπορεί να είναι χρήσιμη για το παλιό περιεχόμενο ή περιεχόμενο που προστίθεται μέσω ανεπίσημων μεθόδων.',
|
||||
'maint_regen_references_success' => 'Το ευρετήριο αναφοράς αναδημιουργήθηκε!',
|
||||
'maint_timeout_command_note' => 'Σημείωση: Αυτή η ενέργεια μπορεί να πάρει χρόνο για να εκτελεστεί, η οποία μπορεί να οδηγήσει σε προβλήματα χρονικού ορίου σε ορισμένα περιβάλλοντα ιστού. Ως εναλλακτική λύση, αυτή η ενέργεια πρέπει να εκτελείται χρησιμοποιώντας μια εντολή τερματικού.',
|
||||
|
||||
// Recycle Bin
|
||||
'recycle_bin' => 'Κάδος Ανακύκλωσης',
|
||||
'recycle_bin_desc' => 'Εδώ μπορείτε να επαναφέρετε στοιχεία που έχουν διαγραφεί ή να επιλέξετε να τα αφαιρέσετε οριστικά από το σύστημα. Αυτή η λίστα δεν είναι φιλτραρισμένη όπως γίνεται σε παρόμοιες λίστες δραστηριοτήτων στο σύστημα στις οποίες εφαρμόζονται φίλτρα αδειών.',
|
||||
'recycle_bin_deleted_item' => 'Διαγραμμένο στοιχείο',
|
||||
'recycle_bin_deleted_parent' => 'Γονικό Στοιχείο',
|
||||
'recycle_bin_deleted_by' => 'Διαγράφηκε από',
|
||||
'recycle_bin_deleted_at' => 'Ημ/νια - Ώρα Διαγραφής',
|
||||
'recycle_bin_permanently_delete' => 'Οριστική Διαγραφή',
|
||||
'recycle_bin_restore' => 'Επαναφορά',
|
||||
'recycle_bin_contents_empty' => 'Ο κάδος ανακύκλωσης είναι επί του παρόντος άδειος',
|
||||
'recycle_bin_empty' => 'Αδειάστε τον Κάδο Ανακύκλωσης',
|
||||
'recycle_bin_empty_confirm' => 'Αυτό θα καταστρέψει οριστικά όλα τα αντικείμενα στον κάδο ανακύκλωσης, συμπεριλαμβανομένου του περιεχομένου που περιέχεται σε κάθε αντικείμενο. Είστε βέβαιοι ότι θέλετε να αδειάσετε τον κάδο ανακύκλωσης;',
|
||||
'recycle_bin_destroy_confirm' => 'Αυτή η ενέργεια θα διαγράψει οριστικά από το σύστημα αυτό το στοιχείο μαζί με τυχόν θυγατρικά, που αναφέρονται παρακάτω. Μετά την επιβεβαίωση της διαγραφής δεν θα μπορείτε να επαναφέρετε αυτό το περιεχόμενο. Είστε βέβαιοι ότι θέλετε να διαγράψετε οριστικά αυτό το στοιχείο;',
|
||||
'recycle_bin_destroy_list' => 'Αντικείμενα για καταστροφή',
|
||||
'recycle_bin_restore_list' => 'Αντικείμενα για επαναφορά',
|
||||
'recycle_bin_restore_confirm' => 'Αυτή η ενέργεια θα επαναφέρει το διαγραμμένο στοιχείο, συμπεριλαμβανομένων τυχόν θυγατρικών στοιχείων, στην αρχική τους θέση. Εάν η αρχική τοποθεσία έχει από τότε διαγραφεί και βρίσκεται τώρα στον κάδο ανακύκλωσης, θα πρέπει επίσης να αποκατασταθεί και το γονικό στοιχείο.',
|
||||
'recycle_bin_restore_deleted_parent' => 'Το γονικό στοιχείο αυτού του στοιχείου έχει επίσης διαγραφεί. Αυτά θα παραμείνουν διαγραμμένα μέχρι να αποκατασταθεί και αυτός ο γονέας.',
|
||||
'recycle_bin_restore_parent' => 'Επαναφορά Γονέα',
|
||||
'recycle_bin_destroy_notification' => 'Διαγράφηκαν :count συνολικά αντικείμενα από τον κάδο ανακύκλωσης.',
|
||||
'recycle_bin_restore_notification' => 'Επαναφέρθηκαν :count συνολικά αντικείμενα από τον κάδο ανακύκλωσης.',
|
||||
|
||||
// Audit Log
|
||||
'audit' => 'Αρχείο Καταγραφής',
|
||||
'audit_desc' => 'Αυτό το αρχείο καταγραφής ελέγχου ενεργειών, εμφανίζει μια λίστα δραστηριοτήτων που παρακολουθούνται στο σύστημα. Αυτή η λίστα δεν είναι φιλτραρισμένη σε αντίθεση με παρόμοιες λίστες δραστηριοτήτων στο σύστημα όπου εφαρμόζονται φίλτρα αδειών.',
|
||||
'audit_event_filter' => 'Φίλτρο Συμβάντων',
|
||||
'audit_event_filter_no_filter' => 'Χωρίς Φίλτρο',
|
||||
'audit_deleted_item' => 'Διαγραμμένο στοιχείο',
|
||||
'audit_deleted_item_name' => 'Ονομα: :name',
|
||||
'audit_table_user' => 'Χρήστης',
|
||||
'audit_table_event' => 'Συμβάν',
|
||||
'audit_table_related' => 'Σχετικό Αντικείμενο ή Λεπτομέρεια',
|
||||
'audit_table_ip' => 'Διεύθυνση IP',
|
||||
'audit_table_date' => 'Ημερομηνία Δραστηριότητας',
|
||||
'audit_date_from' => 'Εύρος Ημερομηνίας Από',
|
||||
'audit_date_to' => 'Εύρος Ημερομηνίας Έως',
|
||||
|
||||
// Role Settings
|
||||
'roles' => 'Ρόλοι',
|
||||
'role_user_roles' => 'Ρόλοι Χρηστών',
|
||||
'role_create' => 'Δημιουργία νέου ρόλου',
|
||||
'role_create_success' => 'Ο Ρόλος δημιουργήθηκε με επιτυχία',
|
||||
'role_delete' => 'Διαγραφή Ρόλου',
|
||||
'role_delete_confirm' => 'Αυτό θα διαγράψει τον ρόλο με το όνομα \':roleName\'.',
|
||||
'role_delete_users_assigned' => 'Σε αυτόν τον ρόλο έχουν εκχωρηθεί :userCount χρήστες. Εάν θέλετε να μετεγκαταστήσετε τους χρήστες από αυτόν τον ρόλο, επιλέξτε έναν νέο ρόλο παρακάτω.',
|
||||
'role_delete_no_migration' => "Μην μεταφέρετε χρήστες",
|
||||
'role_delete_sure' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτόν τον ρόλο;',
|
||||
'role_delete_success' => 'Ο ρόλος διαγράφηκε επιτυχώς',
|
||||
'role_edit' => 'Επεξεργασία Ρόλου',
|
||||
'role_details' => 'Λεπτομέρειες Ρόλου',
|
||||
'role_name' => 'Όνομα Ρόλου',
|
||||
'role_desc' => 'Σύντομη περιγραφή του Ρόλου',
|
||||
'role_mfa_enforced' => 'Απαιτεί έλεγχο ταυτότητας πολλαπλών παραγόντων',
|
||||
'role_external_auth_id' => 'Εξωτερικά αναγνωριστικά (IDs) ελέγχου ταυτότητας',
|
||||
'role_system' => 'Δικαιώματα Συστήματος',
|
||||
'role_manage_users' => 'Διαχείριση Χρηστών',
|
||||
'role_manage_roles' => 'Διαχείριση Ρόλων και Δικαιωμάτων ρόλων',
|
||||
'role_manage_entity_permissions' => 'Διαχειριστείτε όλα τα δικαιώματα βιβλίου, κεφαλαίων και σελίδων',
|
||||
'role_manage_own_entity_permissions' => 'Διαχειριστείτε τα δικαιώματα στο δικό σας βιβλίο, κεφάλαιο και σελίδες',
|
||||
'role_manage_page_templates' => 'Διαχείριση προτύπων σελίδων',
|
||||
'role_access_api' => 'Πρόσβαση στο API του συστήματος',
|
||||
'role_manage_settings' => 'Διαχειριστείτε τις ρυθμίσεις του ΑΡΙ',
|
||||
'role_export_content' => 'Εξαγωγή περιεχομένου',
|
||||
'role_editor_change' => 'Αλλαγή προγράμματος επεξεργασίας σελίδας',
|
||||
'role_asset' => 'Δικαιώματα Συστήματος',
|
||||
'roles_system_warning' => 'Λάβετε υπόψη ότι η πρόσβαση σε οποιοδήποτε από τις τρεις παραπάνω άδειες (δικαιώματα) μπορεί να επιτρέψει σε έναν χρήστη να αλλάξει τα δικά του προνόμια ή τα προνόμια άλλων στο σύστημα. Εκχωρήστε ρόλους με αυτά τα δικαιώματα μόνο σε αξιόπιστους χρήστες.',
|
||||
'role_asset_desc' => 'Αυτά τα δικαιώματα ελέγχουν την προεπιλεγμένη πρόσβαση στα στοιχεία (άδειες) εντός του συστήματος. Τα δικαιώματα σε Βιβλία, Κεφάλαια και Σελίδες θα παρακάμψουν αυτές τις άδειες.',
|
||||
'role_asset_admins' => 'Οι διαχειριστές έχουν αυτόματα πρόσβαση σε όλο το περιεχόμενο, αλλά αυτές οι επιλογές ενδέχεται να εμφανίζουν ή να αποκρύπτουν τις επιλογές διεπαφής χρήστη.',
|
||||
'role_asset_image_view_note' => 'Αυτό σχετίζεται με την ορατότητα εντός του διαχειριστή εικόνων. Η πραγματική πρόσβαση των μεταφορτωμένων αρχείων εικόνας θα εξαρτηθεί από την επιλογή αποθήκευσης εικόνας συστήματος.',
|
||||
'role_all' => 'Ολα',
|
||||
'role_own' => 'Τα δικά του',
|
||||
'role_controlled_by_asset' => 'Ελέγχονται από το στοιχείο στο οποίο ανεβαίνουν (Ράφια, Βιβλία)',
|
||||
'role_save' => 'Αποθήκευση Ρόλου',
|
||||
'role_update_success' => 'Ο Ρόλος ενημερώθηκε με επιτυχία',
|
||||
'role_users' => 'Χρήστες σε αυτόν τον Ρόλο',
|
||||
'role_users_none' => 'Σε κανένα χρήστη δεν έχει ανατεθεί αυτήν τη στιγμή αυτός ο ρόλος.',
|
||||
|
||||
// Users
|
||||
'users' => 'Χρήστες',
|
||||
'user_profile' => 'Προφίλ Χρήστη',
|
||||
'users_add_new' => 'Προσθήκη νέου Χρήστη',
|
||||
'users_search' => 'Αναζήτηση Χρηστών',
|
||||
'users_latest_activity' => 'Τελευταία Δραστηριότητα',
|
||||
'users_details' => 'Στοιχεία χρήστη',
|
||||
'users_details_desc' => 'Ορίστε ένα εμφανιζόμενο όνομα και μια διεύθυνση email για αυτόν τον χρήστη. Η διεύθυνση email θα χρησιμοποιηθεί για τη σύνδεση στην εφαρμογή.',
|
||||
'users_details_desc_no_email' => 'Ορίστε το όνομα που θα εμφανίζεται για το χρήστη αυτόν, έτσι ώστε να είναι αναγνωρίσιμος από τους υπόλοιπους.',
|
||||
'users_role' => 'Ρόλοι χρήστη',
|
||||
'users_role_desc' => 'Επιλέξτε σε ποιους ρόλους θα εκχωρηθεί αυτός ο χρήστης. Εάν ένας χρήστης έχει εκχωρηθεί σε πολλούς ρόλους, τα δικαιώματα από αυτούς τους ρόλους θα στοιβάζονται και θα λαμβάνουν όλες τις ικανότητες των ρόλων που έχουν εκχωρηθεί.',
|
||||
'users_password' => 'Κωδικός Χρήστη',
|
||||
'users_password_desc' => 'Ορίστε έναν κωδικό πρόσβασης που θα χρησιμοποιείται για τη σύνδεση στην εφαρμογή. Αυτός πρέπει να είναι τουλάχιστον 8 χαρακτήρες.',
|
||||
'users_send_invite_text' => 'Μπορείτε να επιλέξετε να στείλετε σε αυτόν τον χρήστη ένα email πρόσκλησης που του επιτρέπει να ορίσει τον δικό του κωδικό πρόσβασης. Σε διαφορετική περίπτωση μπορείτε να ορίσετε τον κωδικό πρόσβασής του εσείς.',
|
||||
'users_send_invite_option' => 'Αποστολή email πρόσκλησης σε χρήστη',
|
||||
'users_external_auth_id' => 'Εξωτερικός έλεγχος ταυτότητας',
|
||||
'users_external_auth_id_desc' => 'Αυτό είναι το αναγνωριστικό που χρησιμοποιείται για την αντιστοίχιση αυτού του χρήστη κατά την επικοινωνία με το εξωτερικό σύστημα ελέγχου ταυτότητας.',
|
||||
'users_password_warning' => 'Συμπληρώστε τα παρακάτω μόνο αν θέλετε να αλλάξετε τον κωδικό πρόσβασής σας.',
|
||||
'users_system_public' => 'Αυτός ο χρήστης αντιπροσωπεύει οποιονδήποτε επισκέπτη που επισκέπτεται τη Βιβλιοθήκη σας. Δεν μπορεί να χρησιμοποιηθεί για τη σύνδεση αλλά εκχωρείται αυτόματα.',
|
||||
'users_delete' => 'Διαγραφή Χρήστη',
|
||||
'users_delete_named' => 'Διαγραφή χρήστη :userName',
|
||||
'users_delete_warning' => 'Αυτό θα διαγράψει πλήρως αυτόν τον χρήστη με το όνομα \':userName\' από το σύστημα.',
|
||||
'users_delete_confirm' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτόν τον χρήστη;',
|
||||
'users_migrate_ownership' => 'Μεταφορά ιδιοκτησίας',
|
||||
'users_migrate_ownership_desc' => 'Επιλέξτε έναν χρήστη εδώ, εάν θέλετε ένας άλλος χρήστης να γίνει ο κάτοχος όλων των στοιχείων που ανήκουν επί του παρόντος σε αυτόν τον χρήστη.',
|
||||
'users_none_selected' => 'Δεν έχει επιλεγεί χρήστης',
|
||||
'users_edit' => 'Επεξεργασία Χρήστη',
|
||||
'users_edit_profile' => 'Ρυθμίσεις προφίλ',
|
||||
'users_avatar' => 'Avatar Χρήστη',
|
||||
'users_avatar_desc' => 'Επιλέξτε μια εικόνα που θα αντιπροσωπεύει αυτόν τον χρήστη. Αυτό θα πρέπει να είναι περίπου 256px τετράγωνο.',
|
||||
'users_preferred_language' => 'Προτιμώμενη γλώσσα',
|
||||
'users_preferred_language_desc' => 'Αυτή η επιλογή θα αλλάξει τη γλώσσα που χρησιμοποιείται για τη διεπαφή χρήστη της εφαρμογής. Αυτό δεν θα επηρεάσει οποιοδήποτε περιεχόμενο που δημιουργήθηκε από χρήστες.',
|
||||
'users_social_accounts' => 'Λογαριασμοί Κοινωνικής δικτύωσης ',
|
||||
'users_social_accounts_info' => 'Εδώ μπορείτε να συνδέσετε τους άλλους λογαριασμούς σας για ταχύτερη και ευκολότερη σύνδεση. Η αποσύνδεση ενός λογαριασμού εδώ δεν ανακαλεί προηγουμένως εξουσιοδοτημένη πρόσβαση. Ανάκληση πρόσβασης από τις ρυθμίσεις προφίλ σας στον συνδεδεμένο κοινωνικό λογαριασμό.',
|
||||
'users_social_connect' => 'Σύνδεση λογαριασμού',
|
||||
'users_social_disconnect' => 'Αποσύνδεση λογαριασμού',
|
||||
'users_social_connected' => ':socialΛογαριασμός λογαριασμού συνδέθηκε με επιτυχία στο προφίλ σας.',
|
||||
'users_social_disconnected' => ':socialΛογαριασμός αποσυνδέθηκε επιτυχώς από το προφίλ σας.',
|
||||
'users_api_tokens' => 'API Tokens',
|
||||
'users_api_tokens_none' => 'Δεν έχουν δημιουργηθεί διακριτικά API για αυτόν το χρήστη',
|
||||
'users_api_tokens_create' => 'Δημιουργία διακριτικού Api Token',
|
||||
'users_api_tokens_expires' => 'Λήγει',
|
||||
'users_api_tokens_docs' => 'Τεκμηρίωση API',
|
||||
'users_mfa' => 'Έλεγχος Ταυτοτητας Πολλαπλων Παραγοντων',
|
||||
'users_mfa_desc' => 'Ρυθμίστε τον έλεγχο ταυτότητας πολλαπλών παραγόντων ως ένα επιπλέον επίπεδο ασφάλειας για τον λογαριασμό χρήστη σας.',
|
||||
'users_mfa_x_methods' => ':count μέθοδος έχει ρυθμιστεί:count μέθοδοι',
|
||||
'users_mfa_configure' => 'Ρύθμιση Μεθόδων',
|
||||
|
||||
// API Tokens
|
||||
'user_api_token_create' => 'Δημιουργία διακριτικού (API Token)',
|
||||
'user_api_token_name' => 'Όνομα',
|
||||
'user_api_token_name_desc' => 'Δώστε στο διακριτικό σας ένα ευανάγνωστο όνομα ως μελλοντική υπενθύμιση του σκοπού του.',
|
||||
'user_api_token_expiry' => 'Ημερομηνία λήξης',
|
||||
'user_api_token_expiry_desc' => 'Ορίστε μια ημερομηνία κατά την οποία λήγει αυτό το διακριτικό. Μετά από αυτήν την ημερομηνία, τα αιτήματα που γίνονται με αυτό το διακριτικό δεν θα λειτουργούν πλέον. Αν αφήσετε αυτό το πεδίο κενό, θα οριστεί η λήξη 100 χρόνια στο μέλλον.',
|
||||
'user_api_token_create_secret_message' => 'Αμέσως μετά τη δημιουργία αυτού του διακριτικού θα δημιουργηθεί και θα εμφανιστεί ένα "Token ID" & "Token Secret". Το μυστικό(Token Secret) θα εμφανιστεί μόνο μία φορά, επομένως φροντίστε να αντιγράψετε την τιμή σε κάποιο ασφαλές μέρος πριν συνεχίσετε.',
|
||||
'user_api_token_create_success' => 'Το διακριτικό API δημιουργήθηκε με επιτυχία',
|
||||
'user_api_token_update_success' => 'Το διακριτικό API ενημερώθηκε με επιτυχία',
|
||||
'user_api_token' => 'API Token',
|
||||
'user_api_token_id' => 'Token ID',
|
||||
'user_api_token_id_desc' => 'Αυτό είναι ένα μη επεξεργάσιμο αναγνωριστικό που δημιουργείται από το σύστημα για αυτό το διακριτικό, το οποίο θα πρέπει να παρέχεται σε αιτήματα API.',
|
||||
'user_api_token_secret' => 'Μυστικό Token',
|
||||
'user_api_token_secret_desc' => 'Αυτό είναι ένα μυστικό που δημιουργείται από το σύστημα για αυτό το διακριτικό και θα πρέπει να παρέχεται σε αιτήματα API. Αυτό θα εμφανιστεί μόνο μία φορά, επομένως αντιγράψτε αυτήν την τιμή σε κάποιο ασφαλές μέρος.',
|
||||
'user_api_token_created' => 'Το Διακριτικό δημιουργήθηκε :timeAgo',
|
||||
'user_api_token_updated' => 'Το Διακριτικό ενημερώθηκε :timeAgo',
|
||||
'user_api_token_delete' => 'Διαγραφή Διακριτικού',
|
||||
'user_api_token_delete_warning' => 'Αυτό θα διαγράψει πλήρως αυτό το διακριτικό API με το όνομα \':tokenName\' από το σύστημα.',
|
||||
'user_api_token_delete_confirm' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το διακριτικό API;',
|
||||
'user_api_token_delete_success' => 'Το διακριτικό API διαγράφηκε με επιτυχία',
|
||||
|
||||
// Webhooks
|
||||
'webhooks' => 'Webhooks',
|
||||
'webhooks_create' => 'Δημιουργία νέου Webhook',
|
||||
'webhooks_none_created' => 'Δεν έχουν δημιουργηθεί ακόμη webhook.',
|
||||
'webhooks_edit' => 'Επεξεργασία Webhook',
|
||||
'webhooks_save' => 'Αποθήκευση Webhook',
|
||||
'webhooks_details' => 'Λεπτομέρειες Webhook',
|
||||
'webhooks_details_desc' => 'Παρέχετε ένα φιλικό προς τον χρήστη όνομα και ένα τελικό σημείο POST ως τοποθεσία για την αποστολή των δεδομένων webhook.',
|
||||
'webhooks_events' => 'Συμβάντα Webhook',
|
||||
'webhooks_events_desc' => 'Επιλέξτε όλα τα συμβάντα που θα πρέπει να ενεργοποιήσουν αυτό το webhook για κλήση.',
|
||||
'webhooks_events_warning' => 'Λάβετε υπόψη ότι αυτά τα συμβάντα θα ενεργοποιηθούν για όλα τα επιλεγμένα συμβάντα, ακόμη και αν εφαρμοστούν προσαρμοσμένα δικαιώματα. Βεβαιωθείτε ότι η χρήση αυτού του webhook δεν θα αποκαλύψει εμπιστευτικό περιεχόμενο.',
|
||||
'webhooks_events_all' => 'Όλα τα συμβάντα του συστήματος',
|
||||
'webhooks_name' => 'Όνομα Webhook',
|
||||
'webhooks_timeout' => 'Χρονικό όριο λήξης αιτήματος Webhook (δευτερόλεπτα)',
|
||||
'webhooks_endpoint' => 'Τελικό Σημείο Webhook',
|
||||
'webhooks_active' => 'Webhook Ενεργό',
|
||||
'webhook_events_table_header' => 'Συμβάντα',
|
||||
'webhooks_delete' => 'Διαγραφή Webhook',
|
||||
'webhooks_delete_warning' => 'Αυτό θα διαγράψει πλήρως αυτό το webhook, με το όνομα \':webhookName\', από το σύστημα.',
|
||||
'webhooks_delete_confirm' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το webhook;',
|
||||
'webhooks_format_example' => 'Παράδειγμα μορφής Webhook',
|
||||
'webhooks_format_example_desc' => 'Τα δεδομένα Webhook αποστέλλονται ως αίτημα POST στο διαμορφωμένο τελικό σημείο ως JSON ακολουθώντας την παρακάτω μορφή. Οι ιδιότητες "related_item" και "url" είναι προαιρετικές και εξαρτώνται από τον τύπο του συμβάντος που ενεργοποιείται.',
|
||||
'webhooks_status' => 'Κατάσταση Webhook',
|
||||
'webhooks_last_called' => 'Τελευταία κλήση:',
|
||||
'webhooks_last_errored' => 'Τελευταίο σφάλμα:',
|
||||
'webhooks_last_error_message' => 'Τελευταίο μήνυμα λάθους:',
|
||||
|
||||
|
||||
//! If editing translations files directly please ignore this in all
|
||||
//! languages apart from en. Content will be auto-copied from en.
|
||||
//!////////////////////////////////
|
||||
'language_select' => [
|
||||
'en' => 'English',
|
||||
'ar' => 'العربية',
|
||||
'bg' => 'Bǎlgarski',
|
||||
'bs' => 'Bosanski',
|
||||
'ca' => 'Català',
|
||||
'cs' => 'Česky',
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
'hu' => 'Magyar',
|
||||
'id' => 'Bahasa Indonesia',
|
||||
'it' => 'Italian',
|
||||
'ja' => '日本語',
|
||||
'ko' => '한국어',
|
||||
'lt' => 'Lietuvių Kalba',
|
||||
'lv' => 'Latviešu Valoda',
|
||||
'nl' => 'Nederlands',
|
||||
'nb' => 'Norsk (Bokmål)',
|
||||
'pl' => 'Polski',
|
||||
'pt' => 'Português',
|
||||
'pt_BR' => 'Português do Brasil',
|
||||
'ro' => 'Română',
|
||||
'ru' => 'Русский',
|
||||
'sk' => 'Slovensky',
|
||||
'sl' => 'Slovenščina',
|
||||
'sv' => 'Svenska',
|
||||
'tr' => 'Türkçe',
|
||||
'uk' => 'Українська',
|
||||
'vi' => 'Tiếng Việt',
|
||||
'zh_CN' => '简体中文',
|
||||
'zh_TW' => '繁體中文',
|
||||
],
|
||||
//!////////////////////////////////
|
||||
];
|
||||
@@ -1,117 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Validation Lines
|
||||
* The following language lines contain the default error messages used by
|
||||
* the validator class. Some of these rules have multiple versions such
|
||||
* as the size rules. Feel free to tweak each of these messages here.
|
||||
*/
|
||||
return [
|
||||
|
||||
// Standard laravel validation lines
|
||||
'accepted' => 'Το :attribute πρέπει να γίνει δεκτό.',
|
||||
'active_url' => 'Το :attribute δεν είναι ένα έγκυρο URL.',
|
||||
'after' => 'Το :attribute πρέπει να είναι μια ημερομηνία μετά τις :date.',
|
||||
'alpha' => 'Το :attribute μπορεί να περιέχει μόνο γράμματα.',
|
||||
'alpha_dash' => 'Tο :attribute μπορεί να περιλαμβάνει μόνο γράμματα, αριθμούς, παύλες και κάτω παύλες.',
|
||||
'alpha_num' => 'Tο :attribute μπορεί να περιλαμβάνει μόνο γράμματα και αριθμούς.',
|
||||
'array' => 'Το :attribute πρέπει να είναι πίνακας.',
|
||||
'backup_codes' => 'Ο παρεχόμενος κωδικός δεν είναι έγκυρος ή έχει ήδη χρησιμοποιηθεί.',
|
||||
'before' => 'Tο :attribute πρέπει να είναι μια ημερομηνία πριν από :date.',
|
||||
'between' => [
|
||||
'numeric' => 'Το :attribute πρέπει να είναι μεταξύ :min και :max.',
|
||||
'file' => 'Το :attribute πρέπει να είναι μεταξύ :min και :max kilobytes.',
|
||||
'string' => 'Το πεδίο :attribute πρέπει να είναι μεταξύ από :min και :max characters.',
|
||||
'array' => 'Το πεδίο :attribute πρέπει να είναι μεταξύ :min και :max αντικείμενα.',
|
||||
],
|
||||
'boolean' => 'Το πεδίο :attribute πρέπει να είναι σωστό ή λάθος.',
|
||||
'confirmed' => 'Η επιβεβαίωση του :attribute δεν ταιριάζει.',
|
||||
'date' => 'Το :attribute δεν έχει έγκυρη ημερομηνία.',
|
||||
'date_format' => 'Το :attribute δεν ταιριάζει με τη μορφή :format.',
|
||||
'different' => 'Τα πεδία :attribute και :other πρέπει να είναι διαφορετικά.',
|
||||
'digits' => 'Το πεδίο :attribute πρέπει να είναι :digits ψηφία.',
|
||||
'digits_between' => 'To :attribute πρέπει να είναι μεταξύ :min και :max ψηφία.',
|
||||
'email' => 'Το πεδίο :attribute πρέπει να είναι μία έγκυρη διεύθυνση E-mail.',
|
||||
'ends_with' => 'Το :attribute πρέπει να τελειώνει με μια απο τις ακόλουθες: :values',
|
||||
'file' => 'Το :attribute πρέπει να παρέχεται ως έγκυρο αρχείο.',
|
||||
'filled' => 'Το πεδίο :attribute είναι υποχρεωτικό.',
|
||||
'gt' => [
|
||||
'numeric' => 'Το :attribute πρέπει να είναι μεγαλύτερο από :value.',
|
||||
'file' => 'To :attribute πρέπει να είναι μεγαλύτερο από :value kilobytes.',
|
||||
'string' => 'Tο :attribute πρέπει να έχει περισσότερους από :value χαρακτήρες.',
|
||||
'array' => 'Το :attribute πρέπει να περιέχει περισσότερα από :value αντικείμενα.',
|
||||
],
|
||||
'gte' => [
|
||||
'numeric' => 'Το :attribute πρέπει να είναι μεγαλύτερο ή ίσο από :value.',
|
||||
'file' => 'Το :attribute πρέπει να είναι μεγαλύτερο ή ίσο με :value kilobytes.',
|
||||
'string' => 'To :attribute πρέπει να είναι μεγαλύτερο ή ίσο από :value χαρακτήρες.',
|
||||
'array' => 'Tο :attribute πρέπει να έχει :value αντικείμενα ή περισσότερα.',
|
||||
],
|
||||
'exists' => 'Το επιλεγμένο :attribute δεν είναι έγκυρο.',
|
||||
'image' => 'Tο :attribute πρέπει να είναι εικόνα.',
|
||||
'image_extension' => 'Το πεδίο :attribute πρέπει να έχει μια έγκυρη & υποστηριζόμενη επέκταση εικόνας.',
|
||||
'in' => 'Το επιλεγμένο :attribute δεν είναι έγκυρο.',
|
||||
'integer' => 'Tο :attribute πρέπει να είναι ακέραιος αριθμός.',
|
||||
'ip' => 'Το πεδίο :attribute πρέπει να είναι μία έγκυρη διεύθυνση IP.',
|
||||
'ipv4' => 'Tο :attribute πρέπει να είναι μια έγκυρη διεύθυνση IPv4.',
|
||||
'ipv6' => 'Tο :attribute πρέπει να είναι μια έγκυρη διεύθυνση IPv6.',
|
||||
'json' => 'H :attribute πρεπει να είναι μια έγκυρη συμβολοσειρά JSON.',
|
||||
'lt' => [
|
||||
'numeric' => 'Tο :attribute πρέπει να είναι λιγότερο από :value.',
|
||||
'file' => 'To :attribute πρέπει να είναι μικρότερο από :value kilobytes.',
|
||||
'string' => 'To :attribute πρέπει να είναι μικρότερο από :value kilobytes.',
|
||||
'array' => 'Tο :attribute πρέπει να έχει λιγότερα από :value αντικείμενα.',
|
||||
],
|
||||
'lte' => [
|
||||
'numeric' => 'Το :attribute πρέπει να είναι μικρότερο ή ίσο του :value.',
|
||||
'file' => 'Το :attribute πρέπει να είναι μικρότερο ή ίσο του :value kilobytes.',
|
||||
'string' => 'Tο :attribute πρέπει να έχει λιγότερους από ή ίδιους :value χαρακτήρες.',
|
||||
'array' => 'Tο :attribute δεν πρέπει να έχει περισσότερα από :value αντικείμενα.',
|
||||
],
|
||||
'max' => [
|
||||
'numeric' => 'Tο :attribute δεν μπορεί να είναι μεγαλύτερο από :max.',
|
||||
'file' => 'To :attribute δεν μπορεί να είναι μεγαλύτερο από :max kilobytes.',
|
||||
'string' => 'Το :attribute δεν μπορεί να είναι μεγαλύτερο από :max χαρακτήρες.',
|
||||
'array' => 'Tο :attribute δεν μπορεί να έχει περισσότερα από :max αντικείμενα.',
|
||||
],
|
||||
'mimes' => 'Το πεδίο :attribute πρέπει να είναι ένα αρχείου τύπου: :values.',
|
||||
'min' => [
|
||||
'numeric' => 'To :attribute πρέπει να είναι τουλάχιστον :min.',
|
||||
'file' => 'Το :attribute πρέπει είναι τουλάχιστον :min kilobytes.',
|
||||
'string' => 'Το :attribute πρέπει να είναι τουλάχιστον :min χαρακτήρες.',
|
||||
'array' => 'To :attribute πρέπει να έχει τουλάχιστον :min αντικείμενα.',
|
||||
],
|
||||
'not_in' => 'Το επιλεγμένο :attribute δεν είναι έγκυρο.',
|
||||
'not_regex' => 'Η μορφή του :attribute δεν είναι έγκυρη.',
|
||||
'numeric' => 'To :attribute πρέπει να είναι αριθμός.',
|
||||
'regex' => 'Το :attribute έχει μη έγκυρη μορφή.',
|
||||
'required' => 'Το πεδίο :attribute είναι υποχρεωτικό.',
|
||||
'required_if' => 'To πεδίο :attribute είναι απαραίτητο εκτός αν :other είναι σε :values.',
|
||||
'required_with' => 'To πεδίο :attribute είναι απαραίτητο όταν υπάρχουν οι :values.',
|
||||
'required_with_all' => 'To πεδίο :attribute είναι απαραίτητο όταν υπάρχουν οι :values.',
|
||||
'required_without' => 'To πεδίο :attribute είναι απαραίτητο όταν δεν υπάρχουν οι :values.',
|
||||
'required_without_all' => 'To πεδίο :attribute είναι απαραίτητο όταν δεν υπάρχουν καμία από :values.',
|
||||
'same' => 'Το πεδίο :attribute και :other πρέπει να είναι ίδια.',
|
||||
'safe_url' => 'Ο παρεχόμενος σύνδεσμος μπορεί να μην είναι ασφαλής.',
|
||||
'size' => [
|
||||
'numeric' => 'Το :attribute πρέπει να είναι :size.',
|
||||
'file' => 'Το :attribute πρέπει να έχει μέγεθος :size kilobytes.',
|
||||
'string' => 'Το πεδίο :attribute πρέπει να είναι :size χαρακτήρες.',
|
||||
'array' => 'Το πεδίο :attribute πρέπει να περιέχει :size αντικείμενα.',
|
||||
],
|
||||
'string' => 'Το :attribute πρέπει να είναι συμβολοσειρά.',
|
||||
'timezone' => 'Το πεδίο :attribute πρέπει να είναι μία έγκυρη ζώνη ώρας.',
|
||||
'totp' => 'Ο παρεχόμενος κωδικός δεν είναι έγκυρος ή έχει λήξει.',
|
||||
'unique' => 'Το πεδίο :attribute έχει ήδη χρησιμοποιηθεί.',
|
||||
'url' => 'Η μορφή του :attribute δεν είναι έγκυρη.',
|
||||
'uploaded' => 'Δεν ήταν δυνατή η αποστολή του αρχείου. Ο διακομιστής ενδέχεται να μην δέχεται αρχεία αυτού του μεγέθους.',
|
||||
|
||||
// Custom validation lines
|
||||
'custom' => [
|
||||
'password-confirm' => [
|
||||
'required_with' => 'Απαιτείται επιβεβαίωση κωδικού πρόσβασης',
|
||||
],
|
||||
],
|
||||
|
||||
// Custom validation attributes
|
||||
'attributes' => [],
|
||||
];
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Insertar/Editar enlace',
|
||||
'insert_horizontal_line' => 'Insertar línea horizontal',
|
||||
'insert_code_block' => 'Insertar bloque de código',
|
||||
'edit_code_block' => 'Editar bloque de código',
|
||||
'insert_drawing' => 'Insertar/editar dibujo',
|
||||
'drawing_manager' => 'Gestor de dibujo',
|
||||
'insert_media' => 'Insertar/editar medios',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Permisos',
|
||||
'permissions_desc' => 'Establezca los permisos aquí para anular los permisos por defecto proporcionados por los roles de usuario.',
|
||||
'permissions_book_cascade' => 'Los permisos establecidos en los libros se aplicarán a sus capítulos y páginas, a menos que tengan sus propios permisos definidos.',
|
||||
'permissions_chapter_cascade' => 'Los permisos establecidos en los capítulos se aplicarán a sus páginas, a menos que tengan sus propios permisos definidos.',
|
||||
'permissions_intro' => 'Una vez habilitado, estos permisos tendrán prioridad por encima de cualquier permiso establecido.',
|
||||
'permissions_enable' => 'Habilitar permisos personalizados',
|
||||
'permissions_save' => 'Guardar permisos',
|
||||
'permissions_owner' => 'Propietario',
|
||||
'permissions_role_everyone_else' => 'Todos los demás',
|
||||
'permissions_role_everyone_else_desc' => 'Establecer permisos para todos los roles sin permisos específicos asignados.',
|
||||
'permissions_role_override' => 'Reemplazar permisos para el rol',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Resultados de búsqueda',
|
||||
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'da' => 'Danés',
|
||||
'de' => 'Alemán (informal)',
|
||||
'de_informal' => 'Alemán (formal)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Insertar/Editar Enlace',
|
||||
'insert_horizontal_line' => 'Insertar línea horizontal',
|
||||
'insert_code_block' => 'Insertar bloque de código',
|
||||
'edit_code_block' => 'Editar bloque de código',
|
||||
'insert_drawing' => 'Insertar/editar dibujo',
|
||||
'drawing_manager' => 'Gestor de dibujo',
|
||||
'insert_media' => 'Insertar/editar media',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Permisos',
|
||||
'permissions_desc' => 'Establezca los permisos aquí para anular los permisos por defecto proporcionados por los roles de usuario.',
|
||||
'permissions_book_cascade' => 'Los permisos establecidos en los libros se aplicarán a sus capítulos y páginas, a menos que tengan sus propios permisos definidos.',
|
||||
'permissions_chapter_cascade' => 'Los permisos establecidos en los capítulos se aplicarán a sus páginas, a menos que tengan sus propios permisos definidos.',
|
||||
'permissions_intro' => 'una vez habilitado, Estos permisos tendrán prioridad por encima de cualquier permiso establecido.',
|
||||
'permissions_enable' => 'Habilitar permisos custom',
|
||||
'permissions_save' => 'Guardar permisos',
|
||||
'permissions_owner' => 'Propietario',
|
||||
'permissions_role_everyone_else' => 'Todos los demás',
|
||||
'permissions_role_everyone_else_desc' => 'Establecer permisos para todos los roles sin permisos específicos asignados.',
|
||||
'permissions_role_override' => 'Reemplazar permisos para el rol',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Buscar resultados',
|
||||
|
||||
@@ -281,7 +281,6 @@ return [
|
||||
'da' => 'Danés',
|
||||
'de' => 'Alemán (informal)',
|
||||
'de_informal' => 'Alemán (formal)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Sisesta/muuda linki',
|
||||
'insert_horizontal_line' => 'Sisesta vahejoon',
|
||||
'insert_code_block' => 'Sisesta koodiplokk',
|
||||
'edit_code_block' => 'Muuda koodiplokki',
|
||||
'insert_drawing' => 'Sisesta/muuda joonist',
|
||||
'drawing_manager' => 'Jooniste haldur',
|
||||
'insert_media' => 'Sisesta/muuda meediat',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Õigused',
|
||||
'permissions_desc' => 'Sea siin õigused, et kirjutada üle rollide vaikimisi õigused.',
|
||||
'permissions_book_cascade' => 'Raamatutele seatud õigused rakenduvad automaatselt peatükkidele ja lehtedele, kui neile pole seatud oma õiguseid.',
|
||||
'permissions_chapter_cascade' => 'Peatükkidele seatud õigused rakenduvad automaatselt lehtedele, kui neile pole seatud oma õiguseid.',
|
||||
'permissions_intro' => 'Kui kohandatud õigused on lubatud, rakendatakse neid eelisjärjekorras, enne rolli õiguseid.',
|
||||
'permissions_enable' => 'Luba kohandatud õigused',
|
||||
'permissions_save' => 'Salvesta õigused',
|
||||
'permissions_owner' => 'Omanik',
|
||||
'permissions_role_everyone_else' => 'Kõik muud',
|
||||
'permissions_role_everyone_else_desc' => 'Sea õigused kõigile rollidele, mida pole üle kirjutatud.',
|
||||
'permissions_role_override' => 'Kirjuta rolli õigused üle',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Otsingutulemused',
|
||||
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'da' => 'Dansk (taani keel)',
|
||||
'de' => 'Deutsch (saksa keel)',
|
||||
'de_informal' => 'Deutsch (Du) (mitteformaalne saksa keel)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español (hispaania keel)',
|
||||
'es_AR' => 'Español Argentina (Argentiina hispaania keel)',
|
||||
'et' => 'Eesti keel',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Txertatu/Aldatu esteka',
|
||||
'insert_horizontal_line' => 'Txertatu linea horizontala',
|
||||
'insert_code_block' => 'Txertatu kode-blokea',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'Txertatu marrazki berria',
|
||||
'drawing_manager' => 'Marrazki kudeaketa',
|
||||
'insert_media' => 'Txertatu/aldatu media',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Baimenak',
|
||||
'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
|
||||
'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
|
||||
'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
|
||||
'permissions_intro' => 'Behin hau aktibatuta, baimen hauek lehentasuna izango dute beste edozein rol-engainetik.',
|
||||
'permissions_enable' => 'Baimena pertsonalizatuak Gaitu',
|
||||
'permissions_save' => 'Gorde baimenak',
|
||||
'permissions_owner' => 'Jabea',
|
||||
'permissions_role_everyone_else' => 'Everyone Else',
|
||||
'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
|
||||
'permissions_role_override' => 'Override permissions for role',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Bilaketaren emaitzak',
|
||||
@@ -364,9 +360,9 @@ return [
|
||||
'copy_consider_access' => 'A change of location, owner or permissions may result in this content being accessible to those previously without access.',
|
||||
|
||||
// Conversions
|
||||
'convert_to_shelf' => 'Apalategi bihurtu',
|
||||
'convert_to_shelf_contents_desc' => 'Liburu hau apalategi berri baten bihur dezakezu eduki berarekin. Liburu honetako kapituluak liburu berri bihurtuko dira. Liburu honek kapitulu batean ez dagoen orriren bat baldin badu, liburu honi izena aldatuko zaio eta orri horiek izango ditu, eta liburu hau apal berriaren parte bihurtuko da.',
|
||||
'convert_to_shelf_permissions_desc' => 'Liburu honetan ezarritako baimen guztiak apalategi berrira igaroko dira eta baimen propiorik ez duten haur-liburu berrietara kopiatuko dira. Kontuan izan apaletako baimenek ez dutela barruan askiesten, liburuek bezala.',
|
||||
'convert_to_shelf' => 'Convert to Shelf',
|
||||
'convert_to_shelf_contents_desc' => 'You can convert this book to a new shelf with the same contents. Chapters contained within this book will be converted to new books. If this book contains any pages, that are not in a chapter, this book will be renamed and contain such pages, and this book will become part of the new shelf.',
|
||||
'convert_to_shelf_permissions_desc' => 'Any permissions set on this book will be copied to the new shelf and to all new child books that don\'t have their own permissions enforced. Note that permissions on shelves do not auto-cascade to content within, as they do for books.',
|
||||
'convert_book' => 'Convert Book',
|
||||
'convert_book_confirm' => 'Are you sure you want to convert this book?',
|
||||
'convert_undo_warning' => 'This cannot be as easily undone.',
|
||||
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'افزودن/ویرایش پیوند',
|
||||
'insert_horizontal_line' => 'افزودن خط افقی',
|
||||
'insert_code_block' => 'افزودن بلوک کد',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'افزودن/ویرایش طرح',
|
||||
'drawing_manager' => 'مدیریت طراحی',
|
||||
'insert_media' => 'افزودن/ویرایش رسانه',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'مجوزها',
|
||||
'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
|
||||
'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
|
||||
'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
|
||||
'permissions_intro' => 'پس از فعال شدن، این مجوزها نسبت به مجوزهای تعیین شده نقش اولویت دارند.',
|
||||
'permissions_enable' => 'مجوزهای سفارشی را فعال کنید',
|
||||
'permissions_save' => 'ذخيره مجوزها',
|
||||
'permissions_owner' => 'مالک',
|
||||
'permissions_role_everyone_else' => 'Everyone Else',
|
||||
'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
|
||||
'permissions_role_override' => 'Override permissions for role',
|
||||
|
||||
// Search
|
||||
'search_results' => 'نتایج جستجو',
|
||||
@@ -140,7 +136,7 @@ return [
|
||||
'books_search_this' => 'این کتاب را جستجو کنید',
|
||||
'books_navigation' => 'ناوبری کتاب',
|
||||
'books_sort' => 'مرتب سازی مطالب کتاب',
|
||||
'books_sort_named' => 'مرتبسازی کتاب:bookName',
|
||||
'books_sort_named' => 'مرتب سازی کتاب:bookName',
|
||||
'books_sort_name' => 'مرتب سازی بر اساس نام',
|
||||
'books_sort_created' => 'مرتب سازی بر اساس تاریخ ایجاد',
|
||||
'books_sort_updated' => 'مرتب سازی بر اساس تاریخ به روز رسانی',
|
||||
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Insérer/Modifier un lien',
|
||||
'insert_horizontal_line' => 'Insérer une ligne horizontale',
|
||||
'insert_code_block' => 'Insérer un bloc de code',
|
||||
'edit_code_block' => 'Modifier le bloc de code',
|
||||
'insert_drawing' => 'Insérer/modifier un dessin',
|
||||
'drawing_manager' => 'Gestionnaire de dessin',
|
||||
'insert_media' => 'Insérer/modifier un média',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Autorisations',
|
||||
'permissions_desc' => 'Définissez ici les permissions pour remplacer les permissions par défaut fournies par les rôles d\'utilisateur.',
|
||||
'permissions_book_cascade' => 'Les permissions définies sur les livres seront automatiquement mises en cascade dans les chapitres enfants et les pages, à moins qu\'elles aient leurs propres permissions définies.',
|
||||
'permissions_chapter_cascade' => 'Les permissions définies sur les chapitres seront automatiquement mises en cascade sur les pages enfants, à moins qu\'elles aient leurs propres permissions définies.',
|
||||
'permissions_intro' => 'Une fois activées, ces permissions auront la priorité sur tous les jeux de permissions préexistants.',
|
||||
'permissions_enable' => 'Activer les permissions personnalisées',
|
||||
'permissions_save' => 'Enregistrer les permissions',
|
||||
'permissions_owner' => 'Propriétaire',
|
||||
'permissions_role_everyone_else' => 'Tous les autres',
|
||||
'permissions_role_everyone_else_desc' => 'Définir les permissions pour tous les rôles qui ne sont pas spécifiquement remplacés.',
|
||||
'permissions_role_override' => 'Remplacer les permissions pour le rôle',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Résultats de recherche',
|
||||
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'da' => 'Danois',
|
||||
'de' => 'Allemand',
|
||||
'de_informal' => 'Allemand (informel)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Espagnol',
|
||||
'es_AR' => 'Espagnol (Argentine)',
|
||||
'et' => 'Estonien',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Insert/Edit Link',
|
||||
'insert_horizontal_line' => 'Insert horizontal line',
|
||||
'insert_code_block' => 'Insert code block',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'Insert/edit drawing',
|
||||
'drawing_manager' => 'Drawing manager',
|
||||
'insert_media' => 'Insert/edit media',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'הרשאות',
|
||||
'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
|
||||
'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
|
||||
'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
|
||||
'permissions_intro' => 'ברגע שמסומן, הרשאות אלו יגברו על כל הרשאת תפקיד שקיימת',
|
||||
'permissions_enable' => 'הפעל הרשאות מותאמות אישית',
|
||||
'permissions_save' => 'שמור הרשאות',
|
||||
'permissions_owner' => 'בעלים',
|
||||
'permissions_role_everyone_else' => 'Everyone Else',
|
||||
'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
|
||||
'permissions_role_override' => 'Override permissions for role',
|
||||
|
||||
// Search
|
||||
'search_results' => 'תוצאות חיפוש',
|
||||
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Insert/Edit Link',
|
||||
'insert_horizontal_line' => 'Insert horizontal line',
|
||||
'insert_code_block' => 'Insert code block',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'Insert/edit drawing',
|
||||
'drawing_manager' => 'Drawing manager',
|
||||
'insert_media' => 'Insert/edit media',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Dopuštenja',
|
||||
'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
|
||||
'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
|
||||
'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
|
||||
'permissions_intro' => 'Jednom postavljene, ove dozvole bit će prioritetne ostalim dopuštenjima.',
|
||||
'permissions_enable' => 'Omogući dopuštenje za korištenje',
|
||||
'permissions_save' => 'Spremi dopuštenje',
|
||||
'permissions_owner' => 'Vlasnik',
|
||||
'permissions_role_everyone_else' => 'Everyone Else',
|
||||
'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
|
||||
'permissions_role_override' => 'Override permissions for role',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Pretraži rezultate',
|
||||
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Hivatkozás Beszúrása/Szerkesztése',
|
||||
'insert_horizontal_line' => 'Vízszintes vonal beszúrása',
|
||||
'insert_code_block' => 'Kódrészlet beszúrása',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'Rajz beszúrása/szerkesztése',
|
||||
'drawing_manager' => 'Rajzkezelő',
|
||||
'insert_media' => 'Media beszúrása/szerkesztése',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Jogosultságok',
|
||||
'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
|
||||
'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
|
||||
'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
|
||||
'permissions_intro' => 'Ha engedélyezett, ezek a jogosultságok elsőbbséget élveznek bármely beállított szerepkör jogosultsággal szemben.',
|
||||
'permissions_enable' => 'Egyéni jogosultságok engedélyezése',
|
||||
'permissions_save' => 'Jogosultságok mentése',
|
||||
'permissions_owner' => 'Tulajdonos',
|
||||
'permissions_role_everyone_else' => 'Everyone Else',
|
||||
'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
|
||||
'permissions_role_override' => 'Override permissions for role',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Keresési eredmények',
|
||||
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'da' => 'Dansk',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'el' => 'ελληνικά',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
|
||||
@@ -66,7 +66,6 @@ return [
|
||||
'insert_link_title' => 'Insert/Edit Link',
|
||||
'insert_horizontal_line' => 'Insert horizontal line',
|
||||
'insert_code_block' => 'Insert code block',
|
||||
'edit_code_block' => 'Edit code block',
|
||||
'insert_drawing' => 'Insert/edit drawing',
|
||||
'drawing_manager' => 'Drawing manager',
|
||||
'insert_media' => 'Insert/edit media',
|
||||
|
||||
@@ -42,14 +42,10 @@ return [
|
||||
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Izin',
|
||||
'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.',
|
||||
'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.',
|
||||
'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.',
|
||||
'permissions_intro' => 'Setelah diaktifkan, izin ini akan menjadi prioritas di atas izin peran yang ditetapkan.',
|
||||
'permissions_enable' => 'Aktifkan Izin Kustom',
|
||||
'permissions_save' => 'Simpan Izin',
|
||||
'permissions_owner' => 'Pemilik',
|
||||
'permissions_role_everyone_else' => 'Everyone Else',
|
||||
'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.',
|
||||
'permissions_role_override' => 'Override permissions for role',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Hasil Pencarian',
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user