Upgrade to 3.2.1

This commit is contained in:
Bastian Allgeier
2019-07-09 16:45:40 +02:00
parent 7b4170f17e
commit 2694b3d76f
38 changed files with 282 additions and 150 deletions

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.0", "version": "3.2.1",
"license": "proprietary", "license": "proprietary",
"keywords": ["kirby", "cms", "core"], "keywords": ["kirby", "cms", "core"],
"homepage": "https://getkirby.com", "homepage": "https://getkirby.com",

View File

@@ -147,6 +147,7 @@ return [
$snippets = A::wrap($name); $snippets = A::wrap($name);
foreach ($snippets as $name) { foreach ($snippets as $name) {
$name = (string)$name;
$file = $kirby->root('snippets') . '/' . $name . '.php'; $file = $kirby->root('snippets') . '/' . $name . '.php';
if (file_exists($file) === false) { if (file_exists($file) === false) {

View File

@@ -1,5 +1,7 @@
<?php <?php
use Kirby\Exception\Exception;
return [ return [
'props' => [ 'props' => [
/** /**
@@ -79,6 +81,49 @@ return [
return ''; return '';
}, },
'validations' => [ 'validations' => [
'date' 'date',
'minMax' => function ($value) {
$min = $this->min ? strtotime($this->min) : null;
$max = $this->max ? strtotime($this->max) : null;
$value = strtotime($this->value());
$format = 'd.m.Y';
$errors = [];
if ($value && $min && $value < $min) {
$errors['min'] = $min;
}
if ($value && $max && $value > $max) {
$errors['max'] = $max;
}
if (empty($errors) === false) {
if ($min && $max) {
throw new Exception([
'key' => 'validation.date.between',
'data' => [
'min' => date($format, $min),
'max' => date($format, $max)
]
]);
} elseif ($min) {
throw new Exception([
'key' => 'validation.date.after',
'data' => [
'date' => date($format, $min),
]
]);
} else {
throw new Exception([
'key' => 'validation.date.before',
'data' => [
'date' => date($format, $max),
]
]);
}
}
return true;
},
] ]
]; ];

View File

@@ -13,8 +13,8 @@ return [
/** /**
* Image settings for each item * Image settings for each item
*/ */
'image' => function (array $image = null) { 'image' => function ($image = null) {
return $image ?? []; return $image;
}, },
/** /**
@@ -55,7 +55,7 @@ return [
/** /**
* Main text for each item * Main text for each item
*/ */
'text' => function (string $text = '{{ file.filename }}') { 'text' => function (string $text = null) {
return $text; return $text;
}, },

View File

@@ -1,6 +1,7 @@
<?php <?php
use Kirby\Cms\Api; use Kirby\Cms\Api;
use Kirby\Cms\File;
return [ return [
'props' => [ 'props' => [
@@ -13,13 +14,26 @@ return [
} }
if (is_string($uploads) === true) { if (is_string($uploads) === true) {
return ['template' => $uploads]; $uploads = ['template' => $uploads];
} }
if (is_array($uploads) === false) { if (is_array($uploads) === false) {
$uploads = []; $uploads = [];
} }
$template = $uploads['template'] ?? null;
if ($template) {
$file = new File([
'filename' => 'tmp',
'template' => $template
]);
$uploads['accept'] = $file->blueprint()->accept()['mime'] ?? '*';
} else {
$uploads['accept'] = '*';
}
return $uploads; return $uploads;
}, },
], ],

View File

@@ -22,20 +22,6 @@ return [
return $this->toPages($default); return $this->toPages($default);
}, },
/**
* Image settings for each item
*/
'image' => function (array $image = null) {
return $image ?? [];
},
/**
* Info text for each item
*/
'info' => function (string $info = null) {
return $info;
},
/** /**
* Changes the layout of the selected files. Available layouts: `list`, `cards` * Changes the layout of the selected files. Available layouts: `list`, `cards`
*/ */
@@ -57,13 +43,6 @@ return [
return $size; return $size;
}, },
/**
* Main text for each item
*/
'text' => function (string $text = null) {
return $text;
},
'value' => function ($value = null) { 'value' => function ($value = null) {
return $this->toPages($value); return $this->toPages($value);
}, },

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Моля въведете стойност, която съдържа \"{needle}\"", "Моля въведете стойност, която съдържа \"{needle}\"",
"error.validation.date": "Моля въведете валидна дата", "error.validation.date": "Моля въведете валидна дата",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "Моля откажете", "error.validation.denied": "Моля откажете",
"error.validation.different": "Стойността не трябва да е \"{other}\"", "error.validation.different": "Стойността не трябва да е \"{other}\"",
"error.validation.email": "Моля въведете валиден email адрес", "error.validation.email": "Моля въведете валиден email адрес",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Si us plau, introduïu un valor que contingui \"{needle}\"", "Si us plau, introduïu un valor que contingui \"{needle}\"",
"error.validation.date": "Si us plau, introdueix una data vàlida", "error.validation.date": "Si us plau, introdueix una data vàlida",
"error.validation.date.after": "Introdueix una data posterior {date}",
"error.validation.date.before": "Introdueix una data anterior {date}",
"error.validation.date.between": "Introdueix una data entre {min} i {max}",
"error.validation.denied": "Si us plau, denegui", "error.validation.denied": "Si us plau, denegui",
"error.validation.different": "El valor no ha de ser \"{other}\"", "error.validation.different": "El valor no ha de ser \"{other}\"",
"error.validation.email": "Si us plau, introdueix una adreça de correu electrònic vàlida", "error.validation.email": "Si us plau, introdueix una adreça de correu electrònic vàlida",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Zadejte prosím hodnotu, která obsahuje \"{needle}\"", "Zadejte prosím hodnotu, která obsahuje \"{needle}\"",
"error.validation.date": "Zadejte prosím platné datum", "error.validation.date": "Zadejte prosím platné datum",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "Prosím, odmítněte", "error.validation.denied": "Prosím, odmítněte",
"error.validation.different": "Hodnota nesmí být \"{other}\"", "error.validation.different": "Hodnota nesmí být \"{other}\"",
"error.validation.email": "Zadejte prosím platnou emailovou adresu", "error.validation.email": "Zadejte prosím platnou emailovou adresu",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Indtast venligst en værdi der indeholder \"{needle}\"", "Indtast venligst en værdi der indeholder \"{needle}\"",
"error.validation.date": "Indtast venligst en gyldig dato", "error.validation.date": "Indtast venligst en gyldig dato",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "Venligst afvis", "error.validation.denied": "Venligst afvis",
"error.validation.different": "Værdien må ikke være \"{other}\"", "error.validation.different": "Værdien må ikke være \"{other}\"",
"error.validation.email": "Indtast venligst en gyldig email adresse", "error.validation.email": "Indtast venligst en gyldig email adresse",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Bitte gib einen Wert ein, der \"{needle}\" enthält", "Bitte gib einen Wert ein, der \"{needle}\" enthält",
"error.validation.date": "Bitte gib ein gültiges Datum ein", "error.validation.date": "Bitte gib ein gültiges Datum ein",
"error.validation.date.after": "Bitte gib ein Datum nach dem {date} ein",
"error.validation.date.before": "Bitte gib ein Datum vor dem {date} ein",
"error.validation.date.between": "Bitte gib ein Datum zwischen dem {min} und dem {max} ein",
"error.validation.denied": "Bitte lehne die Eingabe ab", "error.validation.denied": "Bitte lehne die Eingabe ab",
"error.validation.different": "Der Wert darf nicht \"{other}\" sein", "error.validation.different": "Der Wert darf nicht \"{other}\" sein",
"error.validation.email": "Bitte gib eine gültige E-Mailadresse an", "error.validation.email": "Bitte gib eine gültige E-Mailadresse an",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Παρακαλώ καταχωρίστε μια τιμή που περιέχει \"{needle}\"", "Παρακαλώ καταχωρίστε μια τιμή που περιέχει \"{needle}\"",
"error.validation.date": "Παρακαλώ εισάγετε μία έγκυρη ημερομηνία", "error.validation.date": "Παρακαλώ εισάγετε μία έγκυρη ημερομηνία",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "Παρακαλώ αρνηθείτε", "error.validation.denied": "Παρακαλώ αρνηθείτε",
"error.validation.different": "Η τιμή δεν μπορεί να είναι \"{other}\"", "error.validation.different": "Η τιμή δεν μπορεί να είναι \"{other}\"",
"error.validation.email": "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου", "error.validation.email": "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Please enter a value that contains \"{needle}\"", "Please enter a value that contains \"{needle}\"",
"error.validation.date": "Please enter a valid date", "error.validation.date": "Please enter a valid date",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "Please deny", "error.validation.denied": "Please deny",
"error.validation.different": "The value must not be \"{other}\"", "error.validation.different": "The value must not be \"{other}\"",
"error.validation.email": "Please enter a valid email address", "error.validation.email": "Please enter a valid email address",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Por favor ingrese valores que contengan \"{needle}\"", "Por favor ingrese valores que contengan \"{needle}\"",
"error.validation.date": "Por favor ingresa una fecha válida", "error.validation.date": "Por favor ingresa una fecha válida",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "Por favor niegue", "error.validation.denied": "Por favor niegue",
"error.validation.different": "EL valor no debe ser \"{other}\"", "error.validation.different": "EL valor no debe ser \"{other}\"",
"error.validation.email": "Por favor ingresa un correo electrónico valido", "error.validation.email": "Por favor ingresa un correo electrónico valido",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Por favor ingrese un valor que contenga \"{needle}\"", "Por favor ingrese un valor que contenga \"{needle}\"",
"error.validation.date": "Por favor introduzca una fecha valida", "error.validation.date": "Por favor introduzca una fecha valida",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "Por favor, rechace", "error.validation.denied": "Por favor, rechace",
"error.validation.different": "El valor no debe ser \"{other}\"", "error.validation.different": "El valor no debe ser \"{other}\"",
"error.validation.email": "Por favor, introduce un correo electrónico válido", "error.validation.email": "Por favor, introduce un correo electrónico válido",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"لطفا مقداری شامل «{needle}» وارد کنید", "لطفا مقداری شامل «{needle}» وارد کنید",
"error.validation.date": "لطفا تاریخ معتبری وارد کنید", "error.validation.date": "لطفا تاریخ معتبری وارد کنید",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "لطفا رد کنید", "error.validation.denied": "لطفا رد کنید",
"error.validation.different": "مقدار نباید مساوی «{other}» باشد", "error.validation.different": "مقدار نباید مساوی «{other}» باشد",
"error.validation.email": "لطفا ایمیل صحیحی وارد کنید", "error.validation.email": "لطفا ایمیل صحیحی وارد کنید",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Anna arvo joka sisältää \"{needle}\"", "Anna arvo joka sisältää \"{needle}\"",
"error.validation.date": "Anna kelpaava päivämäärä", "error.validation.date": "Anna kelpaava päivämäärä",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "Ole hyvä ja peruuta", "error.validation.denied": "Ole hyvä ja peruuta",
"error.validation.different": "Arvo ei voi olla \"{other}\"", "error.validation.different": "Arvo ei voi olla \"{other}\"",
"error.validation.email": "Anna kelpaava sähköpostiosoite", "error.validation.email": "Anna kelpaava sähköpostiosoite",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Veuillez saisir une valeur contenant «&nbsp;{needle}&nbsp;»", "Veuillez saisir une valeur contenant «&nbsp;{needle}&nbsp;»",
"error.validation.date": "Veuillez saisir une date valide", "error.validation.date": "Veuillez saisir une date valide",
"error.validation.date.after": "Veuillez saisir une date après {date}",
"error.validation.date.before": "Veuillez saisir une date avant {date}",
"error.validation.date.between": "Veuillez saisir une date entre {min} et {max}",
"error.validation.denied": "Veuillez refuser", "error.validation.denied": "Veuillez refuser",
"error.validation.different": "La valeur ne doit pas être «&nbsp;{other}&nbsp;»", "error.validation.different": "La valeur ne doit pas être «&nbsp;{other}&nbsp;»",
"error.validation.email": "Veuillez saisir un courriel valide", "error.validation.email": "Veuillez saisir un courriel valide",

View File

@@ -24,13 +24,13 @@
"delete": "T\u00f6rl\u00e9s", "delete": "T\u00f6rl\u00e9s",
"dimensions": "Méretek", "dimensions": "Méretek",
"discard": "Visszavon\u00e1s", "discard": "Visszavon\u00e1s",
"download": "Download", "download": "Letöltés",
"duplicate": "Duplicate", "duplicate": "Másolat",
"edit": "Aloldal szerkeszt\u00e9se", "edit": "Aloldal szerkeszt\u00e9se",
"dialog.files.empty": "No files to select", "dialog.files.empty": "Nincsenek fájlok kiválasztva",
"dialog.pages.empty": "No pages to select", "dialog.pages.empty": "Nincsenek oldalak kiválasztva",
"dialog.users.empty": "No users to select", "dialog.users.empty": "Nincsenek felhasználók kiválasztva",
"email": "Email", "email": "Email",
"email.placeholder": "mail@pelda.hu", "email.placeholder": "mail@pelda.hu",
@@ -71,13 +71,13 @@
"error.form.incomplete": "Kérlek javítsd ki az összes hibát az űrlapon", "error.form.incomplete": "Kérlek javítsd ki az összes hibát az űrlapon",
"error.form.notSaved": "Az űrlap nem menthető", "error.form.notSaved": "Az űrlap nem menthető",
"error.language.code": "Please enter a valid code for the language", "error.language.code": "Kérlek, add meg a nyelv érvényes kódját",
"error.language.duplicate": "The language already exists", "error.language.duplicate": "A nyelv már létezik",
"error.language.name": "Please enter a valid name for the language", "error.language.name": "Kérlek, add meg a nyelv érvényes nevét",
"error.license.format": "Please enter a valid license key", "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.email": "Kérlek adj meg egy valós email-címet",
"error.license.verification": "The license could not be verified", "error.license.verification": "A licensz nem ellenőrizhető",
"error.page.changeSlug.permission": "error.page.changeSlug.permission":
"Nem változtathatod meg az URL-előtagot: \"{slug}\"", "Nem változtathatod meg az URL-előtagot: \"{slug}\"",
@@ -104,7 +104,7 @@
"Van már egy másik oldal ezzel az URL-lel: \"{slug}\"", "Van már egy másik oldal ezzel az URL-lel: \"{slug}\"",
"error.page.duplicate": "error.page.duplicate":
"Van már egy másik oldal ezzel az URL-lel: \"{slug}\"", "Van már egy másik oldal ezzel az URL-lel: \"{slug}\"",
"error.page.duplicate.permission": "You are not allowed to duplicate \"{slug}\"", "error.page.duplicate.permission": "Nincs engedélyed a(z) \"{slug}\" másolat keszítéséhez",
"error.page.notFound": "Az oldal nem tal\u00e1lhat\u00f3", "error.page.notFound": "Az oldal nem tal\u00e1lhat\u00f3",
"error.page.num.invalid": "error.page.num.invalid":
"Kérlek megfelelő oldalszámozást adj meg. Negatív szám itt nem használható.", "Kérlek megfelelő oldalszámozást adj meg. Negatív szám itt nem használható.",
@@ -119,18 +119,18 @@
"error.section.files.max.singular": "error.section.files.max.singular":
"Nem adhatsz hozzá egynél több fájlt a(z) \"{section}\" szekcióhoz", "Nem adhatsz hozzá egynél több fájlt a(z) \"{section}\" szekcióhoz",
"error.section.files.min.plural": "error.section.files.min.plural":
"The \"{section}\" section requires at least {min} files", "A \"{section}\" szakasz legalább {min} fájlt igényel",
"error.section.files.min.singular": "error.section.files.min.singular":
"The \"{section}\" section requires at least one file", "A \"{section}\" szakasz legalább egy fájlt igényel",
"error.section.pages.max.plural": "error.section.pages.max.plural":
"Maximum {max} oldalt adhatsz hozzá a(z) \"{section}\" szekcióhoz", "Maximum {max} oldalt adhatsz hozzá a(z) \"{section}\" szekcióhoz",
"error.section.pages.max.singular": "error.section.pages.max.singular":
"Nem adhatsz hozzá egynél több oldalt a(z) \"{section}\" szekcióhoz", "Nem adhatsz hozzá egynél több oldalt a(z) \"{section}\" szekcióhoz",
"error.section.pages.min.plural": "error.section.pages.min.plural":
"The \"{section}\" section requires at least {min} pages", "A \"{section}\" szakasz legalább {min} oldalt igényel",
"error.section.pages.min.singular": "error.section.pages.min.singular":
"The \"{section}\" section requires at least one page", "A \"{section}\" szakasz legalább egy oldalt igényel",
"error.section.notLoaded": "A(z) \"{name}\" szekció nem tölthető be", "error.section.notLoaded": "A(z) \"{name}\" szekció nem tölthető be",
"error.section.type.invalid": "A szekció típusa (\"{type}\") nem megfelelő", "error.section.type.invalid": "A szekció típusa (\"{type}\") nem megfelelő",
@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Kérlek olyan értéket adj meg, amely tartalmazza ezt: \"{needle}\"", "Kérlek olyan értéket adj meg, amely tartalmazza ezt: \"{needle}\"",
"error.validation.date": "Kérlek megfelelő dátumot adj meg", "error.validation.date": "Kérlek megfelelő dátumot adj meg",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "Kérlek vesd el", "error.validation.denied": "Kérlek vesd el",
"error.validation.different": "Az érték nem lehet \"{other}\"", "error.validation.different": "Az érték nem lehet \"{other}\"",
"error.validation.email": "Kérlek adj meg egy valós email-címet", "error.validation.email": "Kérlek adj meg egy valós email-címet",
@@ -233,7 +236,7 @@
"installation": "Telepítés", "installation": "Telepítés",
"installation.completed": "A panel sikeresen telepítve", "installation.completed": "A panel sikeresen telepítve",
"installation.disabled": "The panel installer is disabled on public servers by default. Please run the installer on a local machine or enable it with the <code>panel.install</code> option.", "installation.disabled": "A panel telepítője alapértelmezés szerint le van tiltva a nyilvános szervereken. Kérlek, futtassd a telepítőt egy helyi gépen vagy engedélyezze a <code>panel.install</code> opcióval.",
"installation.issues.accounts": "installation.issues.accounts":
"A <code>/site/accounts</code> mappa nem létezik, vagy nem írható", "A <code>/site/accounts</code> mappa nem létezik, vagy nem írható",
"installation.issues.content": "installation.issues.content":
@@ -247,7 +250,7 @@
"installation.issues.php": "Bizonyosodj meg róla, hogy az általad használt PHP-verzió <code>PHP 7+</code>", "installation.issues.php": "Bizonyosodj meg róla, hogy az általad használt PHP-verzió <code>PHP 7+</code>",
"installation.issues.server": "installation.issues.server":
"A Kirby az alábbi szervereken futtatható: <code>Apache</code>, <code>Nginx</code> vagy <code>Caddy</code>", "A Kirby az alábbi szervereken futtatható: <code>Apache</code>, <code>Nginx</code> vagy <code>Caddy</code>",
"installation.issues.sessions": "The <code>/site/sessions</code> folder does not exist or is not writable", "installation.issues.sessions": "A <code>/site/sessions</code> könyvtár nem létezik vagy nem írható",
"language": "Nyelv", "language": "Nyelv",
"language.code": "Kód", "language.code": "Kód",
@@ -285,12 +288,12 @@
"loading": "Betöltés", "loading": "Betöltés",
"lock.unsaved": "Unsaved changes", "lock.unsaved": "Nem mentett változások",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>", "lock.isLocked": "Nem mentett <strong>{email}</strong> változások",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.", "lock.file.isLocked": "A fájlt jelenleg {email} szerkeszti és nem módosítható.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.", "lock.page.isLocked": "Az oldalt jelenleg {email} szerkeszti és nem módosítható.",
"lock.unlock": "Unlock", "lock.unlock": "Kinyit",
"lock.isUnlocked": "Your unsaved changes have been overwritten by another user. You can download your changes to merge them manually.", "lock.isUnlocked": "A nem mentett módosításokat egy másik felhasználó felülírta. A módosításokat manuálisan egyesítheted.",
"login": "Bejelentkezés", "login": "Bejelentkezés",
"login.remember": "Maradjak bejelentkezve", "login.remember": "Maradjak bejelentkezve",
@@ -319,8 +322,8 @@
"more": "Több", "more": "Több",
"name": "Név", "name": "Név",
"next": "Következő", "next": "Következő",
"off": "off", "off": "ki",
"on": "on", "on": "be",
"open": "Megnyitás", "open": "Megnyitás",
"options": "Beállítások", "options": "Beállítások",
@@ -342,8 +345,8 @@
"page.delete.confirm.title": "Megerősítéshez add meg az oldal címét", "page.delete.confirm.title": "Megerősítéshez add meg az oldal címét",
"page.draft.create": "Piszkozat létrehozása", "page.draft.create": "Piszkozat létrehozása",
"page.duplicate.appendix": "Másol", "page.duplicate.appendix": "Másol",
"page.duplicate.files": "Copy files", "page.duplicate.files": "Fájlok másolása",
"page.duplicate.pages": "Copy pages", "page.duplicate.pages": "Oldalak másolása",
"page.status": "Állapot", "page.status": "Állapot",
"page.status.draft": "Piszkozat", "page.status.draft": "Piszkozat",
"page.status.draft.description": "page.status.draft.description":
@@ -369,13 +372,13 @@
"revert": "Visszavon\u00e1s", "revert": "Visszavon\u00e1s",
"role": "Szerepkör", "role": "Szerepkör",
"role.admin.description": "The admin has all rights", "role.admin.description": "Az adminisztrátornak minden joga van",
"role.admin.title": "Admin", "role.admin.title": "Admin",
"role.all": "Összes", "role.all": "Összes",
"role.empty": "Nincsenek felhasználók ilyen szerepkörrel", "role.empty": "Nincsenek felhasználók ilyen szerepkörrel",
"role.description.placeholder": "Nincs leírás", "role.description.placeholder": "Nincs leírás",
"role.nobody.description": "This is a fallback role without any permissions", "role.nobody.description": "Ez a visszatérő szabály a nem rendelkező jogosultsághoz",
"role.nobody.title": "Nobody", "role.nobody.title": "Senki",
"save": "Ment\u00e9s", "save": "Ment\u00e9s",
"search": "Keresés", "search": "Keresés",
@@ -397,8 +400,8 @@
"toolbar.button.heading.3": "Cím 3", "toolbar.button.heading.3": "Cím 3",
"toolbar.button.italic": "Dőlt szöveg", "toolbar.button.italic": "Dőlt szöveg",
"toolbar.button.file": "Fájl", "toolbar.button.file": "Fájl",
"toolbar.button.file.select": "Select a file", "toolbar.button.file.select": "Válassz egy fájlt",
"toolbar.button.file.upload": "Upload a file", "toolbar.button.file.upload": "Fájl feltöltése",
"toolbar.button.link": "Link", "toolbar.button.link": "Link",
"toolbar.button.ol": "Rendezett lista", "toolbar.button.ol": "Rendezett lista",
"toolbar.button.ul": "Rendezetlen lista", "toolbar.button.ul": "Rendezetlen lista",

View File

@@ -24,13 +24,13 @@
"delete": "Hapus", "delete": "Hapus",
"dimensions": "Dimensi", "dimensions": "Dimensi",
"discard": "Buang", "discard": "Buang",
"download": "Download", "download": "Unduh",
"duplicate": "Duplicate", "duplicate": "Duplikasi",
"edit": "Sunting", "edit": "Sunting",
"dialog.files.empty": "No files to select", "dialog.files.empty": "Tidak ada berkas untuk dipilih",
"dialog.pages.empty": "No pages to select", "dialog.pages.empty": "Tidak ada halaman untuk dipilih",
"dialog.users.empty": "No users to select", "dialog.users.empty": "Tidak ada pengguna untuk dipilih",
"email": "Surel", "email": "Surel",
"email.placeholder": "surel@contohsurel.com", "email.placeholder": "surel@contohsurel.com",
@@ -71,13 +71,13 @@
"error.form.incomplete": "Pastikan semua bidang telah diisi dengan benar…", "error.form.incomplete": "Pastikan semua bidang telah diisi dengan benar…",
"error.form.notSaved": "Formulir tidak dapat disimpan", "error.form.notSaved": "Formulir tidak dapat disimpan",
"error.language.code": "Please enter a valid code for the language", "error.language.code": "Masukkan kode bahasa yang valid",
"error.language.duplicate": "The language already exists", "error.language.duplicate": "Bahasa sudah ada",
"error.language.name": "Please enter a valid name for the language", "error.language.name": "Masukkan nama bahasa yang valid",
"error.license.format": "Please enter a valid license key", "error.license.format": "Masukkan kode lisensi yang valid",
"error.license.email": "Masukkan surel yang valid", "error.license.email": "Masukkan surel yang valid",
"error.license.verification": "The license could not be verified", "error.license.verification": "Lisensi tidak dapat diverifikasi",
"error.page.changeSlug.permission": "error.page.changeSlug.permission":
"Anda tidak diizinkan mengubah akhiran URL untuk \"{slug}\"", "Anda tidak diizinkan mengubah akhiran URL untuk \"{slug}\"",
@@ -104,7 +104,7 @@
"Draf halaman dengan akhiran URL \"{slug}\" sudah ada", "Draf halaman dengan akhiran URL \"{slug}\" sudah ada",
"error.page.duplicate": "error.page.duplicate":
"Halaman dengan akhiran URL \"{slug}\" sudah ada", "Halaman dengan akhiran URL \"{slug}\" sudah ada",
"error.page.duplicate.permission": "You are not allowed to duplicate \"{slug}\"", "error.page.duplicate.permission": "Anda tidak diizinkan menduplikasi \"{slug}\"",
"error.page.notFound": "Halaman \"{slug}\" tidak dapat ditemukan", "error.page.notFound": "Halaman \"{slug}\" tidak dapat ditemukan",
"error.page.num.invalid": "error.page.num.invalid":
"Masukkan nomor urut yang valid. Nomor tidak boleh negatif.", "Masukkan nomor urut yang valid. Nomor tidak boleh negatif.",
@@ -119,18 +119,18 @@
"error.section.files.max.singular": "error.section.files.max.singular":
"Anda hanya boleh menambahkan satu berkas ke bagian \"{section}\"", "Anda hanya boleh menambahkan satu berkas ke bagian \"{section}\"",
"error.section.files.min.plural": "error.section.files.min.plural":
"The \"{section}\" section requires at least {min} files", "Bagian \"{section}\" setidaknya memiliki {min} berkas",
"error.section.files.min.singular": "error.section.files.min.singular":
"The \"{section}\" section requires at least one file", "Bagian \"{section}\" setidaknya memiliki satu berkas",
"error.section.pages.max.plural": "error.section.pages.max.plural":
"Anda hanya boleh menambahkan maksimal {max} halaman ke bagian \"{section}\"", "Anda hanya boleh menambahkan maksimal {max} halaman ke bagian \"{section}\"",
"error.section.pages.max.singular": "error.section.pages.max.singular":
"Anda hanya boleh menambahkan satu halaman ke bagian \"{section}\"", "Anda hanya boleh menambahkan satu halaman ke bagian \"{section}\"",
"error.section.pages.min.plural": "error.section.pages.min.plural":
"The \"{section}\" section requires at least {min} pages", "Bagian \"{section}\" setidaknya memiliki {min} halaman",
"error.section.pages.min.singular": "error.section.pages.min.singular":
"The \"{section}\" section requires at least one page", "Bagian \"{section}\" setidaknya memiliki satu halaman",
"error.section.notLoaded": "Bagian \"{name}\" tidak dapat dimuat", "error.section.notLoaded": "Bagian \"{name}\" tidak dapat dimuat",
"error.section.type.invalid": "Tipe bagian \"{type}\" tidak valid", "error.section.type.invalid": "Tipe bagian \"{type}\" tidak valid",
@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Masukkan nilai yang mengandung \"{needle}\"", "Masukkan nilai yang mengandung \"{needle}\"",
"error.validation.date": "Masukkan tanggal yang valid", "error.validation.date": "Masukkan tanggal yang valid",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "Mohon tolak", "error.validation.denied": "Mohon tolak",
"error.validation.different": "Nilai harus selain \"{other}\"", "error.validation.different": "Nilai harus selain \"{other}\"",
"error.validation.email": "Masukkan surel yang valid", "error.validation.email": "Masukkan surel yang valid",
@@ -205,7 +208,7 @@
"error.validation.notcontains": "error.validation.notcontains":
"Masukkan nilai yang tidak mengandung \"{needle}\"", "Masukkan nilai yang tidak mengandung \"{needle}\"",
"error.validation.notin": "error.validation.notin":
"Jangan masukkan satu pun: ({notIn})", "Jangan masukkan satupun: ({notIn})",
"error.validation.option": "Pilih opsi yang valid", "error.validation.option": "Pilih opsi yang valid",
"error.validation.num": "Masukkan nomor yang valid", "error.validation.num": "Masukkan nomor yang valid",
"error.validation.required": "Masukkan sesuatu", "error.validation.required": "Masukkan sesuatu",
@@ -285,12 +288,12 @@
"loading": "Memuat", "loading": "Memuat",
"lock.unsaved": "Unsaved changes", "lock.unsaved": "Perubahan belum tersimpan",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>", "lock.isLocked": "Perubahan belum tersimpan oleh <strong>{email}</strong>",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.", "lock.file.isLocked": "Berkas sedang disunting oleh {email} dan tidak dapat diubah.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.", "lock.page.isLocked": "Halaman sedang disunting oleh {email} dan tidak dapat diubah.",
"lock.unlock": "Unlock", "lock.unlock": "Buka kunci",
"lock.isUnlocked": "Your unsaved changes have been overwritten by another user. You can download your changes to merge them manually.", "lock.isUnlocked": "Perubahan Anda yang belum tersimpan telah terubah oleh pengguna lain. Anda dapat mengunduh perubahan Anda untuk menggabungkannya manual.",
"login": "Masuk", "login": "Masuk",
"login.remember": "Biarkan tetap masuk", "login.remember": "Biarkan tetap masuk",
@@ -319,8 +322,8 @@
"more": "Lebih lanjut", "more": "Lebih lanjut",
"name": "Nama", "name": "Nama",
"next": "Selanjutnya", "next": "Selanjutnya",
"off": "off", "off": "mati",
"on": "on", "on": "hidup",
"open": "Buka", "open": "Buka",
"options": "Opsi", "options": "Opsi",
@@ -342,14 +345,14 @@
"page.delete.confirm.title": "Masukkan judul halaman untuk mengonfirmasi", "page.delete.confirm.title": "Masukkan judul halaman untuk mengonfirmasi",
"page.draft.create": "Buat draf", "page.draft.create": "Buat draf",
"page.duplicate.appendix": "Salin", "page.duplicate.appendix": "Salin",
"page.duplicate.files": "Copy files", "page.duplicate.files": "Salin berkas",
"page.duplicate.pages": "Copy pages", "page.duplicate.pages": "Salin halaman",
"page.status": "Status", "page.status": "Status",
"page.status.draft": "Draf", "page.status.draft": "Draf",
"page.status.draft.description": "page.status.draft.description":
"Halaman ada di mode draf dan hanya terlihat untuk penyunting", "Halaman hanya terlihat untuk penyunting",
"page.status.listed": "Publik", "page.status.listed": "Publik",
"page.status.listed.description": "Halaman publik untuk siapa pun", "page.status.listed.description": "Halaman publik untuk siapapun",
"page.status.unlisted": "Tidak tercantum", "page.status.unlisted": "Tidak tercantum",
"page.status.unlisted.description": "Halaman hanya dapat diakses via URL", "page.status.unlisted.description": "Halaman hanya dapat diakses via URL",
@@ -369,13 +372,13 @@
"revert": "Kembalikan", "revert": "Kembalikan",
"role": "Peran", "role": "Peran",
"role.admin.description": "The admin has all rights", "role.admin.description": "Admin memiliki semua izin",
"role.admin.title": "Admin", "role.admin.title": "Admin",
"role.all": "Semua", "role.all": "Semua",
"role.empty": "Tidak ada pengguna dengan peran ini", "role.empty": "Tidak ada pengguna dengan peran ini",
"role.description.placeholder": "Tidak ada deskripsi", "role.description.placeholder": "Tidak ada deskripsi",
"role.nobody.description": "This is a fallback role without any permissions", "role.nobody.description": "Ini adalah peran cadangan tanpa permisi apapun",
"role.nobody.title": "Nobody", "role.nobody.title": "Tidak siapapun",
"save": "Simpan", "save": "Simpan",
"search": "Cari", "search": "Cari",
@@ -397,8 +400,8 @@
"toolbar.button.heading.3": "Penajukan 3", "toolbar.button.heading.3": "Penajukan 3",
"toolbar.button.italic": "Miring", "toolbar.button.italic": "Miring",
"toolbar.button.file": "Berkas", "toolbar.button.file": "Berkas",
"toolbar.button.file.select": "Select a file", "toolbar.button.file.select": "Pilih berkas",
"toolbar.button.file.upload": "Upload a file", "toolbar.button.file.upload": "Unggah berkas",
"toolbar.button.link": "Tautan", "toolbar.button.link": "Tautan",
"toolbar.button.ol": "Daftar berurut", "toolbar.button.ol": "Daftar berurut",
"toolbar.button.ul": "Daftar tidak berurut", "toolbar.button.ul": "Daftar tidak berurut",

View File

@@ -183,6 +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.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {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",

View File

@@ -24,8 +24,8 @@
"delete": "\uc0ad\uc81c", "delete": "\uc0ad\uc81c",
"dimensions": "크기", "dimensions": "크기",
"discard": "무시", "discard": "무시",
"download": "Download", "download": "다운로드",
"duplicate": "Duplicate", "duplicate": "복제",
"edit": "\ud3b8\uc9d1", "edit": "\ud3b8\uc9d1",
"dialog.files.empty": "No files to select", "dialog.files.empty": "No files to select",
@@ -73,11 +73,11 @@
"error.language.code": "Please enter a valid code for the language", "error.language.code": "Please enter a valid code for the language",
"error.language.duplicate": "The language already exists", "error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language", "error.language.name": "올바른 언어를 입력하세요.",
"error.license.format": "Please enter a valid license key", "error.license.format": "올바른 라이선스 키를 입력하세요.",
"error.license.email": "올바른 이메일 주소를 입력하세요.", "error.license.email": "올바른 이메일 주소를 입력하세요.",
"error.license.verification": "The license could not be verified", "error.license.verification": "라이선스 키가 올바르지 않습니다.",
"error.page.changeSlug.permission": "error.page.changeSlug.permission":
"고유 주소({slug})를 변경할 권한이 없습니다.", "고유 주소({slug})를 변경할 권한이 없습니다.",
@@ -104,7 +104,7 @@
"고유 주소({slug})가 같은 초안이 있습니다.", "고유 주소({slug})가 같은 초안이 있습니다.",
"error.page.duplicate": "error.page.duplicate":
"고유 주소({slug})가 같은 페이지가 있습니다.", "고유 주소({slug})가 같은 페이지가 있습니다.",
"error.page.duplicate.permission": "You are not allowed to duplicate \"{slug}\"", "error.page.duplicate.permission": "페이지({slug})를 복제할 권한이 없습니다.",
"error.page.notFound": "페이지({slug})가 없습니다.", "error.page.notFound": "페이지({slug})가 없습니다.",
"error.page.num.invalid": "error.page.num.invalid":
"올바른 정수를 입력하세요.", "올바른 정수를 입력하세요.",
@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"{needle}에 포함된 값을 입력하세요.", "{needle}에 포함된 값을 입력하세요.",
"error.validation.date": "올바른 날짜를 입력하세요.", "error.validation.date": "올바른 날짜를 입력하세요.",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "취소하세요.", "error.validation.denied": "취소하세요.",
"error.validation.different": "{other}에 포함된 값은 입력할 수 없습니다.", "error.validation.different": "{other}에 포함된 값은 입력할 수 없습니다.",
"error.validation.email": "올바른 이메일 주소를 입력하세요.", "error.validation.email": "올바른 이메일 주소를 입력하세요.",
@@ -285,11 +288,11 @@
"loading": "로딩 중", "loading": "로딩 중",
"lock.unsaved": "Unsaved changes", "lock.unsaved": "수정 사항이 저장되지 않았습니다.",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>", "lock.isLocked": "<strong>{email}</strong>의 수정 사항이 저장되지 않았습니다.",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.", "lock.file.isLocked": "다른 사용자({email})가 수정 중입니다.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.", "lock.page.isLocked": "다른 사용자({email}가 수정 중입니다.",
"lock.unlock": "Unlock", "lock.unlock": "잠금",
"lock.isUnlocked": "Your unsaved changes have been overwritten by another user. You can download your changes to merge them manually.", "lock.isUnlocked": "Your unsaved changes have been overwritten by another user. You can download your changes to merge them manually.",
"login": "\ub85c\uadf8\uc778", "login": "\ub85c\uadf8\uc778",
@@ -319,8 +322,8 @@
"more": "더 보기", "more": "더 보기",
"name": "이름", "name": "이름",
"next": "다음", "next": "다음",
"off": "off", "off": "",
"on": "on", "on": "",
"open": "열기", "open": "열기",
"options": "옵션", "options": "옵션",
@@ -342,8 +345,8 @@
"page.delete.confirm.title": "페이지 제목을 입력하세요.", "page.delete.confirm.title": "페이지 제목을 입력하세요.",
"page.draft.create": "초안 작성", "page.draft.create": "초안 작성",
"page.duplicate.appendix": "복사", "page.duplicate.appendix": "복사",
"page.duplicate.files": "Copy files", "page.duplicate.files": "파일 복사",
"page.duplicate.pages": "Copy pages", "page.duplicate.pages": "페이지 복사",
"page.status": "상태", "page.status": "상태",
"page.status.draft": "초안", "page.status.draft": "초안",
"page.status.draft.description": "page.status.draft.description":
@@ -370,7 +373,7 @@
"role": "역할", "role": "역할",
"role.admin.description": "The admin has all rights", "role.admin.description": "The admin has all rights",
"role.admin.title": "Admin", "role.admin.title": "관리자",
"role.all": "전체 보기", "role.all": "전체 보기",
"role.empty": "이 역할에 해당하는 사용자가 없습니다.", "role.empty": "이 역할에 해당하는 사용자가 없습니다.",
"role.description.placeholder": "설명이 없습니다.", "role.description.placeholder": "설명이 없습니다.",
@@ -397,8 +400,8 @@
"toolbar.button.heading.3": "제목 3", "toolbar.button.heading.3": "제목 3",
"toolbar.button.italic": "강조 2", "toolbar.button.italic": "강조 2",
"toolbar.button.file": "파일", "toolbar.button.file": "파일",
"toolbar.button.file.select": "Select a file", "toolbar.button.file.select": "파일 선택",
"toolbar.button.file.upload": "Upload a file", "toolbar.button.file.upload": "파일 업로드",
"toolbar.button.link": "링크", "toolbar.button.link": "링크",
"toolbar.button.ol": "숫자 목록", "toolbar.button.ol": "숫자 목록",
"toolbar.button.ul": "기호 목록", "toolbar.button.ul": "기호 목록",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Vennligst skriv inn en verdi som inneholder \"{needle}\"", "Vennligst skriv inn en verdi som inneholder \"{needle}\"",
"error.validation.date": "Vennligst skriv inn en gyldig dato", "error.validation.date": "Vennligst skriv inn en gyldig dato",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "Vennligst avslå", "error.validation.denied": "Vennligst avslå",
"error.validation.different": "Verdien kan ikke være \"{other}\"", "error.validation.different": "Verdien kan ikke være \"{other}\"",
"error.validation.email": "Vennligst skriv inn en gyldig e-postadresse", "error.validation.email": "Vennligst skriv inn en gyldig e-postadresse",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Vul een waarde in die \"{needle}\" bevat", "Vul een waarde in die \"{needle}\" bevat",
"error.validation.date": "Vul een geldige datum in", "error.validation.date": "Vul een geldige datum in",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "Weiger", "error.validation.denied": "Weiger",
"error.validation.different": "De invoer mag niet \"{other}\" zijn", "error.validation.different": "De invoer mag niet \"{other}\" zijn",
"error.validation.email": "Gelieve een geldig emailadres in te voeren", "error.validation.email": "Gelieve een geldig emailadres in te voeren",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Wprowadź wartość, która zawiera \"{needle}\"", "Wprowadź wartość, która zawiera \"{needle}\"",
"error.validation.date": "Wprowadź poprawną datę", "error.validation.date": "Wprowadź poprawną datę",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "Proszę odmówić", "error.validation.denied": "Proszę odmówić",
"error.validation.different": "Wartością nie może być \"{other}\"", "error.validation.different": "Wartością nie może być \"{other}\"",
"error.validation.email": "Wprowadź poprawny adres email", "error.validation.email": "Wprowadź poprawny adres email",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Digite um valor que contenha \"{needle}\"", "Digite um valor que contenha \"{needle}\"",
"error.validation.date": "Escolha uma data válida", "error.validation.date": "Escolha uma data válida",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "Por favor, cancele", "error.validation.denied": "Por favor, cancele",
"error.validation.different": "O valor deve ser diferente de \"{other}\"", "error.validation.different": "O valor deve ser diferente de \"{other}\"",
"error.validation.email": "Digite um endereço de email válido", "error.validation.email": "Digite um endereço de email válido",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Digite um valor que contenha \"{needle}\"", "Digite um valor que contenha \"{needle}\"",
"error.validation.date": "Escolha uma data válida", "error.validation.date": "Escolha uma data válida",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "Por favor, cancele", "error.validation.denied": "Por favor, cancele",
"error.validation.different": "O valor deve ser diferente de \"{other}\"", "error.validation.different": "O valor deve ser diferente de \"{other}\"",
"error.validation.email": "Digite um endereço de email válido", "error.validation.email": "Digite um endereço de email válido",

View File

@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Prosím, zadajte hodnotu, ktorá obsahuje \"{needle}\"", "Prosím, zadajte hodnotu, ktorá obsahuje \"{needle}\"",
"error.validation.date": "Prosím, zadajte platný dátum", "error.validation.date": "Prosím, zadajte platný dátum",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "Prosím, odmietnite", "error.validation.denied": "Prosím, odmietnite",
"error.validation.different": "Hodnota nemôže byť \"{other}\"", "error.validation.different": "Hodnota nemôže byť \"{other}\"",
"error.validation.email": "Prosím, zadajte platnú e-mailovú adresu", "error.validation.email": "Prosím, zadajte platnú e-mailovú adresu",

View File

@@ -24,13 +24,13 @@
"delete": "Radera", "delete": "Radera",
"dimensions": "Dimensioner", "dimensions": "Dimensioner",
"discard": "Kassera", "discard": "Kassera",
"download": "Download", "download": "Ladda ner",
"duplicate": "Duplicate", "duplicate": "Duplicera",
"edit": "Redigera", "edit": "Redigera",
"dialog.files.empty": "No files to select", "dialog.files.empty": "Inga filer att välja",
"dialog.pages.empty": "No pages to select", "dialog.pages.empty": "Inga sidor att välja",
"dialog.users.empty": "No users to select", "dialog.users.empty": "Inga användare att välja",
"email": "E-post", "email": "E-post",
"email.placeholder": "namn@exampel.se", "email.placeholder": "namn@exampel.se",
@@ -71,13 +71,13 @@
"error.form.incomplete": "Vänligen åtgärda alla formulärfel...", "error.form.incomplete": "Vänligen åtgärda alla formulärfel...",
"error.form.notSaved": "Formuläret kunde inte sparas", "error.form.notSaved": "Formuläret kunde inte sparas",
"error.language.code": "Please enter a valid code for the language", "error.language.code": "Ange en giltig kod för språket",
"error.language.duplicate": "The language already exists", "error.language.duplicate": "Språket finns redan",
"error.language.name": "Please enter a valid name for the language", "error.language.name": "Ange ett giltigt namn för språket",
"error.license.format": "Please enter a valid license key", "error.license.format": "Ange en giltig licensnyckel",
"error.license.email": "Ange en giltig e-postadress", "error.license.email": "Ange en giltig e-postadress",
"error.license.verification": "The license could not be verified", "error.license.verification": "Licensen kunde inte verifieras",
"error.page.changeSlug.permission": "error.page.changeSlug.permission":
"Du har inte behörighet att ändra URL-appendixen för \"{slug}\"", "Du har inte behörighet att ändra URL-appendixen för \"{slug}\"",
@@ -104,7 +104,7 @@
"Ett utkast med URL-appendixen \"{slug}\" existerar redan", "Ett utkast med URL-appendixen \"{slug}\" existerar redan",
"error.page.duplicate": "error.page.duplicate":
"En sida med URL-appendixen \"{slug}\" existerar redan", "En sida med URL-appendixen \"{slug}\" existerar redan",
"error.page.duplicate.permission": "You are not allowed to duplicate \"{slug}\"", "error.page.duplicate.permission": "Du har inte behörighet att duplicera \"{slug}\"",
"error.page.notFound": "Sidan \"{slug}\" kan inte hittas", "error.page.notFound": "Sidan \"{slug}\" kan inte hittas",
"error.page.num.invalid": "error.page.num.invalid":
"Ange ett giltigt nummer för sortering. Numret får inte vara negativt.", "Ange ett giltigt nummer för sortering. Numret får inte vara negativt.",
@@ -183,6 +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.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {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",
@@ -285,12 +288,12 @@
"loading": "Laddar", "loading": "Laddar",
"lock.unsaved": "Unsaved changes", "lock.unsaved": "Osparade ändringar",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>", "lock.isLocked": "Osparade ändringar av <strong>{email}</strong>",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.", "lock.file.isLocked": "Filen redigeras just nu av {email} och kan inte redigeras.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.", "lock.page.isLocked": "Sidan redigeras just nu av {email} och kan inte redigeras.",
"lock.unlock": "Unlock", "lock.unlock": "Lås upp",
"lock.isUnlocked": "Your unsaved changes have been overwritten by another user. You can download your changes to merge them manually.", "lock.isUnlocked": "Dina osparade ändringar har skrivits över av en annan användare. Du kan ladda ner dina ändringar för att slå ihop dem manuellt.",
"login": "Logga in", "login": "Logga in",
"login.remember": "Håll mig inloggad", "login.remember": "Håll mig inloggad",
@@ -319,8 +322,8 @@
"more": "Mer", "more": "Mer",
"name": "Namn", "name": "Namn",
"next": "Nästa", "next": "Nästa",
"off": "off", "off": "av",
"on": "on", "on": "",
"open": "Öppna", "open": "Öppna",
"options": "Alternativ", "options": "Alternativ",
@@ -342,8 +345,8 @@
"page.delete.confirm.title": "Fyll i sidans titel för att bekräfta", "page.delete.confirm.title": "Fyll i sidans titel för att bekräfta",
"page.draft.create": "Skapa utkast", "page.draft.create": "Skapa utkast",
"page.duplicate.appendix": "Kopiera", "page.duplicate.appendix": "Kopiera",
"page.duplicate.files": "Copy files", "page.duplicate.files": "Kopiera filer",
"page.duplicate.pages": "Copy pages", "page.duplicate.pages": "Kopiera sidor",
"page.status": "Status", "page.status": "Status",
"page.status.draft": "Utkast", "page.status.draft": "Utkast",
"page.status.draft.description": "page.status.draft.description":
@@ -369,13 +372,13 @@
"revert": "Återgå", "revert": "Återgå",
"role": "Roll", "role": "Roll",
"role.admin.description": "The admin has all rights", "role.admin.description": "Administratören har alla behörigheter",
"role.admin.title": "Admin", "role.admin.title": "Administratör",
"role.all": "Alla", "role.all": "Alla",
"role.empty": "Det finns inga användare med denna roll", "role.empty": "Det finns inga användare med denna roll",
"role.description.placeholder": "Ingen beskrivning", "role.description.placeholder": "Ingen beskrivning",
"role.nobody.description": "This is a fallback role without any permissions", "role.nobody.description": "Detta är en roll utan några behörigheter",
"role.nobody.title": "Nobody", "role.nobody.title": "Ingen",
"save": "Spara", "save": "Spara",
"search": "Sök", "search": "Sök",

View File

@@ -5,7 +5,7 @@
"cancel": "\u0130ptal", "cancel": "\u0130ptal",
"change": "De\u011fi\u015ftir", "change": "De\u011fi\u015ftir",
"close": "Kapat", "close": "Kapat",
"confirm": "Kaydet", "confirm": "Tamam",
"copy": "Kopyala", "copy": "Kopyala",
"create": "Oluştur", "create": "Oluştur",
@@ -43,7 +43,7 @@
"error.avatar.dimensions.invalid": "error.avatar.dimensions.invalid":
"Lütfen profil resminin genişliğini ve yüksekliğini 3000 pikselin altında tutun", "Lütfen profil resminin genişliğini ve yüksekliğini 3000 pikselin altında tutun",
"error.avatar.mime.forbidden": "error.avatar.mime.forbidden":
"\u0130zin verilmeyen dosya tan\u0131mlay\u0131c\u0131s\u0131", "Profil resmi JPEG veya PNG dosyaları olmalıdır",
"error.blueprint.notFound": "\"{name}\" adlı plan yüklenemedi", "error.blueprint.notFound": "\"{name}\" adlı plan yüklenemedi",
@@ -183,6 +183,9 @@
"error.validation.contains": "error.validation.contains":
"Lütfen \"{needle}\" içeren bir değer girin", "Lütfen \"{needle}\" içeren bir değer girin",
"error.validation.date": "Lütfen geçerli bir tarih girin", "error.validation.date": "Lütfen geçerli bir tarih girin",
"error.validation.date.after": "Lütfen {date} tarihinden sonra bir tarih girin",
"error.validation.date.before": "Lütfen {date} tarihinden önce bir tarih girin",
"error.validation.date.between": "Lütfen {min} ve {max} arasında bir tarih girin",
"error.validation.denied": "Lütfen reddedin", "error.validation.denied": "Lütfen reddedin",
"error.validation.different": "Değer \"{other}\" olmamalıdır", "error.validation.different": "Değer \"{other}\" olmamalıdır",
"error.validation.email": "Lütfen geçerli bir e-posta adresi girin", "error.validation.email": "Lütfen geçerli bir e-posta adresi girin",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -81,7 +81,7 @@ class App
public function __construct(array $props = []) public function __construct(array $props = [])
{ {
// the kirby folder directory // the kirby folder directory
static::$root = dirname(dirname(__DIR__)); static::$root = dirname(__DIR__, 2);
// register all roots to be able to load stuff afterwards // register all roots to be able to load stuff afterwards
$this->bakeRoots($props['roots'] ?? []); $this->bakeRoots($props['roots'] ?? []);

View File

@@ -873,7 +873,7 @@ class User extends ModelWithContent
} }
if (password_verify($password, $this->password()) !== true) { if (password_verify($password, $this->password()) !== true) {
throw new InvalidArgumentException(['key' => 'user.password.invalid']); throw new InvalidArgumentException(['key' => 'user.password.notSame']);
} }
return true; return true;

View File

@@ -25,6 +25,11 @@ class UserPermissions extends ModelPermissions
protected function canChangeRole(): bool protected function canChangeRole(): bool
{ {
// users who are not admins cannot change their own role
if ($this->user->is($this->model) === true && $this->user->isAdmin() === false) {
return false;
}
return $this->model->isLastAdmin() !== true; return $this->model->isLastAdmin() !== true;
} }

View File

@@ -70,6 +70,13 @@ class UserRules
public static function changeRole(User $user, string $role): bool public static function changeRole(User $user, string $role): bool
{ {
if ($user->kirby()->user()->isAdmin() === false) {
throw new PermissionException([
'key' => 'user.changeRole.permission',
'data' => ['name' => $user->username()]
]);
}
static::validRole($user, $role); static::validRole($user, $role);
if ($role !== 'admin' && $user->isLastAdmin() === true) { if ($role !== 'admin' && $user->isLastAdmin() === true) {
@@ -95,6 +102,15 @@ class UserRules
static::validEmail($user, $user->email(), true); static::validEmail($user, $user->email(), true);
static::validLanguage($user, $user->language()); static::validLanguage($user, $user->language());
// only admins are allowed to add admins
$role = $props['role'] ?? null;
if ($role === 'admin' && $user->kirby()->user()->isAdmin() === false) {
throw new PermissionException([
'key' => 'user.create.permission'
]);
}
if (empty($props['password']) === false) { if (empty($props['password']) === false) {
static::validPassword($user, $props['password']); static::validPassword($user, $props['password']);
} }

View File

@@ -662,10 +662,10 @@ class Query
if ($this->debug) { if ($this->debug) {
return [ return [
'query' => $sql['query'], 'query' => $sql['query'],
'bindings' => $this->bindings(), 'bindings' => $this->bindings(),
'options' => $params 'options' => $params
]; ];
} }
if ($this->fail) { if ($this->fail) {
@@ -697,10 +697,10 @@ class Query
if ($this->debug === true) { if ($this->debug === true) {
return [ return [
'query' => $sql['query'], 'query' => $sql['query'],
'bindings' => $sql['bindings'], 'bindings' => $sql['bindings'],
'options' => $params 'options' => $params
]; ];
} }
if ($this->fail) { if ($this->fail) {

View File

@@ -110,7 +110,7 @@ class Html
} }
if (is_array($value) === true) { if (is_array($value) === true) {
if (isset($value['value']) && isset($value['escape'])) { if (isset($value['value'], $value['escape'])) {
$value = $value['escape'] === true ? htmlspecialchars($value['value'], ENT_QUOTES, 'UTF-8') : $value['value']; $value = $value['escape'] === true ? htmlspecialchars($value['value'], ENT_QUOTES, 'UTF-8') : $value['value'];
} else { } else {
$value = implode(' ', array_filter($value, function ($value) { $value = implode(' ', array_filter($value, function ($value) {