diff --git a/.env.example.complete b/.env.example.complete index e29087fab..0c7f8f6a5 100644 --- a/.env.example.complete +++ b/.env.example.complete @@ -274,7 +274,7 @@ AVATAR_URL= # Enable diagrams.net integration # Can simply be true/false to enable/disable the integration. # Alternatively, It can be URL to the diagrams.net instance you want to use. -# For URLs, The following URL parameters should be included: embed=1&proto=json&spin=1 +# For URLs, The following URL parameters should be included: embed=1&proto=json&spin=1&configure=1 DRAWIO=true # Default item listing view diff --git a/.github/translators.txt b/.github/translators.txt index d9e886fad..4dc671454 100644 --- a/.github/translators.txt +++ b/.github/translators.txt @@ -165,7 +165,7 @@ Francesco Franchina (ffranchina) :: Italian Aimrane Kds (aimrane.kds) :: Arabic whenwesober :: Indonesian Rem (remkovdhoef) :: Dutch -syn7ax69 :: Bulgarian; Turkish +syn7ax69 :: Bulgarian; Turkish; German Blaade :: French Behzad HosseinPoor (behzad.hp) :: Persian Ole Aldric (Swoy) :: Norwegian Bokmal @@ -238,3 +238,7 @@ pedromcsousa :: Portuguese Nir Louk (looknear) :: Hebrew Alex (qianmengnet) :: Chinese Simplified stothew :: German +sgenc :: Turkish +Shukrullo (vodiylik) :: Uzbek +William W. (Nevnt) :: Chinese Traditional +eamaro :: Portuguese diff --git a/app/Config/app.php b/app/Config/app.php index 10359639a..968addc69 100644 --- a/app/Config/app.php +++ b/app/Config/app.php @@ -71,7 +71,7 @@ return [ 'locale' => env('APP_LANG', 'en'), // Locales available - 'locales' => ['en', 'ar', 'bg', 'bs', 'ca', 'cs', 'da', 'de', 'de_informal', 'es', 'es_AR', 'et', 'eu', 'fa', 'fr', 'he', 'hr', 'hu', 'id', 'it', 'ja', 'ko', 'lt', 'lv', 'nl', 'nb', 'pt', 'pt_BR', 'sk', 'sl', 'sv', 'pl', 'ru', 'th', 'tr', 'uk', 'vi', 'zh_CN', 'zh_TW'], + 'locales' => ['en', 'ar', 'bg', 'bs', 'ca', 'cs', 'da', 'de', 'de_informal', 'es', 'es_AR', 'et', 'eu', 'fa', 'fr', 'he', 'hr', 'hu', 'id', 'it', 'ja', 'ko', 'lt', 'lv', 'nl', 'nb', 'pt', 'pt_BR', 'sk', 'sl', 'sv', 'pl', 'ru', 'th', 'tr', 'uk', 'uz', 'vi', 'zh_CN', 'zh_TW'], // Application Fallback Locale 'fallback_locale' => 'en', diff --git a/app/Entities/Models/Deletion.php b/app/Entities/Models/Deletion.php index 181c9c580..25f0ea6db 100644 --- a/app/Entities/Models/Deletion.php +++ b/app/Entities/Models/Deletion.php @@ -10,10 +10,16 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\MorphTo; /** + * @property int $id + * @property int $deleted_by + * @property string $deletable_type + * @property int $deletable_id * @property Deletable $deletable */ class Deletion extends Model implements Loggable { + protected $hidden = []; + /** * Get the related deletable record. */ diff --git a/app/Entities/Models/Page.php b/app/Entities/Models/Page.php index c8217af57..ed69bcf8b 100644 --- a/app/Entities/Models/Page.php +++ b/app/Entities/Models/Page.php @@ -22,6 +22,7 @@ use Illuminate\Database\Eloquent\Relations\HasOne; * @property bool $template * @property bool $draft * @property int $revision_count + * @property string $editor * @property Chapter $chapter * @property Collection $attachments * @property Collection $revisions diff --git a/app/Entities/Models/PageRevision.php b/app/Entities/Models/PageRevision.php index 800e5e7f2..be2ac33a0 100644 --- a/app/Entities/Models/PageRevision.php +++ b/app/Entities/Models/PageRevision.php @@ -12,6 +12,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; * * @property mixed $id * @property int $page_id + * @property string $name * @property string $slug * @property string $book_slug * @property int $created_by @@ -21,13 +22,14 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; * @property string $summary * @property string $markdown * @property string $html + * @property string $text * @property int $revision_number * @property Page $page * @property-read ?User $createdBy */ class PageRevision extends Model { - protected $fillable = ['name', 'html', 'text', 'markdown', 'summary']; + protected $fillable = ['name', 'text', 'summary']; protected $hidden = ['html', 'markdown', 'restricted', 'text']; /** diff --git a/app/Entities/Repos/BaseRepo.php b/app/Entities/Repos/BaseRepo.php index 6b29dad7b..9e1b41672 100644 --- a/app/Entities/Repos/BaseRepo.php +++ b/app/Entities/Repos/BaseRepo.php @@ -11,8 +11,8 @@ use Illuminate\Http\UploadedFile; class BaseRepo { - protected $tagRepo; - protected $imageRepo; + protected TagRepo $tagRepo; + protected ImageRepo $imageRepo; public function __construct(TagRepo $tagRepo, ImageRepo $imageRepo) { @@ -58,6 +58,7 @@ class BaseRepo if (isset($input['tags'])) { $this->tagRepo->saveTagsToEntity($entity, $input['tags']); + $entity->touch(); } $entity->rebuildPermissions(); diff --git a/app/Entities/Repos/DeletionRepo.php b/app/Entities/Repos/DeletionRepo.php new file mode 100644 index 000000000..5d53013dc --- /dev/null +++ b/app/Entities/Repos/DeletionRepo.php @@ -0,0 +1,36 @@ +trashCan = $trashCan; + } + + public function restore(int $id): int + { + /** @var Deletion $deletion */ + $deletion = Deletion::query()->findOrFail($id); + Activity::add(ActivityType::RECYCLE_BIN_RESTORE, $deletion); + + return $this->trashCan->restoreFromDeletion($deletion); + } + + public function destroy(int $id): int + { + /** @var Deletion $deletion */ + $deletion = Deletion::query()->findOrFail($id); + Activity::add(ActivityType::RECYCLE_BIN_DESTROY, $deletion); + + return $this->trashCan->destroyFromDeletion($deletion); + } +} diff --git a/app/Entities/Repos/PageRepo.php b/app/Entities/Repos/PageRepo.php index 828c4572f..c106d2fd3 100644 --- a/app/Entities/Repos/PageRepo.php +++ b/app/Entities/Repos/PageRepo.php @@ -10,6 +10,7 @@ use BookStack\Entities\Models\Page; use BookStack\Entities\Models\PageRevision; use BookStack\Entities\Tools\BookContents; use BookStack\Entities\Tools\PageContent; +use BookStack\Entities\Tools\PageEditorData; use BookStack\Entities\Tools\TrashCan; use BookStack\Exceptions\MoveOperationException; use BookStack\Exceptions\NotFoundException; @@ -217,11 +218,25 @@ class PageRepo } $pageContent = new PageContent($page); - if (!empty($input['markdown'] ?? '')) { + $currentEditor = $page->editor ?: PageEditorData::getSystemDefaultEditor(); + $newEditor = $currentEditor; + + $haveInput = isset($input['markdown']) || isset($input['html']); + $inputEmpty = empty($input['markdown']) && empty($input['html']); + + if ($haveInput && $inputEmpty) { + $pageContent->setNewHTML(''); + } elseif (!empty($input['markdown']) && is_string($input['markdown'])) { + $newEditor = 'markdown'; $pageContent->setNewMarkdown($input['markdown']); } elseif (isset($input['html'])) { + $newEditor = 'wysiwyg'; $pageContent->setNewHTML($input['html']); } + + if ($newEditor !== $currentEditor && userCan('editor-change')) { + $page->editor = $newEditor; + } } /** @@ -229,8 +244,12 @@ class PageRepo */ protected function savePageRevision(Page $page, string $summary = null): PageRevision { - $revision = new PageRevision($page->getAttributes()); + $revision = new PageRevision(); + $revision->name = $page->name; + $revision->html = $page->html; + $revision->markdown = $page->markdown; + $revision->text = $page->text; $revision->page_id = $page->id; $revision->slug = $page->slug; $revision->book_slug = $page->book->slug; @@ -260,10 +279,15 @@ class PageRepo return $page; } - // Otherwise save the data to a revision + // Otherwise, save the data to a revision $draft = $this->getPageRevisionToUpdate($page); $draft->fill($input); - if (setting('app-editor') !== 'markdown') { + + if (!empty($input['markdown'])) { + $draft->markdown = $input['markdown']; + $draft->html = ''; + } else { + $draft->html = $input['html']; $draft->markdown = ''; } diff --git a/app/Entities/Tools/Markdown/CustomDivConverter.php b/app/Entities/Tools/Markdown/CustomDivConverter.php new file mode 100644 index 000000000..486062390 --- /dev/null +++ b/app/Entities/Tools/Markdown/CustomDivConverter.php @@ -0,0 +1,20 @@ +getAttribute('drawio-diagram'); + if ($drawIoDiagram) { + return "
{$element->getValue()}
\n\n"; + } + + return parent::convert($element); + } +} diff --git a/app/Entities/Tools/Markdown/CustomImageConverter.php b/app/Entities/Tools/Markdown/CustomImageConverter.php new file mode 100644 index 000000000..6642b292a --- /dev/null +++ b/app/Entities/Tools/Markdown/CustomImageConverter.php @@ -0,0 +1,25 @@ +getParent(); + + // Remain as HTML if within diagram block. + $withinDrawing = $parent && !empty($parent->getAttribute('drawio-diagram')); + if ($withinDrawing) { + $src = e($element->getAttribute('src')); + $alt = e($element->getAttribute('alt')); + + return "\"{$alt}\"/"; + } + + return parent::convert($element); + } +} diff --git a/app/Entities/Tools/Markdown/CustomParagraphConverter.php b/app/Entities/Tools/Markdown/CustomParagraphConverter.php index bd493aa03..db36042cd 100644 --- a/app/Entities/Tools/Markdown/CustomParagraphConverter.php +++ b/app/Entities/Tools/Markdown/CustomParagraphConverter.php @@ -9,7 +9,7 @@ class CustomParagraphConverter extends ParagraphConverter { public function convert(ElementInterface $element): string { - $class = $element->getAttribute('class'); + $class = e($element->getAttribute('class')); if (strpos($class, 'callout') !== false) { return "<{$element->getTagName()} class=\"{$class}\">{$element->getValue()}getTagName()}>\n\n"; } diff --git a/app/Entities/Tools/Markdown/HtmlToMarkdown.php b/app/Entities/Tools/Markdown/HtmlToMarkdown.php index 51366705c..473435c7f 100644 --- a/app/Entities/Tools/Markdown/HtmlToMarkdown.php +++ b/app/Entities/Tools/Markdown/HtmlToMarkdown.php @@ -5,12 +5,10 @@ namespace BookStack\Entities\Tools\Markdown; use League\HTMLToMarkdown\Converter\BlockquoteConverter; use League\HTMLToMarkdown\Converter\CodeConverter; use League\HTMLToMarkdown\Converter\CommentConverter; -use League\HTMLToMarkdown\Converter\DivConverter; use League\HTMLToMarkdown\Converter\EmphasisConverter; use League\HTMLToMarkdown\Converter\HardBreakConverter; use League\HTMLToMarkdown\Converter\HeaderConverter; use League\HTMLToMarkdown\Converter\HorizontalRuleConverter; -use League\HTMLToMarkdown\Converter\ImageConverter; use League\HTMLToMarkdown\Converter\LinkConverter; use League\HTMLToMarkdown\Converter\ListBlockConverter; use League\HTMLToMarkdown\Converter\ListItemConverter; @@ -21,7 +19,7 @@ use League\HTMLToMarkdown\HtmlConverter; class HtmlToMarkdown { - protected $html; + protected string $html; public function __construct(string $html) { @@ -75,12 +73,12 @@ class HtmlToMarkdown $environment->addConverter(new BlockquoteConverter()); $environment->addConverter(new CodeConverter()); $environment->addConverter(new CommentConverter()); - $environment->addConverter(new DivConverter()); + $environment->addConverter(new CustomDivConverter()); $environment->addConverter(new EmphasisConverter()); $environment->addConverter(new HardBreakConverter()); $environment->addConverter(new HeaderConverter()); $environment->addConverter(new HorizontalRuleConverter()); - $environment->addConverter(new ImageConverter()); + $environment->addConverter(new CustomImageConverter()); $environment->addConverter(new LinkConverter()); $environment->addConverter(new ListBlockConverter()); $environment->addConverter(new ListItemConverter()); @@ -88,6 +86,7 @@ class HtmlToMarkdown $environment->addConverter(new PreformattedConverter()); $environment->addConverter(new TextConverter()); $environment->addConverter(new CheckboxConverter()); + $environment->addConverter(new SpacedTagFallbackConverter()); return $environment; } diff --git a/app/Entities/Tools/Markdown/MarkdownToHtml.php b/app/Entities/Tools/Markdown/MarkdownToHtml.php new file mode 100644 index 000000000..f3cf7ab2f --- /dev/null +++ b/app/Entities/Tools/Markdown/MarkdownToHtml.php @@ -0,0 +1,35 @@ +markdown = $markdown; + } + + public function convert(): string + { + $environment = Environment::createCommonMarkEnvironment(); + $environment->addExtension(new TableExtension()); + $environment->addExtension(new TaskListExtension()); + $environment->addExtension(new CustomStrikeThroughExtension()); + $environment = Theme::dispatch(ThemeEvents::COMMONMARK_ENVIRONMENT_CONFIGURE, $environment) ?? $environment; + $converter = new CommonMarkConverter([], $environment); + + $environment->addBlockRenderer(ListItem::class, new CustomListItemRenderer(), 10); + + return $converter->convertToHtml($this->markdown); + } +} diff --git a/app/Entities/Tools/Markdown/SpacedTagFallbackConverter.php b/app/Entities/Tools/Markdown/SpacedTagFallbackConverter.php new file mode 100644 index 000000000..960bc4ee6 --- /dev/null +++ b/app/Entities/Tools/Markdown/SpacedTagFallbackConverter.php @@ -0,0 +1,23 @@ +getChildrenAsString()) . "\n\n"; + } + + public function getSupportedTags(): array + { + return ['summary', 'iframe']; + } +} diff --git a/app/Entities/Tools/PageContent.php b/app/Entities/Tools/PageContent.php index b1c750adb..ea6a185f1 100644 --- a/app/Entities/Tools/PageContent.php +++ b/app/Entities/Tools/PageContent.php @@ -3,11 +3,8 @@ namespace BookStack\Entities\Tools; use BookStack\Entities\Models\Page; -use BookStack\Entities\Tools\Markdown\CustomListItemRenderer; -use BookStack\Entities\Tools\Markdown\CustomStrikeThroughExtension; +use BookStack\Entities\Tools\Markdown\MarkdownToHtml; use BookStack\Exceptions\ImageUploadException; -use BookStack\Facades\Theme; -use BookStack\Theming\ThemeEvents; use BookStack\Uploads\ImageRepo; use BookStack\Uploads\ImageService; use BookStack\Util\HtmlContentFilter; @@ -17,15 +14,10 @@ use DOMNode; use DOMNodeList; use DOMXPath; use Illuminate\Support\Str; -use League\CommonMark\Block\Element\ListItem; -use League\CommonMark\CommonMarkConverter; -use League\CommonMark\Environment; -use League\CommonMark\Extension\Table\TableExtension; -use League\CommonMark\Extension\TaskList\TaskListExtension; class PageContent { - protected $page; + protected Page $page; /** * PageContent constructor. @@ -53,28 +45,11 @@ class PageContent { $markdown = $this->extractBase64ImagesFromMarkdown($markdown); $this->page->markdown = $markdown; - $html = $this->markdownToHtml($markdown); + $html = (new MarkdownToHtml($markdown))->convert(); $this->page->html = $this->formatHtml($html); $this->page->text = $this->toPlainText(); } - /** - * Convert the given Markdown content to a HTML string. - */ - protected function markdownToHtml(string $markdown): string - { - $environment = Environment::createCommonMarkEnvironment(); - $environment->addExtension(new TableExtension()); - $environment->addExtension(new TaskListExtension()); - $environment->addExtension(new CustomStrikeThroughExtension()); - $environment = Theme::dispatch(ThemeEvents::COMMONMARK_ENVIRONMENT_CONFIGURE, $environment) ?? $environment; - $converter = new CommonMarkConverter([], $environment); - - $environment->addBlockRenderer(ListItem::class, new CustomListItemRenderer(), 10); - - return $converter->convertToHtml($markdown); - } - /** * Convert all base64 image data to saved images. */ diff --git a/app/Entities/Tools/PageEditActivity.php b/app/Entities/Tools/PageEditActivity.php index 9981a6ed7..2672de941 100644 --- a/app/Entities/Tools/PageEditActivity.php +++ b/app/Entities/Tools/PageEditActivity.php @@ -9,7 +9,7 @@ use Illuminate\Database\Eloquent\Builder; class PageEditActivity { - protected $page; + protected Page $page; /** * PageEditActivity constructor. diff --git a/app/Entities/Tools/PageEditorData.php b/app/Entities/Tools/PageEditorData.php new file mode 100644 index 000000000..2342081bb --- /dev/null +++ b/app/Entities/Tools/PageEditorData.php @@ -0,0 +1,115 @@ +page = $page; + $this->pageRepo = $pageRepo; + $this->requestedEditor = $requestedEditor; + + $this->viewData = $this->build(); + } + + public function getViewData(): array + { + return $this->viewData; + } + + public function getWarnings(): array + { + return $this->warnings; + } + + protected function build(): array + { + $page = clone $this->page; + $isDraft = boolval($this->page->draft); + $templates = $this->pageRepo->getTemplates(10); + $draftsEnabled = auth()->check(); + + $isDraftRevision = false; + $this->warnings = []; + $editActivity = new PageEditActivity($page); + + if ($editActivity->hasActiveEditing()) { + $this->warnings[] = $editActivity->activeEditingMessage(); + } + + // Check for a current draft version for this user + $userDraft = $this->pageRepo->getUserDraft($page); + if ($userDraft !== null) { + $page->forceFill($userDraft->only(['name', 'html', 'markdown'])); + $isDraftRevision = true; + $this->warnings[] = $editActivity->getEditingActiveDraftMessage($userDraft); + } + + $editorType = $this->getEditorType($page); + $this->updateContentForEditor($page, $editorType); + + return [ + 'page' => $page, + 'book' => $page->book, + 'isDraft' => $isDraft, + 'isDraftRevision' => $isDraftRevision, + 'draftsEnabled' => $draftsEnabled, + 'templates' => $templates, + 'editor' => $editorType, + ]; + } + + protected function updateContentForEditor(Page $page, string $editorType): void + { + $isHtml = !empty($page->html) && empty($page->markdown); + + // HTML to markdown-clean conversion + if ($editorType === 'markdown' && $isHtml && $this->requestedEditor === 'markdown-clean') { + $page->markdown = (new HtmlToMarkdown($page->html))->convert(); + } + + // Markdown to HTML conversion if we don't have HTML + if ($editorType === 'wysiwyg' && !$isHtml) { + $page->html = (new MarkdownToHtml($page->markdown))->convert(); + } + } + + /** + * Get the type of editor to show for editing the given page. + * Defaults based upon the current content of the page otherwise will fall back + * to system default but will take a requested type (if provided) if permissions allow. + */ + protected function getEditorType(Page $page): string + { + $editorType = $page->editor ?: self::getSystemDefaultEditor(); + + // Use requested editor if valid and if we have permission + $requestedType = explode('-', $this->requestedEditor)[0]; + if (($requestedType === 'markdown' || $requestedType === 'wysiwyg') && userCan('editor-change')) { + $editorType = $requestedType; + } + + return $editorType; + } + + /** + * Get the configured system default editor. + */ + public static function getSystemDefaultEditor(): string + { + return setting('app-editor') === 'markdown' ? 'markdown' : 'wysiwyg'; + } +} diff --git a/app/Http/Controllers/Api/AttachmentApiController.php b/app/Http/Controllers/Api/AttachmentApiController.php index fc5008e3c..7059ca282 100644 --- a/app/Http/Controllers/Api/AttachmentApiController.php +++ b/app/Http/Controllers/Api/AttachmentApiController.php @@ -87,14 +87,33 @@ class AttachmentApiController extends ApiController 'markdown' => $attachment->markdownLink(), ]); - if (!$attachment->external) { - $attachmentContents = $this->attachmentService->getAttachmentFromStorage($attachment); - $attachment->setAttribute('content', base64_encode($attachmentContents)); - } else { + // Simply return a JSON response of the attachment for link-based attachments + if ($attachment->external) { $attachment->setAttribute('content', $attachment->path); + + return response()->json($attachment); } - return response()->json($attachment); + // Build and split our core JSON, at point of content. + $splitter = 'CONTENT_SPLIT_LOCATION_' . time() . '_' . rand(1, 40000); + $attachment->setAttribute('content', $splitter); + $json = $attachment->toJson(); + $jsonParts = explode($splitter, $json); + // Get a stream for the file data from storage + $stream = $this->attachmentService->streamAttachmentFromStorage($attachment); + + return response()->stream(function () use ($jsonParts, $stream) { + // Output the pre-content JSON data + echo $jsonParts[0]; + + // Stream out our attachment data as base64 content + stream_filter_append($stream, 'convert.base64-encode', STREAM_FILTER_READ); + fpassthru($stream); + fclose($stream); + + // Output our post-content JSON data + echo $jsonParts[1]; + }, 200, ['Content-Type' => 'application/json']); } /** diff --git a/app/Http/Controllers/Api/BookshelfApiController.php b/app/Http/Controllers/Api/BookshelfApiController.php index bd4f23a10..63275a72a 100644 --- a/app/Http/Controllers/Api/BookshelfApiController.php +++ b/app/Http/Controllers/Api/BookshelfApiController.php @@ -11,21 +11,20 @@ use Illuminate\Validation\ValidationException; class BookshelfApiController extends ApiController { - /** - * @var BookshelfRepo - */ - protected $bookshelfRepo; + protected BookshelfRepo $bookshelfRepo; protected $rules = [ 'create' => [ 'name' => ['required', 'string', 'max:255'], 'description' => ['string', 'max:1000'], 'books' => ['array'], + 'tags' => ['array'], ], 'update' => [ 'name' => ['string', 'min:1', 'max:255'], 'description' => ['string', 'max:1000'], 'books' => ['array'], + 'tags' => ['array'], ], ]; diff --git a/app/Http/Controllers/Api/PageApiController.php b/app/Http/Controllers/Api/PageApiController.php index 6f3a71e02..9749985a5 100644 --- a/app/Http/Controllers/Api/PageApiController.php +++ b/app/Http/Controllers/Api/PageApiController.php @@ -12,7 +12,7 @@ use Illuminate\Http\Request; class PageApiController extends ApiController { - protected $pageRepo; + protected PageRepo $pageRepo; protected $rules = [ 'create' => [ @@ -24,8 +24,8 @@ class PageApiController extends ApiController 'tags' => ['array'], ], 'update' => [ - 'book_id' => ['required', 'integer'], - 'chapter_id' => ['required', 'integer'], + 'book_id' => ['integer'], + 'chapter_id' => ['integer'], 'name' => ['string', 'min:1', 'max:255'], 'html' => ['string'], 'markdown' => ['string'], @@ -103,6 +103,8 @@ class PageApiController extends ApiController */ public function update(Request $request, string $id) { + $requestData = $this->validate($request, $this->rules['update']); + $page = $this->pageRepo->getById($id, []); $this->checkOwnablePermission('page-update', $page); @@ -127,7 +129,7 @@ class PageApiController extends ApiController } } - $updatedPage = $this->pageRepo->update($page, $request->all()); + $updatedPage = $this->pageRepo->update($page, $requestData); return response()->json($updatedPage->forJsonDisplay()); } diff --git a/app/Http/Controllers/Api/RecycleBinApiController.php b/app/Http/Controllers/Api/RecycleBinApiController.php new file mode 100644 index 000000000..f327bae93 --- /dev/null +++ b/app/Http/Controllers/Api/RecycleBinApiController.php @@ -0,0 +1,90 @@ +middleware(function ($request, $next) { + $this->checkPermission('settings-manage'); + $this->checkPermission('restrictions-manage-all'); + + return $next($request); + }); + } + + /** + * Get a top-level listing of the items in the recycle bin. + * The "deletable" property will reflect the main item deleted. + * For books and chapters, counts of child pages/chapters will + * be loaded within this "deletable" data. + * For chapters & pages, the parent item will be loaded within this "deletable" data. + * Requires permission to manage both system settings and permissions. + */ + public function list() + { + return $this->apiListingResponse(Deletion::query()->with('deletable'), [ + 'id', + 'deleted_by', + 'created_at', + 'updated_at', + 'deletable_type', + 'deletable_id', + ], [Closure::fromCallable([$this, 'listFormatter'])]); + } + + /** + * Restore a single deletion from the recycle bin. + * Requires permission to manage both system settings and permissions. + */ + public function restore(DeletionRepo $deletionRepo, string $deletionId) + { + $restoreCount = $deletionRepo->restore(intval($deletionId)); + + return response()->json(['restore_count' => $restoreCount]); + } + + /** + * Remove a single deletion from the recycle bin. + * Use this endpoint carefully as it will entirely remove the underlying deleted items from the system. + * Requires permission to manage both system settings and permissions. + */ + public function destroy(DeletionRepo $deletionRepo, string $deletionId) + { + $deleteCount = $deletionRepo->destroy(intval($deletionId)); + + return response()->json(['delete_count' => $deleteCount]); + } + + /** + * Load some related details for the deletion listing. + */ + protected function listFormatter(Deletion $deletion) + { + $deletable = $deletion->deletable; + $withTrashedQuery = fn (Builder $query) => $query->withTrashed(); + + if ($deletable instanceof BookChild) { + $parent = $deletable->getParent(); + $parent->setAttribute('type', $parent->getType()); + $deletable->setRelation('parent', $parent); + } + + if ($deletable instanceof Book || $deletable instanceof Chapter) { + $countsToLoad = ['pages' => $withTrashedQuery]; + if ($deletable instanceof Book) { + $countsToLoad['chapters'] = $withTrashedQuery; + } + $deletable->loadCount($countsToLoad); + } + } +} diff --git a/app/Http/Controllers/AttachmentController.php b/app/Http/Controllers/AttachmentController.php index 084f6f96a..0a092b63a 100644 --- a/app/Http/Controllers/AttachmentController.php +++ b/app/Http/Controllers/AttachmentController.php @@ -15,8 +15,8 @@ use Illuminate\Validation\ValidationException; class AttachmentController extends Controller { - protected $attachmentService; - protected $pageRepo; + protected AttachmentService $attachmentService; + protected PageRepo $pageRepo; /** * AttachmentController constructor. @@ -230,13 +230,13 @@ class AttachmentController extends Controller } $fileName = $attachment->getFileName(); - $attachmentContents = $this->attachmentService->getAttachmentFromStorage($attachment); + $attachmentStream = $this->attachmentService->streamAttachmentFromStorage($attachment); if ($request->get('open') === 'true') { - return $this->inlineDownloadResponse($attachmentContents, $fileName); + return $this->streamedInlineDownloadResponse($attachmentStream, $fileName); } - return $this->downloadResponse($attachmentContents, $fileName); + return $this->streamedDownloadResponse($attachmentStream, $fileName); } /** diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index d616974c6..c00ac938b 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -12,6 +12,7 @@ use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Http\JsonResponse; use Illuminate\Http\Response; use Illuminate\Routing\Controller as BaseController; +use Symfony\Component\HttpFoundation\StreamedResponse; abstract class Controller extends BaseController { @@ -115,7 +116,28 @@ abstract class Controller extends BaseController { return response()->make($content, 200, [ 'Content-Type' => 'application/octet-stream', - 'Content-Disposition' => 'attachment; filename="' . $fileName . '"', + 'Content-Disposition' => 'attachment; filename="' . str_replace('"', '', $fileName) . '"', + 'X-Content-Type-Options' => 'nosniff', + ]); + } + + /** + * Create a response that forces a download, from a given stream of content. + */ + protected function streamedDownloadResponse($stream, string $fileName): StreamedResponse + { + return response()->stream(function () use ($stream) { + // End & flush the output buffer otherwise we still seem to use memory. + // Ignore in testing since output buffers are used to gather a response. + if (!app()->runningUnitTests()) { + ob_end_clean(); + } + + fpassthru($stream); + fclose($stream); + }, 200, [ + 'Content-Type' => 'application/octet-stream', + 'Content-Disposition' => 'attachment; filename="' . str_replace('"', '', $fileName) . '"', 'X-Content-Type-Options' => 'nosniff', ]); } @@ -130,7 +152,28 @@ abstract class Controller extends BaseController return response()->make($content, 200, [ 'Content-Type' => $mime, - 'Content-Disposition' => 'inline; filename="' . $fileName . '"', + 'Content-Disposition' => 'inline; filename="' . str_replace('"', '', $fileName) . '"', + 'X-Content-Type-Options' => 'nosniff', + ]); + } + + /** + * Create a file download response that provides the file with a content-type + * correct for the file, in a way so the browser can show the content in browser, + * for a given content stream. + */ + protected function streamedInlineDownloadResponse($stream, string $fileName): StreamedResponse + { + $sniffContent = fread($stream, 1000); + $mime = (new WebSafeMimeSniffer())->sniff($sniffContent); + + return response()->stream(function () use ($sniffContent, $stream) { + echo $sniffContent; + fpassthru($stream); + fclose($stream); + }, 200, [ + 'Content-Type' => $mime, + 'Content-Disposition' => 'inline; filename="' . str_replace('"', '', $fileName) . '"', 'X-Content-Type-Options' => 'nosniff', ]); } diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php index eecb6a6e7..268dce057 100644 --- a/app/Http/Controllers/PageController.php +++ b/app/Http/Controllers/PageController.php @@ -10,6 +10,7 @@ use BookStack\Entities\Tools\Cloner; use BookStack\Entities\Tools\NextPreviousContentLocator; use BookStack\Entities\Tools\PageContent; use BookStack\Entities\Tools\PageEditActivity; +use BookStack\Entities\Tools\PageEditorData; use BookStack\Entities\Tools\PermissionsUpdater; use BookStack\Exceptions\NotFoundException; use BookStack\Exceptions\PermissionsException; @@ -21,7 +22,7 @@ use Throwable; class PageController extends Controller { - protected $pageRepo; + protected PageRepo $pageRepo; /** * PageController constructor. @@ -82,22 +83,15 @@ class PageController extends Controller * * @throws NotFoundException */ - public function editDraft(string $bookSlug, int $pageId) + public function editDraft(Request $request, string $bookSlug, int $pageId) { $draft = $this->pageRepo->getById($pageId); $this->checkOwnablePermission('page-create', $draft->getParent()); + + $editorData = new PageEditorData($draft, $this->pageRepo, $request->query('editor', '')); $this->setPageTitle(trans('entities.pages_edit_draft')); - $draftsEnabled = $this->isSignedIn(); - $templates = $this->pageRepo->getTemplates(10); - - return view('pages.edit', [ - 'page' => $draft, - 'book' => $draft->book, - 'isDraft' => true, - 'draftsEnabled' => $draftsEnabled, - 'templates' => $templates, - ]); + return view('pages.edit', $editorData->getViewData()); } /** @@ -188,43 +182,19 @@ class PageController extends Controller * * @throws NotFoundException */ - public function edit(string $bookSlug, string $pageSlug) + public function edit(Request $request, string $bookSlug, string $pageSlug) { $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); $this->checkOwnablePermission('page-update', $page); - $page->isDraft = false; - $editActivity = new PageEditActivity($page); - - // Check for active editing - $warnings = []; - if ($editActivity->hasActiveEditing()) { - $warnings[] = $editActivity->activeEditingMessage(); + $editorData = new PageEditorData($page, $this->pageRepo, $request->query('editor', '')); + if ($editorData->getWarnings()) { + $this->showWarningNotification(implode("\n", $editorData->getWarnings())); } - // Check for a current draft version for this user - $userDraft = $this->pageRepo->getUserDraft($page); - if ($userDraft !== null) { - $page->forceFill($userDraft->only(['name', 'html', 'markdown'])); - $page->isDraft = true; - $warnings[] = $editActivity->getEditingActiveDraftMessage($userDraft); - } - - if (count($warnings) > 0) { - $this->showWarningNotification(implode("\n", $warnings)); - } - - $templates = $this->pageRepo->getTemplates(10); - $draftsEnabled = $this->isSignedIn(); $this->setPageTitle(trans('entities.pages_editing_named', ['pageName' => $page->getShortName()])); - return view('pages.edit', [ - 'page' => $page, - 'book' => $page->book, - 'current' => $page, - 'draftsEnabled' => $draftsEnabled, - 'templates' => $templates, - ]); + return view('pages.edit', $editorData->getViewData()); } /** diff --git a/app/Http/Controllers/RecycleBinController.php b/app/Http/Controllers/RecycleBinController.php index 1cffb161c..82e3f660b 100644 --- a/app/Http/Controllers/RecycleBinController.php +++ b/app/Http/Controllers/RecycleBinController.php @@ -5,6 +5,7 @@ namespace BookStack\Http\Controllers; use BookStack\Actions\ActivityType; use BookStack\Entities\Models\Deletion; use BookStack\Entities\Models\Entity; +use BookStack\Entities\Repos\DeletionRepo; use BookStack\Entities\Tools\TrashCan; class RecycleBinController extends Controller @@ -73,12 +74,9 @@ class RecycleBinController extends Controller * * @throws \Exception */ - public function restore(string $id) + public function restore(DeletionRepo $deletionRepo, string $id) { - /** @var Deletion $deletion */ - $deletion = Deletion::query()->findOrFail($id); - $this->logActivity(ActivityType::RECYCLE_BIN_RESTORE, $deletion); - $restoreCount = (new TrashCan())->restoreFromDeletion($deletion); + $restoreCount = $deletionRepo->restore((int) $id); $this->showSuccessNotification(trans('settings.recycle_bin_restore_notification', ['count' => $restoreCount])); @@ -103,12 +101,9 @@ class RecycleBinController extends Controller * * @throws \Exception */ - public function destroy(string $id) + public function destroy(DeletionRepo $deletionRepo, string $id) { - /** @var Deletion $deletion */ - $deletion = Deletion::query()->findOrFail($id); - $this->logActivity(ActivityType::RECYCLE_BIN_DESTROY, $deletion); - $deleteCount = (new TrashCan())->destroyFromDeletion($deletion); + $deleteCount = $deletionRepo->destroy((int) $id); $this->showSuccessNotification(trans('settings.recycle_bin_destroy_notification', ['count' => $deleteCount])); diff --git a/app/Http/Controllers/SettingController.php b/app/Http/Controllers/SettingController.php index 2e46bbe40..9e9e6c690 100644 --- a/app/Http/Controllers/SettingController.php +++ b/app/Http/Controllers/SettingController.php @@ -19,7 +19,7 @@ class SettingController extends Controller } /** - * Handle requests to the settings index path + * Handle requests to the settings index path. */ public function index() { diff --git a/app/Http/Request.php b/app/Http/Request.php index c5b38f1c1..13892603d 100644 --- a/app/Http/Request.php +++ b/app/Http/Request.php @@ -8,20 +8,36 @@ class Request extends LaravelRequest { /** * Override the default request methods to get the scheme and host - * to set the custom APP_URL, if set. + * to directly use the custom APP_URL, if set. * - * @return \Illuminate\Config\Repository|mixed|string + * @return string */ public function getSchemeAndHttpHost() { - $base = config('app.url', null); + $appUrl = config('app.url', null); - if ($base) { - $base = trim($base, '/'); - } else { - $base = $this->getScheme() . '://' . $this->getHttpHost(); + if ($appUrl) { + return implode('/', array_slice(explode('/', $appUrl), 0, 3)); } - return $base; + return parent::getSchemeAndHttpHost(); + } + + /** + * Override the default request methods to get the base URL + * to directly use the custom APP_URL, if set. + * The base URL never ends with a / but should start with one if not empty. + * + * @return string + */ + public function getBaseUrl() + { + $appUrl = config('app.url', null); + + if ($appUrl) { + return '/' . rtrim(implode('/', array_slice(explode('/', $appUrl), 3)), '/'); + } + + return parent::getBaseUrl(); } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index fc712632e..3c1212e32 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -51,12 +51,12 @@ class AppServiceProvider extends ServiceProvider // Allow longer string lengths after upgrade to utf8mb4 Schema::defaultStringLength(191); - // Set morph-map due to namespace changes - Relation::morphMap([ - 'BookStack\\Bookshelf' => Bookshelf::class, - 'BookStack\\Book' => Book::class, - 'BookStack\\Chapter' => Chapter::class, - 'BookStack\\Page' => Page::class, + // Set morph-map for our relations to friendlier aliases + Relation::enforceMorphMap([ + 'bookshelf' => Bookshelf::class, + 'book' => Book::class, + 'chapter' => Chapter::class, + 'page' => Page::class, ]); // View Composers diff --git a/app/Uploads/AttachmentService.php b/app/Uploads/AttachmentService.php index 7974d7ae9..9d1f96ae4 100644 --- a/app/Uploads/AttachmentService.php +++ b/app/Uploads/AttachmentService.php @@ -14,7 +14,7 @@ use Symfony\Component\HttpFoundation\File\UploadedFile; class AttachmentService { - protected $fileSystem; + protected FilesystemManager $fileSystem; /** * AttachmentService constructor. @@ -73,6 +73,18 @@ class AttachmentService return $this->getStorageDisk()->get($this->adjustPathForStorageDisk($attachment->path)); } + /** + * Stream an attachment from storage. + * + * @throws FileNotFoundException + * + * @return resource|null + */ + public function streamAttachmentFromStorage(Attachment $attachment) + { + return $this->getStorageDisk()->readStream($this->adjustPathForStorageDisk($attachment->path)); + } + /** * Store a new attachment upon user upload. * @@ -211,8 +223,6 @@ class AttachmentService */ protected function putFileInStorage(UploadedFile $uploadedFile): string { - $attachmentData = file_get_contents($uploadedFile->getRealPath()); - $storage = $this->getStorageDisk(); $basePath = 'uploads/files/' . date('Y-m-M') . '/'; @@ -221,10 +231,11 @@ class AttachmentService $uploadFileName = Str::random(3) . $uploadFileName; } + $attachmentStream = fopen($uploadedFile->getRealPath(), 'r'); $attachmentPath = $basePath . $uploadFileName; try { - $storage->put($this->adjustPathForStorageDisk($attachmentPath), $attachmentData); + $storage->writeStream($this->adjustPathForStorageDisk($attachmentPath), $attachmentStream); } catch (Exception $e) { Log::error('Error when attempting file upload:' . $e->getMessage()); diff --git a/composer.lock b/composer.lock index 5e8a84ffe..4b0cd13d3 100644 --- a/composer.lock +++ b/composer.lock @@ -58,16 +58,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.217.0", + "version": "3.222.1", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "a8cca383b13fe6cde479a4745b4d3dfe893fdc69" + "reference": "632621d97180e82d3adc1245a7b272774c30dbf5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/a8cca383b13fe6cde479a4745b4d3dfe893fdc69", - "reference": "a8cca383b13fe6cde479a4745b4d3dfe893fdc69", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/632621d97180e82d3adc1245a7b272774c30dbf5", + "reference": "632621d97180e82d3adc1245a7b272774c30dbf5", "shasum": "" }, "require": { @@ -75,9 +75,9 @@ "ext-json": "*", "ext-pcre": "*", "ext-simplexml": "*", - "guzzlehttp/guzzle": "^5.3.3|^6.2.1|^7.0", + "guzzlehttp/guzzle": "^5.3.3 || ^6.2.1 || ^7.0", "guzzlehttp/promises": "^1.4.0", - "guzzlehttp/psr7": "^1.7.0|^2.0", + "guzzlehttp/psr7": "^1.7.0 || ^2.1.1", "mtdowling/jmespath.php": "^2.6", "php": ">=5.5" }, @@ -92,7 +92,7 @@ "ext-sockets": "*", "nette/neon": "^2.3", "paragonie/random_compat": ">= 2", - "phpunit/phpunit": "^4.8.35|^5.4.3", + "phpunit/phpunit": "^4.8.35 || ^5.6.3", "psr/cache": "^1.0", "psr/simple-cache": "^1.0", "sebastian/comparator": "^1.2.3" @@ -143,9 +143,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.217.0" + "source": "https://github.com/aws/aws-sdk-php/tree/3.222.1" }, - "time": "2022-03-30T18:18:30+00:00" + "time": "2022-04-28T18:17:24+00:00" }, { "name": "bacon/bacon-qr-code", @@ -563,16 +563,16 @@ }, { "name": "doctrine/dbal", - "version": "3.3.4", + "version": "3.3.5", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "83f779beaea1893c0bece093ab2104c6d15a7f26" + "reference": "719663b15983278227669c8595151586a2ff3327" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/83f779beaea1893c0bece093ab2104c6d15a7f26", - "reference": "83f779beaea1893c0bece093ab2104c6d15a7f26", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/719663b15983278227669c8595151586a2ff3327", + "reference": "719663b15983278227669c8595151586a2ff3327", "shasum": "" }, "require": { @@ -587,7 +587,7 @@ "require-dev": { "doctrine/coding-standard": "9.0.0", "jetbrains/phpstorm-stubs": "2021.1", - "phpstan/phpstan": "1.4.6", + "phpstan/phpstan": "1.5.3", "phpstan/phpstan-strict-rules": "^1.1", "phpunit/phpunit": "9.5.16", "psalm/plugin-phpunit": "0.16.1", @@ -654,7 +654,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.3.4" + "source": "https://github.com/doctrine/dbal/tree/3.3.5" }, "funding": [ { @@ -670,7 +670,7 @@ "type": "tidelift" } ], - "time": "2022-03-20T18:37:29+00:00" + "time": "2022-04-05T09:50:18+00:00" }, { "name": "doctrine/deprecations", @@ -978,16 +978,16 @@ }, { "name": "dompdf/dompdf", - "version": "v1.2.1", + "version": "v1.2.2", "source": { "type": "git", "url": "https://github.com/dompdf/dompdf.git", - "reference": "c6dfd9bb8b0040609f04754f729d4cb3016e0575" + "reference": "5031045d9640b38cfc14aac9667470df09c9e090" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/c6dfd9bb8b0040609f04754f729d4cb3016e0575", - "reference": "c6dfd9bb8b0040609f04754f729d4cb3016e0575", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/5031045d9640b38cfc14aac9667470df09c9e090", + "reference": "5031045d9640b38cfc14aac9667470df09c9e090", "shasum": "" }, "require": { @@ -998,6 +998,8 @@ "php": "^7.1 || ^8.0" }, "require-dev": { + "ext-json": "*", + "ext-zip": "*", "mockery/mockery": "^1.3", "phpunit/phpunit": "^7.5 || ^8 || ^9", "squizlabs/php_codesniffer": "^3.5" @@ -1039,9 +1041,9 @@ "homepage": "https://github.com/dompdf/dompdf", "support": { "issues": "https://github.com/dompdf/dompdf/issues", - "source": "https://github.com/dompdf/dompdf/tree/v1.2.1" + "source": "https://github.com/dompdf/dompdf/tree/v1.2.2" }, - "time": "2022-03-24T12:57:42+00:00" + "time": "2022-04-27T13:50:54+00:00" }, { "name": "dragonmantank/cron-expression", @@ -1788,16 +1790,16 @@ }, { "name": "laravel/framework", - "version": "v8.83.6", + "version": "v8.83.10", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "dffcec0cb686eafaa3b8f33db11da2cd9d69af1c" + "reference": "148ae59b7da6c3db6736374d357c5aaef9506fb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/dffcec0cb686eafaa3b8f33db11da2cd9d69af1c", - "reference": "dffcec0cb686eafaa3b8f33db11da2cd9d69af1c", + "url": "https://api.github.com/repos/laravel/framework/zipball/148ae59b7da6c3db6736374d357c5aaef9506fb7", + "reference": "148ae59b7da6c3db6736374d357c5aaef9506fb7", "shasum": "" }, "require": { @@ -1957,7 +1959,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-03-29T14:41:02+00:00" + "time": "2022-04-27T14:07:37+00:00" }, { "name": "laravel/serializable-closure", @@ -2545,16 +2547,16 @@ }, { "name": "league/mime-type-detection", - "version": "1.9.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69" + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/aa70e813a6ad3d1558fc927863d47309b4c23e69", - "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", "shasum": "" }, "require": { @@ -2585,7 +2587,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.9.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" }, "funding": [ { @@ -2597,20 +2599,20 @@ "type": "tidelift" } ], - "time": "2021-11-21T11:48:40+00:00" + "time": "2022-04-17T13:12:02+00:00" }, { "name": "league/oauth1-client", - "version": "v1.10.0", + "version": "v1.10.1", "source": { "type": "git", "url": "https://github.com/thephpleague/oauth1-client.git", - "reference": "88dd16b0cff68eb9167bfc849707d2c40ad91ddc" + "reference": "d6365b901b5c287dd41f143033315e2f777e1167" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/88dd16b0cff68eb9167bfc849707d2c40ad91ddc", - "reference": "88dd16b0cff68eb9167bfc849707d2c40ad91ddc", + "url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/d6365b901b5c287dd41f143033315e2f777e1167", + "reference": "d6365b901b5c287dd41f143033315e2f777e1167", "shasum": "" }, "require": { @@ -2671,9 +2673,9 @@ ], "support": { "issues": "https://github.com/thephpleague/oauth1-client/issues", - "source": "https://github.com/thephpleague/oauth1-client/tree/v1.10.0" + "source": "https://github.com/thephpleague/oauth1-client/tree/v1.10.1" }, - "time": "2021-08-15T23:05:49+00:00" + "time": "2022-04-15T14:02:14+00:00" }, { "name": "league/oauth2-client", @@ -2747,16 +2749,16 @@ }, { "name": "monolog/monolog", - "version": "2.4.0", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "d7fd7450628561ba697b7097d86db72662f54aef" + "reference": "4192345e260f1d51b365536199744b987e160edc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/d7fd7450628561ba697b7097d86db72662f54aef", - "reference": "d7fd7450628561ba697b7097d86db72662f54aef", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/4192345e260f1d51b365536199744b987e160edc", + "reference": "4192345e260f1d51b365536199744b987e160edc", "shasum": "" }, "require": { @@ -2830,7 +2832,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.4.0" + "source": "https://github.com/Seldaek/monolog/tree/2.5.0" }, "funding": [ { @@ -2842,7 +2844,7 @@ "type": "tidelift" } ], - "time": "2022-03-14T12:44:37+00:00" + "time": "2022-04-08T15:43:54+00:00" }, { "name": "mtdowling/jmespath.php", @@ -3458,16 +3460,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.13", + "version": "3.0.14", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "1443ab79364eea48665fa8c09ac67f37d1025f7e" + "reference": "2f0b7af658cbea265cbb4a791d6c29a6613f98ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/1443ab79364eea48665fa8c09ac67f37d1025f7e", - "reference": "1443ab79364eea48665fa8c09ac67f37d1025f7e", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/2f0b7af658cbea265cbb4a791d6c29a6613f98ef", + "reference": "2f0b7af658cbea265cbb4a791d6c29a6613f98ef", "shasum": "" }, "require": { @@ -3476,9 +3478,7 @@ "php": ">=5.6.1" }, "require-dev": { - "phing/phing": "~2.7", - "phpunit/phpunit": "^5.7|^6.0|^9.4", - "squizlabs/php_codesniffer": "~2.0" + "phpunit/phpunit": "*" }, "suggest": { "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", @@ -3549,7 +3549,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.13" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.14" }, "funding": [ { @@ -3565,7 +3565,7 @@ "type": "tidelift" } ], - "time": "2022-01-30T08:50:05+00:00" + "time": "2022-04-04T05:15:45+00:00" }, { "name": "pragmarx/google2fa", @@ -4957,16 +4957,16 @@ }, { "name": "symfony/console", - "version": "v5.4.5", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad" + "reference": "ffe3aed36c4d60da2cf1b0a1cee6b8f2e5fa881b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d8111acc99876953f52fe16d4c50eb60940d49ad", - "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad", + "url": "https://api.github.com/repos/symfony/console/zipball/ffe3aed36c4d60da2cf1b0a1cee6b8f2e5fa881b", + "reference": "ffe3aed36c4d60da2cf1b0a1cee6b8f2e5fa881b", "shasum": "" }, "require": { @@ -5036,7 +5036,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.5" + "source": "https://github.com/symfony/console/tree/v5.4.8" }, "funding": [ { @@ -5052,7 +5052,7 @@ "type": "tidelift" } ], - "time": "2022-02-24T12:45:35+00:00" + "time": "2022-04-12T16:02:29+00:00" }, { "name": "symfony/css-selector", @@ -5122,16 +5122,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", "shasum": "" }, "require": { @@ -5169,7 +5169,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" }, "funding": [ { @@ -5185,20 +5185,20 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/error-handler", - "version": "v5.4.3", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5" + "reference": "c1fcde614dfe99d62a83b796a53b8bad358b266a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", - "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c1fcde614dfe99d62a83b796a53b8bad358b266a", + "reference": "c1fcde614dfe99d62a83b796a53b8bad358b266a", "shasum": "" }, "require": { @@ -5240,7 +5240,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.4.3" + "source": "https://github.com/symfony/error-handler/tree/v5.4.8" }, "funding": [ { @@ -5256,7 +5256,7 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-04-12T15:48:08+00:00" }, { "name": "symfony/event-dispatcher", @@ -5345,16 +5345,16 @@ }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a" + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", "shasum": "" }, "require": { @@ -5404,7 +5404,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.1" }, "funding": [ { @@ -5420,20 +5420,20 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/finder", - "version": "v5.4.3", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d" + "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d", - "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "url": "https://api.github.com/repos/symfony/finder/zipball/9b630f3427f3ebe7cd346c277a1408b00249dad9", + "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9", "shasum": "" }, "require": { @@ -5467,7 +5467,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.3" + "source": "https://github.com/symfony/finder/tree/v5.4.8" }, "funding": [ { @@ -5483,20 +5483,20 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:34:36+00:00" + "time": "2022-04-15T08:07:45+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.6", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465" + "reference": "ff2818d1c3d49860bcae1f2cbb5eb00fcd3bf9e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/34e89bc147633c0f9dd6caaaf56da3b806a21465", - "reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ff2818d1c3d49860bcae1f2cbb5eb00fcd3bf9e2", + "reference": "ff2818d1c3d49860bcae1f2cbb5eb00fcd3bf9e2", "shasum": "" }, "require": { @@ -5540,7 +5540,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.6" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.8" }, "funding": [ { @@ -5556,20 +5556,20 @@ "type": "tidelift" } ], - "time": "2022-03-05T21:03:43+00:00" + "time": "2022-04-22T08:14:12+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.4.6", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "d41f29ae9af1b5f40c7ebcddf09082953229411d" + "reference": "cf7e61106abfc19b305ca0aedc41724ced89a02a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/d41f29ae9af1b5f40c7ebcddf09082953229411d", - "reference": "d41f29ae9af1b5f40c7ebcddf09082953229411d", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/cf7e61106abfc19b305ca0aedc41724ced89a02a", + "reference": "cf7e61106abfc19b305ca0aedc41724ced89a02a", "shasum": "" }, "require": { @@ -5652,7 +5652,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.4.6" + "source": "https://github.com/symfony/http-kernel/tree/v5.4.8" }, "funding": [ { @@ -5668,20 +5668,20 @@ "type": "tidelift" } ], - "time": "2022-03-05T21:14:51+00:00" + "time": "2022-04-27T17:22:21+00:00" }, { "name": "symfony/mime", - "version": "v5.4.3", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f" + "reference": "af49bc163ec3272f677bde3bc44c0d766c1fd662" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/e1503cfb5c9a225350f549d3bb99296f4abfb80f", - "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f", + "url": "https://api.github.com/repos/symfony/mime/zipball/af49bc163ec3272f677bde3bc44c0d766c1fd662", + "reference": "af49bc163ec3272f677bde3bc44c0d766c1fd662", "shasum": "" }, "require": { @@ -5735,7 +5735,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.3" + "source": "https://github.com/symfony/mime/tree/v5.4.8" }, "funding": [ { @@ -5751,7 +5751,7 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-04-12T15:48:08+00:00" }, { "name": "symfony/polyfill-ctype", @@ -6572,16 +6572,16 @@ }, { "name": "symfony/process", - "version": "v5.4.5", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "95440409896f90a5f85db07a32b517ecec17fa4c" + "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/95440409896f90a5f85db07a32b517ecec17fa4c", - "reference": "95440409896f90a5f85db07a32b517ecec17fa4c", + "url": "https://api.github.com/repos/symfony/process/zipball/597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", + "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", "shasum": "" }, "require": { @@ -6614,7 +6614,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.5" + "source": "https://github.com/symfony/process/tree/v5.4.8" }, "funding": [ { @@ -6630,20 +6630,20 @@ "type": "tidelift" } ], - "time": "2022-01-30T18:16:22+00:00" + "time": "2022-04-08T05:07:18+00:00" }, { "name": "symfony/routing", - "version": "v5.4.3", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "44b29c7a94e867ccde1da604792f11a469958981" + "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/44b29c7a94e867ccde1da604792f11a469958981", - "reference": "44b29c7a94e867ccde1da604792f11a469958981", + "url": "https://api.github.com/repos/symfony/routing/zipball/e07817bb6244ea33ef5ad31abc4a9288bef3f2f7", + "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7", "shasum": "" }, "require": { @@ -6704,7 +6704,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.4.3" + "source": "https://github.com/symfony/routing/tree/v5.4.8" }, "funding": [ { @@ -6720,26 +6720,26 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-04-18T21:45:37+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" + "symfony/deprecation-contracts": "^2.1|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -6787,7 +6787,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" }, "funding": [ { @@ -6803,20 +6803,20 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:48:04+00:00" + "time": "2022-03-13T20:07:29+00:00" }, { "name": "symfony/string", - "version": "v5.4.3", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10" + "reference": "3c061a76bff6d6ea427d85e12ad1bb8ed8cd43e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10", - "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10", + "url": "https://api.github.com/repos/symfony/string/zipball/3c061a76bff6d6ea427d85e12ad1bb8ed8cd43e8", + "reference": "3c061a76bff6d6ea427d85e12ad1bb8ed8cd43e8", "shasum": "" }, "require": { @@ -6873,7 +6873,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.3" + "source": "https://github.com/symfony/string/tree/v5.4.8" }, "funding": [ { @@ -6889,20 +6889,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-04-19T10:40:37+00:00" }, { "name": "symfony/translation", - "version": "v5.4.6", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "a7ca9fdfffb0174209440c2ffa1dee228e15d95b" + "reference": "f5c0f6d1f20993b2606f3a5f36b1dc8c1899170b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/a7ca9fdfffb0174209440c2ffa1dee228e15d95b", - "reference": "a7ca9fdfffb0174209440c2ffa1dee228e15d95b", + "url": "https://api.github.com/repos/symfony/translation/zipball/f5c0f6d1f20993b2606f3a5f36b1dc8c1899170b", + "reference": "f5c0f6d1f20993b2606f3a5f36b1dc8c1899170b", "shasum": "" }, "require": { @@ -6970,7 +6970,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.6" + "source": "https://github.com/symfony/translation/tree/v5.4.8" }, "funding": [ { @@ -6986,20 +6986,20 @@ "type": "tidelift" } ], - "time": "2022-03-02T12:56:28+00:00" + "time": "2022-04-22T08:14:12+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.5.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e" + "reference": "1211df0afa701e45a04253110e959d4af4ef0f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e", - "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1211df0afa701e45a04253110e959d4af4ef0f07", + "reference": "1211df0afa701e45a04253110e959d4af4ef0f07", "shasum": "" }, "require": { @@ -7048,7 +7048,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v2.5.1" }, "funding": [ { @@ -7064,20 +7064,20 @@ "type": "tidelift" } ], - "time": "2021-08-17T14:20:01+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.4.6", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0" + "reference": "cdcadd343d31ad16fc5e006b0de81ea307435053" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/294e9da6e2e0dd404e983daa5aa74253d92c05d0", - "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cdcadd343d31ad16fc5e006b0de81ea307435053", + "reference": "cdcadd343d31ad16fc5e006b0de81ea307435053", "shasum": "" }, "require": { @@ -7137,7 +7137,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.6" + "source": "https://github.com/symfony/var-dumper/tree/v5.4.8" }, "funding": [ { @@ -7153,7 +7153,7 @@ "type": "tidelift" } ], - "time": "2022-03-02T12:42:23+00:00" + "time": "2022-04-26T13:19:20+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -7500,16 +7500,16 @@ }, { "name": "composer/composer", - "version": "2.3.1", + "version": "2.3.5", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "d6c572e5f5d6d1a27bb7a1fbd1c74f777a26d436" + "reference": "50c47b1f907cfcdb8f072b88164d22b527557ae1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/d6c572e5f5d6d1a27bb7a1fbd1c74f777a26d436", - "reference": "d6c572e5f5d6d1a27bb7a1fbd1c74f777a26d436", + "url": "https://api.github.com/repos/composer/composer/zipball/50c47b1f907cfcdb8f072b88164d22b527557ae1", + "reference": "50c47b1f907cfcdb8f072b88164d22b527557ae1", "shasum": "" }, "require": { @@ -7585,7 +7585,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/composer/issues", - "source": "https://github.com/composer/composer/tree/2.3.1" + "source": "https://github.com/composer/composer/tree/2.3.5" }, "funding": [ { @@ -7601,7 +7601,7 @@ "type": "tidelift" } ], - "time": "2022-03-30T13:41:28+00:00" + "time": "2022-04-13T14:43:00+00:00" }, { "name": "composer/metadata-minifier", @@ -7745,16 +7745,16 @@ }, { "name": "composer/semver", - "version": "3.3.1", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "5d8e574bb0e69188786b8ef77d43341222a41a71" + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/5d8e574bb0e69188786b8ef77d43341222a41a71", - "reference": "5d8e574bb0e69188786b8ef77d43341222a41a71", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", "shasum": "" }, "require": { @@ -7806,7 +7806,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.1" + "source": "https://github.com/composer/semver/tree/3.3.2" }, "funding": [ { @@ -7822,7 +7822,7 @@ "type": "tidelift" } ], - "time": "2022-03-16T11:22:07+00:00" + "time": "2022-04-01T19:23:25+00:00" }, { "name": "composer/spdx-licenses", @@ -8213,16 +8213,16 @@ }, { "name": "itsgoingd/clockwork", - "version": "v5.1.5", + "version": "v5.1.6", "source": { "type": "git", "url": "https://github.com/itsgoingd/clockwork.git", - "reference": "6a7b3942224fa53cf3704d9adba636e1f3dfeb9a" + "reference": "9df41432da1d8cb39c7fda383ddcc02231c83ff3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/itsgoingd/clockwork/zipball/6a7b3942224fa53cf3704d9adba636e1f3dfeb9a", - "reference": "6a7b3942224fa53cf3704d9adba636e1f3dfeb9a", + "url": "https://api.github.com/repos/itsgoingd/clockwork/zipball/9df41432da1d8cb39c7fda383ddcc02231c83ff3", + "reference": "9df41432da1d8cb39c7fda383ddcc02231c83ff3", "shasum": "" }, "require": { @@ -8269,7 +8269,7 @@ ], "support": { "issues": "https://github.com/itsgoingd/clockwork/issues", - "source": "https://github.com/itsgoingd/clockwork/tree/v5.1.5" + "source": "https://github.com/itsgoingd/clockwork/tree/v5.1.6" }, "funding": [ { @@ -8277,20 +8277,20 @@ "type": "github" } ], - "time": "2022-02-13T22:57:42+00:00" + "time": "2022-04-12T21:35:47+00:00" }, { "name": "justinrainbow/json-schema", - "version": "5.2.11", + "version": "5.2.12", "source": { "type": "git", "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa" + "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ab6744b7296ded80f8cc4f9509abbff393399aa", - "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", + "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", "shasum": "" }, "require": { @@ -8345,9 +8345,9 @@ ], "support": { "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/5.2.11" + "source": "https://github.com/justinrainbow/json-schema/tree/5.2.12" }, - "time": "2021-07-22T09:24:00+00:00" + "time": "2022-04-13T08:02:27+00:00" }, { "name": "mockery/mockery", @@ -9005,16 +9005,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.5.2", + "version": "1.6.3", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "f32e95f571c9587b4e14be05253ae56fedd00b2c" + "reference": "6128620b98292e0b69ea6d799871d77163681c8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f32e95f571c9587b4e14be05253ae56fedd00b2c", - "reference": "f32e95f571c9587b4e14be05253ae56fedd00b2c", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6128620b98292e0b69ea6d799871d77163681c8e", + "reference": "6128620b98292e0b69ea6d799871d77163681c8e", "shasum": "" }, "require": { @@ -9040,7 +9040,7 @@ "description": "PHPStan - PHP Static Analysis Tool", "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.5.2" + "source": "https://github.com/phpstan/phpstan/tree/1.6.3" }, "funding": [ { @@ -9060,7 +9060,7 @@ "type": "tidelift" } ], - "time": "2022-03-29T07:34:36+00:00" + "time": "2022-04-28T11:27:53+00:00" }, { "name": "phpunit/php-code-coverage", @@ -9382,16 +9382,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.19", + "version": "9.5.20", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "35ea4b7f3acabb26f4bb640f8c30866c401da807" + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/35ea4b7f3acabb26f4bb640f8c30866c401da807", - "reference": "35ea4b7f3acabb26f4bb640f8c30866c401da807", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", "shasum": "" }, "require": { @@ -9469,7 +9469,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.19" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" }, "funding": [ { @@ -9481,7 +9481,7 @@ "type": "github" } ], - "time": "2022-03-15T09:57:31+00:00" + "time": "2022-04-01T12:37:26+00:00" }, { "name": "react/promise", @@ -9925,16 +9925,16 @@ }, { "name": "sebastian/environment", - "version": "5.1.3", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", "shasum": "" }, "require": { @@ -9976,7 +9976,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" }, "funding": [ { @@ -9984,7 +9984,7 @@ "type": "github" } ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2022-04-03T09:37:03+00:00" }, { "name": "sebastian/exporter", @@ -10525,23 +10525,24 @@ }, { "name": "seld/jsonlint", - "version": "1.8.3", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57" + "reference": "4211420d25eba80712bff236a98960ef68b866b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9ad6ce79c342fbd44df10ea95511a1b24dee5b57", - "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/4211420d25eba80712bff236a98960ef68b866b7", + "reference": "4211420d25eba80712bff236a98960ef68b866b7", "shasum": "" }, "require": { "php": "^5.3 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" }, "bin": [ "bin/jsonlint" @@ -10572,7 +10573,7 @@ ], "support": { "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.8.3" + "source": "https://github.com/Seldaek/jsonlint/tree/1.9.0" }, "funding": [ { @@ -10584,7 +10585,7 @@ "type": "tidelift" } ], - "time": "2020-11-11T09:19:24+00:00" + "time": "2022-04-01T13:37:23+00:00" }, { "name": "seld/phar-utils", @@ -10711,16 +10712,16 @@ }, { "name": "symfony/filesystem", - "version": "v5.4.6", + "version": "v5.4.7", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "d53a45039974952af7f7ebc461ccdd4295e29440" + "reference": "3a4442138d80c9f7b600fb297534ac718b61d37f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/d53a45039974952af7f7ebc461ccdd4295e29440", - "reference": "d53a45039974952af7f7ebc461ccdd4295e29440", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/3a4442138d80c9f7b600fb297534ac718b61d37f", + "reference": "3a4442138d80c9f7b600fb297534ac718b61d37f", "shasum": "" }, "require": { @@ -10755,7 +10756,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.6" + "source": "https://github.com/symfony/filesystem/tree/v5.4.7" }, "funding": [ { @@ -10771,7 +10772,7 @@ "type": "tidelift" } ], - "time": "2022-03-02T12:42:23+00:00" + "time": "2022-04-01T12:33:59+00:00" }, { "name": "theseer/tokenizer", diff --git a/database/migrations/2022_04_17_101741_add_editor_change_field_and_permission.php b/database/migrations/2022_04_17_101741_add_editor_change_field_and_permission.php new file mode 100644 index 000000000..a562a480f --- /dev/null +++ b/database/migrations/2022_04_17_101741_add_editor_change_field_and_permission.php @@ -0,0 +1,62 @@ +string('editor', 50)->default(''); + }); + + // Populate the new 'editor' column + // We set it to 'markdown' for pages currently with markdown content + DB::table('pages')->where('markdown', '!=', '')->update(['editor' => 'markdown']); + // We set it to 'wysiwyg' where we have HTML but no markdown + DB::table('pages')->where('markdown', '=', '') + ->where('html', '!=', '') + ->update(['editor' => 'wysiwyg']); + + // Give the admin user permission to change the editor + $adminRoleId = DB::table('roles')->where('system_name', '=', 'admin')->first()->id; + + $permissionId = DB::table('role_permissions')->insertGetId([ + 'name' => 'editor-change', + 'display_name' => 'Change page editor', + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), + ]); + + DB::table('permission_role')->insert([ + 'role_id' => $adminRoleId, + 'permission_id' => $permissionId, + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // Drop the new column from the pages table + Schema::table('pages', function (Blueprint $table) { + $table->dropColumn('editor'); + }); + + // Remove traces of the role permission + DB::table('role_permissions')->where('name', '=', 'editor-change')->delete(); + } +} diff --git a/database/migrations/2022_04_25_140741_update_polymorphic_types.php b/database/migrations/2022_04_25_140741_update_polymorphic_types.php new file mode 100644 index 000000000..9f312bf75 --- /dev/null +++ b/database/migrations/2022_04_25_140741_update_polymorphic_types.php @@ -0,0 +1,64 @@ + 'bookshelf', + 'BookStack\\Book' => 'book', + 'BookStack\\Chapter' => 'chapter', + 'BookStack\\Page' => 'page', + ]; + + /** + * Mapping of tables and columns that contain polymorphic types. + */ + protected $columnsByTable = [ + 'activities' => 'entity_type', + 'comments' => 'entity_type', + 'deletions' => 'deletable_type', + 'entity_permissions' => 'restrictable_type', + 'favourites' => 'favouritable_type', + 'joint_permissions' => 'entity_type', + 'search_terms' => 'entity_type', + 'tags' => 'entity_type', + 'views' => 'viewable_type', + ]; + + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + foreach ($this->columnsByTable as $table => $column) { + foreach ($this->changeMap as $oldVal => $newVal) { + DB::table($table) + ->where([$column => $oldVal]) + ->update([$column => $newVal]); + } + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + foreach ($this->columnsByTable as $table => $column) { + foreach ($this->changeMap as $oldVal => $newVal) { + DB::table($table) + ->where([$column => $newVal]) + ->update([$column => $oldVal]); + } + } + } +} diff --git a/dev/api/responses/recycle-bin-destroy.json b/dev/api/responses/recycle-bin-destroy.json new file mode 100644 index 000000000..21cfc401b --- /dev/null +++ b/dev/api/responses/recycle-bin-destroy.json @@ -0,0 +1,3 @@ +{ + "delete_count": 2 +} \ No newline at end of file diff --git a/dev/api/responses/recycle-bin-list.json b/dev/api/responses/recycle-bin-list.json new file mode 100644 index 000000000..853070839 --- /dev/null +++ b/dev/api/responses/recycle-bin-list.json @@ -0,0 +1,64 @@ +{ + "data": [ + { + "id": 18, + "deleted_by": 1, + "created_at": "2022-04-20T12:57:46.000000Z", + "updated_at": "2022-04-20T12:57:46.000000Z", + "deletable_type": "page", + "deletable_id": 2582, + "deletable": { + "id": 2582, + "book_id": 25, + "chapter_id": 0, + "name": "A Wonderful Page", + "slug": "a-wonderful-page", + "priority": 9, + "created_at": "2022-02-08T00:44:45.000000Z", + "updated_at": "2022-04-20T12:57:46.000000Z", + "created_by": 1, + "updated_by": 1, + "draft": false, + "revision_count": 1, + "template": false, + "owned_by": 1, + "editor": "wysiwyg", + "book_slug": "a-great-book", + "parent": { + "id": 25, + "name": "A Great Book", + "slug": "a-great-book", + "description": "", + "created_at": "2022-01-24T16:14:28.000000Z", + "updated_at": "2022-03-06T15:14:50.000000Z", + "created_by": 1, + "updated_by": 1, + "owned_by": 1, + "type": "book" + } + } + }, + { + "id": 19, + "deleted_by": 1, + "created_at": "2022-04-25T16:07:46.000000Z", + "updated_at": "2022-04-25T16:07:46.000000Z", + "deletable_type": "book", + "deletable_id": 13, + "deletable": { + "id": 13, + "name": "A Big Book!", + "slug": "a-big-book", + "description": "This is a very large book with loads of cool stuff in it!", + "created_at": "2021-11-08T11:26:43.000000Z", + "updated_at": "2022-04-25T16:07:47.000000Z", + "created_by": 27, + "updated_by": 1, + "owned_by": 1, + "pages_count": 208, + "chapters_count": 50 + } + } + ], + "total": 2 +} \ No newline at end of file diff --git a/dev/api/responses/recycle-bin-restore.json b/dev/api/responses/recycle-bin-restore.json new file mode 100644 index 000000000..ac5c94808 --- /dev/null +++ b/dev/api/responses/recycle-bin-restore.json @@ -0,0 +1,3 @@ +{ + "restore_count": 2 +} \ No newline at end of file diff --git a/dev/build/esbuild.js b/dev/build/esbuild.js new file mode 100644 index 000000000..46357038a --- /dev/null +++ b/dev/build/esbuild.js @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +const esbuild = require('esbuild'); +const fs = require('fs'); +const path = require('path'); + +// Check if we're building for production +// (Set via passing `production` as first argument) +const isProd = process.argv[2] === 'production'; + +// Gather our input files +const jsInDir = path.join(__dirname, '../../resources/js'); +const jsInDirFiles = fs.readdirSync(jsInDir, 'utf8'); +const entryFiles = jsInDirFiles + .filter(f => f.endsWith('.js') || f.endsWith('.mjs')) + .map(f => path.join(jsInDir, f)); + +// Locate our output directory +const outDir = path.join(__dirname, '../../public/dist'); + +// Build via esbuild +esbuild.build({ + bundle: true, + entryPoints: entryFiles, + outdir: outDir, + sourcemap: true, + target: 'es2020', + mainFields: ['module', 'main'], + format: 'esm', + minify: isProd, + logLevel: "info", +}).catch(() => process.exit(1)); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index dd4f0228d..7f0df2282 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,17 +14,17 @@ }, "devDependencies": { "chokidar-cli": "^3.0", - "esbuild": "0.14.27", + "esbuild": "0.14.36", "livereload": "^0.9.3", "npm-run-all": "^4.1.5", "punycode": "^2.1.1", - "sass": "^1.49.9" + "sass": "^1.50.0" } }, "node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, "engines": { "node": ">=6" @@ -341,9 +341,9 @@ } }, "node_modules/esbuild": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.27.tgz", - "integrity": "sha512-MZQt5SywZS3hA9fXnMhR22dv0oPGh6QtjJRIYbgL1AeqAoQZE+Qn5ppGYQAoHv/vq827flj4tIJ79Mrdiwk46Q==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.36.tgz", + "integrity": "sha512-HhFHPiRXGYOCRlrhpiVDYKcFJRdO0sBElZ668M4lh2ER0YgnkLxECuFe7uWCf23FrcLc59Pqr7dHkTqmRPDHmw==", "dev": true, "hasInstallScript": true, "bin": { @@ -353,32 +353,32 @@ "node": ">=12" }, "optionalDependencies": { - "esbuild-android-64": "0.14.27", - "esbuild-android-arm64": "0.14.27", - "esbuild-darwin-64": "0.14.27", - "esbuild-darwin-arm64": "0.14.27", - "esbuild-freebsd-64": "0.14.27", - "esbuild-freebsd-arm64": "0.14.27", - "esbuild-linux-32": "0.14.27", - "esbuild-linux-64": "0.14.27", - "esbuild-linux-arm": "0.14.27", - "esbuild-linux-arm64": "0.14.27", - "esbuild-linux-mips64le": "0.14.27", - "esbuild-linux-ppc64le": "0.14.27", - "esbuild-linux-riscv64": "0.14.27", - "esbuild-linux-s390x": "0.14.27", - "esbuild-netbsd-64": "0.14.27", - "esbuild-openbsd-64": "0.14.27", - "esbuild-sunos-64": "0.14.27", - "esbuild-windows-32": "0.14.27", - "esbuild-windows-64": "0.14.27", - "esbuild-windows-arm64": "0.14.27" + "esbuild-android-64": "0.14.36", + "esbuild-android-arm64": "0.14.36", + "esbuild-darwin-64": "0.14.36", + "esbuild-darwin-arm64": "0.14.36", + "esbuild-freebsd-64": "0.14.36", + "esbuild-freebsd-arm64": "0.14.36", + "esbuild-linux-32": "0.14.36", + "esbuild-linux-64": "0.14.36", + "esbuild-linux-arm": "0.14.36", + "esbuild-linux-arm64": "0.14.36", + "esbuild-linux-mips64le": "0.14.36", + "esbuild-linux-ppc64le": "0.14.36", + "esbuild-linux-riscv64": "0.14.36", + "esbuild-linux-s390x": "0.14.36", + "esbuild-netbsd-64": "0.14.36", + "esbuild-openbsd-64": "0.14.36", + "esbuild-sunos-64": "0.14.36", + "esbuild-windows-32": "0.14.36", + "esbuild-windows-64": "0.14.36", + "esbuild-windows-arm64": "0.14.36" } }, "node_modules/esbuild-android-64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.27.tgz", - "integrity": "sha512-LuEd4uPuj/16Y8j6kqy3Z2E9vNY9logfq8Tq+oTE2PZVuNs3M1kj5Qd4O95ee66yDGb3isaOCV7sOLDwtMfGaQ==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.36.tgz", + "integrity": "sha512-jwpBhF1jmo0tVCYC/ORzVN+hyVcNZUWuozGcLHfod0RJCedTDTvR4nwlTXdx1gtncDqjk33itjO+27OZHbiavw==", "cpu": [ "x64" ], @@ -392,9 +392,9 @@ } }, "node_modules/esbuild-android-arm64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.27.tgz", - "integrity": "sha512-E8Ktwwa6vX8q7QeJmg8yepBYXaee50OdQS3BFtEHKrzbV45H4foMOeEE7uqdjGQZFBap5VAqo7pvjlyA92wznQ==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.36.tgz", + "integrity": "sha512-/hYkyFe7x7Yapmfv4X/tBmyKnggUmdQmlvZ8ZlBnV4+PjisrEhAvC3yWpURuD9XoB8Wa1d5dGkTsF53pIvpjsg==", "cpu": [ "arm64" ], @@ -408,9 +408,9 @@ } }, "node_modules/esbuild-darwin-64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.27.tgz", - "integrity": "sha512-czw/kXl/1ZdenPWfw9jDc5iuIYxqUxgQ/Q+hRd4/3udyGGVI31r29LCViN2bAJgGvQkqyLGVcG03PJPEXQ5i2g==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.36.tgz", + "integrity": "sha512-kkl6qmV0dTpyIMKagluzYqlc1vO0ecgpviK/7jwPbRDEv5fejRTaBBEE2KxEQbTHcLhiiDbhG7d5UybZWo/1zQ==", "cpu": [ "x64" ], @@ -424,9 +424,9 @@ } }, "node_modules/esbuild-darwin-arm64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.27.tgz", - "integrity": "sha512-BEsv2U2U4o672oV8+xpXNxN9bgqRCtddQC6WBh4YhXKDcSZcdNh7+6nS+DM2vu7qWIWNA4JbRG24LUUYXysimQ==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.36.tgz", + "integrity": "sha512-q8fY4r2Sx6P0Pr3VUm//eFYKVk07C5MHcEinU1BjyFnuYz4IxR/03uBbDwluR6ILIHnZTE7AkTUWIdidRi1Jjw==", "cpu": [ "arm64" ], @@ -440,9 +440,9 @@ } }, "node_modules/esbuild-freebsd-64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.27.tgz", - "integrity": "sha512-7FeiFPGBo+ga+kOkDxtPmdPZdayrSzsV9pmfHxcyLKxu+3oTcajeZlOO1y9HW+t5aFZPiv7czOHM4KNd0tNwCA==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.36.tgz", + "integrity": "sha512-Hn8AYuxXXRptybPqoMkga4HRFE7/XmhtlQjXFHoAIhKUPPMeJH35GYEUWGbjteai9FLFvBAjEAlwEtSGxnqWww==", "cpu": [ "x64" ], @@ -456,9 +456,9 @@ } }, "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.27.tgz", - "integrity": "sha512-8CK3++foRZJluOWXpllG5zwAVlxtv36NpHfsbWS7TYlD8S+QruXltKlXToc/5ZNzBK++l6rvRKELu/puCLc7jA==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.36.tgz", + "integrity": "sha512-S3C0attylLLRiCcHiJd036eDEMOY32+h8P+jJ3kTcfhJANNjP0TNBNL30TZmEdOSx/820HJFgRrqpNAvTbjnDA==", "cpu": [ "arm64" ], @@ -472,9 +472,9 @@ } }, "node_modules/esbuild-linux-32": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.27.tgz", - "integrity": "sha512-qhNYIcT+EsYSBClZ5QhLzFzV5iVsP1YsITqblSaztr3+ZJUI+GoK8aXHyzKd7/CKKuK93cxEMJPpfi1dfsOfdw==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.36.tgz", + "integrity": "sha512-Eh9OkyTrEZn9WGO4xkI3OPPpUX7p/3QYvdG0lL4rfr73Ap2HAr6D9lP59VMF64Ex01LhHSXwIsFG/8AQjh6eNw==", "cpu": [ "ia32" ], @@ -488,9 +488,9 @@ } }, "node_modules/esbuild-linux-64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.27.tgz", - "integrity": "sha512-ESjck9+EsHoTaKWlFKJpPZRN26uiav5gkI16RuI8WBxUdLrrAlYuYSndxxKgEn1csd968BX/8yQZATYf/9+/qg==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.36.tgz", + "integrity": "sha512-vFVFS5ve7PuwlfgoWNyRccGDi2QTNkQo/2k5U5ttVD0jRFaMlc8UQee708fOZA6zTCDy5RWsT5MJw3sl2X6KDg==", "cpu": [ "x64" ], @@ -504,9 +504,9 @@ } }, "node_modules/esbuild-linux-arm": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.27.tgz", - "integrity": "sha512-JnnmgUBdqLQO9hoNZQqNHFWlNpSX82vzB3rYuCJMhtkuaWQEmQz6Lec1UIxJdC38ifEghNTBsF9bbe8dFilnCw==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.36.tgz", + "integrity": "sha512-NhgU4n+NCsYgt7Hy61PCquEz5aevI6VjQvxwBxtxrooXsxt5b2xtOUXYZe04JxqQo+XZk3d1gcr7pbV9MAQ/Lg==", "cpu": [ "arm" ], @@ -520,9 +520,9 @@ } }, "node_modules/esbuild-linux-arm64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.27.tgz", - "integrity": "sha512-no6Mi17eV2tHlJnqBHRLekpZ2/VYx+NfGxKcBE/2xOMYwctsanCaXxw4zapvNrGE9X38vefVXLz6YCF8b1EHiQ==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.36.tgz", + "integrity": "sha512-24Vq1M7FdpSmaTYuu1w0Hdhiqkbto1I5Pjyi+4Cdw5fJKGlwQuw+hWynTcRI/cOZxBcBpP21gND7W27gHAiftw==", "cpu": [ "arm64" ], @@ -536,9 +536,9 @@ } }, "node_modules/esbuild-linux-mips64le": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.27.tgz", - "integrity": "sha512-NolWP2uOvIJpbwpsDbwfeExZOY1bZNlWE/kVfkzLMsSgqeVcl5YMen/cedRe9mKnpfLli+i0uSp7N+fkKNU27A==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.36.tgz", + "integrity": "sha512-hZUeTXvppJN+5rEz2EjsOFM9F1bZt7/d2FUM1lmQo//rXh1RTFYzhC0txn7WV0/jCC7SvrGRaRz0NMsRPf8SIA==", "cpu": [ "mips64el" ], @@ -552,9 +552,9 @@ } }, "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.27.tgz", - "integrity": "sha512-/7dTjDvXMdRKmsSxKXeWyonuGgblnYDn0MI1xDC7J1VQXny8k1qgNp6VmrlsawwnsymSUUiThhkJsI+rx0taNA==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.36.tgz", + "integrity": "sha512-1Bg3QgzZjO+QtPhP9VeIBhAduHEc2kzU43MzBnMwpLSZ890azr4/A9Dganun8nsqD/1TBcqhId0z4mFDO8FAvg==", "cpu": [ "ppc64" ], @@ -568,9 +568,9 @@ } }, "node_modules/esbuild-linux-riscv64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.27.tgz", - "integrity": "sha512-D+aFiUzOJG13RhrSmZgrcFaF4UUHpqj7XSKrIiCXIj1dkIkFqdrmqMSOtSs78dOtObWiOrFCDDzB24UyeEiNGg==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.36.tgz", + "integrity": "sha512-dOE5pt3cOdqEhaufDRzNCHf5BSwxgygVak9UR7PH7KPVHwSTDAZHDoEjblxLqjJYpc5XaU9+gKJ9F8mp9r5I4A==", "cpu": [ "riscv64" ], @@ -584,9 +584,9 @@ } }, "node_modules/esbuild-linux-s390x": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.27.tgz", - "integrity": "sha512-CD/D4tj0U4UQjELkdNlZhQ8nDHU5rBn6NGp47Hiz0Y7/akAY5i0oGadhEIg0WCY/HYVXFb3CsSPPwaKcTOW3bg==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.36.tgz", + "integrity": "sha512-g4FMdh//BBGTfVHjF6MO7Cz8gqRoDPzXWxRvWkJoGroKA18G9m0wddvPbEqcQf5Tbt2vSc1CIgag7cXwTmoTXg==", "cpu": [ "s390x" ], @@ -600,9 +600,9 @@ } }, "node_modules/esbuild-netbsd-64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.27.tgz", - "integrity": "sha512-h3mAld69SrO1VoaMpYl3a5FNdGRE/Nqc+E8VtHOag4tyBwhCQXxtvDDOAKOUQexBGca0IuR6UayQ4ntSX5ij1Q==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.36.tgz", + "integrity": "sha512-UB2bVImxkWk4vjnP62ehFNZ73lQY1xcnL5ZNYF3x0AG+j8HgdkNF05v67YJdCIuUJpBuTyCK8LORCYo9onSW+A==", "cpu": [ "x64" ], @@ -616,9 +616,9 @@ } }, "node_modules/esbuild-openbsd-64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.27.tgz", - "integrity": "sha512-xwSje6qIZaDHXWoPpIgvL+7fC6WeubHHv18tusLYMwL+Z6bEa4Pbfs5IWDtQdHkArtfxEkIZz77944z8MgDxGw==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.36.tgz", + "integrity": "sha512-NvGB2Chf8GxuleXRGk8e9zD3aSdRO5kLt9coTQbCg7WMGXeX471sBgh4kSg8pjx0yTXRt0MlrUDnjVYnetyivg==", "cpu": [ "x64" ], @@ -632,9 +632,9 @@ } }, "node_modules/esbuild-sunos-64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.27.tgz", - "integrity": "sha512-/nBVpWIDjYiyMhuqIqbXXsxBc58cBVH9uztAOIfWShStxq9BNBik92oPQPJ57nzWXRNKQUEFWr4Q98utDWz7jg==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.36.tgz", + "integrity": "sha512-VkUZS5ftTSjhRjuRLp+v78auMO3PZBXu6xl4ajomGenEm2/rGuWlhFSjB7YbBNErOchj51Jb2OK8lKAo8qdmsQ==", "cpu": [ "x64" ], @@ -648,9 +648,9 @@ } }, "node_modules/esbuild-windows-32": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.27.tgz", - "integrity": "sha512-Q9/zEjhZJ4trtWhFWIZvS/7RUzzi8rvkoaS9oiizkHTTKd8UxFwn/Mm2OywsAfYymgUYm8+y2b+BKTNEFxUekw==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.36.tgz", + "integrity": "sha512-bIar+A6hdytJjZrDxfMBUSEHHLfx3ynoEZXx/39nxy86pX/w249WZm8Bm0dtOAByAf4Z6qV0LsnTIJHiIqbw0w==", "cpu": [ "ia32" ], @@ -664,9 +664,9 @@ } }, "node_modules/esbuild-windows-64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.27.tgz", - "integrity": "sha512-b3y3vTSl5aEhWHK66ngtiS/c6byLf6y/ZBvODH1YkBM+MGtVL6jN38FdHUsZasCz9gFwYs/lJMVY9u7GL6wfYg==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.36.tgz", + "integrity": "sha512-+p4MuRZekVChAeueT1Y9LGkxrT5x7YYJxYE8ZOTcEfeUUN43vktSn6hUNsvxzzATrSgq5QqRdllkVBxWZg7KqQ==", "cpu": [ "x64" ], @@ -680,9 +680,9 @@ } }, "node_modules/esbuild-windows-arm64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.27.tgz", - "integrity": "sha512-I/reTxr6TFMcR5qbIkwRGvldMIaiBu2+MP0LlD7sOlNXrfqIl9uNjsuxFPGEG4IRomjfQ5q8WT+xlF/ySVkqKg==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.36.tgz", + "integrity": "sha512-fBB4WlDqV1m18EF/aheGYQkQZHfPHiHJSBYzXIo8yKehek+0BtBwo/4PNwKGJ5T0YK0oc8pBKjgwPbzSrPLb+Q==", "cpu": [ "arm64" ], @@ -1520,9 +1520,9 @@ } }, "node_modules/sass": { - "version": "1.49.9", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz", - "integrity": "sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==", + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.50.0.tgz", + "integrity": "sha512-cLsD6MEZ5URXHStxApajEh7gW189kkjn4Rc8DQweMyF+o5HF5nfEz8QYLMlPsTOD88DknatTmBWkOcw5/LnJLQ==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -1886,9 +1886,9 @@ }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true }, "ansi-styles": { @@ -2146,170 +2146,170 @@ } }, "esbuild": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.27.tgz", - "integrity": "sha512-MZQt5SywZS3hA9fXnMhR22dv0oPGh6QtjJRIYbgL1AeqAoQZE+Qn5ppGYQAoHv/vq827flj4tIJ79Mrdiwk46Q==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.36.tgz", + "integrity": "sha512-HhFHPiRXGYOCRlrhpiVDYKcFJRdO0sBElZ668M4lh2ER0YgnkLxECuFe7uWCf23FrcLc59Pqr7dHkTqmRPDHmw==", "dev": true, "requires": { - "esbuild-android-64": "0.14.27", - "esbuild-android-arm64": "0.14.27", - "esbuild-darwin-64": "0.14.27", - "esbuild-darwin-arm64": "0.14.27", - "esbuild-freebsd-64": "0.14.27", - "esbuild-freebsd-arm64": "0.14.27", - "esbuild-linux-32": "0.14.27", - "esbuild-linux-64": "0.14.27", - "esbuild-linux-arm": "0.14.27", - "esbuild-linux-arm64": "0.14.27", - "esbuild-linux-mips64le": "0.14.27", - "esbuild-linux-ppc64le": "0.14.27", - "esbuild-linux-riscv64": "0.14.27", - "esbuild-linux-s390x": "0.14.27", - "esbuild-netbsd-64": "0.14.27", - "esbuild-openbsd-64": "0.14.27", - "esbuild-sunos-64": "0.14.27", - "esbuild-windows-32": "0.14.27", - "esbuild-windows-64": "0.14.27", - "esbuild-windows-arm64": "0.14.27" + "esbuild-android-64": "0.14.36", + "esbuild-android-arm64": "0.14.36", + "esbuild-darwin-64": "0.14.36", + "esbuild-darwin-arm64": "0.14.36", + "esbuild-freebsd-64": "0.14.36", + "esbuild-freebsd-arm64": "0.14.36", + "esbuild-linux-32": "0.14.36", + "esbuild-linux-64": "0.14.36", + "esbuild-linux-arm": "0.14.36", + "esbuild-linux-arm64": "0.14.36", + "esbuild-linux-mips64le": "0.14.36", + "esbuild-linux-ppc64le": "0.14.36", + "esbuild-linux-riscv64": "0.14.36", + "esbuild-linux-s390x": "0.14.36", + "esbuild-netbsd-64": "0.14.36", + "esbuild-openbsd-64": "0.14.36", + "esbuild-sunos-64": "0.14.36", + "esbuild-windows-32": "0.14.36", + "esbuild-windows-64": "0.14.36", + "esbuild-windows-arm64": "0.14.36" } }, "esbuild-android-64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.27.tgz", - "integrity": "sha512-LuEd4uPuj/16Y8j6kqy3Z2E9vNY9logfq8Tq+oTE2PZVuNs3M1kj5Qd4O95ee66yDGb3isaOCV7sOLDwtMfGaQ==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.36.tgz", + "integrity": "sha512-jwpBhF1jmo0tVCYC/ORzVN+hyVcNZUWuozGcLHfod0RJCedTDTvR4nwlTXdx1gtncDqjk33itjO+27OZHbiavw==", "dev": true, "optional": true }, "esbuild-android-arm64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.27.tgz", - "integrity": "sha512-E8Ktwwa6vX8q7QeJmg8yepBYXaee50OdQS3BFtEHKrzbV45H4foMOeEE7uqdjGQZFBap5VAqo7pvjlyA92wznQ==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.36.tgz", + "integrity": "sha512-/hYkyFe7x7Yapmfv4X/tBmyKnggUmdQmlvZ8ZlBnV4+PjisrEhAvC3yWpURuD9XoB8Wa1d5dGkTsF53pIvpjsg==", "dev": true, "optional": true }, "esbuild-darwin-64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.27.tgz", - "integrity": "sha512-czw/kXl/1ZdenPWfw9jDc5iuIYxqUxgQ/Q+hRd4/3udyGGVI31r29LCViN2bAJgGvQkqyLGVcG03PJPEXQ5i2g==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.36.tgz", + "integrity": "sha512-kkl6qmV0dTpyIMKagluzYqlc1vO0ecgpviK/7jwPbRDEv5fejRTaBBEE2KxEQbTHcLhiiDbhG7d5UybZWo/1zQ==", "dev": true, "optional": true }, "esbuild-darwin-arm64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.27.tgz", - "integrity": "sha512-BEsv2U2U4o672oV8+xpXNxN9bgqRCtddQC6WBh4YhXKDcSZcdNh7+6nS+DM2vu7qWIWNA4JbRG24LUUYXysimQ==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.36.tgz", + "integrity": "sha512-q8fY4r2Sx6P0Pr3VUm//eFYKVk07C5MHcEinU1BjyFnuYz4IxR/03uBbDwluR6ILIHnZTE7AkTUWIdidRi1Jjw==", "dev": true, "optional": true }, "esbuild-freebsd-64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.27.tgz", - "integrity": "sha512-7FeiFPGBo+ga+kOkDxtPmdPZdayrSzsV9pmfHxcyLKxu+3oTcajeZlOO1y9HW+t5aFZPiv7czOHM4KNd0tNwCA==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.36.tgz", + "integrity": "sha512-Hn8AYuxXXRptybPqoMkga4HRFE7/XmhtlQjXFHoAIhKUPPMeJH35GYEUWGbjteai9FLFvBAjEAlwEtSGxnqWww==", "dev": true, "optional": true }, "esbuild-freebsd-arm64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.27.tgz", - "integrity": "sha512-8CK3++foRZJluOWXpllG5zwAVlxtv36NpHfsbWS7TYlD8S+QruXltKlXToc/5ZNzBK++l6rvRKELu/puCLc7jA==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.36.tgz", + "integrity": "sha512-S3C0attylLLRiCcHiJd036eDEMOY32+h8P+jJ3kTcfhJANNjP0TNBNL30TZmEdOSx/820HJFgRrqpNAvTbjnDA==", "dev": true, "optional": true }, "esbuild-linux-32": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.27.tgz", - "integrity": "sha512-qhNYIcT+EsYSBClZ5QhLzFzV5iVsP1YsITqblSaztr3+ZJUI+GoK8aXHyzKd7/CKKuK93cxEMJPpfi1dfsOfdw==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.36.tgz", + "integrity": "sha512-Eh9OkyTrEZn9WGO4xkI3OPPpUX7p/3QYvdG0lL4rfr73Ap2HAr6D9lP59VMF64Ex01LhHSXwIsFG/8AQjh6eNw==", "dev": true, "optional": true }, "esbuild-linux-64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.27.tgz", - "integrity": "sha512-ESjck9+EsHoTaKWlFKJpPZRN26uiav5gkI16RuI8WBxUdLrrAlYuYSndxxKgEn1csd968BX/8yQZATYf/9+/qg==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.36.tgz", + "integrity": "sha512-vFVFS5ve7PuwlfgoWNyRccGDi2QTNkQo/2k5U5ttVD0jRFaMlc8UQee708fOZA6zTCDy5RWsT5MJw3sl2X6KDg==", "dev": true, "optional": true }, "esbuild-linux-arm": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.27.tgz", - "integrity": "sha512-JnnmgUBdqLQO9hoNZQqNHFWlNpSX82vzB3rYuCJMhtkuaWQEmQz6Lec1UIxJdC38ifEghNTBsF9bbe8dFilnCw==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.36.tgz", + "integrity": "sha512-NhgU4n+NCsYgt7Hy61PCquEz5aevI6VjQvxwBxtxrooXsxt5b2xtOUXYZe04JxqQo+XZk3d1gcr7pbV9MAQ/Lg==", "dev": true, "optional": true }, "esbuild-linux-arm64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.27.tgz", - "integrity": "sha512-no6Mi17eV2tHlJnqBHRLekpZ2/VYx+NfGxKcBE/2xOMYwctsanCaXxw4zapvNrGE9X38vefVXLz6YCF8b1EHiQ==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.36.tgz", + "integrity": "sha512-24Vq1M7FdpSmaTYuu1w0Hdhiqkbto1I5Pjyi+4Cdw5fJKGlwQuw+hWynTcRI/cOZxBcBpP21gND7W27gHAiftw==", "dev": true, "optional": true }, "esbuild-linux-mips64le": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.27.tgz", - "integrity": "sha512-NolWP2uOvIJpbwpsDbwfeExZOY1bZNlWE/kVfkzLMsSgqeVcl5YMen/cedRe9mKnpfLli+i0uSp7N+fkKNU27A==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.36.tgz", + "integrity": "sha512-hZUeTXvppJN+5rEz2EjsOFM9F1bZt7/d2FUM1lmQo//rXh1RTFYzhC0txn7WV0/jCC7SvrGRaRz0NMsRPf8SIA==", "dev": true, "optional": true }, "esbuild-linux-ppc64le": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.27.tgz", - "integrity": "sha512-/7dTjDvXMdRKmsSxKXeWyonuGgblnYDn0MI1xDC7J1VQXny8k1qgNp6VmrlsawwnsymSUUiThhkJsI+rx0taNA==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.36.tgz", + "integrity": "sha512-1Bg3QgzZjO+QtPhP9VeIBhAduHEc2kzU43MzBnMwpLSZ890azr4/A9Dganun8nsqD/1TBcqhId0z4mFDO8FAvg==", "dev": true, "optional": true }, "esbuild-linux-riscv64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.27.tgz", - "integrity": "sha512-D+aFiUzOJG13RhrSmZgrcFaF4UUHpqj7XSKrIiCXIj1dkIkFqdrmqMSOtSs78dOtObWiOrFCDDzB24UyeEiNGg==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.36.tgz", + "integrity": "sha512-dOE5pt3cOdqEhaufDRzNCHf5BSwxgygVak9UR7PH7KPVHwSTDAZHDoEjblxLqjJYpc5XaU9+gKJ9F8mp9r5I4A==", "dev": true, "optional": true }, "esbuild-linux-s390x": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.27.tgz", - "integrity": "sha512-CD/D4tj0U4UQjELkdNlZhQ8nDHU5rBn6NGp47Hiz0Y7/akAY5i0oGadhEIg0WCY/HYVXFb3CsSPPwaKcTOW3bg==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.36.tgz", + "integrity": "sha512-g4FMdh//BBGTfVHjF6MO7Cz8gqRoDPzXWxRvWkJoGroKA18G9m0wddvPbEqcQf5Tbt2vSc1CIgag7cXwTmoTXg==", "dev": true, "optional": true }, "esbuild-netbsd-64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.27.tgz", - "integrity": "sha512-h3mAld69SrO1VoaMpYl3a5FNdGRE/Nqc+E8VtHOag4tyBwhCQXxtvDDOAKOUQexBGca0IuR6UayQ4ntSX5ij1Q==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.36.tgz", + "integrity": "sha512-UB2bVImxkWk4vjnP62ehFNZ73lQY1xcnL5ZNYF3x0AG+j8HgdkNF05v67YJdCIuUJpBuTyCK8LORCYo9onSW+A==", "dev": true, "optional": true }, "esbuild-openbsd-64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.27.tgz", - "integrity": "sha512-xwSje6qIZaDHXWoPpIgvL+7fC6WeubHHv18tusLYMwL+Z6bEa4Pbfs5IWDtQdHkArtfxEkIZz77944z8MgDxGw==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.36.tgz", + "integrity": "sha512-NvGB2Chf8GxuleXRGk8e9zD3aSdRO5kLt9coTQbCg7WMGXeX471sBgh4kSg8pjx0yTXRt0MlrUDnjVYnetyivg==", "dev": true, "optional": true }, "esbuild-sunos-64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.27.tgz", - "integrity": "sha512-/nBVpWIDjYiyMhuqIqbXXsxBc58cBVH9uztAOIfWShStxq9BNBik92oPQPJ57nzWXRNKQUEFWr4Q98utDWz7jg==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.36.tgz", + "integrity": "sha512-VkUZS5ftTSjhRjuRLp+v78auMO3PZBXu6xl4ajomGenEm2/rGuWlhFSjB7YbBNErOchj51Jb2OK8lKAo8qdmsQ==", "dev": true, "optional": true }, "esbuild-windows-32": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.27.tgz", - "integrity": "sha512-Q9/zEjhZJ4trtWhFWIZvS/7RUzzi8rvkoaS9oiizkHTTKd8UxFwn/Mm2OywsAfYymgUYm8+y2b+BKTNEFxUekw==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.36.tgz", + "integrity": "sha512-bIar+A6hdytJjZrDxfMBUSEHHLfx3ynoEZXx/39nxy86pX/w249WZm8Bm0dtOAByAf4Z6qV0LsnTIJHiIqbw0w==", "dev": true, "optional": true }, "esbuild-windows-64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.27.tgz", - "integrity": "sha512-b3y3vTSl5aEhWHK66ngtiS/c6byLf6y/ZBvODH1YkBM+MGtVL6jN38FdHUsZasCz9gFwYs/lJMVY9u7GL6wfYg==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.36.tgz", + "integrity": "sha512-+p4MuRZekVChAeueT1Y9LGkxrT5x7YYJxYE8ZOTcEfeUUN43vktSn6hUNsvxzzATrSgq5QqRdllkVBxWZg7KqQ==", "dev": true, "optional": true }, "esbuild-windows-arm64": { - "version": "0.14.27", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.27.tgz", - "integrity": "sha512-I/reTxr6TFMcR5qbIkwRGvldMIaiBu2+MP0LlD7sOlNXrfqIl9uNjsuxFPGEG4IRomjfQ5q8WT+xlF/ySVkqKg==", + "version": "0.14.36", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.36.tgz", + "integrity": "sha512-fBB4WlDqV1m18EF/aheGYQkQZHfPHiHJSBYzXIo8yKehek+0BtBwo/4PNwKGJ5T0YK0oc8pBKjgwPbzSrPLb+Q==", "dev": true, "optional": true }, @@ -2910,9 +2910,9 @@ } }, "sass": { - "version": "1.49.9", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz", - "integrity": "sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==", + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.50.0.tgz", + "integrity": "sha512-cLsD6MEZ5URXHStxApajEh7gW189kkjn4Rc8DQweMyF+o5HF5nfEz8QYLMlPsTOD88DknatTmBWkOcw5/LnJLQ==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", diff --git a/package.json b/package.json index 054015009..b49a2a07f 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,9 @@ "build:css:dev": "sass ./resources/sass:./public/dist", "build:css:watch": "sass ./resources/sass:./public/dist --watch", "build:css:production": "sass ./resources/sass:./public/dist -s compressed", - "build:js:dev": "esbuild --bundle ./resources/js/*.{js,mjs} --outdir=public/dist/ --sourcemap --target=es2020 --main-fields=module,main --format=esm", + "build:js:dev": "node dev/build/esbuild.js", "build:js:watch": "chokidar --initial \"./resources/**/*.js\" -c \"npm run build:js:dev\"", - "build:js:production": "NODE_ENV=production esbuild --bundle ./resources/js/*.{js,mjs} --outdir=public/dist/ --sourcemap --target=es2020 --main-fields=module,main --minify --format=esm", + "build:js:production": "node dev/build/esbuild.js production", "build": "npm-run-all --parallel build:*:dev", "production": "npm-run-all --parallel build:*:production", "dev": "npm-run-all --parallel watch livereload", @@ -16,11 +16,11 @@ }, "devDependencies": { "chokidar-cli": "^3.0", - "esbuild": "0.14.27", + "esbuild": "0.14.36", "livereload": "^0.9.3", "npm-run-all": "^4.1.5", "punycode": "^2.1.1", - "sass": "^1.49.9" + "sass": "^1.50.0" }, "dependencies": { "clipboard": "^2.0.10", diff --git a/resources/icons/swap-horizontal.svg b/resources/icons/swap-horizontal.svg new file mode 100644 index 000000000..7bd25dd7e --- /dev/null +++ b/resources/icons/swap-horizontal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/js/components/auto-suggest.js b/resources/js/components/auto-suggest.js index 68de49b4a..d1c15c00a 100644 --- a/resources/js/components/auto-suggest.js +++ b/resources/js/components/auto-suggest.js @@ -131,7 +131,7 @@ class AutoSuggest { return this.hideSuggestions(); } - this.list.innerHTML = suggestions.map(value => `
  • `).join(''); + this.list.innerHTML = suggestions.map(value => `
  • `).join(''); this.list.style.display = 'block'; for (const button of this.list.querySelectorAll('button')) { button.addEventListener('blur', this.hideSuggestionsIfFocusedLost.bind(this)); diff --git a/resources/js/components/code-editor.js b/resources/js/components/code-editor.js index f44de813d..4ee3531c5 100644 --- a/resources/js/components/code-editor.js +++ b/resources/js/components/code-editor.js @@ -96,7 +96,7 @@ class CodeEditor { this.historyDropDown.classList.toggle('hidden', historyKeys.length === 0); this.historyList.innerHTML = historyKeys.map(key => { const localTime = (new Date(parseInt(key))).toLocaleTimeString(); - return `
  • `; + return `
  • `; }).join(''); } diff --git a/resources/js/components/confirm-dialog.js b/resources/js/components/confirm-dialog.js new file mode 100644 index 000000000..858be1b85 --- /dev/null +++ b/resources/js/components/confirm-dialog.js @@ -0,0 +1,52 @@ +import {onSelect} from "../services/dom"; + +/** + * Custom equivalent of window.confirm() using our popup component. + * Is promise based so can be used like so: + * `const result = await dialog.show()` + * @extends {Component} + */ +class ConfirmDialog { + + setup() { + this.container = this.$el; + this.confirmButton = this.$refs.confirm; + + this.res = null; + + onSelect(this.confirmButton, () => { + this.sendResult(true); + this.getPopup().hide(); + }); + } + + show() { + this.getPopup().show(null, () => { + this.sendResult(false); + }); + + return new Promise((res, rej) => { + this.res = res; + }); + } + + /** + * @returns {Popup} + */ + getPopup() { + return this.container.components.popup; + } + + /** + * @param {Boolean} result + */ + sendResult(result) { + if (this.res) { + this.res(result) + this.res = null; + } + } + +} + +export default ConfirmDialog; \ No newline at end of file diff --git a/resources/js/components/index.js b/resources/js/components/index.js index fe348aba7..6a4a8c2b0 100644 --- a/resources/js/components/index.js +++ b/resources/js/components/index.js @@ -10,6 +10,7 @@ import chapterToggle from "./chapter-toggle.js" import codeEditor from "./code-editor.js" import codeHighlighter from "./code-highlighter.js" import collapsible from "./collapsible.js" +import confirmDialog from "./confirm-dialog" import customCheckbox from "./custom-checkbox.js" import detailsHighlighter from "./details-highlighter.js" import dropdown from "./dropdown.js" @@ -26,7 +27,6 @@ import headerMobileToggle from "./header-mobile-toggle.js" import homepageControl from "./homepage-control.js" import imageManager from "./image-manager.js" import imagePicker from "./image-picker.js" -import index from "./index.js" import listSortControl from "./list-sort-control.js" import markdownEditor from "./markdown-editor.js" import newUserPassword from "./new-user-password.js" @@ -66,6 +66,7 @@ const componentMapping = { "code-editor": codeEditor, "code-highlighter": codeHighlighter, "collapsible": collapsible, + "confirm-dialog": confirmDialog, "custom-checkbox": customCheckbox, "details-highlighter": detailsHighlighter, "dropdown": dropdown, @@ -82,7 +83,6 @@ const componentMapping = { "homepage-control": homepageControl, "image-manager": imageManager, "image-picker": imagePicker, - "index": index, "list-sort-control": listSortControl, "markdown-editor": markdownEditor, "new-user-password": newUserPassword, diff --git a/resources/js/components/page-editor.js b/resources/js/components/page-editor.js index dae807122..ce123e987 100644 --- a/resources/js/components/page-editor.js +++ b/resources/js/components/page-editor.js @@ -24,6 +24,8 @@ class PageEditor { this.draftDisplayIcon = this.$refs.draftDisplayIcon; this.changelogInput = this.$refs.changelogInput; this.changelogDisplay = this.$refs.changelogDisplay; + this.changeEditorButtons = this.$manyRefs.changeEditor; + this.switchDialogContainer = this.$refs.switchDialog; // Translations this.draftText = this.$opts.draftText; @@ -72,6 +74,9 @@ class PageEditor { // Draft Controls onSelect(this.saveDraftButton, this.saveDraft.bind(this)); onSelect(this.discardDraftButton, this.discardDraft.bind(this)); + + // Change editor controls + onSelect(this.changeEditorButtons, this.changeEditor.bind(this)); } setInitialFocus() { @@ -113,17 +118,21 @@ class PageEditor { data.markdown = this.editorMarkdown; } + let didSave = false; try { const resp = await window.$http.put(`/ajax/page/${this.pageId}/save-draft`, data); if (!this.isNewDraft) { this.toggleDiscardDraftVisibility(true); } + this.draftNotifyChange(`${resp.data.message} ${Dates.utcTimeStampToLocalTime(resp.data.timestamp)}`); this.autoSave.last = Date.now(); if (resp.data.warning && !this.shownWarningsCache.has(resp.data.warning)) { window.$events.emit('warning', resp.data.warning); this.shownWarningsCache.add(resp.data.warning); } + + didSave = true; } catch (err) { // Save the editor content in LocalStorage as a last resort, just in case. try { @@ -134,6 +143,7 @@ class PageEditor { window.$events.emit('error', this.autosaveFailText); } + return didSave; } draftNotifyChange(text) { @@ -185,6 +195,18 @@ class PageEditor { this.discardDraftWrap.classList.toggle('hidden', !show); } + async changeEditor(event) { + event.preventDefault(); + + const link = event.target.closest('a').href; + const dialog = this.switchDialogContainer.components['confirm-dialog']; + const [saved, confirmed] = await Promise.all([this.saveDraft(), dialog.show()]); + + if (saved && confirmed) { + window.location = link; + } + } + } export default PageEditor; \ No newline at end of file diff --git a/resources/js/components/popup.js b/resources/js/components/popup.js index 13cf69d21..ec111963f 100644 --- a/resources/js/components/popup.js +++ b/resources/js/components/popup.js @@ -34,7 +34,7 @@ class Popup { } hide(onComplete = null) { - fadeOut(this.container, 240, onComplete); + fadeOut(this.container, 120, onComplete); if (this.onkeyup) { window.removeEventListener('keyup', this.onkeyup); this.onkeyup = null; @@ -45,7 +45,7 @@ class Popup { } show(onComplete = null, onHide = null) { - fadeIn(this.container, 240, onComplete); + fadeIn(this.container, 120, onComplete); this.onkeyup = (event) => { if (event.key === 'Escape') { diff --git a/resources/js/services/drawio.js b/resources/js/services/drawio.js index 6e22919fb..dfca83211 100644 --- a/resources/js/services/drawio.js +++ b/resources/js/services/drawio.js @@ -43,6 +43,8 @@ function drawReceive(event) { drawEventSave(message); } else if (message.event === 'export') { drawEventExport(message); + } else if (message.event === 'configure') { + drawEventConfigure(); } } @@ -63,6 +65,12 @@ function drawEventInit() { }); } +function drawEventConfigure() { + const config = {}; + window.$events.emitPublic(iFrame, 'editor-drawio::configure', {config}); + drawPostMessage({action: 'configure', config}); +} + function drawEventClose() { window.removeEventListener('message', drawReceive); if (iFrame) document.body.removeChild(iFrame); diff --git a/resources/lang/ar/entities.php b/resources/lang/ar/entities.php index 3dc4c0473..dbb89bc8f 100644 --- a/resources/lang/ar/entities.php +++ b/resources/lang/ar/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'تم خفظ المسودة في ', 'pages_edit_delete_draft' => 'حذف المسودة', 'pages_edit_discard_draft' => 'التخلص من المسودة', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'تثبيت سجل التعديل', 'pages_edit_enter_changelog_desc' => 'ضع وصف مختصر للتعديلات التي تمت', 'pages_edit_enter_changelog' => 'أدخل سجل التعديل', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'حفظ الصفحة', 'pages_title' => 'عنوان الصفحة', 'pages_name' => 'اسم الصفحة', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'مراجعة #:id', 'pages_revisions_numbered_changes' => 'مراجعة #: رقم تعريفي التغييرات', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'سجل التعديل', 'pages_revisions_changes' => 'التعديلات', 'pages_revisions_current' => 'النسخة الحالية', diff --git a/resources/lang/ar/settings.php b/resources/lang/ar/settings.php index bbddd2f00..183e0b0b7 100755 --- a/resources/lang/ar/settings.php +++ b/resources/lang/ar/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'تفعيل حماية أكبر لرفع الصور؟', 'app_secure_images_toggle' => 'لمزيد من الحماية', 'app_secure_images_desc' => 'لتحسين أداء النظام, ستكون جميع الصور متاحة للعامة. هذا الخيار يضيف سلسلة من الحروف والأرقام العشوائية صعبة التخمين إلى رابط الصورة. الرجاء التأكد من تعطيل فهرسة المسارات لمنع الوصول السهل.', - 'app_editor' => 'محرر الصفحة', - 'app_editor_desc' => 'الرجاء اختيار محرر النص الذي سيستخدم من قبل جميع المستخدمين لتحرير الصفحات.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Custom HTML head content', 'app_custom_html_desc' => 'سيتم إدراج أي محتوى مضاف هنا في الجزء السفلي من قسم من كل صفحة. هذا أمر مفيد لتجاوز الأنماط أو إضافة رمز التحليل.', 'app_custom_html_disabled_notice' => 'تم تعطيل محتوى HTML الرئيسي المخصص في صفحة الإعدادات هذه لضمان عكس أي تغييرات متتالية.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'الوصول إلى واجهة برمجة تطبيقات النظام API', 'role_manage_settings' => 'إدارة إعدادات التطبيق', 'role_export_content' => 'Export content', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'أذونات الأصول', 'roles_system_warning' => 'اعلم أن الوصول إلى أي من الأذونات الثلاثة المذكورة أعلاه يمكن أن يسمح للمستخدم بتغيير امتيازاته الخاصة أو امتيازات الآخرين في النظام. قم بتعيين الأدوار مع هذه الأذونات فقط للمستخدمين الموثوق بهم.', 'role_asset_desc' => 'تتحكم هذه الأذونات في الوصول الافتراضي إلى الأصول داخل النظام. ستتجاوز الأذونات الخاصة بالكتب والفصول والصفحات هذه الأذونات.', diff --git a/resources/lang/bg/entities.php b/resources/lang/bg/entities.php index 0f4172151..a1faad7cd 100644 --- a/resources/lang/bg/entities.php +++ b/resources/lang/bg/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Черновата е запазена в ', 'pages_edit_delete_draft' => 'Изтрий чернова', 'pages_edit_discard_draft' => 'Отхвърляне на черновата', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Задайте регистър на промените', 'pages_edit_enter_changelog_desc' => 'Въведете кратко резюме на промените, които сте създали', 'pages_edit_enter_changelog' => 'Въведи регистър на промените', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Запазване на страницата', 'pages_title' => 'Заглавие на страницата', 'pages_name' => 'Име на страницата', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '№', 'pages_revisions_numbered' => 'Ревизия №:id', 'pages_revisions_numbered_changes' => 'Ревизия №:id Промени', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'История на промените', 'pages_revisions_changes' => 'Промени', 'pages_revisions_current' => 'Текуща версия', diff --git a/resources/lang/bg/settings.php b/resources/lang/bg/settings.php index e006d1425..cd004be65 100644 --- a/resources/lang/bg/settings.php +++ b/resources/lang/bg/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'По-висока сигурност при качване на изображения', 'app_secure_images_toggle' => 'Активиране на по-висока сигурност при качване на изображения', 'app_secure_images_desc' => 'С цел производителност, всички изображения са публични. Тази настройка добавя случаен, труден за отгатване низ от символи пред линка на изображението. Подсигурете, че индексите на директорията не са включени за да предотвратите лесен достъп.', - 'app_editor' => 'Редактор на страница', - 'app_editor_desc' => 'Изберете кой редактор да се използва от всички потребители за да редактират страници.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Персонализирано съдържание на HTML шапката', 'app_custom_html_desc' => 'Всяко съдържание, добавено тук, ще бъде поставено в долната част на секцията на всяка страница. Това е удобно за преобладаващи стилове или добавяне на код за анализ.', 'app_custom_html_disabled_notice' => 'Съдържанието на персонализираната HTML шапка е деактивирано на страницата с настройки, за да се гарантира, че евентуални лоши промени могат да бъдат върнати.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Достъп до API на системата', 'role_manage_settings' => 'Управление на настройките на приложението', 'role_export_content' => 'Експортирай съдържанието', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Настройки за достъп до активи', 'roles_system_warning' => 'Важно: Добавянето на потребител в някое от горните три роли може да му позволи да промени собствените си права или правата на другите в системата. Възлагайте тези роли само на доверени потребители.', 'role_asset_desc' => 'Тези настройки за достъп контролират достъпа по подразбиране до активите в системата. Настройките за достъп до книги, глави и страници ще отменят тези настройки.', diff --git a/resources/lang/bs/entities.php b/resources/lang/bs/entities.php index 74f6eeb21..afa5f39e9 100644 --- a/resources/lang/bs/entities.php +++ b/resources/lang/bs/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Draft saved at ', 'pages_edit_delete_draft' => 'Delete Draft', 'pages_edit_discard_draft' => 'Discard Draft', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Set Changelog', 'pages_edit_enter_changelog_desc' => 'Enter a brief description of the changes you\'ve made', 'pages_edit_enter_changelog' => 'Enter Changelog', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Save Page', 'pages_title' => 'Page Title', 'pages_name' => 'Page Name', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revision #:id', 'pages_revisions_numbered_changes' => 'Revision #:id Changes', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Changelog', 'pages_revisions_changes' => 'Changes', 'pages_revisions_current' => 'Trenutna verzija', diff --git a/resources/lang/bs/settings.php b/resources/lang/bs/settings.php index 7461c9d4e..af2dcc1e1 100644 --- a/resources/lang/bs/settings.php +++ b/resources/lang/bs/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Higher Security Image Uploads', 'app_secure_images_toggle' => 'Enable higher security image uploads', 'app_secure_images_desc' => 'For performance reasons, all images are public. This option adds a random, hard-to-guess string in front of image urls. Ensure directory indexes are not enabled to prevent easy access.', - 'app_editor' => 'Page Editor', - 'app_editor_desc' => 'Select which editor will be used by all users to edit pages.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Custom HTML Head Content', 'app_custom_html_desc' => 'Any content added here will be inserted into the bottom of the section of every page. This is handy for overriding styles or adding analytics code.', 'app_custom_html_disabled_notice' => 'Custom HTML head content is disabled on this settings page to ensure any breaking changes can be reverted.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Access system API', 'role_manage_settings' => 'Manage app settings', 'role_export_content' => 'Export content', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Asset Permissions', 'roles_system_warning' => 'Be aware that access to any of the above three permissions can allow a user to alter their own privileges or the privileges of others in the system. Only assign roles with these permissions to trusted users.', 'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.', diff --git a/resources/lang/ca/entities.php b/resources/lang/ca/entities.php index 6ba7808b3..179165828 100644 --- a/resources/lang/ca/entities.php +++ b/resources/lang/ca/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Esborrany desat ', 'pages_edit_delete_draft' => 'Suprimeix l\'esborrany', 'pages_edit_discard_draft' => 'Descarta l\'esborrany', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Defineix el registre de canvis', 'pages_edit_enter_changelog_desc' => 'Introduïu una breu descripció dels canvis que heu fet', 'pages_edit_enter_changelog' => 'Introduïu un registre de canvis', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Desa la pàgina', 'pages_title' => 'Títol de la pàgina', 'pages_name' => 'Nom de la pàgina', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => 'Núm. ', 'pages_revisions_numbered' => 'Revisió núm. :id', 'pages_revisions_numbered_changes' => 'Canvis de la revisió núm. :id', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Registre de canvis', 'pages_revisions_changes' => 'Canvis', 'pages_revisions_current' => 'Versió actual', diff --git a/resources/lang/ca/settings.php b/resources/lang/ca/settings.php index 788c3704e..a4dd95323 100755 --- a/resources/lang/ca/settings.php +++ b/resources/lang/ca/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Pujades d\'imatges amb més seguretat', 'app_secure_images_toggle' => 'Activa les pujades d\'imatges amb més seguretat', 'app_secure_images_desc' => 'Per motius de rendiment, totes les imatges són públiques. Aquesta opció afegeix una cadena aleatòria i difícil d\'endevinar al davant dels URL d\'imatges. Assegureu-vos que els índexs de directoris no estiguin activats per a evitar-hi l\'accés de manera fàcil.', - 'app_editor' => 'Editor de pàgines', - 'app_editor_desc' => 'Seleccioneu quin editor faran servir tots els usuaris per a editar les pàgines.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Contingut personalitzat a la capçalera HTML', 'app_custom_html_desc' => 'Aquí podeu afegir contingut que s\'inserirà a la part final de la secció de cada pàgina. És útil per a sobreescriure estils o afegir-hi codi d\'analítiques.', 'app_custom_html_disabled_notice' => 'El contingut personalitzat a la capçalera HTML es desactiva en aquesta pàgina de la configuració per a assegurar que qualsevol canvi que trenqui el web es pugui desfer.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Accedeix a l\'API del sistema', 'role_manage_settings' => 'Gestiona la configuració de l\'aplicació', 'role_export_content' => 'Export content', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Permisos de recursos', 'roles_system_warning' => 'Tingueu en compte que l\'accés a qualsevol dels tres permisos de dalt pot permetre que un usuari alteri els seus propis permisos o els privilegis d\'altres usuaris del sistema. Assigneu rols amb aquests permisos només a usuaris de confiança.', 'role_asset_desc' => 'Aquests permisos controlen l\'accés per defecte als recursos del sistema. Els permisos de llibres, capítols i pàgines tindran més importància que aquests permisos.', diff --git a/resources/lang/cs/entities.php b/resources/lang/cs/entities.php index 78355b4b4..ab0b103d6 100644 --- a/resources/lang/cs/entities.php +++ b/resources/lang/cs/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Koncept uložen v ', 'pages_edit_delete_draft' => 'Odstranit koncept', 'pages_edit_discard_draft' => 'Zahodit koncept', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Nastavit protokol změn', 'pages_edit_enter_changelog_desc' => 'Zadejte stručný popis změn, které jste provedli', 'pages_edit_enter_changelog' => 'Zadejte protokol změn', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Uložit stránku', 'pages_title' => 'Nadpis stránky', 'pages_name' => 'Název stránky', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => 'Č. ', 'pages_revisions_numbered' => 'Revize č. :id', 'pages_revisions_numbered_changes' => 'Změny revize č. :id', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Protokol změn', 'pages_revisions_changes' => 'Změny', 'pages_revisions_current' => 'Aktuální verze', diff --git a/resources/lang/cs/settings.php b/resources/lang/cs/settings.php index 6fa361502..7da021da4 100644 --- a/resources/lang/cs/settings.php +++ b/resources/lang/cs/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Nahrávat obrázky neveřejně a zabezpečeně', 'app_secure_images_toggle' => 'Zapnout bezpečnější nahrávání obrázků', 'app_secure_images_desc' => 'Z výkonnostních důvodů jsou všechny obrázky veřejně dostupné. Tato volba přidá do adresy obrázku náhodný řetězec, aby nikdo neodhadnul adresu obrázku. Ujistěte se, že server nezobrazuje v adresáři seznam souborů, což by přístup k přístup opět otevřelo.', - 'app_editor' => 'Editor stránek', - 'app_editor_desc' => 'Zvolte který editor budou užívat všichni uživatelé k úpravě stránek.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Vlastní obsah hlavičky HTML', 'app_custom_html_desc' => 'Cokoliv sem napíšete bude přidáno na konec sekce v každém místě této aplikace. To se hodí pro přidávání nebo změnu CSS stylů nebo přidání kódu pro analýzu používání (např.: google analytics.).', 'app_custom_html_disabled_notice' => 'Na této stránce nastavení je zakázán vlastní obsah HTML hlavičky, aby bylo zajištěno, že bude možné vrátit případnou problematickou úpravu.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Přístup k systémovému API', 'role_manage_settings' => 'Správa nastavení aplikace', 'role_export_content' => 'Exportovat obsah', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Obsahová oprávnění', 'roles_system_warning' => 'Berte na vědomí, že přístup k některému ze tří výše uvedených oprávnění může uživateli umožnit změnit svá vlastní oprávnění nebo oprávnění ostatních uživatelů v systému. Přiřazujte role s těmito oprávněními pouze důvěryhodným uživatelům.', 'role_asset_desc' => 'Tato oprávnění řídí přístup k obsahu napříč systémem. Specifická oprávnění na knihách, kapitolách a stránkách převáží tato nastavení.', diff --git a/resources/lang/da/entities.php b/resources/lang/da/entities.php index bea5ec91d..1766dede5 100644 --- a/resources/lang/da/entities.php +++ b/resources/lang/da/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Kladde gemt ved ', 'pages_edit_delete_draft' => 'Slet kladde', 'pages_edit_discard_draft' => 'Kassér kladde', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', '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', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Gem siden', 'pages_title' => 'Overskrift', 'pages_name' => 'Sidenavn', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revision #:id', 'pages_revisions_numbered_changes' => 'Revision #:id ændringer', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Ændringsoversigt', 'pages_revisions_changes' => 'Ændringer', 'pages_revisions_current' => 'Nuværende version', diff --git a/resources/lang/da/settings.php b/resources/lang/da/settings.php index 829450521..c3f333946 100644 --- a/resources/lang/da/settings.php +++ b/resources/lang/da/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Højere sikkerhed for billeduploads', 'app_secure_images_toggle' => 'Aktiver højere sikkerhed for billeduploads', 'app_secure_images_desc' => 'Af performanceårsager er alle billeder offentlige. Denne funktion tilføjer en tilfældig, vanskelig at gætte streng foran billed-url\'er. Sørg for, at mappeindeksering ikke er aktiveret for at forhindre nem adgang.', - 'app_editor' => 'Sideeditor', - 'app_editor_desc' => 'Vælg hvilken editor der skal bruges af alle brugere til at redigere sider.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Tilpasset HTML head indhold', 'app_custom_html_desc' => 'Alt indhold tilføjet her, vil blive indsat i bunden af sektionen på alle sider. Dette er brugbart til overskrivning af styles og tilføjelse af analytics kode.', 'app_custom_html_disabled_notice' => 'Brugerdefineret HTML head indhold er deaktiveret på denne indstillingsside for at, at ændringer kan rulles tilbage.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Tilgå system-API', 'role_manage_settings' => 'Administrer app-indstillinger', 'role_export_content' => 'Eksporter indhold', + 'role_editor_change' => 'Change page editor', '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.', diff --git a/resources/lang/de/entities.php b/resources/lang/de/entities.php index 8d0c0da54..e6f06a0b1 100644 --- a/resources/lang/de/entities.php +++ b/resources/lang/de/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Entwurf gespeichert um ', 'pages_edit_delete_draft' => 'Entwurf löschen', 'pages_edit_discard_draft' => 'Entwurf verwerfen', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Änderungsprotokoll hinzufügen', 'pages_edit_enter_changelog_desc' => 'Bitte geben Sie eine kurze Zusammenfassung Ihrer Änderungen ein', 'pages_edit_enter_changelog' => 'Änderungsprotokoll eingeben', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Seite speichern', 'pages_title' => 'Seitentitel', 'pages_name' => 'Seitenname', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revision #:id', 'pages_revisions_numbered_changes' => 'Revision #:id Änderungen', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Änderungsprotokoll', 'pages_revisions_changes' => 'Änderungen', 'pages_revisions_current' => 'Aktuelle Version', diff --git a/resources/lang/de/settings.php b/resources/lang/de/settings.php index 8c14f2734..d7ef9dc99 100644 --- a/resources/lang/de/settings.php +++ b/resources/lang/de/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Erhöhte Sicherheit für hochgeladene Bilder aktivieren?', 'app_secure_images_toggle' => 'Aktiviere Bild-Upload höherer Sicherheit', 'app_secure_images_desc' => 'Aus Leistungsgründen sind alle Bilder öffentlich sichtbar. Diese Option fügt zufällige, schwer zu eratene, Zeichenketten zu Bild-URLs hinzu. Stellen sie sicher, dass Verzeichnisindizes deaktiviert sind, um einen einfachen Zugriff zu verhindern.', - 'app_editor' => 'Seiteneditor', - 'app_editor_desc' => 'Wählen Sie den Editor aus, der von allen Benutzern genutzt werden soll, um Seiten zu editieren.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Benutzerdefinierter HTML Inhalt', 'app_custom_html_desc' => 'Jeder Inhalt, der hier hinzugefügt wird, wird am Ende der Sektion jeder Seite eingefügt. Diese kann praktisch sein, um CSS Styles anzupassen oder Analytics-Code hinzuzufügen.', 'app_custom_html_disabled_notice' => 'Benutzerdefinierte HTML-Kopfzeileninhalte sind auf dieser Einstellungsseite deaktiviert, um sicherzustellen, dass alle Änderungen rückgängig gemacht werden können.', @@ -155,6 +155,7 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung 'role_access_api' => 'Systemzugriffs-API', 'role_manage_settings' => 'Globaleinstellungen verwalten', 'role_export_content' => 'Inhalt exportieren', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Berechtigungen', 'roles_system_warning' => 'Beachten Sie, dass der Zugriff auf eine der oben genannten drei Berechtigungen einem Benutzer erlauben kann, seine eigenen Berechtigungen oder die Rechte anderer im System zu ändern. Weisen Sie nur Rollen, mit diesen Berechtigungen, vertrauenswürdigen Benutzern zu.', 'role_asset_desc' => 'Diese Berechtigungen gelten für den Standard-Zugriff innerhalb des Systems. Berechtigungen für Bücher, Kapitel und Seiten überschreiben diese Berechtigungenen.', @@ -202,7 +203,7 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung 'users_social_accounts' => 'Social-Media Konten', 'users_social_accounts_info' => 'Hier können Sie andere Social-Media-Konten für eine schnellere und einfachere Anmeldung verknüpfen. Wenn Sie ein Social-Media Konto lösen, bleibt der Zugriff erhalten. Entfernen Sie in diesem Falle die Berechtigung in Ihren Profil-Einstellungen des verknüpften Social-Media-Kontos.', 'users_social_connect' => 'Social-Media-Konto verknüpfen', - 'users_social_disconnect' => 'Social-Media-Konto lösen', + 'users_social_disconnect' => 'Social-Media-Konto löschen', 'users_social_connected' => ':socialAccount-Konto wurde erfolgreich mit dem Profil verknüpft.', 'users_social_disconnected' => ':socialAccount-Konto wurde erfolgreich vom Profil gelöst.', 'users_api_tokens' => 'API-Token', diff --git a/resources/lang/de_informal/entities.php b/resources/lang/de_informal/entities.php index b2b01f1a0..165afd4f5 100644 --- a/resources/lang/de_informal/entities.php +++ b/resources/lang/de_informal/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Entwurf gespeichert um ', 'pages_edit_delete_draft' => 'Entwurf löschen', 'pages_edit_discard_draft' => 'Entwurf verwerfen', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Änderungsprotokoll hinzufügen', 'pages_edit_enter_changelog_desc' => 'Bitte gib eine kurze Zusammenfassung Deiner Änderungen ein', 'pages_edit_enter_changelog' => 'Änderungsprotokoll eingeben', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Seite speichern', 'pages_title' => 'Seitentitel', 'pages_name' => 'Seitenname', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revision #:id', 'pages_revisions_numbered_changes' => 'Revision #:id Änderungen', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Änderungsprotokoll', 'pages_revisions_changes' => 'Änderungen', 'pages_revisions_current' => 'Aktuelle Version', diff --git a/resources/lang/de_informal/settings.php b/resources/lang/de_informal/settings.php index 1973bb182..1968e547a 100644 --- a/resources/lang/de_informal/settings.php +++ b/resources/lang/de_informal/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Erhöhte Sicherheit für hochgeladene Bilder aktivieren?', 'app_secure_images_toggle' => 'Aktiviere Bild-Upload mit höherer Sicherheit', 'app_secure_images_desc' => 'Aus Leistungsgründen sind alle Bilder öffentlich sichtbar. Diese Option fügt zufällige, schwer zu eratene, Zeichenketten zu Bild-URLs hinzu. Stellen sie sicher, dass Verzeichnisindizes deaktiviert sind, um einen einfachen Zugriff zu verhindern.', - 'app_editor' => 'Seiteneditor', - 'app_editor_desc' => 'Wähle den Editor aus, der von allen Benutzern genutzt werden soll, um Seiten zu editieren.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Benutzerdefinierter HTML Inhalt', 'app_custom_html_desc' => 'Jeder Inhalt, der hier hinzugefügt wird, wird am Ende der Sektion jeder Seite eingefügt. Diese kann praktisch sein, um CSS Styles anzupassen oder Analytics-Code hinzuzufügen.', 'app_custom_html_disabled_notice' => 'Benutzerdefinierte HTML-Kopfzeileninhalte sind auf dieser Einstellungsseite deaktiviert, um sicherzustellen, dass alle Änderungen rückgängig gemacht werden können.', @@ -155,6 +155,7 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung 'role_access_api' => 'Systemzugriffs-API', 'role_manage_settings' => 'Globaleinstellungen verwalten', 'role_export_content' => 'Inhalt exportieren', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Berechtigungen', 'roles_system_warning' => 'Beachten Sie, dass der Zugriff auf eine der oben genannten drei Berechtigungen einem Benutzer erlauben kann, seine eigenen Berechtigungen oder die Rechte anderer im System zu ändern. Weisen Sie nur Rollen, mit diesen Berechtigungen, vertrauenswürdigen Benutzern zu.', 'role_asset_desc' => 'Diese Berechtigungen gelten für den Standard-Zugriff innerhalb des Systems. Berechtigungen für Bücher, Kapitel und Seiten überschreiben diese Berechtigungenen.', diff --git a/resources/lang/en/entities.php b/resources/lang/en/entities.php index 4e4bbccd3..bed781b61 100644 --- a/resources/lang/en/entities.php +++ b/resources/lang/en/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Draft saved at ', 'pages_edit_delete_draft' => 'Delete Draft', 'pages_edit_discard_draft' => 'Discard Draft', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Set Changelog', 'pages_edit_enter_changelog_desc' => 'Enter a brief description of the changes you\'ve made', 'pages_edit_enter_changelog' => 'Enter Changelog', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Save Page', 'pages_title' => 'Page Title', 'pages_name' => 'Page Name', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revision #:id', 'pages_revisions_numbered_changes' => 'Revision #:id Changes', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Changelog', 'pages_revisions_changes' => 'Changes', 'pages_revisions_current' => 'Current Version', diff --git a/resources/lang/en/settings.php b/resources/lang/en/settings.php index 7461c9d4e..af2dcc1e1 100755 --- a/resources/lang/en/settings.php +++ b/resources/lang/en/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Higher Security Image Uploads', 'app_secure_images_toggle' => 'Enable higher security image uploads', 'app_secure_images_desc' => 'For performance reasons, all images are public. This option adds a random, hard-to-guess string in front of image urls. Ensure directory indexes are not enabled to prevent easy access.', - 'app_editor' => 'Page Editor', - 'app_editor_desc' => 'Select which editor will be used by all users to edit pages.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Custom HTML Head Content', 'app_custom_html_desc' => 'Any content added here will be inserted into the bottom of the section of every page. This is handy for overriding styles or adding analytics code.', 'app_custom_html_disabled_notice' => 'Custom HTML head content is disabled on this settings page to ensure any breaking changes can be reverted.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Access system API', 'role_manage_settings' => 'Manage app settings', 'role_export_content' => 'Export content', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Asset Permissions', 'roles_system_warning' => 'Be aware that access to any of the above three permissions can allow a user to alter their own privileges or the privileges of others in the system. Only assign roles with these permissions to trusted users.', 'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.', diff --git a/resources/lang/es/entities.php b/resources/lang/es/entities.php index 6092c567f..1b579b360 100644 --- a/resources/lang/es/entities.php +++ b/resources/lang/es/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Borrador guardado ', 'pages_edit_delete_draft' => 'Borrar borrador', 'pages_edit_discard_draft' => 'Descartar borrador', + 'pages_edit_switch_to_markdown' => 'Cambiar a Editor Markdown', + 'pages_edit_switch_to_markdown_clean' => '(Limpiar Contenido)', + 'pages_edit_switch_to_markdown_stable' => '(Contenido Estable)', + 'pages_edit_switch_to_wysiwyg' => 'Cambiar a Editor WYSIWYG', 'pages_edit_set_changelog' => 'Ajustar Log de cambios', 'pages_edit_enter_changelog_desc' => 'Introduzca una breve descripción de los cambios que ha realizado', 'pages_edit_enter_changelog' => 'Entrar al Log de cambios', + 'pages_editor_switch_title' => 'Cambiar editor', + 'pages_editor_switch_are_you_sure' => '¿Está seguro de que desea cambiar el editor de esta página?', + 'pages_editor_switch_consider_following' => 'Considere lo siguiente al cambiar de editor:', + 'pages_editor_switch_consideration_a' => 'Una vez guardado, el nuevo editor será utilizado por cualquier usuario en el futuro, incluyendo aquellos que no puedan cambiar el tipo de editor por sí mismos.', + 'pages_editor_switch_consideration_b' => 'Esto puede llevar a una pérdida de detalle y sintaxis en ciertas circunstancias.', + 'pages_editor_switch_consideration_c' => 'Cambios en etiquetas o en el registro de cambios, realizados desde el último guardado, no persistirán a través de este cambio.', 'pages_save' => 'Guardar página', 'pages_title' => 'Título de página', 'pages_name' => 'Nombre de página', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revisión #:id', 'pages_revisions_numbered_changes' => 'Revisión #:id Cambios', + 'pages_revisions_editor' => 'Tipo de Editor', 'pages_revisions_changelog' => 'Log de cambios', 'pages_revisions_changes' => 'Cambios', 'pages_revisions_current' => 'Versión actual', diff --git a/resources/lang/es/settings.php b/resources/lang/es/settings.php index 52c4b320c..3e27359e3 100644 --- a/resources/lang/es/settings.php +++ b/resources/lang/es/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Mayor seguridad para subir imágenes', 'app_secure_images_toggle' => 'Habilitar mayor seguridad en la subida de imágenes', 'app_secure_images_desc' => 'Por razones de rendimiento, todas las imágenes son públicas. Esta opción agrega una cadena de texto larga difícil de adivinar. Asegúrese que los índices de directorio no están habilitados para evitar el acceso fácil a las imágenes.', - 'app_editor' => 'Editor de Páginas', - 'app_editor_desc' => 'Seleccione qué editor se usará por todos los usuarios para editar páginas.', + 'app_default_editor' => 'Editor de Página por defecto', + 'app_default_editor_desc' => 'Seleccione qué editor se utilizará por defecto cuando se editen nuevas páginas. Esto se puede anular a nivel de página si los permisos lo permiten.', 'app_custom_html' => 'Contenido de cabecera HTML personalizado', 'app_custom_html_desc' => 'Cualquier contenido agregado aquí será insertado al final de la sección de cada página. Esto es útil para sobreescribir estilos o agregar código para analíticas web.', 'app_custom_html_disabled_notice' => 'El contenido personalizado para la cabecera está deshabilitado en esta página de ajustes para permitir que cualquier cambio que rompa la funcionalidad pueda ser revertido.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'API de sistema de acceso', 'role_manage_settings' => 'Gestionar ajustes de la aplicación', 'role_export_content' => 'Exportar contenido', + 'role_editor_change' => 'Cambiar editor de página', 'role_asset' => 'Permisos de contenido', 'roles_system_warning' => 'Tenga en cuenta que el acceso a cualquiera de los tres permisos anteriores puede permitir a un usuario alterar sus propios privilegios o los privilegios de otros en el sistema. Sólo asignar roles con estos permisos a usuarios de confianza.', 'role_asset_desc' => 'Estos permisos controlan el acceso por defecto a los contenidos del sistema. Los permisos de Libros, Capítulos y Páginas sobreescribiran estos permisos.', diff --git a/resources/lang/es_AR/entities.php b/resources/lang/es_AR/entities.php index 526f660de..03702b245 100644 --- a/resources/lang/es_AR/entities.php +++ b/resources/lang/es_AR/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Borrador guardado el ', 'pages_edit_delete_draft' => 'Borrar borrador', 'pages_edit_discard_draft' => 'Descartar borrador', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Establecer cambios de registro', 'pages_edit_enter_changelog_desc' => 'Introduzca una breve descripción de los cambios que ha realizado', 'pages_edit_enter_changelog' => 'Entrar en cambio de registro', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Guardar página', 'pages_title' => 'Título de página', 'pages_name' => 'Nombre de página', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revisión #:id', 'pages_revisions_numbered_changes' => 'Cambios de Revisión #:id', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Registro de cambios', 'pages_revisions_changes' => 'Cambios', 'pages_revisions_current' => 'Versión actual', diff --git a/resources/lang/es_AR/settings.php b/resources/lang/es_AR/settings.php index d60334b5c..480644559 100644 --- a/resources/lang/es_AR/settings.php +++ b/resources/lang/es_AR/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => '¿Habilitar mayor seguridad para subir imágenes?', 'app_secure_images_toggle' => 'Habilitar seguridad alta para subir imágenes', 'app_secure_images_desc' => 'Por razones de rendimiento, todas las imágenes son públicas. Esta opción agrega una cadena larga difícil de adivinar, asegúrese que los índices de directorios no están habilitados para prevenir el acceso fácil a las imágenes.', - 'app_editor' => 'Editor de página', - 'app_editor_desc' => 'Seleccione cuál editor será usado por todos los usuarios para editar páginas.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Contenido de cabecera HTML personalizable', 'app_custom_html_desc' => 'Cualquier contenido agregado aquí será agregado al final de la sección de cada página. Esto es útil para sobreescribir estilos o agregar código para analíticas.', 'app_custom_html_disabled_notice' => 'El contenido personailzado para la cabecera HTML está deshabilitado en esta configuración para garantizar que cualquier cambio importante se pueda revertir.', @@ -153,6 +153,7 @@ return [ 'role_access_api' => 'API de sistema de acceso', 'role_manage_settings' => 'Gestionar ajustes de activos', 'role_export_content' => 'Exportar contenido', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Permisos de activos', 'roles_system_warning' => 'Tenga en cuenta que el acceso a cualquiera de los tres permisos anteriores puede permitir a un usuario modificar sus propios privilegios o los privilegios de otros usuarios en el sistema. Asignar roles con estos permisos sólo a usuarios de comfianza.', 'role_asset_desc' => 'Estos permisos controlan el acceso por defecto a los activos del sistema. Permisos definidos en Libros, Capítulos y Páginas ignorarán estos permisos.', diff --git a/resources/lang/et/entities.php b/resources/lang/et/entities.php index efcedbd5e..009a3d562 100644 --- a/resources/lang/et/entities.php +++ b/resources/lang/et/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Mustand salvestatud ', 'pages_edit_delete_draft' => 'Kustuta mustand', 'pages_edit_discard_draft' => 'Loobu mustandist', + 'pages_edit_switch_to_markdown' => 'Kasuta Markdown redaktorit', + 'pages_edit_switch_to_markdown_clean' => '(Puhas sisu)', + 'pages_edit_switch_to_markdown_stable' => '(Stabiilne sisu)', + 'pages_edit_switch_to_wysiwyg' => 'Kasuta WYSIWYG redaktorit', 'pages_edit_set_changelog' => 'Muudatuste logi', 'pages_edit_enter_changelog_desc' => 'Sisesta tehtud muudatuste lühikirjeldus', 'pages_edit_enter_changelog' => 'Salvesta muudatuste logi', + 'pages_editor_switch_title' => 'Vaheta redaktorit', + 'pages_editor_switch_are_you_sure' => 'Kas oled kindel, et soovid selle lehe redaktorit muuta?', + 'pages_editor_switch_consider_following' => 'Redaktori muutmisel pea meeles järgnevat:', + 'pages_editor_switch_consideration_a' => 'Pärast salvestamist kasutatakse valitud redaktorit ka tulevikus, sh. olukordades, kus ei pruugi olla võimalik redaktori tüüpi muuta.', + 'pages_editor_switch_consideration_b' => 'See võib teatud olukordades põhjustada detailide ja süntaksi kaotsiminekut.', + 'pages_editor_switch_consideration_c' => 'Viimasest salvestamisest saadik tehtud siltide ja muudatuste logi muudatused ei jää alles.', 'pages_save' => 'Salvesta leht', 'pages_title' => 'Lehe pealkiri', 'pages_name' => 'Lehe nimetus', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Redaktsioon #:id', 'pages_revisions_numbered_changes' => 'Redaktsiooni #:id muudatused', + 'pages_revisions_editor' => 'Redaktori tüüp', 'pages_revisions_changelog' => 'Muudatuste ajalugu', 'pages_revisions_changes' => 'Muudatused', 'pages_revisions_current' => 'Praegune versioon', diff --git a/resources/lang/et/settings.php b/resources/lang/et/settings.php index 309130eca..90727eef5 100644 --- a/resources/lang/et/settings.php +++ b/resources/lang/et/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Turvalisem piltide üleslaadimine', 'app_secure_images_toggle' => 'Lülita sisse turvalisem piltide üleslaadimine', 'app_secure_images_desc' => 'Jõudluse kaalutlustel on kõik pildifailid avalikult kättesaadavad. See valik lisab pildifailide URL-ide ette juhugenereeritud, raskesti arvatava stringi. Ligipääsu piiramiseks veendu, et kataloogide indekseerimine ei oleks lubatud.', - 'app_editor' => 'Redaktor', - 'app_editor_desc' => 'Vali, millist redaktorit kasutajad lehtede muutmiseks kasutavad.', + 'app_default_editor' => 'Vaikimisi lehe redaktor', + 'app_default_editor_desc' => 'Vali, millist redaktorit vaikimisi uute lehtede jaoks kasutada. Seda valikut saab õiguste olemasolul iga lehe jaoks eraldi muuta.', 'app_custom_html' => 'Kohandatud HTML päise sisu', 'app_custom_html_desc' => 'Siia lisatud sisu lisatakse iga lehe sektsiooni lõppu. See võimaldab stiile üle laadida või lisada analüütika koodi.', 'app_custom_html_disabled_notice' => 'Kohandatud HTML päise sisu on sellel lehel välja lülitatud, et probleemseid muudatusi saaks tagasi võtta.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Süsteemi API ligipääs', 'role_manage_settings' => 'Rakenduse seadete haldamine', 'role_export_content' => 'Sisu eksport', + 'role_editor_change' => 'Lehe redaktori muutmine', 'role_asset' => 'Sisu õigused', 'roles_system_warning' => 'Pane tähele, et ülalolevad kolm õigust võimaldavad kasutajal enda või teiste kasutajate õiguseid muuta. Määra nende õigustega roll ainult usaldusväärsetele kasutajatele.', 'role_asset_desc' => 'Need load kontrollivad vaikimisi ligipääsu süsteemis olevale sisule. Raamatute, peatükkide ja lehtede õigused rakenduvad esmajärjekorras.', diff --git a/resources/lang/eu/editor.php b/resources/lang/eu/editor.php index 5403f88bc..5381baf18 100644 --- a/resources/lang/eu/editor.php +++ b/resources/lang/eu/editor.php @@ -24,7 +24,7 @@ return [ 'width' => 'Zabalera', 'height' => 'Altuera', 'More' => 'Gehiago', - 'select' => 'Select...', + 'select' => 'Aukeratu...', // Toolbar 'formats' => 'Formatuak', @@ -53,33 +53,33 @@ return [ 'align_left' => 'Lerrokatu ezkerrean', 'align_center' => 'Lerrokatu erdian', 'align_right' => 'Lerrokatu eskuinean', - 'align_justify' => 'Justify', + 'align_justify' => 'Justifikatuta', 'list_bullet' => 'Buletdun zerrenda', 'list_numbered' => 'Zenbakitutako zerrenda', - 'list_task' => 'Task list', + 'list_task' => 'Zereginen zerrenda', 'indent_increase' => 'Handitu koska', 'indent_decrease' => 'Txikitu koska', 'table' => 'Taula', 'insert_image' => 'Irudia txertatu', - 'insert_image_title' => 'Insert/Edit Image', - 'insert_link' => 'Insert/edit link', - 'insert_link_title' => 'Insert/Edit Link', - 'insert_horizontal_line' => 'Insert horizontal line', - 'insert_code_block' => 'Insert code block', - 'insert_drawing' => 'Insert/edit drawing', - 'drawing_manager' => 'Drawing manager', - 'insert_media' => 'Insert/edit media', - 'insert_media_title' => 'Insert/Edit Media', - 'clear_formatting' => 'Clear formatting', - 'source_code' => 'Source code', - 'source_code_title' => 'Source Code', - 'fullscreen' => 'Fullscreen', - 'image_options' => 'Image options', + 'insert_image_title' => 'Aldatu/Txertatu irudia', + 'insert_link' => 'Txertatu/aldatu esteka', + 'insert_link_title' => 'Txertatu/Aldatu esteka', + 'insert_horizontal_line' => 'Txertatu linea horizontala', + 'insert_code_block' => 'Txertatu kode-blokea', + 'insert_drawing' => 'Txertatu marrazki berria', + 'drawing_manager' => 'Marrazki kudeaketa', + 'insert_media' => 'Txertatu/aldatu media', + 'insert_media_title' => 'Aldatu/Txertatu irudia', + 'clear_formatting' => 'Garbitu formatua', + 'source_code' => 'Iturburu kodea', + 'source_code_title' => 'Iturburu kodea', + 'fullscreen' => 'Pantaila osoa', + 'image_options' => 'Irudiaren aukerak', // Tables - 'table_properties' => 'Table properties', - 'table_properties_title' => 'Table Properties', - 'delete_table' => 'Delete table', + 'table_properties' => 'Taularen propietateak', + 'table_properties_title' => 'Taularen propietateak', + 'delete_table' => 'Ezabatu taula', 'insert_row_before' => 'Insert row before', 'insert_row_after' => 'Insert row after', 'delete_row' => 'Delete row', diff --git a/resources/lang/eu/entities.php b/resources/lang/eu/entities.php index 57be5a3ae..6c71e0c5b 100644 --- a/resources/lang/eu/entities.php +++ b/resources/lang/eu/entities.php @@ -29,184 +29,194 @@ return [ 'my_recently_viewed' => 'Nik Ikusitako azkenak', 'my_most_viewed_favourites' => 'Nire gehien ikusitako gogokoak', 'my_favourites' => 'Nire Gogokoenak', - 'no_pages_viewed' => 'You have not viewed any pages', + 'no_pages_viewed' => 'Ez daukazu ikusiriko orririk', 'no_pages_recently_created' => 'Ez da orrialderik sortu azkenaldian', 'no_pages_recently_updated' => 'Ez da orrialderik aldatu azkenaldian', 'export' => 'Esportatu', - 'export_html' => 'Contained Web File', + 'export_html' => 'Daukan web artxiboa', 'export_pdf' => 'PDF fitxategia', 'export_text' => 'Testu lauko fitxategiak', - 'export_md' => 'Markdown File', + 'export_md' => 'Markdown fitxategia', // Permissions and restrictions 'permissions' => 'Baimenak', - 'permissions_intro' => 'Once enabled, These permissions will take priority over any set role permissions.', + 'permissions_intro' => 'Behin hau aktibatuta, baimen hauek lehentasuna izango dute beste edozein rol-engainetik.', 'permissions_enable' => 'Baimena pertsonalizatuak Gaitu', 'permissions_save' => 'Gorde baimenak', 'permissions_owner' => 'Jabea', // Search 'search_results' => 'Bilaketaren emaitzak', - 'search_total_results_found' => ':count result found|:count total results found', + 'search_total_results_found' => ':count emaitza aurkitu dira|:count emaitza aurkitu dira guztira', 'search_clear' => 'Bilaketa testua garbitu', 'search_no_pages' => 'Ez da orririk aurkitu zure bilaketan', - 'search_for_term' => 'Search for :term', + 'search_for_term' => 'Bilatu honen arabera :term', 'search_more' => 'Emaitza gehiago', 'search_advanced' => 'Bilaketa aurreratua', 'search_terms' => 'Bilaketa-hitza', 'search_content_type' => 'Eduki Mota', 'search_exact_matches' => 'Bat etortze zehatza', - 'search_tags' => 'Tag Searches', + 'search_tags' => 'Etiketa bilaketak', 'search_options' => 'Aukerak', 'search_viewed_by_me' => 'Nik ikusiak', 'search_not_viewed_by_me' => 'Nik ikusi ez ditudanak', 'search_permissions_set' => 'Baimenak', - 'search_created_by_me' => 'Created by me', - 'search_updated_by_me' => 'Updated by me', - 'search_owned_by_me' => 'Owned by me', - 'search_date_options' => 'Date Options', - 'search_updated_before' => 'Updated before', - 'search_updated_after' => 'Updated after', - 'search_created_before' => 'Created before', - 'search_created_after' => 'Created after', - 'search_set_date' => 'Set Date', - 'search_update' => 'Update Search', + 'search_created_by_me' => 'Nik sortuak', + 'search_updated_by_me' => 'Nik eguneratuak', + 'search_owned_by_me' => 'Nire jabetazkoak', + 'search_date_options' => 'Data aukerak', + 'search_updated_before' => 'Aurretik eguneratuak', + 'search_updated_after' => 'Ondoren eguneratuak', + 'search_created_before' => 'Aurretik sortuak', + 'search_created_after' => 'Ondoren sortuak', + 'search_set_date' => 'Data finkatu', + 'search_update' => 'Eguneratu bilaketa', // Shelves - 'shelf' => 'Shelf', - 'shelves' => 'Shelves', - 'x_shelves' => ':count Shelf|:count Shelves', - 'shelves_long' => 'Bookshelves', - 'shelves_empty' => 'No shelves have been created', - 'shelves_create' => 'Create New Shelf', - 'shelves_popular' => 'Popular Shelves', - 'shelves_new' => 'New Shelves', - 'shelves_new_action' => 'New Shelf', - 'shelves_popular_empty' => 'The most popular shelves will appear here.', - 'shelves_new_empty' => 'The most recently created shelves will appear here.', - 'shelves_save' => 'Save Shelf', - 'shelves_books' => 'Books on this shelf', - 'shelves_add_books' => 'Add books to this shelf', - 'shelves_drag_books' => 'Drag books here to add them to this shelf', - 'shelves_empty_contents' => 'This shelf has no books assigned to it', - 'shelves_edit_and_assign' => 'Edit shelf to assign books', - 'shelves_edit_named' => 'Edit Bookshelf :name', - 'shelves_edit' => 'Edit Bookshelf', - 'shelves_delete' => 'Delete Bookshelf', - 'shelves_delete_named' => 'Delete Bookshelf :name', - 'shelves_delete_explain' => "This will delete the bookshelf with the name ':name'. Contained books will not be deleted.", - 'shelves_delete_confirmation' => 'Are you sure you want to delete this bookshelf?', - 'shelves_permissions' => 'Bookshelf Permissions', - 'shelves_permissions_updated' => 'Bookshelf Permissions Updated', - 'shelves_permissions_active' => 'Bookshelf Permissions Active', + 'shelf' => 'Apalategia', + 'shelves' => 'Apalategiak', + 'x_shelves' => ':count Apalategi|:count Apalategi', + 'shelves_long' => 'Liburu-Apalategi', + 'shelves_empty' => 'Ez da inolako apalategirik sortu', + 'shelves_create' => 'Apalategi berria sortu', + 'shelves_popular' => 'Apalategi esanguratsuak', + 'shelves_new' => 'Apalategi berriak', + 'shelves_new_action' => 'Apalategi berria', + 'shelves_popular_empty' => 'Apalategi ikusienak hemen agertuko dira.', + 'shelves_new_empty' => 'Berriki sorturiko apalategiak hemen agertuko dira.', + 'shelves_save' => 'Gorde apalategia', + 'shelves_books' => 'Apalategi honetako liburuak', + 'shelves_add_books' => 'Gehitu liburuak apalategi honetara', + 'shelves_drag_books' => 'Bota hona liburuak apalategi honetara gehitzeko', + 'shelves_empty_contents' => 'Apalategi honek ez dauka libururik', + 'shelves_edit_and_assign' => 'Apalategia editatu liburuak gehitzeko', + 'shelves_edit_named' => ':name liburu-apalategia editatu', + 'shelves_edit' => 'Liburu-apalategia editatu', + 'shelves_delete' => 'Apalategia ezabatu', + 'shelves_delete_named' => ':name apalategia ezabatu', + 'shelves_delete_explain' => "':name' apalategia ezabatuko du ekintza honek. bertan dauden liburuak ez dira ezabatuko.", + 'shelves_delete_confirmation' => 'Ziur zaude apalategi hau ezabatu nahi duzula?', + 'shelves_permissions' => 'Apalategi baimenak', + 'shelves_permissions_updated' => 'Apalategi baimenak eguneratuta', + 'shelves_permissions_active' => 'Apalategi baimenak aktibatuta', 'shelves_permissions_cascade_warning' => 'Permissions on bookshelves do not automatically cascade to contained books. This is because a book can exist on multiple shelves. Permissions can however be copied down to child books using the option found below.', - 'shelves_copy_permissions_to_books' => 'Copy Permissions to Books', - 'shelves_copy_permissions' => 'Copy Permissions', + 'shelves_copy_permissions_to_books' => 'Kopiatu baimenak liburura', + 'shelves_copy_permissions' => 'Gorde baimenak', 'shelves_copy_permissions_explain' => 'This will apply the current permission settings of this bookshelf to all books contained within. Before activating, ensure any changes to the permissions of this bookshelf have been saved.', - 'shelves_copy_permission_success' => 'Bookshelf permissions copied to :count books', + 'shelves_copy_permission_success' => 'Apalategi baimenak :count liburutan kopiatuta', // Books - 'book' => 'Book', - 'books' => 'Books', - 'x_books' => ':count Book|:count Books', + 'book' => 'Liburua', + 'books' => 'Liburuak', + 'x_books' => ':count Liburu|:count Liburu', 'books_empty' => 'Ez da orrialderik sortu', - 'books_popular' => 'Popular Books', + 'books_popular' => 'Liburu ikusienak', 'books_recent' => 'Azken liburuak', 'books_new' => 'Liburu berriak', 'books_new_action' => 'Liburu berria', - 'books_popular_empty' => 'The most popular books will appear here.', - 'books_new_empty' => 'The most recently created books will appear here.', + 'books_popular_empty' => 'Apalategi ikusienak hemen agertuko dira.', + 'books_new_empty' => 'Berriki sorturiko apalategiak hemen agertuko dira.', 'books_create' => 'Liburu berria sortu', 'books_delete' => 'Liburua ezabatu', - 'books_delete_named' => 'Delete Book :bookName', - 'books_delete_explain' => 'This will delete the book with the name \':bookName\'. All pages and chapters will be removed.', + 'books_delete_named' => ':bookName liburua ezabatuta', + 'books_delete_explain' => 'Honek \':bookName\' liburua ezabatuko du. bere orrialde eta kapitulu guztiak ezabatuak izango dira.', 'books_delete_confirmation' => 'Ziur zaude liburu hau ezabatu nahi duzula?', 'books_edit' => 'Editatu liburua', - 'books_edit_named' => 'Edit Book :bookName', + 'books_edit_named' => 'Editatu :bookName liburua', 'books_form_book_name' => 'Liburu izena', - 'books_save' => 'Save Book', - 'books_permissions' => 'Book Permissions', - 'books_permissions_updated' => 'Book Permissions Updated', - 'books_empty_contents' => 'No pages or chapters have been created for this book.', - 'books_empty_create_page' => 'Create a new page', - 'books_empty_sort_current_book' => 'Sort the current book', + 'books_save' => 'Gorde Liburua', + 'books_permissions' => 'Liburu baimenak', + 'books_permissions_updated' => 'Liburu baimenak eguneratuta', + 'books_empty_contents' => 'Ez da orri edo kapitulurik sortu liburu honentzat.', + 'books_empty_create_page' => 'Sortu orrialde berria', + 'books_empty_sort_current_book' => 'Ordenatu uneko liburu hau', 'books_empty_add_chapter' => 'Kapitulu berria gehitu', - 'books_permissions_active' => 'Book Permissions Active', + 'books_permissions_active' => 'Liburu baimenak aktibatuta', 'books_search_this' => 'Bilatu liburu hau', - 'books_navigation' => 'Book Navigation', - 'books_sort' => 'Sort Book Contents', - 'books_sort_named' => 'Sort Book :bookName', + 'books_navigation' => 'Liburu nabigazioa', + 'books_sort' => 'Ordenatu liburu edukiak', + 'books_sort_named' => 'Ordenatu :bookName liburua', 'books_sort_name' => 'Ordenatu izenaren arabera', 'books_sort_created' => 'Ordenatu argitaratze-dataren arabera', - 'books_sort_updated' => 'Sort by Updated Date', - 'books_sort_chapters_first' => 'Chapters First', - 'books_sort_chapters_last' => 'Chapters Last', - 'books_sort_show_other' => 'Show Other Books', - 'books_sort_save' => 'Save New Order', - 'books_copy' => 'Copy Book', - 'books_copy_success' => 'Book successfully copied', + 'books_sort_updated' => 'Ordenatu aldaketa-dataren arabera', + 'books_sort_chapters_first' => 'Lehen kapitulua', + 'books_sort_chapters_last' => 'Azken kapitulua', + 'books_sort_show_other' => 'Erakutsi beste liburuak', + 'books_sort_save' => 'Gorde agindu berria', + 'books_copy' => 'Kopiatu liburua', + 'books_copy_success' => 'Ondo kopiatu da', // Chapters 'chapter' => 'Kapitulua', 'chapters' => 'Kapituluak', - 'x_chapters' => ':count Chapter|:count Chapters', - 'chapters_popular' => 'Popular Chapters', - 'chapters_new' => 'New Chapter', - 'chapters_create' => 'Create New Chapter', + 'x_chapters' => ':count Kapitulu|:count Kapitulu', + 'chapters_popular' => 'Kapitulu ikusienak', + 'chapters_new' => 'Kopiatu kapitulua', + 'chapters_create' => 'Sortu kapitulu berria', 'chapters_delete' => 'Kapitulua ezabatu', - 'chapters_delete_named' => 'Delete Chapter :chapterName', + 'chapters_delete_named' => ':chapterName kapitulua ezabatu', 'chapters_delete_explain' => 'This will delete the chapter with the name \':chapterName\'. All pages that exist within this chapter will also be deleted.', 'chapters_delete_confirm' => 'Ziur kapitulu hau ezabatu nahi duzula?', 'chapters_edit' => 'Kapitulua aldatu', 'chapters_edit_named' => 'Edit Chapter :chapterName', 'chapters_save' => 'Kapitulua gorde', - 'chapters_move' => 'Move Chapter', + 'chapters_move' => 'Kapitulua mugitu', 'chapters_move_named' => 'Move Chapter :chapterName', 'chapter_move_success' => 'Chapter moved to :bookName', - 'chapters_copy' => 'Copy Chapter', - 'chapters_copy_success' => 'Chapter successfully copied', + 'chapters_copy' => 'Kapitulua kopiatu', + 'chapters_copy_success' => 'Kapitulua egoki kopiatua', 'chapters_permissions' => 'Chapter Permissions', - 'chapters_empty' => 'No pages are currently in this chapter.', + 'chapters_empty' => 'Ez dago orrialderik kapitulu honetan.', 'chapters_permissions_active' => 'Chapter Permissions Active', 'chapters_permissions_success' => 'Chapter Permissions Updated', 'chapters_search_this' => 'Search this chapter', // Pages - 'page' => 'Page', - 'pages' => 'Pages', + 'page' => 'Orria', + 'pages' => 'Orriak', 'x_pages' => ':count Page|:count Pages', - 'pages_popular' => 'Popular Pages', - 'pages_new' => 'New Page', - 'pages_attachments' => 'Attachments', - 'pages_navigation' => 'Page Navigation', - 'pages_delete' => 'Delete Page', + 'pages_popular' => 'Orrialde ikusienak', + 'pages_new' => 'Orrialde berria', + 'pages_attachments' => 'Eranskinak', + 'pages_navigation' => 'Nabigazio orrialdea', + 'pages_delete' => 'Ezabatu orria', 'pages_delete_named' => 'Delete Page :pageName', 'pages_delete_draft_named' => 'Delete Draft Page :pageName', 'pages_delete_draft' => 'Delete Draft Page', - 'pages_delete_success' => 'Page deleted', + 'pages_delete_success' => 'Orria ezabatua', 'pages_delete_draft_success' => 'Draft page deleted', - 'pages_delete_confirm' => 'Are you sure you want to delete this page?', + 'pages_delete_confirm' => 'Ziur al zaude orri hau ezabatu nahi duzula?', 'pages_delete_draft_confirm' => 'Are you sure you want to delete this draft page?', 'pages_editing_named' => 'Editing Page :pageName', 'pages_edit_draft_options' => 'Draft Options', - 'pages_edit_save_draft' => 'Save Draft', + 'pages_edit_save_draft' => 'Gorde zirriborroa', 'pages_edit_draft' => 'Edit Page Draft', - 'pages_editing_draft' => 'Editing Draft', - 'pages_editing_page' => 'Editing Page', + 'pages_editing_draft' => 'Editatu zirriborroa', + 'pages_editing_page' => 'Editatu orrialdea', 'pages_edit_draft_save_at' => 'Draft saved at ', - 'pages_edit_delete_draft' => 'Delete Draft', - 'pages_edit_discard_draft' => 'Discard Draft', + 'pages_edit_delete_draft' => 'Ezabatu zirriborroa', + 'pages_edit_discard_draft' => 'Baztertu zirriborroa', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Set Changelog', 'pages_edit_enter_changelog_desc' => 'Enter a brief description of the changes you\'ve made', 'pages_edit_enter_changelog' => 'Enter Changelog', - 'pages_save' => 'Save Page', - 'pages_title' => 'Page Title', - 'pages_name' => 'Page Name', - 'pages_md_editor' => 'Editor', - 'pages_md_preview' => 'Preview', - 'pages_md_insert_image' => 'Insert Image', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', + 'pages_save' => 'Gorde orrialdea', + 'pages_title' => 'Orrialdearen titulua', + 'pages_name' => 'Orrialdearen izena', + 'pages_md_editor' => 'Editorea', + 'pages_md_preview' => 'Aurrebista', + 'pages_md_insert_image' => 'Txertatu irudia', 'pages_md_insert_link' => 'Insert Entity Link', - 'pages_md_insert_drawing' => 'Insert Drawing', + 'pages_md_insert_drawing' => 'Txertatu marrazki berria', 'pages_not_in_chapter' => 'Page is not in a chapter', 'pages_move' => 'Move Page', 'pages_move_success' => 'Page moved to ":parentName"', @@ -220,22 +230,23 @@ return [ 'pages_revisions_named' => 'Page Revisions for :pageName', 'pages_revision_named' => 'Page Revision for :pageName', 'pages_revision_restored_from' => 'Restored from #:id; :summary', - 'pages_revisions_created_by' => 'Created By', - 'pages_revisions_date' => 'Revision Date', + 'pages_revisions_created_by' => 'Sortzailea', + 'pages_revisions_date' => 'Berrikuspen data', 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revision #:id', 'pages_revisions_numbered_changes' => 'Revision #:id Changes', - 'pages_revisions_changelog' => 'Changelog', - 'pages_revisions_changes' => 'Changes', - 'pages_revisions_current' => 'Current Version', - 'pages_revisions_preview' => 'Preview', - 'pages_revisions_restore' => 'Restore', + 'pages_revisions_editor' => 'Editor Type', + 'pages_revisions_changelog' => 'Aldaketen erregistroa', + 'pages_revisions_changes' => 'Aldaketak', + 'pages_revisions_current' => 'Uneko bertsioa', + 'pages_revisions_preview' => 'Aurrebista', + 'pages_revisions_restore' => 'Berreskuratu', 'pages_revisions_none' => 'This page has no revisions', 'pages_copy_link' => 'Copy Link', - 'pages_edit_content_link' => 'Edit Content', + 'pages_edit_content_link' => 'Editatu edukia', 'pages_permissions_active' => 'Page Permissions Active', 'pages_initial_revision' => 'Initial publish', - 'pages_initial_name' => 'New Page', + 'pages_initial_name' => 'Orrialde berria', 'pages_editing_draft_notification' => 'You are currently editing a draft that was last saved :timeDiff.', 'pages_draft_edited_notification' => 'This page has been updated by since that time. It is recommended that you discard this draft.', 'pages_draft_page_changed_since_creation' => 'This page has been updated since this draft was created. It is recommended that you discard this draft or take care not to overwrite any page changes.', @@ -248,19 +259,19 @@ return [ ], 'pages_draft_discarded' => 'Draft discarded, The editor has been updated with the current page content', 'pages_specific' => 'Specific Page', - 'pages_is_template' => 'Page Template', + 'pages_is_template' => 'Orrialde txantiloia', // Editor Sidebar - 'page_tags' => 'Page Tags', - 'chapter_tags' => 'Chapter Tags', - 'book_tags' => 'Book Tags', - 'shelf_tags' => 'Shelf Tags', - 'tag' => 'Tag', - 'tags' => 'Tags', - 'tag_name' => 'Tag Name', + 'page_tags' => 'Orrialde etiketak', + 'chapter_tags' => 'Kapitulu etiketak', + 'book_tags' => 'Liburu etiketak', + 'shelf_tags' => 'Apalategi etiketak', + 'tag' => 'Etiketa', + 'tags' => 'Etiketak', + 'tag_name' => 'Etiketa izena', 'tag_value' => 'Tag Value (Optional)', 'tags_explain' => "Add some tags to better categorise your content. \n You can assign a value to a tag for more in-depth organisation.", - 'tags_add' => 'Add another tag', + 'tags_add' => 'Beste bat gehitu', 'tags_remove' => 'Remove this tag', 'tags_usages' => 'Total tag usages', 'tags_assigned_pages' => 'Assigned to Pages', @@ -268,29 +279,29 @@ return [ 'tags_assigned_books' => 'Assigned to Books', 'tags_assigned_shelves' => 'Assigned to Shelves', 'tags_x_unique_values' => ':count unique values', - 'tags_all_values' => 'All values', + 'tags_all_values' => 'Balio guztiak', 'tags_view_tags' => 'View Tags', 'tags_view_existing_tags' => 'View existing tags', 'tags_list_empty_hint' => 'Tags can be assigned via the page editor sidebar or while editing the details of a book, chapter or shelf.', - 'attachments' => 'Attachments', + 'attachments' => 'Eranskinak', 'attachments_explain' => 'Upload some files or attach some links to display on your page. These are visible in the page sidebar.', 'attachments_explain_instant_save' => 'Changes here are saved instantly.', - 'attachments_items' => 'Attached Items', - 'attachments_upload' => 'Upload File', + 'attachments_items' => 'Atxikiak', + 'attachments_upload' => 'Kargatu artxiboak', 'attachments_link' => 'Attach Link', 'attachments_set_link' => 'Set Link', 'attachments_delete' => 'Are you sure you want to delete this attachment?', 'attachments_dropzone' => 'Drop files or click here to attach a file', - 'attachments_no_files' => 'No files have been uploaded', + 'attachments_no_files' => 'Ez da igo fitxategirik', 'attachments_explain_link' => 'You can attach a link if you\'d prefer not to upload a file. This can be a link to another page or a link to a file in the cloud.', - 'attachments_link_name' => 'Link Name', + 'attachments_link_name' => 'Loturaren izena', 'attachment_link' => 'Attachment link', - 'attachments_link_url' => 'Link to file', + 'attachments_link_url' => 'Fitxategiarentzako esteka', 'attachments_link_url_hint' => 'Url of site or file', 'attach' => 'Attach', 'attachments_insert_link' => 'Add Attachment Link to Page', 'attachments_edit_file' => 'Edit File', - 'attachments_edit_file_name' => 'File Name', + 'attachments_edit_file_name' => 'Fitxategi izena', 'attachments_edit_drop_upload' => 'Drop files or click here to upload and overwrite', 'attachments_order_updated' => 'Attachment order updated', 'attachments_updated_success' => 'Attachment details updated', @@ -314,25 +325,25 @@ return [ 'profile_not_created_shelves' => ':userName has not created any shelves', // Comments - 'comment' => 'Comment', - 'comments' => 'Comments', - 'comment_add' => 'Add Comment', - 'comment_placeholder' => 'Leave a comment here', + 'comment' => 'Iruzkina', + 'comments' => 'Iruzkinak', + 'comment_add' => 'Iruzkina gehitu', + 'comment_placeholder' => 'Utzi iruzkin bat hemen', 'comment_count' => '{0} No Comments|{1} 1 Comment|[2,*] :count Comments', - 'comment_save' => 'Save Comment', + 'comment_save' => 'Iruzkina gorde', 'comment_saving' => 'Saving comment...', 'comment_deleting' => 'Deleting comment...', - 'comment_new' => 'New Comment', + 'comment_new' => 'Iruzkin berria', 'comment_created' => 'commented :createDiff', 'comment_updated' => 'Updated :updateDiff by :username', 'comment_deleted_success' => 'Comment deleted', - 'comment_created_success' => 'Comment added', - 'comment_updated_success' => 'Comment updated', - 'comment_delete_confirm' => 'Are you sure you want to delete this comment?', + 'comment_created_success' => 'Iruzkina gehituta', + 'comment_updated_success' => 'Iruzkina gehituta', + 'comment_delete_confirm' => 'Ziur zaude iruzkin hau ezabatu nahi duzula?', 'comment_in_reply_to' => 'In reply to :commentId', // Revision - 'revision_delete_confirm' => 'Are you sure you want to delete this revision?', + 'revision_delete_confirm' => 'Ziur zaude hau ezabatu nahi duzula?', 'revision_restore_confirm' => 'Are you sure you want to restore this revision? The current page contents will be replaced.', 'revision_delete_success' => 'Revision deleted', 'revision_cannot_delete_latest' => 'Cannot delete the latest revision.', diff --git a/resources/lang/eu/errors.php b/resources/lang/eu/errors.php index 250d5d92f..bd25e49d5 100644 --- a/resources/lang/eu/errors.php +++ b/resources/lang/eu/errors.php @@ -20,10 +20,10 @@ return [ 'ldap_cannot_connect' => 'Ezin izan da ldap zerbitzarira konektatu, hasierako konexioak huts egin du', 'saml_already_logged_in' => 'Saioa aurretik hasita dago', 'saml_user_not_registered' => ':name erabiltzailea ez dago erregistratua eta erregistro automatikoa ezgaituta dago', - 'saml_no_email_address' => 'Could not find an email address, for this user, in the data provided by the external authentication system', - 'saml_invalid_response_id' => 'The request from the external authentication system is not recognised by a process started by this application. Navigating back after a login could cause this issue.', + 'saml_no_email_address' => 'Ezin izan dugu posta helbiderik aurkitu erabiltzaile honentzat, kanpoko autentifikazio zerbitzuak bidalitako datuetan', + 'saml_invalid_response_id' => 'Kanpoko egiazkotasun-sistemaren eskaria ez du onartzen aplikazio honek abiarazitako prozesu batek. Loginean atzera egitea izan daiteke arrazoia.', 'saml_fail_authed' => 'Login using :system failed, system did not provide successful authorization', - 'oidc_already_logged_in' => 'Already logged in', + 'oidc_already_logged_in' => 'Dagoeneko saioa hasita', 'oidc_user_not_registered' => 'The user :name is not registered and automatic registration is disabled', 'oidc_no_email_address' => 'Could not find an email address, for this user, in the data provided by the external authentication system', 'oidc_fail_authed' => 'Login using :system failed, system did not provide successful authorization', @@ -84,13 +84,13 @@ return [ 'empty_comment' => 'Cannot add an empty comment.', // Error pages - '404_page_not_found' => 'Page Not Found', + '404_page_not_found' => 'Ez da orrialdea aurkitu', 'sorry_page_not_found' => 'Sorry, The page you were looking for could not be found.', 'sorry_page_not_found_permission_warning' => 'If you expected this page to exist, you might not have permission to view it.', - 'image_not_found' => 'Image Not Found', + 'image_not_found' => 'Irudia Ez da Aurkitu', 'image_not_found_subtitle' => 'Sorry, The image file you were looking for could not be found.', 'image_not_found_details' => 'If you expected this image to exist it might have been deleted.', - 'return_home' => 'Return to home', + 'return_home' => 'Itzuli hasierara', 'error_occurred' => 'Akats bat gertatu da', 'app_down' => ':appName is down right now', 'back_soon' => 'It will be back up soon.', diff --git a/resources/lang/eu/settings.php b/resources/lang/eu/settings.php index dac1e107e..dbac076c8 100644 --- a/resources/lang/eu/settings.php +++ b/resources/lang/eu/settings.php @@ -27,17 +27,17 @@ return [ 'app_secure_images' => 'Goi Segurtasuneko irudiak', 'app_secure_images_toggle' => 'Goi Segurtasuneko irudiak aktibatu', 'app_secure_images_desc' => 'Antzezpen arrazoiengatik, irudi guztiak publikoak dira. Aukera honek ausazko lokarri bat gehitzen du irudiaren aurrean. Segurtasun-indizeek ezin dute sarrera erraza eragotzi.', - 'app_editor' => 'Orri editorea', - 'app_editor_desc' => 'Aukeratu zein editore erabiliko duten erabiltzaile guztiek orriak editatzeko.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'HTML pertsonalizatuko goiburu edukia', 'app_custom_html_desc' => 'Hemen sarturiko edozein eduki eremuko behekaldean sartuko da orrialde guztietan. Honek estiloak gainditzeko edo analitika-kodea gehitzeko balio du.', - 'app_custom_html_disabled_notice' => 'Custom HTML head content is disabled on this settings page to ensure any breaking changes can be reverted.', + 'app_custom_html_disabled_notice' => 'HTML edukiera desgaituta dago konfigurazio-orri honetan, edozein aldaketa eten daitekeela bermatzeko.', 'app_logo' => 'Aplikazioaren logoa', - 'app_logo_desc' => 'This image should be 43px in height.
    Large images will be scaled down.', + 'app_logo_desc' => 'Irudi honek 43px izan behar du altueran.
    Irudi handiagoak txikitu egingo dira.', 'app_primary_color' => 'Aplikazioaren kolore lehenetsia', - 'app_primary_color_desc' => 'Sets the primary color for the application including the banner, buttons, and links.', + 'app_primary_color_desc' => 'Konfiguratu aplikaziorako kolore nagusia, botoi, banner eta estekak barne.', 'app_homepage' => 'Aplikazioko hasiera orria', - 'app_homepage_desc' => 'Select a view to show on the homepage instead of the default view. Page permissions are ignored for selected pages.', + 'app_homepage_desc' => 'Aukeratu hasierako orriko bista, defektuzkoa beharrean. Orrialde baimenak ez dira kontutan hartuko aukeratutako orrialdeentzat.', 'app_homepage_select' => 'Aukeratu Orria', 'app_footer_links' => 'Beheko aldeko estekak', 'app_footer_links_desc' => 'Add links to show within the site footer. These will be displayed at the bottom of most pages, including those that do not require login. You can use a label of "trans::" to use system-defined translations. For example: Using "trans::common.privacy_policy" will provide the translated text "Privacy Policy" and "trans::common.terms_of_service" will provide the translated text "Terms of Service".', @@ -112,18 +112,18 @@ return [ 'recycle_bin_restore_notification' => 'Restored :count total items from the recycle bin.', // Audit Log - 'audit' => 'Audit Log', + 'audit' => 'Auditoretza erregistroak', 'audit_desc' => 'This audit log displays a list of activities tracked in the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.', - 'audit_event_filter' => 'Event Filter', + 'audit_event_filter' => 'Gertakari filtroa', 'audit_event_filter_no_filter' => 'Filtrorik ez', - 'audit_deleted_item' => 'Deleted Item', - 'audit_deleted_item_name' => 'Name: :name', + 'audit_deleted_item' => 'Ezabatutako edukiak', + 'audit_deleted_item_name' => 'Izena :name', 'audit_table_user' => 'Erabiltzailea', 'audit_table_event' => 'Gertaera', 'audit_table_related' => 'Related Item or Detail', 'audit_table_ip' => 'IP helbidea', 'audit_table_date' => 'Azken aktibitate data', - 'audit_date_from' => 'Date Range From', + 'audit_date_from' => 'Data tartea', 'audit_date_to' => 'Data tartea', // Role Settings @@ -131,20 +131,20 @@ return [ 'role_user_roles' => 'Erabiltzailearen rola', 'role_create' => 'Rol berria sortu', 'role_create_success' => 'Rola ondo sortu da', - 'role_delete' => 'Delete Role', + 'role_delete' => 'Ezabatu Rol-a', 'role_delete_confirm' => 'This will delete the role with the name \':roleName\'.', 'role_delete_users_assigned' => 'This role has :userCount users assigned to it. If you would like to migrate the users from this role select a new role below.', - 'role_delete_no_migration' => "Don't migrate users", - 'role_delete_sure' => 'Are you sure you want to delete this role?', - 'role_delete_success' => 'Role successfully deleted', - 'role_edit' => 'Edit Role', - 'role_details' => 'Role Details', - 'role_name' => 'Role Name', + 'role_delete_no_migration' => "Ez migratu erabiltzaileak", + 'role_delete_sure' => 'Ziur zaude rol hau ezabatu nahi duzula?', + 'role_delete_success' => 'Rola ezabatua', + 'role_edit' => 'Editatu rola', + 'role_details' => 'Ireki xehetasunak', + 'role_name' => 'Rol izena', 'role_desc' => 'Short Description of Role', 'role_mfa_enforced' => 'Requires Multi-Factor Authentication', 'role_external_auth_id' => 'External Authentication IDs', 'role_system' => 'System Permissions', - 'role_manage_users' => 'Manage users', + 'role_manage_users' => 'Erabiltzaileak kudeatu', 'role_manage_roles' => 'Manage roles & role permissions', 'role_manage_entity_permissions' => 'Manage all book, chapter & page permissions', 'role_manage_own_entity_permissions' => 'Manage permissions on own book, chapter & pages', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Sistemako APIra sarrera', 'role_manage_settings' => 'Kudeatu aplikazio ezarpenak', 'role_export_content' => 'Exportatu edukia', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Fitxategi baimenak', 'roles_system_warning' => 'Be aware that access to any of the above three permissions can allow a user to alter their own privileges or the privileges of others in the system. Only assign roles with these permissions to trusted users.', 'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.', @@ -178,13 +179,13 @@ return [ 'users_password' => 'Erabiltzaile pasahitza', 'users_password_desc' => 'Set a password used to log-in to the application. This must be at least 8 characters long.', 'users_send_invite_text' => 'You can choose to send this user an invitation email which allows them to set their own password otherwise you can set their password yourself.', - 'users_send_invite_option' => 'Send user invite email', - 'users_external_auth_id' => 'External Authentication ID', + 'users_send_invite_option' => 'Erabiltzailea gonbidatzeko emaila bidali', + 'users_external_auth_id' => 'Kanpo autentikazioa IDa', 'users_external_auth_id_desc' => 'This is the ID used to match this user when communicating with your external authentication system.', 'users_password_warning' => 'Only fill the below if you would like to change your password.', 'users_system_public' => 'This user represents any guest users that visit your instance. It cannot be used to log in but is assigned automatically.', 'users_delete' => 'Ezabatu erabiltzailea', - 'users_delete_named' => 'Delete user :userName', + 'users_delete_named' => ':userName erabiltzailea ezabatu', 'users_delete_warning' => 'This will fully delete this user with the name \':userName\' from the system.', 'users_delete_confirm' => 'Are you sure you want to delete this user?', 'users_migrate_ownership' => 'Migrate Ownership', @@ -192,7 +193,7 @@ return [ 'users_none_selected' => 'Erabiltzailerik ez duzu aukeratu', 'users_edit' => 'Erabiltzaile editatu', 'users_edit_profile' => 'Editatu profila', - 'users_avatar' => 'User Avatar', + 'users_avatar' => 'Erabiltzaile avatarra', 'users_avatar_desc' => 'Select an image to represent this user. This should be approx 256px square.', 'users_preferred_language' => 'Hobetsitako hizkuntza', 'users_preferred_language_desc' => 'This option will change the language used for the user-interface of the application. This will not affect any user-created content.', @@ -202,10 +203,10 @@ return [ 'users_social_disconnect' => 'Deskonektatu kontua', 'users_social_connected' => ':socialAccount account was successfully attached to your profile.', 'users_social_disconnected' => ':socialAccount account was successfully disconnected from your profile.', - 'users_api_tokens' => 'API Tokens', + 'users_api_tokens' => 'API tokenak', 'users_api_tokens_none' => 'No API tokens have been created for this user', - 'users_api_tokens_create' => 'Create Token', - 'users_api_tokens_expires' => 'Expires', + 'users_api_tokens_create' => 'Sortu Tokena', + 'users_api_tokens_expires' => 'Iraungita', 'users_api_tokens_docs' => 'API dokumentazioa', 'users_mfa' => 'Multi-Factor Authentication', 'users_mfa_desc' => 'Setup multi-factor authentication as an extra layer of security for your user account.', @@ -213,7 +214,7 @@ return [ 'users_mfa_configure' => 'Configure Methods', // API Tokens - 'user_api_token_create' => 'Create API Token', + 'user_api_token_create' => 'Sortu Tokena', 'user_api_token_name' => 'Izena', 'user_api_token_name_desc' => 'Give your token a readable name as a future reminder of its intended purpose.', 'user_api_token_expiry' => 'Iraungitze data', diff --git a/resources/lang/fa/entities.php b/resources/lang/fa/entities.php index 0a335b118..2eab19661 100644 --- a/resources/lang/fa/entities.php +++ b/resources/lang/fa/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'پیش نویس ذخیره شده در', 'pages_edit_delete_draft' => 'حذف پیش نویس', 'pages_edit_discard_draft' => 'دور انداختن پیش نویس', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'تنظیم تغییرات', 'pages_edit_enter_changelog_desc' => 'توضیح مختصری از تغییراتی که ایجاد کرده اید وارد کنید', 'pages_edit_enter_changelog' => 'وارد کردن تغییرات', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'ذخیره صفحه', 'pages_title' => 'عنوان صفحه', 'pages_name' => 'نام صفحه', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'تجدید نظر #:id', 'pages_revisions_numbered_changes' => 'بازبینی #:id تغییرات', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'لیست تغییرات', 'pages_revisions_changes' => 'تغییرات', 'pages_revisions_current' => 'نسخه‌ی جاری', diff --git a/resources/lang/fa/settings.php b/resources/lang/fa/settings.php index d5ddd2f23..5ab82290d 100644 --- a/resources/lang/fa/settings.php +++ b/resources/lang/fa/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'آپلود تصویر با امنیت بالاتر', 'app_secure_images_toggle' => 'آپلود تصویر با امنیت بالاتر', 'app_secure_images_desc' => 'به دلایل عملکرد، همه تصاویر عمومی هستند. این گزینه یک رشته تصادفی و غیرقابل حدس زدن را در مقابل آدرس های تصویر اضافه می کند. برای جلوگیری از دسترسی آسان، اطمینان حاصل کنید که فهرست های دایرکتوری فعال نیستند.', - 'app_editor' => 'ویرایشگر صفحه', - 'app_editor_desc' => 'انتخاب کنید کدام ویرایشگر توسط همه کاربران برای ویرایش صفحات استفاده شود.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'محتوای اصلی HTML سفارشی', 'app_custom_html_desc' => 'هر محتوای اضافه شده در اینجا در پایین بخش هر صفحه درج می شود. این برای تغییر سبک ها یا اضافه کردن کد تجزیه و تحلیل مفید است.', 'app_custom_html_disabled_notice' => 'محتوای سر HTML سفارشی در این صفحه تنظیمات غیرفعال است تا اطمینان حاصل شود که هر گونه تغییر شکسته می تواند برگردانده شود.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'دسترسی به API سیستم', 'role_manage_settings' => 'تنظیمات برنامه را مدیریت کنید', 'role_export_content' => 'صادرات محتوا', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'مجوزهای دارایی', 'roles_system_warning' => 'توجه داشته باشید که دسترسی به هر یک از سه مجوز فوق می‌تواند به کاربر اجازه دهد تا امتیازات خود یا امتیازات دیگران را در سیستم تغییر دهد. فقط نقش هایی را با این مجوزها به کاربران مورد اعتماد اختصاص دهید.', 'role_asset_desc' => 'این مجوزها دسترسی پیش‌فرض به دارایی‌های درون سیستم را کنترل می‌کنند. مجوزهای مربوط به کتاب‌ها، فصل‌ها و صفحات این مجوزها را لغو می‌کنند.', diff --git a/resources/lang/fr/entities.php b/resources/lang/fr/entities.php index d1fd92597..9537c0966 100644 --- a/resources/lang/fr/entities.php +++ b/resources/lang/fr/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Brouillon enregistré le ', 'pages_edit_delete_draft' => 'Supprimer le brouillon', 'pages_edit_discard_draft' => 'Jeter le brouillon', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Remplir le journal des changements', 'pages_edit_enter_changelog_desc' => 'Entrez une brève description des changements effectués', 'pages_edit_enter_changelog' => 'Ouvrir le journal des changements', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Enregistrer la page', 'pages_title' => 'Titre de la page', 'pages_name' => 'Nom de la page', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Révision #:id', 'pages_revisions_numbered_changes' => 'Modification #:id', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Journal des changements', 'pages_revisions_changes' => 'Changements', 'pages_revisions_current' => 'Version actuelle', diff --git a/resources/lang/fr/settings.php b/resources/lang/fr/settings.php index fa6cf85ff..1c57ad4c0 100644 --- a/resources/lang/fr/settings.php +++ b/resources/lang/fr/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Ajout d\'image sécurisé', '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_editor' => 'Éditeur des pages', - 'app_editor_desc' => 'Sélectionnez l\'éditeur qui sera utilisé pour modifier les pages.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'HTML personnalisé dans l\'en-tête', 'app_custom_html_desc' => 'Le contenu inséré ici sera ajouté en bas de la balise de toutes les pages. Vous pouvez l\'utiliser pour ajouter du CSS personnalisé ou un tracker analytique.', 'app_custom_html_disabled_notice' => 'Le contenu de l\'en-tête HTML personnalisé est désactivé sur cette page de paramètres pour garantir que les modifications les plus récentes puissent être annulées.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Accès à l\'API du système', 'role_manage_settings' => 'Gérer les préférences de l\'application', 'role_export_content' => 'Exporter le contenu', + 'role_editor_change' => 'Change page editor', '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', diff --git a/resources/lang/he/entities.php b/resources/lang/he/entities.php index d0add8d2e..ad49c895f 100644 --- a/resources/lang/he/entities.php +++ b/resources/lang/he/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'טיוטה נשמרה ב ', 'pages_edit_delete_draft' => 'מחק טיוטה', 'pages_edit_discard_draft' => 'התעלם מהטיוטה', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'הגדר יומן שינויים', 'pages_edit_enter_changelog_desc' => 'ציין תיאור קצר אודות השינויים שביצעת', 'pages_edit_enter_changelog' => 'הכנס יומן שינויים', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'שמור דף', 'pages_title' => 'כותרת דף', 'pages_name' => 'שם הדף', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'נוסח #:id', 'pages_revisions_numbered_changes' => 'שינויי נוסח #:id', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'יומן שינויים', 'pages_revisions_changes' => 'שינויים', 'pages_revisions_current' => 'גירסא נוכחית', diff --git a/resources/lang/he/settings.php b/resources/lang/he/settings.php index 5ba6bf3f5..e9cf47b27 100755 --- a/resources/lang/he/settings.php +++ b/resources/lang/he/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'העלאת תמונות מאובטחת', 'app_secure_images_toggle' => 'אפשר העלאת תמונות מאובטחת', 'app_secure_images_desc' => 'משיקולי ביצועים, כל התמונות הינן ציבוריות. אפשרות זו מוסיפה מחרוזת אקראית שקשה לנחש לכל כתובת של תמונה. אנא ודא שאפשרות הצגת תוכן התיקייה מבוטל.', - 'app_editor' => 'עורך הדפים', - 'app_editor_desc' => 'בחר באמצעות איזה עורך תתבצע עריכת הדפים', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'HTML מותאם אישית לחלק העליון', 'app_custom_html_desc' => 'כל קוד שיתווסף כאן, יופיע בתחתית תגית ה head של כל דף. חלק זה שימושי על מנת להגדיר עיצובי CSS והתקנת קוד Analytics', 'app_custom_html_disabled_notice' => 'קוד HTML מותאם מבוטל בדף ההגדרות על מנת לוודא ששינויים שגורמים לבעיה יוכלו להיות מבוטלים לאחר מכן', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'גש ל-API המערכת', 'role_manage_settings' => 'ניהול הגדרות יישום', 'role_export_content' => 'Export content', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'הרשאות משאבים', 'roles_system_warning' => 'שימו לב לכך שגישה לכל אחת משלושת ההרשאות הנ"ל יכולה לאפשר למשתמש לשנות את הפריווילגיות שלהם או של אחרים במערכת. הגדירו תפקידים להרשאות אלה למשתמשים בהם אתם בוטחים בלבד.', 'role_asset_desc' => 'הרשאות אלו שולטות בגישת ברירת המחדל למשאבים בתוך המערכת. הרשאות של ספרים, פרקים ודפים יגברו על הרשאות אלו.', diff --git a/resources/lang/hr/entities.php b/resources/lang/hr/entities.php index 333fdeb39..e5e57b22b 100644 --- a/resources/lang/hr/entities.php +++ b/resources/lang/hr/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Nacrt spremljen kao', 'pages_edit_delete_draft' => 'Izbriši nacrt', 'pages_edit_discard_draft' => 'Odbaci nacrt', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Postavi dnevnik promjena', 'pages_edit_enter_changelog_desc' => 'Ukratko opišite promjene koje ste napravili', 'pages_edit_enter_changelog' => 'Unesi dnevnik promjena', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Spremi stranicu', 'pages_title' => 'Naslov stranice', 'pages_name' => 'Ime stranice', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revizija #:id', 'pages_revisions_numbered_changes' => 'Revizija #:id Promjene', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Dnevnik promjena', 'pages_revisions_changes' => 'Promjene', 'pages_revisions_current' => 'Trenutna verzija', diff --git a/resources/lang/hr/settings.php b/resources/lang/hr/settings.php index 77735bf7d..cc7c5c89b 100644 --- a/resources/lang/hr/settings.php +++ b/resources/lang/hr/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Visoka razina sigurnosti prijenosa slika', 'app_secure_images_toggle' => 'Omogući visoku sigurnost prijenosa slika', 'app_secure_images_desc' => 'Zbog specifične izvedbe sve su slike javne. Osigurajte da indeksi direktorija nisu omogućeni kako bi se spriječio neovlašten pristup.', - 'app_editor' => 'Uređivač stranice', - 'app_editor_desc' => 'Odaberite uređivače stranica', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Prilagođeni HTML sadržaj', 'app_custom_html_desc' => 'Sav sadržaj dodan ovdje bit će umetnut na dno stranice. To je korisno za stiliziranje i dodavanje analitičkog koda.', 'app_custom_html_disabled_notice' => 'Prilagođeni HTML je onemogućen kako bi se osiguralo vraćanje promjena u slučaju kvara.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'API pristup', 'role_manage_settings' => 'Upravljanje postavkama aplikacija', 'role_export_content' => 'Export content', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Upravljanje vlasništvom', 'roles_system_warning' => 'Uzmite u obzir da pristup bilo kojem od ovih dopuštenja dozvoljavate korisniku upravljanje dopuštenjima ostalih u sustavu. Ova dopuštenja dodijelite pouzdanim korisnicima.', 'role_asset_desc' => 'Ova dopuštenja kontroliraju zadane pristupe. Dopuštenja za knjige, poglavlja i stranice ih poništavaju.', diff --git a/resources/lang/hu/entities.php b/resources/lang/hu/entities.php index f017d1371..58b44076f 100644 --- a/resources/lang/hu/entities.php +++ b/resources/lang/hu/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Vázlat elmentve:', 'pages_edit_delete_draft' => 'Vázlat törlése', 'pages_edit_discard_draft' => 'Vázlat elvetése', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Változásnapló beállítása', 'pages_edit_enter_changelog_desc' => 'A végrehajtott módosítások rövid leírása', 'pages_edit_enter_changelog' => 'Változásnapló megadása', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Oldal mentése', 'pages_title' => 'Oldal címe', 'pages_name' => 'Oldal neve', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Változat #:id', 'pages_revisions_numbered_changes' => '#:id változat módosításai', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Változásnapló', 'pages_revisions_changes' => 'Módosítások', 'pages_revisions_current' => 'Aktuális verzió', diff --git a/resources/lang/hu/settings.php b/resources/lang/hu/settings.php index 700bdc0de..5cd15c487 100644 --- a/resources/lang/hu/settings.php +++ b/resources/lang/hu/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Magasabb biztonságú képfeltöltés', 'app_secure_images_toggle' => 'Magasabb biztonságú képfeltöltés engedélyezése', 'app_secure_images_desc' => 'Teljesítmény optimalizálási okokból minden kép nyilvános. Ez a beállítás egy véletlenszerű, nehezen kitalálható karakterláncot illeszt a képek útvonalának elejére. Meg kell győződni róla, hogy a könnyű hozzáférés megakadályozása érdekében a könyvtár indexek nincsenek engedélyezve.', - 'app_editor' => 'Oldalszerkesztő', - 'app_editor_desc' => 'Annak kiválasztása, hogy a felhasználók melyik szerkesztőt használhatják az oldalak szerkesztéséhez.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Egyéni HTML fejléc tartalom', 'app_custom_html_desc' => 'Az itt hozzáadott bármilyen tartalom be lesz illesztve minden oldal szekciójának aljára. Ez hasznos a stílusok felülírásához van analitikai kódok hozzáadásához.', 'app_custom_html_disabled_notice' => 'Az egyéni HTML fejléc tartalom le van tiltva ezen a beállítási oldalon, hogy az esetleg hibásan megadott módosításokat vissza lehessen állítani.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Hozzáférés a rendszer API-hoz', 'role_manage_settings' => 'Alkalmazás beállításainak kezelése', 'role_export_content' => 'Tartalom exportálása', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Eszköz jogosultságok', 'roles_system_warning' => 'Be aware that access to any of the above three permissions can allow a user to alter their own privileges or the privileges of others in the system. Only assign roles with these permissions to trusted users.', 'role_asset_desc' => 'Ezek a jogosultság vezérlik a alapértelmezés szerinti hozzáférést a rendszerben található eszközökhöz. A könyvek, fejezetek és oldalak jogosultságai felülírják ezeket a jogosultságokat.', diff --git a/resources/lang/id/auth.php b/resources/lang/id/auth.php index 423c92ff6..d76a05a01 100644 --- a/resources/lang/id/auth.php +++ b/resources/lang/id/auth.php @@ -21,7 +21,7 @@ return [ 'email' => 'Email', 'password' => 'Kata Sandi', 'password_confirm' => 'Konfirmasi Kata Sandi', - 'password_hint' => 'Must be at least 8 characters', + 'password_hint' => 'Harus minimal 8 karakter', 'forgot_password' => 'Lupa Password?', 'remember_me' => 'Ingat saya', 'ldap_email_hint' => 'Harap masukkan email yang akan digunakan untuk akun ini.', @@ -77,13 +77,13 @@ return [ 'mfa_setup' => 'Setup Multi-Factor Authentication', 'mfa_setup_desc' => 'Setup multi-factor authentication as an extra layer of security for your user account.', 'mfa_setup_configured' => 'Already configured', - 'mfa_setup_reconfigure' => 'Reconfigure', + 'mfa_setup_reconfigure' => 'Konfigurasi ulang', 'mfa_setup_remove_confirmation' => 'Apakah Anda yakin ingin menghapus metode autentikasi multi-faktor ini?', 'mfa_setup_action' => 'Setup', 'mfa_backup_codes_usage_limit_warning' => 'You have less than 5 backup codes remaining, Please generate and store a new set before you run out of codes to prevent being locked out of your account.', - 'mfa_option_totp_title' => 'Mobile App', + 'mfa_option_totp_title' => 'Aplikasi Seluler', 'mfa_option_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.', - 'mfa_option_backup_codes_title' => 'Backup Codes', + 'mfa_option_backup_codes_title' => 'Kode Cadangan', 'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.', 'mfa_gen_confirm_and_enable' => 'Confirm and Enable', 'mfa_gen_backup_codes_title' => 'Backup Codes Setup', @@ -100,9 +100,9 @@ return [ 'mfa_verify_access_desc' => 'Your user account requires you to confirm your identity via an additional level of verification before you\'re granted access. Verify using one of your configured methods to continue.', 'mfa_verify_no_methods' => 'No Methods Configured', 'mfa_verify_no_methods_desc' => 'No multi-factor authentication methods could be found for your account. You\'ll need to set up at least one method before you gain access.', - 'mfa_verify_use_totp' => 'Verify using a mobile app', - 'mfa_verify_use_backup_codes' => 'Verify using a backup code', - 'mfa_verify_backup_code' => 'Backup Code', + 'mfa_verify_use_totp' => 'Verifikasi menggunakan aplikasi seluler', + 'mfa_verify_use_backup_codes' => 'Verifikasi menggunakan kode cadangan', + 'mfa_verify_backup_code' => 'Kode Cadangan', 'mfa_verify_backup_code_desc' => 'Enter one of your remaining backup codes below:', 'mfa_verify_backup_code_enter_here' => 'Enter backup code here', 'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:', diff --git a/resources/lang/id/editor.php b/resources/lang/id/editor.php index 827120292..88204b416 100644 --- a/resources/lang/id/editor.php +++ b/resources/lang/id/editor.php @@ -7,27 +7,27 @@ */ return [ // General editor terms - 'general' => 'General', - 'advanced' => 'Advanced', - 'none' => 'None', - 'cancel' => 'Cancel', - 'save' => 'Save', - 'close' => 'Close', + 'general' => 'Umum', + 'advanced' => 'Lanjutan', + 'none' => 'Tidak Ada', + 'cancel' => 'Batal', + 'save' => 'Simpan', + 'close' => 'Tutup', 'undo' => 'Undo', - 'redo' => 'Redo', - 'left' => 'Left', - 'center' => 'Center', - 'right' => 'Right', - 'top' => 'Top', - 'middle' => 'Middle', - 'bottom' => 'Bottom', - 'width' => 'Width', - 'height' => 'Height', - 'More' => 'More', - 'select' => 'Select...', + 'redo' => 'Ulangi', + 'left' => 'Kiri', + 'center' => 'Tengah', + 'right' => 'Kanan', + 'top' => 'Atas', + 'middle' => 'Sedang', + 'bottom' => 'Bawah', + 'width' => 'Lebar', + 'height' => 'Tinggi', + 'More' => 'Lebih Banyak', + 'select' => 'Pilih...', // Toolbar - 'formats' => 'Formats', + 'formats' => 'Format', 'header_large' => 'Large Header', 'header_medium' => 'Medium Header', 'header_small' => 'Small Header', @@ -37,12 +37,12 @@ return [ 'inline_code' => 'Inline code', 'callouts' => 'Callouts', 'callout_information' => 'Information', - 'callout_success' => 'Success', - 'callout_warning' => 'Warning', - 'callout_danger' => 'Danger', - 'bold' => 'Bold', + 'callout_success' => 'Sukses', + 'callout_warning' => 'Peringatan', + 'callout_danger' => 'Bahaya', + 'bold' => 'Berani', 'italic' => 'Italic', - 'underline' => 'Underline', + 'underline' => 'Garis Bawah', 'strikethrough' => 'Strikethrough', 'superscript' => 'Superscript', 'subscript' => 'Subscript', diff --git a/resources/lang/id/entities.php b/resources/lang/id/entities.php index 366776c86..65a9c4149 100644 --- a/resources/lang/id/entities.php +++ b/resources/lang/id/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Draf disimpan pada ', 'pages_edit_delete_draft' => 'Hapus Draf', 'pages_edit_discard_draft' => 'Buang Draf', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Atur Changelog', 'pages_edit_enter_changelog_desc' => 'Masukkan deskripsi singkat tentang perubahan yang Anda buat', 'pages_edit_enter_changelog' => 'Masuk ke Changelog', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Simpan Halaman', 'pages_title' => 'Judul Halaman', 'pages_name' => 'Nama Halaman', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revisi #:id', 'pages_revisions_numbered_changes' => 'Revisi #:id Berubah', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Changelog', 'pages_revisions_changes' => 'Perubahan', 'pages_revisions_current' => 'Versi sekarang', diff --git a/resources/lang/id/settings.php b/resources/lang/id/settings.php index 19221d40a..0f53c758c 100644 --- a/resources/lang/id/settings.php +++ b/resources/lang/id/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Unggahan Gambar Keamanan Lebih Tinggi', 'app_secure_images_toggle' => 'Aktifkan unggahan gambar dengan keamanan lebih tinggi', 'app_secure_images_desc' => 'Untuk alasan performa, semua gambar bersifat publik. Opsi ini menambahkan string acak yang sulit ditebak di depan url gambar. Pastikan indeks direktori tidak diaktifkan untuk mencegah akses mudah.', - 'app_editor' => 'Halaman Editor', - 'app_editor_desc' => 'Pilih editor mana yang akan digunakan oleh semua pengguna untuk mengedit halaman.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Kustom Konten HTML Head', 'app_custom_html_desc' => 'Konten apa pun yang ditambahkan di sini akan dimasukkan ke bagian bawah bagian dari setiap halaman. Ini berguna untuk mengganti gaya atau menambahkan kode analitik.', 'app_custom_html_disabled_notice' => 'Kustom konten HTML Head dinonaktifkan pada halaman pengaturan ini untuk memastikan setiap perubahan yang mengganggu dapat dikembalikan.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Akses Sistem API', 'role_manage_settings' => 'Kelola setelan aplikasi', 'role_export_content' => 'Export content', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Izin Aset', 'roles_system_warning' => 'Ketahuilah bahwa akses ke salah satu dari tiga izin di atas dapat memungkinkan pengguna untuk mengubah hak mereka sendiri atau orang lain dalam sistem. Hanya tetapkan peran dengan izin ini untuk pengguna tepercaya.', 'role_asset_desc' => 'Izin ini mengontrol akses default ke aset dalam sistem. Izin pada Buku, Bab, dan Halaman akan menggantikan izin ini.', diff --git a/resources/lang/id/validation.php b/resources/lang/id/validation.php index 36a3397f5..e1fcbc724 100644 --- a/resources/lang/id/validation.php +++ b/resources/lang/id/validation.php @@ -15,7 +15,7 @@ return [ 'alpha_dash' => ':attribute hanya boleh berisi huruf, angka, tanda hubung, dan garis bawah.', 'alpha_num' => ':attribute hanya boleh berisi huruf dan angka.', 'array' => ':attribute harus berupa larik.', - 'backup_codes' => 'The provided code is not valid or has already been used.', + 'backup_codes' => 'Kode yang diberikan tidak valid atau telah digunakan.', 'before' => ':attribute harus tanggal sebelum :date.', 'between' => [ 'numeric' => ':attribute harus di antara :min dan :max.', @@ -32,7 +32,7 @@ return [ 'digits_between' => ':attribute harus diantara :min dan :max digit.', 'email' => ':attrtibute Harus alamat e-mail yang valid.', 'ends_with' => ':attribute harus diakhiri dengan salah satu dari berikut ini: :values', - 'file' => 'The :attribute must be provided as a valid file.', + 'file' => ':attribute harus diberikan sebagai file yang valid.', 'filled' => ':attribute bidang diperlukan.', 'gt' => [ 'numeric' => ':attribute harus lebih besar dari :value.', @@ -100,7 +100,7 @@ return [ ], 'string' => ':attribute harus berupa string.', 'timezone' => ':attribute harus menjadi zona yang valid.', - 'totp' => 'The provided code is not valid or has expired.', + 'totp' => 'Kode yang diberikan tidak valid atau telah kedaluwarsa.', 'unique' => ':attribute sudah diambil.', 'url' => ':attribute format tidak valid.', 'uploaded' => 'Berkas tidak dapat diunggah. Server mungkin tidak menerima berkas dengan ukuran ini.', diff --git a/resources/lang/it/entities.php b/resources/lang/it/entities.php index 9c9c0d58d..ab4286d72 100755 --- a/resources/lang/it/entities.php +++ b/resources/lang/it/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Bozza salvata alle ', 'pages_edit_delete_draft' => 'Elimina Bozza', 'pages_edit_discard_draft' => 'Scarta Bozza', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Imposta Changelog', 'pages_edit_enter_changelog_desc' => 'Inserisci una breve descrizione dei cambiamenti che hai apportato', 'pages_edit_enter_changelog' => 'Inserisci Changelog', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Salva Pagina', 'pages_title' => 'Titolo Pagina', 'pages_name' => 'Nome Pagina', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revisione #:id', 'pages_revisions_numbered_changes' => 'Modifiche Revisione #:id', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Cambiamenti', 'pages_revisions_changes' => 'Cambiamenti', 'pages_revisions_current' => 'Versione Corrente', diff --git a/resources/lang/it/settings.php b/resources/lang/it/settings.php index 4445c2cb6..94f2de6f7 100755 --- a/resources/lang/it/settings.php +++ b/resources/lang/it/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Abilitare una sicurezza maggiore per le immagini caricate?', 'app_secure_images_toggle' => 'Abilita sicurezza aggiuntiva negli upload delle immagini', 'app_secure_images_desc' => 'Per una ragione di prestazioni, tutte le immagini sono pubbliche. Questa opzione aaggiunge una stringa, difficile da indovinare, random negli url delle immagini. Assicurati che il listing delle cartelle non sia abilitato per prevenire un accesso semplice.', - 'app_editor' => 'Editor pagine', - 'app_editor_desc' => 'Seleziona quale editor verrà usato da tutti gli utenti per modificare le pagine.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Contenuto Head HTML Custom', 'app_custom_html_desc' => 'Qualsiasi contenuto aggiunto qui verrà inserito alla fine della sezione di tutte le pagine. Questo è utile per sovrascrivere lo stile o aggiungere il codice per gli analytics.', 'app_custom_html_disabled_notice' => 'Il contenuto HTML personalizzato è disabilitato su questa pagina impostazioni per garantire che eventuali modifiche possano essere ripristinate.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'API sistema d\'accesso', 'role_manage_settings' => 'Gestire impostazioni app', 'role_export_content' => 'Esporta contenuto', + 'role_editor_change' => 'Change page editor', '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 di default alle entità. I permessi nei Libri, Capitoli e Pagine sovrascriveranno questi.', diff --git a/resources/lang/ja/activities.php b/resources/lang/ja/activities.php index b2845b27e..45eaa3287 100644 --- a/resources/lang/ja/activities.php +++ b/resources/lang/ja/activities.php @@ -53,15 +53,15 @@ return [ // Webhooks 'webhook_create' => 'created webhook', - 'webhook_create_notification' => 'Webhook successfully created', + 'webhook_create_notification' => 'Webhookが正常に作成されました', 'webhook_update' => 'updated webhook', - 'webhook_update_notification' => 'Webhook successfully updated', + 'webhook_update_notification' => 'Webhookが正常に更新されました', 'webhook_delete' => 'deleted webhook', - 'webhook_delete_notification' => 'Webhook successfully deleted', + 'webhook_delete_notification' => 'Webhookが正常に削除されました', // Users - 'user_update_notification' => 'User successfully updated', - 'user_delete_notification' => 'User successfully removed', + 'user_update_notification' => 'ユーザーが正常に更新されました', + 'user_delete_notification' => 'ユーザーが正常に削除されました', // Other 'commented_on' => 'がコメント:', diff --git a/resources/lang/ja/common.php b/resources/lang/ja/common.php index 70b961100..7c6cc1f59 100644 --- a/resources/lang/ja/common.php +++ b/resources/lang/ja/common.php @@ -75,7 +75,7 @@ return [ 'status_active' => '有効', 'status_inactive' => '無効', 'never' => '該当なし', - 'none' => 'None', + 'none' => 'なし', // Header 'header_menu_expand' => 'ヘッダーメニューを展開', diff --git a/resources/lang/ja/editor.php b/resources/lang/ja/editor.php index e21a6d5a0..aaed115f2 100644 --- a/resources/lang/ja/editor.php +++ b/resources/lang/ja/editor.php @@ -24,7 +24,7 @@ return [ 'width' => '幅', 'height' => '高さ', 'More' => 'さらに表示', - 'select' => 'Select...', + 'select' => '選択...', // Toolbar 'formats' => '書式', @@ -53,10 +53,10 @@ return [ 'align_left' => '左揃え', 'align_center' => '中央揃え', 'align_right' => '右揃え', - 'align_justify' => 'Justify', + 'align_justify' => '両端揃え', 'list_bullet' => '箇条書き', 'list_numbered' => '番号付き箇条書き', - 'list_task' => 'Task list', + 'list_task' => 'タスクリスト', 'indent_increase' => 'インデントを増やす', 'indent_decrease' => 'インデントを減らす', 'table' => '表', @@ -93,10 +93,10 @@ return [ 'cell_properties_title' => 'セルの詳細設定', 'cell_type' => 'セルタイプ', 'cell_type_cell' => 'セル', - 'cell_scope' => 'Scope', + 'cell_scope' => '見出しとの関連', 'cell_type_header' => 'ヘッダーセル', - 'merge_cells' => 'Merge cells', - 'split_cell' => 'Split cell', + 'merge_cells' => 'セルを結合', + 'split_cell' => 'セルを分割', 'table_row_group' => '行グループ', 'table_column_group' => '列グループ', 'horizontal_align' => '水平方向の配置', @@ -124,16 +124,16 @@ return [ 'caption' => '表題', 'show_caption' => 'キャプションの表示', 'constrain' => '縦横比を保持する', - 'cell_border_solid' => 'Solid', - 'cell_border_dotted' => 'Dotted', - 'cell_border_dashed' => 'Dashed', - 'cell_border_double' => 'Double', - 'cell_border_groove' => 'Groove', - 'cell_border_ridge' => 'Ridge', - 'cell_border_inset' => 'Inset', - 'cell_border_outset' => 'Outset', - 'cell_border_none' => 'None', - 'cell_border_hidden' => 'Hidden', + 'cell_border_solid' => '実線', + 'cell_border_dotted' => '点線', + 'cell_border_dashed' => '破線', + 'cell_border_double' => '二重線', + 'cell_border_groove' => '掘り', + 'cell_border_ridge' => '盛り', + 'cell_border_inset' => '陥没', + 'cell_border_outset' => '隆起', + 'cell_border_none' => 'なし', + 'cell_border_hidden' => 'なし(優先)', // Images, links, details/summary & embed 'source' => '画像のソース', @@ -154,18 +154,18 @@ return [ 'toggle_label' => 'ブロックのラベル', // About view - 'about' => 'About the editor', + 'about' => 'エディタについて', 'about_title' => 'WYSIWYGエディタについて', 'editor_license' => 'エディタのライセンスと著作権', 'editor_tiny_license' => 'このエディタはLGPL v2.1ライセンスの下で提供される:tinyLinkを利用して構築されています。', 'editor_tiny_license_link' => 'TinyMCEの著作権およびライセンスの詳細は、こちらをご覧ください。', 'save_continue' => 'ページを保存して続行', 'callouts_cycle' => '(押し続けて種類を切り替え)', - 'link_selector' => 'Link to content', + 'link_selector' => 'コンテンツへのリンク', 'shortcuts' => 'ショートカット', 'shortcut' => 'ショートカット', 'shortcuts_intro' => 'エディタでは次に示すショートカットが利用できます。', 'windows_linux' => '(Windows/Linux)', 'mac' => '(Mac)', - 'description' => 'テンプレートの内容', + 'description' => '説明', ]; diff --git a/resources/lang/ja/entities.php b/resources/lang/ja/entities.php index e5ba8c673..3ef87f8a1 100644 --- a/resources/lang/ja/entities.php +++ b/resources/lang/ja/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => '下書きを保存済み: ', 'pages_edit_delete_draft' => '下書きを削除', 'pages_edit_discard_draft' => '下書きを破棄', + 'pages_edit_switch_to_markdown' => 'Markdownエディタに切り替え', + 'pages_edit_switch_to_markdown_clean' => '(クリーンなコンテンツ)', + 'pages_edit_switch_to_markdown_stable' => '(安定したコンテンツ)', + 'pages_edit_switch_to_wysiwyg' => 'WYSIWYGエディタに切り替え', 'pages_edit_set_changelog' => '編集内容についての説明', 'pages_edit_enter_changelog_desc' => 'どのような変更を行ったのかを記録してください', 'pages_edit_enter_changelog' => '編集内容を入力', + 'pages_editor_switch_title' => 'エディタの切り替え', + 'pages_editor_switch_are_you_sure' => 'このページのエディタを変更してもよろしいですか?', + 'pages_editor_switch_consider_following' => 'エディタを変更する場合には次の点に注意してください', + 'pages_editor_switch_consideration_a' => '保存すると、新しいエディタはそれ自身で種類を変更できない可能性のあるエディタを含め、今後のエディタとして利用されます。', + 'pages_editor_switch_consideration_b' => 'これにより、特定の状況で詳細と構文が失われる可能性があります。', + 'pages_editor_switch_consideration_c' => '最後の保存以降に行われたタグまたは変更ログの変更は、この変更では保持されません。', 'pages_save' => 'ページを保存', 'pages_title' => 'ページタイトル', 'pages_name' => 'ページ名', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'リビジョン #:id', 'pages_revisions_numbered_changes' => 'リビジョン #:id の変更', + 'pages_revisions_editor' => 'エディタの種類', 'pages_revisions_changelog' => '説明', 'pages_revisions_changes' => '変更点', 'pages_revisions_current' => '現在のバージョン', diff --git a/resources/lang/ja/settings.php b/resources/lang/ja/settings.php index b256029a2..75d643407 100644 --- a/resources/lang/ja/settings.php +++ b/resources/lang/ja/settings.php @@ -10,8 +10,8 @@ return [ 'settings' => '設定', 'settings_save' => '設定を保存', 'settings_save_success' => '設定を保存しました', - 'system_version' => 'System Version', - 'categories' => 'Categories', + 'system_version' => 'システムバージョン', + 'categories' => 'カテゴリー', // App Settings 'app_customization' => 'カスタマイズ', @@ -27,8 +27,8 @@ return [ 'app_secure_images' => '画像アップロード時のセキュリティを強化', 'app_secure_images_toggle' => 'より高いセキュリティの画像アップロードを可能にする', 'app_secure_images_desc' => 'パフォーマンスの観点から、全ての画像が公開になっています。このオプションを有効にすると、画像URLの先頭にランダムで推測困難な文字列が追加され、アクセスを困難にします。', - 'app_editor' => 'ページエディタ', - 'app_editor_desc' => 'ここで選択されたエディタを全ユーザが使用します。', + 'app_default_editor' => 'デフォルトのページエディタ', + 'app_default_editor_desc' => '新しいページを編集するときにデフォルトで使用されるエディタを選択してください。これは権限が許可されているページレベルで上書きできます。', 'app_custom_html' => 'カスタムheadタグ', 'app_custom_html_desc' => 'スタイルシートやアナリティクスコード追加したい場合、ここを編集します。これはの最下部に挿入されます。', 'app_custom_html_disabled_notice' => '重大な変更を元に戻せるよう、この設定ページではカスタムのHTML headコンテンツが無効になっています。', @@ -106,7 +106,7 @@ return [ 'recycle_bin_destroy_list' => '削除されるアイテム', 'recycle_bin_restore_list' => '復元されるアイテム', 'recycle_bin_restore_confirm' => 'この操作により、すべての子要素を含む削除されたアイテムが元の場所に復元されます。元の場所が削除されてごみ箱に入っている場合は、親アイテムも復元する必要があります。', - 'recycle_bin_restore_deleted_parent' => 'The parent of this item has also been deleted. These will remain deleted until that parent is also restored.', + 'recycle_bin_restore_deleted_parent' => 'このアイテムの親も削除されました。これらは、その親が復元されるまで削除されたままになります。', 'recycle_bin_restore_parent' => '親を復元', 'recycle_bin_destroy_notification' => 'ごみ箱から合計:count個のアイテムを削除しました。', 'recycle_bin_restore_notification' => 'ごみ箱から合計:count個のアイテムを復元しました。', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'システムのAPIへのアクセス', 'role_manage_settings' => 'アプリケーション設定の管理', 'role_export_content' => 'コンテンツのエクスポート', + 'role_editor_change' => 'ページエディタの変更', 'role_asset' => 'アセット権限', 'roles_system_warning' => '上記の3つの権限のいずれかを付与することは、ユーザーが自分の特権またはシステム内の他のユーザーの特権を変更できる可能性があることに注意してください。これらの権限は信頼できるユーザーにのみ割り当ててください。', 'role_asset_desc' => '各アセットに対するデフォルトの権限を設定します。ここで設定した権限が優先されます。', @@ -176,7 +177,7 @@ return [ 'users_role' => 'ユーザーの役割', 'users_role_desc' => 'このユーザーに割り当てる役割を選択します。ユーザーが複数の役割に割り当てられている場合は、それらの役割の権限が重ね合わされ、割り当てられた役割のすべての権限が与えられます。', 'users_password' => 'ユーザー パスワード', - 'users_password_desc' => 'Set a password used to log-in to the application. This must be at least 8 characters long.', + 'users_password_desc' => 'アプリケーションへのログインに利用するパスワードを設定してください。8文字以上である必要があります。', 'users_send_invite_text' => 'このユーザーに招待メールを送信してユーザー自身にパスワードを設定してもらうか、あなたがここでパスワードを設定するかを選択できます。', 'users_send_invite_option' => 'ユーザーに招待メールを送信', 'users_external_auth_id' => '外部認証ID', diff --git a/resources/lang/ko/entities.php b/resources/lang/ko/entities.php index 8f649f19d..7c80d20ca 100644 --- a/resources/lang/ko/entities.php +++ b/resources/lang/ko/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => '보관함: ', 'pages_edit_delete_draft' => '초안 삭제', 'pages_edit_discard_draft' => '폐기', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => '수정본 설명', 'pages_edit_enter_changelog_desc' => '수정본 설명', 'pages_edit_enter_changelog' => '설명', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => '저장', 'pages_title' => '문서 제목', 'pages_name' => '문서 이름', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => 'No.', 'pages_revisions_numbered' => '수정본 :id', 'pages_revisions_numbered_changes' => '수정본 :id에서 바꾼 부분', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => '설명', 'pages_revisions_changes' => '바꾼 부분', 'pages_revisions_current' => '현재 판본', diff --git a/resources/lang/ko/settings.php b/resources/lang/ko/settings.php index cdc4a6e04..4af7aee2b 100755 --- a/resources/lang/ko/settings.php +++ b/resources/lang/ko/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => '이미지 주소 보호', 'app_secure_images_toggle' => '이미지 주소 보호', 'app_secure_images_desc' => '성능상의 문제로 이미지에 누구나 접근할 수 있기 때문에 이미지 주소를 무작위한 문자로 구성합니다. 폴더 색인을 끄세요.', - 'app_editor' => '에디터', - 'app_editor_desc' => '모든 사용자에게 적용합니다.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => '헤드 작성', 'app_custom_html_desc' => '설정 페이지를 제외한 모든 페이지 head 태그 끝머리에 추가합니다.', 'app_custom_html_disabled_notice' => '문제가 생겨도 설정 페이지에서 되돌릴 수 있어요.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => '시스템 접근 API', 'role_manage_settings' => '사이트 설정 관리', 'role_export_content' => '항목 내보내기', + 'role_editor_change' => 'Change page editor', 'role_asset' => '권한 항목', 'roles_system_warning' => '위 세 권한은 자신의 권한이나 다른 유저의 권한을 바꿀 수 있습니다.', 'role_asset_desc' => '책, 챕터, 문서별 권한은 이 설정에 우선합니다.', diff --git a/resources/lang/lt/entities.php b/resources/lang/lt/entities.php index c9c1c6015..c91b11830 100644 --- a/resources/lang/lt/entities.php +++ b/resources/lang/lt/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Juodraštis išsaugotas', 'pages_edit_delete_draft' => 'Ištrinti juodraštį', 'pages_edit_discard_draft' => 'Išmesti juodraštį', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Nustatyti keitimo žurnalą', 'pages_edit_enter_changelog_desc' => 'Įveskite trumpus, jūsų atliktus, pokyčių aprašymus', 'pages_edit_enter_changelog' => 'Įeiti į keitimo žurnalą', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Išsaugoti puslapį', 'pages_title' => 'Puslapio antraštė', 'pages_name' => 'Puslapio pavadinimas', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Peržiūra #:id', 'pages_revisions_numbered_changes' => 'Peržiūros #:id pokyčiai', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Keitimo žurnalas', 'pages_revisions_changes' => 'Pakeitimai', 'pages_revisions_current' => 'Dabartinė versija', diff --git a/resources/lang/lt/settings.php b/resources/lang/lt/settings.php index da2f60ebd..9032dc380 100644 --- a/resources/lang/lt/settings.php +++ b/resources/lang/lt/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Didesnio saugumo vaizdų įkėlimai', 'app_secure_images_toggle' => 'Įgalinti didesnio saugumo vaizdų įkėlimus', 'app_secure_images_desc' => 'Dėl veiklos priežasčių, visi vaizdai yra vieši. Šis pasirinkimas prideda atsitiktinę, sunkiai atspėjamą eilutę prieš vaizdo URL. Įsitikinkite, kad katalogų rodyklės neįgalintos, kad prieiga būtų lengvesnė.', - 'app_editor' => 'Puslapio redaktorius', - 'app_editor_desc' => 'Pasirinkite, kuris redaktorius bus naudojamas visų vartotojų redaguoti puslapiams.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Pasirinktinis HTL antraštės turinys', 'app_custom_html_desc' => 'Bet koks čia pridedamas turinys bus prisegamas apačioje kiekvieno puslapio skyriuje. Tai yra patogu svarbesniems stiliams arba pridedant analizės kodą.', 'app_custom_html_disabled_notice' => 'Pasirinktinis HTML antraštės turinys yra išjungtas šiame nustatymų puslapyje užtikrinti, kad bet kokie negeri pokyčiai galėtų būti anuliuojami.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Gauti prieigą prie sistemos API', 'role_manage_settings' => 'Tvarkyti programos nustatymus', 'role_export_content' => 'Export content', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Nuosavybės leidimai', 'roles_system_warning' => 'Būkite sąmoningi, kad prieiga prie bet kurio iš trijų leidimų viršuje gali leisti naudotojui pakeisti jų pačių privilegijas arba kitų privilegijas sistemoje. Paskirkite vaidmenis su šiais leidimais tik patikimiems naudotojams.', 'role_asset_desc' => 'Šie leidimai kontroliuoja numatytą prieigą į nuosavybę, esančią sistemoje. Knygų, skyrių ir puslapių leidimai nepaisys šių leidimų.', diff --git a/resources/lang/lv/entities.php b/resources/lang/lv/entities.php index 0ddb2b203..975207bfd 100644 --- a/resources/lang/lv/entities.php +++ b/resources/lang/lv/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Melnraksts saglabāts ', 'pages_edit_delete_draft' => 'Dzēst melnrakstu', 'pages_edit_discard_draft' => 'Atmest malnrakstu', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Pievienot izmaiņu aprakstu', 'pages_edit_enter_changelog_desc' => 'Ievadi nelielu aprakstu par vaiktajām izmaiņām', 'pages_edit_enter_changelog' => 'Izmaiņu apraksts', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Saglabāt lapu', 'pages_title' => 'Lapas virsraksts', 'pages_name' => 'Lapas nosaukums', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revīzija #:id', 'pages_revisions_numbered_changes' => 'Revīzijas #:id izmaiņas', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Izmaiņu žurnāls', 'pages_revisions_changes' => 'Izmaiņas', 'pages_revisions_current' => 'Pašreizējā versija', diff --git a/resources/lang/lv/settings.php b/resources/lang/lv/settings.php index 3a60b0873..d94604262 100644 --- a/resources/lang/lv/settings.php +++ b/resources/lang/lv/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Paaugstinātas drošības attēlu ielāde', 'app_secure_images_toggle' => 'Ieslēgt paaugstinātas drošības attēlu ielādi', 'app_secure_images_desc' => 'Ātrdarbības nolūkos attēli ir publiski pieejami. Šī opcija pievieno nejaušu grūti uzminamu teksta virkni attēlu adresēs. Pārliecinieties kā ir izslēgta direktoriju pārlūkošana, lai nepieļautu vieglu piekļuvi šiem failiem.', - 'app_editor' => 'Lapas redaktors', - 'app_editor_desc' => 'Izvēlēties kurš redaktors tiks izmatots lapu rediģēšanai visiem lietotājiem.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Pielāgot HTML head saturu', 'app_custom_html_desc' => 'Šis saturs tiks pievienots sadaļas apakšā visām lapām. Tas ir noderīgi papildinot CSS stilus vai pievienojot analītikas kodu.', 'app_custom_html_disabled_notice' => 'Pielāgots HTML head saturs ir izslēgts šajā uzstādījumu lapā, lai nodrošinātu, ka iespējams atcelt jebkādas kritiskas izmaiņas.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Piekļūt sistēmas API', 'role_manage_settings' => 'Pārvaldīt iestatījumus', 'role_export_content' => 'Eksportēt saturu', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Resursa piekļuves tiesības', 'roles_system_warning' => 'Jebkuras no trīs augstāk redzamajām atļaujām dod iespēju lietotājam mainīt savas un citu lietotāju sistēmas atļaujas. Pievieno šīs grupu atļaujas tikai tiem lietotājiem, kuriem uzticies.', 'role_asset_desc' => 'Šīs piekļuves tiesības kontrolē noklusēto piekļuvi sistēmas resursiem. Grāmatām, nodaļām un lapām norādītās tiesības būs pārākas par šīm.', diff --git a/resources/lang/nb/entities.php b/resources/lang/nb/entities.php index d6759dd57..df833e87a 100644 --- a/resources/lang/nb/entities.php +++ b/resources/lang/nb/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Ukast lagret under ', 'pages_edit_delete_draft' => 'Forkast utkast', 'pages_edit_discard_draft' => 'Gi opp utkast', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Angi endringslogg', 'pages_edit_enter_changelog_desc' => 'Gi en kort beskrivelse av endringene dine', 'pages_edit_enter_changelog' => 'Se endringslogg', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Lagre side', 'pages_title' => 'Sidetittel', 'pages_name' => 'Sidenavn', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revisjon #:id', 'pages_revisions_numbered_changes' => 'Endringer på revisjon #:id', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Endringslogg', 'pages_revisions_changes' => 'Endringer', 'pages_revisions_current' => 'Siste versjon', diff --git a/resources/lang/nb/settings.php b/resources/lang/nb/settings.php index 58e6eaba9..113ecef24 100644 --- a/resources/lang/nb/settings.php +++ b/resources/lang/nb/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Høyere sikkerhet på bildeopplastinger', 'app_secure_images_toggle' => 'Enable høyere sikkerhet på bildeopplastinger', 'app_secure_images_desc' => 'Av ytelsesgrunner er alle bilder offentlige. Dette alternativet legger til en tilfeldig streng som er vanskelig å gjette foran bildets nettadresser. Forsikre deg om at katalogindekser ikke er aktivert for å forhindre enkel tilgang.', - 'app_editor' => 'Tekstbehandler', - 'app_editor_desc' => 'Velg hvilken tekstbehandler som skal brukes av alle brukere til å redigere sider.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Tilpasset HTML-hodeinnhold', 'app_custom_html_desc' => 'Alt innhold som legges til her, blir satt inn i bunnen av -delen på hver side. Dette er praktisk for å overstyre stiler eller legge til analysekode.', 'app_custom_html_disabled_notice' => 'Tilpasset HTML-hodeinnhold er deaktivert på denne innstillingssiden for å sikre at eventuelle endringer ødelegger noe, kan tilbakestilles.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Systemtilgang API', 'role_manage_settings' => 'Behandle applikasjonsinnstillinger', 'role_export_content' => 'Export content', + 'role_editor_change' => 'Change page editor', '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.', diff --git a/resources/lang/nl/entities.php b/resources/lang/nl/entities.php index b9677a507..e45194e65 100644 --- a/resources/lang/nl/entities.php +++ b/resources/lang/nl/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Concept opgeslagen op ', 'pages_edit_delete_draft' => 'Concept verwijderen', 'pages_edit_discard_draft' => 'Concept verwijderen', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Wijzigingslogboek instellen', 'pages_edit_enter_changelog_desc' => 'Geef een korte omschrijving van de wijzigingen die je gemaakt hebt', 'pages_edit_enter_changelog' => 'Voeg toe aan wijzigingslogboek', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Pagina opslaan', 'pages_title' => 'Pagina titel', 'pages_name' => 'Pagina naam', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revisie #:id', 'pages_revisions_numbered_changes' => 'Revisie #:id wijzigingen', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Wijzigingsoverzicht', 'pages_revisions_changes' => 'Wijzigingen', 'pages_revisions_current' => 'Huidige versie', diff --git a/resources/lang/nl/settings.php b/resources/lang/nl/settings.php index 0326b290a..870d32b17 100644 --- a/resources/lang/nl/settings.php +++ b/resources/lang/nl/settings.php @@ -10,8 +10,8 @@ return [ 'settings' => 'Instellingen', 'settings_save' => 'Instellingen opslaan', 'settings_save_success' => 'Instellingen Opgeslagen', - 'system_version' => 'System Version', - 'categories' => 'Categories', + 'system_version' => 'Systeem versie', + 'categories' => 'Categorieën', // App Settings 'app_customization' => 'Aanpassingen', @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Uploaden van afbeeldingen met hogere beveiliging', 'app_secure_images_toggle' => 'Activeer uploaden van afbeeldingen met hogere beveiliging', 'app_secure_images_desc' => 'Om prestatieredenen zijn alle afbeeldingen openbaar. Deze optie voegt een willekeurige en moeilijk te raden tekst toe aan de URL\'s van de afbeeldingen. Zorg ervoor dat "directory indexes" niet ingeschakeld zijn om eenvoudige toegang te voorkomen.', - 'app_editor' => 'Pagina Bewerker', - 'app_editor_desc' => 'Selecteer welke tekstverwerker door alle gebruikers zal worden gebruikt om pagina\'s te bewerken.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'HTML aan toevoegen', 'app_custom_html_desc' => 'Alle hieronder toegevoegde data wordt aan het einde van de sectie van elke pagina toegevoegd. Gebruik dit om stijlen te overschrijven of analytische code toe te voegen.', 'app_custom_html_disabled_notice' => 'Bovenstaande wordt niet toegevoegd aan deze pagina om ervoor te zorgen dat je foutieve code steeds ongedaan kan maken.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Ga naar systeem API', 'role_manage_settings' => 'Beheer app instellingen', 'role_export_content' => 'Exporteer inhoud', + 'role_editor_change' => 'Change page editor', '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.', diff --git a/resources/lang/pl/entities.php b/resources/lang/pl/entities.php index b6c2e6e5c..bb337d7c4 100644 --- a/resources/lang/pl/entities.php +++ b/resources/lang/pl/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Wersja robocza zapisana ', 'pages_edit_delete_draft' => 'Usuń wersje roboczą', 'pages_edit_discard_draft' => 'Porzuć wersje roboczą', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Ustaw dziennik zmian', 'pages_edit_enter_changelog_desc' => 'Opisz zmiany, które zostały wprowadzone', 'pages_edit_enter_changelog' => 'Wyświetl dziennik zmian', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Zapisz stronę', 'pages_title' => 'Tytuł strony', 'pages_name' => 'Nazwa strony', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Wersja #:id', 'pages_revisions_numbered_changes' => 'Zmiany w wersji #:id', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Dziennik zmian', 'pages_revisions_changes' => 'Zmiany', 'pages_revisions_current' => 'Obecna wersja', diff --git a/resources/lang/pl/settings.php b/resources/lang/pl/settings.php index f4ef7005b..b35981b01 100644 --- a/resources/lang/pl/settings.php +++ b/resources/lang/pl/settings.php @@ -10,8 +10,8 @@ return [ 'settings' => 'Ustawienia', 'settings_save' => 'Zapisz ustawienia', 'settings_save_success' => 'Ustawienia zapisane', - 'system_version' => 'System Version', - 'categories' => 'Categories', + 'system_version' => 'Wersja Systemu', + 'categories' => 'Kategorie', // App Settings 'app_customization' => 'Dostosowywanie', @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Włączyć przesyłanie obrazów o wyższym poziomie bezpieczeństwa?', 'app_secure_images_toggle' => 'Włącz wyższy poziom bezpieczeństwa dla obrazów', 'app_secure_images_desc' => 'Ze względów wydajnościowych wszystkie obrazki są publiczne. Ta opcja dodaje dodatkowy, trudny do odgadnięcia losowy ciąg na początku nazwy obrazka. Upewnij się że indeksowanie katalogów jest zablokowane, aby uniemożliwić łatwy dostęp do obrazków.', - 'app_editor' => 'Edytor strony', - 'app_editor_desc' => 'Wybierz edytor używany przez użytkowników do edycji zawartości.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Własna zawartość w tagu ', 'app_custom_html_desc' => 'Zawartość dodana tutaj zostanie dołączona na dole sekcji każdej strony. Przydatne przy nadpisywaniu styli lub dodawaniu analityki.', 'app_custom_html_disabled_notice' => 'Niestandardowa zawartość nagłówka HTML jest wyłączona na tej stronie ustawień aby zapewnić, że wszystkie błedne zmiany (braking change) mogą zostać cofnięte.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Dostęp do systemowego API', 'role_manage_settings' => 'Zarządzanie ustawieniami aplikacji', 'role_export_content' => 'Eksportuj zawartość', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Zarządzanie zasobami', 'roles_system_warning' => 'Pamiętaj, że dostęp do trzech powyższych uprawnień może pozwolić użytkownikowi na zmianę własnych uprawnień lub uprawnień innych osób w systemie. Przypisz tylko role z tymi uprawnieniami do zaufanych użytkowników.', 'role_asset_desc' => 'Te ustawienia kontrolują zarządzanie zasobami systemu. Uprawnienia książek, rozdziałów i stron nadpisują te ustawienia.', diff --git a/resources/lang/pt/activities.php b/resources/lang/pt/activities.php index b85e39421..733a3cadc 100644 --- a/resources/lang/pt/activities.php +++ b/resources/lang/pt/activities.php @@ -13,7 +13,7 @@ return [ 'page_delete' => 'página eliminada', 'page_delete_notification' => 'Página excluída com sucesso.', 'page_restore' => 'página restaurada', - 'page_restore_notification' => 'Imagem restaurada com sucesso', + 'page_restore_notification' => 'Página restaurada com sucesso', 'page_move' => 'página movida', // Chapters @@ -48,11 +48,11 @@ return [ 'favourite_remove_notification' => '":name" foi removido dos seus favoritos', // MFA - 'mfa_setup_method_notification' => 'Método de múltiplos-fatores configurado com sucesso', - 'mfa_remove_method_notification' => 'Método de múltiplos-fatores removido com sucesso', + 'mfa_setup_method_notification' => 'Método de autenticação por múltiplos-fatores configurado com sucesso', + 'mfa_remove_method_notification' => 'Método de autenticação por múltiplos-fatores removido com sucesso', // Webhooks - 'webhook_create' => 'criar webhook', + 'webhook_create' => 'webhook criado', 'webhook_create_notification' => 'Webhook criado com sucesso', 'webhook_update' => 'atualizar um webhook', 'webhook_update_notification' => 'Webhook criado com sucesso', diff --git a/resources/lang/pt/common.php b/resources/lang/pt/common.php index e64d3e9b9..137f389b3 100644 --- a/resources/lang/pt/common.php +++ b/resources/lang/pt/common.php @@ -19,7 +19,7 @@ return [ 'description' => 'Descrição', 'role' => 'Cargo', 'cover_image' => 'Imagem de capa', - 'cover_image_description' => 'Esta imagem deve ser aproximadamente 440x250px.', + 'cover_image_description' => 'Esta imagem deve ter aproximadamente 440x250px.', // Actions 'actions' => 'Ações', diff --git a/resources/lang/pt/editor.php b/resources/lang/pt/editor.php index 81c33b201..3a6119681 100644 --- a/resources/lang/pt/editor.php +++ b/resources/lang/pt/editor.php @@ -31,7 +31,7 @@ return [ 'header_large' => 'Cabeçalho grande', 'header_medium' => 'Cabeçalho médio', 'header_small' => 'Cabeçalho pequeno', - 'header_tiny' => 'Cabeçalho pequeno', + 'header_tiny' => 'Cabeçalho minúsculo', 'paragraph' => 'Parágrafo', 'blockquote' => 'Citação', 'inline_code' => 'Código embutido', diff --git a/resources/lang/pt/entities.php b/resources/lang/pt/entities.php index ee2ccf113..e9bae6b56 100644 --- a/resources/lang/pt/entities.php +++ b/resources/lang/pt/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Rascunho guardado em ', 'pages_edit_delete_draft' => 'Eliminar Rascunho', 'pages_edit_discard_draft' => 'Descartar Rascunho', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Relatar Alterações', 'pages_edit_enter_changelog_desc' => 'Digite uma breve descrição das alterações efetuadas por si', 'pages_edit_enter_changelog' => 'Inserir Alterações', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Guardar Página', 'pages_title' => 'Título da Página', 'pages_name' => 'Nome da Página', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revisão #:id', 'pages_revisions_numbered_changes' => 'Alterações da Revisão #:id', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Relatório de Alterações', 'pages_revisions_changes' => 'Alterações', 'pages_revisions_current' => 'Versão Atual', diff --git a/resources/lang/pt/settings.php b/resources/lang/pt/settings.php index 1f1f8c3bc..c5ad184d9 100644 --- a/resources/lang/pt/settings.php +++ b/resources/lang/pt/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Carregamento de Imagens mais Seguro', 'app_secure_images_toggle' => 'Ativar o carregamento de imagem mais seguro', 'app_secure_images_desc' => 'Por razões de performance, todas as imagens são públicas. Esta opção adiciona uma string aleatória na frente das Urls de imagens. Certifique-se de que os diretórios não possam ser indexados para prevenir acesso indesejado.', - 'app_editor' => 'Editor de Página', - 'app_editor_desc' => 'Selecione qual editor será utilizado pelos utilizadores ao editar páginas.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Conteúdo personalizado para para o Head do HTML', 'app_custom_html_desc' => 'Quaisquer conteúdos aqui adicionados serão inseridos no final da secção de cada página. Esta é uma maneira útil de sobrescrever estilos e adicionar códigos de análise de site.', 'app_custom_html_disabled_notice' => 'O conteúdo personalizado do HTML está desativado nesta página de configurações, para garantir que quaisquer alterações que acabem maliciosas possam ser revertidas.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Aceder à API do sistema', 'role_manage_settings' => 'Gerir as configurações da aplicação', 'role_export_content' => 'Exportar conteúdo', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Permissões de Ativos', 'roles_system_warning' => 'Esteja ciente de que o acesso a qualquer uma das três permissões acima pode permitir que um utilizador altere os seus próprios privilégios ou privilégios de outros no sistema. Apenas atribua cargos com essas permissões a utilizadores de confiança.', 'role_asset_desc' => 'Estas permissões controlam o acesso padrão para os ativos dentro do sistema. Permissões em Livros, Capítulos e Páginas serão sobrescritas por estas permissões.', diff --git a/resources/lang/pt_BR/entities.php b/resources/lang/pt_BR/entities.php index e28c97f9e..18edf0782 100644 --- a/resources/lang/pt_BR/entities.php +++ b/resources/lang/pt_BR/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Rascunho salvo em ', 'pages_edit_delete_draft' => 'Excluir Rascunho', 'pages_edit_discard_draft' => 'Descartar Rascunho', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Relatar Alterações', 'pages_edit_enter_changelog_desc' => 'Digite uma breve descrição das alterações efetuadas por você', 'pages_edit_enter_changelog' => 'Insira Alterações', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Salvar Página', 'pages_title' => 'Título da Página', 'pages_name' => 'Nome da Página', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revisão #:id', 'pages_revisions_numbered_changes' => 'Alterações da Revisão #:id', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Relatório de Alterações', 'pages_revisions_changes' => 'Alterações', 'pages_revisions_current' => 'Versão Atual', diff --git a/resources/lang/pt_BR/settings.php b/resources/lang/pt_BR/settings.php index 1904902cb..517425411 100644 --- a/resources/lang/pt_BR/settings.php +++ b/resources/lang/pt_BR/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Upload de Imagens mais Seguro', 'app_secure_images_toggle' => 'Habilitar uploads de imagem mais seguro', 'app_secure_images_desc' => 'Por razões de performance, todas as imagens são públicas. Esta opção adiciona uma string randômica na frente das URLs de imagens. Certifique-se de que os diretórios não possam ser indexados para prevenir acesso indesejado.', - 'app_editor' => 'Editor de Página', - 'app_editor_desc' => 'Selecione qual editor será utilizado pelos usuários ao editar páginas.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Conteúdo customizado para HTML', 'app_custom_html_desc' => 'Quaisquer conteúdos aqui adicionados serão inseridos no final da seção de cada página. Essa é uma maneira útil de sobrescrever estilos e adicionar códigos de análise de site.', 'app_custom_html_disabled_notice' => 'O conteúdo customizado do HTML está desabilitado nesta página de configurações, para garantir que quaisquer alterações danosas possam ser revertidas.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Acessar API do sistema', 'role_manage_settings' => 'Gerenciar configurações da aplicação', 'role_export_content' => 'Export content', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Permissões de Ativos', 'roles_system_warning' => 'Esteja ciente de que o acesso a qualquer uma das três permissões acima pode permitir que um usuário altere seus próprios privilégios ou privilégios de outros usuários no sistema. Apenas atribua cargos com essas permissões para usuários confiáveis.', 'role_asset_desc' => 'Essas permissões controlam o acesso padrão para os ativos dentro do sistema. Permissões em Livros, Capítulos e Páginas serão sobrescritas por essas permissões.', diff --git a/resources/lang/ru/editor.php b/resources/lang/ru/editor.php index 6f8d9c755..cda25b05f 100644 --- a/resources/lang/ru/editor.php +++ b/resources/lang/ru/editor.php @@ -24,7 +24,7 @@ return [ 'width' => 'Ширина', 'height' => 'Высота', 'More' => 'Еще', - 'select' => 'Select...', + 'select' => 'Выбрать...', // Toolbar 'formats' => 'Форматы', @@ -95,8 +95,8 @@ return [ 'cell_type_cell' => 'Ячейка', 'cell_scope' => 'Scope', 'cell_type_header' => 'Заголовок ячейки', - 'merge_cells' => 'Merge cells', - 'split_cell' => 'Split cell', + 'merge_cells' => 'Объединить ячейки', + 'split_cell' => 'Разделить ячейку', 'table_row_group' => 'Объединить строки', 'table_column_group' => 'Объединить столбцы', 'horizontal_align' => 'Выровнять по горизонтали', @@ -124,16 +124,16 @@ return [ 'caption' => 'Подпись', 'show_caption' => 'Показать подпись', 'constrain' => 'Сохранять пропорции', - 'cell_border_solid' => 'Solid', - 'cell_border_dotted' => 'Dotted', - 'cell_border_dashed' => 'Dashed', - 'cell_border_double' => 'Double', + 'cell_border_solid' => 'Сплошная', + 'cell_border_dotted' => 'Точками', + 'cell_border_dashed' => 'Пунктирная', + 'cell_border_double' => 'Двойная сплошная', 'cell_border_groove' => 'Groove', 'cell_border_ridge' => 'Ridge', 'cell_border_inset' => 'Inset', 'cell_border_outset' => 'Outset', - 'cell_border_none' => 'None', - 'cell_border_hidden' => 'Hidden', + 'cell_border_none' => 'Нет', + 'cell_border_hidden' => 'Прозрачная', // Images, links, details/summary & embed 'source' => 'Источник', @@ -154,7 +154,7 @@ return [ 'toggle_label' => 'Метка', // About view - 'about' => 'About the editor', + 'about' => 'О редакторе', 'about_title' => 'О редакторе WYSIWYG', 'editor_license' => 'Лицензия редактора и авторские права', 'editor_tiny_license' => 'Этот редактор собран с помощью :tinyLink, который предоставляется под лицензией LGPL v2.1.', diff --git a/resources/lang/ru/entities.php b/resources/lang/ru/entities.php index 1d3e748bc..80a5e6b61 100644 --- a/resources/lang/ru/entities.php +++ b/resources/lang/ru/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Черновик сохранён в ', 'pages_edit_delete_draft' => 'Удалить черновик', 'pages_edit_discard_draft' => 'Отменить черновик', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Задать список изменений', 'pages_edit_enter_changelog_desc' => 'Введите краткое описание внесенных изменений', 'pages_edit_enter_changelog' => 'Введите список изменений', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Сохранить страницу', 'pages_title' => 'Заголовок страницы', 'pages_name' => 'Название страницы', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Версия #:id', 'pages_revisions_numbered_changes' => 'Изменения в версии #:id', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Список изменений', 'pages_revisions_changes' => 'Изменения', 'pages_revisions_current' => 'Текущая версия', diff --git a/resources/lang/ru/settings.php b/resources/lang/ru/settings.php index b23b7e97c..4503ee14e 100755 --- a/resources/lang/ru/settings.php +++ b/resources/lang/ru/settings.php @@ -10,8 +10,8 @@ return [ 'settings' => 'Настройки', 'settings_save' => 'Сохранить настройки', 'settings_save_success' => 'Настройки сохранены', - 'system_version' => 'System Version', - 'categories' => 'Categories', + 'system_version' => 'Версия системы', + 'categories' => 'Категории', // App Settings 'app_customization' => 'Настройки', @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Загрузка изображений с высоким уровнем безопасности', 'app_secure_images_toggle' => 'Включить загрузку изображений с высоким уровнем безопасности', 'app_secure_images_desc' => 'Для высокой производительности все изображения являются общедоступными. Этот параметр добавляет случайную строку перед URL изображения. Убедитесь, что индексация каталогов отключена, для предотвращения легкого доступа.', - 'app_editor' => 'Редактор страниц', - 'app_editor_desc' => 'Выберите, какой редактор будет использоваться всеми пользователями для редактирования страниц.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Пользовательский контент заголовка HTML', 'app_custom_html_desc' => 'Любой контент, добавленный здесь, будет вставлен в нижнюю часть раздела каждой страницы. Это удобно для переопределения стилей или добавления кода аналитики.', 'app_custom_html_disabled_notice' => 'Пользовательский контент заголовка HTML отключен на этой странице, чтобы гарантировать отмену любых критических изменений.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Доступ к системному API', 'role_manage_settings' => 'Управление настройками приложения', 'role_export_content' => 'Экспорт контента', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Права доступа к материалам', 'roles_system_warning' => 'Имейте в виду, что доступ к любому из указанных выше трех разрешений может позволить пользователю изменить свои собственные привилегии или привилегии других пользователей системы. Назначать роли с этими правами можно только доверенным пользователям.', 'role_asset_desc' => 'Эти разрешения контролируют доступ по умолчанию к параметрам внутри системы. Разрешения на книги, главы и страницы перезапишут эти разрешения.', diff --git a/resources/lang/ru/validation.php b/resources/lang/ru/validation.php index a0dec2b56..88bd9a41f 100644 --- a/resources/lang/ru/validation.php +++ b/resources/lang/ru/validation.php @@ -32,7 +32,7 @@ return [ 'digits_between' => ':attribute должен иметь от :min до :max цифр.', 'email' => ':attribute должен быть корректным email адресом.', 'ends_with' => ':attribute должен заканчиваться одним из следующих: :values', - 'file' => 'The :attribute must be provided as a valid file.', + 'file' => ':attribute должен быть указан как допустимый файл.', 'filled' => ':attribute поле необходимо.', 'gt' => [ 'numeric' => 'Значение :attribute должно быть больше чем :value.', diff --git a/resources/lang/sk/entities.php b/resources/lang/sk/entities.php index 13e16249f..4cb0a0ed3 100644 --- a/resources/lang/sk/entities.php +++ b/resources/lang/sk/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Koncept uložený pod ', 'pages_edit_delete_draft' => 'Uložiť koncept', 'pages_edit_discard_draft' => 'Zrušiť koncept', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Nastaviť záznam zmien', 'pages_edit_enter_changelog_desc' => 'Zadajte krátky popis zmien, ktoré ste urobili', 'pages_edit_enter_changelog' => 'Zadať záznam zmien', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Uložiť stránku', 'pages_title' => 'Titulok stránky', 'pages_name' => 'Názov stránky', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => 'č.', 'pages_revisions_numbered' => 'Revízia č. :id', 'pages_revisions_numbered_changes' => 'Zmeny revízie č. ', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Záznam zmien', 'pages_revisions_changes' => 'Zmeny', 'pages_revisions_current' => 'Aktuálna verzia', diff --git a/resources/lang/sk/settings.php b/resources/lang/sk/settings.php index 14f1f98ea..6d9e32191 100644 --- a/resources/lang/sk/settings.php +++ b/resources/lang/sk/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Povoliť nahrávanie súborov so zvýšeným zabezpečením?', 'app_secure_images_toggle' => 'Povoliť nahrávanie obrázkov s vyšším zabezpečením', 'app_secure_images_desc' => 'Kvôli výkonu sú všetky obrázky verejné. Táto možnosť pridá pred URL obrázka náhodný, ťažko uhádnuteľný reťazec. Aby ste zabránili jednoduchému prístupu, uistite sa, že indexy priečinkov nie sú povolené.', - 'app_editor' => 'Editor stránky', - 'app_editor_desc' => 'Vyberte editor, ktorý bude používaný všetkými používateľmi na editáciu stránok.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Vlastný HTML obsah hlavičky', 'app_custom_html_desc' => 'Všetok text pridaný sem bude vložený naspodok sekcie na každej stránke. Môže sa to zísť pri zmene štýlu alebo pre pridanie analytického kódu.', 'app_custom_html_disabled_notice' => 'Vlastný obsah hlavičky HTML je na tejto stránke s nastaveniami zakázaný, aby sa zabezpečilo, že sa dajú vrátiť zmeny, ktoré nastali.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'API prístupového systému', 'role_manage_settings' => 'Spravovať nastavenia aplikácie', 'role_export_content' => 'Exportovať obsah', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Oprávnenia majetku', 'roles_system_warning' => 'Uvedomte si, že prístup ku ktorémukoľvek z vyššie uvedených troch povolení môže používateľovi umožniť zmeniť svoje vlastné privilégiá alebo privilégiá ostatných v systéme. Roly s týmito povoleniami priraďujte iba dôveryhodným používateľom.', 'role_asset_desc' => 'Tieto oprávnenia regulujú prednastavený prístup k zdroju v systéme. Oprávnenia pre knihy, kapitoly a stránky majú vyššiu prioritu.', diff --git a/resources/lang/sl/entities.php b/resources/lang/sl/entities.php index fc14cc6d7..c5fb5c35b 100644 --- a/resources/lang/sl/entities.php +++ b/resources/lang/sl/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Osnutek shranjen ob ', 'pages_edit_delete_draft' => 'Izbriši osnutek', 'pages_edit_discard_draft' => 'Zavrzi osnutek', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Opiši spremembe na dokumentu', 'pages_edit_enter_changelog_desc' => 'Vnesite kratek opis sprememb, ki ste jih naredili', 'pages_edit_enter_changelog' => 'Vpišite vsebino sprememb', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Shrani stran', 'pages_title' => 'Naslov strani', 'pages_name' => 'Ime strani', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revizija št. :id', 'pages_revisions_numbered_changes' => 'Revizija št. #:id Changes', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Dnevnik sprememb', 'pages_revisions_changes' => 'Spremembe', 'pages_revisions_current' => 'Trenutna različica', diff --git a/resources/lang/sl/settings.php b/resources/lang/sl/settings.php index de91d7764..7849fe5fc 100644 --- a/resources/lang/sl/settings.php +++ b/resources/lang/sl/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Nalaganje slik z večjo varnostjo', 'app_secure_images_toggle' => 'Omogoči nalaganje slik z večjo varnostjo', 'app_secure_images_desc' => 'Zaradi delovanja so vse slike javne. Ta možnost doda naključni, hard-to-guess niz pred Url-ji slike. Prepričajte se, da indeksi imenikov niso omogočeni, da preprečite enostaven dostop.', - 'app_editor' => 'Urejevalnik strani', - 'app_editor_desc' => 'Izberite urejevalnik, ki bodo uporabniki uporabljali za urejanje strani.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Po meri HTML vsebina glave', 'app_custom_html_desc' => 'Katerakoli vsebina dodana tukaj, bo vstavljena na dno dela vsake strani. To je uporabno za uporabo prevladujočih slogov ali dodajanje analitike.', 'app_custom_html_disabled_notice' => 'Po meri narejena HTML glava vsebine je onemogočena na tej strani z nastavitvami, da se zagotovi, da bodo morebitne zrušitve lahko povrnjene.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'API za dostop do sistema', 'role_manage_settings' => 'Nastavitve za upravljanje', 'role_export_content' => 'Export content', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Sistemska dovoljenja', 'roles_system_warning' => 'Zavedajte se, da lahko dostop do kateregakoli od zgornjih treh dovoljenj uporabniku omogoči, da spremeni lastne privilegije ali privilegije drugih v sistemu. Vloge s temi dovoljenji dodelite samo zaupanja vrednim uporabnikom.', 'role_asset_desc' => 'Ta dovoljenja nadzorujejo privzeti dostop do sredstev v sistemu. Dovoljenja za knjige, poglavja in strani bodo razveljavila ta dovoljenja.', diff --git a/resources/lang/sv/common.php b/resources/lang/sv/common.php index a982b9172..8cbaa10cc 100644 --- a/resources/lang/sv/common.php +++ b/resources/lang/sv/common.php @@ -73,7 +73,7 @@ return [ 'breadcrumb' => 'Brödsmula', 'status' => 'Status', 'status_active' => 'Active', - 'status_inactive' => 'Inactive', + 'status_inactive' => 'Inaktiv', 'never' => 'Never', 'none' => 'None', diff --git a/resources/lang/sv/entities.php b/resources/lang/sv/entities.php index c41f7c98b..943cb5361 100644 --- a/resources/lang/sv/entities.php +++ b/resources/lang/sv/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Utkastet sparades ', 'pages_edit_delete_draft' => 'Ta bort utkast', 'pages_edit_discard_draft' => 'Ta bort utkastet', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Beskriv dina ändringar', 'pages_edit_enter_changelog_desc' => 'Ange en kort beskrivning av de ändringar du har gjort', 'pages_edit_enter_changelog' => 'Ändringslogg', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Spara sida', 'pages_title' => 'Sidtitel', 'pages_name' => 'Sidans namn', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revisions #:id', 'pages_revisions_numbered_changes' => 'Revision #:id ändringar', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Ändringslogg', 'pages_revisions_changes' => 'Ändringar', 'pages_revisions_current' => 'Nuvarande version', diff --git a/resources/lang/sv/settings.php b/resources/lang/sv/settings.php index 0e770f6a0..a1e167153 100644 --- a/resources/lang/sv/settings.php +++ b/resources/lang/sv/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Aktivera högre säkerhet för bilduppladdningar?', 'app_secure_images_toggle' => 'Aktivera säkrare bilduppladdningar', 'app_secure_images_desc' => 'Av prestandaskäl är alla bilder publika. Det här alternativet lägger till en slumpmässig, svårgissad sträng framför alla bild-URL:er. Se till att kataloglistning inte är aktivt för att förhindra åtkomst.', - 'app_editor' => 'Redigeringsverktyg', - 'app_editor_desc' => 'Välj vilket redigeringsverktyg som ska användas av alla användare för att redigera sidor.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Egen HTML i ', 'app_custom_html_desc' => 'Eventuellt innehåll i det här fältet placeras längst ner i -sektionen på varje sida. Detta är användbart för att skriva över stilmaller eller lägga in spårningskoder.', 'app_custom_html_disabled_notice' => 'Anpassat innehåll i HTML-huvud är inaktiverat på denna inställningssida för att säkerställa att eventuella ändringar som påverkar funktionaliteten kan återställas.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Åtkomst till systemets API', 'role_manage_settings' => 'Hantera appinställningar', 'role_export_content' => 'Export content', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Tillgång till innehåll', 'roles_system_warning' => 'Var medveten om att åtkomst till någon av ovanstående tre behörigheter kan tillåta en användare att ändra sina egna rättigheter eller andras rättigheter i systemet. Tilldela endast roller med dessa behörigheter till betrodda användare.', 'role_asset_desc' => 'Det här är standardinställningarna för allt innehåll i systemet. Eventuella anpassade rättigheter på böcker, kapitel och sidor skriver över dessa inställningar.', diff --git a/resources/lang/tr/activities.php b/resources/lang/tr/activities.php index 68ccbc378..ee11a89bf 100644 --- a/resources/lang/tr/activities.php +++ b/resources/lang/tr/activities.php @@ -9,59 +9,59 @@ return [ 'page_create' => 'sayfa oluşturdu', 'page_create_notification' => 'Sayfa Başarıyla Oluşturuldu', 'page_update' => 'sayfayı güncelledi', - 'page_update_notification' => 'Page successfully updated', + 'page_update_notification' => 'Sayfa başarıyla güncellendi', 'page_delete' => 'sayfayı sildi', - 'page_delete_notification' => 'Page successfully deleted', + 'page_delete_notification' => 'Sayfa başarıyla silindi', 'page_restore' => 'sayfayı eski haline getirdi', - 'page_restore_notification' => 'Page successfully restored', + 'page_restore_notification' => 'Sayfa başarıyla kurtarıldı', 'page_move' => 'sayfayı taşıdı', // Chapters 'chapter_create' => 'bölüm oluşturdu', - 'chapter_create_notification' => 'Chapter successfully created', + 'chapter_create_notification' => 'Bölüm başarıyla oluşturuldu', 'chapter_update' => 'bölümü güncelledi', - 'chapter_update_notification' => 'Chapter successfully updated', + 'chapter_update_notification' => 'Bölüm başarıyla güncellendi', 'chapter_delete' => 'bölümü sildi', - 'chapter_delete_notification' => 'Chapter successfully deleted', + 'chapter_delete_notification' => 'Bölüm başarıyla silindi', 'chapter_move' => 'bölümü taşıdı', // Books 'book_create' => 'kitap oluşturdu', - 'book_create_notification' => 'Book successfully created', + 'book_create_notification' => 'Kitap başarıyla oluşturuldu', 'book_update' => 'kitabı güncelledi', - 'book_update_notification' => 'Book successfully updated', + 'book_update_notification' => 'Kitap başarıyla güncellendi', 'book_delete' => 'kitabı sildi', - 'book_delete_notification' => 'Book successfully deleted', + 'book_delete_notification' => 'Kitap başarıyla silindi', 'book_sort' => 'kitabı sıraladı', - 'book_sort_notification' => 'Book successfully re-sorted', + 'book_sort_notification' => 'Kitap başarıyla yeniden sıralandı', // Bookshelves - 'bookshelf_create' => 'created bookshelf', - 'bookshelf_create_notification' => 'Bookshelf successfully created', + 'bookshelf_create' => 'kitaplık oluşturuldu', + 'bookshelf_create_notification' => 'Kitaplık başarıyla oluşturuldu', 'bookshelf_update' => 'kitaplığı güncelledi', - 'bookshelf_update_notification' => 'Bookshelf successfully updated', + 'bookshelf_update_notification' => 'Kitaplık başarıyla güncellendi', 'bookshelf_delete' => 'kitaplığı sildi', - 'bookshelf_delete_notification' => 'Bookshelf successfully deleted', + 'bookshelf_delete_notification' => 'Kitaplık başarıyla silindi', // Favourites 'favourite_add_notification' => '":name" favorilerinize eklendi', 'favourite_remove_notification' => '":name" favorilerinizden çıkarıldı', // MFA - 'mfa_setup_method_notification' => 'Multi-factor method successfully configured', - 'mfa_remove_method_notification' => 'Multi-factor method successfully removed', + 'mfa_setup_method_notification' => 'Çok aşamalı kimlik doğrulama yöntemi başarıyla yapılandırıldı', + 'mfa_remove_method_notification' => 'Çok aşamalı kimlik doğrulama yöntemi başarıyla kaldırıldı', // Webhooks - 'webhook_create' => 'created webhook', - 'webhook_create_notification' => 'Webhook successfully created', - 'webhook_update' => 'updated webhook', - 'webhook_update_notification' => 'Webhook successfully updated', - 'webhook_delete' => 'deleted webhook', - 'webhook_delete_notification' => 'Webhook successfully deleted', + 'webhook_create' => 'web kancası oluşturuldu', + 'webhook_create_notification' => 'Web kancası başarıyla oluşturuldu', + 'webhook_update' => 'web kancası güncellendi', + 'webhook_update_notification' => 'Web kancası başarıyla güncellendi', + 'webhook_delete' => 'web kancası silindi', + 'webhook_delete_notification' => 'Web kancası başarıyla silindi', // Users - 'user_update_notification' => 'User successfully updated', - 'user_delete_notification' => 'User successfully removed', + 'user_update_notification' => 'Kullanıcı başarıyla güncellendi', + 'user_delete_notification' => 'Kullanıcı başarıyla silindi', // Other 'commented_on' => 'yorum yaptı', diff --git a/resources/lang/tr/auth.php b/resources/lang/tr/auth.php index 8a5d25a2a..591e7e3cf 100644 --- a/resources/lang/tr/auth.php +++ b/resources/lang/tr/auth.php @@ -21,7 +21,7 @@ return [ 'email' => 'E-posta', 'password' => 'Şifre', 'password_confirm' => 'Şifreyi Onaylayın', - 'password_hint' => 'Must be at least 8 characters', + 'password_hint' => 'En az 8 karakter olmalı', 'forgot_password' => 'Şifrenizi mi unuttunuz?', 'remember_me' => 'Beni Hatırla', 'ldap_email_hint' => 'Bu hesap için kullanmak istediğiniz e-posta adresini giriniz.', @@ -54,7 +54,7 @@ return [ 'email_confirm_text' => 'Lütfen aşağıdaki butona tıklayarak e-posta adresinizi doğrulayın:', 'email_confirm_action' => 'E-posta Adresini Doğrula', 'email_confirm_send_error' => 'E-posta adresinin doğrulanması gerekiyor fakat sistem, doğrulama bağlantısını göndermeyi başaramadı. E-posta adresinin doğru bir şekilde ayarlığından emin olmak için yöneticiyle iletişime geçin.', - 'email_confirm_success' => 'Your email has been confirmed! You should now be able to login using this email address.', + 'email_confirm_success' => 'Email hesabınız onaylandı. Email adresinizi kullanarak giriş yapabilirsiniz.', 'email_confirm_resent' => 'Doğrulama e-postası tekrar gönderildi, lütfen gelen kutunuzu kontrol ediniz.', 'email_not_confirmed' => 'E-posta Adresi Doğrulanmadı', @@ -71,40 +71,40 @@ return [ 'user_invite_page_welcome' => ':appName uygulamasına hoş geldiniz!', 'user_invite_page_text' => 'Hesap kurulumunuzu tamamlamak ve gelecekteki :appName ziyaretlerinizde hesabınıza erişim sağlayabilmeniz için bir şifre belirlemeniz gerekiyor.', 'user_invite_page_confirm_button' => 'Şifreyi Onayla', - 'user_invite_success_login' => 'Password set, you should now be able to login using your set password to access :appName!', + 'user_invite_success_login' => 'Şifre belirlendi, :appName! uygulamasına giriş yapmak için belirlediğiniz şifreyi kullanabilirsiniz', // Multi-factor Authentication - 'mfa_setup' => 'Setup Multi-Factor Authentication', - 'mfa_setup_desc' => 'Setup multi-factor authentication as an extra layer of security for your user account.', + 'mfa_setup' => 'Çok Aşamalı Kimlik Doğrulama', + 'mfa_setup_desc' => 'Hesabınıza ekstra bir güvenlik katmanı daha eklemek için çok aşamalı kimlik doğrulamayı kurunuz.', 'mfa_setup_configured' => 'Zaten yapılandırıldı', 'mfa_setup_reconfigure' => 'Yeniden yapılandır', 'mfa_setup_remove_confirmation' => '2 adımlı doğrulamayı kaldırmak istediğinize emin misiniz?', - 'mfa_setup_action' => 'Setup', - 'mfa_backup_codes_usage_limit_warning' => 'You have less than 5 backup codes remaining, Please generate and store a new set before you run out of codes to prevent being locked out of your account.', + 'mfa_setup_action' => 'Ayarlar', + 'mfa_backup_codes_usage_limit_warning' => 'Kalan yedekleme kodu sayınız 5\'ten az, hesabınızın kilitlenip kullanım dışı kalmaması için lütfen kodlarınız bitmeden yeni kod üretip saklayınız.', 'mfa_option_totp_title' => 'Mobil Uygulama', - 'mfa_option_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.', - 'mfa_option_backup_codes_title' => 'Backup Codes', + 'mfa_option_totp_desc' => 'Çok aşamalı kimlik doğrulamayı kullanabilmek için Google Authenticator, Authy veya Microsoft Authenticator gibi TOTP destekleyen bir mobil uygulamaya ihtiyacınız olacaktır.', + 'mfa_option_backup_codes_title' => 'Yedekleme Kodları', 'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.', - 'mfa_gen_confirm_and_enable' => 'Confirm and Enable', - 'mfa_gen_backup_codes_title' => 'Backup Codes Setup', + 'mfa_gen_confirm_and_enable' => 'Onayla ve aktive et', + 'mfa_gen_backup_codes_title' => 'Yedekleme Kodları Kurulumu', 'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.', - 'mfa_gen_backup_codes_download' => 'Download Codes', - 'mfa_gen_backup_codes_usage_warning' => 'Each code can only be used once', - 'mfa_gen_totp_title' => 'Mobile App Setup', + 'mfa_gen_backup_codes_download' => 'İndirme Kodları', + 'mfa_gen_backup_codes_usage_warning' => 'Her kod tek seferlik kullanılabilir', + 'mfa_gen_totp_title' => 'Mobil Uygulama Kurulumu', 'mfa_gen_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.', 'mfa_gen_totp_scan' => 'Scan the QR code below using your preferred authentication app to get started.', - 'mfa_gen_totp_verify_setup' => 'Verify Setup', - 'mfa_gen_totp_verify_setup_desc' => 'Verify that all is working by entering a code, generated within your authentication app, in the input box below:', - 'mfa_gen_totp_provide_code_here' => 'Provide your app generated code here', - 'mfa_verify_access' => 'Verify Access', - 'mfa_verify_access_desc' => 'Your user account requires you to confirm your identity via an additional level of verification before you\'re granted access. Verify using one of your configured methods to continue.', - 'mfa_verify_no_methods' => 'No Methods Configured', - 'mfa_verify_no_methods_desc' => 'No multi-factor authentication methods could be found for your account. You\'ll need to set up at least one method before you gain access.', - 'mfa_verify_use_totp' => 'Verify using a mobile app', - 'mfa_verify_use_backup_codes' => 'Verify using a backup code', - 'mfa_verify_backup_code' => 'Backup Code', - 'mfa_verify_backup_code_desc' => 'Enter one of your remaining backup codes below:', - 'mfa_verify_backup_code_enter_here' => 'Enter backup code here', - 'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:', + 'mfa_gen_totp_verify_setup' => 'Kurulumu Doğrula', + 'mfa_gen_totp_verify_setup_desc' => 'Aşağıdaki kutuya kimlik doğrulama uygulamanızda üretilmiş olan kodu girerek hepsini doğrulayabilirsiniz:', + 'mfa_gen_totp_provide_code_here' => 'Uygulamada üretilen kodunuzu buraya giriniz', + 'mfa_verify_access' => 'Girişi Doğrula', + 'mfa_verify_access_desc' => 'Giriş yapmadan önce ek güvenlik doğrulaması amacıyla kimliğinizin doğrulanması gerekmektedir. Aşağıda belirtilen yöntemlerden birini kullanarak devam ediniz.', + 'mfa_verify_no_methods' => 'Hiçbir Yöntem Ayarlanmadı', + 'mfa_verify_no_methods_desc' => 'Hesabınızda çok aşamalı kimlik doğrulama yöntemi bulunamadı. Giriş yapabilmek için en az bir tane yöntemi ayarlamanız gerekmektedir.', + 'mfa_verify_use_totp' => 'Mobil uygulama kullanarak doğrula', + 'mfa_verify_use_backup_codes' => 'Yedekleme kodu kullanarak doğrula', + 'mfa_verify_backup_code' => 'Yedekleme Kodu', + 'mfa_verify_backup_code_desc' => 'Kalan yedekleme kodlarınızdan birini giriniz:', + 'mfa_verify_backup_code_enter_here' => 'Yedekleme kodunuzu buraya giriniz', + 'mfa_verify_totp_desc' => 'Mobil uygulamada üretilmiş kodu aşağıya giriniz:', 'mfa_setup_login_notification' => '2 adımlı doğrulama ayarlandı, Lütfen 2 adımlı doğrulama kullanarak yeniden giriş yapınız.', ]; diff --git a/resources/lang/tr/common.php b/resources/lang/tr/common.php index 7ecf247e1..40b8591b3 100644 --- a/resources/lang/tr/common.php +++ b/resources/lang/tr/common.php @@ -39,14 +39,14 @@ return [ 'reset' => 'Sıfırla', 'remove' => 'Kaldır', 'add' => 'Ekle', - 'configure' => 'Configure', + 'configure' => 'Yapılandır', 'fullscreen' => 'Tam Ekran', - 'favourite' => 'Favourite', - 'unfavourite' => 'Unfavourite', - 'next' => 'Next', - 'previous' => 'Previous', - 'filter_active' => 'Active Filter:', - 'filter_clear' => 'Clear Filter', + 'favourite' => 'Favoriye ekle', + 'unfavourite' => 'Favorilerden çıkar', + 'next' => 'Sonraki', + 'previous' => 'Önceki', + 'filter_active' => 'Aktif filtre:', + 'filter_clear' => 'Filtreyi Kaldır', // Sort Options 'sort_options' => 'Sıralama Seçenekleri', @@ -54,7 +54,7 @@ return [ 'sort_ascending' => 'Artan Sıralama', 'sort_descending' => 'Azalan Sıralama', 'sort_name' => 'İsim', - 'sort_default' => 'Default', + 'sort_default' => 'Varsayılan', 'sort_created_at' => 'Oluşturulma Tarihi', 'sort_updated_at' => 'Güncelleme Tarihi', @@ -63,7 +63,7 @@ return [ 'no_activity' => 'Gösterilecek eylem bulunamadı', 'no_items' => 'Herhangi bir öge bulunamadı', 'back_to_top' => 'Başa dön', - 'skip_to_main_content' => 'Skip to main content', + 'skip_to_main_content' => 'Ana içeriğe geç', 'toggle_details' => 'Detayları Göster/Gizle', 'toggle_thumbnails' => 'Ön İzleme Görsellerini Göster/Gizle', 'details' => 'Detaylar', @@ -71,14 +71,14 @@ return [ 'list_view' => 'Liste Görünümü', 'default' => 'Varsayılan', 'breadcrumb' => 'Gezinti Menüsü', - 'status' => 'Status', - 'status_active' => 'Active', - 'status_inactive' => 'Inactive', - 'never' => 'Never', - 'none' => 'None', + 'status' => 'Durum', + 'status_active' => 'Etkin', + 'status_inactive' => 'Devre dışı', + 'never' => 'Hiçbir zaman', + 'none' => 'Hiçbiri', // Header - 'header_menu_expand' => 'Expand Header Menu', + 'header_menu_expand' => 'Başlık Menüsünü Genişlet', 'profile_menu' => 'Profil Menüsü', 'view_profile' => 'Profili Görüntüle', 'edit_profile' => 'Profili Düzenle', @@ -97,6 +97,6 @@ return [ // Footer Link Options // Not directly used but available for convenience to users. - 'privacy_policy' => 'Privacy Policy', - 'terms_of_service' => 'Terms of Service', + 'privacy_policy' => 'Gizlilik Politikası', + 'terms_of_service' => 'Hizmet Şartları', ]; diff --git a/resources/lang/tr/editor.php b/resources/lang/tr/editor.php index 827120292..1296d0353 100644 --- a/resources/lang/tr/editor.php +++ b/resources/lang/tr/editor.php @@ -7,165 +7,165 @@ */ return [ // General editor terms - 'general' => 'General', - 'advanced' => 'Advanced', - 'none' => 'None', - 'cancel' => 'Cancel', - 'save' => 'Save', - 'close' => 'Close', - 'undo' => 'Undo', - 'redo' => 'Redo', - 'left' => 'Left', - 'center' => 'Center', - 'right' => 'Right', - 'top' => 'Top', - 'middle' => 'Middle', - 'bottom' => 'Bottom', - 'width' => 'Width', - 'height' => 'Height', - 'More' => 'More', - 'select' => 'Select...', + 'general' => 'Genel', + 'advanced' => 'Gelişmiş seçenekler', + 'none' => 'Hiçbiri', + 'cancel' => 'İptal', + 'save' => 'Kaydet', + 'close' => 'Kapat', + 'undo' => 'Geri al', + 'redo' => 'Yeniden yap', + 'left' => 'Sol', + 'center' => 'Merkez', + 'right' => 'Sağ', + 'top' => 'Üst', + 'middle' => 'Orta', + 'bottom' => 'Alt', + 'width' => 'Genişlik', + 'height' => 'Yükseklik', + 'More' => 'Daha fazla', + 'select' => 'Seç...', // Toolbar - 'formats' => 'Formats', - 'header_large' => 'Large Header', - 'header_medium' => 'Medium Header', - 'header_small' => 'Small Header', - 'header_tiny' => 'Tiny Header', - 'paragraph' => 'Paragraph', - 'blockquote' => 'Blockquote', - 'inline_code' => 'Inline code', - 'callouts' => 'Callouts', - 'callout_information' => 'Information', - 'callout_success' => 'Success', - 'callout_warning' => 'Warning', - 'callout_danger' => 'Danger', - 'bold' => 'Bold', - 'italic' => 'Italic', - 'underline' => 'Underline', - 'strikethrough' => 'Strikethrough', - 'superscript' => 'Superscript', - 'subscript' => 'Subscript', - 'text_color' => 'Text color', - 'custom_color' => 'Custom color', - 'remove_color' => 'Remove color', - 'background_color' => 'Background color', - 'align_left' => 'Align left', - 'align_center' => 'Align center', - 'align_right' => 'Align right', - 'align_justify' => 'Justify', - 'list_bullet' => 'Bullet list', - 'list_numbered' => 'Numbered list', - 'list_task' => 'Task list', - 'indent_increase' => 'Increase indent', - 'indent_decrease' => 'Decrease indent', - 'table' => 'Table', - 'insert_image' => 'Insert image', - 'insert_image_title' => 'Insert/Edit Image', - 'insert_link' => 'Insert/edit link', - 'insert_link_title' => 'Insert/Edit Link', - 'insert_horizontal_line' => 'Insert horizontal line', - 'insert_code_block' => 'Insert code block', - 'insert_drawing' => 'Insert/edit drawing', - 'drawing_manager' => 'Drawing manager', - 'insert_media' => 'Insert/edit media', - 'insert_media_title' => 'Insert/Edit Media', - 'clear_formatting' => 'Clear formatting', - 'source_code' => 'Source code', - 'source_code_title' => 'Source Code', - 'fullscreen' => 'Fullscreen', - 'image_options' => 'Image options', + 'formats' => 'Formatlar', + 'header_large' => 'Büyük başlık', + 'header_medium' => 'Normal Başlık', + 'header_small' => 'Küçük Başlık', + 'header_tiny' => 'Minik Başlık', + 'paragraph' => 'Paragraf', + 'blockquote' => 'Blok alıntı', + 'inline_code' => 'Satır içi kod', + 'callouts' => 'Belirtme çizgileri', + 'callout_information' => 'Bilgi', + 'callout_success' => 'Başarılı', + 'callout_warning' => 'Uyarı', + 'callout_danger' => 'Tehlike', + 'bold' => 'Kalın', + 'italic' => 'İtalik', + 'underline' => 'Altı çizili', + 'strikethrough' => 'Üstü çizili', + 'superscript' => 'Üst simge', + 'subscript' => 'Alt simge', + 'text_color' => 'Metin rengi', + 'custom_color' => 'Özel renk', + 'remove_color' => 'Rengi kaldır', + 'background_color' => 'Arka plan rengi', + 'align_left' => 'Sola hizala', + 'align_center' => 'Merkeze hizala', + 'align_right' => 'Sağa hizala', + 'align_justify' => 'İki yana yasla', + 'list_bullet' => 'Noktalı liste', + 'list_numbered' => 'Numaralı liste', + 'list_task' => 'Görev listesi', + 'indent_increase' => 'Girintiyi artır', + 'indent_decrease' => 'Girintiyi azalt', + 'table' => 'Tablo', + 'insert_image' => 'Resim ekle', + 'insert_image_title' => 'Resim Ekle/Düzenle', + 'insert_link' => 'Bağlantı ekle/düzenle', + 'insert_link_title' => 'Bağlantı Ekle/Düzenle', + 'insert_horizontal_line' => 'Yatay çizgi ekle', + 'insert_code_block' => 'Kod bloğu ekle', + 'insert_drawing' => 'Çizim ekle/düzenle', + 'drawing_manager' => 'Çizim yöneticisi', + 'insert_media' => 'Medya ekle/düzenle', + 'insert_media_title' => 'Medya Ekle/Düzenle', + 'clear_formatting' => 'Biçimlendirmeyi temizle', + 'source_code' => 'Kaynak kodu', + 'source_code_title' => 'Kaynak Kodu', + 'fullscreen' => 'Tam ekran', + 'image_options' => 'Resim seçenekleri', // Tables - 'table_properties' => 'Table properties', - 'table_properties_title' => 'Table Properties', - 'delete_table' => 'Delete table', - 'insert_row_before' => 'Insert row before', - 'insert_row_after' => 'Insert row after', - 'delete_row' => 'Delete row', - 'insert_column_before' => 'Insert column before', - 'insert_column_after' => 'Insert column after', - 'delete_column' => 'Delete column', - 'table_cell' => 'Cell', - 'table_row' => 'Row', - 'table_column' => 'Column', - 'cell_properties' => 'Cell properties', - 'cell_properties_title' => 'Cell Properties', - 'cell_type' => 'Cell type', - 'cell_type_cell' => 'Cell', - 'cell_scope' => 'Scope', - 'cell_type_header' => 'Header cell', - 'merge_cells' => 'Merge cells', - 'split_cell' => 'Split cell', - 'table_row_group' => 'Row Group', - 'table_column_group' => 'Column Group', - 'horizontal_align' => 'Horizontal align', - 'vertical_align' => 'Vertical align', - 'border_width' => 'Border width', - 'border_style' => 'Border style', - 'border_color' => 'Border color', - 'row_properties' => 'Row properties', - 'row_properties_title' => 'Row Properties', - 'cut_row' => 'Cut row', - 'copy_row' => 'Copy row', - 'paste_row_before' => 'Paste row before', - 'paste_row_after' => 'Paste row after', - 'row_type' => 'Row type', - 'row_type_header' => 'Header', - 'row_type_body' => 'Body', - 'row_type_footer' => 'Footer', - 'alignment' => 'Alignment', - 'cut_column' => 'Cut column', - 'copy_column' => 'Copy column', - 'paste_column_before' => 'Paste column before', - 'paste_column_after' => 'Paste column after', - 'cell_padding' => 'Cell padding', - 'cell_spacing' => 'Cell spacing', - 'caption' => 'Caption', - 'show_caption' => 'Show caption', - 'constrain' => 'Constrain proportions', - 'cell_border_solid' => 'Solid', - 'cell_border_dotted' => 'Dotted', - 'cell_border_dashed' => 'Dashed', - 'cell_border_double' => 'Double', + 'table_properties' => 'Tablo özellikleri', + 'table_properties_title' => 'Tablo Özellikleri', + 'delete_table' => 'Tabloyu sil', + 'insert_row_before' => 'Üste satır ekle', + 'insert_row_after' => 'Alta satır ekle', + 'delete_row' => 'Satırı sil', + 'insert_column_before' => 'Sola sütun ekle', + 'insert_column_after' => 'Sağa sütun ekle', + 'delete_column' => 'Sütunu sil', + 'table_cell' => 'Hücre', + 'table_row' => 'Satır', + 'table_column' => 'Sütun', + 'cell_properties' => 'Hücre özellikleri', + 'cell_properties_title' => 'Hücre Özellikleri', + 'cell_type' => 'Hücre tipi', + 'cell_type_cell' => 'Hücre', + 'cell_scope' => 'Kapsam', + 'cell_type_header' => 'Başlık hücresi', + 'merge_cells' => 'Hücreleri birleştir', + 'split_cell' => 'Hücreyi böl', + 'table_row_group' => 'Satır Grubu', + 'table_column_group' => 'Sütun Grubu', + 'horizontal_align' => 'Yatay hizalama', + 'vertical_align' => 'Dikey hizalama', + 'border_width' => 'Kenarlık genişliği', + 'border_style' => 'Kenarlık stili', + 'border_color' => 'Kenarlık rengi', + 'row_properties' => 'Satır özellikleri', + 'row_properties_title' => 'Satır Özellikleri', + 'cut_row' => 'Satırı kes', + 'copy_row' => 'Satırı kopyala', + 'paste_row_before' => 'Üste satırı yapıştır', + 'paste_row_after' => 'Alta satırı yapıştır', + 'row_type' => 'Satır tipi', + 'row_type_header' => 'Üstbaşlık', + 'row_type_body' => 'Gövde', + 'row_type_footer' => 'Altbilgi', + 'alignment' => 'Hizalama', + 'cut_column' => 'Sütünu kes', + 'copy_column' => 'Sütunu kopyala', + 'paste_column_before' => 'Sütünu sola yapıştır', + 'paste_column_after' => 'Sütunu sağa yapıştır', + 'cell_padding' => 'Hücre boşluğu', + 'cell_spacing' => 'Hücre aralığı', + 'caption' => 'Başlık', + 'show_caption' => 'Açıklamayı göster', + 'constrain' => 'Oranları sınırla', + 'cell_border_solid' => 'Düz', + 'cell_border_dotted' => 'Noktalı', + 'cell_border_dashed' => 'Kesik çizgili', + 'cell_border_double' => 'Çift', 'cell_border_groove' => 'Groove', 'cell_border_ridge' => 'Ridge', 'cell_border_inset' => 'Inset', 'cell_border_outset' => 'Outset', - 'cell_border_none' => 'None', - 'cell_border_hidden' => 'Hidden', + 'cell_border_none' => 'Hiçbiri', + 'cell_border_hidden' => 'Gizli', // Images, links, details/summary & embed - 'source' => 'Source', - 'alt_desc' => 'Alternative description', - 'embed' => 'Embed', - 'paste_embed' => 'Paste your embed code below:', + 'source' => 'Kaynak', + 'alt_desc' => 'Alternatif açıklama', + 'embed' => 'Yerleştir', + 'paste_embed' => 'Gömme kodunuzu aşağı yapıştırın:', 'url' => 'URL', - 'text_to_display' => 'Text to display', - 'title' => 'Title', - 'open_link' => 'Open link in...', - 'open_link_current' => 'Current window', - 'open_link_new' => 'New window', + 'text_to_display' => 'Görüntülenecek metin', + 'title' => 'Başlık', + 'open_link' => 'Bağlantıyı şurada aç...', + 'open_link_current' => 'Geçerli pencere', + 'open_link_new' => 'Yeni pencere', 'insert_collapsible' => 'Insert collapsible block', 'collapsible_unwrap' => 'Unwrap', - 'edit_label' => 'Edit label', + 'edit_label' => 'Etiketi düzenle', 'toggle_open_closed' => 'Toggle open/closed', 'collapsible_edit' => 'Edit collapsible block', - 'toggle_label' => 'Toggle label', + 'toggle_label' => 'Etiketleri aç/kapa', // About view - 'about' => 'About the editor', - 'about_title' => 'About the WYSIWYG Editor', - 'editor_license' => 'Editor License & Copyright', - 'editor_tiny_license' => 'This editor is built using :tinyLink which is provided under an LGPL v2.1 license.', - 'editor_tiny_license_link' => 'The copyright and license details of TinyMCE can be found here.', - 'save_continue' => 'Save Page & Continue', - 'callouts_cycle' => '(Keep pressing to toggle through types)', - 'link_selector' => 'Link to content', - 'shortcuts' => 'Shortcuts', - 'shortcut' => 'Shortcut', - 'shortcuts_intro' => 'The following shortcuts are available in the editor:', + 'about' => 'Editör hakkında', + 'about_title' => 'WYSIWYG editor hakkında', + 'editor_license' => 'Editor Lisans ve Telif Hakkı', + 'editor_tiny_license' => 'Bu metin düzenleyici LGPL v2.1 lisansı altında :tinyLink kullanılarak yapılmıştır.', + 'editor_tiny_license_link' => 'TinyMCE telif ve lisans bilgilerini burada bulabilirsiniz.', + 'save_continue' => 'Kaydet & Devam Et', + 'callouts_cycle' => '(Türler arasında geçiş için basmaya devam ediniz)', + 'link_selector' => 'İçeriğe bağlantı', + 'shortcuts' => 'Kısayollar', + 'shortcut' => 'Kısayol', + 'shortcuts_intro' => 'Aşağıdaki kısayollar editörde kullanılabilir:', 'windows_linux' => '(Windows/Linux)', 'mac' => '(Mac)', - 'description' => 'Description', + 'description' => 'Açıklama', ]; diff --git a/resources/lang/tr/entities.php b/resources/lang/tr/entities.php index 738f88519..f66a32f3d 100644 --- a/resources/lang/tr/entities.php +++ b/resources/lang/tr/entities.php @@ -27,8 +27,8 @@ return [ 'images' => 'Görseller', 'my_recent_drafts' => 'Son Taslaklarım', 'my_recently_viewed' => 'Son Görüntülediklerim', - 'my_most_viewed_favourites' => 'My Most Viewed Favourites', - 'my_favourites' => 'My Favourites', + 'my_most_viewed_favourites' => 'En Çok Görüntülenen Favoriler', + 'my_favourites' => 'Favorilerim', 'no_pages_viewed' => 'Herhangi bir sayfa görüntülemediniz', 'no_pages_recently_created' => 'Yakın zamanda bir sayfa oluşturulmadı', 'no_pages_recently_updated' => 'Yakın zamanda bir sayfa güncellenmedi', @@ -143,8 +143,8 @@ return [ 'books_sort_chapters_last' => 'En Son Bölümler', 'books_sort_show_other' => 'Diğer Kitapları Göster', 'books_sort_save' => 'Yeni Düzeni Kaydet', - 'books_copy' => 'Copy Book', - 'books_copy_success' => 'Book successfully copied', + 'books_copy' => 'Kitabı Kopyala', + 'books_copy_success' => 'Kitap başarıyla kopyalandı', // Chapters 'chapter' => 'Bölüm', @@ -163,8 +163,8 @@ return [ 'chapters_move' => 'Bölümü Taşı', 'chapters_move_named' => ':chapterName Bölümünü Taşı', 'chapter_move_success' => 'Bölüm, :bookName kitabına taşındı', - 'chapters_copy' => 'Copy Chapter', - 'chapters_copy_success' => 'Chapter successfully copied', + 'chapters_copy' => 'Bölümü kopyala', + 'chapters_copy_success' => 'Bölüm başarıyla kopyalandı', 'chapters_permissions' => 'Bölüm İzinleri', 'chapters_empty' => 'Bu bölümde henüz bir sayfa bulunmuyor.', 'chapters_permissions_active' => 'Bölüm İzinleri Aktif', @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Taslak kaydedildi ', 'pages_edit_delete_draft' => 'Taslağı Sil', 'pages_edit_discard_draft' => 'Taslağı Yoksay', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Değişim Günlüğünü Ayarla', 'pages_edit_enter_changelog_desc' => 'Yaptığınız değişiklikler hakkında kısa bir açıklama girin', 'pages_edit_enter_changelog' => 'Değişim Günlüğünü Yazın', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Sayfayı Kaydet', 'pages_title' => 'Sayfa Başlığı', 'pages_name' => 'Sayfa İsmi', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Revizyon #:id', 'pages_revisions_numbered_changes' => 'Revizyon #:id Değişiklikleri', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Değişim Günlüğü', 'pages_revisions_changes' => 'Değişiklikler', 'pages_revisions_current' => 'Şimdiki Sürüm', @@ -268,10 +279,10 @@ return [ 'tags_assigned_books' => 'Assigned to Books', 'tags_assigned_shelves' => 'Assigned to Shelves', 'tags_x_unique_values' => ':count unique values', - 'tags_all_values' => 'All values', - 'tags_view_tags' => 'View Tags', - 'tags_view_existing_tags' => 'View existing tags', - 'tags_list_empty_hint' => 'Tags can be assigned via the page editor sidebar or while editing the details of a book, chapter or shelf.', + 'tags_all_values' => 'Tüm değerler', + 'tags_view_tags' => 'Etiketleri Göster', + 'tags_view_existing_tags' => 'Mevcut etiketleri göster', + 'tags_list_empty_hint' => 'Etiketleri sayfa editörü yan menüsünden veya kitap, bölüm veya rafları düzenlerken ekleyebilirsiniz.', 'attachments' => 'Ekler', 'attachments_explain' => 'Sayfanızda göstermek için dosyalar yükleyin veya bağlantılar ekleyin. Bunlar, sayfaya ait yan menüde gösterilecektir.', 'attachments_explain_instant_save' => 'Burada yapılan değişiklikler anında kaydedilir.', @@ -338,10 +349,10 @@ return [ 'revision_cannot_delete_latest' => 'Son revizyonu silemezsiniz.', // Copy view - 'copy_consider' => 'Please consider the below when copying content.', - 'copy_consider_permissions' => 'Custom permission settings will not be copied.', - 'copy_consider_owner' => 'You will become the owner of all copied content.', - 'copy_consider_images' => 'Page image files will not be duplicated & the original images will retain their relation to the page they were originally uploaded to.', - 'copy_consider_attachments' => 'Page attachments will not be copied.', - 'copy_consider_access' => 'A change of location, owner or permissions may result in this content being accessible to those previously without access.', + 'copy_consider' => 'İçeriği kopyalarken aşağıdakileri hesaba katınız.', + 'copy_consider_permissions' => 'Özel izin ayarları kopyalanmayacak.', + 'copy_consider_owner' => 'Tüm kopyalanan içeriğin sahibi olacaksınız.', + 'copy_consider_images' => 'Sayfa resim dosyalarının ikinci bir kopyası oluşturulmayıp, resimlerin ilk yüklendiği sayfadaki bağlantısı tutulacaktır.', + 'copy_consider_attachments' => 'Sayfa ekleri kopyalanmayacak.', + 'copy_consider_access' => 'Konum, sahiplik veya izinlerde yapılan bir değişiklik önceden erişimi olmayanlara erişim hakkı kazandırabilir.', ]; diff --git a/resources/lang/tr/settings.php b/resources/lang/tr/settings.php index 05b0a092a..c4715b4f9 100755 --- a/resources/lang/tr/settings.php +++ b/resources/lang/tr/settings.php @@ -10,8 +10,8 @@ return [ 'settings' => 'Ayarlar', 'settings_save' => 'Ayarları Kaydet', 'settings_save_success' => 'Ayarlar kaydedildi', - 'system_version' => 'System Version', - 'categories' => 'Categories', + 'system_version' => 'Sistem Sürümü', + 'categories' => 'Kategoriler', // App Settings 'app_customization' => 'Özelleştirme', @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Daha Güvenli Görsel Yüklemeleri', 'app_secure_images_toggle' => 'Daha güvenli görsel yüklemelerini aktifleştir', 'app_secure_images_desc' => 'Bütün görseller, performans sebepleri nedeniyle herkes tarafından görüntülenebilir durumdadır. Bu seçeneği aktif ederseniz; görsel bağlantılarının önüne rastgele, tahmini zor karakterler eklenmesini sağlarsınız. Kolay erişimin önlenmesi için dizin indekslerinin kapalı olduğundan emin olun.', - 'app_editor' => 'Sayfa Düzenleyicisi', - 'app_editor_desc' => 'Sayfa düzenlemesi yapılırken, bütün kullanıcılar tarafından hangi düzenleyicinin kullanılacağını seçin.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Özel HTML "Head" İçeriği', 'app_custom_html_desc' => 'Buraya yazacağınız içerik, etiketinin içine ve en sonuna eklenecektir. Bu işlem, stil değişikliklerinin uygulanmasında ya da analytics kodlarının eklenmesinde yararlı olmaktadır.', 'app_custom_html_disabled_notice' => 'Olası hatalı değişikliklerin geriye alınabilmesi için bu sayfanın özelleştirilmiş HTML "head" içeriği devre dışı bırakıldı.', @@ -39,11 +39,11 @@ return [ 'app_homepage' => 'Ana Sayfa', 'app_homepage_desc' => 'Varsayılan görünüm yerine ana sayfada görünmesi için bir görünüm seçin. Sayfa izinleri, burada seçeceğiniz sayfalar için yok sayılacaktır.', 'app_homepage_select' => 'Bir sayfa seçin', - 'app_footer_links' => 'Footer Links', + 'app_footer_links' => 'Altbilgi Bağlantıları', 'app_footer_links_desc' => 'Add links to show within the site footer. These will be displayed at the bottom of most pages, including those that do not require login. You can use a label of "trans::" to use system-defined translations. For example: Using "trans::common.privacy_policy" will provide the translated text "Privacy Policy" and "trans::common.terms_of_service" will provide the translated text "Terms of Service".', - 'app_footer_links_label' => 'Link Label', - 'app_footer_links_url' => 'Link URL', - 'app_footer_links_add' => 'Add Footer Link', + 'app_footer_links_label' => 'Bağlantı Etiketi', + 'app_footer_links_url' => 'Bağlantı adresi', + 'app_footer_links_add' => 'Altbilgi Bağlantısı Ekle', 'app_disable_comments' => 'Yorumları Devre Dışı Bırak', 'app_disable_comments_toggle' => 'Yorumları devre dışı bırak', 'app_disable_comments_desc' => 'Bütün sayfalar için yorumları devre dışı bırakır.
    Mevcut yorumlar gösterilmeyecektir.', @@ -94,7 +94,7 @@ return [ 'recycle_bin' => 'Geri Dönüşüm Kutusu', 'recycle_bin_desc' => 'Burada silinen öğeleri geri yükleyebilir veya bunları sistemden kalıcı olarak kaldırmayı seçebilirsiniz. Bu liste, izin filtrelerinin uygulandığı sistemdeki benzer etkinlik listelerinden farklı olarak filtrelenmez.', 'recycle_bin_deleted_item' => 'Silinen öge', - 'recycle_bin_deleted_parent' => 'Parent', + 'recycle_bin_deleted_parent' => 'Üst', 'recycle_bin_deleted_by' => 'Tarafından silindi', 'recycle_bin_deleted_at' => 'Silinme Zamanı', 'recycle_bin_permanently_delete' => 'Kalıcı Olarak Sil', @@ -121,7 +121,7 @@ return [ 'audit_table_user' => 'Kullanıcı', 'audit_table_event' => 'Etkinlik', 'audit_table_related' => 'İlgili Öğe veya Detay', - 'audit_table_ip' => 'IP Address', + 'audit_table_ip' => 'IP Adresi', 'audit_table_date' => 'Aktivite Tarihi', 'audit_date_from' => 'Tarih Aralığından', 'audit_date_to' => 'Tarih Aralığına', @@ -141,7 +141,7 @@ return [ 'role_details' => 'Rol Detayları', 'role_name' => 'Rol Adı', 'role_desc' => 'Rolün Kısa Tanımı', - 'role_mfa_enforced' => 'Requires Multi-Factor Authentication', + 'role_mfa_enforced' => 'Çok Aşamalı Kimlik Doğrulama Gerekiyor', 'role_external_auth_id' => 'Harici Doğrulama Kimlikleri', 'role_system' => 'Sistem Yetkileri', 'role_manage_users' => 'Kullanıcıları yönet', @@ -151,7 +151,8 @@ return [ 'role_manage_page_templates' => 'Sayfa şablonlarını yönet', 'role_access_api' => 'Sistem programlama arayüzüne (API) eriş', 'role_manage_settings' => 'Uygulama ayarlarını yönet', - 'role_export_content' => 'Export content', + 'role_export_content' => 'İçeriği dışa aktar', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Varlık Yetkileri', 'roles_system_warning' => 'Yukarıdaki üç izinden herhangi birine erişimin, kullanıcının kendi ayrıcalıklarını veya sistemdeki diğerlerinin ayrıcalıklarını değiştirmesine izin verebileceğini unutmayın. Yalnızca bu izinlere sahip rolleri güvenilir kullanıcılara atayın.', 'role_asset_desc' => 'Bu izinler, sistem içindeki varlıklara varsayılan erişim izinlerini ayarlar. Kitaplar, bölümler ve sayfalar üzerindeki izinler, buradaki izinleri geçersiz kılar.', @@ -207,10 +208,10 @@ return [ 'users_api_tokens_create' => 'Anahtar Oluştur', 'users_api_tokens_expires' => 'Bitiş süresi', 'users_api_tokens_docs' => 'API Dokümantasyonu', - 'users_mfa' => 'Multi-Factor Authentication', + 'users_mfa' => 'Çok Aşamalı Kimlik Doğrulama', 'users_mfa_desc' => 'Setup multi-factor authentication as an extra layer of security for your user account.', 'users_mfa_x_methods' => ':count method configured|:count methods configured', - 'users_mfa_configure' => 'Configure Methods', + 'users_mfa_configure' => 'Yöntemleri Yapılandır', // API Tokens 'user_api_token_create' => 'API Anahtarı Oluştur', @@ -249,10 +250,10 @@ return [ 'webhooks_timeout' => 'Webhook Request Timeout (Seconds)', 'webhooks_endpoint' => 'Webhook Endpoint', 'webhooks_active' => 'Webhook Active', - 'webhook_events_table_header' => 'Events', - 'webhooks_delete' => 'Delete Webhook', + 'webhook_events_table_header' => 'Etkinlikler', + 'webhooks_delete' => 'Web Kancasını Sil', 'webhooks_delete_warning' => 'This will fully delete this webhook, with the name \':webhookName\', from the system.', - 'webhooks_delete_confirm' => 'Are you sure you want to delete this webhook?', + 'webhooks_delete_confirm' => 'Bu web kancası silmek istediğinize emin misiniz?', 'webhooks_format_example' => 'Webhook Format Example', 'webhooks_format_example_desc' => 'Webhook data is sent as a POST request to the configured endpoint as JSON following the format below. The "related_item" and "url" properties are optional and will depend on the type of event triggered.', 'webhooks_status' => 'Webhook Status', diff --git a/resources/lang/tr/validation.php b/resources/lang/tr/validation.php index 50a30a5b5..640fe6131 100644 --- a/resources/lang/tr/validation.php +++ b/resources/lang/tr/validation.php @@ -15,7 +15,7 @@ return [ 'alpha_dash' => ':attribute sadece harf, rakam ve tirelerden oluşabilir.', 'alpha_num' => ':attribute sadece harflerden ve rakamlardan oluşabilir.', 'array' => ':attribute bir dizi olmalıdır.', - 'backup_codes' => 'The provided code is not valid or has already been used.', + 'backup_codes' => 'Girilen kod geçersiz veya daha önce kullanılmış.', 'before' => ':attribute tarihi, :date tarihinden önceki bir tarih olmalıdır.', 'between' => [ 'numeric' => ':attribute değeri, :min ve :max değerleri arasında olmalıdır.', @@ -32,7 +32,7 @@ return [ 'digits_between' => ':attribute, en az :min ve en fazla :max basamaklı olmalıdır.', 'email' => ':attribute, geçerli bir e-posta adresi olmalıdır.', 'ends_with' => ':attribute, şunlardan birisiyle bitmelidir: :values', - 'file' => 'The :attribute must be provided as a valid file.', + 'file' => 'Geçerli bir dosya olara :attribute sağlanmalıdır.', 'filled' => ':attribute alanı zorunludur.', 'gt' => [ 'numeric' => ':attribute, :max değerinden büyük olmalıdır.', @@ -100,7 +100,7 @@ return [ ], 'string' => ':attribute, string olmalıdır.', 'timezone' => ':attribute, geçerli bir bölge olmalıdır.', - 'totp' => 'The provided code is not valid or has expired.', + 'totp' => 'Girilen kod geçersiz veya süresi dolmuş.', 'unique' => ':attribute zaten alınmış.', 'url' => ':attribute formatı geçersiz.', 'uploaded' => 'Dosya yüklemesi başarısız oldu. Sunucu, bu boyuttaki dosyaları kabul etmiyor olabilir.', diff --git a/resources/lang/uk/entities.php b/resources/lang/uk/entities.php index 622c9ef42..0aad8ee93 100644 --- a/resources/lang/uk/entities.php +++ b/resources/lang/uk/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Чернетка збережена о ', 'pages_edit_delete_draft' => 'Видалити чернетку', 'pages_edit_discard_draft' => 'Відхилити чернетку', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Встановити журнал змін', 'pages_edit_enter_changelog_desc' => 'Введіть короткий опис внесених вами змін', 'pages_edit_enter_changelog' => 'Введіть список змін', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Зберегти сторінку', 'pages_title' => 'Заголовок сторінки', 'pages_name' => 'Назва сторінки', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Версія #:id', 'pages_revisions_numbered_changes' => 'Зміни версії #:id', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Історія змін', 'pages_revisions_changes' => 'Зміни', 'pages_revisions_current' => 'Поточна версія', diff --git a/resources/lang/uk/settings.php b/resources/lang/uk/settings.php index 289aaa355..91565fd6b 100644 --- a/resources/lang/uk/settings.php +++ b/resources/lang/uk/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Вищі налаштування безпеки для зображень', 'app_secure_images_toggle' => 'Увімкунти вищі налаштування безпеки для завантаження зображень', 'app_secure_images_desc' => 'З міркувань продуктивності всі зображення є загальнодоступними. Цей параметр додає випадковий, важко передбачуваний рядок перед URL-адресами зображень. Переконайтеся, що індексація каталогів не активована, щоб запобігти легкому доступу.', - 'app_editor' => 'Редактор сторінок', - 'app_editor_desc' => 'Виберіть, який редактор буде використовуватися всіма користувачами для редагування сторінок.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Користувацький вміст HTML-заголовку', 'app_custom_html_desc' => 'Будь-який доданий тут вміст буде вставлено в нижню частину розділу кожної сторінки. Це зручно для перевизначення стилів, або додавання коду аналітики.', 'app_custom_html_disabled_notice' => 'На цій сторінці налаштувань відключений користувацький вміст заголовка HTML, щоб гарантувати, що будь-які невдалі зміни можна буде відновити.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Доступ до системного API', 'role_manage_settings' => 'Керування налаштуваннями програми', 'role_export_content' => 'Вміст експорту', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Дозволи', 'roles_system_warning' => 'Майте на увазі, що доступ до будь-якого з вищезазначених трьох дозволів може дозволити користувачеві змінювати власні привілеї або привілеї інших в системі. Ролі з цими дозволами призначайте лише довіреним користувачам.', 'role_asset_desc' => 'Ці дозволи контролюють стандартні доступи всередині системи. Права на книги, розділи та сторінки перевизначать ці дозволи.', diff --git a/resources/lang/uz/activities.php b/resources/lang/uz/activities.php new file mode 100644 index 000000000..ae502a903 --- /dev/null +++ b/resources/lang/uz/activities.php @@ -0,0 +1,69 @@ + 'yaratilgan sahifa', + 'page_create_notification' => 'Sahifa muvaffaqiyatli yaratildi', + 'page_update' => 'yangilangan sahifa', + 'page_update_notification' => 'Sahifa muvaffaqiyatli yangilandi', + 'page_delete' => 'o\'chirilgan sahifa', + 'page_delete_notification' => 'Sahifa muvaffaqiyatli o\'chirildi', + 'page_restore' => 'tiklangan sahifa', + 'page_restore_notification' => 'Sahifa muvaffaqiyatli qayta tiklandi', + 'page_move' => 'ko\'chirilgan sahifa', + + // Chapters + 'chapter_create' => 'yaratilgan bo\'lim', + 'chapter_create_notification' => 'Bo\'lim muvaffaqiyatli yaratildi', + 'chapter_update' => 'yangilangan bo\'lim', + 'chapter_update_notification' => 'Bo\'lim muvaffaqiyatli yangilandi', + 'chapter_delete' => 'o\'chirilgan bo\'lim', + 'chapter_delete_notification' => 'Bo\'lim muvaffaqiyatli o\'chirildi', + 'chapter_move' => 'ko\'chirilgan bo\'lim', + + // Books + 'book_create' => 'yaratilgan kitob', + 'book_create_notification' => 'Kitob muvaffaqiyatli yaratildi', + 'book_update' => 'yangilangan kitob', + 'book_update_notification' => 'Kitob muvaffaqiyatli yangilandi', + 'book_delete' => 'o\'chirilgan kitob', + 'book_delete_notification' => 'Kitob muvaffaqiyatli o\'chirildi', + 'book_sort' => 'tartiblangan kitob', + 'book_sort_notification' => 'Kitob muvaffaqiyatli qayta tartiblandi', + + // Bookshelves + 'bookshelf_create' => 'yaratilgan kitobjavon', + 'bookshelf_create_notification' => 'Kitobjavon muvaffaqiyatli yaratildi', + 'bookshelf_update' => 'yangilangan kitobjavob', + 'bookshelf_update_notification' => 'Kitobjavon muvaffaqiyatli yangilandi', + 'bookshelf_delete' => 'o\'chirilgan kitobjavon', + 'bookshelf_delete_notification' => 'Kitobjavon muvaffaqiyatli o\'chirildi', + + // Favourites + 'favourite_add_notification' => '":name" sevimlilaringizga qo\'shildi', + 'favourite_remove_notification' => '":name" sevimlilaringizdan olib tashlandi', + + // MFA + 'mfa_setup_method_notification' => 'Multi-faktor uslubi muvaffaqiyatli sozlandi', + 'mfa_remove_method_notification' => 'Multi-faktor uslubi muvaffaqiyatli o\'chirildi', + + // Webhooks + 'webhook_create' => 'yaratilgan webhook', + 'webhook_create_notification' => 'Webhook muvaffaqiyatli yaratildi', + 'webhook_update' => 'yangilangan webhook', + 'webhook_update_notification' => 'Webhook muvaffaqiyatli yangilandi', + 'webhook_delete' => 'o\'chirilgan webhook', + 'webhook_delete_notification' => 'Webhook muvaffaqiyatli o\'chirildi', + + // Users + 'user_update_notification' => 'Foydalanuvchi muvaffaqiyatli yangilandi', + 'user_delete_notification' => 'Foydalanuvchi muvaffaqiyatli olib tashlandi', + + // Other + 'commented_on' => 'fikr qoldirdi', + 'permissions_update' => 'yangilangan huquqlar', +]; diff --git a/resources/lang/uz/auth.php b/resources/lang/uz/auth.php new file mode 100644 index 000000000..afe0f064c --- /dev/null +++ b/resources/lang/uz/auth.php @@ -0,0 +1,110 @@ + 'Ushbu ma\'lumotlar, bizdagi ma\'lumotlarga mos kelmadi.', + 'throttle' => 'Kirishga juda ko\'p urinishlar qilindi. Iltimos :seconds soniyadan so\'ng urinib ko\'ring.', + + // Login & Register + 'sign_up' => 'Ro\'yxatdan o\'tish', + 'log_in' => 'Kirish', + 'log_in_with' => ':socialDriver orqali kirish', + 'sign_up_with' => ':socialDriver orqali ro\'yxatdan o\'tish', + 'logout' => 'Chiqish', + + 'name' => 'Ism', + 'username' => 'Foydalanuvchi nomi', + 'email' => 'Email', + 'password' => 'Parol', + 'password_confirm' => 'Parolni tasdiqlash', + 'password_hint' => 'Kamida 8 belgi bo\'lishi kerak', + 'forgot_password' => 'Parolni unutdingizmi?', + 'remember_me' => 'Meni eslab qoling', + 'ldap_email_hint' => 'Ushbu hisob bilan foydalanish uchun emailni kiriting.', + 'create_account' => 'Hisob yaratish', + 'already_have_account' => 'Hisobingiz bormi?', + 'dont_have_account' => 'Hisobingiz yo\'qmi?', + 'social_login' => 'Ijtimoiy tarmoqlar orqali kirish', + 'social_registration' => 'Ijtimoiy tarmoqlar orqali ro\'yxatdan o\'tish', + 'social_registration_text' => 'Boshqa xizmatdan foydalanib ro\'yxatdan o\'ting va kiring.', + + 'register_thanks' => 'Ro\'yxatdan o\'tganingiz uchun rahmat!', + 'register_confirm' => ':appName dan foydalnish uchun iltimos emailingizga yuborilgan xatni ochib, tasdiqlovchi link orqali o\'ting.', + 'registrations_disabled' => 'Hozirda ro\'yxatdan o\'tish yopilgan', + 'registration_email_domain_invalid' => 'Ushbu domendagi email bilan ro\'yxatdan o\'tib bo\'lmaydi', + 'register_success' => 'Ro\'yxatdan o\'tganingiz uchun rahmat! Endi siz ushbu hisob bilan saytga kirishingiz mumkin.', + + // Password Reset + 'reset_password' => 'Parolni tiklash', + 'reset_password_send_instructions' => 'Parolni tiklash manzilini olish uchun emailingizni quyidagi maydonga kiriting.', + 'reset_password_send_button' => 'Tiklash manzilini yuborish', + 'reset_password_sent' => 'A password reset link will be sent to :email if that email address is found in the system.', + 'reset_password_success' => 'Your password has been successfully reset.', + 'email_reset_subject' => 'Reset your :appName password', + 'email_reset_text' => 'You are receiving this email because we received a password reset request for your account.', + 'email_reset_not_requested' => 'If you did not request a password reset, no further action is required.', + + // Email Confirmation + 'email_confirm_subject' => 'Confirm your email on :appName', + 'email_confirm_greeting' => 'Thanks for joining :appName!', + 'email_confirm_text' => 'Please confirm your email address by clicking the button below:', + 'email_confirm_action' => 'Confirm Email', + 'email_confirm_send_error' => 'Email confirmation required but the system could not send the email. Contact the admin to ensure email is set up correctly.', + 'email_confirm_success' => 'Your email has been confirmed! You should now be able to login using this email address.', + 'email_confirm_resent' => 'Confirmation email resent, Please check your inbox.', + + 'email_not_confirmed' => 'Email Address Not Confirmed', + 'email_not_confirmed_text' => 'Your email address has not yet been confirmed.', + 'email_not_confirmed_click_link' => 'Please click the link in the email that was sent shortly after you registered.', + 'email_not_confirmed_resend' => 'If you cannot find the email you can re-send the confirmation email by submitting the form below.', + 'email_not_confirmed_resend_button' => 'Resend Confirmation Email', + + // User Invite + 'user_invite_email_subject' => 'You have been invited to join :appName!', + 'user_invite_email_greeting' => 'An account has been created for you on :appName.', + 'user_invite_email_text' => 'Click the button below to set an account password and gain access:', + 'user_invite_email_action' => 'Set Account Password', + 'user_invite_page_welcome' => 'Welcome to :appName!', + 'user_invite_page_text' => 'To finalise your account and gain access you need to set a password which will be used to log-in to :appName on future visits.', + 'user_invite_page_confirm_button' => 'Confirm Password', + 'user_invite_success_login' => 'Password set, you should now be able to login using your set password to access :appName!', + + // Multi-factor Authentication + 'mfa_setup' => 'Setup Multi-Factor Authentication', + 'mfa_setup_desc' => 'Setup multi-factor authentication as an extra layer of security for your user account.', + 'mfa_setup_configured' => 'Already configured', + 'mfa_setup_reconfigure' => 'Reconfigure', + 'mfa_setup_remove_confirmation' => 'Are you sure you want to remove this multi-factor authentication method?', + 'mfa_setup_action' => 'Setup', + 'mfa_backup_codes_usage_limit_warning' => 'You have less than 5 backup codes remaining, Please generate and store a new set before you run out of codes to prevent being locked out of your account.', + 'mfa_option_totp_title' => 'Mobile App', + 'mfa_option_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.', + 'mfa_option_backup_codes_title' => 'Backup Codes', + 'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.', + 'mfa_gen_confirm_and_enable' => 'Confirm and Enable', + 'mfa_gen_backup_codes_title' => 'Backup Codes Setup', + 'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.', + 'mfa_gen_backup_codes_download' => 'Download Codes', + 'mfa_gen_backup_codes_usage_warning' => 'Each code can only be used once', + 'mfa_gen_totp_title' => 'Mobile App Setup', + 'mfa_gen_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.', + 'mfa_gen_totp_scan' => 'Scan the QR code below using your preferred authentication app to get started.', + 'mfa_gen_totp_verify_setup' => 'Verify Setup', + 'mfa_gen_totp_verify_setup_desc' => 'Verify that all is working by entering a code, generated within your authentication app, in the input box below:', + 'mfa_gen_totp_provide_code_here' => 'Provide your app generated code here', + 'mfa_verify_access' => 'Verify Access', + 'mfa_verify_access_desc' => 'Your user account requires you to confirm your identity via an additional level of verification before you\'re granted access. Verify using one of your configured methods to continue.', + 'mfa_verify_no_methods' => 'No Methods Configured', + 'mfa_verify_no_methods_desc' => 'No multi-factor authentication methods could be found for your account. You\'ll need to set up at least one method before you gain access.', + 'mfa_verify_use_totp' => 'Verify using a mobile app', + 'mfa_verify_use_backup_codes' => 'Verify using a backup code', + 'mfa_verify_backup_code' => 'Backup Code', + 'mfa_verify_backup_code_desc' => 'Enter one of your remaining backup codes below:', + 'mfa_verify_backup_code_enter_here' => 'Enter backup code here', + 'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:', + 'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.', +]; diff --git a/resources/lang/uz/common.php b/resources/lang/uz/common.php new file mode 100644 index 000000000..2f09e53d1 --- /dev/null +++ b/resources/lang/uz/common.php @@ -0,0 +1,102 @@ + 'Cancel', + 'confirm' => 'Confirm', + 'back' => 'Back', + 'save' => 'Save', + 'continue' => 'Continue', + 'select' => 'Select', + 'toggle_all' => 'Toggle All', + 'more' => 'More', + + // Form Labels + 'name' => 'Name', + 'description' => 'Description', + 'role' => 'Role', + 'cover_image' => 'Cover image', + 'cover_image_description' => 'This image should be approx 440x250px.', + + // Actions + 'actions' => 'Actions', + 'view' => 'View', + 'view_all' => 'View All', + 'create' => 'Create', + 'update' => 'Update', + 'edit' => 'Edit', + 'sort' => 'Sort', + 'move' => 'Move', + 'copy' => 'Copy', + 'reply' => 'Reply', + 'delete' => 'Delete', + 'delete_confirm' => 'Confirm Deletion', + 'search' => 'Search', + 'search_clear' => 'Clear Search', + 'reset' => 'Reset', + 'remove' => 'Remove', + 'add' => 'Add', + 'configure' => 'Configure', + 'fullscreen' => 'Fullscreen', + 'favourite' => 'Favourite', + 'unfavourite' => 'Unfavourite', + 'next' => 'Next', + 'previous' => 'Previous', + 'filter_active' => 'Active Filter:', + 'filter_clear' => 'Clear Filter', + + // Sort Options + 'sort_options' => 'Sort Options', + 'sort_direction_toggle' => 'Sort Direction Toggle', + 'sort_ascending' => 'Sort Ascending', + 'sort_descending' => 'Sort Descending', + 'sort_name' => 'Name', + 'sort_default' => 'Default', + 'sort_created_at' => 'Created Date', + 'sort_updated_at' => 'Updated Date', + + // Misc + 'deleted_user' => 'Deleted User', + 'no_activity' => 'No activity to show', + 'no_items' => 'No items available', + 'back_to_top' => 'Back to top', + 'skip_to_main_content' => 'Skip to main content', + 'toggle_details' => 'Toggle Details', + 'toggle_thumbnails' => 'Toggle Thumbnails', + 'details' => 'Details', + 'grid_view' => 'Grid View', + 'list_view' => 'List View', + 'default' => 'Default', + 'breadcrumb' => 'Breadcrumb', + 'status' => 'Status', + 'status_active' => 'Active', + 'status_inactive' => 'Inactive', + 'never' => 'Never', + 'none' => 'None', + + // Header + 'header_menu_expand' => 'Expand Header Menu', + 'profile_menu' => 'Profile Menu', + 'view_profile' => 'View Profile', + 'edit_profile' => 'Edit Profile', + 'dark_mode' => 'Dark Mode', + 'light_mode' => 'Light Mode', + + // Layout tabs + 'tab_info' => 'Info', + 'tab_info_label' => 'Tab: Show Secondary Information', + 'tab_content' => 'Content', + 'tab_content_label' => 'Tab: Show Primary Content', + + // Email Content + 'email_action_help' => 'If you’re having trouble clicking the ":actionText" button, copy and paste the URL below into your web browser:', + 'email_rights' => 'All rights reserved', + + // Footer Link Options + // Not directly used but available for convenience to users. + 'privacy_policy' => 'Privacy Policy', + 'terms_of_service' => 'Terms of Service', +]; diff --git a/resources/lang/uz/components.php b/resources/lang/uz/components.php new file mode 100644 index 000000000..c6ae940d8 --- /dev/null +++ b/resources/lang/uz/components.php @@ -0,0 +1,34 @@ + 'Rasmni tanlash', + 'image_all' => 'Barchasi', + 'image_all_title' => 'Barcha rasmlarni ko\'rish', + 'image_book_title' => 'Ushbu kitobga yuklangan barcha rasmlarni ko\'rish', + 'image_page_title' => 'Ushbu sahifaga yuklangan barcha rasmlarni ko\'rish', + 'image_search_hint' => 'Rasmni nomi bo\'yicha izlash', + 'image_uploaded' => ':uploadedDate sanada yuklangan', + 'image_load_more' => 'Yana yuklash', + 'image_image_name' => 'Rasm nomi', + 'image_delete_used' => 'This image is used in the pages below.', + 'image_delete_confirm_text' => 'Are you sure you want to delete this image?', + 'image_select_image' => 'Rasmni tanlash', + 'image_dropzone' => 'Drop images or click here to upload', + 'images_deleted' => 'Images Deleted', + 'image_preview' => 'Image Preview', + 'image_upload_success' => 'Image uploaded successfully', + 'image_update_success' => 'Image details successfully updated', + 'image_delete_success' => 'Image successfully deleted', + 'image_upload_remove' => 'Olib tashlash', + + // Code Editor + 'code_editor' => 'Kodni tahrirlash', + 'code_language' => 'Kod tili', + 'code_content' => 'Kod matni', + 'code_session_history' => 'Sessiya tarixi', + 'code_save' => 'Kodni saqlash', +]; diff --git a/resources/lang/uz/editor.php b/resources/lang/uz/editor.php new file mode 100644 index 000000000..827120292 --- /dev/null +++ b/resources/lang/uz/editor.php @@ -0,0 +1,171 @@ + 'General', + 'advanced' => 'Advanced', + 'none' => 'None', + 'cancel' => 'Cancel', + 'save' => 'Save', + 'close' => 'Close', + 'undo' => 'Undo', + 'redo' => 'Redo', + 'left' => 'Left', + 'center' => 'Center', + 'right' => 'Right', + 'top' => 'Top', + 'middle' => 'Middle', + 'bottom' => 'Bottom', + 'width' => 'Width', + 'height' => 'Height', + 'More' => 'More', + 'select' => 'Select...', + + // Toolbar + 'formats' => 'Formats', + 'header_large' => 'Large Header', + 'header_medium' => 'Medium Header', + 'header_small' => 'Small Header', + 'header_tiny' => 'Tiny Header', + 'paragraph' => 'Paragraph', + 'blockquote' => 'Blockquote', + 'inline_code' => 'Inline code', + 'callouts' => 'Callouts', + 'callout_information' => 'Information', + 'callout_success' => 'Success', + 'callout_warning' => 'Warning', + 'callout_danger' => 'Danger', + 'bold' => 'Bold', + 'italic' => 'Italic', + 'underline' => 'Underline', + 'strikethrough' => 'Strikethrough', + 'superscript' => 'Superscript', + 'subscript' => 'Subscript', + 'text_color' => 'Text color', + 'custom_color' => 'Custom color', + 'remove_color' => 'Remove color', + 'background_color' => 'Background color', + 'align_left' => 'Align left', + 'align_center' => 'Align center', + 'align_right' => 'Align right', + 'align_justify' => 'Justify', + 'list_bullet' => 'Bullet list', + 'list_numbered' => 'Numbered list', + 'list_task' => 'Task list', + 'indent_increase' => 'Increase indent', + 'indent_decrease' => 'Decrease indent', + 'table' => 'Table', + 'insert_image' => 'Insert image', + 'insert_image_title' => 'Insert/Edit Image', + 'insert_link' => 'Insert/edit link', + 'insert_link_title' => 'Insert/Edit Link', + 'insert_horizontal_line' => 'Insert horizontal line', + 'insert_code_block' => 'Insert code block', + 'insert_drawing' => 'Insert/edit drawing', + 'drawing_manager' => 'Drawing manager', + 'insert_media' => 'Insert/edit media', + 'insert_media_title' => 'Insert/Edit Media', + 'clear_formatting' => 'Clear formatting', + 'source_code' => 'Source code', + 'source_code_title' => 'Source Code', + 'fullscreen' => 'Fullscreen', + 'image_options' => 'Image options', + + // Tables + 'table_properties' => 'Table properties', + 'table_properties_title' => 'Table Properties', + 'delete_table' => 'Delete table', + 'insert_row_before' => 'Insert row before', + 'insert_row_after' => 'Insert row after', + 'delete_row' => 'Delete row', + 'insert_column_before' => 'Insert column before', + 'insert_column_after' => 'Insert column after', + 'delete_column' => 'Delete column', + 'table_cell' => 'Cell', + 'table_row' => 'Row', + 'table_column' => 'Column', + 'cell_properties' => 'Cell properties', + 'cell_properties_title' => 'Cell Properties', + 'cell_type' => 'Cell type', + 'cell_type_cell' => 'Cell', + 'cell_scope' => 'Scope', + 'cell_type_header' => 'Header cell', + 'merge_cells' => 'Merge cells', + 'split_cell' => 'Split cell', + 'table_row_group' => 'Row Group', + 'table_column_group' => 'Column Group', + 'horizontal_align' => 'Horizontal align', + 'vertical_align' => 'Vertical align', + 'border_width' => 'Border width', + 'border_style' => 'Border style', + 'border_color' => 'Border color', + 'row_properties' => 'Row properties', + 'row_properties_title' => 'Row Properties', + 'cut_row' => 'Cut row', + 'copy_row' => 'Copy row', + 'paste_row_before' => 'Paste row before', + 'paste_row_after' => 'Paste row after', + 'row_type' => 'Row type', + 'row_type_header' => 'Header', + 'row_type_body' => 'Body', + 'row_type_footer' => 'Footer', + 'alignment' => 'Alignment', + 'cut_column' => 'Cut column', + 'copy_column' => 'Copy column', + 'paste_column_before' => 'Paste column before', + 'paste_column_after' => 'Paste column after', + 'cell_padding' => 'Cell padding', + 'cell_spacing' => 'Cell spacing', + 'caption' => 'Caption', + 'show_caption' => 'Show caption', + 'constrain' => 'Constrain proportions', + 'cell_border_solid' => 'Solid', + 'cell_border_dotted' => 'Dotted', + 'cell_border_dashed' => 'Dashed', + 'cell_border_double' => 'Double', + 'cell_border_groove' => 'Groove', + 'cell_border_ridge' => 'Ridge', + 'cell_border_inset' => 'Inset', + 'cell_border_outset' => 'Outset', + 'cell_border_none' => 'None', + 'cell_border_hidden' => 'Hidden', + + // Images, links, details/summary & embed + 'source' => 'Source', + 'alt_desc' => 'Alternative description', + 'embed' => 'Embed', + 'paste_embed' => 'Paste your embed code below:', + 'url' => 'URL', + 'text_to_display' => 'Text to display', + 'title' => 'Title', + 'open_link' => 'Open link in...', + 'open_link_current' => 'Current window', + 'open_link_new' => 'New window', + 'insert_collapsible' => 'Insert collapsible block', + 'collapsible_unwrap' => 'Unwrap', + 'edit_label' => 'Edit label', + 'toggle_open_closed' => 'Toggle open/closed', + 'collapsible_edit' => 'Edit collapsible block', + 'toggle_label' => 'Toggle label', + + // About view + 'about' => 'About the editor', + 'about_title' => 'About the WYSIWYG Editor', + 'editor_license' => 'Editor License & Copyright', + 'editor_tiny_license' => 'This editor is built using :tinyLink which is provided under an LGPL v2.1 license.', + 'editor_tiny_license_link' => 'The copyright and license details of TinyMCE can be found here.', + 'save_continue' => 'Save Page & Continue', + 'callouts_cycle' => '(Keep pressing to toggle through types)', + 'link_selector' => 'Link to content', + 'shortcuts' => 'Shortcuts', + 'shortcut' => 'Shortcut', + 'shortcuts_intro' => 'The following shortcuts are available in the editor:', + 'windows_linux' => '(Windows/Linux)', + 'mac' => '(Mac)', + 'description' => 'Description', +]; diff --git a/resources/lang/uz/entities.php b/resources/lang/uz/entities.php new file mode 100644 index 000000000..18385594c --- /dev/null +++ b/resources/lang/uz/entities.php @@ -0,0 +1,358 @@ + 'Oxirgi yaratilgan', + 'recently_created_pages' => 'Oxirgi yaratilgan sahifalar', + 'recently_updated_pages' => 'Oxirgi yangilangan sahifalar', + 'recently_created_chapters' => 'Oxirgi yaratilgan bo\'limlar', + 'recently_created_books' => 'Oxirgi yaratilgan kitoblar', + 'recently_created_shelves' => 'Oxirgi yaratilgan kitobjavonlar', + 'recently_update' => 'Oxirgi yangilangan', + 'recently_viewed' => 'Oxirgi ko\'rilgan', + 'recent_activity' => 'Oxirgi faolliklar', + 'create_now' => 'Yangi yaratish', + 'revisions' => 'Reviziyalar', + 'meta_revision' => '#:revisionCount reviziya', + 'meta_created' => ':timeLength da yaratilgan', + 'meta_created_name' => ':user tomonidan :timeLength da yaratilgan', + 'meta_updated' => ':timeLength da yangilangan', + 'meta_updated_name' => ':user tomonidan :timeLength da yangilangan', + 'meta_owned_name' => 'Egasi :user', + 'entity_select' => 'Entity Select', + 'images' => 'Rasmlar', + 'my_recent_drafts' => 'Mening oxirgi qoralamalarim', + 'my_recently_viewed' => 'Mening oxirgi ko\'rganlarim', + 'my_most_viewed_favourites' => 'Mening eng oxirgi sevimliga qo\'shganlarim', + 'my_favourites' => 'Mening sevimlilarim', + 'no_pages_viewed' => 'Siz hech qaysi sahifani ko\'rmagansiz', + 'no_pages_recently_created' => 'Siz hali hech qanday sahifa yaratmagansiz', + 'no_pages_recently_updated' => 'Siz hali sahifalarni yangilamagansiz', + 'export' => 'Eksport', + 'export_html' => 'HTML fayl sifatida', + 'export_pdf' => 'PDF fayl sifatida', + 'export_text' => 'Oddiy matn fayli', + 'export_md' => 'Markdown fayli sifatida', + + // Permissions and restrictions + 'permissions' => 'Huquqlar', + 'permissions_intro' => 'Once enabled, These permissions will take priority over any set role permissions.', + 'permissions_enable' => 'Enable Custom Permissions', + 'permissions_save' => 'Save Permissions', + 'permissions_owner' => 'Egasi', + + // Search + 'search_results' => 'Qidiruv natijalari', + 'search_total_results_found' => ':count result found|:count total results found', + 'search_clear' => 'Qidiruvni tozalash', + 'search_no_pages' => 'Qidiruvga mos sahifalar topilmadi', + 'search_for_term' => ':term bo\'yicha qidiruv', + 'search_more' => 'Qo\'shimcha natijalar', + 'search_advanced' => 'Kengaytirilgan qidiruv', + 'search_terms' => 'Qidiruv parametrlari', + 'search_content_type' => 'Kontent turi', + 'search_exact_matches' => 'Mos kelgan natijalar', + 'search_tags' => 'Teg qidiruvi', + 'search_options' => 'Opsiyalar', + 'search_viewed_by_me' => 'Men tomonimdan ko\'rilgan', + 'search_not_viewed_by_me' => 'Men tomonimdan ko\'rilmagan', + 'search_permissions_set' => 'Permissions set', + 'search_created_by_me' => 'Created by me', + 'search_updated_by_me' => 'Updated by me', + 'search_owned_by_me' => 'Owned by me', + 'search_date_options' => 'Date Options', + 'search_updated_before' => 'Updated before', + 'search_updated_after' => 'Updated after', + 'search_created_before' => 'Created before', + 'search_created_after' => 'Created after', + 'search_set_date' => 'Set Date', + 'search_update' => 'Update Search', + + // Shelves + 'shelf' => 'Shelf', + 'shelves' => 'Shelves', + 'x_shelves' => ':count Shelf|:count Shelves', + 'shelves_long' => 'Bookshelves', + 'shelves_empty' => 'No shelves have been created', + 'shelves_create' => 'Create New Shelf', + 'shelves_popular' => 'Popular Shelves', + 'shelves_new' => 'New Shelves', + 'shelves_new_action' => 'New Shelf', + 'shelves_popular_empty' => 'The most popular shelves will appear here.', + 'shelves_new_empty' => 'The most recently created shelves will appear here.', + 'shelves_save' => 'Save Shelf', + 'shelves_books' => 'Books on this shelf', + 'shelves_add_books' => 'Add books to this shelf', + 'shelves_drag_books' => 'Drag books here to add them to this shelf', + 'shelves_empty_contents' => 'This shelf has no books assigned to it', + 'shelves_edit_and_assign' => 'Edit shelf to assign books', + 'shelves_edit_named' => 'Edit Bookshelf :name', + 'shelves_edit' => 'Edit Bookshelf', + 'shelves_delete' => 'Delete Bookshelf', + 'shelves_delete_named' => 'Delete Bookshelf :name', + 'shelves_delete_explain' => "This will delete the bookshelf with the name ':name'. Contained books will not be deleted.", + 'shelves_delete_confirmation' => 'Are you sure you want to delete this bookshelf?', + 'shelves_permissions' => 'Bookshelf Permissions', + 'shelves_permissions_updated' => 'Bookshelf Permissions Updated', + 'shelves_permissions_active' => 'Bookshelf Permissions Active', + 'shelves_permissions_cascade_warning' => 'Permissions on bookshelves do not automatically cascade to contained books. This is because a book can exist on multiple shelves. Permissions can however be copied down to child books using the option found below.', + 'shelves_copy_permissions_to_books' => 'Copy Permissions to Books', + 'shelves_copy_permissions' => 'Copy Permissions', + 'shelves_copy_permissions_explain' => 'This will apply the current permission settings of this bookshelf to all books contained within. Before activating, ensure any changes to the permissions of this bookshelf have been saved.', + 'shelves_copy_permission_success' => 'Bookshelf permissions copied to :count books', + + // Books + 'book' => 'Book', + 'books' => 'Books', + 'x_books' => ':count Book|:count Books', + 'books_empty' => 'Kitob yaratilmagan', + 'books_popular' => 'Ommabop kitoblar', + 'books_recent' => 'Oxirgi kitoblar', + 'books_new' => 'Yangi kitoblar', + 'books_new_action' => 'Yangi kitob', + 'books_popular_empty' => 'Eng ommabop kitoblar shu yerda aks etadi.', + 'books_new_empty' => 'Eng oxirgi yaratilgan kitoblar bu yerda aks etadi.', + 'books_create' => 'Yangi kitob yaratish', + 'books_delete' => 'Kitobni o\'chirish', + 'books_delete_named' => ':bookName kitobni o\'chirish', + 'books_delete_explain' => 'This will delete the book with the name \':bookName\'. All pages and chapters will be removed.', + 'books_delete_confirmation' => 'Are you sure you want to delete this book?', + 'books_edit' => 'Edit Book', + 'books_edit_named' => 'Edit Book :bookName', + 'books_form_book_name' => 'Book Name', + 'books_save' => 'Save Book', + 'books_permissions' => 'Book Permissions', + 'books_permissions_updated' => 'Book Permissions Updated', + 'books_empty_contents' => 'No pages or chapters have been created for this book.', + 'books_empty_create_page' => 'Create a new page', + 'books_empty_sort_current_book' => 'Sort the current book', + 'books_empty_add_chapter' => 'Add a chapter', + 'books_permissions_active' => 'Book Permissions Active', + 'books_search_this' => 'Search this book', + 'books_navigation' => 'Book Navigation', + 'books_sort' => 'Sort Book Contents', + 'books_sort_named' => 'Sort Book :bookName', + 'books_sort_name' => 'Sort by Name', + 'books_sort_created' => 'Sort by Created Date', + 'books_sort_updated' => 'Sort by Updated Date', + 'books_sort_chapters_first' => 'Chapters First', + 'books_sort_chapters_last' => 'Chapters Last', + 'books_sort_show_other' => 'Show Other Books', + 'books_sort_save' => 'Save New Order', + 'books_copy' => 'Copy Book', + 'books_copy_success' => 'Book successfully copied', + + // Chapters + 'chapter' => 'Chapter', + 'chapters' => 'Chapters', + 'x_chapters' => ':count Chapter|:count Chapters', + 'chapters_popular' => 'Popular Chapters', + 'chapters_new' => 'New Chapter', + 'chapters_create' => 'Create New Chapter', + 'chapters_delete' => 'Delete Chapter', + 'chapters_delete_named' => 'Delete Chapter :chapterName', + 'chapters_delete_explain' => 'This will delete the chapter with the name \':chapterName\'. All pages that exist within this chapter will also be deleted.', + 'chapters_delete_confirm' => 'Are you sure you want to delete this chapter?', + 'chapters_edit' => 'Edit Chapter', + 'chapters_edit_named' => 'Edit Chapter :chapterName', + 'chapters_save' => 'Save Chapter', + 'chapters_move' => 'Move Chapter', + 'chapters_move_named' => 'Move Chapter :chapterName', + 'chapter_move_success' => 'Chapter moved to :bookName', + 'chapters_copy' => 'Copy Chapter', + 'chapters_copy_success' => 'Chapter successfully copied', + 'chapters_permissions' => 'Chapter Permissions', + 'chapters_empty' => 'No pages are currently in this chapter.', + 'chapters_permissions_active' => 'Chapter Permissions Active', + 'chapters_permissions_success' => 'Chapter Permissions Updated', + 'chapters_search_this' => 'Search this chapter', + + // Pages + 'page' => 'Page', + 'pages' => 'Pages', + 'x_pages' => ':count Page|:count Pages', + 'pages_popular' => 'Popular Pages', + 'pages_new' => 'New Page', + 'pages_attachments' => 'Attachments', + 'pages_navigation' => 'Page Navigation', + 'pages_delete' => 'Delete Page', + 'pages_delete_named' => 'Delete Page :pageName', + 'pages_delete_draft_named' => 'Delete Draft Page :pageName', + 'pages_delete_draft' => 'Delete Draft Page', + 'pages_delete_success' => 'Page deleted', + 'pages_delete_draft_success' => 'Draft page deleted', + 'pages_delete_confirm' => 'Are you sure you want to delete this page?', + 'pages_delete_draft_confirm' => 'Are you sure you want to delete this draft page?', + 'pages_editing_named' => 'Editing Page :pageName', + 'pages_edit_draft_options' => 'Draft Options', + 'pages_edit_save_draft' => 'Save Draft', + 'pages_edit_draft' => 'Edit Page Draft', + 'pages_editing_draft' => 'Editing Draft', + 'pages_editing_page' => 'Editing Page', + 'pages_edit_draft_save_at' => 'Draft saved at ', + 'pages_edit_delete_draft' => 'Delete Draft', + 'pages_edit_discard_draft' => 'Discard Draft', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', + 'pages_edit_set_changelog' => 'Set Changelog', + 'pages_edit_enter_changelog_desc' => 'Enter a brief description of the changes you\'ve made', + 'pages_edit_enter_changelog' => 'Enter Changelog', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', + 'pages_save' => 'Save Page', + 'pages_title' => 'Page Title', + 'pages_name' => 'Page Name', + 'pages_md_editor' => 'Editor', + 'pages_md_preview' => 'Preview', + 'pages_md_insert_image' => 'Insert Image', + 'pages_md_insert_link' => 'Insert Entity Link', + 'pages_md_insert_drawing' => 'Insert Drawing', + 'pages_not_in_chapter' => 'Page is not in a chapter', + 'pages_move' => 'Move Page', + 'pages_move_success' => 'Page moved to ":parentName"', + 'pages_copy' => 'Copy Page', + 'pages_copy_desination' => 'Copy Destination', + 'pages_copy_success' => 'Page successfully copied', + 'pages_permissions' => 'Page Permissions', + 'pages_permissions_success' => 'Page permissions updated', + 'pages_revision' => 'Revision', + 'pages_revisions' => 'Page Revisions', + 'pages_revisions_named' => 'Page Revisions for :pageName', + 'pages_revision_named' => 'Page Revision for :pageName', + 'pages_revision_restored_from' => 'Restored from #:id; :summary', + 'pages_revisions_created_by' => 'Created By', + 'pages_revisions_date' => 'Revision Date', + 'pages_revisions_number' => '#', + 'pages_revisions_numbered' => 'Revision #:id', + 'pages_revisions_numbered_changes' => 'Revision #:id Changes', + 'pages_revisions_editor' => 'Editor Type', + 'pages_revisions_changelog' => 'Changelog', + 'pages_revisions_changes' => 'Changes', + 'pages_revisions_current' => 'Current Version', + 'pages_revisions_preview' => 'Preview', + 'pages_revisions_restore' => 'Restore', + 'pages_revisions_none' => 'This page has no revisions', + 'pages_copy_link' => 'Copy Link', + 'pages_edit_content_link' => 'Edit Content', + 'pages_permissions_active' => 'Page Permissions Active', + 'pages_initial_revision' => 'Initial publish', + 'pages_initial_name' => 'New Page', + 'pages_editing_draft_notification' => 'You are currently editing a draft that was last saved :timeDiff.', + 'pages_draft_edited_notification' => 'This page has been updated by since that time. It is recommended that you discard this draft.', + 'pages_draft_page_changed_since_creation' => 'This page has been updated since this draft was created. It is recommended that you discard this draft or take care not to overwrite any page changes.', + 'pages_draft_edit_active' => [ + 'start_a' => ':count users have started editing this page', + 'start_b' => ':userName has started editing this page', + 'time_a' => 'since the page was last updated', + 'time_b' => 'in the last :minCount minutes', + 'message' => ':start :time. Take care not to overwrite each other\'s updates!', + ], + 'pages_draft_discarded' => 'Draft discarded, The editor has been updated with the current page content', + 'pages_specific' => 'Specific Page', + 'pages_is_template' => 'Page Template', + + // Editor Sidebar + 'page_tags' => 'Page Tags', + 'chapter_tags' => 'Chapter Tags', + 'book_tags' => 'Book Tags', + 'shelf_tags' => 'Shelf Tags', + 'tag' => 'Tag', + 'tags' => 'Tags', + 'tag_name' => 'Tag Name', + 'tag_value' => 'Tag Value (Optional)', + 'tags_explain' => "Add some tags to better categorise your content. \n You can assign a value to a tag for more in-depth organisation.", + 'tags_add' => 'Add another tag', + 'tags_remove' => 'Remove this tag', + 'tags_usages' => 'Total tag usages', + 'tags_assigned_pages' => 'Assigned to Pages', + 'tags_assigned_chapters' => 'Assigned to Chapters', + 'tags_assigned_books' => 'Assigned to Books', + 'tags_assigned_shelves' => 'Assigned to Shelves', + 'tags_x_unique_values' => ':count unique values', + 'tags_all_values' => 'All values', + 'tags_view_tags' => 'View Tags', + 'tags_view_existing_tags' => 'View existing tags', + 'tags_list_empty_hint' => 'Tags can be assigned via the page editor sidebar or while editing the details of a book, chapter or shelf.', + 'attachments' => 'Attachments', + 'attachments_explain' => 'Upload some files or attach some links to display on your page. These are visible in the page sidebar.', + 'attachments_explain_instant_save' => 'Changes here are saved instantly.', + 'attachments_items' => 'Attached Items', + 'attachments_upload' => 'Upload File', + 'attachments_link' => 'Attach Link', + 'attachments_set_link' => 'Set Link', + 'attachments_delete' => 'Are you sure you want to delete this attachment?', + 'attachments_dropzone' => 'Drop files or click here to attach a file', + 'attachments_no_files' => 'No files have been uploaded', + 'attachments_explain_link' => 'You can attach a link if you\'d prefer not to upload a file. This can be a link to another page or a link to a file in the cloud.', + 'attachments_link_name' => 'Link Name', + 'attachment_link' => 'Attachment link', + 'attachments_link_url' => 'Link to file', + 'attachments_link_url_hint' => 'Url of site or file', + 'attach' => 'Attach', + 'attachments_insert_link' => 'Add Attachment Link to Page', + 'attachments_edit_file' => 'Edit File', + 'attachments_edit_file_name' => 'File Name', + 'attachments_edit_drop_upload' => 'Drop files or click here to upload and overwrite', + 'attachments_order_updated' => 'Attachment order updated', + 'attachments_updated_success' => 'Attachment details updated', + 'attachments_deleted' => 'Attachment deleted', + 'attachments_file_uploaded' => 'File successfully uploaded', + 'attachments_file_updated' => 'File successfully updated', + 'attachments_link_attached' => 'Link successfully attached to page', + 'templates' => 'Templates', + 'templates_set_as_template' => 'Page is a template', + 'templates_explain_set_as_template' => 'You can set this page as a template so its contents be utilized when creating other pages. Other users will be able to use this template if they have view permissions for this page.', + 'templates_replace_content' => 'Replace page content', + 'templates_append_content' => 'Append to page content', + 'templates_prepend_content' => 'Prepend to page content', + + // Profile View + 'profile_user_for_x' => 'User for :time', + 'profile_created_content' => 'Created Content', + 'profile_not_created_pages' => ':userName has not created any pages', + 'profile_not_created_chapters' => ':userName has not created any chapters', + 'profile_not_created_books' => ':userName has not created any books', + 'profile_not_created_shelves' => ':userName has not created any shelves', + + // Comments + 'comment' => 'Comment', + 'comments' => 'Comments', + 'comment_add' => 'Add Comment', + 'comment_placeholder' => 'Leave a comment here', + 'comment_count' => '{0} No Comments|{1} 1 Comment|[2,*] :count Comments', + 'comment_save' => 'Save Comment', + 'comment_saving' => 'Saving comment...', + 'comment_deleting' => 'Deleting comment...', + 'comment_new' => 'New Comment', + 'comment_created' => 'commented :createDiff', + 'comment_updated' => 'Updated :updateDiff by :username', + 'comment_deleted_success' => 'Comment deleted', + 'comment_created_success' => 'Comment added', + 'comment_updated_success' => 'Comment updated', + 'comment_delete_confirm' => 'Are you sure you want to delete this comment?', + 'comment_in_reply_to' => 'In reply to :commentId', + + // Revision + 'revision_delete_confirm' => 'Are you sure you want to delete this revision?', + 'revision_restore_confirm' => 'Are you sure you want to restore this revision? The current page contents will be replaced.', + 'revision_delete_success' => 'Revision deleted', + 'revision_cannot_delete_latest' => 'Cannot delete the latest revision.', + + // Copy view + 'copy_consider' => 'Please consider the below when copying content.', + 'copy_consider_permissions' => 'Custom permission settings will not be copied.', + 'copy_consider_owner' => 'You will become the owner of all copied content.', + 'copy_consider_images' => 'Page image files will not be duplicated & the original images will retain their relation to the page they were originally uploaded to.', + 'copy_consider_attachments' => 'Page attachments will not be copied.', + 'copy_consider_access' => 'A change of location, owner or permissions may result in this content being accessible to those previously without access.', +]; diff --git a/resources/lang/uz/errors.php b/resources/lang/uz/errors.php new file mode 100644 index 000000000..f023b6bdf --- /dev/null +++ b/resources/lang/uz/errors.php @@ -0,0 +1,109 @@ + 'You do not have permission to access the requested page.', + 'permissionJson' => 'You do not have permission to perform the requested action.', + + // Auth + 'error_user_exists_different_creds' => 'A user with the email :email already exists but with different credentials.', + 'email_already_confirmed' => 'Email has already been confirmed, Try logging in.', + 'email_confirmation_invalid' => 'This confirmation token is not valid or has already been used, Please try registering again.', + 'email_confirmation_expired' => 'The confirmation token has expired, A new confirmation email has been sent.', + 'email_confirmation_awaiting' => 'The email address for the account in use needs to be confirmed', + 'ldap_fail_anonymous' => 'LDAP access failed using anonymous bind', + 'ldap_fail_authed' => 'LDAP access failed using given dn & password details', + 'ldap_extension_not_installed' => 'LDAP PHP extension not installed', + 'ldap_cannot_connect' => 'Cannot connect to ldap server, Initial connection failed', + 'saml_already_logged_in' => 'Already logged in', + 'saml_user_not_registered' => 'The user :name is not registered and automatic registration is disabled', + 'saml_no_email_address' => 'Could not find an email address, for this user, in the data provided by the external authentication system', + 'saml_invalid_response_id' => 'The request from the external authentication system is not recognised by a process started by this application. Navigating back after a login could cause this issue.', + 'saml_fail_authed' => 'Login using :system failed, system did not provide successful authorization', + 'oidc_already_logged_in' => 'Already logged in', + 'oidc_user_not_registered' => 'The user :name is not registered and automatic registration is disabled', + 'oidc_no_email_address' => 'Could not find an email address, for this user, in the data provided by the external authentication system', + 'oidc_fail_authed' => 'Login using :system failed, system did not provide successful authorization', + 'social_no_action_defined' => 'No action defined', + 'social_login_bad_response' => "Error received during :socialAccount login: \n:error", + 'social_account_in_use' => 'This :socialAccount account is already in use, Try logging in via the :socialAccount option.', + 'social_account_email_in_use' => 'The email :email is already in use. If you already have an account you can connect your :socialAccount account from your profile settings.', + 'social_account_existing' => 'This :socialAccount is already attached to your profile.', + 'social_account_already_used_existing' => 'This :socialAccount account is already used by another user.', + 'social_account_not_used' => 'This :socialAccount account is not linked to any users. Please attach it in your profile settings. ', + 'social_account_register_instructions' => 'If you do not yet have an account, You can register an account using the :socialAccount option.', + 'social_driver_not_found' => 'Social driver not found', + 'social_driver_not_configured' => 'Your :socialAccount social settings are not configured correctly.', + 'invite_token_expired' => 'This invitation link has expired. You can instead try to reset your account password.', + + // System + 'path_not_writable' => 'File path :filePath could not be uploaded to. Ensure it is writable to the server.', + 'cannot_get_image_from_url' => 'Cannot get image from :url', + 'cannot_create_thumbs' => 'The server cannot create thumbnails. Please check you have the GD PHP extension installed.', + 'server_upload_limit' => 'The server does not allow uploads of this size. Please try a smaller file size.', + 'uploaded' => 'The server does not allow uploads of this size. Please try a smaller file size.', + 'image_upload_error' => 'An error occurred uploading the image', + 'image_upload_type_error' => 'The image type being uploaded is invalid', + 'file_upload_timeout' => 'The file upload has timed out.', + + // Attachments + 'attachment_not_found' => 'Attachment not found', + + // Pages + 'page_draft_autosave_fail' => 'Failed to save draft. Ensure you have internet connection before saving this page', + 'page_custom_home_deletion' => 'Cannot delete a page while it is set as a homepage', + + // Entities + 'entity_not_found' => 'Entity not found', + 'bookshelf_not_found' => 'Bookshelf not found', + 'book_not_found' => 'Book not found', + 'page_not_found' => 'Page not found', + 'chapter_not_found' => 'Chapter not found', + 'selected_book_not_found' => 'The selected book was not found', + 'selected_book_chapter_not_found' => 'The selected Book or Chapter was not found', + 'guests_cannot_save_drafts' => 'Guests cannot save drafts', + + // Users + 'users_cannot_delete_only_admin' => 'You cannot delete the only admin', + 'users_cannot_delete_guest' => 'You cannot delete the guest user', + + // Roles + 'role_cannot_be_edited' => 'This role cannot be edited', + 'role_system_cannot_be_deleted' => 'This role is a system role and cannot be deleted', + 'role_registration_default_cannot_delete' => 'This role cannot be deleted while set as the default registration role', + 'role_cannot_remove_only_admin' => 'This user is the only user assigned to the administrator role. Assign the administrator role to another user before attempting to remove it here.', + + // Comments + 'comment_list' => 'An error occurred while fetching the comments.', + 'cannot_add_comment_to_draft' => 'You cannot add comments to a draft.', + 'comment_add' => 'An error occurred while adding / updating the comment.', + 'comment_delete' => 'An error occurred while deleting the comment.', + 'empty_comment' => 'Cannot add an empty comment.', + + // Error pages + '404_page_not_found' => 'Page Not Found', + 'sorry_page_not_found' => 'Sorry, The page you were looking for could not be found.', + 'sorry_page_not_found_permission_warning' => 'If you expected this page to exist, you might not have permission to view it.', + 'image_not_found' => 'Image Not Found', + 'image_not_found_subtitle' => 'Sorry, The image file you were looking for could not be found.', + 'image_not_found_details' => 'If you expected this image to exist it might have been deleted.', + 'return_home' => 'Return to home', + 'error_occurred' => 'An Error Occurred', + 'app_down' => ':appName is down right now', + 'back_soon' => 'It will be back up soon.', + + // API errors + 'api_no_authorization_found' => 'No authorization token found on the request', + 'api_bad_authorization_format' => 'An authorization token was found on the request but the format appeared incorrect', + 'api_user_token_not_found' => 'No matching API token was found for the provided authorization token', + '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', + + // Settings & Maintenance + 'maintenance_test_email_failure' => 'Error thrown when sending a test email:', + +]; diff --git a/resources/lang/uz/pagination.php b/resources/lang/uz/pagination.php new file mode 100644 index 000000000..428cc86e0 --- /dev/null +++ b/resources/lang/uz/pagination.php @@ -0,0 +1,12 @@ + '« Avvalgi', + 'next' => 'Keyingi »', + +]; diff --git a/resources/lang/uz/passwords.php b/resources/lang/uz/passwords.php new file mode 100644 index 000000000..b408f3c2f --- /dev/null +++ b/resources/lang/uz/passwords.php @@ -0,0 +1,15 @@ + 'Passwords must be at least eight characters and match the confirmation.', + 'user' => "We can't find a user with that e-mail address.", + 'token' => 'The password reset token is invalid for this email address.', + 'sent' => 'We have e-mailed your password reset link!', + 'reset' => 'Your password has been reset!', + +]; diff --git a/resources/lang/uz/settings.php b/resources/lang/uz/settings.php new file mode 100644 index 000000000..af2dcc1e1 --- /dev/null +++ b/resources/lang/uz/settings.php @@ -0,0 +1,308 @@ + 'Settings', + 'settings_save' => 'Save Settings', + 'settings_save_success' => 'Settings saved', + 'system_version' => 'System Version', + 'categories' => 'Categories', + + // App Settings + 'app_customization' => 'Customization', + 'app_features_security' => 'Features & Security', + 'app_name' => 'Application Name', + 'app_name_desc' => 'This name is shown in the header and in any system-sent emails.', + 'app_name_header' => 'Show name in header', + 'app_public_access' => 'Public Access', + 'app_public_access_desc' => 'Enabling this option will allow visitors, that are not logged-in, to access content in your BookStack instance.', + 'app_public_access_desc_guest' => 'Access for public visitors can be controlled through the "Guest" user.', + 'app_public_access_toggle' => 'Allow public access', + 'app_public_viewing' => 'Allow public viewing?', + 'app_secure_images' => 'Higher Security Image Uploads', + 'app_secure_images_toggle' => 'Enable higher security image uploads', + 'app_secure_images_desc' => 'For performance reasons, all images are public. This option adds a random, hard-to-guess string in front of image urls. Ensure directory indexes are not enabled to prevent easy access.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', + 'app_custom_html' => 'Custom HTML Head Content', + 'app_custom_html_desc' => 'Any content added here will be inserted into the bottom of the section of every page. This is handy for overriding styles or adding analytics code.', + 'app_custom_html_disabled_notice' => 'Custom HTML head content is disabled on this settings page to ensure any breaking changes can be reverted.', + 'app_logo' => 'Application Logo', + 'app_logo_desc' => 'This image should be 43px in height.
    Large images will be scaled down.', + 'app_primary_color' => 'Application Primary Color', + 'app_primary_color_desc' => 'Sets the primary color for the application including the banner, buttons, and links.', + 'app_homepage' => 'Application Homepage', + 'app_homepage_desc' => 'Select a view to show on the homepage instead of the default view. Page permissions are ignored for selected pages.', + 'app_homepage_select' => 'Select a page', + 'app_footer_links' => 'Footer Links', + 'app_footer_links_desc' => 'Add links to show within the site footer. These will be displayed at the bottom of most pages, including those that do not require login. You can use a label of "trans::" to use system-defined translations. For example: Using "trans::common.privacy_policy" will provide the translated text "Privacy Policy" and "trans::common.terms_of_service" will provide the translated text "Terms of Service".', + 'app_footer_links_label' => 'Link Label', + 'app_footer_links_url' => 'Link URL', + 'app_footer_links_add' => 'Add Footer Link', + 'app_disable_comments' => 'Disable Comments', + 'app_disable_comments_toggle' => 'Disable comments', + 'app_disable_comments_desc' => 'Disables comments across all pages in the application.
    Existing comments are not shown.', + + // Color settings + 'content_colors' => 'Content Colors', + 'content_colors_desc' => 'Sets colors for all elements in the page organisation hierarchy. Choosing colors with a similar brightness to the default colors is recommended for readability.', + 'bookshelf_color' => 'Shelf Color', + 'book_color' => 'Book Color', + 'chapter_color' => 'Chapter Color', + 'page_color' => 'Page Color', + 'page_draft_color' => 'Page Draft Color', + + // Registration Settings + 'reg_settings' => 'Registration', + 'reg_enable' => 'Enable Registration', + 'reg_enable_toggle' => 'Enable registration', + 'reg_enable_desc' => 'When registration is enabled user will be able to sign themselves up as an application user. Upon registration they are given a single, default user role.', + 'reg_default_role' => 'Default user role after registration', + 'reg_enable_external_warning' => 'The option above is ignored while external LDAP or SAML authentication is active. User accounts for non-existing members will be auto-created if authentication, against the external system in use, is successful.', + 'reg_email_confirmation' => 'Email Confirmation', + 'reg_email_confirmation_toggle' => 'Require email confirmation', + 'reg_confirm_email_desc' => 'If domain restriction is used then email confirmation will be required and this option will be ignored.', + 'reg_confirm_restrict_domain' => 'Domain Restriction', + 'reg_confirm_restrict_domain_desc' => 'Enter a comma separated list of email domains you would like to restrict registration to. Users will be sent an email to confirm their address before being allowed to interact with the application.
    Note that users will be able to change their email addresses after successful registration.', + 'reg_confirm_restrict_domain_placeholder' => 'No restriction set', + + // Maintenance settings + 'maint' => 'Maintenance', + 'maint_image_cleanup' => 'Cleanup Images', + 'maint_image_cleanup_desc' => 'Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.', + 'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions', + 'maint_image_cleanup_run' => 'Run Cleanup', + 'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?', + 'maint_image_cleanup_success' => ':count potentially unused images found and deleted!', + 'maint_image_cleanup_nothing_found' => 'No unused images found, Nothing deleted!', + 'maint_send_test_email' => 'Send a Test Email', + 'maint_send_test_email_desc' => 'This sends a test email to your email address specified in your profile.', + 'maint_send_test_email_run' => 'Send test email', + 'maint_send_test_email_success' => 'Email sent to :address', + 'maint_send_test_email_mail_subject' => 'Test Email', + 'maint_send_test_email_mail_greeting' => 'Email delivery seems to work!', + 'maint_send_test_email_mail_text' => 'Congratulations! As you received this email notification, your email settings seem to be configured properly.', + 'maint_recycle_bin_desc' => 'Deleted shelves, books, chapters & pages are sent to the recycle bin so they can be restored or permanently deleted. Older items in the recycle bin may be automatically removed after a while depending on system configuration.', + 'maint_recycle_bin_open' => 'Open Recycle Bin', + + // Recycle Bin + 'recycle_bin' => 'Recycle Bin', + 'recycle_bin_desc' => 'Here you can restore items that have been deleted or choose to permanently remove them from the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.', + 'recycle_bin_deleted_item' => 'Deleted Item', + 'recycle_bin_deleted_parent' => 'Parent', + 'recycle_bin_deleted_by' => 'Deleted By', + 'recycle_bin_deleted_at' => 'Deletion Time', + 'recycle_bin_permanently_delete' => 'Permanently Delete', + 'recycle_bin_restore' => 'Restore', + 'recycle_bin_contents_empty' => 'The recycle bin is currently empty', + 'recycle_bin_empty' => 'Empty Recycle Bin', + 'recycle_bin_empty_confirm' => 'This will permanently destroy all items in the recycle bin including content contained within each item. Are you sure you want to empty the recycle bin?', + 'recycle_bin_destroy_confirm' => 'This action will permanently delete this item, along with any child elements listed below, from the system and you will not be able to restore this content. Are you sure you want to permanently delete this item?', + 'recycle_bin_destroy_list' => 'Items to be Destroyed', + 'recycle_bin_restore_list' => 'Items to be Restored', + 'recycle_bin_restore_confirm' => 'This action will restore the deleted item, including any child elements, to their original location. If the original location has since been deleted, and is now in the recycle bin, the parent item will also need to be restored.', + 'recycle_bin_restore_deleted_parent' => 'The parent of this item has also been deleted. These will remain deleted until that parent is also restored.', + 'recycle_bin_restore_parent' => 'Restore Parent', + 'recycle_bin_destroy_notification' => 'Deleted :count total items from the recycle bin.', + 'recycle_bin_restore_notification' => 'Restored :count total items from the recycle bin.', + + // Audit Log + 'audit' => 'Audit Log', + 'audit_desc' => 'This audit log displays a list of activities tracked in the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.', + 'audit_event_filter' => 'Event Filter', + 'audit_event_filter_no_filter' => 'No Filter', + 'audit_deleted_item' => 'Deleted Item', + 'audit_deleted_item_name' => 'Name: :name', + 'audit_table_user' => 'User', + 'audit_table_event' => 'Event', + 'audit_table_related' => 'Related Item or Detail', + 'audit_table_ip' => 'IP Address', + 'audit_table_date' => 'Activity Date', + 'audit_date_from' => 'Date Range From', + 'audit_date_to' => 'Date Range To', + + // Role Settings + 'roles' => 'Roles', + 'role_user_roles' => 'User Roles', + 'role_create' => 'Create New Role', + 'role_create_success' => 'Role successfully created', + 'role_delete' => 'Delete Role', + 'role_delete_confirm' => 'This will delete the role with the name \':roleName\'.', + 'role_delete_users_assigned' => 'This role has :userCount users assigned to it. If you would like to migrate the users from this role select a new role below.', + 'role_delete_no_migration' => "Don't migrate users", + 'role_delete_sure' => 'Are you sure you want to delete this role?', + 'role_delete_success' => 'Role successfully deleted', + 'role_edit' => 'Edit Role', + 'role_details' => 'Role Details', + 'role_name' => 'Role Name', + 'role_desc' => 'Short Description of Role', + 'role_mfa_enforced' => 'Requires Multi-Factor Authentication', + 'role_external_auth_id' => 'External Authentication IDs', + 'role_system' => 'System Permissions', + 'role_manage_users' => 'Manage users', + 'role_manage_roles' => 'Manage roles & role permissions', + 'role_manage_entity_permissions' => 'Manage all book, chapter & page permissions', + 'role_manage_own_entity_permissions' => 'Manage permissions on own book, chapter & pages', + 'role_manage_page_templates' => 'Manage page templates', + 'role_access_api' => 'Access system API', + 'role_manage_settings' => 'Manage app settings', + 'role_export_content' => 'Export content', + 'role_editor_change' => 'Change page editor', + 'role_asset' => 'Asset Permissions', + 'roles_system_warning' => 'Be aware that access to any of the above three permissions can allow a user to alter their own privileges or the privileges of others in the system. Only assign roles with these permissions to trusted users.', + 'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.', + 'role_asset_admins' => 'Admins are automatically given access to all content but these options may show or hide UI options.', + 'role_all' => 'All', + 'role_own' => 'Own', + 'role_controlled_by_asset' => 'Controlled by the asset they are uploaded to', + 'role_save' => 'Save Role', + 'role_update_success' => 'Role successfully updated', + 'role_users' => 'Users in this role', + 'role_users_none' => 'No users are currently assigned to this role', + + // Users + 'users' => 'Users', + 'user_profile' => 'User Profile', + 'users_add_new' => 'Add New User', + 'users_search' => 'Search Users', + 'users_latest_activity' => 'Latest Activity', + 'users_details' => 'User Details', + 'users_details_desc' => 'Set a display name and an email address for this user. The email address will be used for logging into the application.', + 'users_details_desc_no_email' => 'Set a display name for this user so others can recognise them.', + 'users_role' => 'User Roles', + 'users_role_desc' => 'Select which roles this user will be assigned to. If a user is assigned to multiple roles the permissions from those roles will stack and they will receive all abilities of the assigned roles.', + 'users_password' => 'User Password', + 'users_password_desc' => 'Set a password used to log-in to the application. This must be at least 8 characters long.', + 'users_send_invite_text' => 'You can choose to send this user an invitation email which allows them to set their own password otherwise you can set their password yourself.', + 'users_send_invite_option' => 'Send user invite email', + 'users_external_auth_id' => 'External Authentication ID', + 'users_external_auth_id_desc' => 'This is the ID used to match this user when communicating with your external authentication system.', + 'users_password_warning' => 'Only fill the below if you would like to change your password.', + 'users_system_public' => 'This user represents any guest users that visit your instance. It cannot be used to log in but is assigned automatically.', + 'users_delete' => 'Delete User', + 'users_delete_named' => 'Delete user :userName', + 'users_delete_warning' => 'This will fully delete this user with the name \':userName\' from the system.', + 'users_delete_confirm' => 'Are you sure you want to delete this user?', + 'users_migrate_ownership' => 'Migrate Ownership', + 'users_migrate_ownership_desc' => 'Select a user here if you want another user to become the owner of all items currently owned by this user.', + 'users_none_selected' => 'No user selected', + 'users_edit' => 'Edit User', + 'users_edit_profile' => 'Edit Profile', + 'users_avatar' => 'User Avatar', + 'users_avatar_desc' => 'Select an image to represent this user. This should be approx 256px square.', + 'users_preferred_language' => 'Preferred Language', + 'users_preferred_language_desc' => 'This option will change the language used for the user-interface of the application. This will not affect any user-created content.', + 'users_social_accounts' => 'Social Accounts', + 'users_social_accounts_info' => 'Here you can connect your other accounts for quicker and easier login. Disconnecting an account here does not revoke previously authorized access. Revoke access from your profile settings on the connected social account.', + 'users_social_connect' => 'Connect Account', + 'users_social_disconnect' => 'Disconnect Account', + 'users_social_connected' => ':socialAccount account was successfully attached to your profile.', + 'users_social_disconnected' => ':socialAccount account was successfully disconnected from your profile.', + 'users_api_tokens' => 'API Tokens', + 'users_api_tokens_none' => 'No API tokens have been created for this user', + 'users_api_tokens_create' => 'Create Token', + 'users_api_tokens_expires' => 'Expires', + 'users_api_tokens_docs' => 'API Documentation', + 'users_mfa' => 'Multi-Factor Authentication', + 'users_mfa_desc' => 'Setup multi-factor authentication as an extra layer of security for your user account.', + 'users_mfa_x_methods' => ':count method configured|:count methods configured', + 'users_mfa_configure' => 'Configure Methods', + + // API Tokens + 'user_api_token_create' => 'Create API Token', + 'user_api_token_name' => 'Name', + 'user_api_token_name_desc' => 'Give your token a readable name as a future reminder of its intended purpose.', + 'user_api_token_expiry' => 'Expiry Date', + 'user_api_token_expiry_desc' => 'Set a date at which this token expires. After this date, requests made using this token will no longer work. Leaving this field blank will set an expiry 100 years into the future.', + 'user_api_token_create_secret_message' => 'Immediately after creating this token a "Token ID" & "Token Secret" will be generated and displayed. The secret will only be shown a single time so be sure to copy the value to somewhere safe and secure before proceeding.', + 'user_api_token_create_success' => 'API token successfully created', + 'user_api_token_update_success' => 'API token successfully updated', + 'user_api_token' => 'API Token', + 'user_api_token_id' => 'Token ID', + 'user_api_token_id_desc' => 'This is a non-editable system generated identifier for this token which will need to be provided in API requests.', + 'user_api_token_secret' => 'Token Secret', + 'user_api_token_secret_desc' => 'This is a system generated secret for this token which will need to be provided in API requests. This will only be displayed this one time so copy this value to somewhere safe and secure.', + 'user_api_token_created' => 'Token created :timeAgo', + 'user_api_token_updated' => 'Token updated :timeAgo', + 'user_api_token_delete' => 'Delete Token', + 'user_api_token_delete_warning' => 'This will fully delete this API token with the name \':tokenName\' from the system.', + 'user_api_token_delete_confirm' => 'Are you sure you want to delete this API token?', + 'user_api_token_delete_success' => 'API token successfully deleted', + + // Webhooks + 'webhooks' => 'Webhooks', + 'webhooks_create' => 'Create New Webhook', + 'webhooks_none_created' => 'No webhooks have yet been created.', + 'webhooks_edit' => 'Edit Webhook', + 'webhooks_save' => 'Save Webhook', + 'webhooks_details' => 'Webhook Details', + 'webhooks_details_desc' => 'Provide a user friendly name and a POST endpoint as a location for the webhook data to be sent to.', + 'webhooks_events' => 'Webhook Events', + 'webhooks_events_desc' => 'Select all the events that should trigger this webhook to be called.', + 'webhooks_events_warning' => 'Keep in mind that these events will be triggered for all selected events, even if custom permissions are applied. Ensure that use of this webhook won\'t expose confidential content.', + 'webhooks_events_all' => 'All system events', + 'webhooks_name' => 'Webhook Name', + 'webhooks_timeout' => 'Webhook Request Timeout (Seconds)', + 'webhooks_endpoint' => 'Webhook Endpoint', + 'webhooks_active' => 'Webhook Active', + 'webhook_events_table_header' => 'Events', + 'webhooks_delete' => 'Delete Webhook', + 'webhooks_delete_warning' => 'This will fully delete this webhook, with the name \':webhookName\', from the system.', + 'webhooks_delete_confirm' => 'Are you sure you want to delete this webhook?', + 'webhooks_format_example' => 'Webhook Format Example', + 'webhooks_format_example_desc' => 'Webhook data is sent as a POST request to the configured endpoint as JSON following the format below. The "related_item" and "url" properties are optional and will depend on the type of event triggered.', + 'webhooks_status' => 'Webhook Status', + 'webhooks_last_called' => 'Last Called:', + 'webhooks_last_errored' => 'Last Errored:', + 'webhooks_last_error_message' => 'Last Error Message:', + + + //! If editing translations files directly please ignore this in all + //! languages apart from en. Content will be auto-copied from en. + //!//////////////////////////////// + 'language_select' => [ + 'en' => 'English', + 'ar' => 'العربية', + 'bg' => 'Bǎlgarski', + 'bs' => 'Bosanski', + 'ca' => 'Català', + 'cs' => 'Česky', + 'da' => 'Dansk', + 'de' => 'Deutsch (Sie)', + 'de_informal' => 'Deutsch (Du)', + 'es' => 'Español', + 'es_AR' => 'Español Argentina', + 'et' => 'Eesti keel', + 'eu' => 'Euskara', + 'fr' => 'Français', + 'he' => 'עברית', + 'hr' => 'Hrvatski', + 'hu' => 'Magyar', + 'id' => 'Bahasa Indonesia', + 'it' => 'Italian', + 'ja' => '日本語', + 'ko' => '한국어', + 'lt' => 'Lietuvių Kalba', + 'lv' => 'Latviešu Valoda', + 'nl' => 'Nederlands', + 'nb' => 'Norsk (Bokmål)', + 'pl' => 'Polski', + 'pt' => 'Português', + 'pt_BR' => 'Português do Brasil', + 'ru' => 'Русский', + 'sk' => 'Slovensky', + 'sl' => 'Slovenščina', + 'sv' => 'Svenska', + 'tr' => 'Türkçe', + 'uk' => 'Українська', + 'vi' => 'Tiếng Việt', + 'zh_CN' => '简体中文', + 'zh_TW' => '繁體中文', + ], + //!//////////////////////////////// +]; diff --git a/resources/lang/uz/validation.php b/resources/lang/uz/validation.php new file mode 100644 index 000000000..2a676c7c4 --- /dev/null +++ b/resources/lang/uz/validation.php @@ -0,0 +1,117 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'backup_codes' => 'The provided code is not valid or has already been used.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values', + 'file' => 'The :attribute must be provided as a valid file.', + 'filled' => 'The :attribute field is required.', + 'gt' => [ + 'numeric' => 'The :attribute must be greater than :value.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'string' => 'The :attribute must be greater than :value characters.', + 'array' => 'The :attribute must have more than :value items.', + ], + 'gte' => [ + 'numeric' => 'The :attribute must be greater than or equal :value.', + 'file' => 'The :attribute must be greater than or equal :value kilobytes.', + 'string' => 'The :attribute must be greater than or equal :value characters.', + 'array' => 'The :attribute must have :value items or more.', + ], + 'exists' => 'The selected :attribute is invalid.', + 'image' => 'The :attribute must be an image.', + 'image_extension' => 'The :attribute must have a valid & supported image extension.', + 'in' => 'The selected :attribute is invalid.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lt' => [ + 'numeric' => 'The :attribute must be less than :value.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'string' => 'The :attribute must be less than :value characters.', + 'array' => 'The :attribute must have less than :value items.', + ], + 'lte' => [ + 'numeric' => 'The :attribute must be less than or equal :value.', + 'file' => 'The :attribute must be less than or equal :value kilobytes.', + 'string' => 'The :attribute must be less than or equal :value characters.', + 'array' => 'The :attribute must not have more than :value items.', + ], + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'safe_url' => 'The provided link may not be safe.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'totp' => 'The provided code is not valid or has expired.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + 'uploaded' => 'The file could not be uploaded. The server may not accept files of this size.', + + // Custom validation lines + 'custom' => [ + 'password-confirm' => [ + 'required_with' => 'Password confirmation required', + ], + ], + + // Custom validation attributes + 'attributes' => [], +]; diff --git a/resources/lang/vi/entities.php b/resources/lang/vi/entities.php index 7dfbe5256..52a4d4520 100644 --- a/resources/lang/vi/entities.php +++ b/resources/lang/vi/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => 'Bản nháp đã lưu lúc ', 'pages_edit_delete_draft' => 'Xóa Bản nháp', 'pages_edit_discard_draft' => 'Hủy bỏ Bản nháp', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => 'Đặt Changelog', 'pages_edit_enter_changelog_desc' => 'Viết mô tả ngắn gọn cho các thay đổi mà bạn tạo', 'pages_edit_enter_changelog' => 'Viết Changelog', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => 'Lưu Trang', 'pages_title' => 'Tiêu đề Trang', 'pages_name' => 'Tên Trang', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => 'Phiên bản #:id', 'pages_revisions_numbered_changes' => 'Các thay đổi của phiên bản #:id', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => 'Nhật ký thay đổi', 'pages_revisions_changes' => 'Các thay đổi', 'pages_revisions_current' => 'Phiên bản hiện tại', diff --git a/resources/lang/vi/settings.php b/resources/lang/vi/settings.php index 7740c2487..b59727b16 100644 --- a/resources/lang/vi/settings.php +++ b/resources/lang/vi/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => 'Bảo mật tốt hơn cho việc tải lên ảnh', 'app_secure_images_toggle' => 'Bật bảo mật tốt hơn cho các ảnh được tải lên', 'app_secure_images_desc' => 'Vì lí do hiệu năng, tất cả các ảnh đều được truy cập công khai. Tùy chọn này thêm một chuỗi ngẫu nhiên, khó đoán vào phần liên kết đến ảnh. Đảm bảo rằng tránh việc index thư mục để ngăn chặn việc truy cập đến ảnh một cách dễ dàng.', - 'app_editor' => 'Soạn thảo Trang', - 'app_editor_desc' => 'Chọn trình soạn thảo nào sẽ được sử dụng bởi tất cả người dùng để chỉnh sửa trang.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => 'Tùy chọn nội dung Head HTML', 'app_custom_html_desc' => 'Bất cứ nội dung nào được thêm vào đây sẽ được đưa vào phần cuối của khu vực của mỗi trang. Tiện cho việc ghi đè style hoặc thêm mã phân tích dữ liệu.', 'app_custom_html_disabled_notice' => 'Nội dung tùy biến HTML head bị tắt tại trang cài đặt này để đảm bảo mọi thay đổi làm hỏng hệ thống có để được khôi phục.', @@ -152,6 +152,7 @@ return [ 'role_access_api' => 'Truy cập đến API hệ thống', 'role_manage_settings' => 'Quản lý cài đặt của ứng dụng', 'role_export_content' => 'Export content', + 'role_editor_change' => 'Change page editor', 'role_asset' => 'Quyền tài sản (asset)', 'roles_system_warning' => 'Be aware that access to any of the above three permissions can allow a user to alter their own privileges or the privileges of others in the system. Only assign roles with these permissions to trusted users.', 'role_asset_desc' => 'Các quyền này điều khiển truy cập mặc định tới tài sản (asset) nằm trong hệ thống. Quyền tại Sách, Chường và Trang se ghi đè các quyền này.', diff --git a/resources/lang/zh_CN/editor.php b/resources/lang/zh_CN/editor.php index 81d46a059..80f6335e2 100644 --- a/resources/lang/zh_CN/editor.php +++ b/resources/lang/zh_CN/editor.php @@ -24,7 +24,7 @@ return [ 'width' => '宽度', 'height' => '高度', 'More' => '更多', - 'select' => 'Select...', + 'select' => '选择...', // Toolbar 'formats' => '格式', @@ -53,10 +53,10 @@ return [ 'align_left' => '左对齐', 'align_center' => '居中', 'align_right' => '右对齐', - 'align_justify' => 'Justify', + 'align_justify' => '两端对齐', 'list_bullet' => '无序列表', 'list_numbered' => '有序列表', - 'list_task' => 'Task list', + 'list_task' => '任务列表', 'indent_increase' => '增加缩进', 'indent_decrease' => '减少缩进', 'table' => '表格', @@ -93,10 +93,10 @@ return [ 'cell_properties_title' => '单元格属性', 'cell_type' => '单元格类型', 'cell_type_cell' => '单元格', - 'cell_scope' => 'Scope', + 'cell_scope' => '范围', 'cell_type_header' => '表头', - 'merge_cells' => 'Merge cells', - 'split_cell' => 'Split cell', + 'merge_cells' => '合并单元格', + 'split_cell' => '拆分单元格', 'table_row_group' => '按行分组', 'table_column_group' => '按列分组', 'horizontal_align' => '水平对齐', @@ -124,16 +124,16 @@ return [ 'caption' => '标题', 'show_caption' => '显示标题', 'constrain' => '保持宽高比', - 'cell_border_solid' => 'Solid', - 'cell_border_dotted' => 'Dotted', - 'cell_border_dashed' => 'Dashed', - 'cell_border_double' => 'Double', - 'cell_border_groove' => 'Groove', - 'cell_border_ridge' => 'Ridge', - 'cell_border_inset' => 'Inset', - 'cell_border_outset' => 'Outset', - 'cell_border_none' => 'None', - 'cell_border_hidden' => 'Hidden', + 'cell_border_solid' => '实线', + 'cell_border_dotted' => '点虚线', + 'cell_border_dashed' => '短虚线', + 'cell_border_double' => '双实线', + 'cell_border_groove' => '浮入', + 'cell_border_ridge' => '浮出', + 'cell_border_inset' => '陷入', + 'cell_border_outset' => '突出', + 'cell_border_none' => '无边框', + 'cell_border_hidden' => '隐藏边框', // Images, links, details/summary & embed 'source' => '来源', @@ -154,7 +154,7 @@ return [ 'toggle_label' => '切换标签', // About view - 'about' => 'About the editor', + 'about' => '关于编辑器', 'about_title' => '关于所见即所得(WYSIWYG)编辑器', 'editor_license' => '编辑器许可证与版权信息', 'editor_tiny_license' => '此编辑器是在 LGPL v2.1 许可证下使用 :tinyLink 构建的。', diff --git a/resources/lang/zh_CN/entities.php b/resources/lang/zh_CN/entities.php index 7a6654c82..c93577798 100644 --- a/resources/lang/zh_CN/entities.php +++ b/resources/lang/zh_CN/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => '草稿保存于 ', 'pages_edit_delete_draft' => '删除草稿', 'pages_edit_discard_draft' => '放弃草稿', + 'pages_edit_switch_to_markdown' => '切换到 Markdown 编辑器', + 'pages_edit_switch_to_markdown_clean' => '(清除内容)', + 'pages_edit_switch_to_markdown_stable' => '(保留内容)', + 'pages_edit_switch_to_wysiwyg' => '切换到所见即所得编辑器', 'pages_edit_set_changelog' => '更新说明', 'pages_edit_enter_changelog_desc' => '输入对您所做更改的简要说明', 'pages_edit_enter_changelog' => '输入更新说明', + 'pages_editor_switch_title' => '切换编辑器', + 'pages_editor_switch_are_you_sure' => '您确定要更改此页面的编辑器吗?', + 'pages_editor_switch_consider_following' => '更改编辑器时请注意以下事项:', + 'pages_editor_switch_consideration_a' => '一旦保存,任何未来的编辑都将使用新的编辑器,包括那些可能无法自行更改编辑器类型的编辑器。', + 'pages_editor_switch_consideration_b' => '这可能导致在某些情况下失去细节和语法。', + 'pages_editor_switch_consideration_c' => '此次修改不会保存上次保存后修改的标签和更改日志。', 'pages_save' => '保存页面', 'pages_title' => '页面标题', 'pages_name' => '页面名', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => '修订 #:id', 'pages_revisions_numbered_changes' => '修改 #:id ', + 'pages_revisions_editor' => '编辑器类型', 'pages_revisions_changelog' => '更新说明', 'pages_revisions_changes' => '查看更改', 'pages_revisions_current' => '当前版本', diff --git a/resources/lang/zh_CN/settings.php b/resources/lang/zh_CN/settings.php index dacb82d83..bef4d20f5 100755 --- a/resources/lang/zh_CN/settings.php +++ b/resources/lang/zh_CN/settings.php @@ -10,8 +10,8 @@ return [ 'settings' => '设置', 'settings_save' => '保存设置', 'settings_save_success' => '设置已保存', - 'system_version' => 'System Version', - 'categories' => 'Categories', + 'system_version' => '系统版本', + 'categories' => '类别', // App Settings 'app_customization' => '定制', @@ -27,8 +27,8 @@ return [ 'app_secure_images' => '启用更高安全性的图片上传?', 'app_secure_images_toggle' => '启用更高安全性的图片上传', 'app_secure_images_desc' => '出于性能原因,所有图像都是公开的。这个选项会在图像的网址前添加一个随机的,难以猜测的字符串,从而使直接访问变得困难。', - 'app_editor' => '页面编辑器', - 'app_editor_desc' => '选择所有用户将使用哪个编辑器来编辑页面。', + 'app_default_editor' => '默认页面编辑器', + 'app_default_editor_desc' => '选择在编辑新页面时默认使用哪个编辑器。这可以在页面权限处覆盖。', 'app_custom_html' => '自定义HTML头部内容', 'app_custom_html_desc' => '此处添加的任何内容都将插入到每个页面的部分的底部,这对于覆盖样式或添加分析代码很方便。', 'app_custom_html_disabled_notice' => '在此设置页面上禁用了自定义HTML标题内容,以确保可以恢复所有重大更改。', @@ -121,7 +121,7 @@ return [ 'audit_table_user' => '用户', 'audit_table_event' => '事件', 'audit_table_related' => '相关项目或详细信息', - 'audit_table_ip' => 'IP地址', + 'audit_table_ip' => 'IP 地址', 'audit_table_date' => '活动日期', 'audit_date_from' => '日期范围从', 'audit_date_to' => '日期范围至', @@ -152,6 +152,7 @@ return [ 'role_access_api' => '访问系统 API', 'role_manage_settings' => '管理App设置', 'role_export_content' => '导出内容', + 'role_editor_change' => '更改页面编辑器', 'role_asset' => '资源许可', 'roles_system_warning' => '请注意,拥有上述三个权限中的任何一个都可以允许用户更改自己的权限或系统中其他人的权限。 请只将拥有这些权限的角色分配给你信任的用户。', 'role_asset_desc' => '对系统内资源的默认访问许可将由这些权限控制。单独设置在书籍,章节和页面上的权限将覆盖这里的权限设定。', diff --git a/resources/lang/zh_TW/auth.php b/resources/lang/zh_TW/auth.php index b051deda5..4977d1ec2 100644 --- a/resources/lang/zh_TW/auth.php +++ b/resources/lang/zh_TW/auth.php @@ -21,7 +21,7 @@ return [ 'email' => '電子郵件', 'password' => '密碼', 'password_confirm' => '確認密碼', - 'password_hint' => 'Must be at least 8 characters', + 'password_hint' => '密碼必須至少8個字元', 'forgot_password' => '忘記密碼?', 'remember_me' => '記住我', 'ldap_email_hint' => '請輸入此帳號使用的電子郵件。', @@ -54,7 +54,7 @@ return [ 'email_confirm_text' => '請點選下面的按鈕來確認您的電子郵件地址:', 'email_confirm_action' => '確認電子郵件', 'email_confirm_send_error' => '需要電子郵件驗證,但系統無法傳送電子郵件。請與管理員聯絡以確保電子郵件正確設定。', - 'email_confirm_success' => 'Your email has been confirmed! You should now be able to login using this email address.', + 'email_confirm_success' => '您的電子郵箱已確認成功!您可以使用該電子郵箱地址進行登入了。', 'email_confirm_resent' => '確認電子郵件已重新傳送。請檢查您的收件匣。', 'email_not_confirmed' => '電子郵件地址未確認', @@ -71,20 +71,20 @@ return [ 'user_invite_page_welcome' => '歡迎使用 :appName!', 'user_invite_page_text' => '要完成設定您的帳號並取得存取權,您必須設定密碼,此密碼將用於登入 :appName。', 'user_invite_page_confirm_button' => '確認密碼', - 'user_invite_success_login' => 'Password set, you should now be able to login using your set password to access :appName!', + 'user_invite_success_login' => '密碼已設定完成,您可以使用改密碼來登入 :appName!', // Multi-factor Authentication - 'mfa_setup' => 'Setup Multi-Factor Authentication', - 'mfa_setup_desc' => 'Setup multi-factor authentication as an extra layer of security for your user account.', - 'mfa_setup_configured' => 'Already configured', - 'mfa_setup_reconfigure' => 'Reconfigure', - 'mfa_setup_remove_confirmation' => 'Are you sure you want to remove this multi-factor authentication method?', - 'mfa_setup_action' => 'Setup', - 'mfa_backup_codes_usage_limit_warning' => 'You have less than 5 backup codes remaining, Please generate and store a new set before you run out of codes to prevent being locked out of your account.', - 'mfa_option_totp_title' => 'Mobile App', - 'mfa_option_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.', - 'mfa_option_backup_codes_title' => 'Backup Codes', - 'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.', + 'mfa_setup' => '設定雙重身份驗證', + 'mfa_setup_desc' => '設定雙重身份驗證為您的帳戶多增加了一道防線', + 'mfa_setup_configured' => '設定完成', + 'mfa_setup_reconfigure' => '重新設定', + 'mfa_setup_remove_confirmation' => '您確定要移除雙重身份驗證嗎?', + 'mfa_setup_action' => '設置', + 'mfa_backup_codes_usage_limit_warning' => '您只剩下不到5組備用驗證碼了,請重新生成新的備用驗證碼並妥善保存,以免日後無法登入您的賬號。', + 'mfa_option_totp_title' => '手機App', + 'mfa_option_totp_desc' => '您必須在行動裝置上安裝了支援TOTP的身份驗證程式(例如Google Authenticator, Authy 或是 Microsoft Authenticator)才能使用雙重身份驗證。', + 'mfa_option_backup_codes_title' => '備用驗證碼', + 'mfa_option_backup_codes_desc' => '妥善保存好您的一次性備用驗證碼,以便日後驗證您的身份。', 'mfa_gen_confirm_and_enable' => 'Confirm and Enable', 'mfa_gen_backup_codes_title' => 'Backup Codes Setup', 'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.', @@ -100,9 +100,9 @@ return [ 'mfa_verify_access_desc' => 'Your user account requires you to confirm your identity via an additional level of verification before you\'re granted access. Verify using one of your configured methods to continue.', 'mfa_verify_no_methods' => 'No Methods Configured', 'mfa_verify_no_methods_desc' => 'No multi-factor authentication methods could be found for your account. You\'ll need to set up at least one method before you gain access.', - 'mfa_verify_use_totp' => 'Verify using a mobile app', - 'mfa_verify_use_backup_codes' => 'Verify using a backup code', - 'mfa_verify_backup_code' => 'Backup Code', + 'mfa_verify_use_totp' => '使用您的行動裝置進行驗證', + 'mfa_verify_use_backup_codes' => '使用您的備用驗證碼進行驗證', + 'mfa_verify_backup_code' => '備用驗證碼', 'mfa_verify_backup_code_desc' => 'Enter one of your remaining backup codes below:', 'mfa_verify_backup_code_enter_here' => 'Enter backup code here', 'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:', diff --git a/resources/lang/zh_TW/entities.php b/resources/lang/zh_TW/entities.php index 0b10aaa83..a42946b99 100644 --- a/resources/lang/zh_TW/entities.php +++ b/resources/lang/zh_TW/entities.php @@ -196,9 +196,19 @@ return [ 'pages_edit_draft_save_at' => '草稿儲存於 ', 'pages_edit_delete_draft' => '刪除草稿', 'pages_edit_discard_draft' => '放棄草稿', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', 'pages_edit_set_changelog' => '設定變更日誌', 'pages_edit_enter_changelog_desc' => '輸入對您所做變動的簡易描述', 'pages_edit_enter_changelog' => '輸入變更日誌', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', 'pages_save' => '儲存頁面', 'pages_title' => '頁面標題', 'pages_name' => '頁面名稱', @@ -225,6 +235,7 @@ return [ 'pages_revisions_number' => '#', 'pages_revisions_numbered' => '修訂版本 #:id', 'pages_revisions_numbered_changes' => '修訂版本 #:id 變更', + 'pages_revisions_editor' => 'Editor Type', 'pages_revisions_changelog' => '變動日誌', 'pages_revisions_changes' => '變動', 'pages_revisions_current' => '目前版本', diff --git a/resources/lang/zh_TW/settings.php b/resources/lang/zh_TW/settings.php index aa4dde1f4..2dd9d5577 100644 --- a/resources/lang/zh_TW/settings.php +++ b/resources/lang/zh_TW/settings.php @@ -27,8 +27,8 @@ return [ 'app_secure_images' => '更高安全性的圖片上傳', 'app_secure_images_toggle' => '啟用更高安全性的圖片上傳', 'app_secure_images_desc' => '因為效能因素,所有圖片都是公開的。此選項會在圖片的網址前加入一串隨機且難以猜測的字串。確保未啟用目錄索引,讓直接進入變得更困難。', - 'app_editor' => '頁面編輯器', - 'app_editor_desc' => '選取所有使用者將使用哪個編輯器來編輯頁面。', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', 'app_custom_html' => '自訂 HTML 標題內容', 'app_custom_html_desc' => '此處加入的任何內容都將插入到每個頁面的 部分的底部,這對於覆蓋樣式或加入分析程式碼很方便。', 'app_custom_html_disabled_notice' => '在此設定頁面上停用了自訂 HTML 標題內容,以確保任何重大變更都能被還原。', @@ -152,6 +152,7 @@ return [ 'role_access_api' => '存取系統 API', 'role_manage_settings' => '管理應用程式設定', 'role_export_content' => '匯入內容', + 'role_editor_change' => 'Change page editor', 'role_asset' => '資源權限', 'roles_system_warning' => '請注意,有上述三項權限中的任一項的使用者都可以更改自己或系統中其他人的權限。有這些權限的角色只應分配給受信任的使用者。', 'role_asset_desc' => '對系統內資源的預設權限將由這裡的權限控制。若有單獨設定在書本、章節和頁面上的權限,將會覆寫這裡的權限設定。', diff --git a/resources/sass/_components.scss b/resources/sass/_components.scss index 95ba81520..bce456cf2 100644 --- a/resources/sass/_components.scss +++ b/resources/sass/_components.scss @@ -120,6 +120,11 @@ width: 800px; max-width: 90%; } + &.very-small { + margin: 2% auto; + width: 600px; + max-width: 90%; + } &:before { display: flex; align-self: flex-start; diff --git a/resources/sass/_lists.scss b/resources/sass/_lists.scss index 9cff52972..26d12a25d 100644 --- a/resources/sass/_lists.scss +++ b/resources/sass/_lists.scss @@ -593,13 +593,22 @@ ul.pagination { li.active a { font-weight: 600; } - a, button { - display: block; - padding: $-xs $-m; + button { + width: 100%; + text-align: start; + } + li.border-bottom { + border-bottom: 1px solid #DDD; + } + li hr { + margin: $-xs 0; + } + .icon-item, .text-item, .label-item { + padding: 8px $-m; @include lightDark(color, #555, #eee); fill: currentColor; white-space: nowrap; - line-height: 1.6; + line-height: 1.4; cursor: pointer; &:hover, &:focus { text-decoration: none; @@ -616,15 +625,30 @@ ul.pagination { width: 16px; } } - button { - width: 100%; - text-align: start; + .text-item { + display: block; } - li.border-bottom { - border-bottom: 1px solid #DDD; + .label-item { + display: grid; + align-items: center; + grid-template-columns: auto min-content; + gap: $-m; } - li hr { - margin: $-xs 0; + .label-item > *:nth-child(2) { + opacity: 0.7; + &:hover { + opacity: 1; + } + } + .icon-item { + display: grid; + align-items: start; + grid-template-columns: 16px auto; + gap: $-m; + svg { + margin-inline-end: 0; + margin-block-start: 1px; + } } } diff --git a/resources/sass/_text.scss b/resources/sass/_text.scss index 884808bb4..51f315614 100644 --- a/resources/sass/_text.scss +++ b/resources/sass/_text.scss @@ -163,7 +163,6 @@ em, i, .italic { small, p.small, span.small, .text-small { font-size: 0.75rem; - @include lightDark(color, #5e5e5e, #999); } sup, .superscript { diff --git a/resources/views/attachments/manager-list.blade.php b/resources/views/attachments/manager-list.blade.php index b48fde9c0..ebb1c24aa 100644 --- a/resources/views/attachments/manager-list.blade.php +++ b/resources/views/attachments/manager-list.blade.php @@ -28,7 +28,7 @@ class="drag-card-action text-center text-neg">@icon('close') diff --git a/resources/views/comments/comment.blade.php b/resources/views/comments/comment.blade.php index 9f4a12357..6189c65d4 100644 --- a/resources/views/comments/comment.blade.php +++ b/resources/views/comments/comment.blade.php @@ -31,7 +31,12 @@ @endif diff --git a/resources/views/common/confirm-dialog.blade.php b/resources/views/common/confirm-dialog.blade.php new file mode 100644 index 000000000..28587d4e8 --- /dev/null +++ b/resources/views/common/confirm-dialog.blade.php @@ -0,0 +1,21 @@ + \ No newline at end of file diff --git a/resources/views/common/export-styles.blade.php b/resources/views/common/export-styles.blade.php index ee10637dd..1dfa6bb45 100644 --- a/resources/views/common/export-styles.blade.php +++ b/resources/views/common/export-styles.blade.php @@ -1,5 +1,5 @@ diff --git a/resources/views/common/header.blade.php b/resources/views/common/header.blade.php index d55f3ae2d..b5ac520c1 100644 --- a/resources/views/common/header.blade.php +++ b/resources/views/common/header.blade.php @@ -62,26 +62,36 @@ diff --git a/resources/views/entities/export-menu.blade.php b/resources/views/entities/export-menu.blade.php index 2b0f5c19d..dd7231095 100644 --- a/resources/views/entities/export-menu.blade.php +++ b/resources/views/entities/export-menu.blade.php @@ -5,9 +5,9 @@ {{ trans('entities.export') }} diff --git a/resources/views/entities/sort.blade.php b/resources/views/entities/sort.blade.php index bf9087397..f81ed797f 100644 --- a/resources/views/entities/sort.blade.php +++ b/resources/views/entities/sort.blade.php @@ -16,7 +16,7 @@ diff --git a/resources/views/home/default.blade.php b/resources/views/home/default.blade.php index f6a337e50..6435e4ebd 100644 --- a/resources/views/home/default.blade.php +++ b/resources/views/home/default.blade.php @@ -17,6 +17,13 @@ + +
    diff --git a/resources/views/mfa/parts/setup-method-row.blade.php b/resources/views/mfa/parts/setup-method-row.blade.php index e195174c1..271ec1bf4 100644 --- a/resources/views/mfa/parts/setup-method-row.blade.php +++ b/resources/views/mfa/parts/setup-method-row.blade.php @@ -19,7 +19,7 @@
    {{ csrf_field() }} {{ method_field('delete') }} - +
    diff --git a/resources/views/pages/edit.blade.php b/resources/views/pages/edit.blade.php index 30158e852..cd9635758 100644 --- a/resources/views/pages/edit.blade.php +++ b/resources/views/pages/edit.blade.php @@ -1,9 +1,5 @@ @extends('layouts.base') -@section('head') - -@stop - @section('body-class', 'flexbox') @section('content') @@ -12,9 +8,7 @@
    {{ csrf_field() }} - @if(!isset($isDraft)) - - @endif + @if(!$isDraft) {{ method_field('PUT') }} @endif @include('pages.parts.form', ['model' => $page]) @include('pages.parts.editor-toolbox')
    diff --git a/resources/views/pages/parts/editor-toolbar.blade.php b/resources/views/pages/parts/editor-toolbar.blade.php new file mode 100644 index 000000000..4846f4b76 --- /dev/null +++ b/resources/views/pages/parts/editor-toolbar.blade.php @@ -0,0 +1,86 @@ +
    +
    + + + +
    + +
    + +
    + + + +
    +
    +
    \ No newline at end of file diff --git a/resources/views/pages/parts/form.blade.php b/resources/views/pages/parts/form.blade.php index 01f68a6c5..8da5cbf39 100644 --- a/resources/views/pages/parts/form.blade.php +++ b/resources/views/pages/parts/form.blade.php @@ -1,71 +1,22 @@
    name === trans('entities.pages_initial_name')) option:page-editor:has-default-title="true" @endif - option:page-editor:editor-type="{{ setting('app-editor') }}" + option:page-editor:editor-type="{{ $editor }}" option:page-editor:page-id="{{ $model->id ?? '0' }}" - option:page-editor:page-new-draft="{{ ($model->draft ?? false) ? 'true' : 'false' }}" - option:page-editor:draft-text="{{ ($model->draft || $model->isDraft) ? trans('entities.pages_editing_draft') : trans('entities.pages_editing_page') }}" + option:page-editor:page-new-draft="{{ $isDraft ? 'true' : 'false' }}" + option:page-editor:draft-text="{{ ($isDraft || $isDraftRevision) ? trans('entities.pages_editing_draft') : trans('entities.pages_editing_page') }}" option:page-editor:autosave-fail-text="{{ trans('errors.page_draft_autosave_fail') }}" option:page-editor:editing-page-text="{{ trans('entities.pages_editing_page') }}" option:page-editor:draft-discarded-text="{{ trans('entities.pages_draft_discarded') }}" option:page-editor:set-changelog-text="{{ trans('entities.pages_edit_set_changelog') }}"> - {{--Header Bar--}} -
    -
    - - - -
    - -
    - -
    - - - -
    -
    -
    + {{--Header Toolbar--}} + @include('pages.parts.editor-toolbar', ['model' => $model, 'editor' => $editor, 'isDraft' => $isDraft, 'draftsEnabled' => $draftsEnabled]) {{--Title input--}}
    @@ -78,19 +29,35 @@
    {{--WYSIWYG Editor--}} - @if(setting('app-editor') === 'wysiwyg') + @if($editor === 'wysiwyg') @include('pages.parts.wysiwyg-editor', ['model' => $model]) @endif {{--Markdown Editor--}} - @if(setting('app-editor') === 'markdown') + @if($editor === 'markdown') @include('pages.parts.markdown-editor', ['model' => $model]) @endif
    + {{--Mobile Save Button--}} + + {{--Editor Change Dialog--}} + @component('common.confirm-dialog', ['title' => trans('entities.pages_editor_switch_title'), 'ref' => 'page-editor@switchDialog']) +

    + {{ trans('entities.pages_editor_switch_are_you_sure') }} +
    + {{ trans('entities.pages_editor_switch_consider_following') }} +

    + +
      +
    • {{ trans('entities.pages_editor_switch_consideration_a') }}
    • +
    • {{ trans('entities.pages_editor_switch_consideration_b') }}
    • +
    • {{ trans('entities.pages_editor_switch_consideration_c') }}
    • +
    + @endcomponent
    \ No newline at end of file diff --git a/resources/views/pages/parts/wysiwyg-editor.blade.php b/resources/views/pages/parts/wysiwyg-editor.blade.php index 29a4b6532..d8ca74939 100644 --- a/resources/views/pages/parts/wysiwyg-editor.blade.php +++ b/resources/views/pages/parts/wysiwyg-editor.blade.php @@ -1,3 +1,7 @@ +@push('head') + +@endpush +
    - {{ trans('entities.pages_revisions_number') }} - {{ trans('entities.pages_name') }} - {{ trans('entities.pages_revisions_created_by') }} - {{ trans('entities.pages_revisions_date') }} - {{ trans('entities.pages_revisions_changelog') }} - {{ trans('common.actions') }} + {{ trans('entities.pages_revisions_number') }} + + {{ trans('entities.pages_name') }} / {{ trans('entities.pages_revisions_editor') }} + + {{ trans('entities.pages_revisions_created_by') }} / {{ trans('entities.pages_revisions_date') }} + {{ trans('entities.pages_revisions_changelog') }} + {{ trans('common.actions') }} @foreach($page->revisions as $index => $revision) {{ $revision->revision_number == 0 ? '' : $revision->revision_number }} - {{ $revision->name }} - + + {{ $revision->name }} +
    + ({{ $revision->markdown ? 'Markdown' : 'WYSIWYG' }}) + + @if($revision->createdBy) {{ $revision->createdBy->name }} @endif - @if($revision->createdBy) {{ $revision->createdBy->name }} @else {{ trans('common.deleted_user') }} @endif - {{ $revision->created_at->formatLocalized('%e %B %Y %H:%M:%S') }}
    ({{ $revision->created_at->diffForHumans() }})
    - {{ $revision->summary }} - + + @if($revision->createdBy) {{ $revision->createdBy->name }} @else {{ trans('common.deleted_user') }} @endif +
    +
    + {{ $revision->created_at->formatLocalized('%e %B %Y %H:%M:%S') }} + ({{ $revision->created_at->diffForHumans() }}) +
    + + + {{ $revision->summary }} + + {{ trans('entities.pages_revisions_changes') }}  |  @@ -58,7 +71,10 @@
    {!! csrf_field() !!} - +
    @@ -72,7 +88,10 @@
    {!! csrf_field() !!} - +
    diff --git a/resources/views/settings/audit.blade.php b/resources/views/settings/audit.blade.php index ca5dba527..506a735a2 100644 --- a/resources/views/settings/audit.blade.php +++ b/resources/views/settings/audit.blade.php @@ -14,9 +14,9 @@
    diff --git a/resources/views/settings/customization.blade.php b/resources/views/settings/customization.blade.php index 2bc3531d7..b7be95b4a 100644 --- a/resources/views/settings/customization.blade.php +++ b/resources/views/settings/customization.blade.php @@ -23,12 +23,12 @@
    -
    +
    - -

    {{ trans('settings.app_editor_desc') }}

    + +

    {{ trans('settings.app_default_editor_desc') }}

    -
    +
    diff --git a/resources/views/settings/recycle-bin/index.blade.php b/resources/views/settings/recycle-bin/index.blade.php index 5f2ec333f..56e2437fe 100644 --- a/resources/views/settings/recycle-bin/index.blade.php +++ b/resources/views/settings/recycle-bin/index.blade.php @@ -22,7 +22,7 @@
    {!! csrf_field() !!} - +
    @@ -93,8 +93,8 @@ diff --git a/resources/views/settings/roles/parts/form.blade.php b/resources/views/settings/roles/parts/form.blade.php index a15117e5e..aeaa39a6d 100644 --- a/resources/views/settings/roles/parts/form.blade.php +++ b/resources/views/settings/roles/parts/form.blade.php @@ -37,6 +37,7 @@
    @include('settings.roles.parts.checkbox', ['permission' => 'templates-manage', 'label' => trans('settings.role_manage_page_templates')])
    @include('settings.roles.parts.checkbox', ['permission' => 'access-api', 'label' => trans('settings.role_access_api')])
    @include('settings.roles.parts.checkbox', ['permission' => 'content-export', 'label' => trans('settings.role_export_content')])
    +
    @include('settings.roles.parts.checkbox', ['permission' => 'editor-change', 'label' => trans('settings.role_editor_change')])
    @include('settings.roles.parts.checkbox', ['permission' => 'settings-manage', 'label' => trans('settings.role_manage_settings')])
    diff --git a/routes/api.php b/routes/api.php index a87169ee5..20e167d70 100644 --- a/routes/api.php +++ b/routes/api.php @@ -9,6 +9,7 @@ use BookStack\Http\Controllers\Api\ChapterApiController; use BookStack\Http\Controllers\Api\ChapterExportApiController; use BookStack\Http\Controllers\Api\PageApiController; use BookStack\Http\Controllers\Api\PageExportApiController; +use BookStack\Http\Controllers\Api\RecycleBinApiController; use BookStack\Http\Controllers\Api\SearchApiController; use BookStack\Http\Controllers\Api\UserApiController; use Illuminate\Support\Facades\Route; @@ -72,3 +73,7 @@ Route::post('users', [UserApiController::class, 'create']); Route::get('users/{id}', [UserApiController::class, 'read']); Route::put('users/{id}', [UserApiController::class, 'update']); Route::delete('users/{id}', [UserApiController::class, 'delete']); + +Route::get('recycle-bin', [RecycleBinApiController::class, 'list']); +Route::put('recycle-bin/{deletionId}', [RecycleBinApiController::class, 'restore']); +Route::delete('recycle-bin/{deletionId}', [RecycleBinApiController::class, 'destroy']); diff --git a/tests/Api/AttachmentsApiTest.php b/tests/Api/AttachmentsApiTest.php index d7625c938..a34337016 100644 --- a/tests/Api/AttachmentsApiTest.php +++ b/tests/Api/AttachmentsApiTest.php @@ -5,6 +5,7 @@ namespace Tests\Api; use BookStack\Entities\Models\Page; use BookStack\Uploads\Attachment; use Illuminate\Http\UploadedFile; +use Illuminate\Testing\AssertableJsonString; use Tests\TestCase; class AttachmentsApiTest extends TestCase @@ -228,9 +229,11 @@ class AttachmentsApiTest extends TestCase $attachment = Attachment::query()->orderByDesc('id')->where('name', '=', $details['name'])->firstOrFail(); $resp = $this->getJson("{$this->baseEndpoint}/{$attachment->id}"); - $resp->assertStatus(200); - $resp->assertJson([ + $resp->assertHeader('Content-Type', 'application/json'); + + $json = new AssertableJsonString($resp->streamedContent()); + $json->assertSubset([ 'id' => $attachment->id, 'content' => base64_encode(file_get_contents(storage_path($attachment->path))), 'external' => false, diff --git a/tests/Api/BooksApiTest.php b/tests/Api/BooksApiTest.php index 91e2db9e5..9fe8f8215 100644 --- a/tests/Api/BooksApiTest.php +++ b/tests/Api/BooksApiTest.php @@ -3,13 +3,15 @@ namespace Tests\Api; use BookStack\Entities\Models\Book; +use Carbon\Carbon; +use Illuminate\Support\Facades\DB; use Tests\TestCase; class BooksApiTest extends TestCase { use TestsApi; - protected $baseEndpoint = '/api/books'; + protected string $baseEndpoint = '/api/books'; public function test_index_endpoint_returns_expected_book() { @@ -101,6 +103,21 @@ class BooksApiTest extends TestCase $this->assertActivityExists('book_update', $book); } + public function test_update_increments_updated_date_if_only_tags_are_sent() + { + $this->actingAsApiEditor(); + $book = Book::visible()->first(); + DB::table('books')->where('id', '=', $book->id)->update(['updated_at' => Carbon::now()->subWeek()]); + + $details = [ + 'tags' => [['name' => 'Category', 'value' => 'Testing']], + ]; + + $this->putJson($this->baseEndpoint . "/{$book->id}", $details); + $book->refresh(); + $this->assertGreaterThan(Carbon::now()->subDay()->unix(), $book->updated_at->unix()); + } + public function test_delete_endpoint() { $this->actingAsApiEditor(); diff --git a/tests/Api/ChaptersApiTest.php b/tests/Api/ChaptersApiTest.php index c9ed1a289..8d31500eb 100644 --- a/tests/Api/ChaptersApiTest.php +++ b/tests/Api/ChaptersApiTest.php @@ -4,13 +4,15 @@ namespace Tests\Api; use BookStack\Entities\Models\Book; use BookStack\Entities\Models\Chapter; +use Carbon\Carbon; +use Illuminate\Support\Facades\DB; use Tests\TestCase; class ChaptersApiTest extends TestCase { use TestsApi; - protected $baseEndpoint = '/api/chapters'; + protected string $baseEndpoint = '/api/chapters'; public function test_index_endpoint_returns_expected_chapter() { @@ -147,6 +149,21 @@ class ChaptersApiTest extends TestCase $this->assertActivityExists('chapter_update', $chapter); } + public function test_update_increments_updated_date_if_only_tags_are_sent() + { + $this->actingAsApiEditor(); + $chapter = Chapter::visible()->first(); + DB::table('chapters')->where('id', '=', $chapter->id)->update(['updated_at' => Carbon::now()->subWeek()]); + + $details = [ + 'tags' => [['name' => 'Category', 'value' => 'Testing']], + ]; + + $this->putJson($this->baseEndpoint . "/{$chapter->id}", $details); + $chapter->refresh(); + $this->assertGreaterThan(Carbon::now()->subDay()->unix(), $chapter->updated_at->unix()); + } + public function test_delete_endpoint() { $this->actingAsApiEditor(); diff --git a/tests/Api/PagesApiTest.php b/tests/Api/PagesApiTest.php index 4eb109d9d..539a7da4e 100644 --- a/tests/Api/PagesApiTest.php +++ b/tests/Api/PagesApiTest.php @@ -5,13 +5,15 @@ namespace Tests\Api; use BookStack\Entities\Models\Book; use BookStack\Entities\Models\Chapter; use BookStack\Entities\Models\Page; +use Carbon\Carbon; +use Illuminate\Support\Facades\DB; use Tests\TestCase; class PagesApiTest extends TestCase { use TestsApi; - protected $baseEndpoint = '/api/pages'; + protected string $baseEndpoint = '/api/pages'; public function test_index_endpoint_returns_expected_page() { @@ -240,6 +242,23 @@ class PagesApiTest extends TestCase $this->assertEquals($originalContent, $page->html); } + public function test_update_increments_updated_date_if_only_tags_are_sent() + { + $this->actingAsApiEditor(); + $page = Page::visible()->first(); + DB::table('pages')->where('id', '=', $page->id)->update(['updated_at' => Carbon::now()->subWeek()]); + + $details = [ + 'tags' => [['name' => 'Category', 'value' => 'Testing']], + ]; + + $resp = $this->putJson($this->baseEndpoint . "/{$page->id}", $details); + $resp->assertOk(); + + $page->refresh(); + $this->assertGreaterThan(Carbon::now()->subDay()->unix(), $page->updated_at->unix()); + } + public function test_delete_endpoint() { $this->actingAsApiEditor(); diff --git a/tests/Api/RecycleBinApiTest.php b/tests/Api/RecycleBinApiTest.php new file mode 100644 index 000000000..83cd82480 --- /dev/null +++ b/tests/Api/RecycleBinApiTest.php @@ -0,0 +1,184 @@ +getEditor(); + $this->giveUserPermissions($editor, ['settings-manage']); + $this->actingAs($editor); + + foreach ($this->endpointMap as [$method, $uri]) { + $resp = $this->json($method, $uri); + $resp->assertStatus(403); + $resp->assertJson($this->permissionErrorResponse()); + } + } + + public function test_restrictions_manage_all_permission_needed_for_all_endpoints() + { + $editor = $this->getEditor(); + $this->giveUserPermissions($editor, ['restrictions-manage-all']); + $this->actingAs($editor); + + foreach ($this->endpointMap as [$method, $uri]) { + $resp = $this->json($method, $uri); + $resp->assertStatus(403); + $resp->assertJson($this->permissionErrorResponse()); + } + } + + public function test_index_endpoint_returns_expected_page() + { + $admin = $this->getAdmin(); + + $page = Page::query()->first(); + $book = Book::query()->first(); + $this->actingAs($admin)->delete($page->getUrl()); + $this->delete($book->getUrl()); + + $deletions = Deletion::query()->orderBy('id')->get(); + + $resp = $this->getJson($this->baseEndpoint); + + $expectedData = $deletions + ->zip([$page, $book]) + ->map(function (Collection $data) use ($admin) { + return [ + 'id' => $data[0]->id, + 'deleted_by' => $admin->id, + 'created_at' => $data[0]->created_at->toJson(), + 'updated_at' => $data[0]->updated_at->toJson(), + 'deletable_type' => $data[1]->getMorphClass(), + 'deletable_id' => $data[1]->id, + 'deletable' => [ + 'name' => $data[1]->name, + ], + ]; + }); + + $resp->assertJson([ + 'data' => $expectedData->values()->all(), + 'total' => 2, + ]); + } + + public function test_index_endpoint_returns_children_count() + { + $admin = $this->getAdmin(); + + $book = Book::query()->whereHas('pages')->whereHas('chapters')->withCount(['pages', 'chapters'])->first(); + $this->actingAs($admin)->delete($book->getUrl()); + + $deletion = Deletion::query()->orderBy('id')->first(); + + $resp = $this->getJson($this->baseEndpoint); + + $expectedData = [ + [ + 'id' => $deletion->id, + 'deletable' => [ + 'pages_count' => $book->pages_count, + 'chapters_count' => $book->chapters_count, + ], + ], + ]; + + $resp->assertJson([ + 'data' => $expectedData, + 'total' => 1, + ]); + } + + public function test_index_endpoint_returns_parent() + { + $admin = $this->getAdmin(); + $page = Page::query()->whereHas('chapter')->with('chapter')->first(); + + $this->actingAs($admin)->delete($page->getUrl()); + $deletion = Deletion::query()->orderBy('id')->first(); + + $resp = $this->getJson($this->baseEndpoint); + + $expectedData = [ + [ + 'id' => $deletion->id, + 'deletable' => [ + 'parent' => [ + 'id' => $page->chapter->id, + 'name' => $page->chapter->name, + 'type' => 'chapter', + ], + ], + ], + ]; + + $resp->assertJson([ + 'data' => $expectedData, + 'total' => 1, + ]); + } + + public function test_restore_endpoint() + { + $page = Page::query()->first(); + $this->asAdmin()->delete($page->getUrl()); + $page->refresh(); + + $deletion = Deletion::query()->orderBy('id')->first(); + + $this->assertDatabaseHas('pages', [ + 'id' => $page->id, + 'deleted_at' => $page->deleted_at, + ]); + + $resp = $this->putJson($this->baseEndpoint . '/' . $deletion->id); + $resp->assertJson([ + 'restore_count' => 1, + ]); + + $this->assertDatabaseHas('pages', [ + 'id' => $page->id, + 'deleted_at' => null, + ]); + } + + public function test_destroy_endpoint() + { + $page = Page::query()->first(); + $this->asAdmin()->delete($page->getUrl()); + $page->refresh(); + + $deletion = Deletion::query()->orderBy('id')->first(); + + $this->assertDatabaseHas('pages', [ + 'id' => $page->id, + 'deleted_at' => $page->deleted_at, + ]); + + $resp = $this->deleteJson($this->baseEndpoint . '/' . $deletion->id); + $resp->assertJson([ + 'delete_count' => 1, + ]); + + $this->assertDatabaseMissing('pages', ['id' => $page->id]); + } +} diff --git a/tests/Api/ShelvesApiTest.php b/tests/Api/ShelvesApiTest.php index 8868c686e..034d4bc28 100644 --- a/tests/Api/ShelvesApiTest.php +++ b/tests/Api/ShelvesApiTest.php @@ -4,13 +4,15 @@ namespace Tests\Api; use BookStack\Entities\Models\Book; use BookStack\Entities\Models\Bookshelf; +use Carbon\Carbon; +use Illuminate\Support\Facades\DB; use Tests\TestCase; class ShelvesApiTest extends TestCase { use TestsApi; - protected $baseEndpoint = '/api/shelves'; + protected string $baseEndpoint = '/api/shelves'; public function test_index_endpoint_returns_expected_shelf() { @@ -111,6 +113,21 @@ class ShelvesApiTest extends TestCase $this->assertActivityExists('bookshelf_update', $shelf); } + public function test_update_increments_updated_date_if_only_tags_are_sent() + { + $this->actingAsApiEditor(); + $shelf = Bookshelf::visible()->first(); + DB::table('bookshelves')->where('id', '=', $shelf->id)->update(['updated_at' => Carbon::now()->subWeek()]); + + $details = [ + 'tags' => [['name' => 'Category', 'value' => 'Testing']], + ]; + + $this->putJson($this->baseEndpoint . "/{$shelf->id}", $details); + $shelf->refresh(); + $this->assertGreaterThan(Carbon::now()->subDay()->unix(), $shelf->updated_at->unix()); + } + public function test_update_only_assigns_books_if_param_provided() { $this->actingAsApiEditor(); diff --git a/tests/Entity/ExportTest.php b/tests/Entity/ExportTest.php index 141f072f8..08d092111 100644 --- a/tests/Entity/ExportTest.php +++ b/tests/Entity/ExportTest.php @@ -362,42 +362,6 @@ class ExportTest extends TestCase $resp->assertSee("# Dogcat\n\nSome **bold** text"); } - public function test_page_markdown_export_does_not_convert_callouts() - { - $page = Page::query()->first()->forceFill([ - 'markdown' => '', - 'html' => '

    Dogcat

    Some callout text

    Another line

    ', - ]); - $page->save(); - - $resp = $this->asEditor()->get($page->getUrl('/export/markdown')); - $resp->assertSee("# Dogcat\n\n

    Some callout text

    \n\nAnother line", false); - } - - public function test_page_markdown_export_handles_bookstacks_wysiwyg_codeblock_format() - { - $page = Page::query()->first()->forceFill([ - 'markdown' => '', - 'html' => '

    Dogcat

    ' . "\r\n" . '
    var a = \'cat\';

    Another line

    ', - ]); - $page->save(); - - $resp = $this->asEditor()->get($page->getUrl('/export/markdown')); - $resp->assertSee("# Dogcat\n\n```JavaScript\nvar a = 'cat';\n```\n\nAnother line", false); - } - - public function test_page_markdown_export_handles_tasklist_checkboxes() - { - $page = Page::query()->first()->forceFill([ - 'markdown' => '', - 'html' => '
    • Item A
    • Item B
    ', - ]); - $page->save(); - - $resp = $this->asEditor()->get($page->getUrl('/export/markdown')); - $resp->assertSee("- [x] Item A\n- [ ] Item B", false); - } - public function test_chapter_markdown_export() { $chapter = Chapter::query()->first(); diff --git a/tests/Entity/MarkdownToHtmlTest.php b/tests/Entity/MarkdownToHtmlTest.php new file mode 100644 index 000000000..158103c7e --- /dev/null +++ b/tests/Entity/MarkdownToHtmlTest.php @@ -0,0 +1,76 @@ +assertConversion( + '

    Dogcat

    Some bold text

    ', + "# Dogcat\n\nSome **bold** text" + ); + } + + public function test_callouts_remain_html() + { + $this->assertConversion( + '

    Dogcat

    Some callout text

    Another line

    ', + "# Dogcat\n\n

    Some callout text

    \n\nAnother line" + ); + } + + public function test_wysiwyg_code_format_handled_cleanly() + { + $this->assertConversion( + '

    Dogcat

    ' . "\r\n" . '
    var a = \'cat\';

    Another line

    ', + "# Dogcat\n\n```JavaScript\nvar a = 'cat';\n```\n\nAnother line" + ); + } + + public function test_tasklist_checkboxes_are_handled() + { + $this->assertConversion( + '
    • Item A
    • Item B
    ', + "- [x] Item A\n- [ ] Item B" + ); + } + + public function test_drawing_blocks_remain_html() + { + $this->assertConversion( + '
    Some text', + '
    ' . "\n\nSome text" + ); + } + + public function test_summary_tags_have_newlines_after_to_separate_content() + { + $this->assertConversion( + '
    Toggle

    Test

    ', + "
    Toggle\n\nTest\n\n
    " + ); + } + + public function test_iframes_tags_have_newlines_after_to_separate_content() + { + $this->assertConversion( + '

    Beans

    ', + "\n\nBeans" + ); + } + + protected function assertConversion(string $html, string $expectedMarkdown, bool $partialMdMatch = false) + { + $markdown = (new HtmlToMarkdown($html))->convert(); + + if ($partialMdMatch) { + static::assertStringContainsString($expectedMarkdown, $markdown); + } else { + static::assertEquals($expectedMarkdown, $markdown); + } + } +} diff --git a/tests/Entity/PageEditorTest.php b/tests/Entity/PageEditorTest.php index c06aa5bf1..d4e565435 100644 --- a/tests/Entity/PageEditorTest.php +++ b/tests/Entity/PageEditorTest.php @@ -18,36 +18,39 @@ class PageEditorTest extends TestCase $this->page = Page::query()->first(); } - public function test_default_editor_is_wysiwyg() + public function test_default_editor_is_wysiwyg_for_new_pages() { $this->assertEquals('wysiwyg', setting('app-editor')); - $this->asAdmin()->get($this->page->getUrl() . '/edit') - ->assertElementExists('#html-editor'); + $resp = $this->asAdmin()->get($this->page->book->getUrl('/create-page')); + $this->followRedirects($resp)->assertElementExists('#html-editor'); } - public function test_markdown_setting_shows_markdown_editor() + public function test_markdown_setting_shows_markdown_editor_for_new_pages() { $this->setSettings(['app-editor' => 'markdown']); - $this->asAdmin()->get($this->page->getUrl() . '/edit') + + $resp = $this->asAdmin()->get($this->page->book->getUrl('/create-page')); + $this->followRedirects($resp) ->assertElementNotExists('#html-editor') ->assertElementExists('#markdown-editor'); } public function test_markdown_content_given_to_editor() { - $this->setSettings(['app-editor' => 'markdown']); - $mdContent = '# hello. This is a test'; $this->page->markdown = $mdContent; + $this->page->editor = 'markdown'; $this->page->save(); - $this->asAdmin()->get($this->page->getUrl() . '/edit') + $this->asAdmin()->get($this->page->getUrl('/edit')) ->assertElementContains('[name="markdown"]', $mdContent); } public function test_html_content_given_to_editor_if_no_markdown() { - $this->setSettings(['app-editor' => 'markdown']); + $this->page->editor = 'markdown'; + $this->page->save(); + $this->asAdmin()->get($this->page->getUrl() . '/edit') ->assertElementContains('[name="markdown"]', $this->page->html); } @@ -102,4 +105,101 @@ class PageEditorTest extends TestCase $resp = $this->get($draft->getUrl('/edit')); $resp->assertElementContains('a[href="' . $draft->getUrl() . '"]', 'Back'); } + + public function test_switching_from_html_to_clean_markdown_works() + { + /** @var Page $page */ + $page = Page::query()->first(); + $page->html = '

    A Header

    Some bold content.

    '; + $page->save(); + + $resp = $this->asAdmin()->get($page->getUrl('/edit?editor=markdown-clean')); + $resp->assertStatus(200); + $resp->assertSee("## A Header\n\nSome **bold** content."); + $resp->assertElementExists('#markdown-editor'); + } + + public function test_switching_from_html_to_stable_markdown_works() + { + /** @var Page $page */ + $page = Page::query()->first(); + $page->html = '

    A Header

    Some bold content.

    '; + $page->save(); + + $resp = $this->asAdmin()->get($page->getUrl('/edit?editor=markdown-stable')); + $resp->assertStatus(200); + $resp->assertSee('

    A Header

    Some bold content.

    ', true); + $resp->assertElementExists('[component="markdown-editor"]'); + } + + public function test_switching_from_markdown_to_wysiwyg_works() + { + /** @var Page $page */ + $page = Page::query()->first(); + $page->html = ''; + $page->markdown = "## A Header\n\nSome content with **bold** text!"; + $page->save(); + + $resp = $this->asAdmin()->get($page->getUrl('/edit?editor=wysiwyg')); + $resp->assertStatus(200); + $resp->assertElementExists('[component="wysiwyg-editor"]'); + $resp->assertSee("

    A Header

    \n

    Some content with bold text!

    ", true); + } + + public function test_page_editor_changes_with_editor_property() + { + $resp = $this->asAdmin()->get($this->page->getUrl('/edit')); + $resp->assertElementExists('[component="wysiwyg-editor"]'); + + $this->page->markdown = "## A Header\n\nSome content with **bold** text!"; + $this->page->editor = 'markdown'; + $this->page->save(); + + $resp = $this->asAdmin()->get($this->page->getUrl('/edit')); + $resp->assertElementExists('[component="markdown-editor"]'); + } + + public function test_editor_type_switch_options_show() + { + $resp = $this->asAdmin()->get($this->page->getUrl('/edit')); + $editLink = $this->page->getUrl('/edit') . '?editor='; + $resp->assertElementContains("a[href=\"${editLink}markdown-clean\"]", '(Clean Content)'); + $resp->assertElementContains("a[href=\"${editLink}markdown-stable\"]", '(Stable Content)'); + + $resp = $this->asAdmin()->get($this->page->getUrl('/edit?editor=markdown-stable')); + $editLink = $this->page->getUrl('/edit') . '?editor='; + $resp->assertElementContains("a[href=\"${editLink}wysiwyg\"]", 'Switch to WYSIWYG Editor'); + } + + public function test_editor_type_switch_options_dont_show_if_without_change_editor_permissions() + { + $resp = $this->asEditor()->get($this->page->getUrl('/edit')); + $editLink = $this->page->getUrl('/edit') . '?editor='; + $resp->assertElementNotExists("a[href*=\"${editLink}\"]"); + } + + public function test_page_editor_type_switch_does_not_work_without_change_editor_permissions() + { + /** @var Page $page */ + $page = Page::query()->first(); + $page->html = '

    A Header

    Some bold content.

    '; + $page->save(); + + $resp = $this->asEditor()->get($page->getUrl('/edit?editor=markdown-stable')); + $resp->assertStatus(200); + $resp->assertElementExists('[component="wysiwyg-editor"]'); + $resp->assertElementNotExists('[component="markdown-editor"]'); + } + + public function test_page_save_does_not_change_active_editor_without_change_editor_permissions() + { + /** @var Page $page */ + $page = Page::query()->first(); + $page->html = '

    A Header

    Some bold content.

    '; + $page->editor = 'wysiwyg'; + $page->save(); + + $this->asEditor()->put($page->getUrl(), ['name' => $page->name, 'markdown' => '## Updated content abc']); + $this->assertEquals('wysiwyg', $page->refresh()->editor); + } } diff --git a/tests/Entity/PageRevisionTest.php b/tests/Entity/PageRevisionTest.php index fc6678788..ce203ea36 100644 --- a/tests/Entity/PageRevisionTest.php +++ b/tests/Entity/PageRevisionTest.php @@ -203,4 +203,19 @@ class PageRevisionTest extends TestCase $revisionCount = $page->revisions()->count(); $this->assertEquals(12, $revisionCount); } + + public function test_revision_list_shows_editor_type() + { + /** @var Page $page */ + $page = Page::first(); + $this->asAdmin()->put($page->getUrl(), ['name' => 'Updated page', 'html' => 'new page html']); + + $resp = $this->get($page->refresh()->getUrl('/revisions')); + $resp->assertElementContains('td', '(WYSIWYG)'); + $resp->assertElementNotContains('td', '(Markdown)'); + + $this->asAdmin()->put($page->getUrl(), ['name' => 'Updated page', 'markdown' => '# Some markdown content']); + $resp = $this->get($page->refresh()->getUrl('/revisions')); + $resp->assertElementContains('td', '(Markdown)'); + } } diff --git a/tests/Unit/UrlTest.php b/tests/Unit/UrlTest.php deleted file mode 100644 index fff5414f2..000000000 --- a/tests/Unit/UrlTest.php +++ /dev/null @@ -1,22 +0,0 @@ -runWithEnv('APP_URL', 'http://example.com/bookstack', function () { - $this->assertEquals('http://example.com/bookstack/books', url('/books')); - }); - } - - public function test_url_helper_sets_correct_scheme_even_when_request_scheme_is_different() - { - $this->runWithEnv('APP_URL', 'https://example.com/', function () { - $this->get('http://example.com/login')->assertSee('https://example.com/dist/styles.css'); - }); - } -} diff --git a/tests/Uploads/AttachmentTest.php b/tests/Uploads/AttachmentTest.php index 5545edf13..27a23bcae 100644 --- a/tests/Uploads/AttachmentTest.php +++ b/tests/Uploads/AttachmentTest.php @@ -128,7 +128,8 @@ class AttachmentTest extends TestCase $pageGet->assertSee($attachment->getUrl()); $attachmentGet = $this->get($attachment->getUrl()); - $attachmentGet->assertSee('Hi, This is a test file for testing the upload process.'); + $content = $attachmentGet->streamedContent(); + $this->assertStringContainsString('Hi, This is a test file for testing the upload process.', $content); $this->deleteUploads(); } diff --git a/tests/Uploads/DrawioTest.php b/tests/Uploads/DrawioTest.php index 1fc3d1049..2ed4da7ca 100644 --- a/tests/Uploads/DrawioTest.php +++ b/tests/Uploads/DrawioTest.php @@ -71,7 +71,7 @@ class DrawioTest extends TestCase $editor = $this->getEditor(); $resp = $this->actingAs($editor)->get($page->getUrl('/edit')); - $resp->assertSee('drawio-url="https://embed.diagrams.net/?embed=1&proto=json&spin=1"', false); + $resp->assertSee('drawio-url="https://embed.diagrams.net/?embed=1&proto=json&spin=1&configure=1"', false); config()->set('services.drawio', false); $resp = $this->actingAs($editor)->get($page->getUrl('/edit')); diff --git a/tests/UrlTest.php b/tests/UrlTest.php new file mode 100644 index 000000000..90215d558 --- /dev/null +++ b/tests/UrlTest.php @@ -0,0 +1,37 @@ +runWithEnv('APP_URL', 'http://example.com/bookstack', function () { + $this->assertEquals('http://example.com/bookstack/books', url('/books')); + }); + } + + public function test_url_helper_sets_correct_scheme_even_when_request_scheme_is_different() + { + $this->runWithEnv('APP_URL', 'https://example.com/', function () { + $this->get('http://example.com/login')->assertSee('https://example.com/dist/styles.css'); + }); + } + + public function test_app_url_forces_overrides_on_base_request() + { + config()->set('app.url', 'https://donkey.example.com:8091/cool/docs'); + + // Have to manually get and wrap request in our custom type due to testing mechanics + $this->get('/login'); + $bsRequest = Request::createFrom(request()); + + $this->assertEquals('https://donkey.example.com:8091', $bsRequest->getSchemeAndHttpHost()); + $this->assertEquals('/cool/docs', $bsRequest->getBaseUrl()); + $this->assertEquals('https://donkey.example.com:8091/cool/docs/login', $bsRequest->getUri()); + } +}