Update Composer packages

This commit is contained in:
Paul Nicoué 2024-12-20 12:37:35 +01:00
parent fed629e646
commit fb8fa2afbb
306 changed files with 3542 additions and 50986 deletions

315
composer.lock generated
View file

@ -8,16 +8,16 @@
"packages": [
{
"name": "claviska/simpleimage",
"version": "4.0.2",
"version": "4.0.6",
"source": {
"type": "git",
"url": "https://github.com/claviska/SimpleImage.git",
"reference": "226d507cca0c8400d69bee7eb324158e3cbe246e"
"reference": "969de5e61810ef91f6f83c475b192c4841367dfa"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/claviska/SimpleImage/zipball/226d507cca0c8400d69bee7eb324158e3cbe246e",
"reference": "226d507cca0c8400d69bee7eb324158e3cbe246e",
"url": "https://api.github.com/repos/claviska/SimpleImage/zipball/969de5e61810ef91f6f83c475b192c4841367dfa",
"reference": "969de5e61810ef91f6f83c475b192c4841367dfa",
"shasum": ""
},
"require": {
@ -49,7 +49,7 @@
"description": "A PHP class that makes working with images as simple as possible.",
"support": {
"issues": "https://github.com/claviska/SimpleImage/issues",
"source": "https://github.com/claviska/SimpleImage/tree/4.0.2"
"source": "https://github.com/claviska/SimpleImage/tree/4.0.6"
},
"funding": [
{
@ -57,20 +57,20 @@
"type": "github"
}
],
"time": "2023-03-20T15:27:20+00:00"
"time": "2023-07-27T16:48:12+00:00"
},
{
"name": "composer/semver",
"version": "3.3.2",
"version": "3.4.0",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
"reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9"
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9",
"reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9",
"url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32",
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32",
"shasum": ""
},
"require": {
@ -120,9 +120,9 @@
"versioning"
],
"support": {
"irc": "irc://irc.freenode.org/composer",
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues",
"source": "https://github.com/composer/semver/tree/3.3.2"
"source": "https://github.com/composer/semver/tree/3.4.0"
},
"funding": [
{
@ -138,20 +138,20 @@
"type": "tidelift"
}
],
"time": "2022-04-01T19:23:25+00:00"
"time": "2023-08-31T09:50:34+00:00"
},
{
"name": "filp/whoops",
"version": "2.15.2",
"version": "2.15.4",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
"reference": "aac9304c5ed61bf7b1b7a6064bf9806ab842ce73"
"reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filp/whoops/zipball/aac9304c5ed61bf7b1b7a6064bf9806ab842ce73",
"reference": "aac9304c5ed61bf7b1b7a6064bf9806ab842ce73",
"url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546",
"reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546",
"shasum": ""
},
"require": {
@ -201,7 +201,7 @@
],
"support": {
"issues": "https://github.com/filp/whoops/issues",
"source": "https://github.com/filp/whoops/tree/2.15.2"
"source": "https://github.com/filp/whoops/tree/2.15.4"
},
"funding": [
{
@ -209,25 +209,25 @@
"type": "github"
}
],
"time": "2023-04-12T12:00:00+00:00"
"time": "2023-11-03T12:00:00+00:00"
},
{
"name": "getkirby/cms",
"version": "3.9.4",
"version": "3.9.8.2",
"source": {
"type": "git",
"url": "https://github.com/getkirby/kirby.git",
"reference": "282b1e25faa0bc24c903237a7484dc45fa475c36"
"reference": "40ae4e59227684709d45b202cb96f643da8684eb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/getkirby/kirby/zipball/282b1e25faa0bc24c903237a7484dc45fa475c36",
"reference": "282b1e25faa0bc24c903237a7484dc45fa475c36",
"url": "https://api.github.com/repos/getkirby/kirby/zipball/40ae4e59227684709d45b202cb96f643da8684eb",
"reference": "40ae4e59227684709d45b202cb96f643da8684eb",
"shasum": ""
},
"require": {
"claviska/simpleimage": "4.0.2",
"composer/semver": "3.3.2",
"claviska/simpleimage": "4.0.6",
"composer/semver": "3.4.0",
"ext-ctype": "*",
"ext-curl": "*",
"ext-dom": "*",
@ -239,15 +239,15 @@
"ext-mbstring": "*",
"ext-openssl": "*",
"ext-simplexml": "*",
"filp/whoops": "2.15.2",
"filp/whoops": "2.15.4",
"getkirby/composer-installer": "^1.2.1",
"laminas/laminas-escaper": "2.12.0",
"michelf/php-smartypants": "1.8.1",
"php": ">=8.0.0 <8.3.0",
"phpmailer/phpmailer": "6.8.0",
"symfony/polyfill-intl-idn": "1.27.0",
"symfony/polyfill-mbstring": "1.27.0",
"symfony/yaml": "5.4.21"
"phpmailer/phpmailer": "6.8.1",
"symfony/polyfill-intl-idn": "1.28.0",
"symfony/polyfill-mbstring": "1.28.0",
"symfony/yaml": "5.4.30"
},
"replace": {
"symfony/polyfill-php72": "*"
@ -259,6 +259,7 @@
"ext-fileinfo": "Improved mime type detection for files",
"ext-intl": "Improved i18n number formatting",
"ext-memcached": "Support for the Memcached cache driver",
"ext-sodium": "Support for the crypto class and more robust session handling",
"ext-zip": "Support for ZIP archive file functions",
"ext-zlib": "Sanitization and validation for svgz files"
},
@ -310,7 +311,7 @@
"type": "custom"
}
],
"time": "2023-04-21T09:23:46+00:00"
"time": "2024-08-24T20:21:30+00:00"
},
{
"name": "getkirby/composer-installer",
@ -617,16 +618,16 @@
},
{
"name": "phpmailer/phpmailer",
"version": "v6.8.0",
"version": "v6.8.1",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "df16b615e371d81fb79e506277faea67a1be18f1"
"reference": "e88da8d679acc3824ff231fdc553565b802ac016"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/df16b615e371d81fb79e506277faea67a1be18f1",
"reference": "df16b615e371d81fb79e506277faea67a1be18f1",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e88da8d679acc3824ff231fdc553565b802ac016",
"reference": "e88da8d679acc3824ff231fdc553565b802ac016",
"shasum": ""
},
"require": {
@ -636,13 +637,13 @@
"php": ">=5.5.0"
},
"require-dev": {
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.2",
"dealerdirect/phpcodesniffer-composer-installer": "^1.0",
"doctrine/annotations": "^1.2.6 || ^1.13.3",
"php-parallel-lint/php-console-highlighter": "^1.0.0",
"php-parallel-lint/php-parallel-lint": "^1.3.2",
"phpcompatibility/php-compatibility": "^9.3.5",
"roave/security-advisories": "dev-latest",
"squizlabs/php_codesniffer": "^3.7.1",
"squizlabs/php_codesniffer": "^3.7.2",
"yoast/phpunit-polyfills": "^1.0.4"
},
"suggest": {
@ -685,7 +686,7 @@
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
"support": {
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.8.0"
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.8.1"
},
"funding": [
{
@ -693,20 +694,20 @@
"type": "github"
}
],
"time": "2023-03-06T14:43:22+00:00"
"time": "2023-08-29T08:26:30+00:00"
},
{
"name": "psr/log",
"version": "3.0.0",
"version": "3.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
"reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
"url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
"reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
"shasum": ""
},
"require": {
@ -741,9 +742,9 @@
"psr-3"
],
"support": {
"source": "https://github.com/php-fig/log/tree/3.0.0"
"source": "https://github.com/php-fig/log/tree/3.0.2"
},
"time": "2021-07-14T16:46:02+00:00"
"time": "2024-09-11T13:17:53+00:00"
},
{
"name": "sylvainjule/matomo",
@ -852,20 +853,20 @@
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.27.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "5bbc823adecdae860bb64756d639ecfec17b050a"
"reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a",
"reference": "5bbc823adecdae860bb64756d639ecfec17b050a",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
"reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=7.2"
},
"provide": {
"ext-ctype": "*"
@ -875,12 +876,9 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
@ -914,7 +912,7 @@
"portable"
],
"support": {
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0"
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0"
},
"funding": [
{
@ -930,20 +928,20 @@
"type": "tidelift"
}
],
"time": "2022-11-03T14:55:06+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
"version": "v1.27.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
"reference": "639084e360537a19f9ee352433b84ce831f3d2da"
"reference": "ecaafce9f77234a6a449d29e49267ba10499116d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da",
"reference": "639084e360537a19f9ee352433b84ce831f3d2da",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d",
"reference": "ecaafce9f77234a6a449d29e49267ba10499116d",
"shasum": ""
},
"require": {
@ -956,12 +954,12 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
},
"branch-alias": {
"dev-main": "1.28-dev"
}
},
"autoload": {
@ -1001,7 +999,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0"
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0"
},
"funding": [
{
@ -1017,36 +1015,33 @@
"type": "tidelift"
}
],
"time": "2022-11-03T14:55:06+00:00"
"time": "2023-01-26T09:30:37+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.27.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6"
"reference": "3833d7255cc303546435cb650316bff708a1c75c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6",
"reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
"reference": "3833d7255cc303546435cb650316bff708a1c75c",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=7.2"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
@ -1085,7 +1080,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0"
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
},
"funding": [
{
@ -1101,20 +1096,20 @@
"type": "tidelift"
}
],
"time": "2022-11-03T14:55:06+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.27.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
"reference": "42292d99c55abe617799667f454222c54c60e229"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
"reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229",
"reference": "42292d99c55abe617799667f454222c54c60e229",
"shasum": ""
},
"require": {
@ -1128,12 +1123,12 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
},
"branch-alias": {
"dev-main": "1.28-dev"
}
},
"autoload": {
@ -1168,7 +1163,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0"
},
"funding": [
{
@ -1184,20 +1179,96 @@
"type": "tidelift"
}
],
"time": "2022-11-03T14:55:06+00:00"
"time": "2023-07-28T09:04:16+00:00"
},
{
"name": "symfony/yaml",
"version": "v5.4.21",
"name": "symfony/polyfill-php81",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "3713e20d93e46e681e51605d213027e48dab3469"
"url": "https://github.com/symfony/polyfill-php81.git",
"reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/3713e20d93e46e681e51605d213027e48dab3469",
"reference": "3713e20d93e46e681e51605d213027e48dab3469",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
"reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
"shasum": ""
},
"require": {
"php": ">=7.2"
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Php81\\": ""
},
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/yaml",
"version": "v5.4.30",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "c6980e82a6656f6ebfabfd82f7585794cb122554"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/c6980e82a6656f6ebfabfd82f7585794cb122554",
"reference": "c6980e82a6656f6ebfabfd82f7585794cb122554",
"shasum": ""
},
"require": {
@ -1243,7 +1314,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/yaml/tree/v5.4.21"
"source": "https://github.com/symfony/yaml/tree/v5.4.30"
},
"funding": [
{
@ -1259,33 +1330,42 @@
"type": "tidelift"
}
],
"time": "2023-02-21T19:46:44+00:00"
"time": "2023-10-27T18:36:14+00:00"
},
{
"name": "twig/twig",
"version": "v3.6.0",
"version": "v3.17.1",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "106c170d08e8415d78be2d16c3d057d0d108262b"
"reference": "677ef8da6497a03048192aeeb5aa3018e379ac71"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/106c170d08e8415d78be2d16c3d057d0d108262b",
"reference": "106c170d08e8415d78be2d16c3d057d0d108262b",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/677ef8da6497a03048192aeeb5aa3018e379ac71",
"reference": "677ef8da6497a03048192aeeb5aa3018e379ac71",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"php": ">=8.0.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-mbstring": "^1.3"
"symfony/polyfill-mbstring": "^1.3",
"symfony/polyfill-php81": "^1.29"
},
"require-dev": {
"phpstan/phpstan": "^2.0",
"psr/container": "^1.0|^2.0",
"symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0"
"symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
},
"type": "library",
"autoload": {
"files": [
"src/Resources/core.php",
"src/Resources/debug.php",
"src/Resources/escaper.php",
"src/Resources/string_loader.php"
],
"psr-4": {
"Twig\\": "src/"
}
@ -1318,7 +1398,7 @@
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
"source": "https://github.com/twigphp/Twig/tree/v3.6.0"
"source": "https://github.com/twigphp/Twig/tree/v3.17.1"
},
"funding": [
{
@ -1330,20 +1410,20 @@
"type": "tidelift"
}
],
"time": "2023-05-03T19:06:57+00:00"
"time": "2024-12-12T09:58:10+00:00"
},
{
"name": "wearejust/kirby-twig",
"version": "5.0",
"version": "5.0.2",
"source": {
"type": "git",
"url": "https://github.com/wearejust/kirby-twig.git",
"reference": "b8951bb5bdbeb829f492ee55709a2bdcc9d7475e"
"reference": "0baba0ab1e6129b1a9ed879191e4e324406d57ec"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/wearejust/kirby-twig/zipball/b8951bb5bdbeb829f492ee55709a2bdcc9d7475e",
"reference": "b8951bb5bdbeb829f492ee55709a2bdcc9d7475e",
"url": "https://api.github.com/repos/wearejust/kirby-twig/zipball/0baba0ab1e6129b1a9ed879191e4e324406d57ec",
"reference": "0baba0ab1e6129b1a9ed879191e4e324406d57ec",
"shasum": ""
},
"require": {
@ -1376,20 +1456,21 @@
],
"description": "Twig templating support for Kirby CMS",
"support": {
"source": "https://github.com/wearejust/kirby-twig/tree/5.0"
"issues": "https://github.com/wearejust/kirby-twig/issues",
"source": "https://github.com/wearejust/kirby-twig/tree/5.0.2"
},
"time": "2023-02-24T12:16:24+00:00"
"time": "2024-04-27T12:57:44+00:00"
}
],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"stability-flags": {},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": ">=7.3.0 <8.1.0"
},
"platform-dev": [],
"plugin-api-version": "2.3.0"
"platform-dev": {},
"plugin-api-version": "2.6.0"
}

View file

@ -31,6 +31,7 @@ For bug fixes, please create a new branch following the name scheme: `fix/issue_
- Every bug fix should include a [unit test](#tests) to avoid future regressions. Let us know if you need help with that.
- Make sure your code [style](#style) matches ours and includes [comments/in-code documentation](#documentation).
- Make sure your branch is up to date with the latest state on the `develop` branch. [Rebase](https://help.github.com/articles/about-pull-request-merges/) changes before you send the PR.
- Please *don't* commit updated dist files in the `panel/dist` folder to avoid merge conflicts. We only build the dist files on release. Your branch should only contain changes to the source files.
### Features
@ -41,6 +42,7 @@ For features create a new branch following the name scheme: `feature/issue_numbe
- New features should include [unit tests](#tests). Let us know if you need help with that.
- Make your code [style](#style) matches ours and includes [comments/in-code documentation](#documentation).
- Make sure your branch is up to date with the latest state on the `develop` branch. [Rebase](https://help.github.com/articles/about-pull-request-merges/) changes before you send the PR.
- Please *don't* commit updated dist files in the `panel/dist` folder to avoid merge conflicts. We only build the dist files on release. Your branch should only contain changes to the source files.
We try to bundle features in our major releases, e.g. `3.x`. That is why we might only review and, if accepted, merge your PR once an appropriate release is upcoming. Please understand that we cannot merge all feature ideas or that it might take a while. Check out the [roadmap](https://roadmap.getkirby.com) to see upcoming releases.
@ -90,8 +92,6 @@ The Panel doesn't have extensive test coverage yet. That's an area we are still
We use [vitest](https://vitest.dev) for unit tests for JavaScript and Vue components - `.test.js` files next to the actual JavaScript/Vue file.
For integration tests, we use [cypress](https://www.cypress.io) - `.e2e.js` files.
## And last…
Let us know [in the forum](https://forum.getkirby.com) if you have questions.

View file

@ -21,7 +21,7 @@ Kirby is not free software. However, you can try Kirby and the Starterkit on you
### Contribute
**Found a bug?**
Please post all bug reports in our [issue tracker](https://github.com/getkirby/kirby/issues).
Please post all bugs as individual reports in our [issue tracker](https://github.com/getkirby/kirby/issues).
**Suggest a feature**
If you have ideas for a feature or enhancement for Kirby, please use our [feedback platform](https://feedback.getkirby.com).

View file

@ -1,7 +1,7 @@
##
## Bundle of CA Root Certificates
##
## Certificate data from Mozilla as of: Tue Jan 10 04:12:06 2023 GMT
## Certificate data from Mozilla as of: Tue Jul 2 03:12:04 2024 GMT
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
@ -14,7 +14,7 @@
## Just configure this file as the SSLCACertificateFile.
##
## Conversion done with mk-ca-bundle.pl version 1.29.
## SHA256: 90c470e705b4b5f36f09684dc50e2b79c8b86989a848b62cd1a7bd6460ee65f6
## SHA256: 456ff095dde6dd73354c5c28c73d9c06f53b61a803963414cb91a1d92945cdd3
##
@ -200,27 +200,6 @@ vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
-----END CERTIFICATE-----
Security Communication Root CA
==============================
-----BEGIN CERTIFICATE-----
MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
FL39vmwLAw==
-----END CERTIFICATE-----
XRamp Global CA Root
====================
-----BEGIN CERTIFICATE-----
@ -603,26 +582,6 @@ NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
-----END CERTIFICATE-----
Hongkong Post Root CA 1
=======================
-----BEGIN CERTIFICATE-----
MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
-----END CERTIFICATE-----
SecureSign RootCA11
===================
-----BEGIN CERTIFICATE-----
@ -689,39 +648,6 @@ YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
kpeDMdmztcpHWD9f
-----END CERTIFICATE-----
Autoridad de Certificacion Firmaprofesional CIF A62634068
=========================================================
-----BEGIN CERTIFICATE-----
MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
-----END CERTIFICATE-----
Izenpe.com
==========
-----BEGIN CERTIFICATE-----
@ -1261,40 +1187,6 @@ Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems
WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
-----END CERTIFICATE-----
E-Tugra Certification Authority
===============================
-----BEGIN CERTIFICATE-----
MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w
DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls
ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw
NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx
QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl
cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD
DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd
hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K
CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g
ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ
BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0
E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz
rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq
jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5
dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB
/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG
MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK
kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO
XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807
VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo
a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc
dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV
KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT
Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0
8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G
C7TbO6Orb1wdtn7os4I07QZcJA==
-----END CERTIFICATE-----
T-TeleSec GlobalRoot Class 2
============================
-----BEGIN CERTIFICATE-----
@ -2708,36 +2600,6 @@ vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+
CAezNIm8BZ/3Hobui3A=
-----END CERTIFICATE-----
GLOBALTRUST 2020
================
-----BEGIN CERTIFICATE-----
MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx
IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT
VCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYxMDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAh
BgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAy
MDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWi
D59bRatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9ZYybNpyrO
VPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3QWPKzv9pj2gOlTblzLmM
CcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPwyJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCm
fecqQjuCgGOlYx8ZzHyyZqjC0203b+J+BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKA
A1GqtH6qRNdDYfOiaxaJSaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9OR
JitHHmkHr96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj04KlG
DfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9MedKZssCz3AwyIDMvU
clOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIwq7ejMZdnrY8XD2zHc+0klGvIg5rQ
mjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1Ud
IwQYMBaAFNwuH9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA
VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJCXtzoRlgHNQIw
4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd6IwPS3BD0IL/qMy/pJTAvoe9
iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS
8cE54+X1+NZK3TTN+2/BT+MAi1bikvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2
HcqtbepBEX4tdJP7wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxS
vTOBTI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6CMUO+1918
oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn4rnvyOL2NSl6dPrFf4IF
YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl
gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg==
-----END CERTIFICATE-----
ANF Secure Server Root CA
=========================
-----BEGIN CERTIFICATE-----
@ -3276,55 +3138,6 @@ AwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozmut6Dacpps6kFtZaSF4fC0urQe87YQVt8
rgIwRt7qy12a7DLCZRawTDBcMPPaTnOGBtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR
-----END CERTIFICATE-----
E-Tugra Global Root CA RSA v3
=============================
-----BEGIN CERTIFICATE-----
MIIF8zCCA9ugAwIBAgIUDU3FzRYilZYIfrgLfxUGNPt5EDQwDQYJKoZIhvcNAQELBQAwgYAxCzAJ
BgNVBAYTAlRSMQ8wDQYDVQQHEwZBbmthcmExGTAXBgNVBAoTEEUtVHVncmEgRUJHIEEuUy4xHTAb
BgNVBAsTFEUtVHVncmEgVHJ1c3QgQ2VudGVyMSYwJAYDVQQDEx1FLVR1Z3JhIEdsb2JhbCBSb290
IENBIFJTQSB2MzAeFw0yMDAzMTgwOTA3MTdaFw00NTAzMTIwOTA3MTdaMIGAMQswCQYDVQQGEwJU
UjEPMA0GA1UEBxMGQW5rYXJhMRkwFwYDVQQKExBFLVR1Z3JhIEVCRyBBLlMuMR0wGwYDVQQLExRF
LVR1Z3JhIFRydXN0IENlbnRlcjEmMCQGA1UEAxMdRS1UdWdyYSBHbG9iYWwgUm9vdCBDQSBSU0Eg
djMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCiZvCJt3J77gnJY9LTQ91ew6aEOErx
jYG7FL1H6EAX8z3DeEVypi6Q3po61CBxyryfHUuXCscxuj7X/iWpKo429NEvx7epXTPcMHD4QGxL
sqYxYdE0PD0xesevxKenhOGXpOhL9hd87jwH7eKKV9y2+/hDJVDqJ4GohryPUkqWOmAalrv9c/SF
/YP9f4RtNGx/ardLAQO/rWm31zLZ9Vdq6YaCPqVmMbMWPcLzJmAy01IesGykNz709a/r4d+ABs8q
QedmCeFLl+d3vSFtKbZnwy1+7dZ5ZdHPOrbRsV5WYVB6Ws5OUDGAA5hH5+QYfERaxqSzO8bGwzrw
bMOLyKSRBfP12baqBqG3q+Sx6iEUXIOk/P+2UNOMEiaZdnDpwA+mdPy70Bt4znKS4iicvObpCdg6
04nmvi533wEKb5b25Y08TVJ2Glbhc34XrD2tbKNSEhhw5oBOM/J+JjKsBY04pOZ2PJ8QaQ5tndLB
eSBrW88zjdGUdjXnXVXHt6woq0bM5zshtQoK5EpZ3IE1S0SVEgpnpaH/WwAH0sDM+T/8nzPyAPiM
bIedBi3x7+PmBvrFZhNb/FAHnnGGstpvdDDPk1Po3CLW3iAfYY2jLqN4MpBs3KwytQXk9TwzDdbg
h3cXTJ2w2AmoDVf3RIXwyAS+XF1a4xeOVGNpf0l0ZAWMowIDAQABo2MwYTAPBgNVHRMBAf8EBTAD
AQH/MB8GA1UdIwQYMBaAFLK0ruYt9ybVqnUtdkvAG1Mh0EjvMB0GA1UdDgQWBBSytK7mLfcm1ap1
LXZLwBtTIdBI7zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAImocn+M684uGMQQ
gC0QDP/7FM0E4BQ8Tpr7nym/Ip5XuYJzEmMmtcyQ6dIqKe6cLcwsmb5FJ+Sxce3kOJUxQfJ9emN4
38o2Fi+CiJ+8EUdPdk3ILY7r3y18Tjvarvbj2l0Upq7ohUSdBm6O++96SmotKygY/r+QLHUWnw/q
ln0F7psTpURs+APQ3SPh/QMSEgj0GDSz4DcLdxEBSL9htLX4GdnLTeqjjO/98Aa1bZL0SmFQhO3s
SdPkvmjmLuMxC1QLGpLWgti2omU8ZgT5Vdps+9u1FGZNlIM7zR6mK7L+d0CGq+ffCsn99t2HVhjY
sCxVYJb6CH5SkPVLpi6HfMsg2wY+oF0Dd32iPBMbKaITVaA9FCKvb7jQmhty3QUBjYZgv6Rn7rWl
DdF/5horYmbDB7rnoEgcOMPpRfunf/ztAmgayncSd6YAVSgU7NbHEqIbZULpkejLPoeJVF3Zr52X
nGnnCv8PWniLYypMfUeUP95L6VPQMPHF9p5J3zugkaOj/s1YzOrfr28oO6Bpm4/srK4rVJ2bBLFH
IK+WEj5jlB0E5y67hscMmoi/dkfv97ALl2bSRM9gUgfh1SxKOidhd8rXj+eHDjD/DLsE4mHDosiX
YY60MGo8bcIHX0pzLz/5FooBZu+6kcpSV3uu1OYP3Qt6f4ueJiDPO++BcYNZ
-----END CERTIFICATE-----
E-Tugra Global Root CA ECC v3
=============================
-----BEGIN CERTIFICATE-----
MIICpTCCAiqgAwIBAgIUJkYZdzHhT28oNt45UYbm1JeIIsEwCgYIKoZIzj0EAwMwgYAxCzAJBgNV
BAYTAlRSMQ8wDQYDVQQHEwZBbmthcmExGTAXBgNVBAoTEEUtVHVncmEgRUJHIEEuUy4xHTAbBgNV
BAsTFEUtVHVncmEgVHJ1c3QgQ2VudGVyMSYwJAYDVQQDEx1FLVR1Z3JhIEdsb2JhbCBSb290IENB
IEVDQyB2MzAeFw0yMDAzMTgwOTQ2NThaFw00NTAzMTIwOTQ2NThaMIGAMQswCQYDVQQGEwJUUjEP
MA0GA1UEBxMGQW5rYXJhMRkwFwYDVQQKExBFLVR1Z3JhIEVCRyBBLlMuMR0wGwYDVQQLExRFLVR1
Z3JhIFRydXN0IENlbnRlcjEmMCQGA1UEAxMdRS1UdWdyYSBHbG9iYWwgUm9vdCBDQSBFQ0MgdjMw
djAQBgcqhkjOPQIBBgUrgQQAIgNiAASOmCm/xxAeJ9urA8woLNheSBkQKczLWYHMjLiSF4mDKpL2
w6QdTGLVn9agRtwcvHbB40fQWxPa56WzZkjnIZpKT4YKfWzqTTKACrJ6CZtpS5iB4i7sAnCWH/31
Rs7K3IKjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU/4Ixcj75xGZsrTie0bBRiKWQ
zPUwHQYDVR0OBBYEFP+CMXI++cRmbK04ntGwUYilkMz1MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjO
PQQDAwNpADBmAjEA5gVYaWHlLcoNy/EZCL3W/VGSGn5jVASQkZo1kTmZ+gepZpO6yGjUij/67W4W
Aie3AjEA3VoXK3YdZUKWpqxdinlW2Iob35reX8dQj7FbcQwm32pAAOwzkSFxvmjkI6TZraE3
-----END CERTIFICATE-----
Security Communication RootCA3
==============================
-----BEGIN CERTIFICATE-----
@ -3370,3 +3183,386 @@ BggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3L
snNdo4gIxwwCMQDAqy0Obe0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70e
N9k=
-----END CERTIFICATE-----
BJCA Global Root CA1
====================
-----BEGIN CERTIFICATE-----
MIIFdDCCA1ygAwIBAgIQVW9l47TZkGobCdFsPsBsIDANBgkqhkiG9w0BAQsFADBUMQswCQYDVQQG
EwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJVFkxHTAbBgNVBAMMFEJK
Q0EgR2xvYmFsIFJvb3QgQ0ExMB4XDTE5MTIxOTAzMTYxN1oXDTQ0MTIxMjAzMTYxN1owVDELMAkG
A1UEBhMCQ04xJjAkBgNVBAoMHUJFSUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQD
DBRCSkNBIEdsb2JhbCBSb290IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPFm
CL3ZxRVhy4QEQaVpN3cdwbB7+sN3SJATcmTRuHyQNZ0YeYjjlwE8R4HyDqKYDZ4/N+AZspDyRhyS
sTphzvq3Rp4Dhtczbu33RYx2N95ulpH3134rhxfVizXuhJFyV9xgw8O558dnJCNPYwpj9mZ9S1Wn
P3hkSWkSl+BMDdMJoDIwOvqfwPKcxRIqLhy1BDPapDgRat7GGPZHOiJBhyL8xIkoVNiMpTAK+BcW
yqw3/XmnkRd4OJmtWO2y3syJfQOcs4ll5+M7sSKGjwZteAf9kRJ/sGsciQ35uMt0WwfCyPQ10WRj
eulumijWML3mG90Vr4TqnMfK9Q7q8l0ph49pczm+LiRvRSGsxdRpJQaDrXpIhRMsDQa4bHlW/KNn
MoH1V6XKV0Jp6VwkYe/iMBhORJhVb3rCk9gZtt58R4oRTklH2yiUAguUSiz5EtBP6DF+bHq/pj+b
OT0CFqMYs2esWz8sgytnOYFcuX6U1WTdno9uruh8W7TXakdI136z1C2OVnZOz2nxbkRs1CTqjSSh
GL+9V/6pmTW12xB3uD1IutbB5/EjPtffhZ0nPNRAvQoMvfXnjSXWgXSHRtQpdaJCbPdzied9v3pK
H9MiyRVVz99vfFXQpIsHETdfg6YmV6YBW37+WGgHqel62bno/1Afq8K0wM7o6v0PvY1NuLxxAgMB
AAGjQjBAMB0GA1UdDgQWBBTF7+3M2I0hxkjk49cULqcWk+WYATAPBgNVHRMBAf8EBTADAQH/MA4G
A1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAUoKsITQfI/Ki2Pm4rzc2IInRNwPWaZ+4
YRC6ojGYWUfo0Q0lHhVBDOAqVdVXUsv45Mdpox1NcQJeXyFFYEhcCY5JEMEE3KliawLwQ8hOnThJ
dMkycFRtwUf8jrQ2ntScvd0g1lPJGKm1Vrl2i5VnZu69mP6u775u+2D2/VnGKhs/I0qUJDAnyIm8
60Qkmss9vk/Ves6OF8tiwdneHg56/0OGNFK8YT88X7vZdrRTvJez/opMEi4r89fO4aL/3Xtw+zuh
TaRjAv04l5U/BXCga99igUOLtFkNSoxUnMW7gZ/NfaXvCyUeOiDbHPwfmGcCCtRzRBPbUYQaVQNW
4AB+dAb/OMRyHdOoP2gxXdMJxy6MW2Pg6Nwe0uxhHvLe5e/2mXZgLR6UcnHGCyoyx5JO1UbXHfmp
GQrI+pXObSOYqgs4rZpWDW+N8TEAiMEXnM0ZNjX+VVOg4DwzX5Ze4jLp3zO7Bkqp2IRzznfSxqxx
4VyjHQy7Ct9f4qNx2No3WqB4K/TUfet27fJhcKVlmtOJNBir+3I+17Q9eVzYH6Eze9mCUAyTF6ps
3MKCuwJXNq+YJyo5UOGwifUll35HaBC07HPKs5fRJNz2YqAo07WjuGS3iGJCz51TzZm+ZGiPTx4S
SPfSKcOYKMryMguTjClPPGAyzQWWYezyr/6zcCwupvI=
-----END CERTIFICATE-----
BJCA Global Root CA2
====================
-----BEGIN CERTIFICATE-----
MIICJTCCAaugAwIBAgIQLBcIfWQqwP6FGFkGz7RK6zAKBggqhkjOPQQDAzBUMQswCQYDVQQGEwJD
TjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJVFkxHTAbBgNVBAMMFEJKQ0Eg
R2xvYmFsIFJvb3QgQ0EyMB4XDTE5MTIxOTAzMTgyMVoXDTQ0MTIxMjAzMTgyMVowVDELMAkGA1UE
BhMCQ04xJjAkBgNVBAoMHUJFSUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRC
SkNBIEdsb2JhbCBSb290IENBMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABJ3LgJGNU2e1uVCxA/jl
SR9BIgmwUVJY1is0j8USRhTFiy8shP8sbqjV8QnjAyEUxEM9fMEsxEtqSs3ph+B99iK++kpRuDCK
/eHeGBIK9ke35xe/J4rUQUyWPGCWwf0VHKNCMEAwHQYDVR0OBBYEFNJKsVF/BvDRgh9Obl+rg/xI
1LCRMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2gAMGUCMBq8
W9f+qdJUDkpd0m2xQNz0Q9XSSpkZElaA94M04TVOSG0ED1cxMDAtsaqdAzjbBgIxAMvMh1PLet8g
UXOQwKhbYdDFUDn9hf7B43j4ptZLvZuHjw/l1lOWqzzIQNph91Oj9w==
-----END CERTIFICATE-----
Sectigo Public Server Authentication Root E46
=============================================
-----BEGIN CERTIFICATE-----
MIICOjCCAcGgAwIBAgIQQvLM2htpN0RfFf51KBC49DAKBggqhkjOPQQDAzBfMQswCQYDVQQGEwJH
QjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1YmxpYyBTZXJ2
ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwHhcNMjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5
WjBfMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0
aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUr
gQQAIgNiAAR2+pmpbiDt+dd34wc7qNs9Xzjoq1WmVk/WSOrsfy2qw7LFeeyZYX8QeccCWvkEN/U0
NSt3zn8gj1KjAIns1aeibVvjS5KToID1AZTc8GgHHs3u/iVStSBDHBv+6xnOQ6OjQjBAMB0GA1Ud
DgQWBBTRItpMWfFLXyY4qp3W7usNw/upYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
/zAKBggqhkjOPQQDAwNnADBkAjAn7qRaqCG76UeXlImldCBteU/IvZNeWBj7LRoAasm4PdCkT0RH
lAFWovgzJQxC36oCMB3q4S6ILuH5px0CMk7yn2xVdOOurvulGu7t0vzCAxHrRVxgED1cf5kDW21U
SAGKcw==
-----END CERTIFICATE-----
Sectigo Public Server Authentication Root R46
=============================================
-----BEGIN CERTIFICATE-----
MIIFijCCA3KgAwIBAgIQdY39i658BwD6qSWn4cetFDANBgkqhkiG9w0BAQwFADBfMQswCQYDVQQG
EwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1YmxpYyBT
ZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYwHhcNMjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1
OTU5WjBfMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1T
ZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYwggIiMA0GCSqGSIb3
DQEBAQUAA4ICDwAwggIKAoICAQCTvtU2UnXYASOgHEdCSe5jtrch/cSV1UgrJnwUUxDaef0rty2k
1Cz66jLdScK5vQ9IPXtamFSvnl0xdE8H/FAh3aTPaE8bEmNtJZlMKpnzSDBh+oF8HqcIStw+Kxwf
GExxqjWMrfhu6DtK2eWUAtaJhBOqbchPM8xQljeSM9xfiOefVNlI8JhD1mb9nxc4Q8UBUQvX4yMP
FF1bFOdLvt30yNoDN9HWOaEhUTCDsG3XME6WW5HwcCSrv0WBZEMNvSE6Lzzpng3LILVCJ8zab5vu
ZDCQOc2TZYEhMbUjUDM3IuM47fgxMMxF/mL50V0yeUKH32rMVhlATc6qu/m1dkmU8Sf4kaWD5Qaz
Yw6A3OASVYCmO2a0OYctyPDQ0RTp5A1NDvZdV3LFOxxHVp3i1fuBYYzMTYCQNFu31xR13NgESJ/A
wSiItOkcyqex8Va3e0lMWeUgFaiEAin6OJRpmkkGj80feRQXEgyDet4fsZfu+Zd4KKTIRJLpfSYF
plhym3kT2BFfrsU4YjRosoYwjviQYZ4ybPUHNs2iTG7sijbt8uaZFURww3y8nDnAtOFr94MlI1fZ
EoDlSfB1D++N6xybVCi0ITz8fAr/73trdf+LHaAZBav6+CuBQug4urv7qv094PPK306Xlynt8xhW
6aWWrL3DkJiy4Pmi1KZHQ3xtzwIDAQABo0IwQDAdBgNVHQ4EFgQUVnNYZJX5khqwEioEYnmhQBWI
IUkwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAC9c
mTz8Bl6MlC5w6tIyMY208FHVvArzZJ8HXtXBc2hkeqK5Duj5XYUtqDdFqij0lgVQYKlJfp/imTYp
E0RHap1VIDzYm/EDMrraQKFz6oOht0SmDpkBm+S8f74TlH7Kph52gDY9hAaLMyZlbcp+nv4fjFg4
exqDsQ+8FxG75gbMY/qB8oFM2gsQa6H61SilzwZAFv97fRheORKkU55+MkIQpiGRqRxOF3yEvJ+M
0ejf5lG5Nkc/kLnHvALcWxxPDkjBJYOcCj+esQMzEhonrPcibCTRAUH4WAP+JWgiH5paPHxsnnVI
84HxZmduTILA7rpXDhjvLpr3Etiga+kFpaHpaPi8TD8SHkXoUsCjvxInebnMMTzD9joiFgOgyY9m
pFuiTdaBJQbpdqQACj7LzTWb4OE4y2BThihCQRxEV+ioratF4yUQvNs+ZUH7G6aXD+u5dHn5Hrwd
Vw1Hr8Mvn4dGp+smWg9WY7ViYG4A++MnESLn/pmPNPW56MORcr3Ywx65LvKRRFHQV80MNNVIIb/b
E/FmJUNS0nAiNs2fxBx1IK1jcmMGDw4nztJqDby1ORrp0XZ60Vzk50lJLVU3aPAaOpg+VBeHVOmm
J1CJeyAvP/+/oYtKR5j/K3tJPsMpRmAYQqszKbrAKbkTidOIijlBO8n9pu0f9GBj39ItVQGL
-----END CERTIFICATE-----
SSL.com TLS RSA Root CA 2022
============================
-----BEGIN CERTIFICATE-----
MIIFiTCCA3GgAwIBAgIQb77arXO9CEDii02+1PdbkTANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQG
EwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQDDBxTU0wuY29tIFRMUyBSU0Eg
Um9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzQyMloXDTQ2MDgxOTE2MzQyMVowTjELMAkGA1UEBhMC
VVMxGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgUlNBIFJv
b3QgQ0EgMjAyMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANCkCXJPQIgSYT41I57u
9nTPL3tYPc48DRAokC+X94xI2KDYJbFMsBFMF3NQ0CJKY7uB0ylu1bUJPiYYf7ISf5OYt6/wNr/y
7hienDtSxUcZXXTzZGbVXcdotL8bHAajvI9AI7YexoS9UcQbOcGV0insS657Lb85/bRi3pZ7Qcac
oOAGcvvwB5cJOYF0r/c0WRFXCsJbwST0MXMwgsadugL3PnxEX4MN8/HdIGkWCVDi1FW24IBydm5M
R7d1VVm0U3TZlMZBrViKMWYPHqIbKUBOL9975hYsLfy/7PO0+r4Y9ptJ1O4Fbtk085zx7AGL0SDG
D6C1vBdOSHtRwvzpXGk3R2azaPgVKPC506QVzFpPulJwoxJF3ca6TvvC0PeoUidtbnm1jPx7jMEW
TO6Af77wdr5BUxIzrlo4QqvXDz5BjXYHMtWrifZOZ9mxQnUjbvPNQrL8VfVThxc7wDNY8VLS+YCk
8OjwO4s4zKTGkH8PnP2L0aPP2oOnaclQNtVcBdIKQXTbYxE3waWglksejBYSd66UNHsef8JmAOSq
g+qKkK3ONkRN0VHpvB/zagX9wHQfJRlAUW7qglFA35u5CCoGAtUjHBPW6dvbxrB6y3snm/vg1UYk
7RBLY0ulBY+6uB0rpvqR4pJSvezrZ5dtmi2fgTIFZzL7SAg/2SW4BCUvAgMBAAGjYzBhMA8GA1Ud
EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU+y437uOEeicuzRk1sTN8/9REQrkwHQYDVR0OBBYEFPsu
N+7jhHonLs0ZNbEzfP/UREK5MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAjYlt
hEUY8U+zoO9opMAdrDC8Z2awms22qyIZZtM7QbUQnRC6cm4pJCAcAZli05bg4vsMQtfhWsSWTVTN
j8pDU/0quOr4ZcoBwq1gaAafORpR2eCNJvkLTqVTJXojpBzOCBvfR4iyrT7gJ4eLSYwfqUdYe5by
iB0YrrPRpgqU+tvT5TgKa3kSM/tKWTcWQA673vWJDPFs0/dRa1419dvAJuoSc06pkZCmF8NsLzjU
o3KUQyxi4U5cMj29TH0ZR6LDSeeWP4+a0zvkEdiLA9z2tmBVGKaBUfPhqBVq6+AL8BQx1rmMRTqo
ENjwuSfr98t67wVylrXEj5ZzxOhWc5y8aVFjvO9nHEMaX3cZHxj4HCUp+UmZKbaSPaKDN7Egkaib
MOlqbLQjk2UEqxHzDh1TJElTHaE/nUiSEeJ9DU/1172iWD54nR4fK/4huxoTtrEoZP2wAgDHbICi
vRZQIA9ygV/MlP+7mea6kMvq+cYMwq7FGc4zoWtcu358NFcXrfA/rs3qr5nsLFR+jM4uElZI7xc7
P0peYNLcdDa8pUNjyw9bowJWCZ4kLOGGgYz+qxcs+sjiMho6/4UIyYOf8kpIEFR3N+2ivEC+5BB0
9+Rbu7nzifmPQdjH5FCQNYA+HLhNkNPU98OwoX6EyneSMSy4kLGCenROmxMmtNVQZlR4rmA=
-----END CERTIFICATE-----
SSL.com TLS ECC Root CA 2022
============================
-----BEGIN CERTIFICATE-----
MIICOjCCAcCgAwIBAgIQFAP1q/s3ixdAW+JDsqXRxDAKBggqhkjOPQQDAzBOMQswCQYDVQQGEwJV
UzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQDDBxTU0wuY29tIFRMUyBFQ0MgUm9v
dCBDQSAyMDIyMB4XDTIyMDgyNTE2MzM0OFoXDTQ2MDgxOTE2MzM0N1owTjELMAkGA1UEBhMCVVMx
GDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgRUNDIFJvb3Qg
Q0EgMjAyMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABEUpNXP6wrgjzhR9qLFNoFs27iosU8NgCTWy
JGYmacCzldZdkkAZDsalE3D07xJRKF3nzL35PIXBz5SQySvOkkJYWWf9lCcQZIxPBLFNSeR7T5v1
5wj4A4j3p8OSSxlUgaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBSJjy+j6CugFFR7
81a4Jl9nOAuc0DAdBgNVHQ4EFgQUiY8vo+groBRUe/NWuCZfZzgLnNAwDgYDVR0PAQH/BAQDAgGG
MAoGCCqGSM49BAMDA2gAMGUCMFXjIlbp15IkWE8elDIPDAI2wv2sdDJO4fscgIijzPvX6yv/N33w
7deedWo1dlJF4AIxAMeNb0Igj762TVntd00pxCAgRWSGOlDGxK0tk/UYfXLtqc/ErFc2KAhl3zx5
Zn6g6g==
-----END CERTIFICATE-----
Atos TrustedRoot Root CA ECC TLS 2021
=====================================
-----BEGIN CERTIFICATE-----
MIICFTCCAZugAwIBAgIQPZg7pmY9kGP3fiZXOATvADAKBggqhkjOPQQDAzBMMS4wLAYDVQQDDCVB
dG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgRUNDIFRMUyAyMDIxMQ0wCwYDVQQKDARBdG9zMQswCQYD
VQQGEwJERTAeFw0yMTA0MjIwOTI2MjNaFw00MTA0MTcwOTI2MjJaMEwxLjAsBgNVBAMMJUF0b3Mg
VHJ1c3RlZFJvb3QgUm9vdCBDQSBFQ0MgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYT
AkRFMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEloZYKDcKZ9Cg3iQZGeHkBQcfl+3oZIK59sRxUM6K
DP/XtXa7oWyTbIOiaG6l2b4siJVBzV3dscqDY4PMwL502eCdpO5KTlbgmClBk1IQ1SQ4AjJn8ZQS
b+/Xxd4u/RmAo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR2KCXWfeBmmnoJsmo7jjPX
NtNPojAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMDaAAwZQIwW5kp85wxtolrbNa9d+F851F+
uDrNozZffPc8dz7kUK2o59JZDCaOMDtuCCrCp1rIAjEAmeMM56PDr9NJLkaCI2ZdyQAUEv049OGY
a3cpetskz2VAv9LcjBHo9H1/IISpQuQo
-----END CERTIFICATE-----
Atos TrustedRoot Root CA RSA TLS 2021
=====================================
-----BEGIN CERTIFICATE-----
MIIFZDCCA0ygAwIBAgIQU9XP5hmTC/srBRLYwiqipDANBgkqhkiG9w0BAQwFADBMMS4wLAYDVQQD
DCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgUlNBIFRMUyAyMDIxMQ0wCwYDVQQKDARBdG9zMQsw
CQYDVQQGEwJERTAeFw0yMTA0MjIwOTIxMTBaFw00MTA0MTcwOTIxMDlaMEwxLjAsBgNVBAMMJUF0
b3MgVHJ1c3RlZFJvb3QgUm9vdCBDQSBSU0EgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNV
BAYTAkRFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtoAOxHm9BYx9sKOdTSJNy/BB
l01Z4NH+VoyX8te9j2y3I49f1cTYQcvyAh5x5en2XssIKl4w8i1mx4QbZFc4nXUtVsYvYe+W/CBG
vevUez8/fEc4BKkbqlLfEzfTFRVOvV98r61jx3ncCHvVoOX3W3WsgFWZkmGbzSoXfduP9LVq6hdK
ZChmFSlsAvFr1bqjM9xaZ6cF4r9lthawEO3NUDPJcFDsGY6wx/J0W2tExn2WuZgIWWbeKQGb9Cpt
0xU6kGpn8bRrZtkh68rZYnxGEFzedUlnnkL5/nWpo63/dgpnQOPF943HhZpZnmKaau1Fh5hnstVK
PNe0OwANwI8f4UDErmwh3El+fsqyjW22v5MvoVw+j8rtgI5Y4dtXz4U2OLJxpAmMkokIiEjxQGMY
sluMWuPD0xeqqxmjLBvk1cbiZnrXghmmOxYsL3GHX0WelXOTwkKBIROW1527k2gV+p2kHYzygeBY
Br3JtuP2iV2J+axEoctr+hbxx1A9JNr3w+SH1VbxT5Aw+kUJWdo0zuATHAR8ANSbhqRAvNncTFd+
rrcztl524WWLZt+NyteYr842mIycg5kDcPOvdO3GDjbnvezBc6eUWsuSZIKmAMFwoW4sKeFYV+xa
fJlrJaSQOoD0IJ2azsct+bJLKZWD6TWNp0lIpw9MGZHQ9b8Q4HECAwEAAaNCMEAwDwYDVR0TAQH/
BAUwAwEB/zAdBgNVHQ4EFgQUdEmZ0f+0emhFdcN+tNzMzjkz2ggwDgYDVR0PAQH/BAQDAgGGMA0G
CSqGSIb3DQEBDAUAA4ICAQAjQ1MkYlxt/T7Cz1UAbMVWiLkO3TriJQ2VSpfKgInuKs1l+NsW4AmS
4BjHeJi78+xCUvuppILXTdiK/ORO/auQxDh1MoSf/7OwKwIzNsAQkG8dnK/haZPso0UvFJ/1TCpl
Q3IM98P4lYsU84UgYt1UU90s3BiVaU+DR3BAM1h3Egyi61IxHkzJqM7F78PRreBrAwA0JrRUITWX
AdxfG/F851X6LWh3e9NpzNMOa7pNdkTWwhWaJuywxfW70Xp0wmzNxbVe9kzmWy2B27O3Opee7c9G
slA9hGCZcbUztVdF5kJHdWoOsAgMrr3e97sPWD2PAzHoPYJQyi9eDF20l74gNAf0xBLh7tew2Vkt
afcxBPTy+av5EzH4AXcOPUIjJsyacmdRIXrMPIWo6iFqO9taPKU0nprALN+AnCng33eU0aKAQv9q
TFsR0PXNor6uzFFcw9VUewyu1rkGd4Di7wcaaMxZUa1+XGdrudviB0JbuAEFWDlN5LuYo7Ey7Nmj
1m+UI/87tyll5gfp77YZ6ufCOB0yiJA8EytuzO+rdwY0d4RPcuSBhPm5dDTedk+SKlOxJTnbPP/l
PqYO5Wue/9vsL3SD3460s6neFE3/MaNFcyT6lSnMEpcEoji2jbDwN/zIIX8/syQbPYtuzE2wFg2W
HYMfRsCbvUOZ58SWLs5fyQ==
-----END CERTIFICATE-----
TrustAsia Global Root CA G3
===========================
-----BEGIN CERTIFICATE-----
MIIFpTCCA42gAwIBAgIUZPYOZXdhaqs7tOqFhLuxibhxkw8wDQYJKoZIhvcNAQEMBQAwWjELMAkG
A1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dpZXMsIEluYy4xJDAiBgNVBAMM
G1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHMzAeFw0yMTA1MjAwMjEwMTlaFw00NjA1MTkwMjEw
MTlaMFoxCzAJBgNVBAYTAkNOMSUwIwYDVQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMu
MSQwIgYDVQQDDBtUcnVzdEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzMwggIiMA0GCSqGSIb3DQEBAQUA
A4ICDwAwggIKAoICAQDAMYJhkuSUGwoqZdC+BqmHO1ES6nBBruL7dOoKjbmzTNyPtxNST1QY4Sxz
lZHFZjtqz6xjbYdT8PfxObegQ2OwxANdV6nnRM7EoYNl9lA+sX4WuDqKAtCWHwDNBSHvBm3dIZwZ
Q0WhxeiAysKtQGIXBsaqvPPW5vxQfmZCHzyLpnl5hkA1nyDvP+uLRx+PjsXUjrYsyUQE49RDdT/V
P68czH5GX6zfZBCK70bwkPAPLfSIC7Epqq+FqklYqL9joDiR5rPmd2jE+SoZhLsO4fWvieylL1Ag
dB4SQXMeJNnKziyhWTXAyB1GJ2Faj/lN03J5Zh6fFZAhLf3ti1ZwA0pJPn9pMRJpxx5cynoTi+jm
9WAPzJMshH/x/Gr8m0ed262IPfN2dTPXS6TIi/n1Q1hPy8gDVI+lhXgEGvNz8teHHUGf59gXzhqc
D0r83ERoVGjiQTz+LISGNzzNPy+i2+f3VANfWdP3kXjHi3dqFuVJhZBFcnAvkV34PmVACxmZySYg
WmjBNb9Pp1Hx2BErW+Canig7CjoKH8GB5S7wprlppYiU5msTf9FkPz2ccEblooV7WIQn3MSAPmea
mseaMQ4w7OYXQJXZRe0Blqq/DPNL0WP3E1jAuPP6Z92bfW1K/zJMtSU7/xxnD4UiWQWRkUF3gdCF
TIcQcf+eQxuulXUtgQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEDk5PIj
7zjKsK5Xf/IhMBY027ySMB0GA1UdDgQWBBRA5OTyI+84yrCuV3/yITAWNNu8kjAOBgNVHQ8BAf8E
BAMCAQYwDQYJKoZIhvcNAQEMBQADggIBACY7UeFNOPMyGLS0XuFlXsSUT9SnYaP4wM8zAQLpw6o1
D/GUE3d3NZ4tVlFEbuHGLige/9rsR82XRBf34EzC4Xx8MnpmyFq2XFNFV1pF1AWZLy4jVe5jaN/T
G3inEpQGAHUNcoTpLrxaatXeL1nHo+zSh2bbt1S1JKv0Q3jbSwTEb93mPmY+KfJLaHEih6D4sTNj
duMNhXJEIlU/HHzp/LgV6FL6qj6jITk1dImmasI5+njPtqzn59ZW/yOSLlALqbUHM/Q4X6RJpstl
cHboCoWASzY9M/eVVHUl2qzEc4Jl6VL1XP04lQJqaTDFHApXB64ipCz5xUG3uOyfT0gA+QEEVcys
+TIxxHWVBqB/0Y0n3bOppHKH/lmLmnp0Ft0WpWIp6zqW3IunaFnT63eROfjXy9mPX1onAX1daBli
2MjN9LdyR75bl87yraKZk62Uy5P2EgmVtqvXO9A/EcswFi55gORngS1d7XB4tmBZrOFdRWOPyN9y
aFvqHbgB8X7754qz41SgOAngPN5C8sLtLpvzHzW2NtjjgKGLzZlkD8Kqq7HK9W+eQ42EVJmzbsAS
ZthwEPEGNTNDqJwuuhQxzhB/HIbjj9LV+Hfsm6vxL2PZQl/gZ4FkkfGXL/xuJvYz+NO1+MRiqzFR
JQJ6+N1rZdVtTTDIZbpoFGWsJwt0ivKH
-----END CERTIFICATE-----
TrustAsia Global Root CA G4
===========================
-----BEGIN CERTIFICATE-----
MIICVTCCAdygAwIBAgIUTyNkuI6XY57GU4HBdk7LKnQV1tcwCgYIKoZIzj0EAwMwWjELMAkGA1UE
BhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dpZXMsIEluYy4xJDAiBgNVBAMMG1Ry
dXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHNDAeFw0yMTA1MjAwMjEwMjJaFw00NjA1MTkwMjEwMjJa
MFoxCzAJBgNVBAYTAkNOMSUwIwYDVQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQw
IgYDVQQDDBtUcnVzdEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNi
AATxs8045CVD5d4ZCbuBeaIVXxVjAd7Cq92zphtnS4CDr5nLrBfbK5bKfFJV4hrhPVbwLxYI+hW8
m7tH5j/uqOFMjPXTNvk4XatwmkcN4oFBButJ+bAp3TPsUKV/eSm4IJijYzBhMA8GA1UdEwEB/wQF
MAMBAf8wHwYDVR0jBBgwFoAUpbtKl86zK3+kMd6Xg1mDpm9xy94wHQYDVR0OBBYEFKW7SpfOsyt/
pDHel4NZg6ZvccveMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjBe8usGzEkxn0AA
bbd+NvBNEU/zy4k6LHiRUKNbwMp1JvK/kF0LgoxgKJ/GcJpo5PECMFxYDlZ2z1jD1xCMuo6u47xk
dUfFVZDj/bpV6wfEU6s3qe4hsiFbYI89MvHVI5TWWA==
-----END CERTIFICATE-----
CommScope Public Trust ECC Root-01
==================================
-----BEGIN CERTIFICATE-----
MIICHTCCAaOgAwIBAgIUQ3CCd89NXTTxyq4yLzf39H91oJ4wCgYIKoZIzj0EAwMwTjELMAkGA1UE
BhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29tbVNjb3BlIFB1YmxpYyBUcnVz
dCBFQ0MgUm9vdC0wMTAeFw0yMTA0MjgxNzM1NDNaFw00NjA0MjgxNzM1NDJaME4xCzAJBgNVBAYT
AlVTMRIwEAYDVQQKDAlDb21tU2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3Qg
RUNDIFJvb3QtMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARLNumuV16ocNfQj3Rid8NeeqrltqLx
eP0CflfdkXmcbLlSiFS8LwS+uM32ENEp7LXQoMPwiXAZu1FlxUOcw5tjnSCDPgYLpkJEhRGnSjot
6dZoL0hOUysHP029uax3OVejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
A1UdDgQWBBSOB2LAUN3GGQYARnQE9/OufXVNMDAKBggqhkjOPQQDAwNoADBlAjEAnDPfQeMjqEI2
Jpc1XHvr20v4qotzVRVcrHgpD7oh2MSg2NED3W3ROT3Ek2DS43KyAjB8xX6I01D1HiXo+k515liW
pDVfG2XqYZpwI7UNo5uSUm9poIyNStDuiw7LR47QjRE=
-----END CERTIFICATE-----
CommScope Public Trust ECC Root-02
==================================
-----BEGIN CERTIFICATE-----
MIICHDCCAaOgAwIBAgIUKP2ZYEFHpgE6yhR7H+/5aAiDXX0wCgYIKoZIzj0EAwMwTjELMAkGA1UE
BhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29tbVNjb3BlIFB1YmxpYyBUcnVz
dCBFQ0MgUm9vdC0wMjAeFw0yMTA0MjgxNzQ0NTRaFw00NjA0MjgxNzQ0NTNaME4xCzAJBgNVBAYT
AlVTMRIwEAYDVQQKDAlDb21tU2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3Qg
RUNDIFJvb3QtMDIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAR4MIHoYx7l63FRD/cHB8o5mXxO1Q/M
MDALj2aTPs+9xYa9+bG3tD60B8jzljHz7aRP+KNOjSkVWLjVb3/ubCK1sK9IRQq9qEmUv4RDsNuE
SgMjGWdqb8FuvAY5N9GIIvejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
A1UdDgQWBBTmGHX/72DehKT1RsfeSlXjMjZ59TAKBggqhkjOPQQDAwNnADBkAjAmc0l6tqvmSfR9
Uj/UQQSugEODZXW5hYA4O9Zv5JOGq4/nich/m35rChJVYaoR4HkCMHfoMXGsPHED1oQmHhS48zs7
3u1Z/GtMMH9ZzkXpc2AVmkzw5l4lIhVtwodZ0LKOag==
-----END CERTIFICATE-----
CommScope Public Trust RSA Root-01
==================================
-----BEGIN CERTIFICATE-----
MIIFbDCCA1SgAwIBAgIUPgNJgXUWdDGOTKvVxZAplsU5EN0wDQYJKoZIhvcNAQELBQAwTjELMAkG
A1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29tbVNjb3BlIFB1YmxpYyBU
cnVzdCBSU0EgUm9vdC0wMTAeFw0yMTA0MjgxNjQ1NTRaFw00NjA0MjgxNjQ1NTNaME4xCzAJBgNV
BAYTAlVTMRIwEAYDVQQKDAlDb21tU2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1
c3QgUlNBIFJvb3QtMDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwSGWjDR1C45Ft
nYSkYZYSwu3D2iM0GXb26v1VWvZVAVMP8syMl0+5UMuzAURWlv2bKOx7dAvnQmtVzslhsuitQDy6
uUEKBU8bJoWPQ7VAtYXR1HHcg0Hz9kXHgKKEUJdGzqAMxGBWBB0HW0alDrJLpA6lfO741GIDuZNq
ihS4cPgugkY4Iw50x2tBt9Apo52AsH53k2NC+zSDO3OjWiE260f6GBfZumbCk6SP/F2krfxQapWs
vCQz0b2If4b19bJzKo98rwjyGpg/qYFlP8GMicWWMJoKz/TUyDTtnS+8jTiGU+6Xn6myY5QXjQ/c
Zip8UlF1y5mO6D1cv547KI2DAg+pn3LiLCuz3GaXAEDQpFSOm117RTYm1nJD68/A6g3czhLmfTif
BSeolz7pUcZsBSjBAg/pGG3svZwG1KdJ9FQFa2ww8esD1eo9anbCyxooSU1/ZOD6K9pzg4H/kQO9
lLvkuI6cMmPNn7togbGEW682v3fuHX/3SZtS7NJ3Wn2RnU3COS3kuoL4b/JOHg9O5j9ZpSPcPYeo
KFgo0fEbNttPxP/hjFtyjMcmAyejOQoBqsCyMWCDIqFPEgkBEa801M/XrmLTBQe0MXXgDW1XT2mH
+VepuhX2yFJtocucH+X8eKg1mp9BFM6ltM6UCBwJrVbl2rZJmkrqYxhTnCwuwwIDAQABo0IwQDAP
BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUN12mmnQywsL5x6YVEFm4
5P3luG0wDQYJKoZIhvcNAQELBQADggIBAK+nz97/4L1CjU3lIpbfaOp9TSp90K09FlxD533Ahuh6
NWPxzIHIxgvoLlI1pKZJkGNRrDSsBTtXAOnTYtPZKdVUvhwQkZyybf5Z/Xn36lbQnmhUQo8mUuJM
3y+Xpi/SB5io82BdS5pYV4jvguX6r2yBS5KPQJqTRlnLX3gWsWc+QgvfKNmwrZggvkN80V4aCRck
jXtdlemrwWCrWxhkgPut4AZ9HcpZuPN4KWfGVh2vtrV0KnahP/t1MJ+UXjulYPPLXAziDslg+Mkf
Foom3ecnf+slpoq9uC02EJqxWE2aaE9gVOX2RhOOiKy8IUISrcZKiX2bwdgt6ZYD9KJ0DLwAHb/W
NyVntHKLr4W96ioDj8z7PEQkguIBpQtZtjSNMgsSDesnwv1B10A8ckYpwIzqug/xBpMu95yo9GA+
o/E4Xo4TwbM6l4c/ksp4qRyv0LAbJh6+cOx69TOY6lz/KwsETkPdY34Op054A5U+1C0wlREQKC6/
oAI+/15Z0wUOlV9TRe9rh9VIzRamloPh37MG88EU26fsHItdkJANclHnYfkUyq+Dj7+vsQpZXdxc
1+SWrVtgHdqul7I52Qb1dgAT+GhMIbA1xNxVssnBQVocicCMb3SgazNNtQEo/a2tiRc7ppqEvOuM
6sRxJKi6KfkIsidWNTJf6jn7MZrVGczw
-----END CERTIFICATE-----
CommScope Public Trust RSA Root-02
==================================
-----BEGIN CERTIFICATE-----
MIIFbDCCA1SgAwIBAgIUVBa/O345lXGN0aoApYYNK496BU4wDQYJKoZIhvcNAQELBQAwTjELMAkG
A1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29tbVNjb3BlIFB1YmxpYyBU
cnVzdCBSU0EgUm9vdC0wMjAeFw0yMTA0MjgxNzE2NDNaFw00NjA0MjgxNzE2NDJaME4xCzAJBgNV
BAYTAlVTMRIwEAYDVQQKDAlDb21tU2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1
c3QgUlNBIFJvb3QtMDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDh+g77aAASyE3V
rCLENQE7xVTlWXZjpX/rwcRqmL0yjReA61260WI9JSMZNRTpf4mnG2I81lDnNJUDMrG0kyI9p+Kx
7eZ7Ti6Hmw0zdQreqjXnfuU2mKKuJZ6VszKWpCtYHu8//mI0SFHRtI1CrWDaSWqVcN3SAOLMV2MC
e5bdSZdbkk6V0/nLKR8YSvgBKtJjCW4k6YnS5cciTNxzhkcAqg2Ijq6FfUrpuzNPDlJwnZXjfG2W
Wy09X6GDRl224yW4fKcZgBzqZUPckXk2LHR88mcGyYnJ27/aaL8j7dxrrSiDeS/sOKUNNwFnJ5rp
M9kzXzehxfCrPfp4sOcsn/Y+n2Dg70jpkEUeBVF4GiwSLFworA2iI540jwXmojPOEXcT1A6kHkIf
hs1w/tkuFT0du7jyU1fbzMZ0KZwYszZ1OC4PVKH4kh+Jlk+71O6d6Ts2QrUKOyrUZHk2EOH5kQMr
eyBUzQ0ZGshBMjTRsJnhkB4BQDa1t/qp5Xd1pCKBXbCL5CcSD1SIxtuFdOa3wNemKfrb3vOTlycE
VS8KbzfFPROvCgCpLIscgSjX74Yxqa7ybrjKaixUR9gqiC6vwQcQeKwRoi9C8DfF8rhW3Q5iLc4t
Vn5V8qdE9isy9COoR+jUKgF4z2rDN6ieZdIs5fq6M8EGRPbmz6UNp2YINIos8wIDAQABo0IwQDAP
BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUR9DnsSL/nSz12Vdgs7Gx
cJXvYXowDQYJKoZIhvcNAQELBQADggIBAIZpsU0v6Z9PIpNojuQhmaPORVMbc0RTAIFhzTHjCLqB
KCh6krm2qMhDnscTJk3C2OVVnJJdUNjCK9v+5qiXz1I6JMNlZFxHMaNlNRPDk7n3+VGXu6TwYofF
1gbTl4MgqX67tiHCpQ2EAOHyJxCDut0DgdXdaMNmEMjRdrSzbymeAPnCKfWxkxlSaRosTKCL4BWa
MS/TiJVZbuXEs1DIFAhKm4sTg7GkcrI7djNB3NyqpgdvHSQSn8h2vS/ZjvQs7rfSOBAkNlEv41xd
gSGn2rtO/+YHqP65DSdsu3BaVXoT6fEqSWnHX4dXTEN5bTpl6TBcQe7rd6VzEojov32u5cSoHw2O
HG1QAk8mGEPej1WFsQs3BWDJVTkSBKEqz3EWnzZRSb9wO55nnPt7eck5HHisd5FUmrh1CoFSl+Nm
YWvtPjgelmFV4ZFUjO2MJB+ByRCac5krFk5yAD9UG/iNuovnFNa2RU9g7Jauwy8CTl2dlklyALKr
dVwPaFsdZcJfMw8eD/A7hvWwTruc9+olBdytoptLFwG+Qt81IR2tq670v64fG9PiO/yzcnMcmyiQ
iRM9HcEARwmWmjgb3bHPDcK0RPOWlc4yOo80nOAXx17Org3bhzjlP1v9mxnhMUF6cKojawHhRUzN
lM47ni3niAIi9G7oyOzWPPO5std3eqx7
-----END CERTIFICATE-----
Telekom Security TLS ECC Root 2020
==================================
-----BEGIN CERTIFICATE-----
MIICQjCCAcmgAwIBAgIQNjqWjMlcsljN0AFdxeVXADAKBggqhkjOPQQDAzBjMQswCQYDVQQGEwJE
RTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBHbWJIMSswKQYDVQQDDCJUZWxl
a29tIFNlY3VyaXR5IFRMUyBFQ0MgUm9vdCAyMDIwMB4XDTIwMDgyNTA3NDgyMFoXDTQ1MDgyNTIz
NTk1OVowYzELMAkGA1UEBhMCREUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkg
R21iSDErMCkGA1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgRUNDIFJvb3QgMjAyMDB2MBAGByqG
SM49AgEGBSuBBAAiA2IABM6//leov9Wq9xCazbzREaK9Z0LMkOsVGJDZos0MKiXrPk/OtdKPD/M1
2kOLAoC+b1EkHQ9rK8qfwm9QMuU3ILYg/4gND21Ju9sGpIeQkpT0CdDPf8iAC8GXs7s1J8nCG6NC
MEAwHQYDVR0OBBYEFONyzG6VmUex5rNhTNHLq+O6zd6fMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
AQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMHVSi7ekEE+uShCLsoRbQuHmKjYC2qBuGT8lv9pZ
Mo7k+5Dck2TOrbRBR2Diz6fLHgIwN0GMZt9Ba9aDAEH9L1r3ULRn0SyocddDypwnJJGDSA3PzfdU
ga/sf+Rn27iQ7t0l
-----END CERTIFICATE-----
Telekom Security TLS RSA Root 2023
==================================
-----BEGIN CERTIFICATE-----
MIIFszCCA5ugAwIBAgIQIZxULej27HF3+k7ow3BXlzANBgkqhkiG9w0BAQwFADBjMQswCQYDVQQG
EwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBHbWJIMSswKQYDVQQDDCJU
ZWxla29tIFNlY3VyaXR5IFRMUyBSU0EgUm9vdCAyMDIzMB4XDTIzMDMyODEyMTY0NVoXDTQ4MDMy
NzIzNTk1OVowYzELMAkGA1UEBhMCREUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJp
dHkgR21iSDErMCkGA1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgUlNBIFJvb3QgMjAyMzCCAiIw
DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAO01oYGA88tKaVvC+1GDrib94W7zgRJ9cUD/h3VC
KSHtgVIs3xLBGYSJwb3FKNXVS2xE1kzbB5ZKVXrKNoIENqil/Cf2SfHVcp6R+SPWcHu79ZvB7JPP
GeplfohwoHP89v+1VmLhc2o0mD6CuKyVU/QBoCcHcqMAU6DksquDOFczJZSfvkgdmOGjup5czQRx
UX11eKvzWarE4GC+j4NSuHUaQTXtvPM6Y+mpFEXX5lLRbtLevOP1Czvm4MS9Q2QTps70mDdsipWo
l8hHD/BeEIvnHRz+sTugBTNoBUGCwQMrAcjnj02r6LX2zWtEtefdi+zqJbQAIldNsLGyMcEWzv/9
FIS3R/qy8XDe24tsNlikfLMR0cN3f1+2JeANxdKz+bi4d9s3cXFH42AYTyS2dTd4uaNir73Jco4v
zLuu2+QVUhkHM/tqty1LkCiCc/4YizWN26cEar7qwU02OxY2kTLvtkCJkUPg8qKrBC7m8kwOFjQg
rIfBLX7JZkcXFBGk8/ehJImr2BrIoVyxo/eMbcgByU/J7MT8rFEz0ciD0cmfHdRHNCk+y7AO+oML
KFjlKdw/fKifybYKu6boRhYPluV75Gp6SG12mAWl3G0eQh5C2hrgUve1g8Aae3g1LDj1H/1Joy7S
WWO/gLCMk3PLNaaZlSJhZQNg+y+TS/qanIA7AgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAdBgNV
HQ4EFgQUtqeXgj10hZv3PJ+TmpV5dVKMbUcwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS2
p5eCPXSFm/c8n5OalXl1UoxtRzANBgkqhkiG9w0BAQwFAAOCAgEAqMxhpr51nhVQpGv7qHBFfLp+
sVr8WyP6Cnf4mHGCDG3gXkaqk/QeoMPhk9tLrbKmXauw1GLLXrtm9S3ul0A8Yute1hTWjOKWi0Fp
kzXmuZlrYrShF2Y0pmtjxrlO8iLpWA1WQdH6DErwM807u20hOq6OcrXDSvvpfeWxm4bu4uB9tPcy
/SKE8YXJN3nptT+/XOR0so8RYgDdGGah2XsjX/GO1WfoVNpbOms2b/mBsTNHM3dA+VKq3dSDz4V4
mZqTuXNnQkYRIer+CqkbGmVps4+uFrb2S1ayLfmlyOw7YqPta9BO1UAJpB+Y1zqlklkg5LB9zVtz
aL1txKITDmcZuI1CfmwMmm6gJC3VRRvcxAIU/oVbZZfKTpBQCHpCNfnqwmbU+AGuHrS+w6jv/naa
oqYfRvaE7fzbzsQCzndILIyy7MMAo+wsVRjBfhnu4S/yrYObnqsZ38aKL4x35bcF7DvB7L6Gs4a8
wPfc5+pbrrLMtTWGS9DiP7bY+A4A7l3j941Y/8+LN+ljX273CXE2whJdV/LItM3z7gLfEdxquVeE
HVlNjM7IDiPCtyaaEBRx/pOyiriA8A4QntOoUAw3gi/q4Iqd4Sw5/7W0cwDk90imc6y/st53BIe0
o82bNSQ3+pCTE4FCxpgmdTdmQRCsu/WU48IxK63nI1bMNSWSs1A=
-----END CERTIFICATE-----
FIRMAPROFESIONAL CA ROOT-A WEB
==============================
-----BEGIN CERTIFICATE-----
MIICejCCAgCgAwIBAgIQMZch7a+JQn81QYehZ1ZMbTAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJF
UzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UEYQwPVkFURVMtQTYyNjM0MDY4
MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENBIFJPT1QtQSBXRUIwHhcNMjIwNDA2MDkwMTM2
WhcNNDcwMzMxMDkwMTM2WjBuMQswCQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25h
bCBTQTEYMBYGA1UEYQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFM
IENBIFJPT1QtQSBXRUIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARHU+osEaR3xyrq89Zfe9MEkVz6
iMYiuYMQYneEMy3pA4jU4DP37XcsSmDq5G+tbbT4TIqk5B/K6k84Si6CcyvHZpsKjECcfIr28jlg
st7L7Ljkb+qbXbdTkBgyVcUgt5SjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUk+FD
Y1w8ndYn81LsF7Kpryz3dvgwHQYDVR0OBBYEFJPhQ2NcPJ3WJ/NS7Beyqa8s93b4MA4GA1UdDwEB
/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjAdfKR7w4l1M+E7qUW/Runpod3JIha3RxEL2Jq68cgL
cFBTApFwhVmpHqTm6iMxoAACMQD94vizrxa5HnPEluPBMBnYfubDl94cT7iJLzPrSA8Z94dGXSaQ
pYXFuXqUPoeovQA=
-----END CERTIFICATE-----

View file

@ -3,7 +3,7 @@
"description": "The Kirby 3 core",
"license": "proprietary",
"type": "kirby-cms",
"version": "3.9.4",
"version": "3.9.8.2",
"keywords": [
"kirby",
"cms",
@ -36,16 +36,16 @@
"ext-libxml": "*",
"ext-mbstring": "*",
"ext-openssl": "*",
"claviska/simpleimage": "4.0.2",
"composer/semver": "3.3.2",
"filp/whoops": "2.15.2",
"claviska/simpleimage": "4.0.6",
"composer/semver": "3.4.0",
"filp/whoops": "2.15.4",
"getkirby/composer-installer": "^1.2.1",
"laminas/laminas-escaper": "2.12.0",
"michelf/php-smartypants": "1.8.1",
"phpmailer/phpmailer": "6.8.0",
"symfony/polyfill-intl-idn": "1.27.0",
"symfony/polyfill-mbstring": "1.27.0",
"symfony/yaml": "5.4.21"
"phpmailer/phpmailer": "6.8.1",
"symfony/polyfill-intl-idn": "1.28.0",
"symfony/polyfill-mbstring": "1.28.0",
"symfony/yaml": "5.4.30"
},
"replace": {
"symfony/polyfill-php72": "*"
@ -57,6 +57,7 @@
"ext-fileinfo": "Improved mime type detection for files",
"ext-intl": "Improved i18n number formatting",
"ext-memcached": "Support for the Memcached cache driver",
"ext-sodium": "Support for the crypto class and more robust session handling",
"ext-zip": "Support for ZIP archive file functions",
"ext-zlib": "Sanitization and validation for svgz files"
},

152
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": "69b8764b73a3ee160520dca4ac70a53d",
"content-hash": "677f7cca91b0fc32ce6dd0c1b75fedfd",
"packages": [
{
"name": "claviska/simpleimage",
"version": "4.0.2",
"version": "4.0.6",
"source": {
"type": "git",
"url": "https://github.com/claviska/SimpleImage.git",
"reference": "226d507cca0c8400d69bee7eb324158e3cbe246e"
"reference": "969de5e61810ef91f6f83c475b192c4841367dfa"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/claviska/SimpleImage/zipball/226d507cca0c8400d69bee7eb324158e3cbe246e",
"reference": "226d507cca0c8400d69bee7eb324158e3cbe246e",
"url": "https://api.github.com/repos/claviska/SimpleImage/zipball/969de5e61810ef91f6f83c475b192c4841367dfa",
"reference": "969de5e61810ef91f6f83c475b192c4841367dfa",
"shasum": ""
},
"require": {
@ -49,7 +49,7 @@
"description": "A PHP class that makes working with images as simple as possible.",
"support": {
"issues": "https://github.com/claviska/SimpleImage/issues",
"source": "https://github.com/claviska/SimpleImage/tree/4.0.2"
"source": "https://github.com/claviska/SimpleImage/tree/4.0.6"
},
"funding": [
{
@ -57,20 +57,20 @@
"type": "github"
}
],
"time": "2023-03-20T15:27:20+00:00"
"time": "2023-07-27T16:48:12+00:00"
},
{
"name": "composer/semver",
"version": "3.3.2",
"version": "3.4.0",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
"reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9"
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9",
"reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9",
"url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32",
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32",
"shasum": ""
},
"require": {
@ -120,9 +120,9 @@
"versioning"
],
"support": {
"irc": "irc://irc.freenode.org/composer",
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues",
"source": "https://github.com/composer/semver/tree/3.3.2"
"source": "https://github.com/composer/semver/tree/3.4.0"
},
"funding": [
{
@ -138,20 +138,20 @@
"type": "tidelift"
}
],
"time": "2022-04-01T19:23:25+00:00"
"time": "2023-08-31T09:50:34+00:00"
},
{
"name": "filp/whoops",
"version": "2.15.2",
"version": "2.15.4",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
"reference": "aac9304c5ed61bf7b1b7a6064bf9806ab842ce73"
"reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filp/whoops/zipball/aac9304c5ed61bf7b1b7a6064bf9806ab842ce73",
"reference": "aac9304c5ed61bf7b1b7a6064bf9806ab842ce73",
"url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546",
"reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546",
"shasum": ""
},
"require": {
@ -201,7 +201,7 @@
],
"support": {
"issues": "https://github.com/filp/whoops/issues",
"source": "https://github.com/filp/whoops/tree/2.15.2"
"source": "https://github.com/filp/whoops/tree/2.15.4"
},
"funding": [
{
@ -209,7 +209,7 @@
"type": "github"
}
],
"time": "2023-04-12T12:00:00+00:00"
"time": "2023-11-03T12:00:00+00:00"
},
{
"name": "getkirby/composer-installer",
@ -437,16 +437,16 @@
},
{
"name": "phpmailer/phpmailer",
"version": "v6.8.0",
"version": "v6.8.1",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "df16b615e371d81fb79e506277faea67a1be18f1"
"reference": "e88da8d679acc3824ff231fdc553565b802ac016"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/df16b615e371d81fb79e506277faea67a1be18f1",
"reference": "df16b615e371d81fb79e506277faea67a1be18f1",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e88da8d679acc3824ff231fdc553565b802ac016",
"reference": "e88da8d679acc3824ff231fdc553565b802ac016",
"shasum": ""
},
"require": {
@ -456,13 +456,13 @@
"php": ">=5.5.0"
},
"require-dev": {
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.2",
"dealerdirect/phpcodesniffer-composer-installer": "^1.0",
"doctrine/annotations": "^1.2.6 || ^1.13.3",
"php-parallel-lint/php-console-highlighter": "^1.0.0",
"php-parallel-lint/php-parallel-lint": "^1.3.2",
"phpcompatibility/php-compatibility": "^9.3.5",
"roave/security-advisories": "dev-latest",
"squizlabs/php_codesniffer": "^3.7.1",
"squizlabs/php_codesniffer": "^3.7.2",
"yoast/phpunit-polyfills": "^1.0.4"
},
"suggest": {
@ -505,7 +505,7 @@
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
"support": {
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.8.0"
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.8.1"
},
"funding": [
{
@ -513,20 +513,20 @@
"type": "github"
}
],
"time": "2023-03-06T14:43:22+00:00"
"time": "2023-08-29T08:26:30+00:00"
},
{
"name": "psr/log",
"version": "3.0.0",
"version": "3.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
"reference": "79dff0b268932c640297f5208d6298f71855c03e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
"url": "https://api.github.com/repos/php-fig/log/zipball/79dff0b268932c640297f5208d6298f71855c03e",
"reference": "79dff0b268932c640297f5208d6298f71855c03e",
"shasum": ""
},
"require": {
@ -561,22 +561,22 @@
"psr-3"
],
"support": {
"source": "https://github.com/php-fig/log/tree/3.0.0"
"source": "https://github.com/php-fig/log/tree/3.0.1"
},
"time": "2021-07-14T16:46:02+00:00"
"time": "2024-08-21T13:31:24+00:00"
},
{
"name": "symfony/deprecation-contracts",
"version": "v2.5.2",
"version": "v2.5.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66"
"reference": "80d075412b557d41002320b96a096ca65aa2c98d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
"reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/80d075412b557d41002320b96a096ca65aa2c98d",
"reference": "80d075412b557d41002320b96a096ca65aa2c98d",
"shasum": ""
},
"require": {
@ -614,7 +614,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2"
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.3"
},
"funding": [
{
@ -630,20 +630,20 @@
"type": "tidelift"
}
],
"time": "2022-01-02T09:53:40+00:00"
"time": "2023-01-24T14:02:46+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.27.0",
"version": "v1.30.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "5bbc823adecdae860bb64756d639ecfec17b050a"
"reference": "0424dff1c58f028c451efff2045f5d92410bd540"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a",
"reference": "5bbc823adecdae860bb64756d639ecfec17b050a",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540",
"reference": "0424dff1c58f028c451efff2045f5d92410bd540",
"shasum": ""
},
"require": {
@ -657,9 +657,6 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -696,7 +693,7 @@
"portable"
],
"support": {
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0"
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0"
},
"funding": [
{
@ -712,20 +709,20 @@
"type": "tidelift"
}
],
"time": "2022-11-03T14:55:06+00:00"
"time": "2024-05-31T15:07:36+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
"version": "v1.27.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
"reference": "639084e360537a19f9ee352433b84ce831f3d2da"
"reference": "ecaafce9f77234a6a449d29e49267ba10499116d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da",
"reference": "639084e360537a19f9ee352433b84ce831f3d2da",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d",
"reference": "ecaafce9f77234a6a449d29e49267ba10499116d",
"shasum": ""
},
"require": {
@ -739,7 +736,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.27-dev"
"dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -783,7 +780,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0"
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0"
},
"funding": [
{
@ -799,20 +796,20 @@
"type": "tidelift"
}
],
"time": "2022-11-03T14:55:06+00:00"
"time": "2023-01-26T09:30:37+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.27.0",
"version": "v1.30.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6"
"reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6",
"reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb",
"reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb",
"shasum": ""
},
"require": {
@ -823,9 +820,6 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -867,7 +861,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0"
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0"
},
"funding": [
{
@ -883,20 +877,20 @@
"type": "tidelift"
}
],
"time": "2022-11-03T14:55:06+00:00"
"time": "2024-05-31T15:07:36+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.27.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
"reference": "42292d99c55abe617799667f454222c54c60e229"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
"reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229",
"reference": "42292d99c55abe617799667f454222c54c60e229",
"shasum": ""
},
"require": {
@ -911,7 +905,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.27-dev"
"dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -950,7 +944,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0"
},
"funding": [
{
@ -966,20 +960,20 @@
"type": "tidelift"
}
],
"time": "2022-11-03T14:55:06+00:00"
"time": "2023-07-28T09:04:16+00:00"
},
{
"name": "symfony/yaml",
"version": "v5.4.21",
"version": "v5.4.30",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "3713e20d93e46e681e51605d213027e48dab3469"
"reference": "c6980e82a6656f6ebfabfd82f7585794cb122554"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/3713e20d93e46e681e51605d213027e48dab3469",
"reference": "3713e20d93e46e681e51605d213027e48dab3469",
"url": "https://api.github.com/repos/symfony/yaml/zipball/c6980e82a6656f6ebfabfd82f7585794cb122554",
"reference": "c6980e82a6656f6ebfabfd82f7585794cb122554",
"shasum": ""
},
"require": {
@ -1025,7 +1019,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/yaml/tree/v5.4.21"
"source": "https://github.com/symfony/yaml/tree/v5.4.30"
},
"funding": [
{
@ -1041,7 +1035,7 @@
"type": "tidelift"
}
],
"time": "2023-02-21T19:46:44+00:00"
"time": "2023-10-27T18:36:14+00:00"
}
],
"packages-dev": [],
@ -1068,5 +1062,5 @@
"platform-overrides": {
"php": "8.0.0"
},
"plugin-api-version": "2.3.0"
"plugin-api-version": "2.6.0"
}

View file

@ -9,7 +9,7 @@ use Kirby\Form\Form;
return [
'default' => fn () => $this->user(),
'fields' => [
'avatar' => fn (User $user) => $user->avatar() ? $user->avatar()->crop(512) : null,
'avatar' => fn (User $user) => $user->avatar()?->crop(512),
'blueprint' => fn (User $user) => $user->blueprint(),
'content' => fn (User $user) => Form::for($user)->values(),
'email' => fn (User $user) => $user->email(),

View file

@ -1,6 +1,8 @@
<?php
use Kirby\Exception\Exception;
use Kirby\Filesystem\F;
use Kirby\Toolkit\Str;
/**
* User Routes
@ -79,10 +81,27 @@ return [
],
'method' => 'POST',
'action' => function (string $id) {
$this->user($id)->avatar()?->delete();
return $this->upload(
function ($source, $filename) use ($id) {
$type = F::type($filename);
if ($type !== 'image') {
throw new Exception([
'key' => 'file.type.invalid',
'data' => compact('type')
]);
}
$mime = F::mime($source);
if (Str::startsWith($mime, 'image/') !== true) {
throw new Exception([
'key' => 'file.mime.invalid',
'data' => compact('mime')
]);
}
// delete the old avatar
$this->user($id)->avatar()?->delete();
$props = [
'filename' => 'profile.' . F::extension($filename),
'template' => 'avatar',

View file

@ -199,7 +199,7 @@ return [
'slug' => Field::slug([
'required' => true,
'preselect' => $select === 'slug',
'path' => $page->parent() ? '/' . $page->parent()->id() . '/' : '/',
'path' => $page->parent() ? '/' . $page->parent()->uri() . '/' : '/',
'disabled' => $permissions->can('changeSlug') === false,
'wizard' => [
'text' => I18n::translate('page.changeSlug.fromTitle'),
@ -479,6 +479,26 @@ return [
];
}
$slugAppendix = Str::slug(I18n::translate('page.duplicate.appendix'));
$titleAppendix = I18n::translate('page.duplicate.appendix');
// if the item to be duplicated already exists
// add a suffix at the end of slug and title
$duplicateSlug = $page->slug() . '-' . $slugAppendix;
$siblingKeys = $page->parentModel()->childrenAndDrafts()->pluck('uid');
if (in_array($duplicateSlug, $siblingKeys) === true) {
$suffixCounter = 2;
$newSlug = $duplicateSlug . $suffixCounter;
while (in_array($newSlug, $siblingKeys) === true) {
$newSlug = $duplicateSlug . ++$suffixCounter;
}
$slugAppendix .= $suffixCounter;
$titleAppendix .= ' ' . $suffixCounter;
}
return [
'component' => 'k-form-dialog',
'props' => [
@ -487,8 +507,8 @@ return [
'value' => [
'children' => false,
'files' => false,
'slug' => $page->slug() . '-' . Str::slug(I18n::translate('page.duplicate.appendix')),
'title' => $page->title() . ' ' . I18n::translate('page.duplicate.appendix')
'slug' => $page->slug() . '-' . $slugAppendix,
'title' => $page->title() . ' ' . $titleAppendix
]
]
];

View file

@ -135,18 +135,14 @@ return [
/**
* 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 = []) {
// empty search query
if (empty(trim($query ?? '')) === true) {
return $collection->limit(0);
}
'search' => function (
App $kirby,
Collection $collection,
string|null $query = '',
array|string $params = []
): Collection|bool {
if (is_string($params) === true) {
$params = ['fields' => Str::split($params, '|')];
}
@ -158,30 +154,41 @@ return [
'words' => false,
];
$options = array_merge($defaults, $params);
$collection = clone $collection;
$options = array_merge($defaults, $params);
$query = trim($query ?? '');
// empty or too short search query
if (Str::length($query) < $options['minlength']) {
return $collection->limit(0);
}
$words = preg_replace('/(\s)/u', ',', $query);
$words = Str::split($words, ',', $options['minlength']);
$exact = $options['words'] ? '(\b' . preg_quote($query) . '\b)' : preg_quote($query);
$query = Str::lower($query);
if (empty($options['stopwords']) === false) {
$words = array_diff($words, $options['stopwords']);
}
$words = A::map(
$words,
fn ($value) => $options['words'] ? '\b' . preg_quote($value) . '\b' : preg_quote($value)
);
// returns an empty collection if there is no search word
if (empty($words) === true) {
return $collection->limit(0);
}
$preg = '!(' . implode('|', $words) . ')!i';
$words = A::map(
$words,
fn ($value) => Str::wrap(preg_quote($value), $options['words'] ? '\b' : '')
);
$exact = preg_quote($query);
if ($options['words']) {
$exact = '(\b' . $exact . '\b)';
}
$query = Str::lower($query);
$preg = '!(' . implode('|', $words) . ')!iu';
$scores = [];
$results = $collection->filter(function ($item) use ($query, $exact, $preg, $options, &$scores) {
$data = $item->content()->toArray();
$keys = array_keys($data);
@ -193,10 +200,10 @@ return [
$keys[] = 'role';
} elseif ($item instanceof Page) {
// apply the default score for pages
$options['score'] = array_merge([
'id' => 64,
'title' => 64,
], $options['score']);
$options['score'] = array_merge(
['id' => 64, 'title' => 64],
$options['score']
);
}
if (empty($options['fields']) === false) {
@ -229,7 +236,7 @@ return [
$scoring['hits'] += 1;
// check for exact query matches
} elseif ($matches = preg_match_all('!' . $exact . '!i', $value, $r)) {
} elseif ($matches = preg_match_all('!' . $exact . '!ui', $value, $r)) {
$scoring['score'] += 2 * $score;
$scoring['hits'] += $matches;
}
@ -242,6 +249,7 @@ return [
}
$scores[$item->id()] = $scoring;
return $scoring['hits'] > 0;
});

View file

@ -129,7 +129,7 @@ return [
'key' => 'validation.date.between',
'data' => [
'min' => $min->format($format),
'max' => $min->format($format)
'max' => $max->format($format)
]
]);
} elseif ($min && $value->isMin($min) === false) {

View file

@ -8,7 +8,7 @@ return [
* Default number that will be saved when a new page/user/file is created
*/
'default' => function ($default = null) {
return $this->toNumber($default);
return $this->toNumber($default) ?? '';
},
/**
* The lowest allowed number
@ -26,10 +26,10 @@ return [
* Allowed incremental steps between numbers (i.e `0.5`)
*/
'step' => function ($step = null) {
return $this->toNumber($step);
return $this->toNumber($step) ?? '';
},
'value' => function ($value = null) {
return $this->toNumber($value);
return $this->toNumber($value) ?? '';
}
],
'methods' => [

View file

@ -1,7 +1,6 @@
<?php
use Kirby\Cms\App;
use Kirby\Cms\Collection;
use Kirby\Cms\File;
use Kirby\Cms\Helpers;
use Kirby\Cms\Html;
@ -50,10 +49,13 @@ if (Helpers::hasOverride('attr') === false) { // @codeCoverageIgnore
if (Helpers::hasOverride('collection') === false) { // @codeCoverageIgnore
/**
* Returns the result of a collection by name
*
* @return \Kirby\Toolkit\Collection|null
* @todo 5.0 Add return type declaration
*/
function collection(string $name): Collection|null
function collection(string $name, array $options = [])
{
return App::instance()->collection($name);
return App::instance()->collection($name, $options);
}
}

View file

@ -60,7 +60,7 @@ return function ($kirby) {
}
],
[
'pattern' => $media . '/plugins/(:any)/(:any)/(:all).(css|map|gif|js|mjs|jpg|png|svg|webp|avif|woff2|woff|json)',
'pattern' => $media . '/plugins/(:any)/(:any)/(:all)\.(css|map|gif|js|mjs|jpg|png|svg|webp|avif|woff2|woff|json)',
'env' => 'media',
'action' => function (string $provider, string $pluginName, string $filename, string $extension) {
return PluginAssets::resolve($provider . '/' . $pluginName, $filename . '.' . $extension);

View file

@ -34,9 +34,9 @@ return [
],
'computed' => [
'reports' => function () {
$reports = [];
$model = $this->model();
$value = fn ($value) => $value === null ? null : $model->toString($value);
$reports = [];
$model = $this->model();
$toString = fn ($value) => $value === null ? null : $model->toString($value);
foreach ($this->reports as $report) {
if (is_string($report) === true) {
@ -47,14 +47,17 @@ return [
continue;
}
$info = $report['info'] ?? null;
$info = $report['info'] ?? null;
$label = $report['label'] ?? null;
$link = $report['link'] ?? null;
$value = $report['value'] ?? null;
$reports[] = [
'label' => I18n::translate($report['label'], $report['label']),
'value' => $value($report['value'] ?? null),
'info' => $value(I18n::translate($info, $info)),
'link' => $value($report['link'] ?? null),
'theme' => $value($report['theme'] ?? null)
'info' => $toString(I18n::translate($info, $info)),
'label' => $toString(I18n::translate($label, $label)),
'link' => $toString(I18n::translate($link, $link)),
'theme' => $toString($report['theme'] ?? null),
'value' => $toString(I18n::translate($value, $value))
];
}

View file

@ -3,13 +3,13 @@
"account.delete": "Delete your account",
"account.delete.confirm": "Do you really want to delete your account? You will be logged out immediately. Your account cannot be recovered.",
"add": "\u0414\u043e\u0431\u0430\u0432\u0438",
"add": "Добави",
"author": "Author",
"avatar": "Профилна снимка",
"back": "Назад",
"cancel": "\u041e\u0442\u043a\u0430\u0436\u0438",
"change": "\u041f\u0440\u043e\u043c\u0435\u043d\u0438",
"close": "\u0417\u0430\u0442\u0432\u043e\u0440\u0438",
"cancel": "Откажи",
"change": "Промени",
"close": "Затвори",
"confirm": "Ок",
"collapse": "Collapse",
"collapse.all": "Collapse All",
@ -21,17 +21,17 @@
"date.select": "Select a date",
"day": "Day",
"days.fri": "\u041f\u0442",
"days.mon": "\u041f\u043d",
"days.sat": "\u0421\u0431",
"days.sun": "\u041d\u0434",
"days.thu": "\u0427\u0442",
"days.tue": "\u0412\u0442",
"days.wed": "\u0421\u0440",
"days.fri": "Пт",
"days.mon": "Пн",
"days.sat": "Сб",
"days.sun": "Нд",
"days.thu": "Чт",
"days.tue": "Вт",
"days.wed": "Ср",
"debugging": "Debugging",
"delete": "\u0418\u0437\u0442\u0440\u0438\u0439",
"delete": "Изтрий",
"delete.all": "Delete all",
"dialog.files.empty": "No files to select",
@ -40,11 +40,11 @@
"dimensions": "Размери",
"disabled": "Disabled",
"discard": "\u041e\u0442\u043c\u0435\u043d\u0438",
"discard": "Отмени",
"download": "Download",
"duplicate": "Duplicate",
"edit": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439",
"edit": "Редактирай",
"email": "Email",
"email.placeholder": "mail@example.com",
@ -100,7 +100,7 @@
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
"error.file.type.forbidden": "Не е позволен ъплоуда на файлове от тип {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "\u0424\u0430\u0439\u043b\u044a\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d",
"error.file.undefined": "Файлът не може да бъде намерен",
"error.form.incomplete": "Моля коригирайте всички грешки във формата...",
"error.form.notSaved": "Формата не може да бъде запазена",
@ -143,7 +143,7 @@
"error.page.slug.maxlength": "Slug length must be less than \"{length}\" characters",
"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.undefined": "Страницата не може да бъде намерена",
"error.page.update.permission": "Не можете да обновите \"{slug}\"",
"error.section.files.max.plural": "Не можете да добавяте повече от {max} файлa в секция \"{section}\"",
@ -175,16 +175,17 @@
"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": "Потребителят не може да бъде изтрит",
"error.user.delete.lastAdmin": "Не можете да изтриете последния администратор",
"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.delete.permission": "Не е позволено да изтривате този потребител",
"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.notFound": "Потребителят не може да бъде намерен.",
"error.user.password.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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.notSame": "Моля, потвърдете паролата",
"error.user.password.undefined": "Потребителят няма парола",
"error.user.password.wrong": "Wrong password",
"error.user.role.invalid": "Моля въведете валидна роля",
@ -308,7 +309,7 @@
"hour": "Hour",
"import": "Import",
"info": "Info",
"insert": "\u0412\u043c\u044a\u043a\u043d\u0438",
"insert": "Вмъкни",
"insert.after": "Insert after",
"insert.before": "Insert before",
"install": "Инсталирай",
@ -326,7 +327,7 @@
"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": "Език",
"language.code": "Код",
"language.convert": "Направи по подразбиране",
"language.convert.confirm": "<p>Сигурни ли сте, че искате да зададете <strong>{name}</strong> за език по подразбиране? Действието не може да бъде отменено.</p><p>В случай, че в <strong>{name}</strong> има непреведено съдържание, то части от сайта ви могат да останат празни.</p>",
@ -347,7 +348,7 @@
"languages.secondary": "Второстепенни езици",
"languages.secondary.empty": "Все още няма второстепенни езици",
"license": "\u041b\u0438\u0446\u0435\u043d\u0437 \u0437\u0430 Kirby",
"license": "Лиценз за Kirby",
"license.buy": "Купи лиценз",
"license.register": "Регистрирай",
"license.manage": "Manage your licenses",
@ -359,7 +360,7 @@
"license.unregistered": "Това е нерегистрирана демо версия на Kirby",
"license.unregistered.label": "Unregistered",
"link": "\u0412\u0440\u044a\u0437\u043a\u0430",
"link": "Връзка",
"link.text": "Текстова връзка",
"loading": "Зареждане",
@ -396,18 +397,18 @@
"minutes": "Minutes",
"month": "Month",
"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.april": "Април",
"months.august": "Август",
"months.december": "Декември",
"months.february": "Февруари",
"months.january": "\u042f\u043d\u0443\u0430\u0440\u0438",
"months.july": "\u042e\u043b\u0438",
"months.june": "\u042e\u043d\u0438",
"months.march": "\u041c\u0430\u0440\u0442",
"months.may": "\u041c\u0430\u0439",
"months.november": "\u041d\u043e\u0435\u043c\u0432\u0440\u0438",
"months.october": "\u041e\u043a\u0442\u043e\u043c\u0432\u0440\u0438",
"months.september": "\u0421\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438",
"months.january": "Януари",
"months.july": "Юли",
"months.june": "Юни",
"months.march": "Март",
"months.may": "Май",
"months.november": "Ноември",
"months.october": "Октомври",
"months.september": "Септември",
"more": "Още",
"name": "Име",
@ -426,8 +427,8 @@
"orientation.square": "Квадрат",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "\u041f\u0440\u043e\u043c\u0435\u043d\u0438 URL",
"page.changeSlug.fromTitle": "\u0421\u044a\u0437\u0434\u0430\u0439\u0442\u0435 \u043e\u0442 \u0437\u0430\u0433\u043b\u0430\u0432\u0438\u0435\u0442\u043e",
"page.changeSlug": "Промени URL",
"page.changeSlug.fromTitle": "Създайте от заглавието",
"page.changeStatus": "Промени статус",
"page.changeStatus.position": "Моля изберете позиция",
"page.changeStatus.select": "Изберете нов статус",
@ -456,7 +457,7 @@
"pagination.page": "Страница",
"password": "\u041f\u0430\u0440\u043e\u043b\u0430",
"password": "Парола",
"paste": "Paste",
"paste.after": "Paste after",
"pixel": "Пиксел",
@ -466,12 +467,12 @@
"preview": "Preview",
"remove": "Премахни",
"rename": "Преименувай",
"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",
"replace": "Замести",
"retry": "Опитай пак",
"revert": "Отмени",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "\u0420\u043e\u043b\u044f",
"role": "Роля",
"role.admin.description": "The admin has all rights",
"role.admin.title": "Admin",
"role.all": "Всички",
@ -480,7 +481,7 @@
"role.nobody.description": "This is a fallback role without any permissions",
"role.nobody.title": "Nobody",
"save": "\u0417\u0430\u043f\u0438\u0448\u0438",
"save": "Запиши",
"search": "Търси",
"search.min": "Enter {min} characters to search",
"search.all": "Show all",
@ -495,7 +496,7 @@
"show": "Show",
"site.blueprint": "The site has no blueprint yet. You can define the setup in <strong>/site/blueprints/site.yml</strong>",
"size": "Размер",
"slug": "URL-\u0434\u043e\u0431\u0430\u0432\u043a\u0430",
"slug": "URL-добавка",
"sort": "Сортирай",
"stats.empty": "No reports",
@ -524,7 +525,7 @@
"today": "Днес",
"toolbar.button.code": "Код",
"toolbar.button.bold": "\u041f\u043e\u043b\u0443\u0447\u0435\u0440 \u0448\u0440\u0438\u0444\u0442",
"toolbar.button.bold": "Получер шрифт",
"toolbar.button.email": "Email",
"toolbar.button.headings": "Заглавия",
"toolbar.button.heading.1": "Заглавие 1",
@ -533,11 +534,11 @@
"toolbar.button.heading.4": "Heading 4",
"toolbar.button.heading.5": "Heading 5",
"toolbar.button.heading.6": "Heading 6",
"toolbar.button.italic": "\u041d\u0430\u043a\u043b\u043e\u043d\u0435\u043d \u0448\u0440\u0438\u0444\u0442",
"toolbar.button.italic": "Наклонен шрифт",
"toolbar.button.file": "Файл",
"toolbar.button.file.select": "Select a file",
"toolbar.button.file.upload": "Upload a file",
"toolbar.button.link": "\u0412\u0440\u044a\u0437\u043a\u0430",
"toolbar.button.link": "Връзка",
"toolbar.button.paragraph": "Paragraph",
"toolbar.button.strike": "Strike-through",
"toolbar.button.ol": "Подреден списък",
@ -561,7 +562,7 @@
"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.errors": "Грешка",
"upload.errors": "Error",
"upload.progress": "Uploading…",
"url": "Url",
@ -583,18 +584,18 @@
"users": "Потребители",
"version": "\u0412\u0435\u0440\u0441\u0438\u044f \u043d\u0430 Kirby",
"version": "Версия на Kirby",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
"view.account": "\u0412\u0430\u0448\u0438\u044f \u0430\u043a\u0430\u0443\u043d\u0442",
"view.installation": "\u0418\u043d\u0441\u0442\u0430\u043b\u0430\u0446\u0438\u044f",
"view.account": "Вашия акаунт",
"view.installation": "Инсталация",
"view.languages": "Езици",
"view.resetPassword": "Reset password",
"view.site": "Сайт",
"view.system": "System",
"view.users": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438",
"view.users": "Потребители",
"welcome": "Добре дошли",
"year": "Year",

View file

@ -7,7 +7,7 @@
"author": "Author",
"avatar": "Imatge del perfil",
"back": "Tornar",
"cancel": "Cancel\u00b7lar",
"cancel": "Cancel·lar",
"change": "Canviar",
"close": "Tancar",
"confirm": "Ok",
@ -143,7 +143,7 @@
"error.page.slug.maxlength": "La longitud del nom ha de tenir menys de caràcters \"{length}\"",
"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.undefined": "La pàgina 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}\"",
@ -176,13 +176,14 @@
"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.lastAdmin": "No es pot eliminar l'últim 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.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.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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",
@ -347,7 +348,7 @@
"languages.secondary": "Idiomes secundaris",
"languages.secondary.empty": "Encara no hi ha idiomes secundaris",
"license": "Llic\u00e8ncia Kirby",
"license": "Llicència Kirby",
"license.buy": "Comprar una llicència",
"license.register": "Registrar",
"license.manage": "Manage your licenses",
@ -359,7 +360,7 @@
"license.unregistered": "Aquesta és una demo no registrada de Kirby",
"license.unregistered.label": "Unregistered",
"link": "Enlla\u00e7",
"link": "Enllaç",
"link.text": "Enllaç de text",
"loading": "Carregant",
@ -403,7 +404,7 @@
"months.january": "Gener",
"months.july": "Juliol",
"months.june": "Juny",
"months.march": "Mar\u00e7",
"months.march": "Març",
"months.may": "Maig",
"months.november": "Novembre",
"months.october": "Octubre",
@ -427,7 +428,7 @@
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Canviar URL",
"page.changeSlug.fromTitle": "Crear a partir del t\u00edtol",
"page.changeSlug.fromTitle": "Crear a partir del títol",
"page.changeStatus": "Canviar l'estat",
"page.changeStatus.position": "Si us plau, seleccioneu una posició",
"page.changeStatus.select": "Seleccioneu un nou estat",
@ -454,7 +455,7 @@
"pages.status.listed": "Publicat",
"pages.status.unlisted": "Sense classificar",
"pagination.page": "Pàgina",
"pagination.page": "Page",
"password": "Contrasenya",
"paste": "Paste",
@ -466,7 +467,7 @@
"preview": "Preview",
"remove": "Eliminar",
"rename": "Canviar el nom",
"replace": "Reempla\u00e7ar",
"replace": "Reemplaçar",
"retry": "Reintentar",
"revert": "Revertir",
"revert.confirm": "Segur que voleu eliminar <strong>tots els canvis pendents desar</strong>?",
@ -495,7 +496,7 @@
"show": "Show",
"site.blueprint": "The site has no blueprint yet. You can define the setup in <strong>/site/blueprints/site.yml</strong>",
"size": "Tamany",
"slug": "URL-ap\u00e8ndix",
"slug": "URL-apèndix",
"sort": "Ordenar",
"stats.empty": "No reports",
@ -537,7 +538,7 @@
"toolbar.button.file": "Arxiu",
"toolbar.button.file.select": "Selecciona un fitxer",
"toolbar.button.file.upload": "Carrega un fitxer",
"toolbar.button.link": "Enlla\u00e7",
"toolbar.button.link": "Enllaç",
"toolbar.button.paragraph": "Paragraph",
"toolbar.button.strike": "Strike-through",
"toolbar.button.ol": "Llista ordenada",
@ -583,7 +584,7 @@
"users": "Usuaris",
"version": "Versi\u00f3 de Kirby",
"version": "Versió de Kirby",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",

View file

@ -1,14 +1,14 @@
{
"account.changeName": "Přejmenovat",
"account.changeName": "Přejmenovat uživatele",
"account.delete": "Smazat účet",
"account.delete.confirm": "Opravdu chcete smazat svůj účet? Budete okamžitě odhlášeni. Účet nemůže být zpětně obnoven.",
"add": "P\u0159idat",
"add": "Přidat",
"author": "Autor",
"avatar": "Profilov\u00fd obr\u00e1zek",
"avatar": "Profilový obrázek",
"back": "Zpět",
"cancel": "Zru\u0161it",
"change": "Zm\u011bnit",
"cancel": "Zrušit",
"change": "Změnit",
"close": "Zavřít",
"confirm": "Ok",
"collapse": "Sbalit",
@ -21,12 +21,12 @@
"date.select": "Vyberte datum",
"day": "Den",
"days.fri": "p\u00e1",
"days.fri": "pá",
"days.mon": "po",
"days.sat": "so",
"days.sun": "ne",
"days.thu": "\u010dt",
"days.tue": "\u00fat",
"days.thu": "čt",
"days.tue": "út",
"days.wed": "st",
"debugging": "Ladění",
@ -60,7 +60,7 @@
"error.access.view": "Nemáte oprávnění ke vstupu do této části panelu.",
"error.avatar.create.fail": "Nebylo možné nahrát profilový obrázek",
"error.avatar.delete.fail": "Nebylo mo\u017en\u00e9 smazat profilov\u00fd obr\u00e1zek",
"error.avatar.delete.fail": "Nebylo možné smazat profilový obrázek",
"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",
@ -72,7 +72,7 @@
"error.blocks.min.singular": "Musíte přidat alespoň jeden blok",
"error.blocks.validation": "V poli \"{field}\" v bloku {index} je při použití \"{fieldset}\" typu chyba",
"error.cache.type.invalid": "Invalid cache type \"{type}\"",
"error.cache.type.invalid": "Neplatný typ cache \"{type}\"",
"error.email.preset.notFound": "Nelze nalézt emailové přednastavení \"{name}\"",
@ -84,7 +84,7 @@
"error.file.duplicate": "Soubor s názvem \"{filename}\" již existuje",
"error.file.extension.forbidden": "Přípona souboru \"{extension}\" není povolena",
"error.file.extension.invalid": "Neplatná přípona souboru: {extension}",
"error.file.extension.missing": "Nem\u016f\u017eete nahr\u00e1t soubor bez p\u0159\u00edpony",
"error.file.extension.missing": "Nemůžete nahrát soubor bez přípony",
"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ů",
@ -96,11 +96,11 @@
"error.file.minsize": "Soubor je příliš malý",
"error.file.minwidth": "Šířka obrázku musí být alespoň {width} pixelů",
"error.file.name.missing": "Název souboru nesmí být prázdný",
"error.file.notFound": "Soubor se nepoda\u0159ilo nal\u00e9zt",
"error.file.notFound": "Soubor se nepodařilo nalézt",
"error.file.orientation": "Orientace obrázku másí být \"{orientation}\"",
"error.file.type.forbidden": "Nemáte povoleno nahrávat soubory typu {type} ",
"error.file.type.invalid": "Neplatný typ souboru: {type}",
"error.file.undefined": "Soubor se nepoda\u0159ilo nal\u00e9zt",
"error.file.undefined": "Soubor se nepodařilo nalézt",
"error.form.incomplete": "Prosím opravte všechny chyby ve formuláři",
"error.form.notSaved": "Formulář nemohl být uložen",
@ -121,7 +121,7 @@
"error.offline": "Panel je v současnosti off-line",
"error.page.changeSlug.permission": "Nem\u016f\u017eete zm\u011bnit URL t\u00e9to str\u00e1nky",
"error.page.changeSlug.permission": "Nemůžete změnit URL této stránky",
"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",
@ -137,13 +137,13 @@
"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.notFound": "Stránku se nepodařilo nalézt.",
"error.page.num.invalid": "Zadejte prosím platné pořadové číslo. Čísla nesmí být záporná.",
"error.page.slug.invalid": "Podtržení",
"error.page.slug.maxlength": "URL musí mít méně než \"{length}\" znaků",
"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.undefined": "Stránku se nepodařilo nalézt.",
"error.page.update.permission": "Nemáte dovoleno upravit \"{slug}\"",
"error.section.files.max.plural": "Sekce \"{section}\" nesmí obsahovat více jak {max} souborů",
@ -175,16 +175,17 @@
"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": "Uživatel nemohl být smazán",
"error.user.delete.lastAdmin": "Nemůžete smazat posledního administrátora",
"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.delete.permission": "Nemáte dovoleno smazat tohoto uživatele",
"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.notFound": "Uživatele se nepodařilo nalézt",
"error.user.password.excessive": "Zadejte prosím platné heslo. Heslo nesmí být delší než 1000 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.notSame": "Prosím potvrďte heslo",
"error.user.password.undefined": "Uživatel nemá nastavené heslo.",
"error.user.password.wrong": "Špatné heslo",
"error.user.role.invalid": "Zadejte prosím platnou roli",
@ -282,18 +283,18 @@
"field.files.empty": "Nebyly zatím vybrány žádné soubory",
"field.layout.delete": "Smazat rozložení",
"field.layout.delete.confirm": "Opravdu chcete smazat toto rozložení?",
"field.layout.delete": "Smazat rozvržení",
"field.layout.delete.confirm": "Opravdu chcete smazat toto rozvržení?",
"field.layout.empty": "Zatím žádné řádky",
"field.layout.select": "Vyberte rozložení",
"field.layout.select": "Vyberte rozvržení",
"field.object.empty": "Zatím žádná informace",
"field.pages.empty": "Nebyly zatím vybrány žádné stránky",
"field.structure.delete.confirm": "Opravdu chcete smazat tento z\u00e1znam?",
"field.structure.delete.confirm": "Opravdu chcete smazat tento záznam?",
"field.structure.delete.confirm.all": "Opravdu chcete smazat všechny záznamy?",
"field.structure.empty": "Zat\u00edm nejsou \u017e\u00e1dn\u00e9 z\u00e1znamy.",
"field.structure.empty": "Zatím nejsou žádné záznamy.",
"field.users.empty": "Nebyli zatím vybráni žádní uživatelé",
@ -308,7 +309,7 @@
"hour": "Hodina",
"import": "Import",
"info": "Informace",
"insert": "Vlo\u017eit",
"insert": "Vložit",
"insert.after": "Vložit za",
"insert.before": "Vložit před",
"install": "Instalovat",
@ -316,8 +317,8 @@
"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í zapisovatelné",
"installation.issues.content": "Složka content a všechny soubory a složky v ní musí být zapisovatelné.",
"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>",
@ -401,13 +402,13 @@
"months.december": "Prosinec",
"months.february": "Únor",
"months.january": "Leden",
"months.july": "\u010cervenec",
"months.june": "\u010cerven",
"months.march": "B\u0159ezen",
"months.may": "Kv\u011bten",
"months.july": "Červenec",
"months.june": "Červen",
"months.march": "Březen",
"months.may": "Květen",
"months.november": "Listopad",
"months.october": "\u0158\u00edjen",
"months.september": "Z\u00e1\u0159\u00ed",
"months.october": "Říjen",
"months.september": "Září",
"more": "Více",
"name": "Jméno",
@ -426,13 +427,13 @@
"orientation.square": "Čtverec",
"page.blueprint": "Tento typ stránky nemá blueprint. Blueprint můžete definovat v <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Zm\u011bnit URL",
"page.changeSlug.fromTitle": "Vytvo\u0159it z n\u00e1zvu",
"page.changeSlug": "Změnit URL",
"page.changeSlug.fromTitle": "Vytvořit z názvu",
"page.changeStatus": "Změnit status",
"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": "Opravdu chcete smazat tuto stránku?",
"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",
@ -454,7 +455,7 @@
"pages.status.listed": "Zveřejněno",
"pages.status.unlisted": "Neveřejná",
"pagination.page": "Stránka",
"pagination.page": "Page",
"password": "Heslo",
"paste": "Vložit",
@ -480,7 +481,7 @@
"role.nobody.description": "Toto je výchozí role bez jakýchkoli oprávnění",
"role.nobody.title": "Nikdo",
"save": "Ulo\u017eit",
"save": "Uložit",
"search": "Hledat",
"search.min": "Pro vyhledání zadejte alespoň {min} znaky",
"search.all": "Zobrazit vše",
@ -495,7 +496,7 @@
"show": "Zobrazit",
"site.blueprint": "Hlavní panel nemá blueprint. Blueprint můžete definovat v <strong>/site/blueprints/site.yml</strong>",
"size": "Velikost",
"slug": "P\u0159\u00edpona URL",
"slug": "Přípona URL",
"sort": "Řadit",
"stats.empty": "Žádná hlášení",
@ -520,11 +521,11 @@
"system.updateStatus.upgrade": "Je dostupný upgrade na verzi { version }",
"title": "Název",
"template": "\u0160ablona",
"template": "Šablona",
"today": "Dnes",
"toolbar.button.code": "Kód",
"toolbar.button.bold": "Tu\u010dn\u00fd text",
"toolbar.button.bold": "Tučný text",
"toolbar.button.email": "Email",
"toolbar.button.headings": "Nadpisy",
"toolbar.button.heading.1": "Nadpis 1",
@ -533,7 +534,7 @@
"toolbar.button.heading.4": "Nadpis 4",
"toolbar.button.heading.5": "Nadpis 5",
"toolbar.button.heading.6": "Nadpis 6",
"toolbar.button.italic": "Kurz\u00edva",
"toolbar.button.italic": "Kurzíva",
"toolbar.button.file": "Soubor",
"toolbar.button.file.select": "Vyberte soubor",
"toolbar.button.file.upload": "Nahrajte soubor",
@ -546,7 +547,7 @@
"translation.author": "Kirby tým",
"translation.direction": "ltr",
"translation.name": "\u010cesky",
"translation.name": "Česky",
"translation.locale": "cs_CZ",
"upload": "Nahrát",
@ -561,7 +562,7 @@
"upload.error.noFiles": "Nebyly nahrány žádné soubory",
"upload.error.partial": "Soubor byl nahrán pouze z části",
"upload.error.tmpDir": "Chybí dočasná složka",
"upload.errors": "Chyba",
"upload.errors": "Error",
"upload.progress": "Nahrávání...",
"url": "Url",
@ -579,7 +580,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živatele?",
"users": "Uživatelé",
@ -588,13 +589,13 @@
"version.latest": "Poslední verze",
"versionInformation": "Informace o verzi",
"view.account": "V\u00e1\u0161 \u00fa\u010det",
"view.account": "Váš účet",
"view.installation": "Instalace",
"view.languages": "Jazyky",
"view.resetPassword": "Resetovat heslo",
"view.site": "Stránka",
"view.system": "Systém",
"view.users": "U\u017eivatel\u00e9",
"view.users": "Uživatelé",
"welcome": "Vítejte",
"year": "Rok",

View file

@ -8,7 +8,7 @@
"avatar": "Profilbillede",
"back": "Tilbage",
"cancel": "Annuller",
"change": "\u00c6ndre",
"change": "Ændre",
"close": "Luk",
"confirm": "Gem",
"collapse": "Fold sammen",
@ -23,8 +23,8 @@
"day": "Dag",
"days.fri": "Fre",
"days.mon": "Man",
"days.sat": "L\u00f8r",
"days.sun": "S\u00f8n",
"days.sat": "Lør",
"days.sun": "Søn",
"days.thu": "Tor",
"days.tue": "Tir",
"days.wed": "Ons",
@ -40,7 +40,7 @@
"dimensions": "Dimensioner",
"disabled": "Deaktiveret",
"discard": "Kass\u00e9r",
"discard": "Kassér",
"download": "Download",
"duplicate": "Dupliker",
@ -183,8 +183,9 @@
"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.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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.notSame": "Bekræft venligst adgangskoden",
"error.user.password.undefined": "Brugeren har ikke en adgangskode",
"error.user.password.wrong": "Forkert adgangskode",
"error.user.role.invalid": "Indtast venligst en gyldig rolle",
@ -291,14 +292,14 @@
"field.pages.empty": "Ingen sider valgt endnu",
"field.structure.delete.confirm": "\u00d8nsker du virkelig at slette denne indtastning?",
"field.structure.delete.confirm": "Ønsker du virkelig at slette denne indtastning?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.empty": "Ingen indtastninger endnu.",
"field.users.empty": "Ingen brugere er valgt",
"file.blueprint": "Denne fil har intet blueprint endnu. Du kan definere opsætningen i <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "\u00d8nsker du virkelig at slette denne fil?",
"file.delete.confirm": "Ønsker du virkelig at slette denne fil?",
"file.sort": "Skift position",
"files": "Filer",
@ -308,7 +309,7 @@
"hour": "Time",
"import": "Importer",
"info": "Info",
"insert": "Inds\u00e6t",
"insert": "Indsæt",
"insert.after": "Indsæt efter",
"insert.before": "Indsæt før",
"install": "Installer",
@ -316,8 +317,8 @@
"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ære 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",
@ -426,13 +427,13 @@
"orientation.square": "Kvadrat",
"page.blueprint": "Denne side har intet blueprint endnu. Du kan definere opsætningen i <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "\u00c6ndre URL",
"page.changeSlug": "Ændre URL",
"page.changeSlug.fromTitle": "Generer udfra titel",
"page.changeStatus": "Skift status",
"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": "Ønsker 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",
@ -454,7 +455,7 @@
"pages.status.listed": "Udgivede",
"pages.status.unlisted": "Ulistede",
"pagination.page": "Side",
"pagination.page": "Page",
"password": "Adgangskode",
"paste": "Indsæt",
@ -467,8 +468,8 @@
"remove": "Fjern",
"rename": "Omdøb",
"replace": "Erstat",
"retry": "Pr\u00f8v igen",
"revert": "Kass\u00e9r",
"retry": "Prøv igen",
"revert": "Kassér",
"revert.confirm": "Ønsker du virkelig at <strong>slette all ændringer der ikke er gemt</strong>?",
"role": "Rolle",
@ -534,7 +535,7 @@
"toolbar.button.heading.5": "Overskrift 5",
"toolbar.button.heading.6": "Overskrift 6",
"toolbar.button.italic": "Kursiv tekst",
"toolbar.button.file": "Fil",
"toolbar.button.file": "File",
"toolbar.button.file.select": "Vælg en fil",
"toolbar.button.file.upload": "Upload en fil",
"toolbar.button.link": "Link",
@ -579,7 +580,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": "Ønsker du virkelig at slette denne bruger?",
"users": "Brugere",

View file

@ -3,13 +3,13 @@
"account.delete": "Deinen Account löschen",
"account.delete.confirm": "Willst du deinen Account wirklich löschen? Du wirst sofort danach abgemeldet. Dein Account kann nicht wieder hergestellt werden.",
"add": "Hinzuf\u00fcgen",
"add": "Hinzufügen",
"author": "Autor",
"avatar": "Profilbild",
"back": "Zurück",
"cancel": "Abbrechen",
"change": "\u00c4ndern",
"close": "Schlie\u00dfen",
"change": "Ändern",
"close": "Schließen",
"confirm": "OK",
"collapse": "Zusammenklappen",
"collapse.all": "Alle zusammenklappen",
@ -31,7 +31,7 @@
"debugging": "Debugging",
"delete": "L\u00f6schen",
"delete": "Löschen",
"delete.all": "Alle löschen",
"dialog.files.empty": "Keine verfügbaren Dateien",
@ -60,7 +60,7 @@
"error.access.view": "Du hast keinen Zugriff auf diesen Teil des Panels",
"error.avatar.create.fail": "Das Profilbild konnte nicht hochgeladen werden",
"error.avatar.delete.fail": "Das Profilbild konnte nicht gel\u00f6scht werden",
"error.avatar.delete.fail": "Das Profilbild konnte nicht gelöscht 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",
@ -183,6 +183,7 @@
"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 Account \"{name}\" wurde nicht gefunden",
"error.user.password.excessive": "Bitte gib ein gültiges Passwort ein. Passwörter dürfen nicht länger als 1000 Zeichen 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 Account hat kein Passwort",
@ -291,9 +292,9 @@
"field.pages.empty": "Keine Seiten ausgewählt",
"field.structure.delete.confirm": "Willst du diesen Eintrag wirklich l\u00f6schen?",
"field.structure.delete.confirm": "Willst du diesen Eintrag wirklich löschen?",
"field.structure.delete.confirm.all": "Möchtest du wirklich alle Einträge löschen?",
"field.structure.empty": "Es bestehen keine Eintr\u00e4ge.",
"field.structure.empty": "Es bestehen keine Einträge.",
"field.users.empty": "Keine Accounts ausgewählt",
@ -308,7 +309,7 @@
"hour": "Stunde",
"import": "Importieren",
"info": "Info",
"insert": "Einf\u00fcgen",
"insert": "Einfügen",
"insert.after": "Danach einfügen",
"insert.before": "Davor einfügen",
"install": "Installieren",
@ -403,7 +404,7 @@
"months.january": "Januar",
"months.july": "Juli",
"months.june": "Juni",
"months.march": "M\u00e4rz",
"months.march": "März",
"months.may": "Mai",
"months.november": "November",
"months.october": "Oktober",
@ -426,7 +427,7 @@
"orientation.square": "Quadratisch",
"page.blueprint": "Du kannst zusätzliche Felder und Bereiche für diese Seite in <strong>/site/blueprints/pages/{blueprint}.yml</strong> anlegen",
"page.changeSlug": "URL \u00e4ndern",
"page.changeSlug": "URL ändern",
"page.changeSlug.fromTitle": "Aus Titel erzeugen",
"page.changeStatus": "Status ändern",
"page.changeStatus.position": "Bitte wähle eine Position aus",
@ -436,7 +437,7 @@
"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",
"page.duplicate.appendix": "Kopieren",
"page.duplicate.files": "Dateien kopieren",
"page.duplicate.pages": "Seiten kopieren",
"page.sort": "Position ändern",

View file

@ -3,35 +3,35 @@
"account.delete": "Delete your account",
"account.delete.confirm": "Do you really want to delete your account? You will be logged out immediately. Your account cannot be recovered.",
"add": "\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7",
"add": "Add",
"author": "Author",
"avatar": "\u0395\u03b9\u03ba\u03cc\u03bd\u03b1 \u03c0\u03c1\u03bf\u03c6\u03af\u03bb",
"back": "Πίσω",
"cancel": "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7",
"change": "\u0391\u03bb\u03bb\u03b1\u03b3\u03ae",
"close": "\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf",
"confirm": "Εντάξει",
"avatar": "Profile picture",
"back": "Back",
"cancel": "Cancel",
"change": "Change",
"close": "Close",
"confirm": "Ok",
"collapse": "Collapse",
"collapse.all": "Collapse All",
"copy": "Αντιγραφή",
"copy.all": "Copy all",
"create": "Δημιουργία",
"date": "Ημερομηνία",
"date": "Date",
"date.select": "Επιλογή ημερομηνίας",
"day": "Ημέρα",
"days.fri": "\u03a0\u03b1\u03c1",
"days.mon": "\u0394\u03b5\u03c5",
"days.sat": "\u03a3\u03ac\u03b2",
"days.sun": "\u039a\u03c5\u03c1",
"days.thu": "\u03a0\u03ad\u03bc",
"days.tue": "\u03a4\u03c1\u03af",
"days.wed": "\u03a4\u03b5\u03c4",
"days.fri": "Fri",
"days.mon": "Mon",
"days.sat": "Sat",
"days.sun": "Κυρ",
"days.thu": "Thu",
"days.tue": "Tue",
"days.wed": "Wed",
"debugging": "Debugging",
"delete": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae",
"delete": "Delete",
"delete.all": "Delete all",
"dialog.files.empty": "No files to select",
@ -44,7 +44,7 @@
"download": "Λήψη",
"duplicate": "Αντίγραφο",
"edit": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1",
"edit": "Edit",
"email": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
"email.placeholder": "mail@example.com",
@ -62,7 +62,7 @@
"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.mime.forbidden": "Μη αποδεκτός τύπος αρχείου",
"error.blueprint.notFound": "Δεν ήταν δυνατή η φόρτωση του προσχεδίου \"{name}\"",
@ -82,7 +82,7 @@
"error.file.changeName.empty": "The name must not be empty",
"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.forbidden": "Μη αποδεκτή επέκταση αρχείου",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "Λείπει η επέκταση για το \"{filename}\"",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
@ -175,7 +175,7 @@
"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": "Ο χρήστης δεν μπορούσε να διαγραφεί",
"error.user.delete.lastAdmin": "Δεν είναι δυνατή η διαγραφή του τελευταίου διαχειριστή",
"error.user.delete.lastUser": "Δεν είναι δυνατή η διαγραφή του τελευταίου χρήστη",
"error.user.delete.permission": "Δεν επιτρέπεται να διαγράψετ τον χρήστη \"{name}\"",
@ -183,8 +183,9 @@
"error.user.email.invalid": "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου",
"error.user.language.invalid": "Παρακαλώ εισαγάγετε μια έγκυρη γλώσσα",
"error.user.notFound": "Δεν είναι δυνατή η εύρεση του χρήστη \"{name}\"",
"error.user.password.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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.notSame": "Παρακαλούμε επιβεβαιώστε τον Κωδικό Πρόσβασης",
"error.user.password.undefined": "Ο χρήστης δεν έχει κωδικό πρόσβασης",
"error.user.password.wrong": "Wrong password",
"error.user.role.invalid": "Παρακαλώ εισαγάγετε έναν έγκυρο ρόλο",
@ -291,33 +292,33 @@
"field.pages.empty": "Δεν έχουν επιλεγεί ακόμη σελίδες",
"field.structure.delete.confirm": "\u0395\u03af\u03c3\u03c4\u03b5 \u03c3\u03af\u03b3\u03bf\u03c5\u03c1\u03bf\u03c2 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae\u03bd \u03c4\u03b7\u03bd \u03ba\u03b1\u03c4\u03b1\u03c7\u03ce\u03c1\u03b9\u03c3\u03b7;",
"field.structure.delete.confirm": "Είστε σίγουρος ότι θέλετε να διαγράψετε αυτήν την καταχώριση;",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"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.structure.empty": "Δεν υπάρχουν ακόμη καταχωρίσεις.",
"field.users.empty": "Δεν έχουν επιλεγεί ακόμη χρήστες",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"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": "Θέλετε σίγουρα να διαγράψετε αυτό το αρχείο;",
"file.sort": "Change position",
"files": "Αρχεία",
"files": "Files",
"files.empty": "Δεν υπάρχουν ακόμα αρχεία",
"hide": "Hide",
"hour": "Ώρα",
"import": "Import",
"info": "Info",
"insert": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae",
"insert": "Insert",
"insert.after": "Insert after",
"insert.before": "Insert before",
"install": "Εγκατάσταση",
"installation": "Εγκατάσταση",
"installation": "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": "Ο φάκελος /site/accounts δεν είναι εγγράψιμος",
"installation.issues.content": "Ο φάκελος content και όλοι οι υποφάκελοι πρέπει να είναι εγγράψιμοι.",
"installation.issues.curl": "Απαιτείται η επέκταση <code>CURL</code>",
"installation.issues.headline": "Ο πίνακας ελέγχου δεν μπορεί να εγκατασταθεί",
"installation.issues.mbstring": "Απαιτείται η επέκταση <code>MB String</code> ",
@ -326,7 +327,7 @@
"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": "Γλώσσα",
"language.code": "Κώδικας",
"language.convert": "Χρήση ως προεπιλογή",
"language.convert.confirm": "<p>Θέλετε πραγματικά να μετατρέψετε τη <strong>{name}</strong> στην προεπιλεγμένη γλώσσα; Αυτό δεν μπορεί να ανακληθεί.</p><p>Αν το <strong>{name}</strong> χει μη μεταφρασμένο περιεχόμενο, δεν θα υπάρχει πλέον έγκυρη εναλλακτική λύση και τμήματα του ιστότοπού σας ενδέχεται να είναι κενά.</p>",
@ -347,7 +348,7 @@
"languages.secondary": "Δευτερεύουσες γλώσσες",
"languages.secondary.empty": "Δεν υπάρχουν ακόμα δευτερεύουσες γλώσσες",
"license": "\u0386\u03b4\u03b5\u03b9\u03b1 \u03a7\u03c1\u03ae\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 Kirby",
"license": "Άδεια Χρήσης του Kirby",
"license.buy": "Αγοράστε μια άδεια",
"license.register": "Εγγραφή",
"license.manage": "Manage your licenses",
@ -359,8 +360,8 @@
"license.unregistered": "Αυτό είναι ένα μη καταχωρημένο demo του Kirby",
"license.unregistered.label": "Unregistered",
"link": "\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2",
"link.text": "\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5",
"link": "Σύνδεσμος",
"link.text": "Κείμενο συνδέσμου",
"loading": "Φόρτωση",
@ -372,7 +373,7 @@
"lock.unlock": "Unlock",
"lock.isUnlocked": "Your unsaved changes have been overwritten by another user. You can download your changes to merge them manually.",
"login": "Σύνδεση",
"login": "Log in",
"login.code.label.login": "Login code",
"login.code.label.password-reset": "Password reset code",
"login.code.placeholder.email": "000 000",
@ -388,7 +389,7 @@
"login.toggleText.password-reset.email": "Forgot your password?",
"login.toggleText.password-reset.email-password": "← Back to login",
"logout": "Αποσύνδεση",
"logout": "Log out",
"menu": "Μενού",
"meridiem": "Π.Μ./Μ.Μ",
@ -396,18 +397,18 @@
"minutes": "Λεπτά",
"month": "Μήνας",
"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.april": "Απρίλιος",
"months.august": "August",
"months.december": "December",
"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",
"months.march": "\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2",
"months.may": "\u039c\u03ac\u03b9\u03bf\u03c2",
"months.november": "\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2",
"months.october": "\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2",
"months.september": "\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2",
"months.january": "January",
"months.july": "Ιούλιος",
"months.june": "June",
"months.march": "March",
"months.may": "May",
"months.november": "November",
"months.october": "October",
"months.september": "September",
"more": "Περισσότερα",
"name": "Ονομασία",
@ -426,13 +427,13 @@
"orientation.square": "Τετράγωνος",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "\u0391\u03bb\u03bb\u03b1\u03b3\u03ae URL",
"page.changeSlug.fromTitle": "\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03c4\u03af\u03c4\u03bb\u03bf",
"page.changeSlug": "Change URL",
"page.changeSlug.fromTitle": "Create from title",
"page.changeStatus": "Αλλαγή κατάστασης",
"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": "Θέλετε σίγουρα να διαγράψετε αυτήν τη σελίδα;",
"page.delete.confirm.subpages": "<strong>Αυτή η σελίδα έχει υποσελίδες</strong>. <br>Όλες οι υποσελίδες θα διαγραφούν επίσης.",
"page.delete.confirm.title": "Εισάγετε τον τίτλο της σελίδας για επιβεβαίωση",
"page.draft.create": "Δημιουργία προσχεδίου",
@ -448,15 +449,15 @@
"page.status.unlisted": "Μη καταχωρημένο",
"page.status.unlisted.description": "Η σελίδα είναι προσβάσιμη μόνο μέσω της διεύθυνσης URL",
"pages": "Σελίδες",
"pages": "Pages",
"pages.empty": "Δεν υπάρχουν ακόμα σελίδες",
"pages.status.draft": "Προσχέδια",
"pages.status.listed": "Δημοσιευμένο",
"pages.status.unlisted": "Μη καταχωρημένο",
"pagination.page": "Σελίδα",
"pagination.page": "Page",
"password": "\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03a0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2",
"password": "Password",
"paste": "Paste",
"paste.after": "Paste after",
"pixel": "Εικονοστοιχέιο",
@ -466,12 +467,12 @@
"preview": "Preview",
"remove": "Αφαίρεση",
"rename": "Μετονομασία",
"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",
"replace": "Replace",
"retry": "Επανάληψη",
"revert": "Αγνόηση",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "\u03a1\u03cc\u03bb\u03bf\u03c2",
"role": "Role",
"role.admin.description": "The admin has all rights",
"role.admin.title": "Admin",
"role.all": "Όλα",
@ -480,7 +481,7 @@
"role.nobody.description": "This is a fallback role without any permissions",
"role.nobody.title": "Nobody",
"save": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7",
"save": "Save",
"search": "Αναζήτηση",
"search.min": "Enter {min} characters to search",
"search.all": "Show all",
@ -495,7 +496,7 @@
"show": "Show",
"site.blueprint": "The site has no blueprint yet. You can define the setup in <strong>/site/blueprints/site.yml</strong>",
"size": "Μέγεθος",
"slug": "\u0395\u03c0\u03af\u03b8\u03b5\u03bc\u03b1 URL",
"slug": "Επίθεμα URL",
"sort": "Ταξινόμηση",
"stats.empty": "No reports",
@ -519,13 +520,13 @@
"system.updateStatus.update": "Free update { version } available",
"system.updateStatus.upgrade": "Upgrade { version } available",
"title": "Τίτλος",
"template": "\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf",
"title": "Title",
"template": "Template",
"today": "Σήμερα",
"toolbar.button.code": "Κώδικας",
"toolbar.button.bold": "\u0388\u03bd\u03c4\u03bf\u03bd\u03b7 \u03b3\u03c1\u03b1\u03c6\u03ae",
"toolbar.button.email": "Email",
"toolbar.button.bold": "Έντονη γραφή",
"toolbar.button.email": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
"toolbar.button.headings": "Επικεφαλίδες",
"toolbar.button.heading.1": "Επικεφαλίδα 1",
"toolbar.button.heading.2": "Επικεφαλίδα 2",
@ -533,11 +534,11 @@
"toolbar.button.heading.4": "Heading 4",
"toolbar.button.heading.5": "Heading 5",
"toolbar.button.heading.6": "Heading 6",
"toolbar.button.italic": "\u03a0\u03bb\u03ac\u03b3\u03b9\u03b1 \u03b3\u03c1\u03b1\u03c6\u03ae",
"toolbar.button.italic": "Πλάγια γραφή",
"toolbar.button.file": "Αρχείο",
"toolbar.button.file.select": "Select a file",
"toolbar.button.file.upload": "Upload a file",
"toolbar.button.link": "\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2",
"toolbar.button.link": "Σύνδεσμος",
"toolbar.button.paragraph": "Paragraph",
"toolbar.button.strike": "Strike-through",
"toolbar.button.ol": "Ταξινομημένη λίστα",
@ -546,7 +547,7 @@
"translation.author": "Ομάδα Kirby",
"translation.direction": "ltr",
"translation.name": "\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac",
"translation.name": "Ελληνικά",
"translation.locale": "el_GR",
"upload": "Μεταφόρτωση",
@ -561,7 +562,7 @@
"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.errors": "Σφάλμα",
"upload.errors": "Error",
"upload.progress": "Μεταφόρτωση...",
"url": "Διεύθινση url",
@ -573,28 +574,28 @@
"user.changeLanguage": "Αλλαγή γλώσσας",
"user.changeName": "Μετονομασία χρήστη",
"user.changePassword": "Αλλαγή κωδικού πρόσβασης",
"user.changePassword.new": "Νέος Κωδικός Πρόσβασης",
"user.changePassword.new": "New password",
"user.changePassword.new.confirm": "Επαληθεύση κωδικού πρόσβασης",
"user.changeRole": "Αλλαγή ρόλου",
"user.changeRole.select": "Επιλογή νέου ρόλου",
"user.create": "Προσθήκη νέου χρήστη",
"user.create": "Add a new user",
"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": "Θέλετε σίγουρα να διαγράψετε αυτόν τον χρήστη;",
"users": "Χρήστες",
"users": "Users",
"version": "\u0388\u03ba\u03b4\u03bf\u03c3\u03b7 Kirby",
"version": "Έκδοση Kirby",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
"view.account": "\u039f \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 \u03c3\u03b1\u03c2",
"view.installation": "\u0395\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7",
"view.account": "Your account",
"view.installation": "Installation",
"view.languages": "Γλώσσες",
"view.resetPassword": "Reset password",
"view.site": "Iστοσελίδα",
"view.system": "System",
"view.users": "\u03a7\u03c1\u03ae\u03c3\u03c4\u03b5\u03c2",
"view.users": "Users",
"welcome": "Καλώς ήρθατε",
"year": "Έτος",

View file

@ -106,9 +106,12 @@
"error.form.notSaved": "The form could not be saved",
"error.language.code": "Please enter a valid code for the language",
"error.language.create.permission": "You are not allowed to create a language",
"error.language.delete.permission": "You are not allowed to delete the language",
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.language.notFound": "The language could not be found",
"error.language.update.permission": "You are not allowed to update the language",
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
@ -183,6 +186,7 @@
"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.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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",
@ -502,6 +506,7 @@
"system.issues.content": "The content folder seems to be exposed",
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
"system.issues.eol.php": "Your installed PHP release { release } has reached end-of-life and will not receive further security updates",
"system.issues.debug": "Debugging must be turned off in production",
"system.issues.git": "The .git folder seems to be exposed",
"system.issues.https": "We recommend HTTPS for all your sites",

View file

@ -183,6 +183,7 @@
"error.user.email.invalid": "Bonvolu entajpi validan retpoŝtadreson",
"error.user.language.invalid": "Bonvolu entajpi validan lingvon",
"error.user.notFound": "La uzanto \"{name}\" ne troveblas",
"error.user.password.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"error.user.password.invalid": "Bonvolu entajpi validan pasvorton. Pasvortoj devas esti almenaŭ 8 literojn longaj.",
"error.user.password.notSame": "La pasvortoj ne estas kongruantaj",
"error.user.password.undefined": "La uzanto ne havas pasvorton",

View file

@ -3,13 +3,13 @@
"account.delete": "Eliminar cuenta",
"account.delete.confirm": "¿Realmente quieres eliminar tu cuenta? Tu sesión se cerrará inmediatamente. Tu cuenta no podrá ser recuperada. ",
"add": "Agregar",
"add": "Add",
"author": "Autor",
"avatar": "Foto de perfil",
"back": "Regresar",
"cancel": "Cancelar",
"avatar": "Profile picture",
"back": "Back",
"cancel": "Cancel",
"change": "Cambiar",
"close": "Cerrar",
"close": "Close",
"confirm": "De acuerdo",
"collapse": "Colapsar",
"collapse.all": "Colapsar todos",
@ -17,17 +17,17 @@
"copy.all": "Copiar todo",
"create": "Crear",
"date": "Fecha",
"date": "Date",
"date.select": "Selecciona una fecha",
"day": "Día",
"days.fri": "Vie",
"days.mon": "Lun",
"days.sat": "S\u00e1b",
"days.mon": "Mon",
"days.sat": "Sáb",
"days.sun": "Dom",
"days.thu": "Jue",
"days.tue": "Mar",
"days.wed": "Mi\u00e9",
"days.thu": "Thu",
"days.tue": "Tue",
"days.wed": "Mi",
"debugging": "Depuración",
@ -40,11 +40,11 @@
"dimensions": "Dimensiones",
"disabled": "Deshabilitado",
"discard": "Descartar",
"discard": "Discard",
"download": "Descargar",
"duplicate": "Duplicar",
"edit": "Editar",
"edit": "Edit",
"email": "Correo Electrónico",
"email.placeholder": "correo@ejemplo.com",
@ -143,7 +143,7 @@
"error.page.slug.maxlength": "La longitud del slug debe ser inferior a \"{length}\" caracteres",
"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.undefined": "La página 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}\"",
@ -176,15 +176,16 @@
"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.lastAdmin": "Usted no puede borrar el último 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.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.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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.notSame": "Por favor confirma la contraseña",
"error.user.password.undefined": "El usuario no tiene contraseña",
"error.user.password.wrong": "Contraseña incorrecta",
"error.user.role.invalid": "Por favor ingresa un rol valido",
@ -291,17 +292,17 @@
"field.pages.empty": "Aún no ha seleccionado ningúna pagina",
"field.structure.delete.confirm": "\u00bfEn realidad desea borrar esta entrada?",
"field.structure.delete.confirm": "¿En realidad desea borrar esta entrada?",
"field.structure.delete.confirm.all": "¿Realmente quieres eliminar todas las entradas?",
"field.structure.empty": "A\u00fan no existen entradas.",
"field.structure.empty": "Aún no existen entradas.",
"field.users.empty": "Aún no ha seleccionado ningún usuario",
"file.blueprint": "Este archivo aún no tiene blueprint. Puedes definir la configuración en <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "\u00bfEst\u00e1s seguro que deseas eliminar este archivo?",
"file.delete.confirm": "¿Estás seguro que deseas eliminar este archivo?",
"file.sort": "Cambiar posición",
"files": "Archivos",
"files": "Files",
"files.empty": "Aún no existen archivos",
"hide": "Ocultar",
@ -372,7 +373,7 @@
"lock.unlock": "Desbloquear",
"lock.isUnlocked": "Tus cambios sin guardar han sido sobrescritos por otro usuario. Puedes descargar los cambios y fusionarlos manualmente.",
"login": "Iniciar sesión",
"login": "Log in",
"login.code.label.login": "Código de inicio de sesión",
"login.code.label.password-reset": "Código de restablecimiento de contraseña",
"login.code.placeholder.email": "000 000",
@ -388,7 +389,7 @@
"login.toggleText.password-reset.email": "¿Olvidaste tu contraseña?",
"login.toggleText.password-reset.email-password": "← Volver al inicio de sesión",
"logout": "Cerrar sesión",
"logout": "Log out",
"menu": "Menù",
"meridiem": "AM/PM",
@ -396,18 +397,18 @@
"minutes": "Minutos",
"month": "Mes",
"months.april": "Abril",
"months.august": "Agosto",
"months.april": "April",
"months.august": "August",
"months.december": "Diciembre",
"months.february": "Febrero",
"months.january": "Enero",
"months.july": "Julio",
"months.june": "Junio",
"months.march": "Marzo",
"months.may": "Mayo",
"months.january": "January",
"months.july": "July",
"months.june": "June",
"months.march": "March",
"months.may": "May",
"months.november": "Noviembre",
"months.october": "Octubre",
"months.september": "Septiembre",
"months.october": "October",
"months.september": "September",
"more": "Màs",
"name": "Nombre",
@ -426,8 +427,8 @@
"orientation.square": "Diapositiva",
"page.blueprint": "Este archivo aún no tiene blueprint. Puedes definir la configuración en <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Cambiar URL",
"page.changeSlug.fromTitle": "Crear a partir del t\u00edtulo",
"page.changeSlug": "Change URL",
"page.changeSlug.fromTitle": "Crear en base al título",
"page.changeStatus": "Cambiar estado",
"page.changeStatus.position": "Por favor selecciona una posición",
"page.changeStatus.select": "Selecciona un nuevo estado",
@ -448,15 +449,15 @@
"page.status.unlisted": "No publicada",
"page.status.unlisted.description": "La página sólo es accesible vía URL",
"pages": "Páginas",
"pages": "Paginas",
"pages.empty": "No hay páginas aún",
"pages.status.draft": "Borradores",
"pages.status.listed": "Publicado",
"pages.status.unlisted": "No publicado",
"pages.status.unlisted": "No publicada",
"pagination.page": "Página",
"password": "Contrase\u00f1a",
"password": "Password",
"paste": "Pegar",
"paste.after": "Pegar después",
"pixel": "Pixel",
@ -466,7 +467,7 @@
"preview": "Previsualizar",
"remove": "Eliminar",
"rename": "Renombrar",
"replace": "Reemplazar",
"replace": "Remplazar",
"retry": "Reintentar",
"revert": "Revertir",
"revert.confirm": "¿Realmente quieres <strong>eliminar todos los cambios sin guardar</strong>?",
@ -480,7 +481,7 @@
"role.nobody.description": "Este es un rol alternativo sin permisos",
"role.nobody.title": "Nadie",
"save": "Guardar",
"save": "Save",
"search": "Buscar",
"search.min": "Introduce {min} caracteres para buscar",
"search.all": "Mostrar todo",
@ -520,12 +521,12 @@
"system.updateStatus.upgrade": "Actualización {versión} disponible",
"title": "Título",
"template": "Plantilla",
"template": "Template",
"today": "Hoy",
"toolbar.button.code": "Código",
"toolbar.button.bold": "Negrita",
"toolbar.button.email": "Email",
"toolbar.button.email": "Correo Electrónico",
"toolbar.button.headings": "Encabezados",
"toolbar.button.heading.1": "Encabezado 1",
"toolbar.button.heading.2": "Encabezado 2",
@ -533,7 +534,7 @@
"toolbar.button.heading.4": "Encabezado 4",
"toolbar.button.heading.5": "Encabezado 5",
"toolbar.button.heading.6": "Encabezado 6",
"toolbar.button.italic": "Texto en It\u00e1licas",
"toolbar.button.italic": "Texto en Itálicas",
"toolbar.button.file": "Archivo",
"toolbar.button.file.select": "Selecciona un archivo",
"toolbar.button.file.upload": "Sube un archivo",
@ -573,11 +574,11 @@
"user.changeLanguage": "Cambiar idioma",
"user.changeName": "Renombrar este usuario",
"user.changePassword": "Cambiar la contraseña",
"user.changePassword.new": "Nueva contraseña",
"user.changePassword.new": "New password",
"user.changePassword.new.confirm": "Confirma la nueva contraseña...",
"user.changeRole": "Cambiar rol",
"user.changeRole.select": "Selecciona un nuevo rol",
"user.create": "Agregar un nuevo usuario",
"user.create": "Añadir un nuevo usuario",
"user.delete": "Eliminar este usuario",
"user.delete.confirm": "¿Estás seguro que deseas eliminar <br><strong>{email}</strong>?",
@ -589,7 +590,7 @@
"versionInformation": "información sobre la versión",
"view.account": "Tu cuenta",
"view.installation": "Instalaci\u00f3n",
"view.installation": "Instalación",
"view.languages": "Idiomas",
"view.resetPassword": "Restablecer contraseña",
"view.site": "Sitio",

View file

@ -3,13 +3,13 @@
"account.delete": "Borrar cuenta",
"account.delete.confirm": "¿Realmente quieres eliminar tu cuenta? Tu sesión se cerrará inmediatamente. La cuenta no podrá ser recuperada.",
"add": "Añadir",
"add": "Add",
"author": "Autor",
"avatar": "Foto de perfil",
"back": "Atrás",
"cancel": "Cancelar",
"avatar": "Profile picture",
"back": "Back",
"cancel": "Cancel",
"change": "Cambiar",
"close": "Cerrar",
"close": "Close",
"confirm": "Confirmar",
"collapse": "Colapsar",
"collapse.all": "Colapsar todo",
@ -17,16 +17,16 @@
"copy.all": "Copiar todo",
"create": "Crear",
"date": "Fecha",
"date": "Date",
"date.select": "Selecciona una fecha",
"day": "Día",
"days.fri": "Vi",
"days.mon": "Lu",
"days.fri": "Vie",
"days.mon": "Mon",
"days.sat": "Sá",
"days.sun": "Do",
"days.thu": "Ju",
"days.tue": "Ma",
"days.sun": "Dom",
"days.thu": "Thu",
"days.tue": "Tue",
"days.wed": "Mi",
"debugging": "Depuración",
@ -40,11 +40,11 @@
"dimensions": "Dimensiones",
"disabled": "Desabilitado",
"discard": "Descartar",
"discard": "Discard",
"download": "Descargar",
"duplicate": "Duplicar",
"edit": "Editar",
"edit": "Edit",
"email": "Correo electrónico",
"email.placeholder": "correo@ejemplo.com",
@ -180,9 +180,10 @@
"error.user.delete.lastUser": "No se puede eliminar el último usuario ",
"error.user.delete.permission": "No tienes permiso para 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.email.invalid": "Por favor, introduce un correo electrónico válido",
"error.user.language.invalid": "Por favor, introduce un idioma válido",
"error.user.notFound": "No se puede encontrar el usuario \"{name}\"",
"error.user.password.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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",
@ -301,7 +302,7 @@
"file.delete.confirm": "¿Realmente quieres eliminar <br><strong>{filename}</strong>?",
"file.sort": "Cambiar posición",
"files": "Archivos",
"files": "Files",
"files.empty": "Aún no hay archivos",
"hide": "Ocultar",
@ -360,7 +361,7 @@
"license.unregistered.label": "No registrado",
"link": "Enlace",
"link.text": "Texto del enlace",
"link.text": "Texto de Enlace",
"loading": "Cargando",
@ -372,7 +373,7 @@
"lock.unlock": "Desbloquear",
"lock.isUnlocked": "Tus cambios sin guardar han sido sobrescritos por otro usuario. Puedes descargar los cambios y fusionarlos manualmente.",
"login": "Iniciar sesión",
"login": "Log in",
"login.code.label.login": "Código de inicio de sesión",
"login.code.label.password-reset": "Código de restablecimiento de contraseña",
"login.code.placeholder.email": "000 000",
@ -388,7 +389,7 @@
"login.toggleText.password-reset.email": "¿Olvidaste tu contraseña?",
"login.toggleText.password-reset.email-password": "← Volver al inicio de sesión",
"logout": "Cerrar sesión",
"logout": "Log out",
"menu": "Menu",
"meridiem": "AM/PM",
@ -396,18 +397,18 @@
"minutes": "Minutos",
"month": "Mes",
"months.april": "Abril",
"months.august": "Agosto",
"months.april": "April",
"months.august": "August",
"months.december": "Diciembre",
"months.february": "Febrero",
"months.january": "Enero",
"months.july": "Julio",
"months.june": "Junio",
"months.march": "Marzo",
"months.may": "Mayo",
"months.january": "January",
"months.july": "July",
"months.june": "June",
"months.march": "March",
"months.may": "May",
"months.november": "Noviembre",
"months.october": "Octubre",
"months.september": "Septiembre",
"months.october": "October",
"months.september": "September",
"more": "Más",
"name": "Nombre",
@ -426,7 +427,7 @@
"orientation.square": "Cuadrado",
"page.blueprint": "Este archivo aún no tiene blueprint. Puedes definir la configuración en <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Cambiar URL",
"page.changeSlug": "Change URL",
"page.changeSlug.fromTitle": "Crear en base al título",
"page.changeStatus": "Cambiar estado",
"page.changeStatus.position": "Por favor, selecciona una posición",
@ -456,7 +457,7 @@
"pagination.page": "Página",
"password": "Contraseña",
"password": "Password",
"paste": "Pegar",
"paste.after": "Pegar después",
"pixel": "Pixel",
@ -480,7 +481,7 @@
"role.nobody.description": "Este es un rol alternativo sin permisos",
"role.nobody.title": "Nadie",
"save": "Guardar",
"save": "Save",
"search": "Buscar",
"search.min": "Introduce {min} caracteres para buscar",
"search.all": "Mostrar todo",
@ -520,7 +521,7 @@
"system.updateStatus.upgrade": "Actualización {versión} disponible",
"title": "Título",
"template": "Plantilla",
"template": "Template",
"today": "Hoy",
"toolbar.button.code": "Código",
@ -573,7 +574,7 @@
"user.changeLanguage": "Cambiar idioma",
"user.changeName": "Renombrar a este usuario",
"user.changePassword": "Cambiar contraseña",
"user.changePassword.new": "Nueva contraseña",
"user.changePassword.new": "New password",
"user.changePassword.new.confirm": "Confirmar nueva contraseña…",
"user.changeRole": "Cambiar rol",
"user.changeRole.select": "Seleccionar un nuevo rol",

View file

@ -3,13 +3,13 @@
"account.delete": "Delete your account",
"account.delete.confirm": "Do you really want to delete your account? You will be logged out immediately. Your account cannot be recovered.",
"add": "\u0627\u0641\u0632\u0648\u062f\u0646",
"add": "افزودن",
"author": "Author",
"avatar": "\u062a\u0635\u0648\u06cc\u0631 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644",
"avatar": "تصویر پروفایل",
"back": "بازگشت",
"cancel": "\u0627\u0646\u0635\u0631\u0627\u0641",
"change": "\u0627\u0635\u0644\u0627\u062d",
"close": "\u0628\u0633\u062a\u0646",
"cancel": "انصراف",
"change": "اصلاح",
"close": "بستن",
"confirm": "تایید",
"collapse": "Collapse",
"collapse.all": "Collapse All",
@ -21,17 +21,17 @@
"date.select": "یک تاریخ را انتخاب کنید",
"day": "روز",
"days.fri": "\u062c\u0645\u0639\u0647",
"days.mon": "\u062f\u0648\u0634\u0646\u0628\u0647",
"days.sat": "\u0634\u0646\u0628\u0647",
"days.sun": "\u06cc\u06a9\u0634\u0646\u0628\u0647",
"days.thu": "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
"days.tue": "\u0633\u0647 \u0634\u0646\u0628\u0647",
"days.wed": "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
"days.fri": "جمعه",
"days.mon": "دوشنبه",
"days.sat": "شنبه",
"days.sun": "یکشنبه",
"days.thu": "پنجشنبه",
"days.tue": "سه شنبه",
"days.wed": "چهارشنبه",
"debugging": "Debugging",
"delete": "\u062d\u0630\u0641",
"delete": "حذف",
"delete.all": "Delete all",
"dialog.files.empty": "No files to select",
@ -40,13 +40,13 @@
"dimensions": "ابعاد",
"disabled": "Disabled",
"discard": "\u0627\u0646\u0635\u0631\u0627\u0641",
"discard": "انصراف",
"download": "Download",
"duplicate": "Duplicate",
"edit": "\u0648\u06cc\u0631\u0627\u06cc\u0634",
"edit": "ویرایش",
"email": "\u067e\u0633\u062a \u0627\u0644\u06a9\u062a\u0631\u0648\u0646\u06cc\u06a9",
"email": "پست الکترونیک",
"email.placeholder": "mail@example.com",
"entries": "Entries",
@ -60,7 +60,7 @@
"error.access.view": "You are not allowed to access this part of the panel",
"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.delete.fail": "تصویر پروفایل را نمیتوان حذف کرد",
"error.avatar.dimensions.invalid": "لطفا طول و عرض تصویر پروفایل را زیر 3000 پیکسل انتخاب کنید",
"error.avatar.mime.forbidden": "تصویر پروفایل باید از نوع JPEG یا PNG باشد",
@ -84,7 +84,7 @@
"error.file.duplicate": "فایلی هم نام با «{filename}» هم اکنون موجود است",
"error.file.extension.forbidden": "پسوند فایل «{extension}» غیرمجاز است",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.missing": "\u0634\u0645\u0627 \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u067e\u0633\u0648\u0646\u062f \u0631\u0627 \u0622\u067e\u0644\u0648\u062f \u06a9\u0646\u06cc\u062f",
"error.file.extension.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",
@ -100,7 +100,7 @@
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
"error.file.type.forbidden": "شما اجازه بارگذاری فایلهای «{type}» را ندارید",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "\u0641\u0627\u06cc\u0644 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u067e\u06cc\u062f\u0627 \u0646\u0634\u062f.",
"error.file.undefined": "فایل مورد نظر پیدا نشد.",
"error.form.incomplete": "لطفا کلیه خطاهای فرم را برطرف کنید",
"error.form.notSaved": "امکان دخیره فرم وجود ندارد",
@ -114,7 +114,7 @@
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.license.format": "Please enter a valid license key",
"error.license.email": "لطفا ایمیل صحیحی وارد کنید",
"error.license.email": "لطفا یک ایمیل معتبر وارد کنید",
"error.license.verification": "The license could not be verified",
"error.object.validation": "Theres an error in the \"{label}\" field:\n{message}",
@ -176,15 +176,16 @@
"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.lastAdmin": "حذف آخرین مدیر سیستم ممکن نیست",
"error.user.delete.lastUser": "حذف آخرین کاربر ممکن نیست",
"error.user.delete.permission": "شما اجازه حذف کاربر «{name}» را ندارید",
"error.user.duplicate": "کاربری با ایمیل «{email}» هم اکنون موجود است",
"error.user.email.invalid": "لطفا یک ایمیل معتبر وارد کنید",
"error.user.language.invalid": "لطفا زبان معتبری انتخاب کنید",
"error.user.notFound": "کاربر «{name}» پیدا نشد",
"error.user.password.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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.notSame": "لطفا تکرار گذرواژه را وارد نمایید",
"error.user.password.undefined": "کاربر فاقد گذرواژه است",
"error.user.password.wrong": "Wrong password",
"error.user.role.invalid": "لطفا نقش صحیحی وارد نمایید",
@ -203,7 +204,7 @@
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.denied": "لطفا رد کنید",
"error.validation.different": "مقدار نباید مساوی «{other}» باشد",
"error.validation.email": "لطفا ایمیل صحیحی وارد کنید",
"error.validation.email": "لطفا یک ایمیل معتبر وارد کنید",
"error.validation.endswith": "مقدار باید با «{end}» ختم شود",
"error.validation.filename": "لطفا نام فایل صحیحی وارد کنید",
"error.validation.in": "لطفا یکی از مقادیر روبرو را وارد کنید: ({in})",
@ -291,9 +292,9 @@
"field.pages.empty": "صفحه‌ای انتخاب نشده است",
"field.structure.delete.confirm": "\u0645\u062f\u062e\u0644 \u062c\u0627\u0631\u06cc \u062d\u0630\u0641 \u0634\u0648\u062f\u061f",
"field.structure.delete.confirm": "مدخل جاری حذف شود؟",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.empty": "\u0645\u0648\u0631\u062f\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f.",
"field.structure.empty": "موردی وجود ندارد.",
"field.users.empty": "کاربری انتخاب نشده است",
@ -308,7 +309,7 @@
"hour": "ساعت",
"import": "Import",
"info": "Info",
"insert": "\u062f\u0631\u062c",
"insert": "درج",
"insert.after": "Insert after",
"insert.before": "Insert before",
"install": "نصب",
@ -326,7 +327,7 @@
"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": "زبان",
"language.code": "کد",
"language.convert": "پیش‌فرض شود",
"language.convert.confirm": "<p>آیا واقعا میخواهید <strong>{name}</strong> را به زبان پیشفرض تبدیل کنید؟ این عمل برگشت ناپذیر است.</p> <p>اگر <strong>{name}</strong> دارای محتوای غیر ترجمه شده باشد، جایگزین معتبر دیگری نخواهد بود و ممکن است بخش‌هایی از سایت شما خالی باشد.</p>",
@ -338,7 +339,7 @@
"language.direction.rtl": "راست به چپ",
"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.name": "پارسی",
"language.name": "نام",
"language.updated": "زبان به روز شد",
"languages": "زبان‌ها",
@ -347,7 +348,7 @@
"languages.secondary": "زبان‌های ثانویه",
"languages.secondary.empty": "هنوز هیچ زبان ثانویه‌ای موجود نیست",
"license": "\u0645\u062c\u0648\u0632",
"license": "مجوز",
"license.buy": "خرید مجوز",
"license.register": "ثبت",
"license.manage": "Manage your licenses",
@ -359,8 +360,8 @@
"license.unregistered": "این یک نسخه آزمایشی ثبت نشده از کربی است",
"license.unregistered.label": "Unregistered",
"link": "\u067e\u06cc\u0648\u0646\u062f",
"link.text": "\u0645\u062a\u0646 \u067e\u06cc\u0648\u0646\u062f",
"link": "پیوند",
"link.text": "متن پیوند",
"loading": "بارگزاری",
@ -396,18 +397,18 @@
"minutes": "دقیقه",
"month": "ماه",
"months.april": "\u0622\u0648\u0631\u06cc\u0644",
"months.august": "\u0627\u0648\u062a",
"months.december": "\u062f\u0633\u0627\u0645\u0628\u0631",
"months.april": "آوریل",
"months.august": "اوت",
"months.december": "دسامبر",
"months.february": "فوریه",
"months.january": "\u0698\u0627\u0646\u0648\u06cc\u0647",
"months.july": "\u0698\u0648\u0626\u06cc\u0647",
"months.june": "\u0698\u0648\u0626\u0646",
"months.march": "\u0645\u0627\u0631\u0633",
"months.may": "\u0645\u06cc",
"months.november": "\u0646\u0648\u0627\u0645\u0628\u0631",
"months.october": "\u0627\u06a9\u062a\u0628\u0631",
"months.september": "\u0633\u067e\u062a\u0627\u0645\u0628\u0631",
"months.january": "ژانویه",
"months.july": "ژوئیه",
"months.june": "ژوئن",
"months.march": "مارس",
"months.may": "می",
"months.november": "نوامبر",
"months.october": "اکتبر",
"months.september": "سپتامبر",
"more": "بیشتر",
"name": "نام",
@ -427,7 +428,7 @@
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "تغییر Url صفحه",
"page.changeSlug.fromTitle": "\u0627\u06cc\u062c\u0627\u062f \u0627\u0632 \u0631\u0648\u06cc \u0639\u0646\u0648\u0627\u0646",
"page.changeSlug.fromTitle": "ایجاد از روی عنوان",
"page.changeStatus": "تغییر وضعیت",
"page.changeStatus.position": "لطفا یک موقعیت را انتخاب کنید",
"page.changeStatus.select": "یک وضعیت جدید را انتخاب کنید",
@ -456,7 +457,7 @@
"pagination.page": "صفحه",
"password": "\u06af\u0630\u0631\u0648\u0627\u0698\u0647",
"password": "گذرواژه",
"paste": "Paste",
"paste.after": "Paste after",
"pixel": "پیکسل",
@ -466,12 +467,12 @@
"preview": "Preview",
"remove": "حذف",
"rename": "تغییر نام",
"replace": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc",
"retry": "\u062a\u0644\u0627\u0634 \u0645\u062c\u062f\u062f",
"replace": "جایگزینی",
"retry": "تلاش مجدد",
"revert": "بازگرداندن تغییرات",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"role": "\u0646\u0642\u0634",
"role": "نقش",
"role.admin.description": "The admin has all rights",
"role.admin.title": "Admin",
"role.all": "همه",
@ -480,7 +481,7 @@
"role.nobody.description": "This is a fallback role without any permissions",
"role.nobody.title": "Nobody",
"save": "\u0630\u062e\u06cc\u0631\u0647",
"save": "ذخیره",
"search": "جستجو",
"search.min": "Enter {min} characters to search",
"search.all": "Show all",
@ -520,12 +521,12 @@
"system.updateStatus.upgrade": "Upgrade { version } available",
"title": "عنوان",
"template": "\u0642\u0627\u0644\u0628 \u0635\u0641\u062d\u0647",
"template": "قالب صفحه",
"today": "امروز",
"toolbar.button.code": "کد",
"toolbar.button.bold": "\u0645\u062a\u0646 \u0628\u0627 \u062d\u0631\u0648\u0641 \u062f\u0631\u0634\u062a",
"toolbar.button.email": "\u067e\u0633\u062a \u0627\u0644\u06a9\u062a\u0631\u0648\u0646\u06cc\u06a9",
"toolbar.button.bold": "متن با حروف درشت",
"toolbar.button.email": "پست الکترونیک",
"toolbar.button.headings": "عنوان‌ها",
"toolbar.button.heading.1": "عنوان 1",
"toolbar.button.heading.2": "عنوان 2",
@ -533,11 +534,11 @@
"toolbar.button.heading.4": "Heading 4",
"toolbar.button.heading.5": "Heading 5",
"toolbar.button.heading.6": "Heading 6",
"toolbar.button.italic": "\u0645\u062a\u0646 \u0627\u0631\u06cc\u0628",
"toolbar.button.file": "فایل",
"toolbar.button.italic": "متن اریب",
"toolbar.button.file": "File",
"toolbar.button.file.select": "Select a file",
"toolbar.button.file.upload": "Upload a file",
"toolbar.button.link": "\u067e\u06cc\u0648\u0646\u062f",
"toolbar.button.link": "پیوند",
"toolbar.button.paragraph": "Paragraph",
"toolbar.button.strike": "Strike-through",
"toolbar.button.ol": "لیست مرتب",
@ -561,7 +562,7 @@
"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.errors": "خطا",
"upload.errors": "Error",
"upload.progress": "در حال بارگذاری...",
"url": "Url",
@ -583,18 +584,18 @@
"users": "کاربران",
"version": "\u0646\u0633\u062e\u0647 \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631",
"version": "نسخه نرم افزار",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
"view.account": "حساب کاربری شما",
"view.installation": "\u0646\u0635\u0628 \u0648 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc",
"view.installation": "نصب و راه اندازی",
"view.languages": "زبان‌ها",
"view.resetPassword": "Reset password",
"view.site": "سایت",
"view.system": "System",
"view.users": "\u06a9\u0627\u0631\u0628\u0631\u0627\u0646",
"view.users": "کاربران",
"welcome": "خوش آمدید",
"year": "سال",

View file

@ -3,7 +3,7 @@
"account.delete": "Poista tilisi",
"account.delete.confirm": "Haluatko varmasti poistaa tilisi? Sinut kirjataan ulos välittömästi, eikä tiliäsi voi palauttaa.",
"add": "Lis\u00e4\u00e4",
"add": "Lisää",
"author": "Tekijä",
"avatar": "Profiilikuva",
"back": "Takaisin",
@ -46,7 +46,7 @@
"edit": "Muokkaa",
"email": "S\u00e4hk\u00f6posti",
"email": "Sähköposti",
"email.placeholder": "nimi@osoite.fi",
"entries": "Entries",
@ -100,7 +100,7 @@
"error.file.orientation": "Kuvan suuntaus täytyy olla \"{orientation}\"",
"error.file.type.forbidden": "Sinulla ei ole oikeutta lähettää tiedostoja joiden tyyppi on {type}",
"error.file.type.invalid": "Tiedostotyyppi {type} ei kelpaa",
"error.file.undefined": "Tiedostoa ei l\u00f6ytynyt",
"error.file.undefined": "Tiedostoa ei löytynyt",
"error.form.incomplete": "Korjaa kaikki lomakkeen virheet…",
"error.form.notSaved": "Lomaketta ei voitu tallentaa",
@ -114,7 +114,7 @@
"error.layout.validation.settings": "Virhe asetelman {index} asetuksissa",
"error.license.format": "Anna lisenssiavain",
"error.license.email": "Anna sähköpostiosoite",
"error.license.email": "Anna kelpaava sähköpostiosoite",
"error.license.verification": "Lisenssiä ei voitu vahvistaa",
"error.object.validation": "Theres an error in the \"{label}\" field:\n{message}",
@ -143,7 +143,7 @@
"error.page.slug.maxlength": "URL-liite täytyy olla vähemmän kuin \"{length}\" merkkiä pitkä",
"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.undefined": "Sivua ei löytynyt",
"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}\"",
@ -182,7 +182,8 @@
"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.notFound": "Käyttäjää ei löytynyt",
"error.user.password.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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",
@ -237,7 +238,7 @@
"field.required": "Kenttä on pakollinen",
"field.blocks.changeType": "Vaihda tyyppiä",
"field.blocks.code.name": "Koodi",
"field.blocks.code.name": "Tunniste",
"field.blocks.code.language": "Kieli",
"field.blocks.code.placeholder": "Koodisi …",
"field.blocks.delete.confirm": "Haluatko varmasti poistaa tämän lohkon?",
@ -274,7 +275,7 @@
"field.blocks.quote.citation.placeholder": "Lähde …",
"field.blocks.text.name": "Teksti",
"field.blocks.text.placeholder": "Teksti …",
"field.blocks.video.caption": "Videon teksti",
"field.blocks.video.caption": "Kuvateksti",
"field.blocks.video.name": "Video",
"field.blocks.video.placeholder": "Anna videon URL",
"field.blocks.video.url.label": "Videon URL",
@ -308,7 +309,7 @@
"hour": "Tunti",
"import": "Tuo",
"info": "Tietoja",
"insert": "Lis\u00e4\u00e4",
"insert": "Lisää",
"insert.after": "Lisää eteen",
"insert.before": "Lisää jälkeen",
"install": "Asenna",
@ -401,8 +402,8 @@
"months.december": "Joulukuu",
"months.february": "Helmikuu",
"months.january": "Tammikuu",
"months.july": "Hein\u00e4kuu",
"months.june": "Kes\u00e4kuu",
"months.july": "Heinäkuu",
"months.june": "Kesäkuu",
"months.march": "Maaliskuu",
"months.may": "Toukokuu",
"months.november": "Marraskuu",
@ -454,7 +455,7 @@
"pages.status.listed": "Julkaistut",
"pages.status.unlisted": "Listaamaton",
"pagination.page": "Sivu",
"pagination.page": "Page",
"password": "Salasana",
"paste": "Liitä",
@ -467,11 +468,11 @@
"remove": "Poista",
"rename": "Nimeä uudelleen",
"replace": "Korvaa",
"retry": "Yrit\u00e4 uudelleen",
"retry": "Yritä uudelleen",
"revert": "Palauta",
"revert.confirm": "Haluatko varmasti <strong>poistaa kaikki tallentamattomat muutokset</strong>?",
"role": "K\u00e4ytt\u00e4j\u00e4taso",
"role": "Käyttäjätaso",
"role.admin.description": "Pääkäyttäjällä on kaikki oikeudet",
"role.admin.title": "Pääkäyttäjä",
"role.all": "Kaikki",
@ -523,9 +524,9 @@
"template": "Sivupohja",
"today": "Tänään",
"toolbar.button.code": "Koodi",
"toolbar.button.code": "Tunniste",
"toolbar.button.bold": "Lihavointi",
"toolbar.button.email": "S\u00e4hk\u00f6posti",
"toolbar.button.email": "Sähköposti",
"toolbar.button.headings": "Otsikot",
"toolbar.button.heading.1": "Otsikko 1",
"toolbar.button.heading.2": "Otsikko 2",
@ -534,7 +535,7 @@
"toolbar.button.heading.5": "Otsikko 5",
"toolbar.button.heading.6": "Otsikko 6",
"toolbar.button.italic": "Kursivointi",
"toolbar.button.file": "Tiedosto",
"toolbar.button.file": "File",
"toolbar.button.file.select": "Valitse tiedosto",
"toolbar.button.file.upload": "Lähetä tiedosto",
"toolbar.button.link": "Linkki",
@ -561,7 +562,7 @@
"upload.error.noFiles": "Tiedostoja ei lähetetty",
"upload.error.partial": "Tiedoston lähetys onnistui vain osittain",
"upload.error.tmpDir": "Väliaikainen hakemisto puuttuu",
"upload.errors": "Virhe",
"upload.errors": "Error",
"upload.progress": "Lähetetään...",
"url": "Url",
@ -594,7 +595,7 @@
"view.resetPassword": "Aseta salasana",
"view.site": "Sivusto",
"view.system": "Järjestelmä",
"view.users": "K\u00e4ytt\u00e4j\u00e4t",
"view.users": "Käyttäjät",
"welcome": "Tervetuloa",
"year": "Vuosi",

View file

@ -5,7 +5,7 @@
"add": "Ajouter",
"author": "Auteur",
"avatar": "Image du profil",
"avatar": "Photo de profil",
"back": "Retour",
"cancel": "Annuler",
"change": "Changer",
@ -60,7 +60,7 @@
"error.access.view": "Vous nêtes pas autorisé à accéder à cette section du Panel",
"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.delete.fail": "La photo de 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",
@ -70,27 +70,27 @@
"error.blocks.max.singular": "Vous ne devez pas ajouter plus d'un bloc",
"error.blocks.min.plural": "Vous devez ajouter au moins {min} blocs",
"error.blocks.min.singular": "Vous devez ajouter au moins un bloc",
"error.blocks.validation": "Il y a une erreur sur le champ \"{field}\" du bloc {index} utilisant le type de bloc \"{fieldset}\"",
"error.blocks.validation": "Il y a une erreur sur le champ « {field} » du bloc {index} utilisant le type de bloc « {fieldset} »",
"error.cache.type.invalid": "Type de cache incorrect \"{type}\"",
"error.cache.type.invalid": "Type de cache invalide « {type} »",
"error.email.preset.notFound": "La configuration de courriel « {name} » na pu être trouvé ",
"error.field.converter.invalid": "Convertisseur « {converter} » incorrect",
"error.field.type.missing": "Champ \"{ name }\" : Le type de champ \"{ type }\" nexiste pas",
"error.field.converter.invalid": "Convertisseur « {converter} » invalide",
"error.field.type.missing": "Champ « { name } » : Le type de champ « { type } » nexiste pas",
"error.file.changeName.empty": "Le nom ne peut être vide",
"error.file.changeName.permission": "Vous nêtes pas autorisé à modifier le nom de « {filename} »",
"error.file.duplicate": "Un fichier nommé « {filename} » existe déjà",
"error.file.extension.forbidden": "Lextension « {extension} » nest pas autorisée",
"error.file.extension.invalid": "Extension non valide : {extension}",
"error.file.extension.invalid": "Extension incorrecte : {extension}",
"error.file.extension.missing": "Lextension pour « {filename} » 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 « {mime} »",
"error.file.mime.forbidden": "Le type de média « {mime} » nest pas autorisé",
"error.file.mime.invalid": "Type de média non valide : {mime}",
"error.file.mime.invalid": "Type de média invalide : {mime}",
"error.file.mime.missing": "Le type de média de « {filename} » 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",
@ -99,25 +99,25 @@
"error.file.notFound": "Le fichier « {filename} » na pu être trouvé",
"error.file.orientation": "L'orientation de l'image doit être « {orientation} »",
"error.file.type.forbidden": "Vous nêtes pas autorisé à transférer des fichiers {type}",
"error.file.type.invalid": "Type de fichier non valide : {type}",
"error.file.type.invalid": "Type de fichier invalide : {type}",
"error.file.undefined": "Le fichier na pu être trouvé",
"error.form.incomplete": "Veuillez corriger toutes les erreurs du formulaire…",
"error.form.notSaved": "Le formulaire na pu être enregistré",
"error.language.code": "Veuillez saisir un code valide pour cette langue",
"error.language.code": "Veuillez saisir un code correct pour cette langue",
"error.language.duplicate": "Cette langue existe déjà",
"error.language.name": "Veuillez saisir un nom valide pour cette langue",
"error.language.name": "Veuillez saisir un nom correct pour cette langue",
"error.language.notFound": "La langue na pu être trouvée",
"error.layout.validation.block": "Il y a une erreur sur le champ \"{field}\" du bloc {blockIndex} utilisant le type de bloc \"{fieldset}\" dans le layout {layoutIndex}.",
"error.layout.validation.block": "Il y a une erreur sur le champ « {field} » du bloc {blockIndex} utilisant le type de bloc « {fieldset} » dans le layout {layoutIndex}.",
"error.layout.validation.settings": "Il y a une erreur dans les paramètres de la disposition {index}",
"error.license.format": "Veuillez saisir un numéro de licence valide",
"error.license.email": "Veuillez saisir un courriel valide",
"error.license.format": "Veuillez saisir un numéro de licence correct",
"error.license.email": "Veuillez saisir un courriel correct",
"error.license.verification": "La licence na pu être vérifiée",
"error.object.validation": "Il y a une erreur dans le champ \"{label}\" :\n{message}",
"error.object.validation": "Il y a une erreur dans le champ « {label} » :\n{message}",
"error.offline": "Le Panel est actuellement hors ligne",
@ -138,11 +138,11 @@
"error.page.duplicate": "Une page avec lidentifiant dURL « {slug} » existe déjà",
"error.page.duplicate.permission": "Vous n'êtes pas autorisé à dupliquer « {slug} »",
"error.page.notFound": "La page « {slug} » 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.slug.invalid": "Veuillez entrer un identifiant dURL valide",
"error.page.num.invalid": "Veuillez saisir un numéro de position correct. Les numéros ne doivent pas être négatifs.",
"error.page.slug.invalid": "Veuillez saisir un identifiant dURL correct",
"error.page.slug.maxlength": "Lidentifiant dURL doit faire moins de « {length} » caractères",
"error.page.sort.permission": "La page « {slug} » ne peut être réordonnée",
"error.page.status.invalid": "Veuillez choisir un statut de page valide",
"error.page.status.invalid": "Veuillez choisir un statut de page correct",
"error.page.undefined": "La page na pu être trouvée",
"error.page.update.permission": "Vous nêtes pas autorisé à modifier « {slug} »",
@ -180,14 +180,15 @@
"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.email.invalid": "Veuillez saisir un courriel valide",
"error.user.language.invalid": "Veuillez saisir une langue valide",
"error.user.email.invalid": "Veuillez saisir un courriel correct",
"error.user.language.invalid": "Veuillez saisir une langue correcte",
"error.user.notFound": "Lutilisateur « {name} » na pu être trouvé",
"error.user.password.excessive": "Veuillez entrer un mot de passe valide. Les mots de passe ne doivent pas dépasser 1000 caractères de long.",
"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.password.wrong": "Mot de passe incorrect",
"error.user.role.invalid": "Veuillez saisir un rôle valide",
"error.user.role.invalid": "Veuillez saisir un rôle correct",
"error.user.undefined": "Lutilisateur na pu être trouvé",
"error.user.update.permission": "Vous nêtes pas autorisé à modifier lutilisateur « {name} »",
@ -197,18 +198,18 @@
"error.validation.between": "Veuillez saisir une valeur entre « {min} » et « {max} »",
"error.validation.boolean": "Veuillez confirmer ou refuser",
"error.validation.contains": "Veuillez saisir une valeur contenant « {needle} »",
"error.validation.date": "Veuillez saisir une date valide",
"error.validation.date": "Veuillez saisir une date correcte",
"error.validation.date.after": "Veuillez saisir une date après {date}",
"error.validation.date.before": "Veuillez saisir une date avant {date}",
"error.validation.date.between": "Veuillez saisir une date entre {min} et {max}",
"error.validation.denied": "Veuillez refuser",
"error.validation.different": "La valeur ne doit pas être « {other} »",
"error.validation.email": "Veuillez saisir un courriel valide",
"error.validation.email": "Veuillez saisir un courriel correct",
"error.validation.endswith": "La valeur doit se terminer par « {end} »",
"error.validation.filename": "Veuillez saisir un nom de fichier valide",
"error.validation.filename": "Veuillez saisir un nom de fichier correct",
"error.validation.in": "Veuillez saisir lun des éléments suivants: ({in})",
"error.validation.integer": "Veuillez saisir un entier valide",
"error.validation.ip": "Veuillez saisir une adresse IP valide",
"error.validation.integer": "Veuillez saisir un entier correct",
"error.validation.ip": "Veuillez saisir une adresse IP correcte",
"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}",
@ -220,17 +221,17 @@
"error.validation.more": "Veuillez saisir une valeur supérieure à {min}",
"error.validation.notcontains": "Veuillez saisir une valeur ne contenant pas « {needle} »",
"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.option": "Veuillez sélectionner une option correcte",
"error.validation.num": "Veuillez saisir un nombre correct",
"error.validation.required": "Veuillez saisir quelque chose",
"error.validation.same": "Veuillez saisir « {other} »",
"error.validation.size": "La grandeur de la valeur doit être « {size} »",
"error.validation.startswith": "La valeur doit commencer par « {start} »",
"error.validation.time": "Veuillez saisir une heure valide",
"error.validation.time.after": "Veuillez entrer une heure après {time}",
"error.validation.time.before": "Veuillez entrer une heure avant {time}",
"error.validation.time.between": "Veuillez entrer une heure entre {min} et {max}",
"error.validation.url": "Veuillez saisir une URL valide",
"error.validation.time": "Veuillez saisir une heure correcte",
"error.validation.time.after": "Veuillez saisir une heure après {time}",
"error.validation.time.before": "Veuillez saisir une heure avant {time}",
"error.validation.time.between": "Veuillez saisir une heure entre {min} et {max}",
"error.validation.url": "Veuillez saisir une URL correcte",
"expand": "Déplier",
"expand.all": "Tout déplier",
@ -276,7 +277,7 @@
"field.blocks.text.placeholder": "Texte…",
"field.blocks.video.caption": "Légende",
"field.blocks.video.name": "Vidéo",
"field.blocks.video.placeholder": "Entrez lURL dune vidéo",
"field.blocks.video.placeholder": "Saisissez lURL dune vidéo",
"field.blocks.video.url.label": "URL de la vidéo",
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
@ -341,7 +342,7 @@
"language.name": "Nom",
"language.updated": "La langue a été mise à jour",
"languages": "Langages",
"languages": "Langues",
"languages.default": "Langue par défaut",
"languages.empty": "Il ny a pas encore de langues",
"languages.secondary": "Langues secondaires",
@ -377,9 +378,9 @@
"login.code.label.password-reset": "Code de réinitialisation du mot de passe",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "Si votre adresse de courriel est enregistrée, le code demandé vous sera envoyé par courriel.",
"login.email.login.body": "Bonjour {user.nameOrEmail},\n\nVous avez récemment demandé un code de connexion pour le Panel de {site}.\nLe code de connexion suivant sera valide pendant {timeout} minutes :\n\n{code}\n\nSi vous navez pas demandé de code de connexion, veuillez ignorer cet email ou contacter votre administrateur si vous avez des questions.\nPar sécurité, merci de ne PAS faire suivre cet email.",
"login.email.login.body": "Bonjour {user.nameOrEmail},\n\nVous avez récemment demandé un code de connexion pour le Panel de {site}.\nLe code de connexion suivant sera valable pendant {timeout} minutes :\n\n{code}\n\nSi vous navez pas demandé de code de connexion, veuillez ignorer cet email ou contacter votre administrateur si vous avez des questions.\nPar sécurité, merci de ne PAS faire suivre cet email.",
"login.email.login.subject": "Votre code de connexion",
"login.email.password-reset.body": "Bonjour {user.nameOrEmail},\n\nVous avez récemment demandé un code de réinitialisation de mot de passe pour le Panel de {site}.\nLe code de réinitialisation de mot de passe suivant sera valide pendant {timeout} minutes :\n\n{code}\n\nSi vous navez pas demandé de code de réinitialisation de mot de passe, veuillez ignorer cet email ou contacter votre administrateur si vous avez des questions.\nPar sécurité, merci de ne PAS faire suivre cet email.",
"login.email.password-reset.body": "Bonjour {user.nameOrEmail},\n\nVous avez récemment demandé un code de réinitialisation de mot de passe pour le Panel de {site}.\nLe code de réinitialisation de mot de passe suivant sera valable pendant {timeout} minutes :\n\n{code}\n\nSi vous navez pas demandé de code de réinitialisation de mot de passe, veuillez ignorer cet email ou contacter votre administrateur si vous avez des questions.\nPar sécurité, merci de ne PAS faire suivre cet email.",
"login.email.password-reset.subject": "Votre code de réinitialisation du mot de passe",
"login.remember": "Rester connecté",
"login.reset": "Réinitialiser le mot de passe",
@ -442,11 +443,11 @@
"page.sort": "Modifier la position",
"page.status": "Statut",
"page.status.draft": "Brouillon",
"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.draft.description": "La page est accessible uniquement pour les éditeurs connectés ou via un lien secret",
"page.status.listed": "Public",
"page.status.listed.description": "La page est publique pour tout le monde",
"page.status.listed.description": "La page est accessible par tout le monde",
"page.status.unlisted": "Non listé",
"page.status.unlisted.description": "La page est uniquement accessible par son URL",
"page.status.unlisted.description": "La page est accessible uniquement par son URL",
"pages": "Pages",
"pages.empty": "Pas encore de pages",
@ -469,7 +470,7 @@
"replace": "Remplacer",
"retry": "Essayer à nouveau",
"revert": "Revenir",
"revert.confirm": "Voulez-vous vraiment <strong>supprimer toutes les modifications non-enregistrées</strong> ?",
"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",
@ -482,7 +483,7 @@
"save": "Enregistrer",
"search": "Rechercher",
"search.min": "Entrez {min} caractères pour rechercher",
"search.min": "Saisissez {min} caractères pour rechercher",
"search.all": "Tout afficher",
"search.results.none": "Pas de résultats",
@ -590,7 +591,7 @@
"view.account": "Votre compte",
"view.installation": "Installation",
"view.languages": "Langages",
"view.languages": "Langues",
"view.resetPassword": "Réinitialiser le mot de passe",
"view.site": "Site",
"view.system": "Système",

View file

@ -3,13 +3,13 @@
"account.delete": "Fiók törlése",
"account.delete.confirm": "Tényleg törölni szeretnéd a fiókodat? Azonnal kijelentkeztetünk és ez a folyamat visszavonhatatlan.",
"add": "Hozz\u00e1ad",
"add": "Hozzáad",
"author": "Szerző",
"avatar": "Profilkép",
"back": "Vissza",
"cancel": "M\u00e9gsem",
"change": "M\u00f3dos\u00edt\u00e1s",
"close": "Bez\u00e1r",
"cancel": "Mégsem",
"change": "Módosítás",
"close": "Bezár",
"confirm": "Mentés",
"collapse": "Bezárás",
"collapse.all": "Összes bezárása",
@ -21,17 +21,17 @@
"date.select": "Dátum kiválasztása",
"day": "Nap",
"days.fri": "p\u00e9",
"days.mon": "h\u00e9",
"days.fri": "pé",
"days.mon": "hé",
"days.sat": "szo",
"days.sun": "va",
"days.thu": "cs\u00fc",
"days.thu": "csü",
"days.tue": "ke",
"days.wed": "sze",
"debugging": "Hibakeresés",
"delete": "T\u00f6rl\u00e9s",
"delete": "Törlés",
"delete.all": "Összes törlése",
"dialog.files.empty": "Nincsenek fájlok kiválasztva",
@ -40,11 +40,11 @@
"dimensions": "Méretek",
"disabled": "Inaktív",
"discard": "Visszavon\u00e1s",
"discard": "Visszavonás",
"download": "Letöltés",
"duplicate": "Másolat",
"edit": "Aloldal szerkeszt\u00e9se",
"edit": "Aloldal szerkesztése",
"email": "Email",
"email.placeholder": "mail@pelda.hu",
@ -82,9 +82,9 @@
"error.file.changeName.empty": "A név nem lehet üres",
"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.forbidden": "Tiltott kiterjesztésű fájl",
"error.file.extension.invalid": "Érvénytelen kiterjesztés: {extension}",
"error.file.extension.missing": "Kiterjeszt\u00e9s n\u00e9lk\u00fcli f\u00e1jl nem t\u00f6lthet\u0151 fel",
"error.file.extension.missing": "Kiterjesztés nélküli fájl nem tölthető fel",
"error.file.maxheight": "A kép nem lehet magasabb {height} pixelnél",
"error.file.maxsize": "A fájl túl nagy",
"error.file.maxwidth": "A kép nem lehet szélesebb {width} pixelnél",
@ -100,7 +100,7 @@
"error.file.orientation": "A képnek \"{orientation}\" tájolásúnak kell lennie",
"error.file.type.forbidden": "Nem tölthetsz fel \"{type}\" típusú fájlokat",
"error.file.type.invalid": "Érvénytelen fájltípus: {type}",
"error.file.undefined": "A f\u00e1jl nem tal\u00e1lhat\u00f3",
"error.file.undefined": "A fájl nem található",
"error.form.incomplete": "Kérlek javítsd ki az összes hibát az űrlapon",
"error.form.notSaved": "Az űrlap nem menthető",
@ -137,13 +137,13 @@
"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.notFound": "Az oldal nem talá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 érvényes URL-kiterjesztést adj meg",
"error.page.slug.maxlength": "Az URL maximum \"{length}\" karakter hosszúságú lehet",
"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.undefined": "Az oldal nem található",
"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",
@ -175,16 +175,17 @@
"error.user.changeRole.permission": "Nincs jogosultságod megváltoztatni \"{name}\" felhasználó szerepkörét",
"error.user.changeRole.toAdmin": "Nincs jogosultságod előléptetni a felhasználót adminisztrátorrá",
"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": "A felhasználó nem törölhető",
"error.user.delete.lastAdmin": "Nem törölheted az egyetlen adminisztrátort",
"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.delete.permission": "Nincs jogosultságod törölni ezt a felhasználót",
"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.notFound": "A felhasználó nem található",
"error.user.password.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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.notSame": "Kérlek erősítsd meg a jelszót",
"error.user.password.undefined": "A felhasználónak nincs jelszó megadva",
"error.user.password.wrong": "Hibás jelszó",
"error.user.role.invalid": "Kérlek adj meg egy megfelelő szerepkört",
@ -291,9 +292,9 @@
"field.pages.empty": "Nincs oldal kiválasztva",
"field.structure.delete.confirm": "Biztos t\u00f6r\u00f6lni szeretn\u00e9d ezt a bejegyz\u00e9st?",
"field.structure.delete.confirm": "Biztos törölni szeretnéd ezt a bejegyzést?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.empty": "Nincs m\u00e9g bejegyz\u00e9s",
"field.structure.empty": "Nincs még bejegyzés",
"field.users.empty": "Nincs felhasználó kiválasztva",
@ -396,17 +397,17 @@
"minutes": "Perc",
"month": "Hónap",
"months.april": "\u00e1prilis",
"months.april": "április",
"months.august": "augusztus",
"months.december": "december",
"months.february": "február",
"months.january": "janu\u00e1r",
"months.july": "j\u00falius",
"months.june": "j\u00fanius",
"months.march": "m\u00e1rcius",
"months.may": "m\u00e1jus",
"months.january": "január",
"months.july": "július",
"months.june": "június",
"months.march": "március",
"months.may": "május",
"months.november": "november",
"months.october": "okt\u00f3ber",
"months.october": "október",
"months.september": "szeptember",
"more": "Több",
@ -426,8 +427,8 @@
"orientation.square": "Négyzetes",
"page.blueprint": "Ehhez az oldalhoz még nem tartozik oldalsablon. Itt hozhatod létre: <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "URL v\u00e1ltoztat\u00e1sa",
"page.changeSlug.fromTitle": "L\u00e9trehoz\u00e1s c\u00edmb\u0151l",
"page.changeSlug": "URL változtatása",
"page.changeSlug.fromTitle": "Létrehozás címből",
"page.changeStatus": "Állapot módosítása",
"page.changeStatus.position": "Kérlek válaszd ki a pozíciót",
"page.changeStatus.select": "Új állapot kiválasztása",
@ -456,7 +457,7 @@
"pagination.page": "Oldal",
"password": "Jelsz\u00f3",
"password": "Jelszó",
"paste": "Beillesztés",
"paste.after": "Beillesztés utána",
"pixel": "Pixel",
@ -466,9 +467,9 @@
"preview": "Előnézet",
"remove": "Eltávolítás",
"rename": "Átnevezés",
"replace": "Cser\u00e9l",
"replace": "Cserél",
"retry": "Próbáld újra",
"revert": "Visszavon\u00e1s",
"revert": "Visszavonás",
"revert.confirm": "Tényleg <strong>törölni szeretnél minden nem mentett változtatást</strong>?",
"role": "Szerepkör",
@ -480,7 +481,7 @@
"role.nobody.description": "Ez a visszatérő szabály a nem rendelkező jogosultsághoz",
"role.nobody.title": "Senki",
"save": "Ment\u00e9s",
"save": "Mentés",
"search": "Keresés",
"search.min": "A kereséshez írj be minimum {min} karaktert",
"search.all": "Összes mutatása",
@ -495,7 +496,7 @@
"show": "Mutat",
"site.blueprint": "Ehhez a weblaphoz még nem tartozik oldalsablon. Itt hozhatod létre: <strong>/site/blueprints/site.yml</strong>",
"size": "Méret",
"slug": "URL n\u00e9v",
"slug": "URL név",
"sort": "Rendezés",
"stats.empty": "No reports",
@ -524,7 +525,7 @@
"today": "Ma",
"toolbar.button.code": "Kód",
"toolbar.button.bold": "F\u00e9lk\u00f6v\u00e9r sz\u00f6veg",
"toolbar.button.bold": "Félkövér szöveg",
"toolbar.button.email": "Email",
"toolbar.button.headings": "Címsor",
"toolbar.button.heading.1": "Címsor 1",
@ -561,7 +562,7 @@
"upload.error.noFiles": "Nem lettek fájlok feltöltve",
"upload.error.partial": "A fájl feltöltése csak részben sikerült",
"upload.error.tmpDir": "Hiányzik egy átmeneti mappa",
"upload.errors": "Hiba",
"upload.errors": "Error",
"upload.progress": "Feltöltés...",
"url": "Url",
@ -583,18 +584,18 @@
"users": "Felhasználók",
"version": "Kirby verzi\u00f3",
"version": "Kirby verzió",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
"view.account": "Fi\u00f3kod",
"view.installation": "Telep\u00edt\u00e9s",
"view.account": "Fiókod",
"view.installation": "Telepítés",
"view.languages": "Nyelvek",
"view.resetPassword": "Jelszó visszaállítása",
"view.site": "Weboldal",
"view.system": "Rendszer",
"view.users": "Felhaszn\u00e1l\u00f3k",
"view.users": "Felhasználók",
"welcome": "Üdvözlünk",
"year": "Év",

View file

@ -183,6 +183,7 @@
"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.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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",
@ -254,7 +255,7 @@
"field.blocks.heading.text": "Teks",
"field.blocks.heading.placeholder": "Penajukan …",
"field.blocks.image.alt": "Teks alternatif",
"field.blocks.image.caption": "Keterangan",
"field.blocks.image.caption": "Deskripsi",
"field.blocks.image.crop": "Pangkas",
"field.blocks.image.link": "Tautan",
"field.blocks.image.location": "Lokasi",

View file

@ -1,6 +1,6 @@
{
"account.changeName": "Breyta nafninu þínu",
"account.delete": "Eyða reikningnum þínum",
"account.delete": "Eyða notandareikning þínum",
"account.delete.confirm": "Ertu alveg viss um að þú viljir endanlega eyða reikningnum þínum? Þú munt verða útskráð/ur án tafar. Ómögulegt verður að endurheimta reikninginn þinn.",
"add": "Bæta við",
@ -10,9 +10,9 @@
"cancel": "Hætta við",
"change": "Breyta",
"close": "Loka",
"confirm": "Ok",
"collapse": "Collapse",
"collapse.all": "Collapse All",
"confirm": "OK",
"collapse": "Fella",
"collapse.all": "Fella allt",
"copy": "Afrita",
"copy.all": "Afrita allt",
"create": "Stofna",
@ -72,12 +72,12 @@
"error.blocks.min.singular": "Allavegana einn bálkur takk",
"error.blocks.validation": "Það er villa í {field} sviðinu í bálkinum {index} sem notar {fieldset} bálkgerðina",
"error.cache.type.invalid": "Invalid cache type \"{type}\"",
"error.cache.type.invalid": "Ógyld skyndiminnisgerð \"{type}\"",
"error.email.preset.notFound": "Netfangstillingarnar: \"{name}\" fundust ekki",
"error.field.converter.invalid": "Ógildur umbreytari \"{converter}\"",
"error.field.type.missing": "Field \"{ name }\": The field type \"{ type }\" does not exist",
"error.field.type.missing": "Sviðið \"{ name }\": Sviðgerðin er \"{type}\" er alls ekki til.",
"error.file.changeName.empty": "Nafn skal fylla út",
"error.file.changeName.permission": "Þú mátt ekkert breyta nafninu á skránni \"{filename}\"",
@ -121,13 +121,13 @@
"error.offline": "Stjórnborðið er óvirkt eins og stendur.",
"error.page.changeSlug.permission": "Þú hefur ekkert leyfi til þess að breyta slóðarforskeytinu fyrir \"{slug}\"",
"error.page.changeSlug.permission": "Þú hefur ekkert leyfi til þess að breyta slóðarviðskeytinu fyrir \"{slug}\"",
"error.page.changeStatus.incomplete": "Það eru villur á síðunni og við getum ekki gefið hana út",
"error.page.changeStatus.permission": "Stöðu síðunnar var ekki hægt að breyta",
"error.page.changeStatus.toDraft.invalid": "Síðunni \"{slug}\" er ekki hægt að breyta í uppkast",
"error.page.changeTemplate.invalid": "Sniðmáti fyrir síðuna \"{slug}\" er ekki hægt að breyta",
"error.page.changeTemplate.permission": "Þú hefur engan veginn leyfi til að breyta sniðmáti fyrir síðuna \"{slug}\"",
"error.page.changeTitle.empty": "Titillinn getur ekki verið óskilgreindur",
"error.page.changeTitle.empty": "Ekki skilja titilinn eftir tóman",
"error.page.changeTitle.permission": "Þú mátt ekki breyta titlinum fyrir \"{slug}\"",
"error.page.create.permission": "Þú hefur ekki leyfi til að stofna \"{slug}\"",
"error.page.delete": "Síðunni \"{slug}\" er ekki hægt að eyða",
@ -180,9 +180,10 @@
"error.user.delete.lastUser": "Síðasta notandanum er ekki hægt að eyða",
"error.user.delete.permission": "Þú mátt ekkert eyða notandanum \"{name}\"",
"error.user.duplicate": "Nú þegar finnst notandi með þetta netfang: \"{email}\"",
"error.user.email.invalid": "Vinsamlegast ákjósanlegt netfang",
"error.user.email.invalid": "Almennilegt netfang hér",
"error.user.language.invalid": "Vinsamlegast ákjósanlegt tungumál",
"error.user.notFound": "Þessi notandi; \"{name}\" fannst ekki",
"error.user.password.excessive": "Vinsamlegast settu inn gilt lykilorð. Lykilorð hér meiga ekki vera lengri en 1000 stafabil.",
"error.user.password.invalid": "Veldu ákjósanlegt lykilorð. Minnst 8 stafa langt.",
"error.user.password.notSame": "Lykilorðin stemma ekki",
"error.user.password.undefined": "Þessi notandi hefur ekki lykilorð",
@ -203,7 +204,7 @@
"error.validation.date.between": "Dagsetningu milli {min} og {max}",
"error.validation.denied": "Hafnaðu",
"error.validation.different": "Gildið má ekki vera \"{other}\"",
"error.validation.email": "Ákjósanlegt netfang",
"error.validation.email": "Almennilegt netfang hér",
"error.validation.endswith": "Gildið verður að enda á \"{end}\"",
"error.validation.filename": "Ákjósanlegt skrárnafn",
"error.validation.in": "Vinsamlegast skráðu eitt af eftirfarandi: ({in})",
@ -237,7 +238,7 @@
"field.required": "Þetta svið er nauðsynlegt",
"field.blocks.changeType": "Breyta um bálkagerð",
"field.blocks.code.name": "Kóði",
"field.blocks.code.name": "Kóðasnið",
"field.blocks.code.language": "Tungumal",
"field.blocks.code.placeholder": "Kóðinn þinn …",
"field.blocks.delete.confirm": "Ætlarðu virkilega að eyða þessum bálk?",
@ -245,13 +246,13 @@
"field.blocks.delete.confirm.selected": "Viltu virkilega eyða völdum bálkum?",
"field.blocks.empty": "Öngvir bálkar enn",
"field.blocks.fieldsets.label": "Veldu bálkagerð …",
"field.blocks.fieldsets.paste": "Notaðu<kbd> {{ shortcut }}</kbd> flýtilyklaaðgerðina til að setja blokkina hér.",
"field.blocks.fieldsets.paste": "Notaðu<kbd> {{ shortcut }}</kbd> flýtilyklaaðgerðina til að setja bálkinn hér.",
"field.blocks.gallery.name": "Myndasafn",
"field.blocks.gallery.images.empty": "Engar myndir enn",
"field.blocks.gallery.images.label": "Myndir",
"field.blocks.heading.level": "Stig",
"field.blocks.heading.name": "Fyrirsögn",
"field.blocks.heading.text": "Texti/Prósi",
"field.blocks.heading.text": "Prósi",
"field.blocks.heading.placeholder": "Fyrirsögn …",
"field.blocks.image.alt": "ALT texti",
"field.blocks.image.caption": "Myndartexti",
@ -265,16 +266,16 @@
"field.blocks.line.name": "Lína",
"field.blocks.list.name": "Listi",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Texti",
"field.blocks.markdown.label": "Prósi",
"field.blocks.markdown.placeholder": "Markdown …",
"field.blocks.quote.name": "Tilvitnun",
"field.blocks.quote.text.label": "Innihald tilvitnunar",
"field.blocks.quote.text.label": "Prósi",
"field.blocks.quote.text.placeholder": "Þessi tilvitnun …",
"field.blocks.quote.citation.label": "Heimild",
"field.blocks.quote.citation.placeholder": "eftir …",
"field.blocks.text.name": "Prósi",
"field.blocks.text.placeholder": "Þessi prósi …",
"field.blocks.video.caption": "Myndskeiðstexti",
"field.blocks.video.caption": "Myndartexti",
"field.blocks.video.name": "Myndskeið",
"field.blocks.video.placeholder": "Vefslóð myndskeiðs (URL)",
"field.blocks.video.url.label": "Vefslóð",
@ -292,7 +293,7 @@
"field.pages.empty": "Engar síður valdar ennþá",
"field.structure.delete.confirm": "Viltu virkilega eyða þessari röð?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.delete.confirm.all": "Ætlar þú virkilega að eyða öllum færslum?",
"field.structure.empty": "Engar færslur enn",
"field.users.empty": "Engir notendur valdir enn",
@ -326,14 +327,14 @@
"installation.issues.server": "Kirby krefst <code>Apache</code>, <code>Nginx</code> eða <code>Caddy</code>",
"installation.issues.sessions": "<code>/site/sessions</code> mappan er annaðhvort ekki til eða er ekki skrifanleg",
"language": "Tungumál",
"language.code": "Kóði",
"language": "Tungumal",
"language.code": "Kóðasnið",
"language.convert": "Gera sjálfgefið",
"language.convert.confirm": "<p>Ertu viss um að þú viljir breyta <strong>{name}</strong> í sjálfgefið (lesist aðal) tungumál? Þessu verður ekki viðsnúið.</p><p>Ef <strong>{name}</strong> hefur innihald sem ekki hefur verið þýtt, þá verða engir möguleikar til þrautarvara og hluti vefsins gæti birtst tómur.</p>",
"language.create": "Bættu við nýju tungumáli",
"language.delete.confirm": "Ertu nú viss um að þú viljir eyða <strong>{name}</strong> og öllum tilheyrandi þýðingum? Þetta verður ekki tekið til baka!",
"language.deleted": "Tungumálinu hefur verið eytt",
"language.direction": "Lestursátt (hægri, vinstri)",
"language.direction": "Lesátt",
"language.direction.ltr": "Vinstra til hægri",
"language.direction.rtl": "Hægra til vinstri",
"language.locale": "PHP locale strengur",
@ -349,12 +350,12 @@
"license": "Leyfi",
"license.buy": "Kaupa leyfi",
"license.register": "Skr\u00E1 Kirby",
"license.register": "Skrá Kirby",
"license.manage": "Sýslaðu með leyfin þín",
"license.register.help": "Þú fékkst sendan tölvupóst með leyfiskóðanum þegar þú keyptir leyfi. Vinsamlegast afritaðu hann og settu hann hingað til að skrá þig.",
"license.register.label": "Vinsamlegast settu inn leyfiskóðan",
"license.register.domain": "Your license will be registered to <strong>{host}</strong>.",
"license.register.local": "You are about to register your license for your local domain <strong>{host}</strong>. If this site will be deployed to a public domain, please register it there instead. If {host} is the domain you want to license Kirby to, please continue.",
"license.register.domain": "Leyfið þitt verður skráð á <strong>{host}</strong>.",
"license.register.local": "Nú ertu að fara skrá leyfið þitt á staðbundna lénið (e. local domain) <strong>{host}</strong>. Ef þetta vefsvæði verður fært út á vefinn, vinsamlegast skráðu það frekar þar þegar það hefur verið gefið þar út. Ef {host] er raunverulega lénið sem þú vilt skrá leyfir þitt á, endilega haltu þínu striki.",
"license.register.success": "Þakka þér fyrir að velja Kirby",
"license.unregistered": "Þetta er óskráð prufueintak af Kirby",
"license.unregistered.label": "Óskráð",
@ -410,7 +411,7 @@
"months.september": "September",
"more": "Meira",
"name": "Nafn",
"name": "Nafn tungumáls",
"next": "Næst",
"no": "nei",
"off": "Af",
@ -452,7 +453,7 @@
"pages.empty": "Engar síður enn",
"pages.status.draft": "Uppköst",
"pages.status.listed": "Útgefnar og listaðar",
"pages.status.unlisted": "Útgefnar",
"pages.status.unlisted": "Útgefin",
"pagination.page": "Síða",
@ -495,26 +496,26 @@
"show": "Sýna",
"site.blueprint": "Þessi vefur hefur ekki skipan (e. blueprint) ennþá. Þú mátt skilgreina skipanina í <strong>/site/blueprints/site.yml</strong>",
"size": "Stærð",
"slug": "Slögg",
"slug": "Slóðar viðskeyti",
"sort": "Raða",
"stats.empty": "Engar skýrslur",
"system.issues.content": "Efnismappan virðist vera berskjölduð",
"system.issues.eol.kirby": "Uppsett Kirby eintak þitt hefur runnið sitt skeið á enda og mun ekki verða uppfært framar",
"system.issues.eol.plugin": "Uppsett eintak þitt af viðbótinni { plugin } hefur runnið sitt skeið á enda og mun ekki verða uppfærð framar",
"system.issues.debug": "Aflúsun ætti alltaf að vera óvrikt í útgefnum vef",
"system.issues.debug": "Aflúsun ætti alltaf að vera óvirk í útgefnum vef",
"system.issues.git": ".git mappan virðist vera berskjölduð",
"system.issues.https": "Við mælum harðlega með því að þú notir HTTPS fyrir öll þín vefsvæði",
"system.issues.kirby": "Kirby mappan virðist vera berskjölduð",
"system.issues.site": "Mappa vefsvæðisins virðist vera berskjölduð",
"system.issues.vulnerability.kirby": "Uppsetningin þín gæti verið berskjölduð gagnvart eftirfarandi veikleika: ({ severity } veikleikinn): { description }",
"system.issues.vulnerability.kirby": "Uppsetningin þín gæti verið berskjölduð gagnvart eftirfarandi veikleika: ({ severity } veikleiki): { description }",
"system.issues.vulnerability.plugin": "Uppsetningin þín gæti verið berskjölduð gagnvart eftirfarandi veikleika í viðbótinni { plugin }: ({ severity } veikleikinn): { description }",
"system.updateStatus": "Uppfærslustaða",
"system.updateStatus.error": "Gat því miður ekki athugað með uppfærslur",
"system.updateStatus.not-vulnerable": "Engir þekktir veikleikar",
"system.updateStatus.security-update": "Ókeypis öryggisuppfærsla { version } fáanleg",
"system.updateStatus.security-upgrade": "Uppfærsla { version } með öryggisuppfærslum fáanleg",
"system.updateStatus.unreleased": "Óútgefin útgáfa",
"system.updateStatus.unreleased": "Þróunarútgáfa",
"system.updateStatus.up-to-date": "Allt spikk og span",
"system.updateStatus.update": "Ókeypis uppfærsla { version } fáanleg",
"system.updateStatus.upgrade": "Uppfærsla fyrir { version } fáanleg",
@ -588,10 +589,10 @@
"version.latest": "Nýjasta útgáfa",
"versionInformation": "Útgáfuupplýsingar",
"view.account": "Notandareikningurinn þinn",
"view.installation": "Uppsetning",
"view.account": "Þínar stillingar",
"view.installation": "Uppsettning",
"view.languages": "Tungumál",
"view.resetPassword": "Endurstilla lykilorð",
"view.resetPassword": "Endurheimta lykilorð takk",
"view.site": "Vefsvæðið",
"view.system": "Kerfi",
"view.users": "Notendur",

View file

@ -96,11 +96,11 @@
"error.file.minsize": "Il file è troppo leggero",
"error.file.minwidth": "L'immagine dev'essere larga almeno {width} pixel",
"error.file.name.missing": "Il nome del file non può essere vuoto",
"error.file.notFound": "Il file non \u00e8 stato trovato",
"error.file.notFound": "Il file non è stato trovato",
"error.file.orientation": "L'imaggine dev'essere orientata in \"{orientation}\"",
"error.file.type.forbidden": "Non ti è permesso caricare file {type}",
"error.file.type.invalid": "Tipo di file non valido: {type}",
"error.file.undefined": "Il file non \u00e8 stato trovato",
"error.file.undefined": "Il file non è stato trovato",
"error.form.incomplete": "Correggi tutti gli errori nel form...",
"error.form.notSaved": "Non è stato possibile salvare il form",
@ -143,7 +143,7 @@
"error.page.slug.maxlength": "Lo \"slug\" dev'essere più corto di \"{length}\" caratteri",
"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.undefined": "La pagina non è 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}\"",
@ -175,14 +175,15 @@
"error.user.changeRole.permission": "Non ti è permesso modificare il ruolo dell'utente \"{name}\"",
"error.user.changeRole.toAdmin": "Non ti è permesso assegnare il ruolo di amministratore ad altri utenti",
"error.user.create.permission": "Non ti è permesso creare questo utente",
"error.user.delete": "L'utente non pu\u00f2 essere eliminato",
"error.user.delete": "L'utente non può 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.delete.permission": "Non ti è 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.notFound": "L'utente non è stato trovato",
"error.user.password.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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",
@ -454,7 +455,7 @@
"pages.status.listed": "Pubblicato",
"pages.status.unlisted": "Non in elenco",
"pagination.page": "Pagina",
"pagination.page": "Page",
"password": "Password",
"paste": "Incolla",
@ -561,7 +562,7 @@
"upload.error.noFiles": "Nessun file è stato caricato",
"upload.error.partial": "Il file è stato caricato solo parzialmente",
"upload.error.tmpDir": "Manca la cartella temporanea",
"upload.errors": "Errore",
"upload.errors": "Error",
"upload.progress": "Caricamento...",
"url": "URL",

View file

@ -3,13 +3,13 @@
"account.delete": "계정 삭제",
"account.delete.confirm": "계정을 삭제할까요? 계정을 삭제한 뒤에는 복구할 수 없습니다.",
"add": "\ucd94\uac00",
"add": "추가",
"author": "저자",
"avatar": "프로필 이미지",
"back": "뒤로",
"cancel": "\ucde8\uc18c",
"change": "\ubcc0\uacbd",
"close": "\ub2eb\uae30",
"cancel": "취소",
"change": "변경",
"close": "닫기",
"confirm": "확인",
"collapse": "접기",
"collapse.all": "모두 접기",
@ -21,17 +21,17 @@
"date.select": "날짜 지정",
"day": "일",
"days.fri": "\uae08",
"days.mon": "\uc6d4",
"days.sat": "\ud1a0",
"days.sun": "\uc77c",
"days.thu": "\ubaa9",
"days.tue": "\ud654",
"days.wed": "\uc218",
"days.fri": "",
"days.mon": "",
"days.sat": "",
"days.sun": "",
"days.thu": "",
"days.tue": "",
"days.wed": "",
"debugging": "디버그",
"delete": "\uc0ad\uc81c",
"delete": "삭제",
"delete.all": "모두 삭제",
"dialog.files.empty": "선택할 파일이 없습니다.",
@ -44,9 +44,9 @@
"download": "다운로드",
"duplicate": "복제",
"edit": "\ud3b8\uc9d1",
"edit": "편집",
"email": "\uc774\uba54\uc77c \uc8fc\uc18c",
"email": "이메일 주소",
"email.placeholder": "mail@example.com",
"entries": "항목",
@ -60,7 +60,7 @@
"error.access.view": "패널에 접근할 권한이 없습니다.",
"error.avatar.create.fail": "프로필 이미지를 업로드할 수 없습니다.",
"error.avatar.delete.fail": "\ud504\ub85c\ud544 \uc774\ubbf8\uc9c0\ub97c \uc0ad\uc81c\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",
"error.avatar.delete.fail": "프로필 이미지를 삭제할 수 없습니다.",
"error.avatar.dimensions.invalid": "프로필 이미지의 너비와 높이를 3,000픽셀 이하로 설정하세요.",
"error.avatar.mime.forbidden": "프로필 이미지의 확장자(JPG, JPEG, PNG)를 확인하세요.",
@ -100,7 +100,7 @@
"error.file.orientation": "이미지의 비율({orientation})을 확인하세요.",
"error.file.type.forbidden": "이 형식({type})의 파일을 업로드할 권한이 없습니다.",
"error.file.type.invalid": "파일의 형식({type})이 올바르지 않습니다.",
"error.file.undefined": "\ud30c\uc77c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.",
"error.file.undefined": "파일이 없습니다.",
"error.form.incomplete": "항목에 오류가 있습니다.",
"error.form.notSaved": "항목을 저장할 수 없습니다.",
@ -143,7 +143,7 @@
"error.page.slug.maxlength": "고유 주소를 {length}자 이하로 입력하세요.",
"error.page.sort.permission": "페이지({slug})를 정렬할 수 없습니다.",
"error.page.status.invalid": "올바른 상태를 설정하세요.",
"error.page.undefined": "\ud398\uc774\uc9c0\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.",
"error.page.undefined": "페이지가 없습니다.",
"error.page.update.permission": "페이지({slug})를 변경할 권한이 없습니다.",
"error.section.files.max.plural": "이 섹션({section})에는 파일을 {max}개 이상 추가할 수 없습니다.",
@ -176,15 +176,16 @@
"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.lastAdmin": "최종 관리자는 삭제할 수 없습니다.",
"error.user.delete.lastUser": "최종 사용자는 삭제할 수 없습니다.",
"error.user.delete.permission": "사용자({name})를 삭제할 권한이 없습니다.",
"error.user.duplicate": "이메일 주소({email})가 같은 사용자가 있습니다.",
"error.user.email.invalid": "올바른 이메일 주소를 입력하세요.",
"error.user.language.invalid": "올바른 언어를 입력하세요.",
"error.user.notFound": "사용자({name})가 없습니다.",
"error.user.password.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"error.user.password.invalid": "암호를 8자 이상으로 설정하세요.",
"error.user.password.notSame": "\uc554\ud638\ub97c \ud655\uc778\ud558\uc138\uc694.",
"error.user.password.notSame": "암호를 확인하세요.",
"error.user.password.undefined": "암호가 설정되지 않았습니다.",
"error.user.password.wrong": "암호가 올바르지 않습니다.",
"error.user.role.invalid": "올바른 역할을 지정하세요.",
@ -237,7 +238,7 @@
"field.required": "필드를 채우세요.",
"field.blocks.changeType": "유형 변경",
"field.blocks.code.name": "코드",
"field.blocks.code.name": "언어 코드",
"field.blocks.code.language": "언어",
"field.blocks.code.placeholder": "코드",
"field.blocks.delete.confirm": "블록을 삭제할까요?",
@ -251,12 +252,12 @@
"field.blocks.gallery.images.label": "이미지",
"field.blocks.heading.level": "단계",
"field.blocks.heading.name": "제목",
"field.blocks.heading.text": "제목",
"field.blocks.heading.text": "마크다운",
"field.blocks.heading.placeholder": "제목",
"field.blocks.image.alt": "대체 텍스트",
"field.blocks.image.caption": "캡션",
"field.blocks.image.crop": "자르기",
"field.blocks.image.link": "링크",
"field.blocks.image.link": "일반 링크",
"field.blocks.image.location": "위치",
"field.blocks.image.name": "이미지",
"field.blocks.image.placeholder": "이미지 선택",
@ -268,11 +269,11 @@
"field.blocks.markdown.label": "마크다운",
"field.blocks.markdown.placeholder": "마크다운",
"field.blocks.quote.name": "인용문",
"field.blocks.quote.text.label": "인용문",
"field.blocks.quote.text.label": "마크다운",
"field.blocks.quote.text.placeholder": "인용문",
"field.blocks.quote.citation.label": "출처",
"field.blocks.quote.citation.placeholder": "출처",
"field.blocks.text.name": "텍스트",
"field.blocks.text.name": "마크다운",
"field.blocks.text.placeholder": "텍스트",
"field.blocks.video.caption": "캡션",
"field.blocks.video.name": "영상",
@ -292,7 +293,7 @@
"field.pages.empty": "선택한 페이지가 없습니다.",
"field.structure.delete.confirm": "이 항목을 삭제할까요?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.delete.confirm.all": "모든 항목을 삭제할까요?",
"field.structure.empty": "항목이 없습니다.",
"field.users.empty": "선택한 사용자가 없습니다.",
@ -308,7 +309,7 @@
"hour": "시",
"import": "가져오기",
"info": "정보",
"insert": "\uc0bd\uc785",
"insert": "삽입",
"insert.after": "뒤에 삽입",
"insert.before": "앞에 삽입",
"install": "설치",
@ -326,7 +327,7 @@
"installation.issues.server": "Kirby를 실행하려면 <code>Apache</code>, <code>Nginx</code>, 또는 <code>Caddy</code>가 필요합니다.",
"installation.issues.sessions": "<code>/site/sessions</code> 폴더의 쓰기 권한을 확인하세요.",
"language": "\uc5b8\uc5b4",
"language": "언어",
"language.code": "언어 코드",
"language.convert": "기본 언어로 지정",
"language.convert.confirm": "이 언어(<strong>{name}</strong>)를 기본 언어로 지정할까요? 지정한 뒤에는 복원할 수 없으며, 이 언어로 번역되지 않은 항목은 올바르게 표시되지 않을 수 있습니다.",
@ -338,7 +339,7 @@
"language.direction.rtl": "오른쪽에서 왼쪽",
"language.locale": "PHP 로캘 문자열",
"language.locale.warning": "사용자 지정 로캘을 사용 중입니다. <code>/site/languages</code> 폴더의 언어 파일을 수정하세요.",
"language.name": "언어명",
"language.name": "이름",
"language.updated": "언어를 변경했습니다.",
"languages": "언어",
@ -359,8 +360,8 @@
"license.unregistered": "Kirby가 등록되지 않았습니다.",
"license.unregistered.label": "Kirby가 등록되지 않았습니다.",
"link": "\uc77c\ubc18 \ub9c1\ud06c",
"link.text": "\ubb38\uc790",
"link": "일반 링크",
"link.text": "문자",
"loading": "로딩 중…",
@ -396,18 +397,18 @@
"minutes": "분",
"month": "월",
"months.april": "4\uc6d4",
"months.august": "8\uc6d4",
"months.december": "12\uc6d4",
"months.april": "4",
"months.august": "8",
"months.december": "12",
"months.february": "2월",
"months.january": "1\uc6d4",
"months.july": "7\uc6d4",
"months.june": "6\uc6d4",
"months.march": "3\uc6d4",
"months.may": "5\uc6d4",
"months.november": "11\uc6d4",
"months.october": "10\uc6d4",
"months.september": "9\uc6d4",
"months.january": "1",
"months.july": "7",
"months.june": "6",
"months.march": "3",
"months.may": "5",
"months.november": "11",
"months.october": "10",
"months.september": "9",
"more": "더 보기",
"name": "이름",
@ -456,7 +457,7 @@
"pagination.page": "페이지",
"password": "\uc554\ud638",
"password": "암호",
"paste": "붙여넣기",
"paste.after": "뒤로 붙여넣기",
"pixel": "픽셀",
@ -466,8 +467,8 @@
"preview": "미리 보기",
"remove": "삭제",
"rename": "이름 변경",
"replace": "\uad50\uccb4",
"retry": "\ub2e4\uc2dc \uc2dc\ub3c4",
"replace": "교체",
"retry": "다시 시도",
"revert": "복원",
"revert.confirm": "<strong>저장되지 않은 내용</strong>을 삭제할까요?",
@ -480,7 +481,7 @@
"role.nobody.description": "대체 사용자는 아무 권한이 없습니다.",
"role.nobody.title": "사용자가 없습니다.",
"save": "\uc800\uc7a5",
"save": "저장",
"search": "검색",
"search.min": "{min}자 이상 입력하세요.",
"search.all": "모두 보기",
@ -520,10 +521,10 @@
"system.updateStatus.upgrade": "{ version } 버전으로 업그레이드",
"title": "제목",
"template": "\ud15c\ud50c\ub9bf",
"template": "템플릿",
"today": "오늘",
"toolbar.button.code": "코드",
"toolbar.button.code": "언어 코드",
"toolbar.button.bold": "강조",
"toolbar.button.email": "이메일 주소",
"toolbar.button.headings": "제목",
@ -537,7 +538,7 @@
"toolbar.button.file": "파일",
"toolbar.button.file.select": "파일 선택",
"toolbar.button.file.upload": "파일 업로드",
"toolbar.button.link": "링크",
"toolbar.button.link": "일반 링크",
"toolbar.button.paragraph": "문단",
"toolbar.button.strike": "취소선",
"toolbar.button.ol": "숫자 목록",
@ -589,12 +590,12 @@
"versionInformation": "버전 정보",
"view.account": "계정",
"view.installation": "\uc124\uce58",
"view.installation": "설치",
"view.languages": "언어",
"view.resetPassword": "암호 초기화",
"view.site": "사이트",
"view.system": "시스템",
"view.users": "\uc0ac\uc6a9\uc790",
"view.users": "사용자",
"welcome": "반갑습니다.",
"year": "년",

View file

@ -180,9 +180,10 @@
"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.email.invalid": "Įrašykite teisingą el. pašto adresą",
"error.user.email.invalid": "Prašome įrašyti teisingą el. pašto adresą",
"error.user.language.invalid": "Įrašykite teisingą kalbą",
"error.user.notFound": "Vartotojas \"{name}\" nerastas",
"error.user.password.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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",
@ -203,7 +204,7 @@
"error.validation.date.between": "Įrašykite datą tarp {min} ir {max}",
"error.validation.denied": "Prašome neleisti",
"error.validation.different": "Reikšmė neturi būti \"{other}\"",
"error.validation.email": "Prašome įrašyti korektišką el. paštą",
"error.validation.email": "Prašome įrašyti teisingą el. pašto adresą",
"error.validation.endswith": "Reikšmė turi baigtis su \"{end}\"",
"error.validation.filename": "Prašome įrašyti teisingą failo pavadinimą",
"error.validation.in": "Prašome įrašyti vieną iš šių: ({in})",
@ -313,7 +314,7 @@
"insert.before": "Įterpti prieš",
"install": "Įdiegti",
"installation": "Įdiegimas",
"installation": "Installation",
"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ų",
@ -452,7 +453,7 @@
"pages.empty": "Dar nėra puslapių",
"pages.status.draft": "Juodraščiai",
"pages.status.listed": "Paskelbti",
"pages.status.unlisted": "Nerodomi",
"pages.status.unlisted": "Nerodomas",
"pagination.page": "Puslapis",
@ -561,7 +562,7 @@
"upload.error.noFiles": "Failai nebuvo įkelti",
"upload.error.partial": "Failas įkeltas tik iš dalies",
"upload.error.tmpDir": "Trūksta laikinojo katalogo",
"upload.errors": "Klaida",
"upload.errors": "Error",
"upload.progress": "Įkėlimas…",
"url": "Url",

View file

@ -23,8 +23,8 @@
"day": "Dag",
"days.fri": "Fre",
"days.mon": "Man",
"days.sat": "L\u00f8r",
"days.sun": "S\u00f8n",
"days.sat": "Lør",
"days.sun": "Søn",
"days.thu": "Tor",
"days.tue": "Tir",
"days.wed": "Ons",
@ -178,11 +178,12 @@
"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.delete.permission": "Du er ikke tillat å 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.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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",
@ -291,9 +292,9 @@
"field.pages.empty": "Ingen side har blitt valgt",
"field.structure.delete.confirm": "\u00d8nsker du virkelig \u00e5 slette denne oppf\u00f8ringen?",
"field.structure.delete.confirm": "Ønsker du virkelig å slette denne oppføringen?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.empty": "Ingen oppf\u00f8ringer enda",
"field.structure.empty": "Ingen oppføringer enda",
"field.users.empty": "Ingen bruker har blitt valgt",
@ -316,8 +317,8 @@
"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å være 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",
@ -326,7 +327,7 @@
"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": "Språk",
"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>",
@ -454,7 +455,7 @@
"pages.status.listed": "Publisert",
"pages.status.unlisted": "Unotert",
"pagination.page": "Side",
"pagination.page": "Page",
"password": "Passord",
"paste": "Lim inn",
@ -467,7 +468,7 @@
"remove": "Fjern",
"rename": "Endre navn",
"replace": "Erstatt",
"retry": "Pr\u00f8v p\u00e5 nytt",
"retry": "Prøv på nytt",
"revert": "Forkast",
"revert.confirm": "Er du sikker på at vil <strong>slette alle ulagrede endringer</strong>?",
@ -546,7 +547,7 @@
"translation.author": "Kirby Team",
"translation.direction": "ltr",
"translation.name": "Norsk Bokm\u00e5l",
"translation.name": "Norsk Bokmål",
"translation.locale": "nb_NO",
"upload": "Last opp",
@ -561,7 +562,7 @@
"upload.error.noFiles": "Ingen filer ble lastet opp",
"upload.error.partial": "Den opplastede filen ble bare delvis lastet opp",
"upload.error.tmpDir": "Mangler en midlertidig mappe",
"upload.errors": "Feil",
"upload.errors": "Error",
"upload.progress": "Laster opp…",
"url": "Nettadresse",

View file

@ -183,6 +183,7 @@
"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.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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",

View file

@ -5,10 +5,10 @@
"add": "Dodaj",
"author": "Autor",
"avatar": "Zdj\u0119cie profilowe",
"avatar": "Zdjęcie profilowe",
"back": "Wróć",
"cancel": "Anuluj",
"change": "Zmie\u0144",
"change": "Zmień",
"close": "Zamknij",
"confirm": "Ok",
"collapse": "Zwiń",
@ -22,16 +22,16 @@
"day": "Dzień",
"days.fri": "Pt",
"days.mon": "Pn",
"days.mon": "Pon",
"days.sat": "Sb",
"days.sun": "Nd",
"days.thu": "Czw",
"days.tue": "Wt",
"days.wed": "\u015ar",
"days.wed": "Śr",
"debugging": "Debugowanie",
"delete": "Usu\u0144",
"delete": "Usuń",
"delete.all": "Usuń wszystkie",
"dialog.files.empty": "Brak plików do wyboru",
@ -40,7 +40,7 @@
"dimensions": "Wymiary",
"disabled": "Wyłączone",
"discard": "Odrzu\u0107",
"discard": "Odrzuć",
"download": "Pobierz",
"duplicate": "Zduplikuj",
@ -70,14 +70,14 @@
"error.blocks.max.singular": "Możesz dodać tylko jeden blok",
"error.blocks.min.plural": "Musisz dodać co najmniej {min} bloki/-ów",
"error.blocks.min.singular": "Musisz dodać co najmniej jeden blok",
"error.blocks.validation": "There's an error on the \"{field}\" field in block {index} using the \"{fieldset}\" block type",
"error.blocks.validation": "Wystąpił błąd w polu „{field}” w bloku {index} o typie bloku „{fieldset}”",
"error.cache.type.invalid": "Invalid cache type \"{type}\"",
"error.cache.type.invalid": "Nieprawidłowy typ pamięci podręcznej „{type}”",
"error.email.preset.notFound": "Nie udało się załadować wzorca wiadomości e-mail \"{name}\"",
"error.field.converter.invalid": "Nieprawidłowy konwerter \"{converter}\"",
"error.field.type.missing": "Field \"{ name }\": The field type \"{ type }\" does not exist",
"error.field.type.missing": "Pole „{ name }”: Typ pola „{ type }” nie istnieje",
"error.file.changeName.empty": "Imię nie może być puste",
"error.file.changeName.permission": "Nie masz uprawnień, by zmienić nazwę \"{filename}\"",
@ -110,14 +110,14 @@
"error.language.name": "Wprowadź poprawną nazwę języka.",
"error.language.notFound": "Język nie został odnaleziony",
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
"error.layout.validation.block": "Wystąpił błąd w polu „{field}” w bloku {blockIndex} o typie bloku „{fieldset}” w układzie {layoutIndex}",
"error.layout.validation.settings": "W ustawieniach układu {index} jest błąd",
"error.license.format": "Wprowadź poprawny klucz licencyjny",
"error.license.email": "Wprowadź poprawny adres email",
"error.license.verification": "Nie udało się zweryfikować licencji",
"error.object.validation": "Theres an error in the \"{label}\" field:\n{message}",
"error.object.validation": "Wystąpił błąd w polu „{label}”:\n{message}",
"error.offline": "Panel jest obecnie offline",
@ -183,6 +183,7 @@
"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.excessive": "Wpisz prawidłowe hasło. Hasła nie mogą być dłuższe niż 1000 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",
@ -262,7 +263,7 @@
"field.blocks.image.placeholder": "Wybierz obrazek",
"field.blocks.image.ratio": "Proporcje",
"field.blocks.image.url": "URL obrazka",
"field.blocks.line.name": "Linijka",
"field.blocks.line.name": "Linia",
"field.blocks.list.name": "Lista",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Tekst",
@ -287,13 +288,13 @@
"field.layout.empty": "Nie ma jeszcze żadnych rzędów",
"field.layout.select": "Wybierz układ",
"field.object.empty": "No information yet",
"field.object.empty": "Brak informacji",
"field.pages.empty": "Nie wybrano jeszcze żadnych stron",
"field.structure.delete.confirm": "Czy na pewno chcesz usunąć ten wiersz?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.empty": "Nie ma jeszcze \u017cadnych wpis\u00f3w.",
"field.structure.delete.confirm.all": "Czy na pewno chcesz usunąć wszystkie wpisy?",
"field.structure.empty": "Nie ma jeszcze żadnych wpisów.",
"field.users.empty": "Nie wybrano jeszcze żadnych użytkowników",
@ -326,7 +327,7 @@
"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": "Język",
"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>",
@ -353,8 +354,8 @@
"license.manage": "Zarządzaj swoimi licencjami",
"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.domain": "Your license will be registered to <strong>{host}</strong>.",
"license.register.local": "You are about to register your license for your local domain <strong>{host}</strong>. If this site will be deployed to a public domain, please register it there instead. If {host} is the domain you want to license Kirby to, please continue.",
"license.register.domain": "Twoja licencja zostanie zarejestrowana na <strong>{host}</strong>.",
"license.register.local": "Zamierzasz zarejestrować licencję dla swojej domeny lokalnej <strong>{host}</strong>. Jeśli ta witryna zostanie wdrożona w domenie ogólnodostępnej, zarejestruj ją tam. Jeżeli {host} jest faktycznie domeną, do której chcesz przypisać licencję, kontynuuj.",
"license.register.success": "Dziękujemy za wspieranie Kirby",
"license.unregistered": "To jest niezarejestrowana wersja demonstracyjna Kirby",
"license.unregistered.label": "Niezarejestrowane",
@ -396,18 +397,18 @@
"minutes": "Minuty",
"month": "Miesiąc",
"months.april": "Kwiecie\u0144",
"months.august": "Sierpie\u0144",
"months.december": "Grudzie\u0144",
"months.april": "Kwiecień",
"months.august": "Sierpień",
"months.december": "Grudzień",
"months.february": "Luty",
"months.january": "Stycze\u0144",
"months.january": "Styczeń",
"months.july": "Lipiec",
"months.june": "Czerwiec",
"months.march": "Marzec",
"months.may": "Maj",
"months.november": "Listopad",
"months.october": "Pa\u017adziernik",
"months.september": "Wrzesie\u0144",
"months.october": "Październik",
"months.september": "Wrzesień",
"more": "Więcej",
"name": "Nazwa",
@ -426,8 +427,8 @@
"orientation.square": "Kwadrat",
"page.blueprint": "Ta strona nie ma jeszcze wzorca. Możesz go zdefiniować w <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Zmie\u0144 URL",
"page.changeSlug.fromTitle": "Utw\u00f3rz na podstawie tytu\u0142u",
"page.changeSlug": "Zmień URL",
"page.changeSlug.fromTitle": "Utwórz na podstawie tytułu",
"page.changeStatus": "Zmień status",
"page.changeStatus.position": "Wybierz pozycję",
"page.changeStatus.select": "Wybierz nowy status",
@ -456,19 +457,19 @@
"pagination.page": "Strona",
"password": "Has\u0142o",
"password": "Hasło",
"paste": "Wklej",
"paste.after": "Wklej po",
"pixel": "Piksel",
"plugin": "Plugin",
"plugin": "Wtyczka",
"plugins": "Wtyczki",
"prev": "Poprzednie",
"preview": "Podgląd",
"remove": "Usuń",
"rename": "Zmień nazwę",
"replace": "Zamie\u0144",
"retry": "Pon\u00f3w pr\u00f3b\u0119",
"revert": "Odrzu\u0107",
"replace": "Zastąp",
"retry": "Ponów próbę",
"revert": "Odrzuć",
"revert.confirm": "Czy na pewno chcesz <strong>usunąć wszystkie niezapisane zmiany</strong>?",
"role": "Rola",
@ -500,24 +501,24 @@
"stats.empty": "Brak raportów",
"system.issues.content": "Zdaje się, że folder „content” jest wystawiony na publiczny dostęp",
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
"system.issues.eol.kirby": "Twoja zainstalowana wersja Kirby osiągnęła koniec okresu wsparcia i nie będzie otrzymywać dalszych aktualizacji zabezpieczeń",
"system.issues.eol.plugin": "Twoja zainstalowana wersja wtyczki { plugin } osiągnęła koniec okresu wsparcia i nie będzie otrzymywać dalszych aktualizacji zabezpieczeń",
"system.issues.debug": "Debugowanie musi być wyłączone w środowisku produkcyjnym",
"system.issues.git": "Zdaje się, że folder „.git” jest wystawiony na publiczny dostęp",
"system.issues.https": "Zalecamy HTTPS dla wszystkich Twoich witryn",
"system.issues.kirby": "Zdaje się, że folder „kirby” jest wystawiony na publiczny dostęp",
"system.issues.site": "Zdaje się, że folder „site” jest wystawiony na publiczny dostęp",
"system.issues.vulnerability.kirby": "Your installation might be affected by the following vulnerability ({ severity } severity): { description }",
"system.issues.vulnerability.plugin": "Your installation might be affected by the following vulnerability in the { plugin } plugin ({ severity } severity): { description }",
"system.updateStatus": "Update status",
"system.updateStatus.error": "Could not check for updates",
"system.updateStatus.not-vulnerable": "No known vulnerabilities",
"system.updateStatus.security-update": "Free security update { version } available",
"system.updateStatus.security-upgrade": "Upgrade { version } with security fixes available",
"system.updateStatus.unreleased": "Unreleased version",
"system.updateStatus.up-to-date": "Up to date",
"system.updateStatus.update": "Free update { version } available",
"system.updateStatus.upgrade": "Upgrade { version } available",
"system.issues.vulnerability.kirby": "Twojej instalacji może zagrażać następująca luka w zabezpieczeniach ({ severity } stopień): { description }",
"system.issues.vulnerability.plugin": "Twojej instalacji może zagrażać następująca luka w zabezpieczeniach we wtyczce { plugin } ({ severity } poziom): { description }",
"system.updateStatus": "Stan aktualizacji",
"system.updateStatus.error": "Nie udało się sprawdzić dostępności aktualizacji",
"system.updateStatus.not-vulnerable": "Brak znanych luk bezpieczeństwa",
"system.updateStatus.security-update": "Dostępna darmowa aktualizacja { version } z poprawkami bezpieczeństwa",
"system.updateStatus.security-upgrade": "Dostępna aktualizacja { version } z poprawkami bezpieczeństwa",
"system.updateStatus.unreleased": "Niepublikowana wersja",
"system.updateStatus.up-to-date": "Aktualna",
"system.updateStatus.update": "Dostępna darmowa aktualizacja { version }",
"system.updateStatus.upgrade": "Dostępna aktualizacja { version }",
"title": "Tytuł",
"template": "Szablon",
@ -584,9 +585,9 @@
"users": "Użytkownicy",
"version": "Wersja",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
"version.current": "Obecna wersja",
"version.latest": "Ostatnia wersja",
"versionInformation": "Informacje o wersji",
"view.account": "Twoje konto",
"view.installation": "Instalacja",
@ -594,7 +595,7 @@
"view.resetPassword": "Zresetuj hasło",
"view.site": "Strona",
"view.system": "System",
"view.users": "U\u017cytkownicy",
"view.users": "Użytkownicy",
"welcome": "Witaj",
"year": "Rok",

View file

@ -3,13 +3,13 @@
"account.delete": "Deletar sua conta",
"account.delete.confirm": "Deseja realmente deletar sua conta? Você sairá do site imediatamente. Sua conta não poderá ser recuperada. ",
"add": "Adicionar",
"add": "Add",
"author": "Autor",
"avatar": "Foto do perfil",
"back": "Voltar",
"cancel": "Cancelar",
"back": "Back",
"cancel": "Cancel",
"change": "Alterar",
"close": "Fechar",
"close": "Close",
"confirm": "Salvar",
"collapse": "Colapsar",
"collapse.all": "Colapsar todos",
@ -22,11 +22,11 @@
"day": "Dia",
"days.fri": "Sex",
"days.mon": "Seg",
"days.sat": "S\u00e1b",
"days.mon": "Mon",
"days.sat": "Sáb",
"days.sun": "Dom",
"days.thu": "Qui",
"days.tue": "Ter",
"days.tue": "Tue",
"days.wed": "Qua",
"debugging": "Depuração ",
@ -40,14 +40,14 @@
"dimensions": "Dimensões",
"disabled": "Desativado",
"discard": "Descartar",
"discard": "Discard",
"download": "Baixar",
"duplicate": "Duplicar",
"edit": "Editar",
"edit": "Edit",
"email": "Email",
"email.placeholder": "mail@exemplo.com",
"email.placeholder": "mail@exemplo.pt",
"entries": "Entries",
"entry": "Entry",
@ -100,7 +100,7 @@
"error.file.orientation": "A orientação da imagem deve ser “{orientation}”",
"error.file.type.forbidden": "Você não tem permissão para enviar arquivos {type}",
"error.file.type.invalid": "Tipo inválido de arquivo: {type}",
"error.file.undefined": "Arquivo n\u00e3o encontrado",
"error.file.undefined": "Arquivo não encontrado",
"error.form.incomplete": "Por favor, corrija os erros do formulário…",
"error.form.notSaved": "O formulário não pôde ser salvo",
@ -143,7 +143,7 @@
"error.page.slug.maxlength": "O slug deve ter menos de “{length}” caracteres",
"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.undefined": "Página não 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}\"",
@ -183,6 +183,7 @@
"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.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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",
@ -347,7 +348,7 @@
"languages.secondary": "Idiomas secundários",
"languages.secondary.empty": "Nenhum idioma secundário",
"license": "Licen\u00e7a do Kirby ",
"license": "Licença do Kirby ",
"license.buy": "Comprar licença",
"license.register": "Registrar",
"license.manage": "Manage your licenses",
@ -372,7 +373,7 @@
"lock.unlock": "Destrancar",
"lock.isUnlocked": "Suas mudanças não salvas foram alteradas por outro usuário, e serão perdidas. Você pode baixar um arquivo com suas mudanças, para depois fundi-las manualmente. ",
"login": "Entrar",
"login": "Log in",
"login.code.label.login": "Código de acesso",
"login.code.label.password-reset": "Código de redefinição de senha",
"login.code.placeholder.email": "000 0000",
@ -388,7 +389,7 @@
"login.toggleText.password-reset.email": "Esqueceu sua senha?",
"login.toggleText.password-reset.email-password": "← Voltar à entrada",
"logout": "Sair",
"logout": "Log out",
"menu": "Menu",
"meridiem": "AM/PM",
@ -396,14 +397,14 @@
"minutes": "Minutos",
"month": "Mês",
"months.april": "Abril",
"months.april": "April",
"months.august": "Agosto",
"months.december": "Dezembro",
"months.december": "December",
"months.february": "Fevereiro",
"months.january": "Janeiro",
"months.july": "Julho",
"months.june": "Junho",
"months.march": "Mar\u00e7o",
"months.june": "June",
"months.march": "Março",
"months.may": "Maio",
"months.november": "Novembro",
"months.october": "Outubro",
@ -427,7 +428,7 @@
"page.blueprint": "Esta página não tem planta. Você pode definir sua planta em <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Alterar URL",
"page.changeSlug.fromTitle": "Criar a partir do t\u00edtulo",
"page.changeSlug.fromTitle": "Criar a partir do título",
"page.changeStatus": "Alterar estado",
"page.changeStatus.position": "Selecione uma posição",
"page.changeStatus.select": "Selecione um novo estado",
@ -448,7 +449,7 @@
"page.status.unlisted": "Não listadas",
"page.status.unlisted.description": "Esta página é acessível somente através da URL",
"pages": "Páginas",
"pages": "Pages",
"pages.empty": "Nenhuma página",
"pages.status.draft": "Rascunhos",
"pages.status.listed": "Publicadas",
@ -466,12 +467,12 @@
"preview": "Visualizar",
"remove": "Remover",
"rename": "Renomear",
"replace": "Substituir",
"replace": "Replace",
"retry": "Tentar novamente",
"revert": "Descartar",
"revert.confirm": "Deseja realmente <strong>deletar todas as mudanças não salvas</strong>?",
"role": "Papel",
"role": "Função",
"role.admin.description": "O administrador tem todos os direitos",
"role.admin.title": "Administrador",
"role.all": "Todos",
@ -534,7 +535,7 @@
"toolbar.button.heading.5": "Título 5",
"toolbar.button.heading.6": "Título 6",
"toolbar.button.italic": "Itálico",
"toolbar.button.file": "Arquivo",
"toolbar.button.file": "File",
"toolbar.button.file.select": "Selecionar arquivo",
"toolbar.button.file.upload": "Carregar arquivo",
"toolbar.button.link": "Link",
@ -561,7 +562,7 @@
"upload.error.noFiles": "Nenhum arquivo foi carregado",
"upload.error.partial": "O arquivo foi só parcialmente carregado",
"upload.error.tmpDir": "Falta uma pasta temporária",
"upload.errors": "Erro",
"upload.errors": "Error",
"upload.progress": "Enviando…",
"url": "Url",
@ -577,24 +578,24 @@
"user.changePassword.new.confirm": "Confirme a nova senha…",
"user.changeRole": "Alterar papel",
"user.changeRole.select": "Selecione um novo papel",
"user.create": "Adicionar novo usuário",
"user.create": "Add a new user",
"user.delete": "Deletar este usuário",
"user.delete.confirm": "Deseja realmente deletar <br><strong>{email}</strong>?",
"users": "Usuários",
"version": "Vers\u00e3o do Kirby",
"version": "Versão do Kirby",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
"view.account": "Sua conta",
"view.installation": "Instala\u00e7\u00e3o",
"view.installation": "Instalação",
"view.languages": "Idiomas",
"view.resetPassword": "Redefinir senha",
"view.site": "Site",
"view.system": "Sistema",
"view.users": "Usu\u00e1rios",
"view.users": "Usuários",
"welcome": "Bem-vindo",
"year": "Ano",

View file

@ -3,13 +3,13 @@
"account.delete": "Deletar sua conta",
"account.delete.confirm": "Deseja realmente deletar sua conta? Você sairá do site imediatamente. Sua conta não poderá ser recuperada. ",
"add": "Adicionar",
"add": "Add",
"author": "Autor",
"avatar": "Foto do perfil",
"back": "Voltar",
"cancel": "Cancelar",
"back": "Back",
"cancel": "Cancel",
"change": "Alterar",
"close": "Fechar",
"close": "Close",
"confirm": "Salvar",
"collapse": "Colapsar",
"collapse.all": "Colapsar todos",
@ -22,11 +22,11 @@
"day": "Dia",
"days.fri": "Sex",
"days.mon": "Seg",
"days.sat": "S\u00e1b",
"days.mon": "Mon",
"days.sat": "Sáb",
"days.sun": "Dom",
"days.thu": "Qui",
"days.tue": "Ter",
"days.tue": "Tue",
"days.wed": "Qua",
"debugging": "Depuração ",
@ -40,11 +40,11 @@
"dimensions": "Dimensões",
"disabled": "Inativo",
"discard": "Descartar",
"discard": "Discard",
"download": "Descarregar",
"duplicate": "Duplicar",
"edit": "Editar",
"edit": "Edit",
"email": "Email",
"email.placeholder": "mail@exemplo.pt",
@ -100,7 +100,7 @@
"error.file.orientation": "A orientação da imagem deve ser \"{orientation}\"",
"error.file.type.forbidden": "Não tem permissões para enviar arquivos {type}",
"error.file.type.invalid": "Tipo inválido de arquivo: {type}",
"error.file.undefined": "Arquivo n\u00e3o encontrado",
"error.file.undefined": "Arquivo não encontrado",
"error.form.incomplete": "Por favor, corrija os erros do formulário…",
"error.form.notSaved": "O formulário não foi guardado",
@ -143,7 +143,7 @@
"error.page.slug.maxlength": "O slug não pode conter mais do que \"{length}\" caracteres",
"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.undefined": "Página não 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}\"",
@ -183,6 +183,7 @@
"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.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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",
@ -347,7 +348,7 @@
"languages.secondary": "Idiomas secundários",
"languages.secondary.empty": "Nenhum idioma secundário",
"license": "Licen\u00e7a do Kirby ",
"license": "Licença do Kirby ",
"license.buy": "Comprar uma licença",
"license.register": "Registrar",
"license.manage": "Manage your licenses",
@ -372,14 +373,14 @@
"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": "Log in",
"login.code.label.login": "Código de acesso",
"login.code.label.password-reset": "Código de redefinição de senha",
"login.code.placeholder.email": "000 0000",
"login.code.text.email": "Se seu endereço de email está registrado, o código requisitado será mandado por email.",
"login.email.login.body": "Hi {user.nameOrEmail},\n\nYou recently requested a login code for the Panel of {site}.\nThe following login code will be valid for {timeout} minutes:\n\n{code}\n\nIf you did not request a login code, please ignore this email or contact your administrator if you have questions.\nFor security, please DO NOT forward this email.",
"login.email.login.body": "Oi, {user.nameOrEmail},\n\nVocê recentemente pediu um código de acesso ao painel administrativo do site {site}.\nO seguinte código será válido por {timeout} minutos:\n\n{code}\n\nSe você não pediu este código de acesso, por favor ignore esta mensagem, ou contate seu Administrador de Sistemas se você tiver dúvidas.\nPor questões de segurança, por favor NÃO compartilhe esta mensagem.",
"login.email.login.subject": "Seu código de acesso",
"login.email.password-reset.body": "Hi {user.nameOrEmail},\n\nYou recently requested a password reset code for the Panel of {site}.\nThe following password reset code will be valid for {timeout} minutes:\n\n{code}\n\nIf you did not request a password reset code, please ignore this email or contact your administrator if you have questions.\nFor security, please DO NOT forward this email.",
"login.email.password-reset.body": "Oi, {user.nameOrEmail},\n\nVocê recentemente pediu um código de redefinição de senha, para o painel administrativo do site {site}.\nO seguinte código de redefinição de senha será válido por {timeout} minutos:\n\n{code}\n\nSe você não pediu este código, por favor ignore esta mensagem, ou contate seu Administrador de Sistemas se você tiver dúvidas.\nPor questões de segurança, por favor NÃO compartilhe esta mensagem.",
"login.email.password-reset.subject": "Seu código de redefinição de senha",
"login.remember": "Manter-me conectado",
"login.reset": "Redefinir senha",
@ -388,7 +389,7 @@
"login.toggleText.password-reset.email": "Esqueceu sua senha?",
"login.toggleText.password-reset.email-password": "← Voltar à entrada",
"logout": "Sair",
"logout": "Log out",
"menu": "Menu",
"meridiem": "AM/PM",
@ -396,14 +397,14 @@
"minutes": "Minutos",
"month": "Mês",
"months.april": "Abril",
"months.april": "April",
"months.august": "Agosto",
"months.december": "Dezembro",
"months.december": "December",
"months.february": "Fevereiro",
"months.january": "Janeiro",
"months.july": "Julho",
"months.june": "Junho",
"months.march": "Mar\u00e7o",
"months.june": "June",
"months.march": "Março",
"months.may": "Maio",
"months.november": "Novembro",
"months.october": "Outubro",
@ -427,7 +428,7 @@
"page.blueprint": "Esta página não tem planta. Você pode definir sua planta em <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Alterar URL",
"page.changeSlug.fromTitle": "Criar a partir do t\u00edtulo",
"page.changeSlug.fromTitle": "Criar a partir do título",
"page.changeStatus": "Alterar estado",
"page.changeStatus.position": "Selecione uma posição",
"page.changeStatus.select": "Selecione um novo estado",
@ -448,7 +449,7 @@
"page.status.unlisted": "Não listadas",
"page.status.unlisted.description": "Esta página é acessível somente através da URL",
"pages": "Páginas",
"pages": "Pages",
"pages.empty": "Nenhuma página",
"pages.status.draft": "Rascunhos",
"pages.status.listed": "Publicadas",
@ -456,7 +457,7 @@
"pagination.page": "Página",
"password": "Palavra-passe",
"password": "Senha",
"paste": "Colar",
"paste.after": "Colar após",
"pixel": "Pixel",
@ -466,7 +467,7 @@
"preview": "Visualizar",
"remove": "Remover",
"rename": "Renomear",
"replace": "Substituir",
"replace": "Replace",
"retry": "Tentar novamente",
"revert": "Descartar",
"revert.confirm": "Tem a certeza que pretende <strong>eliminar todas as alterações por guardar</strong>?",
@ -534,7 +535,7 @@
"toolbar.button.heading.5": "Título 5",
"toolbar.button.heading.6": "Título 6",
"toolbar.button.italic": "Itálico",
"toolbar.button.file": "Ficheiro",
"toolbar.button.file": "File",
"toolbar.button.file.select": "Selecione o arquivo",
"toolbar.button.file.upload": "Carregue o arquivo",
"toolbar.button.link": "Link",
@ -561,7 +562,7 @@
"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.errors": "Error",
"upload.progress": "A enviar…",
"url": "Url",
@ -577,24 +578,24 @@
"user.changePassword.new.confirm": "Confirme a nova palavra-passe…",
"user.changeRole": "Alterar Função",
"user.changeRole.select": "Selecione uma nova função",
"user.create": "Adicionar novo utilizador",
"user.create": "Add a new user",
"user.delete": "Excluir este utilizador",
"user.delete.confirm": "Deseja realmente excluir <br><strong>{email}</strong>?",
"users": "Utilizadores",
"users": "Usuários",
"version": "Vers\u00e3o do Kirby",
"version": "Versão do Kirby",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
"view.account": "A sua conta",
"view.installation": "Instala\u00e7\u00e3o",
"view.installation": "Instalação",
"view.languages": "Idiomas",
"view.resetPassword": "Redefinir senha",
"view.site": "Site",
"view.system": "Sistema",
"view.users": "Utilizadores",
"view.users": "Usuários",
"welcome": "Bem-vindo",
"year": "Ano",

View file

@ -0,0 +1,603 @@
{
"account.changeName": "Schimbă-ți numele",
"account.delete": "Șterge-ți contul",
"account.delete.confirm": "Chiar vrei să îți ștergi contul? Vei fi deconectat imediat. Contul nu poate fi recuperat.",
"add": "Adaugă",
"author": "Autor",
"avatar": "Imagine de profil",
"back": "Înapoi",
"cancel": "Anulează",
"change": "Schimbă",
"close": "Închide",
"confirm": "Ok",
"collapse": "Pliază",
"collapse.all": "Pliază toate",
"copy": "Copiază",
"copy.all": "Copiază toate",
"create": "Creează",
"date": "Data",
"date.select": "Alege o dată",
"day": "Ziua",
"days.fri": "Vin",
"days.mon": "Lun",
"days.sat": "Sâm",
"days.sun": "Dum",
"days.thu": "Joi",
"days.tue": "Mar",
"days.wed": "Mie",
"debugging": "Depanare",
"delete": "Șterge",
"delete.all": "Șterge toate",
"dialog.files.empty": "Nu există fișiere de selectat",
"dialog.pages.empty": "Nu există pagini de selectat",
"dialog.users.empty": "Nu există utilizatori de selectat",
"dimensions": "Dimensiuni",
"disabled": "Dezactivat",
"discard": "Renunță",
"download": "Descarcă",
"duplicate": "Duplică",
"edit": "Editează",
"email": "Adresă e-mail",
"email.placeholder": "email@exemplu.ro",
"entries": "Întregistrări",
"entry": "Înregistrare",
"environment": "Mediu",
"error.access.code": "Cod invalid",
"error.access.login": "Conectare invalidă",
"error.access.panel": "Nu ai voie să accesezi panoul",
"error.access.view": "Nu ai voie să accesezi această parte a panoului",
"error.avatar.create.fail": "Imaginea de profil nu a putut fi încărcată",
"error.avatar.delete.fail": "Imaginea de profil nu a putut fi ștearsă",
"error.avatar.dimensions.invalid": "Păstrează te rog lățimea și înălțimea imaginii de profil sub 3000 de pixeli",
"error.avatar.mime.forbidden": "Imaginea de profil trebuie să fie un fișier JPEG sau PNG",
"error.blueprint.notFound": "Blueprint-ul \"{name}\" nu a putut fi încărcat",
"error.blocks.max.plural": "Nu poți adăuga mai mult de {max} blocuri",
"error.blocks.max.singular": "Nu poți adăuga mai mult de un bloc",
"error.blocks.min.plural": "Trebuie să adaugi cel puțin {min} blocuri",
"error.blocks.min.singular": "Trebuie să adaugi cel puțin un bloc",
"error.blocks.validation": "Există o eroare la câmpul \"{field}\" în blocul {index} care folosește tipul de bloc \"{fieldset}\"",
"error.cache.type.invalid": "Tipul de cache \"{type}\" este invalid",
"error.email.preset.notFound": "Preset-ul de e-mail \"{name}\" nu a fost găsit",
"error.field.converter.invalid": "Convertorul \"{converter}\" invalid",
"error.field.type.missing": "Câmpul \"{ name }\": Tipul de câmp \"{ type }\" nu există",
"error.file.changeName.empty": "Numele nu trebuie să fie gol",
"error.file.changeName.permission": "Nu ai voie să schimbi numele fișierului \"{filename}\"",
"error.file.duplicate": "Există deja un fișier cu numele \"{filename}\"",
"error.file.extension.forbidden": "Extensia de fișier \"{extension}\" nu este permisă",
"error.file.extension.invalid": "Extensie de fișier invalidă: {extension}",
"error.file.extension.missing": "Extensia de fișier pentru \"{filename}\" lipsește",
"error.file.maxheight": "Înălțimea imaginii nu poate depăși {height} pixeli",
"error.file.maxsize": "Fișierul este prea mare",
"error.file.maxwidth": "Lățimea imaginii nu poate depăși {width} pixeli",
"error.file.mime.differs": "Fișierul încărcat trebuie să aibă același tip mime \"{mime}\"",
"error.file.mime.forbidden": "Tipul media \"{mime}\" nu este permis",
"error.file.mime.invalid": "Tip mime invalid: {mime}",
"error.file.mime.missing": "Tipul media pentru \"{filename}\" nu poate fi detectat",
"error.file.minheight": "Imaginea trebuie să aibă înălțimea de minim {height} pixeli",
"error.file.minsize": "Fișierul este prea mic",
"error.file.minwidth": "Imaginea trebuie să aibă lățimea de minim {width} pixeli",
"error.file.name.missing": "Numele fișierului nu poate fi gol",
"error.file.notFound": "Fișierul \"{filename}\" nu a fost găsit",
"error.file.orientation": "Orientarea imaginii trebuie să fie \"{orientation}\"",
"error.file.type.forbidden": "Nu ai permisiunea să încarci fișiere {type}",
"error.file.type.invalid": "Tip invalid de fișier: {type}",
"error.file.undefined": "Fișierul nu a fost găsit",
"error.form.incomplete": "Te rog repară toate erorile din formular…",
"error.form.notSaved": "Formularul nu a putut fi salvat",
"error.language.code": "Te rog introdu un cod valid pentru limbă",
"error.language.duplicate": "Limba există deja",
"error.language.name": "Te rog introdu un nume valid pentru limbă",
"error.language.notFound": "Limba nu a fost găsită",
"error.layout.validation.block": "Există o eroare la câmpul \"{field}\" în blocul {blockIndex} care utilizează tipul de bloc \"{fieldset}\" în aranjamentul {layoutIndex}",
"error.layout.validation.settings": "Există o eroare la setările aranjamentului {index}",
"error.license.format": "Te rog introdu o cheie de licență validă",
"error.license.email": "Te rog introdu o adresă de e-mail validă",
"error.license.verification": "Licența nu a putut fi verificată",
"error.object.validation": "Există o eroare la câmpul \"{label}\":\n{message}",
"error.offline": "Panoul este momentan offline",
"error.page.changeSlug.permission": "Nu ai voie să schimbi apendicele URL pentru \"{slug}\"",
"error.page.changeStatus.incomplete": "Pagina are erori și nu poate fi publicată",
"error.page.changeStatus.permission": "Statusul acestei pagini nu poate fi schimbat",
"error.page.changeStatus.toDraft.invalid": "Pagina \"{slug}\" nu poate fi schimbată în ciornă",
"error.page.changeTemplate.invalid": "Șablonul paginii \"{slug}\" nu poate fi schimbat",
"error.page.changeTemplate.permission": "Nu ai voie să schimbi șablonul pentru \"{slug}\"",
"error.page.changeTitle.empty": "Titlul nu poate să rămână gol",
"error.page.changeTitle.permission": "Nu ai voie să schimbi titlul pentru \"{slug}\"",
"error.page.create.permission": "Nu ai voie să creezi \"{slug}\"",
"error.page.delete": "Pagina \"{slug}\" nu poate fi ștearsă",
"error.page.delete.confirm": "Te rog introdu titlul paginii pentru a confirma",
"error.page.delete.hasChildren": "Pagina are subpagini și nu poate fi ștearsă",
"error.page.delete.permission": "Nu ai voie să ștergi \"{slug}\"",
"error.page.draft.duplicate": "Există deja o ciornă cu apendicele URL \"{slug}\"",
"error.page.duplicate": "Există deja o pagină cu apendicele URL \"{slug}\"",
"error.page.duplicate.permission": "Nu ai voie să duplici \"{slug}\"",
"error.page.notFound": "Pagina \"{slug}\" nu a fost găsită",
"error.page.num.invalid": "Te rog introdu un număr de sortare valid. Numerele nu pot fi negative.",
"error.page.slug.invalid": "Te rog introdu un apendice URL valid",
"error.page.slug.maxlength": "Lungimea slug-ului nu poate depăși \"{length}\"",
"error.page.sort.permission": "Pagina \"{slug}\" nu poate fi sortată",
"error.page.status.invalid": "Te rog stabilește un status valid pentru pagină",
"error.page.undefined": "Pagina nu a fost găsită",
"error.page.update.permission": "Nu ai voie să actualizezi \"{slug}\"",
"error.section.files.max.plural": "Nu poți avea mai mult de {max} fișiere în secțiunea \"{section}\"",
"error.section.files.max.singular": "Nu poți avea mai mult de un fișier în secțiunea \"{section}\"",
"error.section.files.min.plural": "Secțiunea \"{section}\" are nevoie de cel puțin {min} fișiere",
"error.section.files.min.singular": "Secțiunea \"{section}\" are nevoie de cel puțin un fișier",
"error.section.pages.max.plural": "Nu poți avea mai mult de {max} pagini în secțiunea \"{section}\"",
"error.section.pages.max.singular": "Nu poți avea mai mult de o pagină în secțiunea \"{section}\"",
"error.section.pages.min.plural": "Secțiunea \"{section}\" are nevoie de cel puțin {min} pagini",
"error.section.pages.min.singular": "Secțiunea \"{section}\" are nevoie de cel puțin o pagină",
"error.section.notLoaded": "Secțiunea \"{name}\" nu a putut fi încărcată",
"error.section.type.invalid": "Tipul de secțiune \"{type}\" nu este valid",
"error.site.changeTitle.empty": "Titlul nu poate să rămână gol",
"error.site.changeTitle.permission": "Nu ai voie să schimbi titlul site-ului",
"error.site.update.permission": "Nu ai voie să actualizezi site-ul",
"error.template.default.notFound": "Șablonul implicit nu există",
"error.unexpected": "S-a produs o eroare neașteptată! Activează modul depanare pentru mai multe informații: https://getkirby.com/docs/reference/system/options/debug",
"error.user.changeEmail.permission": "Nu ai voie să schimbi adresa de e-mail a utilizatorului \"{name}\"",
"error.user.changeLanguage.permission": "Nu ai voie să schimbi limba utilizatorului \"{name}\"",
"error.user.changeName.permission": "Nu ai voie să schimbi numele utilizatorului \"{name}\"",
"error.user.changePassword.permission": "Nu ai voie să schimbi parola utilizatorului \"{name}\"",
"error.user.changeRole.lastAdmin": "Rolul ultimului administrator nu poate fi schimbat",
"error.user.changeRole.permission": "Nu ai voie să schimbi rolul utilizatorului \"{name}\"",
"error.user.changeRole.toAdmin": "Nu ai voie să promovezi un utilizator la rolul de administrator",
"error.user.create.permission": "Nu ai voie să creezi acest utilizator",
"error.user.delete": "Utilizatorul \"{name}\" nu poate fi șters",
"error.user.delete.lastAdmin": "Ultimul administrator nu poate fi șters",
"error.user.delete.lastUser": "Ultimul utilizator nu poate fi șters",
"error.user.delete.permission": "Nu ai voie să ștergi utilizatorul \"{name}\"",
"error.user.duplicate": "Există deja un utilizator cu adresa e-mail \"{email}\"",
"error.user.email.invalid": "Te rog introdu o adresă de e-mail validă",
"error.user.language.invalid": "Te rog introdu o limbă validă",
"error.user.notFound": "Utilizatorul \"{name}\" nu a fost găsit",
"error.user.password.excessive": "Te rog introdu o parolă validă. Parolele nu pot fi mai lungi de 1000 de caractere.",
"error.user.password.invalid": "Te rog introdu o parolă validă. Parola trebuie să aibă cel puțin 8 caractere.",
"error.user.password.notSame": "Parolele nu se potrivesc",
"error.user.password.undefined": "Utilizatorul nu are parolă",
"error.user.password.wrong": "Parolă greșită",
"error.user.role.invalid": "Te rog introdu un rol valid",
"error.user.undefined": "Utilizatorul nu a fost găsit",
"error.user.update.permission": "Nu ai voie să actualizezi utilizatorul \"{name}\"",
"error.validation.accepted": "Te rog confirmă",
"error.validation.alpha": "Te rog introdu doar caractere din intervalul a-z",
"error.validation.alphanum": "Te rog introdu doar caractere din intervalul a-z sau cifre 0-9",
"error.validation.between": "Te rog introdu o valoare între \"{min}\" și \"{max}\"",
"error.validation.boolean": "Te rog confirmă sau refuză",
"error.validation.contains": "Te rog introdu o valoare care conține \"{needle}\"",
"error.validation.date": "Te rog introdu o dată validă",
"error.validation.date.after": "Te rog introdu o dată după {date}",
"error.validation.date.before": "Te rog introdu o dată dinainte de {date}",
"error.validation.date.between": "Te rog introdu o dată între {min} și {max}",
"error.validation.denied": "Te rog refuză",
"error.validation.different": "Valoarea nu poate fi \"{other}\"",
"error.validation.email": "Te rog introdu o adresă de e-mail validă",
"error.validation.endswith": "Valoarea nu se poate termina cu \"{end}\"",
"error.validation.filename": "Te rog introdu un nume valid de fișier",
"error.validation.in": "Te rog introdu una dintre următoarele: ({in})",
"error.validation.integer": "Te rog introdu un număr întreg valid",
"error.validation.ip": "Te rog introdu o adresă IP validă",
"error.validation.less": "Te rog introdu o valoare mai mică decât {max}",
"error.validation.match": "Valoarea nu se potrivește cu forma așteptată",
"error.validation.max": "Te rog introdu o valoare mai mică sau egală cu {max}",
"error.validation.maxlength": "Te rog introdu o valoare mai scurtă. (max. {max} caractere)",
"error.validation.maxwords": "Te rog nu introduce mai mult de {max} cuvinte.",
"error.validation.min": "Te rog introdu o valoare mai mare sau egală cu {min}",
"error.validation.minlength": "Te rog introdu o valoare mai lungă. (min. {min} caractere)",
"error.validation.minwords": "Te rog introdu cel puțin {min} cuvinte",
"error.validation.more": "Te rog introdu o valoare mai mare decât {min}",
"error.validation.notcontains": "Te rog introdu o valoare care să nu conțină \"{needle}\"",
"error.validation.notin": "Te rog nu introduce niciuna dintre următoarele: ({notIn})",
"error.validation.option": "Te rog alege o opțiune validă",
"error.validation.num": "Te rog introdu un număr valid",
"error.validation.required": "Te rog introdu ceva",
"error.validation.same": "Te rog introdu \"{other}\"",
"error.validation.size": "Dimensiunea valorii trebuie să fie \"{size}\"",
"error.validation.startswith": "Valoarea trebuie să înceapă cu \"{start}\"",
"error.validation.time": "Te rog introdu un timp valid",
"error.validation.time.after": "Te rog introdu un timp după {time}",
"error.validation.time.before": "Te rog introdu un timp înainte de {time}",
"error.validation.time.between": "Te rog introdu un timp între {min} și {max}",
"error.validation.url": "Te rog introdu un URL valid",
"expand": "Extinde",
"expand.all": "Extinde toate",
"field.required": "Acest câmp este necesar",
"field.blocks.changeType": "Schimbă tipul",
"field.blocks.code.name": "Cod",
"field.blocks.code.language": "Limba",
"field.blocks.code.placeholder": "Codul tău …",
"field.blocks.delete.confirm": "Chiar vrei să ștergi acest bloc?",
"field.blocks.delete.confirm.all": "Chiar vrei să ștergi toate blocurile?",
"field.blocks.delete.confirm.selected": "Chiar vrei să ștergi blocurile selectate?",
"field.blocks.empty": "Niciun bloc deocamdată",
"field.blocks.fieldsets.label": "Te rog alege un tip de bloc …",
"field.blocks.fieldsets.paste": "Apasă <kbd>{{ shortcut }}</kbd> pentru a insera/aduce blocuri din clipboard-ul tău",
"field.blocks.gallery.name": "Galerie",
"field.blocks.gallery.images.empty": "Nicio imagine deocamdată",
"field.blocks.gallery.images.label": "Imagini",
"field.blocks.heading.level": "Nivel",
"field.blocks.heading.name": "Subtitlu",
"field.blocks.heading.text": "Text",
"field.blocks.heading.placeholder": "Subtitlu …",
"field.blocks.image.alt": "Text alternativ",
"field.blocks.image.caption": "Etichetă",
"field.blocks.image.crop": "Decupaj",
"field.blocks.image.link": "Legătură",
"field.blocks.image.location": "Localizare",
"field.blocks.image.name": "Imagine",
"field.blocks.image.placeholder": "Alege o imagine",
"field.blocks.image.ratio": "Raport",
"field.blocks.image.url": "URL-ul imaginii",
"field.blocks.line.name": "Linie",
"field.blocks.list.name": "Listă",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Text",
"field.blocks.markdown.placeholder": "Markdown …",
"field.blocks.quote.name": "Citat",
"field.blocks.quote.text.label": "Text",
"field.blocks.quote.text.placeholder": "Citat …",
"field.blocks.quote.citation.label": "Citare",
"field.blocks.quote.citation.placeholder": "de …",
"field.blocks.text.name": "Text",
"field.blocks.text.placeholder": "Text …",
"field.blocks.video.caption": "Etichetă",
"field.blocks.video.name": "Video",
"field.blocks.video.placeholder": "Introdu URL-ul video-ului",
"field.blocks.video.url.label": "URL-ul video-ului",
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Niciun fișier selectat deocamdată",
"field.layout.delete": "Șterge aranjamentul",
"field.layout.delete.confirm": "Chiar vrei să ștergi acest aranjament?",
"field.layout.empty": "Niciun rând deocamdată",
"field.layout.select": "Alege un aranjament",
"field.object.empty": "Nicio informație deocamdată",
"field.pages.empty": "Nicio pagină aleasă deocamdată",
"field.structure.delete.confirm": "Chiar vrei să ștergi acest rând?",
"field.structure.delete.confirm.all": "Chiar vrei să ștergi toate înregistrările?",
"field.structure.empty": "Nicio înregistrare deocamdată",
"field.users.empty": "Niciun utilizator ales deocamdată",
"file.blueprint": "Acest fișier nu are încă un Blueprint. Poți să-l definești în <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "Chiar vrei să ștergi <br><strong>{filename}</strong>?",
"file.sort": "Schimbă poziția",
"files": "Fișiere",
"files.empty": "Niciun fișier deocamdată",
"hide": "Ascunde",
"hour": "Ora",
"import": "Importă",
"info": "Informații",
"insert": "Inserează",
"insert.after": "Inserează după",
"insert.before": "Inserează înainte",
"install": "Instalează",
"installation": "Instalare",
"installation.completed": "Panoul a fost instalat",
"installation.disabled": "Instalarea panoului este dezactivată în mod implicit pe servere publice. Te rog rulează instalarea pe o mașină locală sau activează-l cu opțiunea <code>panel.install</code>.",
"installation.issues.accounts": "Directorul <i>/site/accounts</i> nu există sau nu are permisiuni de scriere.",
"installation.issues.content": "Directorul <code>/content</code> nu există sau nu are permisiuni de scriere.",
"installation.issues.curl": "Extensia <code>CURL</code> este necesară",
"installation.issues.headline": "Panoul nu poate fi instalat",
"installation.issues.mbstring": "Extensia <code>MB String</code> este necesară",
"installation.issues.media": "Directorul <code>/media</code> nu există sau nu are permisiuni de scriere",
"installation.issues.php": "Asigură-te că folosești <code>PHP 8+</code>",
"installation.issues.server": "Kirby are nevoie de <code>Apache</code>, <code>Nginx</code> sau <code>Caddy</code>",
"installation.issues.sessions": "Directorul <code>/site/sessions</code> folder nu există sau nu are permisiuni de scriere",
"language": "Limba",
"language.code": "Cod",
"language.convert": "Stabilește ca implicit",
"language.convert.confirm": "<p>Chiar vrei să transformi <strong>{name}</strong> în limba implicită? Această modificare este ireversibilă.</p><p>Dacă <strong>{name}</strong> are conținut netradus, unele părți din site s-ar putea să nu mai aibă conținut de rezervă, și vor apărea goale.</p>",
"language.create": "Adaugă o limbă nouă",
"language.delete.confirm": "Chiar vrei să ștergi limba <strong>{name}</strong>, inclusiv toate traducerile? Această operațiune este ireversibilă.",
"language.deleted": "Limba a fost ștearsă",
"language.direction": "Direcția de citire",
"language.direction.ltr": "De la stânga la dreapta",
"language.direction.rtl": "De la dreapta la stânga",
"language.locale": "String-ul PHP locale",
"language.locale.warning": "Folosești pentru localizare o formulă manuală. Modificările le poți face în fișierul de limbă în /site/languages",
"language.name": "Nume",
"language.updated": "Limba a fost actualizată",
"languages": "Limbi",
"languages.default": "Limba implicită",
"languages.empty": "Nu există limbi deocamdată",
"languages.secondary": "Limbi secundare",
"languages.secondary.empty": "Nu există limbi secundare deocamdată.",
"license": "Licența",
"license.buy": "Cumpără o licență",
"license.register": "Înregistrează-te",
"license.manage": "Gestionează-ți licențele",
"license.register.help": "Ai primit codul de licență pe adresa de e-mail după cumpărare. Te rog copiaz-o și insereaz-o pentru a te înregistra.",
"license.register.label": "Te rog introdu codul tău de licență",
"license.register.domain": "Licența îți va fi înregistrată pentru <strong>{host}</strong>.",
"license.register.local": "Ești pe punctul de a-ți înregistra licența pentru domeniul tău local <strong>{host}</strong>. Dacă acest site va fi instalat pe un domeniu public, te rog înregistrează licența acolo, nu aici. Dacă {host} este domeniul pentru care vrei licența Kirby, te rog continuă.",
"license.register.success": "Mulțumim că susții Kirby",
"license.unregistered": "Acesta este un demo Kirby neînregistrat",
"license.unregistered.label": "Neînregistrat",
"link": "Legătură",
"link.text": "Textul legăturii",
"loading": "Se încarcă",
"lock.unsaved": "Schimbări nesalvate",
"lock.unsaved.empty": "Nu mai există nicio schimbare nesalvată",
"lock.isLocked": "Schimbări nesalvate de <strong>{email}</strong>",
"lock.file.isLocked": "Fișierul este editat momentan de {email} și nu poate fi schimbat.",
"lock.page.isLocked": "Pagina este editată momentan de {email} și nu poate fi schimbată.",
"lock.unlock": "Deblochează",
"lock.isUnlocked": "Schimbările tale nesalvate au fost suprascrise de un alt utilizator. Poți să-ți descarci schimbările pentru a le încorpora manual.",
"login": "Conectează-te",
"login.code.label.login": "Cod de conectare",
"login.code.label.password-reset": "Cod de restabilire parolă",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "Dacă adresa de e-mail este înregistrată, codul cerut a fost trimis pe adresă.",
"login.email.login.body": "Salut {user.nameOrEmail},\n\nAi cerut recent un cod de conectare pentru Panoul site-ului {site}.\nCodul de conectare de mai jos va fi valid pentru următoarele {timeout} minute:\n\n{code}\n\nDacă nu tu ai cerut un cod de conectare, te rog ignoră acest e-mail sau ia legătura cu administratorul site-ului dacă ai întrebări.\nDin motive de siguranță, te rog să NU trimiți acest email mai departe.",
"login.email.login.subject": "Codul tău de conectare",
"login.email.password-reset.body": "Salut {user.nameOrEmail},\n\nAi cerut recent un cod de restabilire a parolei pentru Panoul site-ului {site}.\nCodul de restabilire a parolei de mai jos este valabil pentru următoarele {timeout} minute:\n\n{code}\n\nDacă nu tu ai cerut codul de restabilire a parolei, te rog ignoră acest e-mail sau ia legătura cu administratorul site-ului dacă ai întrebări.\nDin motive de securitate, te rog să NU trimiți acest e-mail mai departe.",
"login.email.password-reset.subject": "Codul tău de restabilire a parolei",
"login.remember": "Ține-mă conectat",
"login.reset": "Restabilește parola",
"login.toggleText.code.email": "Conectare prin e-mail",
"login.toggleText.code.email-password": "Conectare cu parola",
"login.toggleText.password-reset.email": "Ți-ai uitat parola?",
"login.toggleText.password-reset.email-password": "← Înapoi la conectare",
"logout": "Deconectează-te",
"menu": "Meniu",
"meridiem": "AM/PM",
"mime": "Tipul media",
"minutes": "Minute",
"month": "Luna",
"months.april": "Aprilie",
"months.august": "August",
"months.december": "Decembrie",
"months.february": "Februarie",
"months.january": "Ianuarie",
"months.july": "Iulie",
"months.june": "Iunie",
"months.march": "Martie",
"months.may": "Mai",
"months.november": "Noiembrie",
"months.october": "Octombrie",
"months.september": "Septembrie",
"more": "Mai multe",
"name": "Nume",
"next": "Următoarea",
"no": "nu",
"off": "oprit",
"on": "pornit",
"open": "Deschide",
"open.newWindow": "Deschide în fereastră nouă",
"options": "Opțiuni",
"options.none": "Nicio opțiune",
"orientation": "Orientare",
"orientation.landscape": "Landscape",
"orientation.portrait": "Portrait",
"orientation.square": "Pătrată",
"page.blueprint": "Această pagină nu are încă un Blueprint. Poți să-l definești în <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Schimbă URL-ul",
"page.changeSlug.fromTitle": "Creează din titlu",
"page.changeStatus": "Schimbă statusul",
"page.changeStatus.position": "Te rog alege o poziție",
"page.changeStatus.select": "Alege un status nou",
"page.changeTemplate": "Schimbă șablonul",
"page.delete.confirm": "Chiar vrei să ștergi <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Această pagină are subpagini</strong>. <br>Subpaginile vor fi de asemenea toate șterse.",
"page.delete.confirm.title": "Introdu titlul paginii pentru a confirma",
"page.draft.create": "Creează ciornă",
"page.duplicate.appendix": "Copiază",
"page.duplicate.files": "Copiază fișierele",
"page.duplicate.pages": "Copiază paginile",
"page.sort": "Schimbă poziția",
"page.status": "Status",
"page.status.draft": "Ciornă",
"page.status.draft.description": "Pagina este în modul ciornă și va fi vizibilă doar editorilor conectați sau printr-un link secret",
"page.status.listed": "Publică",
"page.status.listed.description": "Pagina este publică, accesibilă oricui",
"page.status.unlisted": "Nelistate",
"page.status.unlisted.description": "Pagina este accesibilă doar prin URL",
"pages": "Pagini",
"pages.empty": "Nicio pagină deocamdată",
"pages.status.draft": "Ciorne",
"pages.status.listed": "Publicate",
"pages.status.unlisted": "Nelistate",
"pagination.page": "Pagină",
"password": "Parola",
"paste": "Inserează",
"paste.after": "Inserează după",
"pixel": "Pixel",
"plugin": "Plugin",
"plugins": "Plugin-uri",
"prev": "Precedenta",
"preview": "Previzualizează",
"remove": "Înlătură",
"rename": "Redenumește",
"replace": "Înlocuiește",
"retry": "Încearcă din nou",
"revert": "Renunță",
"revert.confirm": "Chiar vrei să ștergi <strong>toate schimbările nesalvate</strong>?",
"role": "Rol",
"role.admin.description": "Administratorul are toate drepturile",
"role.admin.title": "Administrator",
"role.all": "Toate",
"role.empty": "Nu există niciun utilizator cu acest rol",
"role.description.placeholder": "Nicio descriere",
"role.nobody.description": "Acesta este un rol de rezervă fără nicio permisiune.",
"role.nobody.title": "Nimeni",
"save": "Salvează",
"search": "Caută",
"search.min": "Introdu {min} caractere pentru a căuta",
"search.all": "Arată toate",
"search.results.none": "Niciun rezultat",
"section.required": "Această secțiune este necesară",
"security": "Securitate",
"select": "Alege",
"server": "Server",
"settings": "Reglaje",
"show": "Arată",
"site.blueprint": "Site-ul nu are încă un Blueprint. Poți să-l definești în <strong>/site/blueprints/site.yml</strong>",
"size": "Dimensiune",
"slug": "Apendicele URL",
"sort": "Sortare",
"stats.empty": "Niciun raport",
"system.issues.content": "Directorul de conținut pare să fie expus",
"system.issues.eol.kirby": "Versiunea instalată de Kirby a ajuns la sfârșitul vieții utile și nu va mai primi actualizări de securitate.",
"system.issues.eol.plugin": "Versiunea instalată a plugin-ului { plugin } a ajuns la sfârșitul vieții utile și nu va mai primi actualizări de securitate.",
"system.issues.debug": "Modul depanare trebuie să fie oprit în producție",
"system.issues.git": "Directorul .git pare să fie expus",
"system.issues.https": "Recomandăm HTTPS pentru toate site-urile.",
"system.issues.kirby": "Directorul Kirby pare să fie expus",
"system.issues.site": "Directorul site pare să fie expus",
"system.issues.vulnerability.kirby": "Instalarea ta ar putea fi afectată de următoarea vulnerabilitate ({ severity } severity): { description }",
"system.issues.vulnerability.plugin": "Instalarea ta ar putea fi afectată de următoarea vulnerabilitate în plugin-ul { plugin } ({ severity } severity): { description }",
"system.updateStatus": "Status actualizare",
"system.updateStatus.error": "Nu am putut căuta actualizări",
"system.updateStatus.not-vulnerable": "Nicio vulnerabilitate cunoscută",
"system.updateStatus.security-update": "Actualizare gratuită de securitate { version } disponibilă",
"system.updateStatus.security-upgrade": "Actualizarea { version } cu reparații de securitate disponibilă",
"system.updateStatus.unreleased": "Versiune nelansată",
"system.updateStatus.up-to-date": "La zi",
"system.updateStatus.update": "Actualizare gratuită { version } disponibilă",
"system.updateStatus.upgrade": "Actualizare { version } disponibilă",
"title": "Titlu",
"template": "Șablon",
"today": "Astăzi",
"toolbar.button.code": "Cod",
"toolbar.button.bold": "Bold",
"toolbar.button.email": "Adresă e-mail",
"toolbar.button.headings": "Subtitluri",
"toolbar.button.heading.1": "Subtitlu 1",
"toolbar.button.heading.2": "Subtitlu 2",
"toolbar.button.heading.3": "Subtitlu 3",
"toolbar.button.heading.4": "Subtitlu 4",
"toolbar.button.heading.5": "Subtitlu 5",
"toolbar.button.heading.6": "Subtitlu 6",
"toolbar.button.italic": "Italic",
"toolbar.button.file": "Fișier",
"toolbar.button.file.select": "Alege un fișier",
"toolbar.button.file.upload": "Încarcă un fișier",
"toolbar.button.link": "Legătură",
"toolbar.button.paragraph": "Paragraf",
"toolbar.button.strike": "Tăiat",
"toolbar.button.ol": "Listă ordonată",
"toolbar.button.underline": "Subliniat",
"toolbar.button.ul": "Listă cu puncte",
"translation.author": "Echipa Kirby",
"translation.direction": "ltr",
"translation.name": "Română",
"translation.locale": "ro_RO",
"upload": "Încarcă",
"upload.error.cantMove": "Fișierul încărcat nu a putut fi mutat",
"upload.error.cantWrite": "Nu s-a putut scrie fișierul pe disc",
"upload.error.default": "Fișierul nu a putut fi încărcat",
"upload.error.extension": "Încărcarea fișierelor oprită de extensie",
"upload.error.formSize": "Fișierul încărcat depășește directiva MAX_FILE_SIZE specificată în formular",
"upload.error.iniPostSize": "Fișierul încărcat depășește directiva post_max_size din php.ini",
"upload.error.iniSize": "Fișierul încărcat depășește directiva upload_max_filesize din php.ini",
"upload.error.noFile": "Nu a fost încărcat niciun fișier",
"upload.error.noFiles": "Nu au fost încărcate fișiere",
"upload.error.partial": "Fișierul a fost încărcat doar parțial",
"upload.error.tmpDir": "Lipsește un director temporar",
"upload.errors": "Eroare",
"upload.progress": "Se încarcă...",
"url": "Url",
"url.placeholder": "https://example.com",
"user": "Utilizator",
"user.blueprint": "Poți defini secțiuni și câmpuri de formular suplimentare pentru acest rol de utilizator în <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Schimbă adresa de e-mail",
"user.changeLanguage": "Schimbă limba",
"user.changeName": "Redenumește acest utilizator",
"user.changePassword": "Schimbă parola",
"user.changePassword.new": "Parola nouă",
"user.changePassword.new.confirm": "Confirmă parola nouă...",
"user.changeRole": "Schimbă rolul",
"user.changeRole.select": "Alege un rol nou",
"user.create": "Adaugă un nou utilizator",
"user.delete": "Șterge acest utilizator",
"user.delete.confirm": "Chiar vrei să ștergi <br><strong>{email}</strong>?",
"users": "Utilizatori",
"version": "Versiune",
"version.current": "Versiunea curentă",
"version.latest": "Ultima versiune",
"versionInformation": "Informații despre versiune",
"view.account": "Contul tău",
"view.installation": "Instalare",
"view.languages": "Limbi",
"view.resetPassword": "Restabilește parola",
"view.site": "Site",
"view.system": "Sistem",
"view.users": "Utilizatori",
"welcome": "Bun venit",
"year": "Anul",
"yes": "da"
}

View file

@ -1,19 +1,19 @@
{
"account.changeName": "Изменить имя",
"account.delete": "Удалить аккаунт",
"account.delete": "Удалить пользователя",
"account.delete.confirm": "Вы действительно хотите удалить свой аккаунт? Вы сразу покинете панель управления, а аккаунт нельзя будет восстановить.",
"add": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c",
"add": "Добавить",
"author": "Автор",
"avatar": "\u0410\u0432\u0430\u0442\u0430\u0440 (\u0444\u043e\u0442\u043e)",
"avatar": "Аватар",
"back": "Назад",
"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",
"cancel": "Отменить",
"change": "Изменить",
"close": "Закрыть",
"confirm": "Ок",
"collapse": "Свернуть",
"collapse.all": "Свернуть все",
"copy": "Скопировать",
"copy": "(копия)",
"copy.all": "Копировать все",
"create": "Создать",
@ -21,17 +21,17 @@
"date.select": "Выберите дату",
"day": "День",
"days.fri": "\u041f\u0442",
"days.mon": "\u041f\u043d",
"days.sat": "\u0421\u0431",
"days.sun": "\u0412\u0441",
"days.thu": "\u0427\u0442",
"days.tue": "\u0412\u0442",
"days.wed": "\u0421\u0440",
"days.fri": "Пт",
"days.mon": "Пн",
"days.sat": "Сб",
"days.sun": "Сб",
"days.thu": "Чт",
"days.tue": "Вт",
"days.wed": "Ср",
"debugging": "Отладка",
"delete": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c",
"delete": "Удалить",
"delete.all": "Удалить все",
"dialog.files.empty": "Нет файлов для выбора",
@ -40,11 +40,11 @@
"dimensions": "Размеры",
"disabled": "Отключено",
"discard": "\u0421\u0431\u0440\u043e\u0441",
"discard": "Сброс",
"download": "Скачать",
"duplicate": "Дублировать",
"edit": "\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c",
"edit": "Редактировать",
"email": "Email",
"email.placeholder": "mail@example.com",
@ -60,7 +60,7 @@
"error.access.view": "У вас нет прав доступа к этой части панели",
"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.delete.fail": "Аватар (фото) к аккаунту не может быть удален",
"error.avatar.dimensions.invalid": "Пожалуйста, сделайте чтобы ширина или высота фотографии была меньше 3000 пикселей",
"error.avatar.mime.forbidden": "Фотография профиля должна быть JPEG или PNG",
@ -72,12 +72,12 @@
"error.blocks.min.singular": "Вы должны добавить хотя бы один блок",
"error.blocks.validation": "Ошибка в поле \"{field}\" в блоке {index} типа \"{fieldset}\"",
"error.cache.type.invalid": "Invalid cache type \"{type}\"",
"error.cache.type.invalid": "Неверный тип кэша: \"{type}\"",
"error.email.preset.notFound": "Шаблон эл. почты \"{name}\" не найден",
"error.email.preset.notFound": "Email-шаблон \"{name}\" не найден",
"error.field.converter.invalid": "Неверный конвертер \"{converter}\"",
"error.field.type.missing": "Field \"{ name }\": The field type \"{ type }\" does not exist",
"error.field.type.missing": "Поле \"{ name }\": тип поля \"{ type }\" не существует",
"error.file.changeName.empty": "Название не может быть пустым",
"error.file.changeName.permission": "У вас нет права изменить название \"{filename}\"",
@ -96,11 +96,11 @@
"error.file.minsize": "Файл слишком маленький",
"error.file.minwidth": "Ширина файла должна быть хотя бы {width} px",
"error.file.name.missing": "Название файла не может быть пустым",
"error.file.notFound": "\u0424\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d",
"error.file.notFound": "Файл не найден",
"error.file.orientation": "Ориентация изображения должна быть \"{orientation}\"",
"error.file.type.forbidden": "У вас нет права загружать файлы {type}",
"error.file.type.invalid": "Неверный тип файла: {type}",
"error.file.undefined": "\u0424\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d",
"error.file.undefined": "Файл не найден",
"error.form.incomplete": "Пожалуйста, исправьте все ошибки в форме",
"error.form.notSaved": "Форма не может быть сохранена",
@ -121,7 +121,7 @@
"error.offline": "Панель управления не в сети",
"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.changeSlug.permission": "Вы не можете изменить URL этой страницы",
"error.page.changeStatus.incomplete": "На странице есть ошибки и поэтому ее нельзя опубликовать",
"error.page.changeStatus.permission": "Невозможно изменить статус для этой страницы",
"error.page.changeStatus.toDraft.invalid": "Невозможно конвертировать в черновик страницу \"{slug}\"",
@ -134,16 +134,16 @@
"error.page.delete.confirm": "Впишите название страницы чтобы подтвердить",
"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.notFound": "Страница не найдена",
"error.page.num.invalid": "Пожалуйста, впишите правильное число сортировки. Число не может быть отрицательным.",
"error.page.slug.invalid": "Пожалуйста, введите правильный URL",
"error.page.slug.maxlength": "Длина ссылки должна быть короче \"{length}\" символов",
"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.undefined": "Страница не найдена",
"error.page.update.permission": "У вас нет права обновить \"{slug}\"",
"error.section.files.max.plural": "Нельзя добавить больше чем {max} файлов в секции \"{section}\"",
@ -175,16 +175,17 @@
"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": "Аккаунт не может быть удален",
"error.user.delete.lastAdmin": "Вы не можете удалить единственного администратора",
"error.user.delete.lastUser": "Нельзя удалить единственного пользователя",
"error.user.delete.permission": "У вас нет права удалить пользователя \"{name}\"",
"error.user.duplicate": "Пользователь с Email \"{email}\" уже есть",
"error.user.email.invalid": "Пожалуйста, введите правильный адрес эл. почты",
"error.user.email.invalid": "Пожалуйста, введите правильный Email",
"error.user.language.invalid": "Введите правильный язык",
"error.user.notFound": "Пользователь \"{name}\" не найден",
"error.user.password.excessive": "Пожалуйста, введите верный пароль. Длина паролей не должна превышать 1000 символов.",
"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.notSame": "Пожалуйста, подтвердите пароль",
"error.user.password.undefined": "У пользователя нет пароля",
"error.user.password.wrong": "Неверный пароль",
"error.user.role.invalid": "Введите правильную роль",
@ -292,7 +293,7 @@
"field.pages.empty": "Страницы не выбраны",
"field.structure.delete.confirm": "Вы точно хотите удалить эту запись?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.delete.confirm.all": "Вы действительно хотите удалить все значения?",
"field.structure.empty": "Записей нет",
"field.users.empty": "Пользователей нет",
@ -302,13 +303,13 @@
"file.sort": "Изменить позицию",
"files": "Файлы",
"files.empty": "Еще нет файлов",
"files.empty": "Ещё нет файлов",
"hide": "Скрыть",
"hour": "Час",
"import": "Импортировать",
"info": "Информация",
"insert": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c",
"insert": "Вставить",
"insert.after": "Вставить ниже",
"insert.before": "Вставить выше",
"install": "Установить",
@ -326,7 +327,7 @@
"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": "Язык",
"language.code": "Код",
"language.convert": "Установить по умолчанию",
"language.convert.confirm": "<p>Вы точно хотите конвертировать <strong>{name}</strong> в главный язык? Это нельзя будет отменить.</p><p>Если <strong>{name}</strong> имеет непереведенный контент, то больше не будет верного каскада и части вашего сайта могут быть пустыми.</p>",
@ -351,21 +352,21 @@
"license.buy": "Купить лицензию",
"license.register": "Зарегистрировать",
"license.manage": "Управление лицензиями",
"license.register.help": "После покупки вы получили по эл. почте код лицензии. Пожалуйста скопируйте и вставьте сюда чтобы зарегистрировать.",
"license.register.help": "После покупки вы получили на Email код лицензии. Вставьте его сюда, чтобы зарегистрировать копию.",
"license.register.label": "Пожалуйста вставьте код лицензии",
"license.register.domain": "Your license will be registered to <strong>{host}</strong>.",
"license.register.local": "You are about to register your license for your local domain <strong>{host}</strong>. If this site will be deployed to a public domain, please register it there instead. If {host} is the domain you want to license Kirby to, please continue.",
"license.register.domain": "Ваша лицензия будет зарегистрирована на {host}.",
"license.register.local": "Вы собираетесь зарегистрировать лицензию на локальный домен {host}. Если этот сайт будет размещен на общедоступном домене, то, пожалуйста, укажите его вместо {host}.",
"license.register.success": "Спасибо за поддержку Kirby",
"license.unregistered": "Это незарегистрированная версия Kirby",
"license.unregistered.label": "Не зарегистрировано",
"link": "\u0421\u0441\u044b\u043b\u043a\u0430",
"link.text": "\u0422\u0435\u043a\u0441\u0442 \u0441\u0441\u044b\u043b\u043a\u0438",
"link": "Ссылка",
"link.text": "Текст ссылки",
"loading": "Загрузка",
"lock.unsaved": "Несохраненные изменения",
"lock.unsaved.empty": "Несохраненных изменений больше нет",
"lock.unsaved.empty": "Несохраненных изменений нет",
"lock.isLocked": "Несохраненные изменения пользователя <strong>{email}</strong>",
"lock.file.isLocked": "В данный момент этот файл редактирует {email}, поэтому его нельзя изменить.",
"lock.page.isLocked": "В данный момент эту страницу редактирует {email}, поэтому его нельзя изменить.",
@ -377,11 +378,11 @@
"login.code.label.password-reset": "Код для сброса пароля",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "Если ваш Email уже зарегистрирован, запрашиваемый код был отправлен на него.",
"login.email.login.body": "Привет, {user.nameOrEmail}!\n\nНедавно вы запросили код для входа на «{site}».\nСледующий код входа будет действителен в течение {timeout} минут:\n\n{code}\n\nЕсли вы не запрашивали код для входа, проигнорируйте это письмо или обратитесь к администратору, если у вас есть вопросы.\nВ целях безопасности НЕ ПЕРЕСЫЛАЙТЕ это письмо.",
"login.email.login.body": "{code} — код для входа на сайт {site}. Код действителен {timeout} минут.\n\nЗдравствуйте, {user.nameOrEmail}!\n\nЕсли вы не запрашивали код для входа, проигнорируйте это письмо или обратитесь к администратору, если у вас есть вопросы.\nВ целях безопасности НЕ ПЕРЕСЫЛАЙТЕ это письмо.",
"login.email.login.subject": "Ваш код для входа",
"login.email.password-reset.body": "Привет, {user.nameOrEmail}!\n\nНедавно вы запросили сброс пароля для входа на «{site}».\nСледующий код входа будет действителен в течение {timeout} минут:\n\n{code}\n\nЕсли вы не запрашивали сброс пароля, проигнорируйте это письмо или обратитесь к администратору, если у вас есть вопросы.\nВ целях безопасности НЕ ПЕРЕСЫЛАЙТЕ это письмо.",
"login.email.password-reset.body": "{code} — код для сброса пароля на сайт «{site}». Код действителен {timeout} минут.\n\nЗдравствуйте, {user.nameOrEmail}!\n\nЕсли вы не запрашивали сброс пароля, проигнорируйте это письмо или обратитесь к администратору, если у вас есть вопросы.\nВ целях безопасности НЕ ПЕРЕСЫЛАЙТЕ это письмо.",
"login.email.password-reset.subject": "Ваш код для сброса пароля",
"login.remember": "Сохранять вход активным",
"login.remember": "Запомнить пароль",
"login.reset": "Сбросить пароль",
"login.toggleText.code.email": "Вход с помощью Email",
"login.toggleText.code.email-password": "Вход с паролем",
@ -396,20 +397,20 @@
"minutes": "Минуты",
"month": "Месяц",
"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.april": "Апрель",
"months.august": "Август",
"months.december": "Декабрь",
"months.february": "Февраль",
"months.january": "\u042f\u043d\u0432\u0430\u0440\u044c",
"months.july": "\u0418\u044e\u043b\u044c",
"months.june": "\u0418\u044e\u043d\u044c",
"months.march": "\u041c\u0430\u0440\u0442",
"months.may": "\u041c\u0430\u0439",
"months.november": "\u041d\u043e\u044f\u0431\u0440\u044c",
"months.october": "\u041e\u043a\u0442\u044f\u0431\u0440\u044c",
"months.september": "\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
"months.january": "Январь",
"months.july": "Июль",
"months.june": "Июнь",
"months.march": "Март",
"months.may": "Май",
"months.november": "Ноябрь",
"months.october": "Октябрь",
"months.september": "Сентябрь",
"more": "Подробнее",
"more": "Еще",
"name": "Название",
"next": "Дальше",
"no": "нет",
@ -452,11 +453,11 @@
"pages.empty": "Страниц нет",
"pages.status.draft": "Черновики",
"pages.status.listed": "Опубликовано",
"pages.status.unlisted": "Скрытая",
"pages.status.unlisted": "Скрыта",
"pagination.page": "Страница",
"password": "\u041f\u0430\u0440\u043e\u043b\u044c",
"password": "Пароль",
"paste": "Вставить",
"paste.after": "Вставить после",
"pixel": "Пиксель",
@ -465,13 +466,13 @@
"prev": "Предыдущий",
"preview": "Предпросмотр",
"remove": "Удалить",
"rename": "Переназвать",
"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",
"rename": "Переименовать",
"replace": "Заменить",
"retry": "Повторить",
"revert": "Сброс",
"revert.confirm": "Вы действительно хотите <strong>удалить все несохраненные изменения</strong>?",
"role": "\u0420\u043e\u043b\u044c",
"role": "Роль",
"role.admin.description": "Администратор имеет все права",
"role.admin.title": "Администратор",
"role.all": "Все",
@ -480,7 +481,7 @@
"role.nobody.description": "Эта роль применяется если у пользователя нет никаких прав",
"role.nobody.title": "Никто",
"save": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c",
"save": "Сохранить",
"search": "Поиск",
"search.min": "Введите хотя бы {min} символов для поиска",
"search.all": "Показать все",
@ -495,36 +496,36 @@
"show": "Показать",
"site.blueprint": "У сайта пока нет разметки. Вы можете определить новые секции и поля разметки в <strong>/site/blueprints/site.yml</strong>",
"size": "Размер",
"slug": "Понятная ссылка",
"slug": "URL",
"sort": "Сортировать",
"stats.empty": "Статистики нет",
"system.issues.content": "Похоже, к папке content есть несанкционированный доступ",
"system.issues.eol.kirby": "Срок службы установленной вами версии Kirby истек, и она больше не будет получать обновления для системы безопасности",
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
"system.issues.eol.plugin": "Срок службы установленной вами версии плагина { plugin } истек, и он не будет получать дальнейших обновлений для системы безопасности",
"system.issues.debug": "Включен режим отладки (debugging). Используйте его только при разработке.",
"system.issues.git": "Похоже, к папке .git есть несанкционированный доступ",
"system.issues.https": "Рекомендуется использовать HTTPS на всех сайтах",
"system.issues.kirby": "Похоже, к папке kirby есть несанкционированный доступ",
"system.issues.site": "Похоже, к папке site есть несанкционированный доступ",
"system.issues.vulnerability.kirby": "Your installation might be affected by the following vulnerability ({ severity } severity): { description }",
"system.issues.vulnerability.plugin": "Your installation might be affected by the following vulnerability in the { plugin } plugin ({ severity } severity): { description }",
"system.updateStatus": "Update status",
"system.issues.vulnerability.kirby": "Обнаружена уязвимость уровня \"{ severity }\": { description }",
"system.issues.vulnerability.plugin": "В плагине { plugin } обнаружена уязвимость уровня \"{ severity }\": { description }",
"system.updateStatus": "Обновить статус",
"system.updateStatus.error": "Не удалось проверить обновления",
"system.updateStatus.not-vulnerable": "Известных уязвимостей не выявлено",
"system.updateStatus.security-update": "Доступно бесплатное обновление для системы безопасности { version }",
"system.updateStatus.security-upgrade": "Upgrade { version } with security fixes available",
"system.updateStatus.unreleased": "Unreleased version",
"system.updateStatus.security-upgrade": "Доступно обновление { version } с испарвлениями безопасности",
"system.updateStatus.unreleased": "Неизданная версия",
"system.updateStatus.up-to-date": "Последняя версия",
"system.updateStatus.update": "Доступно бесплатное обновление { version }",
"system.updateStatus.upgrade": "Upgrade { version } available",
"system.updateStatus.upgrade": "Доступно обновление { version }",
"title": "Название",
"template": "\u0428\u0430\u0431\u043b\u043e\u043d",
"template": "Шаблон",
"today": "Сегодня",
"toolbar.button.code": "Код",
"toolbar.button.bold": "\u0416\u0438\u0440\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442",
"toolbar.button.bold": "Жирный шрифт",
"toolbar.button.email": "Email",
"toolbar.button.headings": "Заголовки",
"toolbar.button.heading.1": "Заголовок 1",
@ -536,8 +537,8 @@
"toolbar.button.italic": "Курсив",
"toolbar.button.file": "Файл",
"toolbar.button.file.select": "Выбрать файл",
"toolbar.button.file.upload": "Закачать файл",
"toolbar.button.link": "\u0421\u0441\u044b\u043b\u043a\u0430",
"toolbar.button.file.upload": "Загрузить файл",
"toolbar.button.link": "Ссылка",
"toolbar.button.paragraph": "Параграф",
"toolbar.button.strike": "Зачёркнутый",
"toolbar.button.ol": "Нумерованный список",
@ -549,20 +550,20 @@
"translation.name": "Русский (Russian)",
"translation.locale": "ru_RU",
"upload": "Закачать",
"upload.error.cantMove": "Не удается переместить загруженный файл",
"upload": "Загрузить",
"upload.error.cantMove": "Не удалось переместить загруженный файл",
"upload.error.cantWrite": "Не получилось записать файл на диск",
"upload.error.default": "Не удалось загрузить файл",
"upload.error.extension": "Загрузка файла не удалась из за расширения",
"upload.error.formSize": "Загруженный файл больше чем MAX_FILE_SIZE настройка в форме",
"upload.error.iniPostSize": "Загружаемый файл больше чем post_max_size настройка в php.ini",
"upload.error.iniSize": "Загруженный файл больше чем настройка upload_max_filesize в php.ini",
"upload.error.extension": "Загрузка файла остановлена из-за расширения",
"upload.error.formSize": "Загружаемый файл больше указанного в параметре MAX_FILE_SIZE в форме",
"upload.error.iniPostSize": "Загружаемый файл больше указанного в параметре \"post_max_size\" в php.ini",
"upload.error.iniSize": "Загружаемый файл больше указанного в параметре \"upload_max_filesize\" в php.ini",
"upload.error.noFile": "Файл не был загружен",
"upload.error.noFiles": "Файлы не были загружены",
"upload.error.partial": "Файл загружен только частично",
"upload.error.tmpDir": "Не хватает временной папки",
"upload.errors": "Ошибка",
"upload.progress": "Закачивается...",
"upload.progress": "Загрузка...",
"url": "URL",
"url.placeholder": "https://example.com",
@ -571,13 +572,13 @@
"user.blueprint": "Вы можете определить новые секции и поля разметки для пользователя в <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Изменить Email",
"user.changeLanguage": "Изменить язык",
"user.changeName": "Переназвать этого пользователя",
"user.changeName": "Переименовать пользователя",
"user.changePassword": "Изменить пароль",
"user.changePassword.new": "Новый пароль",
"user.changePassword.new.confirm": "Подтвердить новый пароль…",
"user.changeRole": "Изменить роль",
"user.changeRole.select": "Выбрать новую роль",
"user.create": "Добавить нового пользователя",
"user.create": "Добавить пользователя",
"user.delete": "Удалить этого пользователя",
"user.delete.confirm": "Вы действительно хотите аккаунт <br><strong>{email}</strong>?",
@ -586,15 +587,15 @@
"version": "Версия",
"version.current": "Текущая версия",
"version.latest": "Последняя версия",
"versionInformation": "Version information",
"versionInformation": "Информация о версии",
"view.account": "\u0412\u0430\u0448 \u0430\u043a\u043a\u0430\u0443\u043d\u0442",
"view.installation": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430",
"view.account": "Ваш аккаунт",
"view.installation": "Установка",
"view.languages": "Языки",
"view.resetPassword": "Сбросить пароль",
"view.site": "Сайт",
"view.system": "Система",
"view.users": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438",
"view.users": "Пользователи",
"welcome": "Добро пожаловать",
"year": "Год",

View file

@ -1,13 +1,13 @@
{
"account.changeName": "Change your name",
"account.delete": "Delete your account",
"account.changeName": "Zmeniť vaše meno",
"account.delete": "Zmazať váš účet",
"account.delete.confirm": "Do you really want to delete your account? You will be logged out immediately. Your account cannot be recovered.",
"add": "Pridať",
"author": "Author",
"author": "Autor",
"avatar": "Profilový obrázok",
"back": "Späť",
"cancel": "Zrušiť",
"back": "Back",
"cancel": "Cancel",
"change": "Zmeniť",
"close": "Zavrieť",
"confirm": "Ok",
@ -22,12 +22,12 @@
"day": "Deň",
"days.fri": "Pia",
"days.mon": "Pon",
"days.mon": "Mon",
"days.sat": "Sob",
"days.sun": "Ned",
"days.thu": "Štv",
"days.tue": "Uto",
"days.wed": "Str",
"days.wed": "Wed",
"debugging": "Debugging",
@ -36,15 +36,15 @@
"dialog.files.empty": "No files to select",
"dialog.pages.empty": "No pages to select",
"dialog.users.empty": "No users to select",
"dialog.users.empty": "Zvolení neboli žiadni uživátelia",
"dimensions": "Rozmery",
"disabled": "Disabled",
"discard": "Zahodiť",
"discard": "Discard",
"download": "Stiahnuť",
"duplicate": "Duplikovať",
"edit": "Upraviť",
"edit": "Edit",
"email": "E-mail",
"email.placeholder": "mail@example.com",
@ -183,6 +183,7 @@
"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.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"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",
@ -301,7 +302,7 @@
"file.delete.confirm": "Ste si istý, že chcete zmazať <br><strong>{filename}</strong>?",
"file.sort": "Change position",
"files": "Súbory",
"files": "Files",
"files.empty": "Zatiaľ žiadne súbory",
"hide": "Hide",
@ -372,7 +373,7 @@
"lock.unlock": "Unlock",
"lock.isUnlocked": "Your unsaved changes have been overwritten by another user. You can download your changes to merge them manually.",
"login": "Prihlásenie",
"login": "Log in",
"login.code.label.login": "Login code",
"login.code.label.password-reset": "Password reset code",
"login.code.placeholder.email": "000 000",
@ -388,7 +389,7 @@
"login.toggleText.password-reset.email": "Forgot your password?",
"login.toggleText.password-reset.email-password": "← Back to login",
"logout": "Odhlásenie",
"logout": "Log out",
"menu": "Menu",
"meridiem": "AM/PM",
@ -399,18 +400,18 @@
"months.april": "Apríl",
"months.august": "August",
"months.december": "December",
"months.february": "Február",
"months.february": "February",
"months.january": "Január",
"months.july": "Júl",
"months.june": "Jún",
"months.march": "Marec",
"months.may": "Máj",
"months.july": "July",
"months.june": "June",
"months.march": "March",
"months.may": "May",
"months.november": "November",
"months.october": "Október",
"months.october": "October",
"months.september": "September",
"more": "Viac",
"name": "Meno",
"name": "Názov",
"next": "Ďalej",
"no": "no",
"off": "off",
@ -448,7 +449,7 @@
"page.status.unlisted": "Skryté",
"page.status.unlisted.description": "Stránka je prístupná len prostredníctvom priamej URL",
"pages": "Stránky",
"pages": "Pages",
"pages.empty": "Zatiaľ žiadne stránky",
"pages.status.draft": "Koncepty",
"pages.status.listed": "Zverejnené",
@ -456,7 +457,7 @@
"pagination.page": "Stránka",
"password": "Heslo",
"password": "Password",
"paste": "Paste",
"paste.after": "Paste after",
"pixel": "Pixel",
@ -466,7 +467,7 @@
"preview": "Preview",
"remove": "Odstrániť",
"rename": "Premenovať",
"replace": "Nahradiť",
"replace": "Replace",
"retry": "Skúsiť ešte raz",
"revert": "Vrátiť späť",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",

View file

@ -3,14 +3,14 @@
"account.delete": "Radera ditt konto",
"account.delete.confirm": "Vill du verkligen radera ditt konto? Du kommer att loggas ut omedelbart. Ditt konto kan inte återställas.",
"add": "L\u00e4gg till",
"add": "Lägg till",
"author": "Författare",
"avatar": "Profilbild",
"back": "Tillbaka",
"cancel": "Avbryt",
"change": "\u00c4ndra",
"close": "St\u00e4ng",
"confirm": "Spara",
"change": "Ändra",
"close": "Stäng",
"confirm": "Ok",
"collapse": "Kollapsa",
"collapse.all": "Kollapsa alla",
"copy": "Kopiera",
@ -21,13 +21,13 @@
"date.select": "Välj ett datum",
"day": "Dag",
"days.fri": "Fre",
"days.mon": "M\u00e5n",
"days.sat": "L\u00f6r",
"days.sun": "S\u00f6n",
"days.thu": "Tor",
"days.tue": "Tis",
"days.wed": "Ons",
"days.fri": "fre",
"days.mon": "n",
"days.sat": "r",
"days.sun": "n",
"days.thu": "tors",
"days.tue": "tis",
"days.wed": "ons",
"debugging": "Felsökning",
@ -47,7 +47,7 @@
"edit": "Redigera",
"email": "E-postadress",
"email.placeholder": "namn@exempel.se",
"email.placeholder": "mail@example.com",
"entries": "Poster",
"entry": "Post",
@ -72,12 +72,12 @@
"error.blocks.min.singular": "Du måste lägga till minst ett block",
"error.blocks.validation": "Det finns ett fel i fältet \"{field}\" i block {index} med blocktypen \"{fieldset}\"",
"error.cache.type.invalid": "Invalid cache type \"{type}\"",
"error.cache.type.invalid": "Ogiltig cachetyp \"{type}\"",
"error.email.preset.notFound": "E-postförinställningen \"{name}\" kan inte hittas",
"error.field.converter.invalid": "Ogiltig omvandlare \"{converter}\"",
"error.field.type.missing": "Field \"{ name }\": The field type \"{ type }\" does not exist",
"error.field.type.missing": "Fältet \"{ name }\": Fälttypen \"{ type }\" finns inte",
"error.file.changeName.empty": "Namnet får inte vara tomt",
"error.file.changeName.permission": "Du har inte behörighet att ändra namnet på \"{filename}\"",
@ -163,7 +163,7 @@
"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.template.default.notFound": "Standardmallen finns inte",
"error.unexpected": "Ett oväntat fel uppstod! Aktivera felsökningsläge för mer information: https://getkirby.com/docs/reference/system/options/debug",
@ -183,6 +183,7 @@
"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.excessive": "Var vänlig skriv in ett giltigt lösenord. Lösenord får inte vara längre än 1000 tecken.",
"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",
@ -292,7 +293,7 @@
"field.pages.empty": "Inga sidor valda än",
"field.structure.delete.confirm": "Vill du verkligen radera denna rad?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.delete.confirm.all": "Vill du verkligen radera alla poster?",
"field.structure.empty": "Inga poster än",
"field.users.empty": "Inga användare valda än",
@ -326,7 +327,7 @@
"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": "Språk",
"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>",
@ -353,14 +354,14 @@
"license.manage": "Hantera dina licenser",
"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.domain": "Your license will be registered to <strong>{host}</strong>.",
"license.register.local": "You are about to register your license for your local domain <strong>{host}</strong>. If this site will be deployed to a public domain, please register it there instead. If {host} is the domain you want to license Kirby to, please continue.",
"license.register.domain": "Din licens kommer att bli registrerad för <strong>{host}</strong>.",
"license.register.local": "Du är på väg att registrera din licens för din lokala domän {host}. Om den här webbplatsen kommer att distribueras till en offentlig domän, registrera den där istället. Om {host} är domänen du vill licensiera Kirby till, fortsätt.",
"license.register.success": "Tack för att du stödjer Kirby",
"license.unregistered": "Detta är en oregistrerad demo av Kirby",
"license.unregistered.label": "Oregistrerad",
"link": "L\u00e4nk",
"link.text": "L\u00e4nktext",
"link": "Länk",
"link.text": "Länktext",
"loading": "Laddar",
@ -396,18 +397,18 @@
"minutes": "Minuter",
"month": "Månad",
"months.april": "April",
"months.august": "Augusti",
"months.december": "December",
"months.april": "april",
"months.august": "augusti",
"months.december": "december",
"months.february": "Februari",
"months.january": "Januari",
"months.july": "Juli",
"months.june": "Juni",
"months.march": "Mars",
"months.may": "Maj",
"months.november": "November",
"months.october": "Oktober",
"months.september": "September",
"months.january": "januari",
"months.july": "juli",
"months.june": "juni",
"months.march": "mars",
"months.may": "maj",
"months.november": "november",
"months.october": "october",
"months.september": "september",
"more": "Mer",
"name": "Namn",
@ -427,7 +428,7 @@
"page.blueprint": "Denna sida har ingen blueprint än. Du kan skapa en i <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Ändra URL",
"page.changeSlug.fromTitle": "Skapa utifr\u00e5n titel",
"page.changeSlug.fromTitle": "Skapa utfifrån titel",
"page.changeStatus": "Ändra status",
"page.changeStatus.position": "Välj en ny position",
"page.changeStatus.select": "Välj en ny status",
@ -452,11 +453,11 @@
"pages.empty": "Inga sidor än",
"pages.status.draft": "Utkast",
"pages.status.listed": "Publicerade",
"pages.status.unlisted": "Olistade",
"pages.status.unlisted": "Olistad",
"pagination.page": "Sida",
"password": "L\u00f6senord",
"password": "Lösenord",
"paste": "Klistra in",
"paste.after": "Klistra in efter",
"pixel": "Pixel",
@ -467,7 +468,7 @@
"remove": "Ta bort",
"rename": "Byt namn",
"replace": "Ersätt",
"retry": "F\u00f6rs\u00f6k igen",
"retry": "Försök igen",
"revert": "Återgå",
"revert.confirm": "Vill du verkligen <strong>radera alla osparade ändringar</strong>?",
@ -525,7 +526,7 @@
"toolbar.button.code": "Kod",
"toolbar.button.bold": "Fet",
"toolbar.button.email": "E-post",
"toolbar.button.email": "E-postadress",
"toolbar.button.headings": "Rubriker",
"toolbar.button.heading.1": "Rubrik 1",
"toolbar.button.heading.2": "Rubrik 2",
@ -537,7 +538,7 @@
"toolbar.button.file": "Fil",
"toolbar.button.file.select": "Välj en fil",
"toolbar.button.file.upload": "Ladda upp en fil",
"toolbar.button.link": "L\u00e4nk",
"toolbar.button.link": "Länk",
"toolbar.button.paragraph": "Stycke",
"toolbar.button.strike": "Genomstruken",
"toolbar.button.ol": "Sorterad lista",
@ -594,7 +595,7 @@
"view.resetPassword": "Återställ lösenord",
"view.site": "Webbplats",
"view.system": "System",
"view.users": "Anv\u00e4ndare",
"view.users": "Användare",
"welcome": "Välkommen",
"year": "År",

View file

@ -7,13 +7,13 @@
"author": "Yazar",
"avatar": "Profil resmi",
"back": "Geri",
"cancel": "\u0130ptal",
"change": "De\u011fi\u015ftir",
"cancel": "İptal",
"change": "Değiştir",
"close": "Kapat",
"confirm": "Tamam",
"collapse": "Daralt",
"collapse.all": "Tümünü daralt",
"copy": "Kopyala",
"copy": "Kopya",
"copy.all": "Tümünü kopyala",
"create": "Oluştur",
@ -27,7 +27,7 @@
"days.sun": "Paz",
"days.thu": "Per",
"days.tue": "Sal",
"days.wed": "\u00c7ar",
"days.wed": "Çar",
"debugging": "Hata ayıklama",
@ -40,14 +40,14 @@
"dimensions": "Boyutlar",
"disabled": "Devredışı",
"discard": "Vazge\u00e7",
"discard": "Vazgeç",
"download": "İndir",
"duplicate": "Kopyala",
"edit": "D\u00fczenle",
"edit": "Düzenle",
"email": "E-Posta",
"email.placeholder": "eposta@ornek.com",
"email": "E-posta",
"email.placeholder": "mail@example.com",
"entries": "Girdiler",
"entry": "Girdi",
@ -100,7 +100,7 @@
"error.file.orientation": "Resmin oryantasyonu \"{orientation}\" olmalıdır",
"error.file.type.forbidden": "{type} dosya yükleme izni yok",
"error.file.type.invalid": "Geçersiz dosya türü: {type}",
"error.file.undefined": "Dosya bulunamad\u0131",
"error.file.undefined": "Dosya bulunamadı",
"error.form.incomplete": "Lütfen tüm form hatalarını düzeltin...",
"error.form.notSaved": "Form kaydedilemedi",
@ -143,7 +143,7 @@
"error.page.slug.maxlength": "Adres uzantısı \"{length}\" karakterden az olmalıdır",
"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.undefined": "Sayfa bulunamadı",
"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",
@ -176,15 +176,16 @@
"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.lastAdmin": "Son yönetici kullanıcıyı 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.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.excessive": "Lütfen geçerli bir şifre girin. Şifreler 1000 karakterden uzun olmamalı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.notSame": "Lütfen şifreyi doğrulayın",
"error.user.password.undefined": "Bu kullanıcının şifresi yok",
"error.user.password.wrong": "Yanlış şifre",
"error.user.role.invalid": "Lütfen geçerli bir rol girin",
@ -291,9 +292,9 @@
"field.pages.empty": "Henüz sayfa seçilmedi",
"field.structure.delete.confirm": "Bu girdiyi silmek istedi\u011finizden emin misiniz?",
"field.structure.delete.confirm": "Bu girdiyi silmek istediğinizden emin misiniz?",
"field.structure.delete.confirm.all": "Tüm girdileri gerçekten silmek istiyor musunuz?",
"field.structure.empty": "Hen\u00fcz bir girdi yok",
"field.structure.empty": "Henüz bir girdi yok",
"field.users.empty": "Henüz kullanıcı seçilmedi",
@ -359,8 +360,8 @@
"license.unregistered": "Bu Kirby'nin kayıtsız bir demosu",
"license.unregistered.label": "Kayıtsız",
"link": "Ba\u011flant\u0131",
"link.text": "Ba\u011flant\u0131 yaz\u0131s\u0131",
"link": "Bağlantı",
"link.text": "Bağlantı metni",
"loading": "Yükleniyor",
@ -397,17 +398,17 @@
"month": "Ay",
"months.april": "Nisan",
"months.august": "A\u011fustos",
"months.december": "Aral\u0131k",
"months.august": "Ağustos",
"months.december": "Aralık",
"months.february": "Şubat",
"months.january": "Ocak",
"months.july": "Temmuz",
"months.june": "Haziran",
"months.march": "Mart",
"months.may": "May\u0131s",
"months.november": "Kas\u0131m",
"months.may": "Mayıs",
"months.november": "Kasım",
"months.october": "Ekim",
"months.september": "Eyl\u00fcl",
"months.september": "Eylül",
"more": "Daha Fazla",
"name": "İsim",
@ -427,7 +428,7 @@
"page.blueprint": "Bu dosyanın henüz bir planı yok. Kurulumu <strong>/site/blueprints/pages/{blueprint}.yml</strong> dosyasında tanımlayabilirsiniz.",
"page.changeSlug": "Web Adresini Değiştir",
"page.changeSlug.fromTitle": "Ba\u015fl\u0131ktan olu\u015ftur",
"page.changeSlug.fromTitle": "Başlıktan oluştur",
"page.changeStatus": "Durumu değiştir",
"page.changeStatus.position": "Lütfen bir pozisyon seçin",
"page.changeStatus.select": "Yeni bir durum seçin",
@ -456,7 +457,7 @@
"pagination.page": "Sayfa",
"password": "\u015eifre",
"password": "Şifre",
"paste": "Yapıştır",
"paste.after": "Sonrasına yapıştır",
"pixel": "Piksel",
@ -466,9 +467,9 @@
"preview": "Önizle",
"remove": "Kaldır",
"rename": "Yeniden Adlandır",
"replace": "De\u011fi\u015ftir",
"replace": "Değiştir",
"retry": "Tekrar Dene",
"revert": "Vazge\u00e7",
"revert": "Vazgeç",
"revert.confirm": "Gerçekten <strong>kaydedilmemiş tüm değişiklikleri silmek</strong> istiyor musunuz?",
"role": "Rol",
@ -520,12 +521,12 @@
"system.updateStatus.upgrade": "{ version } yükseltme mevcut",
"title": "Başlık",
"template": "\u015eablon",
"template": "Şablon",
"today": "Bugün",
"toolbar.button.code": "Kod",
"toolbar.button.bold": "Kalın Yazı",
"toolbar.button.email": "E-Posta",
"toolbar.button.email": "E-posta",
"toolbar.button.headings": "Başlıklar",
"toolbar.button.heading.1": "Başlık 1",
"toolbar.button.heading.2": "Başlık 2",
@ -537,7 +538,7 @@
"toolbar.button.file": "Dosya",
"toolbar.button.file.select": "Bir dosya seçin",
"toolbar.button.file.upload": "Bir dosya yükleyin",
"toolbar.button.link": "Ba\u011flant\u0131",
"toolbar.button.link": "Bağlantı",
"toolbar.button.paragraph": "Paragraf",
"toolbar.button.strike": "Üstü çizili",
"toolbar.button.ol": "Sıralı liste",
@ -546,7 +547,7 @@
"translation.author": "Kirby Takımı",
"translation.direction": "ltr",
"translation.name": "T\u00fcrk\u00e7e",
"translation.name": "Türkçe",
"translation.locale": "tr_TR",
"upload": "Yükle",
@ -588,13 +589,13 @@
"version.latest": "En son sürüm",
"versionInformation": "Sürüm bilgisi",
"view.account": "Hesap Bilgilerin",
"view.account": "Hesabın",
"view.installation": "Kurulum",
"view.languages": "Diller",
"view.resetPassword": "Şifreyi sıfırla",
"view.site": "Site",
"view.system": "Sistem",
"view.users": "Kullan\u0131c\u0131lar",
"view.users": "Kullanıcılar",
"welcome": "Hoşgeldiniz",
"year": "Yıl",

View file

@ -1,11 +0,0 @@
const { defineConfig } = require("cypress");
module.exports = defineConfig({
video: false,
e2e: {
baseUrl: "http://sandbox.test",
specPattern: "src/**/*.e2e.js",
supportFile: false
}
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

11
kirby/panel/dist/js/vue.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -26,7 +26,7 @@ class NodeString extends NodeProperty
public static function factory($value = null): static|null
{
if ($value === null) {
return $value;
return null;
}
return new static($value);

View file

@ -67,10 +67,10 @@ class Api extends BaseApi
* Returns the file object for the given
* parent path and filename
*
* @param string|null $path Path to file's parent model
* @param string $path Path to file's parent model
* @throws \Kirby\Exception\NotFoundException if the file cannot be found
*/
public function file(string|null $path = null, string $filename): File|null
public function file(string $path, string $filename): File|null
{
return Find::file($path, $filename);
}

View file

@ -203,7 +203,6 @@ class App
/**
* Applies a hook to the given value
*
* @internal
* @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
@ -364,25 +363,23 @@ class App
* by name. All relevant dependencies are
* automatically injected
*
* @param string $name
* @return \Kirby\Cms\Collection|null
* @return \Kirby\Toolkit\Collection|null
* @todo 5.0 Add return type declaration
*/
public function collection(string $name)
public function collection(string $name, array $options = [])
{
return $this->collections()->get($name, [
return $this->collections()->get($name, array_merge($options, [
'kirby' => $this,
'site' => $this->site(),
'pages' => $this->site()->children(),
'site' => $site = $this->site(),
'pages' => $site->children(),
'users' => $this->users()
]);
]));
}
/**
* Returns all user-defined collections
*
* @return \Kirby\Cms\Collections
*/
public function collections()
public function collections(): Collections
{
return $this->collections ??= new Collections();
}
@ -582,7 +579,14 @@ class App
$visitor = $this->visitor();
foreach ($visitor->acceptedLanguages() as $acceptedLang) {
$closure = fn ($language) => $language->locale(LC_ALL) === $acceptedLang->locale();
$closure = function ($language) use ($acceptedLang) {
$languageLocale = $language->locale(LC_ALL);
$acceptedLocale = $acceptedLang->locale();
return $languageLocale === $acceptedLocale ||
$acceptedLocale === Str::substr($languageLocale, 0, 2);
};
if ($language = $languages->filter($closure)?->first()) {
return $language;
}
@ -1670,7 +1674,6 @@ class App
/**
* Trigger a hook by name
*
* @internal
* @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)

View file

@ -73,7 +73,7 @@ trait AppErrors
$handler = null;
if ($this->option('debug') === true) {
if ($this->option('whoops', true) === true) {
if ($this->option('whoops', true) !== false) {
$handler = new PrettyPageHandler();
$handler->setPageTitle('Kirby CMS Debugger');
$handler->setResourcesPath(dirname(__DIR__, 2) . '/assets');
@ -82,6 +82,14 @@ trait AppErrors
if ($editor = $this->option('editor')) {
$handler->setEditor($editor);
}
if ($blocklist = $this->option('whoops.blocklist')) {
foreach ($blocklist as $superglobal => $vars) {
foreach ($vars as $var) {
$handler->blacklist($superglobal, $var);
}
}
}
}
} else {
$handler = new CallbackHandler(function ($exception, $inspector, $run) {

View file

@ -66,7 +66,7 @@ trait AppUsers
} finally {
// ensure that the impersonation is *always* reset
// to the original value, even if an error occurred
$auth->impersonate($userBefore !== null ? $userBefore->id() : null);
$auth->impersonate($userBefore?->id());
}
}

View file

@ -279,18 +279,39 @@ class Auth
$id = $session->data()->get('kirby.userId');
// if no user is logged in, return immediately
if (is_string($id) !== true) {
return null;
}
if ($user = $this->kirby->users()->find($id)) {
// in case the session needs to be updated, do it now
// for better performance
$session->commit();
return $user;
// a user is logged in, ensure it exists
$user = $this->kirby->users()->find($id);
if ($user === null) {
return null;
}
return null;
if ($passwordTimestamp = $user->passwordTimestamp()) {
$loginTimestamp = $session->data()->get('kirby.loginTimestamp');
if (is_int($loginTimestamp) !== true) {
// session that was created before Kirby
// 3.5.8.3, 3.6.6.3, 3.7.5.2, 3.8.4.1 or 3.9.6
// or when the user didn't have a password set
$user->logout();
return null;
}
// invalidate the session if the password
// changed since the login
if ($loginTimestamp < $passwordTimestamp) {
$user->logout();
return null;
}
}
// in case the session needs to be updated, do it now
// for better performance
$session->commit();
return $user;
}
/**

View file

@ -66,9 +66,11 @@ class Collection extends BaseCollection
}
/**
* Internal setter for each object in the Collection.
* This takes care of Component validation and of setting
* the collection prop on each object correctly.
* Internal setter for each object in the Collection;
* override from the Toolkit Collection is needed to
* make the CMS collections case-sensitive;
* child classes can override it again to add validation
* and custom behavior depending on the object type
*
* @param string $id
* @param object $object
@ -79,6 +81,16 @@ class Collection extends BaseCollection
$this->data[$id] = $object;
}
/**
* Internal remover for each object in the Collection;
* override from the Toolkit Collection is needed to
* make the CMS collections case-sensitive
*/
public function __unset($id)
{
unset($this->data[$id]);
}
/**
* Adds a single object or
* an entire second collection to the
@ -168,9 +180,7 @@ class Collection extends BaseCollection
}
// ignore upper/lowercase for group names
if ($i) {
$value = Str::lower($value);
}
$value = $i === true ? Str::lower($value) : (string)$value;
if (isset($groups->data[$value]) === false) {
// create a new entry for the group if it does not exist yet
@ -209,9 +219,9 @@ class Collection extends BaseCollection
* or ids and then search accordingly.
*
* @param string|object $needle
* @return int
* @return int|false
*/
public function indexOf($needle): int
public function indexOf($needle): int|false
{
if (is_string($needle) === true) {
return array_search($needle, $this->keys());

View file

@ -28,25 +28,20 @@ class Collections
* has been called, to avoid further
* processing on sequential calls to
* the same collection.
*
* @var array
*/
protected $cache = [];
protected array $cache = [];
/**
* Store of all collections
*
* @var array
*/
protected $collections = [];
protected array $collections = [];
/**
* Magic caller to enable something like
* `$collections->myCollection()`
*
* @param string $name
* @param array $arguments
* @return \Kirby\Cms\Collection|null
* @return \Kirby\Toolkit\Collection|null
* @todo 5.0 Add return type declaration
*/
public function __call(string $name, array $arguments = [])
{
@ -56,9 +51,9 @@ class Collections
/**
* Loads a collection by name if registered
*
* @param string $name
* @param array $data
* @return \Kirby\Cms\Collection|null
* @return \Kirby\Toolkit\Collection|null
* @todo 4.0 Add deprecation warning when anything else than a Collection is returned
* @todo 5.0 Add return type declaration
*/
public function get(string $name, array $data = [])
{

View file

@ -207,7 +207,7 @@ class FileRules
if (
Str::contains($extension, 'php') !== false ||
Str::contains($extension, 'phar') !== false ||
Str::contains($extension, 'phtml') !== false
Str::contains($extension, 'pht') !== false
) {
throw new InvalidArgumentException([
'key' => 'file.type.forbidden',

View file

@ -23,12 +23,12 @@ class Find
* Returns the file object for the given
* parent path and filename
*
* @param string|null $path Path to file's parent model
* @param string $path Path to file's parent model
* @param string $filename Filename
* @return \Kirby\Cms\File|null
* @throws \Kirby\Exception\NotFoundException if the file cannot be found
*/
public static function file(string $path = null, string $filename)
public static function file(string $path, string $filename)
{
$filename = urldecode($filename);
$file = static::parent($path)->file($filename);
@ -121,7 +121,10 @@ class Find
'site' => $kirby->site(),
'account' => static::user(),
'page' => static::page(basename($path)),
'file' => static::file(...explode('/files/', $path)),
// regular expression to split the path at the last
// occurrence of /files/ which separates parent path
// and filename
'file' => static::file(...preg_split('$.*\K(/files/)$', $path)),
'user' => $kirby->user(basename($path)),
default => throw new InvalidArgumentException('Invalid model type: ' . $modelType)
};

View file

@ -95,7 +95,7 @@ trait HasFiles
// find by global UUID
if (Uuid::is($filename, 'file') === true) {
return Uuid::for($filename, $this->files())->model();
return Uuid::for($filename, $this->$in())->model();
}
if (strpos($filename, '/') !== false) {

View file

@ -19,9 +19,9 @@ trait HasSiblings
*
* @param \Kirby\Cms\Collection|null $collection
*
* @return int
* @return int|false
*/
public function indexOf($collection = null): int
public function indexOf($collection = null): int|false
{
$collection ??= $this->siblingsCollection();
return $collection->indexOf($this);
@ -29,10 +29,13 @@ trait HasSiblings
/**
* Returns the next item in the collection if available
* @todo `static` return type hint is not 100% accurate because of
* quirks in the `Form` classes; would break if enforced
* (https://github.com/getkirby/kirby/pull/5175)
*
* @param \Kirby\Cms\Collection|null $collection
*
* @return \Kirby\Cms\Model|null
* @return static|null
*/
public function next($collection = null)
{
@ -55,10 +58,13 @@ trait HasSiblings
/**
* Returns the previous item in the collection if available
* @todo `static` return type hint is not 100% accurate because of
* quirks in the `Form` classes; would break if enforced
* (https://github.com/getkirby/kirby/pull/5175)
*
* @param \Kirby\Cms\Collection|null $collection
*
* @return \Kirby\Cms\Model|null
* @return static|null
*/
public function prev($collection = null)
{

View file

@ -201,8 +201,17 @@ class Language extends Model
*/
public static function create(array $props)
{
$kirby = App::instance();
$user = $kirby->user();
if (
$user === null ||
$user->role()->permissions()->for('languages', 'create') === false
) {
throw new PermissionException(['key' => 'language.create.permission']);
}
$props['code'] = Str::slug($props['code'] ?? null);
$kirby = App::instance();
$languages = $kirby->languages();
// make the first language the default language
@ -256,10 +265,18 @@ class Language extends Model
public function delete(): bool
{
$kirby = App::instance();
$user = $kirby->user();
$languages = $kirby->languages();
$code = $this->code();
$isLast = $languages->count() === 1;
if (
$user === null ||
$user->role()->permissions()->for('languages', 'delete') === false
) {
throw new PermissionException(['key' => 'language.delete.permission']);
}
// trigger before hook
$kirby->trigger('language.delete:before', [
'language' => $this
@ -672,13 +689,22 @@ class Language extends Model
*/
public function update(array $props = null)
{
$kirby = App::instance();
$user = $kirby->user();
if (
$user === null ||
$user->role()->permissions()->for('languages', 'update') === false
) {
throw new PermissionException(['key' => 'language.update.permission']);
}
// don't change the language code
unset($props['code']);
// make sure the slug is nice and clean
$props['slug'] = Str::slug($props['slug'] ?? null);
$kirby = App::instance();
$updated = $this->clone($props);
// validate the updated language

View file

@ -733,7 +733,7 @@ class Page extends ModelWithContent
*/
public function isListed(): bool
{
return $this->num() !== null;
return $this->isPublished() && $this->num() !== null;
}
/**
@ -797,7 +797,7 @@ class Page extends ModelWithContent
*/
public function isUnlisted(): bool
{
return $this->isListed() === false;
return $this->isPublished() && $this->num() === null;
}
/**
@ -811,7 +811,7 @@ class Page extends ModelWithContent
public function isVerified(string $token = null)
{
if (
$this->isDraft() === false &&
$this->isPublished() === true &&
$this->parents()->findBy('status', 'draft') === null
) {
return true;

View file

@ -270,9 +270,9 @@ class Pages extends Collection
$query = $startAt;
foreach ($path as $key) {
$collection = $item ? $item->children() : $this;
$query = ltrim($query . '/' . $key, '/');
$item = $collection->get($query) ?? null;
$collection = $item?->children() ?? $this;
$query = ltrim($query . '/' . $key, '/');
$item = $collection->get($query) ?? null;
if ($item === null && $multiLang === true && !App::instance()->language()->isDefault()) {
if (count($path) > 1 || $collection->parent()) {

View file

@ -44,7 +44,8 @@ class Permissions
],
'languages' => [
'create' => true,
'delete' => true
'delete' => true,
'update' => true
],
'pages' => [
'changeSlug' => true,

View file

@ -206,6 +206,20 @@ class UpdateStatus
];
}
// add special message for end-of-life PHP versions
$phpMajor = PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION;
$phpEol = $this->data['php'][$phpMajor] ?? null;
if (is_string($phpEol) === true && $eolTime = strtotime($phpEol)) {
// the timestamp is available and valid, now check if it is in the past
if ($eolTime < time()) {
$messages[] = [
'text' => I18n::template('system.issues.eol.php', null, ['release' => $phpMajor]),
'link' => 'https://getkirby.com/security/php-end-of-life',
'icon' => 'bell'
];
}
}
return $this->messages = $messages;
}

View file

@ -352,7 +352,7 @@ class User extends ModelWithContent
*/
public function isKirby(): bool
{
return $this->email() === 'kirby@getkirby.com';
return $this->isAdmin() && $this->id() === 'kirby';
}
/**
@ -396,7 +396,7 @@ class User extends ModelWithContent
*/
public function isNobody(): bool
{
return $this->email() === 'nobody@getkirby.com';
return $this->role()->id() === 'nobody' && $this->id() === 'nobody';
}
/**
@ -406,7 +406,9 @@ class User extends ModelWithContent
*/
public function language(): string
{
return $this->language ??= $this->credentials()['language'] ?? $this->kirby()->panelLanguage();
return $this->language ??=
$this->credentials()['language'] ??
$this->kirby()->panelLanguage();
}
/**
@ -441,6 +443,9 @@ class User extends ModelWithContent
$session->regenerateToken(); // privilege change
$session->data()->set('kirby.userId', $this->id());
if ($this->passwordTimestamp() !== null) {
$session->data()->set('kirby.loginTimestamp', time());
}
$this->kirby()->auth()->setUser($this);
$kirby->trigger('user.login:after', ['user' => $this, 'session' => $session]);
@ -461,6 +466,7 @@ class User extends ModelWithContent
// remove the user from the session for future requests
$session->data()->remove('kirby.userId');
$session->data()->remove('kirby.loginTimestamp');
// clear the cached user object from the app state of the current request
$this->kirby()->auth()->flush();
@ -607,6 +613,26 @@ class User extends ModelWithContent
return $this->password = $this->readPassword();
}
/**
* Returns the timestamp when the password
* was last changed
*/
public function passwordTimestamp(): int|null
{
$file = $this->passwordFile();
// ensure we have the latest information
// to prevent cache attacks
clearstatcache();
// user does not have a password
if (is_file($file) === false) {
return null;
}
return filemtime($file);
}
/**
* @return \Kirby\Cms\UserPermissions
*/
@ -864,14 +890,29 @@ class User extends ModelWithContent
throw new NotFoundException(['key' => 'user.password.undefined']);
}
// `UserRules` enforces a minimum length of 8 characters,
// so everything below that is a typo
if (Str::length($password) < 8) {
throw new InvalidArgumentException(['key' => 'user.password.invalid']);
}
// too long passwords can cause DoS attacks
if (Str::length($password) > 1000) {
throw new InvalidArgumentException(['key' => 'user.password.excessive']);
}
if (password_verify($password, $this->password()) !== true) {
throw new InvalidArgumentException(['key' => 'user.password.wrong', 'httpCode' => 401]);
}
return true;
}
/**
* Returns the path to the password file
*/
protected function passwordFile(): string
{
return $this->root() . '/.htpasswd';
}
}

View file

@ -118,6 +118,13 @@ trait UserActions
// update the users collection
$user->kirby()->users()->set($user->id(), $user);
// keep the user logged in to the current browser
// if they changed their own password
// (regenerate the session token, update the login timestamp)
if ($user->isLoggedIn() === true) {
$user->loginPasswordless();
}
return $user;
});
}
@ -323,7 +330,7 @@ trait UserActions
*/
protected function readPassword()
{
return F::read($this->root() . '/.htpasswd');
return F::read($this->passwordFile());
}
/**
@ -384,6 +391,6 @@ trait UserActions
#[SensitiveParameter]
string $password = null
): bool {
return F::write($this->root() . '/.htpasswd', $password);
return F::write($this->passwordFile(), $password);
}
}

View file

@ -301,8 +301,8 @@ class UserRules
*/
public static function validId(User $user, string $id): bool
{
if ($id === 'account') {
throw new InvalidArgumentException('"account" is a reserved word and cannot be used as user id');
if (in_array($id, ['account', 'kirby', 'nobody']) === true) {
throw new InvalidArgumentException('"' . $id . '" is a reserved word and cannot be used as user id');
}
if ($user->kirby()->users()->find($id)) {
@ -341,12 +341,23 @@ class UserRules
#[SensitiveParameter]
string $password
): bool {
// too short passwords are ineffective
if (Str::length($password ?? null) < 8) {
throw new InvalidArgumentException([
'key' => 'user.password.invalid',
]);
}
// too long passwords can cause DoS attacks
// and are therefore blocked in the auth system
// (blocked here as well to avoid passwords
// that cannot be used to log in)
if (Str::length($password ?? null) > 1000) {
throw new InvalidArgumentException([
'key' => 'user.password.excessive',
]);
}
return true;
}

View file

@ -93,10 +93,14 @@ class Txt extends Handler
throw new InvalidArgumentException('Invalid TXT data; please pass a string');
}
// remove BOM
$string = str_replace("\xEF\xBB\xBF", '', $string);
// remove Unicode BOM at the beginning of the file
if (Str::startsWith($string, "\xEF\xBB\xBF") === true) {
$string = substr($string, 3);
}
// explode all fields by the line separator
$fields = preg_split('!\n----\s*\n*!', $string);
// start the data array
$data = [];

View file

@ -0,0 +1,43 @@
<?php
namespace Kirby\Data;
use Kirby\Exception\InvalidArgumentException;
use Spyc;
/**
* Simple Wrapper around the Spyc YAML class
*
* @package Kirby Data
* @author Bastian Allgeier <bastian@getkirby.com>
* @link https://getkirby.com
* @copyright Bastian Allgeier
* @license https://opensource.org/licenses/MIT
*/
class YamlSpyc
{
/**
* Converts an array to an encoded YAML string
*/
public static function encode($data): string
{
// $data, $indent, $wordwrap, $no_opening_dashes
return Spyc::YAMLDump($data, false, false, true);
}
/**
* Parses an encoded YAML string and returns a multi-dimensional array
*/
public static function decode($string): array
{
$result = Spyc::YAMLLoadString($string);
if (is_array($result) === true) {
return $result;
}
// apparently Spyc always returns an array, even for invalid YAML syntax
// so this Exception should currently never be thrown
throw new InvalidArgumentException('The YAML data cannot be parsed'); // @codeCoverageIgnore
}
}

View file

@ -0,0 +1,44 @@
<?php
namespace Kirby\Data;
use Kirby\Cms\App;
use Kirby\Toolkit\A;
use Symfony\Component\Yaml\Yaml as Symfony;
/**
* Simple Wrapper around the Symfony YAML class
*
* @package Kirby Data
* @author Nico Hoffmann <nico@getkirby.com>
* @link https://getkirby.com
* @copyright Bastian Allgeier
* @license https://opensource.org/licenses/MIT
*/
class YamlSymfony
{
/**
* Converts an array to an encoded YAML string
*/
public static function encode($data): string
{
$kirby = App::instance(null, true);
return Symfony::dump(
$data,
$kirby?->option('yaml.params.inline') ?? 9999,
$kirby?->option('yaml.params.indent') ?? 2,
Symfony::DUMP_MULTI_LINE_LITERAL_BLOCK | Symfony::DUMP_EMPTY_ARRAY_AS_SEQUENCE
);
}
/**
* Parses an encoded YAML string and returns a multi-dimensional array
*/
public static function decode($string): array
{
$result = Symfony::parse($string);
$result = A::wrap($result);
return $result;
}
}

View file

@ -3,9 +3,10 @@
namespace Kirby\Database;
use Closure;
use Exception;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Toolkit\A;
use Kirby\Toolkit\Collection;
use Kirby\Toolkit\Obj;
use Kirby\Toolkit\Str;
use PDO;
use PDOStatement;
@ -62,7 +63,7 @@ class Database
/**
* The last error
*/
protected Exception|null $lastError = null;
protected Throwable|null $lastError = null;
/**
* The last insert id
@ -280,7 +281,7 @@ class Database
/**
* Returns the last db error
*/
public function lastError(): Throwable
public function lastError(): Throwable|null
{
return $this->lastError;
}
@ -337,13 +338,16 @@ class Database
/**
* Executes a sql query, which is expected to return a set of results
*/
public function query(string $query, array $bindings = [], array $params = [])
{
public function query(
string $query,
array $bindings = [],
array $params = []
) {
$defaults = [
'flag' => null,
'method' => 'fetchAll',
'fetch' => 'Kirby\Toolkit\Obj',
'iterator' => 'Kirby\Toolkit\Collection',
'fetch' => Obj::class,
'iterator' => Collection::class,
];
$options = array_merge($defaults, $params);
@ -359,7 +363,7 @@ class Database
) {
$flags = PDO::FETCH_ASSOC;
} else {
$flags = PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE;
$flags = PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE;
}
// add optional flags
@ -368,7 +372,10 @@ class Database
}
// set the fetch mode
if ($options['fetch'] instanceof Closure || $options['fetch'] === 'array') {
if (
$options['fetch'] instanceof Closure ||
$options['fetch'] === 'array'
) {
$this->statement->setFetchMode($flags);
} else {
$this->statement->setFetchMode($flags, $options['fetch']);
@ -379,8 +386,14 @@ class Database
// 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['method'] === 'fetchAll') {
// fetching multiple records
foreach ($results as $key => $result) {
$results[$key] = $options['fetch']($result, $key);
}
} elseif ($options['method'] === 'fetch' && $results !== false) {
// fetching a single record
$results = $options['fetch']($results, null);
}
}

View file

@ -189,8 +189,12 @@ class Query
*
* @return $this
*/
public function fetch(string|Closure $fetch): static
public function fetch(string|callable|Closure $fetch): static
{
if (is_callable($fetch) === true) {
$fetch = Closure::fromCallable($fetch);
}
$this->fetch = $fetch;
return $this;
}
@ -623,7 +627,7 @@ class Query
/**
* Selects only one row from a table
*/
public function first(): object|array|false
public function first(): mixed
{
return $this->query($this->offset(0)->limit(1)->build('select'), [
'fetch' => $this->fetch,
@ -635,7 +639,7 @@ class Query
/**
* Selects only one row from a table
*/
public function row(): object|array|false
public function row(): mixed
{
return $this->first();
}
@ -643,7 +647,7 @@ class Query
/**
* Selects only one row from a table
*/
public function one(): object|array|false
public function one(): mixed
{
return $this->first();
}

View file

@ -354,7 +354,7 @@ class File
return F::modified(
$this->root(),
$format,
$handler ?? ($kirby ? $kirby->option('date.handler', 'date') : 'date')
$handler ?? $kirby?->option('date.handler', 'date') ?? 'date'
);
}

View file

@ -78,6 +78,7 @@ class Mime
'php' => ['text/php', 'text/x-php', 'application/x-httpd-php', 'application/php', 'application/x-php', 'application/x-httpd-php-source'],
'php3' => ['text/php', 'text/x-php', 'application/x-httpd-php', 'application/php', 'application/x-php', 'application/x-httpd-php-source'],
'phps' => ['text/php', 'text/x-php', 'application/x-httpd-php', 'application/php', 'application/x-php', 'application/x-httpd-php-source'],
'pht' => ['text/php', 'text/x-php', 'application/x-httpd-php', 'application/php', 'application/x-php', 'application/x-httpd-php-source'],
'phtml' => ['text/php', 'text/x-php', 'application/x-httpd-php', 'application/php', 'application/x-php', 'application/x-httpd-php-source'],
'png' => 'image/png',
'ppt' => ['application/powerpoint', 'application/vnd.ms-powerpoint'],

View file

@ -402,7 +402,7 @@ class Field extends Component
if ($formFields !== null) {
foreach ($this->when as $field => $value) {
$field = $formFields->get($field);
$inputValue = $field !== null ? $field->value() : '';
$inputValue = $field?->value() ?? '';
// if the input data doesn't match the requested `when` value,
// that means that this field is not required and can be saved

View file

@ -49,7 +49,7 @@ class LayoutField extends BlocksField
$settings = $this->settings();
return new Form([
'fields' => $settings ? $settings->fields() : [],
'fields' => $settings?->fields() ?? [],
'model' => $this->model,
'strict' => true,
'values' => $input,
@ -66,7 +66,7 @@ class LayoutField extends BlocksField
$settings = $this->settings();
return array_merge(parent::props(), [
'settings' => $settings !== null ? $settings->toArray() : null,
'settings' => $settings?->toArray(),
'layouts' => $this->layouts()
]);
}

View file

@ -427,7 +427,7 @@ abstract class FieldClass
if ($formFields !== null) {
foreach ($this->when as $field => $value) {
$field = $formFields->get($field);
$inputValue = $field !== null ? $field->value() : '';
$inputValue = $field?->value() ?? '';
// if the input data doesn't match the requested `when` value,
// that means that this field is not required and can be saved

View file

@ -377,8 +377,8 @@ class Environment
$data['https'] = $this->detectHttpsProtocol($fields['proto']);
}
if ($data['port'] === null && $data['https'] === true) {
$data['port'] = 443;
if ($data['https'] === true) {
$data['port'] ??= 443;
}
$data['for'] = $parts['for'] ?? null;
@ -772,18 +772,28 @@ class Environment
/**
* Loads and returns options from environment-specific
* PHP files (by host name and server IP address)
* PHP files (by host name and server IP address or CLI)
*
* @param string $root Root directory to load configs from
*/
public function options(string $root): array
{
$configCli = [];
$configHost = [];
$configAddr = [];
$host = $this->host();
$addr = $this->ip();
// load the config for the cli
if ($this->cli() === true) {
$configCli = F::load(
file: $root . '/config.cli.php',
fallback: [],
allowOutput: false
);
}
// load the config for the host
if (empty($host) === false) {
$configHost = F::load(
@ -802,7 +812,7 @@ class Environment
);
}
return array_replace_recursive($configHost, $configAddr);
return array_replace_recursive($configCli, $configHost, $configAddr);
}
/**

View file

@ -60,6 +60,8 @@ class Remote
/**
* Constructor
*
* @throws \Exception when the curl request failed
*/
public function __construct(string $url, array $options = [])
{
@ -120,6 +122,7 @@ class Remote
* Sets up all curl options and sends the request
*
* @return $this
* @throws \Exception when the curl request failed
*/
public function fetch(): static
{
@ -258,6 +261,8 @@ class Remote
/**
* Static method to send a GET request
*
* @throws \Exception when the curl request failed
*/
public static function get(string $url, array $params = []): static
{
@ -339,6 +344,8 @@ class Remote
/**
* Static method to init this class and send a request
*
* @throws \Exception when the curl request failed
*/
public static function request(string $url, array $params = []): static
{

View file

@ -195,7 +195,7 @@ class Request
*/
public function data(): array
{
return array_merge($this->body()->toArray(), $this->query()->toArray());
return array_replace($this->body()->toArray(), $this->query()->toArray());
}
/**
@ -210,8 +210,8 @@ class Request
// the request method can be overwritten with a header
$methodOverride = strtoupper(Environment::getGlobally('HTTP_X_HTTP_METHOD_OVERRIDE', ''));
if ($method === null && in_array($methodOverride, $methods) === true) {
$method = $methodOverride;
if (in_array($methodOverride, $methods) === true) {
$method ??= $methodOverride;
}
// final chain of options to detect the method

View file

@ -176,6 +176,18 @@ class Response
'type' => F::extensionToMime(F::extension($file))
], $props);
// if we couldn't serve a correct MIME type, force
// the browser to display the file as plain text to
// harden against attacks from malicious file uploads
if ($props['type'] === null) {
if (isset($props['headers']) !== true) {
$props['headers'] = [];
}
$props['type'] = 'text/plain';
$props['headers']['X-Content-Type-Options'] = 'nosniff';
}
return new static($props);
}

View file

@ -69,10 +69,15 @@ class Document
'custom' => static::customAsset('panel.css'),
],
'icons' => static::favicon($url),
// loader for plugins' index.dev.mjs files inlined, so we provide the code instead of the asset URL
// loader for plugins' index.dev.mjs files
// inlined, so we provide the code instead of the asset URL
'plugin-imports' => $plugins->read('mjs'),
'js' => [
'vendor' => [
'vue' => [
'nonce' => $nonce,
'src' => $url . '/js/vue.js'
],
'vendor' => [
'nonce' => $nonce,
'src' => $url . '/js/vendor.js',
'type' => 'module'
@ -82,17 +87,17 @@ class Document
'src' => $url . '/js/plugins.js',
'type' => 'module'
],
'plugins' => [
'plugins' => [
'nonce' => $nonce,
'src' => $plugins->url('js'),
'defer' => true
],
'custom' => [
'custom' => [
'nonce' => $nonce,
'src' => static::customAsset('panel.js'),
'type' => 'module'
],
'index' => [
'index' => [
'nonce' => $nonce,
'src' => $url . '/js/index.js',
'type' => 'module'
@ -115,6 +120,9 @@ class Document
'type' => 'module'
];
// load the development version of Vue
$assets['js']['vue']['src'] = $url . '/node_modules/vue/dist/vue.js';
unset($assets['css']['index'], $assets['js']['vendor']);
}
@ -270,6 +278,16 @@ class Document
'panelUrl' => $uri->path()->toString(true) . '/',
]);
return new Response($body, 'text/html', $code);
$frameAncestors = $kirby->option('panel.frameAncestors');
$frameAncestors = match (true) {
$frameAncestors === true => "'self'",
is_array($frameAncestors) => "'self' " . implode(' ', $frameAncestors),
is_string($frameAncestors) => $frameAncestors,
default => "'none'"
};
return new Response($body, 'text/html', $code, [
'Content-Security-Policy' => 'frame-ancestors ' . $frameAncestors
]);
}
}

View file

@ -11,6 +11,7 @@ use Kirby\Exception\NotFoundException;
use Kirby\Exception\PermissionException;
use Kirby\Http\Response;
use Kirby\Http\Router;
use Kirby\Http\Uri;
use Kirby\Http\Url;
use Kirby\Toolkit\Str;
use Kirby\Toolkit\Tpl;
@ -538,15 +539,22 @@ class Panel
*/
public static function url(string|null $url = null): string
{
$slug = App::instance()->option('panel.slug', 'panel');
// only touch relative paths
if (Url::isAbsolute($url) === false) {
$path = trim($url, '/');
$kirby = App::instance();
$slug = $kirby->option('panel.slug', 'panel');
$path = trim($url, '/');
$baseUri = new Uri($kirby->url());
$basePath = trim($baseUri->path()->toString(), '/');
// removes base path if relative path contains it
if (empty($basePath) === false && Str::startsWith($path, $basePath) === true) {
$path = Str::after($path, $basePath);
}
// add the panel slug prefix if it it's not
// included in the path yet
if (Str::startsWith($path, $slug . '/') === false) {
elseif (Str::startsWith($path, $slug . '/') === false) {
$path = $slug . '/' . $path;
}

View file

@ -137,7 +137,7 @@ class View
$user = $kirby->user();
// user permissions
$permissions = $user ? $user->role()->permissions()->toArray() : [];
$permissions = $user?->role()->permissions()->toArray() ?? [];
// current content language
$language = $kirby->language();

View file

@ -28,7 +28,15 @@ class Inline
public function __construct(DOMNode $node, array $marks = [])
{
$this->createMarkRules($marks);
$this->html = trim(static::parseNode($node, $this->marks) ?? '');
$html = static::parseNode($node, $this->marks) ?? '';
// only trim HTML if it doesn't consist of only spaces
if (trim($html) !== '') {
$html = trim($html);
}
$this->html = $html;
}
/**

View file

@ -70,6 +70,10 @@ class Argument
// numeric
if (is_numeric($argument) === true) {
if (strpos($argument, '.') === false) {
return new static((int)$argument);
}
return new static((float)$argument);
}

View file

@ -117,7 +117,7 @@ Query::$entries['file'] = function (string $id): File|null {
};
Query::$entries['page'] = function (string $id): Page|null {
return App::instance()->site()->find($id);
return App::instance()->page($id);
};
Query::$entries['site'] = function (): Site {

View file

@ -77,19 +77,17 @@ class Segment
/**
* Automatically resolves the segment depending on the
* segment position and the type of the base
*
* @param mixed $base Current value of the query chain
*/
public function resolve(mixed $base = null, array|object $data = []): mixed
{
// resolve arguments to array
$args = $this->arguments?->resolve($data) ?? [];
// 1st segment, start from $data array
// 1st segment, use $data as base
if ($this->position === 0) {
if (is_array($data) == true) {
return $this->resolveArray($data, $args);
}
return $this->resolveObject($data, $args);
$base = $data;
}
if (is_array($base) === true) {
@ -109,26 +107,55 @@ class Segment
*/
protected function resolveArray(array $array, array $args): mixed
{
if (array_key_exists($this->method, $array) === false) {
static::error($array, $this->method, 'property');
// the directly provided array takes precedence
// to look up a matching entry
if (array_key_exists($this->method, $array) === true) {
$value = $array[$this->method];
// if this is a Closure we can directly use it, as
// Closures from the $array should always have priority
// over the Query::$entries Closures
if ($value instanceof Closure) {
return $value(...$args);
}
// if we have no arguments to pass, we also can directly
// use the value from the $array as it must not be different
// to the one from Query::$entries with the same name
if ($args === []) {
return $value;
}
}
$value = $array[$this->method];
if ($value instanceof Closure) {
return $value(...$args);
// fallback time: only if we are handling the first segment,
// we can also try to resolve the segment with an entry from the
// default Query::$entries
if ($this->position === 0) {
if (array_key_exists($this->method, Query::$entries) === true) {
return Query::$entries[$this->method](...$args);
}
}
if ($args !== []) {
// if we have not been able to return anything so far,
// we just need to differntiate between two different error messages
// this one is in case the original array contained the key,
// but was not a Closure while the segment had arguments
if (
array_key_exists($this->method, $array) &&
$args !== []
) {
throw new InvalidArgumentException('Cannot access array element "' . $this->method . '" with arguments');
}
return $value;
// last, the standard error for trying to access something
// that does not exist
static::error($array, $this->method, 'property');
}
/**
* Resolves segment by calling the method/accessing the property
* on the base object
* Resolves segment by calling the method/
* accessing the property on the base object
*/
protected function resolveObject(object $object, array $args): mixed
{
@ -140,7 +167,8 @@ class Segment
}
if (
$args === [] && (
$args === [] &&
(
property_exists($object, $this->method) === true ||
method_exists($object, '__get') === true
)

View file

@ -10,6 +10,7 @@ use Kirby\Exception\NotFoundException;
use Kirby\Http\Cookie;
use Kirby\Http\Url;
use Kirby\Toolkit\Str;
use Kirby\Toolkit\SymmetricCrypto;
use Throwable;
/**
@ -38,7 +39,7 @@ class Session
protected $lastActivity;
protected $renewable;
protected $data;
protected $newSession;
protected array|null $newSession;
// temporary state flags
protected $updatingLastActivity = false;
@ -348,15 +349,27 @@ class Session
}
// collect all data
if ($this->newSession) {
if (isset($this->newSession) === true) {
// the token has changed
// we are writing to the old session: it only gets the reference to the new session
// and a shortened expiry time (30 second grace period)
$data = [
'startTime' => $this->startTime(),
'expiryTime' => time() + 30,
'newSession' => $this->newSession
'newSession' => $this->newSession[0]
];
// include the token key for the new session if we
// have access to the PHP `sodium` extension;
// otherwise (if no encryption is possible), the token key
// is omitted, which makes the new session read-only
// when accessed through the old session
if ($crypto = $this->crypto()) {
// encrypt the new token key with the old token key
// so that attackers with read access to the session file
// (e.g. via directory traversal) cannot impersonate the new session
$data['newSessionKey'] = $crypto->encrypt($this->newSession[1]);
}
} else {
$data = [
'startTime' => $this->startTime(),
@ -446,7 +459,7 @@ class Session
// mark the old session as moved if there is one
if ($this->tokenExpiry !== null) {
$this->newSession = $tokenExpiry . '.' . $tokenId;
$this->newSession = [$tokenExpiry . '.' . $tokenId, $tokenKey];
$this->commit();
// we are now in the context of the new session
@ -536,7 +549,7 @@ class Session
}
// don't allow writing for read-only sessions
// (only the case for moved sessions)
// (only the case for moved sessions when the PHP `sodium` extension is not available)
/**
* @todo This check gets flagged by Psalm for unknown reasons
* @psalm-suppress ParadoxicalCondition
@ -555,6 +568,22 @@ class Session
$this->writeMode = true;
}
/**
* Returns a symmetric crypto instance based on the
* token key of the session
*/
protected function crypto(): SymmetricCrypto|null
{
if (
$this->tokenKey === null ||
SymmetricCrypto::isAvailable() === false
) {
return null; // @codeCoverageIgnore
}
return new SymmetricCrypto(secretKey: hex2bin($this->tokenKey));
}
/**
* Parses a token string into its parts and sets them as instance vars
*
@ -698,6 +727,20 @@ class Session
// follow to the new session if there is one
if (isset($data['newSession'])) {
// decrypt the token key if provided and we have access to
// the PHP `sodium` extension for decryption
if (
isset($data['newSessionKey']) === true &&
$crypto = $this->crypto()
) {
$tokenKey = $crypto->decrypt($data['newSessionKey']);
$this->parseToken($data['newSession'] . '.' . $tokenKey);
$this->init();
return;
}
// otherwise initialize without the token key (read-only mode)
$this->parseToken($data['newSession'], true);
$this->init();
return;

View file

@ -59,6 +59,77 @@ class A
return count($array);
}
/**
* Checks if every element in the array passes the test
*
* <code>
* $array = [1, 30, 39, 29, 10, 13];
*
* $isBelowThreshold = fn($value) => $value < 40;
* echo A::every($array, $isBelowThreshold) ? 'true' : 'false';
* // output: 'true'
*
* $isIntegerKey = fn($value, $key) => is_int($key);
* echo A::every($array, $isIntegerKey) ? 'true' : 'false';
* // output: 'true'
* </code>
*
* @since 3.9.8
* @param array $array
* @param callable(mixed $value, int|string $key, array $array):bool $test
* @return bool
*/
public static function every(array $array, callable $test): bool
{
foreach ($array as $key => $value) {
if (!$test($value, $key, $array)) {
return false;
}
}
return true;
}
/**
* Finds the first element matching the given callback
*
* <code>
* $array = [1, 30, 39, 29, 10, 13];
*
* $isAboveThreshold = fn($value) => $value > 30;
* echo A::find($array, $isAboveThreshold);
* // output: '39'
*
* $array = [
* 'cat' => 'miao',
* 'cow' => 'moo',
* 'colibri' => 'humm',
* 'dog' => 'wuff',
* 'chicken' => 'cluck',
* 'bird' => 'tweet'
* ];
*
* $keyNotStartingWithC = fn($value, $key) => $key[0] !== 'c';
* echo A::find($array, $keyNotStartingWithC);
* // output: 'wuff'
* </code>
*
* @since 3.9.8
* @param array $array
* @param callable(mixed $value, int|string $key, array $array):bool $callback
* @return mixed
*/
public static function find(array $array, callable $callback): mixed
{
foreach ($array as $key => $value) {
if ($callback($value, $key, $array)) {
return $value;
}
}
return null;
}
/**
* Gets an element of an array by key
*
@ -117,20 +188,23 @@ class A
$keys = explode('.', $key);
$firstKey = array_shift($keys);
// if the input array also uses dot notation, try to find a subset of the $keys
// if the input array also uses dot notation,
// try to find a subset of the $keys
if (isset($array[$firstKey]) === false) {
$currentKey = $firstKey;
while ($innerKey = array_shift($keys)) {
$currentKey .= '.' . $innerKey;
// the element needs to exist and also needs to be an array; otherwise
// we cannot find the remaining keys within it (invalid array structure)
// the element needs to exist and also needs
// to be an array; otherwise we cannot find the
// remaining keys within it (invalid array structure)
if (
isset($array[$currentKey]) === true &&
is_array($array[$currentKey]) === true
) {
// $keys only holds the remaining keys that have not been shifted off yet
// $keys only holds the remaining keys
// that have not been shifted off yet
return static::get(
$array[$currentKey],
implode('.', $keys),
@ -204,7 +278,10 @@ class A
*/
public static function keyBy(array $array, string|callable $keyBy): array
{
$keys = is_callable($keyBy) ? static::map($array, $keyBy) : static::pluck($array, $keyBy);
$keys =
is_callable($keyBy) ?
static::map($array, $keyBy) :
static::pluck($array, $keyBy);
if (count($keys) !== count($array)) {
throw new InvalidArgumentException('The "key by" argument must be a valid key or a callable');
@ -401,6 +478,37 @@ class A
return array_slice($array, $offset, $length, $preserveKeys);
}
/**
* Checks if at least one element in the array passes the test
*
* <code>
* $array = [1, 30, 39, 29, 10, 'foo' => 12, 13];
*
* $isAboveThreshold = fn($value) => $value > 30;
* echo A::some($array, $isAboveThreshold) ? 'true' : 'false';
* // output: 'true'
*
* $isStringKey = fn($value, $key) => is_string($key);
* echo A::some($array, $isStringKey) ? 'true' : 'false';
* // output: 'true'
* </code>
*
* @since 3.9.8
* @param array $array
* @param callable(mixed $value, int|string $key, array $array):bool $test
* @return bool
*/
public static function some(array $array, callable $test): bool
{
foreach ($array as $key => $value) {
if ($test($value, $key, $array)) {
return true;
}
}
return false;
}
/**
* Sums an array
*
@ -600,7 +708,7 @@ class A
$key = array_shift($subKeys);
// skip the magic for ignored keys
if (isset($ignore[$key]) === true && $ignore[$key] === true) {
if (($ignore[$key] ?? null) === true) {
$result[$fullKey] = $value;
continue;
}
@ -618,8 +726,7 @@ class A
// merge arrays with previous results if necessary
// (needed when the same keys are used both with and without dot notation)
if (
isset($result[$key]) === true &&
is_array($result[$key]) === true &&
is_array($result[$key] ?? null) === true &&
is_array($value) === true
) {
$value = array_replace_recursive($result[$key], $value);
@ -704,8 +811,12 @@ class A
* PHP by sort flags
* @return array The sorted array
*/
public static function sort(array $array, string $field, string $direction = 'desc', $method = SORT_REGULAR): array
{
public static function sort(
array $array,
string $field,
string $direction = 'desc',
$method = SORT_REGULAR
): array {
$direction = strtolower($direction) === 'desc' ? SORT_DESC : SORT_ASC;
$helper = [];
$result = [];
@ -818,7 +929,7 @@ class A
{
foreach ($update as $key => $value) {
if ($value instanceof Closure) {
$value = call_user_func($value, static::get($array, $key));
$value = $value(static::get($array, $key));
}
$array[$key] = $value;

View file

@ -123,6 +123,10 @@ class Collection extends Iterator implements Countable
*/
public function __unset($key)
{
if ($this->caseSensitive !== true) {
$key = strtolower($key);
}
unset($this->data[$key]);
}
@ -531,7 +535,7 @@ class Collection extends Iterator implements Countable
$value = $this->getAttribute($item, $field);
// ignore upper/lowercase for group names
return $i === true ? Str::lower($value) : $value;
return $i === true ? Str::lower($value) : (string)$value;
});
}

View file

@ -84,10 +84,6 @@ class Component
/**
* Magic caller for defined methods and properties
*
* @param string $name
* @param array $arguments
* @return mixed
*/
public function __call(string $name, array $arguments = [])
{
@ -108,9 +104,6 @@ class Component
/**
* Creates a new component for the given type
*
* @param string $type
* @param array $attrs
*/
public function __construct(string $type, array $attrs = [])
{
@ -142,8 +135,6 @@ class Component
/**
* Improved `var_dump` output
*
* @return array
*/
public function __debugInfo(): array
{
@ -153,9 +144,6 @@ class Component
/**
* Fallback for missing properties to return
* null instead of an error
*
* @param string $attr
* @return null
*/
public function __get(string $attr)
{
@ -167,8 +155,6 @@ class Component
* This can be overwritten by extended classes
* to define basic options that should always
* be applied.
*
* @return array
*/
public static function defaults(): array
{
@ -178,9 +164,6 @@ class Component
/**
* Register all defined props and apply the
* passed values.
*
* @param array $props
* @return void
*/
protected function applyProps(array $props): void
{
@ -208,9 +191,6 @@ class Component
/**
* Register all computed properties and calculate their values.
* This must happen after all props are registered.
*
* @param array $computed
* @return void
*/
protected function applyComputed(array $computed): void
{
@ -223,9 +203,6 @@ class Component
/**
* Load a component definition by type
*
* @param string $type
* @return array
*/
public static function load(string $type): array
{
@ -248,9 +225,6 @@ class Component
* mixes in the defaults from the defaults method and
* then injects all additional mixins, defined in the
* component options.
*
* @param string $type
* @return array
*/
public static function setup(string $type): array
{
@ -292,8 +266,6 @@ class Component
/**
* Converts all props and computed props to an array
*
* @return array
*/
public function toArray(): array
{

View file

@ -26,11 +26,25 @@ class Controller
public function arguments(array $data = []): array
{
$info = new ReflectionFunction($this->function);
$args = [];
return A::map(
$info->getParameters(),
fn ($parameter) => $data[$parameter->getName()] ?? null
);
foreach ($info->getParameters() as $param) {
$name = $param->getName();
if ($param->isVariadic() === true) {
// variadic ... argument collects all remaining values
$args += $data;
} elseif (isset($data[$name]) === true) {
// use provided argument value if available
$args[$name] = $data[$name];
} elseif ($param->isDefaultValueAvailable() === false) {
// use null for any other arguments that don't define
// a default value for themselves
$args[$name] = null;
}
}
return $args;
}
public function call($bind = null, $data = [])
@ -44,7 +58,7 @@ class Controller
return $this->function->call($bind, ...$args);
}
public static function load(string $file)
public static function load(string $file): static|null
{
if (is_file($file) === false) {
return null;

View file

@ -2,6 +2,7 @@
namespace Kirby\Toolkit;
use DateInterval;
use DateTime;
use DateTimeInterface;
use DateTimeZone;
@ -27,8 +28,10 @@ class Date extends DateTime
* @param string|int|\DateTimeInterface $datetime Datetime string, UNIX timestamp or object
* @param \DateTimeZone|null $timezone Optional default timezone if `$datetime` is string
*/
public function __construct($datetime = 'now', ?DateTimeZone $timezone = null)
{
public function __construct(
string|int|DateTimeInterface $datetime = 'now',
DateTimeZone|null $timezone = null
) {
if (is_int($datetime) === true) {
$datetime = date('r', $datetime);
}
@ -42,8 +45,6 @@ class Date extends DateTime
/**
* Returns the datetime in `YYYY-MM-DD hh:mm:ss` format with timezone
*
* @return string
*/
public function __toString(): string
{
@ -58,7 +59,7 @@ class Date extends DateTime
*
* @throws \Kirby\Exception\InvalidArgumentException If the unit name is invalid
*/
public function ceil(string $unit)
public function ceil(string $unit): static
{
static::validateUnit($unit);
@ -70,20 +71,17 @@ class Date extends DateTime
/**
* Returns the interval between the provided and the object's datetime
*
* @param string|int|\DateTimeInterface $datetime
* @param \DateTimeZone|null $timezone Optional default timezone if `$datetime` is string
* @return \DateInterval
*/
public function compare($datetime = 'now', ?DateTimeZone $timezone = null)
{
public function compare(
string|int|DateTimeInterface $datetime = 'now',
DateTimeZone|null $timezone = null
): DateInterval {
return $this->diff(new static($datetime, $timezone));
}
/**
* Gets or sets the day value
*
* @param int|null $day
* @return int
*/
public function day(int|null $day = null): int
{
@ -103,7 +101,7 @@ class Date extends DateTime
*
* @throws \Kirby\Exception\InvalidArgumentException If the unit name is invalid
*/
public function floor(string $unit)
public function floor(string $unit): static
{
static::validateUnit($unit);
@ -123,9 +121,6 @@ class Date extends DateTime
/**
* Gets or sets the hour value
*
* @param int|null $hour
* @return int
*/
public function hour(int|null $hour = null): int
{
@ -140,79 +135,75 @@ class Date extends DateTime
/**
* Checks if the object's datetime is the same as the given datetime
*
* @param string|int|\DateTimeInterface $datetime
* @param \DateTimeZone|null $timezone Optional default timezone if `$datetime` is string
* @return bool
*/
public function is($datetime = 'now', ?DateTimeZone $timezone = null): bool
{
public function is(
string|int|DateTimeInterface $datetime = 'now',
DateTimeZone|null $timezone = null
): bool {
return $this == new static($datetime, $timezone);
}
/**
* Checks if the object's datetime is after the given datetime
*
* @param string|int|\DateTimeInterface $datetime
* @param \DateTimeZone|null $timezone Optional default timezone if `$datetime` is string
* @return bool
*/
public function isAfter($datetime = 'now', ?DateTimeZone $timezone = null): bool
{
public function isAfter(
string|int|DateTimeInterface $datetime = 'now',
DateTimeZone|null $timezone = null
): bool {
return $this > new static($datetime, $timezone);
}
/**
* Checks if the object's datetime is before the given datetime
*
* @param string|int|\DateTimeInterface $datetime
* @param \DateTimeZone|null $timezone Optional default timezone if `$datetime` is string
* @return bool
*/
public function isBefore($datetime = 'now', ?DateTimeZone $timezone = null): bool
{
public function isBefore(
string|int|DateTimeInterface $datetime = 'now',
DateTimeZone|null $timezone = null
): bool {
return $this < new static($datetime, $timezone);
}
/**
* Checks if the object's datetime is between the given datetimes
*
* @param string|int|\DateTimeInterface $min
* @param string|int|\DateTimeInterface $max
* @return bool
*/
public function isBetween($min, $max): bool
{
public function isBetween(
string|int|DateTimeInterface $min,
string|int|DateTimeInterface $max
): bool {
return $this->isMin($min) === true && $this->isMax($max) === true;
}
/**
* Checks if the object's datetime is at or before the given datetime
*
* @param string|int|\DateTimeInterface $datetime
* @param \DateTimeZone|null $timezone Optional default timezone if `$datetime` is string
* @return bool
*/
public function isMax($datetime = 'now', ?DateTimeZone $timezone = null): bool
{
public function isMax(
string|int|DateTimeInterface $datetime = 'now',
DateTimeZone|null $timezone = null
): bool {
return $this <= new static($datetime, $timezone);
}
/**
* Checks if the object's datetime is at or after the given datetime
*
* @param string|int|\DateTimeInterface $datetime
* @param \DateTimeZone|null $timezone Optional default timezone if `$datetime` is string
* @return bool
*/
public function isMin($datetime = 'now', ?DateTimeZone $timezone = null): bool
{
public function isMin(
string|int|DateTimeInterface $datetime = 'now',
DateTimeZone|null $timezone = null
): bool {
return $this >= new static($datetime, $timezone);
}
/**
* Gets the microsecond value
*
* @return int
*/
public function microsecond(): int
{
@ -221,8 +212,6 @@ class Date extends DateTime
/**
* Gets the millisecond value
*
* @return int
*/
public function millisecond(): int
{
@ -231,9 +220,6 @@ class Date extends DateTime
/**
* Gets or sets the minute value
*
* @param int|null $minute
* @return int
*/
public function minute(int|null $minute = null): int
{
@ -247,9 +233,6 @@ class Date extends DateTime
/**
* Gets or sets the month value
*
* @param int|null $month
* @return int
*/
public function month(int|null $month = null): int
{
@ -265,10 +248,10 @@ class Date extends DateTime
* Returns the datetime which is nearest to the object's datetime
*
* @param string|int|\DateTimeInterface ...$datetime Datetime strings, UNIX timestamps or objects
* @return string|int|\DateTimeInterface
*/
public function nearest(...$datetime)
{
public function nearest(
string|int|DateTimeInterface ...$datetime
): string|int|DateTimeInterface {
$timestamp = $this->timestamp();
$minDiff = PHP_INT_MAX;
$nearest = null;
@ -291,9 +274,8 @@ class Date extends DateTime
* Returns an instance of the current datetime
*
* @param \DateTimeZone|null $timezone
* @return static
*/
public static function now(?DateTimeZone $timezone = null)
public static function now(DateTimeZone|null $timezone = null): static
{
return new static('now', $timezone);
}
@ -301,13 +283,11 @@ class Date extends DateTime
/**
* Tries to create an instance from the given string
* or fails silently by returning `null` on error
*
* @param string|null $datetime
* @param \DateTimeZone|null $timezone
* @return static|null
*/
public static function optional(string|null $datetime = null, ?DateTimeZone $timezone = null)
{
public static function optional(
string|null $datetime = null,
DateTimeZone|null $timezone = null
): static|null {
if (empty($datetime) === true) {
return null;
}
@ -328,7 +308,7 @@ class Date extends DateTime
*
* @throws \Kirby\Exception\InvalidArgumentException If the unit name or size is invalid
*/
public function round(string $unit, int $size = 1)
public function round(string $unit, int $size = 1): static
{
static::validateUnit($unit);
@ -365,12 +345,12 @@ class Date extends DateTime
* by the defined step
* @since 3.7.0
*
* @param string|null $date
* @param int|array|null $step array of `unit` and `size` to round to nearest
* @return int|null
*/
public static function roundedTimestamp(string|null $date = null, $step = null): int|null
{
public static function roundedTimestamp(
string|null $date = null,
int|array|null $step = null
): int|null {
if ($date = static::optional($date)) {
if ($step !== null) {
$step = static::stepConfig($step, [
@ -388,9 +368,6 @@ class Date extends DateTime
/**
* Gets or sets the second value
*
* @param int|null $second
* @return int
*/
public function second(int|null $second = null): int
{
@ -408,8 +385,10 @@ class Date extends DateTime
* @param string|int|\DateTimeInterface $datetime Datetime string, UNIX timestamp or object
* @param \DateTimeZone|null $timezone Optional default timezone if `$datetime` is string
*/
public function set($datetime, ?DateTimeZone $timezone = null)
{
public function set(
string|int|DateTimeInterface $datetime,
DateTimeZone|null $timezone = null
): void {
$datetime = new static($datetime, $timezone);
$this->setTimestamp($datetime->timestamp());
}
@ -422,13 +401,11 @@ class Date extends DateTime
* @param array|null $default Default values to use if one or both values are not provided
* @return array
*/
public static function stepConfig($input = null, array|null $default = null): array
{
$default ??= [
'size' => 1,
'unit' => 'day'
];
public static function stepConfig(
// no type hint to use InvalidArgumentException at the end
$input = null,
array|null $default = ['size' => 1, 'unit' => 'day']
): array {
if ($input === null) {
return $default;
}
@ -452,8 +429,6 @@ class Date extends DateTime
/**
* Returns the time in `hh:mm:ss` format
*
* @return string
*/
public function time(): string
{
@ -462,8 +437,6 @@ class Date extends DateTime
/**
* Returns the UNIX timestamp
*
* @return int
*/
public function timestamp(): int
{
@ -472,21 +445,16 @@ class Date extends DateTime
/**
* Returns the timezone object
*
* @return \DateTimeZone
*/
public function timezone()
public function timezone(): DateTimeZone|false
{
return $this->getTimezone();
}
/**
* Returns an instance of the beginning of the current day
*
* @param \DateTimeZone|null $timezone
* @return static
*/
public static function today(?DateTimeZone $timezone = null)
public static function today(DateTimeZone|null $timezone = null): static
{
return new static('today', $timezone);
}
@ -497,12 +465,13 @@ class Date extends DateTime
*
* @param string $mode `date`, `time` or `datetime`
* @param bool $timezone Whether the timezone is printed as well
* @return string
*
* @throws \Kirby\Exception\InvalidArgumentException If the mode is invalid
*/
public function toString(string $mode = 'datetime', bool $timezone = true): string
{
public function toString(
string $mode = 'datetime',
bool $timezone = true
): string {
$format = match ($mode) {
'date' => 'Y-m-d',
'time' => 'H:i:s',
@ -519,9 +488,6 @@ class Date extends DateTime
/**
* Gets or sets the year value
*
* @param int|null $year
* @return int
*/
public function year(int|null $year = null): int
{
@ -536,9 +502,6 @@ class Date extends DateTime
/**
* Ensures that the provided string is a valid unit name
*
* @param string $unit
* @return void
*
* @throws \Kirby\Exception\InvalidArgumentException
*/
protected static function validateUnit(string $unit): void

View file

@ -17,17 +17,11 @@ abstract class Facade
/**
* Returns the instance that should be
* available statically
*
* @return mixed
*/
abstract public static function instance();
/**
* Proxy for all public instance calls
*
* @param string $method
* @param array $args
* @return mixed
*/
public static function __callStatic(string $method, array $args = null)
{

View file

@ -90,10 +90,11 @@ class Html extends Xml
*
* @param string $tag Tag name
* @param array $arguments Further arguments for the Html::tag() method
* @return string
*/
public static function __callStatic(string $tag, array $arguments = []): string
{
public static function __callStatic(
string $tag,
array $arguments = []
): string {
if (static::isVoid($tag) === true) {
return static::tag($tag, null, ...$arguments);
}
@ -133,8 +134,12 @@ class Html extends Xml
* @param string|null $after An optional string that will be appended if the result is not empty
* @return string|null The generated HTML attributes string
*/
public static function attr($name, $value = null, string|null $before = null, string|null $after = null): string|null
{
public static function attr(
string|array $name,
$value = null,
string|null $before = null,
string|null $after = null
): string|null {
// HTML supports boolean attributes without values
if (is_array($name) === false && is_bool($value) === true) {
return $value === true ? strtolower($name) : null;
@ -167,9 +172,6 @@ class Html extends Xml
/**
* Converts lines in a string into HTML breaks
*
* @param string $string
* @return string
*/
public static function breaks(string $string): string
{
@ -184,8 +186,11 @@ class Html extends Xml
* @param array $attr Additional attributes for the tag
* @return string The generated HTML
*/
public static function email(string $email, $text = null, array $attr = []): string
{
public static function email(
string $email,
string|array|null $text = null,
array $attr = []
): string {
if (empty($email) === true) {
return '';
}
@ -214,14 +219,15 @@ class Html extends Xml
/**
* Converts a string to an HTML-safe string
*
* @param string|null $string
* @param bool $keepTags If true, existing tags won't be escaped
* @return string The HTML string
*
* @psalm-suppress ParamNameMismatch
*/
public static function encode(string|null $string, bool $keepTags = false): string
{
public static function encode(
string|null $string,
bool $keepTags = false
): string {
if ($string === null) {
return '';
}
@ -241,8 +247,6 @@ class Html extends Xml
/**
* Returns the entity translation table
*
* @return array
*/
public static function entities(): array
{
@ -257,8 +261,11 @@ class Html extends Xml
* @param array $attr Additional attributes for the `<figure>` tag
* @return string The generated HTML
*/
public static function figure($content, $caption = '', array $attr = []): string
{
public static function figure(
string|array $content,
string|array|null $caption = '',
array $attr = []
): string {
if ($caption) {
$figcaption = static::tag('figcaption', $caption);
@ -280,8 +287,11 @@ class Html extends Xml
* @param array $attr Additional attributes for the `<script>` tag
* @return string The generated HTML
*/
public static function gist(string $url, string|null $file = null, array $attr = []): string
{
public static function gist(
string $url,
string|null $file = null,
array $attr = []
): string {
$src = $url . '.js';
if ($file !== null) {
@ -294,7 +304,6 @@ class Html extends Xml
/**
* Creates an `<iframe>`
*
* @param string $src
* @param array $attr Additional attributes for the `<iframe>` tag
* @return string The generated HTML
*/
@ -322,9 +331,6 @@ class Html extends Xml
/**
* Checks if a tag is self-closing
*
* @param string $tag
* @return bool
*/
public static function isVoid(string $tag): bool
{
@ -339,8 +345,11 @@ class Html extends Xml
* @param array $attr Additional attributes for the tag
* @return string The generated HTML
*/
public static function link(string $href, $text = null, array $attr = []): string
{
public static function link(
string $href,
string|array|null $text = null,
array $attr = []
): string {
$attr = array_merge(['href' => $href], $attr);
if (empty($text) === true) {
@ -364,8 +373,10 @@ class Html extends Xml
* @param string|null $target Current `target` value
* @return string|null New `rel` value or `null` if not needed
*/
public static function rel(string|null $rel = null, string|null $target = null): string|null
{
public static function rel(
string|null $rel = null,
string|null $target = null
): string|null {
$rel = trim($rel ?? '');
if ($target === '_blank') {
@ -390,8 +401,13 @@ class Html extends Xml
* @param int $level Indentation level
* @return string The generated HTML
*/
public static function tag(string $name, $content = '', array $attr = [], string $indent = null, int $level = 0): string
{
public static function tag(
string $name,
array|string|null $content = '',
array $attr = [],
string $indent = null,
int $level = 0
): string {
// treat an explicit `null` value as an empty tag
// as void tags are already covered below
$content ??= '';
@ -412,8 +428,11 @@ class Html extends Xml
* @param array $attr Additional attributes for the tag
* @return string The generated HTML
*/
public static function tel(string $tel, $text = null, array $attr = []): string
{
public static function tel(
string $tel,
string|array|null $text = null,
array $attr = []
): string {
$number = preg_replace('![^0-9\+]+!', '', $tel);
if (empty($text) === true) {
@ -425,9 +444,6 @@ class Html extends Xml
/**
* Properly encodes tag contents
*
* @param mixed $value
* @return string|null
*/
public static function value($value): string|null
{
@ -461,8 +477,11 @@ class Html extends Xml
* @param array $attr Additional attributes for the `<iframe>` tag
* @return string|null The generated HTML
*/
public static function video(string $url, array $options = [], array $attr = []): string|null
{
public static function video(
string $url,
array $options = [],
array $attr = []
): string|null {
// YouTube video
if (Str::contains($url, 'youtu', true) === true) {
return static::youtube($url, $options['youtube'] ?? [], $attr);
@ -494,9 +513,6 @@ class Html extends Xml
/**
* Generates a list of attributes
* for video iframes
*
* @param array $attr
* @return array
*/
public static function videoAttr(array $attr = []): array
{
@ -521,8 +537,11 @@ class Html extends Xml
* @param array $attr Additional attributes for the `<iframe>` tag
* @return string|null The generated HTML
*/
public static function vimeo(string $url, array $options = [], array $attr = []): string|null
{
public static function vimeo(
string $url,
array $options = [],
array $attr = []
): string|null {
$uri = new Uri($url);
$path = $uri->path();
$query = $uri->query();
@ -556,8 +575,11 @@ class Html extends Xml
* @param array $attr Additional attributes for the `<iframe>` tag
* @return string|null The generated HTML
*/
public static function youtube(string $url, array $options = [], array $attr = []): string|null
{
public static function youtube(
string $url,
array $options = [],
array $attr = []
): string|null {
if (preg_match('!youtu!i', $url) !== 1) {
return null;
}

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