Upgrade to 3.1.4

This commit is contained in:
Bastian Allgeier
2019-05-21 12:16:05 +02:00
parent 066913cb6e
commit 9e18cf635d
42 changed files with 215 additions and 109 deletions

View File

@@ -1,7 +1,7 @@
{
"name": "getkirby/cms",
"description": "The Kirby 3 core",
"version": "3.1.3",
"version": "3.1.4",
"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": "7c03372aae9d6bcfc8fdb6399a1e9e38",
"content-hash": "ed043f76d01c39662efae54a2c917b0a",
"packages": [
{
"name": "claviska/simpleimage",

View File

@@ -21,7 +21,7 @@ return [
return $columns;
},
/**
* Default value for the field, which will be used when a Page/File/User is created
* Default value for the field, which will be used when a page/file/user is created
*/
'default' => function ($default = null) {
return Str::split($default, ',');

View File

@@ -3,7 +3,7 @@
return [
'props' => [
/**
* Default date when a new Page/File/User gets created
* Default date when a new page/file/user gets created
*/
'default' => function ($default = null) {
return $default;
@@ -39,7 +39,7 @@ return [
*/
'placeholder' => null,
/**
* Pass true or an array of time field options to show the time selector.
* Pass `true` or an array of time field options to show the time selector.
*/
'time' => function ($time = false) {
return $time;

View File

@@ -43,7 +43,7 @@ return [
},
/**
* Changes the layout of the selected files. Available layouts: list, cards
* Changes the layout of the selected files. Available layouts: `list`, `cards`
*/
'layout' => function (string $layout = 'list') {
return $layout;
@@ -78,7 +78,7 @@ return [
},
/**
* Layout size for cards
* Layout size for cards: `tiny`, `small`, `medium`, `large` or `huge`
*/
'size' => function (string $size = null) {
return $size;

View File

@@ -18,7 +18,7 @@ return [
'translate' => null,
/**
* If false, the prepended number will be hidden
* If `false`, the prepended number will be hidden
*/
'numbered' => function (bool $numbered = true) {
return $numbered;

View File

@@ -4,6 +4,9 @@ use Kirby\Toolkit\I18n;
return [
'props' => [
/**
* Text to be displayed
*/
'text' => function ($value = null) {
return I18n::translate($value, $value);
},

View File

@@ -5,7 +5,7 @@ use Kirby\Form\Options;
return [
'props' => [
/**
* API settings for options requests. This will only take affect when <code>options</code> is set to <code>api</code>.
* API settings for options requests. This will only take affect when `options` is set to `api`.
*/
'api' => function ($api = null) {
return $api;
@@ -17,7 +17,7 @@ return [
return $options;
},
/**
* Query settings for options queries. This will only take affect when <code>options</code> is set to <code>query</code>.
* Query settings for options queries. This will only take affect when `options` is set to `query`.
*/
'query' => function ($query = null) {
return $query;

View File

@@ -22,7 +22,7 @@ return [
return $search;
},
/**
* If true, selected entries will be sorted
* If `true`, selected entries will be sorted
* according to their position in the dropdown
*/
'sort' => function (bool $sort = false) {

View File

@@ -3,7 +3,7 @@
return [
'props' => [
/**
* Default number that will be saved when a new Page/User/File is created
* Default number that will be saved when a new page/user/file is created
*/
'default' => function ($default = null) {
return $this->toNumber($default);
@@ -21,7 +21,7 @@ return [
return $max;
},
/**
* Allowed incremental steps between numbers (i.e 0.5)
* Allowed incremental steps between numbers (i.e `0.5`)
*/
'step' => function ($step = 1) {
return $this->toNumber($step);

View File

@@ -16,7 +16,7 @@ return [
'placeholder' => null,
/**
* Default selected page(s) when a new Page/File/User is created
* Default selected page(s) when a new page/file/user is created
*/
'default' => function ($default = null) {
return $this->toPages($default);
@@ -44,7 +44,7 @@ return [
},
/**
* Changes the layout of the selected files. Available layouts: list, cards
* Changes the layout of the selected files. Available layouts: `list`, `cards`
*/
'layout' => function (string $layout = 'list') {
return $layout;
@@ -65,7 +65,7 @@ return [
},
/**
* If false, only a single page can be selected
* If `false`, only a single page can be selected
*/
'multiple' => function (bool $multiple = true) {
return $multiple;
@@ -79,7 +79,7 @@ return [
},
/**
* Layout size for cards
* Layout size for cards: `tiny`, `small`, `medium`, `large` or `huge`
*/
'size' => function (string $size = null) {
return $size;

View File

@@ -68,7 +68,7 @@ return [
return $sortable;
},
/**
* Sorts the entries by the given field and order (i.e. title desc)
* Sorts the entries by the given field and order (i.e. `title desc`)
* Drag & drop is disabled in this case
*/
'sortBy' => function (string $sort = null) {

View File

@@ -12,7 +12,7 @@ return [
'placeholder' => null,
/**
* If set to <code>all</code>, any type of input is accepted. If set to <code>options</code> only the predefined options are accepted as input.
* If set to `all`, any type of input is accepted. If set to `options` only the predefined options are accepted as input.
*/
'accept' => function ($value = 'all') {
return V::in($value, ['all', 'options']) ? $value : 'all';
@@ -75,7 +75,7 @@ return [
'value' => $option,
'text' => $option,
];
}, Str::split($value));
}, Str::split($value, $this->separator()));
}
],
'save' => function (array $value = null): string {

View File

@@ -8,7 +8,7 @@ return [
'props' => [
/**
* The field value will be converted with the selected converter before the value gets saved. Available converters: lower, upper, ucfirst, slug
* The field value will be converted with the selected converter before the value gets saved. Available converters: `lower`, `upper`, `ucfirst`, `slug`
*/
'converter' => function ($value = null) {
if ($value !== null && in_array($value, array_keys($this->converters())) === false) {
@@ -50,7 +50,7 @@ return [
},
/**
* If false, spellcheck will be switched off
* If `false`, spellcheck will be switched off
*/
'spellcheck' => function (bool $spellcheck = false) {
return $spellcheck;

View File

@@ -9,7 +9,7 @@ return [
'before' => null,
/**
* Enables/disables the format buttons. Can either be true/false or a list of allowed buttons. Available buttons: headlines, italic, bold, link, email, file, list, code, ul, ol
* Enables/disables the format buttons. Can either be `true`/`false` or a list of allowed buttons. Available buttons: `headlines`, `italic`, `bold`, `link`, `email`, `file`, `list`, `code`, `ul`, `ol` (as well as `|` for a divider)
*/
'buttons' => function ($buttons = true) {
return $buttons;
@@ -23,7 +23,7 @@ return [
},
/**
* Sets the default text when a new Page/File/User is created
* Sets the default text when a new page/file/user is created
*/
'default' => function (string $default = null) {
return trim($default);
@@ -59,7 +59,7 @@ return [
},
/**
* Changes the size of the textarea. Available sizes: small, medium, large, huge
* Changes the size of the textarea. Available sizes: `small`, `medium`, `large`, `huge`
*/
'size' => function (string $size = null) {
return $size;

View File

@@ -8,7 +8,7 @@ return [
'placeholder' => null,
/**
* Sets the default time when a new Page/File/User is created
* Sets the default time when a new page/file/user is created
*/
'default' => function ($default = null) {
return $default;
@@ -20,7 +20,7 @@ return [
return $icon;
},
/**
* 12 or 24 hour notation. If 12, an AM/PM selector will be shown.
* `12` or `24` hour notation. If `12`, an AM/PM selector will be shown.
*/
'notation' => function (int $value = 24) {
return $value === 24 ? 24 : 12;

View File

@@ -10,7 +10,7 @@ return [
'placeholder' => null,
/**
* Default value which will be saved when a new Page/User/File is created
* Default value which will be saved when a new page/user/file is created
*/
'default' => function ($value = null) {
return $this->toBool($value);

View File

@@ -1,7 +1,7 @@
<?php
return [
'mixins' => ['min'],
'mixins' => ['min', 'selector'],
'props' => [
/**
* Unset inherited props
@@ -13,7 +13,7 @@ return [
'placeholder' => null,
/**
* Default selected user(s) when a new Page/File/User is created
* Default selected user(s) when a new page/file/user is created
*/
'default' => function ($default = null) {
if ($default === false) {
@@ -28,30 +28,35 @@ return [
return $this->toUsers($default);
},
/**
* The placeholder text if no users have been selected yet
/**
* The placeholder text if none have been selected yet
*/
'empty' => function ($empty = null) {
return I18n::translate($empty, $empty);
},
/**
* The minimum number of required selected users
* The minimum number of required selected
*/
'min' => function (int $min = null) {
return $min;
},
/**
* The maximum number of allowed selected users
* The maximum number of allowed selected
*/
'max' => function (int $max = null) {
return $max;
},
/**
* If false, only a single user can be selected
* If `false`, only a single one can be selected
*/
'multiple' => function (bool $multiple = true) {
return $multiple;
},
'value' => function ($value = null) {
return $this->toUsers($value);
},

View File

@@ -29,7 +29,7 @@ return [
return $info;
},
/**
* The size option controls the size of cards. By default cards are auto-sized and the cards grid will always fill the full width. With a size you can disable auto-sizing. Available sizes: tiny, small, medium, large
* The size option controls the size of cards. By default cards are auto-sized and the cards grid will always fill the full width. With a size you can disable auto-sizing. Available sizes: `tiny`, `small`, `medium`, `large`, `huge`
*/
'size' => function (string $size = 'auto') {
return $size;
@@ -41,7 +41,7 @@ return [
return $sortable;
},
/**
* Overwrites manual sorting and sorts by the given field and sorting direction (i.e. filename desc)
* Overwrites manual sorting and sorts by the given field and sorting direction (i.e. `filename desc`)
*/
'sortBy' => function (string $sortBy = null) {
return $sortBy;

View File

@@ -3,7 +3,7 @@
return [
'props' => [
/**
* Section layout. Available layout methods: list, cards.
* Section layout. Available layout methods: `list`, `cards`.
*/
'layout' => function (string $layout = 'list') {
return $layout === 'cards' ? 'cards' : 'list';

View File

@@ -37,7 +37,7 @@ return [
return $info;
},
/**
* The size option controls the size of cards. By default cards are auto-sized and the cards grid will always fill the full width. With a size you can disable auto-sizing. Available sizes: tiny, small, medium, large
* The size option controls the size of cards. By default cards are auto-sized and the cards grid will always fill the full width. With a size you can disable auto-sizing. Available sizes: `tiny`, `small`, `medium`, `large`, `huge`
*/
'size' => function (string $size = 'auto') {
return $size;
@@ -49,13 +49,13 @@ return [
return $sortable;
},
/**
* Overwrites manual sorting and sorts by the given field and sorting direction (i.e. date desc)
* Overwrites manual sorting and sorts by the given field and sorting direction (i.e. `date desc`)
*/
'sortBy' => function (string $sortBy = null) {
return $sortBy;
},
/**
* Filters pages by their status. Available status settings: draft, unlisted, listed, published, all.
* Filters pages by their status. Available status settings: `draft`, `unlisted`, `listed`, `published`, `all`.
*/
'status' => function (string $status = '') {
if ($status === 'drafts') {

View File

@@ -1,6 +1,5 @@
<?php
use Kirby\Cms\App;
use Kirby\Cms\Html;
use Kirby\Cms\Url;
@@ -126,6 +125,11 @@ return [
return $link($image);
}
// render KirbyText in caption
if ($tag->caption) {
$tag->caption = [$tag->kirby()->kirbytext($tag->caption, [], true)];
}
return Html::figure([ $link($image) ], $tag->caption, [
'class' => $tag->class
]);

File diff suppressed because one or more lines are too long

View File

@@ -650,6 +650,11 @@ class App
$text = $this->apply('kirbytext:before', $text);
$text = $this->kirbytags($text, $data);
$text = $this->markdown($text, $inline);
if ($this->option('smartypants', false) !== false) {
$text = $this->smartypants($text);
}
$text = $this->apply('kirbytext:after', $text);
return $text;
@@ -700,7 +705,11 @@ class App
*/
public function languages(): Languages
{
return $this->languages = $this->languages ?? Languages::load();
if ($this->languages !== null) {
return clone $this->languages;
}
return $this->languages = Languages::load();
}
/**
@@ -1122,7 +1131,13 @@ class App
*/
public function smartypants(string $text = null): string
{
return $this->component('smartypants')($this, $text, $this->options['smartypants'] ?? []);
$options = $this->option('smartypants', []);
if ($options === true) {
$options = [];
}
return $this->component('smartypants')($this, $text, $options);
}
/**

View File

@@ -3,6 +3,7 @@
namespace Kirby\Cms;
use Closure;
use Exception;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Toolkit\Collection as BaseCollection;
use Kirby\Toolkit\Str;
@@ -125,8 +126,12 @@ class Collection extends BaseCollection
* @param bool $i (ignore upper/lowercase for group names)
* @return Collection A collection with an item for each group and a Collection for each group
*/
public function groupBy(string $field, bool $i = true)
public function groupBy($field, bool $i = true)
{
if (is_string($field) === false) {
throw new Exception('Cannot group by non-string values. Did you mean to call group()?');
}
$groups = new Collection([], $this->parent());
foreach ($this->data as $key => $item) {

View File

@@ -67,17 +67,23 @@ class Collections
}
// if not yet cached
if (isset($this->cache[$name]) === false) {
if (
isset($this->cache[$name]) === false ||
$this->cache[$name]['data'] !== $data
) {
$controller = new Controller($this->collections[$name]);
$this->cache[$name] = $controller->call(null, $data);
$this->cache[$name] = [
'result' => $controller->call(null, $data),
'data' => $data
];
}
// return cloned object
if (is_object($this->cache[$name]) === true) {
return clone $this->cache[$name];
if (is_object($this->cache[$name]['result']) === true) {
return clone $this->cache[$name]['result'];
}
return $this->cache[$name];
return $this->cache[$name]['result'];
}
/**

View File

@@ -132,6 +132,11 @@ class Language extends Model
$kirby = App::instance();
$site = $kirby->site();
// convert site
foreach ($site->files() as $file) {
F::move($file->contentFile($from, true), $file->contentFile($to, true));
}
F::move($site->contentFile($from, true), $site->contentFile($to, true));
// convert all pages
@@ -489,7 +494,7 @@ class Language extends Model
*/
public function url(): string
{
return Url::to($this->pattern());
return Url::makeAbsolute($this->pattern(), $this->kirby()->url());
}
/**

View File

@@ -25,7 +25,7 @@ class Nest
foreach ($data as $key => $value) {
if (is_array($value) === true) {
$result[$key] = static::create($value, $parent);
} elseif (is_string($value) === true) {
} elseif (is_scalar($value) === true) {
$result[$key] = new Field($parent, $key, $value);
}
}

View File

@@ -247,9 +247,13 @@ class Page extends ModelWithContent
}
$blueprints = [];
$templates = $this->blueprint()->options()['changeTemplate'] ?? false;
$templates = $this->blueprint()->options()['changeTemplate'] ?? [];
$currentTemplate = $this->intendedTemplate()->name();
if (is_array($templates) === false) {
$templates = [];
}
// add the current template to the array
$templates[] = $currentTemplate;

View File

@@ -133,7 +133,7 @@ class PanelPlugins
*/
public function id(): string
{
return crc32(implode(array_values($this->files())));
return hash('crc32', implode(array_values($this->files())));
}
/**

View File

@@ -101,6 +101,21 @@ class StructureObject extends Model
return $this->id;
}
/**
* Compares the current object with the given structure object
*
* @param mixed $structure
* @return bool
*/
public function is($structure): bool
{
if (is_a($structure, StructureObject::class) === false) {
return false;
}
return $this === $structure;
}
/**
* Returns the parent Model object
*

View File

@@ -372,6 +372,8 @@ class User extends ModelWithContent
* @param string $password
* @param Session|array $session Session options or session object to set the user in
* @return bool
*
* @throws PermissionException If the password is not valid
*/
public function login(string $password, $session = null): bool
{
@@ -783,6 +785,10 @@ class User extends ModelWithContent
*
* @param string $password
* @return boolean
*
* @throws NotFoundException If the user has no password
* @throws InvalidArgumentException If the entered password is not valid
* @throws InvalidArgumentException If the entered password does not match the user password
*/
public function validatePassword(string $password = null): bool
{

View File

@@ -132,7 +132,7 @@ class Collection extends Iterator implements Countable
* @return Collection A new collection with an element for each chunk and
* a sub collection in each chunk
*/
public function chunk(int $size): self
public function chunk(int $size)
{
// create a multidimensional array that is chunked with the given
// chunk size keep keys of the elements
@@ -219,7 +219,7 @@ class Collection extends Iterator implements Countable
* @param Closure $filter
* @return self
*/
public function filter($filter): self
public function filter($filter)
{
if (is_callable($filter) === true) {
$collection = clone $this;
@@ -246,7 +246,7 @@ class Collection extends Iterator implements Countable
* @param string $field
* @return self
*/
public function filterBy(string $field, ...$args): self
public function filterBy(string $field, ...$args)
{
$operator = '==';
$test = $args[0] ?? null;
@@ -405,7 +405,7 @@ class Collection extends Iterator implements Countable
*
* @return Collection
*/
public function flip(): self
public function flip()
{
$collection = clone $this;
$collection->data = array_reverse($this->data, true);
@@ -433,14 +433,19 @@ class Collection extends Iterator implements Countable
* @param array|object $item
* @param string $attribute
* @param boolean $split
* @param mixed $related
* @return mixed
*/
public function getAttribute($item, string $attribute, $split = false)
public function getAttribute($item, string $attribute, $split = false, $related = null)
{
$value = $this->{'getAttributeFrom' . gettype($item)}($item, $attribute);
if ($split !== false) {
$value = Str::split($value, $split === true ? ',' : $split);
return Str::split($value, $split === true ? ',' : $split);
}
if ($related !== null) {
return Str::toType((string)$value, $related);
}
return $value;
@@ -516,7 +521,7 @@ class Collection extends Iterator implements Countable
* @param bool $i
* @return Collection A new collection with an element for each group and a subcollection in each group
*/
public function groupBy(string $field, bool $i = true)
public function groupBy($field, bool $i = true)
{
if (is_string($field) === false) {
throw new Exception('Cannot group by non-string values. Did you mean to call group()?');
@@ -587,7 +592,7 @@ class Collection extends Iterator implements Countable
* @param int $limit The number of elements to return
* @return Collection
*/
public function limit(int $limit): self
public function limit(int $limit)
{
return $this->slice(0, $limit);
}
@@ -598,7 +603,7 @@ class Collection extends Iterator implements Countable
* @param callable $callback
* @return Collection
*/
public function map(callable $callback): self
public function map(callable $callback)
{
$this->data = array_map($callback, $this->data);
return $this;
@@ -625,7 +630,7 @@ class Collection extends Iterator implements Countable
{
$collection = clone $this;
foreach ($keys as $key) {
unset($collection->$key);
unset($collection->data[$key]);
}
return $collection;
}
@@ -636,7 +641,7 @@ class Collection extends Iterator implements Countable
* @param int $offset The index to start from
* @return Collection
*/
public function offset(int $offset): self
public function offset(int $offset)
{
return $this->slice($offset);
}
@@ -798,7 +803,7 @@ class Collection extends Iterator implements Countable
*
* @return Collection
*/
public function shuffle(): self
public function shuffle()
{
$data = $this->data;
$keys = $this->keys();
@@ -821,7 +826,7 @@ class Collection extends Iterator implements Countable
* @param int $limit The optional number of elements to return
* @return Collection
*/
public function slice(int $offset = 0, int $limit = null): self
public function slice(int $offset = 0, int $limit = null)
{
if ($offset === 0 && $limit === null) {
return $this;
@@ -840,7 +845,7 @@ class Collection extends Iterator implements Countable
* @param $method int The sort flag, SORT_REGULAR, SORT_NUMERIC etc.
* @return Collection
*/
public function sortBy(): self
public function sortBy()
{
// there is no need to sort empty collections
if (empty($this->data) === true) {
@@ -983,13 +988,13 @@ class Collection extends Iterator implements Countable
*/
Collection::$filters['=='] = function ($collection, $field, $test, $split = false) {
foreach ($collection->data as $key => $item) {
$value = $collection->getAttribute($item, $field, $split);
$value = $collection->getAttribute($item, $field, $split, $test);
if ($split !== false) {
if (in_array($test, $value) === false) {
unset($collection->data[$key]);
}
} elseif ($value != $test) {
} elseif ($value !== $test) {
unset($collection->data[$key]);
}
}
@@ -1002,13 +1007,13 @@ Collection::$filters['=='] = function ($collection, $field, $test, $split = fals
*/
Collection::$filters['!='] = function ($collection, $field, $test, $split = false) {
foreach ($collection->data as $key => $item) {
$value = $collection->getAttribute($item, $field, $split);
$value = $collection->getAttribute($item, $field, $split, $test);
if ($split !== false) {
if (in_array($test, $value) === true) {
unset($collection->data[$key]);
}
} elseif ($value == $test) {
} elseif ((string)$value == $test) {
unset($collection->data[$key]);
}
}

View File

@@ -54,8 +54,8 @@ class Html
/**
* Generates an a tag
*
* @param string $href The url for the a tag
* @param mixed $text The optional text. If null, the url will be used as text
* @param string $href The url for the `a` tag
* @param mixed $text The optional text. If `null`, the url will be used as text
* @param array $attr Additional attributes for the tag
* @return string the generated html
*/
@@ -64,7 +64,7 @@ class Html
$attr = array_merge(['href' => $href], $attr);
if (empty($text) === true) {
$text = $href;
$text = $attr['href'];
}
if (is_string($text) === true && Str::isUrl($text) === true) {
@@ -160,7 +160,7 @@ class Html
}
/**
* Generates an "a mailto" tag
* Generates an `a` tag with `mailto:`
*
* @param string $email The url for the a tag
* @param mixed $text The optional text. If null, the url will be used as text
@@ -328,7 +328,7 @@ class Html
}
/**
* Add noopeener noreferrer to rels when target is _blank
* Add noopeener noreferrer to rels when target is `_blank`
*
* @param string $rel
* @param string $target
@@ -352,8 +352,8 @@ class Html
/**
* Generates an Html tag with optional content and attributes
*
* @param string $name The name of the tag, i.e. "a"
* @param mixed $content The content if availble. Pass null to generate a self-closing tag, Pass an empty string to generate empty content
* @param string $name The name of the tag, i.e. `a`
* @param mixed $content The content if availble. Pass `null` to generate a self-closing tag, Pass an empty string to generate empty content
* @param array $attr An associative array with additional attributes for the tag
* @return string The generated Html
*/
@@ -383,10 +383,10 @@ class Html
/**
* Generates an a tag for a phone number
* Generates an `a` tag for a phone number
*
* @param string $tel The phone number
* @param mixed $text The optional text. If null, the number will be used as text
* @param mixed $text The optional text. If `null`, the number will be used as text
* @param array $attr Additional attributes for the tag
* @return string the generated html
*/
@@ -404,7 +404,7 @@ class Html
/**
* Creates a video embed via iframe for Youtube or Vimeo
* videos. The embed Urls are automatically detected from
* the given Url.
* the given URL.
*
* @param string $url
* @param array $options

View File

@@ -124,8 +124,9 @@ class Mime
'svg' => [Mime::class, 'fromSvg'],
],
'text/plain' => [
'css' => 'text/css',
'svg' => [Mime::class, 'fromSvg'],
'css' => 'text/css',
'json' => 'application/json',
'svg' => [Mime::class, 'fromSvg'],
],
'text/x-asm' => [
'css' => 'text/css'

View File

@@ -870,6 +870,36 @@ class Str
}, $string);
}
/**
* Convert the string to the given type
*
* @param string $string
* @param mixed $type
* @return mixed
*/
public static function toType($string = null, $type)
{
if (is_string($type) === false) {
$type = gettype($type);
}
switch ($type) {
case 'array':
return (array)$string;
case 'bool':
case 'boolean':
return filter_var($string, FILTER_VALIDATE_BOOLEAN);
case 'double':
case 'float':
return floatval($string);
case 'int':
case 'integer':
return intval($string);
}
return (string)$string;
}
/**
* Safe trim alternative
*

View File

@@ -104,18 +104,18 @@
"error.section.files.max.singular":
"Sekce \"{section}\" může obsahovat nejvýše jeden soubor",
"error.section.files.min.plural":
"The \"{section}\" section requires at least {min} files",
"Sekce \"{section}\" vyžaduje nejméně {min} souborů",
"error.section.files.min.singular":
"The \"{section}\" section requires at least one file",
"Sekce \"{section}\" vyžaduje alespoň jeden soubor",
"error.section.pages.max.plural":
"Sekce \"{section}\" nesmí obsahovat více jak {max} stránek",
"error.section.pages.max.singular":
"Sekce \"{section}\" může obsahovat nejvýše jednu stránku",
"error.section.pages.min.plural":
"The \"{section}\" section requires at least {min} pages",
"Sekce \"{section}\" vyžaduje alespoň {min} stránek",
"error.section.pages.min.singular":
"The \"{section}\" section requires at least one page",
"Sekce \"{section}\" vyžaduje alespoň jednu stránku",
"error.section.notLoaded": "Nelze načíst sekci \"{name}\"",
"error.section.type.invalid": "Typ sekce \"{type}\" není platný",
@@ -324,7 +324,7 @@
"page.status.listed": "Veřejná",
"page.status.listed.description": "Stránka je zveřejněná pro všechny",
"page.status.unlisted": "Neveřejná",
"page.status.unlisted.description": "Tato stránka je dostupná pouze přes adresu URL",
"page.status.unlisted.description": "Tato stránka je dostupná pouze přes URL.",
"pages": "Stránky",
"pages.empty": "Zatím žádné stránky",
@@ -366,8 +366,8 @@
"toolbar.button.heading.3": "Nadpis 3",
"toolbar.button.italic": "Kurz\u00edva",
"toolbar.button.file": "Soubor",
"toolbar.button.file.select": "Select a file",
"toolbar.button.file.upload": "Upload a file",
"toolbar.button.file.select": "Vyberte soubor",
"toolbar.button.file.upload": "Nahrajte soubor",
"toolbar.button.link": "Odkaz",
"toolbar.button.ol": "Řazený seznam",
"toolbar.button.ul": "Odrážkový seznam",

View File

@@ -35,9 +35,9 @@
"error.avatar.create.fail": "Das Profilbild konnte nicht hochgeladen werden",
"error.avatar.delete.fail": "Das Profilbild konnte nicht gel\u00f6scht werden",
"error.avatar.dimensions.invalid":
"Bitte lade ein Profilbild hoch, das nicht größer als 3000 Pixel in der Breite und Höhe ist.",
"Bitte lade ein Profilbild hoch, das nicht breiter oder höher als 3000 Pixel ist.",
"error.avatar.mime.forbidden":
"Verbotener Medientyp",
"Das Profilbild muss vom Format JPEG oder PNG sein",
"error.blueprint.notFound": "Das Blueprint \"{name}\" konnte nicht geladen werden.",
@@ -46,7 +46,7 @@
"error.field.converter.invalid": "Ungültiger Konverter: \"{converter}\"",
"error.file.changeName.permission":
"Du kannst den Dateinamen von \"{filename}\" nicht ändern",
"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}\"",
@@ -66,7 +66,7 @@
"error.form.notSaved": "Das Formular konnte nicht gespeichert werden",
"error.page.changeSlug.permission":
"Du kannst die URL der Seite \"{slug}\" nicht ändern",
"Du darfst die URL der Seite \"{slug}\" nicht ändern",
"error.page.changeStatus.incomplete":
"Die Seite ist nicht vollständig und kann daher nicht veröffentlicht werden",
"error.page.changeStatus.permission":
@@ -122,7 +122,7 @@
"error.site.changeTitle.permission":
"Du kannst den Titel der Seite nicht ändern",
"error.site.update.permission": "Du kannst die Seite nicht editieren",
"error.site.update.permission": "Du darfst die Seite nicht editieren",
"error.template.default.notFound": "Die \"Default\"-Vorlage existiert nicht",
@@ -156,7 +156,7 @@
"error.user.role.invalid": "Bitte gib eine gültige Rolle an",
"error.user.undefined": "Der Benutzer wurde nicht gefunden",
"error.user.update.permission":
"Du kannst den den Benutzer \"{name}\" nicht editieren",
"Du darfst den den Benutzer \"{name}\" nicht editieren",
"error.validation.accepted": "Bitte bestätige",
"error.validation.alpha": "Bitte gib nur Zeichen zwischen A und Z ein",
@@ -218,11 +218,11 @@
"installation": "Installation",
"installation.completed": "Das Panel wurde installiert",
"installation.disabled": "Die Panel Installation ist auf öffentlichen Servern automatisch deaktiviert. Bitte installiere das Panel auf einem lokalen Server oder aktiviere die Installation gezielt mit der <code>panel.install</code> Option. ",
"installation.disabled": "Die Panel-Installation ist auf öffentlichen Servern automatisch deaktiviert. Bitte installiere das Panel auf einem lokalen Server oder aktiviere die Installation gezielt mit der <code>panel.install</code> Option. ",
"installation.issues.accounts":
"<code>/site/accounts</code> ist nicht beschreibbar",
"installation.issues.content":
"<code>/content</code> und alle Inhalte müssen beschreibbar sein",
"<code>/content</code> existiert nicht oder ist nicht beschreibbar",
"installation.issues.curl": "Die <code>CURL</code> Erweiterung wird benötigt",
"installation.issues.headline": "Das Panel kann nicht installiert werden",
"installation.issues.mbstring":
@@ -232,7 +232,7 @@
"installation.issues.php": "Bitte verwende <code>PHP 7+</code>",
"installation.issues.server":
"Kirby benötigt <code>Apache</code>, <code>Nginx</code> or <code>Caddy</code>",
"installation.issues.sessions": "Der <code>/site/sessions</code> Ordner ist nicht beschreibbar",
"installation.issues.sessions": "<code>/site/sessions</code> ist nicht beschreibbar",
"language": "Sprache",
"language.code": "Code",
@@ -260,7 +260,7 @@
"license.buy": "Kaufe eine Lizenz",
"license.register": "Registrieren",
"license.register.help":
"Der Lizenzcode steht in deiner Kaufbestätigungsmail. Bitte kopiere ihn und füge ihn ein, um Kirby zu registrieren.",
"Den Lizenzcode findest du in der Bestätigungsmai zu deinem Kauf. Bitte kopiere und füge ihn ein, um Kirby zu registrieren.",
"license.register.label": "Bitte gib deinen Lizenzcode ein",
"license.register.success": "Vielen Dank für deine Unterstützung",
"license.unregistered": "Dies ist eine unregistrierte Kirby-Demo",

View File

@@ -373,7 +373,7 @@
"toolbar.button.ul": "لیست معمولی",
"translation.author": "تیم کربی",
"translation.direction": "ltr",
"translation.direction": "rtl",
"translation.name": "انگلیسی",
"upload": "بارگذاری",

View File

@@ -104,18 +104,18 @@
"error.section.files.max.singular":
"Non puoi aggiungere più di un file alla sezione \"{section}\"",
"error.section.files.min.plural":
"The \"{section}\" section requires at least {min} files",
"La sezione \"{section}\" richiede almeno {min} file",
"error.section.files.min.singular":
"The \"{section}\" section requires at least one file",
"La sezione \"{section}\" richiede almeno un file",
"error.section.pages.max.plural":
"Non puoi aggiungere più di {max} pagine alla sezione \"{section}\"",
"error.section.pages.max.singular":
"Non puoi aggiungere più di una pagina alla sezione \"{section}\"",
"error.section.pages.min.plural":
"The \"{section}\" section requires at least {min} pages",
"La sezione \"{section}\" richiede almeno {min} pagine",
"error.section.pages.min.singular":
"The \"{section}\" section requires at least one page",
"La sezione \"{section}\" richiede almeno una pagina",
"error.section.notLoaded": "Non è stato possibile caricare la sezione \"{name}\"",
"error.section.type.invalid": "Il tipo di sezione \"{type}\" non è valido",
@@ -366,8 +366,8 @@
"toolbar.button.heading.3": "Titolo 3",
"toolbar.button.italic": "Corsivo",
"toolbar.button.file": "File",
"toolbar.button.file.select": "Select a file",
"toolbar.button.file.upload": "Upload a file",
"toolbar.button.file.select": "Seleziona un file",
"toolbar.button.file.upload": "Carica un file",
"toolbar.button.link": "Link",
"toolbar.button.ol": "Elenco numerato",
"toolbar.button.ul": "Elenco puntato",

View File

@@ -68,6 +68,7 @@ return array(
'Kirby\\Cms\\Pages' => $baseDir . '/src/Cms/Pages.php',
'Kirby\\Cms\\Pagination' => $baseDir . '/src/Cms/Pagination.php',
'Kirby\\Cms\\Panel' => $baseDir . '/src/Cms/Panel.php',
'Kirby\\Cms\\PanelPlugins' => $baseDir . '/src/Cms/PanelPlugins.php',
'Kirby\\Cms\\Permissions' => $baseDir . '/src/Cms/Permissions.php',
'Kirby\\Cms\\Plugin' => $baseDir . '/src/Cms/Plugin.php',
'Kirby\\Cms\\PluginAssets' => $baseDir . '/src/Cms/PluginAssets.php',

View File

@@ -158,6 +158,7 @@ class ComposerStaticInit12091bebabd81c9aba88b2aeec22c8d7
'Kirby\\Cms\\Pages' => __DIR__ . '/../..' . '/src/Cms/Pages.php',
'Kirby\\Cms\\Pagination' => __DIR__ . '/../..' . '/src/Cms/Pagination.php',
'Kirby\\Cms\\Panel' => __DIR__ . '/../..' . '/src/Cms/Panel.php',
'Kirby\\Cms\\PanelPlugins' => __DIR__ . '/../..' . '/src/Cms/PanelPlugins.php',
'Kirby\\Cms\\Permissions' => __DIR__ . '/../..' . '/src/Cms/Permissions.php',
'Kirby\\Cms\\Plugin' => __DIR__ . '/../..' . '/src/Cms/Plugin.php',
'Kirby\\Cms\\PluginAssets' => __DIR__ . '/../..' . '/src/Cms/PluginAssets.php',