This commit is contained in:
Bastian Allgeier
2020-07-07 12:40:13 +02:00
parent 5f025ac2c2
commit f79d2e960c
176 changed files with 10532 additions and 5343 deletions

View File

@@ -1,16 +1,3 @@
# Security Policy
## Supported Versions
| Version | Supported |
| ------- | ------------------ |
| 3.2.3+ | :white_check_mark: |
| 2.5.12+ | :white_check_mark: |
## Security Guide
Please follow our security guide to keep your Kirby installation safe: https://getkirby.com/docs/guide/security#reporting-security-issues
## Reporting a Vulnerability
If you have spotted a vulnerability in Kirby's core or the Panel, please make sure to let us know immediately. We take any report very seriously. You can always write us directly at support@getkirby.com. Please do not write to us publicly, e.g. in the forum.
Please see the [Security Policy on the Kirby website](https://getkirby.com/security) for a list of the currently supported Kirby versions and of past security incidents as well as for information on how to report security vulnerabilities in the Kirby core or in the Panel.

83
kirby/assets/whoops.css Executable file
View File

@@ -0,0 +1,83 @@
body {
background: #efefef;
font: normal normal 400 12px/1.5 -apple-system, BlinkMacSystemFont, Segoe UI,
Roboto, Helvetica, Arial, sans-serif;
}
.left-panel {
background: transparent;
}
header {
background-color: #313740;
}
.exc-title-primary {
color: hsl(0, 71%, 55%);
}
.frame.active {
color: hsl(0, 71%, 55%);
box-shadow: inset -5px 0 0 0 #d16464;
}
.frame:not(.active):hover {
background: rgba(203, 215, 229, 0.5);
}
.rightButton {
color: #999;
box-shadow: inset 0 0 0 1px #777;
border-radius: 0;
}
.rightButton:hover {
box-shadow: inset 0 0 0 1px #555;
color: #777;
}
.details-heading {
color: #7e9abf;
font-weight: 500;
}
.frame-code {
background: #000;
}
pre.code-block,
code.code-block,
.frame-args.code-block,
.frame-args.code-block samp {
background: #16171a;
}
.linenums li.current {
background: transparent;
}
.linenums li.current.active {
background: rgba(209, 100, 100, 0.3);
}
pre .atv,
code .atv,
pre .str,
code .str {
color: #a7bd68;
}
pre .tag,
code .tag {
color: #d16464;
}
pre .kwd,
code .kwd {
color: #8abeb7;
}
pre .atn,
code .atn {
color: #de935f;
}

View File

@@ -2,9 +2,12 @@
/**
* Validate the PHP version to already
* stop at older versions
* stop at older or too recent versions
*/
if (version_compare(phpversion(), '7.1.0', '>=') === false) {
if (
version_compare(PHP_VERSION, '7.2.0', '>=') === false ||
version_compare(PHP_VERSION, '7.5.0', '<') === false
) {
die(include __DIR__ . '/views/php.php');
}

3466
kirby/cacert.pem Executable file

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
{
"name": "getkirby/cms",
"description": "The Kirby 3 core",
"version": "3.3.6",
"version": "3.4.0",
"license": "proprietary",
"keywords": ["kirby", "cms", "core"],
"homepage": "https://getkirby.com",
@@ -20,17 +20,17 @@
"source": "https://github.com/getkirby/kirby"
},
"require": {
"php": ">=7.1.0",
"php": ">=7.2.0 <7.5.0",
"ext-mbstring": "*",
"ext-ctype": "*",
"getkirby/composer-installer": "^1.0",
"mustangostang/spyc": "0.6.2",
"mustangostang/spyc": "0.6.3",
"michelf/php-smartypants": "1.8.1",
"claviska/simpleimage": "3.3.3",
"phpmailer/phpmailer": "6.0.7",
"filp/whoops": "2.3.1",
"claviska/simpleimage": "3.3.4",
"phpmailer/phpmailer": "6.1.6",
"filp/whoops": "2.7.2",
"true/punycode": "2.1.1",
"laminas/laminas-escaper": "2.6.0"
"laminas/laminas-escaper": "2.6.1"
},
"autoload": {
"files": ["config/setup.php"],
@@ -41,10 +41,11 @@
},
"scripts": {
"analyze": "phpstan analyse",
"test": "phpunit --stderr --coverage-html=tests/coverage",
"zip": "composer archive --format=zip --file=dist",
"build": "./scripts/build",
"fix": "php-cs-fixer fix --config .php_cs"
"fix": "php-cs-fixer fix --config .php_cs",
"post-update-cmd": "curl -o cacert.pem https://curl.haxx.se/ca/cacert.pem",
"test": "phpunit --stderr --coverage-html=tests/coverage",
"zip": "composer archive --format=zip --file=dist"
},
"config": {
"optimize-autoloader": true

106
kirby/composer.lock generated
View File

@@ -4,20 +4,20 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "957cce44d582e1e5af20616ff45b9c12",
"content-hash": "8ec61411e7f3b3a717572d0847654a96",
"packages": [
{
"name": "claviska/simpleimage",
"version": "3.3.3",
"version": "3.3.4",
"source": {
"type": "git",
"url": "https://github.com/claviska/SimpleImage.git",
"reference": "31ba5b8358e1663a2813e2ada7242fa8d97a96dc"
"reference": "3786d80af8e6d05e5e42f0350e5e5da5b92041a0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/claviska/SimpleImage/zipball/31ba5b8358e1663a2813e2ada7242fa8d97a96dc",
"reference": "31ba5b8358e1663a2813e2ada7242fa8d97a96dc",
"url": "https://api.github.com/repos/claviska/SimpleImage/zipball/3786d80af8e6d05e5e42f0350e5e5da5b92041a0",
"reference": "3786d80af8e6d05e5e42f0350e5e5da5b92041a0",
"shasum": ""
},
"require": {
@@ -43,20 +43,20 @@
}
],
"description": "A PHP class that makes working with images as simple as possible.",
"time": "2017-09-12T09:03:56+00:00"
"time": "2019-09-26T01:22:02+00:00"
},
{
"name": "filp/whoops",
"version": "2.3.1",
"version": "2.7.2",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
"reference": "bc0fd11bc455cc20ee4b5edabc63ebbf859324c7"
"reference": "17d0d3f266c8f925ebd035cd36f83cf802b47d4a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filp/whoops/zipball/bc0fd11bc455cc20ee4b5edabc63ebbf859324c7",
"reference": "bc0fd11bc455cc20ee4b5edabc63ebbf859324c7",
"url": "https://api.github.com/repos/filp/whoops/zipball/17d0d3f266c8f925ebd035cd36f83cf802b47d4a",
"reference": "17d0d3f266c8f925ebd035cd36f83cf802b47d4a",
"shasum": ""
},
"require": {
@@ -65,8 +65,8 @@
},
"require-dev": {
"mockery/mockery": "^0.9 || ^1.0",
"phpunit/phpunit": "^4.8.35 || ^5.7",
"symfony/var-dumper": "^2.6 || ^3.0 || ^4.0"
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0",
"symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0"
},
"suggest": {
"symfony/var-dumper": "Pretty print complex values better with var-dumper available",
@@ -75,7 +75,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
"dev-master": "2.6-dev"
}
},
"autoload": {
@@ -104,7 +104,7 @@
"throwable",
"whoops"
],
"time": "2018-10-23T09:00:00+00:00"
"time": "2020-05-05T12:28:07+00:00"
},
{
"name": "getkirby/composer-installer",
@@ -146,16 +146,16 @@
},
{
"name": "laminas/laminas-escaper",
"version": "2.6.0",
"version": "2.6.1",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-escaper.git",
"reference": "72d3a14647f6234cdd9386d6de821a98e539af91"
"reference": "25f2a053eadfa92ddacb609dcbbc39362610da70"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/72d3a14647f6234cdd9386d6de821a98e539af91",
"reference": "72d3a14647f6234cdd9386d6de821a98e539af91",
"url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/25f2a053eadfa92ddacb609dcbbc39362610da70",
"reference": "25f2a053eadfa92ddacb609dcbbc39362610da70",
"shasum": ""
},
"require": {
@@ -191,20 +191,20 @@
"escaper",
"laminas"
],
"time": "2019-12-31T16:43:29+00:00"
"time": "2019-12-31T16:43:30+00:00"
},
{
"name": "laminas/laminas-zendframework-bridge",
"version": "1.0.3",
"version": "1.0.4",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-zendframework-bridge.git",
"reference": "bfbbdb6c998d50dbf69d2187cb78a5f1fa36e1e9"
"reference": "fcd87520e4943d968557803919523772475e8ea3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/bfbbdb6c998d50dbf69d2187cb78a5f1fa36e1e9",
"reference": "bfbbdb6c998d50dbf69d2187cb78a5f1fa36e1e9",
"url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/fcd87520e4943d968557803919523772475e8ea3",
"reference": "fcd87520e4943d968557803919523772475e8ea3",
"shasum": ""
},
"require": {
@@ -243,7 +243,7 @@
"laminas",
"zf"
],
"time": "2020-04-03T16:01:00+00:00"
"time": "2020-05-20T16:45:56+00:00"
},
{
"name": "league/color-extractor",
@@ -351,16 +351,16 @@
},
{
"name": "mustangostang/spyc",
"version": "0.6.2",
"version": "0.6.3",
"source": {
"type": "git",
"url": "https://github.com/mustangostang/spyc.git",
"reference": "23c35ae854d835f2d7bcc3e3ad743d7e57a8c14d"
"url": "git@github.com:mustangostang/spyc.git",
"reference": "4627c838b16550b666d15aeae1e5289dd5b77da0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/mustangostang/spyc/zipball/23c35ae854d835f2d7bcc3e3ad743d7e57a8c14d",
"reference": "23c35ae854d835f2d7bcc3e3ad743d7e57a8c14d",
"url": "https://api.github.com/repos/mustangostang/spyc/zipball/4627c838b16550b666d15aeae1e5289dd5b77da0",
"reference": "4627c838b16550b666d15aeae1e5289dd5b77da0",
"shasum": ""
},
"require": {
@@ -397,20 +397,20 @@
"yaml",
"yml"
],
"time": "2017-02-24T16:06:33+00:00"
"time": "2019-09-10T13:16:29+00:00"
},
{
"name": "phpmailer/phpmailer",
"version": "v6.0.7",
"version": "v6.1.6",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "0c41a36d4508d470e376498c1c0c527aa36a2d59"
"reference": "c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/0c41a36d4508d470e376498c1c0c527aa36a2d59",
"reference": "0c41a36d4508d470e376498c1c0c527aa36a2d59",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3",
"reference": "c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3",
"shasum": ""
},
"require": {
@@ -419,13 +419,9 @@
"php": ">=5.5.0"
},
"require-dev": {
"doctrine/annotations": "1.2.*",
"doctrine/annotations": "^1.2",
"friendsofphp/php-cs-fixer": "^2.2",
"phpdocumentor/phpdocumentor": "2.*",
"phpunit/phpunit": "^4.8 || ^5.7",
"zendframework/zend-eventmanager": "3.0.*",
"zendframework/zend-i18n": "2.7.3",
"zendframework/zend-serializer": "2.7.*"
"phpunit/phpunit": "^4.8 || ^5.7"
},
"suggest": {
"ext-mbstring": "Needed to send email in multibyte encoding charset",
@@ -443,17 +439,17 @@
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-2.1"
"LGPL-2.1-only"
],
"authors": [
{
"name": "Jim Jagielski",
"email": "jimjag@gmail.com"
},
{
"name": "Marcus Bointon",
"email": "phpmailer@synchromedia.co.uk"
},
{
"name": "Jim Jagielski",
"email": "jimjag@gmail.com"
},
{
"name": "Andy Prevost",
"email": "codeworxtech@users.sourceforge.net"
@@ -463,7 +459,7 @@
}
],
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
"time": "2019-02-01T15:04:28+00:00"
"time": "2020-05-27T12:24:03+00:00"
},
{
"name": "psr/log",
@@ -514,16 +510,16 @@
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.15.0",
"version": "v1.17.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac"
"reference": "7110338d81ce1cbc3e273136e4574663627037a7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac",
"reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7110338d81ce1cbc3e273136e4574663627037a7",
"reference": "7110338d81ce1cbc3e273136e4574663627037a7",
"shasum": ""
},
"require": {
@@ -535,7 +531,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.15-dev"
"dev-master": "1.17-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@@ -569,7 +569,7 @@
"portable",
"shim"
],
"time": "2020-03-09T19:04:49+00:00"
"time": "2020-06-06T08:46:27+00:00"
},
{
"name": "true/punycode",
@@ -625,7 +625,7 @@
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": ">=7.1.0",
"php": ">=7.2.0 <7.5.0",
"ext-mbstring": "*",
"ext-ctype": "*"
},

View File

@@ -4,14 +4,15 @@ use Kirby\Exception\PermissionException;
return function () {
$auth = $this->kirby()->auth();
$allowImpersonation = $this->kirby()->option('api.allowImpersonation') ?? false;
// csrf token check
if ($auth->type() === 'session' && $auth->csrf() === false) {
if ($auth->type($allowImpersonation) === 'session' && $auth->csrf() === false) {
throw new PermissionException('Unauthenticated');
}
// get user from session or basic auth
if ($user = $auth->user()) {
if ($user = $auth->user(null, $allowImpersonation)) {
if ($user->role()->permissions()->for('access', 'panel') === false) {
throw new PermissionException(['key' => 'access.panel']);
}

View File

@@ -71,7 +71,13 @@ return [
return $this->user();
},
'version' => function () {
$user = $this->user();
if ($user && $user->role()->permissions()->for('access', 'settings') === true) {
return $this->kirby()->version();
} else {
return null;
}
}
],
'type' => 'Kirby\Cms\System',

View File

@@ -50,6 +50,9 @@ return [
'role' => function (User $user) {
return $user->role();
},
'roles' => function (User $user) {
return $user->roles();
},
'username' => function (User $user) {
return $user->username();
}

View File

@@ -103,5 +103,21 @@ return [
return $this->file($path, $filename)->changeName($this->requestBody('name'));
}
],
[
'pattern' => 'files/search',
'method' => 'GET|POST',
'action' => function () {
$files = $this
->site()
->index(true)
->filterBy('isReadable', true)
->files();
if ($this->requestMethod() === 'GET') {
return $files->search($this->requestQuery('q'));
} else {
return $files->query($this->requestBody());
}
}
],
];

View File

@@ -119,6 +119,12 @@ return [
return $this->user($id)->changeRole($this->requestBody('role'));
}
],
[
'pattern' => 'users/(:any)/roles',
'action' => function (string $id) {
return $this->user($id)->roles();
}
],
[
'pattern' => 'users/(:any)/sections/(:any)',
'method' => 'GET',

View File

@@ -1,17 +1,21 @@
<?php
use Kirby\Cms\App;
use Kirby\Cms\Collection;
use Kirby\Cms\File;
use Kirby\Cms\Filename;
use Kirby\Cms\FileVersion;
use Kirby\Cms\Template;
use Kirby\Data\Data;
use Kirby\Http\Server;
use Kirby\Http\Uri;
use Kirby\Http\Url;
use Kirby\Image\Darkroom;
use Kirby\Text\Markdown;
use Kirby\Text\SmartyPants;
use Kirby\Toolkit\A;
use Kirby\Toolkit\F;
use Kirby\Toolkit\Str;
use Kirby\Toolkit\Tpl as Snippet;
return [
@@ -134,6 +138,106 @@ return [
return $markdown->parse($text, $inline);
},
/**
* Add your own search engine
*
* @param \Kirby\Cms\App $kirby Kirby instance
* @param \Kirby\Cms\Collection $collection Collection of searchable models
* @param string $query
* @param mixed $params
* @return \Kirby\Cms\Collection|bool
*/
'search' => function (App $kirby, Collection $collection, string $query = null, $params = []) {
if (empty(trim($query)) === true) {
return $collection->limit(0);
}
if (is_string($params) === true) {
$params = ['fields' => Str::split($params, '|')];
}
$defaults = [
'fields' => [],
'minlength' => 2,
'score' => [],
'words' => false,
];
$options = array_merge($defaults, $params);
$collection = clone $collection;
$searchwords = preg_replace('/(\s)/u', ',', $query);
$searchwords = Str::split($searchwords, ',', $options['minlength']);
$lowerQuery = mb_strtolower($query);
if (empty($options['stopwords']) === false) {
$searchwords = array_diff($searchwords, $options['stopwords']);
}
$searchwords = array_map(function ($value) use ($options) {
return $options['words'] ? '\b' . preg_quote($value) . '\b' : preg_quote($value);
}, $searchwords);
$preg = '!(' . implode('|', $searchwords) . ')!i';
$results = $collection->filter(function ($item) use ($query, $preg, $options, $lowerQuery) {
$data = $item->content()->toArray();
$keys = array_keys($data);
$keys[] = 'id';
if (is_a($item, 'Kirby\Cms\User') === true) {
$keys[] = 'name';
$keys[] = 'email';
$keys[] = 'role';
} elseif (is_a($item, 'Kirby\Cms\Page') === true) {
// apply the default score for pages
$options['score'] = array_merge([
'id' => 64,
'title' => 64,
], $options['score']);
}
if (empty($options['fields']) === false) {
$fields = array_map('strtolower', $options['fields']);
$keys = array_intersect($keys, $fields);
}
$item->searchHits = 0;
$item->searchScore = 0;
foreach ($keys as $key) {
$score = $options['score'][$key] ?? 1;
$value = $data[$key] ?? (string)$item->$key();
$lowerValue = mb_strtolower($value);
// check for exact matches
if ($lowerQuery == $lowerValue) {
$item->searchScore += 16 * $score;
$item->searchHits += 1;
// check for exact beginning matches
} elseif (Str::startsWith($lowerValue, $lowerQuery) === true) {
$item->searchScore += 8 * $score;
$item->searchHits += 1;
// check for exact query matches
} elseif ($matches = preg_match_all('!' . preg_quote($query) . '!i', $value, $r)) {
$item->searchScore += 2 * $score;
$item->searchHits += $matches;
}
// check for any match
if ($matches = preg_match_all($preg, $value, $r)) {
$item->searchHits += $matches;
$item->searchScore += $matches * $score;
}
}
return $item->searchHits > 0 ? true : false;
});
return $results->sortBy('searchScore', 'desc');
},
/**
* Add your own SmartyPants parser
*
@@ -221,12 +325,51 @@ return [
*
* @param \Kirby\Cms\App $kirby Kirby instance
* @param string $path URL path
* @param array|null $options Array of options for the Uri class
* @param Closure $originalHandler Callback function to the original URL handler with `$path` and `$options` as parameters
* @param array|string|null $options Array of options for the Uri class
* @param Closure $originalHandler Deprecated: Callback function to the original URL handler with `$path` and `$options` as parameters
* Use `$kirby->nativeComponent('url')` inside your URL component instead.
* @return string
*/
'url' => function (App $kirby, string $path = null, $options = [], Closure $originalHandler): string {
return $originalHandler($path, $options);
'url' => function (App $kirby, string $path = null, $options = null, Closure $originalHandler = null): string {
$language = null;
// get language from simple string option
if (is_string($options) === true) {
$language = $options;
$options = null;
}
// get language from array
if (is_array($options) === true && isset($options['language']) === true) {
$language = $options['language'];
unset($options['language']);
}
// get a language url for the linked page, if the page can be found
if ($kirby->multilang() === true) {
$parts = Str::split($path, '#');
if ($page = page($parts[0] ?? null)) {
$path = $page->url($language);
if (isset($parts[1]) === true) {
$path .= '#' . $parts[1];
}
}
}
// keep relative urls
if (substr($path, 0, 2) === './' || substr($path, 0, 3) === '../') {
return $path;
}
$url = Url::makeAbsolute($path, $kirby->url());
if ($options === null) {
return $url;
}
return (new Uri($url, $options))->toString();
},
];

View File

@@ -1,6 +1,6 @@
<?php
use Kirby\Data\Yaml;
use Kirby\Data\Data;
use Kirby\Toolkit\A;
return [
@@ -78,7 +78,7 @@ return [
'toFiles' => function ($value = null) {
$files = [];
foreach (Yaml::decode($value) as $id) {
foreach (Data::decode($value, 'yaml') as $id) {
if (is_array($id) === true) {
$id = $id['id'] ?? null;
}

View File

@@ -3,12 +3,10 @@
return [
'extends' => 'tags',
'props' => [
/**
* Unset inherited props
*/
'accept' => null,
/**
* Custom icon to replace the arrow down.
*/
@@ -17,8 +15,10 @@ return [
},
/**
* Enable/disable the search in the dropdown
* Also limit displayed items (display: 20)
* and set minimum number of characters to search (min: 3)
*/
'search' => function (bool $search = true) {
'search' => function ($search = true) {
return $search;
},
/**

View File

@@ -1,6 +1,6 @@
<?php
use Kirby\Data\Yaml;
use Kirby\Data\Data;
use Kirby\Toolkit\A;
return [
@@ -72,7 +72,7 @@ return [
$pages = [];
$kirby = kirby();
foreach (Yaml::decode($value) as $id) {
foreach (Data::decode($value, 'yaml') as $id) {
if (is_array($id) === true) {
$id = $id['id'] ?? null;
}

View File

@@ -1,7 +1,7 @@
<?php
use Kirby\Cms\Form;
use Kirby\Data\Yaml;
use Kirby\Data\Data;
use Kirby\Toolkit\I18n;
return [
@@ -24,6 +24,14 @@ return [
// be lowercase as well.
return array_change_key_case($columns);
},
/**
* Toggles duplicating rows for the structure
*/
'duplicate' => function (bool $duplicate = true) {
return $duplicate;
},
/**
* The placeholder text if no items have been added yet
*/
@@ -62,6 +70,12 @@ return [
'min' => function (int $min = null) {
return $min;
},
/**
* Toggles adding to the top or bottom of the list
*/
'prepend' => function (bool $prepend = null) {
return $prepend;
},
/**
* Toggles drag & drop sorting
*/
@@ -131,7 +145,7 @@ return [
],
'methods' => [
'rows' => function ($value) {
$rows = Yaml::decode($value);
$rows = Data::decode($value, 'yaml');
$value = [];
foreach ($rows as $index => $row) {

View File

@@ -1,6 +1,6 @@
<?php
use Kirby\Data\Yaml;
use Kirby\Data\Data;
use Kirby\Toolkit\A;
return [
@@ -54,7 +54,7 @@ return [
$users = [];
$kirby = kirby();
foreach (Yaml::decode($value) as $email) {
foreach (Data::decode($value, 'yaml') as $email) {
if (is_array($email) === true) {
$email = $email['email'] ?? null;
}

View File

@@ -223,11 +223,11 @@ function go(string $url = null, int $code = 302)
/**
* Shortcut for html()
*
* @param string $string unencoded text
* @param string|null $string unencoded text
* @param bool $keepTags
* @return string
*/
function h(string $string = null, bool $keepTags = false)
function h(?string $string, bool $keepTags = false)
{
return Html::encode($string, $keepTags);
}
@@ -235,11 +235,11 @@ function h(string $string = null, bool $keepTags = false)
/**
* Creates safe html by encoding special characters
*
* @param string $string unencoded text
* @param string|null $string unencoded text
* @param bool $keepTags
* @return string
*/
function html(string $string = null, bool $keepTags = false)
function html(?string $string, bool $keepTags = false)
{
return Html::encode($string, $keepTags);
}

View File

@@ -2,14 +2,11 @@
use Kirby\Cms\App;
use Kirby\Cms\Field;
use Kirby\Cms\File;
use Kirby\Cms\Files;
use Kirby\Cms\Html;
use Kirby\Cms\Page;
use Kirby\Cms\Structure;
use Kirby\Cms\Url;
use Kirby\Data\Json;
use Kirby\Data\Yaml;
use Kirby\Data\Data;
use Kirby\Exception\Exception;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Toolkit\Str;
@@ -67,9 +64,8 @@ return function (App $app) {
'toData' => function (Field $field, string $method = ',') {
switch ($method) {
case 'yaml':
return Yaml::decode($field->value);
case 'json':
return Json::decode($field->value);
return Data::decode($field->value, $method);
default:
return $field->split($method);
}
@@ -216,7 +212,7 @@ return function (App $app) {
*/
'toStructure' => function (Field $field) {
try {
return new Structure(Yaml::decode($field->value), $field->parent());
return new Structure(Data::decode($field->value, 'yaml'), $field->parent());
} catch (Exception $e) {
if ($field->parent() === null) {
$message = 'Invalid structure data for "' . $field->key() . '" field';
@@ -287,6 +283,17 @@ return function (App $app) {
// manipulators
/**
* Applies the callback function to the field
* @since 3.4.0
*
* @param \Kirby\Cms\Field $field
* @param Closure $callback
*/
'callback' => function (Field $field, Closure $callback) {
return $callback($field);
},
/**
* Escapes the field value to be safely used in HTML
* templates without the risk of XSS attacks
@@ -309,7 +316,7 @@ return function (App $app) {
* @param string $rep
* @return \Kirby\Cms\Field
*/
'excerpt' => function (Field $field, int $chars = 0, bool $strip = true, string $rep = '…') {
'excerpt' => function (Field $field, int $chars = 0, bool $strip = true, string $rep = ' …') {
$field->value = Str::excerpt($field->kirbytext()->value(), $chars, $strip, $rep);
return $field;
},
@@ -326,14 +333,20 @@ return function (App $app) {
},
/**
* Converts all line breaks in the field content to `<br>` tags.
* 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.
* @since 3.3.0
*
* @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\Field
*/
'nl2br' => function (Field $field) {
$field->value = nl2br($field->value, false);
'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;
},
@@ -384,24 +397,6 @@ return function (App $app) {
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.
* @since 3.3.0
*
* @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
*
@@ -425,13 +420,55 @@ return function (App $app) {
},
/**
* Converts the field content to valid XML
* Converts all line breaks in the field content to `<br>` tags.
* @since 3.3.0
*
* @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\Field
*/
'xml' => function (Field $field) {
$field->value = Xml::encode($field->value);
'nl2br' => function (Field $field) {
$field->value = nl2br($field->value, false);
return $field;
},
/**
* Uses the field value as Kirby query
*
* @param \Kirby\Cms\Field $field
* @param string|null $expect
* @return mixed
*/
'query' => function (Field $field, string $expect = null) use ($app) {
if ($parent = $field->parent()) {
return $parent->query($field->value, $expect);
}
return Str::query($field->value, [
'kirby' => $app,
'site' => $app->site(),
'page' => $app->page()
]);
},
/**
* It parses any queries found in the field value.
*
* @param \Kirby\Cms\Field $field
* @param array $data
* @param string $fallback Fallback for tokens in the template that cannot be replaced
* @return \Kirby\Cms\Field
*/
'replace' => function (Field $field, array $data = [], string $fallback = '') use ($app) {
if ($parent = $field->parent()) {
$field->value = $field->parent()->toString($field->value, $data, $fallback);
} else {
$field->value = Str::template($field->value, array_replace([
'kirby' => $app,
'site' => $app->site(),
'page' => $app->page()
], $data), $fallback);
}
return $field;
},
@@ -475,7 +512,7 @@ return function (App $app) {
* Splits the field content into an array
*
* @param \Kirby\Cms\Field $field
* @return \Kirby\cms\Field
* @return array
*/
'split' => function (Field $field, $separator = ',') {
return Str::split((string)$field->value, $separator);
@@ -504,6 +541,17 @@ return function (App $app) {
return $field;
},
/**
* Converts the field content to valid XML
*
* @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\Field
*/
'xml' => function (Field $field) {
$field->value = Xml::encode($field->value);
return $field;
},
// aliases
/**

View File

@@ -83,6 +83,9 @@ return [
'files' => function () {
$files = $this->parent->files()->template($this->template);
// filter out all protected files
$files = $files->filterBy('isReadable', true);
if ($this->sortBy) {
$files = $files->sortBy(...$files::sortArgs($this->sortBy));
} elseif ($this->sortable === true) {
@@ -97,7 +100,8 @@ return [
// apply the default pagination
$files = $files->paginate([
'page' => $this->page,
'limit' => $this->limit
'limit' => $this->limit,
'method' => 'none' // the page is manually provided
]);
return $files;
@@ -219,6 +223,7 @@ return [
'errors' => $this->errors,
'options' => [
'accept' => $this->accept,
'apiUrl' => $this->parent->apiUrl(true),
'empty' => $this->empty,
'headline' => $this->headline,
'help' => $this->help,

View File

@@ -17,10 +17,11 @@ return [
],
'props' => [
/**
* Optional array of templates that should only be allowed to add.
* Optional array of templates that should only be allowed to add
* or `false` to completely disable page creation
*/
'create' => function ($add = null) {
return $add;
'create' => function ($create = null) {
return $create;
},
/**
* Enables/disables reverse sorting
@@ -136,7 +137,8 @@ return [
// pagination
$pages = $pages->paginate([
'page' => $this->page,
'limit' => $this->limit
'limit' => $this->limit,
'method' => 'none' // the page is manually provided
]);
return $pages;

View File

@@ -60,6 +60,7 @@
"ワ": "wa",
"が": "ga",
"ざ": "za",
"ザ": "za",
"だ": "da",
"ば": "ba",
"ぱ": "pa",
@@ -111,6 +112,9 @@
"づ": "dzu",
"ぶ": "bu",
"ぷ": "pu",
"プ": "pu",
"ズ": "zu",
"グ": "gu",
"え": "e",
"エ": "e",
@@ -161,6 +165,8 @@
"ご": "go",
"ぞ": "zo",
"ど": "do",
"ド": "do",
"ぼ": "bo",
"ポ": "po",
"ぽ": "po"
}

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "Профилната снимка не може да се качи",
"error.avatar.delete.fail": "Профилната снимка не може да бъде изтрита",
"error.avatar.dimensions.invalid":
"Моля запазете ширината и височината на профилната снимка под 3000 пиксела",
"error.avatar.mime.forbidden":
"Профилната снимка трябва да бъде в JPEG или PNG формат",
"error.avatar.dimensions.invalid": "Моля запазете ширината и височината на профилната снимка под 3000 пиксела",
"error.avatar.mime.forbidden": "Профилната снимка трябва да бъде в JPEG или PNG формат",
"error.blueprint.notFound": "Образецът \"{name}\" не може да бъде зареден",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Невалиден конвертор \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Не можете да смените името на \"{filename}\"",
"error.file.changeName.permission": "Не можете да смените името на \"{filename}\"",
"error.file.duplicate": "Файл с име \"{filename}\" вече съществува",
"error.file.extension.forbidden":
айловото разширение \"{extension}\" не е позволено",
"error.file.extension.missing":
"Липсва файлово разширение за файла \"{filename}\"",
"error.file.extension.forbidden": "Файловото разширение \"{extension}\" не е позволено",
"error.file.extension.missing": "Липсва файлово разширение за файла \"{filename}\"",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
"error.file.maxwidth": "The width of the image must not exceed {width} pixels",
"error.file.mime.differs":
"Каченият файл трябва да бъде от същия mime тип \"{mime}\"",
"error.file.mime.differs": "Каченият файл трябва да бъде от същия mime тип \"{mime}\"",
"error.file.mime.forbidden": "The media type \"{mime}\" is not allowed",
"error.file.mime.invalid": "Invalid mime type: {mime}",
"error.file.mime.missing":
"The media type for \"{filename}\" cannot be detected",
"error.file.mime.missing": "The media type for \"{filename}\" cannot be detected",
"error.file.minheight": "The height of the image must be at least {height} pixels",
"error.file.minsize": "The file is too small",
"error.file.minwidth": "The width of the image must be at least {width} pixels",
@@ -90,111 +83,77 @@
"error.license.email": "Моля въведете валиден email адрес",
"error.license.verification": "The license could not be verified",
"error.page.changeSlug.permission":
"Не можете да смените URL на \"{slug}\"",
"error.page.changeStatus.incomplete":
"Страницата съдържа грешки и не може да бъде публикувана",
"error.page.changeStatus.permission":
"Статусът на страницата не може да бъде променен",
"error.page.changeStatus.toDraft.invalid":
"Страницата \"{slug}\" не може да бъде променена в чернова",
"error.page.changeTemplate.invalid":
"Темплейтът за страница \"{slug}\" не може да бъде променен",
"error.page.changeTemplate.permission":
"Нямате права за да промените шаблона за \"{slug}\"",
"error.page.changeSlug.permission": "Не можете да смените URL на \"{slug}\"",
"error.page.changeStatus.incomplete": "Страницата съдържа грешки и не може да бъде публикувана",
"error.page.changeStatus.permission": "Статусът на страницата не може да бъде променен",
"error.page.changeStatus.toDraft.invalid": "Страницата \"{slug}\" не може да бъде променена в чернова",
"error.page.changeTemplate.invalid": "Темплейтът за страница \"{slug}\" не може да бъде променен",
"error.page.changeTemplate.permission": "Нямате права за да промените шаблона за \"{slug}\"",
"error.page.changeTitle.empty": "Заглавието е задължително",
"error.page.changeTitle.permission":
"Не можете да промените заглавието на \"{slug}\"",
"error.page.changeTitle.permission": "Не можете да промените заглавието на \"{slug}\"",
"error.page.create.permission": "Не можете да създадете \"{slug}\"",
"error.page.delete": "Страницата \"{slug}\" не може да бъде изтрита",
"error.page.delete.confirm": "Моля въведете името на страницата, за да потвърдите",
"error.page.delete.hasChildren":
"Страницата има подстраници и не може да бъде изтрита",
"error.page.delete.hasChildren": "Страницата има подстраници и не може да бъде изтрита",
"error.page.delete.permission": "Не можете да изтриете \"{slug}\"",
"error.page.draft.duplicate":
"Вече съществува чернова с URL-добавка \"{slug}\"",
"error.page.duplicate":
"Страница с URL-добавка \"{slug}\" вече съществува",
"error.page.draft.duplicate": "Вече съществува чернова с URL-добавка \"{slug}\"",
"error.page.duplicate": "Страница с URL-добавка \"{slug}\" вече съществува",
"error.page.duplicate.permission": "You are not allowed to duplicate \"{slug}\"",
"error.page.notFound": "Страницата \"{slug}\" не може да бъде намерена",
"error.page.num.invalid":
"Моля въведете валидно число за сортиране. Числата не трябва да са негативни.",
"error.page.num.invalid": "Моля въведете валидно число за сортиране. Числата не трябва да са негативни.",
"error.page.slug.invalid": "Моля въведете валиден URL префикс",
"error.page.sort.permission": "Страницата \"{slug}\" не може да бъде сортирана",
"error.page.status.invalid": "Моля изберете валиден статус на страницата",
"error.page.undefined": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0442\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0430",
"error.page.update.permission": "Не можете да обновите \"{slug}\"",
"error.section.files.max.plural":
"Не можете да добавяте повече от {max} файлa в секция \"{section}\"",
"error.section.files.max.singular":
"Не можете да добавяте повече от един файл в секция \"{section}\"",
"error.section.files.min.plural":
"The \"{section}\" section requires at least {min} files",
"error.section.files.min.singular":
"The \"{section}\" section requires at least one file",
"error.section.files.max.plural": "Не можете да добавяте повече от {max} файлa в секция \"{section}\"",
"error.section.files.max.singular": "Не можете да добавяте повече от един файл в секция \"{section}\"",
"error.section.files.min.plural": "The \"{section}\" section requires at least {min} files",
"error.section.files.min.singular": "The \"{section}\" section requires at least one file",
"error.section.pages.max.plural":
"Не можете да добавяте повече от {max} страници в секция \"{section}\"",
"error.section.pages.max.singular":
"Не можете да добавяте повече от една страница в секция \"{section}\"",
"error.section.pages.min.plural":
"The \"{section}\" section requires at least {min} pages",
"error.section.pages.min.singular":
"The \"{section}\" section requires at least one page",
"error.section.pages.max.plural": "Не можете да добавяте повече от {max} страници в секция \"{section}\"",
"error.section.pages.max.singular": "Не можете да добавяте повече от една страница в секция \"{section}\"",
"error.section.pages.min.plural": "The \"{section}\" section requires at least {min} pages",
"error.section.pages.min.singular": "The \"{section}\" section requires at least one page",
"error.section.notLoaded": "Секция \"{name}\" не може да бъде заредена",
"error.section.type.invalid": "Типът \"{type}\" на секция не е валиден",
"error.site.changeTitle.empty": "Заглавието е задължително",
"error.site.changeTitle.permission":
"Не може да променяте заглавието на сайта",
"error.site.changeTitle.permission": "Не може да променяте заглавието на сайта",
"error.site.update.permission": "Нямате права за да обновите сайта",
"error.template.default.notFound": "Стандартният шаблон не съществува",
"error.user.changeEmail.permission":
"Нямате права да промените имейла на този потребител \"{name}\"",
"error.user.changeLanguage.permission":
"Нямате права да промените езика за този потребител \"{name}\"",
"error.user.changeName.permission":
"Нямате права да промените името на този потребител \"{name}\"",
"error.user.changePassword.permission":
"Нямате права да промените паролата за този потребител \"{name}\"",
"error.user.changeRole.lastAdmin":
"Ролята на последния администратор не може да бъде променена",
"error.user.changeRole.permission":
"Нямате права да промените ролята на този потребител \"{name}\"",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.changeEmail.permission": "Нямате права да промените имейла на този потребител \"{name}\"",
"error.user.changeLanguage.permission": "Нямате права да промените езика за този потребител \"{name}\"",
"error.user.changeName.permission": "Нямате права да промените името на този потребител \"{name}\"",
"error.user.changePassword.permission": "Нямате права да промените паролата за този потребител \"{name}\"",
"error.user.changeRole.lastAdmin": "Ролята на последния администратор не може да бъде променена",
"error.user.changeRole.permission": "Нямате права да промените ролята на този потребител \"{name}\"",
"error.user.changeRole.toAdmin": "You are not allowed to promote someone to the admin role",
"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.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.lastUser": "Последният потребител не може да бъде изтрит",
"error.user.delete.permission":
"\u041d\u0435 \u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u043e \u0434\u0430 \u0438\u0437\u0442\u0440\u0438\u0432\u0430\u0442\u0435 \u0442\u043e\u0437\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b",
"error.user.duplicate":
"Потребител с имейл \"{email}\" вече съществува",
"error.user.delete.permission": "\u041d\u0435 \u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u043e \u0434\u0430 \u0438\u0437\u0442\u0440\u0438\u0432\u0430\u0442\u0435 \u0442\u043e\u0437\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b",
"error.user.duplicate": "Потребител с имейл \"{email}\" вече съществува",
"error.user.email.invalid": "Моля въведете валиден email адрес",
"error.user.language.invalid": "Моля въведете валиден език",
"error.user.notFound": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d.",
"error.user.password.invalid":
"Моля въведете валидна парола. Тя трабва да съдържа поне 8 символа.",
"error.user.password.invalid": "Моля въведете валидна парола. Тя трабва да съдържа поне 8 символа.",
"error.user.password.notSame": "\u041c\u043e\u043b\u044f, \u043f\u043e\u0442\u0432\u044a\u0440\u0434\u0435\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u0430\u0442\u0430",
"error.user.password.undefined": "Потребителят няма парола",
"error.user.role.invalid": "Моля въведете валидна роля",
"error.user.update.permission":
"Нямате права да обновите този потребител \"{name}\"",
"error.user.update.permission": "Нямате права да обновите този потребител \"{name}\"",
"error.validation.accepted": "Моля потвърдете",
"error.validation.alpha": "Моля въвдете символи измежду a-z",
"error.validation.alphanum":
"Моля въвдете символи измежду a-z или цифри 0-9",
"error.validation.between":
"Моля въведете стойност между \"{min}\" и \"{max}\"",
"error.validation.alphanum": "Моля въвдете символи измежду a-z или цифри 0-9",
"error.validation.between": "Моля въведете стойност между \"{min}\" и \"{max}\"",
"error.validation.boolean": "Моля потвърдете или откажете",
"error.validation.contains":
"Моля въведете стойност, която съдържа \"{needle}\"",
"error.validation.contains": "Моля въведете стойност, която съдържа \"{needle}\"",
"error.validation.date": "Моля въведете валидна дата",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Моля въведете стойност по-ниска от {max}",
"error.validation.match": "Стойността не съвпада с очаквания модел",
"error.validation.max": "Please enter a value equal to or lower than {max}",
"error.validation.maxlength":
"Моля въведете по-къса стойност. (макс. {max} символа)",
"error.validation.maxlength": "Моля въведете по-къса стойност. (макс. {max} символа)",
"error.validation.maxwords": "Моля въведете не повече от {max} дума(и)",
"error.validation.min": "Please enter a value equal to or greater than {min}",
"error.validation.minlength":
"Моля въведете по-дълга стойност. (мин. {min} символа)",
"error.validation.minlength": "Моля въведете по-дълга стойност. (мин. {min} символа)",
"error.validation.minwords": "Моля въведете поне {min} дума(и).",
"error.validation.more": "Моля въведете стойност по-висока от {min}",
"error.validation.notcontains":
"Моля въведете стойност, която не съдържа \"{needle}\"",
"error.validation.notin":
"Моля не въвеждайте нито едно от следните: ({notIn})",
"error.validation.notcontains": "Моля въведете стойност, която не съдържа \"{needle}\"",
"error.validation.notin": "Моля не въвеждайте нито едно от следните: ({notIn})",
"error.validation.option": "Моля изберете валидна опция",
"error.validation.num": "Моля въведете валидно число",
"error.validation.required": "Моля въведете нещо",
@@ -238,8 +193,7 @@
"field.structure.empty": "Все още няма статии",
"field.users.empty": "Все още не са избрани потребители",
"file.delete.confirm":
"Сигурни ли сте, че искате да изтриете <br><strong>{filename}</strong>?",
"file.delete.confirm": "Сигурни ли сте, че искате да изтриете <br><strong>{filename}</strong>?",
"files": "Файлове",
"files.empty": "Няма файлове",
@@ -251,29 +205,22 @@
"installation": "Инсталация",
"installation.completed": "The panel has been installed",
"installation.disabled": "The panel installer is disabled on public servers by default. Please run the installer on a local machine or enable it with the <code>panel.install</code> option.",
"installation.issues.accounts":
"Папката <code>/site/accounts</code> не съществува или не позволява запис",
"installation.issues.content":
"Папката <code>/content</code> и всички файлове в нея трябва да позволяват запис",
"installation.issues.accounts": "Папката <code>/site/accounts</code> не съществува или не позволява запис",
"installation.issues.content": "Папката <code>/content</code> и всички файлове в нея трябва да позволяват запис",
"installation.issues.curl": "Изисква се <code>CURL</code> разширението",
"installation.issues.headline": "Панелът не може да бъде инсталиран",
"installation.issues.mbstring":
"Изисква се разширението <code>MB String</code>",
"installation.issues.media":
"Папката <code>/media</code> не съществува или няма права за запис",
"installation.issues.mbstring": "Изисква се разширението <code>MB String</code>",
"installation.issues.media": "Папката <code>/media</code> не съществува или няма права за запис",
"installation.issues.php": "Бъдете сигурни, че използвате <code>PHP 7+</code>",
"installation.issues.server":
"Kirby изисква <code>Apache</code>, <code>Nginx</code> или <code>Caddy</code>",
"installation.issues.server": "Kirby изисква <code>Apache</code>, <code>Nginx</code> или <code>Caddy</code>",
"installation.issues.sessions": "The <code>/site/sessions</code> folder does not exist or is not writable",
"language": "\u0415\u0437\u0438\u043a",
"language.code": "Код",
"language.convert": "Направи по подразбиране",
"language.convert.confirm":
"<p>Сигурни ли сте, че искате да зададете <strong>{name}</strong> за език по подразбиране? Действието не може да бъде отменено.</p><p>В случай, че в <strong>{name}</strong> има непреведено съдържание, то части от сайта ви могат да останат празни.</p>",
"language.convert.confirm": "<p>Сигурни ли сте, че искате да зададете <strong>{name}</strong> за език по подразбиране? Действието не може да бъде отменено.</p><p>В случай, че в <strong>{name}</strong> има непреведено съдържание, то части от сайта ви могат да останат празни.</p>",
"language.create": "Добавете нов език",
"language.delete.confirm":
"Сигурни ли сте, че искате да изтриете език <strong>{name}</strong>, включително всички негови преводи? Действието не може да бъде отменено!",
"language.delete.confirm": "Сигурни ли сте, че искате да изтриете език <strong>{name}</strong>, включително всички негови преводи? Действието не може да бъде отменено!",
"language.deleted": "Езикът беше изтрит",
"language.direction": "Посока на четене",
"language.direction.ltr": "Отляво надясно",
@@ -292,8 +239,7 @@
"license": "\u041b\u0438\u0446\u0435\u043d\u0437 \u0437\u0430 Kirby",
"license.buy": "Купи лиценз",
"license.register": "Регистрирай",
"license.register.help":
"You received your license code after the purchase via email. Please copy and paste it to register.",
"license.register.help": "You received your license code after the purchase via email. Please copy and paste it to register.",
"license.register.label": "Please enter your license code",
"license.register.success": "Thank you for supporting Kirby",
"license.unregistered": "Това е нерегистрирана демо версия на Kirby",
@@ -325,7 +271,7 @@
"months.april": "\u0410\u043f\u0440\u0438\u043b",
"months.august": "\u0410\u0432\u0433\u0443\u0441\u0442",
"months.december": "\u0414\u0435\u043a\u0435\u043c\u0432\u0440\u0438",
"months.february": "\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438",
"months.february": "Февруари",
"months.january": "\u042f\u043d\u0443\u0430\u0440\u0438",
"months.july": "\u042e\u043b\u0438",
"months.june": "\u042e\u043d\u0438",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Моля изберете позиция",
"page.changeStatus.select": "Изберете нов статус",
"page.changeTemplate": "Промени шаблон",
"page.delete.confirm":
"Сигурни ли сте, че искате да изтриете <strong>{title}</strong>?",
"page.delete.confirm.subpages":
"<strong>Тази страница има подстраници</strong>. <br>Всички подстраници също ще бъдат изтрити.",
"page.delete.confirm": "Сигурни ли сте, че искате да изтриете <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Тази страница има подстраници</strong>. <br>Всички подстраници също ще бъдат изтрити.",
"page.delete.confirm.title": "Въведи заглавие на страница за да потвърдиш",
"page.draft.create": "Създай чернова",
"page.duplicate.appendix": "Копирай",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Copy pages",
"page.status": "Status",
"page.status.draft": "Чернова",
"page.status.draft.description":
"Страницата е в режим на чернова и е видима само за оторизирани редактори",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.listed": "Публично",
"page.status.listed.description": "Страницата е публична за всички",
"page.status.unlisted": "Скрит",
@@ -388,6 +331,7 @@
"replace": "\u0417\u0430\u043c\u0435\u0441\u0442\u0438",
"retry": "\u041e\u043f\u0438\u0442\u0430\u0439 \u043f\u0430\u043a",
"revert": "\u041e\u0442\u043c\u0435\u043d\u0438",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "\u0420\u043e\u043b\u044f",
"role.admin.description": "The admin has all rights",
@@ -451,8 +395,7 @@
"url.placeholder": "https://example.com",
"user": "Потребител",
"user.blueprint":
"Можете да дефинирате допълнителни секции и полета на форми за тази потребителска роля в <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Можете да дефинирате допълнителни секции и полета на форми за тази потребителска роля в <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Промени email",
"user.changeLanguage": "Промени език",
"user.changeName": "Преименувай този потребител",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Изберете нова роля",
"user.create": "Добавете нов потребител",
"user.delete": "Изтрийте потребителя",
"user.delete.confirm":
"Сигурни ли сте, че искате да изтриете <br><strong>{email}</strong>?",
"user.delete.confirm": "Сигурни ли сте, че искате да изтриете <br><strong>{email}</strong>?",
"users": "Потребители",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "No s'ha pogut carregar la imatge del perfil",
"error.avatar.delete.fail": "La imatge del perfil no s'ha pogut eliminar",
"error.avatar.dimensions.invalid":
"Mantingueu l'amplada i l'alçada de la imatge de perfil de menys de 3000 píxels",
"error.avatar.mime.forbidden":
"La imatge del perfil ha de ser fitxers JPEG o PNG",
"error.avatar.dimensions.invalid": "Mantingueu l'amplada i l'alçada de la imatge de perfil de menys de 3000 píxels",
"error.avatar.mime.forbidden": "La imatge del perfil ha de ser fitxers JPEG o PNG",
"error.blueprint.notFound": "No s'ha potgut carregar el blueprint \"{name}\"",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Convertidor no vàlid \"{converter}\"",
"error.file.changeName.empty": "El nom no pot estar buit",
"error.file.changeName.permission":
"No tens permís per canviar el nom de \"{filename}\"",
"error.file.changeName.permission": "No tens permís per canviar el nom de \"{filename}\"",
"error.file.duplicate": "Ja existeix un fitxer amb el nom \"{filename}\"",
"error.file.extension.forbidden":
"L'extensió de l'arxiu \"{extension}\" no està permesa",
"error.file.extension.missing":
"Falta l'extensió de l'arxiu \"{filename}\"",
"error.file.extension.forbidden": "L'extensió de l'arxiu \"{extension}\" no està permesa",
"error.file.extension.missing": "Falta l'extensió de l'arxiu \"{filename}\"",
"error.file.maxheight": "L'alçada de la imatge no ha de ser superior a {height} píxels",
"error.file.maxsize": "El fitxer és massa gran",
"error.file.maxwidth": "L'amplada de la imatge no ha de ser superior a {width} píxels",
"error.file.mime.differs":
"L'arxiu carregat ha ha de ser del mateix tipus de mime \"{mime}\"",
"error.file.mime.differs": "L'arxiu carregat ha ha de ser del mateix tipus de mime \"{mime}\"",
"error.file.mime.forbidden": "El tipus de mitjà \"{mime}\" no està permès",
"error.file.mime.invalid": "Mime type no vàlid: {mime}",
"error.file.mime.missing":
"El tipus de suport per a \"{filename}\" no es pot detectar",
"error.file.mime.missing": "El tipus de suport per a \"{filename}\" no es pot detectar",
"error.file.minheight": "L'alçada de la imatge ha de ser com a mínim de {height} píxels",
"error.file.minsize": "El fitxer és massa petit",
"error.file.minwidth": "L'amplada de la imatge ha de ser com a mínim de {width} píxels",
@@ -90,111 +83,77 @@
"error.license.email": "Si us plau, introdueix una adreça de correu electrònic vàlida",
"error.license.verification": "No sha pogut verificar la llicència",
"error.page.changeSlug.permission":
"No teniu permís per canviar l'apèndix d'URL per a \"{slug}\"",
"error.page.changeStatus.incomplete":
"La pàgina té errors i no es pot publicar",
"error.page.changeStatus.permission":
"No es pot canviar l'estat d'aquesta pàgina",
"error.page.changeStatus.toDraft.invalid":
"La pàgina \"{slug}\" no es pot convertir en un esborrany",
"error.page.changeTemplate.invalid":
"La plantilla per a la pàgina \"{slug}\" no es pot canviar",
"error.page.changeTemplate.permission":
"No tens permís per canviar la plantilla per \"{slug}\"",
"error.page.changeSlug.permission": "No teniu permís per canviar l'apèndix d'URL per a \"{slug}\"",
"error.page.changeStatus.incomplete": "La pàgina té errors i no es pot publicar",
"error.page.changeStatus.permission": "No es pot canviar l'estat d'aquesta pàgina",
"error.page.changeStatus.toDraft.invalid": "La pàgina \"{slug}\" no es pot convertir en un esborrany",
"error.page.changeTemplate.invalid": "La plantilla per a la pàgina \"{slug}\" no es pot canviar",
"error.page.changeTemplate.permission": "No tens permís per canviar la plantilla per \"{slug}\"",
"error.page.changeTitle.empty": "El títol no pot estar buit",
"error.page.changeTitle.permission":
"No tens permís per canviar el títol de \"{slug}\"",
"error.page.changeTitle.permission": "No tens permís per canviar el títol de \"{slug}\"",
"error.page.create.permission": "No tens permís per crear \"{slug}\"",
"error.page.delete": "La pàgina \"{slug}\" no es pot esborrar",
"error.page.delete.confirm": "Si us plau, introdueix el títol de la pàgina per confirmar",
"error.page.delete.hasChildren":
"La pàgina té subpàgines i no es pot esborrar",
"error.page.delete.hasChildren": "La pàgina té subpàgines i no es pot esborrar",
"error.page.delete.permission": "No tens permís per esborrar \"{slug}\"",
"error.page.draft.duplicate":
"Ja existeix un esborrany de pàgina amb l'apèndix d'URL \"{slug}\"",
"error.page.duplicate":
"Ja existeix una pàgina amb l'apèndix d'URL \"{slug}\"",
"error.page.draft.duplicate": "Ja existeix un esborrany de pàgina amb l'apèndix d'URL \"{slug}\"",
"error.page.duplicate": "Ja existeix una pàgina amb l'apèndix d'URL \"{slug}\"",
"error.page.duplicate.permission": "No tens permís per duplicar \"{slug}\"",
"error.page.notFound": "La pàgina \"{slug}\" no s'ha trobat",
"error.page.num.invalid":
"Si us plau, introdueix un número d 'ordenació vàlid. Els números no poden ser negatius.",
"error.page.num.invalid": "Si us plau, introdueix un número d 'ordenació vàlid. Els números no poden ser negatius.",
"error.page.slug.invalid": "Introduïu un prefix d'URL vàlid",
"error.page.sort.permission": "La pàgina \"{slug}\" no es pot ordenar",
"error.page.status.invalid": "Si us plau, estableix un estat de pàgina vàlid",
"error.page.undefined": "La p\u00e0gina no s'ha trobat",
"error.page.update.permission": "No tens permís per actualitzar \"{slug}\"",
"error.section.files.max.plural":
"No has d'afegir més de {max} fitxers a la secció \"{section}\"",
"error.section.files.max.singular":
"No podeu afegir més d'un fitxer a la secció \"{section}\"",
"error.section.files.min.plural":
"La secció \"{section}\" requereix almenys {min} fitxer",
"error.section.files.min.singular":
"La secció \"{section}\" requereix almenys un fitxer",
"error.section.files.max.plural": "No has d'afegir més de {max} fitxers a la secció \"{section}\"",
"error.section.files.max.singular": "No podeu afegir més d'un fitxer a la secció \"{section}\"",
"error.section.files.min.plural": "La secció \"{section}\" requereix almenys {min} fitxer",
"error.section.files.min.singular": "La secció \"{section}\" requereix almenys un fitxer",
"error.section.pages.max.plural":
"No heu d'afegir més de {max} pàgines a la secció \"{section}\"",
"error.section.pages.max.singular":
"No podeu afegir més d'una pàgina a la secció \"{section}\"",
"error.section.pages.min.plural":
"La secció \"{section}\" requereix almenys {min} pàgines",
"error.section.pages.min.singular":
"La secció \"{section}\" requereix almenys una pàgina",
"error.section.pages.max.plural": "No heu d'afegir més de {max} pàgines a la secció \"{section}\"",
"error.section.pages.max.singular": "No podeu afegir més d'una pàgina a la secció \"{section}\"",
"error.section.pages.min.plural": "La secció \"{section}\" requereix almenys {min} pàgines",
"error.section.pages.min.singular": "La secció \"{section}\" requereix almenys una pàgina",
"error.section.notLoaded": "No s'ha pogut carregar la secció \"{name}\"",
"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":
"No tens permís per canviar el títol del lloc web",
"error.site.changeTitle.permission": "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.template.default.notFound": "La plantilla predeterminada no existeix",
"error.user.changeEmail.permission":
"No tens permís per canviar el correu electrònic per a l'usuari \"{name}\"",
"error.user.changeLanguage.permission":
"No tens permís per canviar l'idioma de l'usuari \"{name}\"",
"error.user.changeName.permission":
"No tens permís per canviar el nom de l'usuari \"{name}\"",
"error.user.changePassword.permission":
"No tens permís per canviar la contrasenya de l'usuari \"{name}\"",
"error.user.changeRole.lastAdmin":
"El rol del darrer administrador no es pot canviar",
"error.user.changeRole.permission":
"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.changeEmail.permission": "No tens permís per canviar el correu electrònic per a l'usuari \"{name}\"",
"error.user.changeLanguage.permission": "No tens permís per canviar l'idioma de l'usuari \"{name}\"",
"error.user.changeName.permission": "No tens permís per canviar el nom de l'usuari \"{name}\"",
"error.user.changePassword.permission": "No tens permís per canviar la contrasenya de l'usuari \"{name}\"",
"error.user.changeRole.lastAdmin": "El rol del darrer administrador no es pot canviar",
"error.user.changeRole.permission": "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.delete": "L'usuari \"{name}\" no es pot eliminar",
"error.user.delete.lastAdmin": "No es pot eliminar l'\u00faltim administrador",
"error.user.delete.lastUser": "El darrer usuari no es pot eliminar",
"error.user.delete.permission":
"No pots eliminar l'usuari \"{name}\"",
"error.user.duplicate":
"Ja existeix un usuari amb l'adreça electrònica \"{email}\"",
"error.user.delete.permission": "No pots eliminar l'usuari \"{name}\"",
"error.user.duplicate": "Ja existeix un usuari amb l'adreça electrònica \"{email}\"",
"error.user.email.invalid": "Si us plau, introdueix una adreça de correu electrònic vàlida",
"error.user.language.invalid": "Introduïu un idioma vàlid",
"error.user.notFound": "L'usuari \"{name}\" no s'ha trobat",
"error.user.password.invalid":
"Introduïu una contrasenya vàlida. Les contrasenyes han de tenir com a mínim 8 caràcters.",
"error.user.password.invalid": "Introduïu una contrasenya vàlida. Les contrasenyes han de tenir com a mínim 8 caràcters.",
"error.user.password.notSame": "Les contrasenyes no coincideixen",
"error.user.password.undefined": "L'usuari no té una contrasenya",
"error.user.role.invalid": "Si us plau, introdueix un rol vàlid",
"error.user.update.permission":
"No tens permís per actualitzar l'usuari \"{name}\"",
"error.user.update.permission": "No tens permís per actualitzar l'usuari \"{name}\"",
"error.validation.accepted": "Si us plau confirma",
"error.validation.alpha": "Si us plau, introdueix únicament caràcters entre a-z",
"error.validation.alphanum":
"Si us plau, introdueix únicament caràcters entre a-z o números de 0-9",
"error.validation.between":
"Introdueix un valor entre \"{min}\" i \"{max}\"",
"error.validation.alphanum": "Si us plau, introdueix únicament caràcters entre a-z o números de 0-9",
"error.validation.between": "Introdueix un valor entre \"{min}\" i \"{max}\"",
"error.validation.boolean": "Si us plau confirma o denega",
"error.validation.contains":
"Si us plau, introduïu un valor que contingui \"{needle}\"",
"error.validation.contains": "Si us plau, introduïu un valor que contingui \"{needle}\"",
"error.validation.date": "Si us plau, introdueix una data vàlida",
"error.validation.date.after": "Introdueix una data posterior {date}",
"error.validation.date.before": "Introdueix una data anterior {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Si us plau, introduïu un valor inferior a {max}",
"error.validation.match": "El valor no coincideix amb el patró esperat",
"error.validation.max": "Si us plau, introduïu un valor igual o inferior a {max}",
"error.validation.maxlength":
"Si us plau, introduïu un valor més curt. (màxim {max} caràcters)",
"error.validation.maxlength": "Si us plau, introduïu un valor més curt. (màxim {max} caràcters)",
"error.validation.maxwords": "Si us plau, introduïu no més de {max} paraula(es)",
"error.validation.min": "Si us plau, introduïu un valor igual o superior a {min}",
"error.validation.minlength":
"Si us plau, introduïu un valor més llarg. (min. {min} caràcters)",
"error.validation.minlength": "Si us plau, introduïu un valor més llarg. (min. {min} caràcters)",
"error.validation.minwords": "Si us plau, introduïu almenys {min} paraula(es)",
"error.validation.more": "Si us plau, introduïu un valor més gran que {min}",
"error.validation.notcontains":
"Introduïu un valor que no contingui \"{needle}\"",
"error.validation.notin":
"Si us plau, no introduïu cap d'aquests elements: ({notIn})",
"error.validation.notcontains": "Introduïu un valor que no contingui \"{needle}\"",
"error.validation.notin": "Si us plau, no introduïu cap d'aquests elements: ({notIn})",
"error.validation.option": "Si us plau, seleccioneu una opció vàlida",
"error.validation.num": "Si us plau, introduïu un número vàlid",
"error.validation.required": "Si us plau, introduïu alguna cosa",
@@ -238,8 +193,7 @@
"field.structure.empty": "Encara no hi ha entrades.",
"field.users.empty": "Encara no s'ha seleccionat cap usuari",
"file.delete.confirm":
"Esteu segurs d'eliminar <br><strong>{filename}</strong>?",
"file.delete.confirm": "Esteu segurs d'eliminar <br><strong>{filename}</strong>?",
"files": "Arxius",
"files.empty": "Encara no hi ha fitxers",
@@ -251,29 +205,22 @@
"installation": "Instal·lació",
"installation.completed": "S'ha instal·lat el panell",
"installation.disabled": "L'instal·lador del panell està desactivat per defecte als servidors públics. Si us plau, executeu l'instal·lador en una màquina local o habiliteu-lo amb l'opció <code>panel.install</code>",
"installation.issues.accounts":
"La carpeta <code>/site/accounts</code> no existeix o no es pot escriure",
"installation.issues.content":
"La carpeta <code>/content no existeix o no es pot escriure",
"installation.issues.accounts": "La carpeta <code>/site/accounts</code> no existeix o no es pot escriure",
"installation.issues.content": "La carpeta <code>/content no existeix o no es pot escriure",
"installation.issues.curl": "Es requereix l'extensió <code>CURL</code>",
"installation.issues.headline": "El panell no es pot instal·lar",
"installation.issues.mbstring":
"Es requereix l'extensió de <code>MB String</code>",
"installation.issues.media":
"La carpeta <code>/media</code> no existeix o no es pot escriure",
"installation.issues.mbstring": "Es requereix l'extensió de <code>MB String</code>",
"installation.issues.media": "La carpeta <code>/media</code> no existeix o no es pot escriure",
"installation.issues.php": "Assegureu-vos d'utilitzar <code>PHP 7+</code>",
"installation.issues.server":
"Kirby requereix <code>Apache</code>, <code>Nginx</code> o <code>Caddy</code>",
"installation.issues.server": "Kirby requereix <code>Apache</code>, <code>Nginx</code> o <code>Caddy</code>",
"installation.issues.sessions": "La carpeta <code>/site/sessions</code> no existeix o no es pot escriure",
"language": "Idioma",
"language.code": "Codi",
"language.convert": "Fer per defecte",
"language.convert.confirm":
"<p>Segur que voleu convertir <strong>{name}</strong> a l'idioma predeterminat? Això no es pot desfer.</p> <p> Si <strong>{name}</strong> té contingut no traduït, ja no podreu tornar enrere i algunes parts del vostre lloc poden quedar buides.</p>",
"language.convert.confirm": "<p>Segur que voleu convertir <strong>{name}</strong> a l'idioma predeterminat? Això no es pot desfer.</p> <p> Si <strong>{name}</strong> té contingut no traduït, ja no podreu tornar enrere i algunes parts del vostre lloc poden quedar buides.</p>",
"language.create": "Afegir un nou idioma",
"language.delete.confirm":
"Segur que voleu eliminar l'idioma <strong>{name}</strong> incloent totes les traduccions? Això no es pot desfer!",
"language.delete.confirm": "Segur que voleu eliminar l'idioma <strong>{name}</strong> incloent totes les traduccions? Això no es pot desfer!",
"language.deleted": "S'ha suprimit l'idioma",
"language.direction": "Direcció de lectura",
"language.direction.ltr": "Esquerra a dreta",
@@ -292,8 +239,7 @@
"license": "Llic\u00e8ncia Kirby",
"license.buy": "Comprar una llicència",
"license.register": "Registrar",
"license.register.help":
"Heu rebut el codi de la vostra llicència després de la compra, per correu electrònic. Copieu-lo i enganxeu-lo per registrar-vos.",
"license.register.help": "Heu rebut el codi de la vostra llicència després de la compra, per correu electrònic. Copieu-lo i enganxeu-lo per registrar-vos.",
"license.register.label": "Si us plau, introdueixi el seu codi de llicència",
"license.register.success": "Gràcies per donar suport a Kirby",
"license.unregistered": "Aquesta és una demo no registrada de Kirby",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Si us plau, seleccioneu una posició",
"page.changeStatus.select": "Seleccioneu un nou estat",
"page.changeTemplate": "Canviar la plantilla",
"page.delete.confirm":
"Segur que voleu eliminar <strong>{title}</strong>?",
"page.delete.confirm.subpages":
"<strong>Aquesta pàgina té subpàgines</strong>. <br>Totes les subpàgines també s'eliminaran.",
"page.delete.confirm": "Segur que voleu eliminar <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Aquesta pàgina té subpàgines</strong>. <br>Totes les subpàgines també s'eliminaran.",
"page.delete.confirm.title": "Introduïu el títol de la pàgina per confirmar",
"page.draft.create": "Crear un esborrany",
"page.duplicate.appendix": "Copiar",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Copiar pàgines",
"page.status": "Estat",
"page.status.draft": "Esborrany",
"page.status.draft.description":
"La pàgina està en mode d'esborrany i només és visible per als editors registrats",
"page.status.draft.description": "La pàgina està en mode d'esborrany i només és visible per als editors registrats o a través d'un enllaç secret",
"page.status.listed": "Públic",
"page.status.listed.description": "La pàgina és pública per a tothom",
"page.status.unlisted": "Sense classificar",
@@ -388,6 +331,7 @@
"replace": "Reempla\u00e7ar",
"retry": "Reintentar",
"revert": "Revertir",
"revert.confirm": "Segur que voleu eliminar <strong>tots els canvis pendents desar</strong>?",
"role": "Rol",
"role.admin.description": "Ladministrador té tots els permisos",
@@ -451,8 +395,7 @@
"url.placeholder": "https://example.com",
"user": "Usuari",
"user.blueprint":
"Podeu definir seccions addicionals i camps de formulari per a aquest rol d'usuari a <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Podeu definir seccions addicionals i camps de formulari per a aquest rol d'usuari a <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Canviar e-mail",
"user.changeLanguage": "Canviar idioma",
"user.changeName": "Canviar el nom d'aquest usuari",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Seleccionar un nou rol",
"user.create": "Afegir un nou usuari",
"user.delete": "Eliminar aquest usuari",
"user.delete.confirm":
"Segur que voleu eliminar <br> <strong>{email}</strong>?",
"user.delete.confirm": "Segur que voleu eliminar <br> <strong>{email}</strong>?",
"users": "Usuaris",

View File

@@ -42,10 +42,8 @@
"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.dimensions.invalid":
"Šířka a výška obrázku musí být pod 3000 pixelů",
"error.avatar.mime.forbidden":
"Profilový obrázek musí být ve formátu JPEG nebo PNG",
"error.avatar.dimensions.invalid": "Šířka a výška obrázku musí být pod 3000 pixelů",
"error.avatar.mime.forbidden": "Profilový obrázek musí být ve formátu JPEG nebo PNG",
"error.blueprint.notFound": "Nelze načíst blueprint \"{name}\" ",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Neplatný konvertor \"{converter}\"",
"error.file.changeName.empty": "Toto jméno nesmí být prázdné",
"error.file.changeName.permission":
"Nemáte povoleno změnit jméno souboru \"{filename}\"",
"error.file.changeName.permission": "Nemáte povoleno změnit jméno souboru \"{filename}\"",
"error.file.duplicate": "Soubor s názvem \"{filename}\" již existuje",
"error.file.extension.forbidden":
"Přípona souboru \"{extension}\" není povolena",
"error.file.extension.missing":
"Nem\u016f\u017eete nahr\u00e1t soubor bez p\u0159\u00edpony",
"error.file.extension.forbidden": "Přípona souboru \"{extension}\" není povolena",
"error.file.extension.missing": "Nem\u016f\u017eete nahr\u00e1t soubor bez p\u0159\u00edpony",
"error.file.maxheight": "Výška obrázku nesmí přesáhnout {height} pixelů",
"error.file.maxsize": "Soubor je příliš velký",
"error.file.maxwidth": "Šířka obrázku nesmí přesáhnout {width} pixelů",
"error.file.mime.differs":
"Nahraný soubor musí být stejného typu \"{mime}\"",
"error.file.mime.differs": "Nahraný soubor musí být stejného typu \"{mime}\"",
"error.file.mime.forbidden": "Soubor typu \"{mime}\" není povolený",
"error.file.mime.invalid": "Neplatný MIME typ: {mime}",
"error.file.mime.missing":
"Nelze rozeznat mime typ souboru \"{filename}\"",
"error.file.mime.missing": "Nelze rozeznat mime typ souboru \"{filename}\"",
"error.file.minheight": "Výška obrázku musí být alespoň {height} pixelů",
"error.file.minsize": "Soubor je příliš malý",
"error.file.minwidth": "Šířka obrázku musí být alespoň {width} pixelů",
@@ -90,111 +83,77 @@
"error.license.email": "Zadejte prosím platnou emailovou adresu",
"error.license.verification": "Licenci nelze ověřit",
"error.page.changeSlug.permission":
"Nem\u016f\u017eete zm\u011bnit URL t\u00e9to str\u00e1nky",
"error.page.changeStatus.incomplete":
"Stránka obsahuje chyby a nemohla být zveřejněna",
"error.page.changeStatus.permission":
"Status této stránky nelze změnit",
"error.page.changeStatus.toDraft.invalid":
"Stránka \"{slug}\" nemůže být převedena na koncept",
"error.page.changeTemplate.invalid":
"Šablonu stránky \"{slug}\" nelze změnit",
"error.page.changeTemplate.permission":
"Nemáte dovoleno změnit šablonu stránky \"{slug}\"",
"error.page.changeSlug.permission": "Nem\u016f\u017eete zm\u011bnit URL t\u00e9to str\u00e1nky",
"error.page.changeStatus.incomplete": "Stránka obsahuje chyby a nemohla být zveřejněna",
"error.page.changeStatus.permission": "Status této stránky nelze změnit",
"error.page.changeStatus.toDraft.invalid": "Stránka \"{slug}\" nemůže být převedena na koncept",
"error.page.changeTemplate.invalid": "Šablonu stránky \"{slug}\" nelze změnit",
"error.page.changeTemplate.permission": "Nemáte dovoleno změnit šablonu stránky \"{slug}\"",
"error.page.changeTitle.empty": "Titulek nesmí být prázdný",
"error.page.changeTitle.permission":
"Nemáte dovoleno změnit titulek stránky \"{slug}\"",
"error.page.changeTitle.permission": "Nemáte dovoleno změnit titulek stránky \"{slug}\"",
"error.page.create.permission": "Nemáte dovoleno vytvořit \"{slug}\"",
"error.page.delete": "Stránku \"{slug}\" nelze vymazat",
"error.page.delete.confirm": "Pro potvrzení prosím zadejte titulek stránky",
"error.page.delete.hasChildren":
"Stránka má podstránky, nemůže být vymazána",
"error.page.delete.hasChildren": "Stránka má podstránky, nemůže být vymazána",
"error.page.delete.permission": "Nemáte dovoleno odstranit \"{slug}\"",
"error.page.draft.duplicate":
"Koncept stránky, který obsahuje v adrese URL \"{slug}\" již existuje ",
"error.page.duplicate":
"Stránka, která v adrese URL obsahuje \"{slug}\" již existuje",
"error.page.draft.duplicate": "Koncept stránky, který obsahuje v adrese URL \"{slug}\" již existuje ",
"error.page.duplicate": "Stránka, která v adrese URL obsahuje \"{slug}\" již existuje",
"error.page.duplicate.permission": "Nemáte dovoleno duplikovat \"{slug}\"",
"error.page.notFound": "Str\u00e1nku se nepoda\u0159ilo nal\u00e9zt.",
"error.page.num.invalid":
"Zadejte prosím platné pořadové číslo. Čísla nesmí být záporná.",
"error.page.num.invalid": "Zadejte prosím platné pořadové číslo. Čísla nesmí být záporná.",
"error.page.slug.invalid": "Zadejte prosím platnou předponu URL",
"error.page.sort.permission": "Stránce \"{slug}\" nelze změnit pořadí",
"error.page.status.invalid": "Nastavte prosím platný status stránky",
"error.page.undefined": "Str\u00e1nku se nepoda\u0159ilo nal\u00e9zt.",
"error.page.update.permission": "Nemáte dovoleno upravit \"{slug}\"",
"error.section.files.max.plural":
"Sekce \"{section}\" nesmí obsahovat více jak {max} souborů",
"error.section.files.max.singular":
"Sekce \"{section}\" může obsahovat nejvýše jeden soubor",
"error.section.files.min.plural":
"Sekce \"{section}\" vyžaduje nejméně {min} souborů",
"error.section.files.min.singular":
"Sekce \"{section}\" vyžaduje alespoň jeden soubor",
"error.section.files.max.plural": "Sekce \"{section}\" nesmí obsahovat více jak {max} souborů",
"error.section.files.max.singular": "Sekce \"{section}\" může obsahovat nejvýše jeden soubor",
"error.section.files.min.plural": "Sekce \"{section}\" vyžaduje nejméně {min} souborů",
"error.section.files.min.singular": "Sekce \"{section}\" vyžaduje alespoň jeden soubor",
"error.section.pages.max.plural":
"Sekce \"{section}\" nesmí obsahovat více jak {max} stránek",
"error.section.pages.max.singular":
"Sekce \"{section}\" může obsahovat nejvýše jednu stránku",
"error.section.pages.min.plural":
"Sekce \"{section}\" vyžaduje alespoň {min} stránek",
"error.section.pages.min.singular":
"Sekce \"{section}\" vyžaduje alespoň jednu stránku",
"error.section.pages.max.plural": "Sekce \"{section}\" nesmí obsahovat více jak {max} stránek",
"error.section.pages.max.singular": "Sekce \"{section}\" může obsahovat nejvýše jednu stránku",
"error.section.pages.min.plural": "Sekce \"{section}\" vyžaduje alespoň {min} stránek",
"error.section.pages.min.singular": "Sekce \"{section}\" vyžaduje alespoň jednu stránku",
"error.section.notLoaded": "Nelze načíst sekci \"{name}\"",
"error.section.type.invalid": "Typ sekce \"{type}\" není platný",
"error.site.changeTitle.empty": "Titulek nesmí být prázdný",
"error.site.changeTitle.permission":
"Nemáte dovoleno změnit titulek stránky",
"error.site.changeTitle.permission": "Nemáte dovoleno změnit titulek stránky",
"error.site.update.permission": "Nemáte dovoleno upravit stránku",
"error.template.default.notFound": "Výchozí šablona neexistuje",
"error.user.changeEmail.permission":
"Nemáte dovoleno měnit email uživatele \"{name}\"",
"error.user.changeLanguage.permission":
"Nemáte dovoleno změnit jazyk uživatele \"{name}\"",
"error.user.changeName.permission":
"Nemáte dovoleno změnit jméno uživatele \"{name}\"",
"error.user.changePassword.permission":
"Nemáte dovoleno změnit heslo uživatele \"{name}\"",
"error.user.changeRole.lastAdmin":
"Role posledního administrátora nemůže být změněna",
"error.user.changeRole.permission":
"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.changeEmail.permission": "Nemáte dovoleno měnit email uživatele \"{name}\"",
"error.user.changeLanguage.permission": "Nemáte dovoleno změnit jazyk uživatele \"{name}\"",
"error.user.changeName.permission": "Nemáte dovoleno změnit jméno uživatele \"{name}\"",
"error.user.changePassword.permission": "Nemáte dovoleno změnit heslo uživatele \"{name}\"",
"error.user.changeRole.lastAdmin": "Role posledního administrátora nemůže být změněna",
"error.user.changeRole.permission": "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.delete": "U\u017eivatel nemohl b\u00fdt smaz\u00e1n",
"error.user.delete.lastAdmin": "Nem\u016f\u017eete smazat posledn\u00edho administr\u00e1tora",
"error.user.delete.lastUser": "Poslední uživatel nemůže být smazán",
"error.user.delete.permission":
"Nem\u00e1te dovoleno smazat tohoto u\u017eivatele",
"error.user.duplicate":
"Uživatel s emailovou adresou \"{email}\" již existuje",
"error.user.delete.permission": "Nem\u00e1te dovoleno smazat tohoto u\u017eivatele",
"error.user.duplicate": "Uživatel s emailovou adresou \"{email}\" již existuje",
"error.user.email.invalid": "Zadejte prosím platnou emailovou adresu",
"error.user.language.invalid": "Zadejte prosím platný jazyk",
"error.user.notFound": "U\u017eivatele se nepoda\u0159ilo nal\u00e9zt",
"error.user.password.invalid":
"Zadejte prosím platné heslo. Heslo musí být dlouhé alespoň 8 znaků.",
"error.user.password.invalid": "Zadejte prosím platné heslo. Heslo musí být dlouhé alespoň 8 znaků.",
"error.user.password.notSame": "Pros\u00edm potvr\u010fte heslo",
"error.user.password.undefined": "Uživatel nemá nastavené heslo.",
"error.user.role.invalid": "Zadejte prosím platnou roli",
"error.user.update.permission":
"Nemáte dovoleno upravit uživatele \"{name}\"",
"error.user.update.permission": "Nemáte dovoleno upravit uživatele \"{name}\"",
"error.validation.accepted": "Potvrďte prosím",
"error.validation.alpha": "Zadávejte prosím pouze znaky v rozmezí a-z",
"error.validation.alphanum":
"Zadávejte prosím pouze znaky v rozmezí a-z nebo čísla v rozmezí 0-9",
"error.validation.between":
"Zadejte prosím hodnotu mez \"{min}\" a \"{max}\"",
"error.validation.alphanum": "Zadávejte prosím pouze znaky v rozmezí a-z nebo čísla v rozmezí 0-9",
"error.validation.between": "Zadejte prosím hodnotu mez \"{min}\" a \"{max}\"",
"error.validation.boolean": "Potvrďte prosím, nebo odmítněte",
"error.validation.contains":
"Zadejte prosím hodnotu, která obsahuje \"{needle}\"",
"error.validation.contains": "Zadejte prosím hodnotu, která obsahuje \"{needle}\"",
"error.validation.date": "Zadejte prosím platné datum",
"error.validation.date.after": "Zadejte prosím datum po {date}",
"error.validation.date.before": "Zadejte prosím datum před {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Zadejte prosím hodnotu menší než {max}",
"error.validation.match": "Hodnota neodpovídá očekávanému vzoru",
"error.validation.max": "Zadejte prosím hodnotu rovnou, nebo menší než {max}",
"error.validation.maxlength":
"Zadaná hodnota je příliš dlouhá. (Povoleno nejvýše {max} znaků)",
"error.validation.maxlength": "Zadaná hodnota je příliš dlouhá. (Povoleno nejvýše {max} znaků)",
"error.validation.maxwords": "Nezadávejte prosím více jak {max} slov",
"error.validation.min": "Zadejte prosím hodnotu rovnou, nebo větší než {min}",
"error.validation.minlength":
"Zadaná hodnota je příliš krátká. (Požadováno nejméně {min} znaků)",
"error.validation.minlength": "Zadaná hodnota je příliš krátká. (Požadováno nejméně {min} znaků)",
"error.validation.minwords": "Zadejte prosím alespoň {min} slov",
"error.validation.more": "Zadejte prosím hodnotu větší než {min}",
"error.validation.notcontains":
"Zadejte prosím hodnotu, která neobsahuje \"{needle}\"",
"error.validation.notin":
"Nezadávejte prosím žádnou z následujíích hodnot: ({notIn})",
"error.validation.notcontains": "Zadejte prosím hodnotu, která neobsahuje \"{needle}\"",
"error.validation.notin": "Nezadávejte prosím žádnou z následujíích hodnot: ({notIn})",
"error.validation.option": "Vyberte prosím platnou možnost",
"error.validation.num": "Zadejte prosím platné číslo",
"error.validation.required": "Zadejte prosím jakoukoli hodnotu",
@@ -238,8 +193,7 @@
"field.structure.empty": "Zat\u00edm nejsou \u017e\u00e1dn\u00e9 z\u00e1znamy.",
"field.users.empty": "Nebyli zatím vybráni žádní uživatelé",
"file.delete.confirm":
"Opravdu chcete smazat tento soubor?",
"file.delete.confirm": "Opravdu chcete smazat tento soubor?",
"files": "Soubory",
"files.empty": "Zatím žádné soubory",
@@ -251,29 +205,22 @@
"installation": "Instalace",
"installation.completed": "Panel byl nainstalován",
"installation.disabled": "Instalátor panelu je ve výchozím nastavení na veřejných serverech zakázán. Spusťte prosím instalátor na lokálním počítači nebo jej povolte prostřednictvím <code>panel.install</code>.",
"installation.issues.accounts":
"\/site\/accounts nen\u00ed zapisovateln\u00e9",
"installation.issues.content":
"Slo\u017eka content a v\u0161echny soubory a slo\u017eky v n\u00ed mus\u00ed b\u00fdt zapisovateln\u00e9.",
"installation.issues.accounts": "\/site\/accounts nen\u00ed zapisovateln\u00e9",
"installation.issues.content": "Slo\u017eka content a v\u0161echny soubory a slo\u017eky v n\u00ed mus\u00ed b\u00fdt zapisovateln\u00e9.",
"installation.issues.curl": "Je vyžadováno rozšíření<code>CURL</code>",
"installation.issues.headline": "Panel nelze nainstalovat",
"installation.issues.mbstring":
"Je vyžadováno rozšíření<code>MB String</code>",
"installation.issues.media":
"Složka<code>/media</code> neexistuje, nebo nemá povolený zápis",
"installation.issues.mbstring": "Je vyžadováno rozšíření<code>MB String</code>",
"installation.issues.media": "Složka<code>/media</code> neexistuje, nebo nemá povolený zápis",
"installation.issues.php": "Ujistěte se, že používáte<code>PHP 7+</code>",
"installation.issues.server":
"Kirby vyžaduje<code>Apache</code>, <code>Nginx</code> nebo<code>Caddy</code>",
"installation.issues.server": "Kirby vyžaduje<code>Apache</code>, <code>Nginx</code> nebo<code>Caddy</code>",
"installation.issues.sessions": "Složka<code>/site/sessions</code> neexistuje, nebo nemá povolený zápis",
"language": "Jazyk",
"language.code": "Kód",
"language.convert": "Nastavte výchozí možnost",
"language.convert.confirm":
"<p>Opravdu chcete převést<strong>{name}</strong> na výchozí jazyk? Tuto volbu nelze vzít zpátky.</p><p>Pokud <strong>{name}</strong> obsahuje nepřeložený text, nebude již k dispozici záložní varianta a části stránky mohou zůstat prázdné.</p>",
"language.convert.confirm": "<p>Opravdu chcete převést<strong>{name}</strong> na výchozí jazyk? Tuto volbu nelze vzít zpátky.</p><p>Pokud <strong>{name}</strong> obsahuje nepřeložený text, nebude již k dispozici záložní varianta a části stránky mohou zůstat prázdné.</p>",
"language.create": "Přidat nový jazyk",
"language.delete.confirm":
"Opravdu chcete smazat jazyk <strong>{name}</strong> včetně všech překladů? Tuto volbu nelze vzít zpátky!",
"language.delete.confirm": "Opravdu chcete smazat jazyk <strong>{name}</strong> včetně všech překladů? Tuto volbu nelze vzít zpátky!",
"language.deleted": "Jazyk byl smazán",
"language.direction": "Směr čtení",
"language.direction.ltr": "Zleva doprava",
@@ -292,8 +239,7 @@
"license": "Kirby licence",
"license.buy": "Zakoupit licenci",
"license.register": "Registrovat",
"license.register.help":
"Licenční kód jste po zakoupení obdrželi na email. Vložte prosím kód a zaregistrujte Vaší kopii.",
"license.register.help": "Licenční kód jste po zakoupení obdrželi na email. Vložte prosím kód a zaregistrujte Vaší kopii.",
"license.register.label": "Zadejte prosím licenční kód",
"license.register.success": "Děkujeme Vám za podporu Kirby",
"license.unregistered": "Toto je neregistrovaná kopie Kirby",
@@ -325,7 +271,7 @@
"months.april": "Duben",
"months.august": "Srpen",
"months.december": "Prosinec",
"months.february": "\u00danor",
"months.february": "Únor",
"months.january": "Leden",
"months.july": "\u010cervenec",
"months.june": "\u010cerven",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Vyberte prosím pozici",
"page.changeStatus.select": "Vybrat nový status",
"page.changeTemplate": "Změnit šablonu",
"page.delete.confirm":
"Opravdu chcete smazat tuto str\u00e1nku?",
"page.delete.confirm.subpages":
"<strong>Tato stránka má podstránky</strong>. <br>Všechny podstránky budou vymazány.",
"page.delete.confirm": "Opravdu chcete smazat tuto str\u00e1nku?",
"page.delete.confirm.subpages": "<strong>Tato stránka má podstránky</strong>. <br>Všechny podstránky budou vymazány.",
"page.delete.confirm.title": "Pro potvrzení zadejte titulek stránky",
"page.draft.create": "Vytvořit koncept",
"page.duplicate.appendix": "Kopírovat",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Kopírovat stránky",
"page.status": "Stav",
"page.status.draft": "Koncept",
"page.status.draft.description":
"Stránka je ve stavu konceptu a je viditelná pouze pro přihlášené editory",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.listed": "Veřejná",
"page.status.listed.description": "Stránka je zveřejněná pro všechny",
"page.status.unlisted": "Neveřejná",
@@ -388,6 +331,7 @@
"replace": "Nahradit",
"retry": "Zkusit znovu",
"revert": "Zahodit",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "Role",
"role.admin.description": "Administrátor má všechna práva",
@@ -451,8 +395,7 @@
"url.placeholder": "https://example.com",
"user": "Uživatel",
"user.blueprint":
"Pro tuto uživatelskou roli můžete definovat další sekce a pole v <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Pro tuto uživatelskou roli můžete definovat další sekce a pole v <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Změnit email",
"user.changeLanguage": "Změnit jazyk",
"user.changeName": "Přejmenovat tohoto uživatele",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Vybrat novou roli",
"user.create": "Přidat nového uživatele",
"user.delete": "Smazat tohoto uživatele",
"user.delete.confirm":
"Opravdu chcete smazat tohoto u\u017eivatele?",
"user.delete.confirm": "Opravdu chcete smazat tohoto u\u017eivatele?",
"users": "Uživatelé",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "Profilbilledet kunne blev ikke uploadet ",
"error.avatar.delete.fail": "Profilbilledet kunne ikke slettes",
"error.avatar.dimensions.invalid":
"Hold venligst bredte og højde på billedet under 3000 pixels",
"error.avatar.mime.forbidden":
"Uacceptabel fil-type",
"error.avatar.dimensions.invalid": "Hold venligst bredte og højde på billedet under 3000 pixels",
"error.avatar.mime.forbidden": "Uacceptabel fil-type",
"error.blueprint.notFound": "Blueprint \"{name}\" kunne ikke indlæses",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Ugyldig converter \"{converter}\"",
"error.file.changeName.empty": "Navn kan ikke efterlades tomt",
"error.file.changeName.permission":
"Du har ikke tilladelse til at ændre navnet på filen \"{filename}\"",
"error.file.changeName.permission": "Du har ikke tilladelse til at ændre navnet på filen \"{filename}\"",
"error.file.duplicate": "En fil med navnet \"{filename}\" eksisterer allerede",
"error.file.extension.forbidden":
"Uacceptabel fil-endelse",
"error.file.extension.missing":
"Du kan ikke uploade filer uden fil-endelse",
"error.file.extension.forbidden": "Uacceptabel fil-endelse",
"error.file.extension.missing": "Du kan ikke uploade filer uden fil-endelse",
"error.file.maxheight": "Højden på billedet af billedet må ikke være større end {height} pixels",
"error.file.maxsize": "Filen er for stor",
"error.file.maxwidth": "Bredden af billedet må ikke være større end {width} pixels",
"error.file.mime.differs":
"Den uploadede fil skal være af samme mime type \"{mime}\"",
"error.file.mime.differs": "Den uploadede fil skal være af samme mime type \"{mime}\"",
"error.file.mime.forbidden": "Media typen \"{mime}\" er ikke tilladt",
"error.file.mime.invalid": "Ugyldig mime type: {mime}",
"error.file.mime.missing":
"Media typen for \"{filename}\" kan ikke bestemmes",
"error.file.mime.missing": "Media typen for \"{filename}\" kan ikke bestemmes",
"error.file.minheight": "Højden af billedet skal mindst være {height} pixels",
"error.file.minsize": "Filen er for lille",
"error.file.minwidth": "Bredden af billedet skal mindst være {width} pixels",
@@ -90,111 +83,77 @@
"error.license.email": "Indtast venligst en gyldig email adresse",
"error.license.verification": "Licensen kunne ikke verificeres",
"error.page.changeSlug.permission":
"Du kan ikke \u00e6ndre denne sides URL",
"error.page.changeStatus.incomplete":
"Siden indeholder fejl og kan derfor ikke udgives",
"error.page.changeStatus.permission":
"Status for denne side kan ikke ændres",
"error.page.changeStatus.toDraft.invalid":
"Siden \"{slug}\" kan ikke konverteres om til en kladde",
"error.page.changeTemplate.invalid":
"Skabelonen for siden \"{slug}\" kan ikke ændres",
"error.page.changeTemplate.permission":
"Du har ikke tilladelse til at ændre skabelonen for \"{slug}\"",
"error.page.changeSlug.permission": "Du kan ikke \u00e6ndre denne sides URL",
"error.page.changeStatus.incomplete": "Siden indeholder fejl og kan derfor ikke udgives",
"error.page.changeStatus.permission": "Status for denne side kan ikke ændres",
"error.page.changeStatus.toDraft.invalid": "Siden \"{slug}\" kan ikke konverteres om til en kladde",
"error.page.changeTemplate.invalid": "Skabelonen for siden \"{slug}\" kan ikke ændres",
"error.page.changeTemplate.permission": "Du har ikke tilladelse til at ændre skabelonen for \"{slug}\"",
"error.page.changeTitle.empty": "Titlen kan ikke være tom",
"error.page.changeTitle.permission":
"Du har ikke tilladelse til at ændre titlen for \"{slug}\"",
"error.page.changeTitle.permission": "Du har ikke tilladelse til at ændre titlen for \"{slug}\"",
"error.page.create.permission": "Du har ikke tilladelse til at oprette \"{slug}\"",
"error.page.delete": "Siden \"{slug}\" kan ikke slettes",
"error.page.delete.confirm": "Indtast venligst sidens titel for at bekræfte",
"error.page.delete.hasChildren":
"Siden har unsersider og kan derfor ikke slettes",
"error.page.delete.hasChildren": "Siden har unsersider og kan derfor ikke slettes",
"error.page.delete.permission": "Du har ikke tilladelse til at slette \"{slug}\"",
"error.page.draft.duplicate":
"En sidekladde med URL-endelsen \"{slug}\" eksisterer allerede",
"error.page.duplicate":
"En side med URL-endelsen \"{slug}\" eksisterer allerede",
"error.page.draft.duplicate": "En sidekladde med URL-endelsen \"{slug}\" eksisterer allerede",
"error.page.duplicate": "En side med URL-endelsen \"{slug}\" eksisterer allerede",
"error.page.duplicate.permission": "Du har ikke mulighed for at duplikere \"{slug}\"",
"error.page.notFound": "Siden kunne ikke findes",
"error.page.num.invalid":
"Indtast venligst et gyldigt sorteringsnummer. Nummeret kan ikke være negativt.",
"error.page.num.invalid": "Indtast venligst et gyldigt sorteringsnummer. Nummeret kan ikke være negativt.",
"error.page.slug.invalid": "Indtast venligst en gyldig URL prefix",
"error.page.sort.permission": "Siden \"{slug}\" kan ikke sorteres",
"error.page.status.invalid": "Sæt venligst en gyldig status for siden",
"error.page.undefined": "Siden kunne ikke findes",
"error.page.update.permission": "Du har ikke tilladelse til at opdatere \"{slug}\"",
"error.section.files.max.plural":
"Du kan ikk tilføje mere end {max} filer til \"{section}\" sektionen",
"error.section.files.max.singular":
"Du kan ikke tilføje mere end en fil til \"{section}\" sektionen",
"error.section.files.min.plural":
"Sektionen \"{section}\" kræver mindst {min} filer",
"error.section.files.min.singular":
"Sektionen \"{section}\" kræver mindst en fil",
"error.section.files.max.plural": "Du kan ikk tilføje mere end {max} filer til \"{section}\" sektionen",
"error.section.files.max.singular": "Du kan ikke tilføje mere end en fil til \"{section}\" sektionen",
"error.section.files.min.plural": "Sektionen \"{section}\" kræver mindst {min} filer",
"error.section.files.min.singular": "Sektionen \"{section}\" kræver mindst en fil",
"error.section.pages.max.plural":
"Du kan ikke tilføje flere end {max} sider til \"{section}\" sektionen",
"error.section.pages.max.singular":
"Du kan ikke tilføje mere end een side til \"{section}\" sektionen",
"error.section.pages.min.plural":
"Sektionen \"{section}\" kræver mindst {min} sider",
"error.section.pages.min.singular":
"Sektionen \"{section}\" kræver mindst en side",
"error.section.pages.max.plural": "Du kan ikke tilføje flere end {max} sider til \"{section}\" sektionen",
"error.section.pages.max.singular": "Du kan ikke tilføje mere end een side til \"{section}\" sektionen",
"error.section.pages.min.plural": "Sektionen \"{section}\" kræver mindst {min} sider",
"error.section.pages.min.singular": "Sektionen \"{section}\" kræver mindst en side",
"error.section.notLoaded": "Sektionen \"{section}\" kunne ikke indlæses",
"error.section.type.invalid": "Sektionstypen \"{type}\" er ikke gyldig",
"error.site.changeTitle.empty": "Titlen kan ikke være tom",
"error.site.changeTitle.permission":
"Du har ikke tilladelse til at ændre titlen på sitet",
"error.site.changeTitle.permission": "Du har ikke tilladelse til at ændre titlen på sitet",
"error.site.update.permission": "Du har ikke tilladelse til at opdatere sitet",
"error.template.default.notFound": "Standardskabelonen eksisterer ikke",
"error.user.changeEmail.permission":
"Du har ikke tilladelse til at ændre emailen for brugeren \"{name}\"",
"error.user.changeLanguage.permission":
"Du har ikke tilladelse til at ændre sproget for brugeren \"{name}\"",
"error.user.changeName.permission":
"Du har ikke tilladelse til at ændre navn på brugeren \"{name}\"",
"error.user.changePassword.permission":
"Du har ikke tilladelse til at ændre adgangskoden for brugeren \"{name}\"",
"error.user.changeRole.lastAdmin":
"Rollen for den sidste admin kan ikke ændres",
"error.user.changeRole.permission":
"Du har ikke tilladelse til at ændre rollen for brugeren \"{name}\"",
"error.user.changeRole.toAdmin":
"Du har ikke tilladelse til at tildele nogen admin rollen",
"error.user.changeEmail.permission": "Du har ikke tilladelse til at ændre emailen for brugeren \"{name}\"",
"error.user.changeLanguage.permission": "Du har ikke tilladelse til at ændre sproget for brugeren \"{name}\"",
"error.user.changeName.permission": "Du har ikke tilladelse til at ændre navn på brugeren \"{name}\"",
"error.user.changePassword.permission": "Du har ikke tilladelse til at ændre adgangskoden for brugeren \"{name}\"",
"error.user.changeRole.lastAdmin": "Rollen for den sidste admin kan ikke ændres",
"error.user.changeRole.permission": "Du har ikke tilladelse til at ændre rollen for brugeren \"{name}\"",
"error.user.changeRole.toAdmin": "Du har ikke tilladelse til at tildele nogen admin rollen",
"error.user.create.permission": "Du har ikke tilladelse til at oprette denne bruger",
"error.user.delete": "Brugeren kunne ikke slettes",
"error.user.delete.lastAdmin": "Du kan ikke slette den sidste admin",
"error.user.delete.lastUser": "Den sidste bruger kan ikke slettes",
"error.user.delete.permission":
"Du har ikke tilladelse til at slette denne bruger",
"error.user.duplicate":
"En bruger med email adresse \"{email}\" eksisterer allerede",
"error.user.delete.permission": "Du har ikke tilladelse til at slette denne bruger",
"error.user.duplicate": "En bruger med email adresse \"{email}\" eksisterer allerede",
"error.user.email.invalid": "Indtast venligst en gyldig email adresse",
"error.user.language.invalid": "Indtast venligst et gyldigt sprog",
"error.user.notFound": "Brugeren kunne ikke findes",
"error.user.password.invalid":
"Indtast venligst en gyldig adgangskode. Adgangskoder skal minimum være 8 tegn lange.",
"error.user.password.invalid": "Indtast venligst en gyldig adgangskode. Adgangskoder skal minimum være 8 tegn lange.",
"error.user.password.notSame": "Bekr\u00e6ft venligst adgangskoden",
"error.user.password.undefined": "Brugeren har ikke en adgangskode",
"error.user.role.invalid": "Indtast venligst en gyldig rolle",
"error.user.update.permission":
"Du har ikke tilladelse til at opdatere brugeren \"{name}\"",
"error.user.update.permission": "Du har ikke tilladelse til at opdatere brugeren \"{name}\"",
"error.validation.accepted": "Bekræft venligst",
"error.validation.alpha": "Indtast venligst kun bogstaver imellem a-z",
"error.validation.alphanum":
"Indtast venligst kun bogstaver og tal imellem a-z eller 0-9",
"error.validation.between":
"Indtast venligst en værdi imellem \"{min}\" og \"{max}\"",
"error.validation.alphanum": "Indtast venligst kun bogstaver og tal imellem a-z eller 0-9",
"error.validation.between": "Indtast venligst en værdi imellem \"{min}\" og \"{max}\"",
"error.validation.boolean": "Venligst bekræft eller afvis",
"error.validation.contains":
"Indtast venligst en værdi der indeholder \"{needle}\"",
"error.validation.contains": "Indtast venligst en værdi der indeholder \"{needle}\"",
"error.validation.date": "Indtast venligst en gyldig dato",
"error.validation.date.after": "Indtast venligst en dato efter {date}",
"error.validation.date.before": "Indtast venligst en dato før {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Indtast venligst en værdi mindre end {max}",
"error.validation.match": "Værdien matcher ikke det forventede mønster",
"error.validation.max": "Indtast venligst en værdi lig med eller lavere end {max}",
"error.validation.maxlength":
"Indtast venligst en kortere værdi. (maks. {max} karakterer)",
"error.validation.maxlength": "Indtast venligst en kortere værdi. (maks. {max} karakterer)",
"error.validation.maxwords": "Indtast ikke flere end {max} ord",
"error.validation.min": "Indtast en værdi lig med eller højere end {min}",
"error.validation.minlength":
"Indtast venligst en længere værdi. (min. {min} karakterer)",
"error.validation.minlength": "Indtast venligst en længere værdi. (min. {min} karakterer)",
"error.validation.minwords": "Indtast venligst mindst {min} ord",
"error.validation.more": "Indtast venligst en værdi større end {min}",
"error.validation.notcontains":
"Indtast venligst en værdi der ikke indeholder \"{needle}\"",
"error.validation.notin":
"Indtast venligst ikke nogen af følgende: ({notIn})",
"error.validation.notcontains": "Indtast venligst en værdi der ikke indeholder \"{needle}\"",
"error.validation.notin": "Indtast venligst ikke nogen af følgende: ({notIn})",
"error.validation.option": "Vælg venligst en gyldig mulighed",
"error.validation.num": "Indtast venligst et gyldigt nummer",
"error.validation.required": "Indtast venligst noget",
@@ -238,8 +193,7 @@
"field.structure.empty": "Ingen indtastninger endnu.",
"field.users.empty": "Ingen brugere er valgt",
"file.delete.confirm":
"\u00d8nsker du virkelig at slette denne fil?",
"file.delete.confirm": "\u00d8nsker du virkelig at slette denne fil?",
"files": "Filer",
"files.empty": "Ingen filer endnu",
@@ -251,29 +205,22 @@
"installation": "Installation",
"installation.completed": "Panelet er blevet installeret",
"installation.disabled": "Panel installationen er deaktiveret på offentlige servere som standard. Kør venligst installationen på en lokal maskine eller aktiver det med panel.install <code>panel.install</code> muligheden.",
"installation.issues.accounts":
"\/site\/accounts er ikke skrivbar",
"installation.issues.content":
"Content mappen samt alle underliggende filer og mapper skal v\u00e6re skrivbare.",
"installation.issues.accounts": "\/site\/accounts er ikke skrivbar",
"installation.issues.content": "Content mappen samt alle underliggende filer og mapper skal v\u00e6re skrivbare.",
"installation.issues.curl": "<code>CURL</code> extension er påkrævet",
"installation.issues.headline": "Panelet kan ikke installeres",
"installation.issues.mbstring":
"<code>MB String</code> extension er påkrævet",
"installation.issues.media":
"<code>/media</code> mappen eksisterer ikke eller er ikke skrivbar",
"installation.issues.mbstring": "<code>MB String</code> extension er påkrævet",
"installation.issues.media": "<code>/media</code> mappen eksisterer ikke eller er ikke skrivbar",
"installation.issues.php": "Sikre dig at der benyttes <code>PHP 7+</code>",
"installation.issues.server":
"Kirby kræver <code>Apache</code>, <code>Nginx</code> eller <code>Caddy</code>",
"installation.issues.server": "Kirby kræver <code>Apache</code>, <code>Nginx</code> eller <code>Caddy</code>",
"installation.issues.sessions": "/site/sessions mappen eksisterer ikke eller er ikke skrivbar",
"language": "Sprog",
"language.code": "Kode",
"language.convert": "Gør standard",
"language.convert.confirm":
"<p>Ønsker du virkelig at konvertere <strong>{name}</strong> til standardsproget? Dette kan ikke fortrydes.</p><p>Hvis <strong>{name}</strong> har uoversat indhold, vil der ikke længere være et gyldigt tilbagefald og dele af dit website vil måske fremstå tomt.</p>",
"language.convert.confirm": "<p>Ønsker du virkelig at konvertere <strong>{name}</strong> til standardsproget? Dette kan ikke fortrydes.</p><p>Hvis <strong>{name}</strong> har uoversat indhold, vil der ikke længere være et gyldigt tilbagefald og dele af dit website vil måske fremstå tomt.</p>",
"language.create": "Tilføj nyt sprog",
"language.delete.confirm":
"Ønsker du virkelig at slette sproget <strong>{name}</strong> inklusiv alle oversættelser? Kan ikke fortrydes!",
"language.delete.confirm": "Ønsker du virkelig at slette sproget <strong>{name}</strong> inklusiv alle oversættelser? Kan ikke fortrydes!",
"language.deleted": "Sproget er blevet slettet",
"language.direction": "Læseretning",
"language.direction.ltr": "Venstre mod højre",
@@ -292,8 +239,7 @@
"license": "Kirby licens",
"license.buy": "Køb en licens",
"license.register": "Registrer",
"license.register.help":
"Du modtog din licenskode efter købet via email. Venligst kopier og indsæt den for at registrere.",
"license.register.help": "Du modtog din licenskode efter købet via email. Venligst kopier og indsæt den for at registrere.",
"license.register.label": "Indtast venligst din licenskode",
"license.register.success": "Tak for din støtte af Kirby",
"license.unregistered": "Dette er en uregistreret demo af Kirby",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Vælg venligst position",
"page.changeStatus.select": "Vælg en ny status",
"page.changeTemplate": "Skift skabelon",
"page.delete.confirm":
"\u00d8nsker du virkelig at slette denne side?",
"page.delete.confirm.subpages":
"<strong>Denne side har undersider</strong>. <br>Alle undersider vil også blive slettet.",
"page.delete.confirm": "\u00d8nsker du virkelig at slette denne side?",
"page.delete.confirm.subpages": "<strong>Denne side har undersider</strong>. <br>Alle undersider vil også blive slettet.",
"page.delete.confirm.title": "Indtast sidens titel for at bekræfte",
"page.draft.create": "Opret kladde",
"page.duplicate.appendix": "Kopier",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Kopier sider",
"page.status": "Status",
"page.status.draft": "Kladde",
"page.status.draft.description":
"Siden er i kladdetilstand og kun synlig for redaktører der er logget ind",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.listed": "Offentlig",
"page.status.listed.description": "Siden er offentlig for enhver",
"page.status.unlisted": "Ulistede",
@@ -388,6 +331,7 @@
"replace": "Erstat",
"retry": "Pr\u00f8v igen",
"revert": "Kass\u00e9r",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "Rolle",
"role.admin.description": "Admin har alle rettigheder",
@@ -451,8 +395,7 @@
"url.placeholder": "https://example.com",
"user": "Bruger",
"user.blueprint":
"Du kan definere yderligere sektioner og formular felter for denne brugerrolle i <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Du kan definere yderligere sektioner og formular felter for denne brugerrolle i <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Skift email",
"user.changeLanguage": "Skift sprog",
"user.changeName": "Omdøb denne bruger",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Vælg en ny rolle",
"user.create": "Tilføj en ny bruger",
"user.delete": "Slet denne bruger",
"user.delete.confirm":
"\u00d8nsker du virkelig at slette denne bruger?",
"user.delete.confirm": "\u00d8nsker du virkelig at slette denne bruger?",
"users": "Brugere",

View File

@@ -31,7 +31,7 @@
"dialog.files.empty": "Keine verfügbaren Dateien",
"dialog.pages.empty": "Keine verfügbaren Seiten",
"dialog.users.empty": "Keine verfügbaren Benutzer",
"dialog.users.empty": "Keine verfügbaren Benutzer*innen",
"email": "E-Mail",
"email.placeholder": "mail@beispiel.de",
@@ -42,10 +42,8 @@
"error.avatar.create.fail": "Das Profilbild konnte nicht hochgeladen werden",
"error.avatar.delete.fail": "Das Profilbild konnte nicht gel\u00f6scht werden",
"error.avatar.dimensions.invalid":
"Bitte lade ein Profilbild hoch, das nicht breiter oder höher als 3000 Pixel ist.",
"error.avatar.mime.forbidden":
"Das Profilbild muss vom Format JPEG oder PNG sein",
"error.avatar.dimensions.invalid": "Bitte lade ein Profilbild hoch, das nicht breiter oder höher als 3000 Pixel ist.",
"error.avatar.mime.forbidden": "Das Profilbild muss vom Format JPEG oder PNG sein",
"error.blueprint.notFound": "Das Blueprint \"{name}\" konnte nicht geladen werden.",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Ungültiger Konverter: \"{converter}\"",
"error.file.changeName.empty": "Bitte gib einen Namen an",
"error.file.changeName.permission":
"Du darfst den Dateinamen von \"{filename}\" nicht ändern",
"error.file.changeName.permission": "Du darfst den Dateinamen von \"{filename}\" nicht ändern",
"error.file.duplicate": "Eine Datei mit dem Dateinamen \"{filename}\" besteht bereits",
"error.file.extension.forbidden":
"Verbotene Dateiendung \"{extension}\"",
"error.file.extension.missing":
"Du kannst keine Dateien ohne Dateiendung hochladen",
"error.file.extension.forbidden": "Verbotene Dateiendung \"{extension}\"",
"error.file.extension.missing": "Du kannst keine Dateien ohne Dateiendung hochladen",
"error.file.maxheight": "Die Bildhöhe darf {height} Pixel nicht überschreiten",
"error.file.maxsize": "Die Datei ist zu groß",
"error.file.maxwidth": "Die Bildbreite darf {height} Pixel nicht überschreiten",
"error.file.mime.differs":
"Die Datei muss den Medientyp \"{mime}\" haben.",
"error.file.mime.differs": "Die Datei muss den Medientyp \"{mime}\" haben.",
"error.file.mime.forbidden": "Der Medientyp \"{mime}\" ist nicht erlaubt",
"error.file.mime.invalid": "Ungültiger Dateityp: {mime}",
"error.file.mime.missing":
"Der Medientyp für \"{filename}\" konnte nicht erkannt werden",
"error.file.mime.missing": "Der Medientyp für \"{filename}\" konnte nicht erkannt werden",
"error.file.minheight": "Die Bildhöhe muss mindestens {height} Pixel betragen",
"error.file.minsize": "Die Datei ist zu klein",
"error.file.minwidth": "Die Bildbreite muss mindestens {height} Pixel betragen",
@@ -90,111 +83,77 @@
"error.license.email": "Bitte gib eine gültige E-Mailadresse an",
"error.license.verification": "Die Lizenz konnte nicht verifiziert werden",
"error.page.changeSlug.permission":
"Du darfst die URL der Seite \"{slug}\" nicht ändern",
"error.page.changeStatus.incomplete":
"Die Seite ist nicht vollständig und kann daher nicht veröffentlicht werden",
"error.page.changeStatus.permission":
"Der Status der Seite kann nicht geändert werden",
"error.page.changeStatus.toDraft.invalid":
"Die Seite \"{slug}\" kann nicht in einen Entwurf umgewandelt werden",
"error.page.changeTemplate.invalid":
"Die Vorlage für die Seite \"{slug}\" kann nicht geändert werden",
"error.page.changeTemplate.permission":
"Du kannst die Vorlage für die Seite \"{slug}\" nicht ändern",
"error.page.changeSlug.permission": "Du darfst die URL der Seite \"{slug}\" nicht ändern",
"error.page.changeStatus.incomplete": "Die Seite ist nicht vollständig und kann daher nicht veröffentlicht werden",
"error.page.changeStatus.permission": "Der Status der Seite kann nicht geändert werden",
"error.page.changeStatus.toDraft.invalid": "Die Seite \"{slug}\" kann nicht in einen Entwurf umgewandelt werden",
"error.page.changeTemplate.invalid": "Die Vorlage für die Seite \"{slug}\" kann nicht geändert werden",
"error.page.changeTemplate.permission": "Du kannst die Vorlage für die Seite \"{slug}\" nicht ändern",
"error.page.changeTitle.empty": "Bitte gib einen Titel an",
"error.page.changeTitle.permission":
"Du kannst den Titel für die Seite \"{slug}\" nicht ändern",
"error.page.changeTitle.permission": "Du kannst den Titel für die Seite \"{slug}\" nicht ändern",
"error.page.create.permission": "Du kannst die Seite \"{slug}\" nicht anlegen",
"error.page.delete": "Die Seite \"{slug}\" kann nicht gelöscht werden",
"error.page.delete.confirm": "Bitte gib zur Bestätigung den Seitentitel ein",
"error.page.delete.hasChildren":
"Die Seite hat Unterseiten und kann nicht gelöscht werden",
"error.page.delete.hasChildren": "Die Seite hat Unterseiten und kann nicht gelöscht werden",
"error.page.delete.permission": "Du kannst die Seite \"{slug}\" nicht löschen",
"error.page.draft.duplicate":
"Ein Entwurf mit dem URL-Kürzel \"{slug}\" besteht bereits",
"error.page.duplicate":
"Eine Seite mit dem URL-Kürzel \"{slug}\" besteht bereits",
"error.page.draft.duplicate": "Ein Entwurf mit dem URL-Kürzel \"{slug}\" besteht bereits",
"error.page.duplicate": "Eine Seite mit dem URL-Kürzel \"{slug}\" besteht bereits",
"error.page.duplicate.permission": "Du kannst die Seite \"{slug}\" nicht duplizieren",
"error.page.notFound": "Die Seite \"{slug}\" konnte nicht gefunden werden",
"error.page.num.invalid":
"Bitte gib eine gültige Sortierungszahl an. Negative Zahlen sind nicht erlaubt.",
"error.page.num.invalid": "Bitte gib eine gültige Sortierungszahl an. Negative Zahlen sind nicht erlaubt.",
"error.page.slug.invalid": "Bitte gib ein gültiges URL-Kürzel an",
"error.page.sort.permission": "Die Seite \"{slug}\" kann nicht umsortiert werden",
"error.page.status.invalid": "Bitte gib einen gültigen Seitenstatus an",
"error.page.undefined": "Die Seite konnte nicht gefunden werden",
"error.page.update.permission": "Du kannst die Seite \"{slug}\" nicht editieren",
"error.section.files.max.plural":
"Bitte füge nicht mehr als {max} Dateien zum Bereich \"{section}\" hinzu",
"error.section.files.max.singular":
"Bitte füge nicht mehr als eine Datei zum Bereich \"{section}\" hinzu",
"error.section.files.min.plural":
"Der Bereich \"{section}\" benötigt mindestens {min} Dateien",
"error.section.files.min.singular":
"Der Bereich \"{section}\" benötigt mindestens eine Datei",
"error.section.files.max.plural": "Bitte füge nicht mehr als {max} Dateien zum Bereich \"{section}\" hinzu",
"error.section.files.max.singular": "Bitte füge nicht mehr als eine Datei zum Bereich \"{section}\" hinzu",
"error.section.files.min.plural": "Der Bereich \"{section}\" benötigt mindestens {min} Dateien",
"error.section.files.min.singular": "Der Bereich \"{section}\" benötigt mindestens eine Datei",
"error.section.pages.max.plural":
"Bitte füge nicht mehr als {max} Seiten zum Bereich \"{section}\" hinzu",
"error.section.pages.max.singular":
"Bitte füge nicht mehr als eine Seite zum Bereich \"{section}\" hinzu",
"error.section.pages.min.plural":
"Der Bereich \"{section}\" benötigt mindestens {min} Seiten",
"error.section.pages.min.singular":
"Der Bereich \"{section}\" benötigt mindestens eine Seite",
"error.section.pages.max.plural": "Bitte füge nicht mehr als {max} Seiten zum Bereich \"{section}\" hinzu",
"error.section.pages.max.singular": "Bitte füge nicht mehr als eine Seite zum Bereich \"{section}\" hinzu",
"error.section.pages.min.plural": "Der Bereich \"{section}\" benötigt mindestens {min} Seiten",
"error.section.pages.min.singular": "Der Bereich \"{section}\" benötigt mindestens eine Seite",
"error.section.notLoaded": "Der Bereich \"{name}\" konnte nicht geladen werden",
"error.section.type.invalid": "Der Bereichstyp \"{type}\" ist nicht gültig",
"error.site.changeTitle.empty": "Bitte gib einen Titel an",
"error.site.changeTitle.permission":
"Du kannst den Titel der Seite nicht ändern",
"error.site.changeTitle.permission": "Du kannst den Titel der Seite nicht ändern",
"error.site.update.permission": "Du darfst die Seite nicht editieren",
"error.template.default.notFound": "Die \"Default\"-Vorlage existiert nicht",
"error.user.changeEmail.permission":
"Du kannst die E-Mailadresse für den Benutzer \"{name}\" nicht ändern",
"error.user.changeLanguage.permission":
"Du kannst die Sprache für den Benutzer \"{name}\" nicht ändern",
"error.user.changeName.permission":
"Du kannst den Namen für den Benutzer \"{name}\" nicht ändern",
"error.user.changePassword.permission":
"Du kannst das Passwort für den Benutzer \"{name}\" nicht ändern",
"error.user.changeRole.lastAdmin":
"Die Rolle des letzten Administrators kann nicht geändert werden",
"error.user.changeRole.permission":
"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.changeEmail.permission": "Du kannst die E-Mailadresse für den Benutzer \"{name}\" nicht ändern",
"error.user.changeLanguage.permission": "Du kannst die Sprache für den Benutzer \"{name}\" nicht ändern",
"error.user.changeName.permission": "Du kannst den Namen für den Benutzer \"{name}\" nicht ändern",
"error.user.changePassword.permission": "Du kannst das Passwort für den Benutzer \"{name}\" nicht ändern",
"error.user.changeRole.lastAdmin": "Die Rolle des letzten Administrators kann nicht geändert werden",
"error.user.changeRole.permission": "Du kannst die Rolle für den Benutzer \"{name}\" nicht ändern",
"error.user.changeRole.toAdmin": "Du darfst die Admin Rolle nicht an andere Benutzer*innen vergeben",
"error.user.create.permission": "Du kannst diesen Benutzer nicht anlegen",
"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.lastUser": "Der letzte Benutzer kann nicht gelöscht werden",
"error.user.delete.permission":
"Du darfst den Benutzer \"{name}\" nicht löschen",
"error.user.duplicate":
"Ein Benutzer mit der E-Mailadresse \"{email}\" besteht bereits",
"error.user.delete.permission": "Du darfst den Benutzer \"{name}\" nicht löschen",
"error.user.duplicate": "Ein Benutzer mit der E-Mailadresse \"{email}\" besteht bereits",
"error.user.email.invalid": "Bitte gib eine gültige E-Mailadresse an",
"error.user.language.invalid": "Bitte gib eine gültige Sprache an",
"error.user.notFound": "Der Benutzer \"{name}\" wurde nicht gefunden",
"error.user.password.invalid":
"Bitte gib ein gültiges Passwort ein. Passwörter müssen mindestens 8 Zeichen lang sein.",
"error.user.password.invalid": "Bitte gib ein gültiges Passwort ein. Passwörter müssen mindestens 8 Zeichen lang sein.",
"error.user.password.notSame": "Die Passwörter stimmen nicht überein",
"error.user.password.undefined": "Der Benutzer hat kein Passwort",
"error.user.role.invalid": "Bitte gib eine gültige Rolle an",
"error.user.update.permission":
"Du darfst den den Benutzer \"{name}\" nicht editieren",
"error.user.update.permission": "Du darfst den den Benutzer \"{name}\" nicht editieren",
"error.validation.accepted": "Bitte bestätige",
"error.validation.alpha": "Bitte gib nur Zeichen zwischen A und Z ein",
"error.validation.alphanum":
"Bitte gib nur Zeichen zwischen A und Z und Zahlen zwischen 0 und 9 ein",
"error.validation.between":
"Bitte gib einen Wert zwischen \"{min}\" und \"{max}\" ein",
"error.validation.alphanum": "Bitte gib nur Zeichen zwischen A und Z und Zahlen zwischen 0 und 9 ein",
"error.validation.between": "Bitte gib einen Wert zwischen \"{min}\" und \"{max}\" ein",
"error.validation.boolean": "Bitte bestätige oder lehne ab",
"error.validation.contains":
"Bitte gib einen Wert ein, der \"{needle}\" enthält",
"error.validation.contains": "Bitte gib einen Wert ein, der \"{needle}\" enthält",
"error.validation.date": "Bitte gib ein gültiges Datum ein",
"error.validation.date.after": "Bitte gib ein Datum nach dem {date} ein",
"error.validation.date.before": "Bitte gib ein Datum vor dem {date} ein",
@@ -210,18 +169,14 @@
"error.validation.less": "Bitte gib einen Wert kleiner als {max} ein",
"error.validation.match": "Der Wert entspricht nicht dem erwarteten Muster",
"error.validation.max": "Bitte gib einen Wert ein, der nicht größer als {max} ist",
"error.validation.maxlength":
"Bitte gib einen kürzeren Text ein (max. {max} Zeichen)",
"error.validation.maxlength": "Bitte gib einen kürzeren Text ein (max. {max} Zeichen)",
"error.validation.maxwords": "Bitte nutze nicht mehr als {max} Wort(e)",
"error.validation.min": "Bitte gib einen Wert ein, der nicht kleiner als {min} ist",
"error.validation.minlength":
"Bitte gib einen längeren Text ein. (min. {min} Zeichen)",
"error.validation.minlength": "Bitte gib einen längeren Text ein. (min. {min} Zeichen)",
"error.validation.minwords": "Bitte nutze mindestens {min} Wort(e)",
"error.validation.more": "Bitte gib einen größeren Wert als {min} ein",
"error.validation.notcontains":
"Bitte gib einen Wert ein, der nicht \"{needle}\" enthält",
"error.validation.notin":
"Bitte gib keinen der folgenden Werte ein: ({notIn})",
"error.validation.notcontains": "Bitte gib einen Wert ein, der nicht \"{needle}\" enthält",
"error.validation.notin": "Bitte gib keinen der folgenden Werte ein: ({notIn})",
"error.validation.option": "Bitte wähle eine gültige Option aus",
"error.validation.num": "Bitte gib eine gültige Zahl an",
"error.validation.required": "Bitte gib etwas ein",
@@ -238,8 +193,7 @@
"field.structure.empty": "Es bestehen keine Eintr\u00e4ge.",
"field.users.empty": "Keine Benutzer ausgewählt",
"file.delete.confirm":
"Willst du die Datei <strong>{filename}</strong> <br>wirklich löschen?",
"file.delete.confirm": "Willst du die Datei <strong>{filename}</strong> <br>wirklich löschen?",
"files": "Dateien",
"files.empty": "Keine Dateien",
@@ -251,29 +205,22 @@
"installation": "Installation",
"installation.completed": "Das Panel wurde installiert",
"installation.disabled": "Die Panel-Installation ist auf öffentlichen Servern automatisch deaktiviert. Bitte installiere das Panel auf einem lokalen Server oder aktiviere die Installation gezielt mit der <code>panel.install</code> Option. ",
"installation.issues.accounts":
"<code>/site/accounts</code> ist nicht beschreibbar",
"installation.issues.content":
"<code>/content</code> existiert nicht oder ist nicht beschreibbar",
"installation.issues.accounts": "<code>/site/accounts</code> ist nicht beschreibbar",
"installation.issues.content": "<code>/content</code> existiert nicht oder ist nicht beschreibbar",
"installation.issues.curl": "Die <code>CURL</code> Erweiterung wird benötigt",
"installation.issues.headline": "Das Panel kann nicht installiert werden",
"installation.issues.mbstring":
"Die <code>MB String</code> Erweiterung wird benötigt",
"installation.issues.media":
"Der <code>/media</code> Ordner ist nicht beschreibbar",
"installation.issues.mbstring": "Die <code>MB String</code> Erweiterung wird benötigt",
"installation.issues.media": "Der <code>/media</code> Ordner ist nicht beschreibbar",
"installation.issues.php": "Bitte verwende <code>PHP 7+</code>",
"installation.issues.server":
"Kirby benötigt <code>Apache</code>, <code>Nginx</code> or <code>Caddy</code>",
"installation.issues.server": "Kirby benötigt <code>Apache</code>, <code>Nginx</code> or <code>Caddy</code>",
"installation.issues.sessions": "<code>/site/sessions</code> ist nicht beschreibbar",
"language": "Sprache",
"language.code": "Code",
"language.convert": "Als Standard auswählen",
"language.convert.confirm":
"<p>Willst du <strong>{name}</strong> wirklich in die Standardsprache umwandeln? Dieser Schritt kann nicht rückgängig gemacht werden.</p><p>Wenn <strong>{name}</strong> unübersetzte Felder hat, gibt es keine gültigen Standardwerte für diese Felder und Inhalte könnten verloren gehen.</p>",
"language.convert.confirm": "<p>Willst du <strong>{name}</strong> wirklich in die Standardsprache umwandeln? Dieser Schritt kann nicht rückgängig gemacht werden.</p><p>Wenn <strong>{name}</strong> unübersetzte Felder hat, gibt es keine gültigen Standardwerte für diese Felder und Inhalte könnten verloren gehen.</p>",
"language.create": "Neue Sprache anlegen",
"language.delete.confirm":
"Willst du <strong>{name}</strong> inklusive aller Übersetzungen wirklich löschen? Dieser Schritt kann nicht rückgängig gemacht werden!",
"language.delete.confirm": "Willst du <strong>{name}</strong> inklusive aller Übersetzungen wirklich löschen? Dieser Schritt kann nicht rückgängig gemacht werden!",
"language.deleted": "Die Sprache wurde gelöscht",
"language.direction": "Leserichtung",
"language.direction.ltr": "Von links nach rechts",
@@ -292,8 +239,7 @@
"license": "Lizenz",
"license.buy": "Kaufe eine Lizenz",
"license.register": "Registrieren",
"license.register.help":
"Den Lizenzcode findest du in der Bestätigungsmail zu deinem Kauf. Bitte kopiere und füge ihn ein, um Kirby zu registrieren.",
"license.register.help": "Den Lizenzcode findest du in der Bestätigungsmail zu deinem Kauf. Bitte kopiere und füge ihn ein, um Kirby zu registrieren.",
"license.register.label": "Bitte gib deinen Lizenzcode ein",
"license.register.success": "Vielen Dank für deine Unterstützung",
"license.unregistered": "Dies ist eine unregistrierte Kirby-Demo",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Bitte wähle eine Position aus",
"page.changeStatus.select": "Wähle einen neuen Status aus",
"page.changeTemplate": "Vorlage ändern",
"page.delete.confirm":
"Willst du die Seite <strong>{title}</strong> wirklich löschen?",
"page.delete.confirm.subpages":
"<strong>Diese Seite hat Unterseiten</strong>. <br>Alle Unterseiten werden ebenfalls gelöscht.",
"page.delete.confirm": "Willst du die Seite <strong>{title}</strong> wirklich löschen?",
"page.delete.confirm.subpages": "<strong>Diese Seite hat Unterseiten</strong>. <br>Alle Unterseiten werden ebenfalls gelöscht.",
"page.delete.confirm.title": "Gib zur Bestätigung den Seitentitel ein",
"page.draft.create": "Entwurf anlegen",
"page.duplicate.appendix": "Kopie",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Seiten kopieren",
"page.status": "Status",
"page.status.draft": "Entwurf",
"page.status.draft.description":
"Die Seite ist im Entwurfsmodus und ist nur für angemeldete Benutzer sichtbar",
"page.status.draft.description": "Die Seite ist im Entwurfsmodus und ist nur für angemeldete Benutzer*innen oder über den geheimen Link sichtbar",
"page.status.listed": "Öffentlich",
"page.status.listed.description": "Die Seite ist öffentlich für alle Besucher",
"page.status.unlisted": "Ungelistet",
@@ -388,10 +331,11 @@
"replace": "Ersetzen",
"retry": "Wiederholen",
"revert": "Verwerfen",
"revert.confirm": "Willst du wirklich alle ungespeicherten Änderungen verwerfen? ",
"role": "Rolle",
"role.admin.description": "Administratoren haben alle Rechte",
"role.admin.title": "Administrator",
"role.admin.description": "Administrator*innen haben alle Rechte",
"role.admin.title": "Administrator*in",
"role.all": "Alle",
"role.empty": "Keine Benutzer mit dieser Rolle",
"role.description.placeholder": "Keine Beschreibung",
@@ -451,8 +395,7 @@
"url.placeholder": "https://beispiel.de",
"user": "Benutzer",
"user.blueprint":
"Du kannst zusätzliche Felder und Bereiche für diese Benutzerrolle in <strong>/site/blueprints/users/{role}.yml</strong> anlegen",
"user.blueprint": "Du kannst zusätzliche Felder und Bereiche für diese Benutzerrolle in <strong>/site/blueprints/users/{role}.yml</strong> anlegen",
"user.changeEmail": "E-Mail ändern",
"user.changeLanguage": "Sprache ändern",
"user.changeName": "Benutzer umbenennen",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Neue Rolle auswählen",
"user.create": "Neuen Benutzer anlegen",
"user.delete": "Benutzer löschen",
"user.delete.confirm":
"Willst du den Benutzer <br><strong>{email}</strong> wirklich löschen?",
"user.delete.confirm": "Willst du den Benutzer <br><strong>{email}</strong> wirklich löschen?",
"users": "Benutzer",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "Δεν ήταν δυνατή η μεταφόρτωση της εικόνας προφίλ",
"error.avatar.delete.fail": "Δεν ήταν δυνατή η διαγραφή της εικόνας προφίλ",
"error.avatar.dimensions.invalid":
"Διατηρήστε το πλάτος και το ύψος της εικόνας προφίλ κάτω από 3000 εικονοστοιχεία",
"error.avatar.mime.forbidden":
"\u039c\u03b7 \u03b1\u03c0\u03bf\u03b4\u03b5\u03ba\u03c4\u03cc\u03c2 \u03c4\u03cd\u03c0\u03bf\u03c2 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5",
"error.avatar.dimensions.invalid": "Διατηρήστε το πλάτος και το ύψος της εικόνας προφίλ κάτω από 3000 εικονοστοιχεία",
"error.avatar.mime.forbidden": "\u039c\u03b7 \u03b1\u03c0\u03bf\u03b4\u03b5\u03ba\u03c4\u03cc\u03c2 \u03c4\u03cd\u03c0\u03bf\u03c2 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5",
"error.blueprint.notFound": "Δεν ήταν δυνατή η φόρτωση του προσχεδίου \"{name}\"",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Μη έγκυρος μετατροπέας \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Δεν επιτρέπεται να αλλάξετε το όνομα του \"{filename}\"",
"error.file.changeName.permission": "Δεν επιτρέπεται να αλλάξετε το όνομα του \"{filename}\"",
"error.file.duplicate": "Ένα αρχείο με το όνομα \"{filename}\" υπάρχει ήδη",
"error.file.extension.forbidden":
"\u039c\u03b7 \u03b1\u03c0\u03bf\u03b4\u03b5\u03ba\u03c4\u03ae \u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5",
"error.file.extension.missing":
"Λείπει η επέκταση για το \"{filename}\"",
"error.file.extension.forbidden": "\u039c\u03b7 \u03b1\u03c0\u03bf\u03b4\u03b5\u03ba\u03c4\u03ae \u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5",
"error.file.extension.missing": "Λείπει η επέκταση για το \"{filename}\"",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
"error.file.maxwidth": "The width of the image must not exceed {width} pixels",
"error.file.mime.differs":
"Το αρχείο πρέπει να είναι του ίδιου τύπου mime \"{mime}\"",
"error.file.mime.differs": "Το αρχείο πρέπει να είναι του ίδιου τύπου mime \"{mime}\"",
"error.file.mime.forbidden": "Ο τύπος μέσου \"{mime}\" δεν επιτρέπεται",
"error.file.mime.invalid": "Invalid mime type: {mime}",
"error.file.mime.missing":
"Δεν είναι δυνατό να εντοπιστεί ο τύπος μέσου για το \"{filename}\"",
"error.file.mime.missing": "Δεν είναι δυνατό να εντοπιστεί ο τύπος μέσου για το \"{filename}\"",
"error.file.minheight": "The height of the image must be at least {height} pixels",
"error.file.minsize": "The file is too small",
"error.file.minwidth": "The width of the image must be at least {width} pixels",
@@ -90,111 +83,77 @@
"error.license.email": "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου",
"error.license.verification": "The license could not be verified",
"error.page.changeSlug.permission":
"Δεν επιτρέπεται να αλλάξετε το URL της σελίδας \"{slug}\"",
"error.page.changeStatus.incomplete":
"Δεν ήταν δυνατή η δημοσίευση της σελίδας καθώς περιέχει σφάλματα",
"error.page.changeStatus.permission":
"Δεν είναι δυνατή η αλλαγή κατάστασης για αυτή τη σελίδα",
"error.page.changeStatus.toDraft.invalid":
"Δεν είναι δυνατή η μετατροπή της σελίδας \"{slug}\" σε προσχέδιο",
"error.page.changeTemplate.invalid":
"Δεν είναι δυνατή η αλλαγή προτύπου για τη σελίδα \"{slug}\"",
"error.page.changeTemplate.permission":
"Δεν επιτρέπεται να αλλάξετε το πρότυπο για τη σελίδα \"{slug}\"",
"error.page.changeSlug.permission": "Δεν επιτρέπεται να αλλάξετε το URL της σελίδας \"{slug}\"",
"error.page.changeStatus.incomplete": "Δεν ήταν δυνατή η δημοσίευση της σελίδας καθώς περιέχει σφάλματα",
"error.page.changeStatus.permission": "Δεν είναι δυνατή η αλλαγή κατάστασης για αυτή τη σελίδα",
"error.page.changeStatus.toDraft.invalid": "Δεν είναι δυνατή η μετατροπή της σελίδας \"{slug}\" σε προσχέδιο",
"error.page.changeTemplate.invalid": "Δεν είναι δυνατή η αλλαγή προτύπου για τη σελίδα \"{slug}\"",
"error.page.changeTemplate.permission": "Δεν επιτρέπεται να αλλάξετε το πρότυπο για τη σελίδα \"{slug}\"",
"error.page.changeTitle.empty": "Ο τίτλος δεν μπορεί να είναι κενός",
"error.page.changeTitle.permission":
"Δεν επιτρέπεται να αλλάξετε τον τίτλο για τη σελίδα \"{slug}\"",
"error.page.changeTitle.permission": "Δεν επιτρέπεται να αλλάξετε τον τίτλο για τη σελίδα \"{slug}\"",
"error.page.create.permission": "Δεν επιτρέπεται να δημιουργήσετε τη σελίδα \"{slug}\"",
"error.page.delete": "Δεν είναι δυνατή η διαγραφή της σελίδας \"{slug}\"",
"error.page.delete.confirm": "Παρακαλώ εισάγετε τον τίτλο της σελίδας για επιβεβαίωση",
"error.page.delete.hasChildren":
"Δεν είναι δυνατή η διαγραφή της σελίδας καθώς περιέχει υποσελίδες",
"error.page.delete.hasChildren": "Δεν είναι δυνατή η διαγραφή της σελίδας καθώς περιέχει υποσελίδες",
"error.page.delete.permission": "Δεν επιτρέπεται η διαγραφή της σελίδας \"{slug}\"",
"error.page.draft.duplicate":
"Υπάρχει ήδη ένα προσχέδιο σελίδας με την διεύθυνση URL \"{slug}\"",
"error.page.duplicate":
"Υπάρχει ήδη μια σελίδα με την διεύθυνση URL \"{slug}\"",
"error.page.draft.duplicate": "Υπάρχει ήδη ένα προσχέδιο σελίδας με την διεύθυνση URL \"{slug}\"",
"error.page.duplicate": "Υπάρχει ήδη μια σελίδα με την διεύθυνση URL \"{slug}\"",
"error.page.duplicate.permission": "You are not allowed to duplicate \"{slug}\"",
"error.page.notFound": "Δεν ήταν δυνατή η εύρεση της σελίδας \"{slug}\"",
"error.page.num.invalid":
"Παρακαλώ εισάγετε έναν έγκυρο αριθμό ταξινόμησης. Οι αριθμοί δεν μπορεί να είναι αρνητικοί.",
"error.page.num.invalid": "Παρακαλώ εισάγετε έναν έγκυρο αριθμό ταξινόμησης. Οι αριθμοί δεν μπορεί να είναι αρνητικοί.",
"error.page.slug.invalid": "Παρακαλώ εισάγετε ένα έγκυρο πρόθεμα διεύθυνσης URL",
"error.page.sort.permission": "Δεν είναι δυνατή η ταξινόμηση της σελίδας \"{slug}\"",
"error.page.status.invalid": "Ορίστε μια έγκυρη κατάσταση σελίδας",
"error.page.undefined": "Δεν ήταν δυνατή η εύρεση της σελίδας",
"error.page.update.permission": "Δεν επιτρέπεται η ενημέρωση της σελίδας \"{slug}\"",
"error.section.files.max.plural":
"Δεν πρέπει να προσθέσετε περισσότερα από {max} αρχεία στην ενότητα \"{section}\"",
"error.section.files.max.singular":
"Δεν πρέπει να προσθέσετε περισσότερα από ένα αρχεία στην ενότητα \"{section}\"",
"error.section.files.min.plural":
"The \"{section}\" section requires at least {min} files",
"error.section.files.min.singular":
"The \"{section}\" section requires at least one file",
"error.section.files.max.plural": "Δεν πρέπει να προσθέσετε περισσότερα από {max} αρχεία στην ενότητα \"{section}\"",
"error.section.files.max.singular": "Δεν πρέπει να προσθέσετε περισσότερα από ένα αρχεία στην ενότητα \"{section}\"",
"error.section.files.min.plural": "The \"{section}\" section requires at least {min} files",
"error.section.files.min.singular": "The \"{section}\" section requires at least one file",
"error.section.pages.max.plural":
"Δεν μπορείτε να προσθέσετε περισσότερες από {max} σελίδες στην ενότητα \"{section}\"",
"error.section.pages.max.singular":
"Δεν μπορείτε να προσθέσετε περισσότερες από μία σελίδες στην ενότητα \"{section}\"",
"error.section.pages.min.plural":
"The \"{section}\" section requires at least {min} pages",
"error.section.pages.min.singular":
"The \"{section}\" section requires at least one page",
"error.section.pages.max.plural": "Δεν μπορείτε να προσθέσετε περισσότερες από {max} σελίδες στην ενότητα \"{section}\"",
"error.section.pages.max.singular": "Δεν μπορείτε να προσθέσετε περισσότερες από μία σελίδες στην ενότητα \"{section}\"",
"error.section.pages.min.plural": "The \"{section}\" section requires at least {min} pages",
"error.section.pages.min.singular": "The \"{section}\" section requires at least one page",
"error.section.notLoaded": "Δεν ήταν δυνατή η φόρτωση της ενότητας \"{name}\"",
"error.section.type.invalid": "Ο τύπος ενότητας \"{type}\" δεν είναι έγκυρος",
"error.site.changeTitle.empty": "Ο τίτλος δεν μπορεί να είναι κενός",
"error.site.changeTitle.permission":
"Δεν επιτρέπεται να αλλάξετε τον τίτλο του ιστότοπου",
"error.site.changeTitle.permission": "Δεν επιτρέπεται να αλλάξετε τον τίτλο του ιστότοπου",
"error.site.update.permission": "Δεν επιτρέπεται η ενημέρωση του ιστότοπου",
"error.template.default.notFound": "Το προεπιλεγμένο πρότυπο δεν υπάρχει",
"error.user.changeEmail.permission":
"Δεν επιτρέπεται να αλλάξετε τη διεύθινση ηλεκτρονικού ταχυδρομείου για τον χρήστη \"{name}\"",
"error.user.changeLanguage.permission":
"Δεν επιτρέπεται να αλλάξετε τη γλώσσα για τον χρήστη \"{name}\"",
"error.user.changeName.permission":
"Δεν επιτρέπεται να αλλάξετε το όνομα του χρήστη \"{name}",
"error.user.changePassword.permission":
"Δεν επιτρέπεται να αλλάξετε τον κωδικό πρόσβασης για τον χρήστη \"{name}\"",
"error.user.changeRole.lastAdmin":
"Ο ρόλος του τελευταίου διαχειριστή δεν μπορεί να αλλάξει",
"error.user.changeRole.permission":
"Δεν επιτρέπεται να αλλάξετε το ρόλο του χρήστη \"{name}\"",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.changeEmail.permission": "Δεν επιτρέπεται να αλλάξετε τη διεύθινση ηλεκτρονικού ταχυδρομείου για τον χρήστη \"{name}\"",
"error.user.changeLanguage.permission": "Δεν επιτρέπεται να αλλάξετε τη γλώσσα για τον χρήστη \"{name}\"",
"error.user.changeName.permission": "Δεν επιτρέπεται να αλλάξετε το όνομα του χρήστη \"{name}",
"error.user.changePassword.permission": "Δεν επιτρέπεται να αλλάξετε τον κωδικό πρόσβασης για τον χρήστη \"{name}\"",
"error.user.changeRole.lastAdmin": "Ο ρόλος του τελευταίου διαχειριστή δεν μπορεί να αλλάξει",
"error.user.changeRole.permission": "Δεν επιτρέπεται να αλλάξετε το ρόλο του χρήστη \"{name}\"",
"error.user.changeRole.toAdmin": "You are not allowed to promote someone to the admin role",
"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.lastAdmin": "Δεν είναι δυνατή η διαγραφή του τελευταίου διαχειριστή",
"error.user.delete.lastUser": "Δεν είναι δυνατή η διαγραφή του τελευταίου χρήστη",
"error.user.delete.permission":
"Δεν επιτρέπεται να διαγράψετ τον χρήστη \"{name}\"",
"error.user.duplicate":
"Ένας χρήστης με τη διεύθυνση ηλεκτρονικού ταχυδρομείου \"{email}\" υπάρχει ήδη",
"error.user.delete.permission": "Δεν επιτρέπεται να διαγράψετ τον χρήστη \"{name}\"",
"error.user.duplicate": "Ένας χρήστης με τη διεύθυνση ηλεκτρονικού ταχυδρομείου \"{email}\" υπάρχει ήδη",
"error.user.email.invalid": "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου",
"error.user.language.invalid": "Παρακαλώ εισαγάγετε μια έγκυρη γλώσσα",
"error.user.notFound": "Δεν είναι δυνατή η εύρεση του χρήστη \"{name}\"",
"error.user.password.invalid":
"Παρακαλώ εισάγετε έναν έγκυρο κωδικό πρόσβασης. Οι κωδικοί πρόσβασης πρέπει να έχουν μήκος τουλάχιστον 8 χαρακτήρων.",
"error.user.password.invalid": "Παρακαλώ εισάγετε έναν έγκυρο κωδικό πρόσβασης. Οι κωδικοί πρόσβασης πρέπει να έχουν μήκος τουλάχιστον 8 χαρακτήρων.",
"error.user.password.notSame": "\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03b5\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03b9\u03ce\u03c3\u03c4\u03b5 \u03c4\u03bf\u03bd \u039a\u03c9\u03b4\u03b9\u03ba\u03cc \u03a0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2",
"error.user.password.undefined": "Ο χρήστης δεν έχει κωδικό πρόσβασης",
"error.user.role.invalid": "Παρακαλώ εισαγάγετε έναν έγκυρο ρόλο",
"error.user.update.permission":
"Δεν επιτρέπεται η ενημέρωση του χρήστη \"{name}\"",
"error.user.update.permission": "Δεν επιτρέπεται η ενημέρωση του χρήστη \"{name}\"",
"error.validation.accepted": "Παρακαλώ επιβεβαιώστε",
"error.validation.alpha": "Παρακαλώ εισάγετε μόνο χαρακτήρες μεταξύ των a-z",
"error.validation.alphanum":
"Παρακαλώ εισάγετε μόνο χαρακτήρες μεταξύ των a-z ή αριθμούς απο το 0 έως το 9",
"error.validation.between":
"Παρακαλώ εισάγετε μια τιμή μεταξύ \"{min}\" και \"{max}\"",
"error.validation.alphanum": "Παρακαλώ εισάγετε μόνο χαρακτήρες μεταξύ των a-z ή αριθμούς απο το 0 έως το 9",
"error.validation.between": "Παρακαλώ εισάγετε μια τιμή μεταξύ \"{min}\" και \"{max}\"",
"error.validation.boolean": "Παρακαλώ επιβεβαιώστε ή αρνηθείτε",
"error.validation.contains":
"Παρακαλώ καταχωρίστε μια τιμή που περιέχει \"{needle}\"",
"error.validation.contains": "Παρακαλώ καταχωρίστε μια τιμή που περιέχει \"{needle}\"",
"error.validation.date": "Παρακαλώ εισάγετε μία έγκυρη ημερομηνία",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Παρακαλώ εισάγετε μια τιμή μικρότερη από {max}",
"error.validation.match": "Η τιμή δεν ταιριάζει με το αναμενόμενο πρότυπο",
"error.validation.max": "Παρακαλώ εισάγετε μια τιμή ίση ή μικρότερη από {max}",
"error.validation.maxlength":
"Παρακαλώ εισάγετε μια μικρότερη τιμή. (max. {max} χαρακτήρες)",
"error.validation.maxlength": "Παρακαλώ εισάγετε μια μικρότερη τιμή. (max. {max} χαρακτήρες)",
"error.validation.maxwords": "Παρακαλώ εισάγετε το πολύ {max} λέξεις",
"error.validation.min": "Παρακαλώ εισάγετε μια τιμή ίση ή μεγαλύτερη από {min}",
"error.validation.minlength":
"Παρακαλώ εισάγετε μεγαλύτερη τιμή. (τουλάχιστον {min} χαρακτήρες)",
"error.validation.minlength": "Παρακαλώ εισάγετε μεγαλύτερη τιμή. (τουλάχιστον {min} χαρακτήρες)",
"error.validation.minwords": "Παρακαλώ εισάγετε τουλάχιστον {min} λέξεις",
"error.validation.more": "Παρακαλώ εισάγετε τουλάχιστον {min} λέξεις",
"error.validation.notcontains":
"Παρακαλώ εισάγετε μια τιμή που δεν περιέχει \"{needle}\"",
"error.validation.notin":
"Παρακαλώ μην εισάγετε κανένα από τα παρακάτω: ({notIn})",
"error.validation.notcontains": "Παρακαλώ εισάγετε μια τιμή που δεν περιέχει \"{needle}\"",
"error.validation.notin": "Παρακαλώ μην εισάγετε κανένα από τα παρακάτω: ({notIn})",
"error.validation.option": "Παρακαλώ κάντε μια έγκυρη επιλογή",
"error.validation.num": "Παρακαλώ εισάγετε έναν έγκυρο αριθμό",
"error.validation.required": "Παρακαλώ εισάγετε κάτι",
@@ -238,8 +193,7 @@
"field.structure.empty": "\u0394\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03c5\u03bd \u03b1\u03ba\u03cc\u03bc\u03b7 \u03ba\u03b1\u03c4\u03b1\u03c7\u03c9\u03c1\u03af\u03c3\u03b5\u03b9\u03c2.",
"field.users.empty": "Δεν έχουν επιλεγεί ακόμη χρήστες",
"file.delete.confirm":
"\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03c3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf;",
"file.delete.confirm": "\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03c3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf;",
"files": "Αρχεία",
"files.empty": "Δεν υπάρχουν ακόμα αρχεία",
@@ -251,29 +205,22 @@
"installation": "Εγκατάσταση",
"installation.completed": "Ο πίνακας ελέγχου έχει εγκατασταθεί",
"installation.disabled": "Η εγκατάσταση του πίνακα ελέγχου είναι απενεργοποιημένη για δημόσιους διακομιστές από προεπιλογή. Εκτελέστε την εγκατάσταση σε ένα τοπικό μηχάνημα ή ενεργοποιήστε την με την επιλογή panel.install.",
"installation.issues.accounts":
"\u039f \u03c6\u03ac\u03ba\u03b5\u03bb\u03bf\u03c2 \/site\/accounts \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03b3\u03b3\u03c1\u03ac\u03c8\u03b9\u03bc\u03bf\u03c2",
"installation.issues.content":
"\u039f \u03c6\u03ac\u03ba\u03b5\u03bb\u03bf\u03c2 content \u03ba\u03b1\u03b9 \u03cc\u03bb\u03bf\u03b9 \u03bf\u03b9 \u03c5\u03c0\u03bf\u03c6\u03ac\u03ba\u03b5\u03bb\u03bf\u03b9 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03b3\u03b3\u03c1\u03ac\u03c8\u03b9\u03bc\u03bf\u03b9.",
"installation.issues.accounts": "\u039f \u03c6\u03ac\u03ba\u03b5\u03bb\u03bf\u03c2 \/site\/accounts \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03b3\u03b3\u03c1\u03ac\u03c8\u03b9\u03bc\u03bf\u03c2",
"installation.issues.content": "\u039f \u03c6\u03ac\u03ba\u03b5\u03bb\u03bf\u03c2 content \u03ba\u03b1\u03b9 \u03cc\u03bb\u03bf\u03b9 \u03bf\u03b9 \u03c5\u03c0\u03bf\u03c6\u03ac\u03ba\u03b5\u03bb\u03bf\u03b9 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03b3\u03b3\u03c1\u03ac\u03c8\u03b9\u03bc\u03bf\u03b9.",
"installation.issues.curl": "Απαιτείται η επέκταση <code>CURL</code>",
"installation.issues.headline": "Ο πίνακας ελέγχου δεν μπορεί να εγκατασταθεί",
"installation.issues.mbstring":
"Απαιτείται η επέκταση <code>MB String</code> ",
"installation.issues.media":
"Ο φάκελος <code>/media</code> δεν υπάρχει ή δεν είναι εγγράψιμος",
"installation.issues.mbstring": "Απαιτείται η επέκταση <code>MB String</code> ",
"installation.issues.media": "Ο φάκελος <code>/media</code> δεν υπάρχει ή δεν είναι εγγράψιμος",
"installation.issues.php": "Βεβαιωθείτε ότι χρησιμοποιήτε <code>PHP 7+</code>",
"installation.issues.server":
"To Kirby απαιτεί <code>Apache</code>, <code>Nginx</code> ή <code>Caddy</code>",
"installation.issues.server": "To Kirby απαιτεί <code>Apache</code>, <code>Nginx</code> ή <code>Caddy</code>",
"installation.issues.sessions": "Ο φάκελος <code>/site/sessions</code> δεν υπάρχει ή δεν είναι εγγράψιμος",
"language": "\u0393\u03bb\u03ce\u03c3\u03c3\u03b1",
"language.code": "Κώδικας",
"language.convert": "Χρήση ως προεπιλογή",
"language.convert.confirm":
"<p>Θέλετε πραγματικά να μετατρέψετε τη <strong>{name}</strong> στην προεπιλεγμένη γλώσσα; Αυτό δεν μπορεί να ανακληθεί.</p><p>Αν το <strong>{name}</strong> χει μη μεταφρασμένο περιεχόμενο, δεν θα υπάρχει πλέον έγκυρη εναλλακτική λύση και τμήματα του ιστότοπού σας ενδέχεται να είναι κενά.</p>",
"language.convert.confirm": "<p>Θέλετε πραγματικά να μετατρέψετε τη <strong>{name}</strong> στην προεπιλεγμένη γλώσσα; Αυτό δεν μπορεί να ανακληθεί.</p><p>Αν το <strong>{name}</strong> χει μη μεταφρασμένο περιεχόμενο, δεν θα υπάρχει πλέον έγκυρη εναλλακτική λύση και τμήματα του ιστότοπού σας ενδέχεται να είναι κενά.</p>",
"language.create": "Προσθέστε μια νέα γλώσσα",
"language.delete.confirm":
"Θέλετε πραγματικά να διαγράψετε τη γλώσσα {name} συμπεριλαμβανομένων όλων των μεταφράσεων; Αυτό δεν μπορεί να αναιρεθεί!",
"language.delete.confirm": "Θέλετε πραγματικά να διαγράψετε τη γλώσσα {name} συμπεριλαμβανομένων όλων των μεταφράσεων; Αυτό δεν μπορεί να αναιρεθεί!",
"language.deleted": "Η γλώσσα έχει διαγραφεί",
"language.direction": "Κατεύθυνση ανάγνωσης",
"language.direction.ltr": "Αριστερά προς τα δεξιά",
@@ -292,8 +239,7 @@
"license": "\u0386\u03b4\u03b5\u03b9\u03b1 \u03a7\u03c1\u03ae\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 Kirby",
"license.buy": "Αγοράστε μια άδεια",
"license.register": "Εγγραφή",
"license.register.help":
"Έχετε λάβει τον κωδικό άδειας χρήσης μετά την αγορά μέσω ηλεκτρονικού ταχυδρομείου. Παρακαλώ αντιγράψτε και επικολλήστε τον για να εγγραφείτε.",
"license.register.help": "Έχετε λάβει τον κωδικό άδειας χρήσης μετά την αγορά μέσω ηλεκτρονικού ταχυδρομείου. Παρακαλώ αντιγράψτε και επικολλήστε τον για να εγγραφείτε.",
"license.register.label": "Παρακαλώ εισαγάγετε τον κωδικό άδειας χρήσης",
"license.register.success": "Σας ευχαριστούμε για την υποστήριξη του Kirby",
"license.unregistered": "Αυτό είναι ένα μη καταχωρημένο demo του Kirby",
@@ -325,7 +271,7 @@
"months.april": "\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2",
"months.august": "\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2",
"months.december": "\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2",
"months.february": "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2",
"months.february": "Φεβρουάριος",
"months.january": "\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2",
"months.july": "\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2",
"months.june": "\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Επιλέξτε μια θέση",
"page.changeStatus.select": "Επιλέξτε μια νέα κατάσταση",
"page.changeTemplate": "Αλλαγή προτύπου",
"page.delete.confirm":
"\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03c3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae\u03bd \u03c4\u03b7 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1;",
"page.delete.confirm.subpages":
"<strong>Αυτή η σελίδα έχει υποσελίδες</strong>. <br>Όλες οι υποσελίδες θα διαγραφούν επίσης.",
"page.delete.confirm": "\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03c3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae\u03bd \u03c4\u03b7 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1;",
"page.delete.confirm.subpages": "<strong>Αυτή η σελίδα έχει υποσελίδες</strong>. <br>Όλες οι υποσελίδες θα διαγραφούν επίσης.",
"page.delete.confirm.title": "Εισάγετε τον τίτλο της σελίδας για επιβεβαίωση",
"page.draft.create": "Δημιουργία προσχεδίου",
"page.duplicate.appendix": "Αντιγραφή",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Copy pages",
"page.status": "Kατάσταση",
"page.status.draft": "Προσχέδιο",
"page.status.draft.description":
"Η σελίδα είναι σε κατάσταση προσχεδίου και είναι ορατή μόνο για συνδεδεμένους συντάκτες",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.listed": "Δημοσιευμένο",
"page.status.listed.description": "Αυτή η σελίδα είναι δημοσιευμένη για οποιονδήποτε",
"page.status.unlisted": "Μη καταχωρημένο",
@@ -388,6 +331,7 @@
"replace": "\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7",
"retry": "\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7",
"revert": "\u0391\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "\u03a1\u03cc\u03bb\u03bf\u03c2",
"role.admin.description": "The admin has all rights",
@@ -451,8 +395,7 @@
"url.placeholder": "https://example.com",
"user": "Χρήστης",
"user.blueprint":
"Μπορείτε να ορίσετε επιπλέον τμήματα και πεδία φόρμας για αυτόν τον ρόλο χρήστη στο <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Μπορείτε να ορίσετε επιπλέον τμήματα και πεδία φόρμας για αυτόν τον ρόλο χρήστη στο <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Αλλαγή διεύθινσης ηλεκτρονικού ταχυδρομείου",
"user.changeLanguage": "Αλλαγή γλώσσας",
"user.changeName": "Μετονομασία χρήστη",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Επιλογή νέου ρόλου",
"user.create": "Προσθήκη νέου χρήστη",
"user.delete": "Διαγραφή χρήστη",
"user.delete.confirm":
"\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03c3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03cc\u03bd \u03c4\u03bf\u03bd \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7;",
"user.delete.confirm": "\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03c3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03cc\u03bd \u03c4\u03bf\u03bd \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7;",
"users": "Χρήστες",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "The profile picture could not be uploaded",
"error.avatar.delete.fail": "The profile picture could not be deleted",
"error.avatar.dimensions.invalid":
"Please keep the width and height of the profile picture under 3000 pixels",
"error.avatar.mime.forbidden":
"The profile picture must be JPEG or PNG files",
"error.avatar.dimensions.invalid": "Please keep the width and height of the profile picture under 3000 pixels",
"error.avatar.mime.forbidden": "The profile picture must be JPEG or PNG files",
"error.blueprint.notFound": "The blueprint \"{name}\" could not be loaded",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Invalid converter \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"You are not allowed to change the name of \"{filename}\"",
"error.file.changeName.permission": "You are not allowed to change the name of \"{filename}\"",
"error.file.duplicate": "A file with the name \"{filename}\" already exists",
"error.file.extension.forbidden":
"The extension \"{extension}\" is not allowed",
"error.file.extension.missing":
"The extensions for \"{filename}\" is missing",
"error.file.extension.forbidden": "The extension \"{extension}\" is not allowed",
"error.file.extension.missing": "The extensions for \"{filename}\" is missing",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
"error.file.maxwidth": "The width of the image must not exceed {width} pixels",
"error.file.mime.differs":
"The uploaded file must be of the same mime type \"{mime}\"",
"error.file.mime.differs": "The uploaded file must be of the same mime type \"{mime}\"",
"error.file.mime.forbidden": "The media type \"{mime}\" is not allowed",
"error.file.mime.invalid": "Invalid mime type: {mime}",
"error.file.mime.missing":
"The media type for \"{filename}\" cannot be detected",
"error.file.mime.missing": "The media type for \"{filename}\" cannot be detected",
"error.file.minheight": "The height of the image must be at least {height} pixels",
"error.file.minsize": "The file is too small",
"error.file.minwidth": "The width of the image must be at least {width} pixels",
@@ -90,111 +83,77 @@
"error.license.email": "Please enter a valid email address",
"error.license.verification": "The license could not be verified",
"error.page.changeSlug.permission":
"You are not allowed to change the URL appendix for \"{slug}\"",
"error.page.changeStatus.incomplete":
"The page has errors and cannot be published",
"error.page.changeStatus.permission":
"The status for this page cannot be changed",
"error.page.changeStatus.toDraft.invalid":
"The page \"{slug}\" cannot be converted to a draft",
"error.page.changeTemplate.invalid":
"The template for the page \"{slug}\" cannot be changed",
"error.page.changeTemplate.permission":
"You are not allowed to change the template for \"{slug}\"",
"error.page.changeSlug.permission": "You are not allowed to change the URL appendix for \"{slug}\"",
"error.page.changeStatus.incomplete": "The page has errors and cannot be published",
"error.page.changeStatus.permission": "The status for this page cannot be changed",
"error.page.changeStatus.toDraft.invalid": "The page \"{slug}\" cannot be converted to a draft",
"error.page.changeTemplate.invalid": "The template for the page \"{slug}\" cannot be changed",
"error.page.changeTemplate.permission": "You are not allowed to change the template for \"{slug}\"",
"error.page.changeTitle.empty": "The title must not be empty",
"error.page.changeTitle.permission":
"You are not allowed to change the title for \"{slug}\"",
"error.page.changeTitle.permission": "You are not allowed to change the title for \"{slug}\"",
"error.page.create.permission": "You are not allowed to create \"{slug}\"",
"error.page.delete": "The page \"{slug}\" cannot be deleted",
"error.page.delete.confirm": "Please enter the page title to confirm",
"error.page.delete.hasChildren":
"The page has subpages and cannot be deleted",
"error.page.delete.hasChildren": "The page has subpages and cannot be deleted",
"error.page.delete.permission": "You are not allowed to delete \"{slug}\"",
"error.page.draft.duplicate":
"A page draft with the URL appendix \"{slug}\" already exists",
"error.page.duplicate":
"A page with the URL appendix \"{slug}\" already exists",
"error.page.draft.duplicate": "A page draft with the URL appendix \"{slug}\" already exists",
"error.page.duplicate": "A page with the URL appendix \"{slug}\" already exists",
"error.page.duplicate.permission": "You are not allowed to duplicate \"{slug}\"",
"error.page.notFound": "The page \"{slug}\" cannot be found",
"error.page.num.invalid":
"Please enter a valid sorting number. Numbers must not be negative.",
"error.page.num.invalid": "Please enter a valid sorting number. Numbers must not be negative.",
"error.page.slug.invalid": "Please enter a valid URL prefix",
"error.page.sort.permission": "The page \"{slug}\" cannot be sorted",
"error.page.status.invalid": "Please set a valid page status",
"error.page.undefined": "The page cannot be found",
"error.page.update.permission": "You are not allowed to update \"{slug}\"",
"error.section.files.max.plural":
"You must not add more than {max} files to the \"{section}\" section",
"error.section.files.max.singular":
"You must not add more than one file to the \"{section}\" section",
"error.section.files.min.plural":
"The \"{section}\" section requires at least {min} files",
"error.section.files.min.singular":
"The \"{section}\" section requires at least one file",
"error.section.files.max.plural": "You must not add more than {max} files to the \"{section}\" section",
"error.section.files.max.singular": "You must not add more than one file to the \"{section}\" section",
"error.section.files.min.plural": "The \"{section}\" section requires at least {min} files",
"error.section.files.min.singular": "The \"{section}\" section requires at least one file",
"error.section.pages.max.plural":
"You must not add more than {max} pages to the \"{section}\" section",
"error.section.pages.max.singular":
"You must not add more than one page to the \"{section}\" section",
"error.section.pages.min.plural":
"The \"{section}\" section requires at least {min} pages",
"error.section.pages.min.singular":
"The \"{section}\" section requires at least one page",
"error.section.pages.max.plural": "You must not add more than {max} pages to the \"{section}\" section",
"error.section.pages.max.singular": "You must not add more than one page to the \"{section}\" section",
"error.section.pages.min.plural": "The \"{section}\" section requires at least {min} pages",
"error.section.pages.min.singular": "The \"{section}\" section requires at least one page",
"error.section.notLoaded": "The section \"{name}\" could not be loaded",
"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":
"You are not allowed to change the title of the site",
"error.site.changeTitle.permission": "You are not allowed to change the title of the site",
"error.site.update.permission": "You are not allowed to update the site",
"error.template.default.notFound": "The default template does not exist",
"error.user.changeEmail.permission":
"You are not allowed to change the email for the user \"{name}\"",
"error.user.changeLanguage.permission":
"You are not allowed to change the language for the user \"{name}\"",
"error.user.changeName.permission":
"You are not allowed to change the name for the user \"{name}\"",
"error.user.changePassword.permission":
"You are not allowed to change the password for the user \"{name}\"",
"error.user.changeRole.lastAdmin":
"The role for the last admin cannot be changed",
"error.user.changeRole.permission":
"You are not allowed to change the role for the user \"{name}\"",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.changeEmail.permission": "You are not allowed to change the email for the user \"{name}\"",
"error.user.changeLanguage.permission": "You are not allowed to change the language for the user \"{name}\"",
"error.user.changeName.permission": "You are not allowed to change the name for the user \"{name}\"",
"error.user.changePassword.permission": "You are not allowed to change the password for the user \"{name}\"",
"error.user.changeRole.lastAdmin": "The role for the last admin cannot be changed",
"error.user.changeRole.permission": "You are not allowed to change the role for the user \"{name}\"",
"error.user.changeRole.toAdmin": "You are not allowed to promote someone to the admin role",
"error.user.create.permission": "You are not allowed to create this user",
"error.user.delete": "The user \"{name}\" cannot be deleted",
"error.user.delete.lastAdmin": "The last admin cannot be deleted",
"error.user.delete.lastUser": "The last user cannot be deleted",
"error.user.delete.permission":
"You are not allowed to delete the user \"{name}\"",
"error.user.duplicate":
"A user with the email address \"{email}\" already exists",
"error.user.delete.permission": "You are not allowed to delete the user \"{name}\"",
"error.user.duplicate": "A user with the email address \"{email}\" already exists",
"error.user.email.invalid": "Please enter a valid email address",
"error.user.language.invalid": "Please enter a valid language",
"error.user.notFound": "The user \"{name}\" cannot be found",
"error.user.password.invalid":
"Please enter a valid password. Passwords must be at least 8 characters long.",
"error.user.password.invalid": "Please enter a valid password. Passwords must be at least 8 characters long.",
"error.user.password.notSame": "The passwords do not match",
"error.user.password.undefined": "The user does not have a password",
"error.user.role.invalid": "Please enter a valid role",
"error.user.update.permission":
"You are not allowed to update the user \"{name}\"",
"error.user.update.permission": "You are not allowed to update the user \"{name}\"",
"error.validation.accepted": "Please confirm",
"error.validation.alpha": "Please only enter characters between a-z",
"error.validation.alphanum":
"Please only enter characters between a-z or numerals 0-9",
"error.validation.between":
"Please enter a value between \"{min}\" and \"{max}\"",
"error.validation.alphanum": "Please only enter characters between a-z or numerals 0-9",
"error.validation.between": "Please enter a value between \"{min}\" and \"{max}\"",
"error.validation.boolean": "Please confirm or deny",
"error.validation.contains":
"Please enter a value that contains \"{needle}\"",
"error.validation.contains": "Please enter a value that contains \"{needle}\"",
"error.validation.date": "Please enter a valid date",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Please enter a value lower than {max}",
"error.validation.match": "The value does not match the expected pattern",
"error.validation.max": "Please enter a value equal to or lower than {max}",
"error.validation.maxlength":
"Please enter a shorter value. (max. {max} characters)",
"error.validation.maxlength": "Please enter a shorter value. (max. {max} characters)",
"error.validation.maxwords": "Please enter no more than {max} word(s)",
"error.validation.min": "Please enter a value equal to or greater than {min}",
"error.validation.minlength":
"Please enter a longer value. (min. {min} characters)",
"error.validation.minlength": "Please enter a longer value. (min. {min} characters)",
"error.validation.minwords": "Please enter at least {min} word(s)",
"error.validation.more": "Please enter a greater value than {min}",
"error.validation.notcontains":
"Please enter a value that does not contain \"{needle}\"",
"error.validation.notin":
"Please don't enter any of the following: ({notIn})",
"error.validation.notcontains": "Please enter a value that does not contain \"{needle}\"",
"error.validation.notin": "Please don't enter any of the following: ({notIn})",
"error.validation.option": "Please select a valid option",
"error.validation.num": "Please enter a valid number",
"error.validation.required": "Please enter something",
@@ -238,8 +193,7 @@
"field.structure.empty": "No entries yet",
"field.users.empty": "No users selected yet",
"file.delete.confirm":
"Do you really want to delete <br><strong>{filename}</strong>?",
"file.delete.confirm": "Do you really want to delete <br><strong>{filename}</strong>?",
"files": "Files",
"files.empty": "No files yet",
@@ -251,29 +205,22 @@
"installation": "Installation",
"installation.completed": "The panel has been installed",
"installation.disabled": "The panel installer is disabled on public servers by default. Please run the installer on a local machine or enable it with the <code>panel.install</code> option.",
"installation.issues.accounts":
"The <code>/site/accounts</code> folder does not exist or is not writable",
"installation.issues.content":
"The <code>/content</code> folder does not exist or is not writable",
"installation.issues.accounts": "The <code>/site/accounts</code> folder does not exist or is not writable",
"installation.issues.content": "The <code>/content</code> folder does not exist or is not writable",
"installation.issues.curl": "The <code>CURL</code> extension is required",
"installation.issues.headline": "The panel cannot be installed",
"installation.issues.mbstring":
"The <code>MB String</code> extension is required",
"installation.issues.media":
"The <code>/media</code> folder does not exist or is not writable",
"installation.issues.mbstring": "The <code>MB String</code> extension is required",
"installation.issues.media": "The <code>/media</code> folder does not exist or is not writable",
"installation.issues.php": "Make sure to use <code>PHP 7+</code>",
"installation.issues.server":
"Kirby requires <code>Apache</code>, <code>Nginx</code> or <code>Caddy</code>",
"installation.issues.server": "Kirby requires <code>Apache</code>, <code>Nginx</code> or <code>Caddy</code>",
"installation.issues.sessions": "The <code>/site/sessions</code> folder does not exist or is not writable",
"language": "Language",
"language.code": "Code",
"language.convert": "Make default",
"language.convert.confirm":
"<p>Do you really want to convert <strong>{name}</strong> to the default language? This cannot be undone.</p><p>If <strong>{name}</strong> has untranslated content, there will no longer be a valid fallback and parts of your site might be empty.</p>",
"language.convert.confirm": "<p>Do you really want to convert <strong>{name}</strong> to the default language? This cannot be undone.</p><p>If <strong>{name}</strong> has untranslated content, there will no longer be a valid fallback and parts of your site might be empty.</p>",
"language.create": "Add a new language",
"language.delete.confirm":
"Do you really want to delete the language <strong>{name}</strong> including all translations? This cannot be undone!",
"language.delete.confirm": "Do you really want to delete the language <strong>{name}</strong> including all translations? This cannot be undone!",
"language.deleted": "The language has been deleted",
"language.direction": "Reading direction",
"language.direction.ltr": "Left to right",
@@ -292,8 +239,7 @@
"license": "License",
"license.buy": "Buy a license",
"license.register": "Register",
"license.register.help":
"You received your license code after the purchase via email. Please copy and paste it to register.",
"license.register.help": "You received your license code after the purchase via email. Please copy and paste it to register.",
"license.register.label": "Please enter your license code",
"license.register.success": "Thank you for supporting Kirby",
"license.unregistered": "This is an unregistered demo of Kirby",
@@ -342,6 +288,7 @@
"on": "on",
"open": "Open",
"options": "Options",
"options.none": "No options",
"orientation": "Orientation",
"orientation.landscape": "Landscape",
@@ -354,10 +301,8 @@
"page.changeStatus.position": "Please select a position",
"page.changeStatus.select": "Select a new status",
"page.changeTemplate": "Change template",
"page.delete.confirm":
"Do you really want to delete <strong>{title}</strong>?",
"page.delete.confirm.subpages":
"<strong>This page has subpages</strong>. <br>All subpages will be deleted as well.",
"page.delete.confirm": "Do you really want to delete <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>This page has subpages</strong>. <br>All subpages will be deleted as well.",
"page.delete.confirm.title": "Enter the page title to confirm",
"page.draft.create": "Create draft",
"page.duplicate.appendix": "Copy",
@@ -365,8 +310,7 @@
"page.duplicate.pages": "Copy pages",
"page.status": "Status",
"page.status.draft": "Draft",
"page.status.draft.description":
"The page is in draft mode and only visible for logged in editors",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.listed": "Public",
"page.status.listed.description": "The page is public for anyone",
"page.status.unlisted": "Unlisted",
@@ -388,6 +332,7 @@
"replace": "Replace",
"retry": "Try again",
"revert": "Revert",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "Role",
"role.admin.description": "The admin has all rights",
@@ -400,6 +345,9 @@
"save": "Save",
"search": "Search",
"search.min": "Enter {min} characters to search",
"search.all": "Show all",
"search.results.none": "No results",
"section.required": "The section is required",
@@ -451,8 +399,7 @@
"url.placeholder": "https://example.com",
"user": "User",
"user.blueprint":
"You can define additional sections and form fields for this user role in <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "You can define additional sections and form fields for this user role in <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Change email",
"user.changeLanguage": "Change language",
"user.changeName": "Rename this user",
@@ -463,8 +410,7 @@
"user.changeRole.select": "Select a new role",
"user.create": "Add a new user",
"user.delete": "Delete this user",
"user.delete.confirm":
"Do you really want to delete <br><strong>{email}</strong>?",
"user.delete.confirm": "Do you really want to delete <br><strong>{email}</strong>?",
"users": "Users",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "No se pudo subir la foto de perfil.",
"error.avatar.delete.fail": "No se pudo eliminar la foto de perfil.",
"error.avatar.dimensions.invalid":
"Por favor, mantén el ancho y la altura de la imagen de perfil por debajo de 3000 pixeles.",
"error.avatar.mime.forbidden":
"La foto de perfil debe de ser un archivo JPG o PNG.",
"error.avatar.dimensions.invalid": "Por favor, mantén el ancho y la altura de la imagen de perfil por debajo de 3000 pixeles.",
"error.avatar.mime.forbidden": "La foto de perfil debe de ser un archivo JPG o PNG.",
"error.blueprint.notFound": "El blueprint \"{name}\" no se pudo cargar.",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Convertidor inválido \"{converter}\"",
"error.file.changeName.empty": "El nombre no debe estar vacío",
"error.file.changeName.permission":
"No tienes permitido cambiar el nombre de \"{filename}\"",
"error.file.changeName.permission": "No tienes permitido cambiar el nombre de \"{filename}\"",
"error.file.duplicate": "Ya existe un archivo con el nombre \"{filename}\".",
"error.file.extension.forbidden":
"La extensión \"{extension}\" no está permitida.",
"error.file.extension.missing":
"Falta la extensión para \"{filename}\".",
"error.file.extension.forbidden": "La extensión \"{extension}\" no está permitida.",
"error.file.extension.missing": "Falta la extensión para \"{filename}\".",
"error.file.maxheight": "La altura de la imagen no debe exceder {height} pixeles",
"error.file.maxsize": "El archivo es muy grande",
"error.file.maxwidth": "El ancho de la imagen no debe exceder {width} pixeles",
"error.file.mime.differs":
"El archivo cargado debe ser del mismo tipo mime \"{mime}\".",
"error.file.mime.differs": "El archivo cargado debe ser del mismo tipo mime \"{mime}\".",
"error.file.mime.forbidden": "El tipo de medios \"{mime}\" no está permitido.",
"error.file.mime.invalid": "Tipo invalido de mime: {mime}",
"error.file.mime.missing":
"No se puede detectar el tipo de medio para \"{filename}\".",
"error.file.mime.missing": "No se puede detectar el tipo de medio para \"{filename}\".",
"error.file.minheight": "La altura de la imagen debe ser de al menos {height} pixeles",
"error.file.minsize": "El archivo es muy pequeño",
"error.file.minwidth": "El ancho de la imagen debe ser de al menos {width} pixeles",
@@ -90,111 +83,77 @@
"error.license.email": "Por favor ingresa un correo electrónico valido",
"error.license.verification": "La licencia no pude ser verificada",
"error.page.changeSlug.permission":
"No está permitido cambiar el apéndice de URL para \"{slug}\".",
"error.page.changeStatus.incomplete":
"La página tiene errores y no puede ser publicada.",
"error.page.changeStatus.permission":
"El estado de esta página no se puede cambiar.",
"error.page.changeStatus.toDraft.invalid":
"La página \"{slug}\" no se puede convertir en un borrador",
"error.page.changeTemplate.invalid":
"La plantilla para la página \"{slug}\" no se puede cambiar",
"error.page.changeTemplate.permission":
"No está permitido cambiar la plantilla para \"{slug}\"",
"error.page.changeSlug.permission": "No está permitido cambiar el apéndice de URL para \"{slug}\".",
"error.page.changeStatus.incomplete": "La página tiene errores y no puede ser publicada.",
"error.page.changeStatus.permission": "El estado de esta página no se puede cambiar.",
"error.page.changeStatus.toDraft.invalid": "La página \"{slug}\" no se puede convertir en un borrador",
"error.page.changeTemplate.invalid": "La plantilla para la página \"{slug}\" no se puede cambiar",
"error.page.changeTemplate.permission": "No está permitido cambiar la plantilla para \"{slug}\"",
"error.page.changeTitle.empty": "El título no debe estar vacío.",
"error.page.changeTitle.permission":
"No tienes permiso para cambiar el título de \"{slug}\"",
"error.page.changeTitle.permission": "No tienes permiso para cambiar el título de \"{slug}\"",
"error.page.create.permission": "No tienes permiso para crear \"{slug}\"",
"error.page.delete": "La página \"{slug}\" no se puede eliminar",
"error.page.delete.confirm": "Por favor, introduce el título de la página para confirmar",
"error.page.delete.hasChildren":
"La página tiene subpáginas y no se puede eliminar",
"error.page.delete.hasChildren": "La página tiene subpáginas y no se puede eliminar",
"error.page.delete.permission": "No tienes permiso para borrar \"{slug}\"",
"error.page.draft.duplicate":
"Ya existe un borrador de página con el apéndice de URL \"{slug}\"",
"error.page.duplicate":
"Ya existe una página con el apéndice de URL \"{slug}\"",
"error.page.draft.duplicate": "Ya existe un borrador de página con el apéndice de URL \"{slug}\"",
"error.page.duplicate": "Ya existe una página con el apéndice de URL \"{slug}\"",
"error.page.duplicate.permission": "No tienes permitido duplicar \"{slug}\"",
"error.page.notFound": "La página \"{slug}\" no se encuentra",
"error.page.num.invalid":
"Por favor, introduce un número de posición válido. Los números no deben ser negativos.",
"error.page.num.invalid": "Por favor, introduce un número de posición válido. Los números no deben ser negativos.",
"error.page.slug.invalid": "Por favor ingresa un prefijo de URL válido",
"error.page.sort.permission": "La página \"{slug}\" no se puede ordenar",
"error.page.status.invalid": "Por favor, establece una estado de página válido",
"error.page.undefined": "La p\u00e1gina no fue encontrada",
"error.page.update.permission": "No tienes permiso para actualizar \"{slug}\"",
"error.section.files.max.plural":
"No debes agregar más de {max} archivos a la sección \"{section}\"",
"error.section.files.max.singular":
"No debes agregar más de un archivo a la sección \"{section}\"",
"error.section.files.min.plural":
"La sección \"{section}\" requiere al menos {min} archivos",
"error.section.files.min.singular":
"La sección \"{section}\" requiere al menos un archivo",
"error.section.files.max.plural": "No debes agregar más de {max} archivos a la sección \"{section}\"",
"error.section.files.max.singular": "No debes agregar más de un archivo a la sección \"{section}\"",
"error.section.files.min.plural": "La sección \"{section}\" requiere al menos {min} archivos",
"error.section.files.min.singular": "La sección \"{section}\" requiere al menos un archivo",
"error.section.pages.max.plural":
"No debes agregar más de {max} páginas a la sección \"{section}\"",
"error.section.pages.max.singular":
"No debes agregar más de una página a la sección \"{section}\"",
"error.section.pages.min.plural":
"La sección \"{section}\" requiere al menos {min} páginas",
"error.section.pages.min.singular":
"La sección \"{section}\" requiere al menos una página",
"error.section.pages.max.plural": "No debes agregar más de {max} páginas a la sección \"{section}\"",
"error.section.pages.max.singular": "No debes agregar más de una página a la sección \"{section}\"",
"error.section.pages.min.plural": "La sección \"{section}\" requiere al menos {min} páginas",
"error.section.pages.min.singular": "La sección \"{section}\" requiere al menos una página",
"error.section.notLoaded": "La sección \"{name}\" no se pudo cargar",
"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":
"No tienes permiso para cambiar el título del sitio",
"error.site.changeTitle.permission": "No tienes permiso para cambiar el título del sitio",
"error.site.update.permission": "No tienes permiso de actualizar el sitio",
"error.template.default.notFound": "La plantilla predeterminada no existe",
"error.user.changeEmail.permission":
"No tienes permiso para cambiar el email del usuario \"{name}\"",
"error.user.changeLanguage.permission":
"No tienes permiso para cambiar el idioma del usuario \"{name}\"",
"error.user.changeName.permission":
"No tienes permiso para cambiar el nombre del usuario \"{name}\"",
"error.user.changePassword.permission":
"No tienes permiso para cambiar la contraseña del usuario \"{name}\"",
"error.user.changeRole.lastAdmin":
"El rol del último administrador no puede ser cambiado",
"error.user.changeRole.permission":
"No tienes permiso para cambiar el rol del usuario \"{name}\"",
"error.user.changeRole.toAdmin":
"No tienes permitido promover a alguien al rol de admin",
"error.user.changeEmail.permission": "No tienes permiso para cambiar el email del usuario \"{name}\"",
"error.user.changeLanguage.permission": "No tienes permiso para cambiar el idioma del usuario \"{name}\"",
"error.user.changeName.permission": "No tienes permiso para cambiar el nombre del usuario \"{name}\"",
"error.user.changePassword.permission": "No tienes permiso para cambiar la contraseña del usuario \"{name}\"",
"error.user.changeRole.lastAdmin": "El rol del último administrador no puede ser cambiado",
"error.user.changeRole.permission": "No tienes permiso para cambiar el rol del usuario \"{name}\"",
"error.user.changeRole.toAdmin": "No tienes permitido promover a alguien al rol de admin",
"error.user.create.permission": "No tienes permiso de crear este usuario",
"error.user.delete": "El ususario no pudo ser eliminado",
"error.user.delete.lastAdmin": "Usted no puede borrar el \u00faltimo administrador",
"error.user.delete.lastUser": "El último usuario no puede ser borrado",
"error.user.delete.permission":
"Usted no tiene permitido borrar este usuario",
"error.user.duplicate":
"Ya existe un usuario con el email \"{email}\"",
"error.user.delete.permission": "Usted no tiene permitido borrar este usuario",
"error.user.duplicate": "Ya existe un usuario con el email \"{email}\"",
"error.user.email.invalid": "Por favor ingresa un correo electrónico valido",
"error.user.language.invalid": "Por favor ingresa un idioma valido",
"error.user.notFound": "El usuario no pudo ser encontrado",
"error.user.password.invalid":
"Por favor ingresa una contraseña valida. Las contraseñas deben tener al menos 8 caracteres de largo.",
"error.user.password.invalid": "Por favor ingresa una contraseña valida. Las contraseñas deben tener al menos 8 caracteres de largo.",
"error.user.password.notSame": "Por favor confirma la contrase\u00f1a",
"error.user.password.undefined": "El usuario no tiene contraseña",
"error.user.role.invalid": "Por favor ingresa un rol valido",
"error.user.update.permission":
"No tienes permiso para actualizar al usuario \"{name}\"",
"error.user.update.permission": "No tienes permiso para actualizar al usuario \"{name}\"",
"error.validation.accepted": "Por favor, confirma",
"error.validation.alpha": "Por favor ingrese solo caracteres entre a-z",
"error.validation.alphanum":
"Por favor ingrese solo caracteres entre a-z o números entre 0-9",
"error.validation.between":
"Por favor ingrese valores entre \"{min}\" y \"{max}\"",
"error.validation.alphanum": "Por favor ingrese solo caracteres entre a-z o números entre 0-9",
"error.validation.between": "Por favor ingrese valores entre \"{min}\" y \"{max}\"",
"error.validation.boolean": "Por favor confirme o niegue",
"error.validation.contains":
"Por favor ingrese valores que contengan \"{needle}\"",
"error.validation.contains": "Por favor ingrese valores que contengan \"{needle}\"",
"error.validation.date": "Por favor ingresa una fecha válida",
"error.validation.date.after": "Por favor introduce una fecha posterior a {date}",
"error.validation.date.before": "Por favor introduce una fecha anterior a {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Por favor ingresa un valor menor a {max}",
"error.validation.match": "El valor no coincide con el patrón esperado",
"error.validation.max": "Por favor ingresa un valor menor o igual a {max}",
"error.validation.maxlength":
"Por favor ingresa un valor mas corto. (max. {max} caracteres)",
"error.validation.maxlength": "Por favor ingresa un valor mas corto. (max. {max} caracteres)",
"error.validation.maxwords": "Por favor ingresa no mas de {max} palabra(s)",
"error.validation.min": "Por favor ingresa un valor mayor o igual a {min}",
"error.validation.minlength":
"Por favor ingresa un valor mas largo. (min. {min} caracteres)",
"error.validation.minlength": "Por favor ingresa un valor mas largo. (min. {min} caracteres)",
"error.validation.minwords": "Por favor ingresa al menos {min} palabra(s)",
"error.validation.more": "Por favor ingresa un valor mayor a {min}",
"error.validation.notcontains":
"Por favor ingresa un valor que no contenga \"{needle}\"",
"error.validation.notin":
"Por favor no ingreses ninguno de las siguientes: ({notIn})",
"error.validation.notcontains": "Por favor ingresa un valor que no contenga \"{needle}\"",
"error.validation.notin": "Por favor no ingreses ninguno de las siguientes: ({notIn})",
"error.validation.option": "Por favor selecciona una de las opciones válidas",
"error.validation.num": "Por favor ingresa un numero válido",
"error.validation.required": "Por favor ingresa algo",
@@ -238,8 +193,7 @@
"field.structure.empty": "A\u00fan no existen entradas.",
"field.users.empty": "Aún no ha seleccionado ningún usuario",
"file.delete.confirm":
"\u00bfEst\u00e1s seguro que deseas eliminar este archivo?",
"file.delete.confirm": "\u00bfEst\u00e1s seguro que deseas eliminar este archivo?",
"files": "Archivos",
"files.empty": "Aún no existen archivos",
@@ -251,29 +205,22 @@
"installation": "Instalación",
"installation.completed": "El panel ha sido instalado.",
"installation.disabled": "El instalador del panel está deshabilitado en servidores públicos por defecto. Ejecute el instalador en una máquina local o habilítelo con la opción panel.install.",
"installation.issues.accounts":
"La carpeta <code>/site/accounts</code> no existe o no posee permisos de escritura.",
"installation.issues.content":
"La carpeta <code>/content</code> no existe o no posee permisos de escritura.",
"installation.issues.accounts": "La carpeta <code>/site/accounts</code> no existe o no posee permisos de escritura.",
"installation.issues.content": "La carpeta <code>/content</code> no existe o no posee permisos de escritura.",
"installation.issues.curl": "Se requiere la extensión <code>CURL</code>.",
"installation.issues.headline": "El panel no puede ser instalado.",
"installation.issues.mbstring":
"Se requiere la extensión <code>MB String</code>.",
"installation.issues.media":
"La carpeta <code>/media</code> no existe o no posee permisos de escritura.",
"installation.issues.mbstring": "Se requiere la extensión <code>MB String</code>.",
"installation.issues.media": "La carpeta <code>/media</code> no existe o no posee permisos de escritura.",
"installation.issues.php": "Asegurese de estar usando <code>PHP 7+</code>",
"installation.issues.server":
"Kirby requiere <code>Apache</code>, <code>Nginx</code>, <code>Caddy</code>",
"installation.issues.server": "Kirby requiere <code>Apache</code>, <code>Nginx</code>, <code>Caddy</code>",
"installation.issues.sessions": "La carpeta <code>/site/sessions</code> no existe o no posee permisos de escritura.",
"language": "Idioma",
"language.code": "Código",
"language.convert": "Hacer por defecto",
"language.convert.confirm":
"<p>Realmente deseas convertir <strong>{name}</strong> al idioma por defecto? Esta acción no se puede deshacer.</p><p>Si <strong>{name}</strong> tiene contenido sin traducir, no habrá vuelta atras y tu sitio puede quedar con partes sin contenido.</p>",
"language.convert.confirm": "<p>Realmente deseas convertir <strong>{name}</strong> al idioma por defecto? Esta acción no se puede deshacer.</p><p>Si <strong>{name}</strong> tiene contenido sin traducir, no habrá vuelta atras y tu sitio puede quedar con partes sin contenido.</p>",
"language.create": "Añadir nuevo idioma",
"language.delete.confirm":
"<p> ",
"language.delete.confirm": "<p> ",
"language.deleted": "El idioma ha sido borrado",
"language.direction": "Dirección de lectura",
"language.direction.ltr": "De Izquierda a derecha",
@@ -292,8 +239,7 @@
"license": "Licencia",
"license.buy": "Comprar una licencia",
"license.register": "Registrar",
"license.register.help":
"Recibió su código de licencia después de la compra por correo electrónico. Por favor copie y pegue para registrarse.",
"license.register.help": "Recibió su código de licencia después de la compra por correo electrónico. Por favor copie y pegue para registrarse.",
"license.register.label": "Por favor, ingresa tu código de licencia",
"license.register.success": "Gracias por apoyar a Kirby",
"license.unregistered": "Este es un demo no registrado de Kirby",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Por favor selecciona una posición",
"page.changeStatus.select": "Selecciona un nuevo estado",
"page.changeTemplate": "Cambiar plantilla",
"page.delete.confirm":
"¿Estás seguro que deseas eliminar <strong>{title}</strong>?",
"page.delete.confirm.subpages":
"<strong>Esta página tiene subpáginas</strong>. <br>Todas las súbpaginas serán eliminadas también.",
"page.delete.confirm": "¿Estás seguro que deseas eliminar <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Esta página tiene subpáginas</strong>. <br>Todas las súbpaginas serán eliminadas también.",
"page.delete.confirm.title": "Introduce el título de la página para confirmar",
"page.draft.create": "Crear borrador",
"page.duplicate.appendix": "Copiar",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Copiar páginas",
"page.status": "Estado",
"page.status.draft": "Borrador",
"page.status.draft.description":
"La página está en modo de borrador y sólo es visible para los editores registrados",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.listed": "Pública",
"page.status.listed.description": "La página es pública para cualquiera",
"page.status.unlisted": "No publicada",
@@ -388,6 +331,7 @@
"replace": "Reemplazar",
"retry": "Reintentar",
"revert": "Revertir",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "Rol",
"role.admin.description": "El administrador tiene todos los derechos",
@@ -451,8 +395,7 @@
"url.placeholder": "https://ejemplo.com",
"user": "Usuario",
"user.blueprint":
"Puedes definir secciones adicionales y campos de formulario para este rol de usuario en <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Puedes definir secciones adicionales y campos de formulario para este rol de usuario en <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Cambiar correo electrónico",
"user.changeLanguage": "Cambiar idioma",
"user.changeName": "Renombrar este usuario",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Selecciona un nuevo rol",
"user.create": "Agregar un nuevo usuario",
"user.delete": "Eliminar este usuario",
"user.delete.confirm":
"¿Estás seguro que deseas eliminar <br><strong>{email}</strong>?",
"user.delete.confirm": "¿Estás seguro que deseas eliminar <br><strong>{email}</strong>?",
"users": "Usuarios",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "No se pudo subir la foto de perfil.",
"error.avatar.delete.fail": "No se pudo borrar la foto de perfil",
"error.avatar.dimensions.invalid":
"Por favor, mantenga el ancho y la altura de la imagen de perfil debajo de 3000 píxeles",
"error.avatar.mime.forbidden":
"La imagen del perfil debe ser JPEG o PNG.",
"error.avatar.dimensions.invalid": "Por favor, mantenga el ancho y la altura de la imagen de perfil debajo de 3000 píxeles",
"error.avatar.mime.forbidden": "La imagen del perfil debe ser JPEG o PNG.",
"error.blueprint.notFound": "El blueprint \"{name}\" no pudo ser cargado",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Convertidor \"{converter}\" inválido",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"No tienes permitido cambiar el nombre de \"{filename}\"",
"error.file.changeName.permission": "No tienes permitido cambiar el nombre de \"{filename}\"",
"error.file.duplicate": "Ya existe un archivo con el nombre \"{filename}\"",
"error.file.extension.forbidden":
"La extensión \"{extension}\" no está permitida",
"error.file.extension.missing":
"Falta la extensión para \"{filename}\"",
"error.file.extension.forbidden": "La extensión \"{extension}\" no está permitida",
"error.file.extension.missing": "Falta la extensión para \"{filename}\"",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
"error.file.maxwidth": "The width of the image must not exceed {width} pixels",
"error.file.mime.differs":
"El archivo cargado debe ser del mismo tipo mime \"{mime}\"",
"error.file.mime.differs": "El archivo cargado debe ser del mismo tipo mime \"{mime}\"",
"error.file.mime.forbidden": "Los medios tipo \"{mime}\" no están permitidos",
"error.file.mime.invalid": "Invalid mime type: {mime}",
"error.file.mime.missing":
"El tipo de medio para \"{filename}\" no pudo ser detectado",
"error.file.mime.missing": "El tipo de medio para \"{filename}\" no pudo ser detectado",
"error.file.minheight": "The height of the image must be at least {height} pixels",
"error.file.minsize": "The file is too small",
"error.file.minwidth": "The width of the image must be at least {width} pixels",
@@ -90,111 +83,77 @@
"error.license.email": "Por favor, introduce un correo electrónico válido",
"error.license.verification": "The license could not be verified",
"error.page.changeSlug.permission":
"No está permitido cambiar el apéndice de URL para \"{slug}\"",
"error.page.changeStatus.incomplete":
"La página tiene errores y no puede ser publicada.",
"error.page.changeStatus.permission":
"El estado de esta página no se puede cambiar",
"error.page.changeStatus.toDraft.invalid":
"La página \"{slug}\" no se puede convertir a borrador",
"error.page.changeTemplate.invalid":
"La plantilla para la página \"{slug}\" no se puede cambiar",
"error.page.changeTemplate.permission":
"No tienes permitido cambiar la plantilla para \"{slug}\"",
"error.page.changeSlug.permission": "No está permitido cambiar el apéndice de URL para \"{slug}\"",
"error.page.changeStatus.incomplete": "La página tiene errores y no puede ser publicada.",
"error.page.changeStatus.permission": "El estado de esta página no se puede cambiar",
"error.page.changeStatus.toDraft.invalid": "La página \"{slug}\" no se puede convertir a borrador",
"error.page.changeTemplate.invalid": "La plantilla para la página \"{slug}\" no se puede cambiar",
"error.page.changeTemplate.permission": "No tienes permitido cambiar la plantilla para \"{slug}\"",
"error.page.changeTitle.empty": "El título no debe estar vacío.",
"error.page.changeTitle.permission":
"No tienes permitido cambiar el título por \"{slug}\"",
"error.page.changeTitle.permission": "No tienes permitido cambiar el título por \"{slug}\"",
"error.page.create.permission": "No tienes permitido crear \"{slug}\"",
"error.page.delete": "La página \"{slug}\" no puede ser eliminada",
"error.page.delete.confirm": "Por favor, introduzca el título de la página para confirmar",
"error.page.delete.hasChildren":
"La página tiene subpáginas y no se puede eliminar",
"error.page.delete.hasChildren": "La página tiene subpáginas y no se puede eliminar",
"error.page.delete.permission": "No tienes permiso de eliminar \"{slug}\"",
"error.page.draft.duplicate":
"Un borrador de página con el apéndice de URL \"{slug}\" ya existe",
"error.page.duplicate":
"Una página con el apéndice de URL. \"{slug}\" ya existe",
"error.page.draft.duplicate": "Un borrador de página con el apéndice de URL \"{slug}\" ya existe",
"error.page.duplicate": "Una página con el apéndice de URL. \"{slug}\" ya existe",
"error.page.duplicate.permission": "You are not allowed to duplicate \"{slug}\"",
"error.page.notFound": "La página \"{slug}\" no puede ser encontrada",
"error.page.num.invalid":
"Por favor, introduzca un número válido. Estos no deben ser negativos.",
"error.page.num.invalid": "Por favor, introduzca un número válido. Estos no deben ser negativos.",
"error.page.slug.invalid": "Por favor ingrese un prefijo de URL válido",
"error.page.sort.permission": "La página \"{slug}\" no se puede ordenar",
"error.page.status.invalid": "Por favor, establezca un estado de página válido",
"error.page.undefined": "La página no se puede encontrar",
"error.page.update.permission": "No tienes permitido actualizar \"{slug}\"",
"error.section.files.max.plural":
"No debes agregar más de {max} archivos a la sección \"{section}\"",
"error.section.files.max.singular":
"No debes agregar más de 1 archivo a la sección \"{section}\"",
"error.section.files.min.plural":
"La sección \"{section}\" requiere al menos {min} archivos",
"error.section.files.min.singular":
"La sección \"{section}\" requiere al menos un archivo",
"error.section.files.max.plural": "No debes agregar más de {max} archivos a la sección \"{section}\"",
"error.section.files.max.singular": "No debes agregar más de 1 archivo a la sección \"{section}\"",
"error.section.files.min.plural": "La sección \"{section}\" requiere al menos {min} archivos",
"error.section.files.min.singular": "La sección \"{section}\" requiere al menos un archivo",
"error.section.pages.max.plural":
"No debe agregar más de {max} páginas a la sección \"{section}\"",
"error.section.pages.max.singular":
"No debe agregar más de una página a la sección \"{section}\"",
"error.section.pages.min.plural":
"La sección \"{section}\" requiere al menos {min} páginas",
"error.section.pages.min.singular":
"La sección \"{section}\" requiere al menos una página",
"error.section.pages.max.plural": "No debe agregar más de {max} páginas a la sección \"{section}\"",
"error.section.pages.max.singular": "No debe agregar más de una página a la sección \"{section}\"",
"error.section.pages.min.plural": "La sección \"{section}\" requiere al menos {min} páginas",
"error.section.pages.min.singular": "La sección \"{section}\" requiere al menos una página",
"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.site.changeTitle.empty": "El título no debe estar vacío.",
"error.site.changeTitle.permission":
"No está permitido cambiar el título del sitio",
"error.site.changeTitle.permission": "No está permitido cambiar el título del sitio",
"error.site.update.permission": "No tienes permitido actualizar el sitio",
"error.template.default.notFound": "La plantilla por defecto no existe",
"error.user.changeEmail.permission":
"No tienes permitido cambiar el correo electrónico para el usuario \"{name}\"",
"error.user.changeLanguage.permission":
"No tienes permitido cambiar el idioma para el usuario \"{name}\"",
"error.user.changeName.permission":
"No tienes permitido cambiar el nombre del usuario \"{name}\"",
"error.user.changePassword.permission":
"No tienes permitido cambiar la contraseña del usuario \"{name}\"",
"error.user.changeRole.lastAdmin":
"El rol para el último administrador no puede ser cambiado",
"error.user.changeRole.permission":
"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.changeEmail.permission": "No tienes permitido cambiar el correo electrónico para el usuario \"{name}\"",
"error.user.changeLanguage.permission": "No tienes permitido cambiar el idioma para el usuario \"{name}\"",
"error.user.changeName.permission": "No tienes permitido cambiar el nombre del usuario \"{name}\"",
"error.user.changePassword.permission": "No tienes permitido cambiar la contraseña del usuario \"{name}\"",
"error.user.changeRole.lastAdmin": "El rol para el último administrador no puede ser cambiado",
"error.user.changeRole.permission": "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.delete": "El usuario \"{name}\" no puede ser eliminado",
"error.user.delete.lastAdmin": "El último administrador no puede ser eliminado",
"error.user.delete.lastUser": "El último usuario no puede ser eliminado",
"error.user.delete.permission":
"No tienes permitido eliminar el usuario \"{name}\"",
"error.user.duplicate":
"Un usuario con la dirección de correo electrónico \"{email}\" ya existe",
"error.user.delete.permission": "No tienes permitido eliminar el usuario \"{name}\"",
"error.user.duplicate": "Un usuario con la dirección de correo electrónico \"{email}\" ya existe",
"error.user.email.invalid": "Por favor, introduce una dirección de correo electrónico válida",
"error.user.language.invalid": "Por favor ingrese un idioma válido",
"error.user.notFound": "El usuario \"{name}\" no pudo ser encontrado",
"error.user.password.invalid":
"Por favor introduce una contraseña válida. Las contraseñas deben tener al menos 8 caracteres de largo.",
"error.user.password.invalid": "Por favor introduce una contraseña válida. Las contraseñas deben tener al menos 8 caracteres de largo.",
"error.user.password.notSame": "Las contraseñas no coinciden",
"error.user.password.undefined": "El usuario no tiene contraseña",
"error.user.role.invalid": "Por favor ingrese un rol válido",
"error.user.update.permission":
"No tienes permitido actualizar al usuario \"{name}\"",
"error.user.update.permission": "No tienes permitido actualizar al usuario \"{name}\"",
"error.validation.accepted": "Por favor, confirma",
"error.validation.alpha": "Por favor solo ingresa caracteres entre a-z",
"error.validation.alphanum":
"Por favor solo ingrese caracteres entre a-z o numerales 0-9",
"error.validation.between":
"Por favor, introduzca un valor entre \"{min}\" y \"{max}\"",
"error.validation.alphanum": "Por favor solo ingrese caracteres entre a-z o numerales 0-9",
"error.validation.between": "Por favor, introduzca un valor entre \"{min}\" y \"{max}\"",
"error.validation.boolean": "Por favor confirme o rechace",
"error.validation.contains":
"Por favor ingrese un valor que contenga \"{needle}\"",
"error.validation.contains": "Por favor ingrese un valor que contenga \"{needle}\"",
"error.validation.date": "Por favor introduzca una fecha valida",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Por favor, introduzca un valor inferior a {max}",
"error.validation.match": "El valor no coincide con el patrón esperado",
"error.validation.max": "Por favor, introduzca un valor igual o inferior a {max}",
"error.validation.maxlength":
"Por favor, introduzca un valor más corto. (max. {max} caracteres)",
"error.validation.maxlength": "Por favor, introduzca un valor más corto. (max. {max} caracteres)",
"error.validation.maxwords": "Por favor ingrese no más de {max} palabra(s)",
"error.validation.min": "Por favor, introduzca un valor igual o mayor a {min}",
"error.validation.minlength":
"Por favor, introduzca un valor más largo. (min. {min} caracteres)",
"error.validation.minlength": "Por favor, introduzca un valor más largo. (min. {min} caracteres)",
"error.validation.minwords": "Por favor ingrese al menos {min} palabra(s)",
"error.validation.more": "Por favor, introduzca un valor mayor a {min}",
"error.validation.notcontains":
"Por favor ingrese un valor que no contenga \"{needle}\"",
"error.validation.notin":
"Por favor, no ingrese ninguno de los siguientes: ({notIn})",
"error.validation.notcontains": "Por favor ingrese un valor que no contenga \"{needle}\"",
"error.validation.notin": "Por favor, no ingrese ninguno de los siguientes: ({notIn})",
"error.validation.option": "Por favor seleccione una opción válida",
"error.validation.num": "Por favor ingrese un número valido",
"error.validation.required": "Por favor ingrese algo",
@@ -238,8 +193,7 @@
"field.structure.empty": "Aún no hay entradas",
"field.users.empty": "Aún no hay usuarios seleccionados",
"file.delete.confirm":
"¿Realmente quieres eliminar <br><strong>{filename}</strong>?",
"file.delete.confirm": "¿Realmente quieres eliminar <br><strong>{filename}</strong>?",
"files": "Archivos",
"files.empty": "Aún no hay archivos",
@@ -251,29 +205,22 @@
"installation": "Instalación",
"installation.completed": "El panel ha sido instalado",
"installation.disabled": "El instalador del panel está deshabilitado en servidores públicos por defecto. Ejecute el instalador en una máquina local o habilítelo con la opción <code>panel.install</code>.",
"installation.issues.accounts":
"La carpeta <code>/site/accounts</code> no existe o no se puede escribir",
"installation.issues.content":
"La carpeta <code>/content</code> no existe o no se puede escribir",
"installation.issues.accounts": "La carpeta <code>/site/accounts</code> no existe o no se puede escribir",
"installation.issues.content": "La carpeta <code>/content</code> no existe o no se puede escribir",
"installation.issues.curl": "La extensión <code>CURL</code> es requerida",
"installation.issues.headline": "No se pudo instalar el panel",
"installation.issues.mbstring":
"La extension <code>MB String</code> es requerida",
"installation.issues.media":
"La carpeta <code>/media</code> no existe o no se puede escribir",
"installation.issues.mbstring": "La extension <code>MB String</code> es requerida",
"installation.issues.media": "La carpeta <code>/media</code> no existe o no se puede escribir",
"installation.issues.php": "Asegúrate de usar <code>PHP 7+</code>",
"installation.issues.server":
"Kirby requiere <code>Apache</code>, <code>Nginx</code> o <code>Caddy</code>",
"installation.issues.server": "Kirby requiere <code>Apache</code>, <code>Nginx</code> o <code>Caddy</code>",
"installation.issues.sessions": "La carpeta <code>/site/sessions</code> no existe o no se puede escribir",
"language": "Idioma",
"language.code": "Código",
"language.convert": "Hacer por defecto",
"language.convert.confirm":
"<p¿Realmente quieres convertir <strong>{name}</strong> al idioma por defecto? Esto no se puede deshacer.</p><p>Si <strong>{name}</strong> tiene contenido sin traducir, ya no habrá un respaldo válido y algunas partes de su sitio podrían estar vacías.</p>",
"language.convert.confirm": "<p¿Realmente quieres convertir <strong>{name}</strong> al idioma por defecto? Esto no se puede deshacer.</p><p>Si <strong>{name}</strong> tiene contenido sin traducir, ya no habrá un respaldo válido y algunas partes de su sitio podrían estar vacías.</p>",
"language.create": "Añadir un nuevo idioma",
"language.delete.confirm":
"¿De verdad quieres eliminar el idioma <strong>{name}</strong> incluyendo todas las traducciones? ¡Esto no se puede deshacer!",
"language.delete.confirm": "¿De verdad quieres eliminar el idioma <strong>{name}</strong> incluyendo todas las traducciones? ¡Esto no se puede deshacer!",
"language.deleted": "El idioma ha sido eliminado",
"language.direction": "Leyendo dirección",
"language.direction.ltr": "De izquierda a derecha",
@@ -292,8 +239,7 @@
"license": "Licencia",
"license.buy": "Comprar una licencia",
"license.register": "Registro",
"license.register.help":
"Recibió su código de licencia después de la compra por correo electrónico. Por favor copie y pegue para registrarse.",
"license.register.help": "Recibió su código de licencia después de la compra por correo electrónico. Por favor copie y pegue para registrarse.",
"license.register.label": "Por favor ingrese su código de licencia",
"license.register.success": "Gracias por apoyar a Kirby",
"license.unregistered": "Esta es una demo no registrada de Kirby",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Por favor seleccione una posición",
"page.changeStatus.select": "Seleccione un nuevo estado",
"page.changeTemplate": "Cambiar plantilla",
"page.delete.confirm":
"¿Realmente quieres eliminar <strong>{title}</strong>?",
"page.delete.confirm.subpages":
"<strong>Esta página tiene subpáginas</strong>. <br>Todas las subpáginas también serán eliminadas.",
"page.delete.confirm": "¿Realmente quieres eliminar <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Esta página tiene subpáginas</strong>. <br>Todas las subpáginas también serán eliminadas.",
"page.delete.confirm.title": "Introduzca el título de la página para confirmar",
"page.draft.create": "Crear borrador",
"page.duplicate.appendix": "Copiar",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Copy pages",
"page.status": "Estado",
"page.status.draft": "Borrador",
"page.status.draft.description":
"La página está en modo borrador y solo está visible para los editores registrados",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.listed": "Publica",
"page.status.listed.description": "La página es pública para cualquiera",
"page.status.unlisted": "Sin publicar",
@@ -388,6 +331,7 @@
"replace": "Remplazar",
"retry": "Inténtalo de nuevo",
"revert": "Revertir",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "Rol",
"role.admin.description": "The admin has all rights",
@@ -451,8 +395,7 @@
"url.placeholder": "https://ejemplo.com",
"user": "Usuario",
"user.blueprint":
"Puede definir secciones adicionales y campos de formulario para este rol de usuario en <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Puede definir secciones adicionales y campos de formulario para este rol de usuario en <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Cambiar correo electrónico",
"user.changeLanguage": "Cambiar idioma",
"user.changeName": "Renombrar a este usuario",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Seleccione un nuevo rol",
"user.create": "Añadir un nuevo usuario",
"user.delete": "Eliminar este usuario",
"user.delete.confirm":
"¿Realmente quieres eliminar <br><strong>{email}</strong>?",
"user.delete.confirm": "¿Realmente quieres eliminar <br><strong>{email}</strong>?",
"users": "Usuarios",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "بارگزاری تصویر پروفایل موفق نبود",
"error.avatar.delete.fail": "\u062a\u0635\u0648\u06cc\u0631 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644 \u0631\u0627 \u0646\u0645\u06cc\u062a\u0648\u0627\u0646 \u062d\u0630\u0641 \u06a9\u0631\u062f",
"error.avatar.dimensions.invalid":
"لطفا طول و عرض تصویر پروفایل را زیر 3000 پیکسل انتخاب کنید",
"error.avatar.mime.forbidden":
"تصویر پروفایل باید از نوع JPEG یا PNG باشد",
"error.avatar.dimensions.invalid": "لطفا طول و عرض تصویر پروفایل را زیر 3000 پیکسل انتخاب کنید",
"error.avatar.mime.forbidden": "تصویر پروفایل باید از نوع JPEG یا PNG باشد",
"error.blueprint.notFound": "بلوپرینت با نام «{name}» قابل بارگذاری نیست",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "مبدل «{converter}» نامعتبر است",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"شما اجازه تنغییر نام فایل «{filename}» را ندارید",
"error.file.changeName.permission": "شما اجازه تنغییر نام فایل «{filename}» را ندارید",
"error.file.duplicate": "فایلی هم نام با «{filename}» هم اکنون موجود است",
"error.file.extension.forbidden":
"پسوند فایل «{extension}» غیرمجاز است",
"error.file.extension.missing":
"\u0634\u0645\u0627 \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u067e\u0633\u0648\u0646\u062f \u0631\u0627 \u0622\u067e\u0644\u0648\u062f \u06a9\u0646\u06cc\u062f",
"error.file.extension.forbidden": "پسوند فایل «{extension}» غیرمجاز است",
"error.file.extension.missing": "\u0634\u0645\u0627 \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u067e\u0633\u0648\u0646\u062f \u0631\u0627 \u0622\u067e\u0644\u0648\u062f \u06a9\u0646\u06cc\u062f",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
"error.file.maxwidth": "The width of the image must not exceed {width} pixels",
"error.file.mime.differs":
"فایل آپلود شده باید از همان نوع باشد «{mime}»",
"error.file.mime.differs": "فایل آپلود شده باید از همان نوع باشد «{mime}»",
"error.file.mime.forbidden": "فرمت فایل «{mime}» غیرمجاز است",
"error.file.mime.invalid": "Invalid mime type: {mime}",
"error.file.mime.missing":
"فرمت فایل «{filename}» قابل شناسایی نیست",
"error.file.mime.missing": "فرمت فایل «{filename}» قابل شناسایی نیست",
"error.file.minheight": "The height of the image must be at least {height} pixels",
"error.file.minsize": "The file is too small",
"error.file.minwidth": "The width of the image must be at least {width} pixels",
@@ -90,111 +83,77 @@
"error.license.email": "لطفا ایمیل صحیحی وارد کنید",
"error.license.verification": "The license could not be verified",
"error.page.changeSlug.permission":
"شما امکان تغییر پسوند Url صفحه «{slug}» را ندارید",
"error.page.changeStatus.incomplete":
"صفحه حاوی خطا است و قابل انتشار نیست",
"error.page.changeStatus.permission":
"وضعیت صفحه جاری قابل تغییر نیست",
"error.page.changeStatus.toDraft.invalid":
"صفحه «{slug}» قابل تبدیل به پیش نویس نیست",
"error.page.changeTemplate.invalid":
"قالب صفحه «{slug}» قابل تغییر نیست",
"error.page.changeTemplate.permission":
"شما اجازه تغییر قالب «{slug}» را ندارید",
"error.page.changeSlug.permission": "شما امکان تغییر پسوند Url صفحه «{slug}» را ندارید",
"error.page.changeStatus.incomplete": "صفحه حاوی خطا است و قابل انتشار نیست",
"error.page.changeStatus.permission": "وضعیت صفحه جاری قابل تغییر نیست",
"error.page.changeStatus.toDraft.invalid": "صفحه «{slug}» قابل تبدیل به پیش نویس نیست",
"error.page.changeTemplate.invalid": "قالب صفحه «{slug}» قابل تغییر نیست",
"error.page.changeTemplate.permission": "شما اجازه تغییر قالب «{slug}» را ندارید",
"error.page.changeTitle.empty": "عنوان اجباری است",
"error.page.changeTitle.permission":
"شما اجازه تغییر عنوان «{slug}» را ندارید",
"error.page.changeTitle.permission": "شما اجازه تغییر عنوان «{slug}» را ندارید",
"error.page.create.permission": "شما اجازه ایجاد «{slug}» را ندارید",
"error.page.delete": "حذف صفحه «{slug}» ممکن نیست",
"error.page.delete.confirm": "جهت ادامه عنوان صفحه را وارد کنید",
"error.page.delete.hasChildren":
"این صفحه جاوی زیرصفحه است و نمی تواند حذف شود",
"error.page.delete.hasChildren": "این صفحه جاوی زیرصفحه است و نمی تواند حذف شود",
"error.page.delete.permission": "شما اجازه حذف «{slug}» را ندارید",
"error.page.draft.duplicate":
"صفحه پیش‌نویسی با پسوند Url مشابه «{slug}» هم اکنون موجود است",
"error.page.duplicate":
"صفحه‌ای با آدرس Url مشابه «{slug}» هم اکنون موجود است",
"error.page.draft.duplicate": "صفحه پیش‌نویسی با پسوند Url مشابه «{slug}» هم اکنون موجود است",
"error.page.duplicate": "صفحه‌ای با آدرس Url مشابه «{slug}» هم اکنون موجود است",
"error.page.duplicate.permission": "You are not allowed to duplicate \"{slug}\"",
"error.page.notFound": "صفحه مورد نظر با آدرس «{slug}» پیدا نشد.",
"error.page.num.invalid":
"لطفا شماره ترتیب را بدرستی وارد نمایید. اعداد نباید منفی باشند.",
"error.page.num.invalid": "لطفا شماره ترتیب را بدرستی وارد نمایید. اعداد نباید منفی باشند.",
"error.page.slug.invalid": "لطفا یک پیشوند Url صحیح وارد کنید",
"error.page.sort.permission": "امکان مرتب‌سازی «{slug}» نیست",
"error.page.status.invalid": "لطفا وضعیت صحیحی برای صفحه انتخاب کنید",
"error.page.undefined": "صفحه مورد نظر پیدا نشد",
"error.page.update.permission": "شما اجازه بروزرسانی «{slug}» را ندارید",
"error.section.files.max.plural":
"نباید بیش از {max} فایل به بخش «{section}» اضافه کنید",
"error.section.files.max.singular":
"نباید بیش از یک فایل به بخش «{section}» اضافه کنید",
"error.section.files.min.plural":
"The \"{section}\" section requires at least {min} files",
"error.section.files.min.singular":
"The \"{section}\" section requires at least one file",
"error.section.files.max.plural": "نباید بیش از {max} فایل به بخش «{section}» اضافه کنید",
"error.section.files.max.singular": "نباید بیش از یک فایل به بخش «{section}» اضافه کنید",
"error.section.files.min.plural": "The \"{section}\" section requires at least {min} files",
"error.section.files.min.singular": "The \"{section}\" section requires at least one file",
"error.section.pages.max.plural":
"نباید بیش از {max} صفحه به بخش «{section}» اضافه کنید",
"error.section.pages.max.singular":
"نباید بیش از یک صفحه به بخش «{section}» اضافه کنید",
"error.section.pages.min.plural":
"The \"{section}\" section requires at least {min} pages",
"error.section.pages.min.singular":
"The \"{section}\" section requires at least one page",
"error.section.pages.max.plural": "نباید بیش از {max} صفحه به بخش «{section}» اضافه کنید",
"error.section.pages.max.singular": "نباید بیش از یک صفحه به بخش «{section}» اضافه کنید",
"error.section.pages.min.plural": "The \"{section}\" section requires at least {min} pages",
"error.section.pages.min.singular": "The \"{section}\" section requires at least one page",
"error.section.notLoaded": "بخش «{name}» قابل بارکذاری نیست",
"error.section.type.invalid": "نوع بخش «{type}» غیرمجاز است",
"error.site.changeTitle.empty": "عنوان اجباری است",
"error.site.changeTitle.permission":
"شما اجازه تغییر عنوان سایت را ندارید",
"error.site.changeTitle.permission": "شما اجازه تغییر عنوان سایت را ندارید",
"error.site.update.permission": "شما اجازه بروزرسانی سایت را ندارید",
"error.template.default.notFound": "قالب پیش فرض موجود نیست",
"error.user.changeEmail.permission":
"شما اجازه تغییر ایمیل کاربر «{name}» را ندارید",
"error.user.changeLanguage.permission":
"شما اجازه تغییر زبان برای کاربر «{name}» را ندارید",
"error.user.changeName.permission":
"شما اجازه تنغییر نام کاربر «{name}» را ندارید",
"error.user.changePassword.permission":
"شما اجازه تغییر رمز عبور کاربر «{name}» را ندارید",
"error.user.changeRole.lastAdmin":
"نقش آخرین مدیر سیستم قابل تغییر نیست",
"error.user.changeRole.permission":
"شما اجازه تغییر نقش کاربر «{name}» را ندارید",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.changeEmail.permission": "شما اجازه تغییر ایمیل کاربر «{name}» را ندارید",
"error.user.changeLanguage.permission": "شما اجازه تغییر زبان برای کاربر «{name}» را ندارید",
"error.user.changeName.permission": "شما اجازه تنغییر نام کاربر «{name}» را ندارید",
"error.user.changePassword.permission": "شما اجازه تغییر رمز عبور کاربر «{name}» را ندارید",
"error.user.changeRole.lastAdmin": "نقش آخرین مدیر سیستم قابل تغییر نیست",
"error.user.changeRole.permission": "شما اجازه تغییر نقش کاربر «{name}» را ندارید",
"error.user.changeRole.toAdmin": "You are not allowed to promote someone to the admin role",
"error.user.create.permission": "شما اجازه ایجاد این کاربر را ندارید",
"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.lastUser": "حذف آخرین کاربر ممکن نیست",
"error.user.delete.permission":
"شما اجازه حذف کاربر «{name}» را ندارید",
"error.user.duplicate":
"کاربری با ایمیل «{email}» هم اکنون موجود است",
"error.user.delete.permission": "شما اجازه حذف کاربر «{name}» را ندارید",
"error.user.duplicate": "کاربری با ایمیل «{email}» هم اکنون موجود است",
"error.user.email.invalid": "لطفا یک ایمیل معتبر وارد کنید",
"error.user.language.invalid": "لطفا زبان معتبری انتخاب کنید",
"error.user.notFound": "کاربر «{name}» پیدا نشد",
"error.user.password.invalid":
"لطفا گذرواژه صحیحی با حداقل طول 8 حرف وارد کنید. ",
"error.user.password.invalid": "لطفا گذرواژه صحیحی با حداقل طول 8 حرف وارد کنید. ",
"error.user.password.notSame": "\u0644\u0637\u0641\u0627 \u062a\u06a9\u0631\u0627\u0631 \u06af\u0630\u0631\u0648\u0627\u0698\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u0646\u0645\u0627\u06cc\u06cc\u062f",
"error.user.password.undefined": "کاربر فاقد گذرواژه است",
"error.user.role.invalid": "لطفا نقش صحیحی وارد نمایید",
"error.user.update.permission":
"شما اجازه بروزرسانی کاربر «{name}» را ندارید",
"error.user.update.permission": "شما اجازه بروزرسانی کاربر «{name}» را ندارید",
"error.validation.accepted": "لطفا تایید کنید",
"error.validation.alpha": "لطفا تنها از بین حروف a-z انتخاب کنید",
"error.validation.alphanum":
"لطفا تنها از بین حروف a-z و اعداد 0-9 انتخاب کنید",
"error.validation.between":
"لطفا مقداری مابین «{min}» و «{max}» وارد کنید",
"error.validation.alphanum": "لطفا تنها از بین حروف a-z و اعداد 0-9 انتخاب کنید",
"error.validation.between": "لطفا مقداری مابین «{min}» و «{max}» وارد کنید",
"error.validation.boolean": "لطفا تایید یا رد کنید",
"error.validation.contains":
"لطفا مقداری شامل «{needle}» وارد کنید",
"error.validation.contains": "لطفا مقداری شامل «{needle}» وارد کنید",
"error.validation.date": "لطفا تاریخ معتبری وارد کنید",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "لطفا مقداری کمتر از {max} وارد کنید",
"error.validation.match": "مقدار وارد شده با الگوی مورد نظر همخوانی ندارد",
"error.validation.max": "لطفا مقداری کوچکتر یا مساوی {min} وارد کنید",
"error.validation.maxlength":
"لطفا عبارت کوتاه‌تری وارد کنید. (حداکثر {max} حرف)",
"error.validation.maxlength": "لطفا عبارت کوتاه‌تری وارد کنید. (حداکثر {max} حرف)",
"error.validation.maxwords": "لطفا بیش از {max} کلمه وارد نکنید",
"error.validation.min": "لطفا مقداری بزرگتر یا مساوی با {min} وارد کنید",
"error.validation.minlength":
"لطفا عبارتی طولانی‌تری وارد کنید. (حداقل {min} حرف)",
"error.validation.minlength": "لطفا عبارتی طولانی‌تری وارد کنید. (حداقل {min} حرف)",
"error.validation.minwords": "لطفا حداقل {min} کلمه وارد کنید",
"error.validation.more": "لطفا مقداری بیش از {min} وارد کنید",
"error.validation.notcontains":
"لطفا مقداری فاقد «{needle}» وارد کنید",
"error.validation.notin":
"لطفا از مقادیر روبرو استفاده نکنید: ({notin})",
"error.validation.notcontains": "لطفا مقداری فاقد «{needle}» وارد کنید",
"error.validation.notin": "لطفا از مقادیر روبرو استفاده نکنید: ({notin})",
"error.validation.option": "لطفا گزینه معتبری انتخاب کنید",
"error.validation.num": "لطفا عدد صحیحی وارد کنید",
"error.validation.required": "لطفا مقداری وارد کنید",
@@ -238,8 +193,7 @@
"field.structure.empty": "\u0645\u0648\u0631\u062f\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f.",
"field.users.empty": "کاربری انتخاب نشده است",
"file.delete.confirm":
"آیا واقعا می خواهید این فایل را حذف کنید؟<br><strong>{filename}</strong>",
"file.delete.confirm": "آیا واقعا می خواهید این فایل را حذف کنید؟<br><strong>{filename}</strong>",
"files": "فایل‌ها",
"files.empty": "فایلی موجود نیست",
@@ -251,29 +205,22 @@
"installation": "نصب و راه اندازی",
"installation.completed": "پنل کاربری نصب شد",
"installation.disabled": "نصب کننده پانل کاربری بصورت پیش‌فرض در سرورهای عمومی غیرفعال است. لطفا نصب را روی یک ماشین محلی اجرا کنید یا آن را با استفاده از <code>panel.install</code> فعال کنید.",
"installation.issues.accounts":
"پوشه <code>/site/accounts</code> موجود نیست یا قابل نوشتن نیست.",
"installation.issues.content":
"پوشه <code>/content</code> موجود نیست یا قابل نوشتن نیست",
"installation.issues.accounts": "پوشه <code>/site/accounts</code> موجود نیست یا قابل نوشتن نیست.",
"installation.issues.content": "پوشه <code>/content</code> موجود نیست یا قابل نوشتن نیست",
"installation.issues.curl": "افزونه <code>CURL</code> مورد نیاز است",
"installation.issues.headline": "نصب پانل کاربری ممکن نیست",
"installation.issues.mbstring":
"افزونه <code>MB String</code> مورد نیاز است",
"installation.issues.media":
"پوشه <code>/media</code> موجود نیست یا قابل نوشتن نیست",
"installation.issues.mbstring": "افزونه <code>MB String</code> مورد نیاز است",
"installation.issues.media": "پوشه <code>/media</code> موجود نیست یا قابل نوشتن نیست",
"installation.issues.php": "لطفا از پی‌اچ‌پی 7 یا بالاتر استفاده کنید",
"installation.issues.server":
"کربی نیاز به <code>Apache</code>، <code>Nginx</code> یا <code>Caddy</code> دارد",
"installation.issues.server": "کربی نیاز به <code>Apache</code>، <code>Nginx</code> یا <code>Caddy</code> دارد",
"installation.issues.sessions": "پوشه <code>/site/sessions</code> وجود ندارد یا قابل نوشتن نیست",
"language": "\u0632\u0628\u0627\u0646",
"language.code": "کد",
"language.convert": "پیش‌فرض شود",
"language.convert.confirm":
"<p>آیا واقعا میخواهید <strong>{name}</strong> را به زبان پیشفرض تبدیل کنید؟ این عمل برگشت ناپذیر است.</p> <p>اگر <strong>{name}</strong> دارای محتوای غیر ترجمه شده باشد، جایگزین معتبر دیگری نخواهد بود و ممکن است بخش‌هایی از سایت شما خالی باشد.</p>",
"language.convert.confirm": "<p>آیا واقعا میخواهید <strong>{name}</strong> را به زبان پیشفرض تبدیل کنید؟ این عمل برگشت ناپذیر است.</p> <p>اگر <strong>{name}</strong> دارای محتوای غیر ترجمه شده باشد، جایگزین معتبر دیگری نخواهد بود و ممکن است بخش‌هایی از سایت شما خالی باشد.</p>",
"language.create": "افزودن زبان جدید",
"language.delete.confirm":
"آیا واقعا میخواهید زبان </strong>{name}</strong> را به همراه تمام ترجمه‌ها حذف کنید؟ این عمل قابل بازگشت نخواهد بود!",
"language.delete.confirm": "آیا واقعا میخواهید زبان </strong>{name}</strong> را به همراه تمام ترجمه‌ها حذف کنید؟ این عمل قابل بازگشت نخواهد بود!",
"language.deleted": "زبان مورد نظر حذف شد",
"language.direction": "rtl",
"language.direction.ltr": "چپ به راست",
@@ -292,8 +239,7 @@
"license": "\u0645\u062c\u0648\u0632",
"license.buy": "خرید مجوز",
"license.register": "ثبت",
"license.register.help":
"پس از خرید از طریق ایمیل، کد مجوز خود را دریافت کردید. لطفا برای ثبت‌نام آن را کپی و اینجا پیست کنید.",
"license.register.help": "پس از خرید از طریق ایمیل، کد مجوز خود را دریافت کردید. لطفا برای ثبت‌نام آن را کپی و اینجا پیست کنید.",
"license.register.label": "لطفا کد مجوز خود را وارد کنید",
"license.register.success": "با تشکر از شما برای حمایت از کربی",
"license.unregistered": "این یک نسخه آزمایشی ثبت نشده از کربی است",
@@ -325,7 +271,7 @@
"months.april": "\u0622\u0648\u0631\u06cc\u0644",
"months.august": "\u0627\u0648\u062a",
"months.december": "\u062f\u0633\u0627\u0645\u0628\u0631",
"months.february": "\u0641\u0648\u0631\u06cc\u0647",
"months.february": "فوریه",
"months.january": "\u0698\u0627\u0646\u0648\u06cc\u0647",
"months.july": "\u0698\u0648\u0626\u06cc\u0647",
"months.june": "\u0698\u0648\u0626\u0646",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "لطفا یک موقعیت را انتخاب کنید",
"page.changeStatus.select": "یک وضعیت جدید را انتخاب کنید",
"page.changeTemplate": "تغییر قالب",
"page.delete.confirm":
"صفحه <strong>{title}</strong> حذف شود؟",
"page.delete.confirm.subpages":
"<strong>این صفحه دارای زیرصفحه است</strong>. <br>تمام زیر صفحات نیز حذف خواهد شد.",
"page.delete.confirm": "صفحه <strong>{title}</strong> حذف شود؟",
"page.delete.confirm.subpages": "<strong>این صفحه دارای زیرصفحه است</strong>. <br>تمام زیر صفحات نیز حذف خواهد شد.",
"page.delete.confirm.title": "جهت ادامه عنوان صفحه را وارد کنید",
"page.draft.create": "ایجاد پیش‌نویس",
"page.duplicate.appendix": "کپی",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Copy pages",
"page.status": "وضعیت",
"page.status.draft": "پیش‌نویس",
"page.status.draft.description":
"این صفحه در حالت پیش‌نویس است و تنها برای ویرایشگران وارد شده قابل مشاهده است",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.listed": "عمومی",
"page.status.listed.description": "این صفحه برای عموم قابل مشاهده است",
"page.status.unlisted": "فهرست نشده",
@@ -388,6 +331,7 @@
"replace": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc",
"retry": "\u062a\u0644\u0627\u0634 \u0645\u062c\u062f\u062f",
"revert": "بازگرداندن تغییرات",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "\u0646\u0642\u0634",
"role.admin.description": "The admin has all rights",
@@ -451,8 +395,7 @@
"url.placeholder": "https://example.com",
"user": "کاربر",
"user.blueprint":
"شما می توانید قسمت‌های اضافی و فیلدهای فرم را برای این نقش کاربر در <strong>/site/blueprints/users/{role}.yml</strong> تعریف کنید",
"user.blueprint": "شما می توانید قسمت‌های اضافی و فیلدهای فرم را برای این نقش کاربر در <strong>/site/blueprints/users/{role}.yml</strong> تعریف کنید",
"user.changeEmail": "تغییر ایمیل",
"user.changeLanguage": "تغییر زبان",
"user.changeName": "تغییر نام این کاربر",
@@ -463,8 +406,7 @@
"user.changeRole.select": "یک نقش جدید را انتخاب کنید",
"user.create": "افزودن کاربر جدید",
"user.delete": "حذف کاربر جاری",
"user.delete.confirm":
"آیا واقعا میخواهید<strong> {email}</strong> را حذف کنید؟",
"user.delete.confirm": "آیا واقعا میخواهید<strong> {email}</strong> را حذف کنید؟",
"users": "کاربران",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "Profiilikuvaa ei voitu lähettää",
"error.avatar.delete.fail": "Profiilikuvaa ei voitu poistaa",
"error.avatar.dimensions.invalid":
"Profiilikuvan leveys ja korkeus voivat olla enintään 3000 pikseliä",
"error.avatar.mime.forbidden":
"Profiilikuvan täytyy olla joko JPEG- tai PNG-formaatissa",
"error.avatar.dimensions.invalid": "Profiilikuvan leveys ja korkeus voivat olla enintään 3000 pikseliä",
"error.avatar.mime.forbidden": "Profiilikuvan täytyy olla joko JPEG- tai PNG-formaatissa",
"error.blueprint.notFound": "Kaavaa \"{name}\" ei voitu ladata",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Muunnin \"{converter}\" ei kelpaa",
"error.file.changeName.empty": "Nimi ei voi olla tyhjä",
"error.file.changeName.permission":
"Sinulla ei ole oikeutta muuttaa tiedoston \"{filename}\" nimeä",
"error.file.changeName.permission": "Sinulla ei ole oikeutta muuttaa tiedoston \"{filename}\" nimeä",
"error.file.duplicate": "Tiedosto nimellä \"{filename}\" on jo olemassa",
"error.file.extension.forbidden":
"Tiedostopääte \"{extension}\" ei ole sallittu",
"error.file.extension.missing":
"Tiedoston \"{filename}\" tiedostopääte puuttuu",
"error.file.extension.forbidden": "Tiedostopääte \"{extension}\" ei ole sallittu",
"error.file.extension.missing": "Tiedoston \"{filename}\" tiedostopääte puuttuu",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
"error.file.maxwidth": "The width of the image must not exceed {width} pixels",
"error.file.mime.differs":
"Lähetetyllä tiedostolla täytyy olla sama mime-tyyppi \"{mime}\"",
"error.file.mime.differs": "Lähetetyllä tiedostolla täytyy olla sama mime-tyyppi \"{mime}\"",
"error.file.mime.forbidden": "Median tyyppi \"{mime}\" ei ole sallittu",
"error.file.mime.invalid": "Invalid mime type: {mime}",
"error.file.mime.missing":
"Tiedoston \"{filename}\" mediatyyppiä ei voida tunnistaa",
"error.file.mime.missing": "Tiedoston \"{filename}\" mediatyyppiä ei voida tunnistaa",
"error.file.minheight": "The height of the image must be at least {height} pixels",
"error.file.minsize": "The file is too small",
"error.file.minwidth": "The width of the image must be at least {width} pixels",
@@ -90,111 +83,77 @@
"error.license.email": "Anna kelpaava sähköpostiosoite",
"error.license.verification": "Lisenssiä ei voitu vahvistaa",
"error.page.changeSlug.permission":
"Sinulla ei ole oikeutta muuttaa URL-liitettä sivulle \"{slug}\"",
"error.page.changeStatus.incomplete":
"Sivulla on virheitä eikä sitä voitu julkaista",
"error.page.changeStatus.permission":
"Tämän sivun tilaa ei voi muuttaa",
"error.page.changeStatus.toDraft.invalid":
"Sivua \"{slug}\" ei voi muuttaa luonnokseksi",
"error.page.changeTemplate.invalid":
"Sivun \"{slug}\" pohjaa ei voi muuttaa",
"error.page.changeTemplate.permission":
"Sinulla ei ole oikeutta muuttaa sivun \"{slug}\" sivupohjaa",
"error.page.changeSlug.permission": "Sinulla ei ole oikeutta muuttaa URL-liitettä sivulle \"{slug}\"",
"error.page.changeStatus.incomplete": "Sivulla on virheitä eikä sitä voitu julkaista",
"error.page.changeStatus.permission": "Tämän sivun tilaa ei voi muuttaa",
"error.page.changeStatus.toDraft.invalid": "Sivua \"{slug}\" ei voi muuttaa luonnokseksi",
"error.page.changeTemplate.invalid": "Sivun \"{slug}\" pohjaa ei voi muuttaa",
"error.page.changeTemplate.permission": "Sinulla ei ole oikeutta muuttaa sivun \"{slug}\" sivupohjaa",
"error.page.changeTitle.empty": "Nimi ei voi olla tyhjä",
"error.page.changeTitle.permission":
"Sinulla ei ole oikeutta muuttaa sivun \"{slug}\" nimeä",
"error.page.changeTitle.permission": "Sinulla ei ole oikeutta muuttaa sivun \"{slug}\" nimeä",
"error.page.create.permission": "Sinulla ei ole oikeutta luoda sivua \"{slug}\"",
"error.page.delete": "Sivua \"{slug}\" ei voi poistaa",
"error.page.delete.confirm": "Anna vahvistuksena sivun nimi",
"error.page.delete.hasChildren":
"Sivu sisältää alasivuja eikä sitä voida poistaa",
"error.page.delete.hasChildren": "Sivu sisältää alasivuja eikä sitä voida poistaa",
"error.page.delete.permission": "Sinulla ei ole oikeutta poistaa sivua \"{slug}\"",
"error.page.draft.duplicate":
"Sivuluonnos URL-liitteellä \"{slug}\" on jo olemassa",
"error.page.duplicate":
"Sivu URL-liitteellä \"{slug}\" on jo olemassa",
"error.page.draft.duplicate": "Sivuluonnos URL-liitteellä \"{slug}\" on jo olemassa",
"error.page.duplicate": "Sivu URL-liitteellä \"{slug}\" on jo olemassa",
"error.page.duplicate.permission": "Sinulla ei ole oikeutta kahdentaa sivua \"{slug}\"",
"error.page.notFound": "Sivua \"{slug}\" ei löytynyt",
"error.page.num.invalid":
"Anna kelpaava järjestysnumero. Numero ei voi olla negatiivinen.",
"error.page.num.invalid": "Anna kelpaava järjestysnumero. Numero ei voi olla negatiivinen.",
"error.page.slug.invalid": "Anna kelpaava URL-etuliite",
"error.page.sort.permission": "Sivua \"{slug}\" ei voi järjestellä",
"error.page.status.invalid": "Aseta kelvollinen sivun tila",
"error.page.undefined": "Sivua ei l\u00f6ytynyt",
"error.page.update.permission": "Sinulla ei ole oikeutta päivittää sivua \"{slug}\"",
"error.section.files.max.plural":
"Et voi lisätä enemmän kuin {max} tiedostoa osioon \"{section}\"",
"error.section.files.max.singular":
"Et voi lisätä enempää kuin yhden tiedoston osioon \"{section}\"",
"error.section.files.min.plural":
"Osio \"{section}\" vaatii ainakin {min} tiedostoa",
"error.section.files.min.singular":
"Osio \"{section}\" vaatii ainakin yhden sivun",
"error.section.files.max.plural": "Et voi lisätä enemmän kuin {max} tiedostoa osioon \"{section}\"",
"error.section.files.max.singular": "Et voi lisätä enempää kuin yhden tiedoston osioon \"{section}\"",
"error.section.files.min.plural": "Osio \"{section}\" vaatii ainakin {min} tiedostoa",
"error.section.files.min.singular": "Osio \"{section}\" vaatii ainakin yhden sivun",
"error.section.pages.max.plural":
"Et voi lisätä enemmän kuin {max} sivua osioon \"{section}\"",
"error.section.pages.max.singular":
"Et voi lisätä enempää kuin yhden sivun osioon \"{section}\"",
"error.section.pages.min.plural":
"Osio \"{section}\" vaatii ainakin {min} sivua",
"error.section.pages.min.singular":
"Osio \"{section}\" vaatii ainakin yhden sivun",
"error.section.pages.max.plural": "Et voi lisätä enemmän kuin {max} sivua osioon \"{section}\"",
"error.section.pages.max.singular": "Et voi lisätä enempää kuin yhden sivun osioon \"{section}\"",
"error.section.pages.min.plural": "Osio \"{section}\" vaatii ainakin {min} sivua",
"error.section.pages.min.singular": "Osio \"{section}\" vaatii ainakin yhden sivun",
"error.section.notLoaded": "Osiota \"{name}\" ei voitu ladata",
"error.section.type.invalid": "Osion tyyppi \"{type}\" ei ole kelvollinen",
"error.site.changeTitle.empty": "Nimi ei voi olla tyhjä",
"error.site.changeTitle.permission":
"Sinulla ei ole oikeutta päivittää sivuston nimeä",
"error.site.changeTitle.permission": "Sinulla ei ole oikeutta päivittää sivuston nimeä",
"error.site.update.permission": "Sinulla ei ole oikeutta päivittää sivuston tietoja",
"error.template.default.notFound": "Oletussivupohjaa ei ole määritetty",
"error.user.changeEmail.permission":
"Sinulla ei ole oikeutta vaihtaa käyttäjän \"{name}\" sähköpostiosoitetta",
"error.user.changeLanguage.permission":
"Sinulla ei ole oikeutta vaihtaa käyttäjän \"{name}\" kieltä",
"error.user.changeName.permission":
"Sinulla ei ole oikeutta vaihtaa käyttäjän \"{name}\" nimeä",
"error.user.changePassword.permission":
"Sinulla ei ole oikeutta vaihtaa käyttäjän \"{name}\" salasanaa",
"error.user.changeRole.lastAdmin":
"Ainoan pääkäyttäjän roolia ei voi muuttaa",
"error.user.changeRole.permission":
"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.changeEmail.permission": "Sinulla ei ole oikeutta vaihtaa käyttäjän \"{name}\" sähköpostiosoitetta",
"error.user.changeLanguage.permission": "Sinulla ei ole oikeutta vaihtaa käyttäjän \"{name}\" kieltä",
"error.user.changeName.permission": "Sinulla ei ole oikeutta vaihtaa käyttäjän \"{name}\" nimeä",
"error.user.changePassword.permission": "Sinulla ei ole oikeutta vaihtaa käyttäjän \"{name}\" salasanaa",
"error.user.changeRole.lastAdmin": "Ainoan pääkäyttäjän roolia ei voi muuttaa",
"error.user.changeRole.permission": "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.delete": "Käyttäjää \"{name}\" 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.permission":
"Sinulla ei ole oikeutta poistaa käyttäjää \"{name}\"",
"error.user.duplicate":
"Käyttäjä, jonka sähköpostiosoite on \"{name}\", on jo olemassa",
"error.user.delete.permission": "Sinulla ei ole oikeutta poistaa käyttäjää \"{name}\"",
"error.user.duplicate": "Käyttäjä, jonka sähköpostiosoite on \"{name}\", on jo olemassa",
"error.user.email.invalid": "Anna kelpaava sähköpostiosoite",
"error.user.language.invalid": "Anna kelpaava kieli",
"error.user.notFound": "K\u00e4ytt\u00e4j\u00e4\u00e4 ei l\u00f6ytynyt",
"error.user.password.invalid":
"Anna kelpaava salasana. Salasanan täytyy olla ainakin 8 merkkiä pitkä.",
"error.user.password.invalid": "Anna kelpaava salasana. Salasanan täytyy olla ainakin 8 merkkiä pitkä.",
"error.user.password.notSame": "Salasanat eivät täsmää",
"error.user.password.undefined": "Käyttäjällä ei ole salasanaa",
"error.user.role.invalid": "Anna kelpaava käyttäjätaso",
"error.user.update.permission":
"Sinulla ei ole oikeutta päivittää käyttäjää \"{name}\"",
"error.user.update.permission": "Sinulla ei ole oikeutta päivittää käyttäjää \"{name}\"",
"error.validation.accepted": "Ole hyvä ja vahvista",
"error.validation.alpha": "Anna vain merkkejä väliltä a-z",
"error.validation.alphanum":
"Anna vain merkkejä väliltä a-z tai/ja numeroita väliltä 0-9",
"error.validation.between":
"Anna arvo väliltä \"{min}\" ja \"{max}\"",
"error.validation.alphanum": "Anna vain merkkejä väliltä a-z tai/ja numeroita väliltä 0-9",
"error.validation.between": "Anna arvo väliltä \"{min}\" ja \"{max}\"",
"error.validation.boolean": "Vahvista tai peruuta",
"error.validation.contains":
"Anna arvo joka sisältää \"{needle}\"",
"error.validation.contains": "Anna arvo joka sisältää \"{needle}\"",
"error.validation.date": "Anna kelpaava päivämäärä",
"error.validation.date.after": "Anna päivämäärä {date} jälkeen",
"error.validation.date.before": "Anna päivämäärä ennen {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Anna arvo joka on pienempi kuin {max}",
"error.validation.match": "Arvo ei vastaa vaadittua kaavaa",
"error.validation.max": "Anna arvo joka on enintään {max}",
"error.validation.maxlength":
"Anna lyhyempi arvo. (enintään {max} merkkiä)",
"error.validation.maxlength": "Anna lyhyempi arvo. (enintään {max} merkkiä)",
"error.validation.maxwords": "Anna korkeintaan {max} sana(a)",
"error.validation.min": "Anna arvo joka on vähintään {min}",
"error.validation.minlength":
"Anna pidempi arvo. (vähintään {min} merkkiä)",
"error.validation.minlength": "Anna pidempi arvo. (vähintään {min} merkkiä)",
"error.validation.minwords": "Anna vähintään {min} sana(a)",
"error.validation.more": "Anna suurempi arvo kuin {min}",
"error.validation.notcontains":
"Anna arvo joka ei sisällä \"{needle}\"",
"error.validation.notin":
"Arvo ei voi sisältää mitään seuraavista: ({notIn})",
"error.validation.notcontains": "Anna arvo joka ei sisällä \"{needle}\"",
"error.validation.notin": "Arvo ei voi sisältää mitään seuraavista: ({notIn})",
"error.validation.option": "Valitse kelpaava vaihtoehto",
"error.validation.num": "Anna kelpaava numero",
"error.validation.required": "Arvo ei voi olla tyhjä",
@@ -238,8 +193,7 @@
"field.structure.empty": "Rivejä ei ole vielä lisätty",
"field.users.empty": "Käyttäjiä ei ole vielä valittu",
"file.delete.confirm":
"Haluatko varmasti poistaa tiedoston <br><strong>{filename}</strong>?",
"file.delete.confirm": "Haluatko varmasti poistaa tiedoston <br><strong>{filename}</strong>?",
"files": "Tiedostot",
"files.empty": "Tiedostoja ei ole vielä lisätty",
@@ -251,29 +205,22 @@
"installation": "Asennus",
"installation.completed": "Paneeli on asennettu",
"installation.disabled": "Paneelin asennus on oletuksena poissa käytöstä julkisilla palvelimilla. Aja asennus paikallisella koneella, tai ota paneeli käyttöön <code>panel.install</code>-optiolla.",
"installation.issues.accounts":
"<code>/site/accounts</code> -kansio ei ole olemassa tai siihen ei voi kirjoittaa",
"installation.issues.content":
"<code>/content</code> -kansio ei ole olemassa tai siihen ei voi kirjoittaa",
"installation.issues.accounts": "<code>/site/accounts</code> -kansio ei ole olemassa tai siihen ei voi kirjoittaa",
"installation.issues.content": "<code>/content</code> -kansio ei ole olemassa tai siihen ei voi kirjoittaa",
"installation.issues.curl": "<code>CURL</code>-laajennos on pakollinen",
"installation.issues.headline": "Paneelia ei voida asentaa",
"installation.issues.mbstring":
"<code>MB String</code>-laajennos on pakollinen",
"installation.issues.media":
"<code>/media</code> -kansio ei ole olemassa tai siihen ei voi kirjoittaa",
"installation.issues.mbstring": "<code>MB String</code>-laajennos on pakollinen",
"installation.issues.media": "<code>/media</code> -kansio ei ole olemassa tai siihen ei voi kirjoittaa",
"installation.issues.php": "Varmista että <code>PHP 7+</code> on käytössä",
"installation.issues.server":
"Kirby tarvitsee jonkun seuraavista: <code>Apache</code>, <code>Nginx</code> tai <code>Caddy</code>",
"installation.issues.server": "Kirby tarvitsee jonkun seuraavista: <code>Apache</code>, <code>Nginx</code> tai <code>Caddy</code>",
"installation.issues.sessions": "<code>/site/sessions</code> -kansio ei ole olemassa tai siihen ei voi kirjoittaa",
"language": "Kieli",
"language.code": "Tunniste",
"language.convert": "Muuta oletukseksi",
"language.convert.confirm":
"<p>Haluatko varmasti muuttaa kielen <strong>{name}</strong> oletuskieleksi? Tätä muutosta ei voi peruuttaa.</p><p>Jos<strong>{name}</strong> sisältää kääntämättömiä kohtia, varakäännöstä ei enää ole näille kohdille ja sivustosi saattaa olla osittain tyhjä.</p>",
"language.convert.confirm": "<p>Haluatko varmasti muuttaa kielen <strong>{name}</strong> oletuskieleksi? Tätä muutosta ei voi peruuttaa.</p><p>Jos<strong>{name}</strong> sisältää kääntämättömiä kohtia, varakäännöstä ei enää ole näille kohdille ja sivustosi saattaa olla osittain tyhjä.</p>",
"language.create": "Lisää uusi kieli",
"language.delete.confirm":
"Haluatko varmasti poistaa kielen <strong>{name}</strong>, mukaanlukien kaikki käännökset? Tätä toimintoa ei voi peruuttaa!",
"language.delete.confirm": "Haluatko varmasti poistaa kielen <strong>{name}</strong>, mukaanlukien kaikki käännökset? Tätä toimintoa ei voi peruuttaa!",
"language.deleted": "Kieli on poistettu",
"language.direction": "Lukusuunta",
"language.direction.ltr": "Vasemmalta oikealle",
@@ -292,8 +239,7 @@
"license": "Lisenssi",
"license.buy": "Osta lisenssi",
"license.register": "Rekisteröi",
"license.register.help":
"Lisenssiavain on lähetetty oston jälkeen sähköpostiisi. Kopioi ja liitä avain tähän.",
"license.register.help": "Lisenssiavain on lähetetty oston jälkeen sähköpostiisi. Kopioi ja liitä avain tähän.",
"license.register.label": "Anna lisenssiavain",
"license.register.success": "Kiitos kun tuet Kirbyä",
"license.unregistered": "Tämä on rekisteröimätön demo Kirbystä",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Valitse järjestyspaikka",
"page.changeStatus.select": "Valitse uusi tila",
"page.changeTemplate": "Vaihda sivupohja",
"page.delete.confirm":
"Haluatko varmasti poistaa sivun <strong>{title}</strong>?",
"page.delete.confirm.subpages":
"<strong>Tällä sivulla on alasivuja</strong>.<br>Myös kaikki alasivut poistetaan.",
"page.delete.confirm": "Haluatko varmasti poistaa sivun <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Tällä sivulla on alasivuja</strong>.<br>Myös kaikki alasivut poistetaan.",
"page.delete.confirm.title": "Anna vahvistuksena sivun nimi",
"page.draft.create": "Uusi luonnos",
"page.duplicate.appendix": "Kopioi",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Copy pages",
"page.status": "Tila",
"page.status.draft": "Luonnos",
"page.status.draft.description":
"Sivu on luonnostilassa ja näkyy vain kirjautuneille muokkaajille",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.listed": "Julkinen",
"page.status.listed.description": "Sivu on julkinen kaikille",
"page.status.unlisted": "Listaamaton",
@@ -388,6 +331,7 @@
"replace": "Korvaa",
"retry": "Yrit\u00e4 uudelleen",
"revert": "Palauta",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "K\u00e4ytt\u00e4j\u00e4taso",
"role.admin.description": "Pääkäyttäjällä on kaikki oikeudet",
@@ -451,8 +395,7 @@
"url.placeholder": "https://esimerkki.fi",
"user": "Käyttäjä",
"user.blueprint":
"Voit määrittää lisää osioita ja lomakekenttiä tälle käyttäjälle kaavassa <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Voit määrittää lisää osioita ja lomakekenttiä tälle käyttäjälle kaavassa <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Muuta sähköpostiosoite",
"user.changeLanguage": "Vaihda kieli",
"user.changeName": "Nimeä uudelleen",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Valitse uusi käyttäjätaso",
"user.create": "Lisää uusi käyttäjä",
"user.delete": "Poista tämä käyttäjä",
"user.delete.confirm":
"Haluatko varmsti poistaa käyttäjän <br><strong>{email}</strong>?",
"user.delete.confirm": "Haluatko varmsti poistaa käyttäjän <br><strong>{email}</strong>?",
"users": "Käyttäjät",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "Limage du profil na pu être transférée",
"error.avatar.delete.fail": "Limage du profil na pu être supprimée",
"error.avatar.dimensions.invalid":
"Veuillez choisir une image de profil de largeur et hauteur inférieures à 3000 pixels",
"error.avatar.mime.forbidden":
"L'image du profil utilisateur doit être un fichier JPEG ou PNG",
"error.avatar.dimensions.invalid": "Veuillez choisir une image de profil de largeur et hauteur inférieures à 3000 pixels",
"error.avatar.mime.forbidden": "L'image du profil utilisateur doit être un fichier JPEG ou PNG",
"error.blueprint.notFound": "Le blueprint «&nbsp;{name}&nbsp;» na pu être chargé",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Convertisseur «&nbsp;{converter}&nbsp;» incorrect",
"error.file.changeName.empty": "Le nom ne peut être vide",
"error.file.changeName.permission":
"Vous nêtes pas autorisé à modifier le nom de «&nbsp;{filename}&nbsp;»",
"error.file.changeName.permission": "Vous nêtes pas autorisé à modifier le nom de «&nbsp;{filename}&nbsp;»",
"error.file.duplicate": "Un fichier nommé «&nbsp;{filename}&nbsp;» existe déjà",
"error.file.extension.forbidden":
"Lextension «&nbsp;{extension}&nbsp;» nest pas autorisée",
"error.file.extension.missing":
"Lextension pour «&nbsp;{filename}&nbsp;» est manquante",
"error.file.extension.forbidden": "Lextension «&nbsp;{extension}&nbsp;» nest pas autorisée",
"error.file.extension.missing": "Lextension pour «&nbsp;{filename}&nbsp;» est manquante",
"error.file.maxheight": "La hauteur de l'image ne doit pas excéder {height} pixels",
"error.file.maxsize": "Le fichier est trop volumineux",
"error.file.maxwidth": "La largeur de l'image ne doit pas excéder {width} pixels",
"error.file.mime.differs":
"Le fichier transféré doit être du même type de média «&nbsp;{mime}&nbsp;»",
"error.file.mime.differs": "Le fichier transféré doit être du même type de média «&nbsp;{mime}&nbsp;»",
"error.file.mime.forbidden": "Le type de média «&nbsp;{mime}&nbsp;» nest pas autorisé",
"error.file.mime.invalid": "Type de média invalide : {mime}",
"error.file.mime.missing":
"Le type de média de «&nbsp;{filename}&nbsp;» na pu être détecté",
"error.file.mime.missing": "Le type de média de «&nbsp;{filename}&nbsp;» na pu être détecté",
"error.file.minheight": "La hauteur de l'image doit être au moins {height} pixels",
"error.file.minsize": "Le fichier n'est pas assez volumineux",
"error.file.minwidth": "La largeur de l'image doit être au moins {width} pixels",
@@ -90,111 +83,77 @@
"error.license.email": "Veuillez saisir un courriel valide",
"error.license.verification": "La licence na pu être vérifiée",
"error.page.changeSlug.permission":
"Vous nêtes pas autorisé à modifier lidentifiant dURL pour «&nbsp;{slug}&nbsp;»",
"error.page.changeStatus.incomplete":
"La page comporte des erreurs et ne peut pas être publiée",
"error.page.changeStatus.permission":
"Le statut de cette page ne peut être modifié",
"error.page.changeStatus.toDraft.invalid":
"La page «&nbsp;{slug}&nbsp;» ne peut être convertie en brouillon",
"error.page.changeTemplate.invalid":
"Le modèle de la page «&nbsp;{slug}&nbsp;» ne peut être changé",
"error.page.changeTemplate.permission":
"Vous nêtes pas autorisé à changer le modèle de «&nbsp;{slug}&nbsp;»",
"error.page.changeSlug.permission": "Vous nêtes pas autorisé à modifier lidentifiant dURL pour «&nbsp;{slug}&nbsp;»",
"error.page.changeStatus.incomplete": "La page comporte des erreurs et ne peut pas être publiée",
"error.page.changeStatus.permission": "Le statut de cette page ne peut être modifié",
"error.page.changeStatus.toDraft.invalid": "La page «&nbsp;{slug}&nbsp;» ne peut être convertie en brouillon",
"error.page.changeTemplate.invalid": "Le modèle de la page «&nbsp;{slug}&nbsp;» ne peut être changé",
"error.page.changeTemplate.permission": "Vous nêtes pas autorisé à changer le modèle de «&nbsp;{slug}&nbsp;»",
"error.page.changeTitle.empty": "Le titre ne peut être vide",
"error.page.changeTitle.permission":
"Vous nêtes pas autorisé à modifier le titre de «&nbsp;{slug}&nbsp;»",
"error.page.changeTitle.permission": "Vous nêtes pas autorisé à modifier le titre de «&nbsp;{slug}&nbsp;»",
"error.page.create.permission": "Vous nêtes pas autorisé à créer «&nbsp;{slug}&nbsp;»",
"error.page.delete": "La page «&nbsp;{slug}&nbsp;» ne peut être supprimée",
"error.page.delete.confirm": "Veuillez saisir le titre de la page pour confirmer",
"error.page.delete.hasChildren":
"La page comporte des sous-pages et ne peut pas être supprimée",
"error.page.delete.hasChildren": "La page comporte des sous-pages et ne peut pas être supprimée",
"error.page.delete.permission": "Vous nêtes pas autorisé à supprimer «&nbsp;{slug}&nbsp;»",
"error.page.draft.duplicate":
"Un brouillon avec lidentifiant dURL «&nbsp;{slug}&nbsp;» existe déjà",
"error.page.duplicate":
"Une page avec lidentifiant dURL «&nbsp;{slug}&nbsp;» existe déjà",
"error.page.draft.duplicate": "Un brouillon avec lidentifiant dURL «&nbsp;{slug}&nbsp;» existe déjà",
"error.page.duplicate": "Une page avec lidentifiant dURL «&nbsp;{slug}&nbsp;» existe déjà",
"error.page.duplicate.permission": "Vous n'êtes pas autorisé à dupliquer «&nbsp;{slug}&nbsp;»",
"error.page.notFound": "La page «&nbsp;{slug}&nbsp;» na pu être trouvée",
"error.page.num.invalid":
"Veuillez saisir un numéro de position valide. Les numéros ne doivent pas être négatifs.",
"error.page.num.invalid": "Veuillez saisir un numéro de position valide. Les numéros ne doivent pas être négatifs.",
"error.page.slug.invalid": "Veuillez saisir un préfixe dURL valide",
"error.page.sort.permission": "La page «&nbsp;{slug}&nbsp;» ne peut être réordonnée",
"error.page.status.invalid": "Veuillez choisir un statut de page valide",
"error.page.undefined": "La page na pu être trouvée",
"error.page.update.permission": "Vous nêtes pas autorisé à modifier «&nbsp;{slug}&nbsp;»",
"error.section.files.max.plural":
"Vous ne pouvez ajouter plus de {max} fichier(s) à la section «&nbsp;{section}&nbsp;»",
"error.section.files.max.singular":
"Vous ne pouvez ajouter plus dun fichier à la section «&nbsp;{section}&nbsp;»",
"error.section.files.min.plural":
"La section «&nbsp;{section}\"&nbsp;» requiert au moins {min} fichiers",
"error.section.files.min.singular":
"La section «&nbsp;{section}\"&nbsp;» requiert au moins un fichier",
"error.section.files.max.plural": "Vous ne pouvez ajouter plus de {max} fichier(s) à la section «&nbsp;{section}&nbsp;»",
"error.section.files.max.singular": "Vous ne pouvez ajouter plus dun fichier à la section «&nbsp;{section}&nbsp;»",
"error.section.files.min.plural": "La section «&nbsp;{section}\"&nbsp;» requiert au moins {min} fichiers",
"error.section.files.min.singular": "La section «&nbsp;{section}\"&nbsp;» requiert au moins un fichier",
"error.section.pages.max.plural":
"Vous ne pouvez ajouter plus de {max} pages à la section «&nbsp;{section}&nbsp;»",
"error.section.pages.max.singular":
"Vous ne pouvez ajouter plus dune page à la section «&nbsp;{section}&nbsp;»",
"error.section.pages.min.plural":
"La section «&nbsp;{section}\"&nbsp;» requiert au moins {min} pages",
"error.section.pages.min.singular":
"La section «&nbsp;{section}\"&nbsp;» requiert au moins une page",
"error.section.pages.max.plural": "Vous ne pouvez ajouter plus de {max} pages à la section «&nbsp;{section}&nbsp;»",
"error.section.pages.max.singular": "Vous ne pouvez ajouter plus dune page à la section «&nbsp;{section}&nbsp;»",
"error.section.pages.min.plural": "La section «&nbsp;{section}\"&nbsp;» requiert au moins {min} pages",
"error.section.pages.min.singular": "La section «&nbsp;{section}\"&nbsp;» requiert au moins une page",
"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.site.changeTitle.empty": "Le titre ne peut être vide",
"error.site.changeTitle.permission":
"Vous nêtes pas autorisé à modifier le titre du site",
"error.site.changeTitle.permission": "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.template.default.notFound": "Le modèle par défaut nexiste pas",
"error.user.changeEmail.permission":
"Vous nêtes pas autorisé à modifier le courriel de lutilisateur « {name} »",
"error.user.changeLanguage.permission":
"Vous nêtes pas autorisé à changer la langue de lutilisateur « {name} »",
"error.user.changeName.permission":
"Vous nêtes pas autorisé à modifier le nom de lutilisateur « {name} »",
"error.user.changePassword.permission":
"Vous nêtes pas autorisé à changer le mot de passe de lutilisateur « {name} »",
"error.user.changeRole.lastAdmin":
"Le rôle du dernier administrateur ne peut être modifié",
"error.user.changeRole.permission":
"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.changeEmail.permission": "Vous nêtes pas autorisé à modifier le courriel de lutilisateur « {name} »",
"error.user.changeLanguage.permission": "Vous nêtes pas autorisé à changer la langue de lutilisateur « {name} »",
"error.user.changeName.permission": "Vous nêtes pas autorisé à modifier le nom de lutilisateur « {name} »",
"error.user.changePassword.permission": "Vous nêtes pas autorisé à changer le mot de passe de lutilisateur « {name} »",
"error.user.changeRole.lastAdmin": "Le rôle du dernier administrateur ne peut être modifié",
"error.user.changeRole.permission": "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.delete": "Lutilisateur « {name} » ne peut être supprimé",
"error.user.delete.lastAdmin": "Le dernier administrateur ne peut être supprimé",
"error.user.delete.lastUser": "Le dernier utilisateur ne peut être supprimé",
"error.user.delete.permission":
"Vous nêtes pas autorisé à supprimer lutilisateur « {name} »",
"error.user.duplicate":
"Un utilisateur avec le courriel « {email} » existe déjà",
"error.user.delete.permission": "Vous nêtes pas autorisé à supprimer lutilisateur « {name} »",
"error.user.duplicate": "Un utilisateur avec le courriel « {email} » existe déjà",
"error.user.email.invalid": "Veuillez saisir un courriel valide",
"error.user.language.invalid": "Veuillez saisir une langue valide",
"error.user.notFound": "Lutilisateur « {name} » na pu être trouvé",
"error.user.password.invalid":
"Veuillez saisir un mot de passe valide. Les mots de passe doivent comporter au moins 8 caractères.",
"error.user.password.invalid": "Veuillez saisir un mot de passe valide. Les mots de passe doivent comporter au moins 8 caractères.",
"error.user.password.notSame": "Les mots de passe ne sont pas identiques",
"error.user.password.undefined": "Cet utilisateur na pas de mot de passe",
"error.user.role.invalid": "Veuillez saisir un rôle valide",
"error.user.update.permission":
"Vous nêtes pas autorisé à modifier lutilisateur « {name} »",
"error.user.update.permission": "Vous nêtes pas autorisé à modifier lutilisateur « {name} »",
"error.validation.accepted": "Veuillez confirmer",
"error.validation.alpha": "Veuillez saisir uniquement des caractères alphabétiques minuscules",
"error.validation.alphanum":
"Veuillez ne saisir que des minuscules de a à z et des chiffres de 0 à 9",
"error.validation.between":
"Veuillez saisir une valeur entre «&nbsp;{min}&nbsp;» et «&nbsp;{max}&nbsp;»",
"error.validation.alphanum": "Veuillez ne saisir que des minuscules de a à z et des chiffres de 0 à 9",
"error.validation.between": "Veuillez saisir une valeur entre «&nbsp;{min}&nbsp;» et «&nbsp;{max}&nbsp;»",
"error.validation.boolean": "Veuillez confirmer ou refuser",
"error.validation.contains":
"Veuillez saisir une valeur contenant «&nbsp;{needle}&nbsp;»",
"error.validation.contains": "Veuillez saisir une valeur contenant «&nbsp;{needle}&nbsp;»",
"error.validation.date": "Veuillez saisir une date valide",
"error.validation.date.after": "Veuillez saisir une date après {date}",
"error.validation.date.before": "Veuillez saisir une date avant {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Veuillez saisir une valeur inférieure à {max}",
"error.validation.match": "La valeur ne correspond pas au modèle attendu",
"error.validation.max": "Veuillez saisir une valeur inférieure ou égale à {max}",
"error.validation.maxlength":
"Veuillez saisir une valeur plus courte (max. {max} caractères)",
"error.validation.maxlength": "Veuillez saisir une valeur plus courte (max. {max} caractères)",
"error.validation.maxwords": "Veuillez ne pas saisir plus de {max} mot(s)",
"error.validation.min": "Veuillez saisir une valeur supérieure ou égale à {min}",
"error.validation.minlength":
"Veuillez saisir une valeur plus longue (min. {min} caractères)",
"error.validation.minlength": "Veuillez saisir une valeur plus longue (min. {min} caractères)",
"error.validation.minwords": "Veuillez saisir au moins {min} mot(s)",
"error.validation.more": "Veuillez saisir une valeur supérieure à {min}",
"error.validation.notcontains":
"Veuillez saisir une valeur ne contenant pas «&nbsp;{needle}&nbsp;»",
"error.validation.notin":
"Veuillez ne saisir aucun des éléments suivants: ({notIn})",
"error.validation.notcontains": "Veuillez saisir une valeur ne contenant pas «&nbsp;{needle}&nbsp;»",
"error.validation.notin": "Veuillez ne saisir aucun des éléments suivants: ({notIn})",
"error.validation.option": "Veuillez sélectionner une option valide",
"error.validation.num": "Veuillez saisir un nombre valide",
"error.validation.required": "Veuillez saisir quelque chose",
@@ -238,8 +193,7 @@
"field.structure.empty": "Pas encore dentrée",
"field.users.empty": "Pas encore dutilisateur sélectionné",
"file.delete.confirm":
"Voulez-vous vraiment supprimer <br><strong>{filename}</strong>&nbsp;?",
"file.delete.confirm": "Voulez-vous vraiment supprimer <br><strong>{filename}</strong>&nbsp;?",
"files": "Fichiers",
"files.empty": "Pas encore de fichier",
@@ -251,29 +205,22 @@
"installation": "Installation",
"installation.completed": "Le Panel a été installé",
"installation.disabled": "L'installation du Panel est désactivée par défaut sur les serveurs publics. Veuillez lancer l'installation sur un serveur local, ou activez-la avec l'option <code>panel.install</code>.",
"installation.issues.accounts":
"Le dossier <code>/site/accounts</code> nexiste pas ou nest pas accessible en écriture",
"installation.issues.content":
"Le dossier <code>/content</code> nexiste pas ou nest pas accessible en écriture",
"installation.issues.accounts": "Le dossier <code>/site/accounts</code> nexiste pas ou nest pas accessible en écriture",
"installation.issues.content": "Le dossier <code>/content</code> nexiste pas ou nest pas accessible en écriture",
"installation.issues.curl": "Lextension <code>CURL</code> est requise",
"installation.issues.headline": "Le Panel ne peut être installé",
"installation.issues.mbstring":
"Lextension <code>MB String</code> est requise",
"installation.issues.media":
"Le dossier <code>/media</code> nexiste pas ou nest pas accessible en écriture",
"installation.issues.mbstring": "Lextension <code>MB String</code> est requise",
"installation.issues.media": "Le dossier <code>/media</code> nexiste pas ou nest pas accessible en écriture",
"installation.issues.php": "Veuillez utiliser <code>PHP 7+</code>",
"installation.issues.server":
"Kirby requiert <code>Apache</code>, <code>Nginx</code> ou <code>Caddy</code>",
"installation.issues.server": "Kirby requiert <code>Apache</code>, <code>Nginx</code> ou <code>Caddy</code>",
"installation.issues.sessions": "Le dossier <code>/site/sessions</code> nexiste pas ou nest pas accessible en écriture",
"language": "Langue",
"language.code": "Code",
"language.convert": "Choisir comme langue par défaut",
"language.convert.confirm":
"<p>Souhaitez-vous vraiment convertir <strong>{name}</strong> vers la langue par défaut&nbsp;? Cette action ne peut pas être annulée.</p><p>Si <strong>{name}</strong> a un contenu non traduit, il ny aura plus de solution de secours possible et certaines parties de votre site pourraient être vides.</p>",
"language.convert.confirm": "<p>Souhaitez-vous vraiment convertir <strong>{name}</strong> vers la langue par défaut&nbsp;? Cette action ne peut pas être annulée.</p><p>Si <strong>{name}</strong> a un contenu non traduit, il ny aura plus de solution de secours possible et certaines parties de votre site pourraient être vides.</p>",
"language.create": "Ajouter une nouvelle langue",
"language.delete.confirm":
"Voulez-vous vraiment supprimer la langue <strong>{name}</strong>, ainsi que toutes ses traductions&nbsp;? Cette action ne peut être annulée&nbsp;!",
"language.delete.confirm": "Voulez-vous vraiment supprimer la langue <strong>{name}</strong>, ainsi que toutes ses traductions&nbsp;? Cette action ne peut être annulée&nbsp;!",
"language.deleted": "La langue a été supprimée",
"language.direction": "Sens de lecture",
"language.direction.ltr": "De gauche à droite",
@@ -292,8 +239,7 @@
"license": "Licence",
"license.buy": "Acheter une licence",
"license.register": "Senregistrer",
"license.register.help":
"Vous avez reçu votre numéro de licence par courriel après l'achat. Veuillez le copier et le coller ici pour l'enregistrer.",
"license.register.help": "Vous avez reçu votre numéro de licence par courriel après l'achat. Veuillez le copier et le coller ici pour l'enregistrer.",
"license.register.label": "Veuillez saisir votre numéro de licence",
"license.register.success": "Merci pour votre soutien à Kirby",
"license.unregistered": "Ceci est une démo non enregistrée de Kirby",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Veuillez sélectionner une position",
"page.changeStatus.select": "Sélectionner un nouveau statut",
"page.changeTemplate": "Changer de modèle",
"page.delete.confirm":
"Voulez-vous vraiment supprimer <strong>{title}</strong>&nbsp;?",
"page.delete.confirm.subpages":
"<strong>Cette page contient des sous-pages</strong>. <br>Toutes les sous-pages seront également supprimées.",
"page.delete.confirm": "Voulez-vous vraiment supprimer <strong>{title}</strong>&nbsp;?",
"page.delete.confirm.subpages": "<strong>Cette page contient des sous-pages</strong>. <br>Toutes les sous-pages seront également supprimées.",
"page.delete.confirm.title": "Veuillez saisir le titre de la page pour confirmer",
"page.draft.create": "Créer un brouillon",
"page.duplicate.appendix": "Copier",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Copier les pages",
"page.status": "Statut",
"page.status.draft": "Brouillon",
"page.status.draft.description":
"La page est en mode brouillon et nest visible que par les éditeurs connectés",
"page.status.draft.description": "Cette page est un brouillon et nest visible que pour les éditeurs connectés ou par un lien secret",
"page.status.listed": "Public",
"page.status.listed.description": "La page est publique pour tout le monde",
"page.status.unlisted": "Non listé",
@@ -388,6 +331,7 @@
"replace": "Remplacer",
"retry": "Essayer à nouveau",
"revert": "Revenir",
"revert.confirm": "Voulez-vous vraiment <strong>supprimer toutes les modifications non-enregistrées</strong> ?",
"role": "Rôle",
"role.admin.description": "Ladministrateur dispose de tous les droits",
@@ -451,8 +395,7 @@
"url.placeholder": "https://example.com",
"user": "Utilisateur",
"user.blueprint":
"Vous pouvez définir des sections et des champs de formulaire supplémentaires pour ce rôle dutilisateur dans <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Vous pouvez définir des sections et des champs de formulaire supplémentaires pour ce rôle dutilisateur dans <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Modifier le courriel",
"user.changeLanguage": "Modifier la langue",
"user.changeName": "Renommer cet utilisateur",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Sélectionner un nouveau rôle",
"user.create": "Ajouter un nouvel utilisateur",
"user.delete": "Supprimer cet utilisateur",
"user.delete.confirm":
"Voulez-vous vraiment supprimer <br><strong>{email}</strong>?",
"user.delete.confirm": "Voulez-vous vraiment supprimer <br><strong>{email}</strong>?",
"users": "Utilisateurs",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "A profilkép feltöltése nem sikerült",
"error.avatar.delete.fail": "A profilkép nem törölhető",
"error.avatar.dimensions.invalid":
"A profilkép maximális szélessége és magassága 3000 pixel lehet",
"error.avatar.mime.forbidden":
"A profilkép formátuma csak JPEG vagy PNG lehet",
"error.avatar.dimensions.invalid": "A profilkép maximális szélessége és magassága 3000 pixel lehet",
"error.avatar.mime.forbidden": "A profilkép formátuma csak JPEG vagy PNG lehet",
"error.blueprint.notFound": "A \"{name}\" oldalsablon nem tölthető be",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Érvénytelen konverter: \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Nincs jogosultságod megváltoztatni a \"{filename}\" fájl nevét",
"error.file.changeName.permission": "Nincs jogosultságod megváltoztatni a \"{filename}\" fájl nevét",
"error.file.duplicate": "Már létezik \"{filename}\" nevű fájl",
"error.file.extension.forbidden":
"Tiltott kiterjeszt\u00e9s\u0171 f\u00e1jl",
"error.file.extension.missing":
"Kiterjeszt\u00e9s n\u00e9lk\u00fcli f\u00e1jl nem t\u00f6lthet\u0151 fel",
"error.file.extension.forbidden": "Tiltott kiterjeszt\u00e9s\u0171 f\u00e1jl",
"error.file.extension.missing": "Kiterjeszt\u00e9s n\u00e9lk\u00fcli f\u00e1jl nem t\u00f6lthet\u0151 fel",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
"error.file.maxwidth": "The width of the image must not exceed {width} pixels",
"error.file.mime.differs":
"A feltöltött fájlnak azonos \"{mime}\" típusúnak kell lennie",
"error.file.mime.differs": "A feltöltött fájlnak azonos \"{mime}\" típusúnak kell lennie",
"error.file.mime.forbidden": "A \"{mime}\" típusú médiafájlok nem engedélyezettek",
"error.file.mime.invalid": "Invalid mime type: {mime}",
"error.file.mime.missing":
"A \"{filename}\" fájl típusa nem állapítható meg",
"error.file.mime.missing": "A \"{filename}\" fájl típusa nem állapítható meg",
"error.file.minheight": "The height of the image must be at least {height} pixels",
"error.file.minsize": "The file is too small",
"error.file.minwidth": "The width of the image must be at least {width} pixels",
@@ -90,111 +83,77 @@
"error.license.email": "Kérlek adj meg egy valós email-címet",
"error.license.verification": "A licensz nem ellenőrizhető",
"error.page.changeSlug.permission":
"Nem változtathatod meg az URL-előtagot: \"{slug}\"",
"error.page.changeStatus.incomplete":
"Az oldal hibákat tartalmaz és nem publikálható",
"error.page.changeStatus.permission":
"Az oldal státusza nem változtatható meg",
"error.page.changeStatus.toDraft.invalid":
"A(z) \"{slug}\" oldalt nem lehet piszkozattá alakítani",
"error.page.changeTemplate.invalid":
"A \"{slug}\" oldal sablonját nem lehet megváltoztatni",
"error.page.changeTemplate.permission":
"Nincs jogosultságod megváltoztatni a sablont ehhez: \"{slug}\"",
"error.page.changeSlug.permission": "Nem változtathatod meg az URL-előtagot: \"{slug}\"",
"error.page.changeStatus.incomplete": "Az oldal hibákat tartalmaz és nem publikálható",
"error.page.changeStatus.permission": "Az oldal státusza nem változtatható meg",
"error.page.changeStatus.toDraft.invalid": "A(z) \"{slug}\" oldalt nem lehet piszkozattá alakítani",
"error.page.changeTemplate.invalid": "A \"{slug}\" oldal sablonját nem lehet megváltoztatni",
"error.page.changeTemplate.permission": "Nincs jogosultságod megváltoztatni a sablont ehhez: \"{slug}\"",
"error.page.changeTitle.empty": "A cím nem lehet üres",
"error.page.changeTitle.permission":
"Nincs jogosultságod megváltoztatni a címet: \"{slug}\"",
"error.page.changeTitle.permission": "Nincs jogosultságod megváltoztatni a címet: \"{slug}\"",
"error.page.create.permission": "Nincs jogosultságod az oldal létrehozásához: \"{slug}\"",
"error.page.delete": "A(z) \"{slug}\" oldal nem törölhető",
"error.page.delete.confirm": "Megerősítéshez add meg az oldal címét",
"error.page.delete.hasChildren":
"Az oldalnak vannak aloldalai és nem törölhető",
"error.page.delete.hasChildren": "Az oldalnak vannak aloldalai és nem törölhető",
"error.page.delete.permission": "Nincs jogosultságod a(z) \"{slug}\" oldal törléséhez",
"error.page.draft.duplicate":
"Van már egy másik oldal ezzel az URL-lel: \"{slug}\"",
"error.page.duplicate":
"Van már egy másik oldal ezzel az URL-lel: \"{slug}\"",
"error.page.draft.duplicate": "Van már egy másik oldal ezzel az URL-lel: \"{slug}\"",
"error.page.duplicate": "Van már egy másik oldal ezzel az URL-lel: \"{slug}\"",
"error.page.duplicate.permission": "Nincs engedélyed a(z) \"{slug}\" másolat keszítéséhez",
"error.page.notFound": "Az oldal nem tal\u00e1lhat\u00f3",
"error.page.num.invalid":
"Kérlek megfelelő oldalszámozást adj meg. Negatív szám itt nem használható.",
"error.page.num.invalid": "Kérlek megfelelő oldalszámozást adj meg. Negatív szám itt nem használható.",
"error.page.slug.invalid": "Kérlek megfelelő URL-előtagot adj meg",
"error.page.sort.permission": "A(z) \"{slug}\" oldal nem illeszthető a sorrendbe",
"error.page.status.invalid": "Kérlek add meg a megfelelő oldalstátuszt",
"error.page.undefined": "Az oldal nem tal\u00e1lhat\u00f3",
"error.page.update.permission": "Nincs jogosultságod a(z) \"{slug}\" oldal frissítéséhez",
"error.section.files.max.plural":
"Maximum {max} fájlt adhatsz hozzá a(z) \"{section}\" szekcióhoz",
"error.section.files.max.singular":
"Nem adhatsz hozzá egynél több fájlt a(z) \"{section}\" szekcióhoz",
"error.section.files.min.plural":
"A \"{section}\" szakasz legalább {min} fájlt igényel",
"error.section.files.min.singular":
"A \"{section}\" szakasz legalább egy fájlt igényel",
"error.section.files.max.plural": "Maximum {max} fájlt adhatsz hozzá a(z) \"{section}\" szekcióhoz",
"error.section.files.max.singular": "Nem adhatsz hozzá egynél több fájlt a(z) \"{section}\" szekcióhoz",
"error.section.files.min.plural": "A \"{section}\" szakasz legalább {min} fájlt igényel",
"error.section.files.min.singular": "A \"{section}\" szakasz legalább egy fájlt igényel",
"error.section.pages.max.plural":
"Maximum {max} oldalt adhatsz hozzá a(z) \"{section}\" szekcióhoz",
"error.section.pages.max.singular":
"Nem adhatsz hozzá egynél több oldalt a(z) \"{section}\" szekcióhoz",
"error.section.pages.min.plural":
"A \"{section}\" szakasz legalább {min} oldalt igényel",
"error.section.pages.min.singular":
"A \"{section}\" szakasz legalább egy oldalt igényel",
"error.section.pages.max.plural": "Maximum {max} oldalt adhatsz hozzá a(z) \"{section}\" szekcióhoz",
"error.section.pages.max.singular": "Nem adhatsz hozzá egynél több oldalt a(z) \"{section}\" szekcióhoz",
"error.section.pages.min.plural": "A \"{section}\" szakasz legalább {min} oldalt igényel",
"error.section.pages.min.singular": "A \"{section}\" szakasz legalább egy oldalt igényel",
"error.section.notLoaded": "A(z) \"{name}\" szekció nem tölthető be",
"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":
"Nincs jogosultságod megváltoztatni az honlap címét",
"error.site.changeTitle.permission": "Nincs jogosultságod megváltoztatni az honlap címét",
"error.site.update.permission": "Nincs jogosultságod frissíteni a honlapot",
"error.template.default.notFound": "Az alapértelmezett sablon nem létezik",
"error.user.changeEmail.permission":
"Nincs jogosultságod megváltoztatni \"{name}\" felhasználó email-címét",
"error.user.changeLanguage.permission":
"Nincs jogosultságod megváltoztatni \"{name}\" felhasználó nyelvi beállításait",
"error.user.changeName.permission":
"Nincs jogosultságod megváltoztatni \"{name}\" felhasználó nevét",
"error.user.changePassword.permission":
"Nincs jogosultságod megváltoztatni \"{name}\" felhasználó jelszavát",
"error.user.changeRole.lastAdmin":
"Az egyedüli adminisztrátor szerepkörét nem lehet megváltoztatni",
"error.user.changeRole.permission":
"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.changeEmail.permission": "Nincs jogosultságod megváltoztatni \"{name}\" felhasználó email-címét",
"error.user.changeLanguage.permission": "Nincs jogosultságod megváltoztatni \"{name}\" felhasználó nyelvi beállításait",
"error.user.changeName.permission": "Nincs jogosultságod megváltoztatni \"{name}\" felhasználó nevét",
"error.user.changePassword.permission": "Nincs jogosultságod megváltoztatni \"{name}\" felhasználó jelszavát",
"error.user.changeRole.lastAdmin": "Az egyedüli adminisztrátor szerepkörét nem lehet megváltoztatni",
"error.user.changeRole.permission": "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.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.lastUser": "Nem törölheted az egyetlen felhasználót",
"error.user.delete.permission":
"Nincs jogosults\u00e1god t\u00f6r\u00f6lni ezt a felhaszn\u00e1l\u00f3t",
"error.user.duplicate":
"Már létezik felhasználó \"{email}\" email-címmel",
"error.user.delete.permission": "Nincs jogosults\u00e1god t\u00f6r\u00f6lni ezt a felhaszn\u00e1l\u00f3t",
"error.user.duplicate": "Már létezik felhasználó \"{email}\" email-címmel",
"error.user.email.invalid": "Kérlek adj meg egy valós email-címet",
"error.user.language.invalid": "Kérlek add meg a megfelelő nyelvi beállítást",
"error.user.notFound": "A felhaszn\u00e1l\u00f3 nem tal\u00e1lhat\u00f3",
"error.user.password.invalid":
"Kérlek adj meg egy megfelelő jelszót. A jelszónak legalább 8 karakter hosszúságúnak kell lennie.",
"error.user.password.invalid": "Kérlek adj meg egy megfelelő jelszót. A jelszónak legalább 8 karakter hosszúságúnak kell lennie.",
"error.user.password.notSame": "K\u00e9rlek er\u0151s\u00edtsd meg a jelsz\u00f3t",
"error.user.password.undefined": "A felhasználónak nincs jelszó megadva",
"error.user.role.invalid": "Kérlek adj meg egy megfelelő szerepkört",
"error.user.update.permission":
"Nincs jogosultságod frissíteni \"{name}\" felhasználó adatait",
"error.user.update.permission": "Nincs jogosultságod frissíteni \"{name}\" felhasználó adatait",
"error.validation.accepted": "Kérlek erősítsd meg",
"error.validation.alpha": "Kérlek csak kis betűket használj (a-z)",
"error.validation.alphanum":
"Kérlek csak kis betűket és számjegyeket használj (a-z, 0-9)",
"error.validation.between":
"Kérlek egy \"{min}\" és \"{max}\" közötti értéket adj meg",
"error.validation.alphanum": "Kérlek csak kis betűket és számjegyeket használj (a-z, 0-9)",
"error.validation.between": "Kérlek egy \"{min}\" és \"{max}\" közötti értéket adj meg",
"error.validation.boolean": "Kérlek erősítsd meg vagy vesd el",
"error.validation.contains":
"Kérlek olyan értéket adj meg, amely tartalmazza ezt: \"{needle}\"",
"error.validation.contains": "Kérlek olyan értéket adj meg, amely tartalmazza ezt: \"{needle}\"",
"error.validation.date": "Kérlek megfelelő dátumot adj meg",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "A megadott érték kevesebb legyen, mint {max}",
"error.validation.match": "A megadott érték nem felel meg az elvárt struktúrának",
"error.validation.max": "A megadott érték egyenlő vagy kevesebb legyen, mint {max}",
"error.validation.maxlength":
"Kérlek rövidebb értéket adj meg (legfeljebb {max} karakter)",
"error.validation.maxlength": "Kérlek rövidebb értéket adj meg (legfeljebb {max} karakter)",
"error.validation.maxwords": "Kérlek ide legfeljebb {max} szót írj",
"error.validation.min": "A megadott érték egyenlő vagy nagyobb legyen, mint {min}",
"error.validation.minlength":
"Kérlek hosszabb értéket adj meg (legalább {min} karakter)",
"error.validation.minlength": "Kérlek hosszabb értéket adj meg (legalább {min} karakter)",
"error.validation.minwords": "Kérlek ide legalább {min} szót írj",
"error.validation.more": "A megadott érték legyen nagyobb, mint {min} ",
"error.validation.notcontains":
"Kérlek olyan értéket adj meg, amely nem tartalmazza ezt: \"{needle}\" ",
"error.validation.notin":
"Kérlek egyiket se használd az alábbiak közül: ({notIn})",
"error.validation.notcontains": "Kérlek olyan értéket adj meg, amely nem tartalmazza ezt: \"{needle}\" ",
"error.validation.notin": "Kérlek egyiket se használd az alábbiak közül: ({notIn})",
"error.validation.option": "Kérlek válassz egy megfelelő opciót",
"error.validation.num": "Kérlek adj meg egy megfelelő számot",
"error.validation.required": "Kérlek írj be valamit",
@@ -238,8 +193,7 @@
"field.structure.empty": "Nincs m\u00e9g bejegyz\u00e9s",
"field.users.empty": "Nincs felhasználó kiválasztva",
"file.delete.confirm":
"Biztos törölni akarod ezt a fájlt: <br><strong>{filename}</strong>?",
"file.delete.confirm": "Biztos törölni akarod ezt a fájlt: <br><strong>{filename}</strong>?",
"files": "Fájlok",
"files.empty": "Még nincsenek fájlok",
@@ -251,29 +205,22 @@
"installation": "Telepítés",
"installation.completed": "A panel sikeresen telepítve",
"installation.disabled": "A panel telepítője alapértelmezés szerint le van tiltva a nyilvános szervereken. Kérlek, futtassd a telepítőt egy helyi gépen vagy engedélyezze a <code>panel.install</code> opcióval.",
"installation.issues.accounts":
"A <code>/site/accounts</code> mappa nem létezik, vagy nem írható",
"installation.issues.content":
"A <code>/content</code> mappa nem létezik vagy nem írható",
"installation.issues.accounts": "A <code>/site/accounts</code> mappa nem létezik, vagy nem írható",
"installation.issues.content": "A <code>/content</code> mappa nem létezik vagy nem írható",
"installation.issues.curl": "A <code>CURL</code> bővítmény engedélyezése szükséges",
"installation.issues.headline": "A panel telepítése sikertelen",
"installation.issues.mbstring":
"Az <code>MB String</code> bővítmény engedélyezése szükséges",
"installation.issues.media":
"A <code>/media</code> mappa nem létezik vagy nem írható",
"installation.issues.mbstring": "Az <code>MB String</code> bővítmény engedélyezése szükséges",
"installation.issues.media": "A <code>/media</code> mappa nem létezik vagy nem írható",
"installation.issues.php": "Bizonyosodj meg róla, hogy az általad használt PHP-verzió <code>PHP 7+</code>",
"installation.issues.server":
"A Kirby az alábbi szervereken futtatható: <code>Apache</code>, <code>Nginx</code> vagy <code>Caddy</code>",
"installation.issues.server": "A Kirby az alábbi szervereken futtatható: <code>Apache</code>, <code>Nginx</code> vagy <code>Caddy</code>",
"installation.issues.sessions": "A <code>/site/sessions</code> könyvtár nem létezik vagy nem írható",
"language": "Nyelv",
"language.code": "Kód",
"language.convert": "Alapértelmezettnek jelölés",
"language.convert.confirm":
"<p>Tényleg az alaőértelmezett nyelvre szeretnéd konvertálni ezt: <strong>{name}</strong>? Ez a művelet nem vonható vissza.</p><p>Ha<strong>{name}</strong> olyat is tartalmaz, amelynek nincs megfelelő fordítása, a honlapod egyes részei az új alapértelmezett nyelv hiányosságai miatt üresek maradhatnak.</p>",
"language.convert.confirm": "<p>Tényleg az alaőértelmezett nyelvre szeretnéd konvertálni ezt: <strong>{name}</strong>? Ez a művelet nem vonható vissza.</p><p>Ha<strong>{name}</strong> olyat is tartalmaz, amelynek nincs megfelelő fordítása, a honlapod egyes részei az új alapértelmezett nyelv hiányosságai miatt üresek maradhatnak.</p>",
"language.create": "Új nyelv hozzáadása",
"language.delete.confirm":
"Tényleg törölni szeretnéd a(z) <strong>{name}</strong> nyelvet, annak minden fordításával együtt? Ez a művelet nem vonható vissza!",
"language.delete.confirm": "Tényleg törölni szeretnéd a(z) <strong>{name}</strong> nyelvet, annak minden fordításával együtt? Ez a művelet nem vonható vissza!",
"language.deleted": "A nyelv törölve lett",
"language.direction": "Olvasási irány",
"language.direction.ltr": "Balról jobbra",
@@ -292,8 +239,7 @@
"license": "Kirby licenc",
"license.buy": "Licenc vásárlása",
"license.register": "Regisztráció",
"license.register.help":
"A vásárlás után emailben küldjük el a licenc-kódot. Regisztrációhoz másold ide a kapott kódot.",
"license.register.help": "A vásárlás után emailben küldjük el a licenc-kódot. Regisztrációhoz másold ide a kapott kódot.",
"license.register.label": "Kérlek írd be a licenc-kódot",
"license.register.success": "Köszönjük, hogy támogatod a Kirby-t",
"license.unregistered": "Jelenleg a Kirby nem regisztrált próbaverzióját használod",
@@ -325,7 +271,7 @@
"months.april": "\u00e1prilis",
"months.august": "augusztus",
"months.december": "december",
"months.february": "febru\u00e1r",
"months.february": "február",
"months.january": "janu\u00e1r",
"months.july": "j\u00falius",
"months.june": "j\u00fanius",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Kérlek válaszd ki a pozíciót",
"page.changeStatus.select": "Új állapot kiválasztása",
"page.changeTemplate": "Sablon módosítása",
"page.delete.confirm":
"Biztos vagy benne, hogy törlöd az alábbi oldalt: <strong>{title}</strong>?",
"page.delete.confirm.subpages":
"<strong>Ehhez az oldalhoz aloldalak tartoznak</strong>. <br>Az oldal törlésekor a hozzá tartozó aloldalak is törlődnek.",
"page.delete.confirm": "Biztos vagy benne, hogy törlöd az alábbi oldalt: <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Ehhez az oldalhoz aloldalak tartoznak</strong>. <br>Az oldal törlésekor a hozzá tartozó aloldalak is törlődnek.",
"page.delete.confirm.title": "Megerősítéshez add meg az oldal címét",
"page.draft.create": "Piszkozat létrehozása",
"page.duplicate.appendix": "Másol",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Oldalak másolása",
"page.status": "Állapot",
"page.status.draft": "Piszkozat",
"page.status.draft.description":
"Az oldal jelenleg piszkozat státuszban van és csak bejelentkezett szerkesztők számára látható",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.listed": "Publikus",
"page.status.listed.description": "Az oldal mindenki számára elérhető",
"page.status.unlisted": "Nem listázott",
@@ -388,6 +331,7 @@
"replace": "Cser\u00e9l",
"retry": "Próbáld újra",
"revert": "Visszavon\u00e1s",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "Szerepkör",
"role.admin.description": "Az adminisztrátornak minden joga van",
@@ -451,8 +395,7 @@
"url.placeholder": "https://pelda.hu",
"user": "Felhasználó",
"user.blueprint":
"Ehhez a szerepkörhöz további szekciókat és mezőket vehetsz fel a <strong>/site/blueprints/users/{role}.yml</strong> fájlban",
"user.blueprint": "Ehhez a szerepkörhöz további szekciókat és mezőket vehetsz fel a <strong>/site/blueprints/users/{role}.yml</strong> fájlban",
"user.changeEmail": "Email módosítása",
"user.changeLanguage": "Nyelv módosítása",
"user.changeName": "Felhasználó átnevezése",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Új szerepkör kiválasztása",
"user.create": "Új felhasználó hozzáadása",
"user.delete": "Felhasználó törlése",
"user.delete.confirm":
"Biztos törlöd ezt a felhasználót: <br><strong>{email}</strong>?",
"user.delete.confirm": "Biztos törlöd ezt a felhasználót: <br><strong>{email}</strong>?",
"users": "Felhasználók",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "Gambar profil tidak dapat diunggah",
"error.avatar.delete.fail": "Gambar profil tidak dapat dihapus",
"error.avatar.dimensions.invalid":
"Pastikan lebar dan tinggi gambar profil di bawah 3000 piksel",
"error.avatar.mime.forbidden":
"Gambar profil harus berupa berkas JPEG atau PNG",
"error.avatar.dimensions.invalid": "Pastikan lebar dan tinggi gambar profil di bawah 3000 piksel",
"error.avatar.mime.forbidden": "Gambar profil harus berupa berkas JPEG atau PNG",
"error.blueprint.notFound": "Cetak biru \"{name}\" tidak dapat dimuat",
@@ -54,28 +52,23 @@
"error.field.converter.invalid": "Konverter \"{converter}\" tidak valid",
"error.file.changeName.empty": "Nama harus diisi",
"error.file.changeName.permission":
"Anda tidak diizinkan mengubah nama berkas \"{filename}\"",
"error.file.changeName.permission": "Anda tidak diizinkan mengubah nama berkas \"{filename}\"",
"error.file.duplicate": "Berkas dengan nama \"{filename}\" sudah ada",
"error.file.extension.forbidden":
"Ekstensi \"{extension}\" tidak diizinkan",
"error.file.extension.missing":
"Berkas \"{filename}\" harus memiliki ekstensi",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
"error.file.maxwidth": "The width of the image must not exceed {width} pixels",
"error.file.mime.differs":
"Berkas yang diunggah harus memiliki tipe mime sama \"{mime}\"",
"error.file.extension.forbidden": "Ekstensi \"{extension}\" tidak diizinkan",
"error.file.extension.missing": "Berkas \"{filename}\" harus memiliki ekstensi",
"error.file.maxheight": "Tinggi gambar tidak boleh melebihi {height} piksel",
"error.file.maxsize": "Berkas terlalu besar",
"error.file.maxwidth": "Lebar gambar tidak boleh melebihi {width} piksel",
"error.file.mime.differs": "Berkas yang diunggah harus memiliki tipe mime sama \"{mime}\"",
"error.file.mime.forbidden": "Media dengan tipe mime \"{mime}\" tidak diizinkan",
"error.file.mime.invalid": "Invalid mime type: {mime}",
"error.file.mime.missing":
"Tipe media untuk \"{filename}\" tidak dapat dideteksi",
"error.file.minheight": "The height of the image must be at least {height} pixels",
"error.file.minsize": "The file is too small",
"error.file.minwidth": "The width of the image must be at least {width} pixels",
"error.file.mime.invalid": "Tipe mime tidak valid: {mime}",
"error.file.mime.missing": "Tipe media untuk \"{filename}\" tidak dapat dideteksi",
"error.file.minheight": "Tinggi gambar setidaknya {height} piksel",
"error.file.minsize": "Berkas terlalu kecil",
"error.file.minwidth": "Lebar gambar setidaknya {width} piksel",
"error.file.name.missing": "Nama berkas harus diisi",
"error.file.notFound": "Berkas \"{filename}\" tidak dapat ditemukan",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
"error.file.orientation": "Orientasi gambar harus \"{orientation}\"",
"error.file.type.forbidden": "Anda tidak diizinkan mengunggah berkas dengan tipe {type}",
"error.file.undefined": "Berkas tidak dapat ditemukan",
@@ -90,111 +83,77 @@
"error.license.email": "Masukkan surel yang valid",
"error.license.verification": "Lisensi tidak dapat diverifikasi",
"error.page.changeSlug.permission":
"Anda tidak diizinkan mengubah akhiran URL untuk \"{slug}\"",
"error.page.changeStatus.incomplete":
"Halaman memiliki kesalahan dan tidak dapat diterbitkan",
"error.page.changeStatus.permission":
"Status halaman ini tidak dapat diubah",
"error.page.changeStatus.toDraft.invalid":
"Halaman \"{slug}\" tidak dapat dikonversi menjadi draf",
"error.page.changeTemplate.invalid":
"Templat untuk halaman \"{slug}\" tidak dapat diubah",
"error.page.changeTemplate.permission":
"Anda tidak diizinkan mengubah templat dari \"{slug}\"",
"error.page.changeSlug.permission": "Anda tidak diizinkan mengubah akhiran URL untuk \"{slug}\"",
"error.page.changeStatus.incomplete": "Halaman memiliki kesalahan dan tidak dapat diterbitkan",
"error.page.changeStatus.permission": "Status halaman ini tidak dapat diubah",
"error.page.changeStatus.toDraft.invalid": "Halaman \"{slug}\" tidak dapat dikonversi menjadi draf",
"error.page.changeTemplate.invalid": "Templat untuk halaman \"{slug}\" tidak dapat diubah",
"error.page.changeTemplate.permission": "Anda tidak diizinkan mengubah templat dari \"{slug}\"",
"error.page.changeTitle.empty": "Judul harus diisi",
"error.page.changeTitle.permission":
"Anda tidak diizinkan mengubah judul dari \"{slug}\"",
"error.page.changeTitle.permission": "Anda tidak diizinkan mengubah judul dari \"{slug}\"",
"error.page.create.permission": "Anda tidak diizinkan membuat \"{slug}\"",
"error.page.delete": "Halaman \"{slug}\" tidak dapat dihapus",
"error.page.delete.confirm": "Masukkan judul halaman untuk mengonfirmasi",
"error.page.delete.hasChildren":
"Halaman ini memiliki sub-halaman dan tidak dapat dihapus",
"error.page.delete.hasChildren": "Halaman ini memiliki sub-halaman dan tidak dapat dihapus",
"error.page.delete.permission": "Anda tidak diizinkan menghapus \"{slug}\"",
"error.page.draft.duplicate":
"Draf halaman dengan akhiran URL \"{slug}\" sudah ada",
"error.page.duplicate":
"Halaman dengan akhiran URL \"{slug}\" sudah ada",
"error.page.draft.duplicate": "Draf halaman dengan akhiran URL \"{slug}\" sudah ada",
"error.page.duplicate": "Halaman dengan akhiran URL \"{slug}\" sudah ada",
"error.page.duplicate.permission": "Anda tidak diizinkan menduplikasi \"{slug}\"",
"error.page.notFound": "Halaman \"{slug}\" tidak dapat ditemukan",
"error.page.num.invalid":
"Masukkan nomor urut yang valid. Nomor tidak boleh negatif.",
"error.page.num.invalid": "Masukkan nomor urut yang valid. Nomor tidak boleh negatif.",
"error.page.slug.invalid": "Masukkan awalan URL yang valid",
"error.page.sort.permission": "Halaman \"{slug}\" tidak dapat diurutkan",
"error.page.status.invalid": "Atur status halaman yang valid",
"error.page.undefined": "Halaman tidak dapat ditemukan",
"error.page.update.permission": "Anda tidak diizinkan memperbaharui \"{slug}\"",
"error.section.files.max.plural":
"Anda hanya boleh menambahkan maksimal {max} berkas ke bagian \"{section}\"",
"error.section.files.max.singular":
"Anda hanya boleh menambahkan satu berkas ke bagian \"{section}\"",
"error.section.files.min.plural":
"Bagian \"{section}\" setidaknya memiliki {min} berkas",
"error.section.files.min.singular":
"Bagian \"{section}\" setidaknya memiliki satu berkas",
"error.section.files.max.plural": "Anda hanya boleh menambahkan maksimal {max} berkas ke bagian \"{section}\"",
"error.section.files.max.singular": "Anda hanya boleh menambahkan satu berkas ke bagian \"{section}\"",
"error.section.files.min.plural": "Bagian \"{section}\" setidaknya memiliki {min} berkas",
"error.section.files.min.singular": "Bagian \"{section}\" setidaknya memiliki satu berkas",
"error.section.pages.max.plural":
"Anda hanya boleh menambahkan maksimal {max} halaman ke bagian \"{section}\"",
"error.section.pages.max.singular":
"Anda hanya boleh menambahkan satu halaman ke bagian \"{section}\"",
"error.section.pages.min.plural":
"Bagian \"{section}\" setidaknya memiliki {min} halaman",
"error.section.pages.min.singular":
"Bagian \"{section}\" setidaknya memiliki satu halaman",
"error.section.pages.max.plural": "Anda hanya boleh menambahkan maksimal {max} halaman ke bagian \"{section}\"",
"error.section.pages.max.singular": "Anda hanya boleh menambahkan satu halaman ke bagian \"{section}\"",
"error.section.pages.min.plural": "Bagian \"{section}\" setidaknya memiliki {min} halaman",
"error.section.pages.min.singular": "Bagian \"{section}\" setidaknya memiliki satu halaman",
"error.section.notLoaded": "Bagian \"{name}\" tidak dapat dimuat",
"error.section.type.invalid": "Tipe bagian \"{type}\" tidak valid",
"error.site.changeTitle.empty": "Judul harus diisi",
"error.site.changeTitle.permission":
"Anda tidak diizinkan mengubah judul situs",
"error.site.changeTitle.permission": "Anda tidak diizinkan mengubah judul situs",
"error.site.update.permission": "Anda tidak diizinkan memperbaharui situs",
"error.template.default.notFound": "Templat bawaan tidak ada",
"error.user.changeEmail.permission":
"Anda tidak diizinkan mengubah surel dari pengguna \"{name}\"",
"error.user.changeLanguage.permission":
"Anda tidak diizinkan mengubah bahasa dari pengguna \"{name}\"",
"error.user.changeName.permission":
"Anda tidak diizinkan mengubah nama dari pengguna \"{name}\"",
"error.user.changePassword.permission":
"Anda tidak diizinkan mengubah sandi dari pengguna \"{name}\"",
"error.user.changeRole.lastAdmin":
"Peran dari admin satu-satunya tidak dapat diubah",
"error.user.changeRole.permission":
"Anda tidak diizinkan mengubah peran dari pengguna \"{name}\"",
"error.user.changeRole.toAdmin":
"Anda tidak diizinkan mempromosikan seseorang menjadi admin",
"error.user.changeEmail.permission": "Anda tidak diizinkan mengubah surel dari pengguna \"{name}\"",
"error.user.changeLanguage.permission": "Anda tidak diizinkan mengubah bahasa dari pengguna \"{name}\"",
"error.user.changeName.permission": "Anda tidak diizinkan mengubah nama dari pengguna \"{name}\"",
"error.user.changePassword.permission": "Anda tidak diizinkan mengubah sandi dari pengguna \"{name}\"",
"error.user.changeRole.lastAdmin": "Peran dari admin satu-satunya tidak dapat diubah",
"error.user.changeRole.permission": "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.delete": "Pengguna \"{nama}\" tidak dapat dihapus",
"error.user.delete.lastAdmin": "Admin satu-satunya tidak dapat dihapus",
"error.user.delete.lastUser": "Pengguna satu-satunya tidak dapat dihapus",
"error.user.delete.permission":
"Anda tidak diizinkan menghapus pengguna \"{name}\"",
"error.user.duplicate":
"Pengguna dengan surel \"{email}\" sudah ada",
"error.user.delete.permission": "Anda tidak diizinkan menghapus pengguna \"{name}\"",
"error.user.duplicate": "Pengguna dengan surel \"{email}\" sudah ada",
"error.user.email.invalid": "Masukkan surel yang valid",
"error.user.language.invalid": "Masukkan bahasa yang valid",
"error.user.notFound": "Pengguna \"{name}\" tidak dapat ditemukan",
"error.user.password.invalid":
"Masukkan sandi yang valid. Sandi setidaknya mengandung 8 karakter.",
"error.user.password.invalid": "Masukkan sandi yang valid. Sandi setidaknya mengandung 8 karakter.",
"error.user.password.notSame": "Sandi tidak cocok",
"error.user.password.undefined": "Pengguna tidak memiliki sandi",
"error.user.role.invalid": "Masukkan peran yang valid",
"error.user.update.permission":
"Anda tidak diizinkan memperbaharui pengguna \"{name}\"",
"error.user.update.permission": "Anda tidak diizinkan memperbaharui pengguna \"{name}\"",
"error.validation.accepted": "Mohon konfirmasi",
"error.validation.alpha": "Masukkan hanya karakter a-z",
"error.validation.alphanum":
"Masukkan hanya karakter a-z atau 0-9",
"error.validation.between":
"Masukkan nilai antara \"{min}\" dan \"{max}\"",
"error.validation.alphanum": "Masukkan hanya karakter a-z atau 0-9",
"error.validation.between": "Masukkan nilai antara \"{min}\" dan \"{max}\"",
"error.validation.boolean": "Mohon konfirmasi atau tolak",
"error.validation.contains":
"Masukkan nilai yang mengandung \"{needle}\"",
"error.validation.contains": "Masukkan nilai yang mengandung \"{needle}\"",
"error.validation.date": "Masukkan tanggal yang valid",
"error.validation.date.after": "Masukkan tanggal setelah {date}",
"error.validation.date.before": "Masukkan tanggal sebelum {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Masukkan nilai kurang dari {max}",
"error.validation.match": "Nilai tidak cocok dengan pola yang semestinya",
"error.validation.max": "Masukkan nilai yang sama dengan atau kurang dari {max}",
"error.validation.maxlength":
"Masukkan nilai yang lebih pendek. (maksimal {max} karakter)",
"error.validation.maxlength": "Masukkan nilai yang lebih pendek. (maksimal {max} karakter)",
"error.validation.maxwords": "Masukkan tidak lebih dari {max} kata",
"error.validation.min": "Masukkan nilai yang sama dengan atau lebih dari {min}",
"error.validation.minlength":
"Masukkan nilai yang lebih panjang. (minimal {min} karakter)",
"error.validation.minlength": "Masukkan nilai yang lebih panjang. (minimal {min} karakter)",
"error.validation.minwords": "Masukkan setidaknya {min} kata",
"error.validation.more": "Masukkan nilai yang lebih besar dari {min}",
"error.validation.notcontains":
"Masukkan nilai yang tidak mengandung \"{needle}\"",
"error.validation.notin":
"Jangan masukkan satupun: ({notIn})",
"error.validation.notcontains": "Masukkan nilai yang tidak mengandung \"{needle}\"",
"error.validation.notin": "Jangan masukkan satupun: ({notIn})",
"error.validation.option": "Pilih opsi yang valid",
"error.validation.num": "Masukkan nomor yang valid",
"error.validation.required": "Masukkan sesuatu",
@@ -238,8 +193,7 @@
"field.structure.empty": "Belum ada entri",
"field.users.empty": "Belum ada pengguna yang dipilih",
"file.delete.confirm":
"Anda yakin menghapus <br> <strong>{filename}</strong>?",
"file.delete.confirm": "Anda yakin menghapus <br> <strong>{filename}</strong>?",
"files": "Berkas",
"files.empty": "Belum ada berkas",
@@ -251,29 +205,22 @@
"installation": "Pemasangan",
"installation.completed": "Panel sudah dipasang",
"installation.disabled": "Pemasang panel dimatikan di server publik secara bawaan. Mohon jalankan di server lokal atau ubah opsi <code>panel.install</code> untuk menjalankan di server saat ini.",
"installation.issues.accounts":
"Folder <code>/site/accounts</code> tidak ada atau tidak dapat ditulis",
"installation.issues.content":
"Folder <code>/content</code> tidak ada atau tidak dapat ditulis",
"installation.issues.accounts": "Folder <code>/site/accounts</code> tidak ada atau tidak dapat ditulis",
"installation.issues.content": "Folder <code>/content</code> tidak ada atau tidak dapat ditulis",
"installation.issues.curl": "Ekstensi <code>CURL</code> diperlukan",
"installation.issues.headline": "Panel tidak dapat dipasang",
"installation.issues.mbstring":
"Ekstensi <code>MB String</code> diperlukan",
"installation.issues.media":
"Folder <code>/media</code> tidak ada atau tidak dapat ditulis",
"installation.issues.mbstring": "Ekstensi <code>MB String</code> diperlukan",
"installation.issues.media": "Folder <code>/media</code> tidak ada atau tidak dapat ditulis",
"installation.issues.php": "Pastikan Anda menggunakan <code>PHP 7+</code>",
"installation.issues.server":
"Kirby memerlukan <code>Apache</code>, <code>Nginx</code>, atau <code>Caddy</code>",
"installation.issues.server": "Kirby memerlukan <code>Apache</code>, <code>Nginx</code>, atau <code>Caddy</code>",
"installation.issues.sessions": "Folder <code>/site/sessions</code> tidak ada atau tidak dapat ditulis",
"language": "Bahasa",
"language.code": "Kode",
"language.convert": "Atur sebagai bawaan",
"language.convert.confirm":
"<p>Anda yakin mengubah <strong>{name}</strong> menjadi bahasa bawaan? Ini tidak dapat dibatalkan.</p> <p>Jika <strong>{name}</strong> memiliki konten yang tidak diterjemahkan, tidak akan ada pengganti yang valid dan dapat menyebabkan beberapa bagian dari situs Anda menjadi kosong.</p>",
"language.convert.confirm": "<p>Anda yakin mengubah <strong>{name}</strong> menjadi bahasa bawaan? Ini tidak dapat dibatalkan.</p> <p>Jika <strong>{name}</strong> memiliki konten yang tidak diterjemahkan, tidak akan ada pengganti yang valid dan dapat menyebabkan beberapa bagian dari situs Anda menjadi kosong.</p>",
"language.create": "Tambah bahasa baru",
"language.delete.confirm":
"Anda yakin menghapus bahasa <strong>{name}</strong> termasuk semua terjemahannya? Ini tidak dapat dibatalkan!",
"language.delete.confirm": "Anda yakin menghapus bahasa <strong>{name}</strong> termasuk semua terjemahannya? Ini tidak dapat dibatalkan!",
"language.deleted": "Bahasa sudah dihapus",
"language.direction": "Arah baca",
"language.direction.ltr": "Kiri ke kanan",
@@ -292,8 +239,7 @@
"license": "Lisensi Kirby",
"license.buy": "Beli lisensi",
"license.register": "Daftar",
"license.register.help":
"Anda menerima kode lisensi via surel setelah pembelian. Salin dan tempel kode tersebut untuk mendaftarkan.",
"license.register.help": "Anda menerima kode lisensi via surel setelah pembelian. Salin dan tempel kode tersebut untuk mendaftarkan.",
"license.register.label": "Masukkan kode lisensi Anda",
"license.register.success": "Terima kasih atas dukungan untuk Kirby",
"license.unregistered": "Ini adalah demo tidak diregistrasi dari Kirby",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Pilih posisi",
"page.changeStatus.select": "Pilih status baru",
"page.changeTemplate": "Ubah templat",
"page.delete.confirm":
"Anda yakin menghapus <strong>{title}</strong>?",
"page.delete.confirm.subpages":
"<strong>Halaman ini memiliki sub-halaman</strong>. <br>Semua sub-halaman akan ikut dihapus.",
"page.delete.confirm": "Anda yakin menghapus <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Halaman ini memiliki sub-halaman</strong>. <br>Semua sub-halaman akan ikut dihapus.",
"page.delete.confirm.title": "Masukkan judul halaman untuk mengonfirmasi",
"page.draft.create": "Buat draf",
"page.duplicate.appendix": "Salin",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Salin halaman",
"page.status": "Status",
"page.status.draft": "Draf",
"page.status.draft.description":
"Halaman hanya terlihat untuk penyunting",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.listed": "Publik",
"page.status.listed.description": "Halaman publik untuk siapapun",
"page.status.unlisted": "Tidak tercantum",
@@ -388,6 +331,7 @@
"replace": "Ganti",
"retry": "Coba lagi",
"revert": "Kembalikan",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "Peran",
"role.admin.description": "Admin memiliki semua izin",
@@ -451,8 +395,7 @@
"url.placeholder": "https://contoh.com",
"user": "Pengguna",
"user.blueprint":
"Anda dapat mendefinisikan bagian tambahan dan bidang formulir untuk peran pengguna ini di <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Anda dapat mendefinisikan bagian tambahan dan bidang formulir untuk peran pengguna ini di <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Ubah surel",
"user.changeLanguage": "Ubah bahasa",
"user.changeName": "Ubah nama pengguna ini",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Pilih peran baru",
"user.create": "Tambah pengguna baru",
"user.delete": "Hapus pengguna ini",
"user.delete.confirm":
"Anda yakin menghapus <br><strong>{email}</strong>?",
"user.delete.confirm": "Anda yakin menghapus <br><strong>{email}</strong>?",
"users": "Pengguna",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "Non è stato possibile caricare l'immagine del profilo",
"error.avatar.delete.fail": "Non è stato possibile eliminare l'immagine del profilo",
"error.avatar.dimensions.invalid":
"Per favore mantieni l'altezza e la larghezza dell'immagine del profilo inferiore ai 3000 pixel",
"error.avatar.mime.forbidden":
"L'immagine del profilo dev'essere un file JPEG o PNG",
"error.avatar.dimensions.invalid": "Per favore mantieni l'altezza e la larghezza dell'immagine del profilo inferiore ai 3000 pixel",
"error.avatar.mime.forbidden": "L'immagine del profilo dev'essere un file JPEG o PNG",
"error.blueprint.notFound": "Non è stato possibile caricare il blueprint \"{name}\"",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Convertitore \"{converter}\" non valido",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Non ti è permesso modificare il nome di \"{filename}\"",
"error.file.changeName.permission": "Non ti è permesso modificare il nome di \"{filename}\"",
"error.file.duplicate": "Un file con il nome \"{filename}\" esiste già",
"error.file.extension.forbidden":
"L'estensione \"{extension}\" non è consentita",
"error.file.extension.missing":
"Il file \"{filename}\" non ha estensione",
"error.file.extension.forbidden": "L'estensione \"{extension}\" non è consentita",
"error.file.extension.missing": "Il file \"{filename}\" non ha estensione",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
"error.file.maxwidth": "The width of the image must not exceed {width} pixels",
"error.file.mime.differs":
"Il file caricato dev'essere dello stesso MIME type \"{mime}\"",
"error.file.mime.differs": "Il file caricato dev'essere dello stesso MIME type \"{mime}\"",
"error.file.mime.forbidden": "Il MIME type \"{mime}\" non è consentito",
"error.file.mime.invalid": "Invalid mime type: {mime}",
"error.file.mime.missing":
"Il MIME type per \"{filename}\" non può essere rilevato",
"error.file.mime.missing": "Il MIME type per \"{filename}\" non può essere rilevato",
"error.file.minheight": "The height of the image must be at least {height} pixels",
"error.file.minsize": "The file is too small",
"error.file.minwidth": "The width of the image must be at least {width} pixels",
@@ -90,111 +83,77 @@
"error.license.email": "Inserisci un indirizzo email valido",
"error.license.verification": "Non è stato possibile verificare la licenza",
"error.page.changeSlug.permission":
"Non ti è permesso cambiare l'URL di \"{slug}\"",
"error.page.changeStatus.incomplete":
"La pagina contiene errori e non può essere pubblicata",
"error.page.changeStatus.permission":
"Lo stato di questa pagina non può essere cambiato",
"error.page.changeStatus.toDraft.invalid":
"La pagina \"{slug}\" non può essere convertita in bozza",
"error.page.changeTemplate.invalid":
"Il template della pagina \"{slug}\" non può essere cambiato",
"error.page.changeTemplate.permission":
"Non ti è permesso modificare il template di \"{slug}\"",
"error.page.changeSlug.permission": "Non ti è permesso cambiare l'URL di \"{slug}\"",
"error.page.changeStatus.incomplete": "La pagina contiene errori e non può essere pubblicata",
"error.page.changeStatus.permission": "Lo stato di questa pagina non può essere cambiato",
"error.page.changeStatus.toDraft.invalid": "La pagina \"{slug}\" non può essere convertita in bozza",
"error.page.changeTemplate.invalid": "Il template della pagina \"{slug}\" non può essere cambiato",
"error.page.changeTemplate.permission": "Non ti è permesso modificare il template di \"{slug}\"",
"error.page.changeTitle.empty": "Il titolo non può essere vuoto",
"error.page.changeTitle.permission":
"Non ti è permesso modificare il titolo di \"{slug}\"",
"error.page.changeTitle.permission": "Non ti è permesso modificare il titolo di \"{slug}\"",
"error.page.create.permission": "Non ti è permesso creare \"{slug}\"",
"error.page.delete": "La pagina \"{slug}\" non può essere eliminata",
"error.page.delete.confirm": "Inserisci il titolo della pagina per confermare",
"error.page.delete.hasChildren":
"La pagina ha sottopagine e non può essere eliminata",
"error.page.delete.hasChildren": "La pagina ha sottopagine e non può essere eliminata",
"error.page.delete.permission": "Non ti è permesso eliminare \"{slug}\"",
"error.page.draft.duplicate":
"Una bozza di pagina con l'URL \"{slug}\" esiste già",
"error.page.duplicate":
"Una pagina con l'URL \"{slug}\" esiste già",
"error.page.draft.duplicate": "Una bozza di pagina con l'URL \"{slug}\" esiste già",
"error.page.duplicate": "Una pagina con l'URL \"{slug}\" esiste già",
"error.page.duplicate.permission": "Non ti è permesso duplicare \"{slug}\"",
"error.page.notFound": "La pagina \"{slug}\" non è stata trovata",
"error.page.num.invalid":
"Inserisci un numero di ordinamento valido. I numeri non devono essere negativi",
"error.page.num.invalid": "Inserisci un numero di ordinamento valido. I numeri non devono essere negativi",
"error.page.slug.invalid": "Inserisci un prefisso URL valido",
"error.page.sort.permission": "La pagina \"{slug}\" non può essere ordinata",
"error.page.status.invalid": "Imposta uno stato valido per la pagina",
"error.page.undefined": "La pagina non \u00e8 stata trovata",
"error.page.update.permission": "Non ti è permesso modificare \"{slug}\"",
"error.section.files.max.plural":
"Non puoi aggiungere più di {max} file alla sezione \"{section}\"",
"error.section.files.max.singular":
"Non puoi aggiungere più di un file alla sezione \"{section}\"",
"error.section.files.min.plural":
"La sezione \"{section}\" richiede almeno {min} file",
"error.section.files.min.singular":
"La sezione \"{section}\" richiede almeno un file",
"error.section.files.max.plural": "Non puoi aggiungere più di {max} file alla sezione \"{section}\"",
"error.section.files.max.singular": "Non puoi aggiungere più di un file alla sezione \"{section}\"",
"error.section.files.min.plural": "La sezione \"{section}\" richiede almeno {min} file",
"error.section.files.min.singular": "La sezione \"{section}\" richiede almeno un file",
"error.section.pages.max.plural":
"Non puoi aggiungere più di {max} pagine alla sezione \"{section}\"",
"error.section.pages.max.singular":
"Non puoi aggiungere più di una pagina alla sezione \"{section}\"",
"error.section.pages.min.plural":
"La sezione \"{section}\" richiede almeno {min} pagine",
"error.section.pages.min.singular":
"La sezione \"{section}\" richiede almeno una pagina",
"error.section.pages.max.plural": "Non puoi aggiungere più di {max} pagine alla sezione \"{section}\"",
"error.section.pages.max.singular": "Non puoi aggiungere più di una pagina alla sezione \"{section}\"",
"error.section.pages.min.plural": "La sezione \"{section}\" richiede almeno {min} pagine",
"error.section.pages.min.singular": "La sezione \"{section}\" richiede almeno una pagina",
"error.section.notLoaded": "Non è stato possibile caricare la sezione \"{name}\"",
"error.section.type.invalid": "Il tipo di sezione \"{type}\" non è valido",
"error.site.changeTitle.empty": "Il titolo non può essere vuoto",
"error.site.changeTitle.permission":
"Non ti è permesso modificare il titolo del sito",
"error.site.changeTitle.permission": "Non ti è permesso modificare il titolo del sito",
"error.site.update.permission": "Non ti è permesso modificare i contenuti globali del sito",
"error.template.default.notFound": "Il template \"default\" non esiste",
"error.user.changeEmail.permission":
"Non ti è permesso modificare l'indirizzo email di \"{name}\"",
"error.user.changeLanguage.permission":
"Non ti è permesso modificare la lingua per l'utente \"{name}\"",
"error.user.changeName.permission":
"Non ti è permesso modificare il nome dell'utente \"{name}\"",
"error.user.changePassword.permission":
"Non ti è permesso modificare la password dell'utente \"{name}\"",
"error.user.changeRole.lastAdmin":
"Il ruolo dell'ultimo amministratore non può esser cambiato",
"error.user.changeRole.permission":
"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.changeEmail.permission": "Non ti è permesso modificare l'indirizzo email di \"{name}\"",
"error.user.changeLanguage.permission": "Non ti è permesso modificare la lingua per l'utente \"{name}\"",
"error.user.changeName.permission": "Non ti è permesso modificare il nome dell'utente \"{name}\"",
"error.user.changePassword.permission": "Non ti è permesso modificare la password dell'utente \"{name}\"",
"error.user.changeRole.lastAdmin": "Il ruolo dell'ultimo amministratore non può esser cambiato",
"error.user.changeRole.permission": "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.delete": "L'utente non pu\u00f2 essere eliminato",
"error.user.delete.lastAdmin": "L'ultimo amministratore non può essere eliminato",
"error.user.delete.lastUser": "L'ultimo utente non può essere eliminato",
"error.user.delete.permission":
"Non ti \u00e8 permesso eliminare questo utente ",
"error.user.duplicate":
"Esiste già un utente con l'indirizzo email \"{email}\"",
"error.user.delete.permission": "Non ti \u00e8 permesso eliminare questo utente ",
"error.user.duplicate": "Esiste già un utente con l'indirizzo email \"{email}\"",
"error.user.email.invalid": "Inserisci un indirizzo email valido",
"error.user.language.invalid": "Inserisci una lingua valida",
"error.user.notFound": "L'utente non \u00e8 stato trovato",
"error.user.password.invalid":
"Per favore inserisci una password valida. Le password devono essere lunghe almeno 8 caratteri",
"error.user.password.invalid": "Per favore inserisci una password valida. Le password devono essere lunghe almeno 8 caratteri",
"error.user.password.notSame": "Le password non corrispondono",
"error.user.password.undefined": "L'utente non ha una password",
"error.user.role.invalid": "Inserisci un ruolo valido",
"error.user.update.permission":
"Non ti è permesso aggiornare l'utente \"{name}\"",
"error.user.update.permission": "Non ti è permesso aggiornare l'utente \"{name}\"",
"error.validation.accepted": "Per favore conferma",
"error.validation.alpha": "Puoi inserire solo caratteri tra a-z",
"error.validation.alphanum":
"Puoi inserire solo caratteri tra a-z e numeri 0-9",
"error.validation.between":
"Inserisci un valore tra \"{min}\" e \"{max}\"",
"error.validation.alphanum": "Puoi inserire solo caratteri tra a-z e numeri 0-9",
"error.validation.between": "Inserisci un valore tra \"{min}\" e \"{max}\"",
"error.validation.boolean": "Per favore conferma o nega",
"error.validation.contains":
"Inserisci un valore che contiene \"{needle}\"",
"error.validation.contains": "Inserisci un valore che contiene \"{needle}\"",
"error.validation.date": "Inserisci una data valida",
"error.validation.date.after": "Inserisci una data dopo il {date}",
"error.validation.date.before": "Inserisci una data prima del {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Inserisci un valore inferiore a {max}",
"error.validation.match": "Il valore non corrisponde al pattern previsto",
"error.validation.max": "Inserisci un valore inferiore o uguale a {max}",
"error.validation.maxlength":
"Inserisci un testo più corto. (max. {max} caratteri)",
"error.validation.maxlength": "Inserisci un testo più corto. (max. {max} caratteri)",
"error.validation.maxwords": "Non inserire più di {max} parola/e",
"error.validation.min": "Inserisci un valore superiore o uguale a {min}",
"error.validation.minlength":
"Inserisci un testo più lungo. (min. {min} caratteri)",
"error.validation.minlength": "Inserisci un testo più lungo. (min. {min} caratteri)",
"error.validation.minwords": "Inserisci almeno {min} parola/e",
"error.validation.more": "Inserisci un valore superiore a {min}",
"error.validation.notcontains":
"Inserisci un valore che non contenga \"{needle}\"",
"error.validation.notin":
"Non inserire nessuno dei valori seguenti: ({notIn})",
"error.validation.notcontains": "Inserisci un valore che non contenga \"{needle}\"",
"error.validation.notin": "Non inserire nessuno dei valori seguenti: ({notIn})",
"error.validation.option": "Seleziona un'opzione valida",
"error.validation.num": "Inserisci un numero valido",
"error.validation.required": "Inserisci qualcosa",
@@ -238,8 +193,7 @@
"field.structure.empty": "Non ci sono ancora elementi.",
"field.users.empty": "Nessun utente selezionato",
"file.delete.confirm":
"Sei sicuro di voler eliminare questo file?",
"file.delete.confirm": "Sei sicuro di voler eliminare questo file?",
"files": "Files",
"files.empty": "Nessun file caricato",
@@ -251,29 +205,22 @@
"installation": "Installazione",
"installation.completed": "Il pannello è stato installato",
"installation.disabled": "L'installazione del pannello è disabilitata di default sui server pubblici. Esegui l'installazione in locale oppure abilitala usando l'opzione <code>panel.install</code>.",
"installation.issues.accounts":
"<code>/site/accounts</code> non esiste o non dispone dei permessi di scrittura",
"installation.issues.content":
"La cartella <code>/content</code> non esiste o non dispone dei permessi di scrittura",
"installation.issues.accounts": "<code>/site/accounts</code> non esiste o non dispone dei permessi di scrittura",
"installation.issues.content": "La cartella <code>/content</code> non esiste o non dispone dei permessi di scrittura",
"installation.issues.curl": "È necessaria l'estensione <code>CURL</code>",
"installation.issues.headline": "Il pannello non può esser installato",
"installation.issues.mbstring":
"È necessaria l'estensione <code>MB String</code>",
"installation.issues.media":
"La cartella <code>/media</code> non esiste o non dispone dei permessi di scrittura",
"installation.issues.mbstring": "È necessaria l'estensione <code>MB String</code>",
"installation.issues.media": "La cartella <code>/media</code> non esiste o non dispone dei permessi di scrittura",
"installation.issues.php": "Assicurati di utilizzare <code>PHP 7.1+</code>",
"installation.issues.server":
"Kirby necessita di <code>Apache</code>, <code>Nginx</code> o <code>Caddy</code>",
"installation.issues.server": "Kirby necessita di <code>Apache</code>, <code>Nginx</code> o <code>Caddy</code>",
"installation.issues.sessions": "La cartella <code>/site/sessions</code>non esiste o non dispone dei permessi di scrittura",
"language": "Lingua",
"language.code": "Codice",
"language.convert": "Imposta come predefinito",
"language.convert.confirm":
"<p>Sei sicuro di voler convertire <strong>{name}</strong> nella lingua predefinita? Questa operazione non può essere annullata. </p><p>Se <strong>{name}</strong> non contiene tutte le traduzioni, non ci sarà più una versione alternativa valida e parti del sito potrebbero rimanere vuote.</p>",
"language.convert.confirm": "<p>Sei sicuro di voler convertire <strong>{name}</strong> nella lingua predefinita? Questa operazione non può essere annullata. </p><p>Se <strong>{name}</strong> non contiene tutte le traduzioni, non ci sarà più una versione alternativa valida e parti del sito potrebbero rimanere vuote.</p>",
"language.create": "Aggiungi una nuova lingua",
"language.delete.confirm":
"Sei sicuro di voler eliminare la lingua <strong>{name}</strong> con tutte le traduzioni? Non sarà possibile annullare!",
"language.delete.confirm": "Sei sicuro di voler eliminare la lingua <strong>{name}</strong> con tutte le traduzioni? Non sarà possibile annullare!",
"language.deleted": "La lingua è stata eliminata",
"language.direction": "Direzione di lettura",
"language.direction.ltr": "Sinistra a destra",
@@ -292,8 +239,7 @@
"license": "Licenza di Kirby",
"license.buy": "Acquista una licenza",
"license.register": "Registra",
"license.register.help":
"Hai ricevuto il codice di licenza tramite email dopo l'acquisto. Per favore inseriscilo per registrare Kirby.",
"license.register.help": "Hai ricevuto il codice di licenza tramite email dopo l'acquisto. Per favore inseriscilo per registrare Kirby.",
"license.register.label": "Inserisci il codice di licenza",
"license.register.success": "Ti ringraziamo per aver supportato Kirby",
"license.unregistered": "Questa è una versione demo di Kirby non registrata",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Scegli una posizione",
"page.changeStatus.select": "Seleziona un nuovo stato",
"page.changeTemplate": "Cambia template",
"page.delete.confirm":
"Sei sicuro di voler eliminare questa pagina?",
"page.delete.confirm.subpages":
"<strong>Questa pagina ha sottopagine</strong>. <br>Anche tutte le sottopagine verranno eliminate.",
"page.delete.confirm": "Sei sicuro di voler eliminare questa pagina?",
"page.delete.confirm.subpages": "<strong>Questa pagina ha sottopagine</strong>. <br>Anche tutte le sottopagine verranno eliminate.",
"page.delete.confirm.title": "Inserisci il titolo della pagina per confermare",
"page.draft.create": "Crea bozza",
"page.duplicate.appendix": "Copia",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Copia pagine",
"page.status": "Stato",
"page.status.draft": "Bozza",
"page.status.draft.description":
"La pagina è in modalità bozza ed è visibile solo per editori registrati",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.listed": "Pubblico",
"page.status.listed.description": "La pagina è pubblicata per tutti",
"page.status.unlisted": "Non in elenco",
@@ -388,6 +331,7 @@
"replace": "Sostituisci",
"retry": "Riprova",
"revert": "Abbandona",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "Ruolo",
"role.admin.description": "L'amministratore ha tutti i permessi",
@@ -451,8 +395,7 @@
"url.placeholder": "https://esempio.com",
"user": "Utente",
"user.blueprint":
"Puoi definire sezioni e campi del form aggiuntivi per questo ruolo in <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Puoi definire sezioni e campi del form aggiuntivi per questo ruolo in <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Modifica email",
"user.changeLanguage": "Cambia lingua",
"user.changeName": "Rinomina questo utente",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Seleziona un nuovo ruolo",
"user.create": "Aggiungi nuovo utente",
"user.delete": "Elimina questo utente",
"user.delete.confirm":
"Sei sicuro di voler eliminare questo utente?",
"user.delete.confirm": "Sei sicuro di voler eliminare questo utente?",
"users": "Utenti",

View File

@@ -42,10 +42,8 @@
"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.dimensions.invalid":
"프로필 이미지의 너비와 높이를 3,000픽셀 이하로 설정하세요.",
"error.avatar.mime.forbidden":
"프로필 이미지의 확장자(JPG, JPEG, PNG)를 확인하세요.",
"error.avatar.dimensions.invalid": "프로필 이미지의 너비와 높이를 3,000픽셀 이하로 설정하세요.",
"error.avatar.mime.forbidden": "프로필 이미지의 확장자(JPG, JPEG, PNG)를 확인하세요.",
"error.blueprint.notFound": "블루프린트({name})를 확인할 수 없습니다.",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "컨버터({converter})가 올바르지 않습니다.",
"error.file.changeName.empty": "이름을 입력하세요.",
"error.file.changeName.permission":
"파일명({filename})을 변경할 권한이 없습니다.",
"error.file.changeName.permission": "파일명({filename})을 변경할 권한이 없습니다.",
"error.file.duplicate": "파일명이 같은 파일({filename})이 있습니다.",
"error.file.extension.forbidden":
"이 확장자({extension})는 업로드할 수 없습니다.",
"error.file.extension.missing":
"파일({filename})에 확장자가 없습니다.",
"error.file.extension.forbidden": "이 확장자({extension})는 업로드할 수 없습니다.",
"error.file.extension.missing": "파일({filename})에 확장자가 없습니다.",
"error.file.maxheight": "이미지의 높이는 {height}픽셀을 초과할 수 없습니다.",
"error.file.maxsize": "파일이 너무 큽니다.",
"error.file.maxwidth": "이미지의 너비는 {width}픽셀을 초과할 수 없습니다.",
"error.file.mime.differs":
"기존 파일과 MIME 형식({mime})이 다릅니다.",
"error.file.mime.differs": "기존 파일과 MIME 형식({mime})이 다릅니다.",
"error.file.mime.forbidden": "이 MIME 형식({mime})은 업로드할 수 없습니다.",
"error.file.mime.invalid": "MIME 형식({mime})이 올바르지 않습니다.",
"error.file.mime.missing":
"파일({filename})의 형식을 확인할 수 없습니다.",
"error.file.mime.missing": "파일({filename})의 형식을 확인할 수 없습니다.",
"error.file.minheight": "{height}픽셀 이상으로 이미지의 높이를 설정하세요.",
"error.file.minsize": "파일이 너무 작습니다.",
"error.file.minwidth": "{width}픽셀 이상으로 이미지의 너비를 설정하세요.",
@@ -90,111 +83,77 @@
"error.license.email": "올바른 이메일 주소를 입력하세요.",
"error.license.verification": "라이선스 키가 올바르지 않습니다.",
"error.page.changeSlug.permission":
"고유 주소({slug})를 변경할 권한이 없습니다.",
"error.page.changeStatus.incomplete":
"페이지를 공개할 수 없습니다.",
"error.page.changeStatus.permission":
"페이지의 상태를 변경할 없습니다.",
"error.page.changeStatus.toDraft.invalid":
"페이지({slug})의 상태를 초안으로 변경할 수 없습니다.",
"error.page.changeTemplate.invalid":
"페이지({slug})의 템플릿을 변경할 수 없습니다.",
"error.page.changeTemplate.permission":
"페이지({slug})의 템플릿을 변경할 권한이 없습니다.",
"error.page.changeSlug.permission": "고유 주소({slug})를 변경할 권한이 없습니다.",
"error.page.changeStatus.incomplete": "페이지를 공개할 수 없습니다.",
"error.page.changeStatus.permission": "페이지의 상태를 변경할 수 없습니다.",
"error.page.changeStatus.toDraft.invalid": "페이지({slug})의 상태를 초안으로 변경할 수 없습니다.",
"error.page.changeTemplate.invalid": "페이지({slug})의 템플릿을 변경할 수 없습니다.",
"error.page.changeTemplate.permission": "페이지({slug})의 템플릿을 변경할 권한이 없습니다.",
"error.page.changeTitle.empty": "제목을 입력하세요.",
"error.page.changeTitle.permission":
"페이지({slug})의 제목을 변경할 권한이 없습니다.",
"error.page.changeTitle.permission": "페이지({slug})의 제목을 변경할 권한이 없습니다.",
"error.page.create.permission": "페이지({slug})를 등록할 권한이 없습니다.",
"error.page.delete": "페이지({slug})를 삭제할 수 없습니다.",
"error.page.delete.confirm": "페이지를 삭제하려면 페이지의 제목을 입력하세요.",
"error.page.delete.hasChildren":
"하위 페이지가 있는 페이지는 삭제할 수 없습니다.",
"error.page.delete.hasChildren": "하위 페이지가 있는 페이지는 삭제할 수 없습니다.",
"error.page.delete.permission": "페이지({slug})를 삭제할 권한이 없습니다.",
"error.page.draft.duplicate":
"고유 주소({slug})가 같은 초안 페이지가 있습니다.",
"error.page.duplicate":
"고유 주소({slug})가 같은 페이지가 있습니다.",
"error.page.draft.duplicate": "고유 주소({slug})가 같은 초안 페이지가 있습니다.",
"error.page.duplicate": "고유 주소({slug})가 같은 페이지가 있습니다.",
"error.page.duplicate.permission": "페이지({slug})를 복제할 권한이 없습니다.",
"error.page.notFound": "페이지({slug})가 없습니다.",
"error.page.num.invalid":
"올바른 정수를 입력하세요.",
"error.page.num.invalid": "올바른 정수를 입력하세요.",
"error.page.slug.invalid": "올바른 접두사를 입력하세요.",
"error.page.sort.permission": "페이지({slug})를 정렬할 수 없습니다.",
"error.page.status.invalid": "올바른 상태를 설정하세요.",
"error.page.undefined": "\ud398\uc774\uc9c0\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.",
"error.page.update.permission": "페이지({slug})를 변경할 권한이 없습니다.",
"error.section.files.max.plural":
"이 섹션({section})에는 파일을 {max}개 이상 추가할 수 없습니다.",
"error.section.files.max.singular":
"이 섹션({section})에는 파일 하나 이상 추가할 수 없습니다.",
"error.section.files.min.plural":
"이 섹션({section})에는 파일이 {min}개 이상 필요합니다.",
"error.section.files.min.singular":
"이 섹션({section})에는 파일이 하나 이상 필요합니다.",
"error.section.files.max.plural": "이 섹션({section})에는 파일을 {max}개 이상 추가할 수 없습니다.",
"error.section.files.max.singular": "이 섹션({section})에는 파일을 하나 이상 추가할 수 없습니다.",
"error.section.files.min.plural": "이 섹션({section})에는 파일이 {min}개 이상 필요합니다.",
"error.section.files.min.singular": "이 섹션({section})에는 파일 하나 이상 필요합니다.",
"error.section.pages.max.plural":
"이 섹션({section})에는 페이지를 {max}개 이상 추가할 수 없습니다.",
"error.section.pages.max.singular":
"이 섹션({section})에는 페이지 하나 이상 추가할 수 없습니다.",
"error.section.pages.min.plural":
"이 섹션({section})에는 페이지가 {min}개 이상 필요합니다.",
"error.section.pages.min.singular":
"이 섹션({section})에는 페이지가 하나 이상 필요합니다.",
"error.section.pages.max.plural": "이 섹션({section})에는 페이지를 {max}개 이상 추가할 수 없습니다.",
"error.section.pages.max.singular": "이 섹션({section})에는 페이지를 하나 이상 추가할 수 없습니다.",
"error.section.pages.min.plural": "이 섹션({section})에는 페이지가 {min}개 이상 필요합니다.",
"error.section.pages.min.singular": "이 섹션({section})에는 페이지 하나 이상 필요합니다.",
"error.section.notLoaded": "섹션({name})을 확인할 수 없습니다.",
"error.section.type.invalid": "섹션의 형식({type})이 올바르지 않습니다.",
"error.site.changeTitle.empty": "제목을 입력하세요.",
"error.site.changeTitle.permission":
"사이트명을 변경할 권한이 없습니다.",
"error.site.changeTitle.permission": "사이트명을 변경할 권한이 없습니다.",
"error.site.update.permission": "사이트의 정보를 변경할 권한이 없습니다.",
"error.template.default.notFound": "기본 템플릿이 없습니다.",
"error.user.changeEmail.permission":
"사용자({name})의 이메일 주소를 변경할 권한이 없습니다.",
"error.user.changeLanguage.permission":
"사용자({name})의 언어를 변경할 권한이 없습니다.",
"error.user.changeName.permission":
"사용자({name})을 변경할 권한이 없습니다.",
"error.user.changePassword.permission":
"사용자({name})의 암호를 변경할 권한이 없습니다.",
"error.user.changeRole.lastAdmin":
"최종 관리자의 역할은 변경할 수 없습니다.",
"error.user.changeRole.permission":
"사용자({name})의 역할을 변경할 권한이 없습니다.",
"error.user.changeRole.toAdmin":
"다른 사용자를 관리자로 지정할 권한이 없습니다.",
"error.user.changeEmail.permission": "사용자({name})의 이메일 주소를 변경할 권한이 없습니다.",
"error.user.changeLanguage.permission": "사용자({name})의 언어를 변경할 권한이 없습니다.",
"error.user.changeName.permission": "사용자명({name})을 변경할 권한이 없습니다.",
"error.user.changePassword.permission": "사용자({name})의 암호를 변경할 권한이 없습니다.",
"error.user.changeRole.lastAdmin": "최종 관리자의 역할은 변경할 수 없습니다.",
"error.user.changeRole.permission": "사용자({name})의 역할을 변경할 권한이 없습니다.",
"error.user.changeRole.toAdmin": "다른 사용자를 관리자로 지정할 권한이 없습니다.",
"error.user.create.permission": "사용자를 등록할 권한이 없습니다.",
"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.lastUser": "최종 사용자는 삭제할 수 없습니다.",
"error.user.delete.permission":
"사용자({name})를 삭제할 권한이 없습니다.",
"error.user.duplicate":
"이메일 주소({email})가 같은 사용자가 있습니다.",
"error.user.delete.permission": "사용자({name})를 삭제할 권한이 없습니다.",
"error.user.duplicate": "이메일 주소({email})가 같은 사용자가 있습니다.",
"error.user.email.invalid": "올바른 이메일 주소를 입력하세요.",
"error.user.language.invalid": "올바른 언어를 입력하세요.",
"error.user.notFound": "사용자({name})가 없습니다.",
"error.user.password.invalid":
"암호를 8자 이상으로 설정하세요.",
"error.user.password.invalid": "암호를 8자 이상으로 설정하세요.",
"error.user.password.notSame": "\uc554\ud638\ub97c \ud655\uc778\ud558\uc138\uc694.",
"error.user.password.undefined": "암호가 설정되지 않았습니다.",
"error.user.role.invalid": "올바른 역할을 입력하세요.",
"error.user.update.permission":
"사용자({name})의 정보를 변경할 권한이 없습니다.",
"error.user.update.permission": "사용자({name})의 정보를 변경할 권한이 없습니다.",
"error.validation.accepted": "확인하세요.",
"error.validation.alpha": "로마자(a~z)만 입력할 수 있습니다.",
"error.validation.alphanum":
"로마자(a~z) 또는 숫자(0~9)만 입력할 수 있습니다.",
"error.validation.between":
"{min}, {max} 사이의 값을 입력하세요.",
"error.validation.alphanum": "로마자(a~z) 또는 숫자(0~9)만 입력할 수 있습니다.",
"error.validation.between": "{min}, {max} 사이의 값을 입력하세요.",
"error.validation.boolean": "확인하거나 취소하세요.",
"error.validation.contains":
"다음을 포함한 값을 입력하세요: {needle}",
"error.validation.contains": "다음을 포함한 값을 입력하세요: {needle}",
"error.validation.date": "올바른 날짜를 입력하세요.",
"error.validation.date.after": "{date} 이후 날짜를 입력하세요.",
"error.validation.date.before": "{date} 이전 날짜를 입력하세요.",
@@ -210,18 +169,14 @@
"error.validation.less": "{max} 미만의 값을 입력하세요.",
"error.validation.match": "입력한 값이 예상 패턴과 일치하지 않습니다.",
"error.validation.max": "{max} 이하의 값을 입력하세요.",
"error.validation.maxlength":
"{max}자 이하의 값을 입력하세요.",
"error.validation.maxlength": "{max}자 이하의 값을 입력하세요.",
"error.validation.maxwords": "{max}자 이하를 입력하세요.",
"error.validation.min": "{min} 이상의 값을 입력하세요.",
"error.validation.minlength":
"{min}자 이상의 값을 입력하세요.",
"error.validation.minlength": "{min}자 이상의 값을 입력하세요.",
"error.validation.minwords": "{min}자 이상을 입력하세요.",
"error.validation.more": "{min} 이상의 값을 입력하세요.",
"error.validation.notcontains":
"{needle}에 포함된 값은 입력할 수 없습니다.",
"error.validation.notin":
"{notIn}에 포함된 값은 입력할 수 없습니다.",
"error.validation.notcontains": "{needle}에 포함된 값은 입력할 수 없습니다.",
"error.validation.notin": "{notIn}에 포함된 값은 입력할 수 없습니다.",
"error.validation.option": "올바른 옵션을 선택하세요.",
"error.validation.num": "올바른 숫자를 입력하세요.",
"error.validation.required": "아무거나 입력하세요.",
@@ -238,8 +193,7 @@
"field.structure.empty": "항목이 없습니다.",
"field.users.empty": "선택한 사용자가 없습니다.",
"file.delete.confirm":
"<strong>파일({filename})</strong>을 삭제할까요?",
"file.delete.confirm": "<strong>파일({filename})</strong>을 삭제할까요?",
"files": "파일",
"files.empty": "파일이 없습니다.",
@@ -251,29 +205,22 @@
"installation": "설치",
"installation.completed": "패널을 설치했습니다.",
"installation.disabled": "패널 설치 관리자는 로컬 서버에서 실행하거나 <code>panel.install</code> 옵션을 설정하세요.",
"installation.issues.accounts":
"폴더(<code>/site/accounts</code>)에 쓰기 권한이 없습니다.",
"installation.issues.content":
"폴더(<code>/content</code>)에 쓰기 권한이 없습니다.",
"installation.issues.accounts": "폴더(<code>/site/accounts</code>)에 쓰기 권한이 없습니다.",
"installation.issues.content": "폴더(<code>/content</code>)에 쓰기 권한이 없습니다.",
"installation.issues.curl": "<code>cURL</code> 확장 기능이 필요합니다.",
"installation.issues.headline": "패널을 설치할 수 없습니다.",
"installation.issues.mbstring":
"<code>MB String</code> 확장 기능이 필요합니다.",
"installation.issues.media":
"폴더(<code>/media</code>)에 쓰기 권한이 없습니다.",
"installation.issues.mbstring": "<code>MB String</code> 확장 기능이 필요합니다.",
"installation.issues.media": "폴더(<code>/media</code>)에 쓰기 권한이 없습니다.",
"installation.issues.php": "<code>PHP</code> 버전이 7 이상인지 확인하세요.",
"installation.issues.server":
"Kirby를 실행하려면 <code>Apache</code>, <code>Nginx</code>, 또는 <code>Caddy</code>가 필요합니다.",
"installation.issues.server": "Kirby를 실행하려면 <code>Apache</code>, <code>Nginx</code>, 또는 <code>Caddy</code>가 필요합니다.",
"installation.issues.sessions": "폴더(<code>/site/sessions</code>)에 쓰기 권한이 없습니다.",
"language": "\uc5b8\uc5b4",
"language.code": "언어 코드",
"language.convert": "기본 언어로 설정",
"language.convert.confirm":
"이 <strong>언어({name})</strong>를 기본 언어로 설정할까요? 설정한 뒤에는 복원할 수 없으며, 이 언어로 번역되지 않은 항목은 올바르게 표시되지 않을 수 있습니다.",
"language.convert.confirm": "이 <strong>언어({name})</strong>를 기본 언어로 설정할까요? 설정한 뒤에는 복원할 수 없으며, 이 언어로 번역되지 않은 항목은 올바르게 표시되지 않을 수 있습니다.",
"language.create": "새 언어 추가",
"language.delete.confirm":
"<strong>언어({name})</strong>를 삭제할까요? 삭제한 뒤에는 복원할 수 없습니다.",
"language.delete.confirm": "<strong>언어({name})</strong>를 삭제할까요? 삭제한 뒤에는 복원할 수 없습니다.",
"language.deleted": "언어를 삭제했습니다.",
"language.direction": "읽기 방향",
"language.direction.ltr": "왼쪽에서 오른쪽",
@@ -292,8 +239,7 @@
"license": "라이선스",
"license.buy": "라이선스 구매",
"license.register": "등록",
"license.register.help":
"이메일 주소로 라이선스 코드를 전송했습니다. Kirby를 등록하려면 라이선스 코드와 이메일 주소를 입력하세요.",
"license.register.help": "이메일 주소로 라이선스 코드를 전송했습니다. Kirby를 등록하려면 라이선스 코드와 이메일 주소를 입력하세요.",
"license.register.label": "라이선스 코드를 입력하세요.",
"license.register.success": "Kirby를 구입해주셔서 감사합니다.",
"license.unregistered": "Kirby가 등록되지 않았습니다.",
@@ -325,7 +271,7 @@
"months.april": "4\uc6d4",
"months.august": "8\uc6d4",
"months.december": "12\uc6d4",
"months.february": "2\uc6d4",
"months.february": "2",
"months.january": "1\uc6d4",
"months.july": "7\uc6d4",
"months.june": "6\uc6d4",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "위치를 선택하세요.",
"page.changeStatus.select": "새 상태 선택",
"page.changeTemplate": "템플릿 변경",
"page.delete.confirm":
"<strong>페이지({title})</strong>를 삭제할까요?",
"page.delete.confirm.subpages":
"<strong>페이지에 하위 페이지가 있습니다.</strong> 모든 하위 페이지가 삭제됩니다.",
"page.delete.confirm": "<strong>페이지({title})</strong>를 삭제할까요?",
"page.delete.confirm.subpages": "<strong>페이지에 하위 페이지가 있습니다.</strong> 모든 하위 페이지가 삭제됩니다.",
"page.delete.confirm.title": "페이지 제목을 입력하세요.",
"page.draft.create": "초안 등록",
"page.duplicate.appendix": "복사",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "페이지 복사",
"page.status": "상태",
"page.status.draft": "초안",
"page.status.draft.description":
"로그인한 사용자만 읽을 수 있습니다.",
"page.status.draft.description": "로그인한 사용자나 URL을 통해서만 읽을 수 있습니다.",
"page.status.listed": "공개",
"page.status.listed.description": "누구나 읽을 수 있습니다.",
"page.status.unlisted": "비공개",
@@ -388,6 +331,7 @@
"replace": "\uad50\uccb4",
"retry": "\ub2e4\uc2dc \uc2dc\ub3c4",
"revert": "복원",
"revert.confirm": "<strong>저장되지 않은 내용</strong>을 삭제할까요?",
"role": "역할",
"role.admin.description": "관리자는 모든 권한이 있습니다.",
@@ -451,8 +395,7 @@
"url.placeholder": "https://example.com",
"user": "사용자",
"user.blueprint":
"파일(<strong>/site/blueprints/users/{role}.yml</strong>)에 섹션 및 폼 필드를 추가할 수 있습니다.",
"user.blueprint": "파일(<strong>/site/blueprints/users/{role}.yml</strong>)에 섹션 및 폼 필드를 추가할 수 있습니다.",
"user.changeEmail": "이메일 주소 변경",
"user.changeLanguage": "언어 변경",
"user.changeName": "사용자명 변경",
@@ -463,8 +406,7 @@
"user.changeRole.select": "새 역할 선택",
"user.create": "사용자 추가",
"user.delete": "사용자 삭제",
"user.delete.confirm":
"<strong>사용자({email})</strong>를 삭제할까요?",
"user.delete.confirm": "<strong>사용자({email})</strong>를 삭제할까요?",
"users": "사용자",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "Nepavyko įkelti profilio nuotraukos",
"error.avatar.delete.fail": "Nepavyko pašalinti profilio nuotraukos",
"error.avatar.dimensions.invalid":
"Profilio nuotraukos plotis ar aukštis turėtų būti iki 3000 pikselių",
"error.avatar.mime.forbidden":
"Profilio nuotrauka turi būti JPEG arba PNG",
"error.avatar.dimensions.invalid": "Profilio nuotraukos plotis ar aukštis turėtų būti iki 3000 pikselių",
"error.avatar.mime.forbidden": "Profilio nuotrauka turi būti JPEG arba PNG",
"error.blueprint.notFound": "Blueprint \"{name}\" negali būti užkrautas",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Neteisingas konverteris \"{converter}\"",
"error.file.changeName.empty": "Pavadinimas negali būti tuščias",
"error.file.changeName.permission":
"Neturite teisės pakeisti failo pavadinimo \"{filename}\"",
"error.file.changeName.permission": "Neturite teisės pakeisti failo pavadinimo \"{filename}\"",
"error.file.duplicate": "Failas su pavadinimu \"{filename}\" jau yra",
"error.file.extension.forbidden":
"Failo tipas (plėtinys) \"{extension}\" neleidžiamas",
"error.file.extension.missing":
"Failui \"{filename}\" trūksta tipo (plėtinio)",
"error.file.extension.forbidden": "Failo tipas (plėtinys) \"{extension}\" neleidžiamas",
"error.file.extension.missing": "Failui \"{filename}\" trūksta tipo (plėtinio)",
"error.file.maxheight": "Failo aukštis neturi viršyti {height} px",
"error.file.maxsize": "Failas per didelis",
"error.file.maxwidth": "Failo plotis neturi viršyti {width} px",
"error.file.mime.differs":
"Įkėliamas failas turi būti tokio pat mime tipo \"{mime}\"",
"error.file.mime.differs": "Įkėliamas failas turi būti tokio pat mime tipo \"{mime}\"",
"error.file.mime.forbidden": "Media tipas \"{mime}\" neleidžiamas",
"error.file.mime.invalid": "Neteisingas mime tipas: {mime}",
"error.file.mime.missing":
"Failui \"{filename}\" nepavyko atpažinti media (mime) tipo",
"error.file.mime.missing": "Failui \"{filename}\" nepavyko atpažinti media (mime) tipo",
"error.file.minheight": "Failo aukštis turi būti bent {height} px",
"error.file.minsize": "Failas per mažas",
"error.file.minwidth": "Failo plotis turi būti bent {width} px",
@@ -90,111 +83,77 @@
"error.license.email": "Prašome įrašyti teisingą el. pašto adresą",
"error.license.verification": "Nepavyko patikrinti licenzijos",
"error.page.changeSlug.permission":
"Neturite teisės pakeisti \"{slug}\" URL",
"error.page.changeStatus.incomplete":
"Puslapis turi klaidų ir negali būti paskelbtas",
"error.page.changeStatus.permission":
"Šiam puslapiui negalima pakeisti statuso",
"error.page.changeStatus.toDraft.invalid":
"Puslapio \"{slug}\" negalima paversti juodraščiu",
"error.page.changeTemplate.invalid":
"Šablono puslapiui \"{slug}\" negalima keisti",
"error.page.changeTemplate.permission":
"Neturite leidimo keisti šabloną puslapiui \"{slug}\"",
"error.page.changeSlug.permission": "Neturite teisės pakeisti \"{slug}\" URL",
"error.page.changeStatus.incomplete": "Puslapis turi klaidų ir negali būti paskelbtas",
"error.page.changeStatus.permission": "Šiam puslapiui negalima pakeisti statuso",
"error.page.changeStatus.toDraft.invalid": "Puslapio \"{slug}\" negalima paversti juodraščiu",
"error.page.changeTemplate.invalid": "Šablono puslapiui \"{slug}\" negalima keisti",
"error.page.changeTemplate.permission": "Neturite leidimo keisti šabloną puslapiui \"{slug}\"",
"error.page.changeTitle.empty": "Pavadinimas negali būti tuščias",
"error.page.changeTitle.permission":
"Neturite leidimo keisti pavadinimo puslapiui \"{slug}\"",
"error.page.changeTitle.permission": "Neturite leidimo keisti pavadinimo puslapiui \"{slug}\"",
"error.page.create.permission": "Neturite leidimo sukurti \"{slug}\"",
"error.page.delete": "Puslapio \"{slug}\" negalima pašalinti",
"error.page.delete.confirm": "Įrašykite puslapio pavadinimą, tam kad patvirtintumėte",
"error.page.delete.hasChildren":
"Puslapis turi vidinių puslapių, dėl to negalima jo pašalinti",
"error.page.delete.hasChildren": "Puslapis turi vidinių puslapių, dėl to negalima jo pašalinti",
"error.page.delete.permission": "Neturite leidimo šalinti \"{slug}\"",
"error.page.draft.duplicate":
"Puslapio juodraštis su URL pabaiga \"{slug}\" jau yra",
"error.page.duplicate":
"Puslapis su URL pabaiga \"{slug}\" jau yra",
"error.page.draft.duplicate": "Puslapio juodraštis su URL pabaiga \"{slug}\" jau yra",
"error.page.duplicate": "Puslapis su URL pabaiga \"{slug}\" jau yra",
"error.page.duplicate.permission": "Neturite leidimo dubliuoti \"{slug}\"",
"error.page.notFound": "Puslapis \"{slug}\" nerastas",
"error.page.num.invalid":
"Įrašykite teisingą eiliškumo numerį. Numeris negali būti neigiamas.",
"error.page.num.invalid": "Įrašykite teisingą eiliškumo numerį. Numeris negali būti neigiamas.",
"error.page.slug.invalid": "Įrašykite teisingą URL prefiksą",
"error.page.sort.permission": "Puslapiui \"{slug}\" negalima pakeisti eiliškumo",
"error.page.status.invalid": "Nustatykite teisingą puslapio statusą",
"error.page.undefined": "Puslapis nerastas",
"error.page.update.permission": "Neturite leidimo atnaujinti \"{slug}\"",
"error.section.files.max.plural":
"Į sekciją \"{section}\" negalima pridėti daugiau nei {max} failų",
"error.section.files.max.singular":
"Į sekciją \"{section}\" negalima pridėti daugiau nei vieną failą",
"error.section.files.min.plural":
"Sekcija \"{section}\" reikalauja bent {min} failų",
"error.section.files.min.singular":
"Sekcija \"{section}\" reikalauja bent vieno failo",
"error.section.files.max.plural": "Į sekciją \"{section}\" negalima pridėti daugiau nei {max} failų",
"error.section.files.max.singular": "Į sekciją \"{section}\" negalima pridėti daugiau nei vieną failą",
"error.section.files.min.plural": "Sekcija \"{section}\" reikalauja bent {min} failų",
"error.section.files.min.singular": "Sekcija \"{section}\" reikalauja bent vieno failo",
"error.section.pages.max.plural":
"Į sekciją \"{section}\" negalima pridėti daugiau nei {max} puslap",
"error.section.pages.max.singular":
"Į sekciją \"{section}\" negalima pridėti daugiau nei vieną puslapį",
"error.section.pages.min.plural":
"Sekcija \"{section}\" reikalauja bent {min} puslapių",
"error.section.pages.min.singular":
"Sekcija \"{section}\" reikalauja bent vieno puslapio",
"error.section.pages.max.plural": "Į sekciją \"{section}\" negalima pridėti daugiau nei {max} puslapių",
"error.section.pages.max.singular": "Į sekciją \"{section}\" negalima pridėti daugiau nei vieną puslapį",
"error.section.pages.min.plural": "Sekcija \"{section}\" reikalauja bent {min} puslapių",
"error.section.pages.min.singular": "Sekcija \"{section}\" reikalauja bent vieno puslapio",
"error.section.notLoaded": "Sekcija \"{name}\" negali būti užkrauta",
"error.section.type.invalid": "Sekcijos tipas \"{type}\" yra neteisingas",
"error.site.changeTitle.empty": "Pavadinimas negali būti tuščias",
"error.site.changeTitle.permission":
"Neturite leidimo keisti svetainės pavadinimo",
"error.site.changeTitle.permission": "Neturite leidimo keisti svetainės pavadinimo",
"error.site.update.permission": "Neturite leidimo atnaujinti svetainės",
"error.template.default.notFound": "Nėra šablono pagal nutylėjimą",
"error.user.changeEmail.permission":
"Neturite leidimo keisti vartotojo \"{name}\" el. paštą",
"error.user.changeLanguage.permission":
"Neturite leidimo keisti vartotojo \"{name}\" kalbą",
"error.user.changeName.permission":
"Neturite leidimo keisti vartotojo \"{name}\" vardą",
"error.user.changePassword.permission":
"Neturite leidimo keisti vartotojo \"{name}\" slaptažodį",
"error.user.changeRole.lastAdmin":
"Vienintelio administratoriaus rolės negalima pakeisti",
"error.user.changeRole.permission":
"Neturite leidimo pakeisti vartotojo \"{name}\" rolės",
"error.user.changeRole.toAdmin":
"Jūs neturite teisių suteikti administratoriaus rolę",
"error.user.changeEmail.permission": "Neturite leidimo keisti vartotojo \"{name}\" el. paštą",
"error.user.changeLanguage.permission": "Neturite leidimo keisti vartotojo \"{name}\" kalbą",
"error.user.changeName.permission": "Neturite leidimo keisti vartotojo \"{name}\" vardą",
"error.user.changePassword.permission": "Neturite leidimo keisti vartotojo \"{name}\" slaptažodį",
"error.user.changeRole.lastAdmin": "Vienintelio administratoriaus rolės negalima pakeisti",
"error.user.changeRole.permission": "Neturite leidimo pakeisti vartotojo \"{name}\" rolės",
"error.user.changeRole.toAdmin": "Jūs neturite teisių suteikti administratoriaus rolę",
"error.user.create.permission": "Neturite leidimo sukurti šį vartotoją",
"error.user.delete": "Vartotojo \"{name}\" negalima pašalinti",
"error.user.delete.lastAdmin": "Vienintelio administratoriaus negalima pašalinti",
"error.user.delete.lastUser": "Vienintelio vartotojo negalima pašalinti",
"error.user.delete.permission":
"Neturite leidimo pašalinti vartotoją \"{name}\"",
"error.user.duplicate":
"Vartotojas su el. paštu \"{email}\" jau yra",
"error.user.delete.permission": "Neturite leidimo pašalinti vartotoją \"{name}\"",
"error.user.duplicate": "Vartotojas su el. paštu \"{email}\" jau yra",
"error.user.email.invalid": "Įrašykite teisingą el. pašto adresą",
"error.user.language.invalid": "Įrašykite teisingą kalbą",
"error.user.notFound": "Vartotojas \"{name}\" nerastas",
"error.user.password.invalid":
"Prašome įrašyti galiojantį slaptažodį. Slaptažodį turi sudaryti bent 8 simboliai.",
"error.user.password.invalid": "Prašome įrašyti galiojantį slaptažodį. Slaptažodį turi sudaryti bent 8 simboliai.",
"error.user.password.notSame": "Slaptažodžiai nesutampa",
"error.user.password.undefined": "Vartotojas neturi slaptažodžio",
"error.user.role.invalid": "Įrašykite teisingą rolę",
"error.user.update.permission":
"Neturite teisės keisti vartotojo \"{name}\"",
"error.user.update.permission": "Neturite teisės keisti vartotojo \"{name}\"",
"error.validation.accepted": "Prašome patvirtinti",
"error.validation.alpha": "Prašome įrašyti tik raides a-z",
"error.validation.alphanum":
"Prašome įrašyti tik raides a-z arba skaičius 0-9",
"error.validation.between":
"Prašome įrašyti reikšmę tarp \"{min}\" ir \"{max}\"",
"error.validation.alphanum": "Prašome įrašyti tik raides a-z arba skaičius 0-9",
"error.validation.between": "Prašome įrašyti reikšmę tarp \"{min}\" ir \"{max}\"",
"error.validation.boolean": "Patvirtinkite arba atšaukite",
"error.validation.contains":
"Prašome įrašyti reikšmę, kuri turėtų \"{needle}\"",
"error.validation.contains": "Prašome įrašyti reikšmę, kuri turėtų \"{needle}\"",
"error.validation.date": "Prašome įrašyti korektišką datą",
"error.validation.date.after": "Įrašykite datą nuo {date}",
"error.validation.date.before": "Įrašykite datą iki {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Prašome įrašyti mažiau nei {max}",
"error.validation.match": "Reikšmė nesutampa su laukiamu šablonu",
"error.validation.max": "Prašome įrašyti reikšmę lygią arba didesnę, nei {max}",
"error.validation.maxlength":
"Prašome įrašyti trumpesnę reikšmę. (max. {max} characters)",
"error.validation.maxlength": "Prašome įrašyti trumpesnę reikšmę. (max. {max} characters)",
"error.validation.maxwords": "Please enter no more than {max} word(s)",
"error.validation.min": "Please enter a value equal to or greater than {min}",
"error.validation.minlength":
"Prašome įrašyti ilgesnę reikšmę. (min. {min} characters)",
"error.validation.minlength": "Prašome įrašyti ilgesnę reikšmę. (min. {min} characters)",
"error.validation.minwords": "Prašome įrašyti bent {min} žodžius",
"error.validation.more": "Prašome įrašyti daugiau nei {min}",
"error.validation.notcontains":
"Prašome įrašyti reikšmę, kuri neturi \"{needle}\"",
"error.validation.notin":
"Prašome neįrašyti vieną iš šių: ({notIn})",
"error.validation.notcontains": "Prašome įrašyti reikšmę, kuri neturi \"{needle}\"",
"error.validation.notin": "Prašome neįrašyti vieną iš šių: ({notIn})",
"error.validation.option": "Prašome pasirinkti korektišką opciją",
"error.validation.num": "Prašome įrašyti teisingą numerį",
"error.validation.required": "Prašome įrašyti ką nors",
@@ -238,8 +193,7 @@
"field.structure.empty": "Dar nėra įrašų",
"field.users.empty": "Dar nėra vartotojų",
"file.delete.confirm":
"Ar tikrai norite pašalinti <br><strong>{filename}</strong>?",
"file.delete.confirm": "Ar tikrai norite pašalinti <br><strong>{filename}</strong>?",
"files": "Failai",
"files.empty": "Įkelti",
@@ -251,29 +205,22 @@
"installation": "Įdiegimas",
"installation.completed": "Valdymo pultas įdiegtas",
"installation.disabled": "Pagal nutylėjimą valdymo pulto įdiegimas viešuose serveriuose yra negalimas. Prašome įdiegti lokalioje aplinkoje arba įgalinkite jį su <code>panel.install</code> opcija.",
"installation.issues.accounts":
"Katalogas <code>/site/accounts</code> neegzistuoja arba neturi įrašymo teisių",
"installation.issues.content":
"Katalogas <code>/content</code> neegzistuoja arba neturi įrašymo teisių",
"installation.issues.accounts": "Katalogas <code>/site/accounts</code> neegzistuoja arba neturi įrašymo teisių",
"installation.issues.content": "Katalogas <code>/content</code> neegzistuoja arba neturi įrašymo teisių",
"installation.issues.curl": "Plėtinys <code>CURL</code> yra privalomas",
"installation.issues.headline": "Nepavyko įdiegti valdymo pulto",
"installation.issues.mbstring":
"Plėtinys <code>MB String</code> yra privalomas",
"installation.issues.media":
"Katalogas <code>/media</code> neegzistuoja arba neturi įrašymo teisių",
"installation.issues.mbstring": "Plėtinys <code>MB String</code> yra privalomas",
"installation.issues.media": "Katalogas <code>/media</code> neegzistuoja arba neturi įrašymo teisių",
"installation.issues.php": "Įsitikinkite, kad naudojama <code>PHP 7+</code>",
"installation.issues.server":
"Kirby reikalauja <code>Apache</code>, <code>Nginx</code> arba <code>Caddy</code>",
"installation.issues.server": "Kirby reikalauja <code>Apache</code>, <code>Nginx</code> arba <code>Caddy</code>",
"installation.issues.sessions": "Katalogas <code>/site/sessions</code> neegzistuoja arba neturi įrašymo teisių",
"language": "Kalba",
"language.code": "Kodas",
"language.convert": "Padaryti pagrindinį",
"language.convert.confirm":
"<p>Do you really want to convert <strong>{name}</strong> to the default language? This cannot be undone.</p><p>If <strong>{name}</strong> has untranslated content, there will no longer be a valid fallback and parts of your site might be empty.</p>",
"language.convert.confirm": "<p>Do you really want to convert <strong>{name}</strong> to the default language? This cannot be undone.</p><p>If <strong>{name}</strong> has untranslated content, there will no longer be a valid fallback and parts of your site might be empty.</p>",
"language.create": "Pridėti naują kalbą",
"language.delete.confirm":
"Ar tikrai norite pašalinti <strong>{name}</strong> kalbą, kartu su visais vertimais? Grąžinti nebus įmanoma! 🙀",
"language.delete.confirm": "Ar tikrai norite pašalinti <strong>{name}</strong> kalbą, kartu su visais vertimais? Grąžinti nebus įmanoma! 🙀",
"language.deleted": "Kalba pašalinta",
"language.direction": "Skaitymo kryptis",
"language.direction.ltr": "Iš kairės į dešinę",
@@ -292,8 +239,7 @@
"license": "Licenzija",
"license.buy": "Pirkti licenziją",
"license.register": "Registruoti",
"license.register.help":
"Licenzijos kodą gavote el. paštu po apmokėjimo. Prašome įterpti čia, kad sistema būtų užregistruota.",
"license.register.help": "Licenzijos kodą gavote el. paštu po apmokėjimo. Prašome įterpti čia, kad sistema būtų užregistruota.",
"license.register.label": "Prašome įrašyti jūsų licenzijos kodą",
"license.register.success": "Ačiū, kad palaikote Kirby",
"license.unregistered": "Tai neregistruota Kirby demo versija",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Pasirinkite poziciją",
"page.changeStatus.select": "Pasirinkite statusą",
"page.changeTemplate": "Pakeisti šabloną",
"page.delete.confirm":
"🙀 Ar tikrai norite pašalinti puslapį <strong>{title}</strong>?",
"page.delete.confirm.subpages":
"<strong>Šis puslapis turi sub-puslapių</strong>. <br>Visi sub-puslapiai taip pat bus pašalinti.",
"page.delete.confirm": "🙀 Ar tikrai norite pašalinti puslapį <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Šis puslapis turi sub-puslapių</strong>. <br>Visi sub-puslapiai taip pat bus pašalinti.",
"page.delete.confirm.title": "Įrašykite puslapio pavadinimą tam, kad patvirtinti",
"page.draft.create": "Sukurti juodraštį",
"page.duplicate.appendix": "Kopijuoti",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Kopijuoti puslapius",
"page.status": "Statusas",
"page.status.draft": "Juodraštis",
"page.status.draft.description":
"Puslapis nematomas viešai, bet matomas tik prisijungusiems administratoriams",
"page.status.draft.description": "Šis puslapis yra juodraščio režime ir prieinamas tik redaktoriams arba per slaptą nuorodą",
"page.status.listed": "Paskelbtas",
"page.status.listed.description": "Matomas viešai visiems",
"page.status.unlisted": "Nerodomas",
@@ -388,6 +331,7 @@
"replace": "Apkeisti",
"retry": "Bandyti dar",
"revert": "Grąžinti",
"revert.confirm": "Ar tikrai norite atšaukti <strong>visus neišsaugotus pakeitimus</strong>?",
"role": "Rolė",
"role.admin.description": "Admin turi visas teises",
@@ -451,8 +395,7 @@
"url.placeholder": "https://example.com",
"user": "Vartotojas",
"user.blueprint":
"Galite nustatyti papildomas sekcijas ir formos laukelius šiai vartotojo rolei faile <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Galite nustatyti papildomas sekcijas ir formos laukelius šiai vartotojo rolei faile <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Keisti el. paštą",
"user.changeLanguage": "Keisti kalbą",
"user.changeName": "Pervadinti vartotoją",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Pasirinkti naują rolę",
"user.create": "Pridėti naują vartotoją",
"user.delete": "Pašalinti šį vartotoją",
"user.delete.confirm":
"Ar tikrai norite pašalinti vartotoją <br><strong>{email}</strong>?",
"user.delete.confirm": "Ar tikrai norite pašalinti vartotoją <br><strong>{email}</strong>?",
"users": "Vartotojai",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "Profilbildet kunne ikke lastes opp",
"error.avatar.delete.fail": "Profil bildet kunne ikke bli slette",
"error.avatar.dimensions.invalid":
"Vennligst hold profilbildets bredde og høyde under 3000 piksler",
"error.avatar.mime.forbidden":
"Ugyldig MIME-type",
"error.avatar.dimensions.invalid": "Vennligst hold profilbildets bredde og høyde under 3000 piksler",
"error.avatar.mime.forbidden": "Ugyldig MIME-type",
"error.blueprint.notFound": "Blueprint \"{name}\" kunne ikke lastes inn",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Ugyldig omformer \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Du er ikke tillatt å endre navnet til \"{filename}\"",
"error.file.changeName.permission": "Du er ikke tillatt å endre navnet til \"{filename}\"",
"error.file.duplicate": "En fil med navnet \"{filename}\" eksisterer allerede",
"error.file.extension.forbidden":
"Ugyldig filtype",
"error.file.extension.missing":
"Du kan ikke laste opp filer uten filtype",
"error.file.extension.forbidden": "Ugyldig filtype",
"error.file.extension.missing": "Du kan ikke laste opp filer uten filtype",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
"error.file.maxwidth": "The width of the image must not exceed {width} pixels",
"error.file.mime.differs":
"Den opplastede filen må være av samme MIME-type \"{mime}\"",
"error.file.mime.differs": "Den opplastede filen må være av samme MIME-type \"{mime}\"",
"error.file.mime.forbidden": "Mediatypen \"{mime}\" er ikke tillatt",
"error.file.mime.invalid": "Invalid mime type: {mime}",
"error.file.mime.missing":
"Mediatypen for \"{filename}\" kan ikke gjenkjennes",
"error.file.mime.missing": "Mediatypen for \"{filename}\" kan ikke gjenkjennes",
"error.file.minheight": "The height of the image must be at least {height} pixels",
"error.file.minsize": "The file is too small",
"error.file.minwidth": "The width of the image must be at least {width} pixels",
@@ -90,111 +83,77 @@
"error.license.email": "Vennligst skriv inn en gyldig e-postadresse",
"error.license.verification": "The license could not be verified",
"error.page.changeSlug.permission":
"Du kan ikke endre URLen for denne siden",
"error.page.changeStatus.incomplete":
"Siden har feil og kan ikke publiseres",
"error.page.changeStatus.permission":
"Sidens status kan ikke endres",
"error.page.changeStatus.toDraft.invalid":
"Siden \"{slug}\" kan ikke konverteres til et utkast",
"error.page.changeTemplate.invalid":
"Malen for siden \"{slug}\" kan ikke endres",
"error.page.changeTemplate.permission":
"Du har ikke tillatelse til å endre malen for \"{slug}\"",
"error.page.changeSlug.permission": "Du kan ikke endre URLen for denne siden",
"error.page.changeStatus.incomplete": "Siden har feil og kan ikke publiseres",
"error.page.changeStatus.permission": "Sidens status kan ikke endres",
"error.page.changeStatus.toDraft.invalid": "Siden \"{slug}\" kan ikke konverteres til et utkast",
"error.page.changeTemplate.invalid": "Malen for siden \"{slug}\" kan ikke endres",
"error.page.changeTemplate.permission": "Du har ikke tillatelse til å endre malen for \"{slug}\"",
"error.page.changeTitle.empty": "Tittelen kan ikke være tom",
"error.page.changeTitle.permission":
"Du har ikke tillatelse til å endre tittelen for \"{slug}\"",
"error.page.changeTitle.permission": "Du har ikke tillatelse til å endre tittelen for \"{slug}\"",
"error.page.create.permission": "Du har ikke tillatelse til å opprette \"{slug}\"",
"error.page.delete": "Siden \"{slug}\" kan ikke slettes",
"error.page.delete.confirm": "Vennligst skriv inn sidens tittel for å bekrefte",
"error.page.delete.hasChildren":
"Siden har undersider og kan derfor ikke slettes",
"error.page.delete.hasChildren": "Siden har undersider og kan derfor ikke slettes",
"error.page.delete.permission": "Du har ikke tilgang til å slette \"{slug}\"",
"error.page.draft.duplicate":
"Et sideutkast med URL-tillegget \"{slug}\" eksisterer allerede",
"error.page.duplicate":
"En side med URL-tillegget \"{slug}\" eksisterer allerede",
"error.page.draft.duplicate": "Et sideutkast med URL-tillegget \"{slug}\" eksisterer allerede",
"error.page.duplicate": "En side med URL-tillegget \"{slug}\" eksisterer allerede",
"error.page.duplicate.permission": "You are not allowed to duplicate \"{slug}\"",
"error.page.notFound": "Siden \"{slug}\" ble ikke funnet",
"error.page.num.invalid":
"Vennligst skriv inn et gyldig sorteringsnummer. Tallet må ikke være negativt.",
"error.page.num.invalid": "Vennligst skriv inn et gyldig sorteringsnummer. Tallet må ikke være negativt.",
"error.page.slug.invalid": "Vennligst skriv inn en gyldig URL-prefiks",
"error.page.sort.permission": "Siden \"{slug}\" kan ikke sorteres",
"error.page.status.invalid": "Vennligst angi en gyldig sidestatus",
"error.page.undefined": "Siden kunne ikke bli funnet",
"error.page.update.permission": "Du har ikke tilgang til å oppdatere \"{slug}\"",
"error.section.files.max.plural":
"Det er ikke mulig å legge til mer enn {max} filer i seksjonen \"{section}\"",
"error.section.files.max.singular":
"Det er ikke mulig å legge til mer enn én fil i seksjonen \"{section}\"",
"error.section.files.min.plural":
"The \"{section}\" section requires at least {min} files",
"error.section.files.min.singular":
"The \"{section}\" section requires at least one file",
"error.section.files.max.plural": "Det er ikke mulig å legge til mer enn {max} filer i seksjonen \"{section}\"",
"error.section.files.max.singular": "Det er ikke mulig å legge til mer enn én fil i seksjonen \"{section}\"",
"error.section.files.min.plural": "The \"{section}\" section requires at least {min} files",
"error.section.files.min.singular": "The \"{section}\" section requires at least one file",
"error.section.pages.max.plural":
"Det er ikke mulig å legge til mer enn {max} sider i \"{section}\" seksjonen",
"error.section.pages.max.singular":
"Det er ikke mulig å legge til mer enn én side i \"{section}\" seksjonen",
"error.section.pages.min.plural":
"The \"{section}\" section requires at least {min} pages",
"error.section.pages.min.singular":
"The \"{section}\" section requires at least one page",
"error.section.pages.max.plural": "Det er ikke mulig å legge til mer enn {max} sider i \"{section}\" seksjonen",
"error.section.pages.max.singular": "Det er ikke mulig å legge til mer enn én side i \"{section}\" seksjonen",
"error.section.pages.min.plural": "The \"{section}\" section requires at least {min} pages",
"error.section.pages.min.singular": "The \"{section}\" section requires at least one page",
"error.section.notLoaded": "Seksjonen \"{name}\" kunne ikke lastes inn",
"error.section.type.invalid": "Seksjonstypen \"{type}\" er ikke gyldig",
"error.site.changeTitle.empty": "Tittelen kan ikke være tom",
"error.site.changeTitle.permission":
"Du har ikke tillatelse til å endre tittel på siden",
"error.site.changeTitle.permission": "Du har ikke tillatelse til å endre tittel på siden",
"error.site.update.permission": "Du har ikke tillatelse til å oppdatere denne siden",
"error.template.default.notFound": "Standardmalen eksisterer ikke",
"error.user.changeEmail.permission":
"Du har ikke tillatelse til å endre e-post for brukeren \"{name}\"",
"error.user.changeLanguage.permission":
"Du har ikke tillatelse til å endre språk for brukeren \"{name}\"",
"error.user.changeName.permission":
"Du har ikke tillatelse til å endre navn for brukeren \"{name}\"",
"error.user.changePassword.permission":
"Du har ikke tillatelse til å endre passord for brukeren \"{name}\"",
"error.user.changeRole.lastAdmin":
"Rollen for den siste administratoren kan ikke endres",
"error.user.changeRole.permission":
"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.changeEmail.permission": "Du har ikke tillatelse til å endre e-post for brukeren \"{name}\"",
"error.user.changeLanguage.permission": "Du har ikke tillatelse til å endre språk for brukeren \"{name}\"",
"error.user.changeName.permission": "Du har ikke tillatelse til å endre navn for brukeren \"{name}\"",
"error.user.changePassword.permission": "Du har ikke tillatelse til å endre passord for brukeren \"{name}\"",
"error.user.changeRole.lastAdmin": "Rollen for den siste administratoren kan ikke endres",
"error.user.changeRole.permission": "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.delete": "Denne brukeren kunne ikke bli slettet",
"error.user.delete.lastAdmin": "Siste administrator kan ikke slettes",
"error.user.delete.lastUser": "Den siste brukeren kan ikke slettes",
"error.user.delete.permission":
"Du er ikke tillat \u00e5 slette denne brukeren",
"error.user.duplicate":
"En bruker med e-postadresse \"{email}\" eksisterer allerede",
"error.user.delete.permission": "Du er ikke tillat \u00e5 slette denne brukeren",
"error.user.duplicate": "En bruker med e-postadresse \"{email}\" eksisterer allerede",
"error.user.email.invalid": "Vennligst skriv inn en gyldig e-postadresse",
"error.user.language.invalid": "Vennligst skriv inn et gyldig språk",
"error.user.notFound": "Brukeren kunne ikke bli funnet",
"error.user.password.invalid":
"Vennligst skriv inn et gyldig passord. Passordet må minst være 8 tegn langt.",
"error.user.password.invalid": "Vennligst skriv inn et gyldig passord. Passordet må minst være 8 tegn langt.",
"error.user.password.notSame": "Vennligst bekreft passordet",
"error.user.password.undefined": "Brukeren har ikke et passord",
"error.user.role.invalid": "Vennligst skriv inn en gyldig rolle",
"error.user.update.permission":
"Du har ikke tillatelse til å oppdatere brukeren \"{name}\"",
"error.user.update.permission": "Du har ikke tillatelse til å oppdatere brukeren \"{name}\"",
"error.validation.accepted": "Vennligst bekreft",
"error.validation.alpha": "Vennligst skriv kun tegn mellom a-z",
"error.validation.alphanum":
"Vennligst skriv kun tegn mellom a-z eller tall mellom 0-9",
"error.validation.between":
"Vennligst angi en verdi mellom \"{min}\" og \"{max}\"",
"error.validation.alphanum": "Vennligst skriv kun tegn mellom a-z eller tall mellom 0-9",
"error.validation.between": "Vennligst angi en verdi mellom \"{min}\" og \"{max}\"",
"error.validation.boolean": "Vennligst bekreft eller avslå",
"error.validation.contains":
"Vennligst skriv inn en verdi som inneholder \"{needle}\"",
"error.validation.contains": "Vennligst skriv inn en verdi som inneholder \"{needle}\"",
"error.validation.date": "Vennligst skriv inn en gyldig dato",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Vennligst angi en verdi lavere enn {max}",
"error.validation.match": "Verdien samsvarer ikke med det forventede mønsteret",
"error.validation.max": "Vennligst angi en verdi lik eller lavere enn {max}",
"error.validation.maxlength":
"Vennligst angi en kortere verdi. (maks. {max} tegn)",
"error.validation.maxlength": "Vennligst angi en kortere verdi. (maks. {max} tegn)",
"error.validation.maxwords": "Vennligst ikke skriv inn mer enn {max} ord",
"error.validation.min": "Vennligst angi en verdi lik eller større enn {min}",
"error.validation.minlength":
"Vennligst angi en lengre verdi. (minimum. {min} tegn)",
"error.validation.minlength": "Vennligst angi en lengre verdi. (minimum. {min} tegn)",
"error.validation.minwords": "Vennligst skriv inn minst {min} ord",
"error.validation.more": "Vennligst angi en verdi større enn {min}",
"error.validation.notcontains":
"Vennligst angi en verdi som ikke inneholder \"{needle}\"",
"error.validation.notin":
"Vennligst ikke angi noen av følgende:({notIn})",
"error.validation.notcontains": "Vennligst angi en verdi som ikke inneholder \"{needle}\"",
"error.validation.notin": "Vennligst ikke angi noen av følgende:({notIn})",
"error.validation.option": "Vennligst velg et gyldig alternativ",
"error.validation.num": "Vennligst angi et gyldig nummer",
"error.validation.required": "Vennligst skriv inn noe",
@@ -238,8 +193,7 @@
"field.structure.empty": "Ingen oppf\u00f8ringer enda",
"field.users.empty": "Ingen bruker har blitt valgt",
"file.delete.confirm":
"Vil du virkelig slette denne filen?",
"file.delete.confirm": "Vil du virkelig slette denne filen?",
"files": "Filer",
"files.empty": "Ingen filer ennå",
@@ -251,29 +205,22 @@
"installation": "Installasjon",
"installation.completed": "Panelet har blitt installert",
"installation.disabled": "Installasjonsprogrammet for Panelet er deaktivert på offentlige servere som standard. Vennligst kjør installasjonsprogrammet på en lokal maskin eller aktiver den med <code>panel.install</code> innstillingen.",
"installation.issues.accounts":
"\/site\/accounts er ikke skrivbar",
"installation.issues.content":
"Mappen content og alt av innhold m\u00e5 v\u00e6re skrivbar.",
"installation.issues.accounts": "\/site\/accounts er ikke skrivbar",
"installation.issues.content": "Mappen content og alt av innhold m\u00e5 v\u00e6re skrivbar.",
"installation.issues.curl": "Utvidelsen <code>CURL</code> er nødvendig",
"installation.issues.headline": "Panelet kan ikke installeres",
"installation.issues.mbstring":
"Utvidelsen <code>MB String</code> er nødvendig",
"installation.issues.media":
"Mappen <code>/media</code> eksisterer ikke eller er ikke skrivbar",
"installation.issues.mbstring": "Utvidelsen <code>MB String</code> er nødvendig",
"installation.issues.media": "Mappen <code>/media</code> eksisterer ikke eller er ikke skrivbar",
"installation.issues.php": "Pass på at du bruker <code>PHP 7+</code>",
"installation.issues.server":
"Kirby krever <code>Apache</code>, <code>Nginx</code> eller <code>Caddy</code>",
"installation.issues.server": "Kirby krever <code>Apache</code>, <code>Nginx</code> eller <code>Caddy</code>",
"installation.issues.sessions": "Mappen <code>/site/sessions</code> eksisterer ikke eller er ikke skrivbar",
"language": "Spr\u00e5k",
"language.code": "Kode",
"language.convert": "Gjør til standard",
"language.convert.confirm":
"<p>Vil du virkelig konvertere <strong>{name}</strong> til standardspråk? Dette kan ikke angres. </p><p>Dersom <strong>{name}</strong> har innhold som ikke er oversatt, vil nettstedet mangle innhold å falle tilbake på. Dette kan resultere i at deler av nettstedet fremstår som tomt.</p>",
"language.convert.confirm": "<p>Vil du virkelig konvertere <strong>{name}</strong> til standardspråk? Dette kan ikke angres. </p><p>Dersom <strong>{name}</strong> har innhold som ikke er oversatt, vil nettstedet mangle innhold å falle tilbake på. Dette kan resultere i at deler av nettstedet fremstår som tomt.</p>",
"language.create": "Legg til språk",
"language.delete.confirm":
"Vil du virkelig slette språket <strong>{name}</strong> inkludert alle oversettelser? Dette kan ikke angres!",
"language.delete.confirm": "Vil du virkelig slette språket <strong>{name}</strong> inkludert alle oversettelser? Dette kan ikke angres!",
"language.deleted": "Språket har blitt slettet",
"language.direction": "Leseretning",
"language.direction.ltr": "Venstre til høyre",
@@ -292,8 +239,7 @@
"license": "Kirby lisens",
"license.buy": "Kjøp lisens",
"license.register": "Registrer",
"license.register.help":
"Du skal ha mottatt din lisenskode for kjøpet via e-post. Vennligst kopier og lim inn denne for å registrere deg.",
"license.register.help": "Du skal ha mottatt din lisenskode for kjøpet via e-post. Vennligst kopier og lim inn denne for å registrere deg.",
"license.register.label": "Vennligst skriv inn din lisenskode",
"license.register.success": "Takk for at du støtter Kirby",
"license.unregistered": "Dette er en uregistrert demo av Kirby",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Vennligst velg en posisjon",
"page.changeStatus.select": "Velg ny status",
"page.changeTemplate": "Endre mal",
"page.delete.confirm":
"Vil du virkelig slette denne siden?",
"page.delete.confirm.subpages":
"<strong>Denne siden har undersider</strong>. <br>Alle undersider vil også bli slettet.",
"page.delete.confirm": "Vil du virkelig slette denne siden?",
"page.delete.confirm.subpages": "<strong>Denne siden har undersider</strong>. <br>Alle undersider vil også bli slettet.",
"page.delete.confirm.title": "Skriv inn sidetittel for å bekrefte",
"page.draft.create": "Lag utkast",
"page.duplicate.appendix": "Kopier",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Copy pages",
"page.status": "Status",
"page.status.draft": "Utkast",
"page.status.draft.description":
"Siden er i utkastmodus og bare synlig for innloggede redaktører",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.listed": "Offentlig",
"page.status.listed.description": "Siden er offentlig og synlig for alle",
"page.status.unlisted": "Unotert",
@@ -388,6 +331,7 @@
"replace": "Erstatt",
"retry": "Pr\u00f8v p\u00e5 nytt",
"revert": "Forkast",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "Rolle",
"role.admin.description": "The admin has all rights",
@@ -451,8 +395,7 @@
"url.placeholder": "https://example.com",
"user": "Bruker",
"user.blueprint":
"Du kan definere flere seksjoner og skjemafelter for denne brukerrollen i <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Du kan definere flere seksjoner og skjemafelter for denne brukerrollen i <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Endre e-post",
"user.changeLanguage": "Endre språk",
"user.changeName": "Angi nytt navn for denne brukeren",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Velg en ny rolle",
"user.create": "Legg til ny bruker",
"user.delete": "Slett denne brukeren",
"user.delete.confirm":
"Vil du virkelig slette denne konten?",
"user.delete.confirm": "Vil du virkelig slette denne konten?",
"users": "Brukere",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "De avatar kon niet worden geupload",
"error.avatar.delete.fail": "De avatar kan niet worden verwijderd",
"error.avatar.dimensions.invalid":
"Houd de breedte en hoogte van de avatar onder 3000 pixels",
"error.avatar.mime.forbidden":
"De avatar moet een JPEG of PNG bestand zijn",
"error.avatar.dimensions.invalid": "Houd de breedte en hoogte van de avatar onder 3000 pixels",
"error.avatar.mime.forbidden": "De avatar moet een JPEG of PNG bestand zijn",
"error.blueprint.notFound": "De blueprint \"{name}\" kon niet geladen worden",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Ongeldige converter \"{converter}\"",
"error.file.changeName.empty": "De naam mag niet leeg zijn",
"error.file.changeName.permission":
"Je hebt geen rechten om de naam te wijzigen van \"{filename}\"",
"error.file.changeName.permission": "Je hebt geen rechten om de naam te wijzigen van \"{filename}\"",
"error.file.duplicate": "Er bestaat al een bestand met de naam \"{filename}\"",
"error.file.extension.forbidden":
"Bestandsextensie \"{extension}\" is niet toegestaan",
"error.file.extension.missing":
"Je kunt geen bestanden uploaden zonder bestandsextensie",
"error.file.extension.forbidden": "Bestandsextensie \"{extension}\" is niet toegestaan",
"error.file.extension.missing": "Je kunt geen bestanden uploaden zonder bestandsextensie",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
"error.file.maxwidth": "The width of the image must not exceed {width} pixels",
"error.file.mime.differs":
"Het geüploade bestand moet van hetzelfde mime-type zijn: \"{mime}\"",
"error.file.mime.differs": "Het geüploade bestand moet van hetzelfde mime-type zijn: \"{mime}\"",
"error.file.mime.forbidden": "Het type \"{mime}\" is niet toegestaan",
"error.file.mime.invalid": "Invalid mime type: {mime}",
"error.file.mime.missing":
"Het mediatype voor \"{filename}\" kan niet worden gedecteerd",
"error.file.mime.missing": "Het mediatype voor \"{filename}\" kan niet worden gedecteerd",
"error.file.minheight": "The height of the image must be at least {height} pixels",
"error.file.minsize": "The file is too small",
"error.file.minwidth": "The width of the image must be at least {width} pixels",
@@ -90,111 +83,77 @@
"error.license.email": "Gelieve een geldig emailadres in te voeren",
"error.license.verification": "De licentie kon niet worden geverifieerd. ",
"error.page.changeSlug.permission":
"Je kunt de URL van deze pagina niet wijzigen",
"error.page.changeStatus.incomplete":
"Deze pagina bevat fouten en kan niet worden gepubliceerd",
"error.page.changeStatus.permission":
"De status van deze pagina kan niet worden gewijzigd",
"error.page.changeStatus.toDraft.invalid":
"De pagina \"{slug}\" kan niet worden aangepast naar 'concept'",
"error.page.changeTemplate.invalid":
"De template van deze pagina \"{slug}\" kan niet worden gewijzigd",
"error.page.changeTemplate.permission":
"Je hebt geen rechten om het template te wijzigen van \"{slug}\"",
"error.page.changeSlug.permission": "Je kunt de URL van deze pagina niet wijzigen",
"error.page.changeStatus.incomplete": "Deze pagina bevat fouten en kan niet worden gepubliceerd",
"error.page.changeStatus.permission": "De status van deze pagina kan niet worden gewijzigd",
"error.page.changeStatus.toDraft.invalid": "De pagina \"{slug}\" kan niet worden aangepast naar 'concept'",
"error.page.changeTemplate.invalid": "De template van deze pagina \"{slug}\" kan niet worden gewijzigd",
"error.page.changeTemplate.permission": "Je hebt geen rechten om het template te wijzigen van \"{slug}\"",
"error.page.changeTitle.empty": "De titel mag niet leeg zijn",
"error.page.changeTitle.permission":
"Je hebt geen rechten om de titel te wijzigen van \"{slug}\"",
"error.page.changeTitle.permission": "Je hebt geen rechten om de titel te wijzigen van \"{slug}\"",
"error.page.create.permission": "Je hebt geen rechten om \"{slug}\" aan te maken",
"error.page.delete": "De pagina \"{slug}\" kan niet worden verwijderd",
"error.page.delete.confirm": "Voer de paginatitel in om te bevestigen",
"error.page.delete.hasChildren":
"Deze pagina heeft subpagina's en kan niet worden verwijderd",
"error.page.delete.hasChildren": "Deze pagina heeft subpagina's en kan niet worden verwijderd",
"error.page.delete.permission": "Je hebt geen rechten om \"{slug}\" te verwijderen",
"error.page.draft.duplicate":
"Er bestaat al een conceptpagina met de URL-appendix \"{slug}\"",
"error.page.duplicate":
"Er bestaat al een pagina met de URL-appendix \"{slug}\"",
"error.page.draft.duplicate": "Er bestaat al een conceptpagina met de URL-appendix \"{slug}\"",
"error.page.duplicate": "Er bestaat al een pagina met de URL-appendix \"{slug}\"",
"error.page.duplicate.permission": "Je bent niet gemachtigd om \"{slug}\" te dupliceren",
"error.page.notFound": "De pagina \"{slug}\" kan niet worden gevonden",
"error.page.num.invalid":
"Vul een geldig sorteer-cijfer in. Het cijfer mag niet negatief zijn",
"error.page.num.invalid": "Vul een geldig sorteer-cijfer in. Het cijfer mag niet negatief zijn",
"error.page.slug.invalid": "Vul een geldige URL-prefix in",
"error.page.sort.permission": "De pagina \"{slug}\" kan niet worden gesorteerd",
"error.page.status.invalid": "Zorg voor een geldige paginastatus",
"error.page.undefined": "De pagina kan niet worden gevonden",
"error.page.update.permission": "Je hebt geen rechten om \"{slug}\" te updaten",
"error.section.files.max.plural":
"Voeg niet meer dan {max} bestanden toe aan de zone \"{section}\"",
"error.section.files.max.singular":
"Je kunt niet meer dan 1 bestand toevoegen aan de zone \"{section}\"",
"error.section.files.min.plural":
"De \"{section}\" sectie moet minimaal {min} bestanden bevatten.",
"error.section.files.min.singular":
"De \"{section}\" sectie moet minimaal 1 bestand bevatten.",
"error.section.files.max.plural": "Voeg niet meer dan {max} bestanden toe aan de zone \"{section}\"",
"error.section.files.max.singular": "Je kunt niet meer dan 1 bestand toevoegen aan de zone \"{section}\"",
"error.section.files.min.plural": "De \"{section}\" sectie moet minimaal {min} bestanden bevatten.",
"error.section.files.min.singular": "De \"{section}\" sectie moet minimaal 1 bestand bevatten.",
"error.section.pages.max.plural":
"Je kunt niet meer dan {max} pagina's toevoegen aan de zone \"{section}\"",
"error.section.pages.max.singular":
"Je kunt niet meer dan 1 pagina toevoegen aan de zone \"{section}\"",
"error.section.pages.min.plural":
"De \"{section}\" sectie moet minimaal {min} pagina's bevatten.",
"error.section.pages.min.singular":
"De \"{section}\" sectie moet minimaal 1 pagina bevatten.",
"error.section.pages.max.plural": "Je kunt niet meer dan {max} pagina's toevoegen aan de zone \"{section}\"",
"error.section.pages.max.singular": "Je kunt niet meer dan 1 pagina toevoegen aan de zone \"{section}\"",
"error.section.pages.min.plural": "De \"{section}\" sectie moet minimaal {min} pagina's bevatten.",
"error.section.pages.min.singular": "De \"{section}\" sectie moet minimaal 1 pagina bevatten.",
"error.section.notLoaded": "De zone \"{name}\" kan niet worden geladen",
"error.section.type.invalid": "Zone-type \"{type}\" is niet geldig",
"error.site.changeTitle.empty": "De titel mag niet leeg zijn",
"error.site.changeTitle.permission":
"Je hebt geen rechten om de titel van de site te wijzigen",
"error.site.changeTitle.permission": "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.template.default.notFound": "Het standaard template bestaat niet",
"error.user.changeEmail.permission":
"Je hebt geen rechten om het e-mailadres van gebruiker \"{name}\" te wijzigen",
"error.user.changeLanguage.permission":
"Je hebt geen rechten om de taal voor gebruiker \"{name}\" te wijzigen",
"error.user.changeName.permission":
"Je hebt geen rechten om de naam van gebruiker \"{name}\" te wijzigen",
"error.user.changePassword.permission":
"Je hebt geen rechten om het wachtwoord van gebruiker \"{name}\" te wijzigen",
"error.user.changeRole.lastAdmin":
"De rol van de laatste beheerder kan niet worden gewijzigd",
"error.user.changeRole.permission":
"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.changeEmail.permission": "Je hebt geen rechten om het e-mailadres van gebruiker \"{name}\" te wijzigen",
"error.user.changeLanguage.permission": "Je hebt geen rechten om de taal voor gebruiker \"{name}\" te wijzigen",
"error.user.changeName.permission": "Je hebt geen rechten om de naam van gebruiker \"{name}\" te wijzigen",
"error.user.changePassword.permission": "Je hebt geen rechten om het wachtwoord van gebruiker \"{name}\" te wijzigen",
"error.user.changeRole.lastAdmin": "De rol van de laatste beheerder kan niet worden gewijzigd",
"error.user.changeRole.permission": "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.delete": "De gebruiker \"{name}\" kan niet worden verwijderd",
"error.user.delete.lastAdmin": "Je kan de laatste admin niet verwijderen",
"error.user.delete.lastUser": "De laatste gebruiker kan niet worden verwijderd",
"error.user.delete.permission":
"Je hebt geen rechten om gebruiker \"{name}\" te verwijderen",
"error.user.duplicate":
"Er bestaat al een gebruiker met e-mailadres \"{email}\"",
"error.user.delete.permission": "Je hebt geen rechten om gebruiker \"{name}\" te verwijderen",
"error.user.duplicate": "Er bestaat al een gebruiker met e-mailadres \"{email}\"",
"error.user.email.invalid": "Gelieve een geldig emailadres in te voeren",
"error.user.language.invalid": "Gelieve een geldige taal in te voeren",
"error.user.notFound": "De gebruiker \"{name}\" kan niet worden gevonden",
"error.user.password.invalid":
"Gelieve een geldig wachtwoord in te voeren. Wachtwoorden moeten minstens 8 karakters lang zijn.",
"error.user.password.invalid": "Gelieve een geldig wachtwoord in te voeren. Wachtwoorden moeten minstens 8 karakters lang zijn.",
"error.user.password.notSame": "De wachtwoorden komen niet overeen",
"error.user.password.undefined": "De gebruiker heeft geen wachtwoord",
"error.user.role.invalid": "Gelieve een geldige rol in te voeren",
"error.user.update.permission":
"Je hebt geen rechten om gebruiker \"{name}\" te updaten",
"error.user.update.permission": "Je hebt geen rechten om gebruiker \"{name}\" te updaten",
"error.validation.accepted": "Gelieve te bevestigen",
"error.validation.alpha": "Vul alleen a-z karakters in",
"error.validation.alphanum":
"Vul alleen a-z karakters of cijfers (0-9) in",
"error.validation.between":
"Vul een waarde tussen \"{min}\" en \"{max}\"",
"error.validation.alphanum": "Vul alleen a-z karakters of cijfers (0-9) in",
"error.validation.between": "Vul een waarde tussen \"{min}\" en \"{max}\"",
"error.validation.boolean": "Ga akkoord of weiger",
"error.validation.contains":
"Vul een waarde in die \"{needle}\" bevat",
"error.validation.contains": "Vul een waarde in die \"{needle}\" bevat",
"error.validation.date": "Vul een geldige datum in",
"error.validation.date.after": "Vul een datum in na {date}",
"error.validation.date.before": "Vul een datum in voor {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Vul een waarde in lager dan {max}",
"error.validation.match": "De invoer klopt niet met het verwachte patroon",
"error.validation.max": "Vul een waarde in die gelijk is aan of lager dan {max}",
"error.validation.maxlength":
"Gebruik minder karakters (maximaal {max} karakters)",
"error.validation.maxlength": "Gebruik minder karakters (maximaal {max} karakters)",
"error.validation.maxwords": "Vul minder dan {max} woorden in",
"error.validation.min": "Vul een waarde in die gelijk is aan of groter dan {min}",
"error.validation.minlength":
"Gebruik meer karakters (minimaal {min} karakters)",
"error.validation.minlength": "Gebruik meer karakters (minimaal {min} karakters)",
"error.validation.minwords": "Vul minimaal {min} woorden in",
"error.validation.more": "Vul een grotere waarde in dan {min}",
"error.validation.notcontains":
"Zorg dat de invoer niet \"{needle}\" bevat",
"error.validation.notin":
"Vul de volgende dingen niet in: {{notIn}}",
"error.validation.notcontains": "Zorg dat de invoer niet \"{needle}\" bevat",
"error.validation.notin": "Vul de volgende dingen niet in: {{notIn}}",
"error.validation.option": "Selecteer een geldige optie",
"error.validation.num": "Vul een geldig cijfer in",
"error.validation.required": "Vul iets in",
@@ -238,8 +193,7 @@
"field.structure.empty": "Nog geen items.",
"field.users.empty": "Nog geen gebruikers geselecteerd",
"file.delete.confirm":
"Wil je dit bestand <br><strong>{filename}</strong> verwijderen?",
"file.delete.confirm": "Wil je dit bestand <br><strong>{filename}</strong> verwijderen?",
"files": "Bestanden",
"files.empty": "Nog geen bestanden",
@@ -251,29 +205,22 @@
"installation": "Installatie",
"installation.completed": "Het Panel is geïnstalleerd",
"installation.disabled": "Je kan geen Panel installatie uitvoeren op een openbare server. Voer het installatieprogramma uit op een lokale computer of schakel het in met de <code>panel.install</code> optie.",
"installation.issues.accounts":
"De map <code>/site/accounts</code> heeft geen schrijfrechten",
"installation.issues.content":
"De map <code>/content</code> bestaat niet of heeft geen schrijfrechten",
"installation.issues.accounts": "De map <code>/site/accounts</code> heeft geen schrijfrechten",
"installation.issues.content": "De map <code>/content</code> bestaat niet of heeft geen schrijfrechten",
"installation.issues.curl": "De <code>CURL</code>-extensie is vereist",
"installation.issues.headline": "Het Panel kan niet worden geïnstalleerd",
"installation.issues.mbstring":
"De <code>MB String</code> extensie is verplicht",
"installation.issues.media":
"De map <code>/media</code>bestaat niet of heeft geen schrijfrechten",
"installation.issues.mbstring": "De <code>MB String</code> extensie is verplicht",
"installation.issues.media": "De map <code>/media</code>bestaat niet of heeft geen schrijfrechten",
"installation.issues.php": "Gebruik <code>PHP7+</code>",
"installation.issues.server":
"Kirby vereist <code>Apache</code>, <code>Nginx</code>of <code>Caddy</code>",
"installation.issues.server": "Kirby vereist <code>Apache</code>, <code>Nginx</code>of <code>Caddy</code>",
"installation.issues.sessions": "De map <code>/site/sessions</code> bestaat niet of heeft geen schrijfrechten",
"language": "Taal",
"language.code": "Code",
"language.convert": "Maak standaard",
"language.convert.confirm":
"<p>Weet je zeker dat je <strong>{name}</strong>wilt aanpassen naar de standaard taal? Dit kan niet ongedaan worden gemaakt</p><p>Als <strong>{name}</strong> nog niet vertaalde content heeft, is er geen content meer om op terug te vallen en zouden delen van je site leeg kunnen zijn.</p>",
"language.convert.confirm": "<p>Weet je zeker dat je <strong>{name}</strong>wilt aanpassen naar de standaard taal? Dit kan niet ongedaan worden gemaakt</p><p>Als <strong>{name}</strong> nog niet vertaalde content heeft, is er geen content meer om op terug te vallen en zouden delen van je site leeg kunnen zijn.</p>",
"language.create": "Nieuwe taal toevoegen",
"language.delete.confirm":
"Weet je zeker dat je de taal <strong>{name}</strong> inclusief alle vertalingen wilt verwijderen? Je kunt dit niet ongedaan maken!",
"language.delete.confirm": "Weet je zeker dat je de taal <strong>{name}</strong> inclusief alle vertalingen wilt verwijderen? Je kunt dit niet ongedaan maken!",
"language.deleted": "De taal is verwijderd",
"language.direction": "Leesrichting",
"language.direction.ltr": "Links naar rechts",
@@ -292,8 +239,7 @@
"license": "Licentie",
"license.buy": "Koop een licentie",
"license.register": "Registreren",
"license.register.help":
"Je hebt de licentie via e-mail gekregen nadat je de aankoop hebt gedaan. Kopieer en plak de licentie om te registreren. ",
"license.register.help": "Je hebt de licentie via e-mail gekregen nadat je de aankoop hebt gedaan. Kopieer en plak de licentie om te registreren. ",
"license.register.label": "Vul je licentie in",
"license.register.success": "Bedankt dat je Kirby ondersteunt",
"license.unregistered": "Dit is een niet geregistreerde demo van Kirby",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Selecteer een positie",
"page.changeStatus.select": "Selecteer een nieuwe status",
"page.changeTemplate": "Verander template",
"page.delete.confirm":
"Weet je zeker dat je pagina <strong>{title}</strong> wilt verwijderen?",
"page.delete.confirm.subpages":
"<strong>Deze pagina heeft subpagina's</strong>. <br>Alle subpagina's worden ook verwijderd.",
"page.delete.confirm": "Weet je zeker dat je pagina <strong>{title}</strong> wilt verwijderen?",
"page.delete.confirm.subpages": "<strong>Deze pagina heeft subpagina's</strong>. <br>Alle subpagina's worden ook verwijderd.",
"page.delete.confirm.title": "Voeg een paginatitel in om te bevestigen",
"page.draft.create": "Maak concept",
"page.duplicate.appendix": "Kopiëren",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Kopieer pagina's",
"page.status": "Status",
"page.status.draft": "Concept",
"page.status.draft.description":
"De pagina is in concept-modus en alleen zichtbaar voor ingelogde redacteuren",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.listed": "Openbaar",
"page.status.listed.description": "Deze pagina is toegankelijk voor iedereen",
"page.status.unlisted": "Niet gepubliceerd",
@@ -388,6 +331,7 @@
"replace": "Vervang",
"retry": "Probeer opnieuw",
"revert": "Annuleren",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "Rol",
"role.admin.description": "De admin heeft alle rechten",
@@ -451,8 +395,7 @@
"url.placeholder": "https://voorbeeld.nl",
"user": "Gebruiker",
"user.blueprint":
"Je kunt extra zones en formuliervelden voor deze rol toevoegen in <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Je kunt extra zones en formuliervelden voor deze rol toevoegen in <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Email veranderen",
"user.changeLanguage": "Taal veranderen",
"user.changeName": "Gebruiker hernoemen",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Kies een nieuwe rol",
"user.create": "Voeg een nieuwe gebruiker toe",
"user.delete": "Verwijder deze gebruiker",
"user.delete.confirm":
"Weet je zeker dat je <br><strong>{email}</strong>wil verwijderen?",
"user.delete.confirm": "Weet je zeker dat je <br><strong>{email}</strong>wil verwijderen?",
"users": "Gebruikers",

View File

@@ -23,29 +23,27 @@
"delete": "Usu\u0144",
"dimensions": "Wymiary",
"disabled": "Disabled",
"disabled": "Wyłączone",
"discard": "Odrzu\u0107",
"download": "Pobierz",
"duplicate": "Zduplikuj",
"edit": "Edytuj",
"dialog.files.empty": "No files to select",
"dialog.pages.empty": "No pages to select",
"dialog.users.empty": "No users to select",
"dialog.files.empty": "Brak plików do wyboru",
"dialog.pages.empty": "Brak stron do wyboru",
"dialog.users.empty": "Brak użytkowników do wyboru",
"email": "Email",
"email.placeholder": "mail@example.com",
"error.access.login": "Nieprawidłowy login",
"error.access.panel": "Nie masz uprawnień by dostać się do panelu",
"error.access.view": "You are not allowed to access this part of the panel",
"error.access.view": "Nie masz uprawnień, by dostać się do tej części panelu",
"error.avatar.create.fail": "Nie udało się załadować zdjęcia profilowego",
"error.avatar.delete.fail": "Nie udało się usunąć zdjęcia profilowego",
"error.avatar.dimensions.invalid":
"Proszę zachować szerokość i wysokość zdjęcia profilowego poniżej 3000 pikseli",
"error.avatar.mime.forbidden":
"Zdjęcie profilowe musi być plikiem JPEG lub PNG",
"error.avatar.dimensions.invalid": "Proszę zachować szerokość i wysokość zdjęcia profilowego poniżej 3000 pikseli",
"error.avatar.mime.forbidden": "Zdjęcie profilowe musi być plikiem JPEG lub PNG",
"error.blueprint.notFound": "Nie udało się załadować wzorca \"{name}\"",
@@ -53,152 +51,113 @@
"error.field.converter.invalid": "Nieprawidłowy konwerter \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Nie masz uprawnień, by zmienić nazwę \"{filename}\"",
"error.file.changeName.empty": "Imię nie może być puste",
"error.file.changeName.permission": "Nie masz uprawnień, by zmienić nazwę \"{filename}\"",
"error.file.duplicate": "Istnieje już plik o nazwie \"{filename}\"",
"error.file.extension.forbidden":
"Rozszerzenie \"{extension}\" jest niedozwolone",
"error.file.extension.missing":
"Brak rozszerzenia pliku \"{filename}\"",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
"error.file.maxwidth": "The width of the image must not exceed {width} pixels",
"error.file.mime.differs":
"Przesłany plik musi być tego samego typu mime \"{mime}\"",
"error.file.extension.forbidden": "Rozszerzenie \"{extension}\" jest niedozwolone",
"error.file.extension.missing": "Brak rozszerzenia pliku \"{filename}\"",
"error.file.maxheight": "Wysokość obrazka nie może być większa niż {height} pikseli",
"error.file.maxsize": "Plik jest za duży",
"error.file.maxwidth": "Szerokość obrazka nie może być większa niż {width} pikseli",
"error.file.mime.differs": "Przesłany plik musi być tego samego typu mime \"{mime}\"",
"error.file.mime.forbidden": "Typ multimediów \"{mime}\" jest niedozwolony",
"error.file.mime.invalid": "Invalid mime type: {mime}",
"error.file.mime.missing":
"Nie można wykryć typu multimediów dla \"{filename}\"",
"error.file.minheight": "The height of the image must be at least {height} pixels",
"error.file.minsize": "The file is too small",
"error.file.minwidth": "The width of the image must be at least {width} pixels",
"error.file.mime.invalid": "Nieprawidłowy typ MIME: {mime}",
"error.file.mime.missing": "Nie można wykryć typu multimediów dla \"{filename}\"",
"error.file.minheight": "Wysokość obrazka musi wynosić co najmniej {height} pikseli",
"error.file.minsize": "Plik jest za mały",
"error.file.minwidth": "Szerokość obrazka musi wynosić co najmniej {width} pikseli",
"error.file.name.missing": "Nazwa pliku nie może być pusta",
"error.file.notFound": "Nie można znaleźć pliku \"{filename}\"",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
"error.file.orientation": "Orientacja obrazka musi b \"{orientation}\"",
"error.file.type.forbidden": "Nie możesz przesyłać plików {type}",
"error.file.undefined": "Nie można znaleźć pliku",
"error.form.incomplete": "Popraw wszystkie błędy w formularzu…",
"error.form.notSaved": "Nie udało się zapisać formularza",
"error.language.code": "Please enter a valid code for the language",
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.language.code": "Wprowadź poprawny kod języka.",
"error.language.duplicate": "Język już istnieje.",
"error.language.name": "Wprowadź poprawną nazwę języka.",
"error.license.format": "Wprowadź poprawny klucz licencyjny",
"error.license.email": "Wprowadź poprawny adres email",
"error.license.verification": "Nie udało się zweryfikować licencji",
"error.page.changeSlug.permission":
"Nie możesz zmienić końcówki adresu URL w \"{slug}\"",
"error.page.changeStatus.incomplete":
"Strona zawiera błędy i nie można jej opublikować",
"error.page.changeStatus.permission":
"Status tej strony nie może zostać zmieniony",
"error.page.changeStatus.toDraft.invalid":
"Strony \"{slug}\" nie można przekonwertować na szkic",
"error.page.changeTemplate.invalid":
"Nie można zmienić szablonu strony \"{slug}\"",
"error.page.changeTemplate.permission":
"Nie masz uprawnień, by zmienić szablon dla \"{slug}\"",
"error.page.changeSlug.permission": "Nie możesz zmienić końcówki adresu URL w \"{slug}\"",
"error.page.changeStatus.incomplete": "Strona zawiera błędy i nie można jej opublikować",
"error.page.changeStatus.permission": "Status tej strony nie może zostać zmieniony",
"error.page.changeStatus.toDraft.invalid": "Strony \"{slug}\" nie można przekonwertować na szkic",
"error.page.changeTemplate.invalid": "Nie można zmienić szablonu strony \"{slug}\"",
"error.page.changeTemplate.permission": "Nie masz uprawnień, by zmienić szablon dla \"{slug}\"",
"error.page.changeTitle.empty": "Tytuł nie może być pusty",
"error.page.changeTitle.permission":
"Nie masz uprawnień, by zmienić tytuł dla \"{slug}\"",
"error.page.changeTitle.permission": "Nie masz uprawnień, by zmienić tytuł dla \"{slug}\"",
"error.page.create.permission": "Nie masz uprawnień, by utworzyć \"{slug}\"",
"error.page.delete": "Strony \"{slug}\" nie można usunąć",
"error.page.delete.confirm": "Wprowadź tytuł strony, aby potwierdzić",
"error.page.delete.hasChildren":
"Strona zawiera podstrony i nie można jej usunąć",
"error.page.delete.hasChildren": "Strona zawiera podstrony i nie można jej usunąć",
"error.page.delete.permission": "Nie masz uprawnień, by usunąć \"{slug}\"",
"error.page.draft.duplicate":
"Istnieje już szkic z końcówką URL \"{slug}\"",
"error.page.duplicate":
"Istnieje już strona z końcówką URL \"{slug}\"",
"error.page.draft.duplicate": "Istnieje już szkic z końcówką URL \"{slug}\"",
"error.page.duplicate": "Istnieje już strona z końcówką URL \"{slug}\"",
"error.page.duplicate.permission": "Nie masz uprawnień, by zduplikować \"{slug}\"",
"error.page.notFound": "Nie można znaleźć strony \"{slug}\"",
"error.page.num.invalid":
"Wprowadź poprawny numer sortujący. Liczby nie mogą być ujemne.",
"error.page.num.invalid": "Wprowadź poprawny numer sortujący. Liczby nie mogą być ujemne.",
"error.page.slug.invalid": "Wprowadź poprawną końcówkę adresu URL",
"error.page.sort.permission": "Nie można sortować strony \"{slug}\"",
"error.page.status.invalid": "Ustaw prawidłowy status strony",
"error.page.undefined": "Nie udało się znaleźć strony",
"error.page.update.permission": "Nie masz uprawnień, by zaktualizować \"{slug}\"",
"error.section.files.max.plural":
"Do sekcji \"{section}\" można dodać nie więcej niż {max} plików",
"error.section.files.max.singular":
"Do sekcji \"{section}\" można dodać tylko jeden plik",
"error.section.files.min.plural":
"The \"{section}\" section requires at least {min} files",
"error.section.files.min.singular":
"The \"{section}\" section requires at least one file",
"error.section.files.max.plural": "Do sekcji \"{section}\" można dodać nie więcej niż {max} plików",
"error.section.files.max.singular": "Do sekcji \"{section}\" można dodać tylko jeden plik",
"error.section.files.min.plural": "W sekcji \"{section}\" musi być co najmniej {min} pliki/-ów",
"error.section.files.min.singular": "W sekcji \"{section}\" musi być co najmniej jeden plik",
"error.section.pages.max.plural":
"Do sekcji \"{section}\" można dodać nie więcej niż {max} stron",
"error.section.pages.max.singular":
"Do sekcji \"{section}\" można dodać tylko jedną stronę",
"error.section.pages.min.plural":
"The \"{section}\" section requires at least {min} pages",
"error.section.pages.min.singular":
"The \"{section}\" section requires at least one page",
"error.section.pages.max.plural": "Do sekcji \"{section}\" można dodać nie więcej niż {max} stron",
"error.section.pages.max.singular": "Do sekcji \"{section}\" można dodać tylko jedną stronę",
"error.section.pages.min.plural": "W sekcji \"{section}\" musi być co najmniej {min} stron/-y",
"error.section.pages.min.singular": "W sekcji \"{section}\" musi być co najmniej jedna strona",
"error.section.notLoaded": "Nie udało się załadować sekcji \"{name}\"",
"error.section.type.invalid": "Typ sekcji \"{type}\" jest nieprawidłowy",
"error.site.changeTitle.empty": "Tytuł nie może być pusty",
"error.site.changeTitle.permission":
"Nie masz uprawnień, by zmienić tytuł strony",
"error.site.changeTitle.permission": "Nie masz uprawnień, by zmienić tytuł strony",
"error.site.update.permission": "Nie masz uprawnień, by zaktualizować stronę",
"error.template.default.notFound": "Domyślny szablon nie istnieje",
"error.user.changeEmail.permission":
"Nie masz uprawnień, by zmienić adres e-mail użytkownika \"{name}\"",
"error.user.changeLanguage.permission":
"Nie masz uprawnień, by zmienić język użytkownika \"{name}\"",
"error.user.changeName.permission":
"Nie masz uprawnień, by zmienić nazwę użytkownika \"{name}\"",
"error.user.changePassword.permission":
"Nie masz uprawnień, by zmienić hasło użytkownika \"{name}\"",
"error.user.changeRole.lastAdmin":
"Nie można zmienić roli ostatniego administratora",
"error.user.changeRole.permission":
"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.changeEmail.permission": "Nie masz uprawnień, by zmienić adres e-mail użytkownika \"{name}\"",
"error.user.changeLanguage.permission": "Nie masz uprawnień, by zmienić język użytkownika \"{name}\"",
"error.user.changeName.permission": "Nie masz uprawnień, by zmienić nazwę użytkownika \"{name}\"",
"error.user.changePassword.permission": "Nie masz uprawnień, by zmienić hasło użytkownika \"{name}\"",
"error.user.changeRole.lastAdmin": "Nie można zmienić roli ostatniego administratora",
"error.user.changeRole.permission": "Nie masz uprawnień, by zmienić rolę użytkownika \"{name}\"",
"error.user.changeRole.toAdmin": "Nie masz uprawnień, by awansować kogoś do roli daministratora",
"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.lastAdmin": "Nie można usunąć ostatniego administratora",
"error.user.delete.lastUser": "Nie można usunąć ostatniego użytkownika",
"error.user.delete.permission":
"Nie masz uprawnień, by usunąć użytkownika \"{name}\"",
"error.user.duplicate":
"Istnieje już użytkownik z adresem email \"{email}\"",
"error.user.delete.permission": "Nie masz uprawnień, by usunąć użytkownika \"{name}\"",
"error.user.duplicate": "Istnieje już użytkownik z adresem email \"{email}\"",
"error.user.email.invalid": "Wprowadź poprawny adres email",
"error.user.language.invalid": "Proszę podać poprawny język",
"error.user.notFound": "Nie można znaleźć użytkownika \"{name}\"",
"error.user.password.invalid":
"Wprowadź prawidłowe hasło. Hasła muszą mieć co najmniej 8 znaków.",
"error.user.password.invalid": "Wprowadź prawidłowe hasło. Hasła muszą mieć co najmniej 8 znaków.",
"error.user.password.notSame": "Hasła nie są takie same",
"error.user.password.undefined": "Użytkownik nie ma hasła",
"error.user.role.invalid": "Wprowadź poprawną rolę",
"error.user.update.permission":
"Nie masz uprawnień, by zaktualizować użytkownika \"{name}\"",
"error.user.update.permission": "Nie masz uprawnień, by zaktualizować użytkownika \"{name}\"",
"error.validation.accepted": "Proszę potwierdzić",
"error.validation.alpha": "Wprowadź tylko znaki między a-z",
"error.validation.alphanum":
"Wprowadź tylko znaki między a-z lub cyfry 0-9",
"error.validation.between":
"Wprowadź wartość między \"{min}\" i \"{max}\"",
"error.validation.alphanum": "Wprowadź tylko znaki między a-z lub cyfry 0-9",
"error.validation.between": "Wprowadź wartość między \"{min}\" i \"{max}\"",
"error.validation.boolean": "Potwierdź lub odmów",
"error.validation.contains":
"Wprowadź wartość, która zawiera \"{needle}\"",
"error.validation.contains": "Wprowadź wartość, która zawiera \"{needle}\"",
"error.validation.date": "Wprowadź poprawną datę",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.date.after": "Wprowadź datę późniejszą niż {date}",
"error.validation.date.before": "Wprowadź datę wcześniejszą niż {date}",
"error.validation.date.between": "Wprowadź datę między {min} a {max}",
"error.validation.denied": "Proszę odmówić",
"error.validation.different": "Wartością nie może być \"{other}\"",
"error.validation.email": "Wprowadź poprawny adres email",
@@ -210,18 +169,14 @@
"error.validation.less": "Wprowadź wartość mniejszą niż {max}",
"error.validation.match": "Wartość nie jest zgodna z oczekiwanym wzorcem",
"error.validation.max": "Wprowadź wartość równą lub mniejszą niż {max}",
"error.validation.maxlength":
"Wprowadź krótszą wartość. (maks. {max} znaków)",
"error.validation.maxlength": "Wprowadź krótszą wartość. (maks. {max} znaków)",
"error.validation.maxwords": "Wprowadź nie więcej niż {max} słowa/słów",
"error.validation.min": "Wprowadź wartość równą lub większą niż {min}",
"error.validation.minlength":
"Wprowadź dłuższą wartość. (min. {min} znaków)",
"error.validation.minlength": "Wprowadź dłuższą wartość. (min. {min} znaków)",
"error.validation.minwords": "Wprowadź co najmniej {min} słowa/słów",
"error.validation.more": "Wprowadź wartość większą niż {min}",
"error.validation.notcontains":
"Wprowadź wartość, która nie zawiera \"{needle}\"",
"error.validation.notin":
"Nie wprowadzaj żadnego z następujących ({notIn})",
"error.validation.notcontains": "Wprowadź wartość, która nie zawiera \"{needle}\"",
"error.validation.notin": "Nie wprowadzaj żadnego z następujących ({notIn})",
"error.validation.option": "Wybierz poprawną opcję",
"error.validation.num": "Wprowadź poprawny numer",
"error.validation.required": "Wpisz coś",
@@ -231,15 +186,14 @@
"error.validation.time": "Wprowadź poprawny czas",
"error.validation.url": "Wprowadź poprawny adres URL",
"field.required": "The field is required",
"field.required": "Pole jest wymagane",
"field.files.empty": "Nie wybrano jeszcze żadnych plików",
"field.pages.empty": "Nie wybrano jeszcze żadnych stron",
"field.structure.delete.confirm": "Czy na pewno chcesz usunąć ten wiersz?",
"field.structure.empty": "Nie ma jeszcze \u017cadnych wpis\u00f3w.",
"field.users.empty": "Nie wybrano jeszcze żadnych użytkowników",
"file.delete.confirm":
"Czy na pewno chcesz usunąć <br><strong>{filename}</strong>?",
"file.delete.confirm": "Czy na pewno chcesz usunąć <br><strong>{filename}</strong>?",
"files": "Pliki",
"files.empty": "Nie ma jeszcze żadnych plików",
@@ -251,35 +205,28 @@
"installation": "Instalacja",
"installation.completed": "Panel został zainstalowany",
"installation.disabled": "Instalator panelu jest domyślnie wyłączony na serwerach publicznych. Uruchom instalator na komputerze lokalnym lub włącz go za pomocą opcji <code>panel.install</code>.",
"installation.issues.accounts":
"Folder <code>/site/accounts</code> nie istnieje lub nie ma uprawnień do zapisu",
"installation.issues.content":
"Folder <code>/content</code> nie istnieje lub nie ma uprawnień do zapisu",
"installation.issues.accounts": "Folder <code>/site/accounts</code> nie istnieje lub nie ma uprawnień do zapisu",
"installation.issues.content": "Folder <code>/content</code> nie istnieje lub nie ma uprawnień do zapisu",
"installation.issues.curl": "Wymagane jest rozszerzenie <code>CURL</code>",
"installation.issues.headline": "Nie można zainstalować panelu",
"installation.issues.mbstring":
"Wymagane jest rozszerzenie <code>MB String</code>",
"installation.issues.media":
"Folder <code>/media</code> nie istnieje lub nie ma uprawnień do zapisu",
"installation.issues.mbstring": "Wymagane jest rozszerzenie <code>MB String</code>",
"installation.issues.media": "Folder <code>/media</code> nie istnieje lub nie ma uprawnień do zapisu",
"installation.issues.php": "Upewnij się, że używasz <code>PHP 7+</code>",
"installation.issues.server":
"Kirby wymaga <code>Apache</code>, <code>Nginx</code> lub <code>Caddy</code>",
"installation.issues.server": "Kirby wymaga <code>Apache</code>, <code>Nginx</code> lub <code>Caddy</code>",
"installation.issues.sessions": "Folder <code>/site/sessions</code> nie istnieje lub nie ma uprawnień do zapisu",
"language": "J\u0119zyk",
"language.code": "Kod",
"language.convert": "Ustaw jako domyślny",
"language.convert.confirm":
"<p>Czy na pewno chcesz zmienić domyślny język na <strong>{name}</strong>? Nie można tego cofnąć.</p><p>Jeżeli brakuje tłumaczenia jakichś treści na <strong>{name}</strong>, nie będzie ich czym zastąpić i części witryny mogą być puste.</p>",
"language.convert.confirm": "<p>Czy na pewno chcesz zmienić domyślny język na <strong>{name}</strong>? Nie można tego cofnąć.</p><p>Jeżeli brakuje tłumaczenia jakichś treści na <strong>{name}</strong>, nie będzie ich czym zastąpić i części witryny mogą być puste.</p>",
"language.create": "Dodaj nowy język",
"language.delete.confirm":
"Czy na pewno chcesz usunąć język <strong>{name}</strong> i wszystkie tłumaczenia? Tego nie da się cofnąć!",
"language.delete.confirm": "Czy na pewno chcesz usunąć język <strong>{name}</strong> i wszystkie tłumaczenia? Tego nie da się cofnąć!",
"language.deleted": "Język został usunięty",
"language.direction": "Kierunek czytania",
"language.direction.ltr": "Od lewej do prawej",
"language.direction.rtl": "Od prawej do lewej",
"language.locale": "PHP locale string",
"language.locale.warning": "You are using a custom locale set up. Please modify it in the language file in /site/languages",
"language.locale.warning": "Używasz niestandardowej konfiguracji ustawień regionalnych. Zmodyfikuj to w pliku języka w /site/langugaes",
"language.name": "Nazwa",
"language.updated": "Język został zaktualizowany",
@@ -292,8 +239,7 @@
"license": "Licencja",
"license.buy": "Kup licencję",
"license.register": "Zarejestruj",
"license.register.help":
"Po zakupieniu licencji otrzymałaś/-eś mailem klucz. Skopiuj go i wklej tutaj, aby dokonać rejestracji.",
"license.register.help": "Po zakupieniu licencji otrzymałaś/-eś mailem klucz. Skopiuj go i wklej tutaj, aby dokonać rejestracji.",
"license.register.label": "Wprowadź swój kod licencji",
"license.register.success": "Dziękujemy za wspieranie Kirby",
"license.unregistered": "To jest niezarejestrowana wersja demonstracyjna Kirby",
@@ -304,12 +250,12 @@
"loading": "Ładuję",
"lock.unsaved": "Niezapisane zmiany",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.unsaved.empty": "Nie ma już żadnych niezapisanych zmian",
"lock.isLocked": "Niezapisane zmiany autorstwa <strong>{email}</strong>",
"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.unlock": "Unlock",
"lock.isUnlocked": "Your unsaved changes have been overwritten by another user. You can download your changes to merge them manually.",
"lock.file.isLocked": "Plik jest aktualnie edytowany przez {email} i nie może zostać zmieniony.",
"lock.page.isLocked": "Strona jest aktualnie edytowana przez {email} i nie może zostać zmieniona.",
"lock.unlock": "Odblokuj",
"lock.isUnlocked": "Twoje niezapisane zmiany zostały nadpisane przez innego użytkownika. Możesz pobrać swoje zmiany, by scalić je ręcznie.",
"login": "Zaloguj",
"login.remember": "Nie wylogowuj mnie",
@@ -338,8 +284,8 @@
"more": "Więcej",
"name": "Nazwa",
"next": "Następne",
"off": "off",
"on": "on",
"off": "wyłączone",
"on": "włączone",
"open": "Otwórz",
"options": "Opcje",
@@ -354,19 +300,16 @@
"page.changeStatus.position": "Wybierz pozycję",
"page.changeStatus.select": "Wybierz nowy status",
"page.changeTemplate": "Zmień szablon",
"page.delete.confirm":
"Czy na pewno chcesz usunąć <strong>{title}</strong>?",
"page.delete.confirm.subpages":
"<strong>Ta strona zawiera podstrony</strong>. <br>Wszystkie podstrony również zostaną usunięte.",
"page.delete.confirm": "Czy na pewno chcesz usunąć <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Ta strona zawiera podstrony</strong>. <br>Wszystkie podstrony również zostaną usunięte.",
"page.delete.confirm.title": "Wprowadź tytuł strony, aby potwierdzić",
"page.draft.create": "Utwórz szkic",
"page.duplicate.appendix": "Kopiuj",
"page.duplicate.files": "Copy files",
"page.duplicate.pages": "Copy pages",
"page.duplicate.files": "Kopiuj pliki",
"page.duplicate.pages": "Kopiuj strony",
"page.status": "Status",
"page.status.draft": "Szkic",
"page.status.draft.description":
"Strona jest w trybie roboczym i widoczna tylko dla zalogowanych redaktorów",
"page.status.draft.description": "Strona jest w trybie roboczym i widoczna tylko dla zalogowanych redaktorów lub pod sekretnym linkiem",
"page.status.listed": "Opublikowana",
"page.status.listed.description": "Strona jest opublikowana i widoczna dla każdego",
"page.status.unlisted": "Nie katalogowana",
@@ -388,20 +331,21 @@
"replace": "Zamie\u0144",
"retry": "Pon\u00f3w pr\u00f3b\u0119",
"revert": "Odrzu\u0107",
"revert.confirm": "Czy na pewno chcesz <strong>usunąć wszystkie niezapisane zmiany</strong>?",
"role": "Rola",
"role.admin.description": "The admin has all rights",
"role.admin.title": "Admin",
"role.admin.description": "Administrator posiada wszystkie uprawnienia",
"role.admin.title": "Administrator",
"role.all": "Wszystkie",
"role.empty": "Nie ma użytkowników z tą rolą",
"role.description.placeholder": "Brak opisu",
"role.nobody.description": "This is a fallback role without any permissions",
"role.nobody.title": "Nobody",
"role.nobody.description": "To jest rola zastępcza bez żadnych uprawnień",
"role.nobody.title": "Nikt",
"save": "Zapisz",
"search": "Szukaj",
"section.required": "The section is required",
"section.required": "Sekcja jest wymagana",
"select": "Wybierz",
"settings": "Ustawienia",
@@ -421,8 +365,8 @@
"toolbar.button.heading.3": "Nagłówek 3",
"toolbar.button.italic": "Kursywa",
"toolbar.button.file": "Plik",
"toolbar.button.file.select": "Select a file",
"toolbar.button.file.upload": "Upload a file",
"toolbar.button.file.select": "Wybierz plik",
"toolbar.button.file.upload": "Prześlij plik",
"toolbar.button.link": "Link",
"toolbar.button.ol": "Lista numerowana",
"toolbar.button.ul": "Lista wypunktowana",
@@ -433,17 +377,17 @@
"translation.locale": "pl_PL",
"upload": "Prześlij",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"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.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.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.error.cantMove": "Przesłany plik nie mógł być przeniesiony",
"upload.error.cantWrite": "Nie udało się zapisać pliku na dysku",
"upload.error.default": "Nie udało się przesłać pliku",
"upload.error.extension": "Przesyłanie pliku zostało zastopowane przez rozszerzenie",
"upload.error.formSize": "Przesłany plik przekracza dyrektywę MAX_FILE_SIZE określoną w formularzu",
"upload.error.iniPostSize": "Przesłany plik przekracza dyrektywę post_max_size określoną w php.ini",
"upload.error.iniSize": "Przesłany plik przekracza dyrektywę upload_max_filesize określoną w php.ini",
"upload.error.noFile": "Nie został przesłany żaden plik",
"upload.error.noFiles": "Nie zostały przesłane żadne pliki",
"upload.error.partial": "Została przesłana tylko część przesyłanego pliku",
"upload.error.tmpDir": "Brak tymczasowego folderu",
"upload.errors": "Błąd",
"upload.progress": "Przesyłanie…",
@@ -451,8 +395,7 @@
"url.placeholder": "https://example.com",
"user": "Użytkownik",
"user.blueprint":
"Możesz zdefiniować dodatkowe sekcje i pola formularza dla tej roli użytkownika w <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Możesz zdefiniować dodatkowe sekcje i pola formularza dla tej roli użytkownika w <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Zmień email",
"user.changeLanguage": "Zmień język",
"user.changeName": "Zmień nazwę tego użytkownika",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Wybierz nową rolę",
"user.create": "Dodaj nowego użytkownika",
"user.delete": "Usuń tego użytkownika",
"user.delete.confirm":
"Czy na pewno chcesz usunąć <br><strong>{email}</strong>?",
"user.delete.confirm": "Czy na pewno chcesz usunąć <br><strong>{email}</strong>?",
"users": "Użytkownicy",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "A foto de perfil não pôde ser enviada",
"error.avatar.delete.fail": "A foto do perfil não pôde ser deletada",
"error.avatar.dimensions.invalid":
"Por favor, use uma foto de perfil com largura e altura menores que 3000 pixels",
"error.avatar.mime.forbidden":
"A foto de perfil deve ser um arquivo JPEG ou PNG",
"error.avatar.dimensions.invalid": "Por favor, use uma foto de perfil com largura e altura menores que 3000 pixels",
"error.avatar.mime.forbidden": "A foto de perfil deve ser um arquivo JPEG ou PNG",
"error.blueprint.notFound": "O blueprint \"{name}\" não pôde ser carregado",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Conversor \"{converter}\" inválido",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Você não tem permissão para alterar o nome de \"{filename}\"",
"error.file.changeName.permission": "Você não tem permissão para alterar o nome de \"{filename}\"",
"error.file.duplicate": "Um arquivo com o nome \"{filename}\" já existe",
"error.file.extension.forbidden":
"Extensão \"{extension}\" não permitida",
"error.file.extension.missing":
"Extensão de \"{filename}\" em falta",
"error.file.extension.forbidden": "Extensão \"{extension}\" não permitida",
"error.file.extension.missing": "Extensão de \"{filename}\" em falta",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
"error.file.maxwidth": "The width of the image must not exceed {width} pixels",
"error.file.mime.differs":
"O arquivo enviado precisa ser do tipo \"{mime}\"",
"error.file.mime.differs": "O arquivo enviado precisa ser do tipo \"{mime}\"",
"error.file.mime.forbidden": "Tipo de mídia \"{mime}\" não permitido",
"error.file.mime.invalid": "Invalid mime type: {mime}",
"error.file.mime.missing":
"Tipo de mídia de \"{filename}\" não detectado",
"error.file.mime.missing": "Tipo de mídia de \"{filename}\" não detectado",
"error.file.minheight": "The height of the image must be at least {height} pixels",
"error.file.minsize": "The file is too small",
"error.file.minwidth": "The width of the image must be at least {width} pixels",
@@ -90,111 +83,77 @@
"error.license.email": "Digite um endereço de email válido",
"error.license.verification": "The license could not be verified",
"error.page.changeSlug.permission":
"Você não tem permissão para alterar a URL de \"{slug}\"",
"error.page.changeStatus.incomplete":
"A página possui erros e não pode ser salva",
"error.page.changeStatus.permission":
"O estado desta página não pode ser alterado",
"error.page.changeStatus.toDraft.invalid":
"A página \"{slug}\" não pode ser convertida para rascunho",
"error.page.changeTemplate.invalid":
"O tema da página \"{slug}\" não pode ser alterado",
"error.page.changeTemplate.permission":
"Você não tem permissão para alterar o tema de \"{slug}\"",
"error.page.changeSlug.permission": "Você não tem permissão para alterar a URL de \"{slug}\"",
"error.page.changeStatus.incomplete": "A página possui erros e não pode ser salva",
"error.page.changeStatus.permission": "O estado desta página não pode ser alterado",
"error.page.changeStatus.toDraft.invalid": "A página \"{slug}\" não pode ser convertida para rascunho",
"error.page.changeTemplate.invalid": "O tema da página \"{slug}\" não pode ser alterado",
"error.page.changeTemplate.permission": "Você não tem permissão para alterar o tema de \"{slug}\"",
"error.page.changeTitle.empty": "O título não pode ficar em branco",
"error.page.changeTitle.permission":
"Você não tem permissão para alterar o título de \"{slug}\"",
"error.page.changeTitle.permission": "Você não tem permissão para alterar o título de \"{slug}\"",
"error.page.create.permission": "Você não tem permissão para criar \"{slug}\"",
"error.page.delete": "A página \"{slug}\" não pode ser excluída",
"error.page.delete.confirm": "Por favor, digite o título da página para confirmar",
"error.page.delete.hasChildren":
"A página possui subpáginas e não pode ser excluída",
"error.page.delete.hasChildren": "A página possui subpáginas e não pode ser excluída",
"error.page.delete.permission": "Você não tem permissão para excluir \"{slug}\"",
"error.page.draft.duplicate":
"Um rascunho de página com a URL \"{slug}\" já existe",
"error.page.duplicate":
"Uma página com a URL \"{slug}\" já existe",
"error.page.draft.duplicate": "Um rascunho de página com a URL \"{slug}\" já existe",
"error.page.duplicate": "Uma página com a URL \"{slug}\" já existe",
"error.page.duplicate.permission": "You are not allowed to duplicate \"{slug}\"",
"error.page.notFound": "Página\"{slug}\" não encontrada",
"error.page.num.invalid":
"Digite um número de ordenação válido. Este número não pode ser negativo.",
"error.page.num.invalid": "Digite um número de ordenação válido. Este número não pode ser negativo.",
"error.page.slug.invalid": "Por favor, digite uma URL válida",
"error.page.sort.permission": "A página \"{slug}\" não pode ser ordenada",
"error.page.status.invalid": "Por favor, defina um estado de página válido",
"error.page.undefined": "P\u00e1gina n\u00e3o encontrada",
"error.page.update.permission": "Você não tem permissão para atualizar \"{slug}\"",
"error.section.files.max.plural":
"Você não pode adicionar mais do que {max} arquivos à seção \"{section}\"",
"error.section.files.max.singular":
"Você não pode adicionar mais do que um arquivo à seção \"{section}\"",
"error.section.files.min.plural":
"The \"{section}\" section requires at least {min} files",
"error.section.files.min.singular":
"The \"{section}\" section requires at least one file",
"error.section.files.max.plural": "Você não pode adicionar mais do que {max} arquivos à seção \"{section}\"",
"error.section.files.max.singular": "Você não pode adicionar mais do que um arquivo à seção \"{section}\"",
"error.section.files.min.plural": "The \"{section}\" section requires at least {min} files",
"error.section.files.min.singular": "The \"{section}\" section requires at least one file",
"error.section.pages.max.plural":
"Você não pode adicionar mais do que {max} página à seção \"{section}\"",
"error.section.pages.max.singular":
"Você não pode adicionar mais do que uma página à seção \"{section}\"",
"error.section.pages.min.plural":
"The \"{section}\" section requires at least {min} pages",
"error.section.pages.min.singular":
"The \"{section}\" section requires at least one page",
"error.section.pages.max.plural": "Você não pode adicionar mais do que {max} página à seção \"{section}\"",
"error.section.pages.max.singular": "Você não pode adicionar mais do que uma página à seção \"{section}\"",
"error.section.pages.min.plural": "The \"{section}\" section requires at least {min} pages",
"error.section.pages.min.singular": "The \"{section}\" section requires at least one page",
"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.site.changeTitle.empty": "O título não pode ficar em branco",
"error.site.changeTitle.permission":
"Você não tem permissão para alterar o título do site",
"error.site.changeTitle.permission": "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.template.default.notFound": "O tema padrão não existe",
"error.user.changeEmail.permission":
"Você não tem permissão para alterar o email do usuário \"{name}\"",
"error.user.changeLanguage.permission":
"Você não tem permissão para alterar o idioma do usuário \"{name}\"",
"error.user.changeName.permission":
"Você não tem permissão para alterar o nome do usuário \"{name}\"",
"error.user.changePassword.permission":
"Você não tem permissão para alterar a senha do usuário \"{name}\"",
"error.user.changeRole.lastAdmin":
"O papel do último administrador não pode ser alterado",
"error.user.changeRole.permission":
"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.changeEmail.permission": "Você não tem permissão para alterar o email do usuário \"{name}\"",
"error.user.changeLanguage.permission": "Você não tem permissão para alterar o idioma do usuário \"{name}\"",
"error.user.changeName.permission": "Você não tem permissão para alterar o nome do usuário \"{name}\"",
"error.user.changePassword.permission": "Você não tem permissão para alterar a senha do usuário \"{name}\"",
"error.user.changeRole.lastAdmin": "O papel do último administrador não pode ser alterado",
"error.user.changeRole.permission": "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.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.lastUser": "O último usuário não pode ser excluído",
"error.user.delete.permission":
"Você não tem permissão para excluir o usuário \"{name}\"",
"error.user.duplicate":
"Um usuário com o email \"{email}\" já existe",
"error.user.delete.permission": "Você não tem permissão para excluir o usuário \"{name}\"",
"error.user.duplicate": "Um usuário com o email \"{email}\" já existe",
"error.user.email.invalid": "Digite um endereço de email válido",
"error.user.language.invalid": "Digite um idioma válido",
"error.user.notFound": "Usuário \"{name}\" não encontrado",
"error.user.password.invalid":
"Digite uma senha válida. Sua senha deve ter pelo menos 8 caracteres.",
"error.user.password.invalid": "Digite uma senha válida. Sua senha deve ter pelo menos 8 caracteres.",
"error.user.password.notSame": "As senhas não combinam",
"error.user.password.undefined": "O usuário não possui uma senha",
"error.user.role.invalid": "Digite um papel válido",
"error.user.update.permission":
"Você não tem permissão para atualizar o usuário \"{name}\"",
"error.user.update.permission": "Você não tem permissão para atualizar o usuário \"{name}\"",
"error.validation.accepted": "Por favor, confirme",
"error.validation.alpha": "Por favor, use apenas caracteres entre a-z",
"error.validation.alphanum":
"Por favor, use apenas caracteres entre a-z ou 0-9",
"error.validation.between":
"Digite um valor entre \"{min}\" e \"{max}\"",
"error.validation.alphanum": "Por favor, use apenas caracteres entre a-z ou 0-9",
"error.validation.between": "Digite um valor entre \"{min}\" e \"{max}\"",
"error.validation.boolean": "Por favor, confirme ou rejeite",
"error.validation.contains":
"Digite um valor que contenha \"{needle}\"",
"error.validation.contains": "Digite um valor que contenha \"{needle}\"",
"error.validation.date": "Escolha uma data válida",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Digite um valor menor que {max}",
"error.validation.match": "O valor não combina com o padrão esperado",
"error.validation.max": "Digite um valor igual ou menor que {max}",
"error.validation.maxlength":
"Digite um valor curto. (no máximo {max} caracteres)",
"error.validation.maxlength": "Digite um valor curto. (no máximo {max} caracteres)",
"error.validation.maxwords": "Digite menos que {max} palavra(s)",
"error.validation.min": "Digite um valor igual ou maior que {min}",
"error.validation.minlength":
"Digite um valor maior. (no mínimo {min} caracteres)",
"error.validation.minlength": "Digite um valor maior. (no mínimo {min} caracteres)",
"error.validation.minwords": "Digite ao menos {min} palavra(s)",
"error.validation.more": "Digite um valor maior que {min}",
"error.validation.notcontains":
"Digite um valor que não contenha \"{needle}\"",
"error.validation.notin":
"Não digite nenhum destes valores: ({notIn})",
"error.validation.notcontains": "Digite um valor que não contenha \"{needle}\"",
"error.validation.notin": "Não digite nenhum destes valores: ({notIn})",
"error.validation.option": "Escolha uma opção válida",
"error.validation.num": "Digite um número válido",
"error.validation.required": "Digite algo",
@@ -238,8 +193,7 @@
"field.structure.empty": "Nenhum registro",
"field.users.empty": "Nenhum usuário selecionado",
"file.delete.confirm":
"Deseja realmente excluir <br> <strong>{filename}</strong>?",
"file.delete.confirm": "Deseja realmente excluir <br> <strong>{filename}</strong>?",
"files": "Arquivos",
"files.empty": "Nenhum arquivo",
@@ -251,29 +205,22 @@
"installation": "Instalação",
"installation.completed": "Painel instalado com sucesso",
"installation.disabled": "O instalador do painel está desabilitado em servidores públicos por padrão. Por favor, execute o instalador em uma máquina local ou habilite a opção <code>panel.install</code>.",
"installation.issues.accounts":
"A pasta <code>/site/accounts</code> não existe ou não possui permissão de escrita",
"installation.issues.content":
"A pasta <code>/content</code> não existe ou não possui permissão de escrita",
"installation.issues.accounts": "A pasta <code>/site/accounts</code> não existe ou não possui permissão de escrita",
"installation.issues.content": "A pasta <code>/content</code> não existe ou não possui permissão de escrita",
"installation.issues.curl": "A extensão <code>CURL</code> é necessária",
"installation.issues.headline": "O painel não pôde ser instalado",
"installation.issues.mbstring":
"A extensão <code>MB String</code> é necessária",
"installation.issues.media":
"A pasta <code>/media</code> não existe ou não possui permissão de escrita",
"installation.issues.mbstring": "A extensão <code>MB String</code> é necessária",
"installation.issues.media": "A pasta <code>/media</code> não existe ou não possui permissão de escrita",
"installation.issues.php": "Certifique-se que você está usando o <code>PHP 7+</code>",
"installation.issues.server":
"Kirby necessita do <code>Apache</code>, <code>Nginx</code> ou <code>Caddy</code>",
"installation.issues.server": "Kirby necessita do <code>Apache</code>, <code>Nginx</code> ou <code>Caddy</code>",
"installation.issues.sessions": "A pasta <code>/site/sessions</code> não existe ou não possui permissão de escrita",
"language": "Idioma",
"language.code": "Código",
"language.convert": "Tornar padrão",
"language.convert.confirm":
"<p>Deseja realmente converter <strong>{name}</strong> para o idioma padrão? Esta ação não poderá ser revertida.</p><p>Se <strong>{name}</strong> tiver conteúdo não traduzido, partes do seu site poderão ficar sem conteúdo.</p>",
"language.convert.confirm": "<p>Deseja realmente converter <strong>{name}</strong> para o idioma padrão? Esta ação não poderá ser revertida.</p><p>Se <strong>{name}</strong> tiver conteúdo não traduzido, partes do seu site poderão ficar sem conteúdo.</p>",
"language.create": "Adicionar novo idioma",
"language.delete.confirm":
"Deseja realmente excluir o idioma <strong>{name}</strong> incluíndo todas as traduções. Esta ação não poderá ser revertida!",
"language.delete.confirm": "Deseja realmente excluir o idioma <strong>{name}</strong> incluíndo todas as traduções. Esta ação não poderá ser revertida!",
"language.deleted": "Idioma excluído",
"language.direction": "Direção de leitura",
"language.direction.ltr": "Esquerda para direita",
@@ -292,8 +239,7 @@
"license": "Licen\u00e7a do Kirby ",
"license.buy": "Comprar licença",
"license.register": "Registrar",
"license.register.help":
"Você recebeu o código da sua licença por email após a compra. Por favor, copie e cole-a para completar o registro.",
"license.register.help": "Você recebeu o código da sua licença por email após a compra. Por favor, copie e cole-a para completar o registro.",
"license.register.label": "Por favor, digite o código da sua licença",
"license.register.success": "Obrigado por apoiar o Kirby",
"license.unregistered": "Esta é uma demonstração não registrada do Kirby",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Selecione uma posição",
"page.changeStatus.select": "Selecione um novo estado",
"page.changeTemplate": "Alterar tema",
"page.delete.confirm":
"Deseja realmente excluir <strong>{title}</strong>?",
"page.delete.confirm.subpages":
"<strong>Esta página possui subpáginas</strong>. <br>Todas as subpáginas serão excluídas também.",
"page.delete.confirm": "Deseja realmente excluir <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Esta página possui subpáginas</strong>. <br>Todas as subpáginas serão excluídas também.",
"page.delete.confirm.title": "Digite o título da página para confirmar",
"page.draft.create": "Criar rascunho",
"page.duplicate.appendix": "Copiar",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Copy pages",
"page.status": "Estado",
"page.status.draft": "Rascunho",
"page.status.draft.description":
"A página em modo de rascunho é visível somente para editores",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.listed": "Pública",
"page.status.listed.description": "A página pública é visível para todos",
"page.status.unlisted": "Não listadas",
@@ -388,6 +331,7 @@
"replace": "Substituir",
"retry": "Tentar novamente",
"revert": "Descartar",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "Papel",
"role.admin.description": "The admin has all rights",
@@ -451,8 +395,7 @@
"url.placeholder": "https://exemplo.com",
"user": "Usuário",
"user.blueprint":
"Você pode definir seções e campos de formulário adicionais para este papel de usuário em <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Você pode definir seções e campos de formulário adicionais para este papel de usuário em <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Alterar email",
"user.changeLanguage": "Alterar idioma",
"user.changeName": "Renomear usuário",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Selecione um novo papel",
"user.create": "Adicionar novo usuário",
"user.delete": "Excluir este usuário",
"user.delete.confirm":
"Deseja realmente excluir <br><strong>{email}</strong>?",
"user.delete.confirm": "Deseja realmente excluir <br><strong>{email}</strong>?",
"users": "Usuários",

View File

@@ -23,29 +23,27 @@
"delete": "Excluir",
"dimensions": "Dimensões",
"disabled": "Disabled",
"disabled": "Inativo",
"discard": "Descartar",
"download": "Download",
"duplicate": "Duplicate",
"download": "Descarregar",
"duplicate": "Duplicar",
"edit": "Editar",
"dialog.files.empty": "No files to select",
"dialog.pages.empty": "No pages to select",
"dialog.users.empty": "No users to select",
"dialog.files.empty": "Sem arquivos para selecionar",
"dialog.pages.empty": "Sem páginas para selecionar",
"dialog.users.empty": "Sem utilizadores para selecionar",
"email": "Email",
"email.placeholder": "mail@exemplo.pt",
"error.access.login": "Login inválido",
"error.access.panel": "Não tem permissões para aceder ao painel",
"error.access.view": "You are not allowed to access this part of the panel",
"error.access.view": "Não tem permissões para aceder a esta área do Painel",
"error.avatar.create.fail": "A foto de perfil não foi enviada",
"error.avatar.delete.fail": "A foto do perfil não foi deletada",
"error.avatar.dimensions.invalid":
"Por favor, use uma foto de perfil com largura e altura menores que 3000 pixels",
"error.avatar.mime.forbidden":
"A foto de perfil deve ser um arquivo JPEG ou PNG",
"error.avatar.delete.fail": "A foto do perfil não foi excluída",
"error.avatar.dimensions.invalid": "Por favor, use uma foto de perfil com largura e altura menores que 3000 pixels",
"error.avatar.mime.forbidden": "A foto de perfil deve ser um arquivo JPEG ou PNG",
"error.blueprint.notFound": "O blueprint \"{name}\" não pode ser carregado",
@@ -53,152 +51,113 @@
"error.field.converter.invalid": "Conversor \"{converter}\" inválido",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Não tem permissões para alterar o nome de \"{filename}\"",
"error.file.changeName.empty": "O nome não pode ficar em branco",
"error.file.changeName.permission": "Não tem permissões para alterar o nome de \"{filename}\"",
"error.file.duplicate": "Um arquivo com o nome \"{filename}\" já existe",
"error.file.extension.forbidden":
"Extensão \"{extension}\" não permitida",
"error.file.extension.missing":
"Extensão de \"{filename}\" em falta",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
"error.file.maxwidth": "The width of the image must not exceed {width} pixels",
"error.file.mime.differs":
"O arquivo enviado precisa ser do tipo \"{mime}\"",
"error.file.extension.forbidden": "Extensão \"{extension}\" não permitida",
"error.file.extension.missing": "Extensão de \"{filename}\" em falta",
"error.file.maxheight": "A altura da imagem não deve exceder {height} pixels",
"error.file.maxsize": "O arquivo é muito grande",
"error.file.maxwidth": "A largura da imagem não deve exceder {width} pixels",
"error.file.mime.differs": "O arquivo enviado precisa ser do tipo \"{mime}\"",
"error.file.mime.forbidden": "Tipo de mídia \"{mime}\" não permitido",
"error.file.mime.invalid": "Invalid mime type: {mime}",
"error.file.mime.missing":
"Tipo de mídia de \"{filename}\" não detectado",
"error.file.minheight": "The height of the image must be at least {height} pixels",
"error.file.minsize": "The file is too small",
"error.file.minwidth": "The width of the image must be at least {width} pixels",
"error.file.mime.invalid": "Tipo de mídia inválido: {mime}",
"error.file.mime.missing": "Tipo de mídia de \"{filename}\" não detectado",
"error.file.minheight": "A altura da imagem deve ser pelo menos {height} pixels",
"error.file.minsize": "O ficheiro é muito pequeno",
"error.file.minwidth": "A largura da imagem deve ser pelo menos {width} pixels",
"error.file.name.missing": "O nome do arquivo não pode ficar em branco",
"error.file.notFound": "Arquivo \"{filename}\" não encontrado",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
"error.file.orientation": "A orientação da imagem deve ser \"{orientation}\"",
"error.file.type.forbidden": "Não tem permissões para enviar arquivos {type}",
"error.file.undefined": "Arquivo n\u00e3o encontrado",
"error.form.incomplete": "Por favor, corrija os erros do formulário…",
"error.form.notSaved": "O formulário não foi guardado",
"error.language.code": "Please enter a valid code for the language",
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.language.code": "Insira um código de idioma válido",
"error.language.duplicate": "O idioma já existe",
"error.language.name": "Insira um nome válido para o idioma",
"error.license.format": "Please enter a valid license key",
"error.license.format": "Insira uma chave de licença válida",
"error.license.email": "Digite um endereço de email válido",
"error.license.verification": "The license could not be verified",
"error.license.verification": "Não foi possível verificar a licença",
"error.page.changeSlug.permission":
"Não tem permissões para alterar a URL de \"{slug}\"",
"error.page.changeStatus.incomplete":
"A página possui erros e não pode ser guardada",
"error.page.changeStatus.permission":
"O estado desta página não pode ser alterado",
"error.page.changeStatus.toDraft.invalid":
"A página \"{slug}\" não pode ser convertida para rascunho",
"error.page.changeTemplate.invalid":
"O tema da página \"{slug}\" não pode ser alterado",
"error.page.changeTemplate.permission":
"Não tem permissões para alterar o tema de \"{slug}\"",
"error.page.changeSlug.permission": "Não tem permissões para alterar a URL de \"{slug}\"",
"error.page.changeStatus.incomplete": "A página possui erros e não pode ser guardada",
"error.page.changeStatus.permission": "O estado desta página não pode ser alterado",
"error.page.changeStatus.toDraft.invalid": "A página \"{slug}\" não pode ser convertida para rascunho",
"error.page.changeTemplate.invalid": "O tema da página \"{slug}\" não pode ser alterado",
"error.page.changeTemplate.permission": "Não tem permissões para alterar o tema de \"{slug}\"",
"error.page.changeTitle.empty": "O título não pode ficar em branco",
"error.page.changeTitle.permission":
"Não tem permissões para alterar o título de \"{slug}\"",
"error.page.changeTitle.permission": "Não tem permissões para alterar o título de \"{slug}\"",
"error.page.create.permission": "Não tem permissões para criar \"{slug}\"",
"error.page.delete": "A página \"{slug}\" não pode ser excluída",
"error.page.delete.confirm": "Por favor, digite o título da página para confirmar",
"error.page.delete.hasChildren":
"A página possui subpáginas e não pode ser excluída",
"error.page.delete.hasChildren": "A página possui subpáginas e não pode ser excluída",
"error.page.delete.permission": "Não tem permissões para excluir \"{slug}\"",
"error.page.draft.duplicate":
"Um rascunho de página com a URL \"{slug}\" já existe",
"error.page.duplicate":
"Uma página com a URL \"{slug}\" já existe",
"error.page.duplicate.permission": "You are not allowed to duplicate \"{slug}\"",
"error.page.draft.duplicate": "Um rascunho de página com a URL \"{slug}\" já existe",
"error.page.duplicate": "Uma página com a URL \"{slug}\" já existe",
"error.page.duplicate.permission": "Não tem permissão para duplicar \"{slug}\"",
"error.page.notFound": "Página\"{slug}\" não encontrada",
"error.page.num.invalid":
"Digite um número de ordenação válido. Este número não pode ser negativo.",
"error.page.slug.invalid": "Por favor, digite uma URL válida",
"error.page.num.invalid": "Digite um número de ordenação válido. Este número não pode ser negativo.",
"error.page.slug.invalid": "Por favor, digite um prefixo de URL válido",
"error.page.sort.permission": "A página \"{slug}\" não pode ser ordenada",
"error.page.status.invalid": "Por favor, defina um estado de página válido",
"error.page.undefined": "P\u00e1gina n\u00e3o encontrada",
"error.page.update.permission": "Não tem permissões para atualizar \"{slug}\"",
"error.section.files.max.plural":
"Não pode adicionar mais do que {max} arquivos à seção \"{section}\"",
"error.section.files.max.singular":
"Não pode adicionar mais do que um arquivo à seção \"{section}\"",
"error.section.files.min.plural":
"The \"{section}\" section requires at least {min} files",
"error.section.files.min.singular":
"The \"{section}\" section requires at least one file",
"error.section.files.max.plural": "Não pode adicionar mais do que {max} arquivos à seção \"{section}\"",
"error.section.files.max.singular": "Não pode adicionar mais do que um arquivo à seção \"{section}\"",
"error.section.files.min.plural": "A secção \"{section}\" requer no mínimo {min} arquivos",
"error.section.files.min.singular": "A secção \"{section}\" requer no mínimo um arquivo",
"error.section.pages.max.plural":
"Não pode adicionar mais do que {max} página à seção \"{section}\"",
"error.section.pages.max.singular":
"Não pode adicionar mais do que uma página à seção \"{section}\"",
"error.section.pages.min.plural":
"The \"{section}\" section requires at least {min} pages",
"error.section.pages.min.singular":
"The \"{section}\" section requires at least one page",
"error.section.pages.max.plural": "Não pode adicionar mais do que {max} página à seção \"{section}\"",
"error.section.pages.max.singular": "Não pode adicionar mais do que uma página à seção \"{section}\"",
"error.section.pages.min.plural": "A secção \"{section}\" requer no mínimo {min} páginas",
"error.section.pages.min.singular": "A secção \"{section}\" requer no mínimo uma página",
"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.site.changeTitle.empty": "O título não pode ficar em branco",
"error.site.changeTitle.permission":
"Não tem permissões para alterar o título do site",
"error.site.changeTitle.permission": "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.template.default.notFound": "O tema padrão não existe",
"error.user.changeEmail.permission":
"Não tem permissões para alterar o email do utilizador \"{name}\"",
"error.user.changeLanguage.permission":
"Não tem permissões para alterar o idioma do utilizador \"{name}\"",
"error.user.changeName.permission":
"Não tem permissões para alterar o nome do utilizador \"{name}\"",
"error.user.changePassword.permission":
"Não tem permissões para alterar a palavra-passe do utilizador \"{name}\"",
"error.user.changeRole.lastAdmin":
"A função do último administrador não pode ser alterado",
"error.user.changeRole.permission":
"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.changeEmail.permission": "Não tem permissões para alterar o email do utilizador \"{name}\"",
"error.user.changeLanguage.permission": "Não tem permissões para alterar o idioma do utilizador \"{name}\"",
"error.user.changeName.permission": "Não tem permissões para alterar o nome do utilizador \"{name}\"",
"error.user.changePassword.permission": "Não tem permissões para alterar a palavra-passe do utilizador \"{name}\"",
"error.user.changeRole.lastAdmin": "A função do último administrador não pode ser alterado",
"error.user.changeRole.permission": "Não tem permissões para alterar a função do utilizador \"{name}\"",
"error.user.changeRole.toAdmin": "Não tem permissões para promover utilizadores à função de administrador",
"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.lastAdmin": "O último administrador não pode ser excluído",
"error.user.delete.lastUser": "O último utilizador não pode ser excluído",
"error.user.delete.permission":
"Não tem permissões para excluir o utilizador \"{name}\"",
"error.user.duplicate":
"Um utilizador com o email \"{email}\" já existe",
"error.user.delete.permission": "Não tem permissões para excluir o utilizador \"{name}\"",
"error.user.duplicate": "Um utilizador com o email \"{email}\" já existe",
"error.user.email.invalid": "Digite um endereço de email válido",
"error.user.language.invalid": "Digite um idioma válido",
"error.user.notFound": "Utilizador \"{name}\" não encontrado",
"error.user.password.invalid":
"Digite uma palavra-passe válida. A sua palavra-passe deve ter pelo menos 8 caracteres.",
"error.user.password.invalid": "Digite uma palavra-passe válida. A sua palavra-passe deve ter pelo menos 8 caracteres.",
"error.user.password.notSame": "As palavras-passe não combinam",
"error.user.password.undefined": "O utilizador não possui uma palavra-passe",
"error.user.role.invalid": "Digite uma função válida",
"error.user.update.permission":
"Não tem permissões para atualizar o utilizador \"{name}\"",
"error.user.update.permission": "Não tem permissões para atualizar o utilizador \"{name}\"",
"error.validation.accepted": "Por favor, confirme",
"error.validation.alpha": "Por favor, use apenas caracteres entre a-z",
"error.validation.alphanum":
"Por favor, use apenas caracteres entre a-z ou 0-9",
"error.validation.between":
"Digite um valor entre \"{min}\" e \"{max}\"",
"error.validation.alphanum": "Por favor, use apenas caracteres entre a-z ou 0-9",
"error.validation.between": "Digite um valor entre \"{min}\" e \"{max}\"",
"error.validation.boolean": "Por favor, confirme ou rejeite",
"error.validation.contains":
"Digite um valor que contenha \"{needle}\"",
"error.validation.contains": "Digite um valor que contenha \"{needle}\"",
"error.validation.date": "Escolha uma data válida",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.date.after": "Escolha uma data posterior a {date}",
"error.validation.date.before": "Escolha uma data anterior a {date}",
"error.validation.date.between": "Escolha uma data compreendida entre {min} e {max}",
"error.validation.denied": "Por favor, cancele",
"error.validation.different": "O valor deve ser diferente de \"{other}\"",
"error.validation.email": "Digite um endereço de email válido",
@@ -210,18 +169,14 @@
"error.validation.less": "Digite um valor menor que {max}",
"error.validation.match": "O valor não combina com o padrão esperado",
"error.validation.max": "Digite um valor igual ou menor que {max}",
"error.validation.maxlength":
"Digite um valor curto. (no máximo {max} caracteres)",
"error.validation.maxlength": "Digite um valor curto. (no máximo {max} caracteres)",
"error.validation.maxwords": "Digite menos que {max} palavra(s)",
"error.validation.min": "Digite um valor igual ou maior que {min}",
"error.validation.minlength":
"Digite um valor maior. (no mínimo {min} caracteres)",
"error.validation.minlength": "Digite um valor maior. (no mínimo {min} caracteres)",
"error.validation.minwords": "Digite ao menos {min} palavra(s)",
"error.validation.more": "Digite um valor maior que {min}",
"error.validation.notcontains":
"Digite um valor que não contenha \"{needle}\"",
"error.validation.notin":
"Não digite nenhum destes valores: ({notIn})",
"error.validation.notcontains": "Digite um valor que não contenha \"{needle}\"",
"error.validation.notin": "Não digite nenhum destes valores: ({notIn})",
"error.validation.option": "Escolha uma opção válida",
"error.validation.num": "Digite um número válido",
"error.validation.required": "Digite algo",
@@ -231,15 +186,14 @@
"error.validation.time": "Digite uma hora válida",
"error.validation.url": "Digite uma URL válida",
"field.required": "The field is required",
"field.required": "Este campo é necessário",
"field.files.empty": "Nenhum arquivo selecionado",
"field.pages.empty": "Nenhuma página selecionada",
"field.structure.delete.confirm": "Deseja realmente excluir este registro?",
"field.structure.empty": "Nenhum registro",
"field.users.empty": "Nenhum utilizador selecionado",
"file.delete.confirm":
"Deseja realmente excluir <br> <strong>{filename}</strong>?",
"file.delete.confirm": "Deseja realmente excluir <br> <strong>{filename}</strong>?",
"files": "Arquivos",
"files.empty": "Nenhum arquivo",
@@ -251,35 +205,28 @@
"installation": "Instalação",
"installation.completed": "Painel instalado com sucesso",
"installation.disabled": "Por padrão, o instalador do painel está desabilitado em servidores públicos. Por favor, execute o instalador numa máquina local ou habilite a opção <code>panel.install</code>.",
"installation.issues.accounts":
"A pasta <code>/site/accounts</code> não existe ou não possui permissão de escrita",
"installation.issues.content":
"A pasta <code>/content</code> não existe ou não possui permissão de escrita",
"installation.issues.accounts": "A pasta <code>/site/accounts</code> não existe ou não possui permissão de escrita",
"installation.issues.content": "A pasta <code>/content</code> não existe ou não possui permissão de escrita",
"installation.issues.curl": "A extensão <code>CURL</code> é necessária",
"installation.issues.headline": "O painel não pôde ser instalado",
"installation.issues.mbstring":
"A extensão <code>MB String</code> é necessária",
"installation.issues.media":
"A pasta <code>/media</code> não existe ou não possui permissão de escrita",
"installation.issues.mbstring": "A extensão <code>MB String</code> é necessária",
"installation.issues.media": "A pasta <code>/media</code> não existe ou não possui permissão de escrita",
"installation.issues.php": "Certifique-se que está a usar o <code>PHP 7+</code>",
"installation.issues.server":
"O Kirby necessita do <code>Apache</code>, <code>Nginx</code> ou <code>Caddy</code>",
"installation.issues.server": "O Kirby necessita do <code>Apache</code>, <code>Nginx</code> ou <code>Caddy</code>",
"installation.issues.sessions": "A pasta <code>/site/sessions</code> não existe ou não possui permissão de escrita",
"language": "Idioma",
"language.code": "Código",
"language.convert": "Tornar padrão",
"language.convert.confirm":
"<p>Deseja realmente converter <strong>{name}</strong> para o idioma padrão? Esta ação não poderá ser revertida.</p><p>Se <strong>{name}</strong> tiver conteúdo não traduzido, partes do seu site poderão ficar sem conteúdo.</p>",
"language.convert.confirm": "<p>Deseja realmente converter <strong>{name}</strong> para o idioma padrão? Esta ação não poderá ser revertida.</p><p>Se <strong>{name}</strong> tiver conteúdo não traduzido, partes do seu site poderão ficar sem conteúdo.</p>",
"language.create": "Adicionar novo idioma",
"language.delete.confirm":
"Deseja realmente excluir o idioma <strong>{name}</strong> incluíndo todas as traduções? Esta ação não poderá ser revertida!",
"language.delete.confirm": "Deseja realmente excluir o idioma <strong>{name}</strong> incluíndo todas as traduções? Esta ação não poderá ser revertida!",
"language.deleted": "Idioma excluído",
"language.direction": "Direção de leitura",
"language.direction.ltr": "Esquerda para direita",
"language.direction.rtl": "Direita para esquerda",
"language.locale": "String de localização do 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": "Está a usar configurações de localização personalizadas. Corrija as mesmas no ficheiro /site/languages",
"language.name": "Nome",
"language.updated": "Idioma atualizado",
@@ -292,8 +239,7 @@
"license": "Licen\u00e7a do Kirby ",
"license.buy": "Comprar uma licença",
"license.register": "Registrar",
"license.register.help":
"Recebeu o código da sua licença por email após a compra. Por favor, copie e cole-o para completar o registro.",
"license.register.help": "Recebeu o código da sua licença por email após a compra. Por favor, copie e cole-o para completar o registro.",
"license.register.label": "Por favor, digite o código da sua licença",
"license.register.success": "Obrigado por apoiar o Kirby",
"license.unregistered": "Esta é uma demonstração não registrada do Kirby",
@@ -303,13 +249,13 @@
"loading": "A carregar",
"lock.unsaved": "Unsaved changes",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>",
"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.unlock": "Unlock",
"lock.isUnlocked": "Your unsaved changes have been overwritten by another user. You can download your changes to merge them manually.",
"lock.unsaved": "Alterações por guardar",
"lock.unsaved.empty": "Não existem alterações por guardar",
"lock.isLocked": "Alterações por guardar de <strong>{email}</strong>",
"lock.file.isLocked": "O arquivo está a ser editado por {email} e não pode ser alterado.",
"lock.page.isLocked": "A página está a ser editada por {email} e não pode ser alterada.",
"lock.unlock": "Desbloquear",
"lock.isUnlocked": "As suas alterações foram sobrepostas por outro utilizador. Pode descarregar as suas alterações e combiná-las manualmente.",
"login": "Entrar",
"login.remember": "Manter-me conectado",
@@ -354,19 +300,16 @@
"page.changeStatus.position": "Selecione uma posição",
"page.changeStatus.select": "Selecione um novo estado",
"page.changeTemplate": "Alterar tema",
"page.delete.confirm":
"Deseja realmente excluir <strong>{title}</strong>?",
"page.delete.confirm.subpages":
"<strong>Esta página possui subpáginas</strong>. <br>Todas as subpáginas serão excluídas também.",
"page.delete.confirm": "Deseja realmente excluir <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Esta página possui subpáginas</strong>. <br>Todas as subpáginas serão excluídas também.",
"page.delete.confirm.title": "Digite o título da página para confirmar",
"page.draft.create": "Criar rascunho",
"page.duplicate.appendix": "Copiar",
"page.duplicate.files": "Copy files",
"page.duplicate.pages": "Copy pages",
"page.duplicate.files": "Copiar arquivos",
"page.duplicate.pages": "Copiar páginas",
"page.status": "Estado",
"page.status.draft": "Rascunho",
"page.status.draft.description":
"A página está em modo de rascunho e é visível somente para editores",
"page.status.draft.description": "A página está em modo de rascunho e é visível somente para editores",
"page.status.listed": "Pública",
"page.status.listed.description": "A página é pública para todos",
"page.status.unlisted": "Não listadas",
@@ -388,20 +331,21 @@
"replace": "Substituir",
"retry": "Tentar novamente",
"revert": "Descartar",
"revert.confirm": "Tem a certeza que pretende <strong>eliminar todas as alterações por guardar</strong>?",
"role": "Função",
"role.admin.description": "The admin has all rights",
"role.admin.title": "Admin",
"role.admin.description": "O administrador tem todas as permissões.",
"role.admin.title": "Administrador",
"role.all": "Todos",
"role.empty": "Não há utilizadores com esta função",
"role.description.placeholder": "Sem descrição",
"role.nobody.description": "This is a fallback role without any permissions",
"role.nobody.title": "Nobody",
"role.nobody.description": "Esta é uma função de salvaguarda sem permissões.",
"role.nobody.title": "Ninguém",
"save": "Salvar",
"search": "Buscar",
"section.required": "The section is required",
"section.required": "Esta seção é necessária",
"select": "Selecionar",
"settings": "Configurações",
@@ -421,8 +365,8 @@
"toolbar.button.heading.3": "Título 3",
"toolbar.button.italic": "Itálico",
"toolbar.button.file": "Ficheiro",
"toolbar.button.file.select": "Select a file",
"toolbar.button.file.upload": "Upload a file",
"toolbar.button.file.select": "Selecione o arquivo",
"toolbar.button.file.upload": "Carregue o arquivo",
"toolbar.button.link": "Link",
"toolbar.button.ol": "Lista ordenada",
"toolbar.button.ul": "Lista não-ordenada",
@@ -433,17 +377,17 @@
"translation.locale": "pt_PT",
"upload": "Enviar",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"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.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.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.error.cantMove": "Não foi possível mover o arquivo carregado",
"upload.error.cantWrite": "Não foi possível guardar o arquivo no sistema de ficheiros.",
"upload.error.default": "Não foi possível carregar o arquivo",
"upload.error.extension": "A extensão do arquivo não permite o carregamento",
"upload.error.formSize": "O arquivo excede o tamanho MAX_FILE_SIZE",
"upload.error.iniPostSize": "O arquivo excede o tamanho post_max_size",
"upload.error.iniSize": "O arquivo carregado excede a definição upload_max_filesize do php.ini",
"upload.error.noFile": "Nenhum arquivo carregado",
"upload.error.noFiles": "Nenhuns arquivos carregados",
"upload.error.partial": "O arquivo foi parcialmente carregado",
"upload.error.tmpDir": "Pasta temporária em falta",
"upload.errors": "Erro",
"upload.progress": "A enviar…",
@@ -451,8 +395,7 @@
"url.placeholder": "https://exemplo.pt",
"user": "Utilizador",
"user.blueprint":
"Pode definir seções e campos de formulário adicionais para esta função de utilizador em <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Pode definir seções e campos de formulário adicionais para esta função de utilizador em <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Alterar email",
"user.changeLanguage": "Alterar idioma",
"user.changeName": "Renomear este utilizador",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Selecione uma nova função",
"user.create": "Adicionar novo utilizador",
"user.delete": "Excluir este utilizador",
"user.delete.confirm":
"Deseja realmente excluir <br><strong>{email}</strong>?",
"user.delete.confirm": "Deseja realmente excluir <br><strong>{email}</strong>?",
"users": "Utilizadores",

View File

@@ -5,7 +5,7 @@
"cancel": "\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c",
"change": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c",
"close": "\u0417\u0430\u043a\u0440\u044b\u0442\u044c",
"confirm": "Сохранить",
"confirm": "Ок",
"copy": "Скопировать",
"create": "Создать",
@@ -34,7 +34,7 @@
"dialog.users.empty": "Нет пользователей для выбора",
"email": "Эл. почта",
"email.placeholder": "pochta@domen.com",
"email.placeholder": "mail@example.com",
"error.access.login": "Неправильный логин",
"error.access.panel": "У вас нет права доступа к панели",
@@ -42,10 +42,8 @@
"error.avatar.create.fail": "Не удалось загрузить фотографию профиля",
"error.avatar.delete.fail": "\u0410\u0432\u0430\u0442\u0430\u0440 (\u0444\u043e\u0442\u043e) \u043a \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d",
"error.avatar.dimensions.invalid":
"Пожалуйста, сделайте чтобы ширина или высота фотографии была меньше 3000 пикселей",
"error.avatar.mime.forbidden":
"Фотография профиля должна быть JPEG или PNG",
"error.avatar.dimensions.invalid": "Пожалуйста, сделайте чтобы ширина или высота фотографии была меньше 3000 пикселей",
"error.avatar.mime.forbidden": "Фотография профиля должна быть JPEG или PNG",
"error.blueprint.notFound": "Не удалось загрузить blueprint \"{name}\"",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Неверный конвертер \"{converter}\"",
"error.file.changeName.empty": "Название не может быть пустым",
"error.file.changeName.permission":
"У вас нет права поменять название \"{filename}\"",
"error.file.changeName.permission": "У вас нет права поменять название \"{filename}\"",
"error.file.duplicate": "Файл с названием \"{filename}\" уже есть",
"error.file.extension.forbidden":
"Расширение файла \"{extension}\" неразрешено",
"error.file.extension.missing":
"Файлу \"{filename}\" не хватает расширения",
"error.file.extension.forbidden": "Расширение файла \"{extension}\" неразрешено",
"error.file.extension.missing": айлу \"{filename}\" не хватает расширения",
"error.file.maxheight": "Высота картинки не должна превышать {height} px",
"error.file.maxsize": "Файл слишком большой",
"error.file.maxwidth": "Ширина картинки не должна превышать {width} px",
"error.file.mime.differs":
"Загруженный файл должен быть того же mime типа: \"{mime}\"",
"error.file.mime.differs": "Загруженный файл должен быть того же mime типа: \"{mime}\"",
"error.file.mime.forbidden": "Тип медиа \"{mime}\" не допустим",
"error.file.mime.invalid": "Неверный тип mime: {mime}",
"error.file.mime.missing":
"Не удалось определить тип медиа для файла \"{filename}\"",
"error.file.mime.missing": "Не удалось определить тип медиа для файла \"{filename}\"",
"error.file.minheight": "Высота файла должна быть хотя бы {height} px",
"error.file.minsize": "Файл слишком маленький",
"error.file.minwidth": "Ширина файла должна быть хотя бы {width} px",
@@ -90,146 +83,108 @@
"error.license.email": "Пожалуйста, введите правильный адрес эл. почты",
"error.license.verification": "Лицензия не подтверждена",
"error.page.changeSlug.permission":
"\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c URL \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
"error.page.changeStatus.incomplete":
"На странице есть ошибки и поэтому ее нельзя опубликовать",
"error.page.changeStatus.permission":
"Невозможно поменять статус для этой страницы",
"error.page.changeStatus.toDraft.invalid":
"Невозможно конвертировать в черновик страницу \"{slug}\"",
"error.page.changeTemplate.invalid":
"Невозможно поменять шаблон страницы \"{slug}\"",
"error.page.changeTemplate.permission":
"У вас нет права поменять шаблон для \"{slug}\"",
"error.page.changeSlug.permission": "\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c URL \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
"error.page.changeStatus.incomplete": "На странице есть ошибки и поэтому ее нельзя опубликовать",
"error.page.changeStatus.permission": "Невозможно поменять статус для этой страницы",
"error.page.changeStatus.toDraft.invalid": "Невозможно конвертировать в черновик страницу \"{slug}\"",
"error.page.changeTemplate.invalid": "Невозможно поменять шаблон страницы \"{slug}\"",
"error.page.changeTemplate.permission": "У вас нет права поменять шаблон для \"{slug}\"",
"error.page.changeTitle.empty": "Название не может быть пустым",
"error.page.changeTitle.permission":
"у вас нет права поменять название \"{slug}\"",
"error.page.changeTitle.permission": "у вас нет права поменять название \"{slug}\"",
"error.page.create.permission": "У вас нет права создать \"{slug}\"",
"error.page.delete": "Невозможно удалить страницу \"{slug}\"",
"error.page.delete.confirm": "Впишите название страницы чтобы подтвердить",
"error.page.delete.hasChildren":
"У страницы есть внутренние страницы, поэтому ее невозможно удалить",
"error.page.delete.hasChildren": "У страницы есть внутренние страницы, поэтому ее невозможно удалить",
"error.page.delete.permission": "У вас нет права удалить \"{slug}\"",
"error.page.draft.duplicate":
"Черновик страницы с аппендиксом URL \"{slug}\" уже есть",
"error.page.duplicate":
"Страница с аппендиксом URL \"{slug}\" уже есть",
"error.page.draft.duplicate": "Черновик страницы с аппендиксом URL \"{slug}\" уже есть",
"error.page.duplicate": "Страница с аппендиксом URL \"{slug}\" уже есть",
"error.page.duplicate.permission": "У вас нет права дублировать \"{slug}\"",
"error.page.notFound": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430",
"error.page.num.invalid":
"Пожалуйста, впишите правильное число сортировки. Число не может быть отрицательным.",
"error.page.num.invalid": "Пожалуйста, впишите правильное число сортировки. Число не может быть отрицательным.",
"error.page.slug.invalid": "Пожалуйста, впишите правильный префикс URL",
"error.page.sort.permission": "Невозможно сортировать страницу \"{slug}\"",
"error.page.status.invalid": "Пожалуйста, установите верный статус страницы",
"error.page.undefined": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430",
"error.page.update.permission": "У вас нет права обновить \"{slug}\"",
"error.section.files.max.plural":
"Нельзя добавить больше чем {max} файлов в секции \"{section}\"",
"error.section.files.max.singular":
"Можно добавить не больше 1 файла в секции \"{section}\"",
"error.section.files.min.plural":
"Секция \"{section}\" требует хотя бы {min} файлов",
"error.section.files.min.singular":
"Секция \"{section}\" требует хотя бы 1 файл",
"error.section.files.max.plural": "Нельзя добавить больше чем {max} файлов в секции \"{section}\"",
"error.section.files.max.singular": "Можно добавить не больше 1 файла в секции \"{section}\"",
"error.section.files.min.plural": "Секция \"{section}\" требует хотя бы {min} файлов",
"error.section.files.min.singular": "Секция \"{section}\" требует хотя бы 1 файл",
"error.section.pages.max.plural":
"Можно добавить не больше {max} страниц в секции \"{section}\"",
"error.section.pages.max.singular":
"Нельзя добавить больше чем 1 страницу в секции \"{section}\"",
"error.section.pages.min.plural":
"Секция \"{section}\" требует хотя бы {min} страниц",
"error.section.pages.min.singular":
"Секция \"{section}\" требует хотя бы одну страницу",
"error.section.pages.max.plural": "Можно добавить не больше {max} страниц в секции \"{section}\"",
"error.section.pages.max.singular": "Нельзя добавить больше чем 1 страницу в секции \"{section}\"",
"error.section.pages.min.plural": "Секция \"{section}\" требует хотя бы {min} страниц",
"error.section.pages.min.singular": "Секция \"{section}\" требует хотя бы одну страницу",
"error.section.notLoaded": "Секция \"{name}\" не может быть загружена",
"error.section.type.invalid": "Тип секции {type} неверный",
"error.site.changeTitle.empty": "Название не может быть пустым",
"error.site.changeTitle.permission":
"У вас нет права поменять название сайта",
"error.site.changeTitle.permission": "У вас нет права поменять название сайта",
"error.site.update.permission": "У вас нет права обновить сайт",
"error.template.default.notFound": "Нет шаблона по умолчанию",
"error.user.changeEmail.permission":
"У вас нет права поменять эл. почту пользователя \"{name}\"",
"error.user.changeLanguage.permission":
"У вас нет права поменять язык для пользователя \"{name}\"",
"error.user.changeName.permission":
"У вас нет права поменять имя пользователя \"{name}\"",
"error.user.changePassword.permission":
"У вас нет права поменять пароль для пользователя \"{name}\"",
"error.user.changeRole.lastAdmin":
"Роль единственного администратора нельзя поменять",
"error.user.changeRole.permission":
"У вас нет права поменять поль для пользователя \"{name}\"",
"error.user.changeRole.toAdmin":
"У вас нет прав предоставить роль администратора",
"error.user.changeEmail.permission": "У вас нет права поменять эл. почту пользователя \"{name}\"",
"error.user.changeLanguage.permission": "У вас нет права поменять язык для пользователя \"{name}\"",
"error.user.changeName.permission": "У вас нет права поменять имя пользователя \"{name}\"",
"error.user.changePassword.permission": "У вас нет права поменять пароль для пользователя \"{name}\"",
"error.user.changeRole.lastAdmin": "Роль единственного администратора нельзя поменять",
"error.user.changeRole.permission": "У вас нет права поменять поль для пользователя \"{name}\"",
"error.user.changeRole.toAdmin": "У вас нет прав предоставить роль администратора",
"error.user.create.permission": "У вас нет права создать этого пользователя",
"error.user.delete": "\u0410\u043a\u043a\u0430\u0443\u043d\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d",
"error.user.delete.lastAdmin": "\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430",
"error.user.delete.lastUser": "Нельзя удалить единственного пользователя",
"error.user.delete.permission":
"У вас нет права удалить пользователя \"{name}\"",
"error.user.duplicate":
"Пользователь с эл. почтой \"{email}\" уже есть",
"error.user.delete.permission": "У вас нет права удалить пользователя \"{name}\"",
"error.user.duplicate": "Пользователь с эл. почтой \"{email}\" уже есть",
"error.user.email.invalid": "Пожалуйста, введите правильный адрес эл. почты",
"error.user.language.invalid": "Впишите правильный язык",
"error.user.language.invalid": "Введите правильный язык",
"error.user.notFound": "\u0410\u043a\u043a\u0430\u0443\u043d\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d",
"error.user.password.invalid":
"Пожалуйста, впишите правильный пароль. Он должен быть минимум из 8 символов.",
"error.user.password.invalid": "Пожалуйста, введите правильный пароль. Он должен состоять минимум из 8 символов.",
"error.user.password.notSame": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c",
"error.user.password.undefined": "У пользователя нет пароля",
"error.user.role.invalid": "Впишите правильную роль",
"error.user.update.permission":
"У вас нет права обновить пользователя \"{name}\"",
"error.user.role.invalid": "Введите правильную роль",
"error.user.update.permission": "У вас нет права обновить пользователя \"{name}\"",
"error.validation.accepted": "Пожалуйста, подтвердите",
"error.validation.alpha": "Пожалуйста, впишите только буквы a-z",
"error.validation.alphanum":
"Пожалуйста, впишите только буквы a-z или числа 0-9",
"error.validation.between":
"Пожалуйста, впишите значение от \"{min}\" до \"{max}\"",
"error.validation.alpha": "Пожалуйста, введите только буквы a-z",
"error.validation.alphanum": "Пожалуйста, введите только буквы a-z или числа 0-9",
"error.validation.between": "Пожалуйста, введите значение от \"{min}\" до \"{max}\"",
"error.validation.boolean": "Пожалуйста, подтвердите или отмените",
"error.validation.contains":
"Пожалуйста, впишите значение, которое содержит \"{needle}\"",
"error.validation.date": "Пожалуйста, впишите правильную дату",
"error.validation.date.after": "Пожалуйста, впишите дату после {date}",
"error.validation.date.before": "Пожалуйста, впишите дату до {date}",
"error.validation.date.between": "Пожалуйста, впишите дату между {min} и {max}",
"error.validation.contains": "Пожалуйста, впишите значение, которое содержит \"{needle}\"",
"error.validation.date": "Пожалуйста, укажите правильную дату",
"error.validation.date.after": "Пожалуйста, укажите дату после {date}",
"error.validation.date.before": "Пожалуйста, укажите дату до {date}",
"error.validation.date.between": "Пожалуйста, укажите дату между {min} и {max}",
"error.validation.denied": "Пожалуйста отмените",
"error.validation.different": "Значение не может быть \"{other}\"",
"error.validation.email": "Пожалуйста, введите правильный адрес эл. почты",
"error.validation.endswith": "Значение должно заканчиваться с \"{end}\"",
"error.validation.filename": "Пожалуйста, впишите правильное название файла",
"error.validation.in": "Пожалуйста, впишите одно из следующих: ({in})",
"error.validation.integer": "Пожалуйста, впишите правильное целое число",
"error.validation.ip": "Пожалуйста, впишите правильный IP адрес",
"error.validation.less": "Пожалуйста, впишите значение меньше чем {max}",
"error.validation.filename": "Пожалуйста, введите правильное название файла",
"error.validation.in": "Пожалуйста, введите одно из следующих: ({in})",
"error.validation.integer": "Пожалуйста, введите правильное целое число",
"error.validation.ip": "Пожалуйста, введите правильный IP адрес",
"error.validation.less": "Пожалуйста, введите значение меньше чем {max}",
"error.validation.match": "Значение не соответствует ожидаемому шаблону",
"error.validation.max": "Пожалуйста, впишите значение равное или больше чем {max}",
"error.validation.maxlength":
"Пожалуйста, впишите значение короче (макс. {max} символов)",
"error.validation.maxwords": "Пожалуйста, впишите не более {max} слов ",
"error.validation.min": "Пожалуйста, впишите значение равное или больше чем {min}",
"error.validation.minlength":
"Пожалуйста, впишите значение длиннее (мин. {min} символов)",
"error.validation.minwords": "Пожалуйста, впишите хотя бы {min} слов",
"error.validation.more": "Пожалуйста, впишите значение больше, чем {min}",
"error.validation.notcontains":
"Пожалуйста, впишите значение, которое не содержит \"{needle}\"",
"error.validation.notin":
"Пожалуйста, не вписывайте одно из: ({notIn})",
"error.validation.max": "Пожалуйста, введите значение равное или больше чем {max}",
"error.validation.maxlength": "Пожалуйста, введите значение короче (макс. {max} символов)",
"error.validation.maxwords": "Пожалуйста, введите не более {max} слов ",
"error.validation.min": "Пожалуйста, введите значение равное или больше чем {min}",
"error.validation.minlength": "Пожалуйста, введите значение длиннее (мин. {min} символов)",
"error.validation.minwords": "Пожалуйста, введите хотя бы {min} слов",
"error.validation.more": "Пожалуйста, введите значение больше, чем {min}",
"error.validation.notcontains": "Пожалуйста, введите значение, которое не содержит \"{needle}\"",
"error.validation.notin": "Пожалуйста, не вписывайте одно из: ({notIn})",
"error.validation.option": "Пожалуйста, выберите правильную опцию ",
"error.validation.num": "Пожалуйста, впишите правильный номер",
"error.validation.required": "Пожалуйста, впишите что-нибудь",
"error.validation.same": "Пожалуйста, впишите \"{other}\"",
"error.validation.num": "Пожалуйста, введите правильный номер",
"error.validation.required": "Пожалуйста, введите что-нибудь",
"error.validation.same": "Пожалуйста, введите \"{other}\"",
"error.validation.size": "Значение размера должно быть \"{size}\"",
"error.validation.startswith": "Значение должно начинаться с \"{start}\"",
"error.validation.time": "Пожалуйста, впишите правильную дату",
"error.validation.url": "Пожалуйста, впишите правильный URL",
"error.validation.time": "Пожалуйста, введите правильную дату",
"error.validation.url": "Пожалуйста, введите правильный URL",
"field.required": "Поле обязательно",
"field.files.empty": "Еще не выбраны файлы",
@@ -238,8 +193,7 @@
"field.structure.empty": "Еще нет записей",
"field.users.empty": "Еще нет пользователей",
"file.delete.confirm":
"Вы точно хотите удалить файл?",
"file.delete.confirm": "Вы точно хотите удалить файл <br><strong>{filename}</strong>?",
"files": "Файлы",
"files.empty": "Еще нет файлов",
@@ -251,29 +205,22 @@
"installation": "Установка",
"installation.completed": "Панель установлена",
"installation.disabled": "Установка панели по умолчанию отключена на общедоступных серверах. Пожалуйста запустите установку на локальном сервере или включите такую возможность с помощью опции <code>panel.install</code>",
"installation.issues.accounts":
"Каталог <code>/site/accounts</code> не существует или не имеет прав записи",
"installation.issues.content":
"Каталог <code>/content</code> не существует или не имеет прав записи",
"installation.issues.accounts": "Каталог <code>/site/accounts</code> не существует или не имеет прав записи",
"installation.issues.content": "Каталог <code>/content</code> не существует или не имеет прав записи",
"installation.issues.curl": "Расширение <code>CURL</code> необходимо",
"installation.issues.headline": "Не удалось установить панель",
"installation.issues.mbstring":
"Расширение <code>MB String</code> необходимо",
"installation.issues.media":
"Каталог <code>/media</code> не существует или нет прав записи",
"installation.issues.mbstring": "Расширение <code>MB String</code> необходимо",
"installation.issues.media": "Каталог <code>/media</code> не существует или нет прав записи",
"installation.issues.php": "Убедитесь, что используется <code>PHP 7+</code>",
"installation.issues.server":
"Kirby требует <code>Apache</code>, <code>Nginx</code> или <code>Caddy</code> ",
"installation.issues.server": "Kirby требует <code>Apache</code>, <code>Nginx</code> или <code>Caddy</code> ",
"installation.issues.sessions": "Каталог <code>/site/sessions</code> не существует или нет прав записи",
"language": "\u042f\u0437\u044b\u043a",
"language.code": "Код",
"language.convert": "Установить по умолчанию",
"language.convert.confirm":
"<p>Вы точно хотите конвертировать <strong>{name}</strong> в главный язык? Это нельзя будет отменить.</p><p>Если <strong>{name}</strong> имеет непереведенный контент, то больше не будет верного каскада и части вашего сайта могут быть пустыми.</p>",
"language.convert.confirm": "<p>Вы точно хотите конвертировать <strong>{name}</strong> в главный язык? Это нельзя будет отменить.</p><p>Если <strong>{name}</strong> имеет непереведенный контент, то больше не будет верного каскада и части вашего сайта могут быть пустыми.</p>",
"language.create": "Добавить новый язык",
"language.delete.confirm":
"Вы точно хотите удалить <strong>{name}</strong> язык, включая все переводы? Это нельзя будет вернуть.",
"language.delete.confirm": "Вы точно хотите удалить <strong>{name}</strong> язык, включая все переводы? Это нельзя будет вернуть.",
"language.deleted": "Язык удален",
"language.direction": "Направление чтения",
"language.direction.ltr": "Слева направо",
@@ -292,8 +239,7 @@
"license": "\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f Kirby",
"license.buy": "Купить лицензию",
"license.register": "Зарегистрировать",
"license.register.help":
"После покупки вы получили по эл. почте код лицензии. Пожалуйста скопируйте и вставьте сюда чтобы зарегистрировать.",
"license.register.help": "После покупки вы получили по эл. почте код лицензии. Пожалуйста скопируйте и вставьте сюда чтобы зарегистрировать.",
"license.register.label": "Пожалуйста вставьте код лицензии",
"license.register.success": "Спасибо за поддержку Kirby",
"license.unregistered": "Это незарегистрированная версия Kirby",
@@ -325,7 +271,7 @@
"months.april": "\u0410\u043f\u0440\u0435\u043b\u044c",
"months.august": "\u0410\u0432\u0433\u0443\u0441\u0442",
"months.december": "\u0414\u0435\u043a\u0430\u0431\u0440\u044c",
"months.february": "\u0424\u0435\u0432\u0440\u0430\u043b\u044c",
"months.february": "Февраль",
"months.january": "\u042f\u043d\u0432\u0430\u0440\u044c",
"months.july": "\u0418\u044e\u043b\u044c",
"months.june": "\u0418\u044e\u043d\u044c",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Пожалуйста, выберите позицию",
"page.changeStatus.select": "Выбрать новый статус",
"page.changeTemplate": "Поменять шаблон",
"page.delete.confirm":
"Вы точно хотите удалить эту страницу?",
"page.delete.confirm.subpages":
"<strong>У этой страницы есть внутренние страницы</strong>.<br>Все внутренние страницы так же будут удалены.",
"page.delete.confirm": "Вы точно хотите удалить страницу <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>У этой страницы есть внутренние страницы</strong>.<br>Все внутренние страницы так же будут удалены.",
"page.delete.confirm.title": "Напишите название страницы, чтобы подтвердить",
"page.draft.create": "Создать черновик",
"page.duplicate.appendix": "Скопировать",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Копировать страницы",
"page.status": "Статус",
"page.status.draft": "Черновик",
"page.status.draft.description":
"Страница в режиме черновика и видна только для авторизированных редакторов",
"page.status.draft.description": "Страница находится в черновом режиме и видна только зарегистрированным пользователям или по секретной ссылке",
"page.status.listed": "Опубликована",
"page.status.listed.description": "Страница доступна для всех посетителей",
"page.status.unlisted": "Скрыта",
@@ -388,10 +331,11 @@
"replace": "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c",
"retry": "\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c",
"revert": "\u0421\u0431\u0440\u043e\u0441",
"revert.confirm": "Вы действительно хотите <strong>удалить все несохраненные изменения</strong>?",
"role": "\u0420\u043e\u043b\u044c",
"role.admin.description": "Admin имеет все права",
"role.admin.title": "Admin",
"role.admin.description": "Администратор имеет все права",
"role.admin.title": "Администратор",
"role.all": "Все",
"role.empty": "Нет пользователей с такой ролью",
"role.description.placeholder": "Без описания",
@@ -414,12 +358,12 @@
"toolbar.button.code": "Код",
"toolbar.button.bold": "\u0416\u0438\u0440\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442",
"toolbar.button.email": "\u042d\u043b.\u043f\u043e\u0447\u0442\u0430",
"toolbar.button.email": "Эл. почта",
"toolbar.button.headings": "Заголовки",
"toolbar.button.heading.1": "Заголовок 1",
"toolbar.button.heading.2": "Заголовок 2",
"toolbar.button.heading.3": "Заголовок 3",
"toolbar.button.italic": "\u041d\u0430\u043a\u043b\u043e\u043d\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442",
"toolbar.button.italic": "Курсив",
"toolbar.button.file": "Файл",
"toolbar.button.file.select": "Выбрать файл",
"toolbar.button.file.upload": "Закачать файл",
@@ -427,7 +371,7 @@
"toolbar.button.ol": "Нумерованный список",
"toolbar.button.ul": "Маркированный список",
"translation.author": "Команда Кирби",
"translation.author": "Команда Kirby",
"translation.direction": "ltr",
"translation.name": "Русский (Russian)",
"translation.locale": "ru_RU",
@@ -447,24 +391,22 @@
"upload.errors": "Ошибка",
"upload.progress": "Закачивается...",
"url": "Url",
"url": "URL",
"url.placeholder": "https://example.com",
"user": "Пользователь",
"user.blueprint":
"Вы можете определить новые секции и поля формы для этой роли пользователя в <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Вы можете определить новые секции и поля формы для этой роли пользователя в <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Поменять эл. почту",
"user.changeLanguage": "Поменять язык",
"user.changeName": "Переназвать этого пользователя",
"user.changePassword": "Поменять пароль",
"user.changePassword.new": "Новый пароль",
"user.changePassword.new.confirm": "Подтвердить новый пароль",
"user.changePassword.new.confirm": "Подтвердить новый пароль",
"user.changeRole": "Поменять роль",
"user.changeRole.select": "Выбрать новую роль",
"user.create": "Добавить нового пользователя",
"user.delete": "Удалить этого пользователя",
"user.delete.confirm":
"\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442?",
"user.delete.confirm": "Вы действительно хотите аккаунт <br><strong>{email}</strong>?",
"users": "Пользователи",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "Profilový obrázok sa nepodarilo nahrať",
"error.avatar.delete.fail": "Profilový obrázok sa nepodarilo zmazať",
"error.avatar.dimensions.invalid":
"Prosím, dodržte, aby šírka a výška profilového obrázka bola menšia ako 3000 pixelov.",
"error.avatar.mime.forbidden":
"Profilový obrázok musí byť súbor JPEG alebo PNG.",
"error.avatar.dimensions.invalid": "Prosím, dodržte, aby šírka a výška profilového obrázka bola menšia ako 3000 pixelov.",
"error.avatar.mime.forbidden": "Profilový obrázok musí byť súbor JPEG alebo PNG.",
"error.blueprint.notFound": "Blueprint \"{name}\" sa nepodarilo načítať",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Neplatný converter \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Nemáte povolenie na zmenu názvu pre \"{filename}\"",
"error.file.changeName.permission": "Nemáte povolenie na zmenu názvu pre \"{filename}\"",
"error.file.duplicate": "Súbor s názvom \"{filename}\" už existuje",
"error.file.extension.forbidden":
"Prípona \"{extension}\" nie je povolená",
"error.file.extension.missing":
"Prípona pre \"{filename}\" chýba",
"error.file.extension.forbidden": "Prípona \"{extension}\" nie je povolená",
"error.file.extension.missing": "Prípona pre \"{filename}\" chýba",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
"error.file.maxwidth": "The width of the image must not exceed {width} pixels",
"error.file.mime.differs":
"MIME typ nahratého súboru msa musí zhodovať s \"{mime}\"",
"error.file.mime.differs": "MIME typ nahratého súboru msa musí zhodovať s \"{mime}\"",
"error.file.mime.forbidden": "Typ média \"{mime}\" nie je povolený",
"error.file.mime.invalid": "Invalid mime type: {mime}",
"error.file.mime.missing":
"Typ média pre \"{filename}\" sa nepodarilo zistiť",
"error.file.mime.missing": "Typ média pre \"{filename}\" sa nepodarilo zistiť",
"error.file.minheight": "The height of the image must be at least {height} pixels",
"error.file.minsize": "The file is too small",
"error.file.minwidth": "The width of the image must be at least {width} pixels",
@@ -90,111 +83,77 @@
"error.license.email": "Prosím, zadajte platnú e-mailovú adresu",
"error.license.verification": "The license could not be verified",
"error.page.changeSlug.permission":
"Nemáte povolenie na zmenu URL príponu pre \"{slug}\"",
"error.page.changeStatus.incomplete":
"Stránka obsahuje chyby a nemôže byť zverejnená",
"error.page.changeStatus.permission":
"Status tejto stránky nemôže byť zmenený",
"error.page.changeStatus.toDraft.invalid":
"Stránka \"{slug}\" nemôže byť zmenená na koncept.",
"error.page.changeTemplate.invalid":
"Šablónu pre stránku \"{slug}\" nie je možné zmeniť",
"error.page.changeTemplate.permission":
"Nemáte povolenie na zmenu šablóny pre \"{slug}\"",
"error.page.changeSlug.permission": "Nemáte povolenie na zmenu URL príponu pre \"{slug}\"",
"error.page.changeStatus.incomplete": "Stránka obsahuje chyby a nemôže byť zverejnená",
"error.page.changeStatus.permission": "Status tejto stránky nemôže byť zmenený",
"error.page.changeStatus.toDraft.invalid": "Stránka \"{slug}\" nemôže byť zmenená na koncept.",
"error.page.changeTemplate.invalid": "Šablónu pre stránku \"{slug}\" nie je možné zmeniť",
"error.page.changeTemplate.permission": "Nemáte povolenie na zmenu šablóny pre \"{slug}\"",
"error.page.changeTitle.empty": "Titulok nemôže byť prázdny",
"error.page.changeTitle.permission":
"Nemáte povolenie na zmenu titulku pre \"{slug}\"",
"error.page.changeTitle.permission": "Nemáte povolenie na zmenu titulku pre \"{slug}\"",
"error.page.create.permission": "Nemáte povolenie na vytvorenie \"{slug}\"",
"error.page.delete": "Stránku \"{slug}\" nie je možné vymazať",
"error.page.delete.confirm": "Prosím, zadajte titulok stránky pre potvrdenie",
"error.page.delete.hasChildren":
"Táto stránka obsahuje podstránky a nemôže byť zmazaná",
"error.page.delete.hasChildren": "Táto stránka obsahuje podstránky a nemôže byť zmazaná",
"error.page.delete.permission": "Nemáte povolenie na zmazanie stránky \"{slug}\"",
"error.page.draft.duplicate":
"Koncept stránky s URL appendix-om \"{slug}\" už existuje",
"error.page.duplicate":
"Stránka s URL appendix-om \"{slug}\" už existuje",
"error.page.draft.duplicate": "Koncept stránky s URL appendix-om \"{slug}\" už existuje",
"error.page.duplicate": "Stránka s URL appendix-om \"{slug}\" už existuje",
"error.page.duplicate.permission": "You are not allowed to duplicate \"{slug}\"",
"error.page.notFound": "Stránku \"{slug}\" nie je možné nájsť",
"error.page.num.invalid":
"Prosím, zadajte platné číslo pre radenie. Čísla nemôžu byť záporné.",
"error.page.num.invalid": "Prosím, zadajte platné číslo pre radenie. Čísla nemôžu byť záporné.",
"error.page.slug.invalid": "Prosím, zadajte platný URL prefix.",
"error.page.sort.permission": "Stránku \"{slug}\" nie je možné preradiť.",
"error.page.status.invalid": "Prosím, nastavte platnú status pre stránku",
"error.page.undefined": "Stránku nie je možné nájsť",
"error.page.update.permission": "Nemáte povolenie na aktualizáciu \"{slug}\"",
"error.section.files.max.plural":
"Nemôžete pridať viac ako {max} súbory/ov do sekcie \"{section}\"",
"error.section.files.max.singular":
"Nemôžete pridať viac ako 1 súbor do sekcie \"{section}\"",
"error.section.files.min.plural":
"The \"{section}\" section requires at least {min} files",
"error.section.files.min.singular":
"The \"{section}\" section requires at least one file",
"error.section.files.max.plural": "Nemôžete pridať viac ako {max} súbory/ov do sekcie \"{section}\"",
"error.section.files.max.singular": "Nemôžete pridať viac ako 1 súbor do sekcie \"{section}\"",
"error.section.files.min.plural": "The \"{section}\" section requires at least {min} files",
"error.section.files.min.singular": "The \"{section}\" section requires at least one file",
"error.section.pages.max.plural":
"Nemôžete pridať viac ako {max} stránky/ok do sekcie \"{section}\"",
"error.section.pages.max.singular":
"Nemôžete pridať viac ako 1 stránku do sekcie \"{section}\"",
"error.section.pages.min.plural":
"The \"{section}\" section requires at least {min} pages",
"error.section.pages.min.singular":
"The \"{section}\" section requires at least one page",
"error.section.pages.max.plural": "Nemôžete pridať viac ako {max} stránky/ok do sekcie \"{section}\"",
"error.section.pages.max.singular": "Nemôžete pridať viac ako 1 stránku do sekcie \"{section}\"",
"error.section.pages.min.plural": "The \"{section}\" section requires at least {min} pages",
"error.section.pages.min.singular": "The \"{section}\" section requires at least one page",
"error.section.notLoaded": "Sekciu \"{name}\" sa nepodarilo nahrať",
"error.section.type.invalid": "Typ sekcie \"{type}\" nie je platný",
"error.site.changeTitle.empty": "Titulok nemôže byť prázdny",
"error.site.changeTitle.permission":
"Nemáte povolenie na zmenu titulku pre portál",
"error.site.changeTitle.permission": "Nemáte povolenie na zmenu titulku pre portál",
"error.site.update.permission": "Nemáte povolenie na aktualizovanie portálu",
"error.template.default.notFound": "Predvolená šablóna neexistuje",
"error.user.changeEmail.permission":
"Nemáte povolenie na zmenu e-mailu pre užívateľa \"{name}\"",
"error.user.changeLanguage.permission":
"Nemáte povolenie na zmenu jazyka pre užívateľa \"{name}\"",
"error.user.changeName.permission":
"Nemáte povolenie na zmenu mena pre užívateľa \"{name}\"",
"error.user.changePassword.permission":
"Nemáte povolenie na zmenu hesla pre užívateľa \"{name}\"",
"error.user.changeRole.lastAdmin":
"Rolu pre posledného administrátora nie je možné zmeniť",
"error.user.changeRole.permission":
"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.changeEmail.permission": "Nemáte povolenie na zmenu e-mailu pre užívateľa \"{name}\"",
"error.user.changeLanguage.permission": "Nemáte povolenie na zmenu jazyka pre užívateľa \"{name}\"",
"error.user.changeName.permission": "Nemáte povolenie na zmenu mena pre užívateľa \"{name}\"",
"error.user.changePassword.permission": "Nemáte povolenie na zmenu hesla pre užívateľa \"{name}\"",
"error.user.changeRole.lastAdmin": "Rolu pre posledného administrátora nie je možné zmeniť",
"error.user.changeRole.permission": "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.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.lastUser": "Posledného užívateľa nie je možné zmazať",
"error.user.delete.permission":
"Nemáte povolenie na zmazanie užívateľa \"{name}\"",
"error.user.duplicate":
"Užívateľ s e-mailovou adresou \"{email}\" už existuje",
"error.user.delete.permission": "Nemáte povolenie na zmazanie užívateľa \"{name}\"",
"error.user.duplicate": "Užívateľ s e-mailovou adresou \"{email}\" už existuje",
"error.user.email.invalid": "Prosím, zadajte platnú e-mailovú adresu",
"error.user.language.invalid": "Prosím, zadajte platný jazyk",
"error.user.notFound": "Užívateľa \"{name}\" nie je možné nájsť",
"error.user.password.invalid":
"Prosím, zadajte platné heslo. Dĺžka hesla musí byť aspoň 8 znakov.",
"error.user.password.invalid": "Prosím, zadajte platné heslo. Dĺžka hesla musí byť aspoň 8 znakov.",
"error.user.password.notSame": "Heslá nie sú rovnaké",
"error.user.password.undefined": "Užívateľ nemá heslo",
"error.user.role.invalid": "Prosím, zadajte platnú rolu",
"error.user.update.permission":
"Nemáte povolenie na aktualizáciu užívateľa \"{name}\"",
"error.user.update.permission": "Nemáte povolenie na aktualizáciu užívateľa \"{name}\"",
"error.validation.accepted": "Prosím, potvrďte",
"error.validation.alpha": "Prosím, zadajte len znaky z hlások a-z",
"error.validation.alphanum":
"Prosím, zadajte len znaky z hlások a-z a čísloviek 0-9",
"error.validation.between":
"Prosím, zadajte hodnotu od \"{min}\" do \"{max}\"",
"error.validation.alphanum": "Prosím, zadajte len znaky z hlások a-z a čísloviek 0-9",
"error.validation.between": "Prosím, zadajte hodnotu od \"{min}\" do \"{max}\"",
"error.validation.boolean": "Prosím, potvrďte alebo odmietnite",
"error.validation.contains":
"Prosím, zadajte hodnotu, ktorá obsahuje \"{needle}\"",
"error.validation.contains": "Prosím, zadajte hodnotu, ktorá obsahuje \"{needle}\"",
"error.validation.date": "Prosím, zadajte platný dátum",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Prosím, zadajte hodnotu menšiu ako {max}",
"error.validation.match": "Hodnota nezodpovedá očakávanému vzoru",
"error.validation.max": "Prosím, zadajte hodnotu rovnú alebo menšiu ako {max}",
"error.validation.maxlength":
"Prosím, zadajte kratšiu hodnotu. (max. {max} charaktery/ov)",
"error.validation.maxlength": "Prosím, zadajte kratšiu hodnotu. (max. {max} charaktery/ov)",
"error.validation.maxwords": "Prosím, nezadávajte viac ako {max} slovo/á/ov",
"error.validation.min": "Prosím, zadajte hodnotu rovnú alebo väčšiu ako {min}",
"error.validation.minlength":
"Prosím, zadajte dlhšiu hodnotu. (min. {min} charaktery/ov)",
"error.validation.minlength": "Prosím, zadajte dlhšiu hodnotu. (min. {min} charaktery/ov)",
"error.validation.minwords": "Prosím, zadajte aspoň {min} slovo/á/ov",
"error.validation.more": "Prosím zadajte hodnotu väčšiu ako {min}",
"error.validation.notcontains":
"Prosím, zadajte hodnotu, ktorá neobsahuje \"{needle}\"",
"error.validation.notin":
"Prosím, nezadávajte ani jedno z nasledujúcich: ({notIn})",
"error.validation.notcontains": "Prosím, zadajte hodnotu, ktorá neobsahuje \"{needle}\"",
"error.validation.notin": "Prosím, nezadávajte ani jedno z nasledujúcich: ({notIn})",
"error.validation.option": "Prosím, zadajte platnú voľbu",
"error.validation.num": "Prosím, zadajte platné číslo",
"error.validation.required": "Prosím, zadajte niečo",
@@ -238,8 +193,7 @@
"field.structure.empty": "Zatiaľ žiadne údaje",
"field.users.empty": "Žiadni užívatelia zatiaľ neboli zvolení",
"file.delete.confirm":
"Ste si istý, že chcete zmazať <br><strong>{filename}</strong>?",
"file.delete.confirm": "Ste si istý, že chcete zmazať <br><strong>{filename}</strong>?",
"files": "Súbory",
"files.empty": "Zatiaľ žiadne súbory",
@@ -251,29 +205,22 @@
"installation": "Inštalácia",
"installation.completed": "Panel bol nainštalovaný",
"installation.disabled": "Inštalácia Panelu na verejných serveroch je štandardne zablokovaná. Prosím, spustite inštaláciu na lokálnom serveri alebo aktivujte voľbu <code>panel.install</code>.",
"installation.issues.accounts":
"Priečinok <code>/site/accounts</code> neexistuje alebo nie je nastavený ako zapisovateľný",
"installation.issues.content":
"Priečinok <code>/content</code> neexistuje alebo nie je nastavený ako zapisovateľný",
"installation.issues.accounts": "Priečinok <code>/site/accounts</code> neexistuje alebo nie je nastavený ako zapisovateľný",
"installation.issues.content": "Priečinok <code>/content</code> neexistuje alebo nie je nastavený ako zapisovateľný",
"installation.issues.curl": "<code>CURL</code> rozšírenie je povinné",
"installation.issues.headline": "Panel nie je možné naištalovať",
"installation.issues.mbstring":
"<code>MB String</code> rozšírenie je povinné",
"installation.issues.media":
"Priečinok <code>/media</code> neexistuje alebo nie je nastavený ako zapisovateľný",
"installation.issues.mbstring": "<code>MB String</code> rozšírenie je povinné",
"installation.issues.media": "Priečinok <code>/media</code> neexistuje alebo nie je nastavený ako zapisovateľný",
"installation.issues.php": "Uistite sa, že používate <code>PHP 7+</code>",
"installation.issues.server":
"Kirby vyžaduje <code>Apache</code>, <code>Nginx</code> alebo <code>Caddy</code>",
"installation.issues.server": "Kirby vyžaduje <code>Apache</code>, <code>Nginx</code> alebo <code>Caddy</code>",
"installation.issues.sessions": "Priečinok <code>/site/sessions</code> neexistuje alebo nie je nastavený ako zapisovateľný",
"language": "Jazyk",
"language.code": "Kód",
"language.convert": "Nastaviť ako predvolené",
"language.convert.confirm":
"<p>Ste si istý, že chcete nastaviť <strong>{name}</strong> ako predvolený jazyk? Túto akciu nie je možné zvrátiť.</p><p>Ak <strong>{name}</strong> obsahuje nepreložený obsah, tak pre tento obsah nebude fungovať platné volanie a niektoré časti vašich stránok zostanú prázdne.</p>",
"language.convert.confirm": "<p>Ste si istý, že chcete nastaviť <strong>{name}</strong> ako predvolený jazyk? Túto akciu nie je možné zvrátiť.</p><p>Ak <strong>{name}</strong> obsahuje nepreložený obsah, tak pre tento obsah nebude fungovať platné volanie a niektoré časti vašich stránok zostanú prázdne.</p>",
"language.create": "Pridať nový jazyk",
"language.delete.confirm":
"Ste si istý, že chcete zmazať jazyk <strong>{name}</strong> vrátane všetkých prekladov? Túto akciu nie je možné zvrátiť.",
"language.delete.confirm": "Ste si istý, že chcete zmazať jazyk <strong>{name}</strong> vrátane všetkých prekladov? Túto akciu nie je možné zvrátiť.",
"language.deleted": "Jazyk bol zmazaný",
"language.direction": "Smer čítania",
"language.direction.ltr": "Zľava doprava",
@@ -292,8 +239,7 @@
"license": "Licencia",
"license.buy": "Zakúpiť licenciu",
"license.register": "Registrovať",
"license.register.help":
"Licenčný kód vám bol doručený e-mailom po úspešnom nákupe. Prosím, skopírujte a prilepte ho na uskutočnenie registrácie.",
"license.register.help": "Licenčný kód vám bol doručený e-mailom po úspešnom nákupe. Prosím, skopírujte a prilepte ho na uskutočnenie registrácie.",
"license.register.label": "Prosím, zadajte váš licenčný kód",
"license.register.success": "Ďakujeme za vašu podporu Kirby",
"license.unregistered": "Toto je neregistrované demo Kirby",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Prosím, zmeňte pozíciu",
"page.changeStatus.select": "Zvoľte nový status",
"page.changeTemplate": "Zmeniť šablónu",
"page.delete.confirm":
"Ste si istý, že chcete zmazať <strong>{title}</strong>?",
"page.delete.confirm.subpages":
"<strong>Táto stránka obsahuje podstránky</strong>. <br>Všetky podstránky budú taktiež zmazané.",
"page.delete.confirm": "Ste si istý, že chcete zmazať <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Táto stránka obsahuje podstránky</strong>. <br>Všetky podstránky budú taktiež zmazané.",
"page.delete.confirm.title": "Pre potvrdenie zadajte titulok stránky",
"page.draft.create": "Vytvoriť koncept",
"page.duplicate.appendix": "Kopírovať",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Copy pages",
"page.status": "Status",
"page.status.draft": "Koncept",
"page.status.draft.description":
"Stránka je koncept móde a je viditeľná len pre prihlásených užívateľov",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.listed": "Verejné",
"page.status.listed.description": "Stránka je prístupná pre všetkých",
"page.status.unlisted": "Skryté",
@@ -388,6 +331,7 @@
"replace": "Nahradiť",
"retry": "Skúsiť ešte raz",
"revert": "Vrátiť späť",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "Rola",
"role.admin.description": "The admin has all rights",
@@ -451,8 +395,7 @@
"url.placeholder": "https://example.com",
"user": "Užívateľ",
"user.blueprint":
"Ďalšie sekcie a formulárové polia pre túto užívateľskú rolu môžete definovať v rámci <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Ďalšie sekcie a formulárové polia pre túto užívateľskú rolu môžete definovať v rámci <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Zmeniť e-mail",
"user.changeLanguage": "Zmeniť jazyk",
"user.changeName": "Premenovať tohto užívateľa",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Zvoliť novú rolu",
"user.create": "Pridať nového užívateľa",
"user.delete": "Zmazať tohto užívateľa",
"user.delete.confirm":
"Ste si istý, že chcete zmazať <br><strong>{email}</strong>?",
"user.delete.confirm": "Ste si istý, že chcete zmazať <br><strong>{email}</strong>?",
"users": "Užívatelia",

View File

@@ -42,10 +42,8 @@
"error.avatar.create.fail": "Profilbilden kunde inte laddas upp",
"error.avatar.delete.fail": "Profilbilden kunde inte raderas",
"error.avatar.dimensions.invalid":
"Se till att profilbildens bredd och höjd är mindre än 3000 pixlar",
"error.avatar.mime.forbidden":
"Profilbilden måste vara i formatet JPEG eller PNG",
"error.avatar.dimensions.invalid": "Se till att profilbildens bredd och höjd är mindre än 3000 pixlar",
"error.avatar.mime.forbidden": "Profilbilden måste vara i formatet JPEG eller PNG",
"error.blueprint.notFound": "Blueprint \"{name}\" kunde inte laddas",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Ogiltig omvandlare \"{converter}\"",
"error.file.changeName.empty": "Namnet får inte vara tomt",
"error.file.changeName.permission":
"Du har inte behörighet att ändra namnet på \"{filename}\"",
"error.file.changeName.permission": "Du har inte behörighet att ändra namnet på \"{filename}\"",
"error.file.duplicate": "En fil med namnet \"{filename}\" existerar redan",
"error.file.extension.forbidden":
"Filändelsen \"{extension}\" är inte tillåten",
"error.file.extension.missing":
"Filen \"{filename}\" saknar filändelse",
"error.file.extension.forbidden": "Filändelsen \"{extension}\" är inte tillåten",
"error.file.extension.missing": "Filen \"{filename}\" saknar filändelse",
"error.file.maxheight": "Bildens höjd får inte överstiga {height} pixlar",
"error.file.maxsize": "Filen är för stor",
"error.file.maxwidth": "Bildens bredd får inte överstiga {width} pixlar",
"error.file.mime.differs":
"Den uppladdade filen måste vara av samma mime-typ \"{mime}\"",
"error.file.mime.differs": "Den uppladdade filen måste vara av samma mime-typ \"{mime}\"",
"error.file.mime.forbidden": "Mediatypen \"{mime}\" är inte tillåten",
"error.file.mime.invalid": "Ogiltig mime-typ: {mime}",
"error.file.mime.missing":
"Mediatypen för \"{filename}\" kan inte detekteras",
"error.file.mime.missing": "Mediatypen för \"{filename}\" kan inte detekteras",
"error.file.minheight": "Bildens höjd måste vara minst {height} pixlar",
"error.file.minsize": "Filen är för liten",
"error.file.minwidth": "Bildens bredd måste vara minst {width} pixlar",
@@ -90,111 +83,77 @@
"error.license.email": "Ange en giltig e-postadress",
"error.license.verification": "Licensen kunde inte verifieras",
"error.page.changeSlug.permission":
"Du har inte behörighet att ändra URL-appendixen för \"{slug}\"",
"error.page.changeStatus.incomplete":
"Sidan innehåller fel och kan inte publiceras",
"error.page.changeStatus.permission":
"Statusen för denna sida kan inte ändras",
"error.page.changeStatus.toDraft.invalid":
"Statusen för sidan \"{slug}\" kan inte ändras till utkast",
"error.page.changeTemplate.invalid":
"Mallen för sidan \"{slug}\" kan inte ändras",
"error.page.changeTemplate.permission":
"Du har inte behörighet att ändra mallen för \"{slug}\"",
"error.page.changeSlug.permission": "Du har inte behörighet att ändra URL-appendixen för \"{slug}\"",
"error.page.changeStatus.incomplete": "Sidan innehåller fel och kan inte publiceras",
"error.page.changeStatus.permission": "Statusen för denna sida kan inte ändras",
"error.page.changeStatus.toDraft.invalid": "Statusen för sidan \"{slug}\" kan inte ändras till utkast",
"error.page.changeTemplate.invalid": "Mallen för sidan \"{slug}\" kan inte ändras",
"error.page.changeTemplate.permission": "Du har inte behörighet att ändra mallen för \"{slug}\"",
"error.page.changeTitle.empty": "Titeln får inte vara tom",
"error.page.changeTitle.permission":
"Du har inte behörighet att ändra titeln för \"{slug}\"",
"error.page.changeTitle.permission": "Du har inte behörighet att ändra titeln för \"{slug}\"",
"error.page.create.permission": "Du har inte behörighet att skapa \"{slug}\"",
"error.page.delete": "Sidan \"{slug}\" kan inte raderas",
"error.page.delete.confirm": "Fyll i sidans titel för att bekräfta",
"error.page.delete.hasChildren":
"Sidan har undersidor och kan inte raderas",
"error.page.delete.hasChildren": "Sidan har undersidor och kan inte raderas",
"error.page.delete.permission": "Du har inte behörighet att radera \"{slug}\"",
"error.page.draft.duplicate":
"Ett utkast med URL-appendixen \"{slug}\" existerar redan",
"error.page.duplicate":
"En sida med URL-appendixen \"{slug}\" existerar redan",
"error.page.draft.duplicate": "Ett utkast med URL-appendixen \"{slug}\" existerar redan",
"error.page.duplicate": "En sida med URL-appendixen \"{slug}\" existerar redan",
"error.page.duplicate.permission": "Du har inte behörighet att duplicera \"{slug}\"",
"error.page.notFound": "Sidan \"{slug}\" kan inte hittas",
"error.page.num.invalid":
"Ange ett giltigt nummer för sortering. Numret får inte vara negativt.",
"error.page.num.invalid": "Ange ett giltigt nummer för sortering. Numret får inte vara negativt.",
"error.page.slug.invalid": "Ange ett giltigt URL-prefix",
"error.page.sort.permission": "Sidan \"{slug}\" kan inte sorteras",
"error.page.status.invalid": "Sätt en giltig status för sidan",
"error.page.undefined": "Sidan kan inte hittas",
"error.page.update.permission": "Du har inte behörighet att uppdatera \"{slug}\"",
"error.section.files.max.plural":
"Du får inte lägga till mer än {max} filer till sektionen \"{section}\"",
"error.section.files.max.singular":
"Du får inte lägga till mer än en fil i sektionen \"{section}\"",
"error.section.files.min.plural":
"Sektionen \"{section}\" kräver minst {min} filer",
"error.section.files.min.singular":
"Sektionen \"{section}\" kräver minst en fil",
"error.section.files.max.plural": "Du får inte lägga till mer än {max} filer till sektionen \"{section}\"",
"error.section.files.max.singular": "Du får inte lägga till mer än en fil i sektionen \"{section}\"",
"error.section.files.min.plural": "Sektionen \"{section}\" kräver minst {min} filer",
"error.section.files.min.singular": "Sektionen \"{section}\" kräver minst en fil",
"error.section.pages.max.plural":
"Du får inte lägga till mer än {max} sidor till sektionen \"{section}\"",
"error.section.pages.max.singular":
"Du får inte lägga till mer än en sida i sektionen \"{section}\"",
"error.section.pages.min.plural":
"Sektionen \"{section}\" kräver minst {min} sidor",
"error.section.pages.min.singular":
"Sektionen \"{section}\" kräver minst en sida",
"error.section.pages.max.plural": "Du får inte lägga till mer än {max} sidor till sektionen \"{section}\"",
"error.section.pages.max.singular": "Du får inte lägga till mer än en sida i sektionen \"{section}\"",
"error.section.pages.min.plural": "Sektionen \"{section}\" kräver minst {min} sidor",
"error.section.pages.min.singular": "Sektionen \"{section}\" kräver minst en sida",
"error.section.notLoaded": "Sektionen \"{name}\" kunde inte laddas",
"error.section.type.invalid": "Sektionstypen \"{type}\" är inte giltig",
"error.site.changeTitle.empty": "Titeln får inte vara tom",
"error.site.changeTitle.permission":
"Du har inte behörighet att ändra titeln på webbplatsen",
"error.site.changeTitle.permission": "Du har inte behörighet att ändra titeln på webbplatsen",
"error.site.update.permission": "Du har inte behörighet att uppdatera webbplatsen",
"error.template.default.notFound": "Standardmallen existerar inte",
"error.user.changeEmail.permission":
"Du har inte behörighet att ändra e-postadressen för användaren \"{name}\"",
"error.user.changeLanguage.permission":
"Du har inte behörighet att ändra språket för användaren \"{name}\"",
"error.user.changeName.permission":
"Du har inte behörighet att ändra namnet för användaren \"{name}\"",
"error.user.changePassword.permission":
"Du har inte behörighet att ändra lösenordet för användaren \"{name}\"",
"error.user.changeRole.lastAdmin":
"Rollen för den återstående adminanvändaren kan inte ändras",
"error.user.changeRole.permission":
"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.changeEmail.permission": "Du har inte behörighet att ändra e-postadressen för användaren \"{name}\"",
"error.user.changeLanguage.permission": "Du har inte behörighet att ändra språket för användaren \"{name}\"",
"error.user.changeName.permission": "Du har inte behörighet att ändra namnet för användaren \"{name}\"",
"error.user.changePassword.permission": "Du har inte behörighet att ändra lösenordet för användaren \"{name}\"",
"error.user.changeRole.lastAdmin": "Rollen för den återstående adminanvändaren kan inte ändras",
"error.user.changeRole.permission": "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.delete": "Användaren kan inte raderas",
"error.user.delete.lastAdmin": "Den återstående administratören kan inte raderas",
"error.user.delete.lastUser": "Den återstående användaren kan inte raderas",
"error.user.delete.permission":
"Du har inte behörighet att radera användaren \"{name}\"",
"error.user.duplicate":
"En användare med e-postadressen \"{email}\" finns redan",
"error.user.delete.permission": "Du har inte behörighet att radera användaren \"{name}\"",
"error.user.duplicate": "En användare med e-postadressen \"{email}\" finns redan",
"error.user.email.invalid": "Ange en giltig e-postadress",
"error.user.language.invalid": "Ange ett giltigt språk",
"error.user.notFound": "Användaren \"{name}\" kan ej hittas",
"error.user.password.invalid":
"Ange ett giltigt lösenord. Lösenordet måste vara minst 8 tecken långt.",
"error.user.password.invalid": "Ange ett giltigt lösenord. Lösenordet måste vara minst 8 tecken långt.",
"error.user.password.notSame": "Lösenorden matchar inte",
"error.user.password.undefined": "Användaren har inget lösenord",
"error.user.role.invalid": "Ange en giltig roll",
"error.user.update.permission":
"Du har inte behörighet att uppdatera användaren \"{name}\"",
"error.user.update.permission": "Du har inte behörighet att uppdatera användaren \"{name}\"",
"error.validation.accepted": "Vänligen bekräfta",
"error.validation.alpha": "Ange endast tecken mellan a-z",
"error.validation.alphanum":
"Ange endast tecken mellan a-z eller siffror 0-9",
"error.validation.between":
"Ange ett värde mellan \"{min}\" och \"{max}\"",
"error.validation.alphanum": "Ange endast tecken mellan a-z eller siffror 0-9",
"error.validation.between": "Ange ett värde mellan \"{min}\" och \"{max}\"",
"error.validation.boolean": "Bekräfta eller neka",
"error.validation.contains":
"Ange ett värde som innehåller \"{needle}\"",
"error.validation.contains": "Ange ett värde som innehåller \"{needle}\"",
"error.validation.date": "Ange ett giltigt datum",
"error.validation.date.after": "Ange ett datum efter {date}",
"error.validation.date.before": "Ange ett datum före {date}",
@@ -210,18 +169,14 @@
"error.validation.less": "Ange ett värde lägre än {max}",
"error.validation.match": "Värdet matchar inte det förväntade mönstret",
"error.validation.max": "Ange ett värde som är lika med eller lägre än {max}",
"error.validation.maxlength":
"Ange ett kortare värde. (max {max} tecken)",
"error.validation.maxlength": "Ange ett kortare värde. (max {max} tecken)",
"error.validation.maxwords": "Ange inte mer än {max} ord",
"error.validation.min": "Ange ett värde som är lika med eller större än {min}",
"error.validation.minlength":
"Ange ett längre värde. (minst {min} tecken)",
"error.validation.minlength": "Ange ett längre värde. (minst {min} tecken)",
"error.validation.minwords": "Ange minst {min} ord",
"error.validation.more": "Ange ett större värde än {min}",
"error.validation.notcontains":
"Ange ett värde som inte innehåller \"{needle}\"",
"error.validation.notin":
"Ange inte något av följande: ({notIn})",
"error.validation.notcontains": "Ange ett värde som inte innehåller \"{needle}\"",
"error.validation.notin": "Ange inte något av följande: ({notIn})",
"error.validation.option": "Välj ett giltigt alternativ",
"error.validation.num": "Ange ett giltigt nummer",
"error.validation.required": "Ange någonting",
@@ -238,8 +193,7 @@
"field.structure.empty": "Inga poster än",
"field.users.empty": "Inga användare valda än",
"file.delete.confirm":
"Vill du verkligen radera <br><strong>{filename}</strong>?",
"file.delete.confirm": "Vill du verkligen radera <br><strong>{filename}</strong>?",
"files": "Filer",
"files.empty": "Inga filer än",
@@ -251,29 +205,22 @@
"installation": "Installation",
"installation.completed": "Panelen har installerats",
"installation.disabled": "Installeraren för panelen är som standard inaktiverad på offentliga servrar. Kör installeraren på en lokal maskin eller aktivera den med alternativet <code>panel.install</code>.",
"installation.issues.accounts":
"Mappen <code>/site/accounts</code> finns inte eller är inte skrivbar",
"installation.issues.content":
"Mappen <code>/content</code> finns inte eller är inte skrivbar",
"installation.issues.accounts": "Mappen <code>/site/accounts</code> finns inte eller är inte skrivbar",
"installation.issues.content": "Mappen <code>/content</code> finns inte eller är inte skrivbar",
"installation.issues.curl": "Tillägget <code>CURL</code> krävs",
"installation.issues.headline": "Panelen kan inte installeras",
"installation.issues.mbstring":
"Tillägget <code>MB String</code> krävs",
"installation.issues.media":
"Mappen <code>/media</code> finns inte eller är inte skrivbar",
"installation.issues.mbstring": "Tillägget <code>MB String</code> krävs",
"installation.issues.media": "Mappen <code>/media</code> finns inte eller är inte skrivbar",
"installation.issues.php": "Se till att du använder <code>PHP 7+</code>",
"installation.issues.server":
"Kirby kräver <code>Apache</code>, <code>Nginx</code> eller <code>Caddy</code>",
"installation.issues.server": "Kirby kräver <code>Apache</code>, <code>Nginx</code> eller <code>Caddy</code>",
"installation.issues.sessions": "Mappen <code>/site/sessions</code> finns inte eller är inte skrivbar",
"language": "Spr\u00e5k",
"language.code": "Kod",
"language.convert": "Ange som standard",
"language.convert.confirm":
"<p>Vill du verkligen göra <strong>{name}</strong> till standardspråket? Detta kan inte ångras.</p><p>Om <strong>{name}</strong> har oöversatt innehåll, kommer det inte längre finnas en alternativ översättning och delar av sajten kommer kanske att vara tom.</p>",
"language.convert.confirm": "<p>Vill du verkligen göra <strong>{name}</strong> till standardspråket? Detta kan inte ångras.</p><p>Om <strong>{name}</strong> har oöversatt innehåll, kommer det inte längre finnas en alternativ översättning och delar av sajten kommer kanske att vara tom.</p>",
"language.create": "Lägg till ett nytt språk",
"language.delete.confirm":
"Vill du verkligen radera språket <strong>{name}</strong> inklusive alla översättningar? Detta kan inte ångras!",
"language.delete.confirm": "Vill du verkligen radera språket <strong>{name}</strong> inklusive alla översättningar? Detta kan inte ångras!",
"language.deleted": "Språket har raderats",
"language.direction": "Läsriktning",
"language.direction.ltr": "Vänster till höger",
@@ -292,8 +239,7 @@
"license": "Licens",
"license.buy": "Köp en licens",
"license.register": "Registrera",
"license.register.help":
"Du fick din licenskod via e-post efter inköpet. Kopiera och klistra in den för att registrera licensen.",
"license.register.help": "Du fick din licenskod via e-post efter inköpet. Kopiera och klistra in den för att registrera licensen.",
"license.register.label": "Ange din licenskod",
"license.register.success": "Tack för att du stödjer Kirby",
"license.unregistered": "Detta är en oregistrerad demo av Kirby",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Välj en ny position",
"page.changeStatus.select": "Välj en ny status",
"page.changeTemplate": "Ändra mall",
"page.delete.confirm":
"Vill du verkligen radera <strong>{title}</strong>?",
"page.delete.confirm.subpages":
"<strong>Denna sida har undersidor.</strong> <br>Alla undersidor kommer också att raderas.",
"page.delete.confirm": "Vill du verkligen radera <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Denna sida har undersidor.</strong> <br>Alla undersidor kommer också att raderas.",
"page.delete.confirm.title": "Fyll i sidans titel för att bekräfta",
"page.draft.create": "Skapa utkast",
"page.duplicate.appendix": "Kopiera",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Kopiera sidor",
"page.status": "Status",
"page.status.draft": "Utkast",
"page.status.draft.description":
"Sidan är ett utkast och endast synlig för inloggade redaktörer",
"page.status.draft.description": "Sidan är ett utkast och endast synlig för inloggade redaktörer eller via en hemlig länk",
"page.status.listed": "Publik",
"page.status.listed.description": "Sidan är publik för vem som helst",
"page.status.unlisted": "Olistad",
@@ -388,6 +331,7 @@
"replace": "Ersätt",
"retry": "F\u00f6rs\u00f6k igen",
"revert": "Återgå",
"revert.confirm": "Vill du verkligen <strong>radera alla osparade ändringar</strong>?",
"role": "Roll",
"role.admin.description": "Administratören har alla behörigheter",
@@ -451,8 +395,7 @@
"url.placeholder": "https://exempel.se",
"user": "Användare",
"user.blueprint":
"Du kan ange ytterligare sektioner och fält för denna användarroll i <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Du kan ange ytterligare sektioner och fält för denna användarroll i <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Ändra e-postadress",
"user.changeLanguage": "Ändra språk",
"user.changeName": "Byt namn på denna användare",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Välj en ny roll",
"user.create": "Lägg till en ny användare",
"user.delete": "Radera denna användare",
"user.delete.confirm":
"Vill du verkligen radera <br><strong>{email}</strong>?",
"user.delete.confirm": "Vill du verkligen radera <br><strong>{email}</strong>?",
"users": "Användare",

View File

@@ -37,15 +37,13 @@
"email.placeholder": "eposta@ornek.com",
"error.access.login": "Geçersiz giriş",
"error.access.panel": "Panele erişim izniniz yok",
"error.access.view": "Panelin bu bölümüne erişemezsiniz",
"error.access.panel": "Panel'e erişim izniniz yok",
"error.access.view": "Panel'in bu bölümüne erişim izniniz yok",
"error.avatar.create.fail": "Profil resmi yüklenemedi",
"error.avatar.delete.fail": "Profil resmi silinemedi",
"error.avatar.dimensions.invalid":
"Lütfen profil resminin genişliğini ve yüksekliğini 3000 pikselin altında tutun",
"error.avatar.mime.forbidden":
"Profil resmi JPEG veya PNG dosyaları olmalıdır",
"error.avatar.dimensions.invalid": "Lütfen profil resminin genişliğini ve yüksekliğini 3000 pikselin altında tutun",
"error.avatar.mime.forbidden": "Profil resmi JPEG veya PNG dosyaları olmalıdır",
"error.blueprint.notFound": "\"{name}\" adlı plan yüklenemedi",
@@ -54,22 +52,17 @@
"error.field.converter.invalid": "Geçersiz dönüştürücü \"{converter}\"",
"error.file.changeName.empty": "İsim boş olmamalıdır",
"error.file.changeName.permission":
"\"{filename}\" adını değiştiremezsiniz",
"error.file.changeName.permission": "\"{filename}\" adını değiştiremezsiniz",
"error.file.duplicate": "\"{filename}\" isimli bir dosya zaten var",
"error.file.extension.forbidden":
"\"{extension}\" dosya uzantısına izin verilmiyor",
"error.file.extension.missing":
"\"{filename}\" dosyasının uzantısı yok",
"error.file.extension.forbidden": "\"{extension}\" dosya uzantısına izin verilmiyor",
"error.file.extension.missing": "\"{filename}\" dosyasının uzantısı yok",
"error.file.maxheight": "Resmin yüksekliği {height} pikselden büyük olmamalıdır",
"error.file.maxsize": "Dosya çok büyük",
"error.file.maxwidth": "Resmin genişliği {width} pikselden büyük olmamalıdır",
"error.file.mime.differs":
"Yüklenen dosya aynı dosya türü \"{mime}\" olmalıdır",
"error.file.mime.differs": "Yüklenen dosya aynı dosya türü \"{mime}\" olmalıdır",
"error.file.mime.forbidden": "\"{mime}\" medya türüne izin verilmiyor",
"error.file.mime.invalid": "Geçersiz medya türü: {mime}",
"error.file.mime.missing":
"\"{filename}\" için medya türü tespit edilemiyor",
"error.file.mime.missing": "\"{filename}\" için medya türü tespit edilemiyor",
"error.file.minheight": "Resmin yüksekliği en az {height} piksel olmalıdır",
"error.file.minsize": "Dosya çok küçük",
"error.file.minwidth": "Resmin genişliği en az {width} piksel olmalıdır",
@@ -90,111 +83,77 @@
"error.license.email": "Lütfen geçerli bir e-posta adresi girin",
"error.license.verification": "Lisans doğrulanamadı",
"error.page.changeSlug.permission":
"\"{slug}\" uzantısına sahip bu sayfanın adresini değiştirilemez",
"error.page.changeStatus.incomplete":
"Sayfada hatalar var ve yayınlanamadı",
"error.page.changeStatus.permission":
"Bu sayfanın durumu değiştirilemez",
"error.page.changeStatus.toDraft.invalid":
"\"{slug}\" sayfası bir taslak haline dönüştürülemiyor",
"error.page.changeTemplate.invalid":
"\"{slug}\" sayfası için şablon değiştirilemiyor",
"error.page.changeTemplate.permission":
"\"{slug}\" için şablonu değiştiremezsiniz",
"error.page.changeSlug.permission": "\"{slug}\" uzantısına sahip bu sayfanın adresini değiştirilemez",
"error.page.changeStatus.incomplete": "Sayfada hatalar var ve yayınlanamadı",
"error.page.changeStatus.permission": "Bu sayfanın durumu değiştirilemez",
"error.page.changeStatus.toDraft.invalid": "\"{slug}\" sayfası bir taslak haline dönüştürülemiyor",
"error.page.changeTemplate.invalid": "\"{slug}\" sayfası için şablon değiştirilemiyor",
"error.page.changeTemplate.permission": "\"{slug}\" için şablonu değiştiremezsiniz",
"error.page.changeTitle.empty": "Başlık boş bırakılamaz",
"error.page.changeTitle.permission":
"\"{slug}\" için başlığı değiştiremezsiniz",
"error.page.changeTitle.permission": "\"{slug}\" için başlığı değiştiremezsiniz",
"error.page.create.permission": "\"{slug}\" oluşturmanıza izin verilmiyor",
"error.page.delete": "\"{slug}\" sayfası silinemedi",
"error.page.delete.confirm": "Onaylamak için sayfa başlığını girin",
"error.page.delete.hasChildren":
"Sayfada alt sayfalar var ve silinemiyor",
"error.page.delete.hasChildren": "Sayfada alt sayfalar var ve silinemiyor",
"error.page.delete.permission": "\"{slug}\" öğesini silmenize izin verilmiyor",
"error.page.draft.duplicate":
"\"{slug}\" adres eki olan bir sayfa taslağı zaten mevcut",
"error.page.duplicate":
"\"{slug}\" adres eki içeren bir sayfa zaten mevcut",
"error.page.draft.duplicate": "\"{slug}\" adres eki olan bir sayfa taslağı zaten mevcut",
"error.page.duplicate": "\"{slug}\" adres eki içeren bir sayfa zaten mevcut",
"error.page.duplicate.permission": "\"{slug}\" öğesini çoğaltmanıza izin verilmiyor",
"error.page.notFound": "\"{slug}\" uzantısındaki sayfa bulunamadı",
"error.page.num.invalid":
"Lütfen geçerli bir sıralama numarası girin. Sayılar negatif olmamalıdır.",
"error.page.num.invalid": "Lütfen geçerli bir sıralama numarası girin. Sayılar negatif olmamalıdır.",
"error.page.slug.invalid": "Lütfen geçerli bir adres öneki girin",
"error.page.sort.permission": "\"{slug}\" sayfası sıralanamıyor",
"error.page.status.invalid": "Lütfen geçerli bir sayfa durumu ayarlayın",
"error.page.undefined": "Sayfa bulunamad\u0131",
"error.page.update.permission": "\"{slug}\" güncellemesine izin verilmiyor",
"error.section.files.max.plural":
"\"{section}\" bölümüne {max} dosyadan daha fazlasını eklememelisiniz",
"error.section.files.max.singular":
"\"{section}\" bölümüne birden fazla dosya eklememelisiniz",
"error.section.files.min.plural":
"\"{section}\" bölümü en az {min} dosya gerektiriyor",
"error.section.files.min.singular":
"\"{section}\" bölümü en az bir dosya gerektiriyor",
"error.section.files.max.plural": "\"{section}\" bölümüne {max} dosyadan daha fazlasını eklememelisiniz",
"error.section.files.max.singular": "\"{section}\" bölümüne birden fazla dosya eklememelisiniz",
"error.section.files.min.plural": "\"{section}\" bölümü en az {min} dosya gerektiriyor",
"error.section.files.min.singular": "\"{section}\" bölümü en az bir dosya gerektiriyor",
"error.section.pages.max.plural":
"\"{section}\" bölümüne maksimum {max} sayfadan fazla ekleyemezsiniz",
"error.section.pages.max.singular":
"\"{section}\" bölümüne birden fazla sayfa ekleyemezsiniz",
"error.section.pages.min.plural":
"\"{section}\" bölümü en az {min} sayfa gerektiriyor",
"error.section.pages.min.singular":
"\"{section}\" bölümü en az bir sayfa gerektiriyor",
"error.section.pages.max.plural": "\"{section}\" bölümüne maksimum {max} sayfadan fazla ekleyemezsiniz",
"error.section.pages.max.singular": "\"{section}\" bölümüne birden fazla sayfa ekleyemezsiniz",
"error.section.pages.min.plural": "\"{section}\" bölümü en az {min} sayfa gerektiriyor",
"error.section.pages.min.singular": "\"{section}\" bölümü en az bir sayfa gerektiriyor",
"error.section.notLoaded": "\"{name}\" bölümü yüklenemedi",
"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":
"Sitenin başlığını değiştiremezsin",
"error.site.changeTitle.permission": "Sitenin başlığını değiştiremezsin",
"error.site.update.permission": "Siteyi güncellemenize izin verilmiyor",
"error.template.default.notFound": "Varsayılan şablon yok",
"error.user.changeEmail.permission":
"\"{name}\" kullanıcısı için e-postayı değiştiremezsiniz",
"error.user.changeLanguage.permission":
"\"{name}\" kullanıcısının dilini değiştiremezsin",
"error.user.changeName.permission":
"\"{name}\" kullanıcısının adını değiştiremezsiniz",
"error.user.changePassword.permission":
"\"{name}\" kullanıcısının şifresini değiştiremezsiniz",
"error.user.changeRole.lastAdmin":
"Son yöneticinin rolü değiştirilemez",
"error.user.changeRole.permission":
"\"{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.changeEmail.permission": "\"{name}\" kullanıcısı için e-postayı değiştiremezsiniz",
"error.user.changeLanguage.permission": "\"{name}\" kullanıcısının dilini değiştiremezsin",
"error.user.changeName.permission": "\"{name}\" kullanıcısının adını değiştiremezsiniz",
"error.user.changePassword.permission": "\"{name}\" kullanıcısının şifresini değiştiremezsiniz",
"error.user.changeRole.lastAdmin": "Son yöneticinin rolü değiştirilemez",
"error.user.changeRole.permission": "\"{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.delete": "\"{name}\" kullanıcısı silinemedi",
"error.user.delete.lastAdmin": "Son y\u00f6netici kullan\u0131c\u0131y\u0131 silemezsiniz",
"error.user.delete.lastUser": "Son kullanıcı silinemez",
"error.user.delete.permission":
"\"{name}\" kullanıcısını silme yetkiniz yok",
"error.user.duplicate":
"\"{email}\" e-posta adresine sahip bir kullanıcı zaten var",
"error.user.delete.permission": "\"{name}\" kullanıcısını silme yetkiniz yok",
"error.user.duplicate": "\"{email}\" e-posta adresine sahip bir kullanıcı zaten var",
"error.user.email.invalid": "Lütfen geçerli bir e-posta adresi girin",
"error.user.language.invalid": "Lütfen geçerli bir dil girin",
"error.user.notFound": "\"{name}\" kullanıcısı bulunamadı",
"error.user.password.invalid":
"Lütfen geçerli bir şifre giriniz. Şifreler en az 8 karakter uzunluğunda olmalıdır.",
"error.user.password.invalid": "Lütfen geçerli bir şifre giriniz. Şifreler en az 8 karakter uzunluğunda olmalıdır.",
"error.user.password.notSame": "L\u00fctfen \u015fifreyi do\u011frulay\u0131n",
"error.user.password.undefined": "Bu kullanıcının şifresi yok",
"error.user.role.invalid": "Lütfen geçerli bir rol girin",
"error.user.update.permission":
"\"{name}\" kullanıcısını güncellemenize izin verilmiyor",
"error.user.update.permission": "\"{name}\" kullanıcısını güncellemenize izin verilmiyor",
"error.validation.accepted": "Lütfen onaylayın",
"error.validation.alpha": "Lütfen sadece a-z arasındaki karakterleri girin",
"error.validation.alphanum":
"Lütfen sadece a-z veya 0-9 arasındaki rakamları girin",
"error.validation.between":
"Lütfen \"{min}\" ile \"{max}\" arasında bir değer girin",
"error.validation.alphanum": "Lütfen sadece a-z veya 0-9 arasındaki rakamları girin",
"error.validation.between": "Lütfen \"{min}\" ile \"{max}\" arasında bir değer girin",
"error.validation.boolean": "Lütfen onaylayın veya reddedin",
"error.validation.contains":
"Lütfen \"{needle}\" içeren bir değer girin",
"error.validation.contains": "Lütfen \"{needle}\" içeren bir değer girin",
"error.validation.date": "Lütfen geçerli bir tarih girin",
"error.validation.date.after": "Lütfen {date} tarihinden sonra bir tarih girin",
"error.validation.date.before": "Lütfen {date} tarihinden önce bir tarih girin",
@@ -210,18 +169,14 @@
"error.validation.less": "Lütfen {max} 'dan daha düşük bir değer girin",
"error.validation.match": "Değer beklenen modelle eşleşmiyor",
"error.validation.max": "Lütfen {max} 'a eşit veya daha küçük bir değer girin",
"error.validation.maxlength":
"Lütfen daha kısa bir değer girin. (maks. {max} karakter)",
"error.validation.maxlength": "Lütfen daha kısa bir değer girin. (maks. {max} karakter)",
"error.validation.maxwords": "Lütfen en fazla {max} kelime(ler) girin",
"error.validation.min": "Lütfen {min} ile eşit veya daha büyük bir değer girin",
"error.validation.minlength":
"Lütfen daha uzun bir değer girin. (min. {min} karakter)",
"error.validation.minlength": "Lütfen daha uzun bir değer girin. (min. {min} karakter)",
"error.validation.minwords": "Lütfen en az {min} kelime(ler) girin",
"error.validation.more": "Lütfen {min} değerinden daha büyük bir değer girin",
"error.validation.notcontains":
"Lütfen \"{needle}\" içermeyen bir değer girin",
"error.validation.notin":
"Lütfen bunlardan herhangi birini girmeyin: ({notIn})",
"error.validation.notcontains": "Lütfen \"{needle}\" içermeyen bir değer girin",
"error.validation.notin": "Lütfen bunlardan herhangi birini girmeyin: ({notIn})",
"error.validation.option": "Lütfen geçerli bir seçenek girin",
"error.validation.num": "Lütfen geçerli bir sayı girin",
"error.validation.required": "Lütfen birşeyler girin",
@@ -238,8 +193,7 @@
"field.structure.empty": "Hen\u00fcz bir girdi yok",
"field.users.empty": "Henüz kullanıcı seçilmedi",
"file.delete.confirm":
"<strong>{filename}</strong> dosyasını silmek istediğinizden emin misiniz?",
"file.delete.confirm": "<strong>{filename}</strong> dosyasını silmek istediğinizden emin misiniz?",
"files": "Dosyalar",
"files.empty": "Henüz dosya yok",
@@ -251,29 +205,22 @@
"installation": "Kurulum",
"installation.completed": "Panel kuruldu",
"installation.disabled": "Panel yükleyici, herkese açık sunucularda varsayılan olarak devre dışıdır. Lütfen yükleyiciyi yerel bir makinede çalıştırın veya <code>panel.install</code> seçeneğiyle etkinleştirin.",
"installation.issues.accounts":
"<code>/site/accounts</code> klasörü yok yada yazılabilir değil",
"installation.issues.content":
"<code>/content</code> klasörü yok yada yazılabilir değil",
"installation.issues.accounts": "<code>/site/accounts</code> klasörü yok yada yazılabilir değil",
"installation.issues.content": "<code>/content</code> klasörü yok yada yazılabilir değil",
"installation.issues.curl": "<code>CURL</code> eklentisi gerekli",
"installation.issues.headline": "Panel kurulamadı",
"installation.issues.mbstring":
"<code>MB String</code> eklentisi gerekli",
"installation.issues.media":
"<code>/media</code> klasörü yok yada yazılamaz",
"installation.issues.mbstring": "<code>MB String</code> eklentisi gerekli",
"installation.issues.media": "<code>/media</code> klasörü yok yada yazılamaz",
"installation.issues.php": "<code>PHP 7+</code> kullandığınızdan emin olun. ",
"installation.issues.server":
"Kirby <code>Apache</code>, <code>Nginx</code> or <code>Caddy</code> gerektirir",
"installation.issues.server": "Kirby <code>Apache</code>, <code>Nginx</code> or <code>Caddy</code> gerektirir",
"installation.issues.sessions": "<code>/site/sessions</code> klasörü mevcut değil veya yazılabilir değil",
"language": "Dil",
"language.code": "Kod",
"language.convert": "Varsayılan yap",
"language.convert.confirm":
"<p><strong>{name}</strong>'i varsayılan dile dönüştürmek istiyor musunuz? Bu geri alınamaz.</p> <p><strong>{name}</strong> çevrilmemiş içeriğe sahipse, artık geçerli bir geri dönüş olmaz ve sitenizin bazı bölümleri boş olabilir.</p>",
"language.convert.confirm": "<p><strong>{name}</strong>'i varsayılan dile dönüştürmek istiyor musunuz? Bu geri alınamaz.</p> <p><strong>{name}</strong> çevrilmemiş içeriğe sahipse, artık geçerli bir geri dönüş olmaz ve sitenizin bazı bölümleri boş olabilir.</p>",
"language.create": "Yeni bir dil ekle",
"language.delete.confirm":
"Tüm çevirileri içeren <strong>{name}</strong> dilini gerçekten silmek istiyor musunuz? Bu geri alınamaz!",
"language.delete.confirm": "Tüm çevirileri içeren <strong>{name}</strong> dilini gerçekten silmek istiyor musunuz? Bu geri alınamaz!",
"language.deleted": "Dil silindi",
"language.direction": "Okuma yönü",
"language.direction.ltr": "Soldan sağa",
@@ -292,8 +239,7 @@
"license": "Lisans",
"license.buy": "Bir lisans satın al",
"license.register": "Kayıt Ol",
"license.register.help":
"Satın alma işleminden sonra e-posta yoluyla lisans kodunuzu aldınız. Lütfen kayıt olmak için kodu kopyalayıp yapıştırın.",
"license.register.help": "Satın alma işleminden sonra e-posta yoluyla lisans kodunuzu aldınız. Lütfen kayıt olmak için kodu kopyalayıp yapıştırın.",
"license.register.label": "Lütfen lisans kodunu giriniz",
"license.register.success": "Kirby'yi desteklediğiniz için teşekkürler",
"license.unregistered": "Bu Kirby'nin kayıtsız bir demosu",
@@ -325,7 +271,7 @@
"months.april": "Nisan",
"months.august": "A\u011fustos",
"months.december": "Aral\u0131k",
"months.february": "\u015eubat",
"months.february": "Şubat",
"months.january": "Ocak",
"months.july": "Temmuz",
"months.june": "Haziran",
@@ -354,10 +300,8 @@
"page.changeStatus.position": "Lütfen bir pozisyon seçin",
"page.changeStatus.select": "Yeni bir durum seçin",
"page.changeTemplate": "Şablonu değiştir",
"page.delete.confirm":
"<strong>{title}</strong> sayfasını silmek istediğinizden emin misiniz?",
"page.delete.confirm.subpages":
"<strong>Bu sayfada alt sayfalar var</strong>. <br>Tüm alt sayfalar da silinecek.",
"page.delete.confirm": "<strong>{title}</strong> sayfasını silmek istediğinizden emin misiniz?",
"page.delete.confirm.subpages": "<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.draft.create": "Taslak oluştur",
"page.duplicate.appendix": "Kopya",
@@ -365,8 +309,7 @@
"page.duplicate.pages": "Sayfaları kopyala",
"page.status": "Durum",
"page.status.draft": "Taslak",
"page.status.draft.description":
"Sayfa taslak modunda ve sadece giriş yapılan düzenleyiciler için görünür durumda",
"page.status.draft.description": "Sayfa taslak halinde ve yalnızca oturum açmış editörler için veya gizli bağlantı üzerinden görülebilir",
"page.status.listed": "Herkese Açık",
"page.status.listed.description": "Bu sayfa herkese açık",
"page.status.unlisted": "Liste Dışı",
@@ -388,6 +331,7 @@
"replace": "De\u011fi\u015ftir",
"retry": "Tekrar Dene",
"revert": "Vazge\u00e7",
"revert.confirm": "Gerçekten <strong>kaydedilmemiş tüm değişiklikleri silmek</strong> istiyor musunuz?",
"role": "Rol",
"role.admin.description": "Yönetici tüm haklara sahiptir",
@@ -451,8 +395,7 @@
"url.placeholder": "https://ornek.com",
"user": "Kullanıcı",
"user.blueprint":
"Bu kullanıcı rolü için <strong>/site/blueprints/users/{role}.yml</strong> içinde ek bölümler ve form alanları tanımlayabilirsiniz",
"user.blueprint": "Bu kullanıcı rolü için <strong>/site/blueprints/users/{role}.yml</strong> içinde ek bölümler ve form alanları tanımlayabilirsiniz",
"user.changeEmail": "E-postayı değiştir",
"user.changeLanguage": "Dili değiştir",
"user.changeName": "Kullanıcıyı yeniden adlandır",
@@ -463,8 +406,7 @@
"user.changeRole.select": "Yeni bir rol seçin",
"user.create": "Yeni bir kullanıcı ekle",
"user.delete": "Bu kullanıcıyı sil",
"user.delete.confirm":
"<strong>{email}</strong> kullanıcısını silmek istediğinizden emin misiniz?",
"user.delete.confirm": "<strong>{email}</strong> kullanıcısını silmek istediğinizden emin misiniz?",
"users": "Kullanıcılar",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -9,6 +9,7 @@ window.panel.plugins = {
routes: [],
use: [],
views: {},
thirdParty: {}
};
window.panel.plugin = function (plugin, parts) {
@@ -52,6 +53,11 @@ window.panel.plugin = function (plugin, parts) {
window.panel.plugins.login = parts.login;
}
// Third-party plugins
resolve(parts, "thirdParty", function(name, options) {
window.panel.plugins["thirdParty"][name] = options;
});
};
function resolve(object, type, callback) {

File diff suppressed because one or more lines are too long

View File

@@ -293,6 +293,24 @@ class Api
return isset($this->data[$key]) === true;
}
/**
* Matches an object with an array item
* based on the `type` field
*
* @param array models or collections
* @param mixed $object
*
* @return string key of match
*/
protected function match(array $array, $object = null)
{
foreach ($array as $definition => $model) {
if (is_a($object, $model['type']) === true) {
return $definition;
}
}
}
/**
* Returns an API model instance by name
*
@@ -302,8 +320,15 @@ class Api
*
* @throws \Kirby\Exception\NotFoundException If no model for `$name` exists
*/
public function model(string $name, $object = null)
public function model(string $name = null, $object = null)
{
// Try to auto-match object with API models
if ($name === null) {
if ($model = $this->match($this->models, $object)) {
$name = $model;
}
}
if (isset($this->models[$name]) === false) {
throw new NotFoundException(sprintf('The model "%s" does not exist', $name));
}
@@ -420,29 +445,15 @@ class Api
return $object;
}
$className = strtolower(get_class($object));
$lastDash = strrpos($className, '\\');
if ($lastDash !== false) {
$className = substr($className, $lastDash + 1);
if ($model = $this->match($this->models, $object)) {
return $this->model($model, $object);
}
if (isset($this->models[$className]) === true) {
return $this->model($className, $object);
if ($collection = $this->match($this->collections, $object)) {
return $this->collection($collection, $object);
}
if (isset($this->collections[$className]) === true) {
return $this->collection($className, $object);
}
// now models deeply by checking for the actual type
foreach ($this->models as $modelClass => $model) {
if (is_a($object, $model['type']) === true) {
return $this->model($modelClass, $object);
}
}
throw new NotFoundException(sprintf('The object "%s" cannot be resolved', $className));
throw new NotFoundException(sprintf('The object "%s" cannot be resolved', get_class($object)));
}
/**

View File

@@ -29,7 +29,7 @@ class Collection
{
$this->api = $api;
$this->data = $data;
$this->model = $schema['model'];
$this->model = $schema['model'] ?? null;
$this->view = $schema['view'] ?? null;
if ($data === null) {
@@ -40,7 +40,10 @@ class Collection
$this->data = $schema['default']->call($this->api);
}
if (isset($schema['type']) === true && is_a($this->data, $schema['type']) === false) {
if (
isset($schema['type']) === true &&
is_a($this->data, $schema['type']) === false
) {
throw new Exception('Invalid collection type');
}
}

View File

@@ -48,7 +48,10 @@ class Model
$this->data = $schema['default']->call($this->api);
}
if (isset($schema['type']) === true && is_a($this->data, $schema['type']) === false) {
if (
isset($schema['type']) === true &&
is_a($this->data, $schema['type']) === false
) {
throw new Exception(sprintf('Invalid model type "%s" expected: "%s"', get_class($this->data), $schema['type']));
}
}
@@ -130,7 +133,10 @@ class Model
$value = $this->api->resolve($value);
}
if (is_a($value, 'Kirby\Api\Collection') === true || is_a($value, 'Kirby\Api\Model') === true) {
if (
is_a($value, 'Kirby\Api\Collection') === true ||
is_a($value, 'Kirby\Api\Model') === true
) {
$selection = $select[$key];
if ($subview = $selection['view']) {

View File

@@ -39,7 +39,8 @@ class Api extends BaseApi
$this->kirby->setCurrentLanguage($this->language());
if ($user = $this->kirby->user()) {
$allowImpersonation = $this->kirby()->option('api.allowImpersonation', false);
if ($user = $this->kirby->user(null, $allowImpersonation)) {
$this->kirby->setCurrentTranslation($user->language());
}
@@ -95,8 +96,9 @@ class Api extends BaseApi
public function file(string $path = null, string $filename)
{
$filename = urldecode($filename);
$file = $this->parent($path)->file($filename);
if ($file = $this->parent($path)->file($filename)) {
if ($file && $file->isReadable() === true) {
return $file;
}
@@ -136,7 +138,7 @@ class Api extends BaseApi
$model = $kirby->site();
break;
case 'account':
$model = $kirby->user();
$model = $kirby->user(null, $kirby->option('api.allowImpersonation', false));
break;
case 'page':
$id = str_replace(['+', ' '], '/', basename($path));
@@ -192,7 +194,7 @@ class Api extends BaseApi
$id = str_replace('+', '/', $id);
$page = $this->kirby->page($id);
if ($page && $page->isReadable()) {
if ($page && $page->isReadable() === true) {
return $page;
}
@@ -242,7 +244,7 @@ class Api extends BaseApi
{
// get the authenticated user
if ($id === null) {
return $this->kirby->auth()->user();
return $this->kirby->auth()->user(null, $this->kirby()->option('api.allowImpersonation', false));
}
// get a specific user by id

View File

@@ -6,6 +6,7 @@ use Kirby\Data\Data;
use Kirby\Email\PHPMailer as Emailer;
use Kirby\Exception\ErrorPageException;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Exception\LogicException;
use Kirby\Exception\NotFoundException;
use Kirby\Http\Request;
use Kirby\Http\Router;
@@ -18,6 +19,7 @@ use Kirby\Toolkit\Controller;
use Kirby\Toolkit\Dir;
use Kirby\Toolkit\F;
use Kirby\Toolkit\Properties;
use Throwable;
/**
* The `$kirby` object is the app instance of
@@ -44,7 +46,6 @@ class App
use Properties;
protected static $instance;
protected static $root;
protected static $version;
public $data = [];
@@ -74,6 +75,14 @@ class App
protected $users;
protected $visitor;
/**
* List of options that shouldn't be converted
* to a tree structure by dot syntax
*
* @var array
*/
public static $nestIgnoreOptions = ['hooks'];
/**
* Creates a new App instance
*
@@ -81,9 +90,6 @@ class App
*/
public function __construct(array $props = [])
{
// the kirby folder directory
static::$root = dirname(__DIR__, 2);
// register all roots to be able to load stuff afterwards
$this->bakeRoots($props['roots'] ?? []);
@@ -91,6 +97,9 @@ class App
$this->optionsFromConfig();
$this->optionsFromProps($props['options'] ?? []);
// register the Whoops error handler
$this->handleErrors();
// set the path to make it available for the url bakery
$this->setPath($props['path'] ?? null);
@@ -118,20 +127,22 @@ class App
$this->extensionsFromSystem();
$this->extensionsFromProps($props);
$this->extensionsFromPlugins();
$this->extensionsFromOptions();
$this->extensionsFromFolders();
// bake the options for the first time
$this->bakeOptions();
// register the extensions from the normalized options
$this->extensionsFromOptions();
// trigger hook for use in plugins
$this->trigger('system.loadPlugins:after');
// handle those damn errors
$this->handleErrors();
// execute a ready callback from the config
$this->optionsFromReadyCallback();
// bake config
Config::$data = $this->options;
// bake the options again with those from the ready callback
$this->bakeOptions();
}
/**
@@ -164,7 +175,7 @@ class App
return $this->api;
}
$root = static::$root . '/config/api';
$root = $this->root('kirby') . '/config/api';
$extensions = $this->extensions['api'] ?? [];
$routes = (include $root . '/routes.php')($this);
@@ -182,37 +193,54 @@ class App
}
/**
* Applies a hook to the given value;
* the value that gets modified by the hooks
* is always the last argument
* Applies a hook to the given value
*
* @internal
* @param string $name Hook name
* @param mixed ...$args Arguments to pass to the hooks
* @param string $name Full event name
* @param array $args Associative array of named event arguments
* @param string $modify Key in $args that is modified by the hooks
* @param \Kirby\Cms\Event|null $originalEvent Event object (internal use)
* @return mixed Resulting value as modified by the hooks
*/
public function apply(string $name, ...$args)
public function apply(string $name, array $args, string $modify, ?Event $originalEvent = null)
{
// split up args into "passive" args and the value
$value = array_pop($args);
$event = $originalEvent ?? new Event($name, $args);
if ($functions = $this->extension('hooks', $name)) {
foreach ($functions as $function) {
// re-assemble args
$hookArgs = $args;
$hookArgs[] = $value;
// bind the App object to the hook
$newValue = $function->call($this, ...$hookArgs);
$newValue = $event->call($this, $function);
// update value if one was returned
if ($newValue !== null) {
$value = $newValue;
$event->updateArgument($modify, $newValue);
}
}
}
return $value;
// apply wildcard hooks if available
$nameWildcards = $event->nameWildcards();
if ($originalEvent === null && count($nameWildcards) > 0) {
foreach ($nameWildcards as $nameWildcard) {
// the $event object is passed by reference
// and will be modified down the chain
$this->apply($nameWildcard, $event->arguments(), $modify, $event);
}
}
return $event->argument($modify);
}
/**
* Normalizes and globally sets the configured options
*
* @return self
*/
protected function bakeOptions()
{
$this->options = A::nest($this->options, static::$nestIgnoreOptions);
Config::$data = $this->options;
return $this;
}
/**
@@ -223,7 +251,7 @@ class App
*/
protected function bakeRoots(array $roots = null)
{
$roots = array_merge(require static::$root . '/config/roots.php', (array)$roots);
$roots = array_merge(require dirname(__DIR__, 2) . '/config/roots.php', (array)$roots);
$this->roots = Ingredients::bake($roots);
return $this;
}
@@ -241,7 +269,7 @@ class App
$urls['index'] = $this->options['url'];
}
$urls = array_merge(require static::$root . '/config/urls.php', (array)$urls);
$urls = array_merge(require $this->root('kirby') . '/config/urls.php', (array)$urls);
$this->urls = Ingredients::bake($urls);
return $this;
}
@@ -285,11 +313,11 @@ class App
$router = $this->router();
$router::$beforeEach = function ($route, $path, $method) {
$this->trigger('route:before', $route, $path, $method);
$this->trigger('route:before', compact('route', 'path', 'method'));
};
$router::$afterEach = function ($route, $path, $method, $result) {
return $this->apply('route:after', $route, $path, $method, $result);
$router::$afterEach = function ($route, $path, $method, $result, $final) {
return $this->apply('route:after', compact('route', 'path', 'method', 'result', 'final'), 'result');
};
return $router->call($path ?? $this->path(), $method ?? $this->request()->method());
@@ -357,6 +385,31 @@ class App
return $this->options['content']['ignore'] ?? Dir::$ignore;
}
/**
* Generates a non-guessable token based on model
* data and a configured salt
*
* @param mixed $model Object to pass to the salt callback if configured
* @param string $value Model data to include in the generated token
* @return string
*/
public function contentToken($model, string $value): string
{
if (method_exists($model, 'root') === true) {
$default = $model->root();
} else {
$default = $this->root('content');
}
$salt = $this->option('content.salt', $default);
if (is_a($salt, 'Closure') === true) {
$salt = $salt($model);
}
return hash_hmac('sha1', $value, $salt);
}
/**
* Calls a page controller by name
* and with the given arguments
@@ -524,13 +577,18 @@ class App
* Returns the current App instance
*
* @param \Kirby\Cms\App $instance
* @return self
* @param bool $lazy If `true`, the instance is only returned if already existing
* @return self|null
*/
public static function instance(self $instance = null)
public static function instance(self $instance = null, bool $lazy = false)
{
if ($instance === null) {
if ($lazy === true) {
return static::$instance;
} else {
return static::$instance ?? new static();
}
}
return static::$instance = $instance;
}
@@ -659,7 +717,7 @@ class App
$data['site'] = $data['site'] ?? $data['kirby']->site();
$data['parent'] = $data['parent'] ?? $data['site']->page();
return KirbyTags::parse($text, $data, $this->options, $this->extensions['hooks']);
return KirbyTags::parse($text, $data, $this->options, $this);
}
/**
@@ -673,7 +731,7 @@ class App
*/
public function kirbytext(string $text = null, array $data = [], bool $inline = false): string
{
$text = $this->apply('kirbytext:before', $text);
$text = $this->apply('kirbytext:before', compact('text'), 'text');
$text = $this->kirbytags($text, $data);
$text = $this->markdown($text, $inline);
@@ -681,7 +739,7 @@ class App
$text = $this->smartypants($text);
}
$text = $this->apply('kirbytext:after', $text);
$text = $this->apply('kirbytext:after', compact('text'), 'text');
return $text;
}
@@ -859,6 +917,27 @@ class App
// inject all last-minute options recursively
$this->options = array_replace_recursive($this->options, $options);
// update the system with changed options
if (
isset($options['debug']) === true ||
isset($options['whoops']) === true ||
isset($options['editor']) === true
) {
$this->handleErrors();
}
if (isset($options['debug']) === true) {
$this->api = null;
}
if (isset($options['home']) === true || isset($options['error']) === true) {
$this->site = null;
}
if (isset($options['slugs']) === true) {
$this->i18n();
}
}
return $this->options;
@@ -1091,7 +1170,7 @@ class App
}
$registry = $this->extensions('routes');
$system = (include static::$root . '/config/routes.php')($this);
$system = (include $this->root('kirby') . '/config/routes.php')($this);
$routes = array_merge($system['before'], $registry, $system['after']);
return $this->routes = $routes;
@@ -1312,12 +1391,15 @@ class App
* Trigger a hook by name
*
* @internal
* @param string $name
* @param mixed ...$arguments
* @param string $name Full event name
* @param array $args Associative array of named event arguments
* @param \Kirby\Cms\Event|null $originalEvent Event object (internal use)
* @return void
*/
public function trigger(string $name, ...$arguments)
public function trigger(string $name, array $args = [], ?Event $originalEvent = null)
{
$event = $originalEvent ?? new Event($name, $args);
if ($functions = $this->extension('hooks', $name)) {
static $level = 0;
static $triggered = [];
@@ -1332,7 +1414,7 @@ class App
$triggered[$name][] = $function;
// bind the App object to the hook
$function->call($this, ...$arguments);
$event->call($this, $function);
}
$level--;
@@ -1341,6 +1423,14 @@ class App
$triggered = [];
}
}
// trigger wildcard hooks if available
$nameWildcards = $event->nameWildcards();
if ($originalEvent === null && count($nameWildcards) > 0) {
foreach ($nameWildcards as $nameWildcard) {
$this->trigger($nameWildcard, $args, $event);
}
}
}
/**
@@ -1372,7 +1462,11 @@ class App
*/
public static function version(): ?string
{
return static::$version = static::$version ?? Data::read(static::$root . '/composer.json')['version'] ?? null;
try {
return static::$version = static::$version ?? Data::read(dirname(__DIR__, 2) . '/composer.json')['version'] ?? null;
} catch (Throwable $e) {
throw new LogicException('The Kirby version cannot be detected. The composer.json is probably missing or not readable.');
}
}
/**

View File

@@ -10,7 +10,7 @@ use Whoops\Handler\PrettyPageHandler;
use Whoops\Run as Whoops;
/**
* AppErrors
* PHP error handling using the Whoops library
*
* @package Kirby Cms
* @author Bastian Allgeier <bastian@getkirby.com>
@@ -20,14 +20,30 @@ use Whoops\Run as Whoops;
*/
trait AppErrors
{
/**
* Whoops instance cache
*
* @var \Whoops\Run
*/
protected $whoops;
/**
* Registers the PHP error handler for CLI usage
*
* @return void
*/
protected function handleCliErrors(): void
{
$whoops = new Whoops();
$whoops->pushHandler(new PlainTextHandler());
$whoops->register();
$this->setWhoopsHandler(new PlainTextHandler());
}
protected function handleErrors()
/**
* Registers the PHP error handler
* based on the environment
*
* @return void
*/
protected function handleErrors(): void
{
if ($this->request()->cli() === true) {
$this->handleCliErrors();
@@ -42,21 +58,25 @@ trait AppErrors
$this->handleHtmlErrors();
}
protected function handleHtmlErrors()
/**
* Registers the PHP error handler for HTML output
*
* @return void
*/
protected function handleHtmlErrors(): void
{
$whoops = new Whoops();
$handler = null;
if ($this->option('debug') === true) {
if ($this->option('whoops', true) === true) {
$handler = new PrettyPageHandler();
$handler->setPageTitle('Kirby CMS Debugger');
$handler->setResourcesPath(dirname(__DIR__, 2) . '/assets');
$handler->addCustomCss('whoops.css');
if ($editor = $this->option('editor')) {
$handler->setEditor($editor);
}
$whoops->pushHandler($handler);
$whoops->register();
}
} else {
$handler = new CallbackHandler(function ($exception, $inspector, $run) {
@@ -65,20 +85,27 @@ trait AppErrors
if (is_a($fatal, 'Closure') === true) {
echo $fatal($this);
} else {
include static::$root . '/views/fatal.php';
include $this->root('kirby') . '/views/fatal.php';
}
return Handler::QUIT;
});
}
$whoops->pushHandler($handler);
$whoops->register();
if ($handler !== null) {
$this->setWhoopsHandler($handler);
} else {
$this->unsetWhoopsHandler();
}
}
protected function handleJsonErrors()
/**
* Registers the PHP error handler for JSON output
*
* @return void
*/
protected function handleJsonErrors(): void
{
$whoops = new Whoops();
$handler = new CallbackHandler(function ($exception, $inspector, $run) {
if (is_a($exception, 'Kirby\Exception\Exception') === true) {
$httpCode = $exception->getHttpCode();
@@ -112,7 +139,46 @@ trait AppErrors
return Handler::QUIT;
});
$this->setWhoopsHandler($handler);
}
/**
* Enables Whoops with the specified handler
*
* @param Callable|\Whoops\Handler\HandlerInterface $handler
* @return void
*/
protected function setWhoopsHandler($handler): void
{
$whoops = $this->whoops();
$whoops->clearHandlers();
$whoops->pushHandler($handler);
$whoops->register();
$whoops->register(); // will only do something if not already registered
}
/**
* Clears the Whoops handlers and disables Whoops
*
* @return void
*/
protected function unsetWhoopsHandler(): void
{
$whoops = $this->whoops();
$whoops->clearHandlers();
$whoops->unregister(); // will only do something if currently registered
}
/**
* Returns the Whoops error handler instance
*
* @return \Whoops\Run
*/
protected function whoops()
{
if ($this->whoops !== null) {
return $this->whoops;
}
return $this->whoops = new Whoops();
}
}

View File

@@ -7,7 +7,7 @@ use Kirby\Exception\DuplicateException;
use Kirby\Form\Field as FormField;
use Kirby\Text\KirbyTag;
use Kirby\Toolkit\A;
use Kirby\Toolkit\Collection;
use Kirby\Toolkit\Collection as ToolkitCollection;
use Kirby\Toolkit\Dir;
use Kirby\Toolkit\F;
use Kirby\Toolkit\V;
@@ -30,6 +30,13 @@ trait AppPlugins
*/
protected static $plugins = [];
/**
* Cache for system extensions
*
* @var array
*/
protected static $systemExtensions = null;
/**
* The extension registry
*
@@ -47,6 +54,7 @@ trait AppPlugins
'components' => [],
'controllers' => [],
'collectionFilters' => [],
'collectionMethods' => [],
'fieldMethods' => [],
'fileMethods' => [],
'filesMethods' => [],
@@ -56,12 +64,14 @@ trait AppPlugins
'pageMethods' => [],
'pagesMethods' => [],
'pageModels' => [],
'permissions' => [],
'routes' => [],
'sections' => [],
'siteMethods' => [],
'snippets' => [],
'tags' => [],
'templates' => [],
'thirdParty' => [],
'translations' => [],
'userMethods' => [],
'userModels' => [],
@@ -69,13 +79,6 @@ trait AppPlugins
'validators' => []
];
/**
* Cache for system extensions
*
* @var array
*/
protected static $systemExtensions = null;
/**
* Flag when plugins have been loaded
* to not load them again
@@ -152,7 +155,18 @@ trait AppPlugins
*/
protected function extendCollectionFilters(array $filters): array
{
return $this->extensions['collectionFilters'] = Collection::$filters = array_merge(Collection::$filters, $filters);
return $this->extensions['collectionFilters'] = ToolkitCollection::$filters = array_merge(ToolkitCollection::$filters, $filters);
}
/**
* Registers additional collection methods
*
* @param array $methods
* @return array
*/
protected function extendCollectionMethods(array $methods): array
{
return $this->extensions['collectionMethods'] = Collection::$methods = array_merge(Collection::$methods, $methods);
}
/**
@@ -287,6 +301,10 @@ trait AppPlugins
$options = $prefixed;
}
// register each option in the nesting blacklist;
// this prevents Kirby from nesting the array keys inside each option
static::$nestIgnoreOptions = array_merge(static::$nestIgnoreOptions, array_keys($options));
return $this->extensions['options'] = $this->options = A::merge($options, $this->options, A::MERGE_REPLACE);
}
@@ -334,6 +352,22 @@ trait AppPlugins
return $this->extensions['pages'] = array_merge($this->extensions['pages'], $pages);
}
/**
* Registers additional permissions
*
* @param array $permissions
* @param \Kirby\Cms\Plugin|null $plugin
* @return array
*/
protected function extendPermissions(array $permissions, Plugin $plugin = null): array
{
if ($plugin !== null) {
$permissions = [$plugin->prefix() => $permissions];
}
return $this->extensions['permissions'] = Permissions::$extendedActions = array_merge(Permissions::$extendedActions, $permissions);
}
/**
* Registers additional routes
*
@@ -426,6 +460,20 @@ trait AppPlugins
return $this->extensions['translations'] = array_replace_recursive($this->extensions['translations'], $translations);
}
/**
* Add third party extensions to the registry
* so they can be used as plugins for plugins
* for example.
*
* @param string $type
* @param array $extensions
* @return array
*/
protected function extendThirdParty(array $extensions): array
{
return $this->extensions['thirdParty'] = array_replace_recursive($this->extensions['thirdParty'], $extensions);
}
/**
* Registers additional user methods
*
@@ -514,7 +562,7 @@ trait AppPlugins
$class = str_replace(['.', '-', '_'], '', $name) . 'Page';
// load the model class
include_once $model;
F::loadOnce($model);
if (class_exists($class) === true) {
$models[$name] = $class;
@@ -577,16 +625,18 @@ trait AppPlugins
*/
protected function extensionsFromSystem()
{
$root = $this->root('kirby');
// load static extensions only once
if (static::$systemExtensions === null) {
// Form Field Mixins
FormField::$mixins['filepicker'] = include static::$root . '/config/fields/mixins/filepicker.php';
FormField::$mixins['min'] = include static::$root . '/config/fields/mixins/min.php';
FormField::$mixins['options'] = include static::$root . '/config/fields/mixins/options.php';
FormField::$mixins['pagepicker'] = include static::$root . '/config/fields/mixins/pagepicker.php';
FormField::$mixins['picker'] = include static::$root . '/config/fields/mixins/picker.php';
FormField::$mixins['upload'] = include static::$root . '/config/fields/mixins/upload.php';
FormField::$mixins['userpicker'] = include static::$root . '/config/fields/mixins/userpicker.php';
FormField::$mixins['filepicker'] = include $root . '/config/fields/mixins/filepicker.php';
FormField::$mixins['min'] = include $root . '/config/fields/mixins/min.php';
FormField::$mixins['options'] = include $root . '/config/fields/mixins/options.php';
FormField::$mixins['pagepicker'] = include $root . '/config/fields/mixins/pagepicker.php';
FormField::$mixins['picker'] = include $root . '/config/fields/mixins/picker.php';
FormField::$mixins['upload'] = include $root . '/config/fields/mixins/upload.php';
FormField::$mixins['userpicker'] = include $root . '/config/fields/mixins/userpicker.php';
// Tag Aliases
KirbyTag::$aliases = [
@@ -612,32 +662,32 @@ trait AppPlugins
];
// blueprint presets
PageBlueprint::$presets['pages'] = include static::$root . '/config/presets/pages.php';
PageBlueprint::$presets['page'] = include static::$root . '/config/presets/page.php';
PageBlueprint::$presets['files'] = include static::$root . '/config/presets/files.php';
PageBlueprint::$presets['pages'] = include $root . '/config/presets/pages.php';
PageBlueprint::$presets['page'] = include $root . '/config/presets/page.php';
PageBlueprint::$presets['files'] = include $root . '/config/presets/files.php';
// section mixins
Section::$mixins['empty'] = include static::$root . '/config/sections/mixins/empty.php';
Section::$mixins['headline'] = include static::$root . '/config/sections/mixins/headline.php';
Section::$mixins['help'] = include static::$root . '/config/sections/mixins/help.php';
Section::$mixins['layout'] = include static::$root . '/config/sections/mixins/layout.php';
Section::$mixins['max'] = include static::$root . '/config/sections/mixins/max.php';
Section::$mixins['min'] = include static::$root . '/config/sections/mixins/min.php';
Section::$mixins['pagination'] = include static::$root . '/config/sections/mixins/pagination.php';
Section::$mixins['parent'] = include static::$root . '/config/sections/mixins/parent.php';
Section::$mixins['empty'] = include $root . '/config/sections/mixins/empty.php';
Section::$mixins['headline'] = include $root . '/config/sections/mixins/headline.php';
Section::$mixins['help'] = include $root . '/config/sections/mixins/help.php';
Section::$mixins['layout'] = include $root . '/config/sections/mixins/layout.php';
Section::$mixins['max'] = include $root . '/config/sections/mixins/max.php';
Section::$mixins['min'] = include $root . '/config/sections/mixins/min.php';
Section::$mixins['pagination'] = include $root . '/config/sections/mixins/pagination.php';
Section::$mixins['parent'] = include $root . '/config/sections/mixins/parent.php';
// section types
Section::$types['info'] = include static::$root . '/config/sections/info.php';
Section::$types['pages'] = include static::$root . '/config/sections/pages.php';
Section::$types['files'] = include static::$root . '/config/sections/files.php';
Section::$types['fields'] = include static::$root . '/config/sections/fields.php';
Section::$types['info'] = include $root . '/config/sections/info.php';
Section::$types['pages'] = include $root . '/config/sections/pages.php';
Section::$types['files'] = include $root . '/config/sections/files.php';
Section::$types['fields'] = include $root . '/config/sections/fields.php';
static::$systemExtensions = [
'components' => include static::$root . '/config/components.php',
'blueprints' => include static::$root . '/config/blueprints.php',
'fields' => include static::$root . '/config/fields.php',
'fieldMethods' => include static::$root . '/config/methods.php',
'tags' => include static::$root . '/config/tags.php'
'components' => include $root . '/config/components.php',
'blueprints' => include $root . '/config/blueprints.php',
'fields' => include $root . '/config/fields.php',
'fieldMethods' => include $root . '/config/methods.php',
'tags' => include $root . '/config/tags.php'
];
}
@@ -656,6 +706,18 @@ trait AppPlugins
$this->extendTags(static::$systemExtensions['tags']);
}
/**
* Returns the native implementation
* of a core component
*
* @param string $component
* @return \Closure | false
*/
public function nativeComponent(string $component)
{
return static::$systemExtensions['components'][$component] ?? false;
}
/**
* Kirby plugin factory and getter
*
@@ -733,7 +795,7 @@ trait AppPlugins
continue;
}
include_once $entry;
F::loadOnce($entry);
$loaded[] = $dir;
}

View File

@@ -2,6 +2,7 @@
namespace Kirby\Cms;
use Closure;
use Throwable;
/**
@@ -36,12 +37,34 @@ trait AppUsers
/**
* Become any existing user
*
* @param string|null $who
* @return \Kirby\Cms\User|null
* @param string|null $who User ID or email address
* @param Closure|null $callback Optional action function that will be run with
* the permissions of the impersonated user; the
* impersonation will be reset afterwards
* @return mixed If called without callback: User that was impersonated;
* if called with callback: Return value from the callback
*/
public function impersonate(string $who = null)
public function impersonate(?string $who = null, ?Closure $callback = null)
{
return $this->auth()->impersonate($who);
$auth = $this->auth();
$userBefore = $auth->currentUserFromImpersonation();
$userAfter = $auth->impersonate($who);
if ($callback === null) {
return $userAfter;
}
try {
// bind the App object to the callback
return $callback->call($this, $userAfter);
} catch (Throwable $e) {
throw $e;
} finally {
// ensure that the impersonation is *always* reset
// to the original value, even if an error occurred
$auth->impersonate($userBefore !== null ? $userBefore->id() : null);
}
}
/**
@@ -77,20 +100,23 @@ trait AppUsers
* Returns a specific user by id
* or the current user if no id is given
*
* @param string $id
* @param string|null $id
* @param bool $allowImpersonation If set to false, only the actually
* logged in user will be returned
* (when `$id` is passed as `null`)
* @return \Kirby\Cms\User|null
*/
public function user(string $id = null)
public function user(?string $id = null, bool $allowImpersonation = true)
{
if ($id !== null) {
return $this->users()->find($id);
}
if (is_string($this->user) === true) {
if ($allowImpersonation === true && is_string($this->user) === true) {
return $this->auth()->impersonate($this->user);
} else {
try {
return $this->auth()->user();
return $this->auth()->user(null, $allowImpersonation);
} catch (Throwable $e) {
return null;
}

View File

@@ -85,6 +85,16 @@ class Auth
return $this->validatePassword($auth->username(), $auth->password());
}
/**
* Returns the currently impersonated user
*
* @return \Kirby\Cms\User|null
*/
public function currentUserFromImpersonation()
{
return $this->impersonate;
}
/**
* Returns the logged in user by checking
* the current session and finding a valid
@@ -124,10 +134,10 @@ class Auth
/**
* Become any existing user
*
* @param string|null $who
* @param string|null $who User ID or email address
* @return \Kirby\Cms\User|null
*/
public function impersonate(string $who = null)
public function impersonate(?string $who = null)
{
switch ($who) {
case null:
@@ -416,16 +426,19 @@ class Auth
/**
* Returns the current authentication type
*
* @param bool $allowImpersonation If set to false, 'impersonate' won't
* be returned as authentication type
* even if an impersonation is active
* @return string
*/
public function type(): string
public function type(bool $allowImpersonation = true): string
{
$basicAuth = $this->kirby->option('api.basicAuth', false);
$auth = $this->kirby->request()->auth();
if ($basicAuth === true && $auth && $auth->type() === 'basic') {
return 'basic';
} elseif ($this->impersonate !== null) {
} elseif ($allowImpersonation === true && $this->impersonate !== null) {
return 'impersonate';
} else {
return 'session';
@@ -436,13 +449,15 @@ class Auth
* Validates the currently logged in user
*
* @param \Kirby\Session\Session|array|null $session
* @param bool $allowImpersonation If set to false, only the actually
* logged in user will be returned
* @return \Kirby\Cms\User
*
* @throws \Throwable If an authentication error occured
*/
public function user($session = null)
public function user($session = null, bool $allowImpersonation = true)
{
if ($this->impersonate !== null) {
if ($allowImpersonation === true && $this->impersonate !== null) {
return $this->impersonate;
}

View File

@@ -45,7 +45,7 @@ class Collection extends BaseCollection
public function __call(string $key, $arguments)
{
// collection methods
if ($this->hasMethod($key)) {
if ($this->hasMethod($key) === true) {
return $this->callMethod($key, $arguments);
}
}

View File

@@ -4,6 +4,7 @@ namespace Kirby\Cms;
use Kirby\Exception\NotFoundException;
use Kirby\Toolkit\Controller;
use Kirby\Toolkit\F;
/**
* Manages and loads all collections
@@ -119,8 +120,8 @@ class Collections
// first check for collection file
$file = $kirby->root('collections') . '/' . $name . '.php';
if (file_exists($file)) {
$collection = require $file;
if (is_file($file) === true) {
$collection = F::load($file);
if (is_a($collection, 'Closure')) {
return $collection;

View File

@@ -257,6 +257,10 @@ class Content
public function update(array $content = null, bool $overwrite = false)
{
$this->data = $overwrite === true ? (array)$content : array_merge($this->data, (array)$content);
// clear cache of Field objects
$this->fields = [];
return $this;
}
}

View File

@@ -2,7 +2,7 @@
namespace Kirby\Cms;
use Kirby\Data\Yaml;
use Kirby\Data\Data;
use Kirby\Exception\Exception;
use Kirby\Toolkit\F;
@@ -108,7 +108,7 @@ class ContentLocks
// always read the whole file
rewind($handle);
$string = fread($handle, $filesize);
$data = Yaml::decode($string);
$data = Data::decode($string, 'yaml');
}
}
@@ -207,7 +207,7 @@ class ContentLocks
return F::remove($file);
}
$yaml = Yaml::encode($this->data[$file]);
$yaml = Data::encode($this->data[$file], 'yaml');
// delete all file contents first
if (rewind($handle) !== true || ftruncate($handle, 0) !== true) {

288
kirby/src/Cms/Event.php Executable file
View File

@@ -0,0 +1,288 @@
<?php
namespace Kirby\Cms;
use Closure;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Toolkit\Controller;
/**
* The Event object is created whenever the `$kirby->trigger()`
* or `$kirby->apply()` methods are called. It collects all
* event information and handles calling the individual hooks.
*
* @package Kirby Cms
* @author Lukas Bestle <lukas@getkirby.com>,
* Ahmet Bora
* @link https://getkirby.com
* @copyright Bastian Allgeier GmbH
* @license https://getkirby.com/license
*/
class Event
{
/**
* The full event name
* (e.g. `page.create:after`)
*
* @var string
*/
protected $name;
/**
* The event type
* (e.g. `page` in `page.create:after`)
*
* @var string
*/
protected $type;
/**
* The event action
* (e.g. `create` in `page.create:after`)
*
* @var string|null
*/
protected $action;
/**
* The event state
* (e.g. `after` in `page.create:after`)
*
* @var string|null
*/
protected $state;
/**
* The event arguments
*
* @var array
*/
protected $arguments = [];
/**
* Class constructor
*
* @param string $name Full event name
* @param array $arguments Associative array of named event arguments
*/
public function __construct(string $name, array $arguments = [])
{
// split the event name into `$type.$action:$state`
// $action and $state are optional;
// if there is more than one dot, $type will be greedy
$regex = '/^(?<type>.+?)(?:\.(?<action>[^.]*?))?(?:\:(?<state>.*))?$/';
preg_match($regex, $name, $matches, PREG_UNMATCHED_AS_NULL);
$this->name = $name;
$this->type = $matches['type'];
$this->action = $matches['action'] ?? null;
$this->state = $matches['state'] ?? null;
$this->arguments = $arguments;
}
/**
* Magic caller for event arguments
*
* @param string $method
* @param array $arguments
* @return mixed
*/
public function __call(string $method, array $arguments = [])
{
return $this->argument($method);
}
/**
* Improved `var_dump` output
*
* @return array
*/
public function __debugInfo(): array
{
return $this->toArray();
}
/**
* Makes it possible to simply echo
* or stringify the entire object
*
* @return string
*/
public function __toString(): string
{
return $this->toString();
}
/**
* Returns the action of the event (e.g. `create`)
* or `null` if the event name does not include an action
*
* @return string|null
*/
public function action(): ?string
{
return $this->action;
}
/**
* Returns a specific event argument
*
* @param string $name
* @return mixed
*/
public function argument(string $name)
{
if (isset($this->arguments[$name]) === true) {
return $this->arguments[$name];
}
return null;
}
/**
* Returns the arguments of the event
*
* @return array
*/
public function arguments(): array
{
return $this->arguments;
}
/**
* Calls a hook with the event data and returns
* the hook's return value
*
* @param object|null $bind Optional object to bind to the hook function
* @param \Closure $hook
* @return mixed
*/
public function call($bind = null, Closure $hook)
{
// collect the list of possible hook arguments
$data = $this->arguments();
$data['event'] = $this;
// magically call the hook with the arguments it requested
$hook = new Controller($hook);
return $hook->call($bind, $data);
}
/**
* Returns the full name of the event
*
* @return string
*/
public function name(): string
{
return $this->name;
}
/**
* Returns the full list of possible wildcard
* event names based on the current event name
*
* @return array
*/
public function nameWildcards(): array
{
// if the event is already a wildcard event, no further variation is possible
if ($this->type === '*' || $this->action === '*' || $this->state === '*') {
return [];
}
if ($this->action !== null && $this->state !== null) {
// full $type.$action:$state event
return [
$this->type . '.*:' . $this->state,
$this->type . '.' . $this->action . ':*',
$this->type . '.*:*',
'*.' . $this->action . ':' . $this->state,
'*.' . $this->action . ':*',
'*:' . $this->state,
'*'
];
} elseif ($this->state !== null) {
// event without action: $type:$state
return [
$this->type . ':*',
'*:' . $this->state,
'*'
];
} elseif ($this->action !== null) {
// event without state: $type.$action
return [
$this->type . '.*',
'*.' . $this->action,
'*'
];
} else {
// event with a simple name
return ['*'];
}
}
/**
* Returns the state of the event (e.g. `after`)
*
* @return string|null
*/
public function state(): ?string
{
return $this->state;
}
/**
* Returns the event data as array
*
* @return array
*/
public function toArray(): array
{
return [
'name' => $this->name,
'arguments' => $this->arguments
];
}
/**
* Returns the event name as string
*
* @return string
*/
public function toString(): string
{
return $this->name;
}
/**
* Returns the type of the event (e.g. `page`)
*
* @return string
*/
public function type(): string
{
return $this->type;
}
/**
* Updates a given argument with a new value
*
* @internal
* @param string $name
* @param mixed $value
* @return void
*/
public function updateArgument(string $name, $value): void
{
if (array_key_exists($name, $this->arguments) !== true) {
throw new InvalidArgumentException('The argument ' . $name . ' does not exist');
}
$this->arguments[$name] = $value;
}
}

View File

@@ -326,14 +326,32 @@ class File extends ModelWithContent
}
/**
* Create a unique media hash
* Check if the file can be read by the current user
*
* @return bool
*/
public function isReadable(): bool
{
static $readable = [];
$template = $this->template();
if (isset($readable[$template]) === true) {
return $readable[$template];
}
return $readable[$template] = $this->permissions()->can('read');
}
/**
* Creates a unique media hash
*
* @internal
* @return string
*/
public function mediaHash(): string
{
return crc32($this->filename()) . '-' . $this->modifiedFile();
return $this->mediaToken() . '-' . $this->modifiedFile();
}
/**
@@ -347,6 +365,18 @@ class File extends ModelWithContent
return $this->parent()->mediaRoot() . '/' . $this->mediaHash() . '/' . $this->filename();
}
/**
* Creates a non-guessable token string for this file
*
* @internal
* @return string
*/
public function mediaToken(): string
{
$token = $this->kirby()->contentToken($this, $this->id());
return substr($token, 0, 10);
}
/**
* Returns the absolute Url to the file in the public media folder
*
@@ -375,12 +405,13 @@ class File extends ModelWithContent
*
* @param string $format
* @param string|null $handler date or strftime
* @param string|null $languageCode
* @return mixed
*/
public function modified(string $format = null, string $handler = null)
public function modified(string $format = null, string $handler = null, string $languageCode = null)
{
$file = $this->modifiedFile();
$content = $this->modifiedContent();
$content = $this->modifiedContent($languageCode);
$modified = max($file, $content);
if (is_null($format) === true) {
@@ -396,11 +427,12 @@ class File extends ModelWithContent
* Timestamp of the last modification
* of the content file
*
* @param string|null $languageCode
* @return int
*/
protected function modifiedContent(): int
protected function modifiedContent(string $languageCode = null): int
{
return F::modified($this->contentFile());
return F::modified($this->contentFile($languageCode));
}
/**

View File

@@ -38,7 +38,7 @@ trait FileActions
return $this;
}
return $this->commit('changeName', [$this, $name], function ($oldFile, $name) {
return $this->commit('changeName', ['file' => $this, 'name' => $name], function ($oldFile, $name) {
$newFile = $oldFile->clone([
'filename' => $name . '.' . $oldFile->extension(),
]);
@@ -87,7 +87,7 @@ trait FileActions
*/
public function changeSort(int $sort)
{
return $this->commit('changeSort', [$this, $sort], function ($file, $sort) {
return $this->commit('changeSort', ['file' => $this, 'position' => $sort], function ($file, $sort) {
return $file->save(['sort' => $sort]);
});
}
@@ -110,11 +110,22 @@ trait FileActions
{
$old = $this->hardcopy();
$kirby = $this->kirby();
$argumentValues = array_values($arguments);
$this->rules()->$action(...$argumentValues);
$kirby->trigger('file.' . $action . ':before', $arguments);
$result = $callback(...$argumentValues);
if ($action === 'create') {
$argumentsAfter = ['file' => $result];
} elseif ($action === 'delete') {
$argumentsAfter = ['status' => $result, 'file' => $old];
} else {
$argumentsAfter = ['newFile' => $result, 'oldFile' => $old];
}
$kirby->trigger('file.' . $action . ':after', $argumentsAfter);
$this->rules()->$action(...$arguments);
$kirby->trigger('file.' . $action . ':before', ...$arguments);
$result = $callback(...$arguments);
$kirby->trigger('file.' . $action . ':after', $result, $old);
$kirby->cache('pages')->flush();
return $result;
}
@@ -175,7 +186,7 @@ trait FileActions
$file = $file->clone(['content' => $form->strings(true)]);
// run the hook
return $file->commit('create', [$file, $upload], function ($file, $upload) {
return $file->commit('create', compact('file', 'upload'), function ($file, $upload) {
// delete all public versions
$file->unpublish();
@@ -211,7 +222,7 @@ trait FileActions
*/
public function delete(): bool
{
return $this->commit('delete', [$this], function ($file) {
return $this->commit('delete', ['file' => $this], function ($file) {
// remove all versions in the media folder
$file->unpublish();
@@ -243,7 +254,7 @@ trait FileActions
*/
public function publish()
{
Media::publish($this->root(), $this->mediaRoot());
Media::publish($this, $this->mediaRoot());
return $this;
}
@@ -273,7 +284,7 @@ trait FileActions
*/
public function replace(string $source)
{
return $this->commit('replace', [$this, new Image($source)], function ($file, $upload) {
return $this->commit('replace', ['file' => $this, 'upload' => new Image($source)], function ($file, $upload) {
// delete all public versions
$file->unpublish();
@@ -295,7 +306,7 @@ trait FileActions
*/
public function unpublish()
{
Media::unpublish($this->parent()->mediaRoot(), $this->filename());
Media::unpublish($this->parent()->mediaRoot(), $this);
return $this;
}
}

View File

@@ -26,6 +26,7 @@ class FileBlueprint extends Blueprint
'changeName' => null,
'create' => null,
'delete' => null,
'read' => null,
'replace' => null,
'update' => null,
]

View File

@@ -298,6 +298,6 @@ class Filename
'name' => $this->name(),
'attributes' => $this->attributesToString('-'),
'extension' => $this->extension()
]);
], '');
}
}

View File

@@ -55,7 +55,7 @@ class Files extends Collection
* Sort all given files by the
* order in the array
*
* @param array $files List of filenames
* @param array $files List of file ids
* @param int $offset Sorting offset
* @return self
*/

View File

@@ -126,7 +126,7 @@ trait HasChildren
* Finds one or multiple children by id
*
* @param string ...$arguments
* @return \Kirby\Cms\Page|\Kirby\Cms\Pages
* @return \Kirby\Cms\Page|\Kirby\Cms\Pages|null
*/
public function find(...$arguments)
{

View File

@@ -2,6 +2,8 @@
namespace Kirby\Cms;
use Kirby\Exception\BadMethodCallException;
/**
* HasMethods
*
@@ -31,7 +33,13 @@ trait HasMethods
*/
public function callMethod(string $method, array $args = [])
{
return static::$methods[$method]->call($this, ...$args);
$closure = $this->getMethod($method);
if ($closure === null) {
throw new BadMethodCallException('The method ' . $method . ' does not exist');
}
return $closure->call($this, ...$args);
}
/**
@@ -43,6 +51,29 @@ trait HasMethods
*/
public function hasMethod(string $method): bool
{
return isset(static::$methods[$method]) === true;
return $this->getMethod($method) !== null;
}
/**
* Returns a registered method by name, either from
* the current class or from a parent class ordered by
* inheritance order (top to bottom)
*
* @param string $method
* @return Closure|null
*/
protected function getMethod(string $method)
{
if (isset(static::$methods[$method]) === true) {
return static::$methods[$method];
}
foreach (class_parents($this) as $parent) {
if (isset($parent::$methods[$method]) === true) {
return $parent::$methods[$method];
}
}
return null;
}
}

View File

@@ -25,32 +25,19 @@ class KirbyTags extends \Kirby\Text\KirbyTags
* @param string $text
* @param array $data
* @param array $options
* @param array $hooks
* @param \Kirby\Cms\App $app
* @return string
*/
public static function parse(string $text = null, array $data = [], array $options = [], array $hooks = []): string
public static function parse(string $text = null, array $data = [], array $options = [], ?App $app = null): string
{
$text = static::hooks($hooks['kirbytags:before'] ?? [], $text, $data, $options);
$text = parent::parse($text, $data, $options);
$text = static::hooks($hooks['kirbytags:after'] ?? [], $text, $data, $options);
return $text;
if ($app !== null) {
$text = $app->apply('kirbytags:before', compact('text', 'data', 'options'), 'text');
}
/**
* Runs the given hooks and returns the
* modified text
*
* @param array $hooks
* @param string $text
* @param array $data
* @param array $options
* @return string|null
*/
protected static function hooks(array $hooks, string $text = null, array $data, array $options): ?string
{
foreach ($hooks as $hook) {
$text = $hook->call($data['kirby'], $text, $data, $options);
$text = parent::parse($text, $data, $options);
if ($app !== null) {
$text = $app->apply('kirbytags:after', compact('text', 'data', 'options'), 'text');
}
return $text;

View File

@@ -94,7 +94,7 @@ class Languages extends Collection
$files = glob(App::instance()->root('languages') . '/*.php');
foreach ($files as $file) {
$props = include $file;
$props = F::load($file);
if (is_array($props) === true) {
// inject the language code from the filename if it does not exist

View File

@@ -5,6 +5,7 @@ namespace Kirby\Cms;
use Kirby\Data\Data;
use Kirby\Toolkit\Dir;
use Kirby\Toolkit\F;
use Kirby\Toolkit\Str;
use Throwable;
/**
@@ -41,9 +42,15 @@ class Media
// this should work for all original files
if ($file = $model->file($filename)) {
// the media hash is outdated. redirect to the correct url
// check if the request contained an outdated media hash
if ($file->mediaHash() !== $hash) {
// if at least the token was correct, redirect
if (Str::startsWith($hash, $file->mediaToken() . '-') === true) {
return Response::redirect($file->mediaUrl(), 307);
} else {
// don't leak the correct token
return new Response('Not Found', 'text/plain', 404);
}
}
// send the file to the browser
@@ -57,18 +64,18 @@ class Media
/**
* Copy the file to the final media folder location
*
* @param string $src
* @param \Kirby\Cms\File $file
* @param string $dest
* @return bool
*/
public static function publish(string $src, string $dest): bool
public static function publish(File $file, string $dest): bool
{
$filename = basename($src);
$src = $file->root();
$version = dirname($dest);
$directory = dirname($version);
// unpublish all files except stuff in the version folder
Media::unpublish($directory, $filename, $version);
Media::unpublish($directory, $file, $version);
// copy/overwrite the file to the dest folder
return F::copy($src, $dest, true);
@@ -125,21 +132,25 @@ class Media
}
/**
* Deletes all versions of the given filename
* Deletes all versions of the given file
* within the parent directory
*
* @param string $directory
* @param string $filename
* @param \Kirby\Cms\File $file
* @param string $ignore
* @return bool
*/
public static function unpublish(string $directory, string $filename, string $ignore = null): bool
public static function unpublish(string $directory, File $file, string $ignore = null): bool
{
if (is_dir($directory) === false) {
return true;
}
$versions = glob($directory . '/' . crc32($filename) . '*', GLOB_ONLYDIR);
// get both old and new versions (pre and post Kirby 3.4.0)
$versions = array_merge(
glob($directory . '/' . crc32($file->filename()) . '-*', GLOB_ONLYDIR),
glob($directory . '/' . $file->mediaToken() . '-*', GLOB_ONLYDIR)
);
// delete all versions of the file
foreach ($versions as $version) {

View File

@@ -334,6 +334,11 @@ abstract class ModelWithContent extends Model
}
if (is_string($settings) === true) {
// use defined icon in blueprint
if ($settings === 'icon') {
return [];
}
$settings = [
'query' => $settings
];
@@ -448,11 +453,15 @@ abstract class ModelWithContent extends Model
return null;
}
try {
$result = Str::query($query, [
'kirby' => $this->kirby(),
'site' => is_a($this, 'Kirby\Cms\Site') ? $this : $this->site(),
static::CLASS_ALIAS => $this
]);
} catch (Throwable $e) {
return null;
}
if ($expect !== null && is_a($result, $expect) !== true) {
return null;
@@ -611,19 +620,21 @@ abstract class ModelWithContent extends Model
* String template builder
*
* @param string|null $template
* @param array $data
* @param string $fallback Fallback for tokens in the template that cannot be replaced
* @return string
*/
public function toString(string $template = null): string
public function toString(string $template = null, array $data = [], string $fallback = ''): string
{
if ($template === null) {
return $this->id();
}
$result = Str::template($template, [
$result = Str::template($template, array_replace([
'kirby' => $this->kirby(),
'site' => is_a($this, 'Kirby\Cms\Site') ? $this : $this->site(),
static::CLASS_ALIAS => $this
]);
], $data), $fallback);
return $result;
}
@@ -691,7 +702,8 @@ abstract class ModelWithContent extends Model
}
}
return $this->commit('update', [$this, $form->data(), $form->strings(), $languageCode], function ($model, $values, $strings, $languageCode) {
$arguments = [static::CLASS_ALIAS => $this, 'values' => $form->data(), 'strings' => $form->strings(), 'languageCode' => $languageCode];
return $this->commit('update', $arguments, function ($model, $values, $strings, $languageCode) {
// save updated values
$model = $model->save($strings, $languageCode, true);

View File

@@ -3,6 +3,7 @@
namespace Kirby\Cms;
use Kirby\Exception\Exception;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Exception\NotFoundException;
use Kirby\Http\Uri;
use Kirby\Toolkit\A;
@@ -344,7 +345,31 @@ class Page extends ModelWithContent
]);
// call the template controller if there's one.
return array_merge($kirby->controller($this->template()->name(), $data, $contentType), $data);
$controllerData = $kirby->controller($this->template()->name(), $data, $contentType);
// merge controller data with original data safely
if (empty($controllerData) === false) {
$classes = [
'kirby' => 'Kirby\Cms\App',
'site' => 'Kirby\Cms\Site',
'pages' => 'Kirby\Cms\Pages',
'page' => 'Kirby\Cms\Page'
];
foreach ($controllerData as $key => $value) {
if (array_key_exists($key, $classes) === true) {
if (is_a($value, $classes[$key]) === true) {
$data[$key] = $value;
} else {
throw new InvalidArgumentException('The returned variable "' . $key . '" from the controller "' . $this->template()->name() . '" is not of the required type "' . $classes[$key] . '"');
}
} else {
$data[$key] = $value;
}
}
}
return $data;
}
/**
@@ -453,6 +478,20 @@ class Page extends ModelWithContent
return new static($props);
}
/**
* Redirects to this page,
* wrapper for the `go()` helper
*
* @since 3.4.0
*
* @param array $options Options for `Kirby\Http\Uri` to create URL parts
* @param int $code HTTP status code
*/
public function go(array $options = [], int $code = 302)
{
go($this->url($options), $code);
}
/**
* Checks if the intended template
* for the page exists.
@@ -889,11 +928,16 @@ class Page extends ModelWithContent
*
* @param string $format
* @param string|null $handler
* @param string|null $languageCode
* @return int|string
*/
public function modified(string $format = null, string $handler = null)
public function modified(string $format = null, string $handler = null, string $languageCode = null)
{
return F::modified($this->contentFile(), $format, $handler ?? $this->kirby()->option('date.handler', 'date'));
return F::modified(
$this->contentFile($languageCode),
$format,
$handler ?? $this->kirby()->option('date.handler', 'date')
);
}
/**
@@ -1448,7 +1492,7 @@ class Page extends ModelWithContent
*/
protected function token(): string
{
return sha1($this->id() . $this->template());
return $this->kirby()->contentToken($this, $this->id() . $this->template());
}
/**

View File

@@ -42,7 +42,7 @@ trait PageActions
return $this;
}
return $this->commit('changeNum', [$this, $num], function ($oldPage, $num) {
return $this->commit('changeNum', ['page' => $this, 'num' => $num], function ($oldPage, $num) {
$newPage = $oldPage->clone([
'num' => $num,
'dirname' => null,
@@ -97,7 +97,8 @@ trait PageActions
return $this;
}
return $this->commit('changeSlug', [$this, $slug, $languageCode = null], function ($oldPage, $slug) {
$arguments = ['page' => $this, 'slug' => $slug, 'languageCode' => null];
return $this->commit('changeSlug', $arguments, function ($oldPage, $slug) {
$newPage = $oldPage->clone([
'slug' => $slug,
'dirname' => null,
@@ -151,7 +152,8 @@ trait PageActions
throw new InvalidArgumentException('Use the changeSlug method to change the slug for the default language');
}
return $this->commit('changeSlug', [$this, $slug, $languageCode], function ($page, $slug, $languageCode) {
$arguments = ['page' => $this, 'slug' => $slug, 'languageCode' => $languageCode];
return $this->commit('changeSlug', $arguments, function ($page, $slug, $languageCode) {
// remove the slug if it's the same as the folder name
if ($slug === $page->uid()) {
$slug = null;
@@ -185,7 +187,8 @@ trait PageActions
protected function changeStatusToDraft()
{
$page = $this->commit('changeStatus', [$this, 'draft', null], function ($page) {
$arguments = ['page' => $this, 'status' => 'draft', 'position' => null];
$page = $this->commit('changeStatus', $arguments, function ($page) {
return $page->unpublish();
});
@@ -206,7 +209,8 @@ trait PageActions
return $this;
}
$page = $this->commit('changeStatus', [$this, 'listed', $num], function ($page, $status, $position) {
$arguments = ['page' => $this, 'status' => 'listed', 'position' => $num];
$page = $this->commit('changeStatus', $arguments, function ($page, $status, $position) {
return $page->publish()->changeNum($position);
});
@@ -226,7 +230,8 @@ trait PageActions
return $this;
}
$page = $this->commit('changeStatus', [$this, 'unlisted', null], function ($page) {
$arguments = ['page' => $this, 'status' => 'unlisted', 'position' => null];
$page = $this->commit('changeStatus', $arguments, function ($page) {
return $page->publish()->changeNum(null);
});
@@ -243,11 +248,11 @@ trait PageActions
*/
public function changeTemplate(string $template)
{
if ($template === $this->template()->name()) {
if ($template === $this->intendedTemplate()->name()) {
return $this;
}
return $this->commit('changeTemplate', [$this, $template], function ($oldPage, $template) {
return $this->commit('changeTemplate', ['page' => $this, 'template' => $template], function ($oldPage, $template) {
if ($this->kirby()->multilang() === true) {
$newPage = $this->clone([
'template' => $template
@@ -290,7 +295,8 @@ trait PageActions
*/
public function changeTitle(string $title, string $languageCode = null)
{
return $this->commit('changeTitle', [$this, $title, $languageCode], function ($page, $title, $languageCode) {
$arguments = ['page' => $this, 'title' => $title, 'languageCode' => $languageCode];
return $this->commit('changeTitle', $arguments, function ($page, $title, $languageCode) {
return $page->save(['title' => $title], $languageCode);
});
}
@@ -312,12 +318,26 @@ trait PageActions
protected function commit(string $action, array $arguments, Closure $callback)
{
$old = $this->hardcopy();
$kirby = $this->kirby();
$argumentValues = array_values($arguments);
$this->rules()->$action(...$arguments);
$this->kirby()->trigger('page.' . $action . ':before', ...$arguments);
$result = $callback(...$arguments);
$this->kirby()->trigger('page.' . $action . ':after', $result, $old);
$this->kirby()->cache('pages')->flush();
$this->rules()->$action(...$argumentValues);
$kirby->trigger('page.' . $action . ':before', $arguments);
$result = $callback(...$argumentValues);
if ($action === 'create') {
$argumentsAfter = ['page' => $result];
} elseif ($action === 'duplicate') {
$argumentsAfter = ['duplicatePage' => $result];
} elseif ($action === 'delete') {
$argumentsAfter = ['status' => $result, 'page' => $old];
} else {
$argumentsAfter = ['newPage' => $result, 'oldPage' => $old];
}
$kirby->trigger('page.' . $action . ':after', $argumentsAfter);
$kirby->cache('pages')->flush();
return $result;
}
@@ -356,7 +376,9 @@ trait PageActions
'slug' => $slug,
]);
$ignore = [];
$ignore = [
$this->kirby()->locks()->file($this)
];
// don't copy files
if ($files === false) {
@@ -375,7 +397,7 @@ trait PageActions
// remove all translated slugs
if ($this->kirby()->multilang() === true) {
foreach ($this->kirby()->languages() as $language) {
if ($language->isDefault() === false) {
if ($language->isDefault() === false && $copy->translation($language)->exists() === true) {
$copy = $copy->save(['slug' => null], $language->code());
}
}
@@ -416,7 +438,7 @@ trait PageActions
$page = $page->clone(['content' => $form->strings(true)]);
// run the hooks and creation action
$page = $page->commit('create', [$page, $props], function ($page, $props) {
$page = $page->commit('create', ['page' => $page, 'input' => $props], function ($page, $props) {
// always create pages in the default language
if ($page->kirby()->multilang() === true) {
@@ -461,7 +483,8 @@ trait PageActions
'site' => $this->site(),
]);
return static::create($props);
$modelClass = Page::$models[$props['template']] ?? Page::class;
return $modelClass::create($props);
}
/**
@@ -520,7 +543,7 @@ trait PageActions
'kirby' => $app,
'page' => $app->page($this->id()),
'site' => $app->site(),
]);
], '');
return (int)$template;
}
@@ -534,7 +557,7 @@ trait PageActions
*/
public function delete(bool $force = false): bool
{
return $this->commit('delete', [$this, $force], function ($page, $force) {
return $this->commit('delete', ['page' => $this, 'force' => $force], function ($page, $force) {
// delete all files individually
foreach ($page->files() as $file) {
@@ -591,7 +614,8 @@ trait PageActions
// create the slug for the duplicate
$slug = Str::slug($slug ?? $this->slug() . '-copy');
return $this->commit('duplicate', [$this, $slug, $options], function ($page, $slug, $options) {
$arguments = ['originalPage' => $this, 'input' => $slug, 'options' => $options];
return $this->commit('duplicate', $arguments, function ($page, $slug, $options) {
return $this->copy([
'parent' => $this->parent(),
'slug' => $slug,

View File

@@ -238,11 +238,11 @@ class Pages extends Collection
public function findByIdRecursive(string $id, string $startAt = null, bool $multiLang = false)
{
$path = explode('/', $id);
$collection = $this;
$item = null;
$query = $startAt;
foreach ($path as $key) {
$collection = $item ? $item->children() : $this;
$query = ltrim($query . '/' . $key, '/');
$item = $collection->get($query) ?? null;
@@ -253,8 +253,6 @@ class Pages extends Collection
if ($item === null) {
return null;
}
$collection = $item->children();
}
return $item;
@@ -340,11 +338,14 @@ class Pages extends Collection
foreach ($this->data as $pageKey => $page) {
$this->index->data[$pageKey] = $page;
$index = $page->index($drafts);
foreach ($page->index($drafts) as $childKey => $child) {
if ($index) {
foreach ($index as $childKey => $child) {
$this->index->data[$childKey] = $child;
}
}
}
return $this->index;
}

View File

@@ -23,7 +23,7 @@ use Kirby\Toolkit\Pagination as BasePagination;
class Pagination extends BasePagination
{
/**
* Pagination method (param or query)
* Pagination method (param, query, none)
*
* @var string
*/
@@ -82,7 +82,7 @@ class Pagination extends BasePagination
if ($params['method'] === 'query') {
$params['page'] = $params['page'] ?? $params['url']->query()->get($params['variable']);
} else {
} elseif ($params['method'] === 'param') {
$params['page'] = $params['page'] ?? $params['url']->params()->get($params['variable']);
}
@@ -153,8 +153,10 @@ class Pagination extends BasePagination
if ($this->method === 'query') {
$url->query->$variable = $pageValue;
} else {
} elseif ($this->method === 'param') {
$url->params->$variable = $pageValue;
} else {
return null;
}
return $url->toString();

View File

@@ -89,7 +89,7 @@ class Panel
go($kirby->url('index') . '/' . $kirby->path());
}
} catch (Throwable $e) {
die('The panel assets cannot be installed properly. Please check permissions of your media folder.');
die('The Panel assets cannot be installed properly. ' . $e->getMessage());
}
// get the uri object for the panel url

View File

@@ -17,6 +17,8 @@ use Kirby\Exception\InvalidArgumentException;
*/
class Permissions
{
public static $extendedActions = [];
protected $actions = [
'access' => [
'panel' => true,
@@ -28,6 +30,7 @@ class Permissions
'changeName' => true,
'create' => true,
'delete' => true,
'read' => true,
'replace' => true,
'update' => true
],
@@ -75,6 +78,15 @@ class Permissions
public function __construct($settings = [])
{
// dynamically register the extended actions
foreach (static::$extendedActions as $key => $actions) {
if (isset($this->actions[$key]) === true) {
throw new InvalidArgumentException('The action ' . $key . ' is already a core action');
}
$this->actions[$key] = $actions;
}
if (is_array($settings) === true) {
return $this->setCategories($settings);
}

View File

@@ -2,8 +2,6 @@
namespace Kirby\Cms;
use Kirby\Toolkit\Str;
/**
* The Search class extracts the
* search logic from collections, to
@@ -31,100 +29,15 @@ class Search
/**
* Native search method to search for anything within the collection
*
* @param Collection $collection
* @param \Kirby\Cms\Collection $collection
* @param string $query
* @param mixed $params
* @return \Kirby\Cms\Collection|bool
*/
public static function collection(Collection $collection, string $query = null, $params = [])
{
if (empty(trim($query)) === true) {
return $collection->limit(0);
}
if (is_string($params) === true) {
$params = ['fields' => Str::split($params, '|')];
}
$defaults = [
'fields' => [],
'minlength' => 2,
'score' => [],
'words' => false,
];
$options = array_merge($defaults, $params);
$collection = clone $collection;
$searchwords = preg_replace('/(\s)/u', ',', $query);
$searchwords = Str::split($searchwords, ',', $options['minlength']);
$lowerQuery = mb_strtolower($query);
if (empty($options['stopwords']) === false) {
$searchwords = array_diff($searchwords, $options['stopwords']);
}
$searchwords = array_map(function ($value) use ($options) {
return $options['words'] ? '\b' . preg_quote($value) . '\b' : preg_quote($value);
}, $searchwords);
$preg = '!(' . implode('|', $searchwords) . ')!i';
$results = $collection->filter(function ($item) use ($query, $preg, $options, $lowerQuery) {
$data = $item->content()->toArray();
$keys = array_keys($data);
$keys[] = 'id';
if (is_a($item, 'Kirby\Cms\User') === true) {
$keys[] = 'name';
$keys[] = 'email';
$keys[] = 'role';
} elseif (is_a($item, 'Kirby\Cms\Page') === true) {
// apply the default score for pages
$options['score'] = array_merge([
'id' => 64,
'title' => 64,
], $options['score']);
}
if (empty($options['fields']) === false) {
$fields = array_map('strtolower', $options['fields']);
$keys = array_intersect($keys, $fields);
}
$item->searchHits = 0;
$item->searchScore = 0;
foreach ($keys as $key) {
$score = $options['score'][$key] ?? 1;
$value = $data[$key] ?? (string)$item->$key();
$lowerValue = mb_strtolower($value);
// check for exact matches
if ($lowerQuery == $lowerValue) {
$item->searchScore += 16 * $score;
$item->searchHits += 1;
// check for exact beginning matches
} elseif (Str::startsWith($lowerValue, $lowerQuery) === true) {
$item->searchScore += 8 * $score;
$item->searchHits += 1;
// check for exact query matches
} elseif ($matches = preg_match_all('!' . preg_quote($query) . '!i', $value, $r)) {
$item->searchScore += 2 * $score;
$item->searchHits += $matches;
}
// check for any match
if ($matches = preg_match_all($preg, $value, $r)) {
$item->searchHits += $matches;
$item->searchScore += $matches * $score;
}
}
return $item->searchHits > 0 ? true : false;
});
return $results->sortBy('searchScore', 'desc');
$kirby = App::instance();
return $kirby->component('search')($kirby, $collection, $query, $params);
}
/**

View File

@@ -33,11 +33,15 @@ trait SiteActions
{
$old = $this->hardcopy();
$kirby = $this->kirby();
$argumentValues = array_values($arguments);
$this->rules()->$action(...$argumentValues);
$kirby->trigger('site.' . $action . ':before', $arguments);
$result = $callback(...$argumentValues);
$kirby->trigger('site.' . $action . ':after', ['newSite' => $result, 'oldSite' => $old]);
$this->rules()->$action(...$arguments);
$kirby->trigger('site.' . $action . ':before', ...$arguments);
$result = $callback(...$arguments);
$kirby->trigger('site.' . $action . ':after', $result, $old);
$kirby->cache('pages')->flush();
return $result;
}
@@ -51,7 +55,8 @@ trait SiteActions
*/
public function changeTitle(string $title, string $languageCode = null)
{
return $this->commit('changeTitle', [$this, $title, $languageCode], function ($site, $title, $languageCode) {
$arguments = ['site' => $this, 'title' => $title, 'languageCode' => $languageCode];
return $this->commit('changeTitle', $arguments, function ($site, $title, $languageCode) {
return $site->save(['title' => $title], $languageCode);
});
}

View File

@@ -9,6 +9,7 @@ use Kirby\Exception\PermissionException;
use Kirby\Http\Remote;
use Kirby\Http\Uri;
use Kirby\Http\Url;
use Kirby\Toolkit\A;
use Kirby\Toolkit\Dir;
use Kirby\Toolkit\F;
use Kirby\Toolkit\Str;
@@ -281,7 +282,9 @@ class System
* Loads the license file and returns
* the license information if available
*
* @return string|false
* @return string|bool License key or `false` if the current user has
* permissions for access.settings, otherwise just a
* boolean that tells whether a valid license is active
*/
public function license()
{
@@ -326,7 +329,14 @@ class System
return false;
}
// only return the actual license key if the
// current user has appropriate permissions
$user = $this->app->user();
if ($user && $user->role()->permissions()->for('access', 'settings') === true) {
return $license['license'];
} else {
return true;
}
}
/**
@@ -422,6 +432,9 @@ class System
*/
public function server(): bool
{
if ($servers = $this->app->option('servers')) {
$servers = A::wrap($servers);
} else {
$servers = [
'apache',
'caddy',
@@ -429,6 +442,7 @@ class System
'nginx',
'php'
];
}
$software = $_SERVER['SERVER_SOFTWARE'] ?? null;

View File

@@ -3,7 +3,6 @@
namespace Kirby\Cms;
use Kirby\Http\Url as BaseUrl;
use Kirby\Toolkit\Str;
/**
* The `Url` class extends the
@@ -62,35 +61,9 @@ class Url extends BaseUrl
public static function to(string $path = null, $options = null): string
{
$kirby = App::instance();
$language = null;
// get language from simple string option
if (is_string($options) === true) {
$language = $options;
$options = null;
}
// get language from array
if (is_array($options) === true && isset($options['language']) === true) {
$language = $options['language'];
unset($options['language']);
}
// get a language url for the linked page, if the page can be found
if ($kirby->multilang() === true) {
$parts = Str::split($path, '#');
if ($page = page($parts[0] ?? null)) {
$path = $page->url($language);
if (isset($parts[1]) === true) {
$path .= '#' . $parts[1];
}
}
}
return $kirby->component('url')($kirby, $path, $options, function (string $path = null, $options = null) {
return parent::to($path, $options);
return $kirby->component('url')($kirby, $path, $options, function (string $path = null, $options = null) use ($kirby) {
return $kirby->nativeComponent('url')($kirby, $path, $options);
});
}
}

View File

@@ -426,13 +426,13 @@ class User extends ModelWithContent
$session = $this->sessionFromOptions($session);
$kirby->trigger('user.login:before', $this, $session);
$kirby->trigger('user.login:before', ['user' => $this, 'session' => $session]);
$session->regenerateToken(); // privilege change
$session->data()->set('user.id', $this->id());
$this->kirby()->auth()->setUser($this);
$kirby->trigger('user.login:after', $this, $session);
$kirby->trigger('user.login:after', ['user' => $this, 'session' => $session]);
}
/**
@@ -446,7 +446,7 @@ class User extends ModelWithContent
$kirby = $this->kirby();
$session = $this->sessionFromOptions($session);
$kirby->trigger('user.logout:before', $this, $session);
$kirby->trigger('user.logout:before', ['user' => $this, 'session' => $session]);
// remove the user from the session for future requests
$session->data()->remove('user.id');
@@ -458,12 +458,12 @@ class User extends ModelWithContent
// session is now empty, we might as well destroy it
$session->destroy();
$kirby->trigger('user.logout:after', $this, null);
$kirby->trigger('user.logout:after', ['user' => $this, 'session' => null]);
} else {
// privilege change
$session->regenerateToken();
$kirby->trigger('user.logout:after', $this, $session);
$kirby->trigger('user.logout:after', ['user' => $this, 'session' => $session]);
}
}
@@ -515,11 +515,12 @@ class User extends ModelWithContent
*
* @param string $format
* @param string|null $handler
* @param string|null $languageCode
* @return int|string
*/
public function modified(string $format = 'U', string $handler = null)
public function modified(string $format = 'U', string $handler = null, string $languageCode = null)
{
$modifiedContent = F::modified($this->contentFile());
$modifiedContent = F::modified($this->contentFile($languageCode));
$modifiedIndex = F::modified($this->root() . '/index.php');
$modifiedTotal = max([$modifiedContent, $modifiedIndex]);
$handler = $handler ?? $this->kirby()->option('date.handler', 'date');
@@ -682,6 +683,41 @@ class User extends ModelWithContent
return $this->role = Role::nobody();
}
/**
* Returns all available roles
* for this user, that can be selected
* by the authenticated user
*
* @return \Kirby\Cms\Roles
*/
public function roles()
{
$kirby = $this->kirby();
$roles = $kirby->roles();
// a collection with just the one role of the user
$myRole = $roles->filterBy('id', $this->role()->id());
// if there's an authenticated user …
if ($user = $kirby->user()) {
// admin users can select pretty much any role
if ($user->isAdmin() === true) {
// except if the user is the last admin
if ($this->isLastAdmin() === true) {
// in which case they have to stay admin
return $myRole;
}
// return all roles for mighty admins
return $roles;
}
}
// any other user can only keep their role
return $myRole;
}
/**
* The absolute path to the user directory
*
@@ -844,15 +880,17 @@ class User extends ModelWithContent
* String template builder
*
* @param string|null $template
* @param array|null $data
* @param string $fallback Fallback for tokens in the template that cannot be replaced
* @return string
*/
public function toString(string $template = null): string
public function toString(string $template = null, array $data = [], string $fallback = ''): string
{
if ($template === null) {
$template = $this->email();
}
return parent::toString($template);
return parent::toString($template, $data);
}
/**

View File

@@ -29,7 +29,7 @@ trait UserActions
*/
public function changeEmail(string $email)
{
return $this->commit('changeEmail', [$this, $email], function ($user, $email) {
return $this->commit('changeEmail', ['user' => $this, 'email' => $email], function ($user, $email) {
$user = $user->clone([
'email' => $email
]);
@@ -50,7 +50,7 @@ trait UserActions
*/
public function changeLanguage(string $language)
{
return $this->commit('changeLanguage', [$this, $language], function ($user, $language) {
return $this->commit('changeLanguage', ['user' => $this, 'language' => $language], function ($user, $language) {
$user = $user->clone([
'language' => $language,
]);
@@ -71,7 +71,7 @@ trait UserActions
*/
public function changeName(string $name)
{
return $this->commit('changeName', [$this, $name], function ($user, $name) {
return $this->commit('changeName', ['user' => $this, 'name' => $name], function ($user, $name) {
$user = $user->clone([
'name' => $name
]);
@@ -92,7 +92,7 @@ trait UserActions
*/
public function changePassword(string $password)
{
return $this->commit('changePassword', [$this, $password], function ($user, $password) {
return $this->commit('changePassword', ['user' => $this, 'password' => $password], function ($user, $password) {
$user = $user->clone([
'password' => $password = User::hashPassword($password)
]);
@@ -111,7 +111,7 @@ trait UserActions
*/
public function changeRole(string $role)
{
return $this->commit('changeRole', [$this, $role], function ($user, $role) {
return $this->commit('changeRole', ['user' => $this, 'role' => $role], function ($user, $role) {
$user = $user->clone([
'role' => $role,
]);
@@ -145,12 +145,24 @@ trait UserActions
}
$old = $this->hardcopy();
$kirby = $this->kirby();
$argumentValues = array_values($arguments);
$this->rules()->$action(...$arguments);
$this->kirby()->trigger('user.' . $action . ':before', ...$arguments);
$result = $callback(...$arguments);
$this->kirby()->trigger('user.' . $action . ':after', $result, $old);
$this->kirby()->cache('pages')->flush();
$this->rules()->$action(...$argumentValues);
$kirby->trigger('user.' . $action . ':before', $arguments);
$result = $callback(...$argumentValues);
if ($action === 'create') {
$argumentsAfter = ['user' => $result];
} elseif ($action === 'delete') {
$argumentsAfter = ['status' => $result, 'user' => $old];
} else {
$argumentsAfter = ['newUser' => $result, 'oldUser' => $old];
}
$kirby->trigger('user.' . $action . ':after', $argumentsAfter);
$kirby->cache('pages')->flush();
return $result;
}
@@ -181,7 +193,7 @@ trait UserActions
$user = $user->clone(['content' => $form->strings(true)]);
// run the hook
return $user->commit('create', [$user, $props], function ($user, $props) {
return $user->commit('create', ['user' => $user, 'input' => $props], function ($user, $props) {
$user->writeCredentials([
'email' => $user->email(),
'language' => $user->language(),
@@ -231,7 +243,7 @@ trait UserActions
*/
public function delete(): bool
{
return $this->commit('delete', [$this], function ($user) {
return $this->commit('delete', ['user' => $this], function ($user) {
if ($user->exists() === false) {
return true;
}
@@ -258,8 +270,10 @@ trait UserActions
*/
protected function readCredentials(): array
{
if (file_exists($this->root() . '/index.php') === true) {
$credentials = require $this->root() . '/index.php';
$path = $this->root() . '/index.php';
if (is_file($path) === true) {
$credentials = F::load($path);
return is_array($credentials) === false ? [] : $credentials;
} else {

View File

@@ -25,17 +25,7 @@ class UserPermissions extends ModelPermissions
protected function canChangeRole(): bool
{
// only one role, makes no sense to change it
if ($this->user->kirby()->roles()->count() < 2) {
return false;
}
// users who are not admins cannot change their own role
if ($this->user->is($this->model) === true && $this->user->isAdmin() === false) {
return false;
}
return $this->model->isLastAdmin() !== true;
return $this->model->roles()->count() > 1;
}
protected function canCreate(): bool

View File

@@ -3,6 +3,7 @@
namespace Kirby\Cms;
use Kirby\Toolkit\Dir;
use Kirby\Toolkit\F;
use Kirby\Toolkit\Str;
/**
@@ -109,8 +110,9 @@ class Users extends Collection
}
// get role information
if (file_exists($root . '/' . $userDirectory . '/index.php') === true) {
$credentials = require $root . '/' . $userDirectory . '/index.php';
$path = $root . '/' . $userDirectory . '/index.php';
if (is_file($path) === true) {
$credentials = F::load($path);
}
// create user model based on role

View File

@@ -2,13 +2,13 @@
namespace Kirby\Data;
use Exception;
use Kirby\Exception\Exception;
use Kirby\Toolkit\F;
/**
* The `Data` class provides readers and
* writers for data. The class comes with
* four handlers for `json`, `php`, `txt`
* handlers for `json`, `php`, `txt`, `xml`
* and `yaml` encoded data, but can be
* extended and customized.
*
@@ -32,6 +32,7 @@ class Data
public static $aliases = [
'md' => 'txt',
'mdown' => 'txt',
'rss' => 'xml',
'yml' => 'yaml',
];
@@ -44,6 +45,7 @@ class Data
'json' => 'Kirby\Data\Json',
'php' => 'Kirby\Data\PHP',
'txt' => 'Kirby\Data\Txt',
'xml' => 'Kirby\Data\Xml',
'yaml' => 'Kirby\Data\Yaml',
];
@@ -73,23 +75,23 @@ class Data
/**
* Decodes data with the specified handler
*
* @param string $data
* @param mixed $string
* @param string $type
* @return array
*/
public static function decode(string $data = null, string $type): array
public static function decode($string = null, string $type): array
{
return static::handler($type)->decode($data);
return static::handler($type)->decode($string);
}
/**
* Encodes data with the specified handler
*
* @param array $data
* @param mixed $data
* @param string $type
* @return string
*/
public static function encode(array $data = null, string $type): string
public static function encode($data = null, string $type): string
{
return static::handler($type)->encode($data);
}
@@ -114,11 +116,11 @@ class Data
* the extension if not specified
*
* @param string $file
* @param array $data
* @param mixed $data
* @param string $type
* @return bool
*/
public static function write(string $file = null, array $data = [], string $type = null): bool
public static function write(string $file = null, $data = [], string $type = null): bool
{
return static::handler($type ?? F::extension($file))->write($file, $data);
}

View File

@@ -2,7 +2,7 @@
namespace Kirby\Data;
use Exception;
use Kirby\Exception\Exception;
use Kirby\Toolkit\F;
/**
@@ -23,7 +23,7 @@ abstract class Handler
*
* Needs to throw an Exception if the file can't be parsed.
*
* @param string $string
* @param mixed $string
* @return array
*/
abstract public static function decode($string): array;
@@ -55,10 +55,10 @@ abstract class Handler
* Writes data to a file
*
* @param string $file
* @param array $data
* @param mixed $data
* @return bool
*/
public static function write(string $file = null, array $data = []): bool
public static function write(string $file = null, $data = []): bool
{
return F::write($file, static::encode($data));
}

View File

@@ -2,7 +2,7 @@
namespace Kirby\Data;
use Exception;
use Kirby\Exception\InvalidArgumentException;
/**
* Simple Wrapper around json_encode and json_decode
@@ -29,17 +29,29 @@ class Json extends Handler
/**
* Parses an encoded JSON string and returns a multi-dimensional array
*
* @param string $json
* @param mixed $string
* @return array
*/
public static function decode($json): array
public static function decode($string): array
{
$result = json_decode($json, true);
if ($string === null) {
return [];
}
if (is_array($string) === true) {
return $string;
}
if (is_string($string) === false) {
throw new InvalidArgumentException('Invalid JSON data; please pass a string');
}
$result = json_decode($string, true);
if (is_array($result) === true) {
return $result;
} else {
throw new Exception('JSON string is invalid');
throw new InvalidArgumentException('JSON string is invalid');
}
}
}

View File

@@ -2,7 +2,8 @@
namespace Kirby\Data;
use Exception;
use Kirby\Exception\BadMethodCallException;
use Kirby\Exception\Exception;
use Kirby\Toolkit\F;
/**
@@ -23,7 +24,7 @@ class PHP extends Handler
* @param string $indent For internal use only
* @return string
*/
public static function encode($data, $indent = ''): string
public static function encode($data, string $indent = ''): string
{
switch (gettype($data)) {
case 'array':
@@ -46,14 +47,14 @@ class PHP extends Handler
}
/**
* PHP arrays don't have to be decoded
* PHP strings shouldn't be decoded manually
*
* @param array $array
* @param mixed $array
* @return array
*/
public static function decode($array): array
{
return $array;
throw new BadMethodCallException('The PHP::decode() method is not implemented');
}
/**
@@ -68,17 +69,17 @@ class PHP extends Handler
throw new Exception('The file "' . $file . '" does not exist');
}
return (array)(include $file);
return (array)F::load($file, []);
}
/**
* Creates a PHP file with the given data
*
* @param string $file
* @param array $data
* @param mixed $data
* @return bool
*/
public static function write(string $file = null, array $data = []): bool
public static function write(string $file = null, $data = []): bool
{
$php = static::encode($data);
$php = "<?php\n\nreturn $php;";

View File

@@ -2,6 +2,8 @@
namespace Kirby\Data;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Toolkit\A;
use Kirby\Toolkit\Str;
/**
@@ -25,7 +27,7 @@ class Txt extends Handler
{
$result = [];
foreach ((array)$data as $key => $value) {
foreach (A::wrap($data) as $key => $value) {
if (empty($key) === true || $value === null) {
continue;
}
@@ -48,7 +50,7 @@ class Txt extends Handler
{
// avoid problems with arrays
if (is_array($value) === true) {
$value = Yaml::encode($value);
$value = Data::encode($value, 'yaml');
// avoid problems with localized floats
} elseif (is_float($value) === true) {
$value = Str::float($value);
@@ -86,11 +88,23 @@ class Txt extends Handler
/**
* Parses a Kirby txt string and returns a multi-dimensional array
*
* @param string $string
* @param mixed $string
* @return array
*/
public static function decode($string): array
{
if ($string === null) {
return [];
}
if (is_array($string) === true) {
return $string;
}
if (is_string($string) === false) {
throw new InvalidArgumentException('Invalid TXT data; please pass a string');
}
// remove BOM
$string = str_replace("\xEF\xBB\xBF", '', $string);
// explode all fields by the line separator

64
kirby/src/Data/Xml.php Executable file
View File

@@ -0,0 +1,64 @@
<?php
namespace Kirby\Data;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Toolkit\Xml as XmlConverter;
/**
* Simple Wrapper around the XML parser of the Toolkit
*
* @package Kirby Data
* @author Lukas Bestle <lukas@getkirby.com>
* @link https://getkirby.com
* @copyright Bastian Allgeier GmbH
* @license https://opensource.org/licenses/MIT
*/
class Xml extends Handler
{
/**
* Converts an array to an encoded XML string
*
* @param mixed $data
* @return string
*/
public static function encode($data): string
{
return XmlConverter::create($data, 'data');
}
/**
* Parses an encoded XML string and returns a multi-dimensional array
*
* @param mixed $string
* @return array
*/
public static function decode($string): array
{
if ($string === null) {
return [];
}
if (is_array($string) === true) {
return $string;
}
if (is_string($string) === false) {
throw new InvalidArgumentException('Invalid XML data; please pass a string');
}
$result = XmlConverter::parse($string);
if (is_array($result) === true) {
// remove the root's name if it is the default <data> to ensure that
// the decoded data is the same as the input to the encode() method
if ($result['@name'] === 'data') {
unset($result['@name']);
}
return $result;
} else {
throw new InvalidArgumentException('XML string is invalid');
}
}
}

View File

@@ -2,7 +2,7 @@
namespace Kirby\Data;
use Exception;
use Kirby\Exception\InvalidArgumentException;
use Spyc;
/**
@@ -42,29 +42,33 @@ class Yaml extends Handler
/**
* Parses an encoded YAML string and returns a multi-dimensional array
*
* @param string $yaml
* @param mixed $string
* @return array
*/
public static function decode($yaml): array
public static function decode($string): array
{
if ($yaml === null) {
if ($string === null) {
return [];
}
if (is_array($yaml) === true) {
return $yaml;
if (is_array($string) === true) {
return $string;
}
if (is_string($string) === false) {
throw new InvalidArgumentException('Invalid YAML data; please pass a string');
}
// remove BOM
$yaml = str_replace("\xEF\xBB\xBF", '', $yaml);
$result = Spyc::YAMLLoadString($yaml);
$string = str_replace("\xEF\xBB\xBF", '', $string);
$result = Spyc::YAMLLoadString($string);
if (is_array($result)) {
return $result;
} else {
// apparently Spyc always returns an array, even for invalid YAML syntax
// so this Exception should currently never be thrown
throw new Exception('YAML string is invalid'); // @codeCoverageIgnore
throw new InvalidArgumentException('The YAML data cannot be parsed'); // @codeCoverageIgnore
}
}
}

View File

@@ -2,6 +2,7 @@
namespace Kirby\Database;
use Closure;
use Exception;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Toolkit\A;
@@ -230,7 +231,7 @@ class Database
}
/**
* Sets the exception mode for the next query
* Sets the exception mode
*
* @param bool $fail
* @return \Kirby\Database\Database
@@ -369,7 +370,7 @@ class Database
$this->statement->execute($bindings);
$this->affected = $this->statement->rowCount();
$this->lastId = $this->connection->lastInsertId();
$this->lastId = Str::startsWith($query, 'insert ', true) ? $this->connection->lastInsertId() : null;
$this->lastError = null;
// store the final sql to add it to the trace later
@@ -395,9 +396,6 @@ class Database
'error' => $this->lastError
]);
// reset some stuff
$this->fail = false;
// return true or false on success or failure
return $this->lastError === null;
}
@@ -426,7 +424,11 @@ class Database
}
// define the default flag for the fetch method
$flags = $options['fetch'] === 'array' ? PDO::FETCH_ASSOC : PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE;
if ($options['fetch'] instanceof Closure || $options['fetch'] === 'array') {
$flags = PDO::FETCH_ASSOC;
} else {
$flags = PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE;
}
// add optional flags
if (empty($options['flag']) === false) {
@@ -434,7 +436,7 @@ class Database
}
// set the fetch mode
if ($options['fetch'] === 'array') {
if ($options['fetch'] instanceof Closure || $options['fetch'] === 'array') {
$this->statement->setFetchMode($flags);
} else {
$this->statement->setFetchMode($flags, $options['fetch']);
@@ -443,6 +445,13 @@ class Database
// fetch that stuff
$results = $this->statement->{$options['method']}();
// apply the fetch closure to all results if given
if ($options['fetch'] instanceof Closure) {
foreach ($results as $key => $result) {
$results[$key] = $options['fetch']($result, $key);
}
}
if ($options['iterator'] === 'array') {
return $this->lastResult = $results;
}
@@ -559,6 +568,11 @@ class Database
}
}
// update cache
if (in_array($table, $this->tableWhitelist) !== true) {
$this->tableWhitelist[] = $table;
}
return true;
}
@@ -571,7 +585,17 @@ class Database
public function dropTable($table): bool
{
$sql = $this->sql()->dropTable($table);
return $this->execute($sql['query'], $sql['bindings']);
if ($this->execute($sql['query'], $sql['bindings']) !== true) {
return false;
}
// update cache
$key = array_search($this->tableWhitelist, $table);
if ($key !== false) {
unset($this->tableWhitelist[$key]);
}
return true;
}
/**

View File

@@ -2,7 +2,7 @@
namespace Kirby\Database;
use InvalidArgumentException;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Toolkit\Config;
/**
@@ -16,8 +16,6 @@ use Kirby\Toolkit\Config;
*/
class Db
{
const ERROR_UNKNOWN_METHOD = 0;
/**
* Query shortcuts
*
@@ -35,10 +33,11 @@ class Db
/**
* (Re)connect the database
*
* @param array $params Pass [] to use the default params from the config
* @param array|null $params Pass `[]` to use the default params from the config,
* don't pass any argument to get the current connection
* @return \Kirby\Database\Database
*/
public static function connect(array $params = null)
public static function connect(?array $params = null)
{
if ($params === null && static::$connection !== null) {
return static::$connection;
@@ -46,14 +45,15 @@ class Db
// try to connect with the default
// connection settings if no params are set
$params = $params ?? [
$defaults = [
'type' => Config::get('db.type', 'mysql'),
'host' => Config::get('db.host', 'localhost'),
'user' => Config::get('db.user', 'root'),
'password' => Config::get('db.password', ''),
'database' => Config::get('db.database', ''),
'prefix' => Config::get('db.prefix', ''),
'prefix' => Config::get('db.prefix', '')
];
$params = $params ?? $defaults;
return static::$connection = new Database($params);
}
@@ -61,7 +61,7 @@ class Db
/**
* Returns the current database connection
*
* @return \Kirby\Database\Database
* @return \Kirby\Database\Database|null
*/
public static function connection()
{
@@ -69,7 +69,7 @@ class Db
}
/**
* Sets the current table, which should be queried. Returns a
* Sets the current table which should be queried. Returns a
* Query object, which can be used to build a full query for
* that table.
*
@@ -83,7 +83,7 @@ class Db
}
/**
* Executes a raw sql query which expects a set of results
* Executes a raw SQL query which expects a set of results
*
* @param string $query
* @param array $bindings
@@ -97,21 +97,22 @@ class Db
}
/**
* Executes a raw sql query which expects no set of results (i.e. update, insert, delete)
* Executes a raw SQL query which expects no set of results (i.e. update, insert, delete)
*
* @param string $query
* @param array $bindings
* @return mixed
* @return bool
*/
public static function execute(string $query, array $bindings = [])
public static function execute(string $query, array $bindings = []): bool
{
$db = static::connect();
return $db->execute($query, $bindings);
}
/**
* Magic calls for other static db methods,
* which are redircted to the database class if available
* Magic calls for other static Db methods are
* redirected to either a predefined query or
* the respective method of the Database object
*
* @param string $method
* @param mixed $arguments
@@ -123,20 +124,21 @@ class Db
return static::$queries[$method](...$arguments);
}
if (is_callable([static::$connection, $method]) === true) {
if (static::$connection !== null && method_exists(static::$connection, $method) === true) {
return call_user_func_array([static::$connection, $method], $arguments);
}
throw new InvalidArgumentException('Invalid static Db method: ' . $method, static::ERROR_UNKNOWN_METHOD);
throw new InvalidArgumentException('Invalid static Db method: ' . $method);
}
}
/**
* Shortcut for select clauses
* Shortcut for SELECT clauses
* @codeCoverageIgnore
*
* @param string $table The name of the table, which should be queried
* @param string $table The name of the table which should be queried
* @param mixed $columns Either a string with columns or an array of column names
* @param mixed $where The where clause. Can be a string or an array
* @param mixed $where The WHERE clause; can be a string or an array
* @param string $order
* @param int $offset
* @param int $limit
@@ -148,10 +150,11 @@ Db::$queries['select'] = function (string $table, $columns = '*', $where = null,
/**
* Shortcut for selecting a single row in a table
* @codeCoverageIgnore
*
* @param string $table The name of the table, which should be queried
* @param string $table The name of the table which should be queried
* @param mixed $columns Either a string with columns or an array of column names
* @param mixed $where The where clause. Can be a string or an array
* @param mixed $where The WHERE clause; can be a string or an array
* @param string $order
* @param int $offset
* @param int $limit
@@ -163,10 +166,11 @@ Db::$queries['first'] = Db::$queries['row'] = Db::$queries['one'] = function (st
/**
* Returns only values from a single column
* @codeCoverageIgnore
*
* @param string $table The name of the table, which should be queried
* @param string $table The name of the table which should be queried
* @param string $column The name of the column to select from
* @param mixed $where The where clause. Can be a string or an array
* @param mixed $where The WHERE clause; can be a string or an array
* @param string $order
* @param int $offset
* @param int $limit
@@ -178,93 +182,101 @@ Db::$queries['column'] = function (string $table, string $column, $where = null,
/**
* Shortcut for inserting a new row into a table
* @codeCoverageIgnore
*
* @param string $table The name of the table, which should be queried
* @param array $values An array of values, which should be inserted
* @return bool
* @param string $table The name of the table which should be queried
* @param array $values An array of values which should be inserted
* @return int ID of the inserted row
*/
Db::$queries['insert'] = function (string $table, array $values) {
Db::$queries['insert'] = function (string $table, array $values): int {
return Db::table($table)->insert($values);
};
/**
* Shortcut for updating a row in a table
* @codeCoverageIgnore
*
* @param string $table The name of the table, which should be queried
* @param array $values An array of values, which should be inserted
* @param mixed $where An optional where clause
* @param string $table The name of the table which should be queried
* @param array $values An array of values which should be inserted
* @param mixed $where An optional WHERE clause
* @return bool
*/
Db::$queries['update'] = function (string $table, array $values, $where = null) {
Db::$queries['update'] = function (string $table, array $values, $where = null): bool {
return Db::table($table)->where($where)->update($values);
};
/**
* Shortcut for deleting rows in a table
* @codeCoverageIgnore
*
* @param string $table The name of the table, which should be queried
* @param mixed $where An optional where clause
* @param string $table The name of the table which should be queried
* @param mixed $where An optional WHERE clause
* @return bool
*/
Db::$queries['delete'] = function (string $table, $where = null) {
Db::$queries['delete'] = function (string $table, $where = null): bool {
return Db::table($table)->where($where)->delete();
};
/**
* Shortcut for counting rows in a table
* @codeCoverageIgnore
*
* @param string $table The name of the table, which should be queried
* @param mixed $where An optional where clause
* @param string $table The name of the table which should be queried
* @param mixed $where An optional WHERE clause
* @return int
*/
Db::$queries['count'] = function (string $table, $where = null) {
Db::$queries['count'] = function (string $table, $where = null): int {
return Db::table($table)->where($where)->count();
};
/**
* Shortcut for calculating the minimum value in a column
* @codeCoverageIgnore
*
* @param string $table The name of the table, which should be queried
* @param string $table The name of the table which should be queried
* @param string $column The name of the column of which the minimum should be calculated
* @param mixed $where An optional where clause
* @return mixed
* @param mixed $where An optional WHERE clause
* @return float
*/
Db::$queries['min'] = function (string $table, string $column, $where = null) {
Db::$queries['min'] = function (string $table, string $column, $where = null): float {
return Db::table($table)->where($where)->min($column);
};
/**
* Shortcut for calculating the maximum value in a column
* @codeCoverageIgnore
*
* @param string $table The name of the table, which should be queried
* @param string $table The name of the table which should be queried
* @param string $column The name of the column of which the maximum should be calculated
* @param mixed $where An optional where clause
* @return mixed
* @param mixed $where An optional WHERE clause
* @return float
*/
Db::$queries['max'] = function (string $table, string $column, $where = null) {
Db::$queries['max'] = function (string $table, string $column, $where = null): float {
return Db::table($table)->where($where)->max($column);
};
/**
* Shortcut for calculating the average value in a column
* @codeCoverageIgnore
*
* @param string $table The name of the table, which should be queried
* @param string $table The name of the table which should be queried
* @param string $column The name of the column of which the average should be calculated
* @param mixed $where An optional where clause
* @return mixed
* @param mixed $where An optional WHERE clause
* @return float
*/
Db::$queries['avg'] = function (string $table, string $column, $where = null) {
Db::$queries['avg'] = function (string $table, string $column, $where = null): float {
return Db::table($table)->where($where)->avg($column);
};
/**
* Shortcut for calculating the sum of all values in a column
* @codeCoverageIgnore
*
* @param string $table The name of the table, which should be queried
* @param string $table The name of the table which should be queried
* @param string $column The name of the column of which the sum should be calculated
* @param mixed $where An optional where clause
* @return mixed
* @param mixed $where An optional WHERE clause
* @return float
*/
Db::$queries['sum'] = function (string $table, string $column, $where = null) {
Db::$queries['sum'] = function (string $table, string $column, $where = null): float {
return Db::table($table)->where($where)->sum($column);
};

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