Compare commits

..

10 Commits

Author SHA1 Message Date
Dan Brown
f9b9040a06 LLM: Played with a reduced-scope non-vector LLM query system 2026-01-11 18:00:07 +00:00
Dan Brown
8e0edb63c7 Merge branch 'development' into vectors 2026-01-07 11:14:53 +00:00
Dan Brown
bb08f62327 Vectors: Finished core fetch & display functionality 2025-08-22 12:59:32 +01:00
Dan Brown
8eef5a1ee7 Vectors: Updated query response to use server-side-events
Allowing the vector query results and the LLM response to each come back
over the same HTTP request at two different times via a somewhat
standard.

Uses a package for JS SSE client, since native browser client does not
support over POST, which is probably important for this endpoint as we
don't want crawlers or other bots abusing this via accidentally.
2025-08-21 16:03:55 +01:00
Dan Brown
88ccd9e5b9 Vectors: Split out vector search and llm query runs
Added a formal object type to carry across vector search results.
Added permission application and entity combining with vector search
results.
Also updated namespace from vectors to queries.
2025-08-21 12:14:52 +01:00
Dan Brown
2c3100e401 Vectors: Started front-end work, moved to own controller 2025-08-19 15:19:04 +01:00
Dan Brown
54f883e815 Improved vector text chunking 2025-08-19 11:04:14 +01:00
Dan Brown
e611b3239e Vectors: Added command to regenerate for all
Also made models configurable.
Tested system scales via 86k vector entries.
2025-08-17 09:43:07 +01:00
Dan Brown
b9ecf55e1f Vectors: Got basic LLM querying working using vector search context 2025-08-17 09:43:07 +01:00
Dan Brown
2d5548240a Vectors: Built content vector indexing system 2025-08-17 09:43:00 +01:00
157 changed files with 1464 additions and 1134 deletions

View File

@@ -521,12 +521,3 @@ setiawan setiawan (culture.setiawan) :: Indonesian
Donald Mac Kenzie (kiuman) :: Norwegian Bokmal
Gabriel Silver (GabrielBSilver) :: Hebrew
Tomas Darius Davainis (Tomasdd) :: Lithuanian
CriedHero :: Chinese Simplified
Henrik (henrik2105) :: Norwegian Bokmal
FoW (fofwisdom) :: Korean
serinf-lauza :: French
Diyan Nikolaev (nikolaev.diyan) :: Bulgarian
Shadluk Avan (quldosh) :: Uzbek
Marci (MartonPoto) :: Hungarian
Michał Sadurski (wheeskeey) :: Polish
JanDziaslo :: Polish

View File

@@ -82,7 +82,7 @@ class Comment extends Model implements Loggable, OwnableInterface
public function safeHtml(): string
{
return HtmlContentFilter::removeActiveContentFromHtmlString($this->html ?? '');
return HtmlContentFilter::removeScriptsFromHtmlString($this->html ?? '');
}
public function jointPermissions(): HasMany

View File

@@ -22,6 +22,18 @@ return [
// Callback URL for social authentication methods
'callback_url' => env('APP_URL', false),
// LLM Service
// Options: openai
'llm' => env('LLM_SERVICE', ''),
// OpenAI API-compatible service details
'openai' => [
'endpoint' => env('OPENAI_ENDPOINT', 'https://api.openai.com'),
'key' => env('OPENAI_KEY', ''),
'embedding_model' => env('OPENAI_EMBEDDING_MODEL', 'text-embedding-3-small'),
'query_model' => env('OPENAI_QUERY_MODEL', 'gpt-4o'),
],
'github' => [
'client_id' => env('GITHUB_APP_ID', false),
'client_secret' => env('GITHUB_APP_SECRET', false),

View File

@@ -0,0 +1,46 @@
<?php
namespace BookStack\Console\Commands;
use BookStack\Entities\EntityProvider;
use BookStack\Entities\Models\Entity;
use BookStack\Search\Queries\SearchVector;
use BookStack\Search\Queries\StoreEntityVectorsJob;
use Illuminate\Console\Command;
class RegenerateVectorsCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'bookstack:regenerate-vectors';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Re-index vectors for all content in the system';
/**
* Execute the console command.
*/
public function handle(EntityProvider $entityProvider)
{
// TODO - Add confirmation before run regarding deletion/time/effort/api-cost etc...
SearchVector::query()->delete();
$types = $entityProvider->all();
foreach ($types as $type => $typeInstance) {
$this->info("Creating jobs to store vectors for {$type} data...");
/** @var Entity[] $entities */
$typeInstance->newQuery()->chunkById(100, function ($entities) {
foreach ($entities as $entity) {
dispatch(new StoreEntityVectorsJob($entity));
}
});
}
}
}

View File

@@ -50,7 +50,7 @@ class EntityHtmlDescription
return $html;
}
return HtmlContentFilter::removeActiveContentFromHtmlString($html);
return HtmlContentFilter::removeScriptsFromHtmlString($html);
}
public function getPlain(): string

View File

@@ -318,7 +318,7 @@ class PageContent
}
if (!config('app.allow_content_scripts')) {
HtmlContentFilter::removeActiveContentFromDocument($doc);
HtmlContentFilter::removeScriptsFromDocument($doc);
}
return $doc->getBodyInnerHtml();

View File

