Upgrade to 3.5

This commit is contained in:
Bastian Allgeier
2020-12-15 11:01:41 +01:00
parent eabce32cf0
commit 9109130c9c
43 changed files with 306 additions and 159 deletions

View File

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

2
kirby/composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "661c9880132ba63c8203537da65196e1",
"content-hash": "1ec5fdc421a405fb7b885ff3ed7cc137",
"packages": [
{
"name": "claviska/simpleimage",

View File

@@ -1,6 +1,7 @@
<?php
use Kirby\Exception\Exception;
use Kirby\Form\Field;
use Kirby\Toolkit\I18n;
use Kirby\Toolkit\Str;
@@ -59,32 +60,28 @@ return [
* Round to the nearest: sub-options for `unit` (day) and `size` (1)
*/
'step' => function ($step = null) {
if ($step === null) {
return [
$default = [
'size' => 1,
'unit' => 'day'
];
if ($step === null) {
return $default;
}
if (is_array($step) === true) {
$step = array_merge($default, $step);
$step['unit'] = strtolower($step['unit']);
return $step;
}
if (is_int($step) === true) {
return [
'size' => $step,
'unit' => 'day'
];
return array_merge($default, ['size' => $step]);
}
if (is_string($step) === true) {
return [
'size' => 1,
'unit' => $step
];
return array_merge($default, ['unit' => strtolower($step)]);
}
throw new Exception('step option has to be defined as array');
},
/**
@@ -109,25 +106,30 @@ return [
return Str::upper($this->display);
}
},
'step' => function () {
if ($this->time !== false) {
$timeField = require __DIR__ . '/time.php';
return $timeField['props']['step']($this->time['step'] ?? null);
'time' => function () {
if ($this->time === false) {
return false;
}
$props = is_array($this->time) ? $this->time : [];
$props['model'] = $this->model();
$field = new Field('time', $props);
return $field->toArray();
},
'step' => function () {
if ($this->time === false) {
return $this->step;
}
return $this->time['step'];
},
'value' => function () {
return $this->toDatetime($this->value);
},
],
'save' => function ($value) {
if ($value !== null && $timestamp = timestamp($value)) {
$format = $this->time === false ? 'Y-m-d' : 'Y-m-d H:i:s';
return $this->toISO($timestamp, $format);
}
return '';
return $this->toContent($value, $format);
},
'validations' => [
'date',

View File

@@ -23,6 +23,13 @@ return [
'text' => function ($value = null) {
return I18n::translate($value, $value);
},
/**
* Change the design of the info box
*/
'theme' => function (string $theme = null) {
return $theme;
}
],
'computed' => [
'text' => function () {

View File

@@ -4,13 +4,17 @@ return [
'methods' => [
'toDatetime' => function ($value, string $format = 'Y-m-d H:i:s') {
if ($timestamp = timestamp($value, $this->step)) {
return $this->toISO($timestamp, $format);
return date($format, $timestamp);
}
return null;
},
'toISO' => function (int $time, string $format = 'Y-m-d H:i:s') {
return date($format, $time);
'toContent' => function ($value, string $format = 'Y-m-d H:i:s') {
if ($value !== null && $timestamp = strtotime($value)) {
return date($format, $timestamp);
}
return '';
}
]
];

View File

@@ -48,6 +48,7 @@ return [
/**
* `12` or `24` hour notation. If `12`, an AM/PM selector will be shown.
* If `display` is defined, that option will take priority.
*/
'notation' => function (int $value = 24) {
return $value === 24 ? 24 : 12;
@@ -56,32 +57,28 @@ return [
* Round to the nearest: sub-options for `unit` (minute) and `size` (5)
*/
'step' => function ($step = null) {
if ($step === null) {
return [
$default = [
'size' => 5,
'unit' => 'minute'
];
if ($step === null) {
return $default;
}
if (is_array($step) === true) {
$step = array_merge($default, $step);
$step['unit'] = strtolower($step['unit']);
return $step;
}
if (is_int($step) === true) {
return [
'size' => $step,
'unit' => 'minute'
];
return array_merge($default, ['size' => $step]);
}
if (is_string($step) === true) {
return [
'size' => 1,
'unit' => $step
];
return array_merge($default, ['unit' => strtolower($step)]);
}
throw new Exception('step option has to be defined as array');
},
'value' => function ($value = null) {
return $value;
@@ -96,18 +93,14 @@ return [
return $this->display;
}
return $this->notation === 24 ? 'HH:mm' : 'hh:mm a';
return $this->notation === 24 ? 'HH:mm' : 'h:mm a';
},
'value' => function () {
return $this->toDatetime($this->value, 'H:i:s');
}
],
'save' => function ($value): string {
if ($value != null && $timestamp = strtotime($value)) {
return date('H:i:s', $timestamp);
}
return '';
return $this->toContent($value, 'H:i:s');
},
'validations' => [
'time',

View File

@@ -709,10 +709,6 @@ function svg($file)
if (file_exists($file) === false) {
$root = App::instance()->root();
$file = realpath($root . '/' . $file);
if (file_exists($file) === false) {
return false;
}
}
return F::read($file);
@@ -762,10 +758,11 @@ function timestamp(string $date = null, $step = null): ?string
return $date;
}
// fallback for pre-3.5.0 usage
if (is_int($step) === true) {
$step = [
'unit' => 'minute',
'size' => 1
'size' => $step
];
}

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "Не можете да смените името на \"{filename}\"",
"error.file.duplicate": "Файл с име \"{filename}\" вече съществува",
"error.file.extension.forbidden": "Файловото разширение \"{extension}\" не е позволено",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Липсва файлово разширение за файла \"{filename}\"",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
@@ -82,6 +83,7 @@
"error.file.notFound": "Файлът \"{filename}\" не може да бъде намерен",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
"error.file.type.forbidden": "Не е позволен ъплоуда на файлове от тип {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "\u0424\u0430\u0439\u043b\u044a\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d",
"error.form.incomplete": "Моля коригирайте всички грешки във формата...",
@@ -91,6 +93,9 @@
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Please enter a valid license key",
"error.license.email": "Моля въведете валиден email адрес",
"error.license.verification": "The license could not be verified",

View File

@@ -6,8 +6,8 @@
"change": "Canviar",
"close": "Tancar",
"confirm": "Ok",
"collapse": "Collapse",
"collapse.all": "Collapse All",
"collapse": "Col·lapsar",
"collapse.all": "Col·lapsar tot",
"copy": "Copiar",
"create": "Crear",
@@ -24,15 +24,15 @@
"days.wed": "dc.",
"delete": "Eliminar",
"delete.all": "Delete all",
"delete.all": "Eliminar tot",
"dimensions": "Dimensions",
"disabled": "Desactivat",
"discard": "Descartar",
"download": "Descarregar",
"duplicate": "Duplicar",
"edit": "Editar",
"expand": "Expand",
"expand.all": "Expand All",
"expand": "Expandir",
"expand.all": "Expandir tot",
"dialog.files.empty": "No hi ha cap fitxer per seleccionar",
"dialog.pages.empty": "No hi ha cap pàgina per seleccionar",
@@ -41,7 +41,7 @@
"email": "Email",
"email.placeholder": "mail@exemple.com",
"error.access.code": "Invalid code",
"error.access.code": "Codi invàlid",
"error.access.login": "Inici de sessió no vàlid",
"error.access.panel": "No tens permís per accedir al panell",
"error.access.view": "No tens accés a aquesta part del tauler",
@@ -67,6 +67,7 @@
"error.file.changeName.permission": "No tens permís per canviar el nom de \"{filename}\"",
"error.file.duplicate": "Ja existeix un fitxer amb el nom \"{filename}\"",
"error.file.extension.forbidden": "L'extensió de l'arxiu \"{extension}\" no està permesa",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Falta l'extensió de l'arxiu \"{filename}\"",
"error.file.maxheight": "L'alçada de la imatge no ha de ser superior a {height} píxels",
"error.file.maxsize": "El fitxer és massa gran",
@@ -82,6 +83,7 @@
"error.file.notFound": "L'arxiu \"{filename}\" no s'ha trobat",
"error.file.orientation": "Lorientació de la imatge ha de ser \"{orientation}\"",
"error.file.type.forbidden": "No tens permís per penjar fitxers {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "L'arxiu no s'ha trobat",
"error.form.incomplete": "Si us plau, corregeix els errors del formulari ...",
@@ -91,6 +93,9 @@
"error.language.duplicate": "L'idioma ja existeix",
"error.language.name": "Introdueix un nom vàlid per a l'idioma",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Introduïu una clau de llicència vàlida",
"error.license.email": "Si us plau, introdueix una adreça de correu electrònic vàlida",
"error.license.verification": "No sha pogut verificar la llicència",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "Nemáte povoleno změnit jméno souboru \"{filename}\"",
"error.file.duplicate": "Soubor s názvem \"{filename}\" již existuje",
"error.file.extension.forbidden": "Přípona souboru \"{extension}\" není povolena",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Nem\u016f\u017eete nahr\u00e1t soubor bez p\u0159\u00edpony",
"error.file.maxheight": "Výška obrázku nesmí přesáhnout {height} pixelů",
"error.file.maxsize": "Soubor je příliš velký",
@@ -82,6 +83,7 @@
"error.file.notFound": "Soubor se nepoda\u0159ilo nal\u00e9zt",
"error.file.orientation": "Orientace obrázku másí být \"{orientation}\"",
"error.file.type.forbidden": "Nemáte povoleno nahrávat soubory typu {type} ",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "Soubor se nepoda\u0159ilo nal\u00e9zt",
"error.form.incomplete": "Prosím opravte všechny chyby ve formuláři",
@@ -91,6 +93,9 @@
"error.language.duplicate": "Jazyk již existuje",
"error.language.name": "Zadejte prosím platné jméno jazyka",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Zadejte prosím platné licenční číslo",
"error.license.email": "Zadejte prosím platnou emailovou adresu",
"error.license.verification": "Licenci nelze ověřit",

View File

@@ -41,7 +41,7 @@
"email": "Email",
"email.placeholder": "mail@eksempel.dk",
"error.access.code": "Invalid code",
"error.access.code": "Ugyldig kode",
"error.access.login": "Ugyldigt log ind",
"error.access.panel": "Du har ikke adgang til panelet",
"error.access.view": "Du har ikke adgang til denne del af panelet",
@@ -67,6 +67,7 @@
"error.file.changeName.permission": "Du har ikke tilladelse til at ændre navnet på filen \"{filename}\"",
"error.file.duplicate": "En fil med navnet \"{filename}\" eksisterer allerede",
"error.file.extension.forbidden": "Uacceptabel fil-endelse",
"error.file.extension.invalid": "Ugyldig endelse: {extension}",
"error.file.extension.missing": "Du kan ikke uploade filer uden fil-endelse",
"error.file.maxheight": "Højden på billedet af billedet må ikke være større end {height} pixels",
"error.file.maxsize": "Filen er for stor",
@@ -82,6 +83,7 @@
"error.file.notFound": "Filen kunne ikke findes",
"error.file.orientation": "Formatet på billedet skal være \"{orientation}\"",
"error.file.type.forbidden": "Du har ikke tilladelse til at uploade {type} filer",
"error.file.type.invalid": "Ugyldig filtype: {type}",
"error.file.undefined": "Filen kunne ikke findes",
"error.form.incomplete": "Ret venligst alle fejl i formularen...",
@@ -91,6 +93,9 @@
"error.language.duplicate": "Sproget eksisterer allerede",
"error.language.name": "Indtast venligst et gyldigt navn for sproget",
"error.layout.validation.block": "Der er fejl i blok {blockIndex} i layout {layoutIndex}",
"error.layout.validation.settings": "Der er fejl i layout {index} indstillinger",
"error.license.format": "Indtast venligst en gyldig licensnøgle",
"error.license.email": "Indtast venligst en gyldig email adresse",
"error.license.verification": "Licensen kunne ikke verificeres",
@@ -223,7 +228,7 @@
"field.blocks.image.caption": "Billedtekst",
"field.blocks.image.crop": "Beskær",
"field.blocks.image.link": "Link",
"field.blocks.image.location": "Location",
"field.blocks.image.location": "Placering",
"field.blocks.image.name": "Billede",
"field.blocks.image.placeholder": "Vælg et billede",
"field.blocks.image.ratio": "Størrelsesforhold",
@@ -326,20 +331,20 @@
"lock.isUnlocked": "Dine ugemte ændringer er blevet overskrevet af en anden bruger. Du kan downloade dine ændringer for at flette dem ind manuelt.",
"login": "Log ind",
"login.code.label.login": "Login code",
"login.code.label.password-reset": "Password reset code",
"login.code.label.login": "Log ind kode",
"login.code.label.password-reset": "Sikkerhedskode",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "If your email address is registered, the requested code was sent via email.",
"login.email.login.body": "Hi {user.nameOrEmail},\n\nYou recently requested a login code for the Kirby Panel.\nThe following login code will be valid for {timeout} minutes:\n\n{code}\n\nIf you did not request a login code, please ignore this email or contact your administrator if you have questions.\nFor security, please DO NOT forward this email.",
"login.email.login.subject": "Your login code",
"login.email.password-reset.body": "Hi {user.nameOrEmail},\n\nYou recently requested a password reset code for the Kirby Panel.\nThe following password reset code will be valid for {timeout} minutes:\n\n{code}\n\nIf you did not request a password reset code, please ignore this email or contact your administrator if you have questions.\nFor security, please DO NOT forward this email.",
"login.email.password-reset.subject": "Your password reset code",
"login.code.text.email": "Hvis din email adresse er registreret er en sikkerhedskode blevet sendt via email.",
"login.email.login.body": "Hej {user.nameOrEmail},\n\nDu har for nyligt anmodet om en log ind kode til Kirby Panel.\nFølgende log ind kode vil være gyldig i {timeout} minutter:\n\n{code}\n\nHvis du ikke har anmodet om en log ind kode, kan du blot ignorere denne email eller kontakte din administrator hvis du har spørgsmål.\nAf sikkerhedsmæssige årsager, bør du IKKE videresende denne email.",
"login.email.login.subject": "Din log ind kode",
"login.email.password-reset.body": "Hej {user.nameOrEmail},\n\nDu har for nyligt anmodet om kode til nulstilling af adgangskode til Kirby Panel.\nFølgende kode til nulstilling af adgangskode vil være gyldig i {timeout} minutter:\n\n{code}\n\nHvis du ikke har anmodet om kode til nulstilling af adgangskode, kan du blot ignorere denne email eller kontakte din administrator hvis du har spørgsmål.\nAf sikkerhedsmæssige årsager, bør du IKKE videresende denne email.",
"login.email.password-reset.subject": "Din kode til nulstilling af adgangskode",
"login.remember": "Forbliv logget ind",
"login.reset": "Nulstil adgangskode",
"login.toggleText.code.email": "Login via email",
"login.toggleText.code.email-password": "Login with password",
"login.toggleText.password-reset.email": "Forgot your password?",
"login.toggleText.password-reset.email-password": "← Back to login",
"login.toggleText.code.email": "Log ind via email",
"login.toggleText.code.email-password": "Log ind med adgangskode",
"login.toggleText.password-reset.email": "Glemt din adgangskode?",
"login.toggleText.password-reset.email-password": "← Tilbage til log ind",
"logout": "Log ud",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "Du darfst den Dateinamen von \"{filename}\" nicht ändern",
"error.file.duplicate": "Eine Datei mit dem Dateinamen \"{filename}\" besteht bereits",
"error.file.extension.forbidden": "Verbotene Dateiendung \"{extension}\"",
"error.file.extension.invalid": "Verbotene Dateiendung \"{extension}\"",
"error.file.extension.missing": "Du kannst keine Dateien ohne Dateiendung hochladen",
"error.file.maxheight": "Die Bildhöhe darf {height} Pixel nicht überschreiten",
"error.file.maxsize": "Die Datei ist zu groß",
@@ -82,6 +83,7 @@
"error.file.notFound": "Die Datei \"{filename}\" konnte nicht gefunden werden",
"error.file.orientation": "Das Bildformat ist ungültig. Erwartetes Format: \"{orientation}\"",
"error.file.type.forbidden": "Du kannst keinen {type}-Dateien hochladen",
"error.file.type.invalid": "Ungültiger Dateityp: {mime}",
"error.file.undefined": "Die Datei konnte nicht gefunden werden",
"error.form.incomplete": "Bitte behebe alle Fehler …",
@@ -91,6 +93,9 @@
"error.language.duplicate": "Die Sprache besteht bereits",
"error.language.name": "Bitte gib einen gültigen Namen für die Sprache an",
"error.layout.validation.block": "Fehler in Block {blockindex} in Layout {layoutIndex}",
"error.layout.validation.settings": "Fehler in den Einstellungen von Layout {index}",
"error.license.format": "Bitte gib einen gültigen Lizenzschlüssel ein",
"error.license.email": "Bitte gib eine gültige E-Mailadresse an",
"error.license.verification": "Die Lizenz konnte nicht verifiziert werden",

View File

@@ -28,8 +28,8 @@
"dimensions": "Διαστάσεις",
"disabled": "Disabled",
"discard": "Απόρριψη",
"download": "Download",
"duplicate": "Duplicate",
"download": "Λήψη",
"duplicate": "Αντίγραφο",
"edit": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1",
"expand": "Expand",
"expand.all": "Expand All",
@@ -41,10 +41,10 @@
"email": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
"email.placeholder": "mail@example.com",
"error.access.code": "Invalid code",
"error.access.code": "Mη έγκυρος κωδικός",
"error.access.login": "Mη έγκυρη σύνδεση",
"error.access.panel": "Δεν επιτρέπεται η πρόσβαση στον πίνακα ελέγχου",
"error.access.view": "You are not allowed to access this part of the panel",
"error.access.view": "Δεν επιτρέπεται η πρόσβαση σε αυτό το τμήμα του πίνακα ελέγχου",
"error.avatar.create.fail": "Δεν ήταν δυνατή η μεταφόρτωση της εικόνας προφίλ",
"error.avatar.delete.fail": "Δεν ήταν δυνατή η διαγραφή της εικόνας προφίλ",
@@ -67,6 +67,7 @@
"error.file.changeName.permission": "Δεν επιτρέπεται να αλλάξετε το όνομα του \"{filename}\"",
"error.file.duplicate": "Ένα αρχείο με το όνομα \"{filename}\" υπάρχει ήδη",
"error.file.extension.forbidden": "\u039c\u03b7 \u03b1\u03c0\u03bf\u03b4\u03b5\u03ba\u03c4\u03ae \u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Λείπει η επέκταση για το \"{filename}\"",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
@@ -82,6 +83,7 @@
"error.file.notFound": "Δεν είναι δυνατό να βρεθεί το αρχείο \"{filename}\"",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
"error.file.type.forbidden": "Δεν επιτρέπεται η μεταφόρτωση αρχείων {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "Δεν ήταν δυνατή η εύρεση του αρχείου",
"error.form.incomplete": "Παρακαλώ διορθώστε τα σφάλματα στη φόρμα...",
@@ -91,6 +93,9 @@
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Please enter a valid license key",
"error.license.email": "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου",
"error.license.verification": "The license could not be verified",

View File

@@ -24,15 +24,15 @@
"days.wed": "Mi\u00e9",
"delete": "Eliminar",
"delete.all": "Delete all",
"delete.all": "Eliminar todos",
"dimensions": "Dimensiones",
"disabled": "Desabilitado",
"discard": "Descartar",
"download": "Descargar",
"duplicate": "Duplicar",
"edit": "Editar",
"expand": "Expand",
"expand.all": "Expand All",
"expand": "Expandir",
"expand.all": "Expandir todo",
"dialog.files.empty": "No has seleccionado ningún archivo",
"dialog.pages.empty": "No has seleccionado ninguna página",
@@ -41,15 +41,15 @@
"email": "Correo Electrónico",
"email.placeholder": "correo@ejemplo.com",
"error.access.code": "Invalid code",
"error.access.code": "Código inválido",
"error.access.login": "Ingreso inválido",
"error.access.panel": "No tienes permitido acceder al panel.",
"error.access.panel": "No tienes permitido acceder al panel",
"error.access.view": "No tienes permiso para acceder a esta parte del panel",
"error.avatar.create.fail": "No se pudo subir la foto de perfil.",
"error.avatar.delete.fail": "No se pudo eliminar la foto de perfil.",
"error.avatar.dimensions.invalid": "Por favor, mantén el ancho y la altura de la imagen de perfil por debajo de 3000 pixeles.",
"error.avatar.mime.forbidden": "La foto de perfil debe de ser un archivo JPG o PNG.",
"error.avatar.create.fail": "No se pudo subir la foto de perfil",
"error.avatar.delete.fail": "No se pudo eliminar la foto de perfil",
"error.avatar.dimensions.invalid": "Por favor, mantén el ancho y la altura de la imagen de perfil por debajo de 3000 pixeles",
"error.avatar.mime.forbidden": "La foto de perfil debe de ser un archivo JPG o PNG",
"error.blueprint.notFound": "El blueprint \"{name}\" no se pudo cargar.",
@@ -67,6 +67,7 @@
"error.file.changeName.permission": "No tienes permitido cambiar el nombre de \"{filename}\"",
"error.file.duplicate": "Ya existe un archivo con el nombre \"{filename}\".",
"error.file.extension.forbidden": "La extensión \"{extension}\" no está permitida.",
"error.file.extension.invalid": "Extensión inválida: {extension}",
"error.file.extension.missing": "Falta la extensión para \"{filename}\".",
"error.file.maxheight": "La altura de la imagen no debe exceder {height} pixeles",
"error.file.maxsize": "El archivo es muy grande",
@@ -82,14 +83,18 @@
"error.file.notFound": "El archivo \"{filename}\" no pudo ser encontrado.",
"error.file.orientation": "La orientación de la imagen debe ser \"{orientation}\"",
"error.file.type.forbidden": "No está permitido subir archivos {type}.",
"error.file.undefined": "El archivo no se puede encontrar.",
"error.file.type.invalid": "Tipo de archivo inválido: {type}",
"error.file.undefined": "El archivo no se puede encontrar",
"error.form.incomplete": "Por favor, corrige todos los errores del formulario...",
"error.form.notSaved": "No se pudo guardar el formulario.",
"error.form.notSaved": "No se pudo guardar el formulario",
"error.language.code": "Por favor introduce un código válido para el lenguaje",
"error.language.duplicate": "El lenguaje ya existe",
"error.language.name": "Por favor introduce un nombre válido para el lenguaje",
"error.language.code": "Por favor introduce un código válido para el idioma",
"error.language.duplicate": "El idioma ya existe",
"error.language.name": "Por favor introduce un nombre válido para el idioma",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Por favor introduce una llave de licencia válida",
"error.license.email": "Por favor ingresa un correo electrónico valido",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "No tienes permitido cambiar el nombre de \"{filename}\"",
"error.file.duplicate": "Ya existe un archivo con el nombre \"{filename}\"",
"error.file.extension.forbidden": "La extensión \"{extension}\" no está permitida",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Falta la extensión para \"{filename}\"",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
@@ -82,6 +83,7 @@
"error.file.notFound": "El archivo \"{filename}\" no pudo ser encontrado",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
"error.file.type.forbidden": "No está permitido subir archivos {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "El archivo no pudo ser encontrado",
"error.form.incomplete": "Por favor, corrija todos los errores del formulario…",
@@ -91,6 +93,9 @@
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Please enter a valid license key",
"error.license.email": "Por favor, introduce un correo electrónico válido",
"error.license.verification": "The license could not be verified",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "شما اجازه تنغییر نام فایل «{filename}» را ندارید",
"error.file.duplicate": "فایلی هم نام با «{filename}» هم اکنون موجود است",
"error.file.extension.forbidden": "پسوند فایل «{extension}» غیرمجاز است",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "\u0634\u0645\u0627 \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u067e\u0633\u0648\u0646\u062f \u0631\u0627 \u0622\u067e\u0644\u0648\u062f \u06a9\u0646\u06cc\u062f",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
@@ -82,6 +83,7 @@
"error.file.notFound": "فایل «{filename}» پیدا نشد.",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
"error.file.type.forbidden": "شما اجازه بارگذاری فایلهای «{type}» را ندارید",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "\u0641\u0627\u06cc\u0644 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u067e\u06cc\u062f\u0627 \u0646\u0634\u062f.",
"error.form.incomplete": "لطفا کلیه خطاهای فرم را برطرف کنید",
@@ -91,6 +93,9 @@
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Please enter a valid license key",
"error.license.email": "لطفا ایمیل صحیحی وارد کنید",
"error.license.verification": "The license could not be verified",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "Sinulla ei ole oikeutta muuttaa tiedoston \"{filename}\" nimeä",
"error.file.duplicate": "Tiedosto nimellä \"{filename}\" on jo olemassa",
"error.file.extension.forbidden": "Tiedostopääte \"{extension}\" ei ole sallittu",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Tiedoston \"{filename}\" tiedostopääte puuttuu",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
@@ -82,6 +83,7 @@
"error.file.notFound": "Tiedostoa \"{filename}\" ei löytynyt",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
"error.file.type.forbidden": "Sinulla ei ole oikeutta lähettää tiedostoja joiden tyyppi on {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "Tiedostoa ei l\u00f6ytynyt",
"error.form.incomplete": "Korjaa kaikki lomakkeen virheet...",
@@ -91,6 +93,9 @@
"error.language.duplicate": "Kieli on jo olemassa",
"error.language.name": "Anna kielen nimi",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Anna lisenssiavain",
"error.license.email": "Anna kelpaava sähköpostiosoite",
"error.license.verification": "Lisenssiä ei voitu vahvistaa",

View File

@@ -67,13 +67,14 @@
"error.file.changeName.permission": "Vous nêtes pas autorisé à modifier le nom de «&nbsp;{filename}&nbsp;»",
"error.file.duplicate": "Un fichier nommé «&nbsp;{filename}&nbsp;» existe déjà",
"error.file.extension.forbidden": "Lextension «&nbsp;{extension}&nbsp;» nest pas autorisée",
"error.file.extension.invalid": "Extension non valide : {extension}",
"error.file.extension.missing": "Lextension pour «&nbsp;{filename}&nbsp;» est manquante",
"error.file.maxheight": "La hauteur de l'image ne doit pas excéder {height} pixels",
"error.file.maxsize": "Le fichier est trop volumineux",
"error.file.maxwidth": "La largeur de l'image ne doit pas excéder {width} pixels",
"error.file.mime.differs": "Le fichier transféré doit être du même type de média «&nbsp;{mime}&nbsp;»",
"error.file.mime.forbidden": "Le type de média «&nbsp;{mime}&nbsp;» nest pas autorisé",
"error.file.mime.invalid": "Type de média invalide : {mime}",
"error.file.mime.invalid": "Type de média non valide : {mime}",
"error.file.mime.missing": "Le type de média de «&nbsp;{filename}&nbsp;» na pu être détecté",
"error.file.minheight": "La hauteur de l'image doit être au moins {height} pixels",
"error.file.minsize": "Le fichier n'est pas assez volumineux",
@@ -82,6 +83,7 @@
"error.file.notFound": "Le fichier «&nbsp;{filename}&nbsp;» na pu être trouvé",
"error.file.orientation": "L'orientation de l'image doit être \"{orientation}\"",
"error.file.type.forbidden": "Vous nêtes pas autorisé à transférer des fichiers {type}",
"error.file.type.invalid": "Type de fichier non valide : {type}",
"error.file.undefined": "Le fichier na pu être trouvé",
"error.form.incomplete": "Veuillez corriger toutes les erreurs du formulaire…",
@@ -91,6 +93,9 @@
"error.language.duplicate": "Cette langue existe déjà",
"error.language.name": "Veuillez saisir un nom valide pour cette langue",
"error.layout.validation.block": "Il y a une erreur dans le block {blockIndex} de la disposition {layoutIndex}",
"error.layout.validation.settings": "Il y a une erreur dans les paramètres de la disposition {index}",
"error.license.format": "Veuillez saisir un numéro de licence valide",
"error.license.email": "Veuillez saisir un courriel valide",
"error.license.verification": "La licence na pu être vérifiée",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "Nincs jogosultságod megváltoztatni a \"{filename}\" fájl nevét",
"error.file.duplicate": "Már létezik \"{filename}\" nevű fájl",
"error.file.extension.forbidden": "Tiltott kiterjeszt\u00e9s\u0171 f\u00e1jl",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Kiterjeszt\u00e9s n\u00e9lk\u00fcli f\u00e1jl nem t\u00f6lthet\u0151 fel",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
@@ -82,6 +83,7 @@
"error.file.notFound": "A \"{filename}\" fájl nem található",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
"error.file.type.forbidden": "Nem tölthetsz fel \"{type}\" típusú fájlokat",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "A f\u00e1jl nem tal\u00e1lhat\u00f3",
"error.form.incomplete": "Kérlek javítsd ki az összes hibát az űrlapon",
@@ -91,6 +93,9 @@
"error.language.duplicate": "A nyelv már létezik",
"error.language.name": "Kérlek, add meg a nyelv érvényes nevét",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Kérlek, add meg az évényes lincensz kulcsot",
"error.license.email": "Kérlek adj meg egy valós email-címet",
"error.license.verification": "A licensz nem ellenőrizhető",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "Anda tidak diizinkan mengubah nama berkas \"{filename}\"",
"error.file.duplicate": "Berkas dengan nama \"{filename}\" sudah ada",
"error.file.extension.forbidden": "Ekstensi \"{extension}\" tidak diizinkan",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Berkas \"{filename}\" harus memiliki ekstensi",
"error.file.maxheight": "Tinggi gambar tidak boleh melebihi {height} piksel",
"error.file.maxsize": "Berkas terlalu besar",
@@ -82,6 +83,7 @@
"error.file.notFound": "Berkas \"{filename}\" tidak dapat ditemukan",
"error.file.orientation": "Orientasi gambar harus \"{orientation}\"",
"error.file.type.forbidden": "Anda tidak diizinkan mengunggah berkas dengan tipe {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "Berkas tidak dapat ditemukan",
"error.form.incomplete": "Pastikan semua bidang telah diisi dengan benar…",
@@ -91,6 +93,9 @@
"error.language.duplicate": "Bahasa sudah ada",
"error.language.name": "Masukkan nama bahasa yang valid",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Masukkan kode lisensi yang valid",
"error.license.email": "Masukkan surel yang valid",
"error.license.verification": "Lisensi tidak dapat diverifikasi",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "Non ti è permesso modificare il nome di \"{filename}\"",
"error.file.duplicate": "Un file con il nome \"{filename}\" esiste già",
"error.file.extension.forbidden": "L'estensione \"{extension}\" non è consentita",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Il file \"{filename}\" non ha estensione",
"error.file.maxheight": "L'immagine non dev'essere più alta di {height} pixel",
"error.file.maxsize": "Il file è troppo pesante",
@@ -82,6 +83,7 @@
"error.file.notFound": "Il file non \u00e8 stato trovato",
"error.file.orientation": "L'imaggine dev'essere orientata in \"{orientation}\"",
"error.file.type.forbidden": "Non ti è permesso caricare file {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "Il file non \u00e8 stato trovato",
"error.form.incomplete": "Correggi tutti gli errori nel form...",
@@ -91,6 +93,9 @@
"error.language.duplicate": "La lingua esiste già",
"error.language.name": "Inserisci un nome valido per la lingua",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Inserisci un codice di licenza valido",
"error.license.email": "Inserisci un indirizzo email valido",
"error.license.verification": "Non è stato possibile verificare la licenza",

View File

@@ -51,7 +51,7 @@
"error.avatar.dimensions.invalid": "프로필 이미지의 너비와 높이를 3,000픽셀 이하로 설정하세요.",
"error.avatar.mime.forbidden": "프로필 이미지의 확장자(JPG, JPEG, PNG)를 확인하세요.",
"error.blueprint.notFound": "블루프린트({name})를 확인할 수 없습니다.",
"error.blueprint.notFound": "블루프린트({name})를 불러올 수 없습니다.",
"error.blocks.max.plural": "블록을 {max}개 이상 추가할 수 없습니다.",
"error.blocks.max.singular": "블록을 하나 이상 추가할 수 없습니다.",
@@ -63,10 +63,11 @@
"error.field.converter.invalid": "컨버터({converter})가 올바르지 않습니다.",
"error.file.changeName.empty": "이름을 입력하세요.",
"error.file.changeName.empty": "사용자명을 입력하세요.",
"error.file.changeName.permission": "파일명({filename})을 변경할 권한이 없습니다.",
"error.file.duplicate": "파일명이 같은 파일({filename})이 있습니다.",
"error.file.extension.forbidden": "이 확장자({extension})는 업로드할 수 없습니다.",
"error.file.extension.invalid": "확장자({extension})가 올바르지 않습니다.",
"error.file.extension.missing": "파일({filename})에 확장자가 없습니다.",
"error.file.maxheight": "이미지의 높이는 {height}픽셀을 초과할 수 없습니다.",
"error.file.maxsize": "파일이 너무 큽니다.",
@@ -74,7 +75,7 @@
"error.file.mime.differs": "기존 파일과 MIME 형식({mime})이 다릅니다.",
"error.file.mime.forbidden": "이 MIME 형식({mime})은 업로드할 수 없습니다.",
"error.file.mime.invalid": "MIME 형식({mime})이 올바르지 않습니다.",
"error.file.mime.missing": "파일({filename})의 형식을 확인할 수 없습니다.",
"error.file.mime.missing": "파일({filename})의 MIME 형식을 확인할 수 없습니다.",
"error.file.minheight": "{height}픽셀 이상으로 이미지의 높이를 설정하세요.",
"error.file.minsize": "파일이 너무 작습니다.",
"error.file.minwidth": "{width}픽셀 이상으로 이미지의 너비를 설정하세요.",
@@ -82,6 +83,7 @@
"error.file.notFound": "파일({filename})이 없습니다.",
"error.file.orientation": "이미지의 비율({orientation})을 확인하세요.",
"error.file.type.forbidden": "이 형식({type})의 파일을 업로드할 권한이 없습니다.",
"error.file.type.invalid": "파일의 형식({type})이 올바르지 않습니다.",
"error.file.undefined": "\ud30c\uc77c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.",
"error.form.incomplete": "항목에 오류가 있습니다.",
@@ -91,6 +93,9 @@
"error.language.duplicate": "이미 등록한 언어입니다.",
"error.language.name": "올바른 언어명을 입력하세요.",
"error.layout.validation.block": "레이아웃({layoutIndex})의 블록({blockIndex})을 확인하세요.",
"error.layout.validation.settings": "레이아웃({index})의 옵션을 확인하세요.",
"error.license.format": "올바른 라이선스 키를 입력하세요.",
"error.license.email": "올바른 이메일 주소를 입력하세요.",
"error.license.verification": "라이선스 키가 올바르지 않습니다.",
@@ -204,9 +209,9 @@
"field.required": "필드를 채우세요.",
"field.blocks.changeType": "유형 변경",
"field.blocks.code.name": "언어 코드",
"field.blocks.code.name": "코드",
"field.blocks.code.language": "언어",
"field.blocks.code.placeholder": "코드",
"field.blocks.code.placeholder": "코드",
"field.blocks.delete.confirm": "블록을 삭제할까요?",
"field.blocks.delete.confirm.all": "모든 블록을 삭제할까요?",
"field.blocks.delete.confirm.selected": "선택한 블록을 삭제할까요?",
@@ -217,8 +222,8 @@
"field.blocks.gallery.images.label": "이미지",
"field.blocks.heading.level": "단계",
"field.blocks.heading.name": "제목",
"field.blocks.heading.text": "텍스트",
"field.blocks.heading.placeholder": "제목",
"field.blocks.heading.text": "제목",
"field.blocks.heading.placeholder": "제목",
"field.blocks.image.alt": "대체 텍스트",
"field.blocks.image.caption": "캡션",
"field.blocks.image.crop": "자르기",
@@ -229,15 +234,15 @@
"field.blocks.image.ratio": "비율",
"field.blocks.list.name": "목록",
"field.blocks.markdown.name": "마크다운",
"field.blocks.markdown.label": "텍스트",
"field.blocks.markdown.placeholder": "마크다운",
"field.blocks.markdown.label": "마크다운",
"field.blocks.markdown.placeholder": "마크다운",
"field.blocks.quote.name": "인용문",
"field.blocks.quote.text.label": "텍스트",
"field.blocks.quote.text.placeholder": "인용문",
"field.blocks.quote.text.label": "인용문",
"field.blocks.quote.text.placeholder": "인용문",
"field.blocks.quote.citation.label": "출처",
"field.blocks.quote.citation.placeholder": "출처",
"field.blocks.quote.citation.placeholder": "출처",
"field.blocks.text.name": "텍스트",
"field.blocks.text.placeholder": "텍스트",
"field.blocks.text.placeholder": "텍스트",
"field.blocks.video.caption": "캡션",
"field.blocks.video.name": "영상",
"field.blocks.video.placeholder": "영상 URL 입력",
@@ -248,7 +253,7 @@
"field.layout.delete": "레이아웃 삭제",
"field.layout.delete.confirm": "레이아웃을 삭제할까요?",
"field.layout.empty": "이 없습니다.",
"field.layout.empty": "레이아웃이 없습니다.",
"field.layout.select": "레이아웃 선택",
"field.pages.empty": "선택한 페이지가 없습니다.",
@@ -275,9 +280,9 @@
"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.curl": "<code>cURL</code> 확장 모듈이 필요합니다.",
"installation.issues.headline": "패널을 설치할 수 없습니다.",
"installation.issues.mbstring": "<code>MB String</code> 확장 기능이 필요합니다.",
"installation.issues.mbstring": "<code>MB String</code> 확장 모듈이 필요합니다.",
"installation.issues.media": "폴더(<code>/media</code>)에 쓰기 권한이 없습니다.",
"installation.issues.php": "<code>PHP</code> 버전이 7 이상인지 확인하세요.",
"installation.issues.server": "Kirby를 실행하려면 <code>Apache</code>, <code>Nginx</code>, 또는 <code>Caddy</code>가 필요합니다.",
@@ -285,7 +290,7 @@
"language": "\uc5b8\uc5b4",
"language.code": "언어 코드",
"language.convert": "기본 언어로 정",
"language.convert": "기본 언어로 정",
"language.convert.confirm": "이 언어(<strong>{name}</strong>)를 기본 언어로 지정할까요? 지정한 뒤에는 복원할 수 없으며, 이 언어로 번역되지 않은 항목은 올바르게 표시되지 않을 수 있습니다.",
"language.create": "새 언어 추가",
"language.delete.confirm": "언어(<strong>{name}</strong>)를 삭제할까요? 삭제한 뒤에는 복원할 수 없습니다.",
@@ -295,7 +300,7 @@
"language.direction.rtl": "오른쪽에서 왼쪽",
"language.locale": "PHP 로캘 문자열",
"language.locale.warning": "사용자 지정 로캘을 사용 중입니다. 폴더(<code>/site/languages</code>)의 언어 파일을 수정하세요.",
"language.name": "이름",
"language.name": "사용자명",
"language.updated": "언어를 변경했습니다.",
"languages": "언어",
@@ -309,7 +314,7 @@
"license.register": "등록",
"license.register.help": "Kirby를 등록하려면 이메일로 전송받은 라이선스 코드와 이메일 주소를 입력하세요.",
"license.register.label": "라이선스 코드를 입력하세요.",
"license.register.success": "Kirby를 구입해주셔서 감사합니다.",
"license.register.success": "Kirby와 함께해주셔서 감사합니다.",
"license.unregistered": "Kirby가 등록되지 않았습니다.",
"link": "\uc77c\ubc18 \ub9c1\ud06c",
@@ -317,13 +322,13 @@
"loading": "로딩 중…",
"lock.unsaved": "저장되지 않은 항목이 있습니다",
"lock.unsaved": "저장되지 않은 항목이 있습니다.",
"lock.unsaved.empty": "모든 페이지를 저장했습니다.",
"lock.isLocked": "다른 사용자(<strong>{email}</strong>)가 수정한 사항이 저장되지 않았습니다.",
"lock.file.isLocked": "파일을 편집할 수 없습니다. 다른 사용자({email})가 편집 중입니다.",
"lock.page.isLocked": "페이지를 편집할 수 없습니다. 다른 사용자({email})가 편집 중입니다.",
"lock.unlock": "잠금",
"lock.isUnlocked": "다른 사용자가 이미 내용을 수정했으므로 현재 내용이 올바르게 저장되지 않았습니다. 저장되지 않은 내용은 내려받아 수동으로 대치할 수 있습니다.",
"lock.isUnlocked": "다른 사용자가 이미 내용을 수정했으므로 현재 내용이 올바르게 저장되지 않았습니다. 저장되지 않은 내용은 다운로드해 수동으로 대치할 수 있습니다.",
"login": "\ub85c\uadf8\uc778",
"login.code.label.login": "로그인 코드",
@@ -337,7 +342,7 @@
"login.remember": "로그인 유지",
"login.reset": "암호 초기화",
"login.toggleText.code.email": "이메일 주소로 로그인",
"login.toggleText.code.email-password": "로그인",
"login.toggleText.code.email-password": "암호로 로그인",
"login.toggleText.password-reset.email": "암호 찾기",
"login.toggleText.password-reset.email-password": "로그인 화면으로",
@@ -345,7 +350,7 @@
"menu": "메뉴",
"meridiem": "오전/오후",
"mime": "미디어 형식",
"mime": "MIME 형식",
"minutes": "분",
"month": "월",
@@ -363,7 +368,7 @@
"months.september": "9\uc6d4",
"more": "더 보기",
"name": "이름",
"name": "사용자명",
"next": "다음",
"off": "끔",
"on": "켬",
@@ -473,8 +478,8 @@
"upload.error.default": "파일을 업로드할 수 없습니다.",
"upload.error.extension": "파일 확장자를 확인하세요.",
"upload.error.formSize": "업로드한 파일이 허용된 크기(MAX_FILE_SIZE)를 초과했습니다.",
"upload.error.iniPostSize": "업로드한 파일이 허용된 크기(post_max_size)를 초과했습니다.",
"upload.error.iniSize": "업로드한 파일이 허용된 크기(upload_max_filesize)를 초과했습니다.",
"upload.error.iniPostSize": "업로드한 파일이 PHP 환경 설정 파일(php.ini)에서 허용된 크기(post_max_size)를 초과했습니다.",
"upload.error.iniSize": "업로드한 파일이 PHP 환경 설정 파일(php.ini)에서 허용된 허용된 크기(upload_max_filesize)를 초과했습니다.",
"upload.error.noFile": "업로드한 파일이 없습니다.",
"upload.error.noFiles": "업로드한 파일이 없습니다.",
"upload.error.partial": "일부 파일을 업로드했습니다.",

View File

@@ -41,7 +41,7 @@
"email": "El. paštas",
"email.placeholder": "mail@example.com",
"error.access.code": "Invalid code",
"error.access.code": "Neteisinas kodas",
"error.access.login": "Neteisingas prisijungimo vardas",
"error.access.panel": "Neturite teisės prisijungti prie valdymo pulto",
"error.access.view": "Neturite teisės peržiūrėti šios valdymo pulto dalies",
@@ -67,6 +67,7 @@
"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.invalid": "Neteisingas plėtinys: {extension}",
"error.file.extension.missing": "Failui \"{filename}\" trūksta tipo (plėtinio)",
"error.file.maxheight": "Failo aukštis neturi viršyti {height} px",
"error.file.maxsize": "Failas per didelis",
@@ -82,6 +83,7 @@
"error.file.notFound": "Failas \"{filename}\" nerastas",
"error.file.orientation": "Failo orientacija turi būti \"{orientation}\"",
"error.file.type.forbidden": "Jūs neturite teisės įkelti {type} tipo failų",
"error.file.type.invalid": "Neteisingas failo tipas: {type}",
"error.file.undefined": "Failas nerastas",
"error.form.incomplete": "🙏 Prašome ištaisyti visas formos klaidas…",
@@ -91,6 +93,9 @@
"error.language.duplicate": "Tokia kalba jau yra",
"error.language.name": "Prašome įrašyti teisingą kalbos pavadinimą",
"error.layout.validation.block": "Yra klaida bloke {blockIndex} išdėstyme {layoutIndex}",
"error.layout.validation.settings": "Yra klaida išdėstymo {index} nustatymuose",
"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",
@@ -223,7 +228,7 @@
"field.blocks.image.caption": "Aprašymas",
"field.blocks.image.crop": "Kirpti",
"field.blocks.image.link": "Nuoroda",
"field.blocks.image.location": "Location",
"field.blocks.image.location": "Šaltinis",
"field.blocks.image.name": "Nuotrauka",
"field.blocks.image.placeholder": "Pasirinkite nuotrauką",
"field.blocks.image.ratio": "Proporcijos",
@@ -326,20 +331,20 @@
"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.code.label.login": "Login code",
"login.code.label.password-reset": "Password reset code",
"login.code.label.login": "Prisijungimo kodas",
"login.code.label.password-reset": "Slaptažodžio atstatymo kodas",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "If your email address is registered, the requested code was sent via email.",
"login.email.login.body": "Hi {user.nameOrEmail},\n\nYou recently requested a login code for the Kirby Panel.\nThe following login code will be valid for {timeout} minutes:\n\n{code}\n\nIf you did not request a login code, please ignore this email or contact your administrator if you have questions.\nFor security, please DO NOT forward this email.",
"login.email.login.subject": "Your login code",
"login.email.password-reset.body": "Hi {user.nameOrEmail},\n\nYou recently requested a password reset code for the Kirby Panel.\nThe following password reset code will be valid for {timeout} minutes:\n\n{code}\n\nIf you did not request a password reset code, please ignore this email or contact your administrator if you have questions.\nFor security, please DO NOT forward this email.",
"login.email.password-reset.subject": "Your password reset code",
"login.code.text.email": "Jei jūsų el. paštas yra užregistruotas, užklaistas kodas buvo išsiųstas el. paštu.",
"login.email.login.body": "Sveiki, {user.nameOrEmail},\n\nJūs ką tik užklausėte prisijungimo kodą svetainės valdymui.\nŠis kodas galios {timeout} minučių:\n\n{code}\n\nJei neprašėte šio kodo, galite ignoruoti šį laišką arba kreiptis į administratorių dėl patikslinimo.\nDėl saugumo, prašome nepersiųsti šio laiško kitiems.",
"login.email.login.subject": "Jūsų prisijungimo kodas",
"login.email.password-reset.body": "Sveiki, {user.nameOrEmail},\n\njūs ką tik užklausėte slaptažodžio atstatymo kodą svetainės valdymui .\nŠis kodas galios {timeout} minučių:\n\n{code}\n\nJei neprašėte šio kodo, galite ignoruoti šį laišką arba kreiptis į administratorių dėl patikslinimo.\nDėl saugumo, prašome nepersiųsti šio laiško kitiems.",
"login.email.password-reset.subject": "Jūsų slaptažodžio atstatymo kodas ",
"login.remember": "Likti prisijungus",
"login.reset": "Sukurti naują slaptažodį",
"login.toggleText.code.email": "Login via email",
"login.toggleText.code.email-password": "Login with password",
"login.toggleText.password-reset.email": "Forgot your password?",
"login.toggleText.password-reset.email-password": "← Back to login",
"login.toggleText.code.email": "Prisijungti su el. paštu",
"login.toggleText.code.email-password": "Prisijungti su slaptažodžiu",
"login.toggleText.password-reset.email": "Pamiršote slaptažodį?",
"login.toggleText.password-reset.email-password": "← Atgal į prisijungimą",
"logout": "Atsijungti",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "Du er ikke tillatt å endre navnet til \"{filename}\"",
"error.file.duplicate": "En fil med navnet \"{filename}\" eksisterer allerede",
"error.file.extension.forbidden": "Ugyldig filtype",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Du kan ikke laste opp filer uten filtype",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
@@ -82,6 +83,7 @@
"error.file.notFound": "Filen kunne ikke bli funnet",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
"error.file.type.forbidden": "Du har ikke lov til å laste opp filer av typen {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "Filen kunne ikke bli funnet",
"error.form.incomplete": "Vennligst fiks alle feil…",
@@ -91,6 +93,9 @@
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Please enter a valid license key",
"error.license.email": "Vennligst skriv inn en gyldig e-postadresse",
"error.license.verification": "The license could not be verified",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "Je hebt geen rechten om de naam te wijzigen van \"{filename}\"",
"error.file.duplicate": "Er bestaat al een bestand met de naam \"{filename}\"",
"error.file.extension.forbidden": "Bestandsextensie \"{extension}\" is niet toegestaan",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Je kunt geen bestanden uploaden zonder bestandsextensie",
"error.file.maxheight": "De hoogte van de afbeelding mag niet groter zijn dan {height} pixels",
"error.file.maxsize": "Het bestand is te groot",
@@ -82,6 +83,7 @@
"error.file.notFound": "Het bestand kan niet worden gevonden",
"error.file.orientation": "De oriëntatie van de afbeelding moet \"{orientation}\" zijn",
"error.file.type.forbidden": "Je hebt geen rechten om {type} bestanden up te loaden",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "Het bestand kan niet worden gevonden",
"error.form.incomplete": "Verbeter alle fouten in het formulier",
@@ -91,6 +93,9 @@
"error.language.duplicate": "De taal bestaat al",
"error.language.name": "Vul een geldige naam voor deze taal in",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Vul een gelidge licentie-key in",
"error.license.email": "Gelieve een geldig emailadres in te voeren",
"error.license.verification": "De licentie kon niet worden geverifieerd. ",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "Nie masz uprawnień, by zmienić nazwę \"{filename}\"",
"error.file.duplicate": "Istnieje już plik o nazwie \"{filename}\"",
"error.file.extension.forbidden": "Rozszerzenie \"{extension}\" jest niedozwolone",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Brak rozszerzenia pliku \"{filename}\"",
"error.file.maxheight": "Wysokość obrazka nie może być większa niż {height} pikseli",
"error.file.maxsize": "Plik jest za duży",
@@ -82,6 +83,7 @@
"error.file.notFound": "Nie można znaleźć pliku \"{filename}\"",
"error.file.orientation": "Orientacja obrazka musi być \"{orientation}\"",
"error.file.type.forbidden": "Nie możesz przesyłać plików {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "Nie można znaleźć pliku",
"error.form.incomplete": "Popraw wszystkie błędy w formularzu…",
@@ -91,6 +93,9 @@
"error.language.duplicate": "Język już istnieje.",
"error.language.name": "Wprowadź poprawną nazwę języka.",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Wprowadź poprawny klucz licencyjny",
"error.license.email": "Wprowadź poprawny adres email",
"error.license.verification": "Nie udało się zweryfikować licencji",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "Você não tem permissão para alterar o nome de \"{filename}\"",
"error.file.duplicate": "Um arquivo com o nome \"{filename}\" já existe",
"error.file.extension.forbidden": "Extensão \"{extension}\" não permitida",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Extensão de \"{filename}\" em falta",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
@@ -82,6 +83,7 @@
"error.file.notFound": "Arquivo \"{filename}\" não encontrado",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
"error.file.type.forbidden": "Você não tem permissão para enviar arquivos {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "Arquivo n\u00e3o encontrado",
"error.form.incomplete": "Por favor, corrija os erros do formulário…",
@@ -91,6 +93,9 @@
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Please enter a valid license key",
"error.license.email": "Digite um endereço de email válido",
"error.license.verification": "The license could not be verified",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "Não tem permissões para alterar o nome de \"{filename}\"",
"error.file.duplicate": "Um arquivo com o nome \"{filename}\" já existe",
"error.file.extension.forbidden": "Extensão \"{extension}\" não permitida",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Extensão de \"{filename}\" em falta",
"error.file.maxheight": "A altura da imagem não deve exceder {height} pixels",
"error.file.maxsize": "O arquivo é muito grande",
@@ -82,6 +83,7 @@
"error.file.notFound": "Arquivo \"{filename}\" não encontrado",
"error.file.orientation": "A orientação da imagem deve ser \"{orientation}\"",
"error.file.type.forbidden": "Não tem permissões para enviar arquivos {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "Arquivo n\u00e3o encontrado",
"error.form.incomplete": "Por favor, corrija os erros do formulário…",
@@ -91,6 +93,9 @@
"error.language.duplicate": "O idioma já existe",
"error.language.name": "Insira um nome válido para o idioma",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Insira uma chave de licença válida",
"error.license.email": "Digite um endereço de email válido",
"error.license.verification": "Não foi possível verificar a licença",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "У вас нет права поменять название \"{filename}\"",
"error.file.duplicate": "Файл с названием \"{filename}\" уже есть",
"error.file.extension.forbidden": "Расширение файла \"{extension}\" неразрешено",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Файлу \"{filename}\" не хватает расширения",
"error.file.maxheight": "Высота картинки не должна превышать {height} px",
"error.file.maxsize": "Файл слишком большой",
@@ -82,6 +83,7 @@
"error.file.notFound": "\u0424\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d",
"error.file.orientation": "Ориентация картинки должна быть \"{orientation}\"",
"error.file.type.forbidden": "У вас нет права загружать файлы {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "\u0424\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d",
"error.form.incomplete": "Пожалуйста, исправьте все ошибки в форме",
@@ -91,6 +93,9 @@
"error.language.duplicate": "Язык уже есть",
"error.language.name": "Пожалуйста, впишите правильное название языка",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Пожалуйста, введите правильный лицензионный код",
"error.license.email": "Пожалуйста, введите правильный адрес эл. почты",
"error.license.verification": "Лицензия не подтверждена",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "Nemáte povolenie na zmenu názvu pre \"{filename}\"",
"error.file.duplicate": "Súbor s názvom \"{filename}\" už existuje",
"error.file.extension.forbidden": "Prípona \"{extension}\" nie je povolená",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Prípona pre \"{filename}\" chýba",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
@@ -82,6 +83,7 @@
"error.file.notFound": "Súbor \"{filename}\" sa nepodarilo nájsť",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
"error.file.type.forbidden": "Nemáte povolenie na nahrávanie súborov s typom {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "Súbor nie je možné nájsť",
"error.form.incomplete": "Prosím, opravte všetky chyby v rámci formuláru...",
@@ -91,6 +93,9 @@
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Please enter a valid license key",
"error.license.email": "Prosím, zadajte platnú e-mailovú adresu",
"error.license.verification": "The license could not be verified",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "Du har inte behörighet att ändra namnet på \"{filename}\"",
"error.file.duplicate": "En fil med namnet \"{filename}\" existerar redan",
"error.file.extension.forbidden": "Filändelsen \"{extension}\" är inte tillåten",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Filen \"{filename}\" saknar filändelse",
"error.file.maxheight": "Bildens höjd får inte överstiga {height} pixlar",
"error.file.maxsize": "Filen är för stor",
@@ -82,6 +83,7 @@
"error.file.notFound": "Filen \"{filename}\" kan ej hittas",
"error.file.orientation": "Bildens orientering måste vara \"{orientation}\"",
"error.file.type.forbidden": "Du har inte behörighet att ladda upp filer av typen {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "Filen kan inte hittas",
"error.form.incomplete": "Vänligen åtgärda alla formulärfel...",
@@ -91,6 +93,9 @@
"error.language.duplicate": "Språket finns redan",
"error.language.name": "Ange ett giltigt namn för språket",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Ange en giltig licensnyckel",
"error.license.email": "Ange en giltig e-postadress",
"error.license.verification": "Licensen kunde inte verifieras",

View File

@@ -67,6 +67,7 @@
"error.file.changeName.permission": "\"{filename}\" adını değiştiremezsiniz",
"error.file.duplicate": "\"{filename}\" isimli bir dosya zaten var",
"error.file.extension.forbidden": "\"{extension}\" dosya uzantısına izin verilmiyor",
"error.file.extension.invalid": "Geçersiz uzantı: {extension}",
"error.file.extension.missing": "\"{filename}\" dosyasının uzantısı yok",
"error.file.maxheight": "Resmin yüksekliği {height} pikselden büyük olmamalıdır",
"error.file.maxsize": "Dosya çok büyük",
@@ -82,6 +83,7 @@
"error.file.notFound": "\"{filename}\" dosyası bulunamadı",
"error.file.orientation": "Resmin oryantasyonu \"{orientation}\" olmalıdır",
"error.file.type.forbidden": "{type} dosya yükleme izni yok",
"error.file.type.invalid": "Geçersiz dosya türü: {type}",
"error.file.undefined": "Dosya bulunamad\u0131",
"error.form.incomplete": "Lütfen tüm form hatalarını düzeltin...",
@@ -91,6 +93,9 @@
"error.language.duplicate": "Bu dil zaten var",
"error.language.name": "Lütfen dil için geçerli bir isim girin",
"error.layout.validation.block": "{layoutIndex}. düzenin {blockIndex}. bloğunda bir hata var",
"error.layout.validation.settings": "{index}. düzen ayarlarında bir hata var",
"error.license.format": "Lütfen geçerli bir lisans anahtarı girin",
"error.license.email": "Lütfen geçerli bir e-posta adresi girin",
"error.license.verification": "Lisans doğrulanamadı",

File diff suppressed because one or more lines are too long

View File

@@ -108,8 +108,9 @@ class FileCache extends Cache
public function retrieve(string $key)
{
$file = $this->file($key);
$value = F::read($file);
return Value::fromJson(F::read($file));
return $value ? Value::fromJson($value) : null;
}
/**

View File

@@ -76,8 +76,12 @@ class Blocks extends Items
return [];
}
// no layouts
if (array_key_exists('columns', $input[0]) === false) {
if (
// no columns = no layout
array_key_exists('columns', $input[0]) === false ||
// checks if this is a block for the builder plugin
array_key_exists('_key', $input[0]) === true
) {
return $input;
}

View File

@@ -202,15 +202,23 @@ class FileRules
* Validates the extension, MIME type and filename
*
* @param \Kirby\Cms\File $file
* @param string|null $mime If not passed, the MIME type is detected from the file
* @param string|null|false $mime If not passed, the MIME type is detected from the file,
* if `false`, the MIME type is not validated for performance reasons
* @return bool
* @throws \Kirby\Exception\InvalidArgumentException If the extension, MIME type or filename is missing or forbidden
*/
public static function validFile(File $file, ?string $mime = null): bool
public static function validFile(File $file, $mime = null): bool
{
if ($mime === false) {
// request to skip the MIME check for performance reasons
$validMime = true;
} else {
$validMime = static::validMime($file, $mime ?? $file->mime());
}
return
$validMime &&
static::validExtension($file, $file->extension()) &&
static::validMime($file, $mime ?? $file->mime()) &&
static::validFilename($file, $file->filename());
}

View File

@@ -71,7 +71,7 @@ class Media
public static function publish(File $file, string $dest): bool
{
// never publish risky files (e.g. HTML, PHP or Apache config files)
FileRules::validFile($file);
FileRules::validFile($file, false);
$src = $file->root();
$version = dirname($dest);

View File

@@ -291,9 +291,9 @@ trait UserActions
/**
* Reads the user password from disk
*
* @return string|null
* @return string|false
*/
protected function readPassword(): ?string
protected function readPassword()
{
return F::read($this->root() . '/.htpasswd');
}

View File

@@ -44,11 +44,12 @@ abstract class Handler
*/
public static function read(string $file): array
{
if (is_file($file) !== true) {
$contents = F::read($file);
if ($contents === false) {
throw new Exception('The file "' . $file . '" does not exist');
}
return static::decode(F::read($file));
return static::decode($contents);
}
/**

View File

@@ -547,14 +547,19 @@ class F
}
/**
* Reads the content of a file
* Reads the content of a file or requests the
* contents of a remote HTTP or HTTPS URL
*
* @param string $file The path for the file
* @param string $file The path for the file or an absolute URL
* @return string|false
*/
public static function read(string $file)
{
if (is_file($file) !== true) {
if (
is_file($file) !== true &&
Str::startsWith($file, 'https://') !== true &&
Str::startsWith($file, 'http://') !== true
) {
return false;
}

View File

@@ -232,7 +232,7 @@ class File
/**
* Reads the file content and returns it.
*
* @return string
* @return string|false
*/
public function read()
{

View File

@@ -14,8 +14,8 @@ class InstalledVersions
private static $installed = array (
'root' =>
array (
'pretty_version' => '3.5.0-rc.5',
'version' => '3.5.0.0-RC5',
'pretty_version' => '3.5.0',
'version' => '3.5.0.0',
'aliases' =>
array (
),
@@ -44,8 +44,8 @@ private static $installed = array (
),
'getkirby/cms' =>
array (
'pretty_version' => '3.5.0-rc.5',
'version' => '3.5.0.0-RC5',
'pretty_version' => '3.5.0',
'version' => '3.5.0.0',
'aliases' =>
array (
),

View File

@@ -1,8 +1,8 @@
<?php return array (
'root' =>
array (
'pretty_version' => '3.5.0-rc.5',
'version' => '3.5.0.0-RC5',
'pretty_version' => '3.5.0',
'version' => '3.5.0.0',
'aliases' =>
array (
),
@@ -31,8 +31,8 @@
),
'getkirby/cms' =>
array (
'pretty_version' => '3.5.0-rc.5',
'version' => '3.5.0.0-RC5',
'pretty_version' => '3.5.0',
'version' => '3.5.0.0',
'aliases' =>
array (
),