Upgrade to 3.2.4

This commit is contained in:
Bastian Allgeier
2019-09-03 11:01:57 +02:00
parent f79bc3248c
commit ff9b5b1861
25 changed files with 1053 additions and 140 deletions

16
kirby/SECURITY.md Executable file
View File

@@ -0,0 +1,16 @@
# Security Policy
## Supported Versions
| Version | Supported |
| ------- | ------------------ |
| 3.2.3+ | :white_check_mark: |
| 2.5.12+ | :white_check_mark: |
## Security Guide
Please follow our security guide to keep your Kirby installation safe: https://getkirby.com/docs/guide/security#reporting-security-issues
## Reporting a Vulnerability
If you have spotted a vulnerability in Kirby's core or the Panel, please make sure to let us know immediately. We take any report very seriously. You can always write us directly at support@getkirby.com. Please do not write to us publicly, e.g. in the forum.

View File

@@ -1,7 +1,7 @@
{ {
"name": "getkirby/cms", "name": "getkirby/cms",
"description": "The Kirby 3 core", "description": "The Kirby 3 core",
"version": "3.2.3", "version": "3.2.4",
"license": "proprietary", "license": "proprietary",
"keywords": ["kirby", "cms", "core"], "keywords": ["kirby", "cms", "core"],
"homepage": "https://getkirby.com", "homepage": "https://getkirby.com",

57
kirby/config/aliases.php Executable file
View File

@@ -0,0 +1,57 @@
<?php
return [
// cms classes
'asset' => 'Kirby\Cms\Asset',
'collection' => 'Kirby\Cms\Collection',
'dir' => 'Kirby\Cms\Dir',
'field' => 'Kirby\Cms\Field',
'file' => 'Kirby\Cms\File',
'files' => 'Kirby\Cms\Files',
'html' => 'Kirby\Cms\Html',
'kirby' => 'Kirby\Cms\App',
'page' => 'Kirby\Cms\Page',
'pages' => 'Kirby\Cms\Pages',
'pagination' => 'Kirby\Cms\Pagination',
'r' => 'Kirby\Cms\R',
'response' => 'Kirby\Cms\Response',
's' => 'Kirby\Cms\S',
'site' => 'Kirby\Cms\Site',
'structure' => 'Kirby\Cms\Structure',
'url' => 'Kirby\Cms\Url',
'user' => 'Kirby\Cms\User',
'users' => 'Kirby\Cms\Users',
'visitor' => 'Kirby\Cms\Visitor',
// data handler
'data' => 'Kirby\Data\Data',
'json' => 'Kirby\Data\Json',
'yaml' => 'Kirby\Data\Yaml',
// data classes
'database' => 'Kirby\Database\Database',
'db' => 'Kirby\Database\Db',
// http classes
'cookie' => 'Kirby\Http\Cookie',
'header' => 'Kirby\Http\Header',
'remote' => 'Kirby\Http\Remote',
'server' => 'Kirby\Http\Server',
// image classes
'dimensions' => 'Kirby\Image\Dimensions',
// toolkit classes
'a' => 'Kirby\Toolkit\A',
'c' => 'Kirby\Toolkit\Config',
'config' => 'Kirby\Toolkit\Config',
'escape' => 'Kirby\Toolkit\Escape',
'f' => 'Kirby\Toolkit\F',
'i18n' => 'Kirby\Toolkit\I18n',
'mime' => 'Kirby\Toolkit\Mime',
'obj' => 'Kirby\Toolkit\Obj',
'str' => 'Kirby\Toolkit\Str',
'tpl' => 'Kirby\Toolkit\Tpl',
'v' => 'Kirby\Toolkit\V',
'xml' => 'Kirby\Toolkit\Xml'
];

View File

@@ -6,7 +6,7 @@ use Kirby\Cms\File;
return [ return [
'props' => [ 'props' => [
/** /**
* Sets the upload options for linked files * Sets the upload options for linked files (since 3.2.0)
*/ */
'uploads' => function ($uploads = []) { 'uploads' => function ($uploads = []) {
if ($uploads === false) { if ($uploads === false) {

View File

@@ -10,7 +10,7 @@ return [
'before' => null, 'before' => null,
/** /**
* Enables/disables the format buttons. Can either be `true`/`false` or a list of allowed buttons. Available buttons: `headlines`, `italic`, `bold`, `link`, `email`, `file`, `list`, `code`, `ul`, `ol` (as well as `|` for a divider) * Enables/disables the format buttons. Can either be `true`/`false` or a list of allowed buttons. Available buttons: `headlines`, `italic`, `bold`, `link`, `email`, `file`, `code`, `ul`, `ol` (as well as `|` for a divider)
*/ */
'buttons' => function ($buttons = true) { 'buttons' => function ($buttons = true) {
return $buttons; return $buttons;
@@ -73,6 +73,12 @@ return [
return $size; return $size;
}, },
/**
* If `false`, spellcheck will be switched off
*/
'spellcheck' => function (bool $spellcheck = false) {
return $spellcheck;
},
'value' => function (string $value = null) { 'value' => function (string $value = null) {
return trim($value); return trim($value);

View File

@@ -13,61 +13,7 @@ require_once __DIR__ . '/helpers.php';
/** /**
* Class aliases * Class aliases
*/ */
$aliases = [ $aliases = require_once __DIR__ . '/aliases.php';
// cms classes
'asset' => 'Kirby\Cms\Asset',
'collection' => 'Kirby\Cms\Collection',
'dir' => 'Kirby\Cms\Dir',
'field' => 'Kirby\Cms\Field',
'file' => 'Kirby\Cms\File',
'files' => 'Kirby\Cms\Files',
'html' => 'Kirby\Cms\Html',
'kirby' => 'Kirby\Cms\App',
'page' => 'Kirby\Cms\Page',
'pages' => 'Kirby\Cms\Pages',
'pagination' => 'Kirby\Cms\Pagination',
'r' => 'Kirby\Cms\R',
'response' => 'Kirby\Cms\Response',
's' => 'Kirby\Cms\S',
'site' => 'Kirby\Cms\Site',
'structure' => 'Kirby\Cms\Structure',
'url' => 'Kirby\Cms\Url',
'user' => 'Kirby\Cms\User',
'users' => 'Kirby\Cms\Users',
'visitor' => 'Kirby\Cms\Visitor',
// data handler
'data' => 'Kirby\Data\Data',
'json' => 'Kirby\Data\Json',
'yaml' => 'Kirby\Data\Yaml',
// data classes
'database' => 'Kirby\Database\Database',
'db' => 'Kirby\Database\Db',
// http classes
'cookie' => 'Kirby\Http\Cookie',
'header' => 'Kirby\Http\Header',
'remote' => 'Kirby\Http\Remote',
'server' => 'Kirby\Http\Server',
// image classes
'dimensions' => 'Kirby\Image\Dimensions',
// toolkit classes
'a' => 'Kirby\Toolkit\A',
'c' => 'Kirby\Toolkit\Config',
'config' => 'Kirby\Toolkit\Config',
'escape' => 'Kirby\Toolkit\Escape',
'f' => 'Kirby\Toolkit\F',
'i18n' => 'Kirby\Toolkit\I18n',
'mime' => 'Kirby\Toolkit\Mime',
'obj' => 'Kirby\Toolkit\Obj',
'str' => 'Kirby\Toolkit\Str',
'tpl' => 'Kirby\Toolkit\Tpl',
'v' => 'Kirby\Toolkit\V',
'xml' => 'Kirby\Toolkit\Xml'
];
spl_autoload_register(function ($class) use ($aliases) { spl_autoload_register(function ($class) use ($aliases) {
$class = strtolower($class); $class = strtolower($class);

View File

@@ -37,6 +37,7 @@
"error.access.login": "Invalid login", "error.access.login": "Invalid login",
"error.access.panel": "You are not allowed to access the panel", "error.access.panel": "You are not allowed to access the panel",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "The profile picture could not be uploaded", "error.avatar.create.fail": "The profile picture could not be uploaded",
"error.avatar.delete.fail": "The profile picture could not be deleted", "error.avatar.delete.fail": "The profile picture could not be deleted",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Invalid converter \"{converter}\"", "error.field.converter.invalid": "Invalid converter \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission": "error.file.changeName.permission":
"You are not allowed to change the name of \"{filename}\"", "You are not allowed to change the name of \"{filename}\"",
"error.file.duplicate": "A file with the name \"{filename}\" already exists", "error.file.duplicate": "A file with the name \"{filename}\" already exists",

View File

@@ -28,9 +28,9 @@
"duplicate": "Duplica", "duplicate": "Duplica",
"edit": "Modifica", "edit": "Modifica",
"dialog.files.empty": "No files to select", "dialog.files.empty": "Nessun file selezionabile",
"dialog.pages.empty": "No pages to select", "dialog.pages.empty": "Nessuna pagina selezionabile",
"dialog.users.empty": "No users to select", "dialog.users.empty": "Nessuno user selezionabile",
"email": "Email", "email": "Email",
"email.placeholder": "mail@esempio.com", "email.placeholder": "mail@esempio.com",
@@ -71,9 +71,9 @@
"error.form.incomplete": "Correggi tutti gli errori nel form...", "error.form.incomplete": "Correggi tutti gli errori nel form...",
"error.form.notSaved": "Non è stato possibile salvare il form", "error.form.notSaved": "Non è stato possibile salvare il form",
"error.language.code": "Please enter a valid code for the language", "error.language.code": "Inserisci un codice valido per la lingua",
"error.language.duplicate": "The language already exists", "error.language.duplicate": "La lingua esiste già",
"error.language.name": "Please enter a valid name for the language", "error.language.name": "Inserisci un nome valido per la lingua",
"error.license.format": "Inserisci un codice di licenza valido", "error.license.format": "Inserisci un codice di licenza valido",
"error.license.email": "Inserisci un indirizzo email valido", "error.license.email": "Inserisci un indirizzo email valido",
@@ -183,9 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Inserisci un valore che contiene \"{needle}\"", "Inserisci un valore che contiene \"{needle}\"",
"error.validation.date": "Inserisci una data valida", "error.validation.date": "Inserisci una data valida",
"error.validation.date.after": "Please enter a date after {date}", "error.validation.date.after": "Inserisci una data dopo il {date}",
"error.validation.date.before": "Please enter a date before {date}", "error.validation.date.before": "Inserisci una data prima del {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}", "error.validation.date.between": "Inserisci una data tra {min} e {max}",
"error.validation.denied": "Per favore nega", "error.validation.denied": "Per favore nega",
"error.validation.different": "Il valore non dev'essere \"{other}\"", "error.validation.different": "Il valore non dev'essere \"{other}\"",
"error.validation.email": "Inserisci un indirizzo email valido", "error.validation.email": "Inserisci un indirizzo email valido",
@@ -265,7 +265,7 @@
"language.direction.ltr": "Sinistra a destra", "language.direction.ltr": "Sinistra a destra",
"language.direction.rtl": "Destra a sinistra", "language.direction.rtl": "Destra a sinistra",
"language.locale": "Stringa \"PHP locale\"", "language.locale": "Stringa \"PHP locale\"",
"language.locale.warning": "You are using a custom locale set up. Please modify it in the language file in /site/languages", "language.locale.warning": "Stai usando una impostazione personalizzata per il locale. Modificalo nel file della lingua situato in /site/languages",
"language.name": "Nome", "language.name": "Nome",
"language.updated": "La lingua è stata aggiornata", "language.updated": "La lingua è stata aggiornata",

449
kirby/i18n/translations/lt.json Executable file
View File

@@ -0,0 +1,449 @@
{
"add": "Pridėti",
"avatar": "Profilio nuotrauka",
"back": "Atgal",
"cancel": "Atšaukti",
"change": "Keisti",
"close": "Uždaryti",
"confirm": "Ok",
"copy": "Kopijuoti",
"create": "Sukurti",
"date": "Data",
"date.select": "Pasirinkite datą",
"day": "Diena",
"days.fri": "Penktadienis",
"days.mon": "Pirmadienis",
"days.sat": "Šeštadienis",
"days.sun": "Sekmadienis",
"days.thu": "Ketvirtadienis",
"days.tue": "Antradienis",
"days.wed": "Trečiadienis",
"delete": "Pašalinti",
"dimensions": "Išmatavimai",
"discard": "Atšaukti",
"download": "Parsisiųsti",
"duplicate": "Kopijuoti",
"edit": "Redaguoti",
"dialog.files.empty": "Nėra failų pasirinkimui",
"dialog.pages.empty": "Nėra puslapių pasirinkimui",
"dialog.users.empty": "Nėra vartotojų pasirinkimui",
"email": "El. paštas",
"email.placeholder": "mail@example.com",
"error.access.login": "Neteisingas prisijungimo vardas",
"error.access.panel": "Neturite teisės prisijungti prie valdymo pulto",
"error.avatar.create.fail": "Nepavyko įkelti profilio nuotraukos",
"error.avatar.delete.fail": "Nepavyko pašalinti profilio nuotraukos",
"error.avatar.dimensions.invalid":
"Profilio nuotraukos plotis ar aukštis turėtų būti iki 3000 pikselių",
"error.avatar.mime.forbidden":
"Profilio nuotrauka turi būti JPEG arba PNG",
"error.blueprint.notFound": "Blueprint \"{name}\" negali būti užkrautas",
"error.email.preset.notFound": "El. pašto paruoštukas \"{name}\" nerastas",
"error.field.converter.invalid": "Neteisingas konverteris \"{converter}\"",
"error.file.changeName.permission":
"Neturite teisės pakeisti failo pavadinimo \"{filename}\"",
"error.file.duplicate": "Failas su pavadinimu \"{filename}\" jau yra",
"error.file.extension.forbidden":
"Failo tipas (plėtinys) \"{extension}\" neleidžiamas",
"error.file.extension.missing":
"Failui \"{filename}\" trūksta tipo (plėtinio)",
"error.file.mime.differs":
"Įkėliamas failas turi būti tokio pat mime tipo \"{mime}\"",
"error.file.mime.forbidden": "Media tipas \"{mime}\" neleidžiamas",
"error.file.mime.missing":
"Failui \"{filename}\" nepavyko atpažinti media (mime) tipo",
"error.file.name.missing": "Failo pavadinimas negali būti tuščias",
"error.file.notFound": "Failas \"{filename}\" nerastas",
"error.file.type.forbidden": "Jūs neturite teisės įkelti {type} tipo failų",
"error.file.undefined": "Failas nerastas",
"error.form.incomplete": "🙏 Prašome ištaisyti visas formos klaidas…",
"error.form.notSaved": "Formos nepavyko išsaugoti",
"error.language.code": "Prašome įrašyti teisingą kalbos kodą",
"error.language.duplicate": "Tokia kalba jau yra",
"error.language.name": "Prašome įrašyti teisingą kalbos pavadinimą",
"error.license.format": "Prašome įrašyti teisingą licenzijos kodą",
"error.license.email": "Prašome įrašyti teisingą el. pašto adresą",
"error.license.verification": "Nepavyko patikrinti licenzijos",
"error.page.changeSlug.permission":
"Neturite teisės pakeisti \"{slug}\" URL",
"error.page.changeStatus.incomplete":
"Puslapis turi klaidų ir negali būti paskelbtas",
"error.page.changeStatus.permission":
"Šiam puslapiui negalima pakeisti statuso",
"error.page.changeStatus.toDraft.invalid":
"Puslapio \"{slug}\" negalima paversti juodraščiu",
"error.page.changeTemplate.invalid":
"Šablono puslapiui \"{slug}\" negalima keisti",
"error.page.changeTemplate.permission":
"Neturite leidimo keisti šabloną puslapiui \"{slug}\"",
"error.page.changeTitle.empty": "Pavadinimas negali būti tuščias",
"error.page.changeTitle.permission":
"Neturite leidimo keisti pavadinimo puslapiui \"{slug}\"",
"error.page.create.permission": "Neturite leidimo sukurti \"{slug}\"",
"error.page.delete": "Puslapio \"{slug}\" negalima pašalinti",
"error.page.delete.confirm": "Įrašykite puslapio pavadinimą, tam kad patvirtintumėte",
"error.page.delete.hasChildren":
"Puslapis turi vidinių puslapių, dėl to negalima jo pašalinti",
"error.page.delete.permission": "Neturite leidimo šalinti \"{slug}\"",
"error.page.draft.duplicate":
"Puslapio juodraštis su URL pabaiga \"{slug}\" jau yra",
"error.page.duplicate":
"Puslapis su URL pabaiga \"{slug}\" jau yra",
"error.page.duplicate.permission": "Neturite leidimo dubliuoti \"{slug}\"",
"error.page.notFound": "Puslapis \"{slug}\" nerastas",
"error.page.num.invalid":
"Įrašykite teisingą eiliškumo numerį. Numeris negali būti neigiamas.",
"error.page.slug.invalid": "Įrašykite teisingą URL prefiksą",
"error.page.sort.permission": "Puslapiui \"{slug}\" negalima pakeisti eiliškumo",
"error.page.status.invalid": "Nustatykite teisingą puslapio statusą",
"error.page.undefined": "Puslapis nerastas",
"error.page.update.permission": "Neturite leidimo atnaujinti \"{slug}\"",
"error.section.files.max.plural":
"Į sekciją \"{section}\" negalima pridėti daugiau nei {max} failų",
"error.section.files.max.singular":
"Į sekciją \"{section}\" negalima pridėti daugiau nei vieną failą",
"error.section.files.min.plural":
"Sekcija \"{section}\" reikalauja bent {min} failų",
"error.section.files.min.singular":
"Sekcija \"{section}\" reikalauja bent vieno failo",
"error.section.pages.max.plural":
"Į sekciją \"{section}\" negalima pridėti daugiau nei {max} puslapių",
"error.section.pages.max.singular":
"Į sekciją \"{section}\" negalima pridėti daugiau nei vieną puslapį",
"error.section.pages.min.plural":
"Sekcija \"{section}\" reikalauja bent {min} puslapių",
"error.section.pages.min.singular":
"Sekcija \"{section}\" reikalauja bent vieno puslapio",
"error.section.notLoaded": "Sekcija \"{name}\" negali būti užkrauta",
"error.section.type.invalid": "Sekcijos tipas \"{type}\" yra neteisingas",
"error.site.changeTitle.permission":
"Neturite leidimo keisti svetainės pavadinimo",
"error.site.update.permission": "Neturite leidimo atnaujinti svetainės",
"error.template.default.notFound": "Nėra šablono pagal nutylėjimą",
"error.user.changeEmail.permission":
"Neturite leidimo keisti vartotojo \"{name}\" el. paštą",
"error.user.changeLanguage.permission":
"Neturite leidimo keisti vartotojo \"{name}\" kalbą",
"error.user.changeName.permission":
"Neturite leidimo keisti vartotojo \"{name}\" vardą",
"error.user.changePassword.permission":
"Neturite leidimo keisti vartotojo \"{name}\" slaptažodį",
"error.user.changeRole.lastAdmin":
"Vienintelio administratoriaus rolės negalima pakeisti",
"error.user.changeRole.permission":
"Neturite leidimo pakeisti vartotojo \"{name}\" rolės",
"error.user.create.permission": "Neturite leidimo sukurti šį vartotoją",
"error.user.delete": "Vartotojo \"{name}\" negalima pašalinti",
"error.user.delete.lastAdmin": "Vienintelio administratoriaus negalima pašalinti",
"error.user.delete.lastUser": "Vienintelio vartotojo negalima pašalinti",
"error.user.delete.permission":
"Neturite leidimo pašalinti vartotoją \"{name}\"",
"error.user.duplicate":
"Vartotojas su el. paštu \"{email}\" jau yra",
"error.user.email.invalid": "Įrašykite teisingą el. pašto adresą",
"error.user.language.invalid": "Įrašykite teisingą kalbą",
"error.user.notFound": "Vartotojas \"{name}\" nerastas",
"error.user.password.invalid":
"Prašome įrašyti galiojantį slaptažodį. Slaptažodį turi sudaryti bent 8 simboliai.",
"error.user.password.notSame": "Slaptažodžiai nesutampa",
"error.user.password.undefined": "Vartotojas neturi slaptažodžio",
"error.user.role.invalid": "Įrašykite teisingą rolę",
"error.user.undefined": "Vartotojas nerastas",
"error.user.update.permission":
"Neturite teisės keisti vartotojo \"{name}\"",
"error.validation.accepted": "Prašome patvirtinti",
"error.validation.alpha": "Prašome įrašyti tik raides a-z",
"error.validation.alphanum":
"Prašome įrašyti tik raides a-z arba skaičius 0-9",
"error.validation.between":
"Prašome įrašyti reikšmę tarp \"{min}\" ir \"{max}\"",
"error.validation.boolean": "Patvirtinkite arba atšaukite",
"error.validation.contains":
"Prašome įrašyti reikšmę, kuri turėtų \"{needle}\"",
"error.validation.date": "Prašome įrašyti korektišką datą",
"error.validation.date.after": "Įrašykite datą nuo {date}",
"error.validation.date.before": "Įrašykite datą iki {date}",
"error.validation.date.between": "Įrašykite datą tarp {min} ir {max}",
"error.validation.denied": "Prašome neleisti",
"error.validation.different": "Reikšmė neturi būti \"{other}\"",
"error.validation.email": "Prašome įrašyti korektišką el. paštą",
"error.validation.endswith": "Reikšmė turi baigtis su \"{end}\"",
"error.validation.filename": "Prašome įrašyti teisingą failo pavadinimą",
"error.validation.in": "Prašome įrašyti vieną iš šių: ({in})",
"error.validation.integer": "Prašome įrašyti teisingą sveiką skaičių",
"error.validation.ip": "Prašome įrašyti teisingą IP adresą",
"error.validation.less": "Prašome įrašyti mažiau nei {max}",
"error.validation.match": "Reikšmė nesutampa su laukiamu šablonu",
"error.validation.max": "Prašome įrašyti reikšmę lygią arba didesnę, nei {max}",
"error.validation.maxlength":
"Prašome įrašyti trumpesnę reikšmę. (max. {max} characters)",
"error.validation.maxwords": "Please enter no more than {max} word(s)",
"error.validation.min": "Please enter a value equal to or greater than {min}",
"error.validation.minlength":
"Prašome įrašyti ilgesnę reikšmę. (min. {min} characters)",
"error.validation.minwords": "Prašome įrašyti bent {min} žodžius",
"error.validation.more": "Prašome įrašyti daugiau nei {min}",
"error.validation.notcontains":
"Prašome įrašyti reikšmę, kuri neturi \"{needle}\"",
"error.validation.notin":
"Prašome neįrašyti vieną iš šių: ({notIn})",
"error.validation.option": "Prašome pasirinkti korektišką opciją",
"error.validation.num": "Prašome įrašyti teisingą numerį",
"error.validation.required": "Prašome įrašyti ką nors",
"error.validation.same": "Prašome įrašyti \"{other}\"",
"error.validation.size": "Reikšmės dydis turi būti \"{size}\"",
"error.validation.startswith": "Reikšmė turi prasidėti su \"{start}\"",
"error.validation.time": "Prašome įrašyti korektišką laiką",
"error.validation.url": "Prašome įrašyti teisingą URL",
"field.files.empty": "Dar nėra failų",
"field.pages.empty": "Dar nėra puslapių",
"field.structure.delete.confirm": "Ar tikrai norite pašalinti šią eilutę?",
"field.structure.empty": "Dar nėra įrašų",
"field.users.empty": "Dar nėra vartotojų",
"file.delete.confirm":
"Ar tikrai norite pašalinti <br><strong>{filename}</strong>?",
"files": "Failai",
"files.empty": "Dar nėra failų",
"hour": "Valanda",
"insert": "Įterpti",
"install": "Įdiegti",
"installation": "Įdiegimas",
"installation.completed": "Valdymo pultas įdiegtas",
"installation.disabled": "Pagal nutylėjimą valdymo pulto įdiegimas viešuose serveriuose yra negalimas. Prašome įdiegti lokalioje aplinkoje arba įgalinkite jį su <code>panel.install</code> opcija.",
"installation.issues.accounts":
"Katalogas <code>/site/accounts</code> neegzistuoja arba neturi įrašymo teisių",
"installation.issues.content":
"Katalogas <code>/content</code> neegzistuoja arba neturi įrašymo teisių",
"installation.issues.curl": "Plėtinys <code>CURL</code> yra privalomas",
"installation.issues.headline": "Nepavyko įdiegti valdymo pulto",
"installation.issues.mbstring":
"Plėtinys <code>MB String</code> yra privalomas",
"installation.issues.media":
"Katalogas <code>/media</code> neegzistuoja arba neturi įrašymo teisių",
"installation.issues.php": "Įsitikinkite, kad naudojama <code>PHP 7+</code>",
"installation.issues.server":
"Kirby reikalauja <code>Apache</code>, <code>Nginx</code> arba <code>Caddy</code>",
"installation.issues.sessions": "Katalogas <code>/site/sessions</code> neegzistuoja arba neturi įrašymo teisių",
"language": "Kalba",
"language.code": "Kodas",
"language.convert": "Padaryti pagrindinį",
"language.convert.confirm":
"<p>Do you really want to convert <strong>{name}</strong> to the default language? This cannot be undone.</p><p>If <strong>{name}</strong> has untranslated content, there will no longer be a valid fallback and parts of your site might be empty.</p>",
"language.create": "Pridėti naują kalbą",
"language.delete.confirm":
"Ar tikrai norite pašalinti <strong>{name}</strong> kalbą, kartu su visais vertimais? Grąžinti nebus įmanoma! 🙀",
"language.deleted": "Kalba pašalinta",
"language.direction": "Skaitymo kryptis",
"language.direction.ltr": "Iš kairės į dešinę",
"language.direction.rtl": "Iš dešinės į kairę",
"language.locale": "PHP locale string",
"language.locale.warning": "Jūs naudojate pasirinktinį lokalės nustatymą. Prašome pakeisti jį faile /site/languages",
"language.name": "Pavadinimas",
"language.updated": "Kalba atnaujinta",
"languages": "Kalbos",
"languages.default": "Pagrindinė kalba",
"languages.empty": "Dar nėra kalbų",
"languages.secondary": "Papildomos kalbos",
"languages.secondary.empty": "Dar nėra papildomų kalbų",
"license": "Licenzija",
"license.buy": "Pirkti licenziją",
"license.register": "Registruoti",
"license.register.help":
"Licenzijos kodą gavote el. paštu po apmokėjimo. Prašome įterpti čia, kad sistema būtų užregistruota.",
"license.register.label": "Prašome įrašyti jūsų licenzijos kodą",
"license.register.success": "Ačiū, kad palaikote Kirby",
"license.unregistered": "Tai neregistruota Kirby demo versija",
"link": "Nuoroda",
"link.text": "Nuorodos tekstas",
"loading": "Kraunasi",
"lock.unsaved": "Neišsaugoti pakeitimai",
"lock.isLocked": "Vartotojo <strong>{email}</strong> neišsaugoti pakeitimai",
"lock.file.isLocked": "Šį failą dabar redaguoja kitas vartotojas {email}, tad jo negalima pekeisti.",
"lock.page.isLocked": "Šį puslapį dabar redaguoja kitas vartotojas {email}, tad jo negalima pekeisti.",
"lock.unlock": "Atrakinti",
"lock.isUnlocked": "Jūsų neišsaugoti pakeitimai buvo perrašyti kito vartotojo. Galite parsisiųsti savo pakeitimus ir įkelti juos rankiniu būdu.",
"login": "Prisijungti",
"login.remember": "Likti prisijungus",
"logout": "Atsijungti",
"menu": "Meniu",
"meridiem": "AM/PM",
"mime": "Media Tipas",
"minutes": "Minutės",
"month": "Mėnuo",
"months.april": "Balandis",
"months.august": "August",
"months.december": "Gruodis",
"months.february": "Vasaris",
"months.january": "Sausis",
"months.july": "Liepa",
"months.june": "Birželis",
"months.march": "Kovas",
"months.may": "Gegužė",
"months.november": "Lapkritis",
"months.october": "Spalis",
"months.september": "Rugsėjis",
"more": "Daugiau",
"name": "Pavadinimas",
"next": "Toliau",
"off": "off",
"on": "on",
"open": "Atidaryti",
"options": "Pasirinkimai",
"orientation": "Orientacija",
"orientation.landscape": "Horizontali",
"orientation.portrait": "Portretas",
"orientation.square": "Kvadratas",
"page.changeSlug": "Pakeisti URL",
"page.changeSlug.fromTitle": "Sukurti URL pagal pavadinimą",
"page.changeStatus": "Pakeisti statusą",
"page.changeStatus.position": "Pasirinkite poziciją",
"page.changeStatus.select": "Pasirinkite statusą",
"page.changeTemplate": "Pakeisti šabloną",
"page.delete.confirm":
"🙀 Ar tikrai norite pašalinti puslapį <strong>{title}</strong>?",
"page.delete.confirm.subpages":
"<strong>Šis puslapis turi sub-puslapių</strong>. <br>Visi sub-puslapiai taip pat bus pašalinti.",
"page.delete.confirm.title": "Įrašykite puslapio pavadinimą tam, kad patvirtinti",
"page.draft.create": "Sukurti juodraštį",
"page.duplicate.appendix": "Kopijuoti",
"page.duplicate.files": "Kopijuoti failus",
"page.duplicate.pages": "Kopijuoti puslapius",
"page.status": "Statusas",
"page.status.draft": "Juodraštis",
"page.status.draft.description":
"Puslapis nematomas viešai, bet matomas tik prisijungusiems administratoriams",
"page.status.listed": "Paskelbtas",
"page.status.listed.description": "Matomas viešai visiems",
"page.status.unlisted": "Nerodomas",
"page.status.unlisted.description": "Rodomas viešai visiems, bet tik per URL",
"pages": "Puslapiai",
"pages.empty": "Dar nėra puslapių",
"pages.status.draft": "Juodraščiai",
"pages.status.listed": "Paskelbti",
"pages.status.unlisted": "Nerodomi",
"password": "Slaptažodis",
"pixel": "Pikselis",
"prev": "Ankstesnis",
"remove": "Pašalinti",
"rename": "Pervadinti",
"replace": "Apkeisti",
"retry": "Bandyti dar",
"revert": "Grąžinti",
"role": "Rolė",
"role.admin.description": "Admin turi visas teises",
"role.admin.title": "Admin",
"role.all": "Visos",
"role.empty": "Nėra vartotojų su tokia role",
"role.description.placeholder": "Be aprašymo",
"role.nobody.description": "Ši rolė bus naudojama jei nenustatytos jokios teisės",
"role.nobody.title": "Niekas",
"save": "Išsaugoti",
"search": "Ieškoti",
"select": "Pasirinkti",
"settings": "Nustatymai",
"size": "Dydis",
"slug": "URL pabaiga",
"sort": "Rikiuoti",
"title": "Pavadinimas",
"template": "Puslapio šablonas",
"today": "Šiandien",
"toolbar.button.code": "Kodas",
"toolbar.button.bold": "Bold",
"toolbar.button.email": "El. paštas",
"toolbar.button.headings": "Antraštės",
"toolbar.button.heading.1": "Heading 1",
"toolbar.button.heading.2": "Heading 2",
"toolbar.button.heading.3": "Heading 3",
"toolbar.button.italic": "Italic",
"toolbar.button.file": "Failas",
"toolbar.button.file.select": "Pasirinkite failą",
"toolbar.button.file.upload": "Įkelti failą",
"toolbar.button.link": "Nuoroda",
"toolbar.button.ol": "Sąrašas su skaičiais",
"toolbar.button.ul": "Sąrašas su taškais",
"translation.author": "Roman U",
"translation.direction": "ltr",
"translation.name": "Lietuvių",
"upload": "Įkelti",
"upload.errors": "Klaida",
"upload.progress": "Įkėlimas…",
"url": "Url",
"url.placeholder": "https://example.com",
"user": "Vartotojas",
"user.blueprint":
"Galite nustatyti papildomas sekcijas ir formos laukelius šiai vartotojo rolei faile <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Keisti el. paštą",
"user.changeLanguage": "Keisti kalbą",
"user.changeName": "Pervadinti vartotoją",
"user.changePassword": "Keisti slaptažodį",
"user.changePassword.new": "Naujas slaptažodis",
"user.changePassword.new.confirm": "Patvirtinti naują slaptažodį…",
"user.changeRole": "Keisti rolę",
"user.changeRole.select": "Pasirinkti naują rolę",
"user.create": "Pridėti naują vartotoją",
"user.delete": "Pašalinti šį vartotoją",
"user.delete.confirm":
"Ar tikrai norite pašalinti vartotoją <br><strong>{email}</strong>?",
"users": "Vartotojai",
"version": "Versija",
"view.account": "Jūsų paskyra",
"view.installation": "Installation",
"view.settings": "Nustatymai",
"view.site": "Svetainė",
"view.users": "Vartotojai",
"welcome": "Sveiki",
"year": "Metai"
}

449
kirby/i18n/translations/ru.json Executable file
View File

@@ -0,0 +1,449 @@
{
"add": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c",
"avatar": "\u0410\u0432\u0430\u0442\u0430\u0440 (\u0444\u043e\u0442\u043e)",
"back": "Назад",
"cancel": "\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c",
"change": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c",
"close": "\u0417\u0430\u043a\u0440\u044b\u0442\u044c",
"confirm": "Сохранить",
"copy": "Скопировать",
"create": "Создать",
"date": "Дата",
"date.select": "Выберите дату",
"day": "День",
"days.fri": "\u041f\u0442",
"days.mon": "\u041f\u043d",
"days.sat": "\u0421\u0431",
"days.sun": "\u0412\u0441",
"days.thu": "\u0427\u0442",
"days.tue": "\u0412\u0442",
"days.wed": "\u0421\u0440",
"delete": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c",
"dimensions": "Размеры",
"discard": "\u0421\u0431\u0440\u043e\u0441",
"download": "Скачать",
"duplicate": "Дублировать",
"edit": "\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c",
"dialog.files.empty": "Нет файлов для выбора",
"dialog.pages.empty": "Нет страниц для выбора",
"dialog.users.empty": "Нет пользователей для выбора",
"email": "Эл. почта",
"email.placeholder": "pochta@domen.com",
"error.access.login": "Неправильный логин",
"error.access.panel": "У вас нет права доступа к панели",
"error.avatar.create.fail": "Не удалось загрузить фотографию профиля",
"error.avatar.delete.fail": "\u0410\u0432\u0430\u0442\u0430\u0440 (\u0444\u043e\u0442\u043e) \u043a \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d",
"error.avatar.dimensions.invalid":
"Пожалуйста, сделайте чтобы ширина или высота фотографии была меньше 3000 пикселей",
"error.avatar.mime.forbidden":
"Фотография профиля должна быть JPEG или PNG",
"error.blueprint.notFound": "Не удалось загрузить blueprint \"{name}\"",
"error.email.preset.notFound": "Шаблон эл. почты \"{name}\" не найден",
"error.field.converter.invalid": "Неверный конвертер \"{converter}\"",
"error.file.changeName.permission":
"У вас нет права поменять название \"{filename}\"",
"error.file.duplicate": "Файл с названием \"{filename}\" уже есть",
"error.file.extension.forbidden":
"Расширение файла \"{extension}\" неразрешено",
"error.file.extension.missing":
"Файлу \"{filename}\" не хватает расширения",
"error.file.mime.differs":
"Загруженный файл должен быть того же mime типа: \"{mime}\"",
"error.file.mime.forbidden": "Тип медиа \"{mime}\" не допустим",
"error.file.mime.missing":
"Не удалось определить тип медиа для файла \"{filename}\"",
"error.file.name.missing": "Название файла не может быть пустым",
"error.file.notFound": "\u0424\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d",
"error.file.type.forbidden": "У вас нет права загружать файлы {type}",
"error.file.undefined": "\u0424\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d",
"error.form.incomplete": "Пожалуйста, исправьте все ошибки в форме",
"error.form.notSaved": "Форма не может быть сохранена",
"error.language.code": "Пожалуйста, впишите правильный код языка",
"error.language.duplicate": "Язык уже есть",
"error.language.name": "Пожалуйста, впишите правильное название языка",
"error.license.format": "Пожалуйста, введите правильный лицензионный код",
"error.license.email": "Пожалуйста, введите правильный адрес эл. почты",
"error.license.verification": "Лицензия не подтверждена",
"error.page.changeSlug.permission":
"\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c URL \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
"error.page.changeStatus.incomplete":
"На странице есть ошибки и поэтому ее нельзя опубликовать",
"error.page.changeStatus.permission":
"Невозможно поменять статус для этой страницы",
"error.page.changeStatus.toDraft.invalid":
"Невозможно конвертировать в черновик страницу \"{slug}\"",
"error.page.changeTemplate.invalid":
"Невозможно поменять шаблон страницы \"{slug}\"",
"error.page.changeTemplate.permission":
"У вас нет права поменять шаблон для \"{slug}\"",
"error.page.changeTitle.empty": "Название не может быть пустым",
"error.page.changeTitle.permission":
"у вас нет права поменять название \"{slug}\"",
"error.page.create.permission": "У вас нет права создать \"{slug}\"",
"error.page.delete": "Невозможно удалить страницу \"{slug}\"",
"error.page.delete.confirm": "Впишите название страницы чтобы подтвердить",
"error.page.delete.hasChildren":
"У страницы есть внутренние страницы, поэтому ее невозможно удалить",
"error.page.delete.permission": "У вас нет права удалить \"{slug}\"",
"error.page.draft.duplicate":
"Черновик страницы с аппендиксом URL \"{slug}\" уже есть",
"error.page.duplicate":
"Страница с аппендиксом URL \"{slug}\" уже есть",
"error.page.duplicate.permission": "У вас нет права дублировать \"{slug}\"",
"error.page.notFound": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430",
"error.page.num.invalid":
"Пожалуйста, впишите правильное число сортировки. Число не может быть отрицательным.",
"error.page.slug.invalid": "Пожалуйста, впишите правильный префикс URL",
"error.page.sort.permission": "Невозможно сортировать страницу \"{slug}\"",
"error.page.status.invalid": "Пожалуйста, установите верный статус страницы",
"error.page.undefined": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430",
"error.page.update.permission": "У вас нет права обновить \"{slug}\"",
"error.section.files.max.plural":
"Нельзя добавить больше чем {max} файлов в секции \"{section}\"",
"error.section.files.max.singular":
"Можно добавить не больше 1 файла в секции \"{section}\"",
"error.section.files.min.plural":
"Секция \"{section}\" требует хотя бы {min} файлов",
"error.section.files.min.singular":
"Секция \"{section}\" требует хотя бы 1 файл",
"error.section.pages.max.plural":
"Можно добавить не больше {max} страниц в секции \"{section}\"",
"error.section.pages.max.singular":
"Нельзя добавить больше чем 1 страницу в секции \"{section}\"",
"error.section.pages.min.plural":
"Секция \"{section}\" требует хотя бы {min} страниц",
"error.section.pages.min.singular":
"Секция \"{section}\" требует хотя бы одну страницу",
"error.section.notLoaded": "Секция \"{name}\" не может быть загружена",
"error.section.type.invalid": "Тип секции {type} неверный",
"error.site.changeTitle.permission":
"У вас нет права поменять название сайта",
"error.site.update.permission": "У вас нет права обновить сайт",
"error.template.default.notFound": "Нет шаблона по умолчанию",
"error.user.changeEmail.permission":
"У вас нет права поменять эл. почту пользователя \"{name}\"",
"error.user.changeLanguage.permission":
"У вас нет права поменять язык для пользователя \"{name}\"",
"error.user.changeName.permission":
"У вас нет права поменять имя пользователя \"{name}\"",
"error.user.changePassword.permission":
"У вас нет права поменять пароль для пользователя \"{name}\"",
"error.user.changeRole.lastAdmin":
"Роль единственного администратора нельзя поменять",
"error.user.changeRole.permission":
"У вас нет права поменять поль для пользователя \"{name}\"",
"error.user.create.permission": "У вас нет права создать этого пользователя",
"error.user.delete": "\u0410\u043a\u043a\u0430\u0443\u043d\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d",
"error.user.delete.lastAdmin": "\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430",
"error.user.delete.lastUser": "Нельзя удалить единственного пользователя",
"error.user.delete.permission":
"У вас нет права удалить пользователя \"{name}\"",
"error.user.duplicate":
"Пользователь с эл. почтой \"{email}\" уже есть",
"error.user.email.invalid": "Пожалуйста, введите правильный адрес эл. почты",
"error.user.language.invalid": "Впишите правильный язык",
"error.user.notFound": "\u0410\u043a\u043a\u0430\u0443\u043d\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d",
"error.user.password.invalid":
"Пожалуйста, впишите правильный пароль. Он должен быть минимум из 8 символов.",
"error.user.password.notSame": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c",
"error.user.password.undefined": "У пользователя нет пароля",
"error.user.role.invalid": "Впишите правильную роль",
"error.user.undefined": "\u0410\u043a\u043a\u0430\u0443\u043d\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d",
"error.user.update.permission":
"У вас нет права обновить пользователя \"{name}\"",
"error.validation.accepted": "Пожалуйста, подтвердите",
"error.validation.alpha": "Пожалуйста, впишите только буквы a-z",
"error.validation.alphanum":
"Пожалуйста, впишите только буквы a-z или числа 0-9",
"error.validation.between":
"Пожалуйста, впишите значение от \"{min}\" до \"{max}\"",
"error.validation.boolean": "Пожалуйста, подтвердите или отмените",
"error.validation.contains":
"Пожалуйста, впишите значение, которое содержит \"{needle}\"",
"error.validation.date": "Пожалуйста, впишите правильную дату",
"error.validation.date.after": "Пожалуйста, впишите дату после {date}",
"error.validation.date.before": "Пожалуйста, впишите дату до {date}",
"error.validation.date.between": "Пожалуйста, впишите дату между {min} и {max}",
"error.validation.denied": "Пожалуйста отмените",
"error.validation.different": "Значение не может быть \"{other}\"",
"error.validation.email": "Пожалуйста, введите правильный адрес эл. почты",
"error.validation.endswith": "Значение должно заканчиваться с \"{end}\"",
"error.validation.filename": "Пожалуйста, впишите правильное название файла",
"error.validation.in": "Пожалуйста, впишите одно из следующих: ({in})",
"error.validation.integer": "Пожалуйста, впишите правильное целое число",
"error.validation.ip": "Пожалуйста, впишите правильный IP адрес",
"error.validation.less": "Пожалуйста, впишите значение меньше чем {max}",
"error.validation.match": "Значение не соответствует ожидаемому шаблону",
"error.validation.max": "Пожалуйста, впишите значение равное или больше чем {max}",
"error.validation.maxlength":
"Пожалуйста, впишите значение короче (макс. {max} символов)",
"error.validation.maxwords": "Пожалуйста, впишите не более {max} слов ",
"error.validation.min": "Пожалуйста, впишите значение равное или больше чем {min}",
"error.validation.minlength":
"Пожалуйста, впишите значение длиннее (мин. {min} символов)",
"error.validation.minwords": "Пожалуйста, впишите хотя бы {min} слов",
"error.validation.more": "Пожалуйста, впишите значение больше, чем {min}",
"error.validation.notcontains":
"Пожалуйста, впишите значение, которое не содержит \"{needle}\"",
"error.validation.notin":
"Пожалуйста, не вписывайте одно из: ({notIn})",
"error.validation.option": "Пожалуйста, выберите правильную опцию ",
"error.validation.num": "Пожалуйста, впишите правильный номер",
"error.validation.required": "Пожалуйста, впишите что-нибудь",
"error.validation.same": "Пожалуйста, впишите \"{other}\"",
"error.validation.size": "Значение размера должно быть \"{size}\"",
"error.validation.startswith": "Значение должно начинаться с \"{start}\"",
"error.validation.time": "Пожалуйста, впишите правильную дату",
"error.validation.url": "Пожалуйста, впишите правильный URL",
"field.files.empty": "Еще не выбраны файлы",
"field.pages.empty": "Еще не выбраны страницы",
"field.structure.delete.confirm": "Вы точно хотите удалить эту запись?",
"field.structure.empty": "Еще нет записей",
"field.users.empty": "Еще нет пользователей",
"file.delete.confirm":
"Вы точно хотите удалить файл?",
"files": "Файлы",
"files.empty": "Еще нет файлов",
"hour": "Час",
"insert": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c",
"install": "Установить",
"installation": "Установка",
"installation.completed": "Панель установлена",
"installation.disabled": "Установка панели по умолчанию отключена на общедоступных серверах. Пожалуйста запустите установку на локальном сервере или включите такую возможность с помощью опции <code>panel.install</code>",
"installation.issues.accounts":
"Каталог <code>/site/accounts</code> не существует или не имеет прав записи",
"installation.issues.content":
"Каталог <code>/content</code> не существует или не имеет прав записи",
"installation.issues.curl": "Расширение <code>CURL</code> необходимо",
"installation.issues.headline": "Не удалось установить панель",
"installation.issues.mbstring":
"Расширение <code>MB String</code> необходимо",
"installation.issues.media":
"Каталог <code>/media</code> не существует или нет прав записи",
"installation.issues.php": "Убедитесь, что используется <code>PHP 7+</code>",
"installation.issues.server":
"Kirby требует <code>Apache</code>, <code>Nginx</code> или <code>Caddy</code> ",
"installation.issues.sessions": "Каталог <code>/site/sessions</code> не существует или нет прав записи",
"language": "\u042f\u0437\u044b\u043a",
"language.code": "Код",
"language.convert": "Установить по умолчанию",
"language.convert.confirm":
"<p>Вы точно хотите конвертировать <strong>{name}</strong> в главный язык? Это нельзя будет отменить.</p><p>Если <strong>{name}</strong> имеет непереведенный контент, то больше не будет верного каскада и части вашего сайта могут быть пустыми.</p>",
"language.create": "Добавить новый язык",
"language.delete.confirm":
"Вы точно хотите удалить <strong>{name}</strong> язык, включая все переводы? Это нельзя будет вернуть.",
"language.deleted": "Язык удален",
"language.direction": "Направление чтения",
"language.direction.ltr": "Слева направо",
"language.direction.rtl": "Справа налево",
"language.locale": "PHP locale string",
"language.locale.warning": "Вы используете кастомную локаль. Пожалуйста измените ее в файле языка в /site/languages",
"language.name": "Название",
"language.updated": "Язык обновлен",
"languages": "Языки",
"languages.default": "Главный язык",
"languages.empty": "Еще нет языков",
"languages.secondary": "Дополнительные языки",
"languages.secondary.empty": "Еще нет дополнительных языков",
"license": "\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f Kirby",
"license.buy": "Купить лицензию",
"license.register": "Зарегистрировать",
"license.register.help":
"После покупки вы получили по эл. почте код лицензии. Пожалуйста скопируйте и вставьте сюда чтобы зарегистрировать.",
"license.register.label": "Пожалуйста вставьте код лицензии",
"license.register.success": "Спасибо за поддержку Kirby",
"license.unregistered": "Это незарегистрированная версия Kirby",
"link": "\u0421\u0441\u044b\u043b\u043a\u0430",
"link.text": "\u0422\u0435\u043a\u0441\u0442 \u0441\u0441\u044b\u043b\u043a\u0438",
"loading": "Загрузка",
"lock.unsaved": "Несохраненные изменения",
"lock.isLocked": "Несохраненные изменения пользователя <strong>{email}</strong>",
"lock.file.isLocked": "В данный момент этот файл редактирует {email}, поэтому его нельзя изменить.",
"lock.page.isLocked": "В данный момент эту страницу редактирует {email}, поэтому его нельзя изменить.",
"lock.unlock": "Разблокировать",
"lock.isUnlocked": "Ваши несохраненные изменения были перезаписаны другим пользователем. Вы можете загрузить ваши изменения и объединить их вручную.",
"login": "Войти",
"login.remember": "Сохранять вход активным",
"logout": "Выйти",
"menu": "Меню",
"meridiem": "До полудня / После полудня",
"mime": "Тип медиа",
"minutes": "Минуты",
"month": "Месяц",
"months.april": "\u0410\u043f\u0440\u0435\u043b\u044c",
"months.august": "\u0410\u0432\u0433\u0443\u0441\u0442",
"months.december": "\u0414\u0435\u043a\u0430\u0431\u0440\u044c",
"months.february": "\u0424\u0435\u0432\u0440\u0430\u043b\u044c",
"months.january": "\u042f\u043d\u0432\u0430\u0440\u044c",
"months.july": "\u0418\u044e\u043b\u044c",
"months.june": "\u0418\u044e\u043d\u044c",
"months.march": "\u041c\u0430\u0440\u0442",
"months.may": "\u041c\u0430\u0439",
"months.november": "\u041d\u043e\u044f\u0431\u0440\u044c",
"months.october": "\u041e\u043a\u0442\u044f\u0431\u0440\u044c",
"months.september": "\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
"more": "Подробнее",
"name": "Название",
"next": "Дальше",
"off": "выключено",
"on": "включено",
"open": "Открыть",
"options": "Опции",
"orientation": "Ориентация",
"orientation.landscape": "Горизонтальная",
"orientation.portrait": "Портретная",
"orientation.square": "Квадрат",
"page.changeSlug": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 (\u0427\u041f\u0423)",
"page.changeSlug.fromTitle": "Создать из названия",
"page.changeStatus": "Изменить статус",
"page.changeStatus.position": "Пожалуйста, выберите позицию",
"page.changeStatus.select": "Выбрать новый статус",
"page.changeTemplate": "Поменять шаблон",
"page.delete.confirm":
"Вы точно хотите удалить эту страницу?",
"page.delete.confirm.subpages":
"<strong>У этой страницы есть внутренние страницы</strong>.<br>Все внутренние страницы так же будут удалены.",
"page.delete.confirm.title": "Напишите название страницы, чтобы подтвердить",
"page.draft.create": "Создать черновик",
"page.duplicate.appendix": "Скопировать",
"page.duplicate.files": "Копировать файлы",
"page.duplicate.pages": "Копировать страницы",
"page.status": "Статус",
"page.status.draft": "Черновик",
"page.status.draft.description":
"Страница в режиме черновика и видна только для авторизированных редакторов",
"page.status.listed": "Опубликована",
"page.status.listed.description": "Страница доступна для всех посетителей",
"page.status.unlisted": "Скрыта",
"page.status.unlisted.description": "Страница доступна только по URL",
"pages": "Страницы",
"pages.empty": "Еще нет страниц",
"pages.status.draft": "Черновики",
"pages.status.listed": "Опубликовано",
"pages.status.unlisted": "Скрытая",
"password": "\u041f\u0430\u0440\u043e\u043b\u044c",
"pixel": "Пиксель",
"prev": "Предыдущий",
"remove": "Удалить",
"rename": "Переназвать",
"replace": "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c",
"retry": "\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c",
"revert": "\u0421\u0431\u0440\u043e\u0441",
"role": "\u0420\u043e\u043b\u044c",
"role.admin.description": "Admin имеет все права",
"role.admin.title": "Admin",
"role.all": "Все",
"role.empty": "Нет пользователей с такой ролью",
"role.description.placeholder": "Без описания",
"role.nobody.description": "Эта роль применяется если у пользователя нет никаких прав",
"role.nobody.title": "Никто",
"save": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c",
"search": "Поиск",
"select": "Выбрать",
"settings": "Настройка",
"size": "Размер",
"slug": "Понятная ссылка (ЧПУ)",
"sort": "Сортировать",
"title": "Название",
"template": "\u0428\u0430\u0431\u043b\u043e\u043d",
"today": "Сегодня",
"toolbar.button.code": "Код",
"toolbar.button.bold": "\u0416\u0438\u0440\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442",
"toolbar.button.email": "\u042d\u043b.\u043f\u043e\u0447\u0442\u0430",
"toolbar.button.headings": "Заголовки",
"toolbar.button.heading.1": "Заголовок 1",
"toolbar.button.heading.2": "Заголовок 2",
"toolbar.button.heading.3": "Заголовок 3",
"toolbar.button.italic": "\u041d\u0430\u043a\u043b\u043e\u043d\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442",
"toolbar.button.file": "Файл",
"toolbar.button.file.select": "Выбрать файл",
"toolbar.button.file.upload": "Закачать файл",
"toolbar.button.link": "\u0421\u0441\u044b\u043b\u043a\u0430",
"toolbar.button.ol": "Нумерованный список",
"toolbar.button.ul": "Маркированный список",
"translation.author": "Команда Кирби",
"translation.direction": "ltr",
"translation.name": "Русский (Russian)",
"upload": "Закачать",
"upload.errors": "Ошибка",
"upload.progress": "Закачивается...",
"url": "Url",
"url.placeholder": "https://example.com",
"user": "Пользователь",
"user.blueprint":
"Вы можете определить новые секции и поля формы для этой роли пользователя в <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Поменять эл. почту",
"user.changeLanguage": "Поменять язык",
"user.changeName": "Переназвать этого пользователя",
"user.changePassword": "Поменять пароль",
"user.changePassword.new": "Новый пароль",
"user.changePassword.new.confirm": "Подтвердить новый пароль",
"user.changeRole": "Поменять роль",
"user.changeRole.select": "Выбрать новую роль",
"user.create": "Добавить нового пользователя",
"user.delete": "Удалить этого пользователя",
"user.delete.confirm":
"\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442?",
"users": "Пользователи",
"version": "\u0412\u0435\u0440\u0441\u0438\u044f Kirby",
"view.account": "\u0412\u0430\u0448 \u0430\u043a\u043a\u0430\u0443\u043d\u0442",
"view.installation": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430",
"view.settings": "Настройка",
"view.site": "Сайт",
"view.users": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438",
"welcome": "Добро пожаловать",
"year": "Год"
}

View File

@@ -183,9 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Ange ett värde som innehåller \"{needle}\"", "Ange ett värde som innehåller \"{needle}\"",
"error.validation.date": "Ange ett giltigt datum", "error.validation.date": "Ange ett giltigt datum",
"error.validation.date.after": "Please enter a date after {date}", "error.validation.date.after": "Ange ett datum efter {date}",
"error.validation.date.before": "Please enter a date before {date}", "error.validation.date.before": "Ange ett datum före {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}", "error.validation.date.between": "Ange ett datum mellan {min} och {max}",
"error.validation.denied": "Vänligen neka", "error.validation.denied": "Vänligen neka",
"error.validation.different": "Värdet får inte vara \"{other}\"", "error.validation.different": "Värdet får inte vara \"{other}\"",
"error.validation.email": "Ange en giltig e-postadress", "error.validation.email": "Ange en giltig e-postadress",
@@ -265,7 +265,7 @@
"language.direction.ltr": "Vänster till höger", "language.direction.ltr": "Vänster till höger",
"language.direction.rtl": "Höger till vänster", "language.direction.rtl": "Höger till vänster",
"language.locale": "PHP locale string", "language.locale": "PHP locale string",
"language.locale.warning": "You are using a custom locale set up. Please modify it in the language file in /site/languages", "language.locale.warning": "Du använder en anpassad språkinställning. Ändra den i språkfilen i mappen /site/languages",
"language.name": "Namn", "language.name": "Namn",
"language.updated": "Språket har uppdaterats", "language.updated": "Språket har uppdaterats",

View File

@@ -265,7 +265,7 @@
"language.direction.ltr": "Soldan sağa", "language.direction.ltr": "Soldan sağa",
"language.direction.rtl": "Sağdan sola", "language.direction.rtl": "Sağdan sola",
"language.locale": "PHP yerel dizesi", "language.locale": "PHP yerel dizesi",
"language.locale.warning": "You are using a custom locale set up. Please modify it in the language file in /site/languages", "language.locale.warning": "Özel bir yerel ayar kullanıyorsunuz. Lütfen /site/languages konumundaki dil dosyasından değiştirin.",
"language.name": "İsim", "language.name": "İsim",
"language.updated": "Dil güncellendi", "language.updated": "Dil güncellendi",
@@ -325,7 +325,7 @@
"next": "Sonraki", "next": "Sonraki",
"off": "kapalı", "off": "kapalı",
"on": "açık", "on": "açık",
"open": "ık", "open": "Önizle",
"options": "Seçenekler", "options": "Seçenekler",
"orientation": "Oryantasyon", "orientation": "Oryantasyon",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1063,12 +1063,13 @@ class App
protected function setLanguages(array $languages = null) protected function setLanguages(array $languages = null)
{ {
if ($languages !== null) { if ($languages !== null) {
$this->languages = new Languages(); $objects = [];
foreach ($languages as $props) { foreach ($languages as $props) {
$language = new Language($props); $objects[] = new Language($props);
$this->languages->data[$language->code()] = $language;
} }
$this->languages = new Languages($objects);
} }
return $this; return $this;

View File

@@ -51,7 +51,6 @@ trait AppPlugins
'fieldMethods' => [], 'fieldMethods' => [],
'fileMethods' => [], 'fileMethods' => [],
'filesMethods' => [], 'filesMethods' => [],
'fileModels' => [],
'fields' => [], 'fields' => [],
'hooks' => [], 'hooks' => [],
'pages' => [], 'pages' => [],
@@ -205,17 +204,6 @@ trait AppPlugins
return $this->extensions['filesMethods'] = Files::$methods = array_merge(Files::$methods, $methods); return $this->extensions['filesMethods'] = Files::$methods = array_merge(Files::$methods, $methods);
} }
/**
* Registers additional file models
*
* @param array $models
* @return array
*/
protected function extendFileModels(array $models): array
{
return $this->extensions['fileModels'] = File::$models = array_merge(File::$models, $models);
}
/** /**
* Registers additional field methods * Registers additional field methods
* *

View File

@@ -197,7 +197,7 @@ class Collection extends BaseCollection
/** /**
* Returns a Collection without the given element(s) * Returns a Collection without the given element(s)
* *
* @param mixxed[] $keys any number of keys, passed as individual arguments * @param mixed[] $keys any number of keys, passed as individual arguments
* @return Kirby\Cms\Collection * @return Kirby\Cms\Collection
*/ */
public function not(...$keys) public function not(...$keys)

View File

@@ -40,7 +40,9 @@ class Email
$this->props = array_merge($this->preset, $props); $this->props = array_merge($this->preset, $props);
// add transport settings // add transport settings
$this->props['transport'] = $this->options['transport'] ?? []; if (isset($this->props['transport']) === false) {
$this->props['transport'] = $this->options['transport'] ?? [];
}
// transform model objects to values // transform model objects to values
foreach (static::$transform as $prop => $model) { foreach (static::$transform as $prop => $model) {

View File

@@ -70,14 +70,6 @@ class File extends ModelWithContent
*/ */
public static $methods = []; public static $methods = [];
/**
* Registry with all File models
*
* @var array
*/
public static $models = [];
/** /**
* The parent object * The parent object
* *
@@ -266,18 +258,13 @@ class File extends ModelWithContent
} }
/** /**
* Constructs a File object and also * Constructs a File object
* takes File models into account.
* *
* @internal * @internal
* @return self * @return self
*/ */
public static function factory($props) public static function factory($props)
{ {
if (empty($props['model']) === false) {
return static::model($props['model'], $props);
}
return new static($props); return new static($props);
} }
@@ -375,27 +362,6 @@ class File extends ModelWithContent
return $this->content(); return $this->content();
} }
/**
* Creates a file model if it has been registered
*
* @internal
* @param string $name
* @param array $props
* @return Kirby\Cms\File
*/
public static function model(string $name, array $props = [])
{
if ($class = (static::$models[$name] ?? null)) {
$object = new $class($props);
if (is_a($object, 'Kirby\Cms\File') === true) {
return $object;
}
}
return new static($props);
}
/** /**
* Get the file's last modification time. * Get the file's last modification time.
* *

View File

@@ -2,6 +2,7 @@
namespace Kirby\Cms; namespace Kirby\Cms;
use Kirby\Exception\DuplicateException;
use Kirby\Toolkit\F; use Kirby\Toolkit\F;
/** /**
@@ -16,6 +17,25 @@ use Kirby\Toolkit\F;
class Languages extends Collection class Languages extends Collection
{ {
/**
* Creates a new collection with the given language objects
*
* @param array $objects
* @param object $parent
*/
public function __construct($objects = [], $parent = null)
{
$defaults = array_filter($objects, function ($language) {
return $language->isDefault() === true;
});
if (count($defaults) > 1) {
throw new DuplicateException('You cannot have multiple default languages. Please check your language config files.');
}
parent::__construct($objects, $parent);
}
/** /**
* Returns all language codes as array * Returns all language codes as array
* *
@@ -69,22 +89,20 @@ class Languages extends Collection
*/ */
public static function load() public static function load()
{ {
$languages = new static; $languages = [];
$files = glob(App::instance()->root('languages') . '/*.php'); $files = glob(App::instance()->root('languages') . '/*.php');
foreach ($files as $file) { foreach ($files as $file) {
$props = include $file; $props = include $file;
if (is_array($props) === true) { if (is_array($props) === true) {
// inject the language code from the filename if it does not exist // inject the language code from the filename if it does not exist
$props['code'] = $props['code'] ?? F::name($file); $props['code'] = $props['code'] ?? F::name($file);
$language = new Language($props); $languages[] = new Language($props);
$languages->data[$language->code()] = $language;
} }
} }
return $languages; return new static($languages);
} }
} }

View File

@@ -463,7 +463,10 @@ trait PageActions
case 'date': case 'date':
case 'datetime': case 'datetime':
$format = $mode === 'date' ? 'Ymd' : 'YmdHi'; $format = $mode === 'date' ? 'Ymd' : 'YmdHi';
return $this->date()->toDate($format, 'now'); $lang = $this->kirby()->defaultLanguage() ?? null;
$field = $this->content($lang)->get('date');
$date = $field->isEmpty() ? 'now' : $field;
return date($format, strtotime($date));
break; break;
case 'default': case 'default':

View File

@@ -4,6 +4,7 @@ namespace Kirby\Cms;
use Kirby\Toolkit\Dir; use Kirby\Toolkit\Dir;
use Kirby\Toolkit\F; use Kirby\Toolkit\F;
use Kirby\Toolkit\Str;
/** /**
* The PanelPlugins class takes care of collecting * The PanelPlugins class takes care of collecting
@@ -78,12 +79,21 @@ class PanelPlugins
foreach ($this->files() as $file) { foreach ($this->files() as $file) {
if (F::extension($file) === $type) { if (F::extension($file) === $type) {
if ($content = F::read($file)) { if ($content = F::read($file)) {
if ($type === 'js') {
$content = trim($content);
// make sure that each plugin is ended correctly
if (Str::endsWith($content, ';') === false) {
$content .= ';';
}
}
$dist[] = $content; $dist[] = $content;
} }
} }
} }
return implode(PHP_EOL, $dist); return implode(PHP_EOL . PHP_EOL, $dist);
} }
/** /**

View File

@@ -163,7 +163,7 @@ class Field extends Component
return $translate; return $translate;
}, },
/** /**
* Conditions when the field will be shown * Conditions when the field will be shown (since 3.1.0)
*/ */
'when' => function ($when = null) { 'when' => function ($when = null) {
return $when; return $when;

View File

@@ -93,7 +93,7 @@ class A
while ($innerKey = array_shift($keys)) { while ($innerKey = array_shift($keys)) {
$currentKey = $currentKey . '.' . $innerKey; $currentKey = $currentKey . '.' . $innerKey;
if (isset($array[$currentKey]) === true) { if (isset($array[$currentKey]) === true && is_array($array[$currentKey])) {
return static::get($array[$currentKey], implode('.', $keys), $default); return static::get($array[$currentKey], implode('.', $keys), $default);
} }
} }

View File

@@ -42,7 +42,7 @@ class Str
'/⁸|₈/' => '8', '/⁸|₈/' => '8',
'/⁹|₉/' => '9', '/⁹|₉/' => '9',
'/À|Á|Â|Ã|Å|Ǻ|Ā|Ă|Ą|Ǎ|Ä|A/' => 'A', '/À|Á|Â|Ã|Å|Ǻ|Ā|Ă|Ą|Ǎ|Ä|A/' => 'A',
'/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª|æ|ǽ|ä|a/' => 'a', '/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª|æ|ǽ|ä|a|а/' => 'a',
'/Б/' => 'B', '/Б/' => 'B',
'/б/' => 'b', '/б/' => 'b',
'/Ç|Ć|Ĉ|Ċ|Č|Ц/' => 'C', '/Ç|Ć|Ĉ|Ċ|Č|Ц/' => 'C',
@@ -60,7 +60,7 @@ class Str
'/Ĥ|Ħ|Х/' => 'H', '/Ĥ|Ħ|Х/' => 'H',
'/ĥ|ħ|х/' => 'h', '/ĥ|ħ|х/' => 'h',
'/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ|И/' => 'I', '/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ|И/' => 'I',
'/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı|и/' => 'i', '/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı|i̇/' => 'i',
'/Ĵ|Й/' => 'J', '/Ĵ|Й/' => 'J',
'/ĵ|й/' => 'j', '/ĵ|й/' => 'j',
'/Ķ|К/' => 'K', '/Ķ|К/' => 'K',
@@ -72,7 +72,7 @@ class Str
'/Ñ|Ń|Ņ|Ň|Н/' => 'N', '/Ñ|Ń|Ņ|Ň|Н/' => 'N',
'/ñ|ń|ņ|ň|ʼn|н/' => 'n', '/ñ|ń|ņ|ň|ʼn|н/' => 'n',
'/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ|Ö|O/' => 'O', '/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ|Ö|O/' => 'O',
'/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º|ö|o/' => 'o', '/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º|ö|o|о/' => 'o',
'/П/' => 'P', '/П/' => 'P',
'/п/' => 'p', '/п/' => 'p',
'/Ŕ|Ŗ|Ř|Р/' => 'R', '/Ŕ|Ŗ|Ř|Р/' => 'R',