@@ -17,7 +17,7 @@ class ApiAuthenticate
public function handle(Request $request, Closure $next)
{
// Validate the token and it's users API access
$this->ensureAuthorizedBySessionOrToken($request);
$this->ensureAuthorizedBySessionOrToken();
return $next($request);
}
@@ -28,28 +28,22 @@ class ApiAuthenticate
*
* @throws ApiAuthException
*/
protected function ensureAuthorizedBySessionOrToken(Request $request): void
protected function ensureAuthorizedBySessionOrToken(): void
{
// Use the active user session already exists.
// This is to make it easy to explore API endpoints via the UI.
if (session()->isStarted()) {
// Ensure the user has API access permission
// Return if the user is already found to be signed in via session-based auth.
// This is to make it easy to browser the API via browser after just logging into the system.
if (!user()->isGuest() || session()->isStarted()) {
if (!$this->sessionUserHasApiAccess()) {
throw new ApiAuthException(trans('errors.api_user_no_api_permission'), 403);
}
// Only allow GET requests for cookie-based API usage
if ($request->method() !== 'GET') {
throw new ApiAuthException(trans('errors.api_cookie_auth_only_get'), 403);
}
return;
}
// Set our api guard to be the default for this request lifecycle.
auth()->shouldUse('api');
// Validate the token and its users API access
// Validate the token and it's users API access
auth()->authenticate();
}

View File

@@ -0,0 +1,89 @@
<?php
declare(strict_types=1);
namespace BookStack\Search\Queries;
use BookStack\Activity\Models\Tag;
use BookStack\Entities\Models\Entity;
use BookStack\Search\Queries\Services\LlmQueryService;
use Illuminate\Support\Facades\DB;
class EntityVectorGenerator
{
public function __construct(
protected LlmQueryServiceProvider $vectorQueryServiceProvider
) {
}
public function generateAndStore(Entity $entity): void
{
$vectorService = $this->vectorQueryServiceProvider->get();
$text = $this->entityToPlainText($entity);
$chunks = $this->chunkText($text);
$embeddings = $this->chunksToEmbeddings($chunks, $vectorService);
$this->deleteExistingEmbeddingsForEntity($entity);
$this->storeEmbeddings($embeddings, $chunks, $entity);
}
protected function deleteExistingEmbeddingsForEntity(Entity $entity): void
{
SearchVector::query()
->where('entity_type', '=', $entity->getMorphClass())
->where('entity_id', '=', $entity->id)
->delete();
}
protected function storeEmbeddings(array $embeddings, array $textChunks, Entity $entity): void
{
$toInsert = [];
foreach ($embeddings as $index => $embedding) {
$text = $textChunks[$index];
$toInsert[] = [
'entity_id' => $entity->id,
'entity_type' => $entity->getMorphClass(),
'embedding' => DB::raw('VEC_FROMTEXT("[' . implode(',', $embedding) . ']")'),
'text' => $text,
];
}
$chunks = array_chunk($toInsert, 500);
foreach ($chunks as $chunk) {
SearchVector::query()->insert($chunk);
}
}
/**
* @param string[] $chunks
* @return float[] array
*/
protected function chunksToEmbeddings(array $chunks, LlmQueryService $vectorQueryService): array
{
$embeddings = [];
foreach ($chunks as $index => $chunk) {
$embeddings[$index] = $vectorQueryService->generateEmbeddings($chunk);
}
return $embeddings;
}
/**
* @return string[]
*/
protected function chunkText(string $text): array
{
return (new TextChunker(500, ["\n", '.', ' ', '']))->chunk($text);
}
protected function entityToPlainText(Entity $entity): string
{
$tags = $entity->tags()->get();
$tagText = $tags->map(function (Tag $tag) {
return $tag->name . ': ' . $tag->value;
})->join('\n');
return $entity->name . "\n{$tagText}\n" . $entity->{$entity->textField};
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace BookStack\Search\Queries;
use BookStack\Entities\Models\Entity;
use BookStack\Search\SearchRunner;
use Exception;
class LlmQueryRunner
{
public function __construct(
protected LlmQueryServiceProvider $vectorQueryServiceProvider,
protected SearchRunner $searchRunner,
) {
}
/**
* Transform the given query into an array of terms which can be used
* to search for documents to help answer that query.
* @return string[]
* @throws Exception
*/
public function queryToSearchTerms(string $query): array
{
$queryService = $this->vectorQueryServiceProvider->get();
return $queryService->queryToSearchTerms($query);
}
/**
* Run a query against the configured LLM to produce a text response.
* @param Entity[] $searchResults
* @throws Exception
*/
public function run(string $query, array $searchResults): string
{
$queryService = $this->vectorQueryServiceProvider->get();
return $queryService->query($query, $searchResults);
}
}

View File

@@ -0,0 +1,38 @@
<?php
declare(strict_types=1);
namespace BookStack\Search\Queries;
use BookStack\Http\HttpRequestService;
use BookStack\Search\Queries\Services\OpenAiLlmQueryService;
use BookStack\Search\Queries\Services\LlmQueryService;
class LlmQueryServiceProvider
{
public function __construct(
protected HttpRequestService $http,
) {
}
public function get(): LlmQueryService
{
$service = $this->getServiceName();
if ($service === 'openai') {
return new OpenAiLlmQueryService(config('services.openai'), $this->http);
}
throw new \Exception("No '{$service}' LLM service found");
}
protected static function getServiceName(): string
{
return strtolower(config('services.llm'));
}
public static function isEnabled(): bool
{
return !empty(static::getServiceName());
}
}

View File

@@ -0,0 +1,65 @@
<?php
namespace BookStack\Search\Queries;
use BookStack\Http\Controller;
use BookStack\Search\SearchOptions;
use BookStack\Search\SearchRunner;
use Illuminate\Http\Request;
class QueryController extends Controller
{
public function __construct(
protected SearchRunner $searchRunner,
) {
// TODO - Check via testing
$this->middleware(function ($request, $next) {
if (!LlmQueryServiceProvider::isEnabled()) {
$this->showPermissionError('/');
}
return $next($request);
});
}
/**
* Show the view to start a vector/LLM-based query search.
*/
public function show(Request $request)
{
$query = $request->get('ask', '');
// TODO - Set page title
return view('search.query', [
'query' => $query,
]);
}
/**
* Perform an LLM-based query search.
*/
public function run(Request $request, LlmQueryRunner $llmRunner)
{
// TODO - Rate limiting
$query = $request->get('query', '');
return response()->eventStream(function () use ($query, $llmRunner) {
$searchTerms = $llmRunner->queryToSearchTerms($query);
$searchOptions = SearchOptions::fromTermArray($searchTerms);
$searchResults = $this->searchRunner->searchEntities($searchOptions, count: 10)['results'];
$entities = [];
foreach ($searchResults as $entity) {
$entityKey = $entity->getMorphClass() . ':' . $entity->id;
if (!isset($entities[$entityKey])) {
$entities[$entityKey] = $entity;
}
}
yield ['view' => view('entities.list', ['entities' => $entities])->render()];
yield ['result' => $llmRunner->run($query, array_values($entities))];
});
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace BookStack\Search\Queries\Services;
use BookStack\Entities\Models\Entity;
interface LlmQueryService
{
/**
* Generate embedding vectors from the given chunk of text.
* @return float[]
*/
public function generateEmbeddings(string $text): array;
public function queryToSearchTerms(string $text): array;
/**
* Query the LLM service using the given user input, and
* relevant entity content retrieved locally via a search.
* Returns the response output text from the LLM.
*
* @param Entity[] $context
*/
public function query(string $input, array $context): string;
}

View File

@@ -0,0 +1,97 @@
<?php
namespace BookStack\Search\Queries\Services;
use BookStack\Http\HttpRequestService;
class OpenAiLlmQueryService implements LlmQueryService
{
protected string $key;
protected string $endpoint;
protected string $embeddingModel;
protected string $queryModel;
public function __construct(
protected array $options,
protected HttpRequestService $http,
) {
// TODO - Some kind of validation of options
$this->key = $this->options['key'] ?? '';
$this->endpoint = $this->options['endpoint'] ?? '';
$this->embeddingModel = $this->options['embedding_model'] ?? '';
$this->queryModel = $this->options['query_model'] ?? '';
}
protected function jsonRequest(string $method, string $uri, array $data): array
{
$fullUrl = rtrim($this->endpoint, '/') . '/' . ltrim($uri, '/');
$client = $this->http->buildClient(60);
$request = $this->http->jsonRequest($method, $fullUrl, $data)
->withHeader('Authorization', 'Bearer ' . $this->key);
$response = $client->sendRequest($request);
return json_decode($response->getBody()->getContents(), true);
}
public function generateEmbeddings(string $text): array
{
$response = $this->jsonRequest('POST', 'v1/embeddings', [
'input' => $text,
'model' => $this->embeddingModel,
]);
return $response['data'][0]['embedding'];
}
public function queryToSearchTerms(string $text): array
{
$response = $this->jsonRequest('POST', 'v1/chat/completions', [
'model' => $this->queryModel,
'messages' => [
[
'role' => 'user',
'content' => 'You will be provided a user search query. Extract key words from just the query, suitable for searching. Add word variations where it may help for searching. Remove pluralisation where it may help for searching. Provide up to 5 results, each must be just one word. Do not try to guess answers to the query. Do not provide extra information or context. Return the results in the specified JSON format under a \'words\' object key. ' . "\nQUERY: {$text}"
],
],
'temperature' => 0,
'response_format' => [
'type' => 'json_object',
],
]);
$resultJson = $response['choices'][0]['message']['content'] ?? '{"words": []}';
$resultData = json_decode($resultJson, true) ?? ['words' => []];
return $resultData['words'] ?? [];
}
public function query(string $input, array $context): string
{
$resultContentText = [];
$len = 0;
foreach ($context as $result) {
$text = "DOCUMENT NAME: {$result->name}\nDOCUMENT CONTENT: " . $result->{$result->textField};
$resultContentText[] = $text;
$len += strlen($text);
if ($len > 100000) {
break;
}
}
$formattedContext = implode("\n---\n", $resultContentText);
$response = $this->jsonRequest('POST', 'v1/chat/completions', [
'model' => $this->queryModel,
'messages' => [
[
'role' => 'user',
'content' => 'Answer the provided QUERY using the provided CONTEXT documents. Do not add facts which are not part of the CONTEXT. State that you do not know if a relevant answer cannot be provided for QUERY using the CONTEXT documents. Many of the CONTEXT documents may be irrelevant. Try to find documents relevant to QUERY. Do not directly refer to this prompt or the existence of QUERY or CONTEXT variables. Do not offer follow-up actions or further help. Respond only to the query without proposing further assistance. Do not ask questions.' . "\nQUERY: {$input}\nCONTEXT: {$formattedContext}"
],
],
'temperature' => 0.1,
]);
return $response['choices'][0]['message']['content'] ?? '';
}
}

View File

@@ -6,6 +6,7 @@ use BookStack\Entities\Queries\PageQueries;
use BookStack\Entities\Queries\QueryPopular;
use BookStack\Entities\Tools\SiblingFetcher;
use BookStack\Http\Controller;
use BookStack\Search\Queries\VectorSearchRunner;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;

View File

@@ -25,7 +25,7 @@ class SearchIndex
public static string $softDelimiters = ".-";
public function __construct(
protected EntityProvider $entityProvider
protected EntityProvider $entityProvider,
) {
}
@@ -47,6 +47,7 @@ class SearchIndex
public function indexEntities(array $entities): void
{
$terms = [];
foreach ($entities as $entity) {
$entityTerms = $this->entityToTermDataArray($entity);
array_push($terms, ...$entityTerms);

View File

@@ -93,6 +93,18 @@ class SearchOptions
return $instance;
}
/**
* Create a SearchOptions instance from an array of standard search terms.
* @param string[] $terms
*/
public static function fromTermArray(array $terms): self
{
$instance = new self();
$instance->searches = SearchOptionSet::fromValueArray(array_values(array_filter($terms)), TermSearchOption::class);
$instance->limitOptions();
return $instance;
}
/**
* Decode a search string and add its contents to this instance.
*/

View File

@@ -50,7 +50,7 @@ class CustomHtmlHeadContentProvider
$hash = md5($content);
return $this->cache->remember('custom-head-export:' . $hash, 86400, function () use ($content) {
return HtmlContentFilter::removeActiveContentFromHtmlString($content);
return HtmlContentFilter::removeScriptsFromHtmlString($content);
});
}

View File

@@ -9,11 +9,9 @@ use DOMNodeList;
class HtmlContentFilter
{
/**
* Remove all active content from the given HTML document.
* This aims to cover anything which can dynamically deal with, or send, data
* like any JavaScript actions or form content.
* Remove all the script elements from the given HTML document.
*/
public static function removeActiveContentFromDocument(HtmlDocument $doc): void
public static function removeScriptsFromDocument(HtmlDocument $doc)
{
// Remove standard script tags
$scriptElems = $doc->queryXPath('//script');
@@ -23,7 +21,7 @@ class HtmlContentFilter
$badLinks = $doc->queryXPath('//*[' . static::xpathContains('@href', 'javascript:') . ']');
static::removeNodes($badLinks);
// Remove elements with form-like attributes with calls to JavaScript URI
// Remove forms with calls to JavaScript URI
$badForms = $doc->queryXPath('//*[' . static::xpathContains('@action', 'javascript:') . '] | //*[' . static::xpathContains('@formaction', 'javascript:') . ']');
static::removeNodes($badForms);
@@ -49,71 +47,25 @@ class HtmlContentFilter
// Remove 'on*' attributes
$onAttributes = $doc->queryXPath('//@*[starts-with(name(), \'on\')]');
static::removeAttributes($onAttributes);
// Remove form elements
$formElements = ['form', 'fieldset', 'button', 'textarea', 'select'];
foreach ($formElements as $formElement) {
$matchingFormElements = $doc->queryXPath('//' . $formElement);
static::removeNodes($matchingFormElements);
}
// Remove non-checkbox inputs
$inputsToRemove = $doc->queryXPath('//input');
/** @var DOMElement $input */
foreach ($inputsToRemove as $input) {
$type = strtolower($input->getAttribute('type'));
if ($type !== 'checkbox') {
$input->parentNode->removeChild($input);
}
}
// Remove form attributes
$formAttrs = ['form', 'formaction', 'formmethod', 'formtarget'];
foreach ($formAttrs as $formAttr) {
$matchingFormAttrs = $doc->queryXPath('//@' . $formAttr);
static::removeAttributes($matchingFormAttrs);
}
}
/**
* Remove active content from the given HTML string.
* This aims to cover anything which can dynamically deal with, or send, data
* like any JavaScript actions or form content.
* Remove scripts from the given HTML string.
*/
public static function removeActiveContentFromHtmlString(string $html): string
public static function removeScriptsFromHtmlString(string $html): string
{
if (empty($html)) {
return $html;
}
$doc = new HtmlDocument($html);
static::removeActiveContentFromDocument($doc);
static::removeScriptsFromDocument($doc);
return $doc->getBodyInnerHtml();
}
/**
* Alias using the old method name to avoid potential compatibility breaks during patch release.
* To remove in future feature release.
* @deprecated Use removeActiveContentFromDocument instead.
*/
public static function removeScriptsFromDocument(HtmlDocument $doc): void
{
static::removeActiveContentFromDocument($doc);
}
/**
* Alias using the old method name to avoid potential compatibility breaks during patch release.
* To remove in future feature release.
* @deprecated Use removeActiveContentFromHtmlString instead.
*/
public static function removeScriptsFromHtmlString(string $html): string
{
return static::removeActiveContentFromHtmlString($html);
}
/**
* Create an x-path 'contains' statement with a translation automatically built within
* Create a xpath contains statement with a translation automatically built within
* to affectively search in a cases-insensitive manner.
*/
protected static function xpathContains(string $property, string $value): string

641
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
// TODO - Handle compatibility with older databases that don't support vectors
Schema::create('search_vectors', function (Blueprint $table) {
$table->string('entity_type', 100);
$table->integer('entity_id');
$table->text('text');
$table->index(['entity_type', 'entity_id']);
});
$table = DB::getTablePrefix() . 'search_vectors';
// TODO - Vector size might need to be dynamic
DB::statement("ALTER TABLE {$table} ADD COLUMN (embedding VECTOR(1536) NOT NULL)");
DB::statement("ALTER TABLE {$table} ADD VECTOR INDEX (embedding) DISTANCE=cosine");
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('search_vectors');
}
};

View File

@@ -237,21 +237,21 @@ Link: https://config.thephpleague.com
league/flysystem
License: MIT
License File: vendor/league/flysystem/LICENSE
Copyright: Copyright (c) 2013-2026 Frank de Jonge
Copyright: Copyright (c) 2013-2024 Frank de Jonge
Source: https://github.com/thephpleague/flysystem.git
Link: https://github.com/thephpleague/flysystem.git
-----------
league/flysystem-aws-s3-v3
License: MIT
License File: vendor/league/flysystem-aws-s3-v3/LICENSE
Copyright: Copyright (c) 2013-2026 Frank de Jonge
Copyright: Copyright (c) 2013-2024 Frank de Jonge
Source: https://github.com/thephpleague/flysystem-aws-s3-v3.git
Link: https://github.com/thephpleague/flysystem-aws-s3-v3.git
-----------
league/flysystem-local
License: MIT
License File: vendor/league/flysystem-local/LICENSE
Copyright: Copyright (c) 2013-2026 Frank de Jonge
Copyright: Copyright (c) 2013-2024 Frank de Jonge
Source: https://github.com/thephpleague/flysystem-local.git
Link: https://github.com/thephpleague/flysystem-local.git
-----------
@@ -323,7 +323,7 @@ License: MIT
License File: vendor/nesbot/carbon/LICENSE
Copyright: Copyright (C) Brian Nesbitt
Source: https://github.com/CarbonPHP/carbon.git
Link: https://carbonphp.github.io/carbon/
Link: https://carbon.nesbot.com
-----------
nette/schema
License: BSD-3-Clause GPL-2.0-only GPL-3.0-only
@@ -760,13 +760,6 @@ Copyright: Copyright (c) 2014-present Fabien Potencier
Source: https://github.com/symfony/var-dumper.git
Link: https://symfony.com
-----------
thecodingmachine/safe
License: MIT
License File: vendor/thecodingmachine/safe/LICENSE
Copyright: Copyright (c) 2018 TheCodingMachine
Source: https://github.com/thecodingmachine/safe.git
Link: https://github.com/thecodingmachine/safe.git
-----------
tijsverkoyen/css-to-inline-styles
License: BSD-3-Clause
License File: vendor/tijsverkoyen/css-to-inline-styles/LICENSE.md

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'الشفرة المُقدمة لرمز API المستخدم المحدد غير صحيحة',
'api_user_no_api_permission' => 'مالك رمز API المستخدم ليس لديه الصلاحية لإجراء مكالمات API',
'api_user_token_expired' => 'انتهت صلاحية رمز الترخيص المستخدم',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'حدث خطأ عند إرسال بريد إلكتروني تجريبي:',

View File

@@ -6,7 +6,7 @@
*/
return [
'failed' => 'Въведените данни не съвпадат с информацията в системата.',
'failed' => 'Въведените удостоверителни данни не съвпадат с нашите записи.',
'throttle' => 'Твърде много опити за влизане. Опитайте пак след :seconds секунди.',
// Login & Register
@@ -65,7 +65,7 @@ return [
'email_confirm_thanks_desc' => 'Почакайте малко, обработвайки потвърждението ви. Ако не сте пренасочени след 3 секунди, то натиснете долу връзката "Продължаване", за да продължите.',
'email_not_confirmed' => 'Имейл адресът не е потвърден',
'email_not_confirmed_text' => 'Вашият имейл адрес все още не е потвърден.',
'email_not_confirmed_text' => 'Вашият емейл адрес все още не е потвърден.',
'email_not_confirmed_click_link' => 'Моля да последвате линка, който ви беше изпратен непосредствено след регистрацията.',
'email_not_confirmed_resend' => 'Ако не откривате писмото, може да го изпратите отново като попълните формуляра по-долу.',
'email_not_confirmed_resend_button' => 'Изпрати отново емейла за потвърждение',
@@ -91,7 +91,7 @@ return [
'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_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
'mfa_gen_confirm_and_enable' => 'Потвърди и включи',
'mfa_gen_backup_codes_title' => 'Настройка на резервни кодове',
'mfa_gen_backup_codes_desc' => 'Запази този лист с кодове на сигурно място. Когато достъпваш системата, ще можеш да използваш един от тези кодове като вторичен механизъм за удостоверяване.',

View File

@@ -6,7 +6,7 @@ return [
// Buttons
'cancel' => 'Отказ',
'close' => 'Затвори',
'close' => 'Close',
'confirm' => 'Потвърждаване',
'back' => 'Назад',
'save' => 'Запис',
@@ -20,7 +20,7 @@ return [
'description' => 'Описание',
'role' => 'Роля',
'cover_image' => 'Образ на корицата',
'cover_image_description' => 'Изображението трябва да е около 440x250 px. Тъй като ще се мащабира и изрязва автоматично спрямо нуждите на интерфейса, крайните размери при показване може да се различават.',
'cover_image_description' => 'This image should be approximately 440x250px although it will be flexibly scaled & cropped to fit the user interface in different scenarios as required, so actual dimensions for display will differ.',
// Actions
'actions' => 'Действия',
@@ -30,8 +30,8 @@ return [
'create' => 'Създаване',
'update' => 'Обновяване',
'edit' => 'Редактиране',
'archive' => 'Архивирай',
'unarchive' => 'Разархивирай',
'archive' => 'Archive',
'unarchive' => 'Un-Archive',
'sort' => 'Сортиране',
'move' => 'Преместване',
'copy' => 'Копиране',
@@ -44,7 +44,7 @@ return [
'remove' => 'Премахване',
'add' => 'Добавяне',
'configure' => 'Конфигуриране',
'manage' => 'Управлявай',
'manage' => 'Manage',
'fullscreen' => 'Цял екран',
'favourite' => 'Любимо',
'unfavourite' => 'Не е любимо',
@@ -54,7 +54,7 @@ return [
'filter_clear' => 'Изчистване на филтрите',
'download' => 'Изтегляне',
'open_in_tab' => 'Отваряне в раздел',
'open' => 'Отвори',
'open' => 'Open',
// Sort Options
'sort_options' => 'Опции за сортиране',
@@ -111,5 +111,5 @@ return [
'terms_of_service' => 'Условия на услугата',
// OpenSearch
'opensearch_description' => 'Търси :appName',
'opensearch_description' => 'Search :appName',
];

View File

@@ -13,7 +13,7 @@ return [
'cancel' => 'Отказ',
'save' => 'Запис',
'close' => 'Затваряне',
'apply' => 'Приложи',
'apply' => 'Apply',
'undo' => 'Отмяна',
'redo' => 'Повтаряне',
'left' => 'Вляво',

View File

@@ -10,7 +10,7 @@ return [
// Auth
'error_user_exists_different_creds' => 'Потребител с емайл :email вече съществува но с други данни.',
'auth_pre_register_theme_prevention' => 'Потребителски профил не може да бъде създаден с посочената информация',
'auth_pre_register_theme_prevention' => 'User account could not be registered for the provided details',
'email_already_confirmed' => 'Емейлът вече беше потвърден. Моля опитрайте да влезете.',
'email_confirmation_invalid' => 'Този код за достъп не е валиден или вече е бил използван, Моля опитай да се регистрираш отново.',
'email_confirmation_expired' => 'Кодът за потвърждение изтече, нов емейл за потвърждение беше изпратен.',
@@ -37,7 +37,7 @@ return [
'social_driver_not_found' => 'Кодът за връзка със социалната мрежа не съществува',
'social_driver_not_configured' => 'Социалните настройки на твоя :socialAccount не са конфигурирани правилно.',
'invite_token_expired' => 'Твоята покана е изтекла. Вместо това може да пробваш да възстановиш паролата на профила си.',
'login_user_not_found' => 'Потребител за това действие не може да бъде намерено.',
'login_user_not_found' => 'A user for this action could not be found.',
// System
'path_not_writable' => 'Не може да се качи файл в :filePath. Увери се на сървъра, че в пътя може да се записва.',
@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Секретния код, който беше предоставен за достъп до API-а е неправилен',
'api_user_no_api_permission' => 'Собственика на АPI кода няма право да прави API заявки',
'api_user_token_expired' => 'Кода за достъп, който беше използван, вече не е валиден',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Беше върната грешка, когато се изпрати тестовият емейл:',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'The secret provided for the given used API token is incorrect',
'api_user_no_api_permission' => 'The owner of the used API token does not have permission to make API calls',
'api_user_token_expired' => 'The authorization token used has expired',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Error thrown when sending a test email:',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Tajni ključ naveden za dati korišteni API token nije tačan',
'api_user_no_api_permission' => 'Vlasnik korištenog API tokena nema dozvolu za upućivanje API poziva',
'api_user_token_expired' => 'Autorizacijski token je istekao',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Došlo je do greške prilikom slanja testnog e-maila:',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'El secret proporcionat per al testimoni dAPI utilitzat no és correcte.',
'api_user_no_api_permission' => 'El propietari del testimoni API utilitzat no té permís per a fer crides a lAPI.',
'api_user_token_expired' => 'El testimoni dautorització utilitzat ha caducat.',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Sha produït un error en enviar el correu electrònic de prova:',

View File

@@ -109,7 +109,7 @@ return [
'import_zip_cant_read' => 'Nelze načíst ZIP soubor.',
'import_zip_cant_decode_data' => 'Nelze najít a dekódovat data.json v archivu ZIP.',
'import_zip_no_data' => 'ZIP archiv neobsahuje knihy, kapitoly nebo stránky.',
'import_zip_data_too_large' => 'Obsah souboru data.json v archivu ZIP překračuje maximální povolenou velikost.',
'import_zip_data_too_large' => 'ZIP data.json content exceeds the configured application maximum upload size.',
'import_validation_failed' => 'Importování ZIP selhalo s chybami:',
'import_zip_failed_notification' => 'Nepodařilo se naimportovat ZIP soubor.',
'import_perms_books' => 'Chybí vám požadovaná oprávnění k vytvoření knih.',
@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Poskytnutý Token Secret neodpovídá použitému API tokenu',
'api_user_no_api_permission' => 'Vlastník použitého API tokenu nemá oprávnění provádět API volání',
'api_user_token_expired' => 'Platnost autorizačního tokenu vypršela',
'api_cookie_auth_only_get' => 'Při používání API s ověřováním pomocí souborů cookie jsou povoleny pouze požadavky GET',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Při posílání testovacího e-mailu nastala chyba:',

View File

@@ -106,7 +106,7 @@ return [
'uploaded' => 'Nahrávání :attribute se nezdařilo.',
'zip_file' => ':attribute musí odkazovat na soubor v archivu ZIP.',
'zip_file_size' => 'Soubor :attribute nesmí překročit :size MB.',
'zip_file_size' => 'The file :attribute must not exceed :size MB.',
'zip_file_mime' => ':attribute musí odkazovat na soubor typu :validTypes, nalezen :foundType.',
'zip_model_expected' => 'Očekáván datový objekt, ale nalezen „:type“.',
'zip_unique' => ':attribute musí být jedinečný pro typ objektu v archivu ZIP.',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Mae\'r gyfrinach a ddarparwyd ar gyfer y tocyn API defnyddiedig a roddwyd yn anghywir',
'api_user_no_api_permission' => 'Nid oes gan berchennog y tocyn API a ddefnyddiwyd ganiatâd i wneud galwadau API',
'api_user_token_expired' => 'Mae\'r tocyn awdurdodi a ddefnyddiwyd wedi dod i ben',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Gwall a daflwyd wrth anfon e-bost prawf:',

View File

@@ -48,7 +48,7 @@ return [
'superscript' => 'Hævet',
'subscript' => 'Sænket',
'text_color' => 'Tekstfarve',
'highlight_color' => 'Fremhævelsesfarve',
'highlight_color' => 'Highlight color',
'custom_color' => 'Tilpasset farve',
'remove_color' => 'Fjern farve',
'background_color' => 'Baggrundsfarve',

View File

@@ -252,7 +252,7 @@ return [
'pages_edit_switch_to_markdown_stable' => '(Stabilt indhold)',
'pages_edit_switch_to_wysiwyg' => 'Skift til WYSIWYG redigering',
'pages_edit_switch_to_new_wysiwyg' => 'Skift til ny WYSIWYG (Hvad man ser, er hvad man får)',
'pages_edit_switch_to_new_wysiwyg_desc' => '(I Beta Test)',
'pages_edit_switch_to_new_wysiwyg_desc' => '(In Beta Testing)',
'pages_edit_set_changelog' => 'Sæt ændringsoversigt',
'pages_edit_enter_changelog_desc' => 'Indtast en kort beskrivelse af ændringer du har lavet',
'pages_edit_enter_changelog' => 'Indtast ændringsoversigt',
@@ -397,11 +397,11 @@ return [
'comment' => 'Kommentar',
'comments' => 'Kommentarer',
'comment_add' => 'Tilføj kommentar',
'comment_none' => 'Ingen kommentarer at vise',
'comment_none' => 'No comments to display',
'comment_placeholder' => 'Skriv en kommentar her',
'comment_thread_count' => ':count Kommentar Tråde:count Kommentar Tråde',
'comment_thread_count' => ':count Comment Thread|:count Comment Threads',
'comment_archived_count' => ':count Arkiveret',
'comment_archived_threads' => 'Arkiverede Tråde',
'comment_archived_threads' => 'Archived Threads',
'comment_save' => 'Gem kommentar',
'comment_new' => 'Ny kommentar',
'comment_created' => 'kommenteret :createDiff',
@@ -410,8 +410,8 @@ return [
'comment_deleted_success' => 'Kommentar slettet',
'comment_created_success' => 'Kommentaren er tilføjet',
'comment_updated_success' => 'Kommentaren er opdateret',
'comment_archive_success' => 'Kommentar arkiveret',
'comment_unarchive_success' => 'Kommentaren er ikke længere arkiveret',
'comment_archive_success' => 'Comment archived',
'comment_unarchive_success' => 'Comment un-archived',
'comment_view' => 'Se kommentar',
'comment_jump_to_thread' => 'Hop til tråd',
'comment_delete_confirm' => 'Er du sikker på, at du vil slette denne kommentar?',

View File

@@ -109,7 +109,7 @@ return [
'import_zip_cant_read' => 'Kunne ikke læse ZIP-filen.',
'import_zip_cant_decode_data' => 'Kunne ikke finde og afkode ZIP data.json-indhold.',
'import_zip_no_data' => 'ZIP-filens data har ikke noget forventet bog-, kapitel- eller sideindhold.',
'import_zip_data_too_large' => 'Indholdet af ZIP data.json overstiger den konfigurerede maksimale uploadstørrelse for applikationen.',
'import_zip_data_too_large' => 'ZIP data.json content exceeds the configured application maximum upload size.',
'import_validation_failed' => 'Import ZIP kunne ikke valideres med fejl:',
'import_zip_failed_notification' => 'Kunne ikke importere ZIP-fil.',
'import_perms_books' => 'Du mangler de nødvendige tilladelser til at oprette bøger.',
@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Hemmeligheden leveret til det givne anvendte API-token er forkert',
'api_user_no_api_permission' => 'Ejeren af den brugte API token har ikke adgang til at foretage API-kald',
'api_user_token_expired' => 'Den brugte godkendelsestoken er udløbet',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Følgende fejl opstod under afsendelse af testemail:',

View File

@@ -11,8 +11,8 @@ return [
'updated_page_subject' => 'Opdateret side: :pageName',
'updated_page_intro' => 'En side er blevet opdateret i :appName:',
'updated_page_debounce' => 'For at forhindre en masse af notifikationer, i et stykke tid vil du ikke blive sendt notifikationer for yderligere redigeringer til denne side af den samme editor.',
'comment_mention_subject' => 'Du er blevet nævnt i en kommentar på siden: :pageName',
'comment_mention_intro' => 'Du blev nævnt i en kommentar på :appName:',
'comment_mention_subject' => 'You have been mentioned in a comment on page: :pageName',
'comment_mention_intro' => 'You were mentioned in a comment on :appName:',
'detail_page_name' => 'Sidens navn:',
'detail_page_path' => 'Sidesti:',

View File

@@ -23,7 +23,7 @@ return [
'notifications_desc' => 'Administrer de e-mail-notifikationer, du modtager, når visse aktiviteter udføres i systemet.',
'notifications_opt_own_page_changes' => 'Adviser ved ændringer af sider, jeg ejer',
'notifications_opt_own_page_comments' => 'Adviser ved kommentarer på sider, jeg ejer',
'notifications_opt_comment_mentions' => 'Giv besked, når jeg er nævnt i en kommentar',
'notifications_opt_comment_mentions' => 'Notify when I\'m mentioned in a comment',
'notifications_opt_comment_replies' => 'Adviser ved svar på mine kommentarer',
'notifications_save' => 'Gem indstillinger',
'notifications_update_success' => 'Indstillinger for notifikationer er blevet opdateret!',

View File

@@ -75,8 +75,8 @@ return [
'reg_confirm_restrict_domain_placeholder' => 'Ingen restriktion opsat',
// Sorting Settings
'sorting' => 'Lister & Sortering',
'sorting_book_default' => 'Standardregel for sortering af bog',
'sorting' => 'Lists & Sorting',
'sorting_book_default' => 'Default Book Sort Rule',
'sorting_book_default_desc' => 'Vælg den standardsorteringsregel, der skal gælde for nye bøger. Dette påvirker ikke eksisterende bøger og kan tilsidesættes for hver enkelt bog.',
'sorting_rules' => 'Regler for sortering',
'sorting_rules_desc' => 'Det er foruddefinerede sorteringsoperationer, som kan anvendes på indhold i systemet.',
@@ -103,8 +103,8 @@ return [
'sort_rule_op_updated_date' => 'Opdateret dato',
'sort_rule_op_chapters_first' => 'Kapitler først',
'sort_rule_op_chapters_last' => 'De sidste kapitler',
'sorting_page_limits' => 'Visningsgrænser pr. side',
'sorting_page_limits_desc' => 'Angiv, hvor mange elementer der skal vises pr. side i forskellige lister i systemet. Typisk vil et lavere beløb være mere effektivt, mens et højere beløb undgår behovet for at klikke sig igennem flere sider. Det anbefales at bruge et lige multiplum af 3 (18, 24, 30 osv.).',
'sorting_page_limits' => 'Per-Page Display Limits',
'sorting_page_limits_desc' => 'Set how many items to show per-page in various lists within the system. Typically a lower amount will be more performant, while a higher amount avoids the need to click through multiple pages. Using an even multiple of 3 (18, 24, 30, etc...) is recommended.',
// Maintenance settings
'maint' => 'Vedligeholdelse',
@@ -197,13 +197,13 @@ return [
'role_import_content' => 'Importer indhold',
'role_editor_change' => 'Skift side editor',
'role_notifications' => 'Modtag og administrer notifikationer',
'role_permission_note_users_and_roles' => 'Disse tilladelser vil teknisk set også give synlighed og søgning efter brugere og roller i systemet.',
'role_permission_note_users_and_roles' => 'These permissions will technically also provide visibility & searching of users & roles in the system.',
'role_asset' => 'Tilladelser for medier og "assets"',
'roles_system_warning' => 'Vær opmærksom på, at adgang til alle af de ovennævnte tre tilladelser, kan give en bruger mulighed for at ændre deres egne brugerrettigheder eller brugerrettigheder for andre i systemet. Tildel kun roller med disse tilladelser til betroede brugere.',
'role_asset_desc' => 'Disse tilladelser kontrollerer standardadgang til medier og "assets" i systemet. Tilladelser til bøger, kapitler og sider tilsidesætter disse tilladelser.',
'role_asset_admins' => 'Administratorer får automatisk adgang til alt indhold, men disse indstillinger kan vise eller skjule UI-indstillinger.',
'role_asset_image_view_note' => 'Dette vedrører synlighed i billedhåndteringen. Den faktiske adgang til uploadede billedfiler vil afhænge af systemets billedlagringsindstilling.',
'role_asset_users_note' => 'Disse tilladelser vil teknisk set også give synlighed og søgning efter brugere i systemet.',
'role_asset_users_note' => 'These permissions will technically also provide visibility & searching of users in the system.',
'role_all' => 'Alle',
'role_own' => 'Eget',
'role_controlled_by_asset' => 'Styres af det medie/"asset", de uploades til',

View File

@@ -106,7 +106,7 @@ return [
'uploaded' => 'Filen kunne ikke oploades. Serveren accepterer muligvis ikke filer af denne størrelse.',
'zip_file' => 'Attributten skal henvise til en fil i ZIP.',
'zip_file_size' => 'Filen :attribute må ikke overstige: størrelse MB.',
'zip_file_size' => 'The file :attribute must not exceed :size MB.',
'zip_file_mime' => 'Attributten skal henvise til en fil af typen: validTypes, fundet:foundType.',
'zip_model_expected' => 'Data objekt forventet men ":type" fundet.',
'zip_unique' => 'Attributten skal være unik for objekttypen i ZIP.',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Das Kennwort für das angegebene API-Token ist falsch',
'api_user_no_api_permission' => 'Der Besitzer des verwendeten API-Tokens hat keine Berechtigung für API-Aufrufe',
'api_user_token_expired' => 'Das verwendete Autorisierungstoken ist abgelaufen',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Fehler beim Versenden einer Test E-Mail:',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Das für den API-Token angegebene geheime Token ist falsch',
'api_user_no_api_permission' => 'Der Besitzer des verwendeten API-Token hat keine Berechtigung für API-Aufrufe',
'api_user_token_expired' => 'Das verwendete Autorisierungs-Token ist abgelaufen',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Fehler beim Senden einer Test E-Mail:',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Το μυστικό που παρέχεται για το δεδομένο χρησιμοποιημένο διακριτικό API είναι εσφαλμένο',
'api_user_no_api_permission' => 'Ο ιδιοκτήτης του χρησιμοποιημένου διακριτικού API δεν έχει άδεια για να κάνει κλήσεις API',
'api_user_token_expired' => 'Το διακριτικό εξουσιοδότησης που χρησιμοποιείται έχει λήξει',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Σφάλμα κατά την αποστολή δοκιμαστικού email:',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'The secret provided for the given used API token is incorrect',
'api_user_no_api_permission' => 'The owner of the used API token does not have permission to make API calls',
'api_user_token_expired' => 'The authorization token used has expired',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Error thrown when sending a test email:',

View File

@@ -109,7 +109,7 @@ return [
'import_zip_cant_read' => 'No se pudo leer el archivo ZIP.',
'import_zip_cant_decode_data' => 'No se pudo encontrar y decodificar el archivo data.json. en el archivo ZIP.',
'import_zip_no_data' => 'Los datos del archivo ZIP no contienen ningún libro, capítulo o contenido de página.',
'import_zip_data_too_large' => 'El contenido del ZIP data.json excede el tamaño máximo de carga configurado.',
'import_zip_data_too_large' => 'ZIP data.json content exceeds the configured application maximum upload size.',
'import_validation_failed' => 'Error al validar la importación del ZIP con errores:',
'import_zip_failed_notification' => 'Error al importar archivo ZIP.',
'import_perms_books' => 'Le faltan los permisos necesarios para crear libros.',
@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'El secreto proporcionado para el token API usado es incorrecto',
'api_user_no_api_permission' => 'El propietario del token API usado no tiene permiso para hacer llamadas API',
'api_user_token_expired' => 'El token de autorización usado ha caducado',
'api_cookie_auth_only_get' => 'Sólo se permiten peticiones GET cuando se utiliza el API con autenticación basada en cookies',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Error al enviar un email de prueba:',

View File

@@ -106,7 +106,7 @@ return [
'uploaded' => 'El archivo no ha podido subirse. Es posible que el servidor no acepte archivos de este tamaño.',
'zip_file' => 'El :attribute necesita hacer referencia a un archivo dentro del ZIP.',
'zip_file_size' => 'El archivo :attribute no debe exceder :size MB.',
'zip_file_size' => 'The file :attribute must not exceed :size MB.',
'zip_file_mime' => 'El :attribute necesita hacer referencia a un archivo de tipo :validTypes, encontrado :foundType.',
'zip_model_expected' => 'Se esperaba un objeto de datos, pero se encontró ":type".',
'zip_unique' => 'El :attribute debe ser único para el tipo de objeto dentro del ZIP.',

View File

@@ -109,7 +109,7 @@ return [
'import_zip_cant_read' => 'No se pudo leer el archivo ZIP.',
'import_zip_cant_decode_data' => 'No se pudo encontrar ni decodificar el contenido del archivo ZIP data.json.',
'import_zip_no_data' => 'Los datos del archivo ZIP no tienen un libro, un capítulo o contenido de página en su contenido.',
'import_zip_data_too_large' => 'El contenido del ZIP data.json excede el tamaño máximo de carga configurado.',
'import_zip_data_too_large' => 'ZIP data.json content exceeds the configured application maximum upload size.',
'import_validation_failed' => 'Error al validar la importación del ZIP con los errores:',
'import_zip_failed_notification' => 'Error al importar archivo ZIP.',
'import_perms_books' => 'Le faltan los permisos necesarios para crear libros.',
@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'El secreto proporcionado para el token API usado es incorrecto',
'api_user_no_api_permission' => 'El propietario del token API usado no tiene permiso para hacer llamadas API',
'api_user_token_expired' => 'El token de autorización usado ha caducado',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Error al enviar un email de prueba:',

View File

@@ -106,7 +106,7 @@ return [
'uploaded' => 'El archivo no se pudo subir. Puede ser que el servidor no acepte archivos de este tamaño.',
'zip_file' => 'El :attribute necesita hacer referencia a un archivo dentro del ZIP.',
'zip_file_size' => 'El archivo :attribute no debe exceder :size MB.',
'zip_file_size' => 'The file :attribute must not exceed :size MB.',
'zip_file_mime' => 'El :attribute necesita hacer referencia a un archivo de tipo :validTypes, encontrado :foundType.',
'zip_model_expected' => 'Se esperaba un objeto de datos, pero se encontró ":type".',
'zip_unique' => 'El :attribute debe ser único para el tipo de objeto dentro del ZIP.',

View File

@@ -109,7 +109,7 @@ return [
'import_zip_cant_read' => 'ZIP-faili lugemine ebaõnnestus.',
'import_zip_cant_decode_data' => 'ZIP-failist ei leitud data.json sisu.',
'import_zip_no_data' => 'ZIP-failist ei leitud raamatute, peatükkide või lehtede sisu.',
'import_zip_data_too_large' => 'ZIP-faili data.json sisu ületab rakenduses seadistatud maksimaalse failisuuruse.',
'import_zip_data_too_large' => 'ZIP data.json content exceeds the configured application maximum upload size.',
'import_validation_failed' => 'Imporditud ZIP-faili valideerimine ebaõnnestus vigadega:',
'import_zip_failed_notification' => 'ZIP-faili importimine ebaõnnestus.',
'import_perms_books' => 'Sul puuduvad õigused raamatute lisamiseks.',
@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'API tunnusele lisatud salajane võti ei ole korrektne',
'api_user_no_api_permission' => 'Selle API tunnuse omanikul ei ole õigust API päringuid teha',
'api_user_token_expired' => 'Volitustunnus on aegunud',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Test e-kirja saatmisel tekkis viga:',

View File

@@ -106,7 +106,7 @@ return [
'uploaded' => 'Faili üleslaadimine ebaõnnestus. Server ei pruugi sellise suurusega faile vastu võtta.',
'zip_file' => ':attribute peab viitama failile ZIP-arhiivi sees.',
'zip_file_size' => 'Fail :attribute ei tohi olla suurem kui :size MB.',
'zip_file_size' => 'The file :attribute must not exceed :size MB.',
'zip_file_mime' => ':attribute peab viitama :validTypes tüüpi failile, leiti :foundType.',
'zip_model_expected' => 'Oodatud andmete asemel leiti ":type".',
'zip_unique' => ':attribute peab olema ZIP-arhiivi piires objekti tüübile unikaalne.',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'The secret provided for the given used API token is incorrect',
'api_user_no_api_permission' => 'The owner of the used API token does not have permission to make API calls',
'api_user_token_expired' => 'The authorization token used has expired',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Error thrown when sending a test email:',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'راز ارائه شده برای کد API استفاده شده نادرست است',
'api_user_no_api_permission' => 'مالک نشانه API استفاده شده اجازه برقراری تماس های API را ندارد',
'api_user_token_expired' => 'رمز مجوز استفاده شده منقضی شده است',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'خطا در هنگام ارسال ایمیل آزمایشی:',

View File

@@ -126,7 +126,6 @@ Sovellus ei tunnista ulkoisen todennuspalvelun pyyntöä. Ongelman voi aiheuttaa
'api_incorrect_token_secret' => 'API-tunnisteelle annettu salainen avain on virheellinen',
'api_user_no_api_permission' => 'Käytetyn API-tunnisteen omistajalla ei ole oikeutta tehdä API-kutsuja',
'api_user_token_expired' => 'Käytetty valtuutuskoodi on vanhentunut',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Virhe testisähköpostia lähetettäessä:',

View File

@@ -54,7 +54,7 @@ return [
'import_continue_desc' => 'Examinez le contenu à importer à partir du fichier ZIP téléchargé. Lorsque vous êtes prêt, lancez l\'importation pour ajouter son contenu à ce système. Le fichier d\'importation ZIP téléchargé sera automatiquement supprimé si l\'importation est réussie.',
'import_details' => 'Détails de l\'importation',
'import_run' => 'Exécuter Importation',
'import_size' => ':size Taille du fichier ZIP à importer',
'import_size' => ':size taille du ZIP d\'import',
'import_uploaded_at' => ':relativeTime téléchargé',
'import_uploaded_by' => 'Téléchargé par',
'import_location' => 'Emplacement de l\'importation',
@@ -330,13 +330,13 @@ return [
// Editor Sidebar
'toggle_sidebar' => 'Afficher/masquer la barre latérale',
'page_tags' => 'Étiquettes de la page',
'chapter_tags' => 'Étiquettes du chapitre',
'book_tags' => 'Étiquettes du livre',
'shelf_tags' => 'Étiquettes de l\'étagère',
'tag' => 'Étiquette',
'tags' => 'Étiquettes',
'tags_index_desc' => 'Les étiquettes peuvent être mises sur le contenu pour appliquer une forme flexible de catégorisation. Les étiquettes peuvent avoir à la fois une clé et une valeur, la valeur étant facultative. Une fois appliqué, le contenu peut ensuite être interrogé à laide du nom et de la valeur de létiquette.',
'page_tags' => 'Mots-clés de la page',
'chapter_tags' => 'Mots-clés du chapitre',
'book_tags' => 'Mots-clés du livre',
'shelf_tags' => 'Mots-clés de l\'étagère',
'tag' => 'Mot-clé',
'tags' => 'Mots-clés',
'tags_index_desc' => 'Les tags peuvent être appliqués au contenu du système pour appliquer une forme flexible de catégorisation. Les tags peuvent avoir à la fois une clé et une valeur, la valeur étant facultative. Une fois appliqué, le contenu peut ensuite être interrogé à laide du nom et de la valeur du tag.',
'tag_name' => 'Nom de létiquette',
'tag_value' => 'Valeur du mot-clé (optionnel)',
'tags_explain' => "Ajouter des mots-clés pour catégoriser votre contenu.",

View File

@@ -13,7 +13,7 @@ return [
'auth_pre_register_theme_prevention' => 'Le compte utilisateur n\'a pas pu être enregistré avec les informations fournies',
'email_already_confirmed' => 'Cet e-mail a déjà été validé, vous pouvez vous connecter.',
'email_confirmation_invalid' => 'Cette confirmation est invalide. Veuillez essayer de vous inscrire à nouveau.',
'email_confirmation_expired' => 'Le jeton de confirmation a expiré. Un nouvel e-mail vous a été envoyé.',
'email_confirmation_expired' => 'Le jeton de confirmation est périmé. Un nouvel e-mail vous a été envoyé.',
'email_confirmation_awaiting' => 'L\'adresse e-mail du compte utilisé doit être confirmée',
'ldap_fail_anonymous' => 'L\'accès LDAP anonyme n\'a pas abouti',
'ldap_fail_authed' => 'L\'accès LDAP n\'a pas abouti avec cet utilisateur et ce mot de passe',
@@ -109,7 +109,7 @@ return [
'import_zip_cant_read' => 'Impossible de lire le fichier ZIP.',
'import_zip_cant_decode_data' => 'Impossible de trouver et de décoder le contenu ZIP data.json.',
'import_zip_no_data' => 'Les données du fichier ZIP n\'ont pas de livre, de chapitre ou de page attendus.',
'import_zip_data_too_large' => 'Le contenu du fichier ZIP pour data.json dépasse la taille maximale de téléversement autorisée.',
'import_zip_data_too_large' => 'ZIP data.json content exceeds the configured application maximum upload size.',
'import_validation_failed' => 'L\'importation du ZIP n\'a pas été validée avec les erreurs :',
'import_zip_failed_notification' => 'Impossible d\'importer le fichier ZIP.',
'import_perms_books' => 'Vous n\'avez pas les permissions requises pour créer des livres.',
@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Le secret fourni pour le jeton d\'API utilisé est incorrect',
'api_user_no_api_permission' => 'Le propriétaire du jeton API utilisé n\'a pas la permission de passer des requêtes API',
'api_user_token_expired' => 'Le jeton d\'autorisation utilisé a expiré',
'api_cookie_auth_only_get' => 'Seules les requêtes GET sont autorisées lors de lutilisation de lAPI avec une authentification basée sur les cookies',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Erreur émise lors de l\'envoi d\'un e-mail de test :',

View File

@@ -4,15 +4,15 @@
*/
return [
'new_comment_subject' => 'Nouveau commentaire sur la page : :pageName',
'new_comment_subject' => 'Nouveau commentaire sur la page: :pageName',
'new_comment_intro' => 'Un utilisateur a commenté une page dans :appName:',
'new_page_subject' => 'Nouvelle page: :pageName',
'new_page_intro' => 'Une nouvelle page a été créée dans :appName:',
'updated_page_subject' => 'Page mise à jour: :pageName',
'updated_page_intro' => 'Une page a été mise à jour dans :appName:',
'updated_page_debounce' => 'Pour éviter de nombreuses notifications, pendant un certain temps, vous ne recevrez pas de notifications pour d\'autres modifications de cette page par le même éditeur.',
'comment_mention_subject' => 'Vous avez été mentionné dans un commentaire sur la page : :pageName',
'comment_mention_intro' => 'Vous avez été mentionné dans un commentaire sur :appName:',
'comment_mention_subject' => 'You have been mentioned in a comment on page: :pageName',
'comment_mention_intro' => 'You were mentioned in a comment on :appName:',
'detail_page_name' => 'Nom de la page :',
'detail_page_path' => 'Chemin de la page :',

View File

@@ -23,7 +23,7 @@ return [
'notifications_desc' => 'Contrôlez les notifications par e-mail que vous recevez lorsque certaines activités sont effectuées dans le système.',
'notifications_opt_own_page_changes' => 'Notifier lors des modifications des pages que je possède',
'notifications_opt_own_page_comments' => 'Notifier lorsque les pages que je possède sont commentées',
'notifications_opt_comment_mentions' => 'Notifier lorsque je suis mentionné dans un commentaire',
'notifications_opt_comment_mentions' => 'Notify when I\'m mentioned in a comment',
'notifications_opt_comment_replies' => 'Notifier les réponses à mes commentaires',
'notifications_save' => 'Enregistrer les préférences',
'notifications_update_success' => 'Les préférences de notification ont été mises à jour !',

View File

@@ -17,14 +17,14 @@ return [
'app_features_security' => 'Fonctionnalités et sécurité',
'app_name' => 'Nom de l\'application',
'app_name_desc' => 'Ce nom est affiché dans l\'en-tête et les e-mails.',
'app_name_header' => 'Afficher le nom dans l\'en-tête',
'app_name_header' => 'Afficher le nom dans l\'en-tête ?',
'app_public_access' => 'Accès public',
'app_public_access_desc' => 'L\'activation de cette option permettra aux visiteurs, qui ne sont pas connectés, d\'accéder au contenu de votre instance BookStack.',
'app_public_access_desc_guest' => 'L\'accès pour les visiteurs publics peut être contrôlé par l\'utilisateur "Guest".',
'app_public_access_toggle' => 'Autoriser l\'accès public',
'app_public_viewing' => 'Accepter l\'affichage public des pages ?',
'app_secure_images' => 'Ajout d\'image sécurisé',
'app_secure_images_toggle' => 'Activer l\'ajout d\'image sécurisée',
'app_secure_images_toggle' => 'Activer l\'ajout d\'image sécurisé',
'app_secure_images_desc' => 'Pour des questions de performances, toutes les images sont publiques. Cette option ajoute une chaîne aléatoire difficile à deviner dans les URLs des images.',
'app_default_editor' => 'Éditeur de page par défaut',
'app_default_editor_desc' => 'Sélectionnez l\'éditeur qui sera utilisé par défaut lors de l\'édition de nouvelles pages. Cela peut être remplacé au niveau de la page où les permissions sont autorisées.',
@@ -75,8 +75,8 @@ return [
'reg_confirm_restrict_domain_placeholder' => 'Aucune restriction en place',
// Sorting Settings
'sorting' => 'Listes et tri',
'sorting_book_default' => 'Tri des livres par défaut',
'sorting' => 'Lists & Sorting',
'sorting_book_default' => 'Default Book Sort Rule',
'sorting_book_default_desc' => 'Sélectionnez le tri par défaut à mettre en place sur les nouveaux livres. Cela naffectera pas les livres existants, et peut être redéfini dans les livres.',
'sorting_rules' => 'Règles de tri',
'sorting_rules_desc' => 'Ce sont les opérations de tri qui peuvent être appliquées au contenu du système.',
@@ -103,8 +103,8 @@ return [
'sort_rule_op_updated_date' => 'Date de mise à jour',
'sort_rule_op_chapters_first' => 'Chapitres en premier',
'sort_rule_op_chapters_last' => 'Chapitres en dernier',
'sorting_page_limits' => 'Limite d\'affichage par page',
'sorting_page_limits_desc' => 'Définissez le nombre déléments à afficher par page dans les différentes listes du système. En général, un nombre plus faible offre de meilleures performances, tandis quun nombre plus élevé réduit le besoin de naviguer entre plusieurs pages. Il est recommandé dutiliser un multiple pair de 3 (18, 24, 30, etc.).',
'sorting_page_limits' => 'Per-Page Display Limits',
'sorting_page_limits_desc' => 'Set how many items to show per-page in various lists within the system. Typically a lower amount will be more performant, while a higher amount avoids the need to click through multiple pages. Using an even multiple of 3 (18, 24, 30, etc...) is recommended.',
// Maintenance settings
'maint' => 'Maintenance',
@@ -197,13 +197,13 @@ return [
'role_import_content' => 'Importer le contenu',
'role_editor_change' => 'Changer l\'éditeur de page',
'role_notifications' => 'Recevoir et gérer les notifications',
'role_permission_note_users_and_roles' => 'Ces autorisations permettront également l\'accès à la consultation et la recherche des utilisateurs et des rôles dans le système.',
'role_permission_note_users_and_roles' => 'These permissions will technically also provide visibility & searching of users & roles in the system.',
'role_asset' => 'Permissions des ressources',
'roles_system_warning' => 'Sachez que l\'accès à l\'une des trois permissions ci-dessus peut permettre à un utilisateur de modifier ses propres privilèges ou les privilèges des autres utilisateurs du système. N\'attribuez uniquement des rôles avec ces permissions qu\'à des utilisateurs de confiance.',
'role_asset_desc' => 'Ces permissions contrôlent l\'accès par défaut des ressources dans le système. Les permissions dans les livres, les chapitres et les pages ignoreront ces permissions',
'role_asset_admins' => 'Les administrateurs ont automatiquement accès à tous les contenus mais les options suivantes peuvent afficher ou masquer certaines options de l\'interface.',
'role_asset_image_view_note' => 'Cela concerne la visibilité dans le gestionnaire d\'images. L\'accès réel des fichiers d\'image téléchargés dépendra de l\'option de stockage d\'images du système.',
'role_asset_users_note' => 'Ces autorisations permettront également l\'accès à la consultation et la recherche des utilisateurs dans le système.',
'role_asset_users_note' => 'These permissions will technically also provide visibility & searching of users in the system.',
'role_all' => 'Tous',
'role_own' => 'Propres',
'role_controlled_by_asset' => 'Contrôlé par les ressources les ayant envoyés',
@@ -270,7 +270,7 @@ return [
'user_api_token_name_desc' => 'Donnez à votre jeton un nom lisible pour l\'identifier plus tard.',
'user_api_token_expiry' => 'Date d\'expiration',
'user_api_token_expiry_desc' => 'Définissez une date à laquelle ce jeton expire. Après cette date, les demandes effectuées à l\'aide de ce jeton ne fonctionneront plus. Le fait de laisser ce champ vide entraînera une expiration dans 100 ans.',
'user_api_token_create_secret_message' => 'Immédiatement après la création de ce jeton, un "ID de jeton" et "Secret de jeton" sera généré et affiché. Le secret ne sera affiché qu\'une seule fois, alors assurez-vous de copier la valeur dans un endroit sûr et sécurisé avant de continuer.',
'user_api_token_create_secret_message' => 'Immédiatement après la création de ce jeton, un "ID de jeton" "et" Secret de jeton "sera généré et affiché. Le secret ne sera affiché qu\'une seule fois, alors assurez-vous de copier la valeur dans un endroit sûr et sécurisé avant de continuer.',
'user_api_token' => 'Jeton API',
'user_api_token_id' => 'Token ID',
'user_api_token_id_desc' => 'Il s\'agit d\'un identifiant généré par le système non modifiable pour ce jeton qui devra être fourni dans les demandes d\'API.',

View File

@@ -106,7 +106,7 @@ return [
'uploaded' => 'Le fichier n\'a pas pu être envoyé. Le serveur peut ne pas accepter des fichiers de cette taille.',
'zip_file' => 'L\'attribut :attribute doit référencer un fichier dans le ZIP.',
'zip_file_size' => 'Le fichier :attribute ne doit pas dépasser :size Mo.',
'zip_file_size' => 'The file :attribute must not exceed :size MB.',
'zip_file_mime' => ':attribute doit référencer un fichier de type :validTypes, trouvé :foundType.',
'zip_model_expected' => 'Objet de données attendu, mais ":type" trouvé.',
'zip_unique' => 'L\'attribut :attribute doit être unique pour le type d\'objet dans le ZIP.',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'The secret provided for the given used API token is incorrect',
'api_user_no_api_permission' => 'The owner of the used API token does not have permission to make API calls',
'api_user_token_expired' => 'The authorization token used has expired',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Error thrown when sending a test email:',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Netočan API token',
'api_user_no_api_permission' => 'Vlasnik API tokena nema potrebna dopuštenja',
'api_user_token_expired' => 'Autorizacija je istekla',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Pogreška prilikom slanja testnog email:',

View File

@@ -85,12 +85,12 @@ return [
'webhook_delete_notification' => 'Webhook sikeresen törölve',
// Imports
'import_create' => 'import elkészült',
'import_create_notification' => 'Az import sikeresen feltöltötve',
'import_run' => 'import frissítve',
'import_run_notification' => 'A tartalmat sikeresen importáltam.',
'import_delete' => 'import törölve',
'import_delete_notification' => 'Az import sikeresen törölve',
'import_create' => 'created import',
'import_create_notification' => 'Import successfully uploaded',
'import_run' => 'updated import',
'import_run_notification' => 'Content successfully imported',
'import_delete' => 'deleted import',
'import_delete_notification' => 'Import successfully deleted',
// Users
'user_create' => 'létrehozta a felhasználót',

View File

@@ -30,8 +30,8 @@ return [
'create' => 'Létrehozás',
'update' => 'Frissítés',
'edit' => 'Szerkesztés',
'archive' => 'Archiválás',
'unarchive' => 'Archiválás visszavonása',
'archive' => 'Archive',
'unarchive' => 'Un-Archive',
'sort' => 'Rendezés',
'move' => 'Áthelyezés',
'copy' => 'Másolás',
@@ -111,5 +111,5 @@ return [
'terms_of_service' => 'Felhasználási feltételek',
// OpenSearch
'opensearch_description' => 'Keresés :appName',
'opensearch_description' => 'Search :appName',
];

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Az API tokenhez használt secret helytelen',
'api_user_no_api_permission' => 'A használt API vezérjel tulajdonosának nincs jogosultsága API hívások végrehajtásához',
'api_user_token_expired' => 'A használt hitelesítési vezérjel lejárt',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Hiba történt egy teszt email küldésekor:',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Rahasia yang diberikan untuk token API bekas yang diberikan salah',
'api_user_no_api_permission' => 'Pemilik token API yang digunakan tidak memiliki izin untuk melakukan panggilan API',
'api_user_token_expired' => 'Token otorisasi yang digunakan telah kedaluwarsa',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Kesalahan dilempar saat mengirim email uji:',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Leyndarmálið sem gefið var upp fyrir API tókann er rangt',
'api_user_no_api_permission' => 'Eigandi API tókans hefur ekki heimild til að gera API köll',
'api_user_token_expired' => 'Auðkenningar tókin er útrunninn',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Villa kom upp viðað reyna senda prufu tölvupóst:',

View File

@@ -109,7 +109,7 @@ return [
'import_zip_cant_read' => 'Impossibile leggere il file ZIP.',
'import_zip_cant_decode_data' => 'Impossibile trovare e decodificare il contenuto ZIP data.json.',
'import_zip_no_data' => 'I dati del file ZIP non hanno il contenuto previsto di libri, capitoli o pagine.',
'import_zip_data_too_large' => 'Il contenuto ZIP data.json supera la dimensione massima di upload configurata nell\'applicazione.',
'import_zip_data_too_large' => 'ZIP data.json content exceeds the configured application maximum upload size.',
'import_validation_failed' => 'L\'importazione ZIP non è stata convalidata con errori:',
'import_zip_failed_notification' => 'Impossibile importare il file ZIP.',
'import_perms_books' => 'Non hai i permessi necessari per creare libri.',
@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Il token segreto fornito per il token API utilizzato non è corretto',
'api_user_no_api_permission' => 'Il proprietario del token API utilizzato non ha il permesso di effettuare chiamate API',
'api_user_token_expired' => 'Il token di autorizzazione utilizzato è scaduto',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Si è verificato un errore durante l\'invio di una e-mail di prova:',

View File

@@ -11,8 +11,8 @@ return [
'updated_page_subject' => 'Pagina aggiornata: :pageName',
'updated_page_intro' => 'Una pagina è stata aggiornata in :appName:',
'updated_page_debounce' => 'Per evitare una massa di notifiche, per un po\' non ti verranno inviate notifiche per ulteriori modifiche a questa pagina dallo stesso editor.',
'comment_mention_subject' => 'Sei stato menzionato in un commento nella pagina: :pageName',
'comment_mention_intro' => 'Sei stato menzionato in un commento su :appName:',
'comment_mention_subject' => 'You have been mentioned in a comment on page: :pageName',
'comment_mention_intro' => 'You were mentioned in a comment on :appName:',
'detail_page_name' => 'Nome della pagina:',
'detail_page_path' => 'Percorso della pagina:',

View File

@@ -23,7 +23,7 @@ return [
'notifications_desc' => 'Controlla le notifiche email che ricevi quando viene eseguita una determinata attività all\'interno del sistema.',
'notifications_opt_own_page_changes' => 'Notifica in caso di modifiche alle pagine che possiedo',
'notifications_opt_own_page_comments' => 'Notifica i commenti sulle pagine che possiedo',
'notifications_opt_comment_mentions' => 'Avvisami quando vengo menzionato in un commento',
'notifications_opt_comment_mentions' => 'Notify when I\'m mentioned in a comment',
'notifications_opt_comment_replies' => 'Notificare le risposte ai miei commenti',
'notifications_save' => 'Salva preferenze',
'notifications_update_success' => 'Le preferenze di notifica sono state aggiornate!',

View File

@@ -197,13 +197,13 @@ return [
'role_import_content' => 'Importa contenuto',
'role_editor_change' => 'Cambiare editor di pagina',
'role_notifications' => 'Ricevere e gestire le notifiche',
'role_permission_note_users_and_roles' => 'Queste autorizzazioni forniranno tecnicamente anche la visibilità e la ricerca di utenti e ruoli nel sistema.',
'role_permission_note_users_and_roles' => 'These permissions will technically also provide visibility & searching of users & roles in the system.',
'role_asset' => 'Permessi entità',
'roles_system_warning' => 'Siate consapevoli che l\'accesso a uno dei tre permessi qui sopra può consentire a un utente di modificare i propri privilegi o i privilegi di altri nel sistema. Assegna ruoli con questi permessi solo ad utenti fidati.',
'role_asset_desc' => 'Questi permessi controllano l\'accesso predefinito alle entità. I permessi in libri, capitoli e pagine sovrascriveranno questi.',
'role_asset_admins' => 'Gli amministratori hanno automaticamente accesso a tutti i contenuti ma queste opzioni possono mostrare o nascondere le opzioni della UI.',
'role_asset_image_view_note' => 'Questo si riferisce alla visibilità all\'interno del gestore delle immagini. L\'accesso effettivo ai file di immagine caricati dipenderà dall\'opzione di archiviazione delle immagini di sistema.',
'role_asset_users_note' => 'Queste autorizzazioni forniranno tecnicamente anche la visibilità e la ricerca di utenti nel sistema.',
'role_asset_users_note' => 'These permissions will technically also provide visibility & searching of users in the system.',
'role_all' => 'Tutti',
'role_own' => 'Propri',
'role_controlled_by_asset' => 'Controllato dall\'entità in cui sono caricati',

View File

@@ -106,7 +106,7 @@ return [
'uploaded' => 'Il file non può essere caricato. Il server potrebbe non accettare file di questa dimensione.',
'zip_file' => 'L\'attributo :attribute deve fare riferimento a un file all\'interno dello ZIP.',
'zip_file_size' => 'Il file :attribute non deve superare :size MB.',
'zip_file_size' => 'The file :attribute must not exceed :size MB.',
'zip_file_mime' => 'Il campo :attribute deve fare riferimento a un file di tipo :validTypes, trovato :foundType.',
'zip_model_expected' => 'Oggetto dati atteso ma ":type" trovato.',
'zip_unique' => 'L\'attributo :attribute deve essere univoco per il tipo di oggetto all\'interno dello ZIP.',

View File

@@ -109,7 +109,7 @@ return [
'import_zip_cant_read' => 'ZIPファイルを読み込めません。',
'import_zip_cant_decode_data' => 'ZIPファイル内に data.json が見つからないかデコードできませんでした。',
'import_zip_no_data' => 'ZIPファイルのデータにブック、チャプター、またはページコンテンツがありません。',
'import_zip_data_too_large' => 'ZIPに含まれる data.json が、アプリケーションで設定された最大アップロードサイズを超えています。',
'import_zip_data_too_large' => 'ZIP data.json content exceeds the configured application maximum upload size.',
'import_validation_failed' => 'エラーによりインポートZIPの検証に失敗しました:',
'import_zip_failed_notification' => 'ZIP ファイルのインポートに失敗しました。',
'import_perms_books' => 'ブックを作成するために必要な権限がありません。',
@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => '利用されたAPIトークンに対して提供されたシークレットが正しくありません',
'api_user_no_api_permission' => '使用されているAPIトークンの所有者には、API呼び出しを行う権限がありません',
'api_user_token_expired' => '認証トークンが期限切れです。',
'api_cookie_auth_only_get' => 'Cookie ベースの認証で API を使用する場合、GET リクエストのみが許可されます',
// Settings & Maintenance
'maintenance_test_email_failure' => 'テストメール送信時にエラーが発生しました:',

View File

@@ -106,7 +106,7 @@ return [
'uploaded' => 'ファイルをアップロードできませんでした。サーバーがこのサイズのファイルを受け付けていない可能性があります。',
'zip_file' => ':attribute はZIP 内のファイルを参照する必要があります。',
'zip_file_size' => ':attribute は :size MB を超えてはいけません。',
'zip_file_size' => 'The file :attribute must not exceed :size MB.',
'zip_file_mime' => ':attribute は種別 :validType のファイルを参照する必要がありますが、種別 :foundType となっています。',
'zip_model_expected' => 'データオブジェクトが期待されますが、":type" が見つかりました。',
'zip_unique' => 'ZIP内のオブジェクトタイプに :attribute が一意である必要があります。',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'The secret provided for the given used API token is incorrect',
'api_user_no_api_permission' => 'The owner of the used API token does not have permission to make API calls',
'api_user_token_expired' => 'The authorization token used has expired',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Error thrown when sending a test email:',

View File

@@ -33,7 +33,7 @@ return [
'book_create_from_chapter' => '챕터를 책으로 변환',
'book_create_from_chapter_notification' => '챕터가 책으로 성공적으로 변환되었습니다.',
'book_update' => '업데이트된 책',
'book_update_notification' => '책 수정함',
'book_update_notification' => '책이 성공적으로 업데이트되었습니다.',
'book_delete' => '삭제된 책',
'book_delete_notification' => '책이 성공적으로 삭제되었습니다.',
'book_sort' => '책 정렬',
@@ -50,9 +50,9 @@ return [
'bookshelf_delete_notification' => '책장이 성공적으로 삭제되었습니다.',
// Revisions
'revision_restore' => '복원한 수정본',
'revision_delete' => '삭제한 수정본',
'revision_delete_notification' => '수정본을 잘 삭제함',
'revision_restore' => '버전 복구',
'revision_delete' => '버전 삭제',
'revision_delete_notification' => '버전 삭제 성공',
// Favourites
'favourite_add_notification' => '":name" 을 북마크에 추가하였습니다.',

View File

@@ -17,7 +17,7 @@ return [
'logout' => '로그아웃',
'name' => '이름',
'username' => '용자',
'username' => '용자 이름',
'email' => '전자우편 주소',
'password' => '비밀번호',
'password_confirm' => '비밀번호 확인',

View File

@@ -30,8 +30,8 @@ return [
'create' => '만들기',
'update' => '바꾸기',
'edit' => '수정',
'archive' => '보관',
'unarchive' => '보관 해제',
'archive' => 'Archive',
'unarchive' => 'Un-Archive',
'sort' => '정렬',
'move' => '이동',
'copy' => '복사',
@@ -43,31 +43,31 @@ return [
'reset' => '리셋',
'remove' => '제거',
'add' => '추가',
'configure' => '구성',
'configure' => '설정',
'manage' => '관리',
'fullscreen' => '전체화면',
'favourite' => '즐겨찾기',
'unfavourite' => '즐겨찾기 해제',
'next' => '다음',
'previous' => '이전',
'filter_active' => '적용 필터:',
'filter_clear' => '필터 해제',
'filter_active' => '적용 :',
'filter_clear' => '모든 필터 해제',
'download' => '내려받기',
'open_in_tab' => '탭에서 열기',
'open' => '열기',
'open' => '열기 ',
// Sort Options
'sort_options' => '정렬 기준',
'sort_direction_toggle' => '순서 반전',
'sort_ascending' => '오름차순',
'sort_descending' => '내림차순',
'sort_name' => '이름',
'sort_name' => '제목',
'sort_default' => '기본값',
'sort_created_at' => '만든 날짜',
'sort_updated_at' => '갱신한 날짜',
'sort_updated_at' => '수정한 날짜',
// Misc
'deleted_user' => '삭제한 용자',
'deleted_user' => '삭제한 용자',
'no_activity' => '활동 없음',
'no_items' => '항목 없음',
'back_to_top' => '맨 위로',
@@ -75,8 +75,8 @@ return [
'toggle_details' => '내용 보기',
'toggle_thumbnails' => '썸네일 보기',
'details' => '정보',
'grid_view' => '격자로 보기',
'list_view' => '목록으로 보기',
'grid_view' => '격자 형식으로 보기',
'list_view' => '리스트 형식으로 보기',
'default' => '기본 설정',
'breadcrumb' => '탐색 경로',
'status' => '상태',

View File

@@ -8,7 +8,7 @@ return [
'image_select' => '이미지 선택',
'image_list' => '이미지 목록',
'image_details' => '이미지 상세정보',
'image_upload' => '이미지 올려두기',
'image_upload' => '이미지 업로드',
'image_intro' => '여기에서 이전에 시스템에 업로드한 이미지를 선택하고 관리할 수 있습니다.',
'image_intro_upload' => '이미지 파일을 이 창으로 끌어다 놓거나 위의 \'이미지 업로드\' 버튼을 사용하여 새 이미지를 업로드합니다.',
'image_all' => '모든 이미지',
@@ -17,7 +17,7 @@ return [
'image_page_title' => '이 문서에서 쓰고 있는 이미지',
'image_search_hint' => '이미지 이름 검색',
'image_uploaded' => '올림 :uploadedDate',
'image_uploaded_by' => ':userName 이용자가 올려둠',
'image_uploaded_by' => '업로드 :userName',
'image_uploaded_to' => ':pageLink 로 업로드됨',
'image_updated' => '갱신일 :updateDate',
'image_load_more' => '더 보기',

View File

@@ -16,8 +16,8 @@ return [
'recently_viewed' => '최근에 본 목록',
'recent_activity' => '최근 활동 기록',
'create_now' => '바로 만들기',
'revisions' => '수정본',
'meta_revision' => '수정본 #:revisionCount',
'revisions' => '버전',
'meta_revision' => '버전 #:revisionCount',
'meta_created' => '생성 :timeLength',
'meta_created_name' => '생성 :timeLength, :user',
'meta_updated' => '수정 :timeLength',
@@ -115,7 +115,7 @@ return [
'shelves_create' => '책꽂이 만들기',
'shelves_popular' => '많이 읽은 책꽂이',
'shelves_new' => '새로운 책꽂이',
'shelves_new_action' => '새 책꽂이',
'shelves_new_action' => '새로운 책꽂이',
'shelves_popular_empty' => '많이 읽은 책꽂이 목록',
'shelves_new_empty' => '새로운 책꽂이 목록',
'shelves_save' => '저장',
@@ -148,7 +148,7 @@ return [
'books_popular' => '많이 읽은 책',
'books_recent' => '최근에 읽은 책',
'books_new' => '새로운 책',
'books_new_action' => '새 책',
'books_new_action' => '새로운 책',
'books_popular_empty' => '많이 읽은 책 목록',
'books_new_empty' => '새로운 책 목록',
'books_create' => '책 만들기',
@@ -200,7 +200,7 @@ return [
'chapters' => '챕터',
'x_chapters' => '챕터 :count개|총 :count개',
'chapters_popular' => '많이 읽은 챕터',
'chapters_new' => '새',
'chapters_new' => '새로운 챕터',
'chapters_create' => '챕터 만들기',
'chapters_delete' => '챕터 삭제하기',
'chapters_delete_named' => ':chapterName(을)를 지웁니다.',
@@ -221,11 +221,11 @@ return [
'chapter_sort_book' => '책 정렬하기',
// Pages
'page' => '페이지',
'pages' => '페이지',
'page' => '문서',
'pages' => '문서',
'x_pages' => '문서 :count개|총 :count개',
'pages_popular' => '많이 읽은 문서',
'pages_new' => '새 페이지',
'pages_new' => '새로운 문서',
'pages_attachments' => '첨부',
'pages_navigation' => '목차',
'pages_delete' => '문서 삭제하기',
@@ -272,7 +272,7 @@ return [
'pages_md_insert_drawing' => '드로잉 추가',
'pages_md_show_preview' => '미리보기 표시',
'pages_md_sync_scroll' => '미리보기 스크롤 동기화',
'pages_md_plain_editor' => '플레인텍스트 편집기',
'pages_md_plain_editor' => 'Plaintext editor',
'pages_drawing_unsaved' => '저장되지 않은 드로잉 발견',
'pages_drawing_unsaved_confirm' => '이전에 실패한 드로잉 저장 시도에서 저장되지 않은 드로잉 데이터가 발견되었습니다. 이 저장되지 않은 드로잉을 복원하고 계속 편집하시겠습니까?',
'pages_not_in_chapter' => '챕터에 있는 문서가 아닙니다.',
@@ -290,10 +290,10 @@ return [
'pages_revision_restored_from' => '#:id; :summary에서 복구함',
'pages_revisions_created_by' => '만든 사용자',
'pages_revisions_date' => '수정한 날짜',
'pages_revisions_number' => '#',
'pages_revisions_number' => 'No.',
'pages_revisions_sort_number' => '수정 번호',
'pages_revisions_numbered' => '수정본 #:id',
'pages_revisions_numbered_changes' => '수정본 #:id에서 바꾼 부분',
'pages_revisions_numbered' => '수정본 :id',
'pages_revisions_numbered_changes' => '수정본 :id에서 바꾼 부분',
'pages_revisions_editor' => '편집기 유형',
'pages_revisions_changelog' => '설명',
'pages_revisions_changes' => '바꾼 부분',
@@ -310,7 +310,7 @@ return [
'pages_pointer_toggle_link' => '퍼머링크 모드, 포함 태그를 표시하려면 누릅니다.',
'pages_pointer_toggle_include' => '태그 포함 모드, 퍼머링크를 표시하려면 누릅니다.',
'pages_permissions_active' => '문서 권한 허용함',
'pages_initial_revision' => '최초 게시',
'pages_initial_revision' => '처음 판본',
'pages_references_update_revision' => '시스템에서 내부 링크 자동 업데이트',
'pages_initial_name' => '제목 없음',
'pages_editing_draft_notification' => ':timeDiff에 초안 문서입니다.',
@@ -330,27 +330,27 @@ return [
// Editor Sidebar
'toggle_sidebar' => '사이드바 토글',
'page_tags' => '페이지 태그',
'chapter_tags' => '장 태그',
'book_tags' => '책 태그',
'shelf_tags' => '책꽂이 태그',
'tag' => '태그',
'tags' => '태그',
'page_tags' => '문서 태그',
'chapter_tags' => '챕터 꼬리표',
'book_tags' => '책 꼬리표',
'shelf_tags' => '책꽂이 꼬리표',
'tag' => '꼬리표',
'tags' => '꼬리표',
'tags_index_desc' => '태그를 시스템 내의 콘텐츠에 적용하여 유연한 형태의 분류를 적용할 수 있습니다. 태그는 키와 값을 모두 가질 수 있으며 값은 선택 사항입니다. 태그가 적용되면 태그 이름과 값을 사용하여 콘텐츠를 쿼리할 수 있습니다.',
'tag_name' => '태그 이름',
'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_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_view_tags' => '꼬리표 보기',
'tags_view_existing_tags' => '사용 중인 꼬리표 보기',
'tags_list_empty_hint' => '태그는 에디터 사이드바나 책, 챕터 또는 책꽂이 정보 편집에서 지정할 수 있습니다.',
'attachments' => '첨부 파일',
'attachments_explain' => '파일이나 링크를 첨부하세요. 정보 탭에 나타납니다.',
@@ -403,7 +403,7 @@ return [
'comment_archived_count' => ':count Archived',
'comment_archived_threads' => 'Archived Threads',
'comment_save' => '등록',
'comment_new' => '새 의견',
'comment_new' => '새로운 댓글',
'comment_created' => '댓글 등록함 :createDiff',
'comment_updated' => ':username(이)가 댓글 수정함 :updateDiff',
'comment_updated_indicator' => '업데이트됨',
@@ -416,14 +416,14 @@ return [
'comment_jump_to_thread' => 'Jump to thread',
'comment_delete_confirm' => '이 댓글을 지울 건가요?',
'comment_in_reply_to' => ':commentId(을)를 향한 답글',
'comment_reference' => '참조',
'comment_reference' => 'Reference',
'comment_reference_outdated' => '(Outdated)',
'comment_editor_explain' => '이 페이지에 남겨진 댓글은 다음과 같습니다. 저장된 페이지를 볼 때 댓글을 추가하고 관리할 수 있습니다.',
// Revision
'revision_delete_confirm' => '이 수정본을 지울 건가요?',
'revision_restore_confirm' => '이 버전을 되돌릴 건가요? 현재 페이지는 대체됩니다.',
'revision_cannot_delete_latest' => '최신 수정본은 지울 수 없습니다.',
'revision_cannot_delete_latest' => '현재 버전본은 지울 수 없습니다.',
// Copy view
'copy_consider' => '항목을 복사할 때 다음을 고려하세요.',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'API 토큰이 제공한 암호에 문제가 있습니다.',
'api_user_no_api_permission' => 'API 토큰의 소유자가 API를 호출할 권한이 없습니다.',
'api_user_token_expired' => '인증 토큰이 만료되었습니다.',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => '메일을 발송하는 도중 문제가 생겼습니다:',

View File

@@ -18,13 +18,13 @@ return [
'app_name' => '애플리케이션 이름 (사이트 제목)',
'app_name_desc' => '이 이름은 헤더와 시스템에서 보낸 모든 이메일에 표시됩니다.',
'app_name_header' => '헤더에 이름 표시',
'app_public_access' => '공개 접근',
'app_public_access_desc' => '이 옵션을 활성화하면 로그인하지 않은 방문자가 BookStack 인스턴스의 내용에 접근할 수 있습니다.',
'app_public_access' => '사이트 공개',
'app_public_access_desc' => '이 옵션을 활성화하면 로그인하지 않은 방문자도 이 서버의 콘텐츠에 액세스할 수 있습니다.',
'app_public_access_desc_guest' => '일반 방문자의 액세스는 "Guest" 사용자를 통해 제어할 수 있습니다.',
'app_public_access_toggle' => '공개 액세스 허용',
'app_public_viewing' => '공개 열람을 허용할까요?',
'app_secure_images' => '보안 강화하여 이미지 올려두기',
'app_secure_images_toggle' => '보안 강화하여 이미지 올려두기 활성화',
'app_secure_images' => '보안 강화 이미지 업로드',
'app_secure_images_toggle' => '보안 강화 이미지 업로드 사용',
'app_secure_images_desc' => '성능상의 이유로 모든 이미지는 공개됩니다. 이 옵션은 이미지 URL 앞에 추측하기 어려운 임의의 문자열을 추가합니다. 쉽게 액세스할 수 없도록 디렉토리 인덱스가 활성화되어 있지 않은지 확인하세요.',
'app_default_editor' => '기본 페이지 편집기',
'app_default_editor_desc' => '새 페이지를 편집할 때 기본으로 사용될 편집기를 선택합니다. 권한을 갖고 있다면 페이지마다 다르게 적용될 수 있습니다.',
@@ -157,7 +157,7 @@ return [
'audit_event_filter_no_filter' => '필터 없음',
'audit_deleted_item' => '삭제한 항목',
'audit_deleted_item_name' => '이름: :name',
'audit_table_user' => '용자',
'audit_table_user' => '용자',
'audit_table_event' => '이벤트',
'audit_table_related' => '관련 항목 또는 세부 사항',
'audit_table_ip' => 'IP 주소',
@@ -167,7 +167,7 @@ return [
// Role Settings
'roles' => '역할',
'role_user_roles' => '용자 역할',
'role_user_roles' => '용자 역할',
'roles_index_desc' => '역할은 사용자를 그룹화하고 구성원에게 시스템 권한을 제공하기 위해 사용됩니다. 사용자가 여러 역할의 구성원인 경우 부여된 권한이 중첩되며 모든 권한을 상속받게 됩니다.',
'roles_x_users_assigned' => ':count 명의 사용자가 할당됨|:count 명의 사용자가 할당됨',
'roles_x_permissions_provided' => ':count 개의 권한|:count 개의 권한',
@@ -186,7 +186,7 @@ return [
'role_mfa_enforced' => '다중 인증 필요',
'role_external_auth_id' => '외부 인증 계정',
'role_system' => '시스템 권한',
'role_manage_users' => '용자 관리하기',
'role_manage_users' => '용자 관리',
'role_manage_roles' => '권한 관리',
'role_manage_entity_permissions' => '문서별 권한 관리',
'role_manage_own_entity_permissions' => '직접 만든 문서별 권한 관리',
@@ -217,7 +217,7 @@ return [
'user_profile' => '사용자 프로필',
'users_add_new' => '사용자 만들기',
'users_search' => '사용자 검색',
'users_latest_activity' => '최근 활동',
'users_latest_activity' => '마지막 활동',
'users_details' => '사용자 정보',
'users_details_desc' => '메일 주소로 로그인합니다.',
'users_details_desc_no_email' => '사용자 이름을 바꿉니다.',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'The secret provided for the given used API token is incorrect',
'api_user_no_api_permission' => 'The owner of the used API token does not have permission to make API calls',
'api_user_token_expired' => 'The authorization token used has expired',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Error thrown when sending a test email:',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Pateiktas panaudoto API žetono slėpinys yra neteisingas',
'api_user_no_api_permission' => 'API prieigos rakto savininkas neturi leidimo daryti API skambučius',
'api_user_token_expired' => 'Prieigos rakto naudojimas baigė galioti',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Siunčiant bandymo email: įvyko klaida',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Norādītā slepenā atslēga izmantotajam API žetonam nav pareiza',
'api_user_no_api_permission' => 'Izmantotā API žetona īpašniekam nav tiesības veikt API izsaukumus',
'api_user_token_expired' => 'Autorizācijas žetona derīguma termiņš ir izbeidzies',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Radusies kļūda sūtot testa epastu:',

View File

@@ -30,8 +30,8 @@ return [
'create' => 'Opprett',
'update' => 'Oppdater',
'edit' => 'Rediger',
'archive' => 'Arkiver',
'unarchive' => 'Av-arkiver',
'archive' => 'Archive',
'unarchive' => 'Un-Archive',
'sort' => 'Sortér',
'move' => 'Flytt',
'copy' => 'Kopier',

View File

@@ -63,10 +63,10 @@ return [
'import_delete_desc' => 'Dette vil slette den opplastede importen av ZIP-filen og kan ikke angres.',
'import_errors' => 'Import feil',
'import_errors_desc' => 'Feil oppstod under importforsøket:',
'breadcrumb_siblings_for_page' => 'Naviger relaterte sider',
'breadcrumb_siblings_for_chapter' => 'Naviger relaterte kapitler',
'breadcrumb_siblings_for_book' => 'Naviger relaterte bøker',
'breadcrumb_siblings_for_bookshelf' => 'Naviger relaterte hyller',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Tilganger',
@@ -252,7 +252,7 @@ return [
'pages_edit_switch_to_markdown_stable' => '(Urørt innhold)',
'pages_edit_switch_to_wysiwyg' => 'Bytt til WYSIWYG tekstredigering',
'pages_edit_switch_to_new_wysiwyg' => 'Bytt til ny WYSIWYG',
'pages_edit_switch_to_new_wysiwyg_desc' => '(under Beta-testing)',
'pages_edit_switch_to_new_wysiwyg_desc' => '(In Beta Testing)',
'pages_edit_set_changelog' => 'Angi endringslogg',
'pages_edit_enter_changelog_desc' => 'Gi en kort beskrivelse av endringene dine',
'pages_edit_enter_changelog' => 'Se endringslogg',
@@ -272,7 +272,7 @@ return [
'pages_md_insert_drawing' => 'Sett inn tegning',
'pages_md_show_preview' => 'Forhåndsvisning',
'pages_md_sync_scroll' => 'Synkroniser forhåndsvisningsrulle',
'pages_md_plain_editor' => 'Redigeringsverktøy for klartekst',
'pages_md_plain_editor' => 'Plaintext editor',
'pages_drawing_unsaved' => 'Ulagret tegning funnet',
'pages_drawing_unsaved_confirm' => 'Ulagret tegningsdata ble funnet fra en tidligere mislykket lagring. Vil du gjenopprette og fortsette å redigere denne ulagrede tegningen?',
'pages_not_in_chapter' => 'Siden tilhører ingen kapittel',
@@ -397,11 +397,11 @@ return [
'comment' => 'Kommentar',
'comments' => 'Kommentarer',
'comment_add' => 'Skriv kommentar',
'comment_none' => 'Ingen kommentarer å vise',
'comment_none' => 'No comments to display',
'comment_placeholder' => 'Skriv en kommentar her',
'comment_thread_count' => ':count Kommentar Tråd|:count Kommentar Tråder',
'comment_archived_count' => ':count Arkivert',
'comment_archived_threads' => 'Arkiverte tråder',
'comment_thread_count' => ':count Comment Thread|:count Comment Threads',
'comment_archived_count' => ':count Archived',
'comment_archived_threads' => 'Archived Threads',
'comment_save' => 'Publiser kommentar',
'comment_new' => 'Ny kommentar',
'comment_created' => 'kommenterte :createDiff',
@@ -410,14 +410,14 @@ return [
'comment_deleted_success' => 'Kommentar fjernet',
'comment_created_success' => 'Kommentar skrevet',
'comment_updated_success' => 'Kommentar endret',
'comment_archive_success' => 'Kommentar arkivert',
'comment_unarchive_success' => 'Kommentar uarkivert',
'comment_view' => 'Vis kommentar',
'comment_jump_to_thread' => 'Gå til tråd',
'comment_archive_success' => 'Comment archived',
'comment_unarchive_success' => 'Comment un-archived',
'comment_view' => 'View comment',
'comment_jump_to_thread' => 'Jump to thread',
'comment_delete_confirm' => 'Er du sikker på at du vil fjerne kommentaren?',
'comment_in_reply_to' => 'Som svar til :commentId',
'comment_reference' => 'Referanse',
'comment_reference_outdated' => '(Utdatert)',
'comment_reference' => 'Reference',
'comment_reference_outdated' => '(Outdated)',
'comment_editor_explain' => 'Her er kommentarene som er på denne siden. Kommentarer kan legges til og administreres når du ser på den lagrede siden.',
// Revision

View File

@@ -109,7 +109,7 @@ return [
'import_zip_cant_read' => 'Kunne ikke lese ZIP-filen.',
'import_zip_cant_decode_data' => 'Kunne ikke finne og dekode ZIP data.json innhold.',
'import_zip_no_data' => 'ZIP-fildata har ingen forventet bok, kapittel eller sideinnhold.',
'import_zip_data_too_large' => 'ZIP data.json innholdet overskrider maksimal filstørrelse for opplasting.',
'import_zip_data_too_large' => 'ZIP data.json content exceeds the configured application maximum upload size.',
'import_validation_failed' => 'Import av ZIP feilet i å validere med feil:',
'import_zip_failed_notification' => 'Kunne ikke importere ZIP-fil.',
'import_perms_books' => 'Du mangler nødvendige tillatelser for å lage bøker.',
@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Hemmeligheten som er gitt for det gitte brukte API-tokenet er feil',
'api_user_no_api_permission' => 'Eieren av det brukte API-tokenet har ikke tillatelse til å ringe API-samtaler',
'api_user_token_expired' => 'Autorisasjonstokenet som er brukt, har utløpt',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Feil kastet når du sendte en test-e-post:',

View File

@@ -11,8 +11,8 @@ return [
'updated_page_subject' => 'Oppdatert side: :pageName',
'updated_page_intro' => 'En side er oppdatert i :appName:',
'updated_page_debounce' => 'For å forhindre mange varslinger, vil du ikke få nye varslinger for endringer på denne siden fra samme forfatter.',
'comment_mention_subject' => 'Du har blitt nevnt i en kommentar på siden: :pageName',
'comment_mention_intro' => 'Du har blitt nevnt i en kommentar på :appName:',
'comment_mention_subject' => 'You have been mentioned in a comment on page: :pageName',
'comment_mention_intro' => 'You were mentioned in a comment on :appName:',
'detail_page_name' => 'Sidenavn:',
'detail_page_path' => 'Side bane:',

View File

@@ -23,7 +23,7 @@ return [
'notifications_desc' => 'Kontroller e-postvarslene du mottar når en bestemt aktivitet utføres i systemet.',
'notifications_opt_own_page_changes' => 'Varsle ved endringer til sider jeg eier',
'notifications_opt_own_page_comments' => 'Varsle om kommentarer på sider jeg eier',
'notifications_opt_comment_mentions' => 'Varsle når jeg blir nevnt i en kommentar',
'notifications_opt_comment_mentions' => 'Notify when I\'m mentioned in a comment',
'notifications_opt_comment_replies' => 'Varsle ved svar på mine kommentarer',
'notifications_save' => 'Lagre innstillinger',
'notifications_update_success' => 'Varslingsinnstillingene er oppdatert!',

View File

@@ -75,8 +75,8 @@ return [
'reg_confirm_restrict_domain_placeholder' => 'Ingen begrensninger er satt',
// Sorting Settings
'sorting' => 'Lister & Sortering',
'sorting_book_default' => 'Standard regel for boksortering',
'sorting' => 'Lists & Sorting',
'sorting_book_default' => 'Default Book Sort Rule',
'sorting_book_default_desc' => 'Velg standard sorteringsregelen som skal brukes for nye bøker. Dette vil ikke påvirke eksisterende bøker, og kan overstyres per bok.',
'sorting_rules' => 'Sorteringsregler',
'sorting_rules_desc' => 'Dette er forhåndsdefinerte sorteringsoperasjoner som kan brukes på innhold i systemet.',
@@ -91,20 +91,20 @@ return [
'sort_rule_details_desc' => 'Angi et navn for denne sorteringsregelen, som vil vises i lister når brukerne velger en sorteringsmetode.',
'sort_rule_operations' => 'Sorteringsoperasjoner',
'sort_rule_operations_desc' => 'Konfigurer sorteringshandlinger ved å flytte dem fra listen over tilgjengelige operasjoner. Ved bruk vil operasjonene bli brukt i rekkefølge, fra topp til bunn. Eventuelle endringer gjort her vil bli brukt for alle tildelte bøker når du lagrer.',
'sort_rule_available_operations' => 'Tilgjengelige operasjoner',
'sort_rule_available_operations_empty' => 'Ingen gjenværende operasjoner',
'sort_rule_configured_operations' => 'Konfigurerte operasjoner',
'sort_rule_available_operations' => 'Available Operations',
'sort_rule_available_operations_empty' => 'No operations remaining',
'sort_rule_configured_operations' => 'Configured Operations',
'sort_rule_configured_operations_empty' => 'Dra/legg til operasjoner fra listen "Tilgjengelige operasjoner"',
'sort_rule_op_asc' => '(Stigende)',
'sort_rule_op_desc' => '(Synkende)',
'sort_rule_op_asc' => '(Asc)',
'sort_rule_op_desc' => '(Desc)',
'sort_rule_op_name' => 'Navn - Alfabetisk',
'sort_rule_op_name_numeric' => 'Navn - Numerisk',
'sort_rule_op_created_date' => 'Dato opprettet',
'sort_rule_op_updated_date' => 'Dato oppdatert',
'sort_rule_op_name_numeric' => 'Name - Numeric',
'sort_rule_op_created_date' => 'Created Date',
'sort_rule_op_updated_date' => 'Updated Date',
'sort_rule_op_chapters_first' => 'Kapitler først',
'sort_rule_op_chapters_last' => 'Kapitler sist',
'sorting_page_limits' => 'Visningsgrenser for hver side',
'sorting_page_limits_desc' => 'Angi hvor mange elementer som skal vises på hver side i ulike lister i systemet. Et lavere antall vil vanligvis gi bedre ytelse, mens et høyere antall reduserer behovet for å bla gjennom mange sider. Det er anbefalt å bruke en multiplikasjon av 3 som gir partall (18, 24, 30 osv.).',
'sorting_page_limits' => 'Per-Page Display Limits',
'sorting_page_limits_desc' => 'Set how many items to show per-page in various lists within the system. Typically a lower amount will be more performant, while a higher amount avoids the need to click through multiple pages. Using an even multiple of 3 (18, 24, 30, etc...) is recommended.',
// Maintenance settings
'maint' => 'Vedlikehold',
@@ -197,13 +197,13 @@ return [
'role_import_content' => 'Import innhold',
'role_editor_change' => 'Endre sideredigering',
'role_notifications' => 'Motta og administrere varslinger',
'role_permission_note_users_and_roles' => 'Disse tillatelsene vil teknisk sett også gi mulighet til å se & søke etter brukere & roller i systemet.',
'role_permission_note_users_and_roles' => 'These permissions will technically also provide visibility & searching of users & roles in the system.',
'role_asset' => 'Eiendomstillatelser',
'roles_system_warning' => 'Vær oppmerksom på at tilgang til noen av de ovennevnte tre tillatelsene kan tillate en bruker å endre sine egne rettigheter eller rettighetene til andre i systemet. Bare tildel roller med disse tillatelsene til pålitelige brukere.',
'role_asset_desc' => 'Disse tillatelsene kontrollerer standard tilgang til eiendelene i systemet. Tillatelser til bøker, kapitler og sider overstyrer disse tillatelsene.',
'role_asset_admins' => 'Administratorer får automatisk tilgang til alt innhold, men disse alternativene kan vise eller skjule UI-alternativer.',
'role_asset_image_view_note' => 'Dette gjelder synlighet innenfor bilde-administrasjonen. Faktisk tilgang på opplastede bildefiler vil være avhengig av valget for systemlagring av bildet.',
'role_asset_users_note' => 'Disse tillatelsene vil teknisk sett også gi mulighet til å se & søke etter brukere i systemet.',
'role_asset_users_note' => 'These permissions will technically also provide visibility & searching of users in the system.',
'role_all' => 'Alle',
'role_own' => 'Egne',
'role_controlled_by_asset' => 'Kontrollert av eiendelen de er lastet opp til',

View File

@@ -106,7 +106,7 @@ return [
'uploaded' => 'kunne ikke lastes opp, tjeneren støtter ikke filer av denne størrelsen.',
'zip_file' => 'Attributtet :attribute må henvises til en fil i ZIP.',
'zip_file_size' => 'Filen :attribute må ikke overstige :size MB.',
'zip_file_size' => 'The file :attribute must not exceed :size MB.',
'zip_file_mime' => 'Attributtet :attribute må referere en fil av typen :validTypes, som ble funnet :foundType.',
'zip_model_expected' => 'Data objekt forventet, men ":type" funnet.',
'zip_unique' => 'Attributtet :attribute må være unikt for objekttypen i ZIP.',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'दिइएको API टोकनको लागि प्रदान गरिएको गोप्य सही छैन।',
'api_user_no_api_permission' => 'API टोकनको मालिकसँग API कल गर्ने अनुमति छैन।',
'api_user_token_expired' => 'प्रमाणीकरण टोकन समाप्त भइसकेको छ।',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'टेस्ट इमेल पठाउँदा त्रुटि:',

View File

@@ -109,7 +109,7 @@ return [
'import_zip_cant_read' => 'Kon het Zip-bestand niet lezen.',
'import_zip_cant_decode_data' => 'Kon de data.json Zip-inhoud niet vinden of decoderen.',
'import_zip_no_data' => 'Zip-bestand bevat niet de verwachte boek, hoofdstuk of pagina-inhoud.',
'import_zip_data_too_large' => 'De inhoud van data.json in de ZIP overschrijdt de ingestelde maximum upload grootte.',
'import_zip_data_too_large' => 'ZIP data.json content exceeds the configured application maximum upload size.',
'import_validation_failed' => 'De validatie van het Zip-bestand is mislukt met de volgende fouten:',
'import_zip_failed_notification' => 'Importeren van het Zip-bestand is mislukt.',
'import_perms_books' => 'Je mist de vereiste machtigingen om boeken te maken.',
@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Het opgegeven geheim voor de API-token is onjuist',
'api_user_no_api_permission' => 'De eigenaar van de gebruikte API-token heeft geen machtiging om API calls te maken',
'api_user_token_expired' => 'De gebruikte autorisatie token is verlopen',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Fout opgetreden bij het verzenden van een test email:',

View File

@@ -11,8 +11,8 @@ return [
'updated_page_subject' => 'Aangepaste pagina: :pageName',
'updated_page_intro' => 'Een pagina werd aangepast in :appName:',
'updated_page_debounce' => 'Om een stortvloed aan meldingen te voorkomen, zul je een tijdje geen meldingen ontvangen voor verdere bewerkingen van deze pagina door dezelfde redacteur.',
'comment_mention_subject' => 'Je bent vermeld in een opmerking op pagina: :pageName',
'comment_mention_intro' => 'Je bent vermeld in een opmerking in :appName:',
'comment_mention_subject' => 'You have been mentioned in a comment on page: :pageName',
'comment_mention_intro' => 'You were mentioned in a comment on :appName:',
'detail_page_name' => 'Pagina Naam:',
'detail_page_path' => 'Paginapad:',

View File

@@ -23,7 +23,7 @@ return [
'notifications_desc' => 'Bepaal welke e-mailmeldingen je ontvangt wanneer bepaalde activiteiten in het systeem worden uitgevoerd.',
'notifications_opt_own_page_changes' => 'Geef melding bij wijzigingen aan pagina\'s waarvan ik de eigenaar ben',
'notifications_opt_own_page_comments' => 'Geef melding van opmerkingen op pagina\'s waarvan ik de eigenaar ben',
'notifications_opt_comment_mentions' => 'Geef een melding wanneer ik word vermeld in een opmerking',
'notifications_opt_comment_mentions' => 'Notify when I\'m mentioned in a comment',
'notifications_opt_comment_replies' => 'Geef melding van reacties op mijn opmerkingen',
'notifications_save' => 'Voorkeuren opslaan',
'notifications_update_success' => 'Voorkeuren voor meldingen zijn bijgewerkt!',

View File

@@ -197,13 +197,13 @@ return [
'role_import_content' => 'Importeer inhoud',
'role_editor_change' => 'Wijzig pagina bewerker',
'role_notifications' => 'Meldingen ontvangen & beheren',
'role_permission_note_users_and_roles' => 'Deze machtigingen geven technisch gezien toegang tot het weergeven van gebruikers & rollen binnen het systeem.',
'role_permission_note_users_and_roles' => 'These permissions will technically also provide visibility & searching of users & roles in the system.',
'role_asset' => 'Asset Machtigingen',
'roles_system_warning' => 'Wees ervan bewust dat toegang tot een van de bovengenoemde drie machtigingen een gebruiker in staat kan stellen zijn eigen machtigingen of de machtigingen van anderen in het systeem kan wijzigen. Wijs alleen rollen toe met deze machtigingen aan vertrouwde gebruikers.',
'role_asset_desc' => 'Deze machtigingen bepalen de standaard toegang tot de assets binnen het systeem. Machtigingen op boeken, hoofdstukken en pagina\'s overschrijven deze instelling.',
'role_asset_admins' => 'Beheerders krijgen automatisch toegang tot alle inhoud, maar deze opties kunnen gebruikersinterface opties tonen of verbergen.',
'role_asset_image_view_note' => 'Dit heeft betrekking op de zichtbaarheid binnen de afbeeldingsbeheerder. De werkelijke toegang tot geüploade afbeeldingsbestanden hangt af van de gekozen opslagmethode.',
'role_asset_users_note' => 'Deze machtigingen geven technisch gezien toegang tot het weergeven van gebruikers binnen het systeem.',
'role_asset_users_note' => 'These permissions will technically also provide visibility & searching of users in the system.',
'role_all' => 'Alles',
'role_own' => 'Eigen',
'role_controlled_by_asset' => 'Gecontroleerd door de asset waar deze is geüpload',

View File

@@ -106,7 +106,7 @@ return [
'uploaded' => 'Het bestand kon niet worden geüpload. De server accepteert mogelijk geen bestanden van deze grootte.',
'zip_file' => 'Het \':attribute\' veld moet verwijzen naar een bestand in de ZIP.',
'zip_file_size' => 'Het bestand :attribute mag niet groter zijn dan :size MB.',
'zip_file_size' => 'The file :attribute must not exceed :size MB.',
'zip_file_mime' => 'Het \':attribute\' veld moet verwijzen naar een bestand met het type :validTypes, vond :foundType.',
'zip_model_expected' => 'Dataobject verwacht maar vond ":type".',
'zip_unique' => ':attribute moet uniek zijn voor het objecttype binnen de ZIP.',

View File

@@ -125,7 +125,6 @@ return [
'api_incorrect_token_secret' => 'Hemmeligheten som er gitt for det gitte brukte API-tokenet er feil',
'api_user_no_api_permission' => 'Eieren av det brukte API-tokenet har ikke tillatelse til å ringe API-samtaler',
'api_user_token_expired' => 'Autorisasjonstokenet som er brukt, har utløpt',
'api_cookie_auth_only_get' => 'Only GET requests are allowed when using the API with cookie-based authentication',
// Settings & Maintenance
'maintenance_test_email_failure' => 'Feil kastet når du sendte en test-e-post:',

View File

@@ -6,52 +6,52 @@
return [
// Pages
'page_create' => 'utworzono stronę',
'page_create' => 'utworz stronę',
'page_create_notification' => 'Strona została utworzona',
'page_update' => 'zaktualizowano stronę',
'page_update' => 'zaktualizował stronę',
'page_update_notification' => 'Strona zaktualizowana pomyślnie',
'page_delete' => 'usunięto stronę',
'page_delete' => 'usunął stronę',
'page_delete_notification' => 'Strona została usunięta',
'page_restore' => 'przywrócono stronę',
'page_restore' => 'przywróc stronę',
'page_restore_notification' => 'Strona przywrócona pomyślnie',
'page_move' => 'przeniesiono stronę',
'page_move' => 'przeniósł stronę',
'page_move_notification' => 'Strona przeniesiona pomyślnie',
// Chapters
'chapter_create' => 'utworzono rozdział',
'chapter_create' => 'utworz rozdział',
'chapter_create_notification' => 'Rozdział utworzony pomyślnie',
'chapter_update' => 'zaktualizowano rozdział',
'chapter_update' => 'zaktualizował rozdział',
'chapter_update_notification' => 'Rozdział zaktualizowany pomyślnie',
'chapter_delete' => 'usunięto rozdział',
'chapter_delete' => 'usunął rozdział',
'chapter_delete_notification' => 'Rozdział usunięty pomyślnie',
'chapter_move' => 'przeniesiono rozdział',
'chapter_move' => 'przeniósł rozdział',
'chapter_move_notification' => 'Rozdział przeniesiony pomyślnie',
// Books
'book_create' => 'utworzono książkę',
'book_create' => 'utworz książkę',
'book_create_notification' => 'Książka utworzona pomyślnie',
'book_create_from_chapter' => 'przekonwertowano rozdział na książkę',
'book_create_from_chapter' => 'skonwertował rozdział na książkę',
'book_create_from_chapter_notification' => 'Rozdział został pomyślnie skonwertowany do książki',
'book_update' => 'zaktualizowano książkę',
'book_update' => 'zaktualizował książkę',
'book_update_notification' => 'Książka zaktualizowana pomyślnie',
'book_delete' => 'usunięto książkę',
'book_delete' => 'usunął książkę',
'book_delete_notification' => 'Książka usunięta pomyślnie',
'book_sort' => 'posortowano książkę',
'book_sort' => 'posortował książkę',
'book_sort_notification' => 'Książka posortowana pomyślnie',
// Bookshelves
'bookshelf_create' => 'utworzyono półkę',
'bookshelf_create' => 'utworzył półkę',
'bookshelf_create_notification' => 'Półka utworzona pomyślnie',
'bookshelf_create_from_book' => 'przekonwertowano książkę na półkę',
'bookshelf_create_from_book' => 'skonwertował książkę na półkę',
'bookshelf_create_from_book_notification' => 'Książka została pomyślnie skonwertowana na półkę',
'bookshelf_update' => 'zaktualizowano półkę',
'bookshelf_update' => 'zaktualizował półkę',
'bookshelf_update_notification' => 'Półka zaktualizowana pomyślnie',
'bookshelf_delete' => 'usunięto półkę',
'bookshelf_delete' => 'usunął półkę',
'bookshelf_delete_notification' => 'Półka usunięta pomyślnie',
// Revisions
'revision_restore' => 'przywrócono wersję',
'revision_delete' => 'usunięto wersję',
'revision_restore' => 'przywróc wersję',
'revision_delete' => 'usunął wersję',
'revision_delete_notification' => 'Wersja usunięta pomyślnie',
// Favourites
@@ -72,54 +72,54 @@ return [
'mfa_remove_method_notification' => 'Metoda wieloskładnikowa pomyślnie usunięta',
// Settings
'settings_update' => 'zaktualizowano ustawienia',
'settings_update' => 'zaktualizował ustawienia',
'settings_update_notification' => 'Ustawienia zaktualizowane pomyślnie',
'maintenance_action_run' => 'uruchomiono akcję konserwacji',
'maintenance_action_run' => 'uruchomił akcję konserwacji',
// Webhooks
'webhook_create' => 'utworzono webhook',
'webhook_create' => 'utworz webhook',
'webhook_create_notification' => 'Webhook utworzony pomyślnie',
'webhook_update' => 'zaktualizowano webhook',
'webhook_update' => 'zaktualizował webhook',
'webhook_update_notification' => 'Webhook zaktualizowany pomyślnie',
'webhook_delete' => 'usunięto webhook',
'webhook_delete' => 'usunął webhook',
'webhook_delete_notification' => 'Webhook usunięty pomyślnie',
// Imports
'import_create' => 'utworzono import',
'import_create_notification' => 'Import zakończony sukcesem',
'import_run' => 'zaktualizowano import',
'import_run_notification' => 'Zawartość pomyślnie zaimportowana',
'import_delete' => 'usunięto import',
'import_delete_notification' => 'Import usunięty',
'import_create_notification' => 'Import successfully uploaded',
'import_run' => 'updated import',
'import_run_notification' => 'Content successfully imported',
'import_delete' => 'deleted import',
'import_delete_notification' => 'Import successfully deleted',
// Users
'user_create' => 'utworzono użytkownika',
'user_create' => 'utworz użytkownika',
'user_create_notification' => 'Użytkownik utworzony pomyślnie',
'user_update' => 'zaktualizowano użytkownika',
'user_update' => 'zaktualizował użytkownika',
'user_update_notification' => 'Użytkownik zaktualizowany pomyślnie',
'user_delete' => 'usunięto użytkownika',
'user_delete' => 'usunął użytkownika',
'user_delete_notification' => 'Użytkownik pomyślnie usunięty',
// API Tokens
'api_token_create' => 'utworzono token API',
'api_token_create' => 'utworz token API',
'api_token_create_notification' => 'Token API został poprawnie utworzony',
'api_token_update' => 'zaktualizowano token API',
'api_token_update' => 'zaktualizował token API',
'api_token_update_notification' => 'Token API został pomyślnie zaktualizowany',
'api_token_delete' => 'usunięto token API',
'api_token_delete' => 'usunął token API',
'api_token_delete_notification' => 'Token API został pomyślnie usunięty',
// Roles
'role_create' => 'utworzono rolę',
'role_create' => 'utworz rolę',
'role_create_notification' => 'Rola utworzona pomyślnie',
'role_update' => 'zaktualizowano rolę',
'role_update' => 'zaktualizował rolę',
'role_update_notification' => 'Rola zaktualizowana pomyślnie',
'role_delete' => 'usunięto rolę',
'role_delete' => 'usunął rolę',
'role_delete_notification' => 'Rola usunięta pomyślnie',
// Recycle Bin
'recycle_bin_empty' => 'opróżniono kosz',
'recycle_bin_restore' => 'przywrócono z kosza',
'recycle_bin_destroy' => 'usunięto z kosza',
'recycle_bin_empty' => 'opróżnił kosz',
'recycle_bin_restore' => 'przywróc z kosza',
'recycle_bin_destroy' => 'usunął z kosza',
// Comments
'commented_on' => 'skomentował',
@@ -128,12 +128,12 @@ return [
'comment_delete' => 'usunął komentarz',
// Sort Rules
'sort_rule_create' => 'utworzono regułę sortowania',
'sort_rule_create_notification' => 'Reguła sortowania została pomyślnie stworzona',
'sort_rule_update' => 'zaktualizowano regułę sortowania',
'sort_rule_update_notification' => 'Reguła sortowania została pomyślnie zaktualizowana',
'sort_rule_delete' => 'usunięto regułę sortowania',
'sort_rule_delete_notification' => 'Reguła sortowania została pomyślnie usunięta',
'sort_rule_create' => 'created sort rule',
'sort_rule_create_notification' => 'Sort rule successfully created',
'sort_rule_update' => 'updated sort rule',
'sort_rule_update_notification' => 'Sort rule successfully updated',
'sort_rule_delete' => 'deleted sort rule',
'sort_rule_delete_notification' => 'Sort rule successfully deleted',
// Other
'permissions_update' => 'zaktualizował uprawnienia',

View File

@@ -30,8 +30,8 @@ return [
'create' => 'Utwórz',
'update' => 'Zaktualizuj',
'edit' => 'Edytuj',
'archive' => 'Archiwizuj',
'unarchive' => 'Wypakuj z archiwum',
'archive' => 'Archive',
'unarchive' => 'Un-Archive',
'sort' => 'Sortuj',
'move' => 'Przenieś',
'copy' => 'Skopiuj',

View File

@@ -13,7 +13,7 @@ return [
'cancel' => 'Anuluj',
'save' => 'Zapisz',
'close' => 'Zamknij',
'apply' => 'Zatwierdź',
'apply' => 'Apply',
'undo' => 'Cofnij',
'redo' => 'Ponów',
'left' => 'Lewa strona',
@@ -48,7 +48,7 @@ return [
'superscript' => 'Indeks górny',
'subscript' => 'Indeks dolny',
'text_color' => 'Kolor tekstu',
'highlight_color' => 'Kolor podkreślenia',
'highlight_color' => 'Highlight color',
'custom_color' => 'Kolor niestandardowy',
'remove_color' => 'Usuń kolor',
'background_color' => 'Kolor tła',
@@ -149,7 +149,7 @@ return [
'url' => 'Adres URL',
'text_to_display' => 'Tekst do wyświetlenia',
'title' => 'Tytuł',
'browse_links' => 'Przeglądaj linki',
'browse_links' => 'Browse links',
'open_link' => 'Otwórz link',
'open_link_in' => 'Otwórz link w...',
'open_link_current' => 'Bieżące okno',
@@ -166,8 +166,8 @@ return [
'about' => 'O edytorze',
'about_title' => 'O edytorze WYSIWYG',
'editor_license' => 'Licencja edytora i prawa autorskie',
'editor_lexical_license' => 'Ten edytor został zbudowany na podstawie :lexicalLink, który jest dystrybuowany na licencji MIT.',
'editor_lexical_license_link' => 'Pełne szczegóły licencji znajdziesz tutaj.',
'editor_lexical_license' => 'This editor is built as a fork of :lexicalLink which is distributed under the MIT license.',
'editor_lexical_license_link' => 'Full license details can be found here.',
'editor_tiny_license' => 'Ten edytor jest zbudowany przy użyciu :tinyLink, który jest udostępniany na licencji MIT.',
'editor_tiny_license_link' => 'Szczegóły dotyczące praw autorskich i licencji TinyMCE można znaleźć tutaj.',
'save_continue' => 'Zapisz stronę i kontynuuj',

Some files were not shown because too many files have changed in this diff Show More