From 049d6ba5b2e16041664de644980e34cdeed3738c Mon Sep 17 00:00:00 2001 From: julesdevops Date: Sat, 5 Feb 2022 10:17:13 +0100 Subject: [PATCH 1/6] fix(wysiwyg): preserves line feeds in code block mode --- resources/js/components/wysiwyg-editor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/js/components/wysiwyg-editor.js b/resources/js/components/wysiwyg-editor.js index 7a2b6ceba..789317a24 100644 --- a/resources/js/components/wysiwyg-editor.js +++ b/resources/js/components/wysiwyg-editor.js @@ -136,7 +136,7 @@ function codePlugin() { const selectedNode = editor.selection.getNode(); if (!elemIsCodeBlock(selectedNode)) { - const providedCode = editor.selection.getNode().textContent; + const providedCode = editor.selection.getNode().innerText; window.components.first('code-editor').open(providedCode, '', (code, lang) => { const wrap = document.createElement('div'); wrap.innerHTML = `
`; From 43f32f6d5a8fb5e008005b3df99e4076e0dd73eb Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 6 Feb 2022 05:05:17 +0000 Subject: [PATCH 2/6] Added attachment API file size limit test Created while testing for #3248, Was not something that's currently failing within BookStack but will still add for coverage. --- tests/Api/AttachmentsApiTest.php | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/Api/AttachmentsApiTest.php b/tests/Api/AttachmentsApiTest.php index bfa47343e..79b4ae98c 100644 --- a/tests/Api/AttachmentsApiTest.php +++ b/tests/Api/AttachmentsApiTest.php @@ -102,6 +102,30 @@ class AttachmentsApiTest extends TestCase unlink(storage_path($newItem->path)); } + public function test_upload_limit_restricts_attachment_uploads() + { + $this->actingAsApiAdmin(); + /** @var Page $page */ + $page = Page::query()->first(); + + config()->set('app.upload_limit', 1); + + $file = tmpfile(); + $filePath = stream_get_meta_data($file)['uri']; + fwrite($file, str_repeat('a', 1200000)); + $file = new UploadedFile($filePath, 'test.txt', 'text/plain', null, true); + + $details = [ + 'name' => 'My attachment', + 'uploaded_to' => $page->id, + ]; + $resp = $this->call('POST', $this->baseEndpoint, $details, [], ['file' => $file]); + $resp->assertStatus(422); + $resp->assertJson($this->validationResponse([ + "file" => ["The file may not be greater than 1000 kilobytes."] + ])); + } + public function test_name_needed_to_create() { $this->actingAsApiAdmin(); From d29a2a647aba72044b14074873d1fa626116e031 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 6 Feb 2022 07:51:38 +0000 Subject: [PATCH 3/6] Prevented PCRE limit issues in markdown base64 extraction For #3249 --- app/Entities/Tools/PageContent.php | 28 +++++++++++++++++++++---- tests/Entity/PageContentTest.php | 33 ++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/app/Entities/Tools/PageContent.php b/app/Entities/Tools/PageContent.php index b95131fce..dbb62021c 100644 --- a/app/Entities/Tools/PageContent.php +++ b/app/Entities/Tools/PageContent.php @@ -109,15 +109,35 @@ class PageContent /** * Convert all inline base64 content to uploaded image files. + * Regex is used to locate the start of data-uri definitions then + * manual looping over content is done to parse the whole data uri. + * Attempting to capture the whole data uri using regex can cause PHP + * PCRE limits to be hit with larger, multi-MB, files. */ protected function extractBase64ImagesFromMarkdown(string $markdown) { $matches = []; - preg_match_all('/!\[.*?]\(.*?(data:image\/.*?)[)"\s]/', $markdown, $matches); + $contentLength = strlen($markdown); + $replacements = []; + preg_match_all('/!\[.*?]\(.*?(data:image\/.{1,6};base64,)/', $markdown, $matches, PREG_OFFSET_CAPTURE); - foreach ($matches[1] as $base64Match) { - $newUrl = $this->base64ImageUriToUploadedImageUrl($base64Match); - $markdown = str_replace($base64Match, $newUrl, $markdown); + foreach ($matches[1] as $base64MatchPair) { + [$dataUri, $index] = $base64MatchPair; + + for ($i = strlen($dataUri) + $index; $i < $contentLength; $i++) { + $char = $markdown[$i]; + if ($char === ')' || $char === ' ' || $char === "\n" || $char === '"') { + break; + } + $dataUri .= $char; + } + + $newUrl = $this->base64ImageUriToUploadedImageUrl($dataUri); + $replacements[] = [$dataUri, $newUrl]; + } + + foreach ($replacements as [$dataUri, $newUrl]) { + $markdown = str_replace($dataUri, $newUrl, $markdown); } return $markdown; diff --git a/tests/Entity/PageContentTest.php b/tests/Entity/PageContentTest.php index 9524186c8..cf1ecd84d 100644 --- a/tests/Entity/PageContentTest.php +++ b/tests/Entity/PageContentTest.php @@ -657,6 +657,39 @@ class PageContentTest extends TestCase $this->deleteImage($imagePath); } + public function test_markdown_base64_extract_not_limited_by_pcre_limits() + { + $pcreBacktrackLimit = ini_get("pcre.backtrack_limit"); + $pcreRecursionLimit = ini_get("pcre.recursion_limit"); + + $this->asEditor(); + $page = Page::query()->first(); + + ini_set("pcre.backtrack_limit", "500"); + ini_set("pcre.recursion_limit", "500"); + + $content = str_repeat('a', 5000); + $base64Content = base64_encode($content); + + $this->put($page->getUrl(), [ + 'name' => $page->name, 'summary' => '', + 'markdown' => 'test ![test](data:image/jpeg;base64,' . $base64Content . ') ![test](data:image/jpeg;base64,' . $base64Content . ')', + ]); + + $page->refresh(); + $this->assertStringMatchesFormat('test test test%A

%A', $page->html); + + $matches = []; + preg_match('/src="http:\/\/localhost(.*?)"/', $page->html, $matches); + $imagePath = $matches[1]; + $imageFile = public_path($imagePath); + $this->assertEquals($content, file_get_contents($imageFile)); + + $this->deleteImage($imagePath); + ini_set("pcre.backtrack_limit", $pcreBacktrackLimit); + ini_set("pcre.recursion_limit", $pcreRecursionLimit); + } + public function test_base64_images_within_markdown_blanked_if_not_supported_extension_for_extract() { $this->asEditor(); From 1df7497c094eed5e7fc4a951379e420d70074877 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 6 Feb 2022 14:47:33 +0000 Subject: [PATCH 4/6] Added missing validation.file message - Included test to cover - Also applied StyleCI fixes Closes #3248 --- resources/lang/en/validation.php | 1 + tests/Api/AttachmentsApiTest.php | 43 +++++++++++++++++--------------- tests/Entity/PageContentTest.php | 12 ++++----- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index 1963b0df2..2a676c7c4 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -32,6 +32,7 @@ return [ '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.', diff --git a/tests/Api/AttachmentsApiTest.php b/tests/Api/AttachmentsApiTest.php index 79b4ae98c..d7625c938 100644 --- a/tests/Api/AttachmentsApiTest.php +++ b/tests/Api/AttachmentsApiTest.php @@ -122,7 +122,7 @@ class AttachmentsApiTest extends TestCase $resp = $this->call('POST', $this->baseEndpoint, $details, [], ['file' => $file]); $resp->assertStatus(422); $resp->assertJson($this->validationResponse([ - "file" => ["The file may not be greater than 1000 kilobytes."] + 'file' => ['The file may not be greater than 1000 kilobytes.'], ])); } @@ -139,15 +139,7 @@ class AttachmentsApiTest extends TestCase $resp = $this->postJson($this->baseEndpoint, $details); $resp->assertStatus(422); - $resp->assertJson([ - 'error' => [ - 'message' => 'The given data was invalid.', - 'validation' => [ - 'name' => ['The name field is required.'], - ], - 'code' => 422, - ], - ]); + $resp->assertJson($this->validationResponse(['name' => ['The name field is required.']])); } public function test_link_or_file_needed_to_create() @@ -163,16 +155,27 @@ class AttachmentsApiTest extends TestCase $resp = $this->postJson($this->baseEndpoint, $details); $resp->assertStatus(422); - $resp->assertJson([ - 'error' => [ - 'message' => 'The given data was invalid.', - 'validation' => [ - 'file' => ['The file field is required when link is not present.'], - 'link' => ['The link field is required when file is not present.'], - ], - 'code' => 422, - ], - ]); + $resp->assertJson($this->validationResponse([ + 'file' => ['The file field is required when link is not present.'], + 'link' => ['The link field is required when file is not present.'], + ])); + } + + public function test_message_shown_if_file_is_not_a_valid_file() + { + $this->actingAsApiAdmin(); + /** @var Page $page */ + $page = Page::query()->first(); + + $details = [ + 'name' => 'my attachment', + 'uploaded_to' => $page->id, + 'file' => 'cat', + ]; + + $resp = $this->postJson($this->baseEndpoint, $details); + $resp->assertStatus(422); + $resp->assertJson($this->validationResponse(['file' => ['The file must be provided as a valid file.']])); } public function test_read_endpoint_for_link_attachment() diff --git a/tests/Entity/PageContentTest.php b/tests/Entity/PageContentTest.php index cf1ecd84d..20cde049a 100644 --- a/tests/Entity/PageContentTest.php +++ b/tests/Entity/PageContentTest.php @@ -659,14 +659,14 @@ class PageContentTest extends TestCase public function test_markdown_base64_extract_not_limited_by_pcre_limits() { - $pcreBacktrackLimit = ini_get("pcre.backtrack_limit"); - $pcreRecursionLimit = ini_get("pcre.recursion_limit"); + $pcreBacktrackLimit = ini_get('pcre.backtrack_limit'); + $pcreRecursionLimit = ini_get('pcre.recursion_limit'); $this->asEditor(); $page = Page::query()->first(); - ini_set("pcre.backtrack_limit", "500"); - ini_set("pcre.recursion_limit", "500"); + ini_set('pcre.backtrack_limit', '500'); + ini_set('pcre.recursion_limit', '500'); $content = str_repeat('a', 5000); $base64Content = base64_encode($content); @@ -686,8 +686,8 @@ class PageContentTest extends TestCase $this->assertEquals($content, file_get_contents($imageFile)); $this->deleteImage($imagePath); - ini_set("pcre.backtrack_limit", $pcreBacktrackLimit); - ini_set("pcre.recursion_limit", $pcreRecursionLimit); + ini_set('pcre.backtrack_limit', $pcreBacktrackLimit); + ini_set('pcre.recursion_limit', $pcreRecursionLimit); } public function test_base64_images_within_markdown_blanked_if_not_supported_extension_for_extract() From b2f863e1f18ab9997dc43178ef53bc04b849e10c Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 6 Feb 2022 15:14:57 +0000 Subject: [PATCH 5/6] WYSIWG: Improved handling of cross-block code block creation - Updated code content to get specific text selection instead of using node-based handling which could return the whole document when multiple top-level nodes were in selection. - Simplified how code gets applied into the page to not be node based but use native editor methods to replace the selection. Allows creation from half-way through a block. Tested on chrome+Firefox on Fedora 35. Builds upon changes in #3246. For #3200. --- resources/js/components/wysiwyg-editor.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/resources/js/components/wysiwyg-editor.js b/resources/js/components/wysiwyg-editor.js index 789317a24..2dd5da410 100644 --- a/resources/js/components/wysiwyg-editor.js +++ b/resources/js/components/wysiwyg-editor.js @@ -136,18 +136,14 @@ function codePlugin() { const selectedNode = editor.selection.getNode(); if (!elemIsCodeBlock(selectedNode)) { - const providedCode = editor.selection.getNode().innerText; + const providedCode = editor.selection.getContent({format: 'text'}); window.components.first('code-editor').open(providedCode, '', (code, lang) => { const wrap = document.createElement('div'); wrap.innerHTML = `
`; wrap.querySelector('code').innerText = code; - editor.formatter.toggle('pre'); - const node = editor.selection.getNode(); - editor.dom.setHTML(node, wrap.querySelector('pre').innerHTML); - editor.fire('SetContent'); - - editor.focus() + editor.insertContent(wrap.innerHTML); + editor.focus(); }); return; } From b4e29d2b7dd5d217b44a9af646fd083134d3f68a Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 6 Feb 2022 15:46:28 +0000 Subject: [PATCH 6/6] New Crowdin updates (#3225) --- resources/lang/ar/validation.php | 1 + resources/lang/bg/validation.php | 1 + resources/lang/bs/validation.php | 1 + resources/lang/ca/validation.php | 1 + resources/lang/cs/validation.php | 1 + resources/lang/da/validation.php | 1 + resources/lang/de/validation.php | 1 + resources/lang/de_informal/validation.php | 1 + resources/lang/es/validation.php | 1 + resources/lang/es_AR/validation.php | 1 + resources/lang/et/validation.php | 1 + resources/lang/fa/validation.php | 1 + resources/lang/fr/common.php | 2 +- resources/lang/fr/validation.php | 1 + resources/lang/he/validation.php | 1 + resources/lang/hr/validation.php | 1 + resources/lang/hu/validation.php | 1 + resources/lang/id/validation.php | 1 + resources/lang/it/validation.php | 1 + resources/lang/ja/validation.php | 1 + resources/lang/ko/validation.php | 1 + resources/lang/lt/validation.php | 1 + resources/lang/lv/common.php | 4 ++-- resources/lang/lv/settings.php | 10 +++++----- resources/lang/lv/validation.php | 1 + resources/lang/nb/validation.php | 1 + resources/lang/nl/validation.php | 1 + resources/lang/pl/validation.php | 1 + resources/lang/pt/validation.php | 1 + resources/lang/pt_BR/validation.php | 1 + resources/lang/ru/validation.php | 1 + resources/lang/sk/validation.php | 1 + resources/lang/sl/validation.php | 1 + resources/lang/sv/validation.php | 1 + resources/lang/tr/validation.php | 1 + resources/lang/uk/validation.php | 1 + resources/lang/vi/validation.php | 1 + resources/lang/zh_CN/common.php | 2 +- resources/lang/zh_CN/validation.php | 1 + resources/lang/zh_TW/validation.php | 1 + 40 files changed, 45 insertions(+), 9 deletions(-) diff --git a/resources/lang/ar/validation.php b/resources/lang/ar/validation.php index d4d3aaf26..94112789d 100644 --- a/resources/lang/ar/validation.php +++ b/resources/lang/ar/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => 'يجب أن يكون :attribute بعدد خانات بين :min و :max.', 'email' => 'يجب أن يكون :attribute عنوان بريد إلكتروني صالح.', 'ends_with' => 'يجب أن تنتهي السمة بأحد القيم التالية', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => 'حقل :attribute مطلوب.', 'gt' => [ 'numeric' => 'يجب أن تكون السمة أكبر من: القيمة.', diff --git a/resources/lang/bg/validation.php b/resources/lang/bg/validation.php index 0a5b81d92..68ce6e7b4 100644 --- a/resources/lang/bg/validation.php +++ b/resources/lang/bg/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute трябва да бъде с дължина между :min и :max цифри.', 'email' => ':attribute трябва да бъде валиден имейл адрес.', 'ends_with' => ':attribute трябва да свършва с един от следните символи: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => 'Полето :attribute е задължителен.', 'gt' => [ 'numeric' => ':attribute трябва да бъде по-голям от :value.', diff --git a/resources/lang/bs/validation.php b/resources/lang/bs/validation.php index d6887ccc7..b07df9178 100644 --- a/resources/lang/bs/validation.php +++ b/resources/lang/bs/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute mora imati između :min i :max brojeva.', 'email' => ':attribute mora biti ispravna e-mail adresa.', 'ends_with' => ':attribute mora završavati sa jednom od sljedećih: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => 'Polje :attribute je obavezno.', 'gt' => [ 'numeric' => ':attribute mora biti veći od :value.', diff --git a/resources/lang/ca/validation.php b/resources/lang/ca/validation.php index 603182c1a..bc9be7d05 100644 --- a/resources/lang/ca/validation.php +++ b/resources/lang/ca/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => 'El camp :attribute ha de tenir entre :min i :max dígits.', 'email' => 'El camp :attribute ha de ser una adreça electrònica vàlida.', 'ends_with' => 'El camp :attribute ha d\'acabar amb un dels següents valors: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => 'El camp :attribute és obligatori.', 'gt' => [ 'numeric' => 'El camp :attribute ha de ser més gran que :value.', diff --git a/resources/lang/cs/validation.php b/resources/lang/cs/validation.php index e4e33bc0c..441fd30c8 100644 --- a/resources/lang/cs/validation.php +++ b/resources/lang/cs/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute musí být dlouhé nejméně :min a nejvíce :max pozic.', 'email' => ':attribute není platný formát.', 'ends_with' => ':attribute musí končit jednou z následujících hodnot: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute musí být vyplněno.', 'gt' => [ 'numeric' => ':attribute musí být větší než :value.', diff --git a/resources/lang/da/validation.php b/resources/lang/da/validation.php index c54b07a6e..649e0df33 100644 --- a/resources/lang/da/validation.php +++ b/resources/lang/da/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute skal være mellem :min og :max cifre.', 'email' => ':attribute skal være en gyldig mail-adresse.', 'ends_with' => ':attribute skal slutte på en af følgende værdier: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute er obligatorisk.', 'gt' => [ 'numeric' => ':attribute skal være større end :value.', diff --git a/resources/lang/de/validation.php b/resources/lang/de/validation.php index 5d08c241a..aa3203132 100644 --- a/resources/lang/de/validation.php +++ b/resources/lang/de/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute muss zwischen :min und :max Stellen haben.', 'email' => ':attribute muss eine valide E-Mail-Adresse sein.', 'ends_with' => ':attribute muss mit einem der folgenden Werte: :values enden', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute ist erforderlich.', 'gt' => [ 'numeric' => ':attribute muss größer als :value sein.', diff --git a/resources/lang/de_informal/validation.php b/resources/lang/de_informal/validation.php index 6603eccc8..ef45d1116 100644 --- a/resources/lang/de_informal/validation.php +++ b/resources/lang/de_informal/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute muss zwischen :min und :max Stellen haben.', 'email' => ':attribute muss eine valide E-Mail-Adresse sein.', 'ends_with' => ':attribute muss mit einem der folgenden Werte: :values enden', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute ist erforderlich.', 'gt' => [ 'numeric' => ':attribute muss größer als :value sein.', diff --git a/resources/lang/es/validation.php b/resources/lang/es/validation.php index 177eb812c..531ad2b69 100644 --- a/resources/lang/es/validation.php +++ b/resources/lang/es/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute debe ser un valor entre :min y :max dígios.', 'email' => ':attribute debe ser un correo electrónico válido.', 'ends_with' => 'El :attribute debe terminar con uno de los siguientes: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => 'El campo :attribute es requerido.', 'gt' => [ 'numeric' => 'El :attribute debe ser mayor que :value.', diff --git a/resources/lang/es_AR/validation.php b/resources/lang/es_AR/validation.php index 6b72a6549..aed5e57af 100644 --- a/resources/lang/es_AR/validation.php +++ b/resources/lang/es_AR/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute debe ser un valor entre :min y :max dígios.', 'email' => ':attribute debe ser una dirección álida.', 'ends_with' => 'El :attribute debe terminar con uno de los siguientes: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => 'El campo :attribute es requerido.', 'gt' => [ 'numeric' => 'El :attribute debe ser mayor que :value.', diff --git a/resources/lang/et/validation.php b/resources/lang/et/validation.php index ed615e66f..f241b0958 100644 --- a/resources/lang/et/validation.php +++ b/resources/lang/et/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute peab olema :min ja :max numbri vahel.', 'email' => ':attribute peab olema kehtiv e-posti aadress.', 'ends_with' => ':attribute lõpus peab olema üks järgmistest väärtustest: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute väli on kohustuslik.', 'gt' => [ 'numeric' => ':attribute peab olema suurem kui :value.', diff --git a/resources/lang/fa/validation.php b/resources/lang/fa/validation.php index 665451e8d..4578e1cdd 100644 --- a/resources/lang/fa/validation.php +++ b/resources/lang/fa/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute باید بین :min و :max رقم باشد.', 'email' => ':attribute باید یک ایمیل معتبر باشد.', 'ends_with' => 'فیلد :attribute باید با یکی از مقادیر زیر خاتمه یابد: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => 'فیلد :attribute باید مقدار داشته باشد.', 'gt' => [ 'numeric' => ':attribute باید بزرگتر از :value باشد.', diff --git a/resources/lang/fr/common.php b/resources/lang/fr/common.php index c373f747b..1df172dc3 100644 --- a/resources/lang/fr/common.php +++ b/resources/lang/fr/common.php @@ -75,7 +75,7 @@ return [ 'status_active' => 'Actif', 'status_inactive' => 'Inactif', 'never' => 'Jamais', - 'none' => 'None', + 'none' => 'Aucun', // Header 'header_menu_expand' => 'Développer le menu', diff --git a/resources/lang/fr/validation.php b/resources/lang/fr/validation.php index 71a5e8e08..23bb74800 100644 --- a/resources/lang/fr/validation.php +++ b/resources/lang/fr/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute doit avoir une longueur entre :min et :max.', 'email' => ':attribute doit être une adresse e-mail valide.', 'ends_with' => ':attribute doit se terminer par une des valeurs suivantes : :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute est un champ requis.', 'gt' => [ 'numeric' => ':attribute doit être plus grand que :value.', diff --git a/resources/lang/he/validation.php b/resources/lang/he/validation.php index e52c28b42..85f6c698e 100644 --- a/resources/lang/he/validation.php +++ b/resources/lang/he/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => 'שדה :attribute חייב להיות בין :min ו-:max ספרות.', 'email' => 'שדה :attribute חייב להיות כתובת אימייל תקנית.', 'ends_with' => 'The :attribute must end with one of the following: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => 'שדה :attribute הוא חובה.', 'gt' => [ 'numeric' => 'The :attribute must be greater than :value.', diff --git a/resources/lang/hr/validation.php b/resources/lang/hr/validation.php index b88e872f1..ad2eaa4e4 100644 --- a/resources/lang/hr/validation.php +++ b/resources/lang/hr/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute mora biti između :min i :max znamenki.', 'email' => ':attribute mora biti valjana email adresa.', 'ends_with' => ':attribute mora završiti s :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute polje je obavezno.', 'gt' => [ 'numeric' => ':attribute mora biti veći od :value.', diff --git a/resources/lang/hu/validation.php b/resources/lang/hu/validation.php index 3d24cec3c..db6d24f8a 100644 --- a/resources/lang/hu/validation.php +++ b/resources/lang/hu/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute hosszának :min és :max számjegy között kell lennie.', 'email' => ':attribute érvényes email cím kell legyen.', 'ends_with' => ':attribute attribútumnak a következők egyikével kell végződnie: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute mező kötelező.', 'gt' => [ 'numeric' => ':attribute nagyobb kell, hogy legyen, mint :value.', diff --git a/resources/lang/id/validation.php b/resources/lang/id/validation.php index 992f40329..36a3397f5 100644 --- a/resources/lang/id/validation.php +++ b/resources/lang/id/validation.php @@ -32,6 +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.', 'filled' => ':attribute bidang diperlukan.', 'gt' => [ 'numeric' => ':attribute harus lebih besar dari :value.', diff --git a/resources/lang/it/validation.php b/resources/lang/it/validation.php index 62f070119..786077da5 100755 --- a/resources/lang/it/validation.php +++ b/resources/lang/it/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => 'Il campo :attribute deve essere tra i numeri :min e :max.', 'email' => 'Il campo :attribute deve essere un indirizzo email valido.', 'ends_with' => ':attribute deve terminare con uno dei seguenti: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => 'Il campo :attribute field is required.', 'gt' => [ 'numeric' => ':attribute deve essere maggiore di :value.', diff --git a/resources/lang/ja/validation.php b/resources/lang/ja/validation.php index f8a7f1326..4c96087f9 100644 --- a/resources/lang/ja/validation.php +++ b/resources/lang/ja/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attributeは:min〜:maxである必要があります。', 'email' => ':attributeは正しいEメールアドレスである必要があります。', 'ends_with' => ':attributeは:valuesのいずれかで終わる必要があります。', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attributeは必須です。', 'gt' => [ 'numeric' => ':attributeは:valueより大きな値である必要があります。', diff --git a/resources/lang/ko/validation.php b/resources/lang/ko/validation.php index ef8328103..19e5afc38 100644 --- a/resources/lang/ko/validation.php +++ b/resources/lang/ko/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute(을)를 :min~:max자리로 구성하세요.', 'email' => ':attribute(을)를 유효한 메일 주소로 구성하세요.', 'ends_with' => ':attribute(을)를 :values(으)로 끝나게 구성하세요.', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute(을)를 구성하세요.', 'gt' => [ 'numeric' => ':attribute(을)를 :value(이)가 넘게 구성하세요.', diff --git a/resources/lang/lt/validation.php b/resources/lang/lt/validation.php index 8fa9234cc..08470cf22 100644 --- a/resources/lang/lt/validation.php +++ b/resources/lang/lt/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute turi būti tarp :min ir :max skaitmenų.', 'email' => ':attribute turi būti tinkamas elektroninio pašto adresas.', 'ends_with' => ':attribute turi pasibaigti vienu iš šių: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute laukas yra privalomas.', 'gt' => [ 'numeric' => ':attribute turi būti didesnis negu :value.', diff --git a/resources/lang/lv/common.php b/resources/lang/lv/common.php index 3cc648906..e859027bc 100644 --- a/resources/lang/lv/common.php +++ b/resources/lang/lv/common.php @@ -74,8 +74,8 @@ return [ 'status' => 'Statuss', 'status_active' => 'Aktīvs', 'status_inactive' => 'Neaktīvs', - 'never' => 'Never', - 'none' => 'None', + 'never' => 'Nekad', + 'none' => 'Neviens', // Header 'header_menu_expand' => 'Izvērst galvenes izvēlni', diff --git a/resources/lang/lv/settings.php b/resources/lang/lv/settings.php index a5d23584b..1d1148b74 100644 --- a/resources/lang/lv/settings.php +++ b/resources/lang/lv/settings.php @@ -246,7 +246,7 @@ return [ 'webhooks_events_warning' => 'Ņemiet vērā, ka šie notikumi tiks palaisti visiem izvēlētajiem notikumiem, pat ja norādītas pielāgotas piekļuves tiesības. Pārliecineities, ka webhook lietošana neatklās ierobežotas pieejamības saturu.', 'webhooks_events_all' => 'Visi sistēmas notikumi', 'webhooks_name' => 'Webhook nosaukums', - 'webhooks_timeout' => 'Webhook Request Timeout (Seconds)', + 'webhooks_timeout' => 'Webhook pieprasījuma laika ierobežojums (sekundēs)', 'webhooks_endpoint' => 'Webhook adrese (endpoint)', 'webhooks_active' => 'Webhook aktīvs', 'webhook_events_table_header' => 'Notikumi', @@ -255,10 +255,10 @@ return [ 'webhooks_delete_confirm' => 'Vai tiešām vēlaties dzēst šo webhook?', 'webhooks_format_example' => 'Webhook formāta piemērs', 'webhooks_format_example_desc' => 'Webhook dati tiek nosūtīti kā POST pieprasījums norādītajai endpoint adresei kā JSON tālāk norādītajā formātā. "related_item" un "url" īpašības nav obligātas un ir atkarīgas no palaistā notikuma veida.', - 'webhooks_status' => 'Webhook Status', - 'webhooks_last_called' => 'Last Called:', - 'webhooks_last_errored' => 'Last Errored:', - 'webhooks_last_error_message' => 'Last Error Message:', + 'webhooks_status' => 'Webhook statuss', + 'webhooks_last_called' => 'Pēdejoreiz izsaukts:', + 'webhooks_last_errored' => 'Pedējoreiz kļūda:', + 'webhooks_last_error_message' => 'Pēdējais kļūdas paziņojums:', //! If editing translations files directly please ignore this in all diff --git a/resources/lang/lv/validation.php b/resources/lang/lv/validation.php index 8dd939746..c10a23cdd 100644 --- a/resources/lang/lv/validation.php +++ b/resources/lang/lv/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute jābūt starp :min un :max cipariem.', 'email' => ':attribute jābūt derīgai e-pasta adresei.', 'ends_with' => ':attribute jābeidzas ar vienu no :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute lauks ir obligāts.', 'gt' => [ 'numeric' => ':attribute jābūt lielākam kā :value.', diff --git a/resources/lang/nb/validation.php b/resources/lang/nb/validation.php index 684645729..0e8917f37 100644 --- a/resources/lang/nb/validation.php +++ b/resources/lang/nb/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute må være mellomg :min og :max tall.', 'email' => ':attribute må være en gyldig e-post.', 'ends_with' => ':attribute må slutte med en av verdiene: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute feltet er påkrevd.', 'gt' => [ 'numeric' => ':attribute må være større enn :value.', diff --git a/resources/lang/nl/validation.php b/resources/lang/nl/validation.php index c572ce85b..01183ea7d 100644 --- a/resources/lang/nl/validation.php +++ b/resources/lang/nl/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute moet tussen de :min en :max cijfers zijn.', 'email' => ':attribute is geen geldig e-mailadres.', 'ends_with' => ':attribute moet eindigen met een van de volgende: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute is verplicht.', 'gt' => [ 'numeric' => ':attribute moet groter zijn dan :value.', diff --git a/resources/lang/pl/validation.php b/resources/lang/pl/validation.php index ab4c9da7b..ebf4f76e6 100644 --- a/resources/lang/pl/validation.php +++ b/resources/lang/pl/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute musi mieć od :min do :max cyfr.', 'email' => ':attribute musi być prawidłowym adresem e-mail.', 'ends_with' => ':attribute musi kończyć się jedną z poniższych wartości: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute jest wymagany.', 'gt' => [ 'numeric' => ':attribute musi być większy niż :value.', diff --git a/resources/lang/pt/validation.php b/resources/lang/pt/validation.php index b5a15ed36..abf2ce4bf 100644 --- a/resources/lang/pt/validation.php +++ b/resources/lang/pt/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => 'O campo :attribute deve ter entre :min e :max dígitos.', 'email' => 'O campo :attribute deve ser um endereço de e-mail válido.', 'ends_with' => 'O campo :attribute deve terminar com um dos seguintes: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => 'O campo :attribute é requerido.', 'gt' => [ 'numeric' => 'O campo :attribute deve ser maior que :value.', diff --git a/resources/lang/pt_BR/validation.php b/resources/lang/pt_BR/validation.php index 705534cb6..9c778f6b9 100644 --- a/resources/lang/pt_BR/validation.php +++ b/resources/lang/pt_BR/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => 'O campo :attribute deve ter entre :min e :max dígitos.', 'email' => 'O campo :attribute deve ser um e-mail válido.', 'ends_with' => 'O campo :attribute deve terminar com um dos seguintes: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => 'O campo :attribute é requerido.', 'gt' => [ 'numeric' => 'O campo :attribute deve ser maior que :value.', diff --git a/resources/lang/ru/validation.php b/resources/lang/ru/validation.php index 45cc96155..a0dec2b56 100644 --- a/resources/lang/ru/validation.php +++ b/resources/lang/ru/validation.php @@ -32,6 +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.', 'filled' => ':attribute поле необходимо.', 'gt' => [ 'numeric' => 'Значение :attribute должно быть больше чем :value.', diff --git a/resources/lang/sk/validation.php b/resources/lang/sk/validation.php index 416c7e8de..20770e4b6 100644 --- a/resources/lang/sk/validation.php +++ b/resources/lang/sk/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute musí mať medzi :min a :max číslicami.', 'email' => ':attribute musí byť platná emailová adresa.', 'ends_with' => ':attribute musí končiť jednou z nasledujúcich hodnôt :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => 'Políčko :attribute je povinné.', 'gt' => [ 'numeric' => 'Hodnota :attribute musí byť väčšia ako :value.', diff --git a/resources/lang/sl/validation.php b/resources/lang/sl/validation.php index 5b08463ca..92060dd6d 100644 --- a/resources/lang/sl/validation.php +++ b/resources/lang/sl/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute mora biti med :min in :max števkami.', 'email' => ':attribute mora biti veljaven e-naslov.', 'ends_with' => 'The :attribute se mora končati z eno od določenih: :vrednost/values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => 'Polje ne sme biti prazno.', 'gt' => [ 'numeric' => ':attribute mora biti večji kot :vrednost.', diff --git a/resources/lang/sv/validation.php b/resources/lang/sv/validation.php index 0c9cc3164..2d7f1da9a 100644 --- a/resources/lang/sv/validation.php +++ b/resources/lang/sv/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute måste vara mellan :min och :max siffror.', 'email' => ':attribute måste vara en giltig e-postadress.', 'ends_with' => ':attribute måste sluta med något av följande: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute är obligatoriskt.', 'gt' => [ 'numeric' => ':attribute måste vara större än :value.', diff --git a/resources/lang/tr/validation.php b/resources/lang/tr/validation.php index 9cd8093d4..50a30a5b5 100644 --- a/resources/lang/tr/validation.php +++ b/resources/lang/tr/validation.php @@ -32,6 +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.', 'filled' => ':attribute alanı zorunludur.', 'gt' => [ 'numeric' => ':attribute, :max değerinden büyük olmalıdır.', diff --git a/resources/lang/uk/validation.php b/resources/lang/uk/validation.php index 25322f2d9..a7fad6bf8 100644 --- a/resources/lang/uk/validation.php +++ b/resources/lang/uk/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => 'Довжина цифрового поля :attribute повинна бути від :min до :max.', 'email' => 'Поле :attribute повинне містити коректну електронну адресу.', 'ends_with' => 'Поле :attribute має закінчуватися одним з наступних значень: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => 'Поле :attribute є обов\'язковим для заповнення.', 'gt' => [ 'numeric' => 'Поле :attribute має бути більше ніж :value.', diff --git a/resources/lang/vi/validation.php b/resources/lang/vi/validation.php index 7e237cf9e..274e747f2 100644 --- a/resources/lang/vi/validation.php +++ b/resources/lang/vi/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute phải có từ :min đến :max chữ số.', 'email' => ':attribute phải là địa chỉ email hợp lệ.', 'ends_with' => ':attribute phải kết thúc bằng một trong các ký tự: :values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => 'Trường :attribute là bắt buộc.', 'gt' => [ 'numeric' => ':attribute phải lớn hơn :value.', diff --git a/resources/lang/zh_CN/common.php b/resources/lang/zh_CN/common.php index 36fc63ca2..ea62f2b97 100644 --- a/resources/lang/zh_CN/common.php +++ b/resources/lang/zh_CN/common.php @@ -75,7 +75,7 @@ return [ 'status_active' => '已激活', 'status_inactive' => '未激活', 'never' => '从未', - 'none' => 'None', + 'none' => '无', // Header 'header_menu_expand' => '展开标头菜单', diff --git a/resources/lang/zh_CN/validation.php b/resources/lang/zh_CN/validation.php index 3398a1142..e38446e9f 100644 --- a/resources/lang/zh_CN/validation.php +++ b/resources/lang/zh_CN/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute 必须为:min到:max位数。', 'email' => ':attribute 必须是有效的电子邮件地址。', 'ends_with' => ' :attribute 必须以 :values 后缀结尾', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute 字段是必需的。', 'gt' => [ 'numeric' => ':attribute必须大于 :value.', diff --git a/resources/lang/zh_TW/validation.php b/resources/lang/zh_TW/validation.php index e93c182ee..2053674a6 100644 --- a/resources/lang/zh_TW/validation.php +++ b/resources/lang/zh_TW/validation.php @@ -32,6 +32,7 @@ return [ 'digits_between' => ':attribute 必須為 :min 到 :max 位數。', 'email' => ':attribute 必須是有效的電子郵件地址。', 'ends_with' => ':attribute必須以下列之一結尾::values', + 'file' => 'The :attribute must be provided as a valid file.', 'filled' => ':attribute 欄位必填。', 'gt' => [ 'numeric' => ':attribute 必須大於 :value。',