diff --git a/app/Http/Controllers/ImageController.php b/app/Http/Controllers/ImageController.php index 4bd1b479c..4d6f759b3 100644 --- a/app/Http/Controllers/ImageController.php +++ b/app/Http/Controllers/ImageController.php @@ -119,7 +119,7 @@ class ImageController extends Controller { $this->checkPermission('image-create-all'); $this->validate($request, [ - 'file' => 'is_image' + 'file' => 'image_extension|no_double_extension|mimes:jpeg,png,gif,bmp,webp,tiff' ]); if (!$this->imageRepo->isValidType($type)) { @@ -135,7 +135,6 @@ class ImageController extends Controller return response($e->getMessage(), 500); } - return response()->json($image); } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 6fa0f9a52..3ca59dcb3 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -8,6 +8,7 @@ use BookStack\Entities\Page; use BookStack\Settings\Setting; use BookStack\Settings\SettingService; use Illuminate\Database\Eloquent\Relations\Relation; +use Illuminate\Http\UploadedFile; use Illuminate\Support\ServiceProvider; use Schema; use Validator; @@ -22,11 +23,17 @@ class AppServiceProvider extends ServiceProvider public function boot() { // Custom validation methods - Validator::extend('is_image', function ($attribute, $value, $parameters, $validator) { - $imageMimes = ['image/png', 'image/bmp', 'image/gif', 'image/jpeg', 'image/jpg', 'image/tiff', 'image/webp']; - return in_array($value->getMimeType(), $imageMimes); + Validator::extend('image_extension', function ($attribute, $value, $parameters, $validator) { + $validImageExtensions = ['png', 'jpg', 'jpeg', 'bmp', 'gif', 'tiff', 'webp']; + return in_array(strtolower($value->getClientOriginalExtension()), $validImageExtensions); }); + Validator::extend('no_double_extension', function ($attribute, $value, $parameters, $validator) { + $uploadName = $value->getClientOriginalName(); + return substr_count($uploadName, '.') < 2; + }); + + // Custom blade view directives Blade::directive('icon', function ($expression) { return ""; diff --git a/app/Uploads/AttachmentService.php b/app/Uploads/AttachmentService.php index 7bafb6c0a..e613642c4 100644 --- a/app/Uploads/AttachmentService.php +++ b/app/Uploads/AttachmentService.php @@ -44,7 +44,7 @@ class AttachmentService extends UploadService public function saveNewUpload(UploadedFile $uploadedFile, $page_id) { $attachmentName = $uploadedFile->getClientOriginalName(); - $attachmentPath = $this->putFileInStorage($attachmentName, $uploadedFile); + $attachmentPath = $this->putFileInStorage($uploadedFile); $largestExistingOrder = Attachment::where('uploaded_to', '=', $page_id)->max('order'); $attachment = Attachment::forceCreate([ @@ -75,7 +75,7 @@ class AttachmentService extends UploadService } $attachmentName = $uploadedFile->getClientOriginalName(); - $attachmentPath = $this->putFileInStorage($attachmentName, $uploadedFile); + $attachmentPath = $this->putFileInStorage($uploadedFile); $attachment->name = $attachmentName; $attachment->path = $attachmentPath; @@ -174,19 +174,18 @@ class AttachmentService extends UploadService /** * Store a file in storage with the given filename - * @param $attachmentName * @param UploadedFile $uploadedFile * @return string * @throws FileUploadException */ - protected function putFileInStorage($attachmentName, UploadedFile $uploadedFile) + protected function putFileInStorage(UploadedFile $uploadedFile) { $attachmentData = file_get_contents($uploadedFile->getRealPath()); $storage = $this->getStorage(); $basePath = 'uploads/files/' . Date('Y-m-M') . '/'; - $uploadFileName = $attachmentName; + $uploadFileName = str_random(16) . '.' . $uploadedFile->getClientOriginalExtension(); while ($storage->exists($basePath . $uploadFileName)) { $uploadFileName = str_random(3) . $uploadFileName; } diff --git a/config/app.php b/config/app.php index 67f90b863..682462462 100755 --- a/config/app.php +++ b/config/app.php @@ -52,7 +52,7 @@ return [ 'locale' => env('APP_LANG', 'en'), // Locales available - 'locales' => ['en', 'ar', 'de', 'de_informal', 'es', 'es_AR', 'fr', 'nl', 'pt_BR', 'sk', 'sv', 'kr', 'ja', 'pl', 'it', 'ru', 'uk', 'zh_CN', 'zh_TW'], + 'locales' => ['en', 'ar', 'de', 'de_informal', 'es', 'es_AR', 'fr', 'nl', 'pt_BR', 'sk', 'cs', 'sv', 'kr', 'ja', 'pl', 'it', 'ru', 'uk', 'zh_CN', 'zh_TW'], // Application Fallback Locale 'fallback_locale' => 'en', diff --git a/readme.md b/readme.md index 037fbedb5..940deb04c 100644 --- a/readme.md +++ b/readme.md @@ -117,6 +117,15 @@ If you are looking to alter CSS or JavaScript content please edit the source fil The website which contains the project docs & Blog can be found in the [BookStackApp/website](https://github.com/BookStackApp/website) repo. +## Security + +Security information for administering a BookStack instance can be found on the [documentation site here](https://www.bookstackapp.com/docs/admin/security/). + +If you'd like to be notified of new potential security concerns you can [sign-up to the BookStack security mailing list](http://eepurl.com/glIh8z). + +If you would like to report a security concern in a more confidential manner than via a GitHub issue, You can directly email the lead maintainer [ssddanbrown](https://github.com/ssddanbrown). You will need to login to be able to see the email address on the [GitHub profile page](https://github.com/ssddanbrown). Alternatively you can send a DM via twitter to [@ssddanbrown](https://twitter.com/ssddanbrown). + + ## License The BookStack source is provided under the MIT License. diff --git a/resources/lang/cs/activities.php b/resources/lang/cs/activities.php new file mode 100644 index 000000000..23fce8108 --- /dev/null +++ b/resources/lang/cs/activities.php @@ -0,0 +1,48 @@ + 'vytvořená stránka', + 'page_create_notification' => 'Stránka byla úspěšně vytvořena', + 'page_update' => 'aktualizovaná stránka', + 'page_update_notification' => 'Stránka byla úspěšně aktualizována', + 'page_delete' => 'smazaná stránka', + 'page_delete_notification' => 'Stránka byla úspěšně smazána', + 'page_restore' => 'renovovaná stránka', + 'page_restore_notification' => 'Stránka byla úspěšně renovována', + 'page_move' => 'přesunutá stránka', + + // Chapters + 'chapter_create' => 'vytvořená kapitola', + 'chapter_create_notification' => 'Kapitola byla úspěšně vytvořena', + 'chapter_update' => 'aktualizovaná kapitola', + 'chapter_update_notification' => 'Kapitola byla úspěšně aktualizována', + 'chapter_delete' => 'smazaná kapitola', + 'chapter_delete_notification' => 'Kapitola byla úspěšně smazána', + 'chapter_move' => 'přesunutá kapitola', + + // Books + 'book_create' => 'vytvořená kniha', + 'book_create_notification' => 'Kniha byla úspěšně vytvořena', + 'book_update' => 'aktualizovaná kniha', + 'book_update_notification' => 'Kniha byla úspěšně aktualizována', + 'book_delete' => 'smazaná kniha', + 'book_delete_notification' => 'Kniha byla úspěšně smazána', + 'book_sort' => 'seřazená kniha', + 'book_sort_notification' => 'Kniha byla úspěšně seřazena', + + // Bookshelves + 'bookshelf_create' => 'vytvořená knihovna', + 'bookshelf_create_notification' => 'Knihovna úspěšně vytvořena', + 'bookshelf_update' => 'aktualizovaná knihovna', + 'bookshelf_update_notification' => 'Knihovna byla úspěšně aktualizována', + 'bookshelf_delete' => 'smazaná knihovna', + 'bookshelf_delete_notification' => 'Knihovna byla úspěšně smazána', + + // Other + 'commented_on' => 'okomentováno v', +]; diff --git a/resources/lang/cs/auth.php b/resources/lang/cs/auth.php new file mode 100644 index 000000000..69d6f0b97 --- /dev/null +++ b/resources/lang/cs/auth.php @@ -0,0 +1,65 @@ + 'Neplatné přihlašovací údaje.', + 'throttle' => 'Příliš pokusů o přihlášení. Zkuste to prosím znovu za :seconds sekund.', + + // Login & Register + 'sign_up' => 'Registrace', + 'log_in' => 'Přihlášení', + 'log_in_with' => 'Přihlásit přes :socialDriver', + 'sign_up_with' => 'Registrovat se přes :socialDriver', + 'logout' => 'Odhlásit', + + 'name' => 'Jméno', + 'username' => 'Jméno účtu', + 'email' => 'Email', + 'password' => 'Heslo', + 'password_confirm' => 'Potvrdit heslo', + 'password_hint' => 'Musí mít víc než 5 znaků', + 'forgot_password' => 'Zapomněli jste heslo?', + 'remember_me' => 'Neodhlašovat', + 'ldap_email_hint' => 'Zadejte email, který chcete přiřadit k tomuto účtu.', + 'create_account' => 'Vytvořit účet', + 'social_login' => 'Přihlášení přes sociální sítě', + 'social_registration' => 'Registrace přes sociální sítě', + 'social_registration_text' => 'Registrovat a přihlásit se přes jinou službu', + + 'register_thanks' => 'Díky za registraci!', + 'register_confirm' => 'Zkontrolujte prosím váš email a klikněte na potvrzovací tlačítko pro dokončení registrace do :appName.', + 'registrations_disabled' => 'Registrace jsou momentálně pozastaveny', + 'registration_email_domain_invalid' => 'Registrace z této emailové domény nejsou povoleny.', + 'register_success' => 'Díky za registraci! Jste registrovaní a přihlášení.', + + + // Password Reset + 'reset_password' => 'Resetovat heslo', + 'reset_password_send_instructions' => 'Zadejte vaší emailovou adresu a bude vám zaslán odkaz na resetování hesla.', + 'reset_password_send_button' => 'Poslat odkaz pro reset hesla', + 'reset_password_sent_success' => 'Odkaz na resetování hesla vám byl zaslán na :email.', + 'reset_password_success' => 'Vaše heslo bylo úspěšně resetováno.', + 'email_reset_subject' => 'Reset hesla do :appName', + 'email_reset_text' => 'Tento email jste obdrželi, protože jsme dostali žádost o resetování vašeho hesla k účtu v :appName.', + 'email_reset_not_requested' => 'Pokud jste o reset vašeho hesla nežádali, prostě tento dopis smažte a je to.', + + + // Email Confirmation + 'email_confirm_subject' => 'Potvrďte vaši emailovou adresu pro :appName', + 'email_confirm_greeting' => 'Díky že jste se přidali do :appName!', + 'email_confirm_text' => 'Prosíme potvrďte funkčnost vaší emailové adresy kliknutím na tlačítko níže:', + 'email_confirm_action' => 'Potvrdit emailovou adresu', + 'email_confirm_send_error' => 'Potvrzení emailové adresy je vyžadováno, ale systém vám nedokázal odeslat email. Kontaktujte správce aby to dal do kupy a potvrzovací email vám dorazil.', + 'email_confirm_success' => 'Vaše emailová adresa byla potvrzena!', + 'email_confirm_resent' => 'Email s žádostí o potvrzení vaší emailové adresy byl odeslán. Podívejte se do příchozí pošty.', + + 'email_not_confirmed' => 'Emailová adresa nebyla potvrzena', + 'email_not_confirmed_text' => 'Vaše emailová adresa nebyla dosud potvrzena.', + 'email_not_confirmed_click_link' => 'Klikněte na odkaz v emailu který jsme vám zaslali ihned po registraci.', + 'email_not_confirmed_resend' => 'Pokud nemůžete nalézt email v příchozí poště, můžete si jej nechat poslat znovu pomocí formuláře níže.', + 'email_not_confirmed_resend_button' => 'Znovu poslat email pro potvrzení emailové adresy', +]; \ No newline at end of file diff --git a/resources/lang/cs/common.php b/resources/lang/cs/common.php new file mode 100644 index 000000000..b06e587d6 --- /dev/null +++ b/resources/lang/cs/common.php @@ -0,0 +1,59 @@ + 'Storno', + 'confirm' => 'Potvrdit', + 'back' => 'Zpět', + 'save' => 'Uložit', + 'continue' => 'Pokračovat', + 'select' => 'Zvolit', + 'more' => 'Více', + + // Form Labels + 'name' => 'Jméno', + 'description' => 'Popis', + 'role' => 'Role', + 'cover_image' => 'Obrázek na přebal', + 'cover_image_description' => 'Obrázek by měl být asi 440 × 250px.', + + // Actions + 'actions' => 'Akce', + 'view' => 'Pohled', + 'create' => 'Vytvořit', + 'update' => 'Aktualizovat', + 'edit' => 'Upravit', + 'sort' => 'Řadit', + 'move' => 'Přesunout', + 'copy' => 'Kopírovat', + 'reply' => 'Odpovědět', + 'delete' => 'Smazat', + 'search' => 'Hledat', + 'search_clear' => 'Vyčistit hledání', + 'reset' => 'Reset', + 'remove' => 'Odstranit', + 'add' => 'Přidat', + + // Misc + 'deleted_user' => 'Smazaný uživatel', + 'no_activity' => 'Žádná aktivita k zobrazení', + 'no_items' => 'Žádné položky nejsou k mání', + 'back_to_top' => 'Zpět na začátek', + 'toggle_details' => 'Ukázat detaily', + 'toggle_thumbnails' => 'Ukázat náhledy', + 'details' => 'Detaily', + 'grid_view' => 'Zobrazit dlaždice', + 'list_view' => 'Zobrazit seznam', + 'default' => 'Výchozí', + + // Header + 'view_profile' => 'Ukázat profil', + 'edit_profile' => 'Upravit profil', + + // Email Content + 'email_action_help' => 'Pokud se vám nedaří kliknout na tlačítko ":actionText", zkopírujte odkaz níže přímo do webového prohlížeče:', + 'email_rights' => 'Všechna práva vyhrazena', +]; \ No newline at end of file diff --git a/resources/lang/cs/components.php b/resources/lang/cs/components.php new file mode 100644 index 000000000..a62914f1b --- /dev/null +++ b/resources/lang/cs/components.php @@ -0,0 +1,33 @@ + 'Volba obrázku', + 'image_all' => 'Vše', + 'image_all_title' => 'Zobrazit všechny obrázky', + 'image_book_title' => 'Zobrazit obrázky nahrané k této knize', + 'image_page_title' => 'Zobrazit obrázky nahrané k této stránce', + 'image_search_hint' => 'Hledat podle názvu obrázku', + 'image_uploaded' => 'Nahráno :uploadedDate', + 'image_load_more' => 'Načíst další', + 'image_image_name' => 'Název obrázku', + 'image_delete_used' => 'Tento obrázek je použit v následujících stránkách.', + 'image_delete_confirm' => 'Stisknětě smazat ještě jednou pro potvrzení smazání tohoto obrázku.', + 'image_select_image' => 'Zvolte obrázek', + 'image_dropzone' => 'Přetáhněte sem obrázky myší nebo sem klikněte pro vybrání souboru.', + 'images_deleted' => 'Obrázky smazány', + 'image_preview' => 'Náhled obrázku', + 'image_upload_success' => 'Obrázek byl úspěšně nahrán', + 'image_update_success' => 'Podrobnosti o obrázku byly úspěšně aktualizovány', + 'image_delete_success' => 'Obrázek byl úspěšně smazán', + 'image_upload_remove' => 'Odstranit', + + // Code Editor + 'code_editor' => 'Upravit kód', + 'code_language' => 'Jazyk kódu', + 'code_content' => 'Obsah kódu', + 'code_save' => 'Uložit kód', +]; diff --git a/resources/lang/cs/entities.php b/resources/lang/cs/entities.php new file mode 100644 index 000000000..dbf34850f --- /dev/null +++ b/resources/lang/cs/entities.php @@ -0,0 +1,294 @@ + 'Nedávno vytvořené', + 'recently_created_pages' => 'Nedávno vytvořené stránky', + 'recently_updated_pages' => 'Nedávno aktualizované stránky', + 'recently_created_chapters' => 'Nedávno vytvořené kapitoly', + 'recently_created_books' => 'Nedávno vytvořené knihy', + 'recently_update' => 'Nedávno aktualizované', + 'recently_viewed' => 'Nedávno prohlížené', + 'recent_activity' => 'Nedávné činnosti', + 'create_now' => 'Vytvořte jí', + 'revisions' => 'Revize', + 'meta_revision' => 'Revize #:revisionCount', + 'meta_created' => 'Vytvořeno :timeLength', + 'meta_created_name' => 'Vytvořeno :timeLength uživatelem :user', + 'meta_updated' => 'Aktualizováno :timeLength', + 'meta_updated_name' => 'Aktualizováno :timeLength uživatelem :user', + 'entity_select' => 'Volba prvku', + 'images' => 'Obrázky', + 'my_recent_drafts' => 'Mé nedávné koncepty', + 'my_recently_viewed' => 'Naposledy navštívené', + 'no_pages_viewed' => 'Zatím jste nic neshlédli', + 'no_pages_recently_created' => 'Zatím nebyly vytvořeny žádné stránky', + 'no_pages_recently_updated' => 'Zatím nebyly aktualizovány žádné stránky', + 'export' => 'Export', + 'export_html' => 'Všeobjímající HTML', + 'export_pdf' => 'PDF dokument', + 'export_text' => 'Čistý text (txt)', + + // Permissions and restrictions + 'permissions' => 'Práva', + 'permissions_intro' => 'Zaškrtnutím překryjete práva v uživatelských rolích nastavením níže.', + 'permissions_enable' => 'Zapnout vlastní práva', + 'permissions_save' => 'Uložit práva', + + // Search + 'search_results' => 'Výsledky hledání', + 'search_total_results_found' => 'Nalezen :count výsledek|Nalezeny :count výsledky|Nalezeny :count výsledky|Nalezeny :count výsledky|Nalezeno :count výsledků', + 'search_clear' => 'Vyčistit hledání', + 'search_no_pages' => 'Žádná stránka neodpovídá hledanému výrazu', + 'search_for_term' => 'Hledat :term', + 'search_more' => 'Další výsledky', + 'search_filters' => 'Filtry hledání', + 'search_content_type' => 'Typ obsahu', + 'search_exact_matches' => 'Musí obsahovat', + 'search_tags' => 'Hledat štítky (tagy)', + 'search_options' => 'Volby', + 'search_viewed_by_me' => 'Shlédnuto mnou', + 'search_not_viewed_by_me' => 'Neshlédnuto mnou', + 'search_permissions_set' => 'Sada práv', + 'search_created_by_me' => 'Vytvořeno mnou', + 'search_updated_by_me' => 'Aktualizováno', + 'search_date_options' => 'Volby datumu', + 'search_updated_before' => 'Aktualizováno před', + 'search_updated_after' => 'Aktualizováno po', + 'search_created_before' => 'Vytvořeno před', + 'search_created_after' => 'Vytvořeno po', + 'search_set_date' => 'Datum', + 'search_update' => 'Hledat znovu', + + // Shelves + 'shelf' => 'Knihovna', + 'shelves' => 'Knihovny', + 'shelves_long' => 'Knihovny', + 'shelves_empty' => 'Žádné knihovny nebyly vytvořeny', + 'shelves_create' => 'Vytvořit novou knihovnu', + 'shelves_popular' => 'Populární knihovny', + 'shelves_new' => 'Nové knihovny', + 'shelves_popular_empty' => 'Nejpopulárnější knihovny se objeví zde.', + 'shelves_new_empty' => 'Nejnovější knihovny se objeví zde.', + 'shelves_save' => 'Uložit knihovnu', + 'shelves_books' => 'Knihy v této knihovně', + 'shelves_add_books' => 'Přidat knihy do knihovny', + 'shelves_drag_books' => 'Knihu přidáte jejím přetažením sem.', + 'shelves_empty_contents' => 'Tato knihovna neobsahuje žádné knihy', + 'shelves_edit_and_assign' => 'Pro přidáni knih do knihovny stiskněte úprvy.', + 'shelves_edit_named' => 'Upravit knihovnu :name', + 'shelves_edit' => 'Upravit knihovnu', + 'shelves_delete' => 'Smazat knihovnu', + 'shelves_delete_named' => 'Smazat knihovnu :name', + 'shelves_delete_explain' => "Chystáte se smazat knihovnu ':name'. Knihy v ní obsažené zůstanou zachovány.", + 'shelves_delete_confirmation' => 'Opravdu chcete smazat tuto knihovnu?', + 'shelves_permissions' => 'Práva knihovny', + 'shelves_permissions_updated' => 'Práva knihovny byla aktualizována', + 'shelves_permissions_active' => 'Účinná práva knihovny', + 'shelves_copy_permissions_to_books' => 'Přenést práva na knihy', + 'shelves_copy_permissions' => 'Zkopírovat práva', + 'shelves_copy_permissions_explain' => 'Práva knihovny budou aplikována na všechny knihy v ní obsažené. Před použitím se ujistěte, že jste uložili změny práv knihovny.', + 'shelves_copy_permission_success' => 'Práva knihovny přenesena na knihy (celkem :count)', + + // Books + 'book' => 'Kniha', + 'books' => 'Knihy', + 'x_books' => ':count Kniha|:count Knihy|:count Knihy|:count Knihy|:count Knih', + 'books_empty' => 'Žádné knihy nebyly vytvořeny', + 'books_popular' => 'Populární knihy', + 'books_recent' => 'Nedávné knihy', + 'books_new' => 'Nové knihy', + 'books_popular_empty' => 'Zde budou zobrazeny nejpopulárnější knihy.', + 'books_new_empty' => 'Zde budou zobrazeny nově vytvořené knihy.', + 'books_create' => 'Vytvořit novou knihu', + 'books_delete' => 'Smazat knihu', + 'books_delete_named' => 'Smazat knihu :bookName', + 'books_delete_explain' => 'Kniha \':bookName\' bude smazána. Všechny její stránky a kapitoly budou taktéž smazány.', + 'books_delete_confirmation' => 'Opravdu chcete tuto knihu smazat.', + 'books_edit' => 'Upravit knihu', + 'books_edit_named' => 'Upravit knihu :bookName', + 'books_form_book_name' => 'Název knihy', + 'books_save' => 'Uložit knihu', + 'books_permissions' => 'Práva knihy', + 'books_permissions_updated' => 'Práva knihy upravena', + 'books_empty_contents' => 'V této knize nebyly vytvořeny žádné stránky ani kapitoly.', + 'books_empty_create_page' => 'Vytvořit novou stránku', + 'books_empty_or' => 'nebo', + 'books_empty_sort_current_book' => 'Seřadit tuto knihu', + 'books_empty_add_chapter' => 'Přidat kapitolu', + 'books_permissions_active' => 'Účinná práva knihy', + 'books_search_this' => 'Prohledat tuto knihu', + 'books_navigation' => 'Obsah knihy', + 'books_sort' => 'Seřadit obsah knihy', + 'books_sort_named' => 'Seřadit knihu :bookName', + 'books_sort_show_other' => 'Ukázat ostatní knihy', + 'books_sort_save' => 'Uložit nové pořadí', + + // Chapters + 'chapter' => 'Kapitola', + 'chapters' => 'Kapitoly', + 'x_chapters' => ':count kapitola|:count kapitoly|:count kapitoly|:count kapitoly|:count kapitol', + 'chapters_popular' => 'Populární kapitoly', + 'chapters_new' => 'Nová kapitola', + 'chapters_create' => 'Vytvořit novou kapitolu', + 'chapters_delete' => 'Smazat kapitolu', + 'chapters_delete_named' => 'Smazat kapitolu :chapterName', + 'chapters_delete_explain' => 'Kapitola \':chapterName\' bude smazána. Všechny stránky v ní obsažené budou přesunuty přímo pod samotnou knihu.', + 'chapters_delete_confirm' => 'Opravdu chcete tuto kapitolu smazat?', + 'chapters_edit' => 'Upravit kapitolu', + 'chapters_edit_named' => 'Upravit kapitolu :chapterName', + 'chapters_save' => 'Uložit kapitolu', + 'chapters_move' => 'Přesunout kapitolu', + 'chapters_move_named' => 'Přesunout kapitolu :chapterName', + 'chapter_move_success' => 'Kapitola přesunuta do knihy :bookName', + 'chapters_permissions' => 'Práva kapitoly', + 'chapters_empty' => 'Tato kapitola neobsahuje žádné stránky', + 'chapters_permissions_active' => 'Účinná práva kapitoly', + 'chapters_permissions_success' => 'Práva kapitoly aktualizována', + 'chapters_search_this' => 'Prohledat tuto kapitolu', + + // Pages + 'page' => 'Stránka', + 'pages' => 'Stránky', + 'x_pages' => ':count strana|:count strany|:count strany|:count strany|:count stran', + 'pages_popular' => 'Populární stránky', + 'pages_new' => 'Nová stránka', + 'pages_attachments' => 'Přílohy', + 'pages_navigation' => 'Obsah stránky', + 'pages_delete' => 'Smazat stránku', + 'pages_delete_named' => 'Smazat stránku :pageName', + 'pages_delete_draft_named' => 'Smazat koncept stránky :pageName', + 'pages_delete_draft' => 'Smazat koncept stránky', + 'pages_delete_success' => 'Stránka smazána', + 'pages_delete_draft_success' => 'Koncept stránky smazán', + 'pages_delete_confirm' => 'Opravdu chcete tuto stránku smazat?', + 'pages_delete_draft_confirm' => 'Opravdu chcete tento koncept stránky smazat?', + 'pages_editing_named' => 'Úpravy stránky :pageName', + 'pages_edit_toggle_header' => 'Ukázat hlavičku', + 'pages_edit_save_draft' => 'Uložit koncept', + 'pages_edit_draft' => 'Upravit koncept stránky', + 'pages_editing_draft' => 'Úpravy konceptu', + 'pages_editing_page' => 'Úpravy stránky', + 'pages_edit_draft_save_at' => 'Koncept uložen v ', + 'pages_edit_delete_draft' => 'Smazat koncept', + 'pages_edit_discard_draft' => 'Zahodit koncept', + 'pages_edit_set_changelog' => 'Zadat komentář ke změnám', + 'pages_edit_enter_changelog_desc' => 'Zadejte stručný popis změn, které jste provedli.', + 'pages_edit_enter_changelog' => 'Vložit komentáře ke změnám', + 'pages_save' => 'Uložit stránku', + 'pages_title' => 'Nadpis stránky', + 'pages_name' => 'Název stránky', + 'pages_md_editor' => 'Editor', + 'pages_md_preview' => 'Náhled', + 'pages_md_insert_image' => 'Vložit obrázek', + 'pages_md_insert_link' => 'Vložit odkaz na prvek', + 'pages_md_insert_drawing' => 'Vložit kresbu', + 'pages_not_in_chapter' => 'Stránka není součástí žádné kapitoly', + 'pages_move' => 'Přesunout stránku', + 'pages_move_success' => 'Stránka přesunuta do ":parentName"', + 'pages_copy' => 'Kopírovat stránku', + 'pages_copy_desination' => 'Cíl kopírování', + 'pages_copy_success' => 'Stránka byla úspěšně zkopírována', + 'pages_permissions' => 'Práva stránky', + 'pages_permissions_success' => 'Práva stránky aktualizována', + 'pages_revision' => 'Revize', + 'pages_revisions' => 'Revize stránky', + 'pages_revisions_named' => 'Revize stránky :pageName', + 'pages_revision_named' => 'Revize stránky :pageName', + 'pages_revisions_created_by' => 'Vytvořeno uživatelem', + 'pages_revisions_date' => 'Datum revize', + 'pages_revisions_number' => '#', + 'pages_revisions_changelog' => 'Komentáře změn', + 'pages_revisions_changes' => 'Změny', + 'pages_revisions_current' => 'Aktuální verze', + 'pages_revisions_preview' => 'Náhled', + 'pages_revisions_restore' => 'Renovovat', + 'pages_revisions_none' => 'Tato stránka nemá žádné revize', + 'pages_copy_link' => 'Zkopírovat odkaz', + 'pages_edit_content_link' => 'Upravit obsah', + 'pages_permissions_active' => 'Účinná práva stránky', + 'pages_initial_revision' => 'První vydání', + 'pages_initial_name' => 'Nová stránka', + 'pages_editing_draft_notification' => 'Právě upravujete koncept, který byl uložen před :timeDiff.', + 'pages_draft_edited_notification' => 'Tato stránka se od té doby změnila. Je doporučeno aktuální koncept zahodit.', + 'pages_draft_edit_active' => [ + 'start_a' => 'Uživatelé začali upravovat tuto stránku (celkem :count)', + 'start_b' => 'Uživatel :userName začal upravovat tuto stránku', + 'time_a' => 'od doby, kdy byla tato stránky naposledy aktualizována', + 'time_b' => 'v posledních minutách (:minCount min.)', + 'message' => ':start :time. Dávejte pozor abyste nepřepsali změny ostatním!', + ], + 'pages_draft_discarded' => 'Koncept zahozen. Editor nyní obsahuje aktuální verzi stránky.', + 'pages_specific' => 'Konkrétní stránka', + + // Editor Sidebar + 'page_tags' => 'Štítky stránky', + 'chapter_tags' => 'Štítky kapitoly', + 'book_tags' => 'Štítky knihy', + 'shelf_tags' => 'Štítky knihovny', + 'tag' => 'Štítek', + 'tags' => 'Štítky', + 'tag_value' => 'Hodnota Štítku (volitelné)', + 'tags_explain' => "Přidejte si štítky pro lepší kategorizaci knih. \n Štítky mohou nést i hodnotu pro detailnější klasifikaci.", + 'tags_add' => 'Přidat další štítek', + 'attachments' => 'Přílohy', + 'attachments_explain' => 'Nahrajte soubory nebo připojte odkazy, které se zobrazí na stránce. Budou k nalezení v postranní liště.', + 'attachments_explain_instant_save' => 'Změny zde provedené se okamžitě ukládají.', + 'attachments_items' => 'Připojené položky', + 'attachments_upload' => 'Nahrát soubor', + 'attachments_link' => 'Připojit odkaz', + 'attachments_set_link' => 'Nastavit odkaz', + 'attachments_delete_confirm' => 'Stiskněte smazat znovu pro potvrzení smazání.', + 'attachments_dropzone' => 'Přetáhněte sem soubory myší nebo sem kliknětě pro vybrání souboru.', + 'attachments_no_files' => 'Žádné soubory nebyli nahrány', + 'attachments_explain_link' => 'Můžete pouze připojit odkaz pokud nechcete nahrávat soubor přímo. Může to být odkaz na jinou stránku nebo na soubor v cloudu.', + 'attachments_link_name' => 'Název odkazu', + 'attachment_link' => 'Odkaz na přílohu', + 'attachments_link_url' => 'Odkaz na soubor', + 'attachments_link_url_hint' => 'URL stránky nebo souboru', + 'attach' => 'Připojit', + 'attachments_edit_file' => 'Upravit soubor', + 'attachments_edit_file_name' => 'Název souboru', + 'attachments_edit_drop_upload' => 'Přetáhněte sem soubor myší nebo klikněte pro nahrání nového a následné přepsání starého.', + 'attachments_order_updated' => 'Pořadí příloh aktualizováno', + 'attachments_updated_success' => 'Podrobnosti příloh aktualizovány', + 'attachments_deleted' => 'Příloha byla smazána', + 'attachments_file_uploaded' => 'Soubor byl úspěšně nahrán', + 'attachments_file_updated' => 'Soubor byl úspěšně aktualizován', + 'attachments_link_attached' => 'Odkaz úspěšně přiložen ke stránce', + + // Profile View + 'profile_user_for_x' => 'Uživatelem již :time', + 'profile_created_content' => 'Vytvořený obsah', + 'profile_not_created_pages' => ':userName nevytvořil/a žádný obsah', + 'profile_not_created_chapters' => ':userName nevytvořil/a žádné kapitoly', + 'profile_not_created_books' => ':userName nevytvořil/a žádné knihy', + + // Comments + 'comment' => 'Komentář', + 'comments' => 'Komentáře', + 'comment_add' => 'Přidat komentář', + 'comment_placeholder' => 'Zanechat komentář zde', + 'comment_count' => '{0} Bez komentářů|{1} 1 komentář|[2,4] :count komentáře|[5,*] :count komentářů', + 'comment_save' => 'Uložit komentář', + 'comment_saving' => 'Ukládání komentáře...', + 'comment_deleting' => 'Mazání komentáře...', + 'comment_new' => 'Nový komentář', + 'comment_created' => 'komentováno :createDiff', + 'comment_updated' => 'Aktualizováno :updateDiff uživatelem :username', + 'comment_deleted_success' => 'Komentář smazán', + 'comment_created_success' => 'Komentář přidán', + 'comment_updated_success' => 'Komentář aktualizován', + 'comment_delete_confirm' => 'Opravdu chcete smazat tento komentář?', + 'comment_in_reply_to' => 'Odpověď na :commentId', + + // Revision + 'revision_delete_confirm' => 'Opravdu chcete smazat tuto revizi?', + 'revision_delete_success' => 'Revize smazána', + 'revision_cannot_delete_latest' => 'Nelze smazat poslední revizi.' + +]; \ No newline at end of file diff --git a/resources/lang/cs/errors.php b/resources/lang/cs/errors.php new file mode 100644 index 000000000..bd9c62bc1 --- /dev/null +++ b/resources/lang/cs/errors.php @@ -0,0 +1,84 @@ + 'Nemáte povolení přistupovat na dotazovanou stránku.', + 'permissionJson' => 'Nemáte povolení k provedení požadované akce.', + + // Auth + 'error_user_exists_different_creds' => 'Uživatel s emailem :email již existuje ale s jinými přihlašovacími údaji.', + 'email_already_confirmed' => 'Emailová adresa již byla potvrzena. Zkuste se přihlásit.', + 'email_confirmation_invalid' => 'Tento potvrzovací odkaz již neplatí nebo už byl použit. Zkuste prosím registraci znovu.', + 'email_confirmation_expired' => 'Potvrzovací odkaz už neplatí, email s novým odkazem už byl poslán.', + 'ldap_fail_anonymous' => 'Přístup k adresáři LDAP jako anonymní uživatel (anonymous bind) selhal', + 'ldap_fail_authed' => 'Přístup k adresáři LDAP pomocí zadaného jména (dn) a hesla selhal', + 'ldap_extension_not_installed' => 'Není nainstalováno rozšíření LDAP pro PHP', + 'ldap_cannot_connect' => 'Nelze se připojit k adresáři LDAP. Prvotní připojení selhalo.', + 'social_no_action_defined' => 'Nebyla zvolena žádá akce', + 'social_login_bad_response' => "Nastala chyba během přihlašování přes :socialAccount \n:error", + 'social_account_in_use' => 'Tento účet na :socialAccount se již používá. Pokuste se s ním přihlásit volbou Přihlásit přes :socialAccount.', + 'social_account_email_in_use' => 'Emailová adresa :email se již používá. Pokud máte již máte náš účet, můžete si jej propojit se svým účtem na :socialAccount v nastavení vašeho profilu.', + 'social_account_existing' => 'Tento účet na :socialAccount je již propojen s vaším profilem zde.', + 'social_account_already_used_existing' => 'Tento účet na :socialAccount je již používán jiným uživatelem.', + 'social_account_not_used' => 'Tento účet na :socialAccount není spřažen s žádným uživatelem. Prosím přiřaďtě si jej v nastavení svého profilu.', + 'social_account_register_instructions' => 'Pokud ještě nemáte náš účet, můžete se zaregistrovat pomocí vašeho účtu na :socialAccount.', + 'social_driver_not_found' => 'Doplněk pro tohoto správce identity nebyl nalezen.', + 'social_driver_not_configured' => 'Nastavení vašeho účtu na :socialAccount není správné. :socialAccount musí mít vaše svolení pro naší aplikaci vás přihlásit.', + + // System + 'path_not_writable' => 'Nelze zapisovat na cestu k souboru :filePath. Zajistěte aby se dalo nahrávat na server.', + 'cannot_get_image_from_url' => 'Nelze získat obrázek z adresy :url', + 'cannot_create_thumbs' => 'Server nedokáže udělat náhledy. Zkontrolujte, že rozšíření GD pro PHP je nainstalováno.', + 'server_upload_limit' => 'Server nepovoluje nahrávat tak veliké soubory. Zkuste prosím menší soubor.', + 'uploaded' => 'Server nepovoluje nahrávat tak veliké soubory. Zkuste prosím menší soubor.', //TODO to je nějaký podezřelý + 'image_upload_error' => 'Nastala chyba během nahrávání souboru', + 'image_upload_type_error' => 'Typ nahrávaného obrázku je neplatný.', + 'file_upload_timeout' => 'Nahrávání souboru trvalo příliš dlouho a tak bylo ukončeno.', + + // Attachments + 'attachment_page_mismatch' => 'Došlo ke zmatení stránky během nahrávání přílohy.', + 'attachment_not_found' => 'Příloha nenalezena', + + // Pages + 'page_draft_autosave_fail' => 'Nepovedlo se uložit koncept. Než stránku uložíte, ujistěte se, že jste připojeni k internetu.', + 'page_custom_home_deletion' => 'Nelze smazat tuto stránku, protože je nastavena jako uvítací stránka.', + + // Entities + 'entity_not_found' => 'Prvek nenalezen', + 'bookshelf_not_found' => 'Knihovna nenalezena', + 'book_not_found' => 'Kniha nenalezena', + 'page_not_found' => 'Stránka nenalezena', + 'chapter_not_found' => 'Kapitola nenalezena', + 'selected_book_not_found' => 'Vybraná kniha nebyla nalezena', + 'selected_book_chapter_not_found' => 'Zvolená kniha nebo kapitola nebyla nalezena', + 'guests_cannot_save_drafts' => 'Návštěvníci z řad veřejnosti nemohou ukládat koncepty.', + + // Users + 'users_cannot_delete_only_admin' => 'Nemůžete smazat posledního administrátora', + 'users_cannot_delete_guest' => 'Uživatele host není možno smazat', + + // Roles + 'role_cannot_be_edited' => 'Tuto roli nelze editovat', + 'role_system_cannot_be_deleted' => 'Toto je systémová role a nelze jí smazat.', + 'role_registration_default_cannot_delete' => 'Tuto roli nelze smazat dokud je nastavená jako výchozí role pro registraci nových uživatelů.', + 'role_cannot_remove_only_admin' => 'Tento uživatel má roli administrátora. Přiřaďte roli administrátora někomu jinému než jí odeberete zde.', + + // Comments + 'comment_list' => 'Při dotahování komentářů nastala chyba.', + 'cannot_add_comment_to_draft' => 'Nemůžete přidávat komentáře ke konceptu.', + 'comment_add' => 'Při přidávání / aktualizaci komentáře nastala chyba.', + 'comment_delete' => 'Při mazání komentáře nastala chyba.', + 'empty_comment' => 'Nemůžete přidat prázdný komentář.', //This has a deep thinking value + + // Error pages + '404_page_not_found' => 'Stránka nenalezena', + 'sorry_page_not_found' => 'Omlouváme se, ale stránka, kterou hledáte nebyla nalezena.', + 'return_home' => 'Návrat domů', + 'error_occurred' => 'Nastala chyba', + 'app_down' => ':appName je momentálně vypnutá', + 'back_soon' => 'Brzy naběhne.', + +]; diff --git a/resources/lang/cs/pagination.php b/resources/lang/cs/pagination.php new file mode 100644 index 000000000..de9821522 --- /dev/null +++ b/resources/lang/cs/pagination.php @@ -0,0 +1,12 @@ + '« Pedchoz', + 'next' => 'Dal »', + +]; diff --git a/resources/lang/cs/passwords.php b/resources/lang/cs/passwords.php new file mode 100644 index 000000000..020016330 --- /dev/null +++ b/resources/lang/cs/passwords.php @@ -0,0 +1,15 @@ + 'Heslo musí být alespoň 6 znaků dlouhé a shodovat se v obou polích.', + 'user' => "Nemůžeme najít uživatele se zadanou emailovou adresou.", + 'token' => 'Tento odkaz pro reset hesla je neplatný.', + 'sent' => 'Poslali jsme vám odkaz pro reset hesla!', + 'reset' => 'Vaše heslo bylo resetováno!', + +]; diff --git a/resources/lang/cs/settings.php b/resources/lang/cs/settings.php new file mode 100644 index 000000000..1881dffae --- /dev/null +++ b/resources/lang/cs/settings.php @@ -0,0 +1,117 @@ + 'Nastavení', + 'settings_save' => 'Uložit nastavení', + 'settings_save_success' => 'Nastavení bylo uloženo', + + // App Settings + 'app_settings' => 'Nastavení aplikace', + 'app_name' => 'Název aplikace', + 'app_name_desc' => 'Název se bude zobrazovat v záhlaví této aplikace a v odesílaných emailech.', + 'app_name_header' => 'Zobrazovát název aplikace v záhlaví?', + 'app_public_viewing' => 'Povolit prohlížení veřejností?', + 'app_secure_images' => 'Nahrávat obrázky neveřejně a zabezpečeně?', + 'app_secure_images_desc' => 'Z výkonnostních důvodů jsou všechny obrázky veřejné. Tato volba přidá do adresy obrázku náhodné číslo, aby nikdo neodhadnul adresu obrázku. Zajistěte ať adresáře nikomu nezobrazují seznam souborů.', + 'app_editor' => 'Editor stránek', + 'app_editor_desc' => 'Zvolte který editor budou užívat všichni uživatelé k úpravě stránek.', + 'app_custom_html' => 'Vlastní HTML kód pro sekci hlavičky (
).', + '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_logo' => 'Logo aplikace', + 'app_logo_desc' => 'Obrázek by měl mít 43 pixelů na výšku.