Upgrade to 3.3.0

This commit is contained in:
Bastian Allgeier
2019-11-05 09:35:58 +01:00
parent 447a9dd266
commit a431716732
186 changed files with 3068 additions and 1458 deletions

View File

@@ -44,9 +44,9 @@ return PhpCsFixer\Config::create()
'no_useless_return' => true, 'no_useless_return' => true,
'ordered_imports' => ['sort_algorithm' => 'alpha'], 'ordered_imports' => ['sort_algorithm' => 'alpha'],
// 'phpdoc_add_missing_param_annotation' => ['only_untyped' => false], // adds params in the wrong order // 'phpdoc_add_missing_param_annotation' => ['only_untyped' => false], // adds params in the wrong order
// 'phpdoc_align' => ['align' => 'vertical'], // added in a second step 'phpdoc_align' => ['align' => 'left'],
'phpdoc_indent' => true, 'phpdoc_indent' => true,
// 'phpdoc_scalar' => true, // added in a second step 'phpdoc_scalar' => true,
'phpdoc_trim' => true, 'phpdoc_trim' => true,
'short_scalar_cast' => true, 'short_scalar_cast' => true,
'single_line_comment_style' => true, 'single_line_comment_style' => true,

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.5", "version": "3.3.0",
"license": "proprietary", "license": "proprietary",
"keywords": ["kirby", "cms", "core"], "keywords": ["kirby", "cms", "core"],
"homepage": "https://getkirby.com", "homepage": "https://getkirby.com",
@@ -40,7 +40,7 @@
} }
}, },
"scripts": { "scripts": {
"analyze": "phpstan analyse src", "analyze": "phpstan analyse",
"test": "phpunit --stderr --coverage-html=tests/coverage", "test": "phpunit --stderr --coverage-html=tests/coverage",
"zip": "composer archive --format=zip --file=dist", "zip": "composer archive --format=zip --file=dist",
"build": "./scripts/build", "build": "./scripts/build",

26
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", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "ed043f76d01c39662efae54a2c917b0a", "content-hash": "b6f220540a714bd27218b0fea5f2aad6",
"packages": [ "packages": [
{ {
"name": "claviska/simpleimage", "name": "claviska/simpleimage",
@@ -366,16 +366,16 @@
}, },
{ {
"name": "psr/log", "name": "psr/log",
"version": "1.1.0", "version": "1.1.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-fig/log.git", "url": "https://github.com/php-fig/log.git",
"reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
"reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -384,7 +384,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.0.x-dev" "dev-master": "1.1.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -409,20 +409,20 @@
"psr", "psr",
"psr-3" "psr-3"
], ],
"time": "2018-11-20T15:27:04+00:00" "time": "2019-11-01T11:05:21+00:00"
}, },
{ {
"name": "symfony/polyfill-mbstring", "name": "symfony/polyfill-mbstring",
"version": "v1.11.0", "version": "v1.12.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git", "url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "fe5e94c604826c35a32fa832f35bd036b6799609" "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17",
"reference": "fe5e94c604826c35a32fa832f35bd036b6799609", "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -434,7 +434,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.11-dev" "dev-master": "1.12-dev"
} }
}, },
"autoload": { "autoload": {
@@ -468,7 +468,7 @@
"portable", "portable",
"shim" "shim"
], ],
"time": "2019-02-06T07:57:58+00:00" "time": "2019-08-06T08:03:45+00:00"
}, },
{ {
"name": "true/punycode", "name": "true/punycode",

View File

@@ -32,6 +32,9 @@ return [
'database' => 'Kirby\Database\Database', 'database' => 'Kirby\Database\Database',
'db' => 'Kirby\Database\Db', 'db' => 'Kirby\Database\Db',
// exceptions
'errorpageexception' => 'Kirby\Exception\ErrorPageException',
// http classes // http classes
'cookie' => 'Kirby\Http\Cookie', 'cookie' => 'Kirby\Http\Cookie',
'header' => 'Kirby\Http\Header', 'header' => 'Kirby\Http\Header',

View File

@@ -7,7 +7,7 @@ return function () {
// csrf token check // csrf token check
if ($auth->type() === 'session' && $auth->csrf() === false) { if ($auth->type() === 'session' && $auth->csrf() === false) {
throw new PermissionException('Unauthenticated', 403); throw new PermissionException('Unauthenticated');
} }
// get user from session or basic auth // get user from session or basic auth
@@ -19,5 +19,5 @@ return function () {
return $user; return $user;
} }
throw new PermissionException('Unauthenticated', 403); throw new PermissionException('Unauthenticated');
}; };

View File

@@ -27,8 +27,7 @@ return [
*/ */
'languages' => [ 'languages' => [
'model' => 'language', 'model' => 'language',
'type' => 'Kirby\Cms\Languages', 'type' => 'Kirby\Cms\Languages'
'view' => 'compact'
], ],
/** /**

View File

@@ -48,13 +48,16 @@ return [
return $file->next(); return $file->next();
}, },
'nextWithTemplate' => function (File $file) { 'nextWithTemplate' => function (File $file) {
$files = $file->templateSiblings()->sortBy('sort', 'asc'); $files = $file->templateSiblings()->sortBy('sort', 'asc', 'filename', 'asc');
$index = $files->indexOf($file); $index = $files->indexOf($file);
return $files->nth($index + 1); return $files->nth($index + 1);
}, },
'niceSize' => function (File $file) {
return $file->niceSize();
},
'options' => function (File $file) { 'options' => function (File $file) {
return $file->permissions()->toArray(); return $file->panelOptions();
}, },
'panelIcon' => function (File $file) { 'panelIcon' => function (File $file) {
return $file->panelIcon(); return $file->panelIcon();
@@ -69,32 +72,23 @@ return [
return $file->prev(); return $file->prev();
}, },
'prevWithTemplate' => function (File $file) { 'prevWithTemplate' => function (File $file) {
$files = $file->templateSiblings()->sortBy('sort', 'asc'); $files = $file->templateSiblings()->sortBy('sort', 'asc', 'filename', 'asc');
$index = $files->indexOf($file); $index = $files->indexOf($file);
return $files->nth($index - 1); return $files->nth($index - 1);
}, },
'niceSize' => function (File $file) {
return $file->niceSize();
},
'panelIcon' => function (File $file) {
return $file->panelIcon();
},
'panelImage' => function (File $file) {
return $file->panelImage();
},
'parent' => function (File $file) { 'parent' => function (File $file) {
return $file->parent(); return $file->parent();
}, },
'parents' => function (File $file) { 'parents' => function (File $file) {
return $file->parents()->flip(); return $file->parents()->flip();
}, },
'template' => function (File $file) {
return $file->template();
},
'size' => function (File $file) { 'size' => function (File $file) {
return $file->size(); return $file->size();
}, },
'template' => function (File $file) {
return $file->template();
},
'thumbs' => function ($file) { 'thumbs' => function ($file) {
if ($file->isResizable() === false) { if ($file->isResizable() === false) {
return null; return null;

View File

@@ -31,12 +31,14 @@ return [
], ],
'type' => 'Kirby\Cms\Language', 'type' => 'Kirby\Cms\Language',
'views' => [ 'views' => [
'compact' => [ 'default' => [
'code', 'code',
'default', 'default',
'direction',
'locale',
'name', 'name',
'rules', 'rules',
'direction' 'url'
] ]
] ]
]; ];

View File

@@ -27,7 +27,7 @@ return [
return $page->errors(); return $page->errors();
}, },
'files' => function (Page $page) { 'files' => function (Page $page) {
return $page->files()->sortBy('sort', 'asc'); return $page->files()->sortBy('sort', 'asc', 'filename', 'asc');
}, },
'hasChildren' => function (Page $page) { 'hasChildren' => function (Page $page) {
return $page->hasChildren(); return $page->hasChildren();
@@ -56,7 +56,7 @@ return [
return $page->num(); return $page->num();
}, },
'options' => function (Page $page) { 'options' => function (Page $page) {
return $page->permissions()->toArray(); return $page->panelOptions(['preview']);
}, },
'panelIcon' => function (Page $page) { 'panelIcon' => function (Page $page) {
return $page->panelIcon(); return $page->panelIcon();

View File

@@ -24,7 +24,7 @@ return [
return $site->drafts(); return $site->drafts();
}, },
'files' => function (Site $site) { 'files' => function (Site $site) {
return $site->files()->sortBy('sort', 'asc'); return $site->files()->sortBy('sort', 'asc', 'filename', 'asc');
}, },
'options' => function (Site $site) { 'options' => function (Site $site) {
return $site->permissions()->toArray(); return $site->permissions()->toArray();

View File

@@ -98,7 +98,7 @@ return [
'isInstalled', 'isInstalled',
'isLocal', 'isLocal',
'kirbytext', 'kirbytext',
'languages' => 'compact', 'languages',
'license', 'license',
'multilang', 'multilang',
'requirements', 'requirements',

View File

@@ -24,7 +24,7 @@ return [
return $user->email(); return $user->email();
}, },
'files' => function (User $user) { 'files' => function (User $user) {
return $user->files()->sortBy('sort', 'asc'); return $user->files()->sortBy('sort', 'asc', 'filename', 'asc');
}, },
'id' => function (User $user) { 'id' => function (User $user) {
return $user->id(); return $user->id();
@@ -39,7 +39,7 @@ return [
return $user->next(); return $user->next();
}, },
'options' => function (User $user) { 'options' => function (User $user) {
return $user->permissions()->toArray(); return $user->panelOptions();
}, },
'permissions' => function (User $user) { 'permissions' => function (User $user) {
return $user->role()->permissions()->toArray(); return $user->role()->permissions()->toArray();

View File

@@ -27,7 +27,7 @@ return [
'pattern' => '(:all)/files', 'pattern' => '(:all)/files',
'method' => 'GET', 'method' => 'GET',
'action' => function (string $path) { 'action' => function (string $path) {
return $this->parent($path)->files()->sortBy('sort', 'asc'); return $this->parent($path)->files()->sortBy('sort', 'asc', 'filename', 'asc');
} }
], ],
[ [

View File

@@ -6,6 +6,7 @@ use Kirby\Cms\Filename;
use Kirby\Cms\FileVersion; use Kirby\Cms\FileVersion;
use Kirby\Cms\Template; use Kirby\Cms\Template;
use Kirby\Data\Data; use Kirby\Data\Data;
use Kirby\Http\Server;
use Kirby\Image\Darkroom; use Kirby\Image\Darkroom;
use Kirby\Text\Markdown; use Kirby\Text\Markdown;
use Kirby\Text\SmartyPants; use Kirby\Text\SmartyPants;
@@ -26,6 +27,30 @@ return [
return $url; return $url;
}, },
/**
* Object and variable dumper
* to help with debugging.
*
* @param \Kirby\Cms\App $kirby Kirby instance
* @param mixed $variable
* @param bool $echo
* @return string
*/
'dump' => function (App $kirby, $variable, bool $echo = true) {
if (Server::cli() === true) {
$output = print_r($variable, true) . PHP_EOL;
} else {
$output = '<pre>' . print_r($variable, true) . '</pre>';
}
if ($echo === true) {
echo $output;
}
return $output;
},
/** /**
* Modify URLs for file objects * Modify URLs for file objects
* *

View File

@@ -99,10 +99,13 @@ return [
$field = $this->field(); $field = $this->field();
return $field->filepicker([ return $field->filepicker([
'query' => $field->query(), 'image' => $field->image(),
'image' => $field->image(), 'info' => $field->info(),
'info' => $field->info(), 'limit' => $field->limit(),
'text' => $field->text() 'page' => $this->requestQuery('page'),
'query' => $field->query(),
'search' => $this->requestQuery('search'),
'text' => $field->text()
]); ]);
} }
], ],

View File

@@ -15,7 +15,8 @@ return [
'text' => function () { 'text' => function () {
if ($text = $this->text) { if ($text = $this->text) {
$text = $this->model()->toString($text); $text = $this->model()->toString($text);
return kirbytext($text); $text = $this->kirby()->kirbytext($text);
return $text;
} }
} }
], ],

View File

@@ -1,40 +1,14 @@
<?php <?php
use Kirby\Cms\FilePicker;
return [ return [
'methods' => [ 'methods' => [
'filepicker' => function (array $params = []) { 'filepicker' => function (array $params = []) {
// fetch the parent model // fetch the parent model
$model = $this->model(); $params['model'] = $this->model();
// find the right default query return (new FilePicker($params))->toArray();
if (empty($params['query']) === false) {
$query = $params['query'];
} elseif (is_a($model, 'Kirby\Cms\File') === true) {
$query = 'file.siblings';
} else {
$query = $model::CLASS_ALIAS . '.files';
}
// fetch all files for the picker
$files = $model->query($query, 'Kirby\Cms\Files');
$data = [];
// prepare the response for each file
foreach ($files as $index => $file) {
if (empty($params['map']) === false) {
$data[] = $params['map']($file);
} else {
$data[] = $file->panelPickerData([
'image' => $params['image'] ?? [],
'info' => $params['info'] ?? false,
'model' => $model,
'text' => $params['text'] ?? '{{ file.filename }}',
]);
}
}
return $data;
} }
] ]
]; ];

View File

@@ -1,49 +1,14 @@
<?php <?php
use Kirby\Cms\PagePicker;
return [ return [
'methods' => [ 'methods' => [
'pagepicker' => function (array $params = []) { 'pagepicker' => function (array $params = []) {
$query = $params['query'] ?? null; // inject the current model
$model = $this->model(); $params['model'] = $this->model();
$site = $this->kirby()->site();
if ($query) { return (new PagePicker($params))->toArray();
$pages = $model->query($query, 'Kirby\Cms\Pages');
$self = null;
} else {
if (!$parent = $site->find($params['parent'] ?? null)) {
$parent = $site;
}
$pages = $parent->children();
$self = [
'id' => $parent->id() == '' ? null : $parent->id(),
'title' => $parent->title()->value(),
'parent' => is_a($parent->parent(), 'Kirby\Cms\Page') === true ? $parent->parent()->id() : null,
];
}
$children = [];
foreach ($pages as $index => $page) {
if ($page->isReadable() === true) {
if (empty($params['map']) === false) {
$children[] = $params['map']($page);
} else {
$children[] = $page->panelPickerData([
'image' => $params['image'] ?? [],
'info' => $params['info'] ?? false,
'model' => $model,
'text' => $params['text'] ?? null,
]);
}
}
}
return [
'model' => $self,
'pages' => $children
];
} }
] ]
]; ];

View File

@@ -53,6 +53,13 @@ return [
return $query; return $query;
}, },
/**
* Enable/disable the search field in the picker
*/
'search' => function (bool $search = true) {
return $search;
},
/** /**
* Main text for each item * Main text for each item
*/ */

View File

@@ -1,44 +1,13 @@
<?php <?php
use Kirby\Cms\UserPicker;
return [ return [
'methods' => [ 'methods' => [
'userpicker' => function (array $params = []) { 'userpicker' => function (array $params = []) {
$params['model'] = $this->model();
// fetch the parent model return (new UserPicker($params))->toArray();
$model = $this->model();
// find the right default query
if (empty($params['query']) === false) {
$query = $params['query'];
} elseif (is_a($model, 'Kirby\Cms\User') === true) {
$query = 'user.siblings';
} else {
$query = 'kirby.users';
}
// fetch all users for the picker
$users = $model->query($query, 'Kirby\Cms\Users');
$data = [];
if (!$users) {
return [];
}
// prepare the response for each user
foreach ($users->sortBy('username', 'asc') as $index => $user) {
if (empty($params['map']) === false) {
$data[] = $params['map']($user);
} else {
$data[] = $user->panelPickerData([
'image' => $params['image'] ?? [],
'info' => $params['info'] ?? false,
'model' => $model,
'text' => $params['text'] ?? '{{ user.username }}',
]);
}
}
return $data;
} }
] ]
]; ];

View File

@@ -43,6 +43,13 @@ return [
return $size; return $size;
}, },
/**
* Optionally include subpages of pages
*/
'subpages' => function (bool $subpages = true) {
return $subpages;
},
'value' => function ($value = null) { 'value' => function ($value = null) {
return $this->toPages($value); return $this->toPages($value);
}, },
@@ -86,11 +93,15 @@ return [
$field = $this->field(); $field = $this->field();
return $field->pagepicker([ return $field->pagepicker([
'image' => $field->image(), 'image' => $field->image(),
'info' => $field->info(), 'info' => $field->info(),
'parent' => $this->requestQuery('parent'), 'limit' => $field->limit(),
'query' => $field->query(), 'page' => $this->requestQuery('page'),
'text' => $field->text() 'parent' => $this->requestQuery('parent'),
'query' => $field->query(),
'search' => $this->requestQuery('search'),
'subpages' => $field->subpages(),
'text' => $field->text()
]); ]);
} }
] ]

View File

