From 0bd12cf0e61bfc40000cd0f7dd5fce88cd966da4 Mon Sep 17 00:00:00 2001 From: Oscar Arzola Date: Tue, 30 May 2017 16:49:35 -0500 Subject: [PATCH 01/25] Added Extensibility to ReportWidgets --- modules/backend/classes/WidgetManager.php | 21 +++++++++++- .../backend/classes/WidgetManagerTest.php | 32 +++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/modules/backend/classes/WidgetManager.php b/modules/backend/classes/WidgetManager.php index 5027b2009..41243304f 100644 --- a/modules/backend/classes/WidgetManager.php +++ b/modules/backend/classes/WidgetManager.php @@ -2,6 +2,7 @@ use Str; use System\Classes\PluginManager; +use Event; /** * Widget manager @@ -188,6 +189,11 @@ class WidgetManager } } + /* + * Extensibility + */ + Event::fire('system.reportwidgets.extendItems', [$this]); + return $this->reportWidgets; } @@ -215,4 +221,17 @@ class WidgetManager { $this->reportWidgetCallbacks[] = $definitions; } -} + + /** + * Removes a single report widget item + */ + public function removeReportWidgetItem($className) + { + if (!$this->reportWidgets) { + throw new SystemException('Unable to remove a widget before widgets are loaded.'); + } + + unset($this->reportWidgets[$className]); + } + +} \ No newline at end of file diff --git a/tests/unit/backend/classes/WidgetManagerTest.php b/tests/unit/backend/classes/WidgetManagerTest.php index 83c0d334e..abdf0061f 100644 --- a/tests/unit/backend/classes/WidgetManagerTest.php +++ b/tests/unit/backend/classes/WidgetManagerTest.php @@ -13,4 +13,36 @@ class WidgetManagerTest extends TestCase $this->assertArrayHasKey('TestVendor\Test\FormWidgets\Sample', $widgets); $this->assertArrayHasKey('October\Tester\FormWidgets\Preview', $widgets); } + + public function testIfWidgetsCanBeExtended() + { + $manager = WidgetManager::instance(); + $manager->registerReportWidget('Acme\Fake\ReportWidget\HelloWorld', [ + 'name' => 'Hello World Test', + 'context' => 'dashboard' + ]); + $widgets = $manager->listReportWidgets(); + + $this->assertArrayHasKey('Acme\Fake\ReportWidget\HelloWorld', $widgets); + } + + public function testIfWidgetsCanBeRemoved() + { + $manager = WidgetManager::instance(); + $manager->registerReportWidget('Acme\Fake\ReportWidget\HelloWorld', [ + 'name' => 'Hello World Test', + 'context' => 'dashboard' + ]); + $manager->registerReportWidget('Acme\Fake\ReportWidget\ByeWorld', [ + 'name' => 'Hello World Bye', + 'context' => 'dashboard' + ]); + + $manager->removeReportWidgetItem('Acme\Fake\ReportWidget\ByeWorld'); + + $widgets = $manager->listReportWidgets(); + + $this->assertCount(1, $widgets); + } + } From a7d20211ae1e889ed60c367265967cadecd30a93 Mon Sep 17 00:00:00 2001 From: Oscar Arzola Date: Fri, 2 Jun 2017 09:51:13 -0500 Subject: [PATCH 02/25] Fixed Formatting and added docblock --- modules/backend/classes/WidgetManager.php | 8 +++++--- tests/unit/backend/classes/WidgetManagerTest.php | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/modules/backend/classes/WidgetManager.php b/modules/backend/classes/WidgetManager.php index 41243304f..6dad9e913 100644 --- a/modules/backend/classes/WidgetManager.php +++ b/modules/backend/classes/WidgetManager.php @@ -223,9 +223,11 @@ class WidgetManager } /** - * Removes a single report widget item + * Remove a registered ReportWidget. + * @param string $className Widget class name. + * @return void */ - public function removeReportWidgetItem($className) + public function removeReportWidget($className) { if (!$this->reportWidgets) { throw new SystemException('Unable to remove a widget before widgets are loaded.'); @@ -234,4 +236,4 @@ class WidgetManager unset($this->reportWidgets[$className]); } -} \ No newline at end of file +} diff --git a/tests/unit/backend/classes/WidgetManagerTest.php b/tests/unit/backend/classes/WidgetManagerTest.php index abdf0061f..5e88096ae 100644 --- a/tests/unit/backend/classes/WidgetManagerTest.php +++ b/tests/unit/backend/classes/WidgetManagerTest.php @@ -38,7 +38,7 @@ class WidgetManagerTest extends TestCase 'context' => 'dashboard' ]); - $manager->removeReportWidgetItem('Acme\Fake\ReportWidget\ByeWorld'); + $manager->removeReportWidget('Acme\Fake\ReportWidget\ByeWorld'); $widgets = $manager->listReportWidgets(); From 8a40e1cc89b2fb5cbf003b433a93bff77c23839d Mon Sep 17 00:00:00 2001 From: Oscar Arzola Date: Fri, 2 Jun 2017 23:53:27 -0500 Subject: [PATCH 03/25] Update Report widget docblock --- modules/backend/classes/WidgetManager.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/modules/backend/classes/WidgetManager.php b/modules/backend/classes/WidgetManager.php index 6dad9e913..67c4fe102 100644 --- a/modules/backend/classes/WidgetManager.php +++ b/modules/backend/classes/WidgetManager.php @@ -189,8 +189,20 @@ class WidgetManager } } - /* - * Extensibility + /** + * @event system.reportwidgets.extendItems + * Allows to append or remove a report widget. + * + * You will have access to the WidgetManager instance and be able to call the appropiated methods + * $manager->registerReportWidget(); + * $manager->removeReportWidget(); + * + * Example usage: + * + * Event::listen('system.reportwidgets.extendItems', function($manager) { + * $manager->removeReportWidget('Acme\ReportWidgets\YourWidget'); + * }); + * */ Event::fire('system.reportwidgets.extendItems', [$this]); From eff3f2e90552dadcc36ac49bdfad3a3c97a322d1 Mon Sep 17 00:00:00 2001 From: Priit Perna Date: Wed, 7 Jun 2017 20:07:34 +0300 Subject: [PATCH 04/25] Backend translation for estonian (#2911) * Added language files for Estonian (et). Thanks to @priitperna! --- modules/backend/lang/et/lang.php | 497 ++++++++++++++++++++++++++ modules/backend/models/Preference.php | 1 + modules/cms/lang/et/lang.php | 360 +++++++++++++++++++ modules/system/lang/en/lang.php | 1 + modules/system/lang/et/client.php | 88 +++++ modules/system/lang/et/lang.php | 367 +++++++++++++++++++ modules/system/lang/et/validation.php | 99 +++++ 7 files changed, 1413 insertions(+) create mode 100644 modules/backend/lang/et/lang.php create mode 100644 modules/cms/lang/et/lang.php create mode 100644 modules/system/lang/et/client.php create mode 100644 modules/system/lang/et/lang.php create mode 100644 modules/system/lang/et/validation.php diff --git a/modules/backend/lang/et/lang.php b/modules/backend/lang/et/lang.php new file mode 100644 index 000000000..88ad06d18 --- /dev/null +++ b/modules/backend/lang/et/lang.php @@ -0,0 +1,497 @@ + [ + 'title' => 'Haldusliides' + ], + 'field' => [ + 'invalid_type' => 'Välja tüüpi :type pole olemas.', + 'options_method_invalid_model' => "Atribuut ':field' ei vasta ühelegi olemasolevale andmemudelile. Palun defineeri valikväärtuste funktioon :model andmemudelis.", + 'options_method_not_exists' => "Andmemudelis :model peab olema defineeritud funktsioon :method(), mis tagastab valikväärtused välja ':field' jaoks." + ], + 'widget' => [ + 'not_registered' => "Vidina klassinimi ':name' pole registreeritud", + 'not_bound' => "Vidin klassinimega ':name' pole seotud kontrolleriga" + ], + 'page' => [ + 'untitled' => 'Nimeta', + 'access_denied' => [ + 'label' => 'Juurdepääs keelatud', + 'help' => "Sul pole vajalikke õiguseid, et seda lehte näha.", + 'cms_link' => 'Tagasi haldusliidesesse' + ], + 'no_database' => [ + 'label' => 'Andmebaas puudub', + 'help' => "Haldusliidese kasutamiseks peab olemas seadistatud andmebaas. Enne jätkamist palun kontrolli andmebaasi seadistust.", + 'cms_link' => 'Tagasi kodulehele' + ], + 'invalid_token' => [ + 'label' => 'Vigane turvamärk' + ] + ], + 'partial' => [ + 'not_found_name' => "Koodiblokki ':name' ei leitud." + ], + 'account' => [ + 'sign_out' => 'Logi välja', + 'login' => 'Logi sisse', + 'reset' => 'Lähtesta', + 'restore' => 'Taasta', + 'login_placeholder' => 'logi sisse', + 'password_placeholder' => 'parool', + 'forgot_password' => 'Unustasid parooli?', + 'enter_email' => 'Sisesta oma e-post', + 'enter_login' => 'Sisesta oma kasutajanimi', + 'email_placeholder' => 'e-post', + 'enter_new_password' => 'Siseta uus parool', + 'password_reset' => 'Parooli lähtestamine', + 'restore_success' => 'Sinu e-posti aadressile saadeti kiri juhistega.', + 'restore_error' => "Sellist kasutajat ei ole süsteemis: ':login'", + 'reset_success' => 'Parool on lähtestatud, võid nüüd oma uue parooli sisse logida.', + 'reset_error' => 'Sisestasid parooli lähtestamiseks vigased andmed. Palun proovi uuesti!', + 'reset_fail' => 'Parooli lähtestamine ebaõnnestus!', + 'apply' => 'Rakenda', + 'cancel' => 'Loobu', + 'delete' => 'Kustuta', + 'ok' => 'OK' + ], + 'dashboard' => [ + 'menu_label' => 'Töölaud', + 'widget_label' => 'Vidin', + 'widget_width' => 'Laius', + 'full_width' => 'täislaius', + 'manage_widgets' => 'Halda vidinaid', + 'add_widget' => 'Lisa vidin', + 'widget_inspector_title' => 'Vidina seaded', + 'widget_inspector_description' => 'Seadista töölaua vidin', + 'widget_columns_label' => 'Laius :columns', + 'widget_columns_description' => 'Vidina laius ekraanil, vahemikus 1 kuni 10.', + 'widget_columns_error' => 'Vidina laius peab olema täisarv vahemikus 1-10.', + 'columns' => '{1} veerg|[2,Inf] veergu', + 'widget_new_row_label' => 'Näita uuel real', + 'widget_new_row_description' => 'Näita vidinat alati uuel real.', + 'widget_title_label' => 'Vidina nimi', + 'widget_title_error' => 'Vidina nimi on kohustuslik.', + 'reset_layout' => 'Lähtesta paigutus', + 'reset_layout_confirm' => 'Lähtesta vidinate paigutus vaikeseadele?', + 'reset_layout_success' => 'Vidinate paigutus on lähtestatud', + 'make_default' => 'Määra vaikeseadeks', + 'make_default_confirm' => 'Kas soovid määrata praeguse vidinate paigutuse vaikeseadeks?', + 'make_default_success' => 'Praegune paigutus on nüüd vaikeseade.', + 'collapse_all' => 'Peida kõik', + 'expand_all' => 'Näita kõiki', + 'status' => [ + 'widget_title_default' => 'Süsteemi olek', + 'update_available' => '{0} uuendust saadval!|{1} uuendus saadaval!|[2,Inf] uuendust saadaval!', + 'updates_pending' => 'Ootel süsteemiuuendused', + 'updates_nil' => 'Süsteem on ajakohane', + 'updates_link' => 'Uuenda', + 'warnings_pending' => 'Mõned küsimused nõuavad tähelepanu', + 'warnings_nil' => 'Kõik on korras', + 'warnings_link' => 'Vaata', + 'core_build' => 'Süsteemi versioon', + 'event_log' => 'Sündmuste logi', + 'request_log' => 'Päringute logi', + 'app_birthday' => 'Süsteem on töös alates', + ], + 'welcome' => [ + 'widget_title_default' => 'Tere tulemast', + 'welcome_back_name' => ':app. Tere tulemast tagasi, :name.', + 'welcome_to_name' => ':app. Tere, :name.', + 'first_sign_in' => 'See on esimene kord kui oled sisse loginud.', + 'last_sign_in' => 'Sinu viimane sisselogimine oli', + 'view_access_logs' => 'Vaata juurdepääsu logi', + 'nice_message' => 'Kena päeva jätku!', + ] + ], + 'user' => [ + 'name' => 'Administraator', + 'menu_label' => 'Administraatorid', + 'menu_description' => 'Muuda haldusliidese kasutajaid, õiguseid ja gruppe.', + 'list_title' => 'Halda administraatoreid', + 'new' => 'Uus administraator', + 'login' => 'Logi sisse', + 'first_name' => 'Eesnimi', + 'last_name' => 'Perenimi', + 'full_name' => 'Täisnimi', + 'email' => 'E-post', + 'groups' => 'Grupid', + 'groups_comment' => 'Määra millistesse gruppidesse kasutaja kuulub. Grupid määravad ära kasutaja juurdepääsu õigused, mida on võimalik eralid seadistada ka õiguste alt.', + 'avatar' => 'Avatar', + 'password' => 'Parool', + 'password_confirmation' => 'Korda parooli', + 'permissions' => 'Õigused', + 'account' => 'Konto', + 'superuser' => 'Ülemkasutaja', + 'superuser_comment' => 'Ülemkasutajal on juurdepääs kogu süsteemile. Samuti on õigus luua uusi kasutajakontosid. ', + 'send_invite' => 'Saada kutse e-postiga', + 'send_invite_comment' => 'Saadat tervituskiri, mis sisaldab ka sisse logimiseks vajalikku kasutajanime ja parooli.', + 'delete_confirm' => 'Kustuta administraator?', + 'return' => 'Tagasin nimekirja', + 'allow' => 'Luba', + 'inherit' => 'Päritud', + 'deny' => 'Keela', + 'activated' => 'Aktiveeritud', + 'last_login' => 'Viimane sisselogimine', + 'created_at' => 'Loodud', + 'updated_at' => 'Muudetud', + 'group' => [ + 'name' => 'Grupp', + 'name_comment' => 'Grupi nime kuvatakse administraatori loomise ja muutmise vormides olevas gruppide nimekirjas.', + 'name_field' => 'Nimi', + 'description_field' => 'Kirjeldus', + 'is_new_user_default_field_label' => 'Vaikimisi grupp', + 'is_new_user_default_field_comment' => 'Uued kasutajad lisatakse automaatselt sellesse gruppi', + 'code_field' => 'Kood', + 'code_comment' => 'Unikaalne kood, mida kasutatakse süsteemisiseselt.', + 'menu_label' => 'Halda gruppe', + 'list_title' => 'Halda gruppe', + 'new' => 'Uus grupp', + 'delete_confirm' => 'Kusuta see grupp?', + 'return' => 'Tagasi nimekirja', + 'users_count' => 'Kasutajad' + ], + 'preferences' => [ + 'not_authenticated' => 'Puudub autoriseeritud kasutaja kellele seadeid laadida või salvestada.' + ] + ], + 'list' => [ + 'default_title' => 'Nimekiri', + 'search_prompt' => 'Otsi...', + 'no_records' => 'Siin vaates pole ühtegi kirjet.', + 'missing_model' => 'Klassis :class ei ole nimekirjade jaoks defineeritud andmemudelit.', + 'missing_column' => ':columns jaoks puuduvad veergude definitsioonid.', + 'missing_columns' => 'Klassis :class kasutatud nimekirjal puudvad veergude definitsioonid.', + 'missing_definition' => "':field' jaoks puudub nimekirja veeru definitsioon.", + 'missing_parent_definition' => "Nimekirjal puudub definitsioon ':definition' kohta.", + 'behavior_not_ready' => 'Nimekirjade funktsionaalsus pole initsialiseeritud, vaata üle, et makeLists() oleks kontrolleris välja kutsutud.', + 'invalid_column_datetime' => "Veeru väärtus ':column' ei ole DateTime objekt. Võibolla on andmemudelis puudu \$dates muutuja viide?", + 'pagination' => 'Kuvatud kirjeid: :from-:to. Kokku: :total', + 'first_page' => 'Esimene leht', + 'last_page' => 'Viimane leht', + 'prev_page' => 'Eelmine leht', + 'next_page' => 'Järgmine leht', + 'refresh' => 'Laadi uuesti', + 'updating' => 'Uuendan...', + 'loading' => 'Laen...', + 'setup_title' => 'Nimekirja seadistus', + 'setup_help' => 'Vali veerud, mida soovid näha nimekirjas. Veergude järjestust saad muuta lohistades neid üles-alla.', + 'records_per_page' => 'Kirjeid lehel', + 'records_per_page_help' => 'Vali kirjete arv, mida soovid ühel lehel kuvada. NB! mida rohkem kirjeid lehel kuvatakse, seda kauem võtab aega lehe laadimine.', + 'check' => 'Vali', + 'delete_selected' => 'Kustuta valitud', + 'delete_selected_empty' => 'Ühtegi kirjet ei valitud.', + 'delete_selected_confirm' => 'Kustuta valitud kirjed?', + 'delete_selected_success' => 'Valitud kirjed on kustutatud.', + 'column_switch_true' => 'Jah', + 'column_switch_false' => 'Ei' + ], + 'fileupload' => [ + 'attachment' => 'Manus', + 'help' => 'Manuse nimi ja kirjeldus.', + 'title_label' => 'Nimi', + 'description_label' => 'Kirjeldus', + 'default_prompt' => 'Faili üleslaadimiseks kliki %s või lohista fail siia', + 'attachment_url' => 'Manuse URL', + 'upload_file' => 'Lae fail üles', + 'upload_error' => 'Üleslaadimisel tekkis viga', + 'remove_confirm' => 'Oled sa kindel?', + 'remove_file' => 'Eemalda fail' + ], + 'form' => [ + 'create_title' => 'Loomine: :name', + 'update_title' => 'Muutmine: :name', + 'preview_title' => 'Eelvaade: :name', + 'create_success' => ':name loodud', + 'update_success' => ':name muudetud', + 'delete_success' => ':name kustutatud', + 'reset_success' => 'Lähtestamine edukas', + 'missing_id' => 'Vormis puudus kirje ID.', + 'missing_model' => 'Klassis :class ei ole vormi jaoks defineeritud andmemudelit.', + 'missing_definition' => "Väli ':field' ei ole vormis defineeritud.", + 'not_found' => 'Kirjet ID-ga :id ei leitud.', + 'action_confirm' => 'Oled sa kindel?', + 'create' => 'Loo', + 'create_and_close' => 'Loo ja sulge', + 'creating' => 'Loon...', + 'creating_name' => 'Loon objekti :name...', + 'save' => 'Salvesta', + 'save_and_close' => 'Salvesta ja sulge', + 'saving' => 'Salvestan...', + 'saving_name' => 'Salvestan objekti :name...', + 'deleting' => 'Kustutan...', + 'delete' => 'Kustuta', + 'confirm_delete' => 'Kustuta kirje?', + 'confirm_delete_multiple' => 'Kustuta valitud kirjed?', + 'deleting_name' => 'Kustutan objekti :name...', + 'reset_default' => 'Lähtesta vaikeväärtus', + 'resetting' => 'Lähtestan', + 'resetting_name' => 'Lähtestan objekti :name', + 'undefined_tab' => 'Muu', + 'field_off' => 'Ei', + 'field_on' => 'Jah', + 'add' => 'Lisa', + 'apply' => 'Rakenda', + 'cancel' => 'Loobu', + 'close' => 'Sulge', + 'confirm' => 'Kinnita', + 'reload' => 'Lae uuesti', + 'complete' => 'Lõpeta', + 'ok' => 'OK', + 'or' => 'või', + 'confirm_tab_close' => 'Sulge vaheleht? Salvestamata muudatused lähevad kaduma.', + 'behavior_not_ready' => 'Vormi funktsionaalsus pole initsialiseeritud, vaata üle, et initForm() oleks kontrolleris välja kutsutud.', + 'preview_no_files_message' => 'Ühtegi faili pole üles laetud.', + 'preview_no_media_message' => 'Ühtegi meediafaili pole valitud.', + 'preview_no_record_message' => 'Ühtegi kirjet pole valitud.', + 'select' => 'Vali', + 'select_all' => 'kõik', + 'select_none' => 'mitte ükski', + 'select_placeholder' => 'palun vali', + 'insert_row' => 'Lisa rida', + 'insert_row_below' => 'Lisa rida alla', + 'delete_row' => 'Kustuta rida', + 'concurrency_file_changed_title' => 'Faili on muudetud', + 'concurrency_file_changed_description' => "Teine kasutaja on muutnud sama faili, mida sina praegu muudad. Võid faili uuesti laadida ja sellega kaotada oma muudatused või kirjutada üle teise kasutaja muudatused.", + 'return_to_list' => 'Tagasi nimekirja' + ], + 'recordfinder' => [ + 'find_record' => 'Leia kirje', + 'cancel' => 'Loobu', + ], + 'pagelist' => [ + 'page_link' => 'Lehe link', + 'select_page' => 'Vali leht...' + ], + 'relation' => [ + 'missing_config' => "':config' jaoks puuduvad seoste definitsioonid.", + 'missing_definition' => "Välja ':field' jaoks puudub seose definitsioon.", + 'missing_model' => 'Klassis :class ei ole seoste jaoks defineeritud andmemudelit.', + 'invalid_action_single' => 'Üks-ühele seosega ei saa seda tegevust sooritada.', + 'invalid_action_multi' => 'Mitu-mitmele seosega ei saa seda tegevust sooritada.', + 'help' => 'Lisamiseks kliki kirjel', + 'related_data' => 'Seotud objekti andmed: :name', + 'add' => 'Lisa', + 'add_selected' => 'Lisa valitud', + 'add_a_new' => 'Lisa uus :name', + 'link_selected' => 'Lisa valitud', + 'link_a_new' => 'Lisa uus :name', + 'cancel' => 'Loobu', + 'close' => 'Sulge', + 'add_name' => 'Lisa :name', + 'create' => 'Loo', + 'create_name' => 'Loo :name', + 'update' => 'Uuenda', + 'update_name' => 'Uuenda objekti :name', + 'preview' => 'Eelvaade', + 'preview_name' => 'Objekti :name eelvaade', + 'remove' => 'Eemalda', + 'remove_name' => 'Eemalda :name', + 'delete' => 'Kustuta', + 'delete_name' => 'Kustuta :name', + 'delete_confirm' => 'Oled sa kindel?', + 'link' => 'Lisa seos', + 'link_name' => 'Lisa :name', + 'unlink' => 'Eemalda', + 'unlink_name' => 'Eemalda :name', + 'unlink_confirm' => 'Oled sa kindel?' + ], + 'reorder' => [ + 'default_title' => 'Muuda järjestust', + 'no_records' => 'Ühtegi kirjet ei leitud.' + ], + 'model' => [ + 'name' => 'Andmemudel', + 'not_found' => "Andmemudelit ':class' ID-ga :id ei leitud", + 'missing_id' => 'Andmemudeli ID väärtus puudub.', + 'missing_relation' => "Andmemudelil ':class' puudub definitsioon seosele ':relation'.", + 'missing_method' => "Andmemudelil ':class' puudub funktsioon ':method'.", + 'invalid_class' => "Klassis :class kasutatud andmemudel :model ei ole korrektne. See peab olema päritud klassist \Model.", + 'mass_assignment_failed' => "Andmemudeli atribuudi ':attribute' väärtuste määramine ebaõnnestus." + ], + 'warnings' => [ + 'tips' => 'Näpunäited süsteemi seadistamiseks', + 'tips_description' => 'Süsteemi õigeks seadistamiseks on vaja meeles pidada paari olulist aspekti.', + 'permissions' => 'PHP-l ei ole õigust kirjutada katallogi :name või selle alamkataloogidesse. Palun paranda kataloogide juurdepääsuõigused serveris.', + 'extension' => 'PHP laiendus :name ei ole paigaldatud. Süsteemi toimiseks on vajalik selle paigaldamine.', + 'plugin_missing' => 'Plugin :name on vajalik süsteemi toimimiseks, kuid seda pole paigaldatud. Palun paigalda see plugin.', + ], + 'editor' => [ + 'menu_label' => 'Tekstiredaktori seadistused', + 'menu_description' => 'Isikupärast kõikjal kasutatavaid redaktori seadeid, nagu teksti suurus ja värvivalik.', + 'font_size' => 'Teksti suurus', + 'tab_size' => 'Taande suurus', + 'use_hard_tabs' => 'Ära kasuta taandel tühikuid', + 'code_folding' => 'Koodi murdmine', + 'code_folding_begin' => 'Murdmise algus', + 'code_folding_begin_end' => 'Murdmise algus ja lõpp', + 'autocompletion' => 'Automaattäitmine', + 'word_wrap' => 'Sõnamurdmine', + 'highlight_active_line' => 'Tõsta aktiivne rida esile', + 'auto_closing' => 'Automaatselt sulge HTML tägid', + 'show_invisibles' => 'Näita peidetu märke', + 'show_gutter' => 'Näita jalust', + 'basic_autocompletion'=> 'Lihtne automaattäitmine (Ctrl + Space)', + 'live_autocompletion'=> 'Live automaattäitmine', + 'enable_snippets'=> 'Kasuta eeldefineeritud koodijuppe (Tab)', + 'display_indent_guides'=> 'Näide taande juhtjooni', + 'show_print_margin'=> 'Näita printimise juhtjooni', + 'mode_off' => 'Väljas', + 'mode_fluid' => 'Voolav', + '40_characters' => '40 tähemärki', + '80_characters' => '80 tähemärki', + 'theme' => 'Värvivalik', + 'markup_styles' => 'Markup stiilid', + 'custom_styles' => 'Kohandatud CSS', + 'custom styles_comment' => 'Kohandatud CSS reglid, mis lisada HTML redaktorile.', + 'markup_classes' => 'Markup klassid', + 'paragraph' => 'Lõik', + 'link' => 'Link', + 'table' => 'Tabel', + 'table_cell' => 'Tabeli lahter', + 'image' => 'Pilt', + 'label' => 'Silt', + 'class_name' => 'Klassi nimi', + 'markup_tags' => 'Markup tägid', + 'allowed_empty_tags' => 'Luba tühjad HTML tägid', + 'allowed_empty_tags_comment' => 'Nimekiri HTML tägidest, mida automaatselt ei eemaldata kui neis pole sisu.', + 'allowed_tags' => 'Lubatud HTML tägid', + 'allowed_tags_comment' => 'Nimekiri lubatud HTML tägidest.', + 'no_wrap' => 'HTML blokktägid', + 'no_wrap_comment' => 'Nimekiri HTML tägidest, mida ei ole automaatselt vaja panna blokktägide sisse.', + 'remove_tags' => 'Eemalda HTML tägid', + 'remove_tags_comment' => 'Nimekiri HTML tägidest, mis eemaldatakse automaatselt koos sisuga.' + ], + 'tooltips' => [ + 'preview_website' => 'Kodulehe eelvaade' + ], + 'mysettings' => [ + 'menu_label' => 'Minu seaded', + 'menu_description' => 'Sinu haldusliidese kontoga seonduvad seadistused' + ], + 'myaccount' => [ + 'menu_label' => 'Minu konto', + 'menu_description' => 'Muuda oma konto andmeid nagu nimi, e-posti aadress ja parool.', + 'menu_keywords' => 'parool konto turva sala' + ], + 'branding' => [ + 'menu_label' => 'Isikupärasta haldusliidest', + 'menu_description' => 'Muuda haldusliidese välimust (nt nimi, värvid, logo)', + 'brand' => 'Bränd', + 'logo' => 'Logo', + 'logo_description' => 'Lae üles logo, mida kasutada haldusliideses.', + 'app_name' => 'Haldusliidese nimi', + 'app_name_description' => 'Seda nime kuvatakse haldusliidese päises.', + 'app_tagline' => 'Tervitustekst', + 'app_tagline_description' => 'Seda teksti kuvatakse haldusliidesesse sisselogimisel.', + 'colors' => 'Värvid', + 'primary_color' => 'Peamine värv', + 'secondary_color' => 'Teine color', + 'accent_color' => 'Aktsendi color', + 'styles' => 'Stiilid', + 'custom_stylesheet' => 'Kohandatud CSS', + 'navigation' => 'Navigatsioon', + 'menu_mode' => 'Menüü stiil', + 'menu_mode_inline' => 'Järjekorras', + 'menu_mode_tile' => 'Kastid', + 'menu_mode_collapsed' => 'Minimaalne' + ], + 'backend_preferences' => [ + 'menu_label' => 'Haldusliidese seaded', + 'menu_description' => 'Muuda oma haldusliidese seadeid nagu keel jm.', + 'region' => 'Regioon', + 'code_editor' => 'Koodi redaktor', + 'timezone' => 'Ajatsoon', + 'timezone_comment' => 'Kuva kõiki kuupäevi selles ajatsoonis.', + 'locale' => 'Keel', + 'locale_comment' => 'Vali haldusliidese keel.' + ], + 'access_log' => [ + 'hint' => 'See logi sisaldab kõiki edukaid sisselogimisi haldusliidesesse. Andmeid hoitakse maksimaalselt :days päeva.', + 'menu_label' => 'Juurdepääsu logi', + 'menu_description' => 'Näita kõiki õnnestunud sisselogimisi.', + 'created_at' => 'Kuupäev', + 'login' => 'Kasutjanimi', + 'ip_address' => 'IP aaddress', + 'first_name' => 'Eesnimi', + 'last_name' => 'Perenimi', + 'email' => 'E-post' + ], + 'filter' => [ + 'all' => 'kõik', + 'options_method_not_exists' => "Andmemudelis :model peab olema defineeritud functioon :method(), mis tagastab valikud filtrile ':filter'.", + 'date_all' => 'kõik perioodid' + ], + 'import_export' => [ + 'upload_csv_file' => '1. Lae üles CSV fail', + 'import_file' => 'Impordi fail', + 'first_row_contains_titles' => 'Esimene rida sisaldab veerupäiseid', + 'first_row_contains_titles_desc' => 'Märgi see kast kui üleslaetavas CSV failis on esimesel real veergude nimed.', + 'match_columns' => '2. Ühenda failis olevad veerud andmebaasi väljadega', + 'file_columns' => 'Faili veerud', + 'database_fields' => 'Andmebaasi väljad', + 'set_import_options' => '3. Määra impordi valikud', + 'export_output_format' => '1. Ekspordi väljundi formaat', + 'file_format' => 'Failiformaat', + 'standard_format' => 'Tavaline', + 'custom_format' => 'Kohandatud', + 'delimiter_char' => 'Veergude eraldaja', + 'enclosure_char' => 'Veerud on ümbritsetud', + 'escape_char' => 'Paomärk', + 'select_columns' => '2. Vali veerud, mida eksportida', + 'column' => 'Veerg', + 'columns' => 'Veerud', + 'set_export_options' => '3. Määra ekspordi valikud', + 'show_ignored_columns' => 'Näita väljajätetud veergusid', + 'auto_match_columns' => 'Ühenda andmed automaatselt', + 'created' => 'Loodud', + 'updated' => 'Uuendatud', + 'skipped' => 'Vahelejäetud', + 'warnings' => 'Hoiatusi', + 'errors' => 'Vigu', + 'skipped_rows' => 'Vahelejäetud read', + 'import_progress' => 'Impordi progress', + 'processing' => 'Töötlen', + 'import_error' => 'Impordi viga', + 'upload_valid_csv' => 'Palun lae üles korrektne CSV fail.', + 'drop_column_here' => 'Lohista veerg siia...', + 'ignore_this_column' => 'Jäta see veerg vahele', + 'processing_successful_line1' => 'Faili loomise protsess lõpetatud!', + 'processing_successful_line2' => 'Veebilehitseja suunab kohe edasi faili allalaadimisele.', + 'export_progress' => 'Ekspordi progress', + 'export_error' => 'Ekspordi viga', + 'column_preview' => 'Veeru eelvaade', + 'file_not_found_error' => 'Faili ei leitud', + 'empty_error' => 'Eksportimiseks ei leitud andmeid', + 'empty_import_columns_error' => 'Impordiks peab valima vähemalt ühe veeru.', + 'match_some_column_error' => 'Palun seo mõni veerg andmebaasi väljaga.', + 'required_match_column_error' => 'Kohustuslik väli :label peab olema seotud.', + 'empty_export_columns_error' => 'Ekspordiks peab valima vähemalt ühe veeru.', + 'behavior_missing_uselist_error' => 'Kontrolleris peab olema kasutusel nimekirjade funktsionaalsus ning peab olema määratud "useList" valik.', + 'missing_model_class_error' => 'Palun määra andmemudeli klassi atribuudi tüüp: :type', + 'missing_column_id_error' => 'Puudu veeru ID', + 'unknown_column_error' => 'Tundmatu veerg', + 'encoding_not_supported_error' => 'Lähtefaili kodeering ei ole tuvastatav. Importimiseks määra kodeering kohandatud impordi seadete alt.', + 'encoding_format' => 'Faili kodeering', + 'encodings' => [ + 'utf_8' => 'UTF-8', + 'us_ascii' => 'US-ASCII', + 'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)', + 'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)', + 'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)', + 'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)', + 'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)', + 'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)', + 'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)', + 'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)', + 'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)', + 'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)', + 'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)', + 'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)', + 'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)', + 'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)', + 'windows_1251' => 'Windows-1251 (CP1251)', + 'windows_1252' => 'Windows-1252 (CP1252)' + ] + ] +]; diff --git a/modules/backend/models/Preference.php b/modules/backend/models/Preference.php index cc4fb8042..0ded1ab89 100644 --- a/modules/backend/models/Preference.php +++ b/modules/backend/models/Preference.php @@ -140,6 +140,7 @@ class Preference extends Model 'en-au' => [Lang::get('system::lang.locale.en-au'), 'flag-au'], 'en-ca' => [Lang::get('system::lang.locale.en-ca'), 'flag-ca'], 'en-gb' => [Lang::get('system::lang.locale.en-gb'), 'flag-gb'], + 'et' => [Lang::get('system::lang.locale.et'), 'flag-ee'], 'de' => [Lang::get('system::lang.locale.de'), 'flag-de'], 'es' => [Lang::get('system::lang.locale.es'), 'flag-es'], 'es-ar' => [Lang::get('system::lang.locale.es-ar'), 'flag-ar'], diff --git a/modules/cms/lang/et/lang.php b/modules/cms/lang/et/lang.php new file mode 100644 index 000000000..0c2f88f1d --- /dev/null +++ b/modules/cms/lang/et/lang.php @@ -0,0 +1,360 @@ + [ + 'invalid_file' => 'Invalid file name: :name. File names can contain only alphanumeric symbols, underscores, dashes and dots. Some examples of correct file names: page.htm, page, subdirectory/page', + 'invalid_property' => "The property ':name' cannot be set", + 'file_already_exists' => "File ':name' already exists.", + 'error_saving' => "Error saving file ':name'. Please check write permissions.", + 'error_creating_directory' => 'Error creating directory :name. Please check write permissions.', + 'invalid_file_extension' => 'Invalid file extension: :invalid. Allowed extensions are: :allowed.', + 'error_deleting' => "Error deleting the template file ':name'. Please check write permissions.", + 'delete_success' => 'Templates deleted: :count.', + 'file_name_required' => 'The File Name field is required.', + 'safe_mode_enabled' => 'Safe mode is currently enabled.' + ], + 'dashboard' => [ + 'active_theme' => [ + 'widget_title_default' => 'Koduleht', + 'online' => 'Online', + 'maintenance' => 'Hooldusrežiimis', + 'manage_themes' => 'Halda teemasid', + 'customize_theme' => 'Kohanda teemat' + ] + ], + 'theme' => [ + 'not_found_name' => "Teemat ':name' ei leitud.", + 'by_author' => 'Autor: :name', + 'active' => [ + 'not_set' => 'Aktiivset teemat pole määratud.', + 'not_found' => 'Aktiivset teemat ei leitud.' + ], + 'edit' => [ + 'not_set' => 'Muutmise teemat pole määratud.', + 'not_found' => 'Muutmise teemat ei leitud.', + 'not_match' => "Objekt, mida üritad muuta ei kuulu hetkel muudetava teema alla. Palun laadi leht uuesti." + ], + 'settings_menu' => 'Kodulehe teema', + 'settings_menu_description' => 'Vaata paigaldatud teemasid ja vali endale sobiv.', + 'default_tab' => 'Seaded', + 'name_label' => 'Nimi', + 'name_create_placeholder' => 'Uus teema nimi', + 'author_label' => 'Autor', + 'author_placeholder' => 'Inimese või ettevõtte nimi', + 'description_label' => 'Kirjeldus', + 'description_placeholder' => 'Teema kirjeldus', + 'homepage_label' => 'Koduleht', + 'homepage_placeholder' => 'Kodulehe URL', + 'code_label' => 'Kood', + 'code_placeholder' => 'Unikaalne teema kood, mida kasutatakse teema levitamisel', + 'preview_image_label' => 'Eelvaate pilt', + 'preview_image_placeholder' => 'Teema eelvaate pildi asukohta.', + 'dir_name_label' => 'Kataloogi nimi', + 'dir_name_create_label' => 'Teema kataloog', + 'theme_label' => 'Teema', + 'theme_title' => 'Teemad', + 'activate_button' => 'Aktiveeri', + 'active_button' => 'Aktiveeri', + 'customize_theme' => 'Kohanda teemat', + 'customize_button' => 'Kohanda', + 'duplicate_button' => 'Kopeeri', + 'duplicate_title' => 'Kopeeri teema', + 'duplicate_theme_success' => 'Teema kopeeritud!', + 'manage_button' => 'Halda', + 'manage_title' => 'Halda teemat', + 'edit_properties_title' => 'Teema', + 'edit_properties_button' => 'Muuda seadeid', + 'save_properties' => 'Salvesta seaded', + 'import_button' => 'Impordi', + 'import_title' => 'Impordi teema', + 'import_theme_success' => 'Teema imporditud!', + 'import_uploaded_file' => 'Teema arhiivi fail', + 'import_overwrite_label' => 'Kirjuta olemasolevad failid üle', + 'import_overwrite_comment' => 'Jäta see kast märgistamata, et importida ainult uued failid', + 'import_folders_label' => 'Kataloogid', + 'import_folders_comment' => 'Palun vali teema kataloogid, mida soovid importida', + 'export_button' => 'Eksport', + 'export_title' => 'Ekspordi teema', + 'export_folders_label' => 'Kataloogid', + 'export_folders_comment' => 'Palun vali teema kataloogid, mida soovid eksportida', + 'delete_button' => 'Kustuta', + 'delete_confirm' => 'Kustuta teema? Seda tegevust ei saa tagasi võtta!', + 'delete_active_theme_failed' => 'Aktiivset teemat ei saa kustutada. Aktiveeri kõigepealt mõni teine teema.', + 'delete_theme_success' => 'Teema kustutatud!', + 'create_title' => 'Loo teema', + 'create_button' => 'Loo', + 'create_new_blank_theme' => 'Loo uus tühi teema', + 'create_theme_success' => 'Teema loodud!', + 'create_theme_required_name' => 'Palun määra teemale nimi.', + 'new_directory_name_label' => 'Teema kataloog', + 'new_directory_name_comment' => 'Sisesta kopeeritud teemale uus kataloogi nimi.', + 'dir_name_invalid' => 'Nimi võib sisaldada ainult numbreid, tähti ja järgnevaid sümboleid: _-', + 'dir_name_taken' => 'Soovitud kataloog on juba olemas.', + 'find_more_themes' => 'Otsi uusi teemasid', + 'saving' => 'Salvestan teemat...', + 'return' => 'Tagasi teemade nimekirja' + ], + 'maintenance' => [ + 'settings_menu' => 'Maintenance mode', + 'settings_menu_description' => 'Configure the maintenance mode page and toggle the setting.', + 'is_enabled' => 'Enable maintenance mode', + 'is_enabled_comment' => 'Select the page to show when maintenance mode is activated.', + 'hint' => 'Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.' + ], + 'page' => [ + 'not_found_name' => "The page ':name' is not found", + 'not_found' => [ + 'label' => 'Page not found', + 'help' => 'The requested page cannot be found.' + ], + 'custom_error' => [ + 'label' => 'Page error', + 'help' => "We're sorry, but something went wrong and the page cannot be displayed." + ], + 'menu_label' => 'Pages', + 'unsaved_label' => 'Unsaved page(s)', + 'no_list_records' => 'No pages found', + 'new' => 'New page', + 'invalid_url' => 'Invalid URL format. The URL should start with the forward slash symbol and can contain digits, Latin letters and the following symbols: ._-[]:?|/+*^$', + 'delete_confirm_multiple' => 'Delete selected pages?', + 'delete_confirm_single' => 'Delete this page?', + 'no_layout' => '-- no layout --', + 'cms_page' => 'CMS page', + 'title' => 'Page title', + 'url' => 'Page URL', + 'file_name' => 'Page file name' + ], + 'layout' => [ + 'not_found_name' => "The layout ':name' is not found", + 'menu_label' => 'Layouts', + 'unsaved_label' => 'Unsaved layout(s)', + 'no_list_records' => 'No layouts found', + 'new' => 'New layout', + 'delete_confirm_multiple' => 'Delete selected layouts?', + 'delete_confirm_single' => 'Delete this layout?' + ], + 'partial' => [ + 'not_found_name' => "The partial ':name' is not found.", + 'invalid_name' => 'Invalid partial name: :name.', + 'menu_label' => 'Partials', + 'unsaved_label' => 'Unsaved partial(s)', + 'no_list_records' => 'No partials found', + 'delete_confirm_multiple' => 'Delete selected partials?', + 'delete_confirm_single' => 'Delete this partial?', + 'new' => 'New partial' + ], + 'content' => [ + 'not_found_name' => "The content file ':name' is not found.", + 'menu_label' => 'Content', + 'unsaved_label' => 'Unsaved content', + 'no_list_records' => 'No content files found', + 'delete_confirm_multiple' => 'Delete selected content files or directories?', + 'delete_confirm_single' => 'Delete this content file?', + 'new' => 'New content file' + ], + 'ajax_handler' => [ + 'invalid_name' => 'Invalid AJAX handler name: :name.', + 'not_found' => "AJAX handler ':name' was not found." + ], + 'cms' => [ + 'menu_label' => 'CMS' + ], + 'sidebar' => [ + 'add' => 'Add', + 'search' => 'Search...' + ], + 'editor' => [ + 'settings' => 'Settings', + 'title' => 'Title', + 'new_title' => 'New page title', + 'url' => 'URL', + 'filename' => 'File Name', + 'layout' => 'Layout', + 'description' => 'Description', + 'preview' => 'Preview', + 'meta' => 'Meta', + 'meta_title' => 'Meta Title', + 'meta_description' => 'Meta Description', + 'markup' => 'Markup', + 'code' => 'Code', + 'content' => 'Content', + 'hidden' => 'Hidden', + 'hidden_comment' => 'Hidden pages are accessible only by logged-in back-end users.', + 'enter_fullscreen' => 'Enter fullscreen mode', + 'exit_fullscreen' => 'Exit fullscreen mode', + 'open_searchbox' => 'Open Search box', + 'close_searchbox' => 'Close Search box', + 'open_replacebox' => 'Open Replace box', + 'close_replacebox' => 'Close Replace box' + ], + 'asset' => [ + 'menu_label' => 'Assets', + 'unsaved_label' => 'Unsaved asset(s)', + 'drop_down_add_title' => 'Add...', + 'drop_down_operation_title' => 'Action...', + 'upload_files' => 'Upload file(s)', + 'create_file' => 'Create file', + 'create_directory' => 'Create directory', + 'directory_popup_title' => 'New directory', + 'directory_name' => 'Directory name', + 'rename' => 'Rename', + 'delete' => 'Delete', + 'move' => 'Move', + 'select' => 'Select', + 'new' => 'New file', + 'rename_popup_title' => 'Rename', + 'rename_new_name' => 'New name', + 'invalid_path' => 'Path can contain only digits, Latin letters, spaces and the following symbols: ._-/', + 'error_deleting_file' => 'Error deleting file :name.', + 'error_deleting_dir_not_empty' => 'Error deleting directory :name. The directory is not empty.', + 'error_deleting_dir' => 'Error deleting directory :name.', + 'invalid_name' => 'Name can contain only digits, Latin letters, spaces and the following symbols: ._-', + 'original_not_found' => 'Original file or directory not found', + 'already_exists' => 'File or directory with this name already exists', + 'error_renaming' => 'Error renaming the file or directory', + 'name_cant_be_empty' => 'The name cannot be empty', + 'too_large' => 'The uploaded file is too large. The maximum allowed file size is :max_size', + 'type_not_allowed' => 'Only the following file types are allowed: :allowed_types', + 'file_not_valid' => 'File is not valid', + 'error_uploading_file' => "Error uploading file ':name': :error", + 'move_please_select' => 'please select', + 'move_destination' => 'Destination directory', + 'move_popup_title' => 'Move assets', + 'move_button' => 'Move', + 'selected_files_not_found' => 'Selected files not found', + 'select_destination_dir' => 'Please select a destination directory', + 'destination_not_found' => 'Destination directory is not found', + 'error_moving_file' => 'Error moving file :file', + 'error_moving_directory' => 'Error moving directory :dir', + 'error_deleting_directory' => 'Error deleting the original directory :dir', + 'no_list_records' => 'No files found', + 'delete_confirm' => 'Delete selected files or directories?', + 'path' => 'Path' + ], + 'component' => [ + 'menu_label' => 'Components', + 'unnamed' => 'Unnamed', + 'no_description' => 'No description provided', + 'alias' => 'Alias', + 'alias_description' => 'A unique name given to this component when using it in the page or layout code.', + 'validation_message' => 'Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.', + 'invalid_request' => 'The template cannot be saved because of invalid component data.', + 'no_records' => 'No components found', + 'not_found' => "The component ':name' is not found.", + 'method_not_found' => "The component ':name' does not contain a method ':method'." + ], + 'template' => [ + 'invalid_type' => 'Unknown template type.', + 'not_found' => 'Template not found.', + 'saved' => 'Template saved.', + 'no_list_records' => 'No records found', + 'delete_confirm' => 'Delete selected templates?', + 'order_by' => 'Order by' + ], + 'permissions' => [ + 'name' => 'CMS', + 'manage_content' => 'Halda kodulehe sisufaile', + 'manage_assets' => 'Manage website assets - images, JavaScript files, CSS files', + 'manage_pages' => 'Create, modify and delete website pages', + 'manage_pages' => 'Loo, muuda ja kustuta kodulehe lehti', + 'manage_layouts' => 'Create, modify and delete CMS layouts', + 'manage_partials' => 'Create, modify and delete CMS partials', + 'manage_themes' => 'Activate, deactivate and configure CMS themes', + 'manage_media' => 'Upload and manage media contents - images, videos, sounds, documents' + ], + 'mediafinder' => [ + 'label' => 'Media Finder', + 'default_prompt' => 'Click the %s button to find a media item' + ], + 'media' => [ + 'invalid_path' => "Invalid file path specified: ':path'.", + 'menu_label' => 'Media', + 'upload' => 'Upload', + 'move' => 'Move', + 'delete' => 'Delete', + 'add_folder' => 'Add folder', + 'search' => 'Search', + 'display' => 'Display', + 'filter_everything' => 'Everything', + 'filter_images' => 'Images', + 'filter_video' => 'Video', + 'filter_audio' => 'Audio', + 'filter_documents' => 'Documents', + 'library' => 'Library', + 'folder_size_items' => 'item(s)', + 'size' => 'Size', + 'title' => 'Title', + 'last_modified' => 'Last modified', + 'public_url' => 'Download URL', + 'click_here' => 'Click here', + 'thumbnail_error' => 'Error generating thumbnail.', + 'return_to_parent' => 'Return to the parent folder', + 'return_to_parent_label' => 'Go up ..', + 'nothing_selected' => 'Nothing is selected.', + 'multiple_selected' => 'Multiple items selected.', + 'uploading_file_num' => 'Uploading :number file(s)...', + 'uploading_complete' => 'Upload complete', + 'uploading_error' => 'Upload failed', + 'type_blocked' => 'The file type used is blocked for security reasons.', + 'order_by' => 'Order by', + 'folder' => 'Folder', + 'no_files_found' => 'No files found by your request.', + 'delete_empty' => 'Please select items to delete.', + 'delete_confirm' => 'Delete the selected item(s)?', + 'error_renaming_file' => 'Error renaming the item.', + 'new_folder_title' => 'New folder', + 'folder_name' => 'Folder name', + 'error_creating_folder' => 'Error creating folder', + 'folder_or_file_exist' => 'A folder or file with the specified name already exists.', + 'move_empty' => 'Please select items to move.', + 'move_popup_title' => 'Move files or folders', + 'move_destination' => 'Destination folder', + 'please_select_move_dest' => 'Please select a destination folder.', + 'move_dest_src_match' => 'Please select another destination folder.', + 'empty_library' => 'It looks a bit empty here. Upload files or create folders to get started.', + 'insert' => 'Insert', + 'crop_and_insert' => 'Crop & Insert', + 'select_single_image' => 'Please select a single image.', + 'selection_not_image' => 'The selected item is not an image.', + 'restore' => 'Undo all changes', + 'resize' => 'Resize...', + 'selection_mode_normal' => 'Normal', + 'selection_mode_fixed_ratio' => 'Fixed ratio', + 'selection_mode_fixed_size' => 'Fixed size', + 'height' => 'Height', + 'width' => 'Width', + 'selection_mode' => 'Selection mode', + 'resize_image' => 'Resize image', + 'image_size' => 'Image size:', + 'selected_size' => 'Selected:' + ], + 'theme_log' => [ + 'hint' => 'This log displays any changes made to the theme by administrators in the back-end area.', + 'menu_label' => 'Theme log', + 'menu_description' => 'View changes made to the active theme.', + 'empty_link' => 'Empty theme log', + 'empty_loading' => 'Emptying theme log...', + 'empty_success' => 'Theme log emptied', + 'return_link' => 'Return to theme log', + 'id' => 'ID', + 'id_label' => 'Log ID', + 'created_at' => 'Date & Time', + 'user' => 'User', + 'type' => 'Type', + 'type_create' => 'Create', + 'type_update' => 'Update', + 'type_delete' => 'Delete', + 'theme_name' => 'Theme', + 'theme_code' => 'Theme code', + 'old_template' => 'Template (Old)', + 'new_template' => 'Template (New)', + 'template' => 'Template', + 'diff' => 'Changes', + 'old_value' => 'Old value', + 'new_value' => 'New value', + 'preview_title' => 'Template changes', + 'template_updated' => 'Template was updated', + 'template_created' => 'Template was created', + 'template_deleted' => 'Template was deleted', + ], +]; diff --git a/modules/system/lang/en/lang.php b/modules/system/lang/en/lang.php index d04cab1ad..22d44cfdf 100644 --- a/modules/system/lang/en/lang.php +++ b/modules/system/lang/en/lang.php @@ -14,6 +14,7 @@ return [ 'en-au' => 'English (Australia)', 'en-ca' => 'English (Canada)', 'en-gb' => 'English (United Kingdom)', + 'et' => 'Eesti', 'de' => 'Deutsch', 'el' => 'Ελληνικά', 'es' => 'Español', diff --git a/modules/system/lang/et/client.php b/modules/system/lang/et/client.php new file mode 100644 index 000000000..1dc1bef76 --- /dev/null +++ b/modules/system/lang/et/client.php @@ -0,0 +1,88 @@ + [ + 'formatting' => 'Vorming', + 'quote' => 'Tsitaat', + 'code' => 'Kood', + 'header1' => 'Pealkiri 1', + 'header2' => 'Pealkiri 2', + 'header3' => 'Pealkiri 3', + 'header4' => 'Pealkiri 4', + 'header5' => 'Pealkiri 5', + 'header6' => 'Pealkiri 6', + 'bold' => 'Paks', + 'italic' => 'Kursiiv', + 'unorderedlist' => 'Järjestamata nimekiri', + 'orderedlist' => 'Järjestatud nimekiri', + 'video' => 'Video', + 'image' => 'Pilt', + 'link' => 'Link', + 'horizontalrule' => 'Sisesta horisontaaljoon', + 'fullscreen' => 'Täisekraan', + 'preview' => 'Eelvaade', + ], + 'mediamanager' => [ + 'insert_link' => 'Sisesta link', + 'insert_image' => 'Siseta pilt', + 'insert_video' => 'Sisesta video', + 'insert_audio' => 'Sisesta heliklipp', + 'invalid_file_empty_insert' => 'Palun vali fail, millele link lisada.', + 'invalid_file_single_insert' => 'Palun vali üks fail.', + 'invalid_image_empty_insert' => 'Palun vali pildid, mida lisada.', + 'invalid_video_empty_insert' => 'Palun vali videoklipp, mida lisada.', + 'invalid_audio_empty_insert' => 'Palun vali heliklipp, mida lisada.', + ], + 'alert' => [ + 'confirm_button_text' => 'OK', + 'cancel_button_text' => 'Loobu', + 'widget_remove_confirm' => 'Eemalda see widget?' + ], + 'datepicker' => [ + 'previousMonth' => 'Eelmine kuu', + 'nextMonth' => 'Järgmine kuu', + 'months' => ['Jaanuar', 'Veebruar', 'Märts', 'Aprill', 'Mai', 'Juuni', 'Juuli', 'August', 'September', 'Oktoober', 'November', 'Detsember'], + 'weekdays' => ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'], + 'weekdaysShort' => ['P', 'E', 'T', 'K', 'N', 'R', 'L'] + ], + 'filter' => [ + 'group' => [ + 'all' => 'kõik' + ], + 'dates' => [ + 'all' => 'kõik', + 'filter_button_text' => 'Filtreeri', + 'reset_button_text' => 'Lähtesta', + 'date_placeholder' => 'Kuupäev', + 'after_placeholder' => 'Hiljem kui', + 'before_placeholder' => 'Varem kui' + ] + ], + 'eventlog' => [ + 'show_stacktrace' => 'Näita stacktrace', + 'hide_stacktrace' => 'Peida stacktrace', + 'tabs' => [ + 'formatted' => 'Kujundatud', + 'raw' => 'Algne', + ], + 'editor' => [ + 'title' => 'Lähtekoodi redaktor', + 'description' => 'Sinu operatsioonisüsteem peaks olema sedistatud ühe URL skeemi jaoks.', + 'openWith' => 'Ava programmiga', + 'remember_choice' => 'Jäta valik selleks sessiooniks meelde', + 'open' => 'Ava', + 'cancel' => 'Loobu' + ] + ] +]; diff --git a/modules/system/lang/et/lang.php b/modules/system/lang/et/lang.php new file mode 100644 index 000000000..7b228a1c1 --- /dev/null +++ b/modules/system/lang/et/lang.php @@ -0,0 +1,367 @@ + [ + 'name' => 'OctoberCMS', + 'tagline' => 'Tagasi põhitõdede juurde' + ], + 'locale' => [ + 'be' => 'Беларуская', + 'bg' => 'Български', + 'cs' => 'Čeština', + 'da' => 'Dansk', + 'en' => 'English (United States)', + 'en-au' => 'English (Australia)', + 'en-ca' => 'English (Canada)', + 'en-gb' => 'English (United Kingdom)', + 'et' => 'Eesti', + 'de' => 'Deutsch', + 'el' => 'Ελληνικά', + 'es' => 'Español', + 'es-ar' => 'Español (Argentina)', + 'fa' => 'فارسی', + 'fr' => 'Français', + 'fr-ca' => 'Français (Canada)', + 'hu' => 'Magyar', + 'id' => 'Bahasa Indonesia', + 'it' => 'Italiano', + 'ja' => '日本語', + 'lt' => 'Lietuvių', + 'lv' => 'Latviešu', + 'nb-no' => 'Norsk (Bokmål)', + 'nl' => 'Nederlands', + 'pl' => 'Polskie', + 'pt-br' => 'Português (Brasil)', + 'ro' => 'Română', + 'ru' => 'Русский', + 'sv' => 'Svenska', + 'sk' => 'Slovenský', + 'tr' => 'Türkçe', + 'zh-cn' => '简体中文', + 'zh-tw' => '繁體中文' + ], + 'directory' => [ + 'create_fail' => 'Kataloogi :name ei õnnestunud luua' + ], + 'file' => [ + 'create_fail' => 'Faili :name ei õnnestunud luua' + ], + 'combiner' => [ + 'not_found' => "Ühendaja faili ':name' ei leitud." + ], + 'system' => [ + 'name' => 'Süsteem', + 'menu_label' => 'Süsteem', + 'categories' => [ + 'cms' => 'Sisuhaldus', + 'misc' => 'Muu', + 'logs' => 'Logid', + 'mail' => 'E-post', + 'shop' => 'Pood', + 'team' => 'Meeskond', + 'users' => 'Kasutajad', + 'system' => 'Süsteem', + 'social' => 'Suhtlusvõrgustikud', + 'events' => 'Sündmused', + 'customers' => 'Kliendid', + 'my_settings' => 'Minu seaded' + ] + ], + 'theme' => [ + 'label' => 'Teema', + 'unnamed' => 'Nimeta teema', + 'name' => [ + 'label' => 'Teema nimi', + 'help' => 'Anna teemale nimi selle unikaalse koodi järgi, nt RainLab.Vanilla' + ], + ], + 'themes' => [ + 'install' => 'Paigalda teemad', + 'search' => 'otsi paigaldamiseks teemasid...', + 'installed' => 'Paigaldatud teemad', + 'no_themes' => 'Ühtegi ostetud teemat pole paigaldatud.', + 'recommended' => 'Soovitatud', + 'remove_confirm' => 'Oled sa kindel, et soovid selle teema eemaldada?' + ], + 'plugin' => [ + 'label' => 'Plugin', + 'unnamed' => 'Nimeta plugin', + 'name' => [ + 'label' => 'Plugina nimi', + 'help' => 'Anna pluginale nimi selle unikaalse koodi järgi. Nt RainLab.Blog' + ] + ], + 'plugins' => [ + 'manage' => 'Halda pluginaid', + 'enable_or_disable' => 'Luba või keela', + 'enable_or_disable_title' => 'Luba või keela pluginaid', + 'install' => 'Paigalda pluginaid', + 'install_products' => 'Paigalda tooteid', + 'search' => 'otsi pluginaid paigaldamiseks...', + 'installed' => 'Paigaldatud pluginad', + 'no_plugins' => 'Ühtegi ostetud pluginat pole paigaldatud.', + 'recommended' => 'Soovitatud', + 'remove' => 'Eemalda', + 'refresh' => 'Värskenda', + 'disabled_label' => 'Keelatud', + 'disabled_help' => 'Keelatud pluginaid süsteem ei kasuta.', + 'frozen_label' => 'Peata uuendamised', + 'frozen_help' => 'Peatatud uuendustega pluginaid ei uuendata automaatse uuendusprotsessi käigus.', + 'selected_amount' => 'Valitud pluginaid: :amount', + 'remove_confirm' => 'Oled sa kindel, et soovid selle plugina eemaldada?', + 'remove_success' => 'Valitud pluginad on süsteemist eemaldatud.', + 'refresh_confirm' => 'Oled sa kindel?', + 'refresh_success' => 'Valitud plugin on edukalt värskendatud.', + 'disable_confirm' => 'Oled sa kindel?', + 'disable_success' => 'Valitud plugin on nüüd keelatud.', + 'enable_success' => 'Valitud pluginad on nüüd lubatud.', + 'unknown_plugin' => 'Plugin on edukalt eemaldatud.' + ], + 'project' => [ + 'name' => 'Projekt', + 'owner_label' => 'Omanik', + 'attach' => 'Seosta projekt', + 'detach' => 'Eemalda projekt', + 'none' => 'Puudub', + 'id' => [ + 'label' => 'Projekti ID', + 'help' => 'Kuidas leida projekti ID-d', + 'missing' => 'Palun sisesta projekti ID.' + ], + 'detach_confirm' => 'Oled sa kindel, et soovid selle projekti eemaldada?', + 'unbind_success' => 'Projekt on eemaldatud.' + ], + 'settings' => [ + 'menu_label' => 'Seaded', + 'not_found' => 'Soovitud seadeid ei leitud.', + 'missing_model' => 'Seadete lehel puudub modeli seos.', + 'update_success' => ':name seaded on uuendatud', + 'return' => 'Tagasi süsteemi seadete juurde', + 'search' => 'Otsi' + ], + 'mail' => [ + 'log_file' => 'Logi fail', + 'menu_label' => 'E-posti seadistus', + 'menu_description' => 'Halda e-posti seadistusi.', + 'general' => 'Üldine', + 'method' => 'Saatmise meetod', + 'sender_name' => 'Saatja nimi', + 'sender_email' => 'Saatja e-post', + 'php_mail' => 'PHP mail', + 'smtp' => 'SMTP', + 'smtp_address' => 'SMTP serveri aadress', + 'smtp_authorization' => 'SMTP autenimine', + 'smtp_authorization_comment' => 'Märgi see kast kui serveri poolt on nõutud SMTP autoriseerimine.', + 'smtp_username' => 'Kasutjanimi', + 'smtp_password' => 'Parool', + 'smtp_port' => 'SMTP port', + 'smtp_ssl' => 'SSL ühendus', + 'smtp_encryption' => 'SMTP krüpteerimise protokoll', + 'smtp_encryption_none' => 'Krüpteerimist ei kasutata', + 'smtp_encryption_tls' => 'TLS', + 'smtp_encryption_ssl' => 'SSL', + 'sendmail' => 'Sendmail', + 'sendmail_path' => 'Sendmaili asukoht', + 'sendmail_path_comment' => 'Palun sisesta sendmail programmi asukoht.', + 'mailgun' => 'Mailgun', + 'mailgun_domain' => 'Mailgun domeen', + 'mailgun_domain_comment' => 'Palun sisesta Mailgun domeeni nimi.', + 'mailgun_secret' => 'Mailgun võti', + 'mailgun_secret_comment' => 'Palun sisesta Mailgun API salajane võti.', + 'mandrill' => 'Mandrill', + 'mandrill_secret' => 'Mandrill võti', + 'mandrill_secret_comment' => 'Palun sisesta Mandrill API salajane võti.', + 'ses' => 'Amazon SES', + 'ses_key' => 'SES avalik võti', + 'ses_key_comment' => 'Palun sisesta SES avalik võti', + 'ses_secret' => 'SES salajane võti', + 'ses_secret_comment' => 'Palun sisesta SES saljane võti', + 'ses_region' => 'SES regioon', + 'ses_region_comment' => 'Palun sisesta SES regiooni nimi (nt eu-west-1)', + 'drivers_hint_header' => 'Draivereid pole paigaldatud', + 'drivers_hint_content' => 'See e-posti saatmise meetod nõuab plugina ":plugin" paigaldamist.' + ], + 'mail_templates' => [ + 'menu_label' => 'Kirja mallid', + 'menu_description' => 'Halda kirja malle ja kujundusi, mida saadetakse kasutajatele ja administraatoritele.', + 'new_template' => 'Uus mall', + 'new_layout' => 'Uus kujundus', + 'template' => 'Mall', + 'templates' => 'Mallid', + 'menu_layouts_label' => 'Kirja kujundused', + 'layout' => 'Kujundus', + 'layouts' => 'Kujundused', + 'no_layout' => '-- kujundust pole --', + 'name' => 'Nimi', + 'name_comment' => 'Unikaalne nimi, mida kasutatakse sellele mallile viitamisel', + 'code' => 'Kood', + 'code_comment' => 'Unikaalne kood, mida kasutatakse sellele mallile viitamisel', + 'subject' => 'Subjekt', + 'subject_comment' => 'Kirja subjekt', + 'description' => 'Kirjeldus', + 'content_html' => 'HTML', + 'content_css' => 'CSS', + 'content_text' => 'Tekstipõhine sisu', + 'test_send' => 'Saada testkiri', + 'test_success' => 'Testkiri saadetud.', + 'test_confirm' => 'Saada testkiri aadressile :email. Jätkan?', + 'creating' => 'Loon malli...', + 'creating_layout' => 'Loon kujundust...', + 'saving' => 'Salvestan malli...', + 'saving_layout' => 'Salvestan kujundust...', + 'delete_confirm' => 'Kustutan selle malli?', + 'delete_layout_confirm' => 'Kustutan selle kujunduse?', + 'deleting' => 'Kustutan malli...', + 'deleting_layout' => 'Kustutan kujundust...', + 'sending' => 'Saadan testkirja...', + 'return' => 'Tagasi mallide nimekirja' + ], + 'install' => [ + 'project_label' => 'Lisa projektile', + 'plugin_label' => 'Paigalda plugin', + 'theme_label' => 'Paigalda teema', + 'missing_plugin_name' => 'Palun sisesta plugina nimi, mida paigaldada.', + 'missing_theme_name' => 'Palun sisesta teema nimi, mida paigaldada.', + 'install_completing' => 'Lõpetan paigaldamise protsessi', + 'install_success' => 'Plugin on edukalt paigaldatud' + ], + 'updates' => [ + 'title' => 'Halda uuendusi', + 'name' => 'Tarkvara uuendus', + 'menu_label' => 'Uuendused & pluginad', + 'menu_description' => 'Uuenda süsteemi, halda ja paigalda pluginaid ja teemasid.', + 'return_link' => 'Tagasi süsteemi uuenduste juurde', + 'check_label' => 'Kontrolli uuendusi', + 'retry_label' => 'Proovi uuesti', + 'plugin_name' => 'Nimi', + 'plugin_code' => 'Kood', + 'plugin_description' => 'Kirjeldus', + 'plugin_version' => 'Versioon', + 'plugin_author' => 'Autor', + 'plugin_not_found' => 'Pluginat ei leitud', + 'core_current_build' => 'Praegune versioon', + 'core_build' => 'Versioon :build', + 'core_build_help' => 'Uusim versioon on saadaval.', + 'core_downloading' => 'Laen alla süsteemifaile', + 'core_extracting' => 'Pakin lahti süsteemifaile', + 'plugins' => 'Pluginad', + 'themes' => 'Teemad', + 'disabled' => 'Keelatud', + 'plugin_downloading' => 'Plugina allalaadimine: :name', + 'plugin_extracting' => 'Plugina failide lahtipakkimine: :name', + 'plugin_version_none' => 'Uus plugin', + 'plugin_current_version' => 'Praegune versioon', + 'theme_new_install' => 'Uue teema paigaldamine.', + 'theme_downloading' => 'Teema allalaadimine: :name', + 'theme_extracting' => 'Teema failide lahtipakkimine: :name', + 'update_label' => 'Uuenda tarkvara', + 'update_completing' => 'Lõpetan uuendamise protsessi', + 'update_loading' => 'Laen saadaolevaid uuendusi...', + 'update_success' => 'Uuendamise protsess lõpetatud', + 'update_failed_label' => 'Uendamine ebaõnnestus', + 'force_label' => 'Uuenda igal juhul', + 'found' => [ + 'label' => 'Found new updates!', + 'help' => 'Kliki "Uuenda tarkvara," et alustada uuendamise protsesse.' + ], + 'none' => [ + 'label' => 'Uuendusi ei ole', + 'help' => 'Uusi uuendusi ei leitud.' + ], + 'important_action' => [ + 'empty' => 'Vali tegevus', + 'confirm' => 'Kinnita uuendus', + 'skip' => 'Jäta see uuendus vahele (ainult nüüd)', + 'ignore' => 'Jäta see uuendus vahele (alati)' + ], + 'important_action_required' => 'Vajalik tegevus', + 'important_view_guide' => 'Vaata uuendamise juhendit', + 'important_view_release_notes' => 'Vaate uuenduse märkmeid', + 'important_alert_text' => 'Osa uuendusi vajab sinu tähelepanu.', + 'details_title' => 'Plugina andmed', + 'details_view_homepage' => 'Vaata kodulehte', + 'details_readme' => 'Dokumentatsioon', + 'details_readme_missing' => 'Dokumentatsiooni pole lisatud.', + 'details_changelog' => 'Muudatuste nimekiri', + 'details_changelog_missing' => 'Muudatuste nimekirja pole.', + 'details_upgrades' => 'Uuendamise juhend', + 'details_upgrades_missing' => 'Uuendamise juhendit ei ole lisatud.', + 'details_licence' => 'Litsents', + 'details_licence_missing' => 'Litsentsi pole lisatud.', + 'details_current_version' => 'Praegune versioon', + 'details_author' => 'Autor' + ], + 'server' => [ + 'connect_error' => 'Ühendus serveriga nurjus.', + 'response_not_found' => 'Uuenduste serverit ei leitud.', + 'response_invalid' => 'Serverilt saadi vigane vastus.', + 'response_empty' => 'Serverilt saadi tühi vastus.', + 'file_error' => 'Paketi saatmine ebaõnnestus.', + 'file_corrupt' => 'Saadetud fail on vigane.' + ], + 'behavior' => [ + 'missing_property' => 'Klass :class peab defineerima atribuudi $:property, mida kasutab käitumine :behavior.' + ], + 'config' => [ + 'not_found' => 'Ei leitud :location jaoks seadete faili :file.', + 'required' => ":location seade peab sisaldama ':property' väärtust." + ], + 'zip' => [ + 'extract_failed' => "Süsteemifaili ':file' lahtipakkimine ebaõnnestus." + ], + 'event_log' => [ + 'hint' => 'See logi sisaldab veateateid, mis esinevad süsteemi töös.', + 'menu_label' => 'Sündmuste logi', + 'menu_description' => 'Vaata süsteemi logi kirjeid.', + 'empty_link' => 'Kustuta sündmuste logi', + 'empty_loading' => 'Kustutan sündmuste logi...', + 'empty_success' => 'Sündmuste logi kustutatud', + 'return_link' => 'Tagasi sündmsute logi nimekirja', + 'id' => 'ID', + 'id_label' => 'Sündmuse ID', + 'created_at' => 'Kuupäev & kellaaeg', + 'message' => 'Sisu', + 'level' => 'Tase', + 'preview_title' => 'Sündmus' + ], + 'request_log' => [ + 'hint' => 'See logi sisaldab süsteemi juurdepääsuinfot, mis võiks vajada tähelepanu. Näiteks salvestatakse 404 päringud kui kasutaja üritab vaadata lehte, mida ei ole olemas.', + 'menu_label' => 'Päringute logi', + 'menu_description' => 'Vaata ebaõnnestunud või edasisuunatud päringuid, nt Lehte ei leitud (404).', + 'empty_link' => 'Kustuta sündmuste logi', + 'empty_loading' => 'Kustutan sündmuste logi...', + 'empty_success' => 'Sündmuste logi kustutatud', + 'return_link' => 'Tagasi sündmuste logi nimekirja', + 'id' => 'ID', + 'id_label' => 'Päringu ID', + 'count' => 'Korduste arv', + 'referer' => 'Allikas', + 'url' => 'URL', + 'status_code' => 'Staatus', + 'preview_title' => 'Päring' + ], + 'permissions' => [ + 'name' => 'Süsteem', + 'manage_system_settings' => 'Süsteemi seadete muutmine', + 'manage_software_updates' => 'Süsteemi uundamine', + 'access_logs' => 'Logide vaatamine', + 'manage_mail_templates' => 'Kirja mallide haldamine', + 'manage_mail_settings' => 'E-posti seadete muutmine', + 'manage_other_administrators' => 'Administraatorite haldamine', + 'manage_preferences' => 'Haldusliidese seadete muutmine', + 'manage_editor' => 'Koodi redaktori seadete muutmine', + 'view_the_dashboard' => 'Juurdepääs töölauale', + 'manage_branding' => 'Haldusliidese kohandamine' + ], + 'log' => [ + 'menu_label' => 'Logi seaded', + 'menu_description' => 'Määra millistes süsteemi osadeks peaks logi pidama.', + 'default_tab' => 'Logimine', + 'log_events' => 'Logi süsteemi sündmusi', + 'log_events_comment' => 'Salvesta logi ka andmebaasi (lisaks kettal olevale logifailile).', + 'log_requests' => 'Logi vigaseid päringuid', + 'log_requests_comment' => 'Süsteemi juurdepääsu päringud, mis võiksid vajada tähelepanu (nt 404)', + 'log_theme' => 'Logi teema muudatusi', + 'log_theme_comment' => 'Teema muudatused, mida tehakse haldusliideses.', + ] +]; diff --git a/modules/system/lang/et/validation.php b/modules/system/lang/et/validation.php new file mode 100644 index 000000000..68226a4c4 --- /dev/null +++ b/modules/system/lang/et/validation.php @@ -0,0 +1,99 @@ + ":attribute peab olema vastuvõetud.", + "active_url" => ":attribute ei ole korrektne URL.", + "after" => ":attribute peab olema hilisem kui :date.", + "alpha" => ":attribute võib sisaldada ainult täthi.", + "alpha_dash" => ":attribute võib sisaldada ainult tähti, numbreid ja sidekriipse.", + "alpha_num" => ":attribute võib sisaldada ainult tähti ja numbreid.", + "array" => ":attribute peab olema massiiv.", + "before" => ":attribute peab olema varasem kui :date.", + "between" => [ + "numeric" => ":attribute peab olema vahemikus :min - :max.", + "file" => ":attribute peab olema vahemikus :min - :max kb.", + "string" => ":attribute peab olema vahemikus :min - :max tähemärki.", + "array" => ":attribute sisaldama :min - :max elementi.", + ], + "confirmed" => ":attribute kordus ei kattu.", + "date" => ":attribute pole korrektne kuupäev.", + "date_format" => ":attribute ei vasta vormingule :format.", + "different" => ":attribute ja :other peavad olema erinevad.", + "digits" => ":attribute peab olema :digits märgiline.", + "digits_between" => ":attribute peab olema vahemikus :min and :max märki.", + "email" => ":attribute vorming ei ole korrektne.", + "exists" => "Valitud :attribute pole korrektne.", + "image" => ":attribute peab olema pilt.", + "in" => "Valitud :attribute pole korrektne.", + "integer" => ":attribute peab olema täisarv.", + "ip" => ":attribute peab olema IP aadress.", + "max" => [ + "numeric" => ":attribute ei tohi olla täisarv suurem kui :max.", + "file" => ":attribute ei tohi olla suurem kui :max kb.", + "string" => ":attribute ei tohi olla suurem kui :max tähemärki.", + "array" => ":attribute ei tohi sisalda rohkem kui :max elementi.", + ], + "mimes" => ":attribute peab olema fail tüübiga :values.", + "extensions" => ":attribute peab olema laiendiga :values.", + "min" => [ + "numeric" => ":attribute peab olema vähemalt :min.", + "file" => ":attribute peab olema vähemalt :min kb.", + "string" => ":attribute peab olema vähemalt :min tähemärki.", + "array" => ":attribute peab sisaldama vähemalt :min elementi.", + ], + "not_in" => "Valitud :attribute pole korrektne.", + "numeric" => ":attribute peab olema number.", + "regex" => ":attribute vormin pole korrektne.", + "required" => ":attribute on kohustuslik.", + "required_if" => ":attribute on kohustuslik kui :other on :value.", + "required_with" => ":attribute on kohustuslik kui :values on olemas.", + "required_without" => ":attribute on kohustuslik kui :values pole olemas.", + "same" => ":attribute ja :other peavad ühtima.", + "size" => [ + "numeric" => ":attribute peab olema :size.", + "file" => ":attribute peab olema :size kb.", + "string" => ":attribute peab olema :size tähemärki.", + "array" => ":attribute peab sialdama :size elementi.", + ], + "unique" => ":attribute on juba võetud.", + "url" => ":attribute vorming ei ole korrektne.", + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; From 0f4d7b6a85011525e3b7238ff1ca2dd91622736c Mon Sep 17 00:00:00 2001 From: Alexander Guth Date: Wed, 7 Jun 2017 22:36:18 +0200 Subject: [PATCH 05/25] Pass the current context to the selector This fixes an issue with more than one form on a single page. The messages will be correctly displayed in the container of their corresponding form. --- modules/system/assets/js/framework.extras.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/system/assets/js/framework.extras.js b/modules/system/assets/js/framework.extras.js index 149a963f4..7aa3bd3ed 100644 --- a/modules/system/assets/js/framework.extras.js +++ b/modules/system/assets/js/framework.extras.js @@ -52,7 +52,7 @@ }) if (!!$container.length) { - $container = $('[data-validate-error]') + $container = $('[data-validate-error]', $this) } if (!!$container.length) { From 22df6578a239c8a49f98fdcdc18541b189e167a5 Mon Sep 17 00:00:00 2001 From: Vladimir Kattsov Date: Mon, 12 Jun 2017 16:01:47 +0300 Subject: [PATCH 06/25] Added translation into Russian for new log section --- modules/system/lang/ru/lang.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/modules/system/lang/ru/lang.php b/modules/system/lang/ru/lang.php index f298163de..f16d9d97e 100644 --- a/modules/system/lang/ru/lang.php +++ b/modules/system/lang/ru/lang.php @@ -310,5 +310,16 @@ return [ 'manage_editor' => 'Управление настройками редактора кода', 'view_the_dashboard' => 'Просмотр панели управления', 'manage_branding' => 'Персонализация панели управления' + ], + 'log' => [ + 'menu_label' => 'Настройки логов', + 'menu_description' => 'Указать какие части CMS следует логировать.', + 'default_tab' => 'Логирование', + 'log_events' => 'Логировать системные события', + 'log_events_comment' => 'Хранить системные события в базе данных в дополнение к файловому журналу.', + 'log_requests' => 'Логировать неудачные запросы', + 'log_requests_comment' => 'Запросы браузера, которые могут потребовать внимания. Например, 404 ошибки.', + 'log_theme' => 'Логировать изменения темы', + 'log_theme_comment' => 'Когда изменения внесены средствами CMS', ] ]; From e6d79057c6ca4a848df1531390630069c6f6bbdd Mon Sep 17 00:00:00 2001 From: Alexander Shapoval Date: Sun, 18 Jun 2017 00:22:50 +0300 Subject: [PATCH 07/25] Translation into Ukrainian has been added. Added translations into Russian (#2931) * Added Ukrainian language. Credit to @PopcornPHP for the translation. --- modules/backend/lang/ru/lang.php | 56 +++- modules/backend/lang/uk/lang.php | 269 +++++++++++++------ modules/backend/models/Preference.php | 1 + modules/cms/lang/ru/lang.php | 64 ++++- modules/cms/lang/uk/lang.php | 359 ++++++++++++++++++++++++++ modules/system/lang/en/lang.php | 5 +- modules/system/lang/ru/client.php | 2 - modules/system/lang/ru/lang.php | 16 +- modules/system/lang/uk/client.php | 88 +++++++ modules/system/lang/uk/lang.php | 333 ++++++++++++++++++++++++ modules/system/lang/uk/validation.php | 99 +++++++ 11 files changed, 1201 insertions(+), 91 deletions(-) create mode 100644 modules/cms/lang/uk/lang.php create mode 100644 modules/system/lang/uk/client.php create mode 100644 modules/system/lang/uk/lang.php create mode 100644 modules/system/lang/uk/validation.php diff --git a/modules/backend/lang/ru/lang.php b/modules/backend/lang/ru/lang.php index 0809c95c2..30dda3e88 100644 --- a/modules/backend/lang/ru/lang.php +++ b/modules/backend/lang/ru/lang.php @@ -6,6 +6,7 @@ return [ ], 'field' => [ 'invalid_type' => 'Использован неверный тип поля: :type.', + 'options_method_invalid_model' => "The attribute ':field' does not resolve to a valid model. Try specifying the options method for model class :model explicitly.", 'options_method_not_exists' => "Класс модели :model должен содержать метод :method(), возвращающий опции для поля формы ':field'." ], 'widget' => [ @@ -19,6 +20,11 @@ return [ 'help' => 'У вас нет необходимых прав для просмотра этой страницы.', 'cms_link' => 'Перейти к CMS' ], + 'no_database' => [ + 'label' => 'Отсутствует база данных', + 'help' => "Для доступа к серверу требуется база данных. Проверьте, что база данных настроена и перенесена, прежде чем повторять попытку.", + 'cms_link' => 'Вернуться на главную страницу' + ], 'invalid_token' => [ 'label' => 'Неверный токен безопасности' ] @@ -157,9 +163,12 @@ return [ 'missing_column' => 'Нет никаких определений столбца для :columns.', 'missing_columns' => 'Список используемый в :class не имеет никаких столбцов.', 'missing_definition' => "Поведение списка не содержит столбец для ':field'.", + 'missing_parent_definition' => "Поведение списка не содержит определения для ':definition'.", 'behavior_not_ready' => 'Поведение списка не было инициализировано, проверьте вызов makeLists() в вашем контроллере.', 'invalid_column_datetime' => "Значение столбца ':column' не является объектом DateTime. Отсутствует \$dates ссылка в модели?", 'pagination' => 'Отображено записей: :from-:to из :total', + 'first_page' => 'Первая страница', + 'last_page' => 'Последняя страница', 'prev_page' => 'Предыдущая страница', 'next_page' => 'Следующая страница', 'refresh' => 'Обновить', @@ -169,6 +178,7 @@ return [ 'setup_help' => 'Используйте флажки для выбора колонок, которые вы хотите видеть в списке. Вы можете изменить положение столбцов, перетаскивая их вверх или вниз.', 'records_per_page' => 'Записей на странице', 'records_per_page_help' => 'Выберите количество записей на странице для отображения. Обратите внимание, что большое количество записей на одной странице может привести к снижению производительности.', + 'check' => 'Проверить', 'delete_selected' => 'Удалить выбранное', 'delete_selected_empty' => 'Нет выбранных записей для удаления.', 'delete_selected_confirm' => 'Удалить выбранные записи?', @@ -195,6 +205,7 @@ return [ 'create_success' => ':name был успешно создан', 'update_success' => ':name был успешно сохранен', 'delete_success' => ':name был успешно удален', + 'reset_success' => 'Сброс завершен', 'missing_id' => 'Идентификатор формы записи не указан.', 'missing_model' => 'Для формы используемой в :class не определена модель.', 'missing_definition' => "Поведение формы не содержит поле для':field'.", @@ -231,6 +242,7 @@ return [ 'confirm_tab_close' => 'Закрыть вкладку? Несохраненные изменения будут потеряны.', 'behavior_not_ready' => 'Поведение формы не было инициализировано, проверьте вызов initForm() в вашем контроллере.', 'preview_no_files_message' => 'Нет загруженных файлов.', + 'preview_no_media_message' => 'Нет выбраного медиа.', 'preview_no_record_message' => 'Нет выбранных записей.', 'select' => 'Выбрать', 'select_all' => 'все', @@ -244,7 +256,12 @@ return [ 'return_to_list' => 'Вернуться к списку' ], 'recordfinder' => [ - 'find_record' => 'Найти запись' + 'find_record' => 'Найти запись', + 'cancel' => 'Отмена', + ], + 'pagelist' => [ + 'page_link' => 'Ссылка на страницу', + 'select_page' => 'Выберите страницу...' ], 'relation' => [ 'missing_config' => "Поведение отношения не имеет конфигурации для ':config'.", @@ -296,7 +313,8 @@ return [ 'tips' => 'Подсказки по конфигурации системы', 'tips_description' => 'Есть проблемы, на которые стоит обратить внимание, чтобы правильно настроить систему.', 'permissions' => 'Каталог :name или его подкаталоги недоступны для записи. Укажите соответствующие разрешения для веб-сервера.', - 'extension' => 'Расширение PHP :name не установлено. Установите эту библиотеку и активируйте расширение.' + 'extension' => 'Расширение PHP :name не установлено. Установите эту библиотеку и активируйте расширение.', + 'plugin_missing' => 'Плагин :name имеет зависимость. Установите этот плагин.', ], 'editor' => [ 'menu_label' => 'Настройки редактора', @@ -305,6 +323,8 @@ return [ 'tab_size' => 'Размер табуляции', 'use_hard_tabs' => 'Использовать табуляцию для индентации', 'code_folding' => 'Свертывание кода', + 'code_folding_begin' => 'Mark begin', + 'code_folding_begin_end' => 'Mark begin and end', 'autocompletion' => 'Автодополнение', 'word_wrap' => 'Перенос слов', 'highlight_active_line' => 'Подсвечивать активную строку', @@ -367,7 +387,7 @@ return [ 'colors' => 'Цвета', 'primary_color' => 'Первичный color', 'secondary_color' => 'Вторичный color', - 'accent_color' => 'Accent color', + 'accent_color' => 'Цвет акцента', 'styles' => 'Стили', 'custom_stylesheet' => 'Пользовательские стили', 'navigation' => 'Навигация', @@ -443,5 +463,35 @@ return [ 'column_preview' => 'Предпросмотр столбца', 'file_not_found_error' => 'Файл не найден', 'empty_error' => 'Нет данных доступных для экспорта', + 'empty_import_columns_error' => 'Укажите некоторые столбцы для импорта.', + 'match_some_column_error' => 'Сначала сначала сопоставьте некоторые столбцы.', + 'required_match_column_error' => 'Укажите соответствующее поле :label.', + 'empty_export_columns_error' => 'Укажите некоторые столбцы для экспорта.', + 'behavior_missing_uselist_error' => "Вы должны реализовать поведение контроллера ListController с включенной опцией 'useList' экспорта.", + 'missing_model_class_error' => 'Укажите свойство modelClass для :type', + 'missing_column_id_error' => 'Отсутствует идентификатор столбца', + 'unknown_column_error' => 'Неизвестная колонка', + 'encoding_not_supported_error' => 'Кодировка исходного файла не распознается. Пожалуйста, выберите опцию пользовательского формата файла с правильной кодировкой для импорта файла.', + 'encoding_format' => 'Кодирование файлов', + 'encodings' => [ + 'utf_8' => 'UTF-8', + 'us_ascii' => 'US-ASCII', + 'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)', + 'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)', + 'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)', + 'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)', + 'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)', + 'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)', + 'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)', + 'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)', + 'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)', + 'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)', + 'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)', + 'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)', + 'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)', + 'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)', + 'windows_1251' => 'Windows-1251 (CP1251)', + 'windows_1252' => 'Windows-1252 (CP1252)' + ] ], ]; diff --git a/modules/backend/lang/uk/lang.php b/modules/backend/lang/uk/lang.php index ca9b9df1f..ac1332f4e 100644 --- a/modules/backend/lang/uk/lang.php +++ b/modules/backend/lang/uk/lang.php @@ -1,58 +1,66 @@ [ - 'title' => 'Зона адміністрування' + 'title' => 'Зона адміністрування', ], 'field' => [ - 'invalid_type' => 'Використано неправиоьний тип поля :type.', - 'options_method_not_exists' => "Клас моделі :model повинен визначати метод :method(), що повертає опції для ':field' з поля." + 'invalid_type' => 'Неправильний тип поля :type.', + 'options_method_invalid_model' => "The attribute ':field' does not resolve to a valid model. Try specifying the options method for model class :model explicitly.", + 'options_method_not_exists' => "Клас моделі :model повинен містити метод :method(), що повертає опції для поля ':field'.", ], 'widget' => [ - 'not_registered' => "Назву класу віджету «:name»не зареєстровано", - 'not_bound' => "Назву класу віджету «:name» не прив'зано до контролера" + 'not_registered' => "Назву класу віджету ':name' не зареєстровано", + 'not_bound' => "Клас віджета ':name' не прив'зано до контролера", ], 'page' => [ 'untitled' => 'Без назви', 'access_denied' => [ - 'label' => 'Заборонено доступ', - 'help' => "У Вас немає необхідних для перегляду цієї сторінки прав.", - 'cms_link' => 'Повернутися до back-end-у' + 'label' => 'Доступ заборонено', + 'help' => 'У Вас немає необхідних прав для перегляду цієї сторінки.', + 'cms_link' => 'Повернутися до back-end-у', + ], + 'no_database' => [ + 'label' => 'База данних відсутня', + 'help' => 'Для доступу до back-end - потрібна база данних. Перевірте, налаштування та міграції бази данних, перш ніж спробувати знову.', + 'cms_link' => 'Повернутися на домашню сторінку', ], 'invalid_token' => [ - 'label' => 'Неправильний токен безпеки' - ] + 'label' => 'Неправильний токен безпеки', + ], ], 'partial' => [ - 'not_found_name' => "Частину «:name» не знайдено." + 'not_found_name' => "Частину ':name' не знайдено.", ], 'account' => [ 'sign_out' => 'Вийти', 'login' => 'Увійти', 'reset' => 'Скинути', 'restore' => 'Відновити', - 'login_placeholder' => "ім'я користувача", + 'login_placeholder' => 'логін', 'password_placeholder' => 'пароль', 'forgot_password' => 'Забули свій пароль?', 'enter_email' => 'Введіть свою електронну адресу', - 'enter_login' => "Введіть своє ім'я користувача", + 'enter_login' => 'Введіть своє ім\'я користувача', 'email_placeholder' => 'електронна адреса', 'enter_new_password' => 'Введіть новий пароль', 'password_reset' => 'Скинути пароль', 'restore_success' => 'На Вашу електронну адресу було надіслано інструкції з відновлення паролю.', - 'restore_error' => "Неможливо знайти користувача з іменем користувача «:login»", + 'restore_error' => "Неможливо знайти користувача з іменем користувача ':login'", 'reset_success' => 'Ваш пароль було успішно змінено. Тепер Ви можете ввійти.', 'reset_error' => 'Надано неправильні дані з відновлення паролю. Будь ласка, спробуйте знову!', 'reset_fail' => 'Не вдалося змінити Ваш пароль!', 'apply' => 'Застосувати', 'cancel' => 'Скасувати', 'delete' => 'Вилучити', - 'ok' => 'ОК' + 'ok' => 'ОК', ], 'dashboard' => [ - 'menu_label' => 'Панель', + 'menu_label' => 'Панель керування', 'widget_label' => 'Віджет', 'widget_width' => 'Ширина', 'full_width' => 'повна ширина', + 'manage_widgets' => 'Керування віджетами', 'add_widget' => 'Додати віджет', 'widget_inspector_title' => 'Налаштування віджету', 'widget_inspector_description' => 'Налаштування віджету-звіту', @@ -64,12 +72,37 @@ return [ 'widget_new_row_description' => 'Помістити віджет у новий рядок.', 'widget_title_label' => 'Назва віджету', 'widget_title_error' => 'Назва віджету є обов\'язковою.', + 'reset_layout' => 'Скидання макета', + 'reset_layout_confirm' => 'Ви дійсно хочете встановити за замовчуванням?', + 'reset_layout_success' => 'Макет був скинутий', + 'make_default' => 'Використовувати за замовчуванням', + 'make_default_confirm' => 'Встановіть поточну схему розташування за замовчуванням?', + 'make_default_success' => 'Поточне розташування тепер за замовчуванням', + 'collapse_all' => 'Згорнути', + 'expand_all' => 'Розгорнути', 'status' => [ 'widget_title_default' => 'Статус системи', - 'online' => 'онлайн', - 'maintenance' => 'у технічному обслугованні', - 'update_available' => 'Доступно {0} оновлень!|Доступно {1} оновлення!|Доступно [2,4] оновленя|Доступно [5,Inf] оновлень!' - ] + 'update_available' => 'Доступно {0} оновлень!|Доступно {1} оновлення!|Доступно [2,4] оновленя|Доступно [5,Inf] оновлень!', + 'updates_pending' => 'В очікуванні оновлення програмного забезпечення', + 'updates_nil' => 'Програмне забезпечення в актуальному стані', + 'updates_link' => 'Оновити', + 'warnings_pending' => 'Деякі питання потребують уваги', + 'warnings_nil' => 'Немає попереджень для відображення', + 'warnings_link' => 'Переглянути', + 'core_build' => 'Версія системи', + 'event_log' => 'Журнал подій', + 'request_log' => 'Журнал запитів', + 'app_birthday' => 'Сайт засновано', + ], + 'welcome' => [ + 'widget_title_default' => 'Ласкаво просимо', + 'welcome_back_name' => 'Ласкаво просимо до :app, :name.', + 'welcome_to_name' => 'Ласкаво просимо до :app, :name.', + 'first_sign_in' => 'Це ваша перша авторизація.', + 'last_sign_in' => 'Дата останньої авторизації', + 'view_access_logs' => 'Перегляд журналів доступу', + 'nice_message' => 'Гарного дня!', + ], ], 'user' => [ 'name' => 'Адміністратор', @@ -77,10 +110,10 @@ return [ 'menu_description' => 'Керування адміністративними користувачами, групами та дозволами back-end-у.', 'list_title' => 'Керування адміністраторами', 'new' => 'Новий адміністратор', - 'login' => "Ім'я користувача", - 'first_name' => "Ім'я", + 'login' => 'Логін', + 'first_name' => 'Ім\'я', 'last_name' => 'Прізвище', - 'full_name' => "Повне ім'я", + 'full_name' => 'Повне ім\'я', 'email' => 'Електронна пошта', 'groups' => 'Групи', 'groups_comment' => 'Вкажіть до яких груп повинен належати цей обліковий запис.', @@ -89,20 +122,26 @@ return [ 'password_confirmation' => 'Підтвердження паролю', 'permissions' => 'Дозволи', 'account' => 'Обліковий запис', - 'superuser' => 'Супер-користувач', - 'superuser_comment' => 'Надає цьому обліковому запису необмежений доступ до всіх зон.', + 'superuser' => 'Супер-адміністратор', + 'superuser_comment' => 'Надає цьому обліковому запису необмежений доступ.', 'send_invite' => 'Надіслати запрошення за електронною адресою', - 'send_invite_comment' => "Надсилає вітальне повідомлення, що містить інформацію про ім'я користувача та пароль.", + 'send_invite_comment' => 'Надсилає вітальне повідомлення, що містить інформацію про ім\'я користувача та пароль.', 'delete_confirm' => 'Ви дійсно хочете вилучити цього адміністратора?', 'return' => 'Повернутися до списку адміністраторів', 'allow' => 'Дозволити', 'inherit' => 'Успадкувати', 'deny' => 'Заборонити', + 'activated' => 'Активований', + 'last_login' => 'Останній вхід', + 'created_at' => 'Створено', + 'updated_at' => 'Оновлено', 'group' => [ 'name' => 'Група', + 'name_comment' => 'Назва відображається на сторінці стоврення/редагування адміністратора.', 'name_field' => 'Назва', 'description_field' => 'Опис', - 'is_new_user_default_field' => 'Додавати нових адміністраторів до цієї групи за замовчуванням.', + 'is_new_user_default_field_label' => 'Група за замовчуванням', + 'is_new_user_default_field_comment' => 'Додавання нових адміністраторів в цю групу за замовчуванням', 'code_field' => 'Код', 'code_comment' => 'Введіть унікальний код якщо Ви хочете отримувати до неї доступ через API.', 'menu_label' => 'Групи', @@ -110,11 +149,11 @@ return [ 'new' => 'Нова група', 'delete_confirm' => 'Ви дійсно хочете вилучити цю групу адміністраторів?', 'return' => 'Повернутись до списку груп', - 'users_count' => 'Користувачі' + 'users_count' => 'Користувачі', ], 'preferences' => [ - 'not_authenticated' => 'Немає автентифікованих користувачів, чиї налаштування можна завантажити або зберегти.' - ] + 'not_authenticated' => 'Немає автентифікованих користувачів, чиї налаштування можна завантажити або зберегти.', + ], ], 'list' => [ 'default_title' => 'Список', @@ -123,10 +162,13 @@ return [ 'missing_model' => 'Поведінка списку, що використовується в :class не містить визначення моделі.', 'missing_column' => 'Немає визначень колонок для :columns.', 'missing_columns' => 'Список використаний в :class не містить визначених колонок.', - 'missing_definition' => "Поведінка списку не містить колонки для «:field».", + 'missing_definition' => "Поведінка списку не містить колонки для ':field'.", + 'missing_parent_definition' => "Список поведінки не містить визначення ':definition'.", 'behavior_not_ready' => 'Поведінку списку не було ініціалізовано, перевірте чи Ви викликали makeLists() у своєму контролері.', - 'invalid_column_datetime' => "Значення колонки «:column» не є DateTime-об'єктом, Ви не пропускаєте посилання на \$dates посилання в моделі?", + 'invalid_column_datetime' => "Значення колонки ':column' не є DateTime-об'єктом, Ви не пропускаєте посилання на \$dates посилання в моделі?", 'pagination' => 'Показано записів: :from-:to з :total', + 'first_page' => 'Перша сторінка', + 'last_page' => 'Остання', 'prev_page' => 'Попередня сторінка', 'next_page' => 'Наступна сторінка', 'refresh' => 'Оновити', @@ -136,12 +178,13 @@ return [ 'setup_help' => 'Використовуйте позначки для вибору колонок, які Ви хочете бачити в списку. Ви моєете змінювати позиції колонок перетягуючи їх вниз-вгору.', 'records_per_page' => 'Записів на сторінку', 'records_per_page_help' => 'Оберіть число записів на сторінку для показу. Будь ласка, зауважте, що велике число записів на одну сторінку може зменшити швидкодію.', + 'check' => 'Перевірити', 'delete_selected' => 'Вилучити обрані', 'delete_selected_empty' => 'Немає обраних до вилучення записів.', 'delete_selected_confirm' => 'Вилучити обрані записи?', 'delete_selected_success' => 'Успішно вилучено обрані записи.', 'column_switch_true' => 'Так', - 'column_switch_false' => 'Ні' + 'column_switch_false' => 'Ні', ], 'fileupload' => [ 'attachment' => 'Прикріплення', @@ -153,18 +196,19 @@ return [ 'upload_file' => 'Завантажити файл', 'upload_error' => 'Помилка завантаження', 'remove_confirm' => 'Ви впевнені?', - 'remove_file' => 'Вилучити файл' + 'remove_file' => 'Вилучити файл', ], 'form' => [ 'create_title' => 'Нова :name', 'update_title' => 'Редагувати :name', 'preview_title' => 'Попередній перегляд :name', - 'create_success' => ':name було успішно створено', - 'update_success' => ':name було успішно оновлено', - 'delete_success' => ':name було успішно вилучено', + 'create_success' => ':name створено', + 'update_success' => ':name оновлено', + 'delete_success' => ':name вилучено', + 'reset_success' => 'Успішно скасовано', 'missing_id' => 'Ідентифікатор запису форми не було вказано.', 'missing_model' => 'Поведінка форми, що використовується в :class не містить визначення моделі.', - 'missing_definition' => "Поведніка форми не містить поля для «:field».", + 'missing_definition' => "Поведніка форми не містить поля для ':field'.", 'not_found' => 'Запис форми з ідентифікатором :id не знайдено.', 'action_confirm' => 'Ви впевнені?', 'create' => 'Створити', @@ -198,6 +242,7 @@ return [ 'confirm_tab_close' => 'Ви дійсно хочете закрити цю вкладку? Незбережені зміни буде втрачено.', 'behavior_not_ready' => 'Поведінку форми не було ініціалізовано, перевірте чи Ви викликали initForm() у своєму контролері.', 'preview_no_files_message' => 'Немає завантажених файлів.', + 'preview_no_media_message' => 'Немає обраного файла.', 'preview_no_record_message' => 'Немає обраних записів.', 'select' => 'Обрати', 'select_all' => 'всі', @@ -207,15 +252,20 @@ return [ 'insert_row_below' => 'Вставити рядок нижче', 'delete_row' => 'Вилучити рядок', 'concurrency_file_changed_title' => 'Файл було змінено', - 'concurrency_file_changed_description' => "Файл, що Ви редагуєте, було змінено на диску іншим користувачем. Ви можете або перезавантажити файл та втратити свої зміни, або перезаписати файл на диску.", - 'return_to_list' => 'Повернутися до списку' + 'concurrency_file_changed_description' => 'Файл, що Ви редагуєте, було змінено на диску іншим користувачем. Ви можете або перезавантажити файл та втратити свої зміни, або перезаписати файл на диску.', + 'return_to_list' => 'Повернутися до списку', ], 'recordfinder' => [ - 'find_record' => 'Знайти запис' + 'find_record' => 'Знайти запис', + 'cancel' => 'Скасувати', + ], + 'pagelist' => [ + 'page_link' => 'Посилання на сторінку', + 'select_page' => 'Обрати сторынку...', ], 'relation' => [ - 'missing_config' => "Поведінка відношення не містить жодного налаштування для «:config».", - 'missing_definition' => "Поведінка відношення не містить визначення для «:field».", + 'missing_config' => "Поведінка відношення не містить жодного налаштування для ':config'.", + 'missing_definition' => "Поведінка відношення не містить визначення для ':field'.", 'missing_model' => 'Поведінка відношення, що використовується в :class не містить визначення моделі.', 'invalid_action_single' => 'Ця дія не може бути здійсненою щодо одного відношення.', 'invalid_action_multi' => 'Ця дія не може бути здійснена щодо кількох відношень.', @@ -224,8 +274,8 @@ return [ 'add' => 'Додати', 'add_selected' => 'Додати обрані', 'add_a_new' => 'Додати нове :name', - 'link_selected' => "Обрано зв'язок", - 'link_a_new' => "Прив'язати нове :name", + 'link_selected' => 'Обрано зв\'язок', + 'link_a_new' => 'Прив\'язати нове :name', 'cancel' => 'Скасувати', 'close' => 'Закрити', 'add_name' => 'Додати :name', @@ -240,11 +290,11 @@ return [ 'delete' => 'Вилучити', 'delete_name' => 'Вилучити :name', 'delete_confirm' => 'Ви впевнені?', - 'link' => "Пов'язати", - 'link_name' => "Пов'язати :name", - 'unlink' => "Відв'язати", - 'unlink_name' => "Відв'язати :name", - 'unlink_confirm' => 'Ви впевнені?' + 'link' => 'Пов\'язати', + 'link_name' => 'Пов\'язати :name', + 'unlink' => 'Відв\'язати', + 'unlink_name' => 'Відв\'язати :name', + 'unlink_confirm' => 'Ви впевнені?', ], 'reorder' => [ 'default_title' => 'Перевпорядкувати записи', @@ -252,18 +302,19 @@ return [ ], 'model' => [ 'name' => 'Модель', - 'not_found' => "Модель «:class» з ідентифікатором :id не знайдено", + 'not_found' => "Модель ':class' з ідентифікатором :id не знайдено", 'missing_id' => 'Не вказано ідентифікатор для пошуку запису моделі.', - 'missing_relation' => "Модель «:class» не містить визначення для «:relation».", - 'missing_method' => "Модель «:class» не містить метод «:method».", + 'missing_relation' => "Модель ':class' не містить визначення для ':relation'.", + 'missing_method' => "Модель ':class' не містить метод ':method'.", 'invalid_class' => "Модель :model використана в :class не є правильною, вона повинна успадковувати клас \Model .", - 'mass_assignment_failed' => "Масове призначення не вдалось для атрибуту «:attribute» моделі." + 'mass_assignment_failed' => "Масове призначення не вдалось для атрибуту ':attribute' моделі.", ], 'warnings' => [ 'tips' => 'Підказки з налаштування системи', 'tips_description' => 'Є речі, на які потрібно звернути увагу щоб правильно налаштувати систему.', - 'permissions' => 'Директорія :name та її субдиректорії не мають дозволу для запису для PHP. Будь ласка, встановіть відповідні дозволи для веб-серверу для цієї директорії.', - 'extension' => 'Розширення PHP :name не встановлено. Будь ласка, встановіть цю бібліотеку та активуйте розширення.' + 'permissions' => 'Директорія :name та її субдиректорії не мають дозволу для запису для PHP. Будь ласка, встановіть відповідні дозволи для веб-серверу для цієї директорії.', + 'extension' => 'Розширення PHP :name не встановлено. Будь ласка, встановіть цю бібліотеку та активуйте розширення.', + 'plugin_missing' => 'Плагін :name має залежності, які не встановлено. Будь ласка, встановіть ці плагіни.', ], 'editor' => [ 'menu_label' => 'Налаштування редактору коду', @@ -272,28 +323,60 @@ return [ 'tab_size' => 'Розмір табуляції', 'use_hard_tabs' => 'Відступ табуляціями', 'code_folding' => 'Згортання коду', + 'code_folding_begin' => 'Mark begin', + 'code_folding_begin_end' => 'Mark begin and end', + 'autocompletion' => 'Заповнити форму', 'word_wrap' => 'Перенос слів', 'highlight_active_line' => 'Підсвічувати активні рядки', 'auto_closing' => 'Автоматично закривати теги та спецсимволи', 'show_invisibles' => 'Показувати невидимі символи', 'show_gutter' => 'Показувати нумерацію рядків', - 'theme' => 'Кольорова схема' + 'basic_autocompletion' => 'Автозаповнення (Ctrl + Space)', + 'live_autocompletion' => 'Живе автозаповнення', + 'enable_snippets' => 'Увімкнути фрагменти коду (Tab)', + 'display_indent_guides' => 'Показати відступ напрямних', + 'show_print_margin' => 'Показати запас друку', + 'mode_off' => 'Off', + 'mode_fluid' => 'Fluid', + '40_characters' => '40 символів', + '80_characters' => '80 символів', + 'theme' => 'Кольорова схема', + 'markup_styles' => 'Markup Styles', + 'custom_styles' => 'Custom stylesheet', + 'custom styles_comment' => 'Custom styles to include in the HTML editor.', + 'markup_classes' => 'Markup Classes', + 'paragraph' => 'Paragraph', + 'link' => 'Посилання', + 'table' => 'Таблиця', + 'table_cell' => 'Table Cell', + 'image' => 'Зображення', + 'label' => 'Назва поля', + 'class_name' => 'Назва класу', + 'markup_tags' => 'Markup Tags', + 'allowed_empty_tags' => 'Дозволені порожні теги', + 'allowed_empty_tags_comment' => 'Контактні дані, які не видаляються, коли вони не мають ніякого змісту всередині.', + 'allowed_tags' => 'Дозволені теги', + 'allowed_tags_comment' => 'Список дозволених тегів.', + 'no_wrap' => 'Do not wrap tags', + 'no_wrap_comment' => 'The list of tags that should not be wrapped inside block tags.', + 'remove_tags' => 'Видаляємі теги', + 'remove_tags_comment' => 'Теги які видаляються разом з їх вмістом.', ], 'tooltips' => [ - 'preview_website' => 'Попередній перегляд веб-сайту' + 'preview_website' => 'Попередній перегляд веб-сайту', ], 'mysettings' => [ 'menu_label' => 'Мої налаштування', - 'menu_description' => 'Налаштування, що стосуються Вашого адміністративного облікового запису' + 'menu_description' => 'Налаштування, що стосуються Вашого адміністративного облікового запису', ], 'myaccount' => [ 'menu_label' => 'Мій обліковий запис', - 'menu_description' => "Оновіть свої деталі облікового запису, такі як ім'я, електронна адреса та пароль.", - 'menu_keywords' => "безпека ім'я користувача" + 'menu_description' => 'Оновіть свої деталі облікового запису, такі як ім\'я, електронна адреса та пароль.', + 'menu_keywords' => 'безпека ім\'я користувача', ], 'branding' => [ 'menu_label' => 'Налаштування вигляду back-end-у', - 'menu_description' => "Налаштуйте адміністративну зону, зокрема ім'я, кольори та лого.", + 'menu_description' => 'Налаштуйте адміністративну зону, зокрема ім\'я, кольори та лого.', 'brand' => 'Бренд', 'logo' => 'Лого', 'logo_description' => 'Завантажити власне лого для використання в back-end-і.', @@ -302,32 +385,42 @@ return [ 'app_tagline' => 'Девіз додатку', 'app_tagline_description' => 'Ця назва покахується на екрані входу до back-end-у.', 'colors' => 'Кольори', - 'primary_light' => 'Основний (світлий)', - 'primary_dark' => 'Основний (темний)', - 'secondary_light' => 'Вторинний (світлий)', - 'secondary_dark' => 'Вторинний (темний)', + 'primary_color' => 'Основний колір', + 'secondary_color' => 'Вторинний колір', + 'accent_color' => 'Акцентний колір', 'styles' => 'Стилі', - 'custom_stylesheet' => 'Власна таблиця стилів' + 'custom_stylesheet' => 'Власна таблиця стилів', + 'navigation' => 'Навігація', + 'menu_mode' => 'Cтиль меню', + 'menu_mode_inline' => 'В лінію', + 'menu_mode_tile' => 'Плитка', + 'menu_mode_collapsed' => 'Collapsed', ], 'backend_preferences' => [ 'menu_label' => 'Налаштування back-end-у', 'menu_description' => 'Керуйте своїми налаштуваннями облікового запису, як то бажана мова.', + 'region' => 'Область', + 'code_editor' => 'Редактор коду', + 'timezone' => 'Часовий пояс', + 'timezone_comment' => 'Відрегулюйте відображені дати до цього часового поясу.', 'locale' => 'Мова', - 'locale_comment' => 'Оберіть свою бажану локаль мови для використання.' + 'locale_comment' => 'Оберіть свою бажану локаль мови для використання.', ], 'access_log' => [ 'hint' => 'Цей журнал показує список успішних спроб входу адміністраторів. Записи зберігаються для :days днів.', 'menu_label' => 'Журнал доступу', 'menu_description' => 'Дивитись список успішних входів користувачів back-end-у.', 'created_at' => 'Дата та час', - 'login' => "Ім'я користувача", + 'login' => 'Ім\'я користувача', 'ip_address' => 'IP-адреса', - 'first_name' => "Ім'я", + 'first_name' => 'Ім\'я', 'last_name' => 'Прізвище', - 'email' => 'Електронна адреса' + 'email' => 'Електронна адреса', ], 'filter' => [ - 'all' => 'усі' + 'all' => 'всі', + 'options_method_not_exists' => "Модель класу :model повинна містити метод :method() який повертає значення для поля ':filter'.", + 'date_all' => 'all period', ], 'import_export' => [ 'upload_csv_file' => '1. Завантажити CSV-файл', @@ -369,6 +462,36 @@ return [ 'export_error' => 'Помилка експорту', 'column_preview' => 'Попередній перегляд колонки', 'file_not_found_error' => 'Файл не знайдено', - 'empty_error' => 'Не вказано даних для експорту' + 'empty_error' => 'Не вказано даних для експорту', + 'empty_import_columns_error' => 'Please specify some columns to import.', + 'match_some_column_error' => 'Please match some columns first.', + 'required_match_column_error' => 'Please specify a match for the required field :label.', + 'empty_export_columns_error' => 'Будь ласка, вкажіть деякі стовпці для експорту.', + 'behavior_missing_uselist_error' => 'Необхідно реалізувати поведінку контролера ListController з експортом "useList".', + 'missing_model_class_error' => 'Будь ласка, вкажіть властивість modelClass для типу :type', + 'missing_column_id_error' => 'Відсутній ідентифікатор стовпця', + 'unknown_column_error' => 'Невідомий стовпець', + 'encoding_not_supported_error' => 'Кодування вихідного файлу не розпізнається. Будь ласка, оберіть відповідний формать кодування для імпорту файлу.', + 'encoding_format' => 'Кодування файлу', + 'encodings' => [ + 'utf_8' => 'UTF-8', + 'us_ascii' => 'US-ASCII', + 'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)', + 'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)', + 'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)', + 'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)', + 'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)', + 'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)', + 'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)', + 'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)', + 'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)', + 'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)', + 'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)', + 'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)', + 'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)', + 'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)', + 'windows_1251' => 'Windows-1251 (CP1251)', + 'windows_1252' => 'Windows-1252 (CP1252)', + ], ], ]; diff --git a/modules/backend/models/Preference.php b/modules/backend/models/Preference.php index 0ded1ab89..866ef6b5a 100644 --- a/modules/backend/models/Preference.php +++ b/modules/backend/models/Preference.php @@ -160,6 +160,7 @@ class Preference extends Model 'ru' => [Lang::get('system::lang.locale.ru'), 'flag-ru'], 'sv' => [Lang::get('system::lang.locale.sv'), 'flag-se'], 'tr' => [Lang::get('system::lang.locale.tr'), 'flag-tr'], + 'uk' => [Lang::get('system::lang.locale.uk'), 'flag-ua'], 'pl' => [Lang::get('system::lang.locale.pl'), 'flag-pl'], 'sk' => [Lang::get('system::lang.locale.sk'), 'flag-sk'], 'zh-cn' => [Lang::get('system::lang.locale.zh-cn'), 'flag-cn'], diff --git a/modules/cms/lang/ru/lang.php b/modules/cms/lang/ru/lang.php index bc8c38f5e..41d8446fe 100644 --- a/modules/cms/lang/ru/lang.php +++ b/modules/cms/lang/ru/lang.php @@ -7,10 +7,11 @@ return [ 'file_already_exists' => "Файл ':name' уже существует.", 'error_saving' => "Ошибка сохранения файла ':name'. Пожалуйста, проверьте права на запись.", 'error_creating_directory' => 'Ошибка создания директории :name. Пожалуйста, проверьте права на запись.', - 'invalid_file_extension'=>'Указано неправильное расширение файла: :invalid. Разрешенные расширения: :allowed.', + 'invalid_file_extension' => 'Указано неправильное расширение файла: :invalid. Разрешенные расширения: :allowed.', 'error_deleting' => "Невозможно удалить файл шаблона ':name'. Пожалуйста, проверьте права на запись.", 'delete_success' => 'Шаблоны были успешно удалены: :count.', - 'file_name_required' => 'Пожалуйста, укажите имя файла шаблона.' + 'file_name_required' => 'Пожалуйста, укажите имя файла шаблона.', + 'safe_mode_enabled' => 'В настоящий момент включен безопасный режим.', ], 'dashboard' => [ 'active_theme' => [ @@ -22,7 +23,8 @@ return [ ] ], 'theme' => [ - 'not_found_name' => "Тема ':name' не найдена.", + 'not_found_name' => "Тема ':name' не найдена.", + 'by_author' => 'By :name', 'active' => [ 'not_set' => 'Активная тема не установлена.', 'not_found' => 'Активная тема не найдена.' @@ -45,8 +47,10 @@ return [ 'homepage_placeholder' => 'Адрес сайта', 'code_label' => 'Уникальный код', 'code_placeholder' => 'Уникальный код темы, который используются для её распространения', - 'dir_name_create_label' => 'Директория темы', + 'preview_image_label' => 'Предварительный просмотр', + 'preview_image_placeholder' => 'Путь изображения предварительного просмотра темы.', 'dir_name_label' => 'Имя директории', + 'dir_name_create_label' => 'Директория темы', 'theme_label' => 'Тема', 'theme_title' => 'Темы', 'activate_button' => 'Активировать', @@ -114,7 +118,11 @@ return [ 'invalid_url' => 'Неверный формат адреса. Адрес страницы должен начинаться со знака / и может содержать цифры, латинские буквы, и следующие знаки: ._-[]:?|/+*^$', 'delete_confirm_multiple' => 'Вы действительно хотите удалить выделенные страницы?', 'delete_confirm_single' => 'Вы действительно хотите удалить эту страницу?', - 'no_layout' => '-- без шаблона --' + 'no_layout' => '-- без шаблона --', + 'cms_page' => 'CMS страница', + 'title' => 'Заголовок страницы', + 'url' => 'Страница URL', + 'file_name' => 'Имя файла страницы' ], 'layout' => [ 'not_found_name' => "Не удалось найти шаблон (layout) с именем :name.", @@ -173,7 +181,11 @@ return [ 'hidden' => 'Скрытая страница', 'hidden_comment' => 'Скрытые страницы доступны только для вошедших в систему пользователей.', 'enter_fullscreen' => 'Войти в полноэкранный режим', - 'exit_fullscreen' => 'Выйти из полноэкранного режима' + 'exit_fullscreen' => 'Выйти из полноэкранного режима', + 'open_searchbox' => 'Открыть поле поиска', + 'close_searchbox' => 'Закрыть окно поиска', + 'open_replacebox' => 'Открыть поле "Заменить"', + 'close_replacebox' => 'Закрыть Заменить коробку' ], 'asset' => [ 'menu_label' => 'Ресурсы', @@ -215,6 +227,8 @@ return [ 'error_moving_file' => 'Не удалось переместить файл :file', 'error_moving_directory' => 'Не удалось переместить директорию :dir', 'error_deleting_directory' => 'Не удалось удалить директорию :dir', + 'no_list_records' => 'Файлы не найдены', + 'delete_confirm' => 'Удалить выбранные файлы или каталоги?', 'path' => 'Путь' ], 'component' => [ @@ -232,7 +246,10 @@ return [ 'template' => [ 'invalid_type' => 'Неизвестный тип шаблона.', 'not_found' => 'Запрошенный шаблон не найден.', - 'saved'=> 'Шаблон был успешно сохранен.' + 'saved' => 'Шаблон был успешно сохранен.', + 'no_list_records' => 'Записи не найдены', + 'delete_confirm' => 'Удалить выбранные шаблоны?', + 'order_by' => 'Сортировать по' ], 'permissions' => [ 'name' => 'Управление CMS', @@ -245,6 +262,7 @@ return [ 'manage_media' => 'Управление медиафайлами' ], 'mediafinder' => [ + 'label' => 'Поиск медиа', 'default_prompt' => 'Кликните на %s кнопку, чтобы найти медиафайл' ], 'media' => [ @@ -276,6 +294,7 @@ return [ 'uploading_file_num' => 'Загрузка файлов: :number', 'uploading_complete' => 'Загрузка файлов завершена!', 'uploading_error' => 'Ошибка загрузки', + 'type_blocked' => 'Используемый тип файла блокируется по соображениям безопасности.', 'order_by' => 'Сортировать по', 'folder' => 'Папка', 'no_files_found' => 'Ни один из файлов не удовлетворяет вашему запросу.', @@ -307,5 +326,34 @@ return [ 'resize_image' => 'Изменение размера изображения', 'image_size' => 'Размер изображения:', 'selected_size' => 'Выбрано:' - ] + ], + 'theme_log' => [ + 'hint' => 'В этом журнале отображаются изменения, внесенные в тему администраторами во внутренней области.', + 'menu_label' => 'Журнал тем', + 'menu_description' => 'Просмотр изменений, внесенных в активную тему.', + 'empty_link' => 'Пустой журнал темы', + 'empty_loading' => 'Освобождение журнала тем...', + 'empty_success' => 'Журнал тем опустошен', + 'return_link' => 'Вернуться к списку тем', + 'id' => 'ID', + 'id_label' => 'ID журнала', + 'created_at' => 'Дата & Время', + 'user' => 'Пользователь', + 'type' => 'Тип', + 'type_create' => 'Создайте', + 'type_update' => 'Обновить', + 'type_delete' => 'Удалить', + 'theme_name' => 'Тема', + 'theme_code' => 'Код темы', + 'old_template' => 'Шаблон (Старый)', + 'new_template' => 'Шаблон (новый)', + 'template' => 'Шаблон', + 'diff' => 'Изменения', + 'old_value' => 'Старое значение', + 'new_value' => 'Новое значение', + 'preview_title' => 'Изменение шаблона', + 'template_updated' => 'Шаблон обновлен', + 'template_created' => 'Шаблон был создан', + 'template_deleted' => 'Шаблон был удален', + ], ]; diff --git a/modules/cms/lang/uk/lang.php b/modules/cms/lang/uk/lang.php new file mode 100644 index 000000000..273a092a8 --- /dev/null +++ b/modules/cms/lang/uk/lang.php @@ -0,0 +1,359 @@ + [ + 'invalid_file' => 'Помилка в імені файлу: :name. Імена файлів можуть містити тільки латинські букви, цифри, знаки підкреслення і точки. Приклад правильних імен файлів: page.htm, page, subdirectory/page', + 'invalid_property' => "Параметр ':name' не можна змінити.", + 'file_already_exists' => "Файл ':name' вже існує.", + 'error_saving' => "Помилка збереження файлу ':name'. Будь ласка, перевірте права на запис.", + 'error_creating_directory' => 'Помилка створення директорії :name. Будь ласка, перевірте права на запис.', + 'invalid_file_extension' => 'Зазначено неправильне розширення файлу: :invalid. Дозволені розширення: :allowed.', + 'error_deleting' => "Неможливо видалити файл шаблону ':name'. Будь ласка, перевірте права на запис.", + 'delete_success' => 'Шаблони були успішно видалені: :count.', + 'file_name_required' => 'Будь ласка, вкажіть ім\'я файлу шаблону.', + 'safe_mode_enabled' => 'Безпечний режим включений в даний момент.', + ], + 'dashboard' => [ + 'active_theme' => [ + 'widget_title_default' => 'Веб-сайт', + 'online' => 'Онлайн', + 'maintenance' => 'В розробці', + 'manage_themes' => 'Управління темами', + 'customize_theme' => 'Налаштування теми', + ], + ], + 'theme' => [ + 'not_found_name' => "Тема ':name' не знайдена.", + 'by_author' => 'By :name', + 'active' => [ + 'not_set' => 'Активна тема не встановлена.', + 'not_found' => 'Активна тема не знайдена.', + ], + 'edit' => [ + 'not_set' => 'Тема для редагування не встановлена.', + 'not_found' => 'Тема для редагування не знайдено.', + 'not_match' => 'Об\'єкт, який ви намагаєтеся відкрити, не належить редагованої темі. Будь ласка, оновіть сторінку.', + ], + 'settings_menu' => 'Фронтенд теми', + 'settings_menu_description' => 'Перегляд списку встановлених тим і вибір активної теми.', + 'default_tab' => 'Властивості', + 'name_label' => 'Назва', + 'name_create_placeholder' => 'Нова назва теми', + 'author_label' => 'Автор', + 'author_placeholder' => 'Людина або назва компанії', + 'description_label' => 'Опис', + 'description_placeholder' => 'Опис теми', + 'homepage_label' => 'Домашня сторінка', + 'homepage_placeholder' => 'Адреса сайту', + 'code_label' => 'унікальний код', + 'code_placeholder' => 'Унікальний код теми, який використовуються для її поширення', + 'preview_image_label' => 'Попередній перегляд', + 'preview_image_placeholder' => 'Шлях до зображення для попереднього перегляду.', + 'dir_name_label' => 'Назва директорії', + 'dir_name_create_label' => 'Директорія теми', + 'theme_label' => 'Тема', + 'theme_title' => 'Теми', + 'activate_button' => 'Активувати', + 'active_button' => 'Активовано', + 'customize_theme' => 'Налаштування Теми', + 'customize_button' => 'Налаштувати', + 'duplicate_button' => 'Дублювати', + 'duplicate_title' => 'Дублювати тему', + 'duplicate_theme_success' => 'Дублювання успішно завершено!', + 'manage_button' => 'Управління', + 'manage_title' => 'Управління темою', + 'edit_properties_title' => 'Тема', + 'edit_properties_button' => 'Редагування властивостей', + 'save_properties' => 'Зберегти властивості', + 'import_button' => 'Імпортувати', + 'import_title' => 'Імпортувати тему', + 'import_theme_success' => 'Імпорт теми успішно завершено!', + 'import_uploaded_file' => 'Файл архіву теми', + 'import_overwrite_label' => 'Перезаписувати існуючі файли', + 'import_overwrite_comment' => 'Вимкніть цю опцію, щоб імпортувати тільки нові файли', + 'import_folders_label' => 'Директорії', + 'import_folders_comment' => 'Будь ласка, виберіть директорії теми, які ви хотіли б імпортувати', + 'export_button' => 'Експорт', + 'export_title' => 'експортувати тему', + 'export_folders_label' => 'Директорії', + 'export_folders_comment' => 'Будь ласка, виберіть директорії теми, які ви хотіли б експортувати', + 'delete_button' => 'Видалити', + 'delete_confirm' => 'Ви впевнені, що хочете видалити цю тему? Ця дія є незворотнім!', + 'delete_active_theme_failed' => 'Неможливо видалити активний тему, спробуйте зробити іншу тему активною.', + 'delete_theme_success' => 'Видалення теми успішно завершено!', + 'create_title' => 'створити тему', + 'create_button' => 'Створити', + 'create_new_blank_theme' => 'Створити новий бланк тими', + 'create_theme_success' => 'Створення тими успешно завершено!', + 'create_theme_required_name' => 'Будь ласка, вкажіть ім\'я для теми.', + 'new_directory_name_label' => 'Директорія теми', + 'new_directory_name_comment' => 'Вкажіть нове ім\'я каталогу для дубліката теми.', + 'dir_name_invalid' => 'Ім\'я може містити тільки цифри, латинські літери і такі символи: _ -', + 'dir_name_taken' => 'Зазначений каталог вже існує.', + 'find_more_themes' => 'Знайти ще теми', + 'saving' => 'Збереження теми...', + 'return' => 'Повернутися до списку тем', + ], + 'maintenance' => [ + 'settings_menu' => 'Режим обслуговування', + 'settings_menu_description' => 'Управління режимом обслуговування сайту.', + 'is_enabled' => 'Включити режим обслуговування', + 'is_enabled_comment' => 'При активації цього режиму відвідувачі сайту побачать сторінку обрану нижче.', + 'hint' => 'Режим обслуговування покаже сторінку обслуговування для відвідувачів, що не авторизувалися в CMS.', + ], + 'page' => [ + 'not_found_name' => "Сторінка ':name' не знайдена", + 'not_found' => [ + 'label' => 'Сторінка не знайдена', + 'help' => 'Запрошення сторінка не знайдена.', + ], + 'custom_error' => [ + 'label' => 'Помилка на сторінці', + 'help' => 'На жаль, сторінка не може бути відображена через помилку.', + ], + 'menu_label' => 'Сторінки', + 'unsaved_label' => 'Незбережена(і) сторінка(и)', + 'no_list_records' => 'Не знайденi', + 'new' => 'Нова сторінка', + 'invalid_url' => 'Невірний формат адреси. Адреса сторінки повинен починатися зі знака / і може містити цифри, латинські літери, і такі знаки: ._- [] :? | / + * ^ $', + 'delete_confirm_multiple' => 'Ви дійсно хочете видалити виділені сторінки?', + 'delete_confirm_single' => 'Ви дійсно хочете видалити цю сторінку?', + 'no_layout' => '-- без шаблону --', + 'cms_page' => 'CMS сторінка', + 'title' => 'Заголовок сторінки', + 'url' => 'URL сторінки', + 'file_name' => 'Файл сторінки', + ], + 'layout' => [ + 'not_found_name' => "Не вдалося знайти шаблон (layout) з ім'ям :name.", + 'menu_label' => 'Шаблони', + 'unsaved_label' => 'Незбережені (е) макет (и)', + 'no_list_records' => 'Шаблони не знайдені', + 'new' => 'Новий шаблон', + 'delete_confirm_multiple' => 'Ви дійсно хочете видалити виділені шаблони?', + 'delete_confirm_single' => 'Ви дійсно хочете видалити цей шаблон?', + ], + 'partial' => [ + 'not_found_name' => "Не вдалося знайти шаблон (partial) з ім'ям :name.", + 'invalid_name' => 'Помилка в імені шаблону (partial) :name.', + 'menu_label' => 'Фрагменти', + 'unsaved_label' => 'Незбережені (е) фрагмент (и)', + 'no_list_records' => 'Фрагменти не знайдені', + 'delete_confirm_multiple' => 'Ви дійсно хочете видалити виділені фрагменти?', + 'delete_confirm_single' => 'Ви дійсно хочете видалити цей фрагмент?', + 'new' => 'Новий фрагмент', + ], + 'content' => [ + 'not_found_name' => "Не вдалося знайти файл вмісту (content file): ':name'.", + 'menu_label' => 'Вміст', + 'unsaved_label' => 'Незбережені вміст', + 'no_list_records' => 'Файли з вмістом не знайдені', + 'delete_confirm_multiple' => 'Ви дійсно хочете видалити виділені файли?', + 'delete_confirm_single' => 'Ви дійсно хочете видалити цей файл?', + 'new' => 'Новий файл вмісту', + ], + 'ajax_handler' => [ + 'invalid_name' => 'Помилка в імені обробника AJAX: :name.', + 'not_found' => "Обробник AJAX не найден: ':name'.", + ], + 'cms' => [ + 'menu_label' => 'CMS', + ], + 'sidebar' => [ + 'add' => 'Додати', + 'search' => 'Пошук...', + ], + 'editor' => [ + 'settings' => 'Налаштування', + 'title' => 'Заголовок', + 'new_title' => 'Заголовок сторінки', + 'url' => 'Адреса', + 'filename' => 'Ім\'я файлу', + 'layout' => 'Шаблон', + 'description' => 'Опис', + 'preview' => 'Предпросмотр', + 'meta' => 'Метатеги', + 'meta_title' => 'Тема (meta)', + 'meta_description' => 'Опис (meta)', + 'markup' => 'Розмітка', + 'code' => 'Код', + 'content' => 'Зміст', + 'hidden' => 'прихована сторінка', + 'hidden_comment' => 'Приховані сторінки доступні тільки для ввійшли в систему користувачів.', + 'enter_fullscreen' => 'Увійти в повноекранний режим', + 'exit_fullscreen' => 'Вийти з повноекранного режиму', + 'open_searchbox' => 'Відкрити вікно пошуку', + 'close_searchbox' => 'Закрити вікно пошуку', + 'open_replacebox' => 'Відкрито Замінити вікно', + 'close_replacebox' => 'Закрити вікно Замінити', + ], + 'asset' => [ + 'menu_label' => 'Ресурси', + 'unsaved_label' => 'Незбережений(і) файл(и)', + 'drop_down_add_title' => 'Додати...', + 'drop_down_operation_title' => 'Дія...', + 'upload_files' => 'Завантажити файли)', + 'create_file' => 'Створити файл', + 'create_directory' => 'Створити директорію', + 'directory_popup_title' => 'Нова директорія', + 'directory_name' => 'Назва директорії', + 'rename' => 'Перейменувати', + 'delete' => 'Видалити', + 'move' => 'Перемістити', + 'select' => 'Вибрати', + 'new' => 'Новий файл', + 'rename_popup_title' => 'Перейменувати', + 'rename_new_name' => 'нове ім\'я', + 'invalid_path' => 'Шлях може містити тільки цифри, латинські літери, пробіли і наступні символи: ._- /', + 'error_deleting_file' => 'Помилка видалення файлу :name.', + 'error_deleting_dir_not_empty' => 'Неможливо видалити директорію :name. Директорія містить файли або піддиректорії.', + 'error_deleting_dir' => 'Помилка видалення директорії:name.', + 'invalid_name' => 'Назва може містити тільки цифри, латинські літери, пробіли і наступні символи: ._-', + 'original_not_found' => 'Оригінальний файл або директорія не знайдено', + 'already_exists' => 'Файл або директорія з таким ім\'ям вже існує', + 'error_renaming' => 'Неможливо перейменувати файл або директорію', + 'name_cant_be_empty' => 'Назва не може бути порожнім', + 'too_large' => 'Завантажений файл занадто великий. Максимальний допустимий розмір файлу складає :max_size', + 'type_not_allowed' => 'Дозволені лише файли наступних типів: :allowed_types', + 'file_not_valid' => 'Файл не може бути збережений', + 'error_uploading_file' => "Помилка завантаження файлу ':name': :error", + 'move_please_select' => 'будь ласка, виберіть директорію', + 'move_destination' => 'Нова директорія', + 'move_popup_title' => 'перемістити файли', + 'move_button' => 'Переместить', + 'selected_files_not_found' => 'Вибрані файли не знайдені', + 'select_destination_dir' => 'Будь ласка, виберіть директорію', + 'destination_not_found' => 'Кінцева директорія не знайдено', + 'error_moving_file' => 'Чи не вдалося перемістити файл :file', + 'error_moving_directory' => 'Чи не вдалося перемістити директорію :dir', + 'error_deleting_directory' => 'Чи не вдалося видалити директорію :dir', + 'no_list_records' => 'Файли не знайдені', + 'delete_confirm' => 'Видалити вибрані файли або каталоги?', + 'path' => 'Шлях', + ], + 'component' => [ + 'menu_label' => 'Компоненти', + 'unnamed' => 'Безіменний', + 'no_description' => 'Без опису', + 'alias' => 'Ім\'я користувача', + 'alias_description' => 'Ім\'я користувача компонента визначає його ім\'я, під яким він доступний в коді сторінки або шаблону.', + 'validation_message' => 'Псевдоніми обов\'язкові і можуть містити тільки латинські букви, цифри і знаки підкреслення. Псевдоніми повинні починатися з літери.', + 'invalid_request' => 'Шаблон не може бути збережений, так як запит містить пошкоджену інформацію про компоненти.', + 'no_records' => 'Компоненти не знайдені', + 'not_found' => "Компонент ':name' не знайдено.", + 'method_not_found' => "Компонент ':name' не містить метод ' :method'.", + ], + 'template' => [ + 'invalid_type' => 'Невідомий тип шаблону.', + 'not_found' => 'Запитаний шаблон не найден.', + 'saved' => 'Шаблон був успішно збережений.', + 'no_list_records' => 'Записів не знайдено', + 'delete_confirm' => 'Видалити вибрані шаблони?', + 'order_by' => 'Сортувати за', + ], + 'permissions' => [ + 'name' => 'Управління CMS', + 'manage_content' => 'Управління контентом', + 'manage_assets' => 'Управління файлами', + 'manage_pages' => 'Управління сторінками', + 'manage_layouts' => 'Управління шаблонами', + 'manage_partials' => 'Управління фрагментами', + 'manage_themes' => 'Управління темами', + 'manage_media' => 'Управління медіафайлів', + ], + 'mediafinder' => [ + 'label' => 'Media Finder', + 'default_prompt' => 'Натисніть на %s кнопку, щоб знайти мультимедійний', + ], + 'media' => [ + 'invalid_path' => "Вказано неприпустимий шлях до файлу: ':path'.", + 'menu_label' => 'Медіафайли', + 'upload' => 'Завантажити', + 'move' => 'Перемістити', + 'delete' => 'Видалити', + 'add_folder' => 'Створити папку', + 'search' => 'Пошук', + 'display' => 'Показати', + 'filter_everything' => 'Всі файли', + 'filter_images' => 'Зображення', + 'filter_video' => 'Відео', + 'filter_audio' => 'Музика', + 'filter_documents' => 'Документи', + 'library' => 'Бібліотека', + 'folder_size_items' => 'Об\'єктів', + 'size' => 'Розмір', + 'title' => 'Ім\'я', + 'last_modified' => 'Остання зміна', + 'public_url' => 'публічний адреса', + 'click_here' => 'Натисніть тут', + 'thumbnail_error' => 'Помилка створення мініатюри.', + 'return_to_parent' => 'Повернутися до батьківської папки', + 'return_to_parent_label' => 'Піднятися на рівень вище...', + 'nothing_selected' => 'Нічого не вибрано.', + 'multiple_selected' => 'Обрано кілька об\'єктів.', + 'uploading_file_num' => 'Завантаження файлів: :number', + 'uploading_complete' => 'Завантаження файлів завершена!', + 'uploading_error' => 'Помилка завантаження', + 'type_blocked' => 'Тип файлу, який використовується заблокований з міркувань безпеки.', + 'order_by' => 'Сортувати за', + 'folder' => 'Папка', + 'no_files_found' => 'Жоден з файлів не задовольняє вашому запиту.', + 'delete_empty' => 'Будь ласка, виберіть об\'єкти для видалення.', + 'delete_confirm' => 'Ви дійсно хочете видалити вибрані об\'єкти?', + 'error_renaming_file' => 'Помилка зміни імені файлу.', + 'new_folder_title' => 'Нова папка', + 'folder_name' => 'Назва папки', + 'error_creating_folder' => 'Помилка створення папки', + 'folder_or_file_exist' => 'Папка або файл з таким ім\'ям вже існує.', + 'move_empty' => 'Будь ласка, виберіть об\'єкти для переміщення.', + 'move_popup_title' => 'Переміщення файлів або папок', + 'move_destination' => 'Папка призначення', + 'please_select_move_dest' => 'Будь ласка, виберіть папку призначення для переміщення.', + 'move_dest_src_match' => 'Будь ласка, виберіть іншу папку.', + 'empty_library' => 'Бібліотека медіафайлів порожня. Для початку завантажте файли або створіть папки.', + 'insert' => 'Вставити', + 'crop_and_insert' => 'Обрізати і вставити', + 'select_single_image' => 'Будь ласка, виберіть одне зображення.', + 'selection_not_image' => 'Обраний елемент не є зображенням.', + 'restore' => 'Скасувати всі зміни', + 'resize' => 'Зміна розміру...', + 'selection_mode_normal' => 'Нормальний', + 'selection_mode_fixed_ratio' => 'Фіксоване співвідношення', + 'selection_mode_fixed_size' => 'Фіксований розмір', + 'height' => 'Висота', + 'width' => 'Ширина', + 'selection_mode' => 'режим виділення', + 'resize_image' => 'Зміна розміру зображення', + 'image_size' => 'Розмір зображення:', + 'selected_size' => 'Обрано:', + ], + 'theme_log' => [ + 'hint' => 'Цей журнал відображає будь-які зміни, внесені до теми адміністраторами в задній частині області.', + 'menu_label' => 'Тема журналу', + 'menu_description' => 'Переглянути зміни, внесені до активної теми.', + 'empty_link' => 'Порожня тема журналу', + 'empty_loading' => 'Очищення журналу тем...', + 'empty_success' => 'Тема журналу порожня', + 'return_link' => 'Повернутися до теми журналу', + 'id' => 'ID', + 'id_label' => 'Ідентифікатор журналу', + 'created_at' => 'Дата, час', + 'user' => 'Користувач', + 'type' => 'Тип', + 'type_create' => 'Створити', + 'type_update' => 'Оновити', + 'type_delete' => 'Видалити', + 'theme_name' => 'Тема', + 'theme_code' => 'Тема коду', + 'old_template' => 'Шаблон (старий)', + 'new_template' => 'Шаблон (новий)', + 'template' => 'Шаблон', + 'diff' => 'Зміни', + 'old_value' => 'Старе значення', + 'new_value' => 'Нове значення', + 'preview_title' => 'Шаблони змінюються', + 'template_updated' => 'Шаблон оновлено', + 'template_created' => 'Шаблон був створений', + 'template_deleted' => 'Шаблон був знищений', + ], +]; diff --git a/modules/system/lang/en/lang.php b/modules/system/lang/en/lang.php index 22d44cfdf..334438986 100644 --- a/modules/system/lang/en/lang.php +++ b/modules/system/lang/en/lang.php @@ -32,11 +32,13 @@ return [ 'nl' => 'Nederlands', 'pl' => 'Polskie', 'pt-br' => 'Português (Brasil)', + 'pt-pt' => 'Português (Portugal)', 'ro' => 'Română', 'ru' => 'Русский', 'sv' => 'Svenska', 'sk' => 'Slovenský', 'tr' => 'Türkçe', + 'uk' => 'Українська мова', 'zh-cn' => '简体中文', 'zh-tw' => '繁體中文' ], @@ -62,9 +64,10 @@ return [ 'users' => 'Users', 'system' => 'System', 'social' => 'Social', + 'backend' => 'Backend', 'events' => 'Events', 'customers' => 'Customers', - 'my_settings' => 'My Settings' + 'my_settings' => 'My Settings', ] ], 'theme' => [ diff --git a/modules/system/lang/ru/client.php b/modules/system/lang/ru/client.php index 704d75737..7d252e108 100644 --- a/modules/system/lang/ru/client.php +++ b/modules/system/lang/ru/client.php @@ -33,7 +33,6 @@ return [ 'fullscreen' => 'Полный экран', 'preview' => 'Предпросмотр', ], - 'mediamanager' => [ 'insert_link' => "Вставить медиа-ссылку", 'insert_image' => "Вставить медиа-изображение", @@ -45,7 +44,6 @@ return [ 'invalid_video_empty_insert' => "Пожалуйста, выберите видео для вставки.", 'invalid_audio_empty_insert' => "Пожалуйста, выберите аудио для вставки.", ], - 'alert' => [ 'confirm_button_text' => 'Ок', 'cancel_button_text' => 'Отмена', diff --git a/modules/system/lang/ru/lang.php b/modules/system/lang/ru/lang.php index f16d9d97e..c0903f429 100644 --- a/modules/system/lang/ru/lang.php +++ b/modules/system/lang/ru/lang.php @@ -27,9 +27,10 @@ return [ 'users' => 'Пользователи', 'system' => 'Система', 'social' => 'Социальное', + 'backend' => 'Backend', 'events' => 'События', 'customers' => 'Клиентское', - 'my_settings' => 'Мои настройки' + 'my_settings' => 'Мои настройки', ] ], 'theme' => [ @@ -203,7 +204,7 @@ return [ 'plugin_description' => 'Описание', 'plugin_version' => 'Версия', 'plugin_author' => 'Автор', - 'plugin_not_found' => 'Plugin not found', + 'plugin_not_found' => 'Плагин не найден', 'core_current_build' => 'Текущая сборка', 'core_build' => 'Сборка :build', 'core_build_help' => 'Последняя доступная сборка.', @@ -241,13 +242,18 @@ return [ ], 'important_action_required' => 'Необходимое действие', 'important_view_guide' => 'Посмотреть руководство по обновлению', + 'important_view_release_notes' => 'Просмотреть заметки о выпуске', 'important_alert_text' => 'Некоторые обновления требуют вашего внимания.', 'details_title' => 'Информация о плагине', 'details_view_homepage' => 'Перейти к домашней странице', 'details_readme' => 'Документация', 'details_readme_missing' => 'Документация не предоставлена.', + 'details_changelog' => 'Изменения', + 'details_changelog_missing' => 'Нет никакого измененного списка.', 'details_upgrades' => 'Инструкция по обновлению', 'details_upgrades_missing' => 'Инструкция по обновлению не предоставлена.', + 'details_licence' => 'Лицензия', + 'details_licence_missing' => 'Лицензия не предоставляется.', 'details_current_version' => 'Текущая версия', 'details_author' => 'Автор', ], @@ -281,7 +287,8 @@ return [ 'id_label' => 'ID события', 'created_at' => 'Дата & Время', 'message' => 'Сообщение', - 'level' => 'Уровень' + 'level' => 'Уровень', + 'preview_title' => 'События', ], 'request_log' => [ 'hint' => 'В этом журнале отображается список запросов браузера, которые могут потребовать внимания. Например, если посетитель открывает несуществующую страницу, то в журнале создается запись с кодом статуса 404.', @@ -296,7 +303,8 @@ return [ 'count' => 'Счетчик', 'referer' => 'Источник запроса', 'url' => 'Адрес', - 'status_code' => 'Статус' + 'status_code' => 'Статус', + 'preview_title' => 'Запрос', ], 'permissions' => [ 'name' => 'Система', diff --git a/modules/system/lang/uk/client.php b/modules/system/lang/uk/client.php new file mode 100644 index 000000000..f77dbaf49 --- /dev/null +++ b/modules/system/lang/uk/client.php @@ -0,0 +1,88 @@ + [ + 'formatting' => 'Форматування', + 'quote' => 'Цитата', + 'code' => 'Код', + 'header1' => 'Заголовок 1', + 'header2' => 'Заголовок 2', + 'header3' => 'Заголовок 3', + 'header4' => 'Заголовок 4', + 'header5' => 'Заголовок 5', + 'header6' => 'Заголовок 6', + 'bold' => 'Жирний шрифт', + 'italic' => 'Курсив', + 'unorderedlist' => 'Ненумерованний список', + 'orderedlist' => 'Нумірованний список', + 'video' => 'Відео', + 'image' => 'Зображення', + 'link' => 'Посилання', + 'horizontalrule' => 'Вставити горизонтальну риску', + 'fullscreen' => 'Повний екран', + 'preview' => 'Попередній перегляд', + ], + 'mediamanager' => [ + 'insert_link' => "Вставити медіа-посилання", + 'insert_image' => "Вставити медіа-зображення", + 'insert_video' => "Вставити медіа-відео", + 'insert_audio' => "Вставити медіа-аудіо", + 'invalid_file_empty_insert' => "Будь ласка, виберіть файл для вставки посилання.", + 'invalid_file_single_insert' => "Будь ласка, виберіть один файл.", + 'invalid_image_empty_insert' => "Будь ласка, виберіть зображення для вставки.", + 'invalid_video_empty_insert' => "Будь ласка, виберіть відео для вставки.", + 'invalid_audio_empty_insert' => "Будь ласка, виберіть аудіо для вставки.", + ], + 'alert' => [ + 'confirm_button_text' => 'Ок', + 'cancel_button_text' => 'Скасувати', + 'widget_remove_confirm' => 'Видалити цей віджет?', + ], + 'datepicker' => [ + 'previousMonth' => 'Попередній місяць', + 'nextMonth' => 'Наступний місяць', + 'months' => ['Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'], + 'weekdays' => ['Неділя', 'Понеділок', 'Вівторок', 'Середа', 'Четвер', 'П\'ятниця', 'Cубота'], + 'weekdaysShort' => ['Нд', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'], + ], + 'filter' => [ + 'group' => [ + 'all' => 'всі', + ], + 'dates' => [ + 'all' => 'всі', + 'filter_button_text' => 'Фільтр', + 'reset_button_text' => 'Скинути', + 'date_placeholder' => 'Дата', + 'after_placeholder' => 'Після', + 'before_placeholder' => 'До', + ], + ], + 'eventlog' => [ + 'show_stacktrace' => 'Показати трасування стека', + 'hide_stacktrace' => 'Приховати трасування стека', + 'tabs' => [ + 'formatted' => 'Форматований', + 'raw' => 'Початковий', + ], + 'editor' => [ + 'title' => 'Редактор вихідного коду', + 'description' => 'Ваша операційна система повинна бути налаштована на прослуховування до однієї з цих схем URL.', + 'openWith' => 'Відкрити за допомогою', + 'remember_choice' => 'Запам\'ятати обраний варіант для цієї сесії', + 'open' => 'Відкрити', + 'cancel' => 'Скасувати', + ], + ], +]; diff --git a/modules/system/lang/uk/lang.php b/modules/system/lang/uk/lang.php new file mode 100644 index 000000000..f80aa646c --- /dev/null +++ b/modules/system/lang/uk/lang.php @@ -0,0 +1,333 @@ + [ + 'name' => 'October CMS', + 'tagline' => 'Повернення до витоків', + ], + 'directory' => [ + 'create_fail' => 'Неможливо створити директорію: :name', + ], + 'file' => [ + 'create_fail' => 'Неможливо створити файл: :name', + ], + 'combiner' => [ + 'not_found' => "Складальник ресурсів не може знайти файл ':name'.", + ], + 'system' => [ + 'name' => 'Система', + 'menu_label' => 'Система', + 'categories' => [ + 'cms' => 'CMS', + 'misc' => 'Різне', + 'logs' => 'Журнали', + 'mail' => 'Пошта', + 'shop' => 'Магазин', + 'team' => 'Команда', + 'users' => 'Користувачі', + 'system' => 'Система', + 'social' => 'Соціальне', + 'backend' => 'Backend', + 'events' => 'Події', + 'customers' => 'Клієнтське', + 'my_settings' => 'Мої налаштування', + ], + ], + 'theme' => [ + 'label' => 'Тема', + 'unnamed' => 'Безіменна тема', + 'name' => [ + 'label' => 'Назва теми', + 'help' => 'Назва теми по її унікальним кодом. Наприклад, RainLab.Vanilla', + ], + ], + 'themes' => [ + 'install' => 'Встановити теми', + 'search' => 'Пошук тем для установки...', + 'installed' => 'Встановлені теми', + 'no_themes' => 'Немає тем, встановлених з магазину.', + 'recommended' => 'Рекомендується', + 'remove_confirm' => 'Ви впевнені, що хочете видалити обрану тему?', + ], + 'plugin' => [ + 'label' => 'Плагін', + 'unnamed' => 'Безіменний плагін', + 'name' => [ + 'label' => 'Назва плагіну', + 'help' => 'Введіть назву плагіна зі своїм унікальним кодом. Наприклад, RainLab.Blog', + ], + ], + 'plugins' => [ + 'manage' => 'Управління плагінами', + 'enable_or_disable' => 'Включити або вимкнути', + 'enable_or_disable_title' => 'Включення або відключення плагінів', + 'install' => 'Встановити плагіни', + 'install_products' => 'Встановити розширення', + 'search' => 'Пошук плагінів для установки...', + 'installed' => 'Встановлені плагіни', + 'no_plugins' => 'Немає плагінів, встановлених з магазину.', + 'recommended' => 'Рекомендується', + 'remove' => 'Видалити', + 'refresh' => 'Оновити', + 'disabled_label' => 'Відключити', + 'disabled_help' => 'Відключені плагіни будуть ігноруватися.', + 'frozen_label' => 'Заморозити оновлення', + 'frozen_help' => 'Плагіни, які були заморожені ігноруються в процесі оновлення.', + 'selected_amount' => 'Обрано плагінів: :amount', + 'remove_confirm' => 'Ви впевнені, що хочете видалити цей плагін?', + 'remove_success' => 'Вибрані плагіни успішно видалені.', + 'refresh_confirm' => 'Ви впевнені?', + 'refresh_success' => 'Вибрані плагіни успішно оновлені.', + 'disable_confirm' => 'Ви впевнені?', + 'disable_success' => 'Плагіни успішно відключені.', + 'enable_success' => 'Плагіни успішно включені.', + 'unknown_plugin' => 'Плагіни були видалені з файлової системи.', + ], + 'project' => [ + 'name' => 'Проект', + 'owner_label' => 'Власник', + 'attach' => 'Підключити проект', + 'detach' => 'Від\'єднати проект', + 'none' => 'Не виявлено', + 'id' => [ + 'label' => 'Ідентифікатор проекту', + 'help' => 'Як знайти ідентифікатор вашого проекту', + 'missing' => 'Будь ласка, вкажіть ідентифікатор вашого проекту для використання.', + ], + 'detach_confirm' => 'Ви впевнені, що хочете від\'єднати цей проект?', + 'unbind_success' => 'Проект був успішно від\'єднаний.', + ], + 'settings' => [ + 'menu_label' => 'Налаштування', + 'not_found' => 'Неможливо знайти зазначені налаштування.', + 'missing_model' => 'На сторінці налаштувань відсутнє визначення моделі.', + 'update_success' => 'Налаштування для :name успішно оновлені.', + 'return' => 'Повернутися до системних налаштувань', + 'search' => 'Пошук', + ], + 'mail' => [ + 'log_file' => 'Файл журналу', + 'menu_label' => 'Налаштування пошти', + 'menu_description' => 'Управління налаштуванням електронної пошти.', + 'general' => 'Загальне', + 'method' => 'Метод', + 'sender_name' => 'Ім\'я відправника', + 'sender_email' => 'Адреса відправника', + 'php_mail' => 'PHP mail', + 'smtp' => 'SMTP', + 'smtp_address' => 'Сервер вихідної пошти', + 'smtp_authorization' => 'Використовувати SMTP авторизацію', + 'smtp_authorization_comment' => 'Активуйте цю опцію, якщо ваш SMTP-сервер вимагає авторизацію.', + 'smtp_username' => 'SMTP логін', + 'smtp_password' => 'SMTP пароль', + 'smtp_port' => 'SMTP порт', + 'smtp_ssl' => 'Використовувати SSL', + 'smtp_encryption' => 'Протокол шифрування для SMTP', + 'smtp_encryption_none' => 'Без шифрування', + 'smtp_encryption_tls' => 'TLS', + 'smtp_encryption_ssl' => 'SSL', + 'sendmail' => 'Sendmail', + 'sendmail_path' => 'Sendmail шлях', + 'sendmail_path_comment' => 'Будь ласка, вкажіть шлях до sendmail.', + 'mailgun' => 'Mailgun', + 'mailgun_domain' => 'Mailgun домен', + 'mailgun_domain_comment' => 'Будь ласка, вкажіть Mailgun домен.', + 'mailgun_secret' => 'Секретний API-ключ', + 'mailgun_secret_comment' => 'Введіть ваш Mailgun API-ключ.', + 'mandrill' => 'Mandrill', + 'mandrill_secret' => 'Секретний ключ Mandrill', + 'mandrill_secret_comment' => 'Введіть ваш Mandrill API-ключ.', + 'ses' => 'SES', + 'ses_key' => 'SES API-ключ', + 'ses_key_comment' => 'Введіть ваш SES API-ключ', + 'ses_secret' => 'SES секретний API-ключ', + 'ses_secret_comment' => 'Введіть ваш секретний SES API-ключ', + 'ses_region' => 'SES регіон', + 'ses_region_comment' => 'Введіть ваш SES регіон (наприклад, us-east-1)', + 'drivers_hint_header' => 'Драйвера не встановлені', + 'drivers_hint_content' => "Необхідно встановити плагін ':plugin', перш ніж можна буде відправляти пошту.", + ], + 'mail_templates' => [ + 'menu_label' => 'Шаблони пошти', + 'menu_description' => 'Зміна шаблонів листів, що відправляються користувачам і адміністраторам.', + 'new_template' => 'Новий шаблон', + 'new_layout' => 'Новий макет', + 'template' => 'Шаблон', + 'templates' => 'Шаблони', + 'menu_layouts_label' => 'Макети пошти', + 'layout' => 'Макет', + 'layouts' => 'Макети', + 'no_layout' => '-- макет відсутній --', + 'name' => 'Назва', + 'name_comment' => 'Унікальне ім\'я, що використовується для позначення цього шаблону', + 'code' => 'Код', + 'code_comment' => 'Унікальний код, який використовується для позначення цього шаблону', + 'subject' => 'Тема', + 'subject_comment' => 'Тема повідомлення', + 'description' => 'Опис', + 'content_html' => 'HTML', + 'content_css' => 'CSS', + 'content_text' => 'Plaintext', + 'test_send' => 'Надіслати тестове повідомлення', + 'test_success' => 'Тестове повідомлення було успішно надіслано.', + 'test_confirm' => 'Тестове повідомлення буде відправлено на :email. Продовжити?', + 'creating' => 'Створення шаблону...', + 'creating_layout' => 'Створення макета...', + 'saving' => 'Збереження шаблону...', + 'saving_layout' => 'Збереження макета...', + 'delete_confirm' => 'Ви дійсно хочете видалити цей шаблон?', + 'delete_layout_confirm' => 'Ви дійсно хочете видалити цей макет?', + 'deleting' => 'Видалення шаблону...', + 'deleting_layout' => 'Видалення макета...', + 'sending' => 'Відправка тестового повідомлення...', + 'return' => 'Повернутися до списку шаблонів', + ], + 'install' => [ + 'project_label' => 'Приєднати до проекту', + 'plugin_label' => 'Встановити плагін', + 'theme_label' => 'Встановити тему', + 'missing_plugin_name' => 'Будь ласка, вкажіть назву плагіна для установки.', + 'missing_theme_name' => 'Будь ласка, вкажіть назву теми для установки.', + 'install_completing' => 'Завершення процесу установки', + 'install_success' => 'Плагін був успішно встановлений.', + ], + 'updates' => [ + 'title' => 'Менеджер оновлень', + 'name' => 'Оновлення ПЗ', + 'menu_label' => 'Оновлення', + 'menu_description' => 'Оновлення системи, управління і установка плагінів і тем.', + 'return_link' => 'Повернутися до системи оновлень', + 'check_label' => 'перевірити оновлення', + 'retry_label' => 'Спробувати ще раз', + 'plugin_name' => 'Название', + 'plugin_code' => 'Код', + 'plugin_description' => 'Опис', + 'plugin_version' => 'Версія', + 'plugin_author' => 'Автор', + 'plugin_not_found' => 'Плагін не знайден', + 'core_current_build' => 'Поточна збірка', + 'core_build' => 'Збірка :build', + 'core_build_help' => 'Остання доступна збірка.', + 'core_downloading' => 'Завантаження файлів програми', + 'core_extracting' => 'Розпакування файлів програми', + 'plugins' => 'Плагіни', + 'themes' => 'Теми', + 'disabled' => 'Відключено', + 'plugin_downloading' => 'Завантаження плагіна: :name', + 'plugin_extracting' => 'Розпакування плагіна: :name', + 'plugin_version_none' => 'Новий плагін', + 'plugin_current_version' => 'Поточна версія', + 'theme_new_install' => 'Нова тема встановлена.', + 'theme_downloading' => 'Завантаження теми: :name', + 'theme_extracting' => 'Розпакування теми: :name', + 'update_label' => 'Оновити', + 'update_completing' => 'Завершення процесу оновлення', + 'update_loading' => 'Пошук доступних оновлень...', + 'update_success' => 'Процес оновлення був успішно завершений.', + 'update_failed_label' => 'Неможливо оновити програму', + 'force_label' => 'Примусово оновити', + 'found' => [ + 'label' => 'Доступні нові оновлення!', + 'help' => 'Натисніть «Оновити», щоб почати процес оновлення.', + ], + 'none' => [ + 'label' => 'Оновлень немає', + 'help' => 'Нові оновлення не знайдено.', + ], + 'important_action' => [ + 'empty' => 'Виберіть дію', + 'confirm' => 'Підтвердіть оновлення', + 'skip' => 'Пропустити цей плагін (тільки один раз)', + 'ignore' => 'Пропустити цей плагін (завжди)', + ], + 'important_action_required' => 'Необхідна дія', + 'important_view_guide' => 'Подивитися керівництво по оновленню', + 'important_view_release_notes' => 'Перегляд приміток випуску', + 'important_alert_text' => 'Деякі оновлення вимагають вашої уваги.', + 'details_title' => 'Інформація про плагін', + 'details_view_homepage' => 'Перейти до домашньої сторінки', + 'details_readme' => 'Документація', + 'details_readme_missing' => 'Документації не надано.', + 'details_changelog' => 'Історія змін', + 'details_changelog_missing' => 'Історії змін не передбачено.', + 'details_upgrades' => 'Інструкція по оновленню', + 'details_upgrades_missing' => 'Інструкція по оновлення не надана.', + 'details_licence' => 'Ліцензія', + 'details_licence_missing' => 'Ліцензія не зазначена.', + 'details_current_version' => 'Поточна версія', + 'details_author' => 'Автор', + ], + 'server' => [ + 'connect_error' => 'Помилка підключення до сервера.', + 'response_not_found' => 'Сервер оновлення не знайдено.', + 'response_invalid' => 'Неправильна відповідь сервера.', + 'response_empty' => 'Порожній відповідь сервера.', + 'file_error' => 'Сервер не зміг доставити пакет.', + 'file_corrupt' => 'Завантажений файл пошкоджений.', + ], + 'behavior' => [ + 'missing_property' => 'Клас :class повинен містити властивість $:property, що використовується розширенням :behavior.', + ], + 'config' => [ + 'not_found' => 'Не вдалося знайти конфігураційний файл :file, очікуваний для :location.', + 'required' => "Для конфігурації, що використовується в :location не вказано властивість ':property'.", + ], + 'zip' => [ + 'extract_failed' => "Неможливо зволікти файл ':file'.", + ], + 'event_log' => [ + 'hint' => 'У цьому журналі відображається список можливих помилок, які виникають в роботі додатка, таких як виключення і налагоджувальна інформація.', + 'menu_label' => 'Журнал подій', + 'menu_description' => 'Перегляд системного журналу подій.', + 'empty_link' => 'Очистити журнал подій', + 'empty_loading' => 'Очищення журналу подій...', + 'empty_success' => 'Успішне очищення журналу подій.', + 'return_link' => 'Повернутися в журнал подій', + 'id' => 'ID', + 'id_label' => 'ID події', + 'created_at' => 'Дата & Час', + 'message' => 'Повідомлення', + 'level' => 'Рівень', + 'preview_title' => 'Подія', + ], + 'request_log' => [ + 'hint' => 'У цьому журналі відображається список запитів браузера, які потребують уваги. Наприклад, якщо відвідувач відкриває неіснуючу сторінку, то в журналі створюється запис з кодом статусу 404.', + 'menu_label' => 'Журнал запитів', + 'menu_description' => 'Перегляд невдалих або перенаправлених запитів.', + 'empty_link' => 'Очистити журнал запитів', + 'empty_loading' => 'Очищення журналу запитів...', + 'empty_success' => 'Успішне очищення журналу запитів.', + 'return_link' => 'Повернутися до журналу запитів', + 'id' => 'ID', + 'id_label' => 'ID запису', + 'count' => 'Лічильник', + 'referer' => 'Джерело запиту', + 'url' => 'Адреса', + 'status_code' => 'Статус', + 'preview_title' => 'Запит', + ], + 'permissions' => [ + 'name' => 'Система', + 'manage_system_settings' => 'Налаштування системних параметрів', + 'manage_software_updates' => 'Управління оновленнями', + 'access_logs' => 'Перегляд системних логів', + 'manage_mail_templates' => 'Управління поштовими шаблонами', + 'manage_mail_settings' => 'Управління настройками пошти', + 'manage_other_administrators' => 'Управління іншими адміністраторами', + 'manage_preferences' => 'Управління настройками бекенд', + 'manage_editor' => 'Управління настройками редактора коду', + 'view_the_dashboard' => 'Перегляд панелі управління', + 'manage_branding' => 'Персоналізація панелі керування', + ], + 'log' => [ + 'menu_label' => 'Налаштування журналу', + 'menu_description' => 'Вкажіть, які налаштування слід використовувати для ведення журналу.', + 'default_tab' => 'Вхід', + 'log_events' => 'Журнал системних подій', + 'log_events_comment' => 'Система зберігання подій в базі даних, на додаток до журналу на основі файлів.', + 'log_requests' => 'Помилкові запити', + 'log_requests_comment' => 'Запити браузерів, які потребують уваги, такі як помилка 404.', + 'log_theme' => 'Зміни теми', + 'log_theme_comment' => 'При внесенні змін до теми через адмін-панель.', + ], +]; diff --git a/modules/system/lang/uk/validation.php b/modules/system/lang/uk/validation.php new file mode 100644 index 000000000..41b4788fd --- /dev/null +++ b/modules/system/lang/uk/validation.php @@ -0,0 +1,99 @@ + "Ви повинні прийняти :attribute.", + "active_url" => "Поле :attribute недійсний URL.", + "after" => "Поле :attribute має бути датою після :date.", + "alpha" => "Поле :attribute може містити тільки літери.", + "alpha_dash" => "Поле :attribute може містити тільки букви, цифри і дефіс.", + "alpha_num" => "Поле :attribute може містити тільки букви і цифри.", + "array" => "Поле :attribute має бути масивом.", + "before" => "Поле :attribute має бути датою перед :date.", + "between" => [ + "numeric" => "Поле :attribute має бути між :min и :max.", + "file" => "Размер :attribute повинен бути від :min до :max Килобайт.", + "string" => "Длина :attribute повинна бути від :min до :max символов.", + "array" => "Поле :attribute має містити :min - :max элементов.", + ], + "confirmed" => "Поле :attribute не збігається з підтвердженням.", + "date" => "Поле :attribute не є датою.", + "date_format" => "Поле :attribute не відповідає формату :format.", + "different" => "Поля :attribute та :other повинні відрізнятися.", + "digits" => "Довжина цифрового поля :attribute повинна бути :digits.", + "digits_between" => "Довжина цифрового поля :attribute повинна бути між :min та :max.", + "email" => "Поле :attribute має хибний формат.", + "exists" => "Вибране значення для :attribute вже існує.", + "image" => "Поле :attribute має бути зображенням.", + "in" => "Вибране значення для :attribute помилково.", + "integer" => "Поле :attribute має бути цілим числом.", + "ip" => "Поле :attribute має бути дійсним IP-адресою.", + "max" => [ + "numeric" => "Поле :attribute має бути не більше :max.", + "file" => "Поле :attribute має бути не більше :max кілобайт.", + "string" => "Поле :attribute має бути не довше :max символів.", + "array" => "Поле :attribute має містити не більше :max елементів.", + ], + "mimes" => "Поле :attribute має бути файлом одного з типів: :values.", + "extensions" => "Поле :attribute повинен мати одне з розширень: :values.", + "min" => [ + "numeric" => "Поле :attribute має бути не менше :min.", + "file" => "Поле :attribute має бути не менше :min кілобайт.", + "string" => "Поле :attribute має бути не коротшою :min символів.", + "array" => "Поле :attribute має містити не менше :min елементів.", + ], + "not_in" => "Вибране значення для :attribute помилково.", + "numeric" => "Поле :attribute має бути числом.", + "regex" => "Поле :attribute має хибний формат.", + "required" => "Поле :attribute обов'язкове для заповнення.", + "required_if" => "Поле :attribute обов'язково для заповнення, коли :other дорівнює :value.", + "required_with" => "Поле :attribute обов'язково для заповнення, коли :values вказано.", + "required_without" => "Поле :attribute обов'язково для заповнення, коли :values не вказано.", + "same" => "Значення :attribute має збігатися з :other.", + "size" => [ + "numeric" => "Поле :attribute повинно бути :size.", + "file" => "Поле :attribute повинно бути :size кілобайт.", + "string" => "Поле :attribute має бути довжиною :size символів.", + "array" => "Кількість елементів в поле :attribute повинно бути :size.", + ], + "unique" => "Таке значення поля :attribute вже існує.", + "url" => "Поле :attribute має хибний формат.", + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; From f8d9667f0ed343210fb96983a97b7bfa779b4def Mon Sep 17 00:00:00 2001 From: Luke Towers Date: Thu, 22 Jun 2017 09:45:29 -0600 Subject: [PATCH 08/25] Support field being disabled in filterFields() Completes support for the underlying field object being disabled in model's filterFields() method by rechecking status immediately before rendering. --- modules/backend/formwidgets/RecordFinder.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/backend/formwidgets/RecordFinder.php b/modules/backend/formwidgets/RecordFinder.php index 49d1a58bc..32361efd6 100644 --- a/modules/backend/formwidgets/RecordFinder.php +++ b/modules/backend/formwidgets/RecordFinder.php @@ -179,6 +179,10 @@ class RecordFinder extends FormWidgetBase public function prepareVars() { $this->relationModel = $this->getLoadValue(); + + if ($this->formField->disabled) { + $this->previewMode = true; + } $this->vars['value'] = $this->getKeyValue(); $this->vars['field'] = $this->formField; From e3a567cb780950277ba7bf456041671bdbb90299 Mon Sep 17 00:00:00 2001 From: Christophe Vuagniaux Date: Thu, 22 Jun 2017 22:34:16 +0200 Subject: [PATCH 09/25] Enable configuration of backend login session persistence (#2924) Thanks to @ChVuagniaux. Fixes #2394 --- config/cms.php | 18 ++++++++++++++++++ modules/backend/assets/css/october.css | 1 + .../assets/less/layout/outerlayout.less | 6 ++++++ modules/backend/controllers/Auth.php | 6 +++++- modules/backend/controllers/auth/signin.htm | 15 +++++++++++++++ modules/backend/lang/en/lang.php | 1 + modules/backend/lang/fr/lang.php | 1 + 7 files changed, 47 insertions(+), 1 deletion(-) diff --git a/config/cms.php b/config/cms.php index 0b12b46f2..e6f7c32b9 100644 --- a/config/cms.php +++ b/config/cms.php @@ -51,6 +51,24 @@ return [ 'backendForceSecure' => null, + /* + |-------------------------------------------------------------------------- + | Back-end login remember + |-------------------------------------------------------------------------- + | + | Define live duration of backend sessions : + | + | true - session never expire (cookie expiration in 5 years) + | + | false - session have a limited time (see session.lifetime) + | + | null - The form login display a checkbox that allow user to choose + | wanted behavior + | + */ + + 'backendForceRemember' => true, + /* |-------------------------------------------------------------------------- | Back-end timezone diff --git a/modules/backend/assets/css/october.css b/modules/backend/assets/css/october.css index 5f4fdedd1..115618419 100644 --- a/modules/backend/assets/css/october.css +++ b/modules/backend/assets/css/october.css @@ -819,6 +819,7 @@ body.outer .layout > .layout-row > .layout-cell .outer-form-container h2{font-si body.outer .layout > .layout-row > .layout-cell .outer-form-container .horizontal-form{font-size:0;display:-webkit-box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:-ms-flex;display:flex} body.outer .layout > .layout-row > .layout-cell .outer-form-container .horizontal-form input{vertical-align:top;margin-right:9px;display:inline-block;border:none;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px} body.outer .layout > .layout-row > .layout-cell .outer-form-container .horizontal-form button{background:#0181b9;text-align:center;font-size:13px;font-weight:600;height:40px;vertical-align:top;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} +body.outer .layout > .layout-row > .layout-cell .outer-form-container .remember label {color:rgba(255,255,255,0.44)} body.outer .layout > .layout-row > .layout-cell .outer-form-container .forgot-password{margin-top:30px;font-size:13px;top:8px} body.outer .layout > .layout-row > .layout-cell .outer-form-container .forgot-password a{color:rgba(255,255,255,0.44)} body.outer .layout > .layout-row > .layout-cell .outer-form-container .forgot-password:before{color:rgba(255,255,255,0.44);font-size:14px;position:relative;margin-right:5px} diff --git a/modules/backend/assets/less/layout/outerlayout.less b/modules/backend/assets/less/layout/outerlayout.less index fff4cbb7a..ef77fcb2a 100644 --- a/modules/backend/assets/less/layout/outerlayout.less +++ b/modules/backend/assets/less/layout/outerlayout.less @@ -74,6 +74,12 @@ body.outer { } } + .remember { + label { + color: @color-outer-muted-text; + } + } + .forgot-password { margin-top: 30px; font-size: 13px; diff --git a/modules/backend/controllers/Auth.php b/modules/backend/controllers/Auth.php index c1545d6ae..6a6c72cb4 100644 --- a/modules/backend/controllers/Auth.php +++ b/modules/backend/controllers/Auth.php @@ -69,11 +69,15 @@ class Auth extends Controller throw new ValidationException($validation); } + if (is_null($remember = config('cms.backendForceRemember', true))) { + $remember = (bool) post('remember'); + } + // Authenticate user $user = BackendAuth::authenticate([ 'login' => post('login'), 'password' => post('password') - ], true); + ], $remember); // Load version updates UpdateManager::instance()->update(); diff --git a/modules/backend/controllers/auth/signin.htm b/modules/backend/controllers/auth/signin.htm index b508a74fd..7e186d337 100644 --- a/modules/backend/controllers/auth/signin.htm +++ b/modules/backend/controllers/auth/signin.htm @@ -32,6 +32,21 @@ + + +
+
+ + +
+
+ +

diff --git a/modules/backend/lang/en/lang.php b/modules/backend/lang/en/lang.php index 66c8d7e8a..c5090c624 100644 --- a/modules/backend/lang/en/lang.php +++ b/modules/backend/lang/en/lang.php @@ -39,6 +39,7 @@ return [ 'restore' => 'Restore', 'login_placeholder' => 'login', 'password_placeholder' => 'password', + 'remember_me' => 'Stay logged in', 'forgot_password' => 'Forgot your password?', 'enter_email' => 'Enter your email', 'enter_login' => 'Enter your login', diff --git a/modules/backend/lang/fr/lang.php b/modules/backend/lang/fr/lang.php index 16a7b174c..29d7141bd 100644 --- a/modules/backend/lang/fr/lang.php +++ b/modules/backend/lang/fr/lang.php @@ -39,6 +39,7 @@ return [ 'restore' => 'Restaurer', 'login_placeholder' => 'identifiant', 'password_placeholder' => 'mot de passe', + 'remember_me' => 'Rester connecté', 'forgot_password' => 'Mot de passe oublié ?', 'enter_email' => 'Saisir votre adresse e-mail', 'enter_login' => 'Saisir votre identifiant', From f7f507dbdc394d79a69234c43541cae3f5cd075b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szab=C3=B3=20Gerg=C5=91?= Date: Mon, 26 Jun 2017 17:38:31 +0200 Subject: [PATCH 10/25] Translate the value of the text field (#2942) It is a useful feature, if you like to add translatable value. --- modules/backend/widgets/form/partials/_field_text.htm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/backend/widgets/form/partials/_field_text.htm b/modules/backend/widgets/form/partials/_field_text.htm index 0ac43a75a..776e42357 100644 --- a/modules/backend/widgets/form/partials/_field_text.htm +++ b/modules/backend/widgets/form/partials/_field_text.htm @@ -6,11 +6,11 @@ type="text" name="getName() ?>" id="getId() ?>" - value="value) ?>" + value="value)) ?>" placeholder="placeholder)) ?>" class="form-control" autocomplete="off" hasAttribute('maxlength') ? '' : 'maxlength="255"' ?> getAttributes() ?> /> - \ No newline at end of file + From 4f97d079624501f5536bd09da85407f0c47ca7a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20K=C3=BCndig?= Date: Wed, 28 Jun 2017 15:23:59 +0200 Subject: [PATCH 11/25] Added firstDay option to datepicker form widget (#2940) Documented here: https://github.com/octobercms/docs/pull/243 --- modules/backend/formwidgets/DatePicker.php | 8 ++++++++ .../formwidgets/datepicker/partials/_datepicker.htm | 1 + modules/system/assets/ui/js/datepicker.js | 4 +++- modules/system/assets/ui/storm-min.js | 4 ++-- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/modules/backend/formwidgets/DatePicker.php b/modules/backend/formwidgets/DatePicker.php index 4718bf946..b10789b22 100644 --- a/modules/backend/formwidgets/DatePicker.php +++ b/modules/backend/formwidgets/DatePicker.php @@ -46,6 +46,12 @@ class DatePicker extends FormWidgetBase */ public $yearRange = null; + /** + * @var int first day of the week + * eg: 0 (Sunday), 1 (Monday), 2 (Tuesday), etc. + */ + public $firstDay = 0; + // // Object properties // @@ -66,6 +72,7 @@ class DatePicker extends FormWidgetBase 'minDate', 'maxDate', 'yearRange', + 'firstDay', ]); $this->mode = strtolower($this->mode); @@ -112,6 +119,7 @@ class DatePicker extends FormWidgetBase $this->vars['minDate'] = $this->minDate; $this->vars['maxDate'] = $this->maxDate; $this->vars['yearRange'] = $this->yearRange; + $this->vars['firstDay'] = $this->firstDay; $this->vars['format'] = $this->format; $this->vars['formatMoment'] = $this->getDateFormatMoment(); $this->vars['formatAlias'] = $this->getDateFormatAlias(); diff --git a/modules/backend/formwidgets/datepicker/partials/_datepicker.htm b/modules/backend/formwidgets/datepicker/partials/_datepicker.htm index 53221db78..090c9a0b5 100644 --- a/modules/backend/formwidgets/datepicker/partials/_datepicker.htm +++ b/modules/backend/formwidgets/datepicker/partials/_datepicker.htm @@ -14,6 +14,7 @@ data-min-date="" data-max-date="" data-year-range="" + data-first-day="" > diff --git a/modules/system/assets/ui/js/datepicker.js b/modules/system/assets/ui/js/datepicker.js index 179ea2f43..b83e6fd09 100644 --- a/modules/system/assets/ui/js/datepicker.js +++ b/modules/system/assets/ui/js/datepicker.js @@ -102,6 +102,7 @@ var pikadayOptions = { yearRange: this.options.yearRange, + firstDay: this.options.firstDay, format: dateFormat, setDefaultDate: now, onOpen: function() { @@ -305,7 +306,8 @@ minDate: null, maxDate: null, format: null, - yearRange: 10 + yearRange: 10, + firstDay: 0 } // PLUGIN DEFINITION diff --git a/modules/system/assets/ui/storm-min.js b/modules/system/assets/ui/storm-min.js index 7d68f9c3c..257f21158 100644 --- a/modules/system/assets/ui/storm-min.js +++ b/modules/system/assets/ui/storm-min.js @@ -2877,7 +2877,7 @@ this.$el=null this.options=null BaseProto.dispose.call(this)} DatePicker.prototype.initDatePicker=function(){var self=this,dateFormat=this.getDateFormat(),now=moment().tz(this.timezone).format(dateFormat) -var pikadayOptions={yearRange:this.options.yearRange,format:dateFormat,setDefaultDate:now,onOpen:function(){var $field=$(this._o.trigger) +var pikadayOptions={yearRange:this.options.yearRange,firstDay:this.options.firstDay,format:dateFormat,setDefaultDate:now,onOpen:function(){var $field=$(this._o.trigger) $(this.el).css({left:'auto',right:$(window).width()-$field.offset().left-$field.outerWidth()})},onSelect:function(){self.onSelectDatePicker.call(self,this.getMoment())}} var lang=this.getLang('datepicker',false) if(lang){pikadayOptions.i18n=lang} @@ -2926,7 +2926,7 @@ if(!this.appTimezone){this.appTimezone='UTC'} if(!this.timezone){this.timezone='UTC'}} DatePicker.prototype.getLang=function(name,defaultValue){if($.oc===undefined||$.oc.lang===undefined){return defaultValue} return $.oc.lang.get(name,defaultValue)} -DatePicker.DEFAULTS={minDate:null,maxDate:null,format:null,yearRange:10} +DatePicker.DEFAULTS={minDate:null,maxDate:null,format:null,yearRange:10,firstDay:0} var old=$.fn.datePicker $.fn.datePicker=function(option){var args=Array.prototype.slice.call(arguments,1),items,result items=this.each(function(){var $this=$(this) From 879afdeea916dea67a7bbe85d52d763c66b9978f Mon Sep 17 00:00:00 2001 From: buuug7 Date: Mon, 3 Jul 2017 08:45:35 -0500 Subject: [PATCH 12/25] Update Chinese translations (#2948) Credit to @buuug7. Refs: #2948 --- modules/backend/lang/zh-cn/lang.php | 180 ++++++++++++++++++++++++++-- 1 file changed, 173 insertions(+), 7 deletions(-) diff --git a/modules/backend/lang/zh-cn/lang.php b/modules/backend/lang/zh-cn/lang.php index f46213025..59b1ccc61 100644 --- a/modules/backend/lang/zh-cn/lang.php +++ b/modules/backend/lang/zh-cn/lang.php @@ -6,6 +6,7 @@ return [ ], 'field' => [ 'invalid_type' => '不合法的字段类型 :type.', + 'options_method_invalid_model' => "属性 ':field' 不能解析为一个有效的模型. 请尝试为模型类:model指定一个可选的方法.", 'options_method_not_exists' => "模型 :model 必须定义一个返回 ':field' 表单字段选项的方法 :method()。" ], 'widget' => [ @@ -19,6 +20,11 @@ return [ 'help' => "你没有访问这个页面需要的权限.", 'cms_link' => '返回后台' ], + 'no_database' => [ + 'label' => '找不到数据库', + 'help' => "需要一个数据库来访问后端. 在再次尝试之前,检查数据库的配置和迁移.", + 'cms_link' => '返回首页' + ], 'invalid_token' => [ 'label' => '非法的security token' ] @@ -54,6 +60,7 @@ return [ 'widget_label' => '小工具', 'widget_width' => '宽度', 'full_width' => '全部宽度', + 'manage_widgets' => '管理小部件', 'add_widget' => '添加小工具', 'widget_inspector_title' => '小工具配置', 'widget_inspector_description' => '配置报表小工具', @@ -71,6 +78,8 @@ return [ 'make_default' => '设为默认', 'make_default_confirm' => '设置当前布局作为默认?', 'make_default_success' => '现在目前的布局是默认', + 'collapse_all' => '全部折叠', + 'expand_all' => '全部展开', 'status' => [ 'widget_title_default' => '系统状态', 'update_available' => '{0} 更新可用!|{1} 更新可用!|[2,Inf] 更新可用!', @@ -84,6 +93,15 @@ return [ 'event_log' => '事件日志', 'request_log' => '请求日志', 'app_birthday' => '在线日期', + ], + 'welcome' => [ + 'widget_title_default' => '欢迎', + 'welcome_back_name' => '欢迎归来 :app, :name.', + 'welcome_to_name' => '欢迎到 :app, :name.', + 'first_sign_in' => '这是你第一次登陆.', + 'last_sign_in' => '你最后登陆是', + 'view_access_logs' => '访问登陆日志', + 'nice_message' => '祝你有美好的一天!', ] ], 'user' => [ @@ -113,6 +131,10 @@ return [ 'allow' => '允许', 'inherit' => '继承', 'deny' => '拒绝', + 'activated' => '已激活', + 'last_login' => '最后登陆', + 'created_at' => '创建时间', + 'updated_at' => '更新时间', 'group' => [ 'name' => '组', 'name_comment' => '该名字将在群组列表中展示', @@ -141,20 +163,28 @@ return [ 'missing_column' => '没有 :columns 的栏定义.', 'missing_columns' => ':class 中使用的列表没有定义好的栏.', 'missing_definition' => "列表不包含 ':field' 栏.", + 'missing_parent_definition' => "List 的行为未包含一个 ':definition'.", 'behavior_not_ready' => '列表没有初始化, 确认你的控制器中调用了makeLists().', 'invalid_column_datetime' => "栏值 ':column' 不是时间对象, 缺少了 \$dates 在模型中的引用吗?", 'pagination' => '显示记录: :from-:to :total', + 'first_page' => 'First page', + 'last_page' => 'Last page', 'prev_page' => '上一页', 'next_page' => '下一页', + 'refresh' => '刷新', + 'updating' => '更新中...', 'loading' => '加载中...', 'setup_title' => '建立列表', 'setup_help' => '使用多选框选择你想在列表中看到的栏. 你可以通过拖拽调整栏的位置.', 'records_per_page' => '每页的记录', 'records_per_page_help' => '选择每页想显示的记录数量. 请注意一页中太多记录可能会降低性能.', + 'check' => 'Check', 'delete_selected' => '删除选择的', 'delete_selected_empty' => '没有需要删除的记录.', 'delete_selected_confirm' => '删除选中的记录?', 'delete_selected_success' => '成功删除选择的记录.', + 'column_switch_true' => 'Yes', + 'column_switch_false' => 'No' ], 'fileupload' => [ 'attachment' => '附件', @@ -175,6 +205,7 @@ return [ 'create_success' => ':name 创建成功', 'update_success' => ':name 更新成功', 'delete_success' => ':name 删除成功', + 'reset_success' => '成功恢复默认', 'missing_id' => '表单记录ID没有指定.', 'missing_model' => ':class 中使用的表单没有定义的model.', 'missing_definition' => "表单不包含字段 ':field'.", @@ -190,6 +221,8 @@ return [ 'saving_name' => '保存 :name...', 'delete' => '删除', 'deleting' => '删除中...', + 'confirm_delete' => '你确定删除记录?', + 'confirm_delete_multiple' => '确定删除选中的的记录?', 'deleting_name' => '删除 :name...', 'reset_default' => '重置到默认', 'resetting' => '重置', @@ -203,20 +236,32 @@ return [ 'close' => '关闭', 'confirm' => '确认', 'reload' => '重载', + 'complete' => '完成', 'ok' => 'OK', 'or' => '或', 'confirm_tab_close' => '你真的想要关闭这个标签吗? 未保存的改变会丢失.', 'behavior_not_ready' => '表单还没初始化, 确保你调用了控制器中的 initForm().', 'preview_no_files_message' => '文件没有上传。', + 'preview_no_media_message' => '没有选中的媒体.', 'preview_no_record_message' => '没有选择记录。', 'select' => '选择', 'select_all' => '全部', 'select_none' => '无', 'select_placeholder' => '请选择', 'insert_row' => '插入行', + 'insert_row_below' => '在下面插入行', 'delete_row' => '删除行', 'concurrency_file_changed_title' => '文件改动', - 'concurrency_file_changed_description' => "你正在编辑的文件正在被其他用户修改. 你可以重载或覆盖磁盘上的文件." + 'concurrency_file_changed_description' => "你正在编辑的文件正在被其他用户修改. 你可以重载或覆盖磁盘上的文件.", + 'return_to_list' => '返回列表' + ], + 'recordfinder' => [ + 'find_record' => '查找记录', + 'cancel' => '取消', + ], + 'pagelist' => [ + 'page_link' => '页面链接', + 'select_page' => '选择一个页面...' ], 'relation' => [ 'missing_config' => "关系没有':config'的配置文件.", @@ -251,6 +296,10 @@ return [ 'unlink_name' => "取消关联 :name", 'unlink_confirm' => "你确定?", ], + 'reorder' => [ + 'default_title' => '重新排序记录', + 'no_records' => '没有可供排序的记录.' + ], 'model' => [ 'name' => '模型', 'not_found' => "ID为 :id 的 模型 ':class' 找不到", @@ -263,8 +312,9 @@ return [ 'warnings' => [ 'tips' => '系统配置技巧', 'tips_description' => '你需要注意下面的问题, 以使系统更好的工作。', - 'permissions' => '目录 :name 或子目录对PHP不可写. 请在服务器上对这个目录设置正确的权限.', - 'extension' => 'PHP扩展 :name 没安装,请安装这个库并且激活扩展.' + 'permissions' => '目录 :name 或子目录对PHP不可写. 请在服务器上对这个目录设置正确的权限.', + 'extension' => 'PHP扩展 :name 没安装,请安装这个库并且激活扩展.', + 'plugin_missing' => '依赖于插件 :name,但是该插件未安装 . 请安装该插件.' ], 'editor' => [ 'menu_label' => '代码编辑器选项', @@ -273,11 +323,44 @@ return [ 'tab_size' => '标签大小', 'use_hard_tabs' => '使用tabs缩进', 'code_folding' => '代码折叠', + 'code_folding_begin' => 'Mark begin', + 'code_folding_begin_end' => 'Mark begin and end', + 'autocompletion' => '自动完成', 'word_wrap' => '自动换行', 'highlight_active_line' => '高亮活动的行', + 'auto_closing' => '自动关闭标签', 'show_invisibles' => '显示隐藏字符', 'show_gutter' => '显示侧边栏', - 'theme' => '色彩主题' + 'basic_autocompletion'=> '基本的自动完成 (Ctrl + Space)', + 'live_autocompletion'=> 'Live Autocompletion', + 'enable_snippets'=> '开启代码片段 (Tab)', + 'display_indent_guides'=> '显示缩进指南', + 'show_print_margin'=> '显示打印边距', + 'mode_off' => 'Off', + 'mode_fluid' => 'Fluid', + '40_characters' => '40个字符', + '80_characters' => '80个字符', + 'theme' => '色彩主题', + 'markup_styles' => '标记样式', + 'custom_styles' => '定制样式表', + 'custom styles_comment' => '在HTML编辑器中包含自定义样式', + 'markup_classes' => '标记类', + 'paragraph' => '段落', + 'link' => '链接', + 'table' => '表格', + 'table_cell' => '单元格', + 'image' => '图像', + 'label' => '标签', + 'class_name' => '类名字', + 'markup_tags' => '标记标签', + 'allowed_empty_tags' => '允许空标签', + 'allowed_empty_tags_comment' => '当标签内没有内容的时候,该标签不会被移除.', + 'allowed_tags' => '允许标签', + 'allowed_tags_comment' => '允许标签的列表.', + 'no_wrap' => '不能包裹的标签', + 'no_wrap_comment' => '列出的标签不能包裹在快级标签中.', + 'remove_tags' => '移除标签', + 'remove_tags_comment' => '列出的标签将会和它包裹的内容一起删除.' ], 'tooltips' => [ 'preview_website' => '预览网站' @@ -306,13 +389,22 @@ return [ 'secondary_color' => '次要 color', 'accent_color' => 'Accent color', 'styles' => '样式', - 'custom_stylesheet' => '自定义样式' + 'custom_stylesheet' => '自定义样式', + 'navigation' => '导航', + 'menu_mode' => '菜单样式', + 'menu_mode_inline' => '行内', + 'menu_mode_tile' => '标题', + 'menu_mode_collapsed' => '已折叠' ], 'backend_preferences' => [ 'menu_label' => '后台设置', 'menu_description' => '管理你的后台设置, 比如希望使用的语言。', + 'region' => '地区', + 'code_editor' => '代码编辑器', + 'timezone' => '时区', + 'timezone_comment' => '选择你希望使用的本地语言。', 'locale' => '语言', - 'locale_comment' => '选择你希望使用的本地语言。' + 'locale_comment' => '选择您想要的语言环境.' ], 'access_log' => [ 'hint' => '这个日志显示了管理员成功登录的信息. 记录保持 :days 天。', @@ -326,6 +418,80 @@ return [ 'email' => '电子邮箱' ], 'filter' => [ - 'all' => '全部' + 'all' => '全部', + 'options_method_not_exists' => "模型 :model中必须定义一个方法 :method()为过滤器 ':filter'返回可选项.", + 'date_all' => '所有时期' + ], + 'import_export' => [ + 'upload_csv_file' => '1. 上传一个CSV 文件', + 'import_file' => '导入文件', + 'first_row_contains_titles' => '第一行包含列标题', + 'first_row_contains_titles_desc' => 'Leave this checked if the first row in the CSV is used as the column titles.', + 'match_columns' => '2. 将文件的列跟数据库的字段匹配', + 'file_columns' => '文件列', + 'database_fields' => '数据库字段', + 'set_import_options' => '3. 设置导入选项', + 'export_output_format' => '1. 导出输出格式', + 'file_format' => '文件格式', + 'standard_format' => '标准格式', + 'custom_format' => '自定义格式', + 'delimiter_char' => '定界符', + 'enclosure_char' => 'Enclosure character', + 'escape_char' => '转义字符', + 'select_columns' => '2. 选择导出的列', + 'column' => '列', + 'columns' => '列', + 'set_export_options' => '3. 设置导出选项', + 'show_ignored_columns' => '显示忽略的列', + 'auto_match_columns' => '自动匹配列', + 'created' => '已创建', + 'updated' => '已更新', + 'skipped' => '已跳过', + 'warnings' => '警告', + 'errors' => '错误', + 'skipped_rows' => '跳过的行数', + 'import_progress' => '导入进度', + 'processing' => '处理中...', + 'import_error' => '导入错误', + 'upload_valid_csv' => '请上传正确的CSV 文件.', + 'drop_column_here' => '删除列在这里……', + 'ignore_this_column' => '忽略该列', + 'processing_successful_line1' => '文件导出完成!', + 'processing_successful_line2' => '浏览器现在将重定向到文件下载.', + 'export_progress' => '导出进度', + 'export_error' => '导出错误', + 'column_preview' => '预览列', + 'file_not_found_error' => '文件未找到', + 'empty_error' => '没有提供导出的数据', + 'empty_import_columns_error' => '请指定要导入的列.', + 'match_some_column_error' => '请先与一些列匹配.', + 'required_match_column_error' => 'Please specify a match for the required field :label.', + 'empty_export_columns_error' => '请指定要导出的列.', + 'behavior_missing_uselist_error' => 'You must implement the controller behavior ListController with the export "useList" option enabled.', + 'missing_model_class_error' => 'Please specify the modelClass property for :type', + 'missing_column_id_error' => 'Missing column identifier', + 'unknown_column_error' => '位置的列', + 'encoding_not_supported_error' => '源文件编码不能识别. 请选择自定义文件格式选项和正确的编码来导入您的文件.', + 'encoding_format' => '文件编码', + 'encodings' => [ + 'utf_8' => 'UTF-8', + 'us_ascii' => 'US-ASCII', + 'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)', + 'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)', + 'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)', + 'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)', + 'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)', + 'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)', + 'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)', + 'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)', + 'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)', + 'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)', + 'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)', + 'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)', + 'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)', + 'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)', + 'windows_1251' => 'Windows-1251 (CP1251)', + 'windows_1252' => 'Windows-1252 (CP1252)' + ] ] ]; From dfcf324d008b6c20122a20a2b26b43a22111583f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hartmut=20Gl=C3=BCcker?= Date: Tue, 4 Jul 2017 16:10:58 +0200 Subject: [PATCH 13/25] Support changing the global default for richeditor buttons (#2937) Added support for changing the global default for richeditor buttons. Addresses: #2677, #2384, #2078, #1743 and rainlab/pages-plugin#188 --- modules/backend/formwidgets/RichEditor.php | 1 + .../formwidgets/richeditor/partials/_richeditor.htm | 3 ++- modules/backend/lang/en/lang.php | 4 +++- modules/backend/models/editorsetting/fields.yaml | 7 +++++++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/modules/backend/formwidgets/RichEditor.php b/modules/backend/formwidgets/RichEditor.php index c8af07eab..75a291ba5 100644 --- a/modules/backend/formwidgets/RichEditor.php +++ b/modules/backend/formwidgets/RichEditor.php @@ -85,6 +85,7 @@ class RichEditor extends FormWidgetBase $this->vars['value'] = $this->getLoadValue(); $this->vars['toolbarButtons'] = $this->evalToolbarButtons(); + $this->vars['globalToolbarButtons'] = EditorSetting::getConfigured('html_toolbar_buttons'); $this->vars['allowEmptyTags'] = EditorSetting::getConfigured('html_allow_empty_tags'); $this->vars['allowTags'] = EditorSetting::getConfigured('html_allow_tags'); $this->vars['noWrapTags'] = EditorSetting::getConfigured('html_no_wrap_tags'); diff --git a/modules/backend/formwidgets/richeditor/partials/_richeditor.htm b/modules/backend/formwidgets/richeditor/partials/_richeditor.htm index 9df80113d..d04470b9c 100755 --- a/modules/backend/formwidgets/richeditor/partials/_richeditor.htm +++ b/modules/backend/formwidgets/richeditor/partials/_richeditor.htm @@ -8,7 +8,8 @@ data-fullpage="true" data-read-only="true" data-editor-lang="" - data-toolbar-buttons="" + data-toolbar-buttons="" + data-toolbar-buttons="" data-allow-empty-tags="" data-allow-tags="" data-no-wrap-tags="" diff --git a/modules/backend/lang/en/lang.php b/modules/backend/lang/en/lang.php index c5090c624..ff8036a8d 100644 --- a/modules/backend/lang/en/lang.php +++ b/modules/backend/lang/en/lang.php @@ -361,7 +361,9 @@ return [ 'no_wrap' => 'Do not wrap tags', 'no_wrap_comment' => 'The list of tags that should not be wrapped inside block tags.', 'remove_tags' => 'Remove tags', - 'remove_tags_comment' => 'The list of tags that are removed together with their content.' + 'remove_tags_comment' => 'The list of tags that are removed together with their content.', + 'toolbar_buttons' => 'Toolbar Buttons', + 'toolbar_buttons_comment' => 'The Toolbar Buttons to be displayed in the Rich Editor by default. [fullscreen, bold, italic, underline, strikeThrough, subscript, superscript, fontFamily, fontSize, |, color, emoticons, inlineStyle, paragraphStyle, |, paragraphFormat, align, formatOL, formatUL, outdent, indent, quote, insertHR, -, insertLink, insertImage, insertVideo, insertAudio, insertFile, insertTable, undo, redo, clearFormatting, selectAll, html]', ], 'tooltips' => [ 'preview_website' => 'Preview the website' diff --git a/modules/backend/models/editorsetting/fields.yaml b/modules/backend/models/editorsetting/fields.yaml index fef115f0b..ad4c746b0 100644 --- a/modules/backend/models/editorsetting/fields.yaml +++ b/modules/backend/models/editorsetting/fields.yaml @@ -95,3 +95,10 @@ tabs: tab: backend::lang.editor.markup_tags type: textarea span: auto + + html_toolbar_buttons: + label: backend::lang.editor.toolbar_buttons + comment: backend::lang.editor.toolbar_buttons_comment + tab: backend::lang.editor.toolbar_buttons + type: textarea + span: auto From 3dba1a8f61fb60cbb78a09452713447b51dfc0fd Mon Sep 17 00:00:00 2001 From: Sevdin Filiz Date: Tue, 4 Jul 2017 17:30:48 +0300 Subject: [PATCH 14/25] Make SettingsManager more like NavigationManager (#2954) Enables partial modification of Setting Items just like is currently supported in Menu Items --- modules/system/classes/SettingsManager.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/system/classes/SettingsManager.php b/modules/system/classes/SettingsManager.php index b3741aca4..1be02cc15 100644 --- a/modules/system/classes/SettingsManager.php +++ b/modules/system/classes/SettingsManager.php @@ -252,6 +252,10 @@ class SettingsManager { $itemKey = $this->makeItemKey($owner, $code); + if (isset($this->items[$itemKey])) { + $definition = array_merge((array) $this->items[$itemKey], $definition); + } + $item = array_merge(self::$itemDefaults, array_merge($definition, [ 'code' => $code, 'owner' => $owner From 9b2e37e287aab490d54b02817405203b4235a4f7 Mon Sep 17 00:00:00 2001 From: Luke Towers Date: Tue, 4 Jul 2017 08:32:37 -0600 Subject: [PATCH 15/25] Early removal of HHVM Early merge of https://github.com/octobercms/october/commit/2424a6563d354bf0a6548cf832a34b5501a61b73 because it's annoying that the builds fail on pull requests for the develop branch all of the time. --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 906c7b881..0b88eae46 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,6 @@ php: - 5.6 - 7.0 - 7.1 - - hhvm - nightly matrix: From 1a5e86e38d2ca088b382576947910e652bf254ca Mon Sep 17 00:00:00 2001 From: Luke Towers Date: Tue, 4 Jul 2017 18:55:42 -0600 Subject: [PATCH 16/25] Improve support for non-id primary keys Related: #2760 --- modules/backend/formwidgets/TagList.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/backend/formwidgets/TagList.php b/modules/backend/formwidgets/TagList.php index 8064bd2ba..b0f594f99 100644 --- a/modules/backend/formwidgets/TagList.php +++ b/modules/backend/formwidgets/TagList.php @@ -122,7 +122,7 @@ class TagList extends FormWidgetBase foreach ($newTags as $newTag) { $newModel = $relationModel::create([$this->nameFrom => $newTag]); - $existingTags[$newModel->id] = $newTag; + $existingTags[$newModel->getKey()] = $newTag; } return array_keys($existingTags); From e8e42099093d4968cb1654c8f15eb1e2be1ac2c7 Mon Sep 17 00:00:00 2001 From: Tschallacka Date: Wed, 5 Jul 2017 02:56:38 +0200 Subject: [PATCH 17/25] Fix inflexible relation toolbar (#2760) Improves support for models that don't use `id` as their primary key. --- .../backend/behaviors/relationcontroller/partials/_toolbar.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/backend/behaviors/relationcontroller/partials/_toolbar.htm b/modules/backend/behaviors/relationcontroller/partials/_toolbar.htm index 7e0c03224..3b23bd498 100644 --- a/modules/backend/behaviors/relationcontroller/partials/_toolbar.htm +++ b/modules/backend/behaviors/relationcontroller/partials/_toolbar.htm @@ -4,7 +4,7 @@ relationMakePartial('button_update', [ - 'relationManageId' => $relationViewModel->id + 'relationManageId' => $relationViewModel->getKey() ]) ?> relationMakePartial('button_'.$button) ?> From aeba740243fa238dd41f65fd1571394c7377b38d Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Sat, 8 Jul 2017 16:53:08 +0200 Subject: [PATCH 18/25] Add getStatusCode() in Cms\Classes\Controller (#2959) Related: #2953. Provide a method to access the current statusCode of a CMS controller. --- modules/cms/classes/Controller.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/cms/classes/Controller.php b/modules/cms/classes/Controller.php index 5bc8ebac1..f3c64f2e9 100644 --- a/modules/cms/classes/Controller.php +++ b/modules/cms/classes/Controller.php @@ -1022,6 +1022,15 @@ class Controller // Getters // + /** + * Returns the status code for the current web response. + * @return int Status code + */ + public function getStatusCode() + { + return $this->statusCode; + } + /** * Returns an existing instance of the controller. * If the controller doesn't exists, returns null. From 2a16847724b255a9ca874f3534f259be15106d38 Mon Sep 17 00:00:00 2001 From: Luke Towers Date: Sat, 8 Jul 2017 13:34:04 -0600 Subject: [PATCH 19/25] Add support for readOnly Repeater Widgets (#2960) * Add support for previewMode in Repeater FormWidget Refs: #2724, https://github.com/octobercms/october/commit/5f91c45f7997571290b3cbc1307a69b642d6c6e6 * Add support for previewMode in Repeater FormWidget Refs: #2724, https://github.com/octobercms/october/commit/5f91c45f7997571290b3cbc1307a69b642d6c6e6 * Add support for previewMode in Repeater FormWidget Refs: #2724, https://github.com/octobercms/october/commit/5f91c45f7997571290b3cbc1307a69b642d6c6e6 * Add support for previewMode in Repeater FormWidget Refs: #2724, https://github.com/octobercms/october/commit/5f91c45f7997571290b3cbc1307a69b642d6c6e6 --- modules/backend/formwidgets/Repeater.php | 10 +++++ .../repeater/assets/js/repeater.js | 7 +++- .../repeater/partials/_repeater.htm | 38 ++++++++++--------- .../repeater/partials/_repeater_item.htm | 32 ++++++++-------- 4 files changed, 53 insertions(+), 34 deletions(-) diff --git a/modules/backend/formwidgets/Repeater.php b/modules/backend/formwidgets/Repeater.php index dd9bf7b82..efec0c143 100644 --- a/modules/backend/formwidgets/Repeater.php +++ b/modules/backend/formwidgets/Repeater.php @@ -91,6 +91,10 @@ class Repeater extends FormWidgetBase 'maxItems', ]); + if ($this->formField->disabled) { + $this->previewMode = true; + } + $fieldName = $this->formField->getName(false); $this->indexInputName = self::INDEX_PREFIX.$fieldName; $this->groupInputName = self::GROUP_PREFIX.$fieldName; @@ -116,6 +120,12 @@ class Repeater extends FormWidgetBase */ public function prepareVars() { + if ($this->previewMode) { + foreach ($this->formWidgets as $widget) { + $widget->previewMode = true; + } + } + $this->vars['indexInputName'] = $this->indexInputName; $this->vars['groupInputName'] = $this->groupInputName; diff --git a/modules/backend/formwidgets/repeater/assets/js/repeater.js b/modules/backend/formwidgets/repeater/assets/js/repeater.js index d1fda348e..3c23f8530 100644 --- a/modules/backend/formwidgets/repeater/assets/js/repeater.js +++ b/modules/backend/formwidgets/repeater/assets/js/repeater.js @@ -1,6 +1,6 @@ /* * Field Repeater plugin - * + * * Data attributes: * - data-control="fieldrepeater" - enables the plugin on an element * - data-option="value" - an option with a value @@ -193,6 +193,11 @@ var $textInput = $('input[type=text]:first', $target) if ($textInput.length) { return $textInput.val() + } else { + var $disabledTextInput = $('.text-field > .form-control', $target) + if ($disabledTextInput.length) { + return $disabledTextInput.text() + } } return defaultText diff --git a/modules/backend/formwidgets/repeater/partials/_repeater.htm b/modules/backend/formwidgets/repeater/partials/_repeater.htm index 79cea1e78..aec9388e6 100644 --- a/modules/backend/formwidgets/repeater/partials/_repeater.htm +++ b/modules/backend/formwidgets/repeater/partials/_repeater.htm @@ -13,24 +13,26 @@ -

+ previewMode): ?> +
+ + + + + + + + + +
+