@@ -84,6 +84,10 @@ return [
return $this->rows($this->value); return $this->rows($this->value);
}, },
'fields' => function () { 'fields' => function () {
if (empty($this->fields) === true) {
throw new Exception('Please provide some fields for the structure');
}
return $this->form()->fields()->toArray(); return $this->form()->fields()->toArray();
}, },
'columns' => function () { 'columns' => function () {

View File

@@ -75,17 +75,20 @@ return [
$field = $this->field(); $field = $this->field();
return $field->userpicker([ return $field->userpicker([
'query' => $field->query(), 'image' => $field->image(),
'image' => $field->image(), 'info' => $field->info(),
'info' => $field->info(), 'limit' => $field->limit(),
'text' => $field->text() 'page' => $this->requestQuery('page'),
'query' => $field->query(),
'search' => $this->requestQuery('search'),
'text' => $field->text()
]); ]);
} }
] ]
]; ];
}, },
'save' => function ($value = null) { 'save' => function ($value = null) {
return A::pluck($value, 'email'); return A::pluck($value, 'id');
}, },
'validations' => [ 'validations' => [
'max', 'max',

View File

@@ -5,7 +5,6 @@ use Kirby\Cms\Asset;
use Kirby\Cms\Html; use Kirby\Cms\Html;
use Kirby\Cms\Response; use Kirby\Cms\Response;
use Kirby\Cms\Url; use Kirby\Cms\Url;
use Kirby\Http\Server;
use Kirby\Toolkit\Escape; use Kirby\Toolkit\Escape;
use Kirby\Toolkit\F; use Kirby\Toolkit\F;
use Kirby\Toolkit\I18n; use Kirby\Toolkit\I18n;
@@ -55,7 +54,7 @@ function collection(string $name)
* Checks / returns a CSRF token * Checks / returns a CSRF token
* *
* @param string $check Pass a token here to compare it to the one in the session * @param string $check Pass a token here to compare it to the one in the session
* @return string|boolean Either the token or a boolean check result * @return string|bool Either the token or a boolean check result
*/ */
function csrf(string $check = null) function csrf(string $check = null)
{ {
@@ -89,7 +88,7 @@ function csrf(string $check = null)
* @param string|array $options Pass an array of attributes for the link tag or a media attribute string * @param string|array $options Pass an array of attributes for the link tag or a media attribute string
* @return string|null * @return string|null
*/ */
function css($url, $options = null) function css($url, $options = null): ?string
{ {
if (is_array($url) === true) { if (is_array($url) === true) {
$links = array_map(function ($url) use ($options) { $links = array_map(function ($url) use ($options) {
@@ -121,27 +120,33 @@ function css($url, $options = null)
return '<link ' . attr($attr) . '>'; return '<link ' . attr($attr) . '>';
} }
/**
* Triggers a deprecation warning if debug mode is active
*
* @param string $message
* @return bool Whether the warning was triggered
*/
function deprecated(string $message): bool
{
if (App::instance()->option('debug') === true) {
return trigger_error($message, E_USER_DEPRECATED) === true;
}
return false;
}
/** /**
* Simple object and variable dumper * Simple object and variable dumper
* to help with debugging. * to help with debugging.
* *
* @param mixed $variable * @param mixed $variable
* @param boolean $echo * @param bool $echo
* @return string * @return string
*/ */
function dump($variable, bool $echo = true): string function dump($variable, bool $echo = true): string
{ {
if (Server::cli() === true) { $kirby = App::instance();
$output = print_r($variable, true) . PHP_EOL; return $kirby->component('dump')($kirby, $variable, $echo);
} else {
$output = '<pre>' . print_r($variable, true) . '</pre>';
}
if ($echo === true) {
echo $output;
}
return $output;
} }
/** /**
@@ -159,10 +164,10 @@ function e($condition, $value, $alternative = null)
/** /**
* Escape context specific output * Escape context specific output
* *
* @param string $string Untrusted data * @param string $string Untrusted data
* @param string $context Location of output * @param string $context Location of output
* @param boolean $strict Whether to escape an extended set of characters (HTML attributes only) * @param bool $strict Whether to escape an extended set of characters (HTML attributes only)
* @return string Escaped data * @return string Escaped data
*/ */
function esc($string, $context = 'html', $strict = false) function esc($string, $context = 'html', $strict = false)
{ {
@@ -177,9 +182,9 @@ function esc($string, $context = 'html', $strict = false)
/** /**
* Shortcut for $kirby->request()->get() * Shortcut for $kirby->request()->get()
* *
* @param mixed $key The key to look for. Pass false or null to return the entire request array. * @param mixed $key The key to look for. Pass false or null to return the entire request array.
* @param mixed $default Optional default value, which should be returned if no element has been found * @param mixed $default Optional default value, which should be returned if no element has been found
* @return mixed * @return mixed
*/ */
function get($key = null, $default = null) function get($key = null, $default = null)
{ {
@@ -206,7 +211,7 @@ function gist(string $url, string $file = null): string
* Urls can be relative or absolute. * Urls can be relative or absolute.
* *
* @param string $url * @param string $url
* @param integer $code * @param int $code
* @return void * @return void
*/ */
function go(string $url = null, int $code = 302) function go(string $url = null, int $code = 302)
@@ -348,9 +353,9 @@ function invalid(array $data = [], array $rules = [], array $messages = [])
* *
* @param string|array $url * @param string|array $url
* @param string|array $options * @param string|array $options
* @return void * @return string|null
*/ */
function js($url, $options = null) function js($url, $options = null): ?string
{ {
if (is_array($url) === true) { if (is_array($url) === true) {
$scripts = array_map(function ($url) use ($options) { $scripts = array_map(function ($url) use ($options) {
@@ -589,7 +594,7 @@ function r($condition, $value, $alternative = null)
* by the defined step * by the defined step
* *
* @param string $date * @param string $date
* @param integer $step * @param int $step
* @return string|null * @return string|null
*/ */
function timestamp(string $date = null, int $step = null): ?string function timestamp(string $date = null, int $step = null): ?string
@@ -671,7 +676,7 @@ function smartypants(string $text = null): string
* *
* @param string|array $name * @param string|array $name
* @param array|object $data * @param array|object $data
* @param boolean $return * @param bool $return
* @return string * @return string
*/ */
function snippet($name, $data = [], bool $return = false) function snippet($name, $data = [], bool $return = false)
@@ -693,11 +698,20 @@ function snippet($name, $data = [], bool $return = false)
* Includes an SVG file by absolute or * Includes an SVG file by absolute or
* relative file path. * relative file path.
* *
* @param string $file * @param string|\Kirby\Cms\File $file
* @return string * @return string|false
*/ */
function svg(string $file) function svg($file)
{ {
// support for Kirby's file objects
if (is_a($file, 'Kirby\Cms\File') === true && $file->extension() === 'svg') {
return $file->read();
}
if (is_string($file) === false) {
return false;
}
$extension = F::extension($file); $extension = F::extension($file);
// check for valid svg files // check for valid svg files
@@ -721,9 +735,9 @@ function svg(string $file)
/** /**
* Returns translate string for key from translation file * Returns translate string for key from translation file
* *
* @param string|array $key * @param string|array $key
* @param string|null $fallback * @param string|null $fallback
* @return mixed * @return mixed
*/ */
function t($key, string $fallback = null) function t($key, string $fallback = null)
{ {
@@ -733,9 +747,9 @@ function t($key, string $fallback = null)
/** /**
* Translates a count * Translates a count
* *
* @param string|array $key * @param string|array $key
* @param int $count * @param int $count
* @return mixed * @return mixed
*/ */
function tc($key, int $count) function tc($key, int $count)
{ {
@@ -825,7 +839,7 @@ function video(string $url, array $options = [], array $attr = []): string
*/ */
function vimeo(string $url, array $options = [], array $attr = []): string function vimeo(string $url, array $options = [], array $attr = []): string
{ {
return Html::video($url, $options, $attr); return Html::vimeo($url, $options, $attr);
} }
/** /**
@@ -851,5 +865,5 @@ function widont(string $string = null): string
*/ */
function youtube(string $url, array $options = [], array $attr = []): string function youtube(string $url, array $options = [], array $attr = []): string
{ {
return Html::video($url, $options, $attr); return Html::youtube($url, $options, $attr);
} }

View File

@@ -28,7 +28,7 @@ return function (App $app) {
* Converts the field value into a proper boolean and inverts it * Converts the field value into a proper boolean and inverts it
* *
* @param \Kirby\Cms\Field $field * @param \Kirby\Cms\Field $field
* @return boolean * @return bool
*/ */
'isFalse' => function (Field $field): bool { 'isFalse' => function (Field $field): bool {
return $field->toBool() === false; return $field->toBool() === false;
@@ -38,7 +38,7 @@ return function (App $app) {
* Converts the field value into a proper boolean * Converts the field value into a proper boolean
* *
* @param \Kirby\Cms\Field $field * @param \Kirby\Cms\Field $field
* @return boolean * @return bool
*/ */
'isTrue' => function (Field $field): bool { 'isTrue' => function (Field $field): bool {
return $field->toBool() === true; return $field->toBool() === true;
@@ -49,7 +49,7 @@ return function (App $app) {
* *
* @param string $validator * @param string $validator
* @param mixed ...$arguments A list of optional validator arguments * @param mixed ...$arguments A list of optional validator arguments
* @return boolean * @return bool
*/ */
'isValid' => function (Field $field, string $validator, ...$arguments): bool { 'isValid' => function (Field $field, string $validator, ...$arguments): bool {
return V::$validator($field->value, ...$arguments); return V::$validator($field->value, ...$arguments);
@@ -193,7 +193,7 @@ return function (App $app) {
* @param \Kirby\Cms\Field $field * @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\Page|null * @return \Kirby\Cms\Page|null
*/ */
'toPage' => function (Field $field) use ($app) { 'toPage' => function (Field $field) {
return $field->toPages()->first(); return $field->toPages()->first();
}, },
@@ -254,7 +254,7 @@ return function (App $app) {
* @param \Kirby\Cms\Field $field * @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\User|null * @return \Kirby\Cms\User|null
*/ */
'toUser' => function (Field $field) use ($app) { 'toUser' => function (Field $field) {
return $field->toUsers()->first(); return $field->toUsers()->first();
}, },
@@ -305,7 +305,7 @@ return function (App $app) {
* *
* @param \Kirby\Cms\Field $field * @param \Kirby\Cms\Field $field
* @param int $cahrs * @param int $cahrs
* @param boolean $strip * @param bool $strip
* @param string $rep * @param string $rep
* @return \Kirby\Cms\Field * @return \Kirby\Cms\Field
*/ */
@@ -325,6 +325,17 @@ return function (App $app) {
return $field; return $field;
}, },
/**
* Converts all line breaks in the field content to `<br>` tags.
*
* @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\Field
*/
'nl2br' => function (Field $field) {
$field->value = nl2br($field->value, false);
return $field;
},
/** /**
* Converts the field content from Markdown/Kirbytext to valid HTML * Converts the field content from Markdown/Kirbytext to valid HTML
* *
@@ -372,6 +383,23 @@ return function (App $app) {
return $field; return $field;
}, },
/**
* Strips all block-level HTML elements from the field value,
* it can be safely placed inside of other inline elements
* without the risk of breaking the HTML structure.
*
* @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\Field
*/
'inline' => function (Field $field) {
// List of valid inline elements taken from: https://developer.mozilla.org/de/docs/Web/HTML/Inline_elemente
// Obsolete elements, script tags, image maps and form elements have
// been excluded for safety reasons and as they are most likely not
// needed in most cases.
$field->value = strip_tags($field->value, '<b><i><small><abbr><cite><code><dfn><em><kbd><strong><samp><var><a><bdo><br><img><q><span><sub><sup>');
return $field;
},
/** /**
* Converts the field content to lowercase * Converts the field content to lowercase
* *

View File

@@ -11,18 +11,11 @@ return [
return $roots['kirby'] . '/i18n'; return $roots['kirby'] . '/i18n';
}, },
'i18n:translations' => function (array $roots) { 'i18n:translations' => function (array $roots) {
return $roots['translations']; return $roots['i18n'] . '/translations';
}, },
'i18n:rules' => function (array $roots) { 'i18n:rules' => function (array $roots) {
return $roots['i18n'] . '/rules'; return $roots['i18n'] . '/rules';
}, },
/**
* @deprecated 3.2.0 Use `i18n:translations` instead
* @TODO move logic over to i18n:translations before removing
*/
'translations' => function (array $roots) {
return $roots['i18n'] . '/translations';
},
// index // index
'index' => function (array $roots) { 'index' => function (array $roots) {

View File

@@ -1,12 +1,12 @@
<?php <?php
use Kirby\Cms\LanguageRoutes;
use Kirby\Cms\Media; use Kirby\Cms\Media;
use Kirby\Cms\Panel; use Kirby\Cms\Panel;
use Kirby\Cms\PanelPlugins; use Kirby\Cms\PanelPlugins;
use Kirby\Cms\PluginAssets; use Kirby\Cms\PluginAssets;
use Kirby\Http\Response\Redirect; use Kirby\Http\Response\Redirect;
use Kirby\Http\Router\Route; use Kirby\Http\Router\Route;
use Kirby\Toolkit\F;
use Kirby\Toolkit\Str; use Kirby\Toolkit\Str;
return function ($kirby) { return function ($kirby) {
@@ -63,7 +63,7 @@ return function ($kirby) {
[ [
'pattern' => $media . '/plugins/(:any)/(:any)/(:all).(css|gif|js|jpg|png|svg|webp|woff2|woff)', 'pattern' => $media . '/plugins/(:any)/(:any)/(:all).(css|gif|js|jpg|png|svg|webp|woff2|woff)',
'env' => 'media', 'env' => 'media',
'action' => function (string $provider, string $pluginName, string $filename, string $extension) use ($kirby) { 'action' => function (string $provider, string $pluginName, string $filename, string $extension) {
return PluginAssets::resolve($provider . '/' . $pluginName, $filename . '.' . $extension); return PluginAssets::resolve($provider . '/' . $pluginName, $filename . '.' . $extension);
} }
], ],
@@ -102,7 +102,7 @@ return function ($kirby) {
[ [
'pattern' => $media . '/assets/(:all)/(:any)/(:any)', 'pattern' => $media . '/assets/(:all)/(:any)/(:any)',
'env' => 'media', 'env' => 'media',
'action' => function ($path, $hash, $filename) use ($kirby) { 'action' => function ($path, $hash, $filename) {
return Media::thumb($path, $hash, $filename); return Media::thumb($path, $hash, $filename);
} }
] ]
@@ -110,73 +110,7 @@ return function ($kirby) {
// Multi-language setup // Multi-language setup
if ($kirby->multilang() === true) { if ($kirby->multilang() === true) {
$after = LanguageRoutes::create($kirby);
// Multi-language home
$after[] = [
'pattern' => '',
'method' => 'ALL',
'env' => 'site',
'action' => function () use ($kirby) {
$home = $kirby->site()->homePage();
// language detection on the home page with / as URL
if ($home && $kirby->url() !== $home->url()) {
if ($kirby->option('languages.detect') === true) {
return $kirby
->response()
->redirect($kirby->detectedLanguage()->url());
} else {
return $kirby
->response()
->redirect($kirby->site()->url());
}
// default home page
} else {
return $kirby->defaultLanguage()->router()->call();
}
}
];
foreach ($kirby->languages() as $language) {
$after[] = [
'pattern' => trim($language->pattern() . '/(:all?)', '/'),
'method' => 'ALL',
'env' => 'site',
'action' => function ($path = null) use ($kirby, $language) {
return $language->router()->call($path);
}
];
}
// fallback route for unprefixed default language URLs.
$after[] = [
'pattern' => '(:all)',
'method' => 'ALL',
'env' => 'site',
'action' => function (string $path) use ($kirby) {
// check for content representations or files
$extension = F::extension($path);
// try to redirect prefixed pages
if (empty($extension) === true && $page = $kirby->page($path)) {
$url = $kirby->request()->url([
'query' => null,
'params' => null,
'fragment' => null
]);
if ($url->toString() !== $page->url()) {
return $kirby
->response()
->redirect($page->url());
}
}
return $kirby->defaultLanguage()->router()->call($path);
}
];
} else { } else {
// Single-language home // Single-language home

View File

@@ -15,6 +15,12 @@ return [
'parent', 'parent',
], ],
'props' => [ 'props' => [
/**
* Enables/disables reverse sorting
*/
'flip' => function (bool $flip = false) {
return $flip;
},
/** /**
* Image options to control the source and look of file previews * Image options to control the source and look of file previews
*/ */
@@ -83,6 +89,11 @@ return [
$files = $files->sortBy('sort', 'asc', 'filename', 'asc'); $files = $files->sortBy('sort', 'asc', 'filename', 'asc');
} }
// flip
if ($this->flip === true) {
$files = $files->flip();
}
// apply the default pagination // apply the default pagination
$files = $files->paginate([ $files = $files->paginate([
'page' => $this->page, 'page' => $this->page,
@@ -168,6 +179,10 @@ return [
return false; return false;
} }
if ($this->flip === true) {
return false;
}
return true; return true;
}, },
'upload' => function () { 'upload' => function () {

View File

@@ -19,7 +19,6 @@ return [
if ($this->text) { if ($this->text) {
$text = $this->model()->toString($this->text); $text = $this->model()->toString($this->text);
$text = $this->kirby()->kirbytext($text); $text = $this->kirby()->kirbytext($text);
return $text; return $text;
} }
}, },

View File

@@ -14,7 +14,9 @@ return [
'computed' => [ 'computed' => [
'help' => function () { 'help' => function () {
if ($this->help) { if ($this->help) {
return $this->model()->toString($this->help); $help = $this->model()->toString($this->help);
$help = $this->kirby()->kirbytext($help);
return $help;
} }
} }
] ]

View File

@@ -14,7 +14,7 @@ return [
* Sets the default page for the pagination. This will overwrite default pagination. * Sets the default page for the pagination. This will overwrite default pagination.
*/ */
'page' => function (int $page = null) { 'page' => function (int $page = null) {
return get('page', $page ?? 1); return get('page', $page);
}, },
], ],
'methods' => [ 'methods' => [

View File

@@ -20,7 +20,13 @@ return [
* Optional array of templates that should only be allowed to add. * Optional array of templates that should only be allowed to add.
*/ */
'create' => function ($add = null) { 'create' => function ($add = null) {
return A::wrap($add); return $add;
},
/**
* Enables/disables reverse sorting
*/
'flip' => function (bool $flip = false) {
return $flip;
}, },
/** /**
* Image options to control the source and look of page previews * Image options to control the source and look of page previews
@@ -122,6 +128,11 @@ return [
$pages = $pages->sortBy(...$pages::sortArgs($this->sortBy)); $pages = $pages->sortBy(...$pages::sortArgs($this->sortBy));
} }
// flip
if ($this->flip === true) {
$pages = $pages->flip();
}
// pagination // pagination
$pages = $pages->paginate([ $pages = $pages->paginate([
'page' => $this->page, 'page' => $this->page,
@@ -188,6 +199,10 @@ return [
]; ];
}, },
'add' => function () { 'add' => function () {
if ($this->create === false) {
return false;
}
if (in_array($this->status, ['draft', 'all']) === false) { if (in_array($this->status, ['draft', 'all']) === false) {
return false; return false;
} }
@@ -222,13 +237,17 @@ return [
return false; return false;
} }
if ($this->flip === true) {
return false;
}
return true; return true;
} }
], ],
'methods' => [ 'methods' => [
'blueprints' => function () { 'blueprints' => function () {
$blueprints = []; $blueprints = [];
$templates = empty($this->create) === false ? $this->create : $this->templates; $templates = empty($this->create) === false ? A::wrap($this->create) : $this->templates;
if (empty($templates) === true) { if (empty($templates) === true) {
$templates = $this->kirby()->blueprints(); $templates = $this->kirby()->blueprints();

View File

@@ -98,7 +98,6 @@ return [
'linkclass', 'linkclass',
'rel', 'rel',
'target', 'target',
'text',
'title', 'title',
'width' 'width'
], ],

View File

@@ -23,6 +23,7 @@
"delete": "\u0418\u0437\u0442\u0440\u0438\u0439", "delete": "\u0418\u0437\u0442\u0440\u0438\u0439",
"dimensions": "Размери", "dimensions": "Размери",
"disabled": "Disabled",
"discard": "\u041e\u0442\u043c\u0435\u043d\u0438", "discard": "\u041e\u0442\u043c\u0435\u043d\u0438",
"download": "Download", "download": "Download",
"duplicate": "Duplicate", "duplicate": "Duplicate",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "Секция \"{name}\" не може да бъде заредена", "error.section.notLoaded": "Секция \"{name}\" не може да бъде заредена",
"error.section.type.invalid": "Типът \"{type}\" на секция не е валиден", "error.section.type.invalid": "Типът \"{type}\" на секция не е валиден",
"error.site.changeTitle.empty": "Заглавието е задължително",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Не може да променяте заглавието на сайта", "Не може да променяте заглавието на сайта",
"error.site.update.permission": "Нямате права за да обновите сайта", "error.site.update.permission": "Нямате права за да обновите сайта",
@@ -155,6 +157,8 @@
"Ролята на последния администратор не може да бъде променена", "Ролята на последния администратор не може да бъде променена",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Нямате права да промените ролята на този потребител \"{name}\"", "Нямате права да промените ролята на този потребител \"{name}\"",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.create.permission": "Нямате права да създадете този потребител", "error.user.create.permission": "Нямате права да създадете този потребител",
"error.user.delete": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u0438\u0437\u0442\u0440\u0438\u0442", "error.user.delete": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u0438\u0437\u0442\u0440\u0438\u0442",
"error.user.delete.lastAdmin": "\u041d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0438\u0437\u0442\u0440\u0438\u0435\u0442\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u044f \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440", "error.user.delete.lastAdmin": "\u041d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0438\u0437\u0442\u0440\u0438\u0435\u0442\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u044f \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440",
@@ -219,6 +223,7 @@
"error.validation.time": "Моля въведете валидно време", "error.validation.time": "Моля въведете валидно време",
"error.validation.url": "Моля въведете валиден URL", "error.validation.url": "Моля въведете валиден URL",
"field.required": "The field is required",
"field.files.empty": "Все още не са избрани файлове", "field.files.empty": "Все още не са избрани файлове",
"field.pages.empty": "Все още не са избрани страници", "field.pages.empty": "Все още не са избрани страници",
"field.structure.delete.confirm": "Сигурни ли сте, че искате да изтриете това вписване?", "field.structure.delete.confirm": "Сигурни ли сте, че искате да изтриете това вписване?",
@@ -291,6 +296,7 @@
"loading": "Зареждане", "loading": "Зареждане",
"lock.unsaved": "Unsaved changes", "lock.unsaved": "Unsaved changes",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>", "lock.isLocked": "Unsaved changes by <strong>{email}</strong>",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.", "lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.", "lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Published", "pages.status.listed": "Published",
"pages.status.unlisted": "Скрит", "pages.status.unlisted": "Скрит",
"pagination.page": "Страница",
"password": "\u041f\u0430\u0440\u043e\u043b\u0430", "password": "\u041f\u0430\u0440\u043e\u043b\u0430",
"pixel": "Пиксел", "pixel": "Пиксел",
"prev": "Previous", "prev": "Previous",
@@ -384,6 +392,9 @@
"save": "\u0417\u0430\u043f\u0438\u0448\u0438", "save": "\u0417\u0430\u043f\u0438\u0448\u0438",
"search": "Търси", "search": "Търси",
"section.required": "The section is required",
"select": "Избери", "select": "Избери",
"settings": "Настройки", "settings": "Настройки",
"size": "Размер", "size": "Размер",

View File

@@ -23,6 +23,7 @@
"delete": "Eliminar", "delete": "Eliminar",
"dimensions": "Dimensions", "dimensions": "Dimensions",
"disabled": "Desactivat",
"discard": "Descartar", "discard": "Descartar",
"download": "Descarregar", "download": "Descarregar",
"duplicate": "Duplicar", "duplicate": "Duplicar",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "No s'ha pogut carregar la secció \"{name}\"", "error.section.notLoaded": "No s'ha pogut carregar la secció \"{name}\"",
"error.section.type.invalid": "La secció tipus \"{type}\" no és vàlida", "error.section.type.invalid": "La secció tipus \"{type}\" no és vàlida",
"error.site.changeTitle.empty": "El títol no pot estar buit",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"No tens permís per canviar el títol del lloc web", "No tens permís per canviar el títol del lloc web",
"error.site.update.permission": "No tens permís per actualitzar el lloc web", "error.site.update.permission": "No tens permís per actualitzar el lloc web",
@@ -155,6 +157,8 @@
"El rol del darrer administrador no es pot canviar", "El rol del darrer administrador no es pot canviar",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"No tens permís per canviar el rol de l'usuari \"{name}\"", "No tens permís per canviar el rol de l'usuari \"{name}\"",
"error.user.changeRole.toAdmin":
"No tens permís per promocionar algú al rol dadministrador",
"error.user.create.permission": "No tens permís per crear aquest usuari", "error.user.create.permission": "No tens permís per crear aquest usuari",
"error.user.delete": "L'usuari \"{name}\" no es pot eliminar", "error.user.delete": "L'usuari \"{name}\" no es pot eliminar",
"error.user.delete.lastAdmin": "No es pot eliminar l'\u00faltim administrador", "error.user.delete.lastAdmin": "No es pot eliminar l'\u00faltim administrador",
@@ -219,6 +223,7 @@
"error.validation.time": "Si us plau, introduïu una hora vàlida", "error.validation.time": "Si us plau, introduïu una hora vàlida",
"error.validation.url": "Si us plau, introduïu una URL vàlida", "error.validation.url": "Si us plau, introduïu una URL vàlida",
"field.required": "El camp és obligatori",
"field.files.empty": "Encara no hi ha cap fitxer seleccionat", "field.files.empty": "Encara no hi ha cap fitxer seleccionat",
"field.pages.empty": "Encara no s'ha seleccionat cap pàgina", "field.pages.empty": "Encara no s'ha seleccionat cap pàgina",
"field.structure.delete.confirm": "Segur que voleu eliminar aquesta fila?", "field.structure.delete.confirm": "Segur que voleu eliminar aquesta fila?",
@@ -291,6 +296,7 @@
"loading": "Carregant", "loading": "Carregant",
"lock.unsaved": "Canvis no guardats", "lock.unsaved": "Canvis no guardats",
"lock.unsaved.empty": "Ja no hi ha canvis no guardats",
"lock.isLocked": "Canvis no guardats per <strong>{email}</strong>", "lock.isLocked": "Canvis no guardats per <strong>{email}</strong>",
"lock.file.isLocked": "El fitxer està sent editat actualment per {email} i no pot ser modificat.", "lock.file.isLocked": "El fitxer està sent editat actualment per {email} i no pot ser modificat.",
"lock.page.isLocked": "La pàgina està sent editat actualment per {email} i no pot ser modificat.", "lock.page.isLocked": "La pàgina està sent editat actualment per {email} i no pot ser modificat.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Publicat", "pages.status.listed": "Publicat",
"pages.status.unlisted": "Sense classificar", "pages.status.unlisted": "Sense classificar",
"pagination.page": "Pàgina",
"password": "Contrasenya", "password": "Contrasenya",
"pixel": "Pixel", "pixel": "Pixel",
"prev": "Anterior", "prev": "Anterior",
@@ -384,6 +392,9 @@
"save": "Desar", "save": "Desar",
"search": "Cercar", "search": "Cercar",
"section.required": "La secció és obligatòria",
"select": "Seleccionar", "select": "Seleccionar",
"settings": "Configuració", "settings": "Configuració",
"size": "Tamany", "size": "Tamany",
@@ -418,7 +429,7 @@
"upload.error.default": "No s'ha pogut carregar el fitxer", "upload.error.default": "No s'ha pogut carregar el fitxer",
"upload.error.extension": "La càrrega del fitxer s'ha aturat per l'extensió", "upload.error.extension": "La càrrega del fitxer s'ha aturat per l'extensió",
"upload.error.formSize": "El fitxer carregat supera la directiva MAX_FILE_SIZE especificada en el formulari", "upload.error.formSize": "El fitxer carregat supera la directiva MAX_FILE_SIZE especificada en el formulari",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini", "upload.error.iniPostSize": "El fitxer carregat supera la directiva post_max_size especifiada al php.ini",
"upload.error.iniSize": "El fitxer carregat supera la directiva upload_max_filesize especifiada al php.ini", "upload.error.iniSize": "El fitxer carregat supera la directiva upload_max_filesize especifiada al php.ini",
"upload.error.noFile": "No s'ha carregat cap fitxer", "upload.error.noFile": "No s'ha carregat cap fitxer",
"upload.error.noFiles": "No s'ha penjat cap fitxer", "upload.error.noFiles": "No s'ha penjat cap fitxer",

View File

@@ -23,6 +23,7 @@
"delete": "Smazat", "delete": "Smazat",
"dimensions": "Rozměry", "dimensions": "Rozměry",
"disabled": "Zakázáno",
"discard": "Zahodit", "discard": "Zahodit",
"download": "Stáhnout", "download": "Stáhnout",
"duplicate": "Duplikovat", "duplicate": "Duplikovat",
@@ -37,7 +38,7 @@
"error.access.login": "Neplatné přihlášení", "error.access.login": "Neplatné přihlášení",
"error.access.panel": "Nemáte povoleno vstoupit do panelu", "error.access.panel": "Nemáte povoleno vstoupit do panelu",
"error.access.view": "You are not allowed to access this part of the panel", "error.access.view": "Nejste oprávněni vstoupit do této části panelu.",
"error.avatar.create.fail": "Nebylo možné nahrát profilový obrázek", "error.avatar.create.fail": "Nebylo možné nahrát profilový obrázek",
"error.avatar.delete.fail": "Nebylo mo\u017en\u00e9 smazat profilov\u00fd obr\u00e1zek", "error.avatar.delete.fail": "Nebylo mo\u017en\u00e9 smazat profilov\u00fd obr\u00e1zek",
@@ -52,7 +53,7 @@
"error.field.converter.invalid": "Neplatný konvertor \"{converter}\"", "error.field.converter.invalid": "Neplatný konvertor \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty", "error.file.changeName.empty": "Toto jméno nesmí být prázdné",
"error.file.changeName.permission": "error.file.changeName.permission":
"Nemáte povoleno změnit jméno souboru \"{filename}\"", "Nemáte povoleno změnit jméno souboru \"{filename}\"",
"error.file.duplicate": "Soubor s názvem \"{filename}\" již existuje", "error.file.duplicate": "Soubor s názvem \"{filename}\" již existuje",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "Nelze načíst sekci \"{name}\"", "error.section.notLoaded": "Nelze načíst sekci \"{name}\"",
"error.section.type.invalid": "Typ sekce \"{type}\" není platný", "error.section.type.invalid": "Typ sekce \"{type}\" není platný",
"error.site.changeTitle.empty": "Titulek nesmí být prázdný",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Nemáte dovoleno změnit titulek stránky", "Nemáte dovoleno změnit titulek stránky",
"error.site.update.permission": "Nemáte dovoleno upravit stránku", "error.site.update.permission": "Nemáte dovoleno upravit stránku",
@@ -155,6 +157,8 @@
"Role posledního administrátora nemůže být změněna", "Role posledního administrátora nemůže být změněna",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Nemáte dovoleno změnit roli uživatele \"{name}\"", "Nemáte dovoleno změnit roli uživatele \"{name}\"",
"error.user.changeRole.toAdmin":
"Nemáte dovoleno povýšit uživatele do role administrátora.",
"error.user.create.permission": "Nemáte dovoleno vytvořit tohoto uživatele", "error.user.create.permission": "Nemáte dovoleno vytvořit tohoto uživatele",
"error.user.delete": "U\u017eivatel nemohl b\u00fdt smaz\u00e1n", "error.user.delete": "U\u017eivatel nemohl b\u00fdt smaz\u00e1n",
"error.user.delete.lastAdmin": "Nem\u016f\u017eete smazat posledn\u00edho administr\u00e1tora", "error.user.delete.lastAdmin": "Nem\u016f\u017eete smazat posledn\u00edho administr\u00e1tora",
@@ -219,6 +223,7 @@
"error.validation.time": "Zadejte prosím platný čas", "error.validation.time": "Zadejte prosím platný čas",
"error.validation.url": "Zadejte prosím platnou adresu URL", "error.validation.url": "Zadejte prosím platnou adresu URL",
"field.required": "The field is required",
"field.files.empty": "Nebyly zatím vybrány žádné soubory", "field.files.empty": "Nebyly zatím vybrány žádné soubory",
"field.pages.empty": "Nebyly zatím vybrány žádné stránky", "field.pages.empty": "Nebyly zatím vybrány žádné stránky",
"field.structure.delete.confirm": "Opravdu chcete smazat tento z\u00e1znam?", "field.structure.delete.confirm": "Opravdu chcete smazat tento z\u00e1znam?",
@@ -291,6 +296,7 @@
"loading": "Načítám", "loading": "Načítám",
"lock.unsaved": "Neuložené změny", "lock.unsaved": "Neuložené změny",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Neuložené změny provedené <strong>{email}</strong>", "lock.isLocked": "Neuložené změny provedené <strong>{email}</strong>",
"lock.file.isLocked": "Soubor nelze změnit, právě jej upravuje {email}.", "lock.file.isLocked": "Soubor nelze změnit, právě jej upravuje {email}.",
"lock.page.isLocked": "Stránku nelze změnit, právě jí upravuje {email} .", "lock.page.isLocked": "Stránku nelze změnit, právě jí upravuje {email} .",
@@ -364,6 +370,8 @@
"pages.status.listed": "Zveřejněno", "pages.status.listed": "Zveřejněno",
"pages.status.unlisted": "Neveřejná", "pages.status.unlisted": "Neveřejná",
"pagination.page": "Stránka",
"password": "Heslo", "password": "Heslo",
"pixel": "Pixel", "pixel": "Pixel",
"prev": "Předchozí", "prev": "Předchozí",
@@ -384,6 +392,9 @@
"save": "Ulo\u017eit", "save": "Ulo\u017eit",
"search": "Hledat", "search": "Hledat",
"section.required": "The section is required",
"select": "Vybrat", "select": "Vybrat",
"settings": "Nastavení", "settings": "Nastavení",
"size": "Velikost", "size": "Velikost",
@@ -413,9 +424,9 @@
"translation.name": "\u010cesky", "translation.name": "\u010cesky",
"upload": "Nahrát", "upload": "Nahrát",
"upload.error.cantMove": "The uploaded file could not be moved", "upload.error.cantMove": "Nahraný soubor nemohl být přesunut",
"upload.error.cantWrite": "Failed to write file to disk", "upload.error.cantWrite": "Zápis souboru na disk se nezdařil",
"upload.error.default": "The file could not be uploaded", "upload.error.default": "Soubor se nepodařilo nahrát",
"upload.error.extension": "File upload stopped by extension", "upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form", "upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini", "upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",

View File

@@ -23,6 +23,7 @@
"delete": "Slet", "delete": "Slet",
"dimensions": "Dimensioner", "dimensions": "Dimensioner",
"disabled": "Disabled",
"discard": "Kass\u00e9r", "discard": "Kass\u00e9r",
"download": "Download", "download": "Download",
"duplicate": "Dupliker", "duplicate": "Dupliker",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "Sektionen \"{section}\" kunne ikke indlæses", "error.section.notLoaded": "Sektionen \"{section}\" kunne ikke indlæses",
"error.section.type.invalid": "Sektionstypen \"{type}\" er ikke gyldig", "error.section.type.invalid": "Sektionstypen \"{type}\" er ikke gyldig",
"error.site.changeTitle.empty": "Titlen kan ikke være tom",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Du har ikke tilladelse til at ændre titlen på sitet", "Du har ikke tilladelse til at ændre titlen på sitet",
"error.site.update.permission": "Du har ikke tilladelse til at opdatere sitet", "error.site.update.permission": "Du har ikke tilladelse til at opdatere sitet",
@@ -155,6 +157,8 @@
"Rollen for den sidste admin kan ikke ændres", "Rollen for den sidste admin kan ikke ændres",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Du har ikke tilladelse til at ændre rollen for brugeren \"{name}\"", "Du har ikke tilladelse til at ændre rollen for brugeren \"{name}\"",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.create.permission": "Du har ikke tilladelse til at oprette denne bruger", "error.user.create.permission": "Du har ikke tilladelse til at oprette denne bruger",
"error.user.delete": "Brugeren kunne ikke slettes", "error.user.delete": "Brugeren kunne ikke slettes",
"error.user.delete.lastAdmin": "Du kan ikke slette den sidste admin", "error.user.delete.lastAdmin": "Du kan ikke slette den sidste admin",
@@ -219,6 +223,7 @@
"error.validation.time": "Indtast venligst et gyldigt tidspunkt", "error.validation.time": "Indtast venligst et gyldigt tidspunkt",
"error.validation.url": "Indtast venligst en gyldig URL", "error.validation.url": "Indtast venligst en gyldig URL",
"field.required": "The field is required",
"field.files.empty": "Ingen filer valgt endnu", "field.files.empty": "Ingen filer valgt endnu",
"field.pages.empty": "Ingen sider valgt endnu", "field.pages.empty": "Ingen sider valgt endnu",
"field.structure.delete.confirm": "\u00d8nsker du virkelig at slette denne indtastning?", "field.structure.delete.confirm": "\u00d8nsker du virkelig at slette denne indtastning?",
@@ -291,6 +296,7 @@
"loading": "Indlæser", "loading": "Indlæser",
"lock.unsaved": "Ugemte ændringer", "lock.unsaved": "Ugemte ændringer",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Ugemte ændringer af <strong>{email}</strong>", "lock.isLocked": "Ugemte ændringer af <strong>{email}</strong>",
"lock.file.isLocked": "Filen redigeres på nuværende af {email} og kan derfor ikke ændres.", "lock.file.isLocked": "Filen redigeres på nuværende af {email} og kan derfor ikke ændres.",
"lock.page.isLocked": "Siden redigeres på nuværende af {email} og kan derfor ikke ændres.", "lock.page.isLocked": "Siden redigeres på nuværende af {email} og kan derfor ikke ændres.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Udgivede", "pages.status.listed": "Udgivede",
"pages.status.unlisted": "Ulistede", "pages.status.unlisted": "Ulistede",
"pagination.page": "Side",
"password": "Adgangskode", "password": "Adgangskode",
"pixel": "Pixel", "pixel": "Pixel",
"prev": "Forrige", "prev": "Forrige",
@@ -384,6 +392,9 @@
"save": "Gem", "save": "Gem",
"search": "Søg", "search": "Søg",
"section.required": "The section is required",
"select": "Vælg", "select": "Vælg",
"settings": "Indstillinger", "settings": "Indstillinger",
"size": "Størrelse", "size": "Størrelse",
@@ -418,7 +429,7 @@
"upload.error.default": "Filen kunne ikke uploades", "upload.error.default": "Filen kunne ikke uploades",
"upload.error.extension": "Upload af filen blev stoppet af dens type", "upload.error.extension": "Upload af filen blev stoppet af dens type",
"upload.error.formSize": "Filen overskrider MAX_FILE_SIZE direktivet der er specificeret for formularen", "upload.error.formSize": "Filen overskrider MAX_FILE_SIZE direktivet der er specificeret for formularen",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini", "upload.error.iniPostSize": "FIlen overskrider post_max_size direktivet i php.ini",
"upload.error.iniSize": "FIlen overskrider upload_max_filesize direktivet i php.ini", "upload.error.iniSize": "FIlen overskrider upload_max_filesize direktivet i php.ini",
"upload.error.noFile": "Ingen fil blev uploadet", "upload.error.noFile": "Ingen fil blev uploadet",
"upload.error.noFiles": "Ingen filer blev uploadet", "upload.error.noFiles": "Ingen filer blev uploadet",

View File

@@ -23,6 +23,7 @@
"delete": "L\u00f6schen", "delete": "L\u00f6schen",
"dimensions": "Maße", "dimensions": "Maße",
"disabled": "Gesperrt",
"discard": "Verwerfen", "discard": "Verwerfen",
"download": "Download", "download": "Download",
"duplicate": "Duplizieren", "duplicate": "Duplizieren",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "Der Bereich \"{name}\" konnte nicht geladen werden", "error.section.notLoaded": "Der Bereich \"{name}\" konnte nicht geladen werden",
"error.section.type.invalid": "Der Bereichstyp \"{type}\" ist nicht gültig", "error.section.type.invalid": "Der Bereichstyp \"{type}\" ist nicht gültig",
"error.site.changeTitle.empty": "Bitte gib einen Titel an",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Du kannst den Titel der Seite nicht ändern", "Du kannst den Titel der Seite nicht ändern",
"error.site.update.permission": "Du darfst die Seite nicht editieren", "error.site.update.permission": "Du darfst die Seite nicht editieren",
@@ -155,6 +157,8 @@
"Die Rolle des letzten Administrators kann nicht geändert werden", "Die Rolle des letzten Administrators kann nicht geändert werden",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Du kannst die Rolle für den Benutzer \"{name}\" nicht ändern", "Du kannst die Rolle für den Benutzer \"{name}\" nicht ändern",
"error.user.changeRole.toAdmin":
"Du darfst die Admin Rolle nicht an andere Benutzer vergeben",
"error.user.create.permission": "Du kannst diesen Benutzer nicht anlegen", "error.user.create.permission": "Du kannst diesen Benutzer nicht anlegen",
"error.user.delete": "Der Benutzer \"{name}\" konnte nicht gelöscht werden", "error.user.delete": "Der Benutzer \"{name}\" konnte nicht gelöscht werden",
"error.user.delete.lastAdmin": "Du kannst den letzten Admin nicht l\u00f6schen", "error.user.delete.lastAdmin": "Du kannst den letzten Admin nicht l\u00f6schen",
@@ -219,6 +223,7 @@
"error.validation.time": "Bitte gib eine gültige Uhrzeit ein", "error.validation.time": "Bitte gib eine gültige Uhrzeit ein",
"error.validation.url": "Bitte gib eine gültige URL ein", "error.validation.url": "Bitte gib eine gültige URL ein",
"field.required": "Das Feld ist Pflicht",
"field.files.empty": "Keine Dateien ausgewählt", "field.files.empty": "Keine Dateien ausgewählt",
"field.pages.empty": "Keine Seiten ausgewählt", "field.pages.empty": "Keine Seiten ausgewählt",
"field.structure.delete.confirm": "Willst du diesen Eintrag wirklich l\u00f6schen?", "field.structure.delete.confirm": "Willst du diesen Eintrag wirklich l\u00f6schen?",
@@ -291,6 +296,7 @@
"loading": "Laden", "loading": "Laden",
"lock.unsaved": "Ungespeicherte Änderungen", "lock.unsaved": "Ungespeicherte Änderungen",
"lock.unsaved.empty": "Keine ungespeicherten Änderungen",
"lock.isLocked": "Ungespeicherte Änderungen von <strong>{email}</strong>", "lock.isLocked": "Ungespeicherte Änderungen von <strong>{email}</strong>",
"lock.file.isLocked": "Die Datei wird von {email} bearbeitet und kann nicht geändert werden.", "lock.file.isLocked": "Die Datei wird von {email} bearbeitet und kann nicht geändert werden.",
"lock.page.isLocked": "Die Seite wird von {email} bearbeitet und kann nicht geändert werden.", "lock.page.isLocked": "Die Seite wird von {email} bearbeitet und kann nicht geändert werden.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Veröffentlicht", "pages.status.listed": "Veröffentlicht",
"pages.status.unlisted": "Ungelistet", "pages.status.unlisted": "Ungelistet",
"pagination.page": "Seite",
"password": "Passwort", "password": "Passwort",
"pixel": "Pixel", "pixel": "Pixel",
"prev": "Vorheriger Eintrag", "prev": "Vorheriger Eintrag",
@@ -384,6 +392,9 @@
"save": "Speichern", "save": "Speichern",
"search": "Suchen", "search": "Suchen",
"section.required": "Der Bereich ist Pflicht",
"select": "Auswählen", "select": "Auswählen",
"settings": "Einstellungen", "settings": "Einstellungen",
"size": "Größe", "size": "Größe",

View File

@@ -23,6 +23,7 @@
"delete": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae", "delete": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae",
"dimensions": "Διαστάσεις", "dimensions": "Διαστάσεις",
"disabled": "Disabled",
"discard": "Απόρριψη", "discard": "Απόρριψη",
"download": "Download", "download": "Download",
"duplicate": "Duplicate", "duplicate": "Duplicate",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "Δεν ήταν δυνατή η φόρτωση της ενότητας \"{name}\"", "error.section.notLoaded": "Δεν ήταν δυνατή η φόρτωση της ενότητας \"{name}\"",
"error.section.type.invalid": "Ο τύπος ενότητας \"{type}\" δεν είναι έγκυρος", "error.section.type.invalid": "Ο τύπος ενότητας \"{type}\" δεν είναι έγκυρος",
"error.site.changeTitle.empty": "Ο τίτλος δεν μπορεί να είναι κενός",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Δεν επιτρέπεται να αλλάξετε τον τίτλο του ιστότοπου", "Δεν επιτρέπεται να αλλάξετε τον τίτλο του ιστότοπου",
"error.site.update.permission": "Δεν επιτρέπεται η ενημέρωση του ιστότοπου", "error.site.update.permission": "Δεν επιτρέπεται η ενημέρωση του ιστότοπου",
@@ -155,6 +157,8 @@
"Ο ρόλος του τελευταίου διαχειριστή δεν μπορεί να αλλάξει", "Ο ρόλος του τελευταίου διαχειριστή δεν μπορεί να αλλάξει",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Δεν επιτρέπεται να αλλάξετε το ρόλο του χρήστη \"{name}\"", "Δεν επιτρέπεται να αλλάξετε το ρόλο του χρήστη \"{name}\"",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.create.permission": "Δεν επιτρέπεται η δημιουργία αυτού του χρήστη", "error.user.create.permission": "Δεν επιτρέπεται η δημιουργία αυτού του χρήστη",
"error.user.delete": "\u039f \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7\u03c2 \u03b4\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03bf\u03cd\u03c3\u03b5 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03b5\u03af", "error.user.delete": "\u039f \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7\u03c2 \u03b4\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03bf\u03cd\u03c3\u03b5 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03b5\u03af",
"error.user.delete.lastAdmin": "Δεν είναι δυνατή η διαγραφή του τελευταίου διαχειριστή", "error.user.delete.lastAdmin": "Δεν είναι δυνατή η διαγραφή του τελευταίου διαχειριστή",
@@ -219,6 +223,7 @@
"error.validation.time": "Παρακαλώ εισάγετε μια έγκυρη ώρα", "error.validation.time": "Παρακαλώ εισάγετε μια έγκυρη ώρα",
"error.validation.url": "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση URL", "error.validation.url": "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση URL",
"field.required": "The field is required",
"field.files.empty": "Δεν έχουν επιλεγεί αρχεία ακόμα", "field.files.empty": "Δεν έχουν επιλεγεί αρχεία ακόμα",
"field.pages.empty": "Δεν έχουν επιλεγεί ακόμη σελίδες", "field.pages.empty": "Δεν έχουν επιλεγεί ακόμη σελίδες",
"field.structure.delete.confirm": "\u0395\u03af\u03c3\u03c4\u03b5 \u03c3\u03af\u03b3\u03bf\u03c5\u03c1\u03bf\u03c2 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae\u03bd \u03c4\u03b7\u03bd \u03ba\u03b1\u03c4\u03b1\u03c7\u03ce\u03c1\u03b9\u03c3\u03b7;", "field.structure.delete.confirm": "\u0395\u03af\u03c3\u03c4\u03b5 \u03c3\u03af\u03b3\u03bf\u03c5\u03c1\u03bf\u03c2 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae\u03bd \u03c4\u03b7\u03bd \u03ba\u03b1\u03c4\u03b1\u03c7\u03ce\u03c1\u03b9\u03c3\u03b7;",
@@ -291,6 +296,7 @@
"loading": "Φόρτωση", "loading": "Φόρτωση",
"lock.unsaved": "Unsaved changes", "lock.unsaved": "Unsaved changes",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>", "lock.isLocked": "Unsaved changes by <strong>{email}</strong>",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.", "lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.", "lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Δημοσιευμένο", "pages.status.listed": "Δημοσιευμένο",
"pages.status.unlisted": "Μη καταχωρημένο", "pages.status.unlisted": "Μη καταχωρημένο",
"pagination.page": "Σελίδα",
"password": "\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03a0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2", "password": "\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03a0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2",
"pixel": "Εικονοστοιχέιο", "pixel": "Εικονοστοιχέιο",
"prev": "Προηγούμενο", "prev": "Προηγούμενο",
@@ -384,6 +392,9 @@
"save": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7", "save": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7",
"search": "Αναζήτηση", "search": "Αναζήτηση",
"section.required": "The section is required",
"select": "Επιλογή", "select": "Επιλογή",
"settings": "Ρυθμίσεις", "settings": "Ρυθμίσεις",
"size": "Μέγεθος", "size": "Μέγεθος",

View File

@@ -23,6 +23,7 @@
"delete": "Delete", "delete": "Delete",
"dimensions": "Dimensions", "dimensions": "Dimensions",
"disabled": "Disabled",
"discard": "Discard", "discard": "Discard",
"download": "Download", "download": "Download",
"duplicate": "Duplicate", "duplicate": "Duplicate",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "The section \"{name}\" could not be loaded", "error.section.notLoaded": "The section \"{name}\" could not be loaded",
"error.section.type.invalid": "The section type \"{type}\" is not valid", "error.section.type.invalid": "The section type \"{type}\" is not valid",
"error.site.changeTitle.empty": "The title must not be empty",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"You are not allowed to change the title of the site", "You are not allowed to change the title of the site",
"error.site.update.permission": "You are not allowed to update the site", "error.site.update.permission": "You are not allowed to update the site",
@@ -221,6 +223,7 @@
"error.validation.time": "Please enter a valid time", "error.validation.time": "Please enter a valid time",
"error.validation.url": "Please enter a valid URL", "error.validation.url": "Please enter a valid URL",
"field.required": "The field is required",
"field.files.empty": "No files selected yet", "field.files.empty": "No files selected yet",
"field.pages.empty": "No pages selected yet", "field.pages.empty": "No pages selected yet",
"field.structure.delete.confirm": "Do you really want to delete this row?", "field.structure.delete.confirm": "Do you really want to delete this row?",
@@ -293,6 +296,7 @@
"loading": "Loading", "loading": "Loading",
"lock.unsaved": "Unsaved changes", "lock.unsaved": "Unsaved changes",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>", "lock.isLocked": "Unsaved changes by <strong>{email}</strong>",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.", "lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.", "lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.",
@@ -366,6 +370,8 @@
"pages.status.listed": "Published", "pages.status.listed": "Published",
"pages.status.unlisted": "Unlisted", "pages.status.unlisted": "Unlisted",
"pagination.page": "Page",
"password": "Password", "password": "Password",
"pixel": "Pixel", "pixel": "Pixel",
"prev": "Previous", "prev": "Previous",
@@ -386,6 +392,9 @@
"save": "Save", "save": "Save",
"search": "Search", "search": "Search",
"section.required": "The section is required",
"select": "Select", "select": "Select",
"settings": "Settings", "settings": "Settings",
"size": "Size", "size": "Size",

View File

@@ -23,6 +23,7 @@
"delete": "Eliminar", "delete": "Eliminar",
"dimensions": "Dimensiones", "dimensions": "Dimensiones",
"disabled": "Disabled",
"discard": "Descartar", "discard": "Descartar",
"download": "Download", "download": "Download",
"duplicate": "Duplicate", "duplicate": "Duplicate",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "La sección \"{name}\" no se pudo cargar", "error.section.notLoaded": "La sección \"{name}\" no se pudo cargar",
"error.section.type.invalid": "La sección \"{type}\" no es valida", "error.section.type.invalid": "La sección \"{type}\" no es valida",
"error.site.changeTitle.empty": "El título no debe estar vacío.",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"No tienes permiso para cambiar el título del sitio", "No tienes permiso para cambiar el título del sitio",
"error.site.update.permission": "No tienes permiso de actualizar el sitio", "error.site.update.permission": "No tienes permiso de actualizar el sitio",
@@ -155,6 +157,8 @@
"El rol del último administrador no puede ser cambiado", "El rol del último administrador no puede ser cambiado",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"No tienes permiso para cambiar el rol del usuario \"{name}\"", "No tienes permiso para cambiar el rol del usuario \"{name}\"",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.create.permission": "No tienes permiso de crear este usuario", "error.user.create.permission": "No tienes permiso de crear este usuario",
"error.user.delete": "El ususario no pudo ser eliminado", "error.user.delete": "El ususario no pudo ser eliminado",
"error.user.delete.lastAdmin": "Usted no puede borrar el \u00faltimo administrador", "error.user.delete.lastAdmin": "Usted no puede borrar el \u00faltimo administrador",
@@ -219,6 +223,7 @@
"error.validation.time": "Por favor ingresa una hora válida", "error.validation.time": "Por favor ingresa una hora válida",
"error.validation.url": "Por favor ingresa un URL válido", "error.validation.url": "Por favor ingresa un URL válido",
"field.required": "The field is required",
"field.files.empty": "Aún no ha seleccionado ningún archivo", "field.files.empty": "Aún no ha seleccionado ningún archivo",
"field.pages.empty": "Aún no ha seleccionado ningúna pagina", "field.pages.empty": "Aún no ha seleccionado ningúna pagina",
"field.structure.delete.confirm": "\u00bfEn realidad desea borrar esta entrada?", "field.structure.delete.confirm": "\u00bfEn realidad desea borrar esta entrada?",
@@ -291,6 +296,7 @@
"loading": "Cargando", "loading": "Cargando",
"lock.unsaved": "Unsaved changes", "lock.unsaved": "Unsaved changes",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>", "lock.isLocked": "Unsaved changes by <strong>{email}</strong>",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.", "lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.", "lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Publicado", "pages.status.listed": "Publicado",
"pages.status.unlisted": "No publicado", "pages.status.unlisted": "No publicado",
"pagination.page": "Página",
"password": "Contrase\u00f1a", "password": "Contrase\u00f1a",
"pixel": "Pixel", "pixel": "Pixel",
"prev": "Anterior", "prev": "Anterior",
@@ -384,6 +392,9 @@
"save": "Guardar", "save": "Guardar",
"search": "Buscar", "search": "Buscar",
"section.required": "The section is required",
"select": "Seleccionar", "select": "Seleccionar",
"settings": "Ajustes", "settings": "Ajustes",
"size": "Tamaño", "size": "Tamaño",
@@ -410,7 +421,7 @@
"translation.author": "Equipo Kirby", "translation.author": "Equipo Kirby",
"translation.direction": "ltr", "translation.direction": "ltr",
"translation.name": "Inglés", "translation.name": "Español (América Latina)",
"upload": "Subir", "upload": "Subir",
"upload.error.cantMove": "The uploaded file could not be moved", "upload.error.cantMove": "The uploaded file could not be moved",

View File

@@ -23,6 +23,7 @@
"delete": "Borrar", "delete": "Borrar",
"dimensions": "Dimensiones", "dimensions": "Dimensiones",
"disabled": "Disabled",
"discard": "Descartar", "discard": "Descartar",
"download": "Download", "download": "Download",
"duplicate": "Duplicate", "duplicate": "Duplicate",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "La sección \"{name}\" no pudo ser cargada", "error.section.notLoaded": "La sección \"{name}\" no pudo ser cargada",
"error.section.type.invalid": "El sección tipo \"{tipo}\" no es válido", "error.section.type.invalid": "El sección tipo \"{tipo}\" no es válido",
"error.site.changeTitle.empty": "El título no debe estar vacío.",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"No está permitido cambiar el título del sitio", "No está permitido cambiar el título del sitio",
"error.site.update.permission": "No tienes permitido actualizar el sitio", "error.site.update.permission": "No tienes permitido actualizar el sitio",
@@ -155,6 +157,8 @@
"El rol para el último administrador no puede ser cambiado", "El rol para el último administrador no puede ser cambiado",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"No tienes permitido cambiar el rol del usuario \"{name}\"", "No tienes permitido cambiar el rol del usuario \"{name}\"",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.create.permission": "No tienes permiso para crear este usuario", "error.user.create.permission": "No tienes permiso para crear este usuario",
"error.user.delete": "El usuario \"{name}\" no puede ser eliminado", "error.user.delete": "El usuario \"{name}\" no puede ser eliminado",
"error.user.delete.lastAdmin": "El último administrador no puede ser eliminado", "error.user.delete.lastAdmin": "El último administrador no puede ser eliminado",
@@ -219,6 +223,7 @@
"error.validation.time": "Por favor ingrese una hora válida", "error.validation.time": "Por favor ingrese una hora válida",
"error.validation.url": "Por favor introduzca un URL válido", "error.validation.url": "Por favor introduzca un URL válido",
"field.required": "The field is required",
"field.files.empty": "Aún no hay archivos seleccionados", "field.files.empty": "Aún no hay archivos seleccionados",
"field.pages.empty": "Aún no hay páginas seleccionadas", "field.pages.empty": "Aún no hay páginas seleccionadas",
"field.structure.delete.confirm": "¿Realmente quieres eliminar esta fila?", "field.structure.delete.confirm": "¿Realmente quieres eliminar esta fila?",
@@ -291,6 +296,7 @@
"loading": "Cargando", "loading": "Cargando",
"lock.unsaved": "Unsaved changes", "lock.unsaved": "Unsaved changes",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>", "lock.isLocked": "Unsaved changes by <strong>{email}</strong>",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.", "lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.", "lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Publicadas", "pages.status.listed": "Publicadas",
"pages.status.unlisted": "Sin publicar", "pages.status.unlisted": "Sin publicar",
"pagination.page": "Página",
"password": "Contraseña", "password": "Contraseña",
"pixel": "Pixel", "pixel": "Pixel",
"prev": "Anterior", "prev": "Anterior",
@@ -384,6 +392,9 @@
"save": "Guardar", "save": "Guardar",
"search": "Buscar", "search": "Buscar",
"section.required": "The section is required",
"select": "Seleccionar", "select": "Seleccionar",
"settings": "Ajustes", "settings": "Ajustes",
"size": "Tamaño", "size": "Tamaño",

View File

@@ -23,6 +23,7 @@
"delete": "\u062d\u0630\u0641", "delete": "\u062d\u0630\u0641",
"dimensions": "ابعاد", "dimensions": "ابعاد",
"disabled": "Disabled",
"discard": "\u0627\u0646\u0635\u0631\u0627\u0641", "discard": "\u0627\u0646\u0635\u0631\u0627\u0641",
"download": "Download", "download": "Download",
"duplicate": "Duplicate", "duplicate": "Duplicate",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "بخش «{name}» قابل بارکذاری نیست", "error.section.notLoaded": "بخش «{name}» قابل بارکذاری نیست",
"error.section.type.invalid": "نوع بخش «{type}» غیرمجاز است", "error.section.type.invalid": "نوع بخش «{type}» غیرمجاز است",
"error.site.changeTitle.empty": "عنوان اجباری است",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"شما اجازه تغییر عنوان سایت را ندارید", "شما اجازه تغییر عنوان سایت را ندارید",
"error.site.update.permission": "شما اجازه بروزرسانی سایت را ندارید", "error.site.update.permission": "شما اجازه بروزرسانی سایت را ندارید",
@@ -155,6 +157,8 @@
"نقش آخرین مدیر سیستم قابل تغییر نیست", "نقش آخرین مدیر سیستم قابل تغییر نیست",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"شما اجازه تغییر نقش کاربر «{name}» را ندارید", "شما اجازه تغییر نقش کاربر «{name}» را ندارید",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.create.permission": "شما اجازه ایجاد این کاربر را ندارید", "error.user.create.permission": "شما اجازه ایجاد این کاربر را ندارید",
"error.user.delete": "کاربر «{name}» نمی تواند حذف شود", "error.user.delete": "کاربر «{name}» نمی تواند حذف شود",
"error.user.delete.lastAdmin": "\u062d\u0630\u0641 \u0622\u062e\u0631\u06cc\u0646 \u0645\u062f\u06cc\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0645\u06a9\u0646 \u0646\u06cc\u0633\u062a", "error.user.delete.lastAdmin": "\u062d\u0630\u0641 \u0622\u062e\u0631\u06cc\u0646 \u0645\u062f\u06cc\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0645\u06a9\u0646 \u0646\u06cc\u0633\u062a",
@@ -219,6 +223,7 @@
"error.validation.time": "لطفا زمان معتبری وارد کنید", "error.validation.time": "لطفا زمان معتبری وارد کنید",
"error.validation.url": "لطفا آدرس URL صحیح وارد کنید", "error.validation.url": "لطفا آدرس URL صحیح وارد کنید",
"field.required": "The field is required",
"field.files.empty": "فایلی انتخاب نشده است", "field.files.empty": "فایلی انتخاب نشده است",
"field.pages.empty": "صفحه‌ای انتخاب نشده است", "field.pages.empty": "صفحه‌ای انتخاب نشده است",
"field.structure.delete.confirm": "\u0645\u062f\u062e\u0644 \u062c\u0627\u0631\u06cc \u062d\u0630\u0641 \u0634\u0648\u062f\u061f", "field.structure.delete.confirm": "\u0645\u062f\u062e\u0644 \u062c\u0627\u0631\u06cc \u062d\u0630\u0641 \u0634\u0648\u062f\u061f",
@@ -291,6 +296,7 @@
"loading": "بارگزاری", "loading": "بارگزاری",
"lock.unsaved": "Unsaved changes", "lock.unsaved": "Unsaved changes",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>", "lock.isLocked": "Unsaved changes by <strong>{email}</strong>",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.", "lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.", "lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.",
@@ -364,6 +370,8 @@
"pages.status.listed": "منتشر شده", "pages.status.listed": "منتشر شده",
"pages.status.unlisted": "فهرست نشده", "pages.status.unlisted": "فهرست نشده",
"pagination.page": "صفحه",
"password": "\u06af\u0630\u0631\u0648\u0627\u0698\u0647", "password": "\u06af\u0630\u0631\u0648\u0627\u0698\u0647",
"pixel": "پیکسل", "pixel": "پیکسل",
"prev": "قبلی", "prev": "قبلی",
@@ -384,6 +392,9 @@
"save": "\u0630\u062e\u06cc\u0631\u0647", "save": "\u0630\u062e\u06cc\u0631\u0647",
"search": "جستجو", "search": "جستجو",
"section.required": "The section is required",
"select": "انتخاب", "select": "انتخاب",
"settings": "تنظیمات", "settings": "تنظیمات",
"size": "اندازه", "size": "اندازه",

View File

@@ -23,21 +23,22 @@
"delete": "Poista", "delete": "Poista",
"dimensions": "Mitat", "dimensions": "Mitat",
"disabled": "Disabled",
"discard": "Hylkää", "discard": "Hylkää",
"download": "Download", "download": "Lataa",
"duplicate": "Duplicate", "duplicate": "Kahdenna",
"edit": "Muokkaa", "edit": "Muokkaa",
"dialog.files.empty": "No files to select", "dialog.files.empty": "Ei valittavissa olevia tiedostoja",
"dialog.pages.empty": "No pages to select", "dialog.pages.empty": "Ei valittavissa olevia sivuja",
"dialog.users.empty": "No users to select", "dialog.users.empty": "Ei valittavissa olevia käyttäjiä",
"email": "S\u00e4hk\u00f6posti", "email": "S\u00e4hk\u00f6posti",
"email.placeholder": "nimi@osoite.fi", "email.placeholder": "nimi@osoite.fi",
"error.access.login": "Kirjautumistiedot eivät kelpaa", "error.access.login": "Kirjautumistiedot eivät kelpaa",
"error.access.panel": "Sinulla ei ole oikeutta käyttää paneelia", "error.access.panel": "Sinulla ei ole oikeutta käyttää paneelia",
"error.access.view": "You are not allowed to access this part of the panel", "error.access.view": "Sinulla ei ole oikeutta käyttää tätä osaa paneelista",
"error.avatar.create.fail": "Profiilikuvaa ei voitu lähettää", "error.avatar.create.fail": "Profiilikuvaa ei voitu lähettää",
"error.avatar.delete.fail": "Profiilikuvaa ei voitu poistaa", "error.avatar.delete.fail": "Profiilikuvaa ei voitu poistaa",
@@ -52,7 +53,7 @@
"error.field.converter.invalid": "Muunnin \"{converter}\" ei kelpaa", "error.field.converter.invalid": "Muunnin \"{converter}\" ei kelpaa",
"error.file.changeName.empty": "The name must not be empty", "error.file.changeName.empty": "Nimi ei voi olla tyhjä",
"error.file.changeName.permission": "error.file.changeName.permission":
"Sinulla ei ole oikeutta muuttaa tiedoston \"{filename}\" nimeä", "Sinulla ei ole oikeutta muuttaa tiedoston \"{filename}\" nimeä",
"error.file.duplicate": "Tiedosto nimellä \"{filename}\" on jo olemassa", "error.file.duplicate": "Tiedosto nimellä \"{filename}\" on jo olemassa",
@@ -73,13 +74,13 @@
"error.form.incomplete": "Korjaa kaikki lomakkeen virheet...", "error.form.incomplete": "Korjaa kaikki lomakkeen virheet...",
"error.form.notSaved": "Lomaketta ei voitu tallentaa", "error.form.notSaved": "Lomaketta ei voitu tallentaa",
"error.language.code": "Please enter a valid code for the language", "error.language.code": "Anna kielen lyhenne",
"error.language.duplicate": "The language already exists", "error.language.duplicate": "Kieli on jo olemassa",
"error.language.name": "Please enter a valid name for the language", "error.language.name": "Anna kielen nimi",
"error.license.format": "Please enter a valid license key", "error.license.format": "Anna lisenssiavain",
"error.license.email": "Anna kelpaava sähköpostiosoite", "error.license.email": "Anna kelpaava sähköpostiosoite",
"error.license.verification": "The license could not be verified", "error.license.verification": "Lisenssiä ei voitu vahvistaa",
"error.page.changeSlug.permission": "error.page.changeSlug.permission":
"Sinulla ei ole oikeutta muuttaa URL-liitettä sivulle \"{slug}\"", "Sinulla ei ole oikeutta muuttaa URL-liitettä sivulle \"{slug}\"",
@@ -106,7 +107,7 @@
"Sivuluonnos URL-liitteellä \"{slug}\" on jo olemassa", "Sivuluonnos URL-liitteellä \"{slug}\" on jo olemassa",
"error.page.duplicate": "error.page.duplicate":
"Sivu URL-liitteellä \"{slug}\" on jo olemassa", "Sivu URL-liitteellä \"{slug}\" on jo olemassa",
"error.page.duplicate.permission": "You are not allowed to duplicate \"{slug}\"", "error.page.duplicate.permission": "Sinulla ei ole oikeutta kahdentaa sivua \"{slug}\"",
"error.page.notFound": "Sivua \"{slug}\" ei löytynyt", "error.page.notFound": "Sivua \"{slug}\" ei löytynyt",
"error.page.num.invalid": "error.page.num.invalid":
"Anna kelpaava järjestysnumero. Numero ei voi olla negatiivinen.", "Anna kelpaava järjestysnumero. Numero ei voi olla negatiivinen.",
@@ -121,22 +122,23 @@
"error.section.files.max.singular": "error.section.files.max.singular":
"Et voi lisätä enempää kuin yhden tiedoston osioon \"{section}\"", "Et voi lisätä enempää kuin yhden tiedoston osioon \"{section}\"",
"error.section.files.min.plural": "error.section.files.min.plural":
"The \"{section}\" section requires at least {min} files", "Osio \"{section}\" vaatii ainakin {min} tiedostoa",
"error.section.files.min.singular": "error.section.files.min.singular":
"The \"{section}\" section requires at least one file", "Osio \"{section}\" vaatii ainakin yhden sivun",
"error.section.pages.max.plural": "error.section.pages.max.plural":
"Et voi lisätä enemmän kuin {max} sivua osioon \"{section}\"", "Et voi lisätä enemmän kuin {max} sivua osioon \"{section}\"",
"error.section.pages.max.singular": "error.section.pages.max.singular":
"Et voi lisätä enempää kuin yhden sivun osioon \"{section}\"", "Et voi lisätä enempää kuin yhden sivun osioon \"{section}\"",
"error.section.pages.min.plural": "error.section.pages.min.plural":
"The \"{section}\" section requires at least {min} pages", "Osio \"{section}\" vaatii ainakin {min} sivua",
"error.section.pages.min.singular": "error.section.pages.min.singular":
"The \"{section}\" section requires at least one page", "Osio \"{section}\" vaatii ainakin yhden sivun",
"error.section.notLoaded": "Osiota \"{name}\" ei voitu ladata", "error.section.notLoaded": "Osiota \"{name}\" ei voitu ladata",
"error.section.type.invalid": "Osion tyyppi \"{type}\" ei ole kelvollinen", "error.section.type.invalid": "Osion tyyppi \"{type}\" ei ole kelvollinen",
"error.site.changeTitle.empty": "Nimi ei voi olla tyhjä",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Sinulla ei ole oikeutta päivittää sivuston nimeä", "Sinulla ei ole oikeutta päivittää sivuston nimeä",
"error.site.update.permission": "Sinulla ei ole oikeutta päivittää sivuston tietoja", "error.site.update.permission": "Sinulla ei ole oikeutta päivittää sivuston tietoja",
@@ -152,17 +154,19 @@
"error.user.changePassword.permission": "error.user.changePassword.permission":
"Sinulla ei ole oikeutta vaihtaa käyttäjän \"{name}\" salasanaa", "Sinulla ei ole oikeutta vaihtaa käyttäjän \"{name}\" salasanaa",
"error.user.changeRole.lastAdmin": "error.user.changeRole.lastAdmin":
"Ainoan ylläpitäjän roolia ei voi muuttaa", "Ainoan pääkäyttäjän roolia ei voi muuttaa",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Sinulla ei ole oikeutta vaihtaa käyttäjän \"{name}\" käyttäjätasoa", "Sinulla ei ole oikeutta vaihtaa käyttäjän \"{name}\" käyttäjätasoa",
"error.user.changeRole.toAdmin":
"Sinulla ei ole oikeutta vaihtaa käyttäjätasoa pääkäyttäjäksi",
"error.user.create.permission": "Sinulla ei ole oikeutta luoda tätä käyttäjää", "error.user.create.permission": "Sinulla ei ole oikeutta luoda tätä käyttäjää",
"error.user.delete": "Käyttäjää \"{name}\" ei voi poistaa", "error.user.delete": "Käyttäjää \"{name}\" ei voi poistaa",
"error.user.delete.lastAdmin": "Ainoaa ylläpitäjää ei voi poistaa", "error.user.delete.lastAdmin": "Ainoaa pääkäyttäjää ei voi poistaa",
"error.user.delete.lastUser": "Ainoaa käyttäjää ei voi poistaa", "error.user.delete.lastUser": "Ainoaa käyttäjää ei voi poistaa",
"error.user.delete.permission": "error.user.delete.permission":
"Sinulla ei ole oikeutta poistaa käyttäjää \"{name}\"", "Sinulla ei ole oikeutta poistaa käyttäjää \"{name}\"",
"error.user.duplicate": "error.user.duplicate":
"Käyttäjä jonka sähköpostiosoite on \"{name}\" on jo olemassa", "Käyttäjä, jonka sähköpostiosoite on \"{name}\", on jo olemassa",
"error.user.email.invalid": "Anna kelpaava sähköpostiosoite", "error.user.email.invalid": "Anna kelpaava sähköpostiosoite",
"error.user.language.invalid": "Anna kelpaava kieli", "error.user.language.invalid": "Anna kelpaava kieli",
"error.user.notFound": "K\u00e4ytt\u00e4j\u00e4\u00e4 ei l\u00f6ytynyt", "error.user.notFound": "K\u00e4ytt\u00e4j\u00e4\u00e4 ei l\u00f6ytynyt",
@@ -184,9 +188,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.after": "Anna päivämäärä {date} jälkeen",
"error.validation.date.before": "Please enter a date before {date}", "error.validation.date.before": "Anna päivämäärä ennen {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}", "error.validation.date.between": "Anna päivämäärä väliltä {min} ja {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",
@@ -219,6 +223,7 @@
"error.validation.time": "Anna kelpaava aika", "error.validation.time": "Anna kelpaava aika",
"error.validation.url": "Anna kelpaava URL", "error.validation.url": "Anna kelpaava URL",
"field.required": "Kenttä on pakollinen",
"field.files.empty": "Tiedostoja ei ole vielä valittu", "field.files.empty": "Tiedostoja ei ole vielä valittu",
"field.pages.empty": " Sivuja ei ole vielä valittu", "field.pages.empty": " Sivuja ei ole vielä valittu",
"field.structure.delete.confirm": "Haluatko varmasti poistaa tämän rivin?", "field.structure.delete.confirm": "Haluatko varmasti poistaa tämän rivin?",
@@ -290,11 +295,12 @@
"loading": "Ladataan", "loading": "Ladataan",
"lock.unsaved": "Unsaved changes", "lock.unsaved": "Tallentamattomia muutoksia",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>", "lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Käyttäjällä <strong>{email}</strong> on tallentamattomia muutoksia",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.", "lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.", "lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.",
"lock.unlock": "Unlock", "lock.unlock": "Vapauta",
"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": "Kirjaudu", "login": "Kirjaudu",
@@ -364,6 +370,8 @@
"pages.status.listed": "Julkaistut", "pages.status.listed": "Julkaistut",
"pages.status.unlisted": "Listaamaton", "pages.status.unlisted": "Listaamaton",
"pagination.page": "Sivu",
"password": "Salasana", "password": "Salasana",
"pixel": "Pikseli", "pixel": "Pikseli",
"prev": "Edellinen", "prev": "Edellinen",
@@ -374,8 +382,8 @@
"revert": "Palauta", "revert": "Palauta",
"role": "K\u00e4ytt\u00e4j\u00e4taso", "role": "K\u00e4ytt\u00e4j\u00e4taso",
"role.admin.description": "The admin has all rights", "role.admin.description": "Pääkäyttäjällä on kaikki oikeudet",
"role.admin.title": "Admin", "role.admin.title": "Pääkäyttäjä",
"role.all": "Kaikki", "role.all": "Kaikki",
"role.empty": "Tällä käyttäjätasolla ei ole yhtään käyttäjää", "role.empty": "Tällä käyttäjätasolla ei ole yhtään käyttäjää",
"role.description.placeholder": "Ei kuvausta", "role.description.placeholder": "Ei kuvausta",
@@ -384,6 +392,9 @@
"save": "Tallenna", "save": "Tallenna",
"search": "Haku", "search": "Haku",
"section.required": "Osio on pakollinen",
"select": "Valitse", "select": "Valitse",
"settings": "Asetukset", "settings": "Asetukset",
"size": "Koko", "size": "Koko",
@@ -413,15 +424,15 @@
"translation.name": "Suomi", "translation.name": "Suomi",
"upload": "Lähetä", "upload": "Lähetä",
"upload.error.cantMove": "The uploaded file could not be moved", "upload.error.cantMove": "Lähetettyä tiedostoa ei voitu siirtää",
"upload.error.cantWrite": "Failed to write file to disk", "upload.error.cantWrite": "Tiedoston kirjoitus levylle epäonnistui",
"upload.error.default": "The file could not be uploaded", "upload.error.default": "Tiedostoa ei voitu lähettää",
"upload.error.extension": "File upload stopped by extension", "upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form", "upload.error.formSize": "Lähetetyn tiedoston koko ylittää lomakkeen sallitun ylärajan MAX_FILE_SIZE",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini", "upload.error.iniPostSize": "Lähetetyn tiedoston koko ylittää sallitun ylärajan post_max_size asetustiedostossa php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini", "upload.error.iniSize": "Lähetetyn tiedoston koko ylittää sallitun ylärajan upload_max_filesize asetustiedostossa php.ini",
"upload.error.noFile": "No file was uploaded", "upload.error.noFile": "Tiedostoa ei lähetetty",
"upload.error.noFiles": "No files were uploaded", "upload.error.noFiles": "Tiedostoja ei lähetetty",
"upload.error.partial": "The uploaded file was only partially uploaded", "upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder", "upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Virhe", "upload.errors": "Virhe",

View File

@@ -23,6 +23,7 @@
"delete": "Supprimer", "delete": "Supprimer",
"dimensions": "Dimensions", "dimensions": "Dimensions",
"disabled": "Désactivé",
"discard": "Supprimer", "discard": "Supprimer",
"download": "Télécharger", "download": "Télécharger",
"duplicate": "Dupliquer", "duplicate": "Dupliquer",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "La section «&nbsp;{name}&nbsp;» na pu être chargée", "error.section.notLoaded": "La section «&nbsp;{name}&nbsp;» na pu être chargée",
"error.section.type.invalid": "Le type de section «&nbsp;{type}&nbsp;» est incorrect", "error.section.type.invalid": "Le type de section «&nbsp;{type}&nbsp;» est incorrect",
"error.site.changeTitle.empty": "Le titre ne peut être vide",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Vous nêtes pas autorisé à modifier le titre du site", "Vous nêtes pas autorisé à modifier le titre du site",
"error.site.update.permission": "Vous nêtes pas autorisé à modifier le contenu global du site", "error.site.update.permission": "Vous nêtes pas autorisé à modifier le contenu global du site",
@@ -155,6 +157,8 @@
"Le rôle du dernier administrateur ne peut être modifié", "Le rôle du dernier administrateur ne peut être modifié",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Vous nêtes pas autorisé à changer le rôle de lutilisateur « {name} »", "Vous nêtes pas autorisé à changer le rôle de lutilisateur « {name} »",
"error.user.changeRole.toAdmin":
"Vous nêtes pas autorisé à attribuer le rôle dadministrateur aux utilisateurs",
"error.user.create.permission": "Vous nêtes pas autorisé à créer cet utilisateur", "error.user.create.permission": "Vous nêtes pas autorisé à créer cet utilisateur",
"error.user.delete": "Lutilisateur « {name} » ne peut être supprimé", "error.user.delete": "Lutilisateur « {name} » ne peut être supprimé",
"error.user.delete.lastAdmin": "Le dernier administrateur ne peut être supprimé", "error.user.delete.lastAdmin": "Le dernier administrateur ne peut être supprimé",
@@ -219,6 +223,7 @@
"error.validation.time": "Veuillez saisir une heure valide", "error.validation.time": "Veuillez saisir une heure valide",
"error.validation.url": "Veuillez saisir une URL valide", "error.validation.url": "Veuillez saisir une URL valide",
"field.required": "Le champ est obligatoire",
"field.files.empty": "Pas encore de fichier sélectionné", "field.files.empty": "Pas encore de fichier sélectionné",
"field.pages.empty": "Pas encore de page sélectionnée", "field.pages.empty": "Pas encore de page sélectionnée",
"field.structure.delete.confirm": "Voulez-vous vraiment supprimer cette ligne?", "field.structure.delete.confirm": "Voulez-vous vraiment supprimer cette ligne?",
@@ -291,6 +296,7 @@
"loading": "Chargement", "loading": "Chargement",
"lock.unsaved": "Modifications non enregistrées", "lock.unsaved": "Modifications non enregistrées",
"lock.unsaved.empty": "Il ny a plus de modifications non enregistrées",
"lock.isLocked": "Modifications non enregistrées par <strong>{email}</strong>", "lock.isLocked": "Modifications non enregistrées par <strong>{email}</strong>",
"lock.file.isLocked": "Le fichier est actuellement édité par {email} et ne peut être modifié.", "lock.file.isLocked": "Le fichier est actuellement édité par {email} et ne peut être modifié.",
"lock.page.isLocked": "La page est actuellement éditée par {email} et ne peut être modifiée.", "lock.page.isLocked": "La page est actuellement éditée par {email} et ne peut être modifiée.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Publié", "pages.status.listed": "Publié",
"pages.status.unlisted": "Non listé", "pages.status.unlisted": "Non listé",
"pagination.page": "Page",
"password": "Mot de passe", "password": "Mot de passe",
"pixel": "Pixel", "pixel": "Pixel",
"prev": "Précédent", "prev": "Précédent",
@@ -384,6 +392,9 @@
"save": "Enregistrer", "save": "Enregistrer",
"search": "Rechercher", "search": "Rechercher",
"section.required": "Cette section est obligatoire",
"select": "Sélectionner", "select": "Sélectionner",
"settings": "Paramètres", "settings": "Paramètres",
"size": "Poids", "size": "Poids",
@@ -418,8 +429,8 @@
"upload.error.default": "Le fichier na pu être transféré", "upload.error.default": "Le fichier na pu être transféré",
"upload.error.extension": "Le transfert de fichier a été stoppé par une extension", "upload.error.extension": "Le transfert de fichier a été stoppé par une extension",
"upload.error.formSize": "Le fichier transféré excède la directive MAX_FILE_SIZE spécifiée dans le formulaire", "upload.error.formSize": "Le fichier transféré excède la directive MAX_FILE_SIZE spécifiée dans le formulaire",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini", "upload.error.iniPostSize": "Le fichier transféré excède la directive post_max_size spécifiée dans php.ini",
"upload.error.iniSize": "Le fichier transféré excède la directive MAX_FILE_SIZE spécifiée dans php.ini", "upload.error.iniSize": "Le fichier transféré excède la directive upload_max_filesize spécifiée dans php.ini",
"upload.error.noFile": "Aucun fichier na été transféré", "upload.error.noFile": "Aucun fichier na été transféré",
"upload.error.noFiles": "Aucun fichier na été transféré", "upload.error.noFiles": "Aucun fichier na été transféré",
"upload.error.partial": "Le fichier na été que partiellement transféré", "upload.error.partial": "Le fichier na été que partiellement transféré",

View File

@@ -23,6 +23,7 @@
"delete": "T\u00f6rl\u00e9s", "delete": "T\u00f6rl\u00e9s",
"dimensions": "Méretek", "dimensions": "Méretek",
"disabled": "Disabled",
"discard": "Visszavon\u00e1s", "discard": "Visszavon\u00e1s",
"download": "Letöltés", "download": "Letöltés",
"duplicate": "Másolat", "duplicate": "Másolat",
@@ -137,6 +138,7 @@
"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ő",
"error.site.changeTitle.empty": "A cím nem lehet üres",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Nincs jogosultságod megváltoztatni az honlap címét", "Nincs jogosultságod megváltoztatni az honlap címét",
"error.site.update.permission": "Nincs jogosultságod frissíteni a honlapot", "error.site.update.permission": "Nincs jogosultságod frissíteni a honlapot",
@@ -155,6 +157,8 @@
"Az egyedüli adminisztrátor szerepkörét nem lehet megváltoztatni", "Az egyedüli adminisztrátor szerepkörét nem lehet megváltoztatni",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Nincs jogosultságod megváltoztatni \"{name}\" felhasználó szerepkörét", "Nincs jogosultságod megváltoztatni \"{name}\" felhasználó szerepkörét",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.create.permission": "Nincs jogosultságod létrehozni ezt a felhasználót", "error.user.create.permission": "Nincs jogosultságod létrehozni ezt a felhasználót",
"error.user.delete": "A felhaszn\u00e1l\u00f3 nem t\u00f6r\u00f6lhet\u0151", "error.user.delete": "A felhaszn\u00e1l\u00f3 nem t\u00f6r\u00f6lhet\u0151",
"error.user.delete.lastAdmin": "Nem t\u00f6r\u00f6lheted az egyetlen adminisztr\u00e1tort", "error.user.delete.lastAdmin": "Nem t\u00f6r\u00f6lheted az egyetlen adminisztr\u00e1tort",
@@ -219,6 +223,7 @@
"error.validation.time": "Kérlek megfelelő időt adj meg", "error.validation.time": "Kérlek megfelelő időt adj meg",
"error.validation.url": "Kérlek megfelelő URL-t adj meg", "error.validation.url": "Kérlek megfelelő URL-t adj meg",
"field.required": "The field is required",
"field.files.empty": "Nincs fálj kiválasztva", "field.files.empty": "Nincs fálj kiválasztva",
"field.pages.empty": "Nincs oldal kiválasztva", "field.pages.empty": "Nincs oldal kiválasztva",
"field.structure.delete.confirm": "Biztos t\u00f6r\u00f6lni szeretn\u00e9d ezt a bejegyz\u00e9st?", "field.structure.delete.confirm": "Biztos t\u00f6r\u00f6lni szeretn\u00e9d ezt a bejegyz\u00e9st?",
@@ -291,6 +296,7 @@
"loading": "Betöltés", "loading": "Betöltés",
"lock.unsaved": "Nem mentett változások", "lock.unsaved": "Nem mentett változások",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Nem mentett <strong>{email}</strong> változások", "lock.isLocked": "Nem mentett <strong>{email}</strong> változások",
"lock.file.isLocked": "A fájlt jelenleg {email} szerkeszti és nem módosítható.", "lock.file.isLocked": "A fájlt jelenleg {email} szerkeszti és nem módosítható.",
"lock.page.isLocked": "Az oldalt jelenleg {email} szerkeszti és nem módosítható.", "lock.page.isLocked": "Az oldalt jelenleg {email} szerkeszti és nem módosítható.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Publikálva", "pages.status.listed": "Publikálva",
"pages.status.unlisted": "Nem listázott", "pages.status.unlisted": "Nem listázott",
"pagination.page": "Oldal",
"password": "Jelsz\u00f3", "password": "Jelsz\u00f3",
"pixel": "Pixel", "pixel": "Pixel",
"prev": "Előző", "prev": "Előző",
@@ -384,6 +392,9 @@
"save": "Ment\u00e9s", "save": "Ment\u00e9s",
"search": "Keresés", "search": "Keresés",
"section.required": "The section is required",
"select": "Kiválasztás", "select": "Kiválasztás",
"settings": "Beállítások", "settings": "Beállítások",
"size": "Méret", "size": "Méret",

View File

@@ -23,6 +23,7 @@
"delete": "Hapus", "delete": "Hapus",
"dimensions": "Dimensi", "dimensions": "Dimensi",
"disabled": "Dimatikan",
"discard": "Buang", "discard": "Buang",
"download": "Unduh", "download": "Unduh",
"duplicate": "Duplikasi", "duplicate": "Duplikasi",
@@ -37,7 +38,7 @@
"error.access.login": "Upaya masuk tidak valid", "error.access.login": "Upaya masuk tidak valid",
"error.access.panel": "Anda tidak diizinkan mengakses panel", "error.access.panel": "Anda tidak diizinkan mengakses panel",
"error.access.view": "You are not allowed to access this part of the panel", "error.access.view": "Anda tidak diizinkan mengakses bagian panel ini",
"error.avatar.create.fail": "Gambar profil tidak dapat diunggah", "error.avatar.create.fail": "Gambar profil tidak dapat diunggah",
"error.avatar.delete.fail": "Gambar profil tidak dapat dihapus", "error.avatar.delete.fail": "Gambar profil tidak dapat dihapus",
@@ -52,7 +53,7 @@
"error.field.converter.invalid": "Konverter \"{converter}\" tidak valid", "error.field.converter.invalid": "Konverter \"{converter}\" tidak valid",
"error.file.changeName.empty": "The name must not be empty", "error.file.changeName.empty": "Nama harus diisi",
"error.file.changeName.permission": "error.file.changeName.permission":
"Anda tidak diizinkan mengubah nama berkas \"{filename}\"", "Anda tidak diizinkan mengubah nama berkas \"{filename}\"",
"error.file.duplicate": "Berkas dengan nama \"{filename}\" sudah ada", "error.file.duplicate": "Berkas dengan nama \"{filename}\" sudah ada",
@@ -65,7 +66,7 @@
"error.file.mime.forbidden": "Media dengan tipe mime \"{mime}\" tidak diizinkan", "error.file.mime.forbidden": "Media dengan tipe mime \"{mime}\" tidak diizinkan",
"error.file.mime.missing": "error.file.mime.missing":
"Tipe media untuk \"{filename}\" tidak dapat dideteksi", "Tipe media untuk \"{filename}\" tidak dapat dideteksi",
"error.file.name.missing": "Nama berkas tidak boleh kosong", "error.file.name.missing": "Nama berkas harus diisi",
"error.file.notFound": "Berkas \"{filename}\" tidak dapat ditemukan", "error.file.notFound": "Berkas \"{filename}\" tidak dapat ditemukan",
"error.file.type.forbidden": "Anda tidak diizinkan mengunggah berkas dengan tipe {type}", "error.file.type.forbidden": "Anda tidak diizinkan mengunggah berkas dengan tipe {type}",
"error.file.undefined": "Berkas tidak dapat ditemukan", "error.file.undefined": "Berkas tidak dapat ditemukan",
@@ -137,6 +138,7 @@
"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",
"error.site.changeTitle.empty": "Judul harus diisi",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Anda tidak diizinkan mengubah judul situs", "Anda tidak diizinkan mengubah judul situs",
"error.site.update.permission": "Anda tidak diizinkan memperbaharui situs", "error.site.update.permission": "Anda tidak diizinkan memperbaharui situs",
@@ -155,6 +157,8 @@
"Peran dari admin satu-satunya tidak dapat diubah", "Peran dari admin satu-satunya tidak dapat diubah",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Anda tidak diizinkan mengubah peran dari pengguna \"{name}\"", "Anda tidak diizinkan mengubah peran dari pengguna \"{name}\"",
"error.user.changeRole.toAdmin":
"Anda tidak diizinkan mempromosikan seseorang menjadi admin",
"error.user.create.permission": "Anda tidak diizinkan membuat pengguna ini", "error.user.create.permission": "Anda tidak diizinkan membuat pengguna ini",
"error.user.delete": "Pengguna \"{nama}\" tidak dapat dihapus", "error.user.delete": "Pengguna \"{nama}\" tidak dapat dihapus",
"error.user.delete.lastAdmin": "Admin satu-satunya tidak dapat dihapus", "error.user.delete.lastAdmin": "Admin satu-satunya tidak dapat dihapus",
@@ -219,6 +223,7 @@
"error.validation.time": "Masukkan waktu yang valid", "error.validation.time": "Masukkan waktu yang valid",
"error.validation.url": "Masukkan URL yang valid", "error.validation.url": "Masukkan URL yang valid",
"field.required": "Bidang ini wajib",
"field.files.empty": "Belum ada berkas yang dipilih", "field.files.empty": "Belum ada berkas yang dipilih",
"field.pages.empty": "Belum ada halaman yang dipilih", "field.pages.empty": "Belum ada halaman yang dipilih",
"field.structure.delete.confirm": "Anda yakin menghapus baris ini?", "field.structure.delete.confirm": "Anda yakin menghapus baris ini?",
@@ -291,6 +296,7 @@
"loading": "Memuat", "loading": "Memuat",
"lock.unsaved": "Perubahan belum tersimpan", "lock.unsaved": "Perubahan belum tersimpan",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Perubahan belum tersimpan oleh <strong>{email}</strong>", "lock.isLocked": "Perubahan belum tersimpan oleh <strong>{email}</strong>",
"lock.file.isLocked": "Berkas sedang disunting oleh {email} dan tidak dapat diubah.", "lock.file.isLocked": "Berkas sedang disunting oleh {email} dan tidak dapat diubah.",
"lock.page.isLocked": "Halaman sedang disunting oleh {email} dan tidak dapat diubah.", "lock.page.isLocked": "Halaman sedang disunting oleh {email} dan tidak dapat diubah.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Dipublikasikan", "pages.status.listed": "Dipublikasikan",
"pages.status.unlisted": "Tidak tercantum", "pages.status.unlisted": "Tidak tercantum",
"pagination.page": "Halaman",
"password": "Sandi", "password": "Sandi",
"pixel": "Piksel", "pixel": "Piksel",
"prev": "Sebelumnya", "prev": "Sebelumnya",
@@ -384,6 +392,9 @@
"save": "Simpan", "save": "Simpan",
"search": "Cari", "search": "Cari",
"section.required": "Bagian ini wajib",
"select": "Pilih", "select": "Pilih",
"settings": "Pengaturan", "settings": "Pengaturan",
"size": "Ukuran", "size": "Ukuran",
@@ -413,17 +424,17 @@
"translation.name": "Bahasa Indonesia", "translation.name": "Bahasa Indonesia",
"upload": "Unggah", "upload": "Unggah",
"upload.error.cantMove": "The uploaded file could not be moved", "upload.error.cantMove": "Berkas unggahan tidak dapat dipindahkan",
"upload.error.cantWrite": "Failed to write file to disk", "upload.error.cantWrite": "Gagal menyimpan berkas",
"upload.error.default": "The file could not be uploaded", "upload.error.default": "Berkas tidak dapat diunggah",
"upload.error.extension": "File upload stopped by extension", "upload.error.extension": "Unggahan berkas diblokir dengan ekstensi",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form", "upload.error.formSize": "Berkas unggahan mencapai acuan MAX_FILE_SIZE yang diatur di formulir",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini", "upload.error.iniPostSize": "Berkas unggahan mencapai acuan post_max_size di php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini", "upload.error.iniSize": "Berkas unggahan mencapai acuan upload_max_filesize di php.ini",
"upload.error.noFile": "No file was uploaded", "upload.error.noFile": "Tidak ada berkas diunggah",
"upload.error.noFiles": "No files were uploaded", "upload.error.noFiles": "Tidak ada berkas diunggah",
"upload.error.partial": "The uploaded file was only partially uploaded", "upload.error.partial": "Berkas unggahan hanya berhasil diunggah sebagian",
"upload.error.tmpDir": "Missing a temporary folder", "upload.error.tmpDir": "Folder sementara tidak ada",
"upload.errors": "Kesalahan", "upload.errors": "Kesalahan",
"upload.progress": "Mengunggah…", "upload.progress": "Mengunggah…",

View File

@@ -23,6 +23,7 @@
"delete": "Elimina", "delete": "Elimina",
"dimensions": "Dimensioni", "dimensions": "Dimensioni",
"disabled": "Disabled",
"discard": "Abbandona", "discard": "Abbandona",
"download": "Scarica", "download": "Scarica",
"duplicate": "Duplica", "duplicate": "Duplica",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "Non è stato possibile caricare la sezione \"{name}\"", "error.section.notLoaded": "Non è stato possibile caricare la sezione \"{name}\"",
"error.section.type.invalid": "Il tipo di sezione \"{type}\" non è valido", "error.section.type.invalid": "Il tipo di sezione \"{type}\" non è valido",
"error.site.changeTitle.empty": "Il titolo non può essere vuoto",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Non ti è permesso modificare il titolo del sito", "Non ti è permesso modificare il titolo del sito",
"error.site.update.permission": "Non ti è permesso modificare i contenuti globali del sito", "error.site.update.permission": "Non ti è permesso modificare i contenuti globali del sito",
@@ -155,6 +157,8 @@
"Il ruolo dell'ultimo amministratore non può esser cambiato", "Il ruolo dell'ultimo amministratore non può esser cambiato",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Non ti è permesso modificare il ruolo dell'utente \"{name}\"", "Non ti è permesso modificare il ruolo dell'utente \"{name}\"",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.create.permission": "Non ti è permesso creare questo utente", "error.user.create.permission": "Non ti è permesso creare questo utente",
"error.user.delete": "L'utente non pu\u00f2 essere eliminato", "error.user.delete": "L'utente non pu\u00f2 essere eliminato",
"error.user.delete.lastAdmin": "L'ultimo amministratore non può essere eliminato", "error.user.delete.lastAdmin": "L'ultimo amministratore non può essere eliminato",
@@ -219,6 +223,7 @@
"error.validation.time": "Inserisci un orario valido", "error.validation.time": "Inserisci un orario valido",
"error.validation.url": "Inserisci un URL valido", "error.validation.url": "Inserisci un URL valido",
"field.required": "The field is required",
"field.files.empty": "Nessun file selezionato", "field.files.empty": "Nessun file selezionato",
"field.pages.empty": "Nessuna pagina selezionata", "field.pages.empty": "Nessuna pagina selezionata",
"field.structure.delete.confirm": "Vuoi veramente eliminare questo elemento?", "field.structure.delete.confirm": "Vuoi veramente eliminare questo elemento?",
@@ -291,6 +296,7 @@
"loading": "Caricamento", "loading": "Caricamento",
"lock.unsaved": "Modifiche non salvate", "lock.unsaved": "Modifiche non salvate",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Modifiche non salvate di <strong>{email}</strong>", "lock.isLocked": "Modifiche non salvate di <strong>{email}</strong>",
"lock.file.isLocked": "Il file viene attualmente modificato da {email} e non può essere cambiato.", "lock.file.isLocked": "Il file viene attualmente modificato da {email} e non può essere cambiato.",
"lock.page.isLocked": "la pagina viene attualmente modificata da {email} e non può essere cambiata.", "lock.page.isLocked": "la pagina viene attualmente modificata da {email} e non può essere cambiata.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Pubblicato", "pages.status.listed": "Pubblicato",
"pages.status.unlisted": "Non in elenco", "pages.status.unlisted": "Non in elenco",
"pagination.page": "Pagina",
"password": "Password", "password": "Password",
"pixel": "Pixel", "pixel": "Pixel",
"prev": "Precedente", "prev": "Precedente",
@@ -384,6 +392,9 @@
"save": "Salva", "save": "Salva",
"search": "Cerca", "search": "Cerca",
"section.required": "The section is required",
"select": "Seleziona", "select": "Seleziona",
"settings": "Impostazioni", "settings": "Impostazioni",
"size": "Dimensioni", "size": "Dimensioni",

View File

@@ -23,26 +23,27 @@
"delete": "\uc0ad\uc81c", "delete": "\uc0ad\uc81c",
"dimensions": "크기", "dimensions": "크기",
"disabled": "비활성화",
"discard": "무시", "discard": "무시",
"download": "다운로드", "download": "다운로드",
"duplicate": "복제", "duplicate": "복제",
"edit": "\ud3b8\uc9d1", "edit": "\ud3b8\uc9d1",
"dialog.files.empty": "No files to select", "dialog.files.empty": "선택된 파일이 없습니다.",
"dialog.pages.empty": "No pages to select", "dialog.pages.empty": "선택된 페이지가 없습니다.",
"dialog.users.empty": "No users to select", "dialog.users.empty": "선택된 사용자가 없습니다.",
"email": "\uc774\uba54\uc77c \uc8fc\uc18c", "email": "\uc774\uba54\uc77c \uc8fc\uc18c",
"email.placeholder": "mail@example.com", "email.placeholder": "mail@example.com",
"error.access.login": "로그인할 수 없습니다.", "error.access.login": "로그인할 수 없습니다.",
"error.access.panel": "패널에 접근할 권한이 없습니다.", "error.access.panel": "패널에 접근할 권한이 없습니다.",
"error.access.view": "You are not allowed to access this part of the panel", "error.access.view": "패널에 접근할 권한이 없습니다.",
"error.avatar.create.fail": "프로필 이미지를 업로드할 수 없습니다.", "error.avatar.create.fail": "프로필 이미지를 업로드할 수 없습니다.",
"error.avatar.delete.fail": "\ud504\ub85c\ud544 \uc774\ubbf8\uc9c0\ub97c \uc0ad\uc81c\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", "error.avatar.delete.fail": "\ud504\ub85c\ud544 \uc774\ubbf8\uc9c0\ub97c \uc0ad\uc81c\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",
"error.avatar.dimensions.invalid": "error.avatar.dimensions.invalid":
"프로필 이미지의 크기를 가로세로 3,000픽셀 이하로 설정하세요.", "프로필 이미지의 크기를 3,000픽셀 이하로 설정하세요.",
"error.avatar.mime.forbidden": "error.avatar.mime.forbidden":
"\uc5c5\ub85c\ub4dc\ud560 \uc218 \uc5c6\ub294 MIME \ud615\uc2dd\uc785\ub2c8\ub2e4.", "\uc5c5\ub85c\ub4dc\ud560 \uc218 \uc5c6\ub294 MIME \ud615\uc2dd\uc785\ub2c8\ub2e4.",
@@ -52,7 +53,7 @@
"error.field.converter.invalid": "컨버터({converter})가 올바르지 않습니다.", "error.field.converter.invalid": "컨버터({converter})가 올바르지 않습니다.",
"error.file.changeName.empty": "The name must not be empty", "error.file.changeName.empty": "이름을 입력하세요.",
"error.file.changeName.permission": "error.file.changeName.permission":
"파일명({filename})을 변경할 권한이 없습니다.", "파일명({filename})을 변경할 권한이 없습니다.",
"error.file.duplicate": "파일명이 같은 파일({filename})이 있습니다.", "error.file.duplicate": "파일명이 같은 파일({filename})이 있습니다.",
@@ -73,9 +74,9 @@
"error.form.incomplete": "항목에 오류가 있습니다.", "error.form.incomplete": "항목에 오류가 있습니다.",
"error.form.notSaved": "항목을 저장할 수 없습니다.", "error.form.notSaved": "항목을 저장할 수 없습니다.",
"error.language.code": "Please enter a valid code for the language", "error.language.code": "올바른 언어 코드를 입력하세요.",
"error.language.duplicate": "The language already exists", "error.language.duplicate": "이미 등록된 언어입니다.",
"error.language.name": "올바른 언어 입력하세요.", "error.language.name": "올바른 언어명을 입력하세요.",
"error.license.format": "올바른 라이선스 키를 입력하세요.", "error.license.format": "올바른 라이선스 키를 입력하세요.",
"error.license.email": "올바른 이메일 주소를 입력하세요.", "error.license.email": "올바른 이메일 주소를 입력하세요.",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "섹션({name})을 불러올 수 없습니다.", "error.section.notLoaded": "섹션({name})을 불러올 수 없습니다.",
"error.section.type.invalid": "섹션의 형식({type})이 올바르지 않습니다.", "error.section.type.invalid": "섹션의 형식({type})이 올바르지 않습니다.",
"error.site.changeTitle.empty": "제목을 입력하세요.",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"사이트명을 변경할 권한이 없습니다.", "사이트명을 변경할 권한이 없습니다.",
"error.site.update.permission": "사이트의 정보를 변경할 권한이 없습니다.", "error.site.update.permission": "사이트의 정보를 변경할 권한이 없습니다.",
@@ -155,6 +157,8 @@
"최종 관리자의 역할은 변경할 수 없습니다.", "최종 관리자의 역할은 변경할 수 없습니다.",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"사용자({name})의 역할을 변경할 권한이 없습니다.", "사용자({name})의 역할을 변경할 권한이 없습니다.",
"error.user.changeRole.toAdmin":
"다른 사용자를 관리자로 지정할 권한이 없습니다.",
"error.user.create.permission": "사용자를 등록할 권한이 없습니다.", "error.user.create.permission": "사용자를 등록할 권한이 없습니다.",
"error.user.delete": "사용자({name})를 삭제할 수 없습니다.", "error.user.delete": "사용자({name})를 삭제할 수 없습니다.",
"error.user.delete.lastAdmin": "\ucd5c\uc885 \uad00\ub9ac\uc790\ub294 \uc0ad\uc81c\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", "error.user.delete.lastAdmin": "\ucd5c\uc885 \uad00\ub9ac\uc790\ub294 \uc0ad\uc81c\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",
@@ -184,9 +188,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.after": "{date} 이후 날짜를 입력하세요.",
"error.validation.date.before": "Please enter a date before {date}", "error.validation.date.before": "{date} 이전 날짜를 입력하세요.",
"error.validation.date.between": "Please enter a date between {min} and {max}", "error.validation.date.between": "{min}, {max} 사이의 날짜를 입력하세요.",
"error.validation.denied": "취소하세요.", "error.validation.denied": "취소하세요.",
"error.validation.different": "{other}에 포함된 값은 입력할 수 없습니다.", "error.validation.different": "{other}에 포함된 값은 입력할 수 없습니다.",
"error.validation.email": "올바른 이메일 주소를 입력하세요.", "error.validation.email": "올바른 이메일 주소를 입력하세요.",
@@ -219,6 +223,7 @@
"error.validation.time": "올바른 시간을 입력하세요.", "error.validation.time": "올바른 시간을 입력하세요.",
"error.validation.url": "올바른 URL을 입력하세요.", "error.validation.url": "올바른 URL을 입력하세요.",
"field.required": "필드가 필요합니다.",
"field.files.empty": "선택된 파일이 없습니다.", "field.files.empty": "선택된 파일이 없습니다.",
"field.pages.empty": "선택된 페이지가 없습니다.", "field.pages.empty": "선택된 페이지가 없습니다.",
"field.structure.delete.confirm": "이 행을 삭제할까요?", "field.structure.delete.confirm": "이 행을 삭제할까요?",
@@ -254,7 +259,7 @@
"installation.issues.sessions": "폴더(/site/sessions)에 쓰기 권한이 없습니다.", "installation.issues.sessions": "폴더(/site/sessions)에 쓰기 권한이 없습니다.",
"language": "\uc5b8\uc5b4", "language": "\uc5b8\uc5b4",
"language.code": "코드", "language.code": "언어 코드",
"language.convert": "기본 언어로 설정", "language.convert": "기본 언어로 설정",
"language.convert.confirm": "language.convert.confirm":
"이 언어({name})를 기본 언어로 설정할까요? 설정한 뒤에는 복원할 수 없습니다. 번역되지 않은 항목은 올바르게 표시되지 않을 수 있습니다.", "이 언어({name})를 기본 언어로 설정할까요? 설정한 뒤에는 복원할 수 없습니다. 번역되지 않은 항목은 올바르게 표시되지 않을 수 있습니다.",
@@ -266,7 +271,7 @@
"language.direction.ltr": "왼쪽에서 오른쪽", "language.direction.ltr": "왼쪽에서 오른쪽",
"language.direction.rtl": "오른쪽에서 왼쪽", "language.direction.rtl": "오른쪽에서 왼쪽",
"language.locale": "PHP 로캘 문자열", "language.locale": "PHP 로캘 문자열",
"language.locale.warning": "You are using a custom locale set up. Please modify it in the language file in /site/languages", "language.locale.warning": "커스텀 언어 설정를 사용 중입니다. /site/languages 폴더의 언어 파일을 수정하세요.",
"language.name": "이름", "language.name": "이름",
"language.updated": "언어를 변경했습니다.", "language.updated": "언어를 변경했습니다.",
@@ -280,7 +285,7 @@
"license.buy": "라이선스 구매", "license.buy": "라이선스 구매",
"license.register": "등록", "license.register": "등록",
"license.register.help": "license.register.help":
"입력한 이메일 주소로 라이선스 코드를 전송니다. Kirby를 등록하려면 라이선스 코드를 입력하세요.", "이메일 주소로 라이선스 코드를 전송했습니다. Kirby를 등록하려면 라이선스 코드와 이메일 주소를 입력하세요.",
"license.register.label": "라이선스 코드를 입력하세요.", "license.register.label": "라이선스 코드를 입력하세요.",
"license.register.success": "Kirby를 구입해주셔서 감사합니다.", "license.register.success": "Kirby를 구입해주셔서 감사합니다.",
"license.unregistered": "Kirby가 등록되지 않았습니다.", "license.unregistered": "Kirby가 등록되지 않았습니다.",
@@ -291,11 +296,12 @@
"loading": "로딩 중", "loading": "로딩 중",
"lock.unsaved": "수정 사항이 저장되지 않았습니다.", "lock.unsaved": "수정 사항이 저장되지 않았습니다.",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "<strong>{email}</strong>의 수정 사항이 저장되지 않았습니다.", "lock.isLocked": "<strong>{email}</strong>의 수정 사항이 저장되지 않았습니다.",
"lock.file.isLocked": "다른 사용자({email})가 수정 중입니다.", "lock.file.isLocked": "다른 사용자({email})가 수정 중입니다.",
"lock.page.isLocked": "다른 사용자({email}가 수정 중입니다.", "lock.page.isLocked": "다른 사용자({email}가 수정 중입니다.",
"lock.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": "다른 사용자가 내용을 수정했으므로 내용이 저장되지 않았습니다. 저장되지 않은 내용을 내려받아 수동으로 대치할 수 있습니다.",
"login": "\ub85c\uadf8\uc778", "login": "\ub85c\uadf8\uc778",
"login.remember": "로그인 유지", "login.remember": "로그인 유지",
@@ -364,6 +370,8 @@
"pages.status.listed": "발행", "pages.status.listed": "발행",
"pages.status.unlisted": "비공개", "pages.status.unlisted": "비공개",
"pagination.page": "페이지",
"password": "\uc554\ud638", "password": "\uc554\ud638",
"pixel": "픽셀", "pixel": "픽셀",
"prev": "이전", "prev": "이전",
@@ -374,16 +382,19 @@
"revert": "복원", "revert": "복원",
"role": "역할", "role": "역할",
"role.admin.description": "The admin has all rights", "role.admin.description": "관리자는 모든 권한이 있습니다.",
"role.admin.title": "관리자", "role.admin.title": "관리자",
"role.all": "전체 보기", "role.all": "전체 보기",
"role.empty": "이 역할에 해당하는 사용자가 없습니다.", "role.empty": "이 역할에 해당하는 사용자가 없습니다.",
"role.description.placeholder": "설명이 없습니다.", "role.description.placeholder": "설명이 없습니다.",
"role.nobody.description": "This is a fallback role without any permissions", "role.nobody.description": "대체 사용자는 어떤 권한도 없습니다.",
"role.nobody.title": "Nobody", "role.nobody.title": "사용자가 없습니다.",
"save": "\uc800\uc7a5", "save": "\uc800\uc7a5",
"search": "검색", "search": "검색",
"section.required": "섹션이 필요합니다.",
"select": "선택", "select": "선택",
"settings": "설정", "settings": "설정",
"size": "크기", "size": "크기",
@@ -413,17 +424,17 @@
"translation.name": "한국어", "translation.name": "한국어",
"upload": "업로드", "upload": "업로드",
"upload.error.cantMove": "The uploaded file could not be moved", "upload.error.cantMove": "업로드한 파일을 이동할 수 없습니다.",
"upload.error.cantWrite": "Failed to write file to disk", "upload.error.cantWrite": "디스크를 읽을 수 없습니다.",
"upload.error.default": "The file could not be uploaded", "upload.error.default": "파일을 업로드할 수 없습니다.",
"upload.error.extension": "File upload stopped by extension", "upload.error.extension": "파일 확장자를 다시 한번 확인하세요.",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form", "upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini", "upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini", "upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded", "upload.error.noFile": "업로드된 파일이 없습니다.",
"upload.error.noFiles": "No files were uploaded", "upload.error.noFiles": "업로드된 파일이 없습니다.",
"upload.error.partial": "The uploaded file was only partially uploaded", "upload.error.partial": "일부 파일만 업로드했습니다.",
"upload.error.tmpDir": "Missing a temporary folder", "upload.error.tmpDir": "임시 폴더가 없습니다.",
"upload.errors": "오류", "upload.errors": "오류",
"upload.progress": "업로드 중…", "upload.progress": "업로드 중…",
@@ -432,7 +443,7 @@
"user": "사용자", "user": "사용자",
"user.blueprint": "user.blueprint":
"<strong>/site/blueprints/users/{role}.yml</strong> 파일에 옵션을 추가할 수 있습니다.", "<strong>/site/blueprints/users/{role}.yml</strong> 파일에 섹션 및 폼 필드를 추가할 수 있습니다.",
"user.changeEmail": "이메일 주소 변경", "user.changeEmail": "이메일 주소 변경",
"user.changeLanguage": "언어 변경", "user.changeLanguage": "언어 변경",
"user.changeName": "사용자명 변경", "user.changeName": "사용자명 변경",

View File

@@ -23,6 +23,7 @@
"delete": "Pašalinti", "delete": "Pašalinti",
"dimensions": "Išmatavimai", "dimensions": "Išmatavimai",
"disabled": "Išjungta",
"discard": "Atšaukti", "discard": "Atšaukti",
"download": "Parsisiųsti", "download": "Parsisiųsti",
"duplicate": "Kopijuoti", "duplicate": "Kopijuoti",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "Sekcija \"{name}\" negali būti užkrauta", "error.section.notLoaded": "Sekcija \"{name}\" negali būti užkrauta",
"error.section.type.invalid": "Sekcijos tipas \"{type}\" yra neteisingas", "error.section.type.invalid": "Sekcijos tipas \"{type}\" yra neteisingas",
"error.site.changeTitle.empty": "Pavadinimas negali būti tuščias",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Neturite leidimo keisti svetainės pavadinimo", "Neturite leidimo keisti svetainės pavadinimo",
"error.site.update.permission": "Neturite leidimo atnaujinti svetainės", "error.site.update.permission": "Neturite leidimo atnaujinti svetainės",
@@ -155,6 +157,8 @@
"Vienintelio administratoriaus rolės negalima pakeisti", "Vienintelio administratoriaus rolės negalima pakeisti",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Neturite leidimo pakeisti vartotojo \"{name}\" rolės", "Neturite leidimo pakeisti vartotojo \"{name}\" rolės",
"error.user.changeRole.toAdmin":
"Jūs neturite teisių suteikti administratoriaus rolę",
"error.user.create.permission": "Neturite leidimo sukurti šį vartotoją", "error.user.create.permission": "Neturite leidimo sukurti šį vartotoją",
"error.user.delete": "Vartotojo \"{name}\" negalima pašalinti", "error.user.delete": "Vartotojo \"{name}\" negalima pašalinti",
"error.user.delete.lastAdmin": "Vienintelio administratoriaus negalima pašalinti", "error.user.delete.lastAdmin": "Vienintelio administratoriaus negalima pašalinti",
@@ -219,7 +223,8 @@
"error.validation.time": "Prašome įrašyti korektišką laiką", "error.validation.time": "Prašome įrašyti korektišką laiką",
"error.validation.url": "Prašome įrašyti teisingą URL", "error.validation.url": "Prašome įrašyti teisingą URL",
"field.files.empty": "Dar nėra failų", "field.required": "Laukas privalomas",
"field.files.empty": "Pasirinkti",
"field.pages.empty": "Dar nėra puslapių", "field.pages.empty": "Dar nėra puslapių",
"field.structure.delete.confirm": "Ar tikrai norite pašalinti šią eilutę?", "field.structure.delete.confirm": "Ar tikrai norite pašalinti šią eilutę?",
"field.structure.empty": "Dar nėra įrašų", "field.structure.empty": "Dar nėra įrašų",
@@ -229,7 +234,7 @@
"Ar tikrai norite pašalinti <br><strong>{filename}</strong>?", "Ar tikrai norite pašalinti <br><strong>{filename}</strong>?",
"files": "Failai", "files": "Failai",
"files.empty": "Dar nėra failų", "files.empty": "Įkelti",
"hour": "Valanda", "hour": "Valanda",
"insert": "Įterpti", "insert": "Įterpti",
@@ -291,6 +296,7 @@
"loading": "Kraunasi", "loading": "Kraunasi",
"lock.unsaved": "Neišsaugoti pakeitimai", "lock.unsaved": "Neišsaugoti pakeitimai",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Vartotojo <strong>{email}</strong> neišsaugoti pakeitimai", "lock.isLocked": "Vartotojo <strong>{email}</strong> neišsaugoti pakeitimai",
"lock.file.isLocked": "Šį failą dabar redaguoja kitas vartotojas {email}, tad jo negalima pekeisti.", "lock.file.isLocked": "Šį failą dabar redaguoja kitas vartotojas {email}, tad jo negalima pekeisti.",
"lock.page.isLocked": "Šį puslapį dabar redaguoja kitas vartotojas {email}, tad jo negalima pekeisti.", "lock.page.isLocked": "Šį puslapį dabar redaguoja kitas vartotojas {email}, tad jo negalima pekeisti.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Paskelbti", "pages.status.listed": "Paskelbti",
"pages.status.unlisted": "Nerodomi", "pages.status.unlisted": "Nerodomi",
"pagination.page": "Puslapis",
"password": "Slaptažodis", "password": "Slaptažodis",
"pixel": "Pikselis", "pixel": "Pikselis",
"prev": "Ankstesnis", "prev": "Ankstesnis",
@@ -384,6 +392,9 @@
"save": "Išsaugoti", "save": "Išsaugoti",
"search": "Ieškoti", "search": "Ieškoti",
"section.required": "Sekcija privaloma",
"select": "Pasirinkti", "select": "Pasirinkti",
"settings": "Nustatymai", "settings": "Nustatymai",
"size": "Dydis", "size": "Dydis",
@@ -418,7 +429,7 @@
"upload.error.default": "Nepavyko įkelti failo", "upload.error.default": "Nepavyko įkelti failo",
"upload.error.extension": "Neįmanoma įkelti tokio tipo failo", "upload.error.extension": "Neįmanoma įkelti tokio tipo failo",
"upload.error.formSize": "Įkeltas failas viršija MAX_FILE_SIZE nustatymą, kuris buvo nurodytas formoje", "upload.error.formSize": "Įkeltas failas viršija MAX_FILE_SIZE nustatymą, kuris buvo nurodytas formoje",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini", "upload.error.iniPostSize": "Įkeliamas failas viršija post_max_size nustatymą iš php.ini",
"upload.error.iniSize": "Įkeltas failas viršija upload_max_filesize nustatymą faile php.ini", "upload.error.iniSize": "Įkeltas failas viršija upload_max_filesize nustatymą faile php.ini",
"upload.error.noFile": "Failas nebuvo įkeltas", "upload.error.noFile": "Failas nebuvo įkeltas",
"upload.error.noFiles": "Failai nebuvo įkelti", "upload.error.noFiles": "Failai nebuvo įkelti",

View File

@@ -23,6 +23,7 @@
"delete": "Slett", "delete": "Slett",
"dimensions": "Dimensjoner", "dimensions": "Dimensjoner",
"disabled": "Disabled",
"discard": "Forkast", "discard": "Forkast",
"download": "Download", "download": "Download",
"duplicate": "Duplicate", "duplicate": "Duplicate",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "Seksjonen \"{name}\" kunne ikke lastes inn", "error.section.notLoaded": "Seksjonen \"{name}\" kunne ikke lastes inn",
"error.section.type.invalid": "Seksjonstypen \"{type}\" er ikke gyldig", "error.section.type.invalid": "Seksjonstypen \"{type}\" er ikke gyldig",
"error.site.changeTitle.empty": "Tittelen kan ikke være tom",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Du har ikke tillatelse til å endre tittel på siden", "Du har ikke tillatelse til å endre tittel på siden",
"error.site.update.permission": "Du har ikke tillatelse til å oppdatere denne siden", "error.site.update.permission": "Du har ikke tillatelse til å oppdatere denne siden",
@@ -155,6 +157,8 @@
"Rollen for den siste administratoren kan ikke endres", "Rollen for den siste administratoren kan ikke endres",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Du har ikke tillatelse til å endre rollen for brukeren \"{name}\"", "Du har ikke tillatelse til å endre rollen for brukeren \"{name}\"",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.create.permission": "Du har ikke tilgang til å opprette denne brukeren", "error.user.create.permission": "Du har ikke tilgang til å opprette denne brukeren",
"error.user.delete": "Denne brukeren kunne ikke bli slettet", "error.user.delete": "Denne brukeren kunne ikke bli slettet",
"error.user.delete.lastAdmin": "Siste administrator kan ikke slettes", "error.user.delete.lastAdmin": "Siste administrator kan ikke slettes",
@@ -219,6 +223,7 @@
"error.validation.time": "Vennligst angi et gyldig tidspunkt", "error.validation.time": "Vennligst angi et gyldig tidspunkt",
"error.validation.url": "Vennligst skriv inn en gyldig URL", "error.validation.url": "Vennligst skriv inn en gyldig URL",
"field.required": "The field is required",
"field.files.empty": "Ingen filer har blitt valgt", "field.files.empty": "Ingen filer har blitt valgt",
"field.pages.empty": "Ingen side har blitt valgt", "field.pages.empty": "Ingen side har blitt valgt",
"field.structure.delete.confirm": "\u00d8nsker du virkelig \u00e5 slette denne oppf\u00f8ringen?", "field.structure.delete.confirm": "\u00d8nsker du virkelig \u00e5 slette denne oppf\u00f8ringen?",
@@ -291,6 +296,7 @@
"loading": "Laster inn", "loading": "Laster inn",
"lock.unsaved": "Unsaved changes", "lock.unsaved": "Unsaved changes",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>", "lock.isLocked": "Unsaved changes by <strong>{email}</strong>",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.", "lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.", "lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Publisert", "pages.status.listed": "Publisert",
"pages.status.unlisted": "Unotert", "pages.status.unlisted": "Unotert",
"pagination.page": "Side",
"password": "Passord", "password": "Passord",
"pixel": "Piksel", "pixel": "Piksel",
"prev": "Forrige", "prev": "Forrige",
@@ -384,6 +392,9 @@
"save": "Lagre", "save": "Lagre",
"search": "Søk", "search": "Søk",
"section.required": "The section is required",
"select": "Velg", "select": "Velg",
"settings": "Innstillinger", "settings": "Innstillinger",
"size": "Størrelse", "size": "Størrelse",

View File

@@ -23,21 +23,22 @@
"delete": "Verwijderen", "delete": "Verwijderen",
"dimensions": "Dimensies", "dimensions": "Dimensies",
"disabled": "Uitgeschakeld",
"discard": "Annuleren", "discard": "Annuleren",
"download": "Download", "download": "Download",
"duplicate": "Dupliceren", "duplicate": "Dupliceren",
"edit": "Wijzig", "edit": "Wijzig",
"dialog.files.empty": "No files to select", "dialog.files.empty": "Geen bestanden om te selecteren",
"dialog.pages.empty": "No pages to select", "dialog.pages.empty": "Geen pagina's om te selecteren",
"dialog.users.empty": "No users to select", "dialog.users.empty": "Geen gebruikers om te selecteren",
"email": "E-mailadres", "email": "E-mailadres",
"email.placeholder": "mail@voorbeeld.nl", "email.placeholder": "mail@voorbeeld.nl",
"error.access.login": "Ongeldige login", "error.access.login": "Ongeldige login",
"error.access.panel": "Je hebt geen toegang tot het Panel", "error.access.panel": "Je hebt geen toegang tot het Panel",
"error.access.view": "You are not allowed to access this part of the panel", "error.access.view": "Je hebt geen toegangsrechten voor deze zone van het Panel",
"error.avatar.create.fail": "De avatar kon niet worden geupload", "error.avatar.create.fail": "De avatar kon niet worden geupload",
"error.avatar.delete.fail": "De avatar kan niet worden verwijderd", "error.avatar.delete.fail": "De avatar kan niet worden verwijderd",
@@ -52,7 +53,7 @@
"error.field.converter.invalid": "Ongeldige converter \"{converter}\"", "error.field.converter.invalid": "Ongeldige converter \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty", "error.file.changeName.empty": "De naam mag niet leeg zijn",
"error.file.changeName.permission": "error.file.changeName.permission":
"Je hebt geen rechten om de naam te wijzigen van \"{filename}\"", "Je hebt geen rechten om de naam te wijzigen van \"{filename}\"",
"error.file.duplicate": "Er bestaat al een bestand met de naam \"{filename}\"", "error.file.duplicate": "Er bestaat al een bestand met de naam \"{filename}\"",
@@ -73,9 +74,9 @@
"error.form.incomplete": "Verbeter alle fouten in het formulier", "error.form.incomplete": "Verbeter alle fouten in het formulier",
"error.form.notSaved": "Het formulier kon niet worden opgeslagen", "error.form.notSaved": "Het formulier kon niet worden opgeslagen",
"error.language.code": "Please enter a valid code for the language", "error.language.code": "Vul een geldige code voor deze taal in",
"error.language.duplicate": "The language already exists", "error.language.duplicate": "De taal bestaat al",
"error.language.name": "Please enter a valid name for the language", "error.language.name": "Vul een geldige naam voor deze taal in",
"error.license.format": "Vul een gelidge licentie-key in", "error.license.format": "Vul een gelidge licentie-key in",
"error.license.email": "Gelieve een geldig emailadres in te voeren", "error.license.email": "Gelieve een geldig emailadres in te voeren",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "De zone \"{name}\" kan niet worden geladen", "error.section.notLoaded": "De zone \"{name}\" kan niet worden geladen",
"error.section.type.invalid": "Zone-type \"{type}\" is niet geldig", "error.section.type.invalid": "Zone-type \"{type}\" is niet geldig",
"error.site.changeTitle.empty": "De titel mag niet leeg zijn",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Je hebt geen rechten om de titel van de site te wijzigen", "Je hebt geen rechten om de titel van de site te wijzigen",
"error.site.update.permission": "Je hebt geen rechten om de site te updaten", "error.site.update.permission": "Je hebt geen rechten om de site te updaten",
@@ -155,6 +157,8 @@
"De rol van de laatste beheerder kan niet worden gewijzigd", "De rol van de laatste beheerder kan niet worden gewijzigd",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Je hebt geen rechten om de rol van gebruiker \"{name}\" te wijzigen", "Je hebt geen rechten om de rol van gebruiker \"{name}\" te wijzigen",
"error.user.changeRole.toAdmin":
"Je hebt geen rechten om de rol van iemand te wijzigen naar admin",
"error.user.create.permission": "Je hebt geen rechten om deze gebruiker aan te maken", "error.user.create.permission": "Je hebt geen rechten om deze gebruiker aan te maken",
"error.user.delete": "De gebruiker \"{name}\" kan niet worden verwijderd", "error.user.delete": "De gebruiker \"{name}\" kan niet worden verwijderd",
"error.user.delete.lastAdmin": "Je kan de laatste admin niet verwijderen", "error.user.delete.lastAdmin": "Je kan de laatste admin niet verwijderen",
@@ -184,9 +188,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.after": "Vul een datum in na {date}",
"error.validation.date.before": "Please enter a date before {date}", "error.validation.date.before": "Vul een datum in voor {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}", "error.validation.date.between": "Vul een datum in tussen {min} en {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",
@@ -219,6 +223,7 @@
"error.validation.time": "Vul een geldige tijd in", "error.validation.time": "Vul een geldige tijd in",
"error.validation.url": "Vul een geldige URL in", "error.validation.url": "Vul een geldige URL in",
"field.required": "Dit veld is verplicht",
"field.files.empty": "Nog geen bestanden geselecteerd", "field.files.empty": "Nog geen bestanden geselecteerd",
"field.pages.empty": "Nog geen pagina's geselecteerd", "field.pages.empty": "Nog geen pagina's geselecteerd",
"field.structure.delete.confirm": "Wil je deze entry verwijderen?", "field.structure.delete.confirm": "Wil je deze entry verwijderen?",
@@ -290,7 +295,8 @@
"loading": "Laden", "loading": "Laden",
"lock.unsaved": "Unsaved changes", "lock.unsaved": "Niet opgeslagen wijzigingen",
"lock.unsaved.empty": "Er zijn geen niet opgeslagen wijzigingen meer",
"lock.isLocked": "Niet opgeslagen wijzigingen door <strong>{email}</strong>", "lock.isLocked": "Niet opgeslagen wijzigingen door <strong>{email}</strong>",
"lock.file.isLocked": "Dit bestand wordt momenteel bewerkt door {email} en kan niet worden gewijzigd.", "lock.file.isLocked": "Dit bestand wordt momenteel bewerkt door {email} en kan niet worden gewijzigd.",
"lock.page.isLocked": "Deze pagina wordt momenteel bewerkt door {email} en kan niet worden gewijzigd.", "lock.page.isLocked": "Deze pagina wordt momenteel bewerkt door {email} en kan niet worden gewijzigd.",
@@ -348,7 +354,7 @@
"page.draft.create": "Maak concept", "page.draft.create": "Maak concept",
"page.duplicate.appendix": "Kopiëren", "page.duplicate.appendix": "Kopiëren",
"page.duplicate.files": "Kopieer bestanden", "page.duplicate.files": "Kopieer bestanden",
"page.duplicate.pages": "Copy pages", "page.duplicate.pages": "Kopieer pagina's",
"page.status": "Status", "page.status": "Status",
"page.status.draft": "Concept", "page.status.draft": "Concept",
"page.status.draft.description": "page.status.draft.description":
@@ -364,6 +370,8 @@
"pages.status.listed": "Gepubliceerd", "pages.status.listed": "Gepubliceerd",
"pages.status.unlisted": "Niet gepubliceerd", "pages.status.unlisted": "Niet gepubliceerd",
"pagination.page": "Pagina",
"password": "Wachtwoord", "password": "Wachtwoord",
"pixel": "Pixel", "pixel": "Pixel",
"prev": "Vorige", "prev": "Vorige",
@@ -384,6 +392,9 @@
"save": "Opslaan", "save": "Opslaan",
"search": "Zoeken", "search": "Zoeken",
"section.required": "De sectie is verplicht",
"select": "Selecteren", "select": "Selecteren",
"settings": "Opties", "settings": "Opties",
"size": "Grootte", "size": "Grootte",
@@ -413,17 +424,17 @@
"translation.name": "Nederlands", "translation.name": "Nederlands",
"upload": "Upload", "upload": "Upload",
"upload.error.cantMove": "The uploaded file could not be moved", "upload.error.cantMove": "Het geüploadde bestand kon niet worden verplaatst",
"upload.error.cantWrite": "Failed to write file to disk", "upload.error.cantWrite": "Fout bij het schrijven van het bestand naar de schijf",
"upload.error.default": "The file could not be uploaded", "upload.error.default": "Het bestand kan niet worden geüpload",
"upload.error.extension": "File upload stopped by extension", "upload.error.extension": "Kan bestand niet uploaden vanwege de extensie",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form", "upload.error.formSize": "Het geüploadde bestand is groter dan de MAX_FILE_SIZE die is aangegeven in het formulier",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini", "upload.error.iniPostSize": "Het geüploadde bestand is groter dan de post_max_size in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini", "upload.error.iniSize": "Het geüploadde bestand is groter dan de upload_max_filesize in php.ini",
"upload.error.noFile": "No file was uploaded", "upload.error.noFile": "Er is geen bestand geüpload",
"upload.error.noFiles": "No files were uploaded", "upload.error.noFiles": "Er zijn geen bestanden geüpload",
"upload.error.partial": "The uploaded file was only partially uploaded", "upload.error.partial": "Het geüploadde bestand is slechts gedeeltelijk geüpload",
"upload.error.tmpDir": "Missing a temporary folder", "upload.error.tmpDir": "Er mist een tijdelijke map",
"upload.errors": "Foutmelding", "upload.errors": "Foutmelding",
"upload.progress": "Uploaden...", "upload.progress": "Uploaden...",

View File

@@ -23,6 +23,7 @@
"delete": "Usu\u0144", "delete": "Usu\u0144",
"dimensions": "Wymiary", "dimensions": "Wymiary",
"disabled": "Disabled",
"discard": "Odrzu\u0107", "discard": "Odrzu\u0107",
"download": "Pobierz", "download": "Pobierz",
"duplicate": "Zduplikuj", "duplicate": "Zduplikuj",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "Nie udało się załadować sekcji \"{name}\"", "error.section.notLoaded": "Nie udało się załadować sekcji \"{name}\"",
"error.section.type.invalid": "Typ sekcji \"{type}\" jest nieprawidłowy", "error.section.type.invalid": "Typ sekcji \"{type}\" jest nieprawidłowy",
"error.site.changeTitle.empty": "Tytuł nie może być pusty",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Nie masz uprawnień, by zmienić tytuł strony", "Nie masz uprawnień, by zmienić tytuł strony",
"error.site.update.permission": "Nie masz uprawnień, by zaktualizować stronę", "error.site.update.permission": "Nie masz uprawnień, by zaktualizować stronę",
@@ -155,6 +157,8 @@
"Nie można zmienić roli ostatniego administratora", "Nie można zmienić roli ostatniego administratora",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Nie masz uprawnień, by zmienić rolę użytkownika \"{name}\"", "Nie masz uprawnień, by zmienić rolę użytkownika \"{name}\"",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.create.permission": "Nie masz uprawnień, by utworzyć tego użytkownika", "error.user.create.permission": "Nie masz uprawnień, by utworzyć tego użytkownika",
"error.user.delete": "Nie można usunąć użytkownika \"{name}\"", "error.user.delete": "Nie można usunąć użytkownika \"{name}\"",
"error.user.delete.lastAdmin": "Nie można usunąć ostatniego administratora", "error.user.delete.lastAdmin": "Nie można usunąć ostatniego administratora",
@@ -219,6 +223,7 @@
"error.validation.time": "Wprowadź poprawny czas", "error.validation.time": "Wprowadź poprawny czas",
"error.validation.url": "Wprowadź poprawny adres URL", "error.validation.url": "Wprowadź poprawny adres URL",
"field.required": "The field is required",
"field.files.empty": "Nie wybrano jeszcze żadnych plików", "field.files.empty": "Nie wybrano jeszcze żadnych plików",
"field.pages.empty": "Nie wybrano jeszcze żadnych stron", "field.pages.empty": "Nie wybrano jeszcze żadnych stron",
"field.structure.delete.confirm": "Czy na pewno chcesz usunąć ten wiersz?", "field.structure.delete.confirm": "Czy na pewno chcesz usunąć ten wiersz?",
@@ -291,6 +296,7 @@
"loading": "Ładuję", "loading": "Ładuję",
"lock.unsaved": "Niezapisane zmiany", "lock.unsaved": "Niezapisane zmiany",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Niezapisane zmiany autorstwa <strong>{email}</strong>", "lock.isLocked": "Niezapisane zmiany autorstwa <strong>{email}</strong>",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.", "lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.", "lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Opublikowane", "pages.status.listed": "Opublikowane",
"pages.status.unlisted": "Nie katalogowana", "pages.status.unlisted": "Nie katalogowana",
"pagination.page": "Strona",
"password": "Has\u0142o", "password": "Has\u0142o",
"pixel": "Piksel", "pixel": "Piksel",
"prev": "Poprzednie", "prev": "Poprzednie",
@@ -384,6 +392,9 @@
"save": "Zapisz", "save": "Zapisz",
"search": "Szukaj", "search": "Szukaj",
"section.required": "The section is required",
"select": "Wybierz", "select": "Wybierz",
"settings": "Ustawienia", "settings": "Ustawienia",
"size": "Rozmiar", "size": "Rozmiar",

View File

@@ -23,6 +23,7 @@
"delete": "Excluir", "delete": "Excluir",
"dimensions": "Dimensões", "dimensions": "Dimensões",
"disabled": "Disabled",
"discard": "Descartar", "discard": "Descartar",
"download": "Download", "download": "Download",
"duplicate": "Duplicate", "duplicate": "Duplicate",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "A seção \"{name}\" não pôde ser carregada", "error.section.notLoaded": "A seção \"{name}\" não pôde ser carregada",
"error.section.type.invalid": "O tipo da seção \"{type}\" não é válido", "error.section.type.invalid": "O tipo da seção \"{type}\" não é válido",
"error.site.changeTitle.empty": "O título não pode ficar em branco",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Você não tem permissão para alterar o título do site", "Você não tem permissão para alterar o título do site",
"error.site.update.permission": "Você não tem permissão para atualizar o site", "error.site.update.permission": "Você não tem permissão para atualizar o site",
@@ -155,6 +157,8 @@
"O papel do último administrador não pode ser alterado", "O papel do último administrador não pode ser alterado",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Você não tem permissão para alterar o papel do usuário \"{name}\"", "Você não tem permissão para alterar o papel do usuário \"{name}\"",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.create.permission": "Você não tem permissão para criar este usuário", "error.user.create.permission": "Você não tem permissão para criar este usuário",
"error.user.delete": "O usuário \"{name}\" não pode ser excluído", "error.user.delete": "O usuário \"{name}\" não pode ser excluído",
"error.user.delete.lastAdmin": "O último administrador não pode ser excluído", "error.user.delete.lastAdmin": "O último administrador não pode ser excluído",
@@ -219,6 +223,7 @@
"error.validation.time": "Digite uma hora válida", "error.validation.time": "Digite uma hora válida",
"error.validation.url": "Digite uma URL válida", "error.validation.url": "Digite uma URL válida",
"field.required": "The field is required",
"field.files.empty": "Nenhum arquivo selecionado", "field.files.empty": "Nenhum arquivo selecionado",
"field.pages.empty": "Nenhuma página selecionada", "field.pages.empty": "Nenhuma página selecionada",
"field.structure.delete.confirm": "Deseja realmente excluir este registro?", "field.structure.delete.confirm": "Deseja realmente excluir este registro?",
@@ -291,6 +296,7 @@
"loading": "Carregando", "loading": "Carregando",
"lock.unsaved": "Unsaved changes", "lock.unsaved": "Unsaved changes",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>", "lock.isLocked": "Unsaved changes by <strong>{email}</strong>",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.", "lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.", "lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Publicadas", "pages.status.listed": "Publicadas",
"pages.status.unlisted": "Não listadas", "pages.status.unlisted": "Não listadas",
"pagination.page": "Página",
"password": "Senha", "password": "Senha",
"pixel": "Pixel", "pixel": "Pixel",
"prev": "Anterior", "prev": "Anterior",
@@ -384,6 +392,9 @@
"save": "Salvar", "save": "Salvar",
"search": "Buscar", "search": "Buscar",
"section.required": "The section is required",
"select": "Selecionar", "select": "Selecionar",
"settings": "Configurações", "settings": "Configurações",
"size": "Tamanho", "size": "Tamanho",

View File

@@ -23,6 +23,7 @@
"delete": "Excluir", "delete": "Excluir",
"dimensions": "Dimensões", "dimensions": "Dimensões",
"disabled": "Disabled",
"discard": "Descartar", "discard": "Descartar",
"download": "Download", "download": "Download",
"duplicate": "Duplicate", "duplicate": "Duplicate",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "A seção \"{name}\" não pôde ser carregada", "error.section.notLoaded": "A seção \"{name}\" não pôde ser carregada",
"error.section.type.invalid": "O tipo da seção \"{type}\" não é válido", "error.section.type.invalid": "O tipo da seção \"{type}\" não é válido",
"error.site.changeTitle.empty": "O título não pode ficar em branco",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Não tem permissões para alterar o título do site", "Não tem permissões para alterar o título do site",
"error.site.update.permission": "Não tem permissões para atualizar o site", "error.site.update.permission": "Não tem permissões para atualizar o site",
@@ -155,6 +157,8 @@
"A função do último administrador não pode ser alterado", "A função do último administrador não pode ser alterado",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Não tem permissões para alterar a função do utilizador \"{name}\"", "Não tem permissões para alterar a função do utilizador \"{name}\"",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.create.permission": "Não tem permissões para criar este utilizador", "error.user.create.permission": "Não tem permissões para criar este utilizador",
"error.user.delete": "O utilizador \"{name}\" não pode ser excluído", "error.user.delete": "O utilizador \"{name}\" não pode ser excluído",
"error.user.delete.lastAdmin": "O último administrador não pode ser excluído", "error.user.delete.lastAdmin": "O último administrador não pode ser excluído",
@@ -219,6 +223,7 @@
"error.validation.time": "Digite uma hora válida", "error.validation.time": "Digite uma hora válida",
"error.validation.url": "Digite uma URL válida", "error.validation.url": "Digite uma URL válida",
"field.required": "The field is required",
"field.files.empty": "Nenhum arquivo selecionado", "field.files.empty": "Nenhum arquivo selecionado",
"field.pages.empty": "Nenhuma página selecionada", "field.pages.empty": "Nenhuma página selecionada",
"field.structure.delete.confirm": "Deseja realmente excluir este registro?", "field.structure.delete.confirm": "Deseja realmente excluir este registro?",
@@ -291,6 +296,7 @@
"loading": "A carregar", "loading": "A carregar",
"lock.unsaved": "Unsaved changes", "lock.unsaved": "Unsaved changes",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>", "lock.isLocked": "Unsaved changes by <strong>{email}</strong>",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.", "lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.", "lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Publicadas", "pages.status.listed": "Publicadas",
"pages.status.unlisted": "Não listadas", "pages.status.unlisted": "Não listadas",
"pagination.page": "Página",
"password": "Palavra-passe", "password": "Palavra-passe",
"pixel": "Pixel", "pixel": "Pixel",
"prev": "Anterior", "prev": "Anterior",
@@ -384,6 +392,9 @@
"save": "Salvar", "save": "Salvar",
"search": "Buscar", "search": "Buscar",
"section.required": "The section is required",
"select": "Selecionar", "select": "Selecionar",
"settings": "Configurações", "settings": "Configurações",
"size": "Tamanho", "size": "Tamanho",

View File

@@ -23,6 +23,7 @@
"delete": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c", "delete": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c",
"dimensions": "Размеры", "dimensions": "Размеры",
"disabled": "Отключено",
"discard": "\u0421\u0431\u0440\u043e\u0441", "discard": "\u0421\u0431\u0440\u043e\u0441",
"download": "Скачать", "download": "Скачать",
"duplicate": "Дублировать", "duplicate": "Дублировать",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "Секция \"{name}\" не может быть загружена", "error.section.notLoaded": "Секция \"{name}\" не может быть загружена",
"error.section.type.invalid": "Тип секции {type} неверный", "error.section.type.invalid": "Тип секции {type} неверный",
"error.site.changeTitle.empty": "Название не может быть пустым",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"У вас нет права поменять название сайта", "У вас нет права поменять название сайта",
"error.site.update.permission": "У вас нет права обновить сайт", "error.site.update.permission": "У вас нет права обновить сайт",
@@ -155,6 +157,8 @@
"Роль единственного администратора нельзя поменять", "Роль единственного администратора нельзя поменять",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"У вас нет права поменять поль для пользователя \"{name}\"", "У вас нет права поменять поль для пользователя \"{name}\"",
"error.user.changeRole.toAdmin":
"У вас нет прав предоставить роль администратора",
"error.user.create.permission": "У вас нет права создать этого пользователя", "error.user.create.permission": "У вас нет права создать этого пользователя",
"error.user.delete": "\u0410\u043a\u043a\u0430\u0443\u043d\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d", "error.user.delete": "\u0410\u043a\u043a\u0430\u0443\u043d\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d",
"error.user.delete.lastAdmin": "\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430", "error.user.delete.lastAdmin": "\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430",
@@ -219,6 +223,7 @@
"error.validation.time": "Пожалуйста, впишите правильную дату", "error.validation.time": "Пожалуйста, впишите правильную дату",
"error.validation.url": "Пожалуйста, впишите правильный URL", "error.validation.url": "Пожалуйста, впишите правильный URL",
"field.required": "Поле обязательно",
"field.files.empty": "Еще не выбраны файлы", "field.files.empty": "Еще не выбраны файлы",
"field.pages.empty": "Еще не выбраны страницы", "field.pages.empty": "Еще не выбраны страницы",
"field.structure.delete.confirm": "Вы точно хотите удалить эту запись?", "field.structure.delete.confirm": "Вы точно хотите удалить эту запись?",
@@ -291,6 +296,7 @@
"loading": "Загрузка", "loading": "Загрузка",
"lock.unsaved": "Несохраненные изменения", "lock.unsaved": "Несохраненные изменения",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Несохраненные изменения пользователя <strong>{email}</strong>", "lock.isLocked": "Несохраненные изменения пользователя <strong>{email}</strong>",
"lock.file.isLocked": "В данный момент этот файл редактирует {email}, поэтому его нельзя изменить.", "lock.file.isLocked": "В данный момент этот файл редактирует {email}, поэтому его нельзя изменить.",
"lock.page.isLocked": "В данный момент эту страницу редактирует {email}, поэтому его нельзя изменить.", "lock.page.isLocked": "В данный момент эту страницу редактирует {email}, поэтому его нельзя изменить.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Опубликовано", "pages.status.listed": "Опубликовано",
"pages.status.unlisted": "Скрытая", "pages.status.unlisted": "Скрытая",
"pagination.page": "Страница",
"password": "\u041f\u0430\u0440\u043e\u043b\u044c", "password": "\u041f\u0430\u0440\u043e\u043b\u044c",
"pixel": "Пиксель", "pixel": "Пиксель",
"prev": "Предыдущий", "prev": "Предыдущий",
@@ -384,6 +392,9 @@
"save": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c", "save": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c",
"search": "Поиск", "search": "Поиск",
"section.required": "Секция обязательна",
"select": "Выбрать", "select": "Выбрать",
"settings": "Настройка", "settings": "Настройка",
"size": "Размер", "size": "Размер",
@@ -418,7 +429,7 @@
"upload.error.default": "Не получилось загрузить файл", "upload.error.default": "Не получилось загрузить файл",
"upload.error.extension": "Загрузка файла не удалась из за расширения", "upload.error.extension": "Загрузка файла не удалась из за расширения",
"upload.error.formSize": "Загруженный файл больше чем MAX_FILE_SIZE настройка в форме", "upload.error.formSize": "Загруженный файл больше чем MAX_FILE_SIZE настройка в форме",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini", "upload.error.iniPostSize": "Загружаемый файл больше чем post_max_size настройка в php.ini",
"upload.error.iniSize": "Загруженный файл больше чем upload_max_filesize настройка в php.ini", "upload.error.iniSize": "Загруженный файл больше чем upload_max_filesize настройка в php.ini",
"upload.error.noFile": "Файл не был загружен", "upload.error.noFile": "Файл не был загружен",
"upload.error.noFiles": "Файлы не были загружены", "upload.error.noFiles": "Файлы не были загружены",

View File

@@ -23,6 +23,7 @@
"delete": "Zmazať", "delete": "Zmazať",
"dimensions": "Rozmery", "dimensions": "Rozmery",
"disabled": "Disabled",
"discard": "Zahodiť", "discard": "Zahodiť",
"download": "Download", "download": "Download",
"duplicate": "Duplicate", "duplicate": "Duplicate",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "Sekciu \"{name}\" sa nepodarilo nahrať", "error.section.notLoaded": "Sekciu \"{name}\" sa nepodarilo nahrať",
"error.section.type.invalid": "Typ sekcie \"{type}\" nie je platný", "error.section.type.invalid": "Typ sekcie \"{type}\" nie je platný",
"error.site.changeTitle.empty": "Titulok nemôže byť prázdny",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Nemáte povolenie na zmenu titulku pre portál", "Nemáte povolenie na zmenu titulku pre portál",
"error.site.update.permission": "Nemáte povolenie na aktualizovanie portálu", "error.site.update.permission": "Nemáte povolenie na aktualizovanie portálu",
@@ -155,6 +157,8 @@
"Rolu pre posledného administrátora nie je možné zmeniť", "Rolu pre posledného administrátora nie je možné zmeniť",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Nemáte povolenie na zmenu role pre užívateľa \"{name}\"", "Nemáte povolenie na zmenu role pre užívateľa \"{name}\"",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.create.permission": "Nemáte povolenie na vytvorenie tohto užívateľa", "error.user.create.permission": "Nemáte povolenie na vytvorenie tohto užívateľa",
"error.user.delete": "Užívateľa \"{name}\" nie je možné zmazať", "error.user.delete": "Užívateľa \"{name}\" nie je možné zmazať",
"error.user.delete.lastAdmin": "Posledného administrátora nie je možné zmazať", "error.user.delete.lastAdmin": "Posledného administrátora nie je možné zmazať",
@@ -219,6 +223,7 @@
"error.validation.time": "Prosím, zadajte platný čas", "error.validation.time": "Prosím, zadajte platný čas",
"error.validation.url": "Prosím, zadajte platnú URL", "error.validation.url": "Prosím, zadajte platnú URL",
"field.required": "The field is required",
"field.files.empty": "Žiadne súbory zatiaľ neboli zvolené", "field.files.empty": "Žiadne súbory zatiaľ neboli zvolené",
"field.pages.empty": "Žiadne stránky zatiaľ neboli zvolené", "field.pages.empty": "Žiadne stránky zatiaľ neboli zvolené",
"field.structure.delete.confirm": "Ste si istý, že chcete zmazať tento riadok?", "field.structure.delete.confirm": "Ste si istý, že chcete zmazať tento riadok?",
@@ -291,6 +296,7 @@
"loading": "Načítavanie", "loading": "Načítavanie",
"lock.unsaved": "Unsaved changes", "lock.unsaved": "Unsaved changes",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>", "lock.isLocked": "Unsaved changes by <strong>{email}</strong>",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.", "lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.", "lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Zverejnené", "pages.status.listed": "Zverejnené",
"pages.status.unlisted": "Skryté", "pages.status.unlisted": "Skryté",
"pagination.page": "Stránka",
"password": "Heslo", "password": "Heslo",
"pixel": "Pixel", "pixel": "Pixel",
"prev": "Predchádzajúci", "prev": "Predchádzajúci",
@@ -384,6 +392,9 @@
"save": "Uložiť", "save": "Uložiť",
"search": "Hľadať", "search": "Hľadať",
"section.required": "The section is required",
"select": "Zvoliť", "select": "Zvoliť",
"settings": "Nastavenia", "settings": "Nastavenia",
"size": "Veľkosť", "size": "Veľkosť",

View File

@@ -23,6 +23,7 @@
"delete": "Radera", "delete": "Radera",
"dimensions": "Dimensioner", "dimensions": "Dimensioner",
"disabled": "Inaktiverad",
"discard": "Kassera", "discard": "Kassera",
"download": "Ladda ner", "download": "Ladda ner",
"duplicate": "Duplicera", "duplicate": "Duplicera",
@@ -37,7 +38,7 @@
"error.access.login": "Ogiltig inloggning", "error.access.login": "Ogiltig inloggning",
"error.access.panel": "Du saknar behörighet att nå panelen", "error.access.panel": "Du saknar behörighet att nå panelen",
"error.access.view": "You are not allowed to access this part of the panel", "error.access.view": "Du saknar behörighet att nå denna del av panelen",
"error.avatar.create.fail": "Profilbilden kunde inte laddas upp", "error.avatar.create.fail": "Profilbilden kunde inte laddas upp",
"error.avatar.delete.fail": "Profilbilden kunde inte raderas", "error.avatar.delete.fail": "Profilbilden kunde inte raderas",
@@ -52,7 +53,7 @@
"error.field.converter.invalid": "Ogiltig omvandlare \"{converter}\"", "error.field.converter.invalid": "Ogiltig omvandlare \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty", "error.file.changeName.empty": "Namnet får inte vara tomt",
"error.file.changeName.permission": "error.file.changeName.permission":
"Du har inte behörighet att ändra namnet på \"{filename}\"", "Du har inte behörighet att ändra namnet på \"{filename}\"",
"error.file.duplicate": "En fil med namnet \"{filename}\" existerar redan", "error.file.duplicate": "En fil med namnet \"{filename}\" existerar redan",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "Sektionen \"{name}\" kunde inte laddas", "error.section.notLoaded": "Sektionen \"{name}\" kunde inte laddas",
"error.section.type.invalid": "Sektionstypen \"{type}\" är inte giltig", "error.section.type.invalid": "Sektionstypen \"{type}\" är inte giltig",
"error.site.changeTitle.empty": "Titeln får inte vara tom",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Du har inte behörighet att ändra titeln på webbplatsen", "Du har inte behörighet att ändra titeln på webbplatsen",
"error.site.update.permission": "Du har inte behörighet att uppdatera webbplatsen", "error.site.update.permission": "Du har inte behörighet att uppdatera webbplatsen",
@@ -155,6 +157,8 @@
"Rollen för den återstående adminanvändaren kan inte ändras", "Rollen för den återstående adminanvändaren kan inte ändras",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"Du har inte behörighet att ändra rollen för användaren \"{name}\"", "Du har inte behörighet att ändra rollen för användaren \"{name}\"",
"error.user.changeRole.toAdmin":
"Du har inte behörighet att ge någon en administratörsroll",
"error.user.create.permission": "Du har inte behörighet att skapa denna användare", "error.user.create.permission": "Du har inte behörighet att skapa denna användare",
"error.user.delete": "Användaren kan inte raderas", "error.user.delete": "Användaren kan inte raderas",
"error.user.delete.lastAdmin": "Den återstående administratören kan inte raderas", "error.user.delete.lastAdmin": "Den återstående administratören kan inte raderas",
@@ -219,6 +223,7 @@
"error.validation.time": "Ange en giltig tid", "error.validation.time": "Ange en giltig tid",
"error.validation.url": "Ange en giltig URL", "error.validation.url": "Ange en giltig URL",
"field.required": "Fältet krävs",
"field.files.empty": "Inga filer valda än", "field.files.empty": "Inga filer valda än",
"field.pages.empty": "Inga sidor valda än", "field.pages.empty": "Inga sidor valda än",
"field.structure.delete.confirm": "Vill du verkligen radera denna rad?", "field.structure.delete.confirm": "Vill du verkligen radera denna rad?",
@@ -291,6 +296,7 @@
"loading": "Laddar", "loading": "Laddar",
"lock.unsaved": "Osparade ändringar", "lock.unsaved": "Osparade ändringar",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Osparade ändringar av <strong>{email}</strong>", "lock.isLocked": "Osparade ändringar av <strong>{email}</strong>",
"lock.file.isLocked": "Filen redigeras just nu av {email} och kan inte redigeras.", "lock.file.isLocked": "Filen redigeras just nu av {email} och kan inte redigeras.",
"lock.page.isLocked": "Sidan redigeras just nu av {email} och kan inte redigeras.", "lock.page.isLocked": "Sidan redigeras just nu av {email} och kan inte redigeras.",
@@ -364,6 +370,8 @@
"pages.status.listed": "Publicerade", "pages.status.listed": "Publicerade",
"pages.status.unlisted": "Olistade", "pages.status.unlisted": "Olistade",
"pagination.page": "Sida",
"password": "L\u00f6senord", "password": "L\u00f6senord",
"pixel": "Pixel", "pixel": "Pixel",
"prev": "Föregående", "prev": "Föregående",
@@ -384,6 +392,9 @@
"save": "Spara", "save": "Spara",
"search": "Sök", "search": "Sök",
"section.required": "Sektionen krävs",
"select": "Välj", "select": "Välj",
"settings": "Inställningar", "settings": "Inställningar",
"size": "Storlek", "size": "Storlek",
@@ -413,17 +424,17 @@
"translation.name": "Svenska", "translation.name": "Svenska",
"upload": "Ladda upp", "upload": "Ladda upp",
"upload.error.cantMove": "The uploaded file could not be moved", "upload.error.cantMove": "Den överförda filen kunde inte flyttas",
"upload.error.cantWrite": "Failed to write file to disk", "upload.error.cantWrite": "Det gick inte att skriva filen till hårddisken",
"upload.error.default": "The file could not be uploaded", "upload.error.default": "Filen kunde inte laddas upp",
"upload.error.extension": "File upload stopped by extension", "upload.error.extension": "Filuppladdningen förhindrades på grund av filändelsen",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form", "upload.error.formSize": "Den överförda filen överskrider den maximala filstorlek som anges i formuläret (MAX_FILE_SIZE)",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini", "upload.error.iniPostSize": "Den överförda filen överskrider post_max_size-direktivet i php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini", "upload.error.iniSize": "Den överförda filen överskrider direktivet upload_max_filesize i php.ini",
"upload.error.noFile": "No file was uploaded", "upload.error.noFile": "Ingen fil laddades upp",
"upload.error.noFiles": "No files were uploaded", "upload.error.noFiles": "Inga filer laddades upp",
"upload.error.partial": "The uploaded file was only partially uploaded", "upload.error.partial": "Den överförda filen laddades bara delvis upp",
"upload.error.tmpDir": "Missing a temporary folder", "upload.error.tmpDir": "Saknar en temporär mapp",
"upload.errors": "Fel", "upload.errors": "Fel",
"upload.progress": "Laddar upp...", "upload.progress": "Laddar upp...",

View File

@@ -23,6 +23,7 @@
"delete": "Sil", "delete": "Sil",
"dimensions": "Boyutlar", "dimensions": "Boyutlar",
"disabled": "Devredışı",
"discard": "Vazge\u00e7", "discard": "Vazge\u00e7",
"download": "İndir", "download": "İndir",
"duplicate": "Kopyala", "duplicate": "Kopyala",
@@ -137,6 +138,7 @@
"error.section.notLoaded": "\"{name}\" bölümü yüklenemedi", "error.section.notLoaded": "\"{name}\" bölümü yüklenemedi",
"error.section.type.invalid": "\"{type}\" tipi geçerli değil", "error.section.type.invalid": "\"{type}\" tipi geçerli değil",
"error.site.changeTitle.empty": "Başlık boş bırakılamaz",
"error.site.changeTitle.permission": "error.site.changeTitle.permission":
"Sitenin başlığını değiştiremezsin", "Sitenin başlığını değiştiremezsin",
"error.site.update.permission": "Siteyi güncellemenize izin verilmiyor", "error.site.update.permission": "Siteyi güncellemenize izin verilmiyor",
@@ -155,6 +157,8 @@
"Son yöneticinin rolü değiştirilemez", "Son yöneticinin rolü değiştirilemez",
"error.user.changeRole.permission": "error.user.changeRole.permission":
"\"{name}\" kullanıcısının rolünü değiştiremezsin", "\"{name}\" kullanıcısının rolünü değiştiremezsin",
"error.user.changeRole.toAdmin":
"Birini yönetici rolüne tanıtmanıza izin verilmiyor",
"error.user.create.permission": "Bu kullanıcıyı oluşturmanıza izin verilmiyor", "error.user.create.permission": "Bu kullanıcıyı oluşturmanıza izin verilmiyor",
"error.user.delete": "\"{name}\" kullanıcısı silinemedi", "error.user.delete": "\"{name}\" kullanıcısı silinemedi",
"error.user.delete.lastAdmin": "Son y\u00f6netici kullan\u0131c\u0131y\u0131 silemezsiniz", "error.user.delete.lastAdmin": "Son y\u00f6netici kullan\u0131c\u0131y\u0131 silemezsiniz",
@@ -219,6 +223,7 @@
"error.validation.time": "Lütfen geçerli bir zaman girin", "error.validation.time": "Lütfen geçerli bir zaman girin",
"error.validation.url": "Lütfen geçerli bir adres girin", "error.validation.url": "Lütfen geçerli bir adres girin",
"field.required": "Alan gereklidir",
"field.files.empty": "Henüz dosya seçilmedi", "field.files.empty": "Henüz dosya seçilmedi",
"field.pages.empty": "Henüz sayfa seçilmedi", "field.pages.empty": "Henüz sayfa seçilmedi",
"field.structure.delete.confirm": "Bu girdiyi silmek istedi\u011finizden emin misiniz?", "field.structure.delete.confirm": "Bu girdiyi silmek istedi\u011finizden emin misiniz?",
@@ -291,6 +296,7 @@
"loading": "Yükleniyor", "loading": "Yükleniyor",
"lock.unsaved": "Kaydedilmemiş değişiklikler", "lock.unsaved": "Kaydedilmemiş değişiklikler",
"lock.unsaved.empty": "Daha fazla kaydedilmemiş değişiklik yok",
"lock.isLocked": "<strong>{email}</strong> tarafından kaydedilmemiş değişiklikler", "lock.isLocked": "<strong>{email}</strong> tarafından kaydedilmemiş değişiklikler",
"lock.file.isLocked": "Dosya şu anda {email} tarafından düzenlenmektedir ve değiştirilemez.", "lock.file.isLocked": "Dosya şu anda {email} tarafından düzenlenmektedir ve değiştirilemez.",
"lock.page.isLocked": "Sayfa şu anda {email} tarafından düzenlenmektedir ve değiştirilemez.", "lock.page.isLocked": "Sayfa şu anda {email} tarafından düzenlenmektedir ve değiştirilemez.",
@@ -346,7 +352,7 @@
"<strong>Bu sayfada alt sayfalar var</strong>. <br>Tüm alt sayfalar da silinecek.", "<strong>Bu sayfada alt sayfalar var</strong>. <br>Tüm alt sayfalar da silinecek.",
"page.delete.confirm.title": "Onaylamak için sayfa başlığını girin", "page.delete.confirm.title": "Onaylamak için sayfa başlığını girin",
"page.draft.create": "Taslak oluştur", "page.draft.create": "Taslak oluştur",
"page.duplicate.appendix": "Kopyala", "page.duplicate.appendix": "Kopya",
"page.duplicate.files": "Dosyaları kopyala", "page.duplicate.files": "Dosyaları kopyala",
"page.duplicate.pages": "Sayfaları kopyala", "page.duplicate.pages": "Sayfaları kopyala",
"page.status": "Durum", "page.status": "Durum",
@@ -364,6 +370,8 @@
"pages.status.listed": "Yayınlandı", "pages.status.listed": "Yayınlandı",
"pages.status.unlisted": "Liste Dışı", "pages.status.unlisted": "Liste Dışı",
"pagination.page": "Sayfa",
"password": "\u015eifre", "password": "\u015eifre",
"pixel": "Piksel", "pixel": "Piksel",
"prev": "Önceki", "prev": "Önceki",
@@ -384,6 +392,9 @@
"save": "Kaydet", "save": "Kaydet",
"search": "Arama", "search": "Arama",
"section.required": "Bölüm gereklidir",
"select": "Seç", "select": "Seç",
"settings": "Ayarlar", "settings": "Ayarlar",
"size": "Boyut", "size": "Boyut",
@@ -418,7 +429,7 @@
"upload.error.default": "Dosya yüklenemedi", "upload.error.default": "Dosya yüklenemedi",
"upload.error.extension": "Dosya yükleme uzantısı tarafından durduruldu", "upload.error.extension": "Dosya yükleme uzantısı tarafından durduruldu",
"upload.error.formSize": "Yüklenen dosya, formda belirtilen MAX_FILE_SIZE yönergesini aşıyor", "upload.error.formSize": "Yüklenen dosya, formda belirtilen MAX_FILE_SIZE yönergesini aşıyor",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini", "upload.error.iniPostSize": "Yüklenen dosya php.ini içindeki post_max_size yönergesini aşıyor",
"upload.error.iniSize": "Yüklenen dosya php.ini içindeki upload_max_filesize yönergesini aşıyor", "upload.error.iniSize": "Yüklenen dosya php.ini içindeki upload_max_filesize yönergesini aşıyor",
"upload.error.noFile": "Dosya yüklenmedi", "upload.error.noFile": "Dosya yüklenmedi",
"upload.error.noFiles": "Dosyalar yüklenmedi", "upload.error.noFiles": "Dosyalar yüklenmedi",

File diff suppressed because one or more lines are too long

View File

@@ -30,12 +30,32 @@
<symbol id="icon-bars" viewBox="0 0 16 16"> <symbol id="icon-bars" viewBox="0 0 16 16">
<path d="M15 7H1c-.6 0-1 .4-1 1s.4 1 1 1h14c.6 0 1-.4 1-1s-.4-1-1-1zM15 1H1c-.6 0-1 .4-1 1s.4 1 1 1h14c.6 0 1-.4 1-1s-.4-1-1-1zM15 13H1c-.6 0-1 .4-1 1s.4 1 1 1h14c.6 0 1-.4 1-1s-.4-1-1-1z" /> <path d="M15 7H1c-.6 0-1 .4-1 1s.4 1 1 1h14c.6 0 1-.4 1-1s-.4-1-1-1zM15 1H1c-.6 0-1 .4-1 1s.4 1 1 1h14c.6 0 1-.4 1-1s-.4-1-1-1zM15 13H1c-.6 0-1 .4-1 1s.4 1 1 1h14c.6 0 1-.4 1-1s-.4-1-1-1z" />
</symbol> </symbol>
<symbol id="icon-bell" viewBox="0 0 16 16">
<path d="M10,14H6c0,1.1,0.9,2,2,2S10,15.1,10,14z"/>
<path d="M15,11h-0.5C13.8,10.3,13,9.3,13,8V5c0-2.8-2.2-5-5-5S3,2.2,3,5v3c0,1.3-0.8,2.3-1.5,3H1c-0.6,0-1,0.4-1,1 s0.4,1,1,1h14c0.6,0,1-0.4,1-1S15.6,11,15,11z"/>
</symbol>
<symbol id="icon-bold" viewBox="0 0 16 16"> <symbol id="icon-bold" viewBox="0 0 16 16">
<path d="M11.561 7.316a3.485 3.485 0 0 0 1.418-3.208C12.781 2.305 11.144.999 9.33.999H2.001v1l1.447.724a1 1 0 0 1 .553.894v8.764a.998.998 0 0 1-.553.894l-1.447.724v1h7.823c2.104 0 3.98-1.547 4.162-3.643a4 4 0 0 0-2.424-4.04zM7 3h1a2 2 0 1 1 0 4H7V3zm2 10H7V9h2a2 2 0 1 1 0 4z" /> <path d="M11.561 7.316a3.485 3.485 0 0 0 1.418-3.208C12.781 2.305 11.144.999 9.33.999H2.001v1l1.447.724a1 1 0 0 1 .553.894v8.764a.998.998 0 0 1-.553.894l-1.447.724v1h7.823c2.104 0 3.98-1.547 4.162-3.643a4 4 0 0 0-2.424-4.04zM7 3h1a2 2 0 1 1 0 4H7V3zm2 10H7V9h2a2 2 0 1 1 0 4z" />
</symbol> </symbol>
<symbol id="icon-bolt" viewBox="0 0 16 16"> <symbol id="icon-bolt" viewBox="0 0 16 16">
<path d="M9.2 0H5.4c-.4 0-.8.3-1 .7l-2 7c-.2.7.3 1.3.9 1.3H7l-1.5 7 7.3-9.4c.5-.6 0-1.6-.8-1.6H9l1.1-3.7C10.3.6 9.8 0 9.2 0z" /> <path d="M9.2 0H5.4c-.4 0-.8.3-1 .7l-2 7c-.2.7.3 1.3.9 1.3H7l-1.5 7 7.3-9.4c.5-.6 0-1.6-.8-1.6H9l1.1-3.7C10.3.6 9.8 0 9.2 0z" />
</symbol> </symbol>
<symbol id="icon-book" viewBox="0 0 16 16">
<path d="M7.6,15.9l-7-3C0.2,12.8,0,12.4,0,12V1c0-0.7,0.7-1.2,1.4-0.9L8,2.9l6.6-2.8C15.3-0.2,16,0.3,16,1v11 c0,0.4-0.2,0.8-0.6,0.9l-7,3C8.1,16,7.9,16,7.6,15.9z M2,11.3l6,2.6l6-2.6V2.5L8.4,4.9C8.1,5,7.9,5,7.6,4.9L2,2.5V11.3z"/>
<rect x="2.8" y="6.2" transform="matrix(0.9191 0.3939 -0.3939 0.9191 3.0495 -1.4271)" width="4.4" height="1"/>
<rect x="2.8" y="9.4" transform="matrix(0.9191 0.3939 -0.3939 0.9191 4.2872 -1.173)" width="4.4" height="1"/>
<rect x="10.5" y="4.5" transform="matrix(0.3937 0.9192 -0.9192 0.3937 12.8415 -6.0395)" width="1" height="4.4"/>
<rect x="10.5" y="7.7" transform="matrix(0.3937 0.9192 -0.9192 0.3937 15.7298 -4.1344)" width="1" height="4.4"/>
</symbol>
<symbol id="icon-bookmark" viewBox="0 0 16 16">
<path d="M4,0C2.9,0,2,0.9,2,2v14l6-3l6,3V2c0-1.1-0.9-2-2-2H4z"/>
</symbol>
<symbol id="icon-box" viewBox="0 0 16 16">
<path d="M15.4,3.1l-7-3C8.1,0,7.9,0,7.6,0.1l-7,3C0.2,3.2,0,3.6,0,4v8c0,0.4,0.2,0.8,0.6,0.9l7,3C7.7,16,7.9,16,8,16 s0.3,0,0.4-0.1l7-3c0.4-0.2,0.6-0.5,0.6-0.9V4C16,3.6,15.8,3.2,15.4,3.1z M8,2.1L12.5,4L8,5.9L3.5,4L8,2.1z M2,5.5l5,2.1v5.8l-5-2.1 V5.5z M9,13.5V7.7l5-2.1v5.8L9,13.5z"/>
</symbol>
<symbol id="icon-bug" viewBox="0 0 16 16">
<path d="M16,4V3h-2v1c0,0.6-0.4,1-1,1h-1c-0.3-0.4-0.6-0.7-1-1V3c0-1.7-1.3-3-3-3S5,1.3,5,3v1C4.6,4.3,4.3,4.6,4,5H3 C2.4,5,2,4.6,2,4V3H0v1c0,1.7,1.3,3,3,3h0.1C3,7.3,3,7.7,3,8H0v2h3v1c-1.7,0-3,1.3-3,3v1h2v-1c0-0.6,0.4-1,1-1h0.4 C4.2,14.8,6,16,8,16s3.8-1.2,4.6-3H13c0.6,0,1,0.4,1,1v1h2v-1c0-1.7-1.3-3-3-3v-1h3V8h-3c0-0.3,0-0.7-0.1-1H13C14.7,7,16,5.7,16,4z"/>
</symbol>
<symbol id="icon-calendar" viewBox="0 0 16 16"> <symbol id="icon-calendar" viewBox="0 0 16 16">
<path d="M15 2h-2V0h-2v2H9V0H7v2H5V0H3v2H1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1zm-1 12H2V5h12v9z" /> <path d="M15 2h-2V0h-2v2H9V0H7v2H5V0H3v2H1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1zm-1 12H2V5h12v9z" />
<path d="M4 7h2v2H4V7zM7 7h2v2H7V7zM4 10h2v2H4v-2zM7 10h2v2H7v-2zM10 7h2v2h-2V7zM10 10h2v2h-2v-2z" /> <path d="M4 7h2v2H4V7zM7 7h2v2H7V7zM4 10h2v2H4v-2zM7 10h2v2H7v-2zM10 7h2v2h-2V7zM10 10h2v2h-2v-2z" />
@@ -44,10 +64,40 @@
<path d="M10.1 4.5L8 6.6 5.9 4.5 4.5 5.9 6.6 8l-2.1 2.1 1.4 1.4L8 9.4l2.1 2.1 1.4-1.4L9.4 8l2.1-2.1z" /> <path d="M10.1 4.5L8 6.6 5.9 4.5 4.5 5.9 6.6 8l-2.1 2.1 1.4 1.4L8 9.4l2.1 2.1 1.4-1.4L9.4 8l2.1-2.1z" />
<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z" /> <path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z" />
</symbol> </symbol>
<symbol id="icon-car" viewBox="0 0 16 16">
<path d="M15.9,8.6L15,6.7l-1-5.9C13.9,0.4,13.5,0,13,0H3C2.5,0,2.1,0.4,2,0.8L1,6.7L0.1,8.6C0,8.7,0,8.8,0,9v4 c0,0.6,0.4,1,1,1v1c0,0.6,0.4,1,1,1h2c0.6,0,1-0.4,1-1v-1h6v1c0,0.6,0.4,1,1,1h2c0.6,0,1-0.4,1-1v-1c0.6,0,1-0.4,1-1V9 C16,8.8,16,8.7,15.9,8.6z M3.8,2h8.3l0.7,4H3.2L3.8,2z M2,12V9.2L2.6,8h10.8L14,9.2V12H2z"/>
<circle cx="4" cy="10" r="1"/>
<circle cx="12" cy="10" r="1"/>
</symbol>
<symbol id="icon-cart" viewBox="0 0 16 16">
<path d="M15,3H4.5L4,0.8C3.9,0.3,3.5,0,3,0H0v2h2.2L4,10.2C4.1,10.7,4.5,11,5,11h8c0.4,0,0.8-0.3,0.9-0.7l2-6 C16.1,3.8,15.8,3,15,3z" />
<circle cx="5" cy="14" r="2" />
<circle cx="13" cy="14" r="2" />
</symbol>
<symbol id="icon-chart" viewBox="0 0 16 16">
<path d="M1,15h13c0.552,0,1-0.448,1-1v0c0-0.552-0.448-1-1-1H1c-0.552,0-1,0.448-1,1v0 C0,14.552,0.448,15,1,15z"/>
<rect x="6" y="1" width="3" height="10"/>
<rect x="1" y="5" width="3" height="6"/>
<rect x="11" y="7" width="3" height="4"/>
</symbol>
<symbol id="icon-chat" viewBox="0 0 16 16">
<path d="M15,4h-1v6c0,0.552-0.448,1-1,1H6.828L5,13h5l3,3v-3h2c0.552,0,1-0.448,1-1V5 C16,4.448,15.552,4,15,4z"/>
<path d="M1,0h10c0.552,0,1,0.448,1,1v7c0,0.552-0.448,1-1,1H6l-3,3V9H1C0.448,9,0,8.552,0,8V1C0,0.448,0.448,0,1,0z"/>
</symbol>
<symbol id="icon-check" viewBox="0 0 16 16"> <symbol id="icon-check" viewBox="0 0 16 16">
<path d="M8 0C3.589 0 0 3.589 0 8s3.589 8 8 8 8-3.589 8-8-3.589-8-8-8zm0 14c-3.309 0-6-2.691-6-6s2.691-6 6-6 6 2.691 6 6-2.691 6-6 6z" /> <path d="M8 0C3.589 0 0 3.589 0 8s3.589 8 8 8 8-3.589 8-8-3.589-8-8-8zm0 14c-3.309 0-6-2.691-6-6s2.691-6 6-6 6 2.691 6 6-2.691 6-6 6z" />
<path d="M7 11.414L3.586 8 5 6.586l2 2 4-4L12.414 6z" /> <path d="M7 11.414L3.586 8 5 6.586l2 2 4-4L12.414 6z" />
</symbol> </symbol>
<symbol id="icon-circle" viewBox="0 0 16 16">
<circle cx="8" cy="8" r="8" />
</symbol>
<symbol id="icon-circle-filled" viewBox="0 0 16 16">
<path d="M8,0C3.6,0,0,3.6,0,8s3.6,8,8,8s8-3.6,8-8S12.4,0,8,0z M8,14c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6 S11.3,14,8,14z" />
<circle cx="8" cy="8" r="4" />
</symbol>
<symbol id="icon-circle-outline" viewBox="0 0 16 16">
<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z" />
</symbol>
<symbol id="icon-clock" viewBox="0 0 16 16"> <symbol id="icon-clock" viewBox="0 0 16 16">
<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z" /> <path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z" />
<path d="M9 4H7v5h5V7H9z" /> <path d="M9 4H7v5h5V7H9z" />
@@ -65,6 +115,10 @@
<path d="M10 4H2c-.6 0-1 .4-1 1v10c0 .6.4 1 1 1h8c.6 0 1-.4 1-1V5c0-.6-.4-1-1-1z" /> <path d="M10 4H2c-.6 0-1 .4-1 1v10c0 .6.4 1 1 1h8c.6 0 1-.4 1-1V5c0-.6-.4-1-1-1z" />
<path d="M14 0H4v2h9v11h2V1c0-.6-.4-1-1-1z" /> <path d="M14 0H4v2h9v11h2V1c0-.6-.4-1-1-1z" />
</symbol> </symbol>
<symbol id="icon-credit-card" viewBox="0 0 16 16">
<path d="M16,5V3c0-0.6-0.4-1-1-1H1C0.4,2,0,2.4,0,3v2H16z"/>
<path d="M0,7v6c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1V7H0z M6,11H2v-1h4V11z M14,11h-2v-1h2V11z"/>
</symbol>
<symbol id="icon-dashboard" viewBox="0 0 16 16"> <symbol id="icon-dashboard" viewBox="0 0 16 16">
<path d="M6 9H1a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1zM6 16H1a1 1 0 0 1-1-1v-3a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1zM15 6h-5a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1zM15 16h-5a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1z" /> <path d="M6 9H1a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1zM6 16H1a1 1 0 0 1-1-1v-3a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1zM15 6h-5a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1zM15 16h-5a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1z" />
</symbol> </symbol>
@@ -159,6 +213,9 @@
<path d="M28,32H0V0h28V32z M2,30h24V2H2V30z" /> <path d="M28,32H0V0h28V32z M2,30h24V2H2V30z" />
<path d="M19.5,22h-11C6.6,22,5,20.4,5,18.5c0-1.8,1.3-3.3,3.1-3.5c0.5-2.8,2.9-5,5.9-5s5.5,2.2,5.9,5 c1.7,0.2,3.1,1.7,3.1,3.5C23,20.4,21.4,22,19.5,22z M8.5,17C7.7,17,7,17.7,7,18.5S7.7,20,8.5,20h11c0.8,0,1.5-0.7,1.5-1.5 S20.3,17,19.5,17c-0.1,0-0.2,0-0.3,0L18,17.3l0-1.3c0-2.2-1.8-3.9-4-3.9c-2.2,0-4,1.8-4,3.9l0,0.1v1.2L8.8,17C8.7,17,8.6,17,8.5,17 z" /> <path d="M19.5,22h-11C6.6,22,5,20.4,5,18.5c0-1.8,1.3-3.3,3.1-3.5c0.5-2.8,2.9-5,5.9-5s5.5,2.2,5.9,5 c1.7,0.2,3.1,1.7,3.1,3.5C23,20.4,21.4,22,19.5,22z M8.5,17C7.7,17,7,17.7,7,18.5S7.7,20,8.5,20h11c0.8,0,1.5-0.7,1.5-1.5 S20.3,17,19.5,17c-0.1,0-0.2,0-0.3,0L18,17.3l0-1.3c0-2.2-1.8-3.9-4-3.9c-2.2,0-4,1.8-4,3.9l0,0.1v1.2L8.8,17C8.7,17,8.6,17,8.5,17 z" />
</symbol> </symbol>
<symbol id="icon-folder" viewBox="0 0 16 16">
<path d="M15,3H8V1c0-0.6-0.4-1-1-1H1C0.4,0,0,0.4,0,1v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1V4C16,3.4,15.6,3,15,3z M6,2v2c0,0.6,0.4,1,1,1h7v2H2V2H6z M2,14V9h12v5H2z"/>
</symbol>
<symbol id="icon-funnel" viewBox="0 0 16 16"> <symbol id="icon-funnel" viewBox="0 0 16 16">
<path d="M9 15H7a1 1 0 0 1 0-2h2a1 1 0 0 1 0 2zM11 11H5a1 1 0 0 1 0-2h6a1 1 0 0 1 0 2zM13 7H3a1 1 0 0 1 0-2h10a1 1 0 0 1 0 2zM15 3H1a1 1 0 0 1 0-2h14a1 1 0 0 1 0 2z" /> <path d="M9 15H7a1 1 0 0 1 0-2h2a1 1 0 0 1 0 2zM11 11H5a1 1 0 0 1 0-2h6a1 1 0 0 1 0 2zM13 7H3a1 1 0 0 1 0-2h10a1 1 0 0 1 0 2zM15 3H1a1 1 0 0 1 0-2h14a1 1 0 0 1 0 2z" />
</symbol> </symbol>
@@ -168,6 +225,13 @@
<symbol id="icon-headline" viewBox="0 0 16 16"> <symbol id="icon-headline" viewBox="0 0 16 16">
<path d="M0 0v6h1l2-3h3v10l-3 2v1h10v-1l-3-2V3h3l2 3h1V0z" /> <path d="M0 0v6h1l2-3h3v10l-3 2v1h10v-1l-3-2V3h3l2 3h1V0z" />
</symbol> </symbol>
<symbol id="icon-heart" viewBox="0 0 16 16">
<path d="M11.6,0C10.1,0,8.8,0.8,8,2C7.2,0.8,5.9,0,4.4,0C2,0,0,2,0,4.4c0,4.4,8,10.9,8,10.9s8-6.5,8-10.9 C16,2,14,0,11.6,0z"/>
</symbol>
<symbol id="icon-home" viewBox="0 0 16 16">
<rect x="6" y="6" width="4" height="2"/>
<path d="M15.651,6.241l-7-6c-0.375-0.322-0.927-0.322-1.302,0L4,3.112V2c0-0.553-0.448-1-1-1S2,1.447,2,2v2.826 L0.349,6.241C-0.07,6.601-0.119,7.231,0.241,7.65c0.359,0.42,0.99,0.468,1.41,0.108L2,7.46V15c0,0.553,0.448,1,1,1h10 c0.552,0,1-0.447,1-1V7.46l0.349,0.299C14.538,7.921,14.769,8,15,8c0.282,0,0.562-0.118,0.76-0.35 C16.119,7.231,16.07,6.601,15.651,6.241z M12,14h-2v-4H6v4H4V5.746l4-3.428l4,3.428V14z"/>
</symbol>
<symbol id="icon-image" viewBox="0 0 16 16"> <symbol id="icon-image" viewBox="0 0 16 16">
<path d="M15 16H1c-.6 0-1-.4-1-1V1c0-.6.4-1 1-1h14c.6 0 1 .4 1 1v14c0 .6-.4 1-1 1zM2 14h12V2H2v12z" /> <path d="M15 16H1c-.6 0-1-.4-1-1V1c0-.6.4-1 1-1h14c.6 0 1 .4 1 1v14c0 .6-.4 1-1 1zM2 14h12V2H2v12z" />
<path d="M6 4c.6 0 1 .4 1 1s-.4 1-1 1-1-.4-1-1 .4-1 1-1zM3 12l2-4 2 2 3-4 3 6z" /> <path d="M6 4c.6 0 1 .4 1 1s-.4 1-1 1-1-.4-1-1 .4-1 1-1zM3 12l2-4 2 2 3-4 3 6z" />
@@ -186,6 +250,14 @@
<symbol id="icon-key" viewBox="0 0 16 16"> <symbol id="icon-key" viewBox="0 0 16 16">
<path d="M12.7 0L6.5 6.3C6 6.1 5.5 6 5 6c-2.8 0-5 2.2-5 5s2.2 5 5 5 5-2.2 5-5c0-.5-.1-1.1-.3-1.6L11 8V6h2V4h2l1-1V0h-3.3zM4.5 12c-.8 0-1.5-.7-1.5-1.5S3.7 9 4.5 9 6 9.7 6 10.5 5.3 12 4.5 12z" /> <path d="M12.7 0L6.5 6.3C6 6.1 5.5 6 5 6c-2.8 0-5 2.2-5 5s2.2 5 5 5 5-2.2 5-5c0-.5-.1-1.1-.3-1.6L11 8V6h2V4h2l1-1V0h-3.3zM4.5 12c-.8 0-1.5-.7-1.5-1.5S3.7 9 4.5 9 6 9.7 6 10.5 5.3 12 4.5 12z" />
</symbol> </symbol>
<symbol id="icon-layers" viewBox="0 0 16 16">
<path d="M8,6H1C0.4,6,0,6.4,0,7v8c0,0.6,0.4,1,1,1h7c0.6,0,1-0.4,1-1V7C9,6.4,8.6,6,8,6z"/>
<path d="M11,3H3v2h7v8h2V4C12,3.4,11.6,3,11,3z"/>
<path d="M14,0H6v2h7v8h2V1C15,0.4,14.6,0,14,0z"/>
</symbol>
<symbol id="icon-linkedin" viewBox="0 0 16 16">
<path d="M15.3,0H0.7C0.3,0,0,0.3,0,0.7v14.7C0,15.7,0.3,16,0.7,16h14.7c0.4,0,0.7-0.3,0.7-0.7V0.7 C16,0.3,15.7,0,15.3,0z M4.7,13.6H2.4V6h2.4V13.6z M3.6,5C2.8,5,2.2,4.3,2.2,3.6c0-0.8,0.6-1.4,1.4-1.4c0.8,0,1.4,0.6,1.4,1.4 C4.9,4.3,4.3,5,3.6,5z M13.6,13.6h-2.4V9.9c0-0.9,0-2-1.2-2c-1.2,0-1.4,1-1.4,2v3.8H6.2V6h2.3v1h0c0.3-0.6,1.1-1.2,2.2-1.2 c2.4,0,2.8,1.6,2.8,3.6V13.6z"/>
</symbol>
<symbol id="icon-list-bullet" viewBox="0 0 16 16"> <symbol id="icon-list-bullet" viewBox="0 0 16 16">
<path d="M4 2a2 2 0 1 1-3.999.001A2 2 0 0 1 4 2zM4 8a2 2 0 1 1-3.999.001A2 2 0 0 1 4 8zM4 14a2 2 0 1 1-3.999.001A2 2 0 0 1 4 14zM6 1h10v2H6V1zM6 7h10v2H6V7zM6 13h10v2H6v-2z" /> <path d="M4 2a2 2 0 1 1-3.999.001A2 2 0 0 1 4 2zM4 8a2 2 0 1 1-3.999.001A2 2 0 0 1 4 8zM4 14a2 2 0 1 1-3.999.001A2 2 0 0 1 4 14zM6 1h10v2H6V1zM6 7h10v2H6V7zM6 13h10v2H6v-2z" />
</symbol> </symbol>
@@ -198,13 +270,13 @@
<symbol id="icon-lock" viewBox="0 0 16 16"> <symbol id="icon-lock" viewBox="0 0 16 16">
<path d="M8 0C5.8 0 4 1.8 4 4v1H2c-.6 0-1 .4-1 1v9c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1h-2V4c0-2.2-1.8-4-4-4zm1 11.7V13H7v-1.3c-.6-.3-1-1-1-1.7 0-1.1.9-2 2-2s2 .9 2 2c0 .7-.4 1.4-1 1.7zM10 5H6V4c0-1.1.9-2 2-2s2 .9 2 2v1z" /> <path d="M8 0C5.8 0 4 1.8 4 4v1H2c-.6 0-1 .4-1 1v9c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1h-2V4c0-2.2-1.8-4-4-4zm1 11.7V13H7v-1.3c-.6-.3-1-1-1-1.7 0-1.1.9-2 2-2s2 .9 2 2c0 .7-.4 1.4-1 1.7zM10 5H6V4c0-1.1.9-2 2-2s2 .9 2 2v1z" />
</symbol> </symbol>
<symbol id="icon-unlock" viewBox="0 0 16 16">
<path d="M1,15c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1V6c0-0.6-0.4-1-1-1h-2H6V4c0-1.1,0.9-2,2-2c0.6,0,1.1,0.2,1.5,0.7 l0.7,0.7l1.5-1.3L11,1.3C10.2,0.5,9.1,0,8,0C5.8,0,4,1.8,4,4v1H2C1.4,5,1,5.4,1,6V15z M8,8c1.1,0,2,0.9,2,2c0,0.7-0.4,1.4-1,1.7V13 H7v-1.3c-0.6-0.3-1-1-1-1.7C6,8.9,6.9,8,8,8z" />
</symbol>
<symbol id="icon-logout" viewBox="0 0 16 16"> <symbol id="icon-logout" viewBox="0 0 16 16">
<path d="M3.4 2H8v2h2V1c0-.6-.4-1-1-1H1C.4 0 0 .4 0 1v9c0 .3.1.5.3.7l5 5c.2.2.4.3.7.3.1 0 .3 0 .4-.1.4-.1.6-.5.6-.9V6c0-.3-.1-.5-.3-.7L3.4 2zM5 12.6l-3-3V3.4l3 3v6.2z" /> <path d="M3.4 2H8v2h2V1c0-.6-.4-1-1-1H1C.4 0 0 .4 0 1v9c0 .3.1.5.3.7l5 5c.2.2.4.3.7.3.1 0 .3 0 .4-.1.4-.1.6-.5.6-.9V6c0-.3-.1-.5-.3-.7L3.4 2zM5 12.6l-3-3V3.4l3 3v6.2z" />
<path d="M15.7 7.3L12 3.6 10.6 5l2 2H8v2h4.6l-2 2 1.4 1.4 3.7-3.7c.4-.4.4-1 0-1.4z" /> <path d="M15.7 7.3L12 3.6 10.6 5l2 2H8v2h4.6l-2 2 1.4 1.4 3.7-3.7c.4-.4.4-1 0-1.4z" />
</symbol> </symbol>
<symbol id="icon-map" viewBox="0 0 16 16">
<path d="M14.6,0.1L10,1.9L6.4,0.1C6.2,0,5.9,0,5.6,0.1l-5,2C0.2,2.2,0,2.6,0,3v12c0,0.7,0.7,1.2,1.4,0.9L6,14.1 l3.6,1.8c0.3,0.1,0.5,0.1,0.8,0l5-1.9c0.4-0.1,0.6-0.5,0.6-0.9V1C16,0.3,15.3-0.2,14.6,0.1z M7,2.6l2,1v9.8l-2-1V2.6z M2,3.7l3-1.2 v9.8l-3,1.2V3.7z M14,12.4l-3,1.1V3.7l3-1.2V12.4z"/>
</symbol>
<symbol id="icon-markdown" viewBox="0 0 16 16"> <symbol id="icon-markdown" viewBox="0 0 16 16">
<path d="M14.85 3H1.15C.52 3 0 3.52 0 4.15v7.69C0 12.48.52 13 1.15 13h13.69c.64 0 1.15-.52 1.15-1.15v-7.7C16 3.52 15.48 3 14.85 3zM9 11H7V8L5.5 9.92 4 8v3H2V5h2l1.5 2L7 5h2v6zm2.99.5L9.5 8H11V5h2v3h1.5l-2.51 3.5z" /> <path d="M14.85 3H1.15C.52 3 0 3.52 0 4.15v7.69C0 12.48.52 13 1.15 13h13.69c.64 0 1.15-.52 1.15-1.15v-7.7C16 3.52 15.48 3 14.85 3zM9 11H7V8L5.5 9.92 4 8v3H2V5h2l1.5 2L7 5h2v6zm2.99.5L9.5 8H11V5h2v3h1.5l-2.51 3.5z" />
</symbol> </symbol>
@@ -219,6 +291,9 @@
<path d="M14 0H2c-.6 0-1 .4-1 1v14c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V1c0-.6-.4-1-1-1zm-1 14H3V2h10v12z" /> <path d="M14 0H2c-.6 0-1 .4-1 1v14c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V1c0-.6-.4-1-1-1zm-1 14H3V2h10v12z" />
<path d="M4 3h4v4H4V3zM9 4h3v1H9V4zM9 6h3v1H9V6zM4 8h8v1H4V8zM4 10h8v1H4v-1zM4 12h5v1H4v-1z" /> <path d="M4 3h4v4H4V3zM9 4h3v1H9V4zM9 6h3v1H9V6zM4 8h8v1H4V8zM4 10h8v1H4v-1zM4 12h5v1H4v-1z" />
</symbol> </symbol>
<symbol id="icon-parent" viewBox="0 0 16 16">
<path d="M14,6H3.4l4-4L6,0.6L0.3,6.3c-0.4,0.4-0.4,1,0,1.4L6,13.4L7.4,12l-4-4H13v7h2V7C15,6.4,14.6,6,14,6z" />
</symbol>
<symbol id="icon-phone" viewBox="0 0 16 16"> <symbol id="icon-phone" viewBox="0 0 16 16">
<path d="M15.285 12.305l-2.578-2.594a1 1 0 0 0-1.416-.002L9 12 4 7l2.294-2.294a1 1 0 0 0 .001-1.414L3.715.708a1 1 0 0 0-1.415 0L.004 3.003 0 3c0 7.18 5.82 13 13 13l2.283-2.283a1 1 0 0 0 .002-1.412z" /> <path d="M15.285 12.305l-2.578-2.594a1 1 0 0 0-1.416-.002L9 12 4 7l2.294-2.294a1 1 0 0 0 .001-1.414L3.715.708a1 1 0 0 0-1.415 0L.004 3.003 0 3c0 7.18 5.82 13 13 13l2.283-2.283a1 1 0 0 0 .002-1.412z" />
</symbol> </symbol>
@@ -229,18 +304,34 @@
<path d="M8 14c4.707 0 7.744-5.284 7.871-5.508a1 1 0 0 0 .001-.98C15.746 7.287 12.731 2 8 2 3.245 2 .251 7.289.126 7.514a.998.998 0 0 0 .002.975C.254 8.713 3.269 14 8 14zM8 4c2.839 0 5.036 2.835 5.818 4-.784 1.166-2.981 4-5.818 4-2.841 0-5.038-2.838-5.819-4.001C2.958 6.835 5.146 4 8 4z" /> <path d="M8 14c4.707 0 7.744-5.284 7.871-5.508a1 1 0 0 0 .001-.98C15.746 7.287 12.731 2 8 2 3.245 2 .251 7.289.126 7.514a.998.998 0 0 0 .002.975C.254 8.713 3.269 14 8 14zM8 4c2.839 0 5.036 2.835 5.818 4-.784 1.166-2.981 4-5.818 4-2.841 0-5.038-2.838-5.819-4.001C2.958 6.835 5.146 4 8 4z" />
<path d="M10 8a2 2 0 1 1-3.999.001A2 2 0 0 1 10 8z" /> <path d="M10 8a2 2 0 1 1-3.999.001A2 2 0 0 1 10 8z" />
</symbol> </symbol>
<symbol id="icon-protected" viewBox="0 0 16 16">
<path d="M8,0C3.6,0,0,3.6,0,8s3.6,8,8,8s8-3.6,8-8S12.4,0,8,0z M8,2c1.3,0,2.5,0.4,3.5,1.1l-8.4,8.4 C2.4,10.5,2,9.3,2,8C2,4.7,4.7,2,8,2z M8,14c-1.3,0-2.5-0.4-3.5-1.1l8.4-8.4C13.6,5.5,14,6.7,14,8C14,11.3,11.3,14,8,14z" />
</symbol>
<symbol id="icon-question" viewBox="0 0 16 16">
<path d="M8,0C3.6,0,0,3.6,0,8s3.6,8,8,8s8-3.6,8-8S12.4,0,8,0z M8,14c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6 S11.3,14,8,14z"/>
<circle cx="8" cy="12" r="1"/>
<path d="M7.1,5.5C7.3,5.2,7.6,5,8,5c0.6,0,1,0.4,1,1c0,0.3-0.1,0.4-0.6,0.7C7.8,7.1,7,7.7,7,9v1h2V9 c0-0.2,0-0.3,0.5-0.6C10.1,8,11,7.4,11,6c0-1.7-1.3-3-3-3C6.9,3,5.9,3.6,5.4,4.5L4.9,5.4l1.7,1L7.1,5.5z"/>
</symbol>
<symbol id="icon-quote" viewBox="0 0 16 16"> <symbol id="icon-quote" viewBox="0 0 16 16">
<path d="M3.024 4.561C1.839 6.042 1.668 7.535 2.016 8.58c1.316-1.045 3.145-.826 4.258.214 1.125 1.051 1.222 2.898.504 4.094a3.293 3.293 0 0 1-2.847 1.613C1.238 14.501 0 12.126 0 9.462c0-1.73.441-3.28 1.323-4.649S3.536 2.34 5.317 1.5l.479.932c-1.075.454-1.999 1.163-2.772 2.129zm8.768 0c-1.185 1.481-1.356 2.974-1.008 4.019.588-.454 1.226-.68 1.915-.68C14.511 7.9 16 9.107 16 11.201c0 1.926-1.478 3.301-3.301 3.301-2.693 0-3.931-2.375-3.931-5.039 0-1.73.441-3.28 1.323-4.649s2.213-2.473 3.994-3.313l.479.932c-1.075.454-1.999 1.163-2.772 2.129z" /> <path d="M3.024 4.561C1.839 6.042 1.668 7.535 2.016 8.58c1.316-1.045 3.145-.826 4.258.214 1.125 1.051 1.222 2.898.504 4.094a3.293 3.293 0 0 1-2.847 1.613C1.238 14.501 0 12.126 0 9.462c0-1.73.441-3.28 1.323-4.649S3.536 2.34 5.317 1.5l.479.932c-1.075.454-1.999 1.163-2.772 2.129zm8.768 0c-1.185 1.481-1.356 2.974-1.008 4.019.588-.454 1.226-.68 1.915-.68C14.511 7.9 16 9.107 16 11.201c0 1.926-1.478 3.301-3.301 3.301-2.693 0-3.931-2.375-3.931-5.039 0-1.73.441-3.28 1.323-4.649s2.213-2.473 3.994-3.313l.479.932c-1.075.454-1.999 1.163-2.772 2.129z" />
</symbol> </symbol>
<symbol id="icon-refresh" viewBox="0 0 16 16"> <symbol id="icon-refresh" viewBox="0 0 16 16">
<path d="M4.5 4.5c1.9-1.9 5.1-1.9 7 0 .7.7 1.2 1.7 1.4 2.7l2-.3c-.2-1.5-.9-2.8-1.9-3.8C10.3.4 5.9.4 3.1 3.1L.9.9.2 7.3l6.4-.7-2.1-2.1zM15.8 8.7l-6.4.7 2.1 2.1c-1.9 1.9-5.1 1.9-7 0-.7-.7-1.2-1.7-1.4-2.7l-2 .3c.2 1.5.9 2.8 1.9 3.8 1.4 1.4 3.1 2 4.9 2s3.6-.7 4.9-2l2.2 2.2.8-6.4z" /> <path d="M4.5 4.5c1.9-1.9 5.1-1.9 7 0 .7.7 1.2 1.7 1.4 2.7l2-.3c-.2-1.5-.9-2.8-1.9-3.8C10.3.4 5.9.4 3.1 3.1L.9.9.2 7.3l6.4-.7-2.1-2.1zM15.8 8.7l-6.4.7 2.1 2.1c-1.9 1.9-5.1 1.9-7 0-.7-.7-1.2-1.7-1.4-2.7l-2 .3c.2 1.5.9 2.8 1.9 3.8 1.4 1.4 3.1 2 4.9 2s3.6-.7 4.9-2l2.2 2.2.8-6.4z" />
</symbol> </symbol>
<symbol id="icon-remove" viewBox="0 0 16 16">
<rect x="4" y="7" width="8" height="2" />
<path d="M8,0C3.6,0,0,3.6,0,8s3.6,8,8,8s8-3.6,8-8S12.4,0,8,0z M8,14c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6 S11.3,14,8,14z" />
</symbol>
<symbol id="icon-search" viewBox="0 0 16 16"> <symbol id="icon-search" viewBox="0 0 16 16">
<path d="M7 14c-3.86 0-7-3.14-7-7s3.14-7 7-7 7 3.14 7 7-3.14 7-7 7zM7 2C4.243 2 2 4.243 2 7s2.243 5 5 5 5-2.243 5-5-2.243-5-5-5zM15.707 14.293L13.314 11.9a8.019 8.019 0 0 1-1.414 1.414l2.393 2.393a.997.997 0 0 0 1.414 0 .999.999 0 0 0 0-1.414z" /> <path d="M7 14c-3.86 0-7-3.14-7-7s3.14-7 7-7 7 3.14 7 7-3.14 7-7 7zM7 2C4.243 2 2 4.243 2 7s2.243 5 5 5 5-2.243 5-5-2.243-5-5-5zM15.707 14.293L13.314 11.9a8.019 8.019 0 0 1-1.414 1.414l2.393 2.393a.997.997 0 0 0 1.414 0 .999.999 0 0 0 0-1.414z" />
</symbol> </symbol>
<symbol id="icon-settings" viewBox="0 0 16 16"> <symbol id="icon-settings" viewBox="0 0 16 16">
<path d="M5 5V1c0-.6-.4-1-1-1S3 .4 3 1v4c0 .6.4 1 1 1s1-.4 1-1zM1 11c0 1.3.9 2.4 2 2.8V15c0 .6.4 1 1 1s1-.4 1-1v-1-.2c1.2-.4 2-1.5 2-2.8 0-1.7-1.3-3-3-3s-3 1.3-3 3zM11 11v4c0 .6.4 1 1 1s1-.4 1-1v-4c0-.6-.4-1-1-1s-1 .4-1 1zM9 5c0 1.7 1.3 3 3 3s3-1.3 3-3c0-1.3-.9-2.4-2-2.8V1c0-.6-.4-1-1-1s-1 .4-1 1v1.2C9.9 2.6 9 3.7 9 5z" /> <path d="M5 5V1c0-.6-.4-1-1-1S3 .4 3 1v4c0 .6.4 1 1 1s1-.4 1-1zM1 11c0 1.3.9 2.4 2 2.8V15c0 .6.4 1 1 1s1-.4 1-1v-1-.2c1.2-.4 2-1.5 2-2.8 0-1.7-1.3-3-3-3s-3 1.3-3 3zM11 11v4c0 .6.4 1 1 1s1-.4 1-1v-4c0-.6-.4-1-1-1s-1 .4-1 1zM9 5c0 1.7 1.3 3 3 3s3-1.3 3-3c0-1.3-.9-2.4-2-2.8V1c0-.6-.4-1-1-1s-1 .4-1 1v1.2C9.9 2.6 9 3.7 9 5z" />
</symbol> </symbol>
<symbol id="icon-share" viewBox="0 0 16 16">
<path d="M15,16H1c-0.6,0-1-0.4-1-1V3c0-0.6,0.4-1,1-1h3v2H2v10h12V9h2v6C16,15.6,15.6,16,15,16z" />
<path d="M10,3c-3.2,0-6,2.5-6,7c1.1-1.7,2.4-3,6-3v3l6-5l-6-5V3z" />
</symbol>
<symbol id="icon-smile" viewBox="0 0 16 16"> <symbol id="icon-smile" viewBox="0 0 16 16">
<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z" /> <path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z" />
<path d="M7 6a1 1 0 1 1-2 0 1 1 0 0 1 2 0zM11 6a1 1 0 1 1-2 0 1 1 0 0 1 2 0zM8 12c1.7 0 3-1.3 3-3H5c0 1.7 1.3 3 3 3z" /> <path d="M7 6a1 1 0 1 1-2 0 1 1 0 0 1 2 0zM11 6a1 1 0 1 1-2 0 1 1 0 0 1 2 0zM8 12c1.7 0 3-1.3 3-3H5c0 1.7 1.3 3 3 3z" />
@@ -248,9 +339,21 @@
<symbol id="icon-sort" viewBox="0 0 10 16"> <symbol id="icon-sort" viewBox="0 0 10 16">
<path d="M0 0h3v3H0V0zM6 0h3v3H6V0zM0 6h3v3H0V6zM6 6h3v3H6V6zM0 12h3v3H0v-3zM6 12h3v3H6v-3z" /> <path d="M0 0h3v3H0V0zM6 0h3v3H6V0zM0 6h3v3H0V6zM6 6h3v3H6V6zM0 12h3v3H0v-3zM6 12h3v3H6v-3z" />
</symbol> </symbol>
<symbol id="icon-star" viewBox="0 0 16 16">
<path d="M15.144,5.439l-4.317-.628L8.9.9A1.041,1.041,0,0,0,7.1.9L5.173,4.812.856,5.439A1,1,0,0,0,.3,7.145l3.123,3.045-.737,4.3a1,1,0,0,0,1.451,1.054L8,13.513l3.861,2.029a1,1,0,0,0,1.451-1.054l-.737-4.3L15.7,7.145a1,1,0,0,0-.554-1.705Z"/>
</symbol>
<symbol id="icon-strikethrough" viewBox="0 0 16 16">
<path d="M9,13.27924V11H7v2.27924c0,0.43042-0.27545,0.81256-0.68378,0.94867L4,15v1h4h4v-1l-2.31622-0.77209 C9.27545,14.0918,9,13.70966,9,13.27924z"/>
<path d="M9,2h3.38196c0.37878,0,0.72504,0.21399,0.89441,0.5528L14,4h1V0H8H1v4h1l0.72363-1.4472 C2.89301,2.21399,3.23926,2,3.61804,2H7v5h2V2z"/>
<polygon points="16,9 16,7 9,7 7,7 0,7 0,9 "/>
</symbol>
<symbol id="icon-tag" viewBox="0 0 16 16"> <symbol id="icon-tag" viewBox="0 0 16 16">
<path d="M15.7 8.3l-8-8C7.5.1 7.3 0 7 0H1C.4 0 0 .4 0 1v6c0 .3.1.5.3.7l8 8c.2.2.4.3.7.3s.5-.1.7-.3l6-6c.4-.4.4-1 0-1.4zM4 5c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1z" /> <path d="M15.7 8.3l-8-8C7.5.1 7.3 0 7 0H1C.4 0 0 .4 0 1v6c0 .3.1.5.3.7l8 8c.2.2.4.3.7.3s.5-.1.7-.3l6-6c.4-.4.4-1 0-1.4zM4 5c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1z" />
</symbol> </symbol>
<symbol id="icon-template" viewBox="0 0 16 16">
<path d="M15 1h-3v2h2v11H2V3h2V1H1c-.6 0-1 .4-1 1v13c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1z" />
<path d="M5 0h6v4H5zM4 6h8v2H4zM4 10h8v2H4z" />
</symbol>
<symbol id="icon-text" viewBox="0 0 16 16"> <symbol id="icon-text" viewBox="0 0 16 16">
<path d="M0 1h16v2H0V1zM0 5h10v2H0V5zM0 9h16v2H0V9zM0 13h10v2H0v-2z" /> <path d="M0 1h16v2H0V1zM0 5h10v2H0V5zM0 9h16v2H0V9zM0 13h10v2H0v-2z" />
</symbol> </symbol>
@@ -272,9 +375,16 @@
<symbol id="icon-twitter" viewBox="0 0 16 16"> <symbol id="icon-twitter" viewBox="0 0 16 16">
<path d="M16 3c-.6.3-1.2.4-1.9.5.7-.4 1.2-1 1.4-1.8-.6.4-1.3.6-2.1.8-.6-.6-1.5-1-2.4-1-1.7 0-3.2 1.5-3.2 3.3 0 .3 0 .5.1.7-2.7-.1-5.2-1.4-6.8-3.4-.3.5-.4 1-.4 1.7 0 1.1.6 2.1 1.5 2.7-.5 0-1-.2-1.5-.4C.7 7.7 1.8 9 3.3 9.3c-.3.1-.6.1-.9.1-.2 0-.4 0-.6-.1.4 1.3 1.6 2.3 3.1 2.3-1.1.9-2.5 1.4-4.1 1.4H0c1.5.9 3.2 1.5 5 1.5 6 0 9.3-5 9.3-9.3v-.4C15 4.3 15.6 3.7 16 3z" /> <path d="M16 3c-.6.3-1.2.4-1.9.5.7-.4 1.2-1 1.4-1.8-.6.4-1.3.6-2.1.8-.6-.6-1.5-1-2.4-1-1.7 0-3.2 1.5-3.2 3.3 0 .3 0 .5.1.7-2.7-.1-5.2-1.4-6.8-3.4-.3.5-.4 1-.4 1.7 0 1.1.6 2.1 1.5 2.7-.5 0-1-.2-1.5-.4C.7 7.7 1.8 9 3.3 9.3c-.3.1-.6.1-.9.1-.2 0-.4 0-.6-.1.4 1.3 1.6 2.3 3.1 2.3-1.1.9-2.5 1.4-4.1 1.4H0c1.5.9 3.2 1.5 5 1.5 6 0 9.3-5 9.3-9.3v-.4C15 4.3 15.6 3.7 16 3z" />
</symbol> </symbol>
<symbol id="icon-underline" viewBox="0 0 16 16">
<rect y="14" width="16" height="2"/>
<path d="M15,0H9v1l1.44721,0.72361C10.786,1.893,11,2.23926,11,2.61803l0,4.26357 c0,1.45087-0.97782,2.7836-2.40207,3.06025C6.68269,10.31386,5,8.84987,5,7V2.61803C5,2.23926,5.214,1.893,5.55279,1.72361L7,1V0H1 v1l1.44721,0.72361C2.786,1.893,3,2.23926,3,2.61803L3,6.777c0,2.60979,1.90274,4.94497,4.50018,5.19855 C10.48047,12.2665,13,9.92173,13,7V2.61803c0-0.37877,0.214-0.72504,0.55279-0.89443L15,1V0z"/>
</symbol>
<symbol id="icon-undo" viewBox="0 0 16 16"> <symbol id="icon-undo" viewBox="0 0 16 16">
<path d="M2.502 12.333a6.996 6.996 0 0 1-1.405-3.168l1.973-.331a4.982 4.982 0 0 0 1.003 2.26l-1.571 1.239zM6.834 14.903a7.015 7.015 0 0 1-2.976-1.259l1.186-1.611c.624.459 1.358.77 2.122.898l-.332 1.972zM9.165 14.903l-.33-1.973a4.99 4.99 0 0 0 2.209-.964l1.219 1.586a6.997 6.997 0 0 1-3.098 1.351zM8 1c-1.873 0-3.65.759-4.948 2.052L.9.9.2 7.3l6.4-.7-2.135-2.135A5.023 5.023 0 0 1 8 3c2.757 0 5 2.243 5 5 0 1.06-.327 2.072-.947 2.928l1.621 1.173A6.96 6.96 0 0 0 15 8c0-3.86-3.141-7-7-7z" /> <path d="M2.502 12.333a6.996 6.996 0 0 1-1.405-3.168l1.973-.331a4.982 4.982 0 0 0 1.003 2.26l-1.571 1.239zM6.834 14.903a7.015 7.015 0 0 1-2.976-1.259l1.186-1.611c.624.459 1.358.77 2.122.898l-.332 1.972zM9.165 14.903l-.33-1.973a4.99 4.99 0 0 0 2.209-.964l1.219 1.586a6.997 6.997 0 0 1-3.098 1.351zM8 1c-1.873 0-3.65.759-4.948 2.052L.9.9.2 7.3l6.4-.7-2.135-2.135A5.023 5.023 0 0 1 8 3c2.757 0 5 2.243 5 5 0 1.06-.327 2.072-.947 2.928l1.621 1.173A6.96 6.96 0 0 0 15 8c0-3.86-3.141-7-7-7z" />
</symbol> </symbol>
<symbol id="icon-unlock" viewBox="0 0 16 16">
<path d="M1,15c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1V6c0-0.6-0.4-1-1-1h-2H6V4c0-1.1,0.9-2,2-2c0.6,0,1.1,0.2,1.5,0.7 l0.7,0.7l1.5-1.3L11,1.3C10.2,0.5,9.1,0,8,0C5.8,0,4,1.8,4,4v1H2C1.4,5,1,5.4,1,6V15z M8,8c1.1,0,2,0.9,2,2c0,0.7-0.4,1.4-1,1.7V13 H7v-1.3c-0.6-0.3-1-1-1-1.7C6,8.9,6.9,8,8,8z" />
</symbol>
<symbol id="icon-upload" viewBox="0 0 16 16"> <symbol id="icon-upload" viewBox="0 0 16 16">
<path d="M7 3.4V12h2V3.4l4 4L14.4 6 8.7.3c-.4-.4-1-.4-1.4 0L1.6 6 3 7.4l4-4z" /> <path d="M7 3.4V12h2V3.4l4 4L14.4 6 8.7.3c-.4-.4-1-.4-1.4 0L1.6 6 3 7.4l4-4z" />
<path d="M14 14H2v-3H0v4c0 .6.4 1 1 1h14c.6 0 1-.4 1-1v-4h-2v3z" /> <path d="M14 14H2v-3H0v4c0 .6.4 1 1 1h14c.6 0 1-.4 1-1v-4h-2v3z" />
@@ -292,49 +402,23 @@
<symbol id="icon-video" viewBox="0 0 16 16"> <symbol id="icon-video" viewBox="0 0 16 16">
<path d="M11 9V7c0-.6-.4-1-1-1H1c-.6 0-1 .4-1 1v8c0 .6.4 1 1 1h9c.6 0 1-.4 1-1v-2l5 2V7l-5 2zM5 2.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0zM10 3a2 2 0 1 1-3.999.001A2 2 0 0 1 10 3z" /> <path d="M11 9V7c0-.6-.4-1-1-1H1c-.6 0-1 .4-1 1v8c0 .6.4 1 1 1h9c.6 0 1-.4 1-1v-2l5 2V7l-5 2zM5 2.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0zM10 3a2 2 0 1 1-3.999.001A2 2 0 0 1 10 3z" />
</symbol> </symbol>
<symbol id="icon-vimeo" viewBox="0 0 16 16">
<path d="M16,4.3c-0.1,1.6-1.2,3.7-3.3,6.4c-2.2,2.8-4,4.2-5.5,4.2c-0.9,0-1.7-0.9-2.4-2.6C4,9.9,3.4,5,2,5 C1.9,5,1.5,5.3,0.8,5.8L0,4.8c0.8-0.7,3.5-3.4,4.7-3.5C5.9,1.2,6.7,2,7,3.8c0.3,2,0.8,6.1,1.8,6.1c0.9,0,2.5-3.4,2.6-4 c0.1-0.9-0.3-1.9-2.3-1.1c0.8-2.6,2.3-3.8,4.5-3.8C15.3,1.1,16.1,2.2,16,4.3z"/>
</symbol>
<symbol id="icon-wand" viewBox="0 0 16 16"> <symbol id="icon-wand" viewBox="0 0 16 16">
<path d="M8.046 4.985l2.97 2.97-7.99 7.99-2.97-2.97 7.99-7.99zM12.995 1.591l1.414 1.414-2.404 2.404-1.414-1.414 2.404-2.404zM13 7h3v2h-3V7zM12.243 10.834l2.121 2.121-1.414 1.414-2.121-2.121 1.414-1.414zM7 0h2v3H7V0zM3.05 1.631l2.121 2.121-1.414 1.414-2.121-2.121L3.05 1.631z" /> <path d="M8.046 4.985l2.97 2.97-7.99 7.99-2.97-2.97 7.99-7.99zM12.995 1.591l1.414 1.414-2.404 2.404-1.414-1.414 2.404-2.404zM13 7h3v2h-3V7zM12.243 10.834l2.121 2.121-1.414 1.414-2.121-2.121 1.414-1.414zM7 0h2v3H7V0zM3.05 1.631l2.121 2.121-1.414 1.414-2.121-2.121L3.05 1.631z" />
</symbol> </symbol>
<symbol id="icon-template" viewBox="0 0 16 16"> <symbol id="icon-whatsapp" viewBox="0 0 16 16">
<path d="M15 1h-3v2h2v11H2V3h2V1H1c-.6 0-1 .4-1 1v13c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1z" /> <path d="M13.6,2.3C12.1,0.8,10.2,0,8,0C3.7,0,0.1,3.6,0.1,7.9c0,1.4,0.4,2.8,1.1,4L0,16l4.2-1.1c1.2,0.6,2.5,1,3.8,1 h0h0c4.4,0,7.9-3.6,7.9-7.9C16,5.8,15.1,3.8,13.6,2.3z M11.9,10.8c-0.2,0.5-1,0.9-1.3,0.9c-0.3,0.1-1.3,0-2.4-0.5 c-2-0.9-3.3-2.9-3.4-3C4.7,8.1,4,7.1,4,6.2s0.5-1.5,0.7-1.7c0.4-0.4,1.2-0.3,1.4,0.1C6.2,5,6.6,6,6.7,6.1s0.1,0.5-0.2,0.7 C6.4,6.8,5.9,7.2,6.1,7.5c0.1,0.2,0.5,0.8,1.1,1.4c0.8,0.7,1.4,0.9,1.6,1C9,10,9.1,10,9.2,9.8C9.3,9.7,9.7,9.2,9.8,9 c0.1-0.2,0.3-0.2,0.4-0.1s1.2,0.5,1.4,0.6C11.8,9.7,12,9.7,12,9.8C12.1,9.9,12.1,10.3,11.9,10.8z"/>
<path d="M5 0h6v4H5zM4 6h8v2H4zM4 10h8v2H4z" />
</symbol> </symbol>
<symbol id="icon-parent" viewBox="0 0 16 16"> <symbol id="icon-wheelchair" viewBox="0 0 16 16">
<path d="M14,6H3.4l4-4L6,0.6L0.3,6.3c-0.4,0.4-0.4,1,0,1.4L6,13.4L7.4,12l-4-4H13v7h2V7C15,6.4,14.6,6,14,6z" /> <circle cx="11" cy="15" r="1"/>
<circle cx="11" cy="2" r="2"/>
<path d="M14.949,5.684a1,1,0,0,0-1.265-.632l-2.414.8L9.707,4.293A1,1,0,0,0,9,4H6a1,1,0,0,0-.447.105l-2,1A1,1,0,1,0,4.447,6.9L6.236,6H7.523L6.071,9.629A1,1,0,0,0,7,11h3v2h2V10a1,1,0,0,0-1-1H8.477l.888-2.221.928.928A1,1,0,0,0,11,8a.987.987,0,0,0,.316-.052l3-1A1,1,0,0,0,14.949,5.684Z"/>
<path d="M5,16A4,4,0,0,1,5,8v2a2,2,0,1,0,2,2H9A4,4,0,0,1,5,16Z"/>
</symbol> </symbol>
<symbol id="icon-circle" viewBox="0 0 16 16"> <symbol id="icon-youtube" viewBox="0 0 16 16">
<circle cx="8" cy="8" r="8" /> <path d="M15.8,4.8c-0.2-1.3-0.8-2.2-2.2-2.4C11.4,2,8,2,8,2S4.6,2,2.4,2.4C1,2.6,0.3,3.5,0.2,4.8C0,6.1,0,8,0,8 s0,1.9,0.2,3.2c0.2,1.3,0.8,2.2,2.2,2.4C4.6,14,8,14,8,14s3.4,0,5.6-0.4c1.4-0.3,2-1.1,2.2-2.4C16,9.9,16,8,16,8S16,6.1,15.8,4.8z M6,11V5l5,3L6,11z"/>
</symbol>
<symbol id="icon-circle-outline" viewBox="0 0 16 16">
<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z" />
</symbol>
<symbol id="icon-circle-filled" viewBox="0 0 16 16">
<path d="M8,0C3.6,0,0,3.6,0,8s3.6,8,8,8s8-3.6,8-8S12.4,0,8,0z M8,14c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6 S11.3,14,8,14z" />
<circle cx="8" cy="8" r="4" />
</symbol>
<symbol id="icon-protected" viewBox="0 0 16 16">
<path d="M8,0C3.6,0,0,3.6,0,8s3.6,8,8,8s8-3.6,8-8S12.4,0,8,0z M8,2c1.3,0,2.5,0.4,3.5,1.1l-8.4,8.4 C2.4,10.5,2,9.3,2,8C2,4.7,4.7,2,8,2z M8,14c-1.3,0-2.5-0.4-3.5-1.1l8.4-8.4C13.6,5.5,14,6.7,14,8C14,11.3,11.3,14,8,14z" />
</symbol>
<symbol id="icon-share" viewBox="0 0 16 16">
<path d="M15,16H1c-0.6,0-1-0.4-1-1V3c0-0.6,0.4-1,1-1h3v2H2v10h12V9h2v6C16,15.6,15.6,16,15,16z" />
<path d="M10,3c-3.2,0-6,2.5-6,7c1.1-1.7,2.4-3,6-3v3l6-5l-6-5V3z" />
</symbol>
<symbol id="icon-remove" viewBox="0 0 16 16">
<rect x="4" y="7" width="8" height="2" />
<path d="M8,0C3.6,0,0,3.6,0,8s3.6,8,8,8s8-3.6,8-8S12.4,0,8,0z M8,14c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6 S11.3,14,8,14z" />
</symbol>
<symbol id="icon-cart" viewBox="0 0 16 16">
<path d="M15,3H4.5L4,0.8C3.9,0.3,3.5,0,3,0H0v2h2.2L4,10.2C4.1,10.7,4.5,11,5,11h8c0.4,0,0.8-0.3,0.9-0.7l2-6 C16.1,3.8,15.8,3,15,3z" />
<circle cx="5" cy="14" r="2" />
<circle cx="13" cy="14" r="2" />
</symbol>
<symbol id="icon-key" viewBox="0 0 16 16">
<path d="M12.7,0L6.5,6.3C6,6.1,5.5,6,5,6c-2.8,0-5,2.2-5,5s2.2,5,5,5s5-2.2,5-5c0-0.5-0.1-1.1-0.3-1.6L11,8V6h2V4h2 l1-1V0H12.7z M4.5,12C3.7,12,3,11.3,3,10.5S3.7,9,4.5,9S6,9.7,6,10.5S5.3,12,4.5,12z"
/>
</symbol>
<symbol id="icon-copy" viewBox="0 0 16 16">
<path d="M10,4H2C1.4,4,1,4.4,1,5v10c0,0.6,0.4,1,1,1h8c0.6,0,1-0.4,1-1V5C11,4.4,10.6,4,10,4z" />
<path d="M14,0H4v2h9v11h2V1C15,0.4,14.6,0,14,0z" />
</symbol> </symbol>
</defs> </defs>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 35 KiB

File diff suppressed because one or more lines are too long

21
kirby/phpstan.neon.dist Executable file
View File

@@ -0,0 +1,21 @@
parameters:
paths:
- %currentWorkingDirectory%
autoload_files:
- %currentWorkingDirectory%/vendor/autoload.php
- %rootDir%/../../autoload.php
autoload_directories:
- %currentWorkingDirectory%/tests
excludes_analyse:
- %currentWorkingDirectory%/dependencies
- %currentWorkingDirectory%/tests/*/fixtures/*
- %currentWorkingDirectory%/vendor
- %currentWorkingDirectory%/views
level: 0
memory_limit: 2G
ignoreErrors:
# we use bound $this in our callbacks
- message: '#(Using \$this outside a class\.|Undefined variable: \$this)#'
path: %currentWorkingDirectory%/config

View File

@@ -8,6 +8,7 @@ use Kirby\Exception\NotFoundException;
use Kirby\Http\Response; use Kirby\Http\Response;
use Kirby\Http\Router; use Kirby\Http\Router;
use Kirby\Toolkit\F; use Kirby\Toolkit\F;
use Kirby\Toolkit\Pagination;
use Kirby\Toolkit\Properties; use Kirby\Toolkit\Properties;
use Kirby\Toolkit\Str; use Kirby\Toolkit\Str;
use Throwable; use Throwable;
@@ -38,7 +39,7 @@ class Api
/** /**
* Debugging flag * Debugging flag
* *
* @var boolean * @var bool
*/ */
protected $debug = false; protected $debug = false;
@@ -200,8 +201,16 @@ class Api
} }
} }
// don't throw pagination errors if pagination
// page is out of bounds
$validate = Pagination::$validate;
Pagination::$validate = false;
$output = $this->route->action()->call($this, ...$this->route->arguments()); $output = $this->route->action()->call($this, ...$this->route->arguments());
// restore old pagination validation mode
Pagination::$validate = $validate;
if (is_object($output) === true && is_a($output, 'Kirby\\Http\\Response') !== true) { if (is_object($output) === true && is_a($output, 'Kirby\\Http\\Response') !== true) {
return $this->resolve($output)->toResponse(); return $this->resolve($output)->toResponse();
} }
@@ -268,7 +277,7 @@ class Api
/** /**
* Returns the debugging flag * Returns the debugging flag
* *
* @return boolean * @return bool
*/ */
public function debug(): bool public function debug(): bool
{ {
@@ -279,7 +288,7 @@ class Api
* Checks if injected data exists for the given key * Checks if injected data exists for the given key
* *
* @param string $key * @param string $key
* @return boolean * @return bool
*/ */
public function hasData(string $key): bool public function hasData(string $key): bool
{ {
@@ -489,7 +498,7 @@ class Api
/** /**
* Setter for the debug flag * Setter for the debug flag
* *
* @param boolean $debug * @param bool $debug
* @return self * @return self
*/ */
protected function setDebug(bool $debug = false) protected function setDebug(bool $debug = false)
@@ -693,7 +702,7 @@ class Api
* Upload helper method * Upload helper method
* *
* @param Closure $callback * @param Closure $callback
* @param boolean $single * @param bool $single
* @return array * @return array
* *
* @throws Exception If request has no files * @throws Exception If request has no files

View File

@@ -2,7 +2,7 @@
namespace Kirby\Cache; namespace Kirby\Cache;
use APCUIterator; use APCuIterator;
/** /**
* APCu Cache Driver * APCu Cache Driver
@@ -19,7 +19,7 @@ class ApcuCache extends Cache
* Determines if an item exists in the cache * Determines if an item exists in the cache
* *
* @param string $key * @param string $key
* @return boolean * @return bool
*/ */
public function exists(string $key): bool public function exists(string $key): bool
{ {
@@ -30,12 +30,12 @@ class ApcuCache extends Cache
* Flushes the entire cache and returns * Flushes the entire cache and returns
* whether the operation was successful * whether the operation was successful
* *
* @return boolean * @return bool
*/ */
public function flush(): bool public function flush(): bool
{ {
if (empty($this->options['prefix']) === false) { if (empty($this->options['prefix']) === false) {
return apcu_delete(new APCUIterator('!^' . preg_quote($this->options['prefix']) . '!')); return apcu_delete(new APCuIterator('!^' . preg_quote($this->options['prefix']) . '!'));
} else { } else {
return apcu_clear_cache(); return apcu_clear_cache();
} }
@@ -46,7 +46,7 @@ class ApcuCache extends Cache
* whether the operation was successful * whether the operation was successful
* *
* @param string $key * @param string $key
* @return boolean * @return bool
*/ */
public function remove(string $key): bool public function remove(string $key): bool
{ {
@@ -77,7 +77,7 @@ class ApcuCache extends Cache
* @param string $key * @param string $key
* @param mixed $value * @param mixed $value
* @param int $minutes * @param int $minutes
* @return boolean * @return bool
*/ */
public function set(string $key, $value, int $minutes = 0): bool public function set(string $key, $value, int $minutes = 0): bool
{ {

View File

@@ -45,14 +45,14 @@ abstract class Cache
* @param string $key * @param string $key
* @param mixed $value * @param mixed $value
* @param int $minutes * @param int $minutes
* @return boolean * @return bool
*/ */
abstract public function set(string $key, $value, int $minutes = 0): bool; abstract public function set(string $key, $value, int $minutes = 0): bool;
/** /**
* Adds the prefix to the key if given * Adds the prefix to the key if given
* *
* @param string $key * @param string $key
* @return string * @return string
*/ */
protected function key(string $key): string protected function key(string $key): string
@@ -152,7 +152,7 @@ abstract class Cache
* Checks if an item in the cache is expired * Checks if an item in the cache is expired
* *
* @param string $key * @param string $key
* @return boolean * @return bool
*/ */
public function expired(string $key): bool public function expired(string $key): bool
{ {
@@ -204,7 +204,7 @@ abstract class Cache
* Determines if an item exists in the cache * Determines if an item exists in the cache
* *
* @param string $key * @param string $key
* @return boolean * @return bool
*/ */
public function exists(string $key): bool public function exists(string $key): bool
{ {
@@ -217,7 +217,7 @@ abstract class Cache
* this needs to be defined by the driver * this needs to be defined by the driver
* *
* @param string $key * @param string $key
* @return boolean * @return bool
*/ */
abstract public function remove(string $key): bool; abstract public function remove(string $key): bool;
@@ -226,7 +226,7 @@ abstract class Cache
* whether the operation was successful; * whether the operation was successful;
* this needs to be defined by the driver * this needs to be defined by the driver
* *
* @return boolean * @return bool
*/ */
abstract public function flush(): bool; abstract public function flush(): bool;

View File

@@ -78,7 +78,7 @@ class FileCache extends Cache
* @param string $key * @param string $key
* @param mixed $value * @param mixed $value
* @param int $minutes * @param int $minutes
* @return boolean * @return bool
*/ */
public function set(string $key, $value, int $minutes = 0): bool public function set(string $key, $value, int $minutes = 0): bool
{ {
@@ -125,7 +125,7 @@ class FileCache extends Cache
* whether the operation was successful * whether the operation was successful
* *
* @param string $key * @param string $key
* @return boolean * @return bool
*/ */
public function remove(string $key): bool public function remove(string $key): bool
{ {
@@ -142,7 +142,7 @@ class FileCache extends Cache
* Flushes the entire cache and returns * Flushes the entire cache and returns
* whether the operation was successful * whether the operation was successful
* *
* @return boolean * @return bool
*/ */
public function flush(): bool public function flush(): bool
{ {

View File

@@ -52,7 +52,7 @@ class MemCached extends Cache
* @param string $key * @param string $key
* @param mixed $value * @param mixed $value
* @param int $minutes * @param int $minutes
* @return boolean * @return bool
*/ */
public function set(string $key, $value, int $minutes = 0): bool public function set(string $key, $value, int $minutes = 0): bool
{ {
@@ -76,7 +76,7 @@ class MemCached extends Cache
* whether the operation was successful * whether the operation was successful
* *
* @param string $key * @param string $key
* @return boolean * @return bool
*/ */
public function remove(string $key): bool public function remove(string $key): bool
{ {
@@ -88,7 +88,7 @@ class MemCached extends Cache
* whether the operation was successful; * whether the operation was successful;
* WARNING: Memcached only supports flushing the whole cache at once! * WARNING: Memcached only supports flushing the whole cache at once!
* *
* @return boolean * @return bool
*/ */
public function flush(): bool public function flush(): bool
{ {

View File

@@ -31,7 +31,7 @@ class MemoryCache extends Cache
* @param string $key * @param string $key
* @param mixed $value * @param mixed $value
* @param int $minutes * @param int $minutes
* @return boolean * @return bool
*/ */
public function set(string $key, $value, int $minutes = 0): bool public function set(string $key, $value, int $minutes = 0): bool
{ {
@@ -56,7 +56,7 @@ class MemoryCache extends Cache
* whether the operation was successful * whether the operation was successful
* *
* @param string $key * @param string $key
* @return boolean * @return bool
*/ */
public function remove(string $key): bool public function remove(string $key): bool
{ {
@@ -72,7 +72,7 @@ class MemoryCache extends Cache
* Flushes the entire cache and returns * Flushes the entire cache and returns
* whether the operation was successful * whether the operation was successful
* *
* @return boolean * @return bool
*/ */
public function flush(): bool public function flush(): bool
{ {

View File

@@ -25,7 +25,7 @@ class NullCache extends Cache
* @param string $key * @param string $key
* @param mixed $value * @param mixed $value
* @param int $minutes * @param int $minutes
* @return boolean * @return bool
*/ */
public function set(string $key, $value, int $minutes = 0): bool public function set(string $key, $value, int $minutes = 0): bool
{ {
@@ -49,7 +49,7 @@ class NullCache extends Cache
* whether the operation was successful * whether the operation was successful
* *
* @param string $key * @param string $key
* @return boolean * @return bool
*/ */
public function remove(string $key): bool public function remove(string $key): bool
{ {
@@ -60,7 +60,7 @@ class NullCache extends Cache
* Flushes the entire cache and returns * Flushes the entire cache and returns
* whether the operation was successful * whether the operation was successful
* *
* @return boolean * @return bool
*/ */
public function flush(): bool public function flush(): bool
{ {

View File

@@ -37,9 +37,7 @@ class Api extends BaseApi
$this->setRequestMethod($method); $this->setRequestMethod($method);
$this->setRequestData($requestData); $this->setRequestData($requestData);
if ($languageCode = $this->language()) { $this->kirby->setCurrentLanguage($this->language());
$this->kirby->setCurrentLanguage($languageCode);
}
if ($user = $this->kirby->user()) { if ($user = $this->kirby->user()) {
$this->kirby->setCurrentTranslation($user->language()); $this->kirby->setCurrentTranslation($user->language());

View File

@@ -4,6 +4,7 @@ namespace Kirby\Cms;
use Kirby\Data\Data; use Kirby\Data\Data;
use Kirby\Email\PHPMailer as Emailer; use Kirby\Email\PHPMailer as Emailer;
use Kirby\Exception\ErrorPageException;
use Kirby\Exception\InvalidArgumentException; use Kirby\Exception\InvalidArgumentException;
use Kirby\Exception\NotFoundException; use Kirby\Exception\NotFoundException;
use Kirby\Http\Request; use Kirby\Http\Request;
@@ -56,6 +57,7 @@ class App
protected $languages; protected $languages;
protected $locks; protected $locks;
protected $multilang; protected $multilang;
protected $nonce;
protected $options; protected $options;
protected $path; protected $path;
protected $request; protected $request;
@@ -120,9 +122,15 @@ class App
$this->extensionsFromOptions(); $this->extensionsFromOptions();
$this->extensionsFromFolders(); $this->extensionsFromFolders();
// trigger hook for use in plugins
$this->trigger('system.loadPlugins:after');
// handle those damn errors // handle those damn errors
$this->handleErrors(); $this->handleErrors();
// execute a ready callback from the config
$this->optionsFromReadyCallback();
// bake config // bake config
Config::$data = $this->options; Config::$data = $this->options;
} }
@@ -475,7 +483,7 @@ class App
* *
* @param string $path * @param string $path
* @param mixed $parent * @param mixed $parent
* @param boolean $drafts * @param bool $drafts
* @return \Kirby\Cms\File|null * @return \Kirby\Cms\File|null
*/ */
public function file(string $path, $parent = null, bool $drafts = true) public function file(string $path, $parent = null, bool $drafts = true)
@@ -586,7 +594,11 @@ class App
// Pages // Pages
if (is_a($input, 'Kirby\Cms\Page')) { if (is_a($input, 'Kirby\Cms\Page')) {
$html = $input->render(); try {
$html = $input->render();
} catch (ErrorPageException $e) {
return $this->io($e);
}
if ($input->isErrorPage() === true) { if ($input->isErrorPage() === true) {
if ($response->code() === null) { if ($response->code() === null) {
@@ -758,7 +770,7 @@ class App
/** /**
* Check for a multilang setup * Check for a multilang setup
* *
* @return boolean * @return bool
*/ */
public function multilang(): bool public function multilang(): bool
{ {
@@ -769,6 +781,17 @@ class App
return $this->multilang = $this->languages()->count() !== 0; return $this->multilang = $this->languages()->count() !== 0;
} }
/**
* Returns the nonce, which is used
* in the panel for inline scripts
*
* @return string
*/
public function nonce(): string
{
return $this->nonce = $this->nonce ?? base64_encode(random_bytes(20));
}
/** /**
* Load a specific configuration option * Load a specific configuration option
* *
@@ -791,17 +814,6 @@ class App
return $this->options; return $this->options;
} }
/**
* Inject options from Kirby instance props
*
* @param array $options
* @return array
*/
protected function optionsFromProps(array $options = []): array
{
return $this->options = array_replace_recursive($this->options, $options);
}
/** /**
* Load all options from files in site/config * Load all options from files in site/config
* *
@@ -823,16 +835,49 @@ class App
return $this->options = array_replace_recursive($config, $main, $host, $addr); return $this->options = array_replace_recursive($config, $main, $host, $addr);
} }
/**
* Inject options from Kirby instance props
*
* @param array $options
* @return array
*/
protected function optionsFromProps(array $options = []): array
{
return $this->options = array_replace_recursive($this->options, $options);
}
/**
* Merge last-minute options from ready callback
*
* @return array
*/
protected function optionsFromReadyCallback(): array
{
if (isset($this->options['ready']) === true && is_callable($this->options['ready']) === true) {
// fetch last-minute options from the callback
$options = (array)$this->options['ready']($this);
// inject all last-minute options recursively
$this->options = array_replace_recursive($this->options, $options);
}
return $this->options;
}
/** /**
* Returns any page from the content folder * Returns any page from the content folder
* *
* @param string $id * @param string $id|null
* @param \Kirby\Cms\Page|\Kirby\Cms\Site|null $parent * @param \Kirby\Cms\Page|\Kirby\Cms\Site|null $parent
* @param bool $drafts * @param bool $drafts
* @return \Kirby\Cms\Page|null * @return \Kirby\Cms\Page|null
*/ */
public function page(string $id, $parent = null, bool $drafts = true) public function page(?string $id = null, $parent = null, bool $drafts = true)
{ {
if ($id === null) {
return null;
}
$parent = $parent ?? $this->site(); $parent = $parent ?? $this->site();
if ($page = $parent->find($id)) { if ($page = $parent->find($id)) {
@@ -1184,10 +1229,20 @@ class App
{ {
$options = $this->option('smartypants', []); $options = $this->option('smartypants', []);
if ($options === true) { if ($options === false) {
return $text;
} elseif (is_array($options) === false) {
$options = []; $options = [];
} }
if ($this->multilang() === true) {
$languageSmartypants = $this->language()->smartypants() ?? [];
if (empty($languageSmartypants) === false) {
$options = array_merge($options, $languageSmartypants);
}
}
return $this->component('smartypants')($this, $text, $options); return $this->component('smartypants')($this, $text, $options);
} }

View File

@@ -29,18 +29,17 @@ trait AppErrors
protected function handleErrors() protected function handleErrors()
{ {
$request = $this->request(); if ($this->request()->cli() === true) {
$this->handleCliErrors();
// TODO: implement acceptance return;
if ($request->ajax()) {
return $this->handleJsonErrors();
} }
if ($request->cli()) { if ($this->visitor()->prefersJson() === true) {
return $this->handleCliErrors(); $this->handleJsonErrors();
return;
} }
return $this->handleHtmlErrors(); $this->handleHtmlErrors();
} }
protected function handleHtmlErrors() protected function handleHtmlErrors()

View File

@@ -701,7 +701,6 @@ trait AppPlugins
protected function pluginsLoader(): array protected function pluginsLoader(): array
{ {
$root = $this->root('plugins'); $root = $this->root('plugins');
$kirby = $this;
$loaded = []; $loaded = [];
foreach (Dir::read($root) as $dirname) { foreach (Dir::read($root) as $dirname) {
@@ -709,14 +708,10 @@ trait AppPlugins
continue; continue;
} }
if (is_dir($root . '/' . $dirname) === false) {
continue;
}
$dir = $root . '/' . $dirname; $dir = $root . '/' . $dirname;
$entry = $dir . '/index.php'; $entry = $dir . '/index.php';
if (file_exists($entry) === false) { if (is_dir($dir) !== true || is_file($entry) !== true) {
continue; continue;
} }

View File

@@ -158,7 +158,7 @@ trait AppTranslations
$inject = $this->extensions['translations'][$locale] ?? []; $inject = $this->extensions['translations'][$locale] ?? [];
// load from disk instead // load from disk instead
return Translation::load($locale, $this->root('translations') . '/' . $locale . '.json', $inject); return Translation::load($locale, $this->root('i18n:translations') . '/' . $locale . '.json', $inject);
} }
/** /**
@@ -172,6 +172,6 @@ trait AppTranslations
return $this->translations; return $this->translations;
} }
return Translations::load($this->root('translations'), $this->extensions['translations'] ?? []); return Translations::load($this->root('i18n:translations'), $this->extensions['translations'] ?? []);
} }
} }

View File

@@ -77,7 +77,7 @@ trait AppUsers
* Returns a specific user by id * Returns a specific user by id
* or the current user if no id is given * or the current user if no id is given
* *
* @param string $id * @param string $id
* @return \Kirby\Cms\User|null * @return \Kirby\Cms\User|null
*/ */
public function user(string $id = null) public function user(string $id = null)

View File

@@ -165,7 +165,7 @@ class Auth
* Check if logins are blocked for the current ip or email * Check if logins are blocked for the current ip or email
* *
* @param string $email * @param string $email
* @return boolean * @return bool
*/ */
public function isBlocked(string $email): bool public function isBlocked(string $email): bool
{ {
@@ -195,7 +195,7 @@ class Auth
* *
* @param string $email * @param string $email
* @param string $password * @param string $password
* @param boolean $long * @param bool $long
* @return \Kirby\Cms\User * @return \Kirby\Cms\User
* *
* @throws PermissionException If the rate limit was exceeded or if any other error occured with debug mode off * @throws PermissionException If the rate limit was exceeded or if any other error occured with debug mode off
@@ -243,7 +243,7 @@ class Auth
$message = 'Invalid email or password'; $message = 'Invalid email or password';
} }
throw new PermissionException($message, 403); throw new PermissionException($message);
} }
// validate the user // validate the user
@@ -334,7 +334,7 @@ class Auth
/** /**
* Logout the current user * Logout the current user
* *
* @return boolean * @return bool
*/ */
public function logout(): bool public function logout(): bool
{ {
@@ -354,7 +354,7 @@ class Auth
* Tracks a login * Tracks a login
* *
* @param string $email * @param string $email
* @return boolean * @return bool
*/ */
public function track(string $email): bool public function track(string $email): bool
{ {

View File

@@ -472,7 +472,7 @@ class Blueprint
return [ return [
'label' => 'Error', 'label' => 'Error',
'name' => $name, 'name' => $name,
'text' => $message, 'text' => strip_tags($message),
'theme' => 'negative', 'theme' => 'negative',
'type' => 'info', 'type' => 'info',
]; ];
@@ -595,12 +595,17 @@ class Blueprint
continue; continue;
} }
// fallback to default props when true is passed
if ($sectionProps === true) {
$sectionProps = [];
}
// inject all section extensions // inject all section extensions
$sectionProps = $this->extend($sectionProps); $sectionProps = $this->extend($sectionProps);
$sections[$sectionName] = $sectionProps = array_merge($sectionProps, [ $sections[$sectionName] = $sectionProps = array_merge($sectionProps, [
'name' => $sectionName, 'name' => $sectionName,
'type' => $type = $sectionProps['type'] ?? null 'type' => $type = $sectionProps['type'] ?? $sectionName
]); ]);
if (empty($type) === true || is_string($type) === false) { if (empty($type) === true || is_string($type) === false) {

View File

@@ -38,8 +38,8 @@ class Collection extends BaseCollection
/** /**
* Magic getter function * Magic getter function
* *
* @param string $key * @param string $key
* @param mixed $arguments * @param mixed $arguments
* @return mixed * @return mixed
*/ */
public function __call(string $key, $arguments) public function __call(string $key, $arguments)
@@ -101,8 +101,8 @@ class Collection extends BaseCollection
/** /**
* Appends an element to the data array * Appends an element to the data array
* *
* @param mixed $key Optional collection key, will be determined from the item if not given * @param mixed $key Optional collection key, will be determined from the item if not given
* @param mixed $item * @param mixed $item
* @return \Kirby\Cms\Collection * @return \Kirby\Cms\Collection
*/ */
public function append(...$args) public function append(...$args)
@@ -165,7 +165,7 @@ class Collection extends BaseCollection
* is in the collection * is in the collection
* *
* @param string|object $id * @param string|object $id
* @return boolean * @return bool
*/ */
public function has($id): bool public function has($id): bool
{ {
@@ -181,7 +181,7 @@ class Collection extends BaseCollection
* The method will automatically detect objects * The method will automatically detect objects
* or ids and then search accordingly. * or ids and then search accordingly.
* *
* @param string|object $object * @param string|object $object
* @return int * @return int
*/ */
public function indexOf($object): int public function indexOf($object): int
@@ -196,7 +196,7 @@ class Collection extends BaseCollection
/** /**
* Returns a Collection without the given element(s) * Returns a Collection without the given element(s)
* *
* @param mixed ...$keys any number of keys, passed as individual arguments * @param mixed ...$keys any number of keys, passed as individual arguments
* @return \Kirby\Cms\Collection * @return \Kirby\Cms\Collection
*/ */
public function not(...$keys) public function not(...$keys)
@@ -216,7 +216,7 @@ class Collection extends BaseCollection
/** /**
* Add pagination and return a sliced set of data. * Add pagination and return a sliced set of data.
* *
* @param mixed ...$arguments * @param mixed ...$arguments
* @return \Kirby\Cms\Collection * @return \Kirby\Cms\Collection
*/ */
public function paginate(...$arguments) public function paginate(...$arguments)
@@ -240,9 +240,9 @@ class Collection extends BaseCollection
/** /**
* Prepends an element to the data array * Prepends an element to the data array
* *
* @param mixed $key Optional collection key, will be determined from the item if not given * @param mixed $key Optional collection key, will be determined from the item if not given
* @param mixed $item * @param mixed $item
* @return Kirby\Cms\Collection * @return \Kirby\Cms\Collection
*/ */
public function prepend(...$args) public function prepend(...$args)
{ {
@@ -321,7 +321,7 @@ class Collection extends BaseCollection
* to an array. This can also take a callback * to an array. This can also take a callback
* function to further modify the array result. * function to further modify the array result.
* *
* @param Closure $map * @param Closure $map
* @return array * @return array
*/ */
public function toArray(Closure $map = null): array public function toArray(Closure $map = null): array

View File

@@ -42,8 +42,8 @@ class Collections
* Magic caller to enable something like * Magic caller to enable something like
* `$collections->myCollection()` * `$collections->myCollection()`
* *
* @param string $name * @param string $name
* @param array $arguments * @param array $arguments
* @return \Kirby\Cms\Collection|null * @return \Kirby\Cms\Collection|null
*/ */
public function __call(string $name, array $arguments = []) public function __call(string $name, array $arguments = [])
@@ -89,7 +89,7 @@ class Collections
* Checks if a collection exists * Checks if a collection exists
* *
* @param string $name * @param string $name
* @return boolean * @return bool
*/ */
public function has(string $name): bool public function has(string $name): bool
{ {
@@ -109,7 +109,7 @@ class Collections
* Loads collection from php file in a * Loads collection from php file in a
* given directory or from plugin extension. * given directory or from plugin extension.
* *
* @param string $name * @param string $name
* @return mixed * @return mixed
*/ */
public function load(string $name) public function load(string $name)

View File

@@ -69,7 +69,7 @@ class Content
* Same as `self::data()` to improve * Same as `self::data()` to improve
* `var_dump` output * `var_dump` output
* *
* @see self::data() * @see self::data()
* @return array * @return array
*/ */
public function __debugInfo(): array public function __debugInfo(): array
@@ -146,7 +146,7 @@ class Content
* Returns either a single field object * Returns either a single field object
* or all registered fields * or all registered fields
* *
* @param string $key * @param string $key
* @return \Kirby\Cms\Field|array * @return \Kirby\Cms\Field|array
*/ */
public function get(string $key = null) public function get(string $key = null)
@@ -172,7 +172,7 @@ class Content
* Checks if a content field is set * Checks if a content field is set
* *
* @param string $key * @param string $key
* @return boolean * @return bool
*/ */
public function has(string $key): bool public function has(string $key): bool
{ {
@@ -197,7 +197,7 @@ class Content
* without the fields, specified by the * without the fields, specified by the
* passed key(s) * passed key(s)
* *
* @param string ...$keys * @param string ...$keys
* @return self * @return self
*/ */
public function not(...$keys) public function not(...$keys)
@@ -238,8 +238,8 @@ class Content
/** /**
* Returns the raw data array * Returns the raw data array
* *
* @see self::data() * @see self::data()
* @return array * @return array
*/ */
public function toArray(): array public function toArray(): array
{ {
@@ -250,8 +250,8 @@ class Content
* Updates the content and returns * Updates the content and returns
* a cloned object * a cloned object
* *
* @param array $content * @param array $content
* @param bool $overwrite * @param bool $overwrite
* @return self * @return self
*/ */
public function update(array $content = null, bool $overwrite = false) public function update(array $content = null, bool $overwrite = false)

View File

@@ -85,7 +85,7 @@ class ContentLock
'user' => $user->id(), 'user' => $user->id(),
'email' => $user->email(), 'email' => $user->email(),
'time' => $time, 'time' => $time,
'unlockable' => ($time + 200) <= time() 'unlockable' => ($time + 60) <= time()
]; ];
} }
@@ -144,7 +144,10 @@ class ContentLock
// check if lock was set by another user // check if lock was set by another user
if ($this->data['lock']['user'] !== $this->user()->id()) { if ($this->data['lock']['user'] !== $this->user()->id()) {
throw new LogicException('The content lock can only be removed by the user who created it. Use unlock instead.', 409); throw new LogicException([
'fallback' => 'The content lock can only be removed by the user who created it. Use unlock instead.',
'httpCode' => 409
]);
} }
// remove lock // remove lock

View File

@@ -121,7 +121,7 @@ class ContentLocks
* Returns the file handle to a `.lock` file * Returns the file handle to a `.lock` file
* *
* @param string $file * @param string $file
* @param boolean $create Whether to create the file if it does not exist * @param bool $create Whether to create the file if it does not exist
* @return resource|null File handle * @return resource|null File handle
*/ */
protected function handle(string $file, bool $create = false) protected function handle(string $file, bool $create = false)
@@ -167,7 +167,7 @@ class ContentLocks
* *
* @param \Kirby\Cms\ModelWithContent $model * @param \Kirby\Cms\ModelWithContent $model
* @param array $data * @param array $data
* @return boolean * @return bool
*/ */
public function set(ModelWithContent $model, array $data): bool public function set(ModelWithContent $model, array $data): bool
{ {

View File

@@ -119,7 +119,7 @@ class ContentTranslation
/** /**
* Checks if the translation file exists * Checks if the translation file exists
* *
* @return boolean * @return bool
*/ */
public function exists(): bool public function exists(): bool
{ {
@@ -140,7 +140,7 @@ class ContentTranslation
* Checks if the this is the default translation * Checks if the this is the default translation
* of the model * of the model
* *
* @return boolean * @return bool
*/ */
public function isDefault(): bool public function isDefault(): bool
{ {

View File

@@ -27,7 +27,7 @@ class Dir extends \Kirby\Toolkit\Dir
* @param string $dir * @param string $dir
* @param string $contentExtension * @param string $contentExtension
* @param array $contentIgnore * @param array $contentIgnore
* @param boolean $multilang * @param bool $multilang
* @return array * @return array
*/ */
public static function inventory(string $dir, string $contentExtension = 'txt', array $contentIgnore = null, bool $multilang = false): array public static function inventory(string $dir, string $contentExtension = 'txt', array $contentIgnore = null, bool $multilang = false): array

View File

@@ -95,7 +95,7 @@ class Field
* *
* @param object $parent * @param object $parent
* @param string $key * @param string $key
* @param mixed $value * @param mixed $value
*/ */
public function __construct($parent = null, string $key, $value) public function __construct($parent = null, string $key, $value)
{ {
@@ -130,7 +130,7 @@ class Field
/** /**
* Checks if the field exists in the content data array * Checks if the field exists in the content data array
* *
* @return boolean * @return bool
*/ */
public function exists(): bool public function exists(): bool
{ {
@@ -140,7 +140,7 @@ class Field
/** /**
* Checks if the field content is empty * Checks if the field content is empty
* *
* @return boolean * @return bool
*/ */
public function isEmpty(): bool public function isEmpty(): bool
{ {
@@ -150,7 +150,7 @@ class Field
/** /**
* Checks if the field content is not empty * Checks if the field content is not empty
* *
* @return boolean * @return bool
*/ */
public function isNotEmpty(): bool public function isNotEmpty(): bool
{ {
@@ -232,7 +232,7 @@ class Field
* the modified field will be returned. Otherwise it * the modified field will be returned. Otherwise it
* will return the field value. * will return the field value.
* *
* @param string|Closure $value * @param string|Closure $value
* @return mixed * @return mixed
*/ */
public function value($value = null) public function value($value = null)

View File

@@ -231,12 +231,14 @@ class File extends ModelWithContent
* gets dragged onto a textarea * gets dragged onto a textarea
* *
* @internal * @internal
* @param string $type (auto|kirbytext|markdown) * @param string $type (null|auto|kirbytext|markdown)
* @param bool $absolute * @param bool $absolute
* @return string * @return string
*/ */
public function dragText($type = 'auto', bool $absolute = false): string public function dragText(string $type = null, bool $absolute = false): string
{ {
$type = $type ?? 'auto';
if ($type === 'auto') { if ($type === 'auto') {
$type = option('panel.kirbytext', true) ? 'kirbytext' : 'markdown'; $type = option('panel.kirbytext', true) ? 'kirbytext' : 'markdown';
} }
@@ -363,14 +365,16 @@ class File extends ModelWithContent
*/ */
public function meta() public function meta()
{ {
deprecated('$file->meta() is deprecated, use $file->content() instead. $file->meta() will be removed in Kirby 3.5.0.');
return $this->content(); return $this->content();
} }
/** /**
* Get the file's last modification time. * Get the file's last modification time.
* *
* @param string $format * @param string $format
* @param string|null $handler date or strftime * @param string|null $handler date or strftime
* @return mixed * @return mixed
*/ */
public function modified(string $format = null, string $handler = null) public function modified(string $format = null, string $handler = null)
@@ -392,7 +396,7 @@ class File extends ModelWithContent
* Timestamp of the last modification * Timestamp of the last modification
* of the content file * of the content file
* *
* @return integer * @return int
*/ */
protected function modifiedContent(): int protected function modifiedContent(): int
{ {
@@ -403,7 +407,7 @@ class File extends ModelWithContent
* Timestamp of the last modification * Timestamp of the last modification
* of the source file * of the source file
* *
* @return integer * @return int
*/ */
protected function modifiedFile(): int protected function modifiedFile(): int
{ {

View File

@@ -82,7 +82,7 @@ trait FileActions
/** /**
* Changes the file's sorting number in the meta file * Changes the file's sorting number in the meta file
* *
* @param integer $sort * @param int $sort
* @return self * @return self
*/ */
public function changeSort(int $sort) public function changeSort(int $sort)
@@ -256,6 +256,8 @@ trait FileActions
*/ */
public function rename(string $name, bool $sanitize = true) public function rename(string $name, bool $sanitize = true)
{ {
deprecated('$file->rename() is deprecated, use $file->changeName() instead. $file->rename() will be removed in Kirby 3.5.0.');
return $this->changeName($name, $sanitize); return $this->changeName($name, $sanitize);
} }

View File

@@ -44,7 +44,7 @@ class FileBlueprint extends Blueprint
} }
/** /**
* @param mixed $accept * @param mixed $accept
* @return array * @return array
*/ */
protected function normalizeAccept($accept = null): array protected function normalizeAccept($accept = null): array

View File

@@ -82,7 +82,7 @@ trait FileFoundation
/** /**
* Checks if the file exists on disk * Checks if the file exists on disk
* *
* @return boolean * @return bool
*/ */
public function exists(): bool public function exists(): bool
{ {
@@ -102,7 +102,7 @@ trait FileFoundation
/** /**
* Converts the file to html * Converts the file to html
* *
* @param array $attr * @param array $attr
* @return string * @return string
*/ */
public function html(array $attr = []): string public function html(array $attr = []): string
@@ -117,7 +117,7 @@ trait FileFoundation
/** /**
* Checks if the file is a resizable image * Checks if the file is a resizable image
* *
* @return boolean * @return bool
*/ */
public function isResizable(): bool public function isResizable(): bool
{ {
@@ -136,7 +136,7 @@ trait FileFoundation
* Checks if a preview can be displayed for the file * Checks if a preview can be displayed for the file
* in the panel or in the frontend * in the panel or in the frontend
* *
* @return boolean * @return bool
*/ */
public function isViewable(): bool public function isViewable(): bool
{ {
@@ -165,8 +165,8 @@ trait FileFoundation
/** /**
* Get the file's last modification time. * Get the file's last modification time.
* *
* @param string $format * @param string $format
* @param string|null $handler date or strftime * @param string|null $handler date or strftime
* @return mixed * @return mixed
*/ */
public function modified(string $format = null, string $handler = null) public function modified(string $format = null, string $handler = null)

View File

@@ -18,7 +18,7 @@ trait FileModifications
/** /**
* Blurs the image by the given amount of pixels * Blurs the image by the given amount of pixels
* *
* @param boolean $pixels * @param bool $pixels
* @return \Kirby\Cms\FileVersion|\Kirby\Cms\File * @return \Kirby\Cms\FileVersion|\Kirby\Cms\File
*/ */
public function blur($pixels = true) public function blur($pixels = true)
@@ -39,8 +39,8 @@ trait FileModifications
/** /**
* Crops the image by the given width and height * Crops the image by the given width and height
* *
* @param integer $width * @param int $width
* @param integer $height * @param int $height
* @param string|array $options * @param string|array $options
* @return \Kirby\Cms\FileVersion|\Kirby\Cms\File * @return \Kirby\Cms\FileVersion|\Kirby\Cms\File
*/ */
@@ -71,7 +71,7 @@ trait FileModifications
/** /**
* Sets the JPEG compression quality * Sets the JPEG compression quality
* *
* @param integer $quality * @param int $quality
* @return \Kirby\Cms\FileVersion|\Kirby\Cms\File * @return \Kirby\Cms\FileVersion|\Kirby\Cms\File
*/ */
public function quality(int $quality) public function quality(int $quality)
@@ -83,9 +83,9 @@ trait FileModifications
* Resizes the file with the given width and height * Resizes the file with the given width and height
* while keeping the aspect ratio. * while keeping the aspect ratio.
* *
* @param integer $width * @param int $width
* @param integer $height * @param int $height
* @param integer $quality * @param int $quality
* @return \Kirby\Cms\FileVersion|\Kirby\Cms\File * @return \Kirby\Cms\FileVersion|\Kirby\Cms\File
*/ */
public function resize(int $width = null, int $height = null, int $quality = null) public function resize(int $width = null, int $height = null, int $quality = null)

73
kirby/src/Cms/FilePicker.php Executable file
View File

@@ -0,0 +1,73 @@
<?php
namespace Kirby\Cms;
use Kirby\Exception\InvalidArgumentException;
/**
* The FilePicker class helps to
* fetch the right files for the API calls
* for the file picker component in the panel.
*
* @package Kirby Cms
* @author Bastian Allgeier <bastian@getkirby.com>
* @link https://getkirby.com
* @copyright Bastian Allgeier GmbH
* @license https://getkirby.com/license
*/
class FilePicker extends Picker
{
/**
* Extends the basic defaults
*
* @return array
*/
public function defaults(): array
{
$defaults = parent::defaults();
$defaults['text'] = '{{ file.filename }}';
return $defaults;
}
/**
* Search all files for the picker
*
* @return \Kirby\Cms\Files|null
*/
public function items()
{
$model = $this->options['model'];
// find the right default query
if (empty($this->options['query']) === false) {
$query = $this->options['query'];
} elseif (is_a($model, 'Kirby\Cms\File') === true) {
$query = 'file.siblings';
} else {
$query = $model::CLASS_ALIAS . '.files';
}
// fetch all files for the picker
$files = $model->query($query);
// help mitigate some typical query usage issues
// by converting site and page objects to proper
// pages by returning their children
if (is_a($files, 'Kirby\Cms\Site') === true) {
$files = $files->files();
} elseif (is_a($files, 'Kirby\Cms\Page') === true) {
$files = $files->files();
} elseif (is_a($files, 'Kirby\Cms\User') === true) {
$files = $files->files();
} elseif (is_a($files, 'Kirby\Cms\Files') === false) {
throw new InvalidArgumentException('Your query must return a set of files');
}
// search
$files = $this->search($files);
// paginate
return $this->paginate($files);
}
}

View File

@@ -68,7 +68,7 @@ class Filename
* *
* @param string $filename * @param string $filename
* @param string $template * @param string $template
* @param array $attributes * @param array $attributes
*/ */
public function __construct(string $filename, string $template, array $attributes = []) public function __construct(string $filename, string $template, array $attributes = [])
{ {
@@ -118,7 +118,7 @@ class Filename
* to a string, that can be used in the * to a string, that can be used in the
* new filename * new filename
* *
* @param string $prefix The prefix will be used in the filename creation * @param string $prefix The prefix will be used in the filename creation
* @return string * @return string
*/ */
public function attributesToString(string $prefix = null): string public function attributesToString(string $prefix = null): string
@@ -265,7 +265,7 @@ class Filename
* to lowercase and `jpeg` will be * to lowercase and `jpeg` will be
* replaced with `jpg` * replaced with `jpg`
* *
* @param string $extension * @param string $extension
* @return string * @return string
*/ */
protected function sanitizeExtension(string $extension): string protected function sanitizeExtension(string $extension): string
@@ -279,7 +279,7 @@ class Filename
* Sanitizes the name with Kirby's * Sanitizes the name with Kirby's
* Str::slug function * Str::slug function
* *
* @param string $name * @param string $name
* @return string * @return string
*/ */
protected function sanitizeName(string $name): string protected function sanitizeName(string $name): string

View File

@@ -157,7 +157,7 @@ trait HasChildren
/** /**
* Checks if the model has any children * Checks if the model has any children
* *
* @return boolean * @return bool
*/ */
public function hasChildren(): bool public function hasChildren(): bool
{ {
@@ -167,7 +167,7 @@ trait HasChildren
/** /**
* Checks if the model has any drafts * Checks if the model has any drafts
* *
* @return boolean * @return bool
*/ */
public function hasDrafts(): bool public function hasDrafts(): bool
{ {
@@ -175,18 +175,20 @@ trait HasChildren
} }
/** /**
* @deprecated 3.0.0 Use `Page::hasUnlistedChildren` instead * @deprecated 3.0.0 Use `Page::hasUnlistedChildren()` instead
* @return boolean * @return bool
*/ */
public function hasInvisibleChildren(): bool public function hasInvisibleChildren(): bool
{ {
deprecated('$page->hasInvisibleChildren() is deprecated, use $page->hasUnlistedChildren() instead. $page->hasInvisibleChildren() will be removed in Kirby 3.5.0.');
return $this->hasUnlistedChildren(); return $this->hasUnlistedChildren();
} }
/** /**
* Checks if the page has any listed children * Checks if the page has any listed children
* *
* @return boolean * @return bool
*/ */
public function hasListedChildren(): bool public function hasListedChildren(): bool
{ {
@@ -196,7 +198,7 @@ trait HasChildren
/** /**
* Checks if the page has any unlisted children * Checks if the page has any unlisted children
* *
* @return boolean * @return bool
*/ */
public function hasUnlistedChildren(): bool public function hasUnlistedChildren(): bool
{ {
@@ -204,11 +206,13 @@ trait HasChildren
} }
/** /**
* @deprecated 3.0.0 Use `Page::hasListedChildren` instead * @deprecated 3.0.0 Use `Page::hasListedChildren()` instead
* @return boolean * @return bool
*/ */
public function hasVisibleChildren(): bool public function hasVisibleChildren(): bool
{ {
deprecated('$page->hasVisibleChildren() is deprecated, use $page->hasListedChildren() instead. $page->hasVisibleChildren() will be removed in Kirby 3.5.0.');
return $this->hasListedChildren(); return $this->hasListedChildren();
} }

View File

@@ -25,8 +25,8 @@ trait HasMethods
* passed arguments * passed arguments
* *
* @internal * @internal
* @param string $method * @param string $method
* @param array $args * @param array $args
* @return mixed * @return mixed
*/ */
public function callMethod(string $method, array $args = []) public function callMethod(string $method, array $args = [])
@@ -39,7 +39,7 @@ trait HasMethods
* *
* @internal * @internal
* @param string $method * @param string $method
* @return boolean * @return bool
*/ */
public function hasMethod(string $method): bool public function hasMethod(string $method): bool
{ {

View File

@@ -58,6 +58,11 @@ class Language extends Model
*/ */
protected $slugs; protected $slugs;
/**
* @var array|null
*/
protected $smartypants;
/** /**
* @var array|null * @var array|null
*/ */
@@ -85,6 +90,7 @@ class Language extends Model
'locale', 'locale',
'name', 'name',
'slugs', 'slugs',
'smartypants',
'translations', 'translations',
'url', 'url',
]); ]);
@@ -111,6 +117,28 @@ class Language extends Model
return $this->code(); return $this->code();
} }
/**
* Returns the base Url for the language
* without the path or other cruft
*
* @return string
*/
public function baseUrl(): string
{
$kirbyUrl = $this->kirby()->url();
$languageUrl = $this->url();
if (empty($this->url)) {
return $kirbyUrl;
}
if (Str::startsWith($languageUrl, $kirbyUrl) === true) {
return $kirbyUrl;
}
return Url::base($languageUrl) ?? $kirbyUrl;
}
/** /**
* Returns the language code/id. * Returns the language code/id.
* The language code is used in * The language code is used in
@@ -129,7 +157,7 @@ class Language extends Model
* *
* @param string $from * @param string $from
* @param string $to * @param string $to
* @return boolean * @return bool
*/ */
protected static function converter(string $from, string $to): bool protected static function converter(string $from, string $to): bool
{ {
@@ -201,7 +229,7 @@ class Language extends Model
* all its translation files * all its translation files
* *
* @internal * @internal
* @return boolean * @return bool
*/ */
public function delete(): bool public function delete(): bool
{ {
@@ -270,7 +298,7 @@ class Language extends Model
/** /**
* Check if the language file exists * Check if the language file exists
* *
* @return boolean * @return bool
*/ */
public function exists(): bool public function exists(): bool
{ {
@@ -281,7 +309,7 @@ class Language extends Model
* Checks if this is the default language * Checks if this is the default language
* for the site. * for the site.
* *
* @return boolean * @return bool
*/ */
public function isDefault(): bool public function isDefault(): bool
{ {
@@ -325,6 +353,20 @@ class Language extends Model
return $this->name; return $this->name;
} }
/**
* Returns the URL path for the language
*
* @return string
*/
public function path(): string
{
if ($this->url === null) {
return $this->code;
}
return Url::path($this->url());
}
/** /**
* Returns the routing pattern for the language * Returns the routing pattern for the language
* *
@@ -332,11 +374,13 @@ class Language extends Model
*/ */
public function pattern(): string public function pattern(): string
{ {
if (empty($this->url) === true) { $path = $this->path();
return $this->code;
if (empty($path) === true) {
return '(:all)';
} }
return trim($this->url, '/'); return $path . '/(:all?)';
} }
/** /**
@@ -430,7 +474,7 @@ class Language extends Model
} }
/** /**
* @param boolean $default * @param bool $default
* @return self * @return self
*/ */
protected function setDefault(bool $default = false) protected function setDefault(bool $default = false)
@@ -488,6 +532,16 @@ class Language extends Model
return $this; return $this;
} }
/**
* @param array $smartypants
* @return self
*/
protected function setSmartypants(array $smartypants = null)
{
$this->smartypants = $smartypants ?? [];
return $this;
}
/** /**
* @param array $translations * @param array $translations
* @return self * @return self
@@ -518,6 +572,16 @@ class Language extends Model
return $this->slugs; return $this->slugs;
} }
/**
* Returns the custom SmartyPants options for this language
*
* @return array
*/
public function smartypants(): array
{
return $this->smartypants;
}
/** /**
* Returns the most important * Returns the most important
* properties as array * properties as array
@@ -554,7 +618,13 @@ class Language extends Model
*/ */
public function url(): string public function url(): string
{ {
return Url::makeAbsolute($this->pattern(), $this->kirby()->url()); $url = $this->url;
if ($url === null) {
$url = '/' . $this->code;
}
return Url::makeAbsolute($url, $this->kirby()->url());
} }
/** /**

143
kirby/src/Cms/LanguageRoutes.php Executable file
View File

@@ -0,0 +1,143 @@
<?php
namespace Kirby\Cms;
use Kirby\Toolkit\F;
class LanguageRoutes
{
/**
* Creates all multi-language routes
*
* @param \Kirby\Cms\App $kirby
* @return array
*/
public static function create(App $kirby): array
{
$routes = [];
// add the route for the home page
$routes[] = static::home($kirby);
// Kirby's base url
$baseurl = $kirby->url();
foreach ($kirby->languages() as $language) {
// ignore languages with a different base url
if ($language->baseurl() !== $baseurl) {
continue;
}
$routes[] = [
'pattern' => $language->pattern(),
'method' => 'ALL',
'env' => 'site',
'action' => function ($path = null) use ($language) {
if ($result = $language->router()->call($path)) {
return $result;
}
// jump through to the fallback if nothing
// can be found for this language
$this->next();
}
];
}
$routes[] = static::fallback($kirby);
return $routes;
}
/**
* Create the fallback route
* for unprefixed default language URLs.
*
* @param \Kirby\Cms\App $kirby
* @return array
*/
public static function fallback(App $kirby): array
{
return [
'pattern' => '(:all)',
'method' => 'ALL',
'env' => 'site',
'action' => function (string $path) use ($kirby) {
// check for content representations or files
$extension = F::extension($path);
// try to redirect prefixed pages
if (empty($extension) === true && $page = $kirby->page($path)) {
$url = $kirby->request()->url([
'query' => null,
'params' => null,
'fragment' => null
]);
if ($url->toString() !== $page->url()) {
return $kirby
->response()
->redirect($page->url());
}
}
return $kirby->defaultLanguage()->router()->call($path);
}
];
}
/**
* Create the multi-language home page route
*
* @param \Kirby\Cms\App $kirby
* @return array
*/
public static function home(App $kirby): array
{
// Multi-language home
return [
'pattern' => '',
'method' => 'ALL',
'env' => 'site',
'action' => function () use ($kirby) {
// find all languages with the same base url as the current installation
$languages = $kirby->languages()->filterBy('baseurl', $kirby->url());
// if there's no language with a matching base url,
// redirect to the default language
if ($languages->count() === 0) {
return $kirby
->response()
->redirect($kirby->defaultLanguage()->url());
}
// if there's just one language, we take that to render the home page
if ($languages->count() === 1) {
$currentLanguage = $languages->first();
} else {
$currentLanguage = $kirby->defaultLanguage();
}
// language detection on the home page with / as URL
if ($kirby->url() !== $currentLanguage->url()) {
if ($kirby->option('languages.detect') === true) {
return $kirby
->response()
->redirect($kirby->detectedLanguage()->url());
}
return $kirby
->response()
->redirect($currentLanguage->url());
}
// render the home page of the current language
return $currentLanguage->router()->call();
}
];
}
}

View File

@@ -72,11 +72,13 @@ class Languages extends Collection
} }
/** /**
* @deprecated 3.0.0 Use `Languages::default()`instead * @deprecated 3.0.0 Use `Languages::default()` instead
* @return \Kirby\Cms\Language|null * @return \Kirby\Cms\Language|null
*/ */
public function findDefault() public function findDefault()
{ {
deprecated('$languages->findDefault() is deprecated, use $languages->default() instead. $languages->findDefault() will be removed in Kirby 3.5.0.');
return $this->default(); return $this->default();
} }

View File

@@ -59,7 +59,7 @@ class Media
* *
* @param string $src * @param string $src
* @param string $dest * @param string $dest
* @return boolean * @return bool
*/ */
public static function publish(string $src, string $dest): bool public static function publish(string $src, string $dest): bool
{ {

View File

@@ -19,6 +19,14 @@ use Throwable;
*/ */
abstract class ModelWithContent extends Model abstract class ModelWithContent extends Model
{ {
/**
* Each model must define a CLASS_ALIAS
* which will be used in template queries.
* The CLASS_ALIAS is a short human-readable
* version of the class name. I.e. page.
*/
const CLASS_ALIAS = null;
/** /**
* The content * The content
* *
@@ -194,8 +202,8 @@ abstract class ModelWithContent extends Model
* Decrement a given field value * Decrement a given field value
* *
* @param string $field * @param string $field
* @param integer $by * @param int $by
* @param integer $min * @param int $min
* @return self * @return self
*/ */
public function decrement(string $field, int $by = 1, int $min = 0) public function decrement(string $field, int $by = 1, int $min = 0)
@@ -231,8 +239,8 @@ abstract class ModelWithContent extends Model
* Increment a given field value * Increment a given field value
* *
* @param string $field * @param string $field
* @param integer $by * @param int $by
* @param integer $max * @param int $max
* @return self * @return self
*/ */
public function increment(string $field, int $by = 1, int $max = null) public function increment(string $field, int $by = 1, int $max = null)
@@ -246,10 +254,21 @@ abstract class ModelWithContent extends Model
return $this->update([$field => $value]); return $this->update([$field => $value]);
} }
/**
* Checks if the model is locked for the current user
*
* @return bool
*/
public function isLocked(): bool
{
$lock = $this->lock();
return $lock && $lock->isLocked() === true;
}
/** /**
* Checks if the data has any errors * Checks if the data has any errors
* *
* @return boolean * @return bool
*/ */
public function isValid(): bool public function isValid(): bool
{ {
@@ -382,6 +401,38 @@ abstract class ModelWithContent extends Model
return $image; return $image;
} }
/**
* Returns an array of all actions
* that can be performed in the Panel
* This also checks for the lock status
*
* @param array $unlock An array of options that will be force-unlocked
* @return array
*/
public function panelOptions(array $unlock = []): array
{
$options = $this->permissions()->toArray();
if ($this->isLocked()) {
foreach ($options as $key => $value) {
if (in_array($key, $unlock)) {
continue;
}
$options[$key] = false;
}
}
return $options;
}
/**
* Must return the permissions object for the model
*
* @return \Kirby\Cms\ModelPermissions
*/
abstract public function permissions();
/** /**
* Creates a string query, starting from the model * Creates a string query, starting from the model
* *
@@ -618,7 +669,7 @@ abstract class ModelWithContent extends Model
* *
* @param array $input * @param array $input
* @param string $languageCode * @param string $languageCode
* @param boolean $validate * @param bool $validate
* @return self * @return self
*/ */
public function update(array $input = null, string $languageCode = null, bool $validate = false) public function update(array $input = null, string $languageCode = null, bool $validate = false)
@@ -657,7 +708,7 @@ abstract class ModelWithContent extends Model
* @internal * @internal
* @param array $data * @param array $data
* @param string $languageCode * @param string $languageCode
* @return boolean * @return bool
*/ */
public function writeContent(array $data, string $languageCode = null): bool public function writeContent(array $data, string $languageCode = null): bool
{ {

Some files were not shown because too many files have changed in this diff Show More