Add blueprints and fake content

This commit is contained in:
Paul Nicoué 2021-11-18 17:44:47 +01:00
parent 1ff19bf38f
commit 8235816462
592 changed files with 22385 additions and 31535 deletions

View file

@ -5,7 +5,7 @@
* stop at older or too recent versions
*/
if (
version_compare(PHP_VERSION, '7.3.0', '>=') === false ||
version_compare(PHP_VERSION, '7.4.0', '>=') === false ||
version_compare(PHP_VERSION, '8.1.0', '<') === false
) {
die(include __DIR__ . '/views/php.php');

View file

@ -1,7 +1,7 @@
##
## Bundle of CA Root Certificates
##
## Certificate data from Mozilla as of: Mon Jul 5 21:35:54 2021 GMT
## Certificate data from Mozilla as of: Tue Oct 26 03:12:05 2021 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.28.
## SHA256: c8f6733d1ff4e6a4769c182971a1234f95ae079247a9c439a13423fe8ba5c24f
## SHA256: bb36818a81feaa4cca61101e6d6276cd09e972efcb08112dfed846918ca41d7f
##
@ -381,26 +381,6 @@ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
-----END CERTIFICATE-----
DST Root CA X3
==============
-----BEGIN CERTIFICATE-----
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
-----END CERTIFICATE-----
SwissSign Gold CA - G2
======================
-----BEGIN CERTIFICATE-----
@ -3172,3 +3152,81 @@ WWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7DP78v3DSk+yshzWePS/Tj
OPQD8rv7gmsHINFSH5pkAnuYZttcTVoP0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZck
bxJF0WddCajJFdr60qZfE2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb
-----END CERTIFICATE-----
TunTrust Root CA
================
-----BEGIN CERTIFICATE-----
MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQELBQAwYTELMAkG
A1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUgQ2VydGlmaWNhdGlvbiBFbGVj
dHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJvb3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQw
NDI2MDg1NzU2WjBhMQswCQYDVQQGEwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBD
ZXJ0aWZpY2F0aW9uIEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIw
DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZn56eY+hz
2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd2JQDoOw05TDENX37Jk0b
bjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgFVwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7
NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZGoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAd
gjH8KcwAWJeRTIAAHDOFli/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViW
VSHbhlnUr8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2eY8f
Tpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIbMlEsPvLfe/ZdeikZ
juXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISgjwBUFfyRbVinljvrS5YnzWuioYas
DXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwS
VXAkPcvCFDVDXSdOvsC9qnyW5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI
04Y+oXNZtPdEITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0
90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+zxiD2BkewhpMl
0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYuQEkHDVneixCwSQXi/5E/S7fd
Ao74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRY
YdZ2vyJ/0Adqp2RT8JeNnYA/u8EH22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJp
adbGNjHh/PqAulxPxOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65x
xBzndFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5Xc0yGYuP
jCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7bnV2UqL1g52KAdoGDDIzM
MEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQCvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9z
ZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZHu/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3r
AZ3r2OvEhJn7wAzMMujjd9qDRIueVSjAi1jTkD5OGwDxFa2DK5o=
-----END CERTIFICATE-----
HARICA TLS RSA Root CA 2021
===========================
-----BEGIN CERTIFICATE-----
MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQG
EwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
cyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0EgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUz
OFoXDTQ1MDIxMzEwNTUzN1owbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRl
bWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNB
IFJvb3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569lmwVnlskN
JLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE4VGC/6zStGndLuwRo0Xu
a2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uva9of08WRiFukiZLRgeaMOVig1mlDqa2Y
Ulhu2wr7a89o+uOkXjpFc5gH6l8Cct4MpbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K
5FrZx40d/JiZ+yykgmvwKh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEv
dmn8kN3bLW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcYAuUR
0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqBAGMUuTNe3QvboEUH
GjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYqE613TBoYm5EPWNgGVMWX+Ko/IIqm
haZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHrW2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQ
CPxrvrNQKlr9qEgYRtaQQJKQCoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8G
A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE
AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAUX15QvWiWkKQU
EapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3f5Z2EMVGpdAgS1D0NTsY9FVq
QRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxajaH6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxD
QpSbIPDRzbLrLFPCU3hKTwSUQZqPJzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcR
j88YxeMn/ibvBZ3PzzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5
vZStjBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0/L5H9MG0
qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pTBGIBnfHAT+7hOtSLIBD6
Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79aPib8qXPMThcFarmlwDB31qlpzmq6YR/
PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YWxw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnn
kf3/W9b3raYvAwtt41dU63ZTGI0RmLo=
-----END CERTIFICATE-----
HARICA TLS ECC Root CA 2021
===========================
-----BEGIN CERTIFICATE-----
MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQswCQYDVQQGEwJH
UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBD
QTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoX
DTQ1MDIxMzExMDEwOVowbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWlj
IGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJv
b3QgQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7KKrxcm1l
AEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9YSTHMmE5gEYd103KUkE+b
ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW
0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAi
rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw
CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps
-----END CERTIFICATE-----

View file

@ -8,7 +8,7 @@
"core"
],
"homepage": "https://getkirby.com",
"version": "3.5.7.1",
"version": "3.6.0",
"license": "proprietary",
"authors": [
{
@ -18,16 +18,17 @@
}
],
"require": {
"php": ">=7.3.0 <8.1.0",
"php": ">=7.4.0 <8.1.0",
"ext-ctype": "*",
"ext-mbstring": "*",
"claviska/simpleimage": "3.6.3",
"filp/whoops": "2.12.1",
"getkirby/composer-installer": "^1.2.0",
"laminas/laminas-escaper": "2.7.0",
"filp/whoops": "2.14.4",
"getkirby/composer-installer": "^1.2.1",
"laminas/laminas-escaper": "2.9.0",
"michelf/php-smartypants": "1.8.1",
"mustangostang/spyc": "0.6.3",
"phpmailer/phpmailer": "6.5.0",
"phpmailer/phpmailer": "6.5.1",
"psr/log": "1.1.4",
"true/punycode": "2.1.1"
},
"config": {
@ -73,5 +74,6 @@
"issues": "https://github.com/getkirby/kirby/issues",
"forum": "https://forum.getkirby.com",
"source": "https://github.com/getkirby/kirby"
}
},
"_comment": "TODO: psr/log is not used by Kirby; drop pinned version when Kirby no longer supports PHP 7"
}

129
kirby/composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "c087786719948c60e5d74492f70440a5",
"content-hash": "8712d96f826f859411fec3cce4f16e63",
"packages": [
{
"name": "claviska/simpleimage",
@ -57,21 +57,21 @@
},
{
"name": "filp/whoops",
"version": "2.12.1",
"version": "2.14.4",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
"reference": "c13c0be93cff50f88bbd70827d993026821914dd"
"reference": "f056f1fe935d9ed86e698905a957334029899895"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filp/whoops/zipball/c13c0be93cff50f88bbd70827d993026821914dd",
"reference": "c13c0be93cff50f88bbd70827d993026821914dd",
"url": "https://api.github.com/repos/filp/whoops/zipball/f056f1fe935d9ed86e698905a957334029899895",
"reference": "f056f1fe935d9ed86e698905a957334029899895",
"shasum": ""
},
"require": {
"php": "^5.5.9 || ^7.0 || ^8.0",
"psr/log": "^1.0.1"
"psr/log": "^1.0.1 || ^2.0 || ^3.0"
},
"require-dev": {
"mockery/mockery": "^0.9 || ^1.0",
@ -116,7 +116,7 @@
],
"support": {
"issues": "https://github.com/filp/whoops/issues",
"source": "https://github.com/filp/whoops/tree/2.12.1"
"source": "https://github.com/filp/whoops/tree/2.14.4"
},
"funding": [
{
@ -124,7 +124,7 @@
"type": "github"
}
],
"time": "2021-04-25T12:00:00+00:00"
"time": "2021-10-03T12:00:00+00:00"
},
{
"name": "getkirby/composer-installer",
@ -175,27 +175,26 @@
},
{
"name": "laminas/laminas-escaper",
"version": "2.7.0",
"version": "2.9.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-escaper.git",
"reference": "5e04bc5ae5990b17159d79d331055e2c645e5cc5"
"reference": "891ad70986729e20ed2e86355fcf93c9dc238a5f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/5e04bc5ae5990b17159d79d331055e2c645e5cc5",
"reference": "5e04bc5ae5990b17159d79d331055e2c645e5cc5",
"url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/891ad70986729e20ed2e86355fcf93c9dc238a5f",
"reference": "891ad70986729e20ed2e86355fcf93c9dc238a5f",
"shasum": ""
},
"require": {
"laminas/laminas-zendframework-bridge": "^1.0",
"php": "^7.3 || ~8.0.0"
"php": "^7.3 || ~8.0.0 || ~8.1.0"
},
"replace": {
"zendframework/zend-escaper": "^2.6.1"
"conflict": {
"zendframework/zend-escaper": "*"
},
"require-dev": {
"laminas/laminas-coding-standard": "~1.0.0",
"laminas/laminas-coding-standard": "~2.3.0",
"phpunit/phpunit": "^9.3",
"psalm/plugin-phpunit": "^0.12.2",
"vimeo/psalm": "^3.16"
@ -234,69 +233,7 @@
"type": "community_bridge"
}
],
"time": "2020-11-17T21:26:43+00:00"
},
{
"name": "laminas/laminas-zendframework-bridge",
"version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-zendframework-bridge.git",
"reference": "13af2502d9bb6f7d33be2de4b51fb68c6cdb476e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/13af2502d9bb6f7d33be2de4b51fb68c6cdb476e",
"reference": "13af2502d9bb6f7d33be2de4b51fb68c6cdb476e",
"shasum": ""
},
"require": {
"php": "^7.3 || ^8.0"
},
"require-dev": {
"phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3",
"psalm/plugin-phpunit": "^0.15.1",
"squizlabs/php_codesniffer": "^3.5",
"vimeo/psalm": "^4.6"
},
"type": "library",
"extra": {
"laminas": {
"module": "Laminas\\ZendFrameworkBridge"
}
},
"autoload": {
"files": [
"src/autoload.php"
],
"psr-4": {
"Laminas\\ZendFrameworkBridge\\": "src//"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "Alias legacy ZF class names to Laminas Project equivalents.",
"keywords": [
"ZendFramework",
"autoloading",
"laminas",
"zf"
],
"support": {
"forum": "https://discourse.laminas.dev/",
"issues": "https://github.com/laminas/laminas-zendframework-bridge/issues",
"rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom",
"source": "https://github.com/laminas/laminas-zendframework-bridge"
},
"funding": [
{
"url": "https://funding.communitybridge.org/projects/laminas-project",
"type": "community_bridge"
}
],
"time": "2021-06-24T12:49:22+00:00"
"time": "2021-09-02T17:10:53+00:00"
},
{
"name": "league/color-extractor",
@ -462,16 +399,16 @@
},
{
"name": "phpmailer/phpmailer",
"version": "v6.5.0",
"version": "v6.5.1",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "a5b5c43e50b7fba655f793ad27303cd74c57363c"
"reference": "dd803df5ad7492e1b40637f7ebd258fee5ca7355"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a5b5c43e50b7fba655f793ad27303cd74c57363c",
"reference": "a5b5c43e50b7fba655f793ad27303cd74c57363c",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/dd803df5ad7492e1b40637f7ebd258fee5ca7355",
"reference": "dd803df5ad7492e1b40637f7ebd258fee5ca7355",
"shasum": ""
},
"require": {
@ -483,10 +420,12 @@
"require-dev": {
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
"doctrine/annotations": "^1.2",
"php-parallel-lint/php-console-highlighter": "^0.5.0",
"php-parallel-lint/php-parallel-lint": "^1.3",
"phpcompatibility/php-compatibility": "^9.3.5",
"roave/security-advisories": "dev-latest",
"squizlabs/php_codesniffer": "^3.5.6",
"yoast/phpunit-polyfills": "^0.2.0"
"squizlabs/php_codesniffer": "^3.6.0",
"yoast/phpunit-polyfills": "^1.0.0"
},
"suggest": {
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
@ -526,7 +465,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.5.0"
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.5.1"
},
"funding": [
{
@ -534,7 +473,7 @@
"type": "github"
}
],
"time": "2021-06-16T14:33:43+00:00"
"time": "2021-08-18T09:14:16+00:00"
},
{
"name": "psr/log",
@ -588,16 +527,16 @@
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.23.0",
"version": "v1.23.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1"
"reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1",
"reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6",
"reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6",
"shasum": ""
},
"require": {
@ -648,7 +587,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1"
},
"funding": [
{
@ -664,7 +603,7 @@
"type": "tidelift"
}
],
"time": "2021-05-27T09:27:20+00:00"
"time": "2021-05-27T12:26:48+00:00"
},
{
"name": "true/punycode",
@ -724,7 +663,7 @@
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": ">=7.3.0 <8.1.0",
"php": ">=7.4.0 <8.1.0",
"ext-ctype": "*",
"ext-mbstring": "*"
},

View file

@ -1,14 +1,12 @@
<?php
// @codeCoverageIgnoreStart
return [
// cms classes
'asset' => 'Kirby\Cms\Asset',
'collection' => 'Kirby\Cms\Collection',
'dir' => 'Kirby\Cms\Dir',
'field' => 'Kirby\Cms\Field',
'file' => 'Kirby\Cms\File',
'files' => 'Kirby\Cms\Files',
'find' => 'Kirby\Cms\Find',
'html' => 'Kirby\Cms\Html',
'kirby' => 'Kirby\Cms\App',
'page' => 'Kirby\Cms\Page',
@ -17,6 +15,7 @@ return [
'r' => 'Kirby\Cms\R',
'response' => 'Kirby\Cms\Response',
's' => 'Kirby\Cms\S',
'sane' => 'Kirby\Sane\Sane',
'site' => 'Kirby\Cms\Site',
'structure' => 'Kirby\Cms\Structure',
'url' => 'Kirby\Cms\Url',
@ -29,6 +28,12 @@ return [
'json' => 'Kirby\Data\Json',
'yaml' => 'Kirby\Data\Yaml',
// file classes
'asset' => 'Kirby\Filesystem\Asset',
'dir' => 'Kirby\Filesystem\Dir',
'f' => 'Kirby\Filesystem\F',
'mime' => 'Kirby\Filesystem\Mime',
// data classes
'database' => 'Kirby\Database\Database',
'db' => 'Kirby\Database\Db',
@ -45,18 +50,31 @@ return [
// image classes
'dimensions' => 'Kirby\Image\Dimensions',
// panel classes
'panel' => 'Kirby\Panel\Panel',
// toolkit classes
'a' => 'Kirby\Toolkit\A',
'c' => 'Kirby\Toolkit\Config',
'config' => 'Kirby\Toolkit\Config',
'escape' => 'Kirby\Toolkit\Escape',
'f' => 'Kirby\Toolkit\F',
'i18n' => 'Kirby\Toolkit\I18n',
'mime' => 'Kirby\Toolkit\Mime',
'obj' => 'Kirby\Toolkit\Obj',
'str' => 'Kirby\Toolkit\Str',
'tpl' => 'Kirby\Toolkit\Tpl',
'v' => 'Kirby\Toolkit\V',
'xml' => 'Kirby\Toolkit\Xml'
'xml' => 'Kirby\Toolkit\Xml',
// TODO: remove in 4.0.0
'kirby\cms\asset' => 'Kirby\Filesystem\Asset',
'kirby\cms\dir' => 'Kirby\Filesystem\Dir',
'kirby\cms\filename' => 'Kirby\Filesystem\Filename',
'kirby\cms\filefoundation' => 'Kirby\Filesystem\IsFile',
'kirby\cms\form' => 'Kirby\Form\Form',
'kirby\cms\kirbytag' => 'Kirby\Text\KirbyTag',
'kirby\cms\kirbytags' => 'Kirby\Text\KirbyTags',
'kirby\toolkit\dir' => 'Kirby\Filesystem\Dir',
'kirby\toolkit\f' => 'Kirby\Filesystem\F',
'kirby\toolkit\file' => 'Kirby\Filesystem\File',
'kirby\toolkit\mime' => 'Kirby\Filesystem\Mime',
];
// @codeCoverageIgnoreEnd

View file

@ -7,7 +7,10 @@ return function () {
$allowImpersonation = $this->kirby()->option('api.allowImpersonation') ?? false;
// csrf token check
if ($auth->type($allowImpersonation) === 'session' && $auth->csrf() === false) {
if (
$auth->type($allowImpersonation) === 'session' &&
$auth->csrf() === false
) {
throw new PermissionException('Unauthenticated');
}

View file

@ -1,7 +1,7 @@
<?php
use Kirby\Cms\File;
use Kirby\Cms\Form;
use Kirby\Form\Form;
/**
* File
@ -18,7 +18,7 @@ return [
return $file->dimensions()->toArray();
},
'dragText' => function (File $file) {
return $file->dragText();
return $file->panel()->dragText();
},
'exists' => function (File $file) {
return $file->exists();
@ -33,7 +33,7 @@ return [
return $file->id();
},
'link' => function (File $file) {
return $file->panelUrl(true);
return $file->panel()->url(true);
},
'mime' => function (File $file) {
return $file->mime();
@ -48,7 +48,7 @@ return [
return $file->next();
},
'nextWithTemplate' => function (File $file) {
$files = $file->templateSiblings()->sort('sort', 'asc', 'filename', 'asc');
$files = $file->templateSiblings()->sorted();
$index = $files->indexOf($file);
return $files->nth($index + 1);
@ -57,22 +57,26 @@ return [
return $file->niceSize();
},
'options' => function (File $file) {
return $file->panelOptions();
return $file->panel()->options();
},
'panelIcon' => function (File $file) {
return $file->panelIcon();
// TODO: remove in 3.7.0
// @codeCoverageIgnoreStart
deprecated('The API field file.panelIcon has been deprecated and will be removed in 3.7.0. Use file.panelImage instead');
return $file->panel()->image();
// @codeCoverageIgnoreEnd
},
'panelImage' => function (File $file) {
return $file->panelImage();
return $file->panel()->image();
},
'panelUrl' => function (File $file) {
return $file->panelUrl(true);
return $file->panel()->url(true);
},
'prev' => function (File $file) {
return $file->prev();
},
'prevWithTemplate' => function (File $file) {
$files = $file->templateSiblings()->sort('sort', 'asc', 'filename', 'asc');
$files = $file->templateSiblings()->sorted();
$index = $files->indexOf($file);
return $files->nth($index - 1);
@ -106,7 +110,7 @@ return [
return $file->type();
},
'url' => function (File $file) {
return $file->url(true);
return $file->url();
},
],
'type' => 'Kirby\Cms\File',

View file

@ -41,7 +41,7 @@ return [
return $file->type();
},
'url' => function (FileVersion $file) {
return $file->url(true);
return $file->url();
},
],
'type' => 'Kirby\Cms\FileVersion',

View file

@ -1,7 +1,7 @@
<?php
use Kirby\Cms\Form;
use Kirby\Cms\Page;
use Kirby\Form\Form;
/**
* Page
@ -27,7 +27,7 @@ return [
return $page->errors();
},
'files' => function (Page $page) {
return $page->files()->sort('sort', 'asc', 'filename', 'asc');
return $page->files()->sorted();
},
'hasChildren' => function (Page $page) {
return $page->hasChildren();
@ -44,6 +44,12 @@ return [
'isSortable' => function (Page $page) {
return $page->isSortable();
},
/**
* @deprecated 3.6.0
* @todo Throw deprecated warning in 3.7.0
* @todo Remove in 3.8.0
* @codeCoverageIgnore
*/
'next' => function (Page $page) {
return $page
->nextAll()
@ -56,13 +62,18 @@ return [
return $page->num();
},
'options' => function (Page $page) {
return $page->panelOptions(['preview']);
return $page->panel()->options(['preview']);
},
/**
* @todo Remove in 3.7.0
* @codeCoverageIgnore
*/
'panelIcon' => function (Page $page) {
return $page->panelIcon();
deprecated('The API field page.panelIcon has been deprecated and will be removed in 3.7.0. Use page.panelImage instead');
return $page->panel()->image();
},
'panelImage' => function (Page $page) {
return $page->panelImage();
return $page->panel()->image();
},
'parent' => function (Page $page) {
return $page->parent();
@ -70,6 +81,12 @@ return [
'parents' => function (Page $page) {
return $page->parents()->flip();
},
/**
* @deprecated 3.6.0
* @todo Throw deprecated warning in 3.7.0
* @todo Remove in 3.8.0
* @codeCoverageIgnore
*/
'prev' => function (Page $page) {
return $page
->prevAll()

View file

@ -1,7 +1,7 @@
<?php
use Kirby\Cms\Form;
use Kirby\Cms\Site;
use Kirby\Form\Form;
/**
* Site
@ -24,7 +24,7 @@ return [
return $site->drafts();
},
'files' => function (Site $site) {
return $site->files()->sort('sort', 'asc', 'filename', 'asc');
return $site->files()->sorted();
},
'options' => function (Site $site) {
return $site->permissions()->toArray();

View file

@ -52,12 +52,8 @@ return [
'requirements' => function (System $system) {
return $system->toArray();
},
'site' => function () {
try {
return $this->site()->blueprint()->title();
} catch (Throwable $e) {
return $this->site()->title()->value();
}
'site' => function (System $system) {
return $system->title();
},
'slugs' => function () {
return Str::$language;
@ -87,7 +83,7 @@ return [
'version' => function () {
$user = $this->user();
if ($user && $user->role()->permissions()->for('access', 'settings') === true) {
if ($user && $user->role()->permissions()->for('access', 'system') === true) {
return $this->kirby()->version();
} else {
return null;

View file

@ -1,7 +1,7 @@
<?php
use Kirby\Cms\Form;
use Kirby\Cms\User;
use Kirby\Form\Form;
/**
* User
@ -24,7 +24,7 @@ return [
return $user->email();
},
'files' => function (User $user) {
return $user->files()->sort('sort', 'asc', 'filename', 'asc');
return $user->files()->sorted();
},
'id' => function (User $user) {
return $user->id();
@ -39,7 +39,10 @@ return [
return $user->next();
},
'options' => function (User $user) {
return $user->panelOptions();
return $user->panel()->options();
},
'panelImage' => function (User $user) {
return $user->panel()->image();
},
'permissions' => function (User $user) {
return $user->role()->permissions()->toArray();

View file

@ -1,12 +1,15 @@
<?php
// routing pattern to match all models with files
$pattern = '(account|pages/[^/]+|site|users/[^/]+)';
/**
* Files Routes
*/
return [
[
'pattern' => '(:all)/files/(:any)/sections/(:any)',
'pattern' => $pattern . '/files/(:any)/sections/(:any)',
'method' => 'GET',
'action' => function (string $path, string $filename, string $sectionName) {
if ($section = $this->file($path, $filename)->blueprint()->section($sectionName)) {
@ -15,7 +18,7 @@ return [
}
],
[
'pattern' => '(:all)/files/(:any)/fields/(:any)/(:all?)',
'pattern' => $pattern . '/files/(:any)/fields/(:any)/(:all?)',
'method' => 'ALL',
'action' => function (string $parent, string $filename, string $fieldName, string $path = null) {
if ($file = $this->file($parent, $filename)) {
@ -24,27 +27,33 @@ return [
}
],
[
'pattern' => '(:all)/files',
'pattern' => $pattern . '/files',
'method' => 'GET',
'action' => function (string $path) {
return $this->parent($path)->files()->sort('sort', 'asc', 'filename', 'asc');
return $this->parent($path)->files()->sorted();
}
],
[
'pattern' => '(:all)/files',
'pattern' => $pattern . '/files',
'method' => 'POST',
'action' => function (string $path) {
// move_uploaded_file() not working with unit test
// @codeCoverageIgnoreStart
return $this->upload(function ($source, $filename) use ($path) {
return $this->parent($path)->createFile([
'content' => [
'sort' => $this->requestBody('sort')
],
'source' => $source,
'template' => $this->requestBody('template'),
'filename' => $filename
]);
});
// @codeCoverageIgnoreEnd
}
],
[
'pattern' => '(:all)/files/search',
'pattern' => $pattern . '/files/search',
'method' => 'GET|POST',
'action' => function (string $path) {
$files = $this->parent($path)->files();
@ -57,7 +66,7 @@ return [
}
],
[
'pattern' => '(:all)/files/sort',
'pattern' => $pattern . '/files/sort',
'method' => 'PATCH',
'action' => function (string $path) {
return $this->parent($path)->files()->changeSort(
@ -67,21 +76,21 @@ return [
}
],
[
'pattern' => '(:all)/files/(:any)',
'pattern' => $pattern . '/files/(:any)',
'method' => 'GET',
'action' => function (string $path, string $filename) {
return $this->file($path, $filename);
}
],
[
'pattern' => '(:all)/files/(:any)',
'pattern' => $pattern . '/files/(:any)',
'method' => 'PATCH',
'action' => function (string $path, string $filename) {
return $this->file($path, $filename)->update($this->requestBody(), $this->language(), true);
}
],
[
'pattern' => '(:all)/files/(:any)',
'pattern' => $pattern . '/files/(:any)',
'method' => 'POST',
'action' => function (string $path, string $filename) {
return $this->upload(function ($source) use ($path, $filename) {
@ -90,14 +99,14 @@ return [
}
],
[
'pattern' => '(:all)/files/(:any)',
'pattern' => $pattern . '/files/(:any)',
'method' => 'DELETE',
'action' => function (string $path, string $filename) {
return $this->file($path, $filename)->delete();
}
],
[
'pattern' => '(:all)/files/(:any)/name',
'pattern' => $pattern . '/files/(:any)/name',
'method' => 'PATCH',
'action' => function (string $path, string $filename) {
return $this->file($path, $filename)->changeName($this->requestBody('name'));

View file

@ -1,6 +1,5 @@
<?php
use Kirby\Exception\Exception;
/**
* Content Lock Routes
@ -9,7 +8,13 @@ return [
[
'pattern' => '(:all)/lock',
'method' => 'GET',
/**
* @deprecated 3.6.0
* @todo Remove in 3.7.0
*/
'action' => function (string $path) {
deprecated('The `GET (:all)/lock` API endpoint has been deprecated and will be removed in 3.7.0');
if ($lock = $this->parent($path)->lock()) {
return [
'supported' => true,
@ -30,11 +35,6 @@ return [
if ($lock = $this->parent($path)->lock()) {
return $lock->create();
}
throw new Exception([
'key' => 'lock.notImplemented',
'httpCode' => 501
]);
}
],
[
@ -44,17 +44,19 @@ return [
if ($lock = $this->parent($path)->lock()) {
return $lock->remove();
}
throw new Exception([
'key' => 'lock.notImplemented',
'httpCode' => 501
]);
}
],
[
'pattern' => '(:all)/unlock',
'method' => 'GET',
/**
* @deprecated 3.6.0
* @todo Remove in 3.7.0
*/
'action' => function (string $path) {
deprecated('The `GET (:all)/unlock` API endpoint has been deprecated and will be removed in 3.7.0');
if ($lock = $this->parent($path)->lock()) {
return [
'supported' => true,
@ -75,11 +77,6 @@ return [
if ($lock = $this->parent($path)->lock()) {
return $lock->unlock();
}
throw new Exception([
'key' => 'lock.notImplemented',
'httpCode' => 501
]);
}
],
[
@ -89,11 +86,6 @@ return [
if ($lock = $this->parent($path)->lock()) {
return $lock->resolve();
}
throw new Exception([
'key' => 'lock.notImplemented',
'httpCode' => 501
]);
}
],
];

View file

@ -38,12 +38,17 @@ return [
'pages/(:any)/blueprints',
/**
* @deprecated
* @todo remove in 3.6.0
* @todo remove in 3.7.0
*/
'pages/(:any)/children/blueprints',
],
'method' => 'GET',
'action' => function (string $id) {
// @codeCoverageIgnoreStart
if ($this->route->pattern() === 'pages/([a-zA-Z0-9\.\-_%= \+\@\(\)]+)/children/blueprints') {
deprecated('`GET pages/(:any)/children/blueprints` API endpoint has been deprecated and will be removed in 3.7.0. Use `GET pages/(:any)/blueprints` instead');
}
// @codeCoverageIgnoreEnd
return $this->page($id)->blueprints($this->requestQuery('section'));
}
],

View file

@ -51,12 +51,17 @@ return [
'site/blueprints',
/**
* @deprecated
* @todo remove in 3.6.0
* @todo remove in 3.7.0
*/
'site/children/blueprints',
],
'method' => 'GET',
'action' => function () {
// @codeCoverageIgnoreStart
if ($this->route->pattern() === 'site/children/blueprints') {
deprecated('`GET site/children/blueprints` API endpoint has been deprecated and will be removed in 3.7.0. Use `GET site/blueprints` instead.');
}
// @codeCoverageIgnoreEnd
return $this->site()->blueprints($this->requestQuery('section'));
}
],

View file

@ -1,12 +1,11 @@
<?php
use Kirby\Toolkit\F;
use Kirby\Filesystem\F;
/**
* User Routes
*/
return [
[
'pattern' => 'users',
'method' => 'GET',
@ -33,35 +32,51 @@ return [
}
],
[
'pattern' => 'users/(:any)',
'pattern' => [
'(account)',
'users/(:any)',
],
'method' => 'GET',
'action' => function (string $id) {
return $this->user($id);
}
],
[
'pattern' => 'users/(:any)',
'pattern' => [
'(account)',
'users/(:any)',
],
'method' => 'PATCH',
'action' => function (string $id) {
return $this->user($id)->update($this->requestBody(), $this->language(), true);
}
],
[
'pattern' => 'users/(:any)',
'pattern' => [
'(account)',
'users/(:any)',
],
'method' => 'DELETE',
'action' => function (string $id) {
return $this->user($id)->delete();
}
],
[
'pattern' => 'users/(:any)/avatar',
'pattern' => [
'(account)/avatar',
'users/(:any)/avatar',
],
'method' => 'GET',
'action' => function (string $id) {
return $this->user($id)->avatar();
}
],
// @codeCoverageIgnoreStart
[
'pattern' => 'users/(:any)/avatar',
'pattern' => [
'(account)/avatar',
'users/(:any)/avatar',
],
'method' => 'POST',
'action' => function (string $id) {
if ($avatar = $this->user($id)->avatar()) {
@ -77,79 +92,101 @@ return [
}, $single = true);
}
],
// @codeCoverageIgnoreEnd
[
'pattern' => 'users/(:any)/avatar',
'pattern' => [
'(account)/avatar',
'users/(:any)/avatar',
],
'method' => 'DELETE',
'action' => function (string $id) {
return $this->user($id)->avatar()->delete();
}
],
[
'pattern' => 'users/(:any)/blueprint',
'pattern' => [
'(account)/blueprint',
'users/(:any)/blueprint',
],
'method' => 'GET',
'action' => function (string $id) {
return $this->user($id)->blueprint();
}
],
[
'pattern' => 'users/(:any)/blueprints',
'pattern' => [
'(account)/blueprints',
'users/(:any)/blueprints',
],
'method' => 'GET',
'action' => function (string $id) {
return $this->user($id)->blueprints($this->requestQuery('section'));
}
],
[
'pattern' => 'users/(:any)/email',
'pattern' => [
'(account)/email',
'users/(:any)/email',
],
'method' => 'PATCH',
'action' => function (string $id) {
return $this->user($id)->changeEmail($this->requestBody('email'));
}
],
[
'pattern' => 'users/(:any)/fields/(:any)/(:all?)',
'method' => 'ALL',
'action' => function (string $id, string $fieldName, string $path = null) {
if ($user = $this->user($id)) {
return $this->fieldApi($user, $fieldName, $path);
}
}
],
[
'pattern' => 'users/(:any)/language',
'pattern' => [
'(account)/language',
'users/(:any)/language',
],
'method' => 'PATCH',
'action' => function (string $id) {
return $this->user($id)->changeLanguage($this->requestBody('language'));
}
],
[
'pattern' => 'users/(:any)/name',
'pattern' => [
'(account)/name',
'users/(:any)/name',
],
'method' => 'PATCH',
'action' => function (string $id) {
return $this->user($id)->changeName($this->requestBody('name'));
}
],
[
'pattern' => 'users/(:any)/password',
'pattern' => [
'(account)/password',
'users/(:any)/password',
],
'method' => 'PATCH',
'action' => function (string $id) {
return $this->user($id)->changePassword($this->requestBody('password'));
}
],
[
'pattern' => 'users/(:any)/role',
'pattern' => [
'(account)/role',
'users/(:any)/role',
],
'method' => 'PATCH',
'action' => function (string $id) {
return $this->user($id)->changeRole($this->requestBody('role'));
}
],
[
'pattern' => 'users/(:any)/roles',
'pattern' => [
'(account)/roles',
'users/(:any)/roles',
],
'action' => function (string $id) {
return $this->user($id)->roles();
}
],
[
'pattern' => 'users/(:any)/sections/(:any)',
'pattern' => [
'(account)/sections/(:any)',
'users/(:any)/sections/(:any)',
],
'method' => 'GET',
'action' => function (string $id, string $sectionName) {
if ($section = $this->user($id)->blueprint()->section($sectionName)) {
@ -157,4 +194,14 @@ return [
}
}
],
[
'pattern' => [
'(account)/fields/(:any)/(:all?)',
'users/(:any)/fields/(:any)/(:all?)',
],
'method' => 'ALL',
'action' => function (string $id, string $fieldName, string $path = null) {
return $this->fieldApi($this->user($id), $fieldName, $path);
}
],
];

View file

@ -0,0 +1,12 @@
<?php
return function () {
return [
'icon' => 'account',
'label' => t('view.account'),
'search' => 'users',
'dialogs' => require __DIR__ . '/account/dialogs.php',
'dropdowns' => require __DIR__ . '/account/dropdowns.php',
'views' => require __DIR__ . '/account/views.php'
];
};

View file

@ -0,0 +1,70 @@
<?php
$dialogs = require __DIR__ . '/../users/dialogs.php';
return [
// change email
'account.changeEmail' => [
'pattern' => '(account)/changeEmail',
'load' => $dialogs['user.changeEmail']['load'],
'submit' => $dialogs['user.changeEmail']['submit'],
],
// change language
'account.changeLanguage' => [
'pattern' => '(account)/changeLanguage',
'load' => $dialogs['user.changeLanguage']['load'],
'submit' => $dialogs['user.changeLanguage']['submit'],
],
// change name
'account.changeName' => [
'pattern' => '(account)/changeName',
'load' => $dialogs['user.changeName']['load'],
'submit' => $dialogs['user.changeName']['submit'],
],
// change password
'account.changePassword' => [
'pattern' => '(account)/changePassword',
'load' => $dialogs['user.changePassword']['load'],
'submit' => $dialogs['user.changePassword']['submit'],
],
// change role
'account.changeRole' => [
'pattern' => '(account)/changeRole',
'load' => $dialogs['user.changeRole']['load'],
'submit' => $dialogs['user.changeRole']['submit'],
],
// delete
'account.delete' => [
'pattern' => '(account)/delete',
'load' => $dialogs['user.delete']['load'],
'submit' => $dialogs['user.delete']['submit'],
],
// change file name
'account.file.changeName' => [
'pattern' => '(account)/files/(:any)/changeName',
'load' => $dialogs['user.file.changeName']['load'],
'submit' => $dialogs['user.file.changeName']['submit'],
],
// change file sort
'account.file.changeSort' => [
'pattern' => '(account)/files/(:any)/changeSort',
'load' => $dialogs['user.file.changeSort']['load'],
'submit' => $dialogs['user.file.changeSort']['submit'],
],
// delete
'account.file.delete' => [
'pattern' => '(account)/files/(:any)/delete',
'load' => $dialogs['user.file.delete']['load'],
'submit' => $dialogs['user.file.delete']['submit'],
],
];

View file

@ -0,0 +1,14 @@
<?php
$dropdowns = require __DIR__ . '/../users/dropdowns.php';
return [
'account' => [
'pattern' => '(account)',
'options' => $dropdowns['user']['options']
],
'account.file' => [
'pattern' => '(account)/files/(:any)',
'options' => $dropdowns['user.file']['options']
],
];

View file

@ -0,0 +1,40 @@
<?php
use Kirby\Cms\Find;
use Kirby\Panel\Panel;
return [
'account' => [
'pattern' => 'account',
'action' => function () {
return [
'component' => 'k-account-view',
'props' => kirby()->user()->panel()->props(),
];
},
],
'account.file' => [
'pattern' => 'account/files/(:any)',
'action' => function (string $filename) {
return Find::file('account', $filename)->panel()->view();
}
],
'account.logout' => [
'pattern' => 'logout',
'auth' => false,
'action' => function () {
if ($user = kirby()->user()) {
$user->logout();
}
Panel::go('login');
},
],
'account.password' => [
'pattern' => 'reset-password',
'action' => function () {
return [
'component' => 'k-reset-password-view',
];
}
]
];

View file

@ -0,0 +1,131 @@
<?php
use Kirby\Cms\Find;
use Kirby\Panel\Field;
use Kirby\Panel\Panel;
use Kirby\Toolkit\Escape;
/**
* Shared file dialogs
* They are included in the site and
* users area to create dialogs there.
* The array keys are replaced by
* the appropriate routes in the areas.
*/
return [
'changeName' => [
'load' => function (string $path, string $filename) {
$file = Find::file($path, $filename);
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => [
'name' => [
'label' => t('name'),
'type' => 'slug',
'required' => true,
'icon' => 'title',
'allow' => '@._-',
'after' => '.' . $file->extension(),
'preselect' => true
]
],
'submitButton' => t('rename'),
'value' => [
'name' => $file->name(),
]
]
];
},
'submit' => function (string $path, string $filename) {
$file = Find::file($path, $filename);
$renamed = $file->changeName(get('name'));
$oldUrl = $file->panel()->url(true);
$newUrl = $renamed->panel()->url(true);
$response = [
'event' => 'file.changeName',
'dispatch' => [
'content/move' => [
$oldUrl,
$newUrl
]
],
];
// check for a necessary redirect after the filename has changed
if (Panel::referrer() === $oldUrl && $oldUrl !== $newUrl) {
$response['redirect'] = $newUrl;
}
return $response;
}
],
'changeSort' => [
'load' => function (string $path, string $filename) {
$file = Find::file($path, $filename);
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => [
'position' => Field::filePosition($file)
],
'submitButton' => t('change'),
'value' => [
'position' => $file->sort()->isEmpty() ? $file->siblings(false)->count() + 1 : $file->sort()->toInt(),
]
]
];
},
'submit' => function (string $path, string $filename) {
$file = Find::file($path, $filename);
$files = $file->siblings()->sorted();
$ids = $files->keys();
$newIndex = (int)(get('position')) - 1;
$oldIndex = $files->indexOf($file);
array_splice($ids, $oldIndex, 1);
array_splice($ids, $newIndex, 0, $file->id());
$files->changeSort($ids);
return [
'event' => 'file.sort',
];
}
],
'delete' => [
'load' => function (string $path, string $filename) {
$file = Find::file($path, $filename);
return [
'component' => 'k-remove-dialog',
'props' => [
'text' => tt('file.delete.confirm', [
'filename' => Escape::html($file->filename())
]),
]
];
},
'submit' => function (string $path, string $filename) {
$file = Find::file($path, $filename);
$redirect = false;
$referrer = Panel::referrer();
$url = $file->panel()->url(true);
$file->delete();
// redirect to the parent model URL
// if the dialog has been opened in the file view
if ($referrer === $url) {
$redirect = $file->parent()->panel()->url(true);
}
return [
'event' => 'file.delete',
'dispatch' => ['content/remove' => [$url]],
'redirect' => $redirect
];
}
],
];

View file

@ -0,0 +1,9 @@
<?php
use Kirby\Cms\Find;
return [
'file' => function (string $parent, string $filename) {
return Find::file($parent, $filename)->panel()->dropdown();
}
];

View file

@ -0,0 +1,41 @@
<?php
use Kirby\Panel\Panel;
return function ($kirby) {
return [
'icon' => 'settings',
'label' => t('view.installation'),
'views' => [
'installation' => [
'pattern' => 'installation',
'auth' => false,
'action' => function () use ($kirby) {
$system = $kirby->system();
return [
'component' => 'k-installation-view',
'props' => [
'isInstallable' => $system->isInstallable(),
'isInstalled' => $system->isInstalled(),
'isOk' => $system->isOk(),
'requirements' => $system->status(),
'translations' => $kirby->translations()->values(function ($translation) {
return [
'text' => $translation->name(),
'value' => $translation->code(),
];
}),
]
];
}
],
'installation.fallback' => [
'pattern' => '(:all)',
'auth' => false,
'action' => function () {
Panel::go('installation');
}
]
]
];
};

View file

@ -0,0 +1,11 @@
<?php
return function ($kirby) {
return [
'icon' => 'globe',
'label' => t('view.languages'),
'menu' => true,
'dialogs' => require __DIR__ . '/languages/dialogs.php',
'views' => require __DIR__ . '/languages/views.php'
];
};

View file

@ -0,0 +1,149 @@
<?php
use Kirby\Cms\Find;
use Kirby\Panel\Field;
use Kirby\Toolkit\A;
use Kirby\Toolkit\Escape;
$languageDialogFields = [
'name' => [
'label' => t('language.name'),
'type' => 'text',
'required' => true,
'icon' => 'title'
],
'code' => [
'label' => t('language.code'),
'type' => 'text',
'required' => true,
'counter' => false,
'icon' => 'globe',
'width' => '1/2'
],
'direction' => [
'label' => t('language.direction'),
'type' => 'select',
'required' => true,
'empty' => false,
'options' => [
['value' => 'ltr', 'text' => t('language.direction.ltr')],
['value' => 'rtl', 'text' => t('language.direction.rtl')]
],
'width' => '1/2'
],
'locale' => [
'label' => t('language.locale'),
'type' => 'text',
],
];
return [
// create language
'language.create' => [
'pattern' => 'languages/create',
'load' => function () use ($languageDialogFields) {
return [
'component' => 'k-language-dialog',
'props' => [
'fields' => $languageDialogFields,
'submitButton' => t('language.create'),
'value' => [
'code' => '',
'direction' => 'ltr',
'locale' => '',
'name' => '',
]
]
];
},
'submit' => function () {
kirby()->languages()->create([
'code' => get('code'),
'direction' => get('direction'),
'locale' => get('locale'),
'name' => get('name'),
]);
return [
'event' => 'language.create'
];
}
],
// delete language
'language.delete' => [
'pattern' => 'languages/(:any)/delete',
'load' => function (string $id) {
$language = Find::language($id);
return [
'component' => 'k-remove-dialog',
'props' => [
'text' => tt('language.delete.confirm', [
'name' => Escape::html($language->name())
])
]
];
},
'submit' => function (string $id) {
Find::language($id)->delete();
return [
'event' => 'language.delete',
];
}
],
// update language
'language.update' => [
'pattern' => 'languages/(:any)/update',
'load' => function (string $id) use ($languageDialogFields) {
$language = Find::language($id);
$fields = $languageDialogFields;
$locale = $language->locale();
// use the first locale key if there's only one
if (count($locale) === 1) {
$locale = A::first($locale);
}
// the code of an existing language cannot be changed
$fields['code']['disabled'] = true;
// if the locale settings is more complex than just a
// single string, the text field won't do it anymore.
// Changes can only be made in the language file and
// we display a warning box instead.
if (is_array($locale) === true) {
$fields['locale'] = [
'label' => $fields['locale']['label'],
'type' => 'info',
'text' => t('language.locale.warning')
];
}
return [
'component' => 'k-language-dialog',
'props' => [
'fields' => $fields,
'submitButton' => t('save'),
'value' => [
'code' => $language->code(),
'direction' => $language->direction(),
'locale' => $locale,
'name' => $language->name(),
'rules' => $language->rules(),
]
]
];
},
'submit' => function (string $id) {
$language = Find::language($id)->update([
'direction' => get('direction'),
'locale' => get('locale'),
'name' => get('name'),
]);
return [
'event' => 'language.update'
];
}
],
];

View file

@ -0,0 +1,26 @@
<?php
use Kirby\Toolkit\Escape;
return [
'languages' => [
'pattern' => 'languages',
'action' => function () {
$kirby = kirby();
return [
'component' => 'k-languages-view',
'props' => [
'languages' => $kirby->languages()->values(function ($language) {
return [
'default' => $language->isDefault(),
'id' => $language->code(),
'info' => Escape::html($language->code()),
'text' => Escape::html($language->name()),
];
})
]
];
}
],
];

View file

@ -0,0 +1,43 @@
<?php
use Kirby\Panel\Panel;
return function ($kirby) {
return [
'icon' => 'user',
'label' => t('login'),
'views' => [
'login' => [
'pattern' => 'login',
'auth' => false,
'action' => function () use ($kirby) {
$system = $kirby->system();
$status = $kirby->auth()->status();
return [
'component' => 'k-login-view',
'props' => [
'methods' => array_keys($system->loginMethods()),
'pending' => [
'email' => $status->email(),
'challenge' => $status->challenge()
]
],
];
}
],
'login.fallback' => [
'pattern' => '(:all)',
'auth' => false,
'action' => function ($path) use ($kirby) {
/**
* Store the current path in the session
* Once the user is logged in, the path will
* be used to redirect to that view again
*/
$kirby->session()->set('panel.path', $path);
Panel::go('login');
}
]
]
];
};

View file

@ -0,0 +1,17 @@
<?php
return function ($kirby) {
return [
'breadcrumbLabel' => function () use ($kirby) {
return $kirby->site()->title()->or(t('view.site'))->toString();
},
'icon' => 'home',
'label' => $kirby->site()->blueprint()->title() ?? t('view.site'),
'menu' => true,
'dialogs' => require __DIR__ . '/site/dialogs.php',
'dropdowns' => require __DIR__ . '/site/dropdowns.php',
'searches' => require __DIR__ . '/site/searches.php',
'views' => require __DIR__ . '/site/views.php',
];
};

View file

@ -0,0 +1,547 @@
<?php
use Kirby\Cms\Find;
use Kirby\Exception\Exception;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Exception\PermissionException;
use Kirby\Panel\Field;
use Kirby\Panel\Panel;
use Kirby\Toolkit\Str;
$files = require __DIR__ . '/../files/dialogs.php';
return [
// change page position
'page.changeSort' => [
'pattern' => 'pages/(:any)/changeSort',
'load' => function (string $id) {
$page = Find::page($id);
$position = null;
if ($page->blueprint()->num() !== 'default') {
throw new PermissionException([
'key' => 'page.sort.permission',
'data' => [
'slug' => $page->slug()
]
]);
}
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => [
'position' => Field::pagePosition($page),
],
'submitButton' => t('change'),
'value' => [
'position' => $page->panel()->position()
]
]
];
},
'submit' => function (string $id) {
Find::page($id)->changeStatus('listed', get('position'));
return [
'event' => 'page.sort',
];
}
],
// change page status
'page.changeStatus' => [
'pattern' => 'pages/(:any)/changeStatus',
'load' => function (string $id) {
$page = Find::page($id);
$blueprint = $page->blueprint();
$status = $page->status();
$states = [];
$position = null;
foreach ($blueprint->status() as $key => $state) {
$states[] = [
'value' => $key,
'text' => $state['label'],
'info' => $state['text'],
];
}
if ($status === 'draft') {
$errors = $page->errors();
// switch to the error dialog if there are
// errors and the draft cannot be published
if (count($errors) > 0) {
return [
'component' => 'k-error-dialog',
'props' => [
'message' => t('error.page.changeStatus.incomplete'),
'details' => $errors,
]
];
}
}
$fields = [
'status' => [
'label' => t('page.changeStatus.select'),
'type' => 'radio',
'required' => true,
'options' => $states
]
];
if ($blueprint->num() === 'default') {
$fields['position'] = Field::pagePosition($page, [
'when' => [
'status' => 'listed'
]
]);
$position = $page->panel()->position();
}
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => $fields,
'submitButton' => t('change'),
'value' => [
'status' => $status,
'position' => $position
]
]
];
},
'submit' => function (string $id) {
Find::page($id)->changeStatus(get('status'), get('position'));
return [
'event' => 'page.changeStatus',
];
}
],
// change template
'page.changeTemplate' => [
'pattern' => 'pages/(:any)/changeTemplate',
'load' => function (string $id) {
$page = Find::page($id);
$blueprints = $page->blueprints();
if (count($blueprints) <= 1) {
throw new Exception([
'key' => 'page.changeTemplate.invalid',
'data' => [
'slug' => $id
]
]);
}
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => [
'template' => Field::template($blueprints, [
'required' => true
])
],
'submitButton' => t('change'),
'value' => [
'template' => $page->intendedTemplate()->name()
]
]
];
},
'submit' => function (string $id) {
Find::page($id)->changeTemplate(get('template'));
return [
'event' => 'page.changeTemplate',
];
}
],
// change title
'page.changeTitle' => [
'pattern' => 'pages/(:any)/changeTitle',
'load' => function (string $id) {
$page = Find::page($id);
$permissions = $page->permissions();
$select = get('select', 'title');
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => [
'title' => Field::title([
'required' => true,
'preselect' => $select === 'title',
'disabled' => $permissions->can('changeTitle') === false
]),
'slug' => Field::slug([
'required' => true,
'preselect' => $select === 'slug',
'path' => $page->parent() ? '/' . $page->parent()->id() . '/' : '/',
'disabled' => $permissions->can('changeSlug') === false,
'wizard' => [
'text' => t('page.changeSlug.fromTitle'),
'field' => 'title'
]
])
],
'autofocus' => false,
'submitButton' => t('change'),
'value' => [
'title' => $page->title()->value(),
'slug' => $page->slug(),
]
]
];
},
'submit' => function (string $id) {
$page = Find::page($id);
$title = trim(get('title'));
$slug = trim(get('slug'));
// basic input validation before we move on
if (Str::length($title) === 0) {
throw new InvalidArgumentException(['key' => 'page.changeTitle.empty']);
}
if (Str::length($slug) === 0) {
throw new InvalidArgumentException(['key' => 'page.slug.invalid']);
}
// nothing changed
if ($page->title()->value() === $title && $page->slug() === $slug) {
return true;
}
// prepare the response
$response = [
'event' => []
];
// the page title changed
if ($page->title()->value() !== $title) {
$page->changeTitle($title);
$response['event'][] = 'page.changeTitle';
}
// the slug changed
if ($page->slug() !== $slug) {
$newPage = $page->changeSlug($slug);
$response['event'][] = 'page.changeSlug';
$response['dispatch'] = [
'content/move' => [
$oldUrl = $page->panel()->url(true),
$newUrl = $newPage->panel()->url(true)
]
];
// check for a necessary redirect after the slug has changed
if (Panel::referrer() === $oldUrl && $oldUrl !== $newUrl) {
$response['redirect'] = $newUrl;
}
}
return $response;
}
],
// create a new page
'page.create' => [
'pattern' => 'pages/create',
'load' => function () {
// the parent model for the new page
$parent = get('parent', 'site');
// the view on which the add button is located
// this is important to find the right section
// and provide the correct templates for the new page
$view = get('view', $parent);
// templates will be fetched depending on the
// section settings in the blueprint
$section = get('section');
// this is the parent model
$model = Find::parent($parent);
// this is the view model
// i.e. site if the add button is on
// the dashboard
$view = Find::parent($view);
// available blueprints/templates for the new page
// are always loaded depending on the matching section
// in the view model blueprint
$blueprints = $view->blueprints($section);
// the pre-selected template
$template = $blueprints[0]['name'] ?? $blueprints[0]['value'] ?? null;
$fields = [
'parent' => Field::hidden(),
'title' => Field::title([
'required' => true,
'preselect' => true
]),
'slug' => Field::slug([
'required' => true,
'sync' => 'title',
'path' => empty($model->id()) === false ? '/' . $model->id() . '/' : '/'
]),
'template' => Field::hidden()
];
// only show template field if > 1 templates available
// or when in debug mode
if (count($blueprints) > 1 || option('debug') === true) {
$fields['template'] = Field::template($blueprints, [
'required' => true
]);
}
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => $fields,
'submitButton' => t('page.draft.create'),
'value' => [
'parent' => $parent,
'slug' => '',
'template' => $template,
'title' => '',
]
]
];
},
'submit' => function () {
$title = trim(get('title'));
if (Str::length($title) === 0) {
throw new InvalidArgumentException([
'key' => 'page.changeTitle.empty'
]);
}
$page = Find::parent(get('parent', 'site'))->createChild([
'content' => ['title' => $title],
'slug' => get('slug'),
'template' => get('template'),
]);
return [
'event' => 'page.create',
'redirect' => $page->panel()->url(true)
];
}
],
// delete page
'page.delete' => [
'pattern' => 'pages/(:any)/delete',
'load' => function (string $id) {
$page = Find::page($id);
$text = tt('page.delete.confirm', [
'title' => Escape::html($page->title()->value())
]);
if ($page->childrenAndDrafts()->count() > 0) {
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => [
'info' => [
'type' => 'info',
'theme' => 'negative',
'text' => t('page.delete.confirm.subpages')
],
'check' => [
'label' => t('page.delete.confirm.title'),
'type' => 'text',
'counter' => false
]
],
'size' => 'medium',
'submitButton' => t('delete'),
'text' => $text,
'theme' => 'negative',
]
];
}
return [
'component' => 'k-remove-dialog',
'props' => [
'text' => $text
]
];
},
'submit' => function (string $id) {
$page = Find::page($id);
$redirect = false;
$referrer = Panel::referrer();
$url = $page->panel()->url(true);
if ($page->childrenAndDrafts()->count() > 0 && get('check') !== $page->title()->value()) {
throw new InvalidArgumentException(['key' => 'page.delete.confirm']);
}
$page->delete(true);
// redirect to the parent model URL
// if the dialog has been opened in the page view
if ($referrer === $url) {
$redirect = $page->parentModel()->panel()->url(true);
}
return [
'event' => 'page.delete',
'dispatch' => ['content/remove' => [$url]],
'redirect' => $redirect
];
}
],
// duplicate page
'page.duplicate' => [
'pattern' => 'pages/(:any)/duplicate',
'load' => function (string $id) {
$page = Find::page($id);
$hasChildren = $page->hasChildren();
$hasFiles = $page->hasFiles();
$toggleWidth = '1/' . count(array_filter([$hasChildren, $hasFiles]));
$fields = [
'title' => Field::title([
'required' => true
]),
'slug' => Field::slug([
'required' => true,
'path' => $page->parent() ? '/' . $page->parent()->id() . '/' : '/',
'wizard' => [
'text' => t('page.changeSlug.fromTitle'),
'field' => 'title'
]
])
];
if ($hasFiles === true) {
$fields['files'] = [
'label' => t('page.duplicate.files'),
'type' => 'toggle',
'required' => true,
'width' => $toggleWidth
];
}
if ($hasChildren === true) {
$fields['children'] = [
'label' => t('page.duplicate.pages'),
'type' => 'toggle',
'required' => true,
'width' => $toggleWidth
];
}
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => $fields,
'submitButton' => t('duplicate'),
'value' => [
'children' => false,
'files' => false,
'slug' => $page->slug() . '-' . Str::slug(t('page.duplicate.appendix')),
'title' => $page->title() . ' ' . t('page.duplicate.appendix')
]
]
];
},
'submit' => function (string $id) {
$newPage = Find::page($id)->duplicate(get('slug'), [
'children' => (bool)get('children'),
'files' => (bool)get('files'),
'title' => (string)get('title'),
]);
return [
'event' => 'page.duplicate',
'redirect' => $newPage->panel()->url(true)
];
}
],
// change filename
'page.file.changeName' => [
'pattern' => '(pages/.*?)/files/(:any)/changeName',
'load' => $files['changeName']['load'],
'submit' => $files['changeName']['submit'],
],
// change sort
'page.file.changeSort' => [
'pattern' => '(pages/.*?)/files/(:any)/changeSort',
'load' => $files['changeSort']['load'],
'submit' => $files['changeSort']['submit'],
],
// delete
'page.file.delete' => [
'pattern' => '(pages/.*?)/files/(:any)/delete',
'load' => $files['delete']['load'],
'submit' => $files['delete']['submit'],
],
// change site title
'site.changeTitle' => [
'pattern' => 'site/changeTitle',
'load' => function () {
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => [
'title' => Field::title([
'required' => true,
'preselect' => true
])
],
'submitButton' => t('rename'),
'value' => [
'title' => site()->title()->value()
]
]
];
},
'submit' => function () {
site()->changeTitle(get('title'));
return [
'event' => 'site.changeTitle',
];
}
],
// change filename
'site.file.changeName' => [
'pattern' => '(site)/files/(:any)/changeName',
'load' => $files['changeName']['load'],
'submit' => $files['changeName']['submit'],
],
// change sort
'site.file.changeSort' => [
'pattern' => '(site)/files/(:any)/changeSort',
'load' => $files['changeSort']['load'],
'submit' => $files['changeSort']['submit'],
],
// delete
'site.file.delete' => [
'pattern' => '(site)/files/(:any)/delete',
'load' => $files['delete']['load'],
'submit' => $files['delete']['submit'],
],
];

View file

@ -0,0 +1,28 @@
<?php
use Kirby\Panel\Dropdown;
$files = require __DIR__ . '/../files/dropdowns.php';
return [
'changes' => [
'pattern' => 'changes',
'options' => function () {
return Dropdown::changes();
}
],
'page' => [
'pattern' => 'pages/(:any)',
'options' => function (string $path) {
return Find::page($path)->panel()->dropdown();
}
],
'page.file' => [
'pattern' => '(pages/.*?)/files/(:any)',
'options' => $files['file']
],
'site.file' => [
'pattern' => '(site)/files/(:any)',
'options' => $files['file']
]
];

View file

@ -0,0 +1,55 @@
<?php
use Kirby\Toolkit\Escape;
return [
'pages' => [
'label' => t('pages'),
'icon' => 'page',
'query' => function (string $query = null) {
$pages = site()
->index(true)
->search($query)
->filter('isReadable', true)
->limit(10);
$results = [];
foreach ($pages as $page) {
$results[] = [
'image' => $page->panel()->image(),
'text' => Escape::html($page->title()->value()),
'link' => $page->panel()->url(true),
'info' => Escape::html($page->id())
];
}
return $results;
}
],
'files' => [
'label' => t('files'),
'icon' => 'image',
'query' => function (string $query = null) {
$files = site()
->index(true)
->filter('isReadable', true)
->files()
->search($query)
->limit(10);
$results = [];
foreach ($files as $file) {
$results[] = [
'image' => $file->panel()->image(),
'text' => Escape::html($file->filename()),
'link' => $file->panel()->url(true),
'info' => Escape::html($file->id())
];
}
return $results;
}
]
];

View file

@ -0,0 +1,30 @@
<?php
use Kirby\Cms\Find;
return [
'page' => [
'pattern' => 'pages/(:any)',
'action' => function (string $path) {
return Find::page($path)->panel()->view();
}
],
'page.file' => [
'pattern' => 'pages/(:any)/files/(:any)',
'action' => function (string $id, string $filename) {
return Find::file('pages/' . $id, $filename)->panel()->view();
}
],
'site' => [
'pattern' => 'site',
'action' => function () {
return site()->panel()->view();
}
],
'site.file' => [
'pattern' => 'site/files/(:any)',
'action' => function (string $filename) {
return Find::file('site', $filename)->panel()->view();
}
],
];

View file

@ -0,0 +1,11 @@
<?php
return function ($kirby) {
return [
'icon' => 'settings',
'label' => t('view.system'),
'menu' => true,
'dialogs' => require __DIR__ . '/system/dialogs.php',
'views' => require __DIR__ . '/system/views.php'
];
};

View file

@ -0,0 +1,43 @@
<?php
use Kirby\Panel\Field;
return [
// license registration
'registration' => [
'load' => function () {
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => [
'license' => [
'label' => t('license.register.label'),
'type' => 'text',
'required' => true,
'counter' => false,
'placeholder' => 'K3-',
'help' => t('license.register.help')
],
'email' => Field::email([
'required' => true
])
],
'submitButton' => t('license.register'),
'value' => [
'license' => null,
'email' => null
]
]
];
},
'submit' => function () {
// @codeCoverageIgnoreStart
kirby()->system()->register(get('license'), get('email'));
return [
'event' => 'system.register',
'message' => t('license.register.success')
];
// @codeCoverageIgnoreEnd
}
],
];

View file

@ -0,0 +1,46 @@
<?php
return [
'system' => [
'pattern' => 'system',
'action' => function () {
$kirby = kirby();
$system = $kirby->system();
$license = $system->license();
// @codeCoverageIgnoreStart
if ($license === true) {
// valid license, but user is not admin
$license = 'Kirby 3';
} elseif ($license === false) {
// no valid license
$license = null;
}
// @codeCoverageIgnoreEnd
$plugins = $system->plugins()->values(function ($plugin) {
return [
'author' => $plugin->authorsNames(),
'license' => $plugin->license(),
'link' => $plugin->link(),
'name' => $plugin->name(),
'version' => $plugin->version(),
];
});
return [
'component' => 'k-system-view',
'props' => [
'debug' => $kirby->option('debug', false),
'license' => $license,
'plugins' => $plugins,
'php' => phpversion(),
'server' => $system->serverSoftware(),
'ssl' => Server::https(),
'version' => $kirby->version(),
]
];
}
],
];

View file

@ -0,0 +1,14 @@
<?php
return function ($kirby) {
return [
'icon' => 'users',
'label' => t('view.users'),
'search' => 'users',
'menu' => true,
'dialogs' => require __DIR__ . '/users/dialogs.php',
'dropdowns' => require __DIR__ . '/users/dropdowns.php',
'searches' => require __DIR__ . '/users/searches.php',
'views' => require __DIR__ . '/users/views.php'
];
};

View file

@ -0,0 +1,295 @@
<?php
use Kirby\Cms\Find;
use Kirby\Cms\UserRules;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Panel\Field;
use Kirby\Panel\Panel;
use Kirby\Toolkit\Escape;
$files = require __DIR__ . '/../files/dialogs.php';
return [
// create
'user.create' => [
'pattern' => 'users/create',
'load' => function () {
$kirby = kirby();
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => [
'name' => Field::username(),
'email' => Field::email([
'link' => false,
'required' => true
]),
'password' => Field::password(),
'language' => Field::translation([
'required' => true
]),
'role' => Field::role([
'required' => true
])
],
'submitButton' => t('create'),
'value' => [
'name' => '',
'email' => '',
'password' => '',
'language' => $kirby->panelLanguage(),
'role' => $kirby->user()->role()->name()
]
]
];
},
'submit' => function () {
kirby()->users()->create([
'name' => get('name'),
'email' => get('email'),
'password' => get('password'),
'language' => get('language'),
'role' => get('role')
]);
return [
'event' => 'user.create'
];
}
],
// change email
'user.changeEmail' => [
'pattern' => 'users/(:any)/changeEmail',
'load' => function (string $id) {
$user = Find::user($id);
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => [
'email' => [
'label' => t('email'),
'required' => true,
'type' => 'email',
'preselect' => true
]
],
'submitButton' => t('change'),
'value' => [
'email' => $user->email()
]
]
];
},
'submit' => function (string $id) {
Find::user($id)->changeEmail(get('email'));
return [
'event' => 'user.changeEmail'
];
}
],
// change language
'user.changeLanguage' => [
'pattern' => 'users/(:any)/changeLanguage',
'load' => function (string $id) {
$user = Find::user($id);
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => [
'translation' => Field::translation(['required' => true])
],
'submitButton' => t('change'),
'value' => [
'translation' => $user->language()
]
]
];
},
'submit' => function (string $id) {
Find::user($id)->changeLanguage(get('translation'));
return [
'event' => 'user.changeLanguage',
'reload' => [
'globals' => '$translation'
]
];
}
],
// change name
'user.changeName' => [
'pattern' => 'users/(:any)/changeName',
'load' => function (string $id) {
$user = Find::user($id);
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => [
'name' => Field::username([
'preselect' => true
])
],
'submitButton' => t('rename'),
'value' => [
'name' => $user->name()->value()
]
]
];
},
'submit' => function (string $id) {
Find::user($id)->changeName(get('name'));
return [
'event' => 'user.changeName'
];
}
],
// change password
'user.changePassword' => [
'pattern' => 'users/(:any)/changePassword',
'load' => function (string $id) {
$user = Find::user($id);
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => [
'password' => Field::password([
'label' => t('user.changePassword.new'),
]),
'passwordConfirmation' => Field::password([
'label' => t('user.changePassword.new.confirm'),
])
],
'submitButton' => t('change'),
]
];
},
'submit' => function (string $id) {
$user = Find::user($id);
$password = get('password');
$passwordConfirmation = get('passwordConfirmation');
// validate the password
UserRules::validPassword($user, $password ?? '');
// compare passwords
if ($password !== $passwordConfirmation) {
throw new InvalidArgumentException([
'key' => 'user.password.notSame'
]);
}
// change password if everything's fine
$user->changePassword($password);
return [
'event' => 'user.changePassword'
];
}
],
// change role
'user.changeRole' => [
'pattern' => 'users/(:any)/changeRole',
'load' => function (string $id) {
$user = Find::user($id);
return [
'component' => 'k-form-dialog',
'props' => [
'fields' => [
'role' => Field::role([
'label' => t('user.changeRole.select'),
'required' => true,
])
],
'submitButton' => t('user.changeRole'),
'value' => [
'role' => $user->role()->name()
]
]
];
},
'submit' => function (string $id) {
$user = Find::user($id)->changeRole(get('role'));
return [
'event' => 'user.changeRole',
'user' => $user->toArray()
];
}
],
// delete
'user.delete' => [
'pattern' => 'users/(:any)/delete',
'load' => function (string $id) {
$user = Find::user($id);
$i18nPrefix = $user->isLoggedIn() ? 'account' : 'user';
return [
'component' => 'k-remove-dialog',
'props' => [
'text' => tt($i18nPrefix . '.delete.confirm', [
'email' => Escape::html($user->email())
])
]
];
},
'submit' => function (string $id) {
$user = Find::user($id);
$redirect = false;
$referrer = Panel::referrer();
$url = $user->panel()->url(true);
$user->delete();
// redirect to the users view
// if the dialog has been opened in the user view
if ($referrer === $url) {
$redirect = '/users';
}
// logout the user if they deleted themselves
if ($user->isLoggedIn()) {
$redirect = '/logout';
}
return [
'event' => 'user.delete',
'dispatch' => ['content/remove' => [$url]],
'redirect' => $redirect
];
}
],
// change file name
'user.file.changeName' => [
'pattern' => '(users/.*?)/files/(:any)/changeName',
'load' => $files['changeName']['load'],
'submit' => $files['changeName']['submit'],
],
// change file sort
'user.file.changeSort' => [
'pattern' => '(users/.*?)/files/(:any)/changeSort',
'load' => $files['changeSort']['load'],
'submit' => $files['changeSort']['submit'],
],
// delete file
'user.file.delete' => [
'pattern' => '(users/.*?)/files/(:any)/delete',
'load' => $files['delete']['load'],
'submit' => $files['delete']['submit'],
]
];

View file

@ -0,0 +1,18 @@
<?php
use Kirby\Cms\Find;
$files = require __DIR__ . '/../files/dropdowns.php';
return [
'user' => [
'pattern' => 'users/(:any)',
'options' => function (string $id) {
return Find::user($id)->panel()->dropdown();
}
],
'user.file' => [
'pattern' => '(users/.*?)/files/(:any)',
'options' => $files['file']
]
];

View file

@ -0,0 +1,25 @@
<?php
use Kirby\Toolkit\Escape;
return [
'users' => [
'label' => t('users'),
'icon' => 'users',
'query' => function (string $query = null) {
$users = kirby()->users()->search($query)->limit(10);
$results = [];
foreach ($users as $user) {
$results[] = [
'image' => $user->panel()->image(),
'text' => Escape::html($user->username()),
'link' => $user->panel()->url(true),
'info' => Escape::html($user->role()->title())
];
}
return $results;
}
]
];

View file

@ -0,0 +1,69 @@
<?php
use Kirby\Cms\Find;
use Kirby\Toolkit\Escape;
return [
'users' => [
'pattern' => 'users',
'action' => function () {
$kirby = kirby();
$role = get('role');
$roles = $kirby->roles()->toArray(function ($role) {
return [
'id' => $role->id(),
'title' => $role->title(),
];
});
return [
'component' => 'k-users-view',
'props' => [
'role' => function () use ($kirby, $roles, $role) {
if ($role) {
return $roles[$role] ?? null;
}
},
'roles' => array_values($roles),
'users' => function () use ($kirby, $role) {
$users = $kirby->users();
if (empty($role) === false) {
$users = $users->role($role);
}
$users = $users->paginate([
'limit' => 20,
'page' => get('page')
]);
return [
'data' => $users->values(function ($user) {
return [
'id' => $user->id(),
'image' => $user->panel()->image(),
'info' => Escape::html($user->role()->title()),
'link' => $user->panel()->url(true),
'text' => Escape::html($user->username())
];
}),
'pagination' => $users->pagination()->toArray()
];
},
]
];
}
],
'user' => [
'pattern' => 'users/(:any)',
'action' => function (string $id) {
return Find::user($id)->panel()->view();
}
],
'user.file' => [
'pattern' => 'users/(:any)/files/(:any)',
'action' => function (string $id, string $filename) {
return Find::file('users/' . $id, $filename)->panel()->view();
}
],
];

View file

@ -9,7 +9,7 @@ $ratio = $block->ratio()->or('auto');
$src = null;
if ($block->location() == 'web') {
$src = $block->src();
$src = $block->src()->esc();
} elseif ($image = $block->image()->toFile()) {
$alt = $alt ?? $image->alt();
$src = $image->url();
@ -19,11 +19,11 @@ if ($block->location() == 'web') {
<?php if ($src): ?>
<figure<?= attr(['data-ratio' => $ratio, 'data-crop' => $crop], ' ') ?>>
<?php if ($link->isNotEmpty()): ?>
<a href="<?= $link->toUrl() ?>">
<img src="<?= $src ?>" alt="<?= $alt ?>">
<a href="<?= esc($link->toUrl()) ?>">
<img src="<?= $src ?>" alt="<?= $alt->esc() ?>">
</a>
<?php else: ?>
<img src="<?= $src ?>" alt="<?= $alt ?>">
<img src="<?= $src ?>" alt="<?= $alt->esc() ?>">
<?php endif ?>
<?php if ($caption->isNotEmpty()): ?>

View file

@ -0,0 +1 @@
<hr />

View file

@ -0,0 +1,4 @@
name: field.blocks.line.name
icon: divider
preview: line
wysiwyg: true

View file

@ -1,7 +1,7 @@
<?php /** @var \Kirby\Cms\Block $block */ ?>
<?php if ($block->url()->isNotEmpty()): ?>
<?php if ($video = video($block->url())): ?>
<figure>
<?= video($block->url()) ?>
<?= $video ?>
<?php if ($block->caption()->isNotEmpty()): ?>
<figcaption><?= $block->caption() ?></figcaption>
<?php endif ?>

View file

@ -1,26 +0,0 @@
<?php
$blocksRoot = __DIR__ . '/blocks';
return [
// blocks
'blocks/code' => $blocksRoot . '/code/code.yml',
'blocks/gallery' => $blocksRoot . '/gallery/gallery.yml',
'blocks/heading' => $blocksRoot . '/heading/heading.yml',
'blocks/image' => $blocksRoot . '/image/image.yml',
'blocks/list' => $blocksRoot . '/list/list.yml',
'blocks/markdown' => $blocksRoot . '/markdown/markdown.yml',
'blocks/quote' => $blocksRoot . '/quote/quote.yml',
'blocks/table' => $blocksRoot . '/table/table.yml',
'blocks/text' => $blocksRoot . '/text/text.yml',
'blocks/video' => $blocksRoot . '/video/video.yml',
// file blueprints
'files/default' => __DIR__ . '/blueprints/files/default.yml',
// page blueprints
'pages/default' => __DIR__ . '/blueprints/pages/default.yml',
// site blueprints
'site' => __DIR__ . '/blueprints/site.yml'
];

View file

@ -5,7 +5,6 @@ fields:
level:
type: select
width: 1/2
default: 1
empty: false
default: "2"
options:

View file

@ -3,10 +3,12 @@
use Kirby\Cms\App;
use Kirby\Cms\Collection;
use Kirby\Cms\File;
use Kirby\Cms\Filename;
use Kirby\Cms\FileVersion;
use Kirby\Cms\Template;
use Kirby\Data\Data;
use Kirby\Email\PHPMailer as Emailer;
use Kirby\Filesystem\F;
use Kirby\Filesystem\Filename;
use Kirby\Http\Server;
use Kirby\Http\Uri;
use Kirby\Http\Url;
@ -14,7 +16,6 @@ use Kirby\Image\Darkroom;
use Kirby\Text\Markdown;
use Kirby\Text\SmartyPants;
use Kirby\Toolkit\A;
use Kirby\Toolkit\F;
use Kirby\Toolkit\Str;
use Kirby\Toolkit\Tpl as Snippet;
@ -55,6 +56,17 @@ return [
return $output;
},
/**
* Add your own email provider
*
* @param \Kirby\Cms\App $kirby Kirby instance
* @param array $props
* @param bool $debug
*/
'email' => function (App $kirby, array $props = [], bool $debug = false) {
return new Emailer($props, $debug);
},
/**
* Modify URLs for file objects
*
@ -70,7 +82,7 @@ return [
* Adapt file characteristics
*
* @param \Kirby\Cms\App $kirby Kirby instance
* @param \Kirby\Cms\File|\Kirby\Cms\FileModifications $file The file object
* @param \Kirby\Cms\File|\Kirby\Filesystem\Asset $file The file object
* @param array $options All thumb options (width, height, crop, blur, grayscale)
* @return \Kirby\Cms\File|\Kirby\Cms\FileVersion
*/
@ -233,7 +245,7 @@ return [
}
}
return $item->searchHits > 0 ? true : false;
return $item->searchHits > 0;
});
return $results->sort('searchScore', 'desc');
@ -305,15 +317,18 @@ return [
* Add your own thumb generator
*
* @param \Kirby\Cms\App $kirby Kirby instance
* @param string $src The root of the original file
* @param string $template The template for the root to the desired destination
* @param string $src Root of the original file
* @param string $dst Template string for the root to the desired destination
* @param array $options All thumb options that should be applied: `width`, `height`, `crop`, `blur`, `grayscale`
* @return string
*/
'thumb' => function (App $kirby, string $src, string $template, array $options): string {
$darkroom = Darkroom::factory(option('thumbs.driver', 'gd'), option('thumbs', []));
'thumb' => function (App $kirby, string $src, string $dst, array $options): string {
$darkroom = Darkroom::factory(
option('thumbs.driver', 'gd'),
option('thumbs', [])
);
$options = $darkroom->preprocess($src, $options);
$root = (new Filename($src, $template, $options))->toString();
$root = (new Filename($src, $dst, $options))->toString();
F::copy($src, $root, true);
$darkroom->process($root, $options);
@ -327,13 +342,9 @@ return [
* @param \Kirby\Cms\App $kirby Kirby instance
* @param string $path URL path
* @param array|string|null $options Array of options for the Uri class
* @param Closure $originalHandler Deprecated: Callback function to the original URL handler with `$path` and `$options` as parameters
* Use `$kirby->nativeComponent('url')` inside your URL component instead.
* @return string
*
* @todo Remove $originalHandler parameter in 3.6.0
*/
'url' => function (App $kirby, string $path = null, $options = null, Closure $originalHandler = null): string {
'url' => function (App $kirby, string $path = null, $options = null): string {
$language = null;
// get language from simple string option

View file

@ -1,32 +0,0 @@
<?php
return [
'blocks' => 'Kirby\Form\Field\BlocksField',
'checkboxes' => __DIR__ . '/fields/checkboxes.php',
'date' => __DIR__ . '/fields/date.php',
'email' => __DIR__ . '/fields/email.php',
'files' => __DIR__ . '/fields/files.php',
'gap' => __DIR__ . '/fields/gap.php',
'headline' => __DIR__ . '/fields/headline.php',
'hidden' => __DIR__ . '/fields/hidden.php',
'info' => __DIR__ . '/fields/info.php',
'layout' => 'Kirby\Form\Field\LayoutField',
'line' => __DIR__ . '/fields/line.php',
'list' => __DIR__ . '/fields/list.php',
'multiselect' => __DIR__ . '/fields/multiselect.php',
'number' => __DIR__ . '/fields/number.php',
'pages' => __DIR__ . '/fields/pages.php',
'radio' => __DIR__ . '/fields/radio.php',
'range' => __DIR__ . '/fields/range.php',
'select' => __DIR__ . '/fields/select.php',
'structure' => __DIR__ . '/fields/structure.php',
'tags' => __DIR__ . '/fields/tags.php',
'tel' => __DIR__ . '/fields/tel.php',
'text' => __DIR__ . '/fields/text.php',
'textarea' => __DIR__ . '/fields/textarea.php',
'time' => __DIR__ . '/fields/time.php',
'toggle' => __DIR__ . '/fields/toggle.php',
'url' => __DIR__ . '/fields/url.php',
'users' => __DIR__ . '/fields/users.php',
'writer' => __DIR__ . '/fields/writer.php'
];

View file

@ -5,9 +5,10 @@ use Kirby\Toolkit\A;
return [
'mixins' => [
'picker',
'filepicker',
'layout',
'min',
'picker',
'upload'
],
'props' => [
@ -27,20 +28,6 @@ return [
return $default;
},
/**
* Changes the layout of the selected files. Available layouts: `list`, `cards`
*/
'layout' => function (string $layout = 'list') {
return $layout;
},
/**
* Layout size for cards: `tiny`, `small`, `medium`, `large` or `huge`
*/
'size' => function (string $size = 'auto') {
return $size;
},
'value' => function ($value = null) {
return $value;
}
@ -68,11 +55,12 @@ return [
],
'methods' => [
'fileResponse' => function ($file) {
return $file->panelPickerData([
'image' => $this->image,
'info' => $this->info ?? false,
'model' => $this->model(),
'text' => $this->text,
return $file->panel()->pickerData([
'image' => $this->image,
'info' => $this->info ?? false,
'layout' => $this->layout,
'model' => $this->model(),
'text' => $this->text,
]);
},
'toFiles' => function ($value = null) {
@ -101,6 +89,7 @@ return [
return $field->filepicker([
'image' => $field->image(),
'info' => $field->info(),
'layout' => $field->layout(),
'limit' => $field->limit(),
'page' => $this->requestQuery('page'),
'query' => $field->query(),
@ -116,14 +105,18 @@ return [
$field = $this->field();
$uploads = $field->uploads();
// move_uploaded_file() not working with unit test
// @codeCoverageIgnoreStart
return $field->upload($this, $uploads, function ($file, $parent) use ($field) {
return $file->panelPickerData([
'image' => $field->image(),
'info' => $field->info(),
'model' => $field->model(),
'text' => $field->text(),
return $file->panel()->pickerData([
'image' => $field->image(),
'info' => $field->info(),
'layout' => $field->layout(),
'model' => $field->model(),
'text' => $field->text(),
]);
});
// @codeCoverageIgnoreEnd
}
]
];

View file

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

View file

@ -0,0 +1,21 @@
<?php
return [
'props' => [
/**
* Changes the layout of the selected entries.
* Available layouts: `list`, `cardlets`, `cards`
*/
'layout' => function (string $layout = 'list') {
$layouts = ['list', 'cardlets', 'cards'];
return in_array($layout, $layouts) ? $layout : 'list';
},
/**
* Layout size for cards: `tiny`, `small`, `medium`, `large` or `huge`
*/
'size' => function (string $size = 'auto') {
return $size;
},
]
];

View file

@ -27,6 +27,7 @@ return [
if ($template) {
$file = new File([
'filename' => 'tmp',
'parent' => $this->model(),
'template' => $template
]);

View file

@ -4,7 +4,12 @@ use Kirby\Data\Data;
use Kirby\Toolkit\A;
return [
'mixins' => ['min', 'pagepicker', 'picker'],
'mixins' => [
'layout',
'min',
'pagepicker',
'picker',
],
'props' => [
/**
* Unset inherited props
@ -22,13 +27,6 @@ return [
return $this->toPages($default);
},
/**
* Changes the layout of the selected files. Available layouts: `list`, `cards`
*/
'layout' => function (string $layout = 'list') {
return $layout;
},
/**
* Optional query to select a specific set of pages
*/
@ -36,13 +34,6 @@ return [
return $query;
},
/**
* Layout size for cards: `tiny`, `small`, `medium`, `large` or `huge`
*/
'size' => function (string $size = 'auto') {
return $size;
},
/**
* Optionally include subpages of pages
*/
@ -62,10 +53,11 @@ return [
],
'methods' => [
'pageResponse' => function ($page) {
return $page->panelPickerData([
'image' => $this->image,
'info' => $this->info,
'text' => $this->text,
return $page->panel()->pickerData([
'image' => $this->image,
'info' => $this->info,
'layout' => $this->layout,
'text' => $this->text,
]);
},
'toPages' => function ($value = null) {
@ -95,6 +87,7 @@ return [
return $field->pagepicker([
'image' => $field->image(),
'info' => $field->info(),
'layout' => $field->layout(),
'limit' => $field->limit(),
'page' => $this->requestQuery('page'),
'parent' => $this->requestQuery('parent'),

View file

@ -0,0 +1,55 @@
<?php
return [
'extends' => 'text',
'props' => [
/**
* Unset inherited props
*/
'converter' => null,
'counter' => null,
'spellcheck' => null,
/**
* Set of characters allowed in the slug
*/
'allow' => function (string $allow = '') {
return $allow;
},
/**
* Changes the link icon
*/
'icon' => function (string $icon = 'url') {
return $icon;
},
/**
* Set prefix for the help text
*/
'path' => function (string $path = null) {
return $path;
},
/**
* Name of another field that should be used to
* automatically update this field's value
*/
'sync' => function (string $sync = null) {
return $sync;
},
/**
* Set to object with keys `field` and `text` to add
* button to generate from another field
*/
'wizard' => function ($wizard = false) {
return $wizard;
}
],
'validations' => [
'minlength',
'maxlength'
],
];

View file

@ -1,7 +1,7 @@
<?php
use Kirby\Cms\Form;
use Kirby\Data\Data;
use Kirby\Form\Form;
use Kirby\Toolkit\I18n;
return [

View file

@ -109,7 +109,7 @@ return [
return [
'filename' => $file->filename(),
'dragText' => $file->dragText('auto', $absolute),
'dragText' => $file->panel()->dragText('auto', $absolute),
];
});
}

View file

@ -1,6 +1,7 @@
<?php
use Kirby\Exception\InvalidArgumentException;
use Kirby\Toolkit\A;
use Kirby\Toolkit\I18n;
return [
@ -20,19 +21,25 @@ return [
* Sets the text next to the toggle. The text can be a string or an array of two options. The first one is the negative text and the second one the positive. The text will automatically switch when the toggle is triggered.
*/
'text' => function ($value = null) {
$model = $this->model();
if (is_array($value) === true) {
if (A::isAssociative($value) === true) {
return I18n::translate($value, $value);
return $model->toSafeString(I18n::translate($value, $value));
}
foreach ($value as $key => $val) {
$value[$key] = I18n::translate($val, $val);
$value[$key] = $model->toSafeString(I18n::translate($val, $val));
}
return $value;
}
return I18n::translate($value, $value);
if (empty($value) === false) {
return $model->toSafeString(I18n::translate($value, $value));
}
return $value;
},
],
'computed' => [

View file

@ -4,7 +4,12 @@ use Kirby\Data\Data;
use Kirby\Toolkit\A;
return [
'mixins' => ['min', 'picker', 'userpicker'],
'mixins' => [
'layout',
'min',
'picker',
'userpicker'
],
'props' => [
/**
* Unset inherited props
@ -44,10 +49,11 @@ return [
],
'methods' => [
'userResponse' => function ($user) {
return $user->panelPickerData([
'info' => $this->info,
'image' => $this->image,
'text' => $this->text,
return $user->panel()->pickerData([
'info' => $this->info,
'image' => $this->image,
'layout' => $this->layout,
'text' => $this->text,
]);
},
'toUsers' => function ($value = null) {
@ -77,6 +83,7 @@ return [
return $field->userpicker([
'image' => $field->image(),
'info' => $field->info(),
'layout' => $field->layout(),
'limit' => $field->limit(),
'page' => $this->requestQuery('page'),
'query' => $field->query(),

View file

@ -1,5 +1,7 @@
<?php
use Kirby\Sane\Sane;
return [
'props' => [
/**
@ -11,14 +13,14 @@ return [
return $inline;
},
/**
* Sets the allowed HTML formats. Available formats: `bold`, `italic`, `underline`, `strike`, `code`, `link`. Activate them all by passing `true`. Deactivate them all by passing `false`
* Sets the allowed HTML formats. Available formats: `bold`, `italic`, `underline`, `strike`, `code`, `link`, `email`. Activate them all by passing `true`. Deactivate them all by passing `false`
* @param array|bool $marks
*/
'marks' => function ($marks = true) {
return $marks;
},
/**
* Sets the allowed nodes. Available nodes: `bulletList`, `orderedList`, `heading`, `horizontalRule`, `listItem`. Activate/deactivate them all by passing `true`/`false`. Default nodes are `heading`, `bulletList`, `orderedList`.
* Sets the allowed nodes. Available nodes: `paragraph`, `heading`, `bulletList`, `orderedList`. Activate/deactivate them all by passing `true`/`false`. Default nodes are `paragraph`, `heading`, `bulletList`, `orderedList`.
* @param array|bool|null $nodes
*/
'nodes' => function ($nodes = null) {
@ -27,7 +29,7 @@ return [
],
'computed' => [
'value' => function () {
return trim($this->value);
return Sane::sanitize(trim($this->value), 'html');
}
],
];

View file

@ -1,13 +1,14 @@
<?php
use Kirby\Cms\App;
use Kirby\Cms\Asset;
use Kirby\Cms\Html;
use Kirby\Cms\Response;
use Kirby\Cms\Url;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Filesystem\Asset;
use Kirby\Filesystem\F;
use Kirby\Http\Router;
use Kirby\Toolkit\Escape;
use Kirby\Toolkit\F;
use Kirby\Toolkit\I18n;
use Kirby\Toolkit\Str;
use Kirby\Toolkit\V;
@ -16,7 +17,7 @@ use Kirby\Toolkit\V;
* Helper to create an asset object
*
* @param string $path
* @return \Kirby\Cms\Asset
* @return \Kirby\Filesystem\Asset
*/
function asset(string $path)
{
@ -26,12 +27,12 @@ function asset(string $path)
/**
* Generates a list of HTML attributes
*
* @param array $attr A list of attributes as key/value array
* @param string $before An optional string that will be prepended if the result is not empty
* @param string $after An optional string that will be appended if the result is not empty
* @return string
* @param array|null $attr A list of attributes as key/value array
* @param string|null $before An optional string that will be prepended if the result is not empty
* @param string|null $after An optional string that will be appended if the result is not empty
* @return string|null
*/
function attr(array $attr = null, $before = null, $after = null)
function attr(?array $attr = null, ?string $before = null, ?string $after = null): ?string
{
if ($attrs = Html::attr($attr)) {
return $before . $attrs . $after;
@ -54,28 +55,33 @@ function collection(string $name)
/**
* Checks / returns a CSRF token
*
* @param string $check Pass a token here to compare it to the one in the session
* @param string|null $check Pass a token here to compare it to the one in the session
* @return string|bool Either the token or a boolean check result
*/
function csrf(string $check = null)
function csrf(?string $check = null)
{
$session = App::instance()->session();
// check explicitly if there have been no arguments at all;
// no arguments, generate/return a token
// (check explicitly if there have been no arguments at all;
// checking for null introduces a security issue because null could come
// from user input or bugs in the calling code!
// from user input or bugs in the calling code!)
if (func_num_args() === 0) {
// no arguments, generate/return a token
$token = $session->get('kirby.csrf');
if (is_string($token) !== true) {
$token = bin2hex(random_bytes(32));
$session->set('kirby.csrf', $token);
}
return $token;
} elseif (is_string($check) === true && is_string($session->get('kirby.csrf')) === true) {
// argument has been passed, check the token
}
// argument has been passed, check the token
if (
is_string($check) === true &&
is_string($session->get('kirby.csrf')) === true
) {
return hash_equals($session->get('kirby.csrf'), $check) === true;
}
@ -174,7 +180,7 @@ if (function_exists('e') === false) {
* @param string $context Location of output (`html`, `attr`, `js`, `css`, `url` or `xml`)
* @return string Escaped data
*/
function esc($string, $context = 'html')
function esc(string $string, string $context = 'html'): string
{
if (method_exists('Kirby\Toolkit\Escape', $context) === true) {
return Escape::$context($string);
@ -200,10 +206,10 @@ function get($key = null, $default = null)
* Embeds a Github Gist
*
* @param string $url
* @param string $file
* @param string|null $file
* @return string
*/
function gist(string $url, string $file = null): string
function gist(string $url, ?string $file = null): string
{
return kirbytag([
'gist' => $url,
@ -255,10 +261,10 @@ function html(?string $string, bool $keepTags = false)
* Example:
* <?= image('some/page/myimage.jpg') ?>
*
* @param string $path
* @param string|null $path
* @return \Kirby\Cms\File|null
*/
function image(string $path = null)
function image(?string $path = null)
{
if ($path === null) {
return page()->image();
@ -296,9 +302,9 @@ function image(string $path = null)
* @param array $data
* @param array $rules
* @param array $messages
* @return false|array
* @return array
*/
function invalid(array $data = [], array $rules = [], array $messages = [])
function invalid(array $data = [], array $rules = [], array $messages = []): array
{
$errors = [];
@ -407,12 +413,12 @@ function kirby()
* Makes it possible to use any defined Kirbytag as standalone function
*
* @param string|array $type
* @param string $value
* @param string|null $value
* @param array $attr
* @param array $data
* @return string
*/
function kirbytag($type, string $value = null, array $attr = [], array $data = []): string
function kirbytag($type, ?string $value = null, array $attr = [], array $data = []): string
{
if (is_array($type) === true) {
$kirbytag = $type;
@ -434,11 +440,11 @@ function kirbytag($type, string $value = null, array $attr = [], array $data = [
* Parses KirbyTags in the given string. Shortcut
* for `$kirby->kirbytags($text, $data)`
*
* @param string $text
* @param string|null $text
* @param array $data
* @return string
*/
function kirbytags(string $text = null, array $data = []): string
function kirbytags(?string $text = null, array $data = []): string
{
return App::instance()->kirbytags($text, $data);
}
@ -447,11 +453,11 @@ function kirbytags(string $text = null, array $data = []): string
* Parses KirbyTags and Markdown in the
* given string. Shortcut for `$kirby->kirbytext()`
*
* @param string $text
* @param string|null $text
* @param array $data
* @return string
*/
function kirbytext(string $text = null, array $data = []): string
function kirbytext(?string $text = null, array $data = []): string
{
return App::instance()->kirbytext($text, $data);
}
@ -461,11 +467,11 @@ function kirbytext(string $text = null, array $data = []): string
* given string.
* @since 3.1.0
*
* @param string $text
* @param string|null $text
* @param array $data
* @return string
*/
function kirbytextinline(string $text = null, array $data = []): string
function kirbytextinline(?string $text = null, array $data = []): string
{
return App::instance()->kirbytext($text, $data, true);
}
@ -473,11 +479,11 @@ function kirbytextinline(string $text = null, array $data = []): string
/**
* Shortcut for `kirbytext()` helper
*
* @param string $text
* @param string|null $text
* @param array $data
* @return string
*/
function kt(string $text = null, array $data = []): string
function kt(?string $text = null, array $data = []): string
{
return kirbytext($text, $data);
}
@ -486,11 +492,11 @@ function kt(string $text = null, array $data = []): string
* Shortcut for `kirbytextinline()` helper
* @since 3.1.0
*
* @param string $text
* @param string|null $text
* @param array $data
* @return string
*/
function kti(string $text = null, array $data = []): string
function kti(?string $text = null, array $data = []): string
{
return kirbytextinline($text, $data);
}
@ -499,10 +505,10 @@ function kti(string $text = null, array $data = []): string
* A super simple class autoloader
*
* @param array $classmap
* @param string $base
* @param string|null $base
* @return void
*/
function load(array $classmap, string $base = null)
function load(array $classmap, ?string $base = null)
{
// convert all classnames to lowercase
$classmap = array_change_key_case($classmap);
@ -526,10 +532,10 @@ function load(array $classmap, string $base = null)
* Parses markdown in the given string. Shortcut for
* `$kirby->markdown($text)`
*
* @param string $text
* @param string|null $text
* @return string
*/
function markdown(string $text = null): string
function markdown(?string $text = null): string
{
return App::instance()->markdown($text);
}
@ -551,7 +557,8 @@ function option(string $key, $default = null)
* id or the current page when no id is specified
*
* @param string|array ...$id
* @return \Kirby\Cms\Page|null
* @return \Kirby\Cms\Page|\Kirby\Cms\Pages|null
* @todo reduce to one parameter in 3.7.0 (also change return and return type)
*/
function page(...$id)
{
@ -559,6 +566,12 @@ function page(...$id)
return App::instance()->site()->page();
}
if (count($id) > 1) {
// @codeCoverageIgnoreStart
deprecated('Passing multiple parameters to the `page()` helper has been deprecated. Please use the `pages()` helper instead.');
// @codeCoverageIgnoreEnd
}
return App::instance()->site()->find(...$id);
}
@ -566,10 +579,17 @@ function page(...$id)
* Helper to build page collections
*
* @param string|array ...$id
* @return \Kirby\Cms\Pages
* @return \Kirby\Cms\Page|\Kirby\Cms\Pages|null
* @todo return only Pages|null in 3.7.0, wrap in Pages for single passed id
*/
function pages(...$id)
{
if (count($id) === 1) {
// @codeCoverageIgnoreStart
deprecated('Passing a single id to the `pages()` helper will return a Kirby\Cms\Pages collection with a single element instead of the single Kirby\Cms\Page object itself - starting in 3.7.0.');
// @codeCoverageIgnoreEnd
}
return App::instance()->site()->find(...$id);
}
@ -577,10 +597,10 @@ function pages(...$id)
* Returns a single param from the URL
*
* @param string $key
* @param string $fallback
* @param string|null $fallback
* @return string|null
*/
function param(string $key, string $fallback = null): ?string
function param(string $key, ?string $fallback = null): ?string
{
return App::instance()->request()->url()->params()->$key ?? $fallback;
}
@ -608,6 +628,22 @@ function r($condition, $value, $alternative = null)
return $condition ? $value : $alternative;
}
/**
* Creates a micro-router and executes
* the routing action immediately
* @since 3.6.0
*
* @param string|null $path
* @param string $method
* @param array $routes
* @param \Closure|null $callback
* @return mixed
*/
function router(?string $path = null, string $method = 'GET', array $routes = [], ?Closure $callback = null)
{
return (new Router($routes))->call($path, $method, $callback);
}
/**
* Returns the current site object
*
@ -623,6 +659,7 @@ function site()
*
* @param mixed $value
* @return int
* @throws \Kirby\Exception\InvalidArgumentException
*/
function size($value): int
{
@ -655,10 +692,10 @@ function size($value): int
* Enhances the given string with
* smartypants. Shortcut for `$kirby->smartypants($text)`
*
* @param string $text
* @param string|null $text
* @return string
*/
function smartypants(string $text = null): string
function smartypants(?string $text = null): string
{
return App::instance()->smartypants($text);
}
@ -725,7 +762,7 @@ function svg($file)
*
* @param string|array $key
* @param string|null $fallback
* @return mixed
* @return array|string|null
*/
function t($key, string $fallback = null)
{
@ -735,11 +772,11 @@ function t($key, string $fallback = null)
/**
* Translates a count
*
* @param string|array $key
* @param string $key
* @param int $count
* @return mixed
*/
function tc($key, int $count)
function tc(string $key, int $count)
{
return I18n::translateCount($key, $count);
}
@ -748,11 +785,11 @@ function tc($key, int $count)
* Rounds the minutes of the given date
* by the defined step
*
* @param string $date
* @param int $step array of `unit` and `size` to round to nearest
* @param string|null $date
* @param int|array|null $step array of `unit` and `size` to round to nearest
* @return int|null
*/
function timestamp(string $date = null, $step = null): ?int
function timestamp(?string $date = null, $step = null): ?int
{
if (V::date($date) === false) {
return null;
@ -807,7 +844,7 @@ function timestamp(string $date = null, $step = null): ?int
);
// on error, convert `false` into `null`
return $timestamp ? $timestamp : null;
return $timestamp ?? null;
}
/**
@ -815,12 +852,12 @@ function timestamp(string $date = null, $step = null): ?int
* placeholders in the text
*
* @param string $key
* @param string $fallback
* @param array $replace
* @param string $locale
* @param string|array|null $fallback
* @param array|null $replace
* @param string|null $locale
* @return string
*/
function tt(string $key, $fallback = null, array $replace = null, string $locale = null)
function tt(string $key, $fallback = null, ?array $replace = null, ?string $locale = null)
{
return I18n::template($key, $fallback, $replace, $locale);
}
@ -829,12 +866,12 @@ function tt(string $key, $fallback = null, array $replace = null, string $locale
* Builds a Twitter link
*
* @param string $username
* @param string $text
* @param string $title
* @param string $class
* @param string|null $text
* @param string|null $title
* @param string|null $class
* @return string
*/
function twitter(string $username, string $text = null, string $title = null, string $class = null): string
function twitter(string $username, ?string $text = null, ?string $title = null, ?string $class = null): string
{
return kirbytag([
'twitter' => $username,
@ -847,11 +884,11 @@ function twitter(string $username, string $text = null, string $title = null, st
/**
* Shortcut for url()
*
* @param string $path
* @param string|null $path
* @param array|string|null $options
* @return string
*/
function u(string $path = null, $options = null): string
function u(?string $path = null, $options = null): string
{
return Url::to($path, $options);
}
@ -859,11 +896,11 @@ function u(string $path = null, $options = null): string
/**
* Builds an absolute URL for a given path
*
* @param string $path
* @param string|null $path
* @param array|string|null $options
* @return string
*/
function url(string $path = null, $options = null): string
function url(?string $path = null, $options = null): string
{
return Url::to($path, $options);
}
@ -906,9 +943,9 @@ function uuid(): string
* @param string $url
* @param array $options
* @param array $attr
* @return string
* @return string|null
*/
function video(string $url, array $options = [], array $attr = []): string
function video(string $url, array $options = [], array $attr = []): ?string
{
return Html::video($url, $options, $attr);
}
@ -919,9 +956,9 @@ function video(string $url, array $options = [], array $attr = []): string
* @param string $url
* @param array $options
* @param array $attr
* @return string
* @return string|null
*/
function vimeo(string $url, array $options = [], array $attr = []): string
function vimeo(string $url, array $options = [], array $attr = []): ?string
{
return Html::vimeo($url, $options, $attr);
}
@ -945,9 +982,9 @@ function widont(string $string = null): string
* @param string $url
* @param array $options
* @param array $attr
* @return string
* @return string|null
*/
function youtube(string $url, array $options = [], array $attr = []): string
function youtube(string $url, array $options = [], array $attr = []): ?string
{
return Html::youtube($url, $options, $attr);
}

View file

@ -366,7 +366,7 @@ return function (App $app) {
* @return \Kirby\Cms\Field
*/
'html' => function (Field $field) {
$field->value = htmlentities($field->value, ENT_COMPAT, 'utf-8');
$field->value = Html::encode($field->value);
return $field;
},
@ -498,13 +498,14 @@ return function (App $app) {
*/
'replace' => function (Field $field, array $data = [], string $fallback = '') use ($app) {
if ($parent = $field->parent()) {
$field->value = $field->parent()->toString($field->value, $data, $fallback);
// never pass `null` as the $template to avoid the fallback to the model ID
$field->value = $parent->toString($field->value ?? '', $data, $fallback);
} else {
$field->value = Str::template($field->value, array_replace([
'kirby' => $app,
'site' => $app->site(),
'page' => $app->page()
], $data), $fallback);
], $data), ['fallback' => $fallback]);
}
return $field;

View file

@ -1,93 +0,0 @@
<?php
return [
// kirby
'kirby' => function (array $roots) {
return realpath(__DIR__ . '/../');
},
// i18n
'i18n' => function (array $roots) {
return $roots['kirby'] . '/i18n';
},
'i18n:translations' => function (array $roots) {
return $roots['i18n'] . '/translations';
},
'i18n:rules' => function (array $roots) {
return $roots['i18n'] . '/rules';
},
// index
'index' => function (array $roots) {
return realpath(__DIR__ . '/../../');
},
// assets
'assets' => function (array $roots) {
return $roots['index'] . '/assets';
},
// content
'content' => function (array $roots) {
return $roots['index'] . '/content';
},
// media
'media' => function (array $roots) {
return $roots['index'] . '/media';
},
// panel
'panel' => function (array $roots) {
return $roots['kirby'] . '/panel';
},
// site
'site' => function (array $roots) {
return $roots['index'] . '/site';
},
'accounts' => function (array $roots) {
return $roots['site'] . '/accounts';
},
'blueprints' => function (array $roots) {
return $roots['site'] . '/blueprints';
},
'cache' => function (array $roots) {
return $roots['site'] . '/cache';
},
'collections' => function (array $roots) {
return $roots['site'] . '/collections';
},
'config' => function (array $roots) {
return $roots['site'] . '/config';
},
'controllers' => function (array $roots) {
return $roots['site'] . '/controllers';
},
'languages' => function (array $roots) {
return $roots['site'] . '/languages';
},
'logs' => function (array $roots) {
return $roots['site'] . '/logs';
},
'models' => function (array $roots) {
return $roots['site'] . '/models';
},
'plugins' => function (array $roots) {
return $roots['site'] . '/plugins';
},
'sessions' => function (array $roots) {
return $roots['site'] . '/sessions';
},
'snippets' => function (array $roots) {
return $roots['site'] . '/snippets';
},
'templates' => function (array $roots) {
return $roots['site'] . '/templates';
},
// blueprints
'roles' => function (array $roots) {
return $roots['blueprints'] . '/users';
},
];

View file

@ -2,9 +2,9 @@
use Kirby\Cms\LanguageRoutes;
use Kirby\Cms\Media;
use Kirby\Cms\Panel;
use Kirby\Cms\PanelPlugins;
use Kirby\Cms\PluginAssets;
use Kirby\Panel\Panel;
use Kirby\Panel\Plugins;
use Kirby\Toolkit\Str;
return function ($kirby) {
@ -50,7 +50,7 @@ return function ($kirby) {
'pattern' => $media . '/plugins/index.(css|js)',
'env' => 'media',
'action' => function (string $type) use ($kirby) {
$plugins = new PanelPlugins();
$plugins = new Plugins();
return $kirby
->response()
@ -65,17 +65,6 @@ return function ($kirby) {
return PluginAssets::resolve($provider . '/' . $pluginName, $filename . '.' . $extension);
}
],
[
'pattern' => $panel . '/(:all?)',
'env' => 'panel',
'action' => function () use ($kirby) {
if ($kirby->option('panel') === false) {
return null;
}
return Panel::render($kirby);
}
],
[
'pattern' => $media . '/pages/(:all)/(:any)/(:any)',
'env' => 'media',
@ -103,7 +92,15 @@ return function ($kirby) {
'action' => function ($path, $hash, $filename) {
return Media::thumb($path, $hash, $filename);
}
]
],
[
'pattern' => $panel . '/(:all?)',
'method' => 'ALL',
'env' => 'panel',
'action' => function ($path = null) {
return Panel::router($path);
}
],
];
// Multi-language setup

View file

@ -1,6 +1,6 @@
<?php
use Kirby\Cms\Form;
use Kirby\Form\Form;
return [
'props' => [

View file

@ -1,7 +1,6 @@
<?php
use Kirby\Cms\File;
use Kirby\Toolkit\Escape;
use Kirby\Toolkit\I18n;
return [
@ -29,7 +28,7 @@ return [
return $image ?? [];
},
/**
* Optional info text setup. Info text is shown on the right (lists) or below (cards) the filename.
* Optional info text setup. Info text is shown on the right (lists, cardlets) or below (cards) the filename.
*/
'info' => function ($info = null) {
return I18n::translate($info, $info);
@ -70,6 +69,7 @@ return [
if ($this->template) {
$file = new File([
'filename' => 'tmp',
'parent' => $this->model(),
'template' => $this->template
]);
@ -90,7 +90,7 @@ return [
if ($this->sortBy) {
$files = $files->sort(...$files::sortArgs($this->sortBy));
} else {
$files = $files->sort('sort', 'asc', 'filename', 'asc');
$files = $files->sorted();
}
// flip
@ -115,28 +115,21 @@ return [
$dragTextAbsolute = $this->model->is($this->parent) === false;
foreach ($this->files as $file) {
$image = $file->panelImage($this->image);
// escape the default text
// TODO: no longer needed in 3.6
$text = $file->toString($this->text);
if ($this->text === '{{ file.filename }}') {
$text = Escape::html($text);
}
$panel = $file->panel();
$data[] = [
'dragText' => $file->dragText('auto', $dragTextAbsolute),
'dragText' => $panel->dragText('auto', $dragTextAbsolute),
'extension' => $file->extension(),
'filename' => $file->filename(),
'id' => $file->id(),
'icon' => $file->panelIcon($image),
'image' => $image,
'info' => $file->toString($this->info ?? false),
'link' => $file->panelUrl(true),
'mime' => $file->mime(),
'parent' => $file->parent()->panelPath(),
'text' => $text,
'url' => $file->url(),
'filename' => $file->filename(),
'id' => $file->id(),
'image' => $panel->image($this->image, $this->layout),
'info' => $file->toSafeString($this->info ?? false),
'link' => $panel->url(true),
'mime' => $file->mime(),
'parent' => $file->parent()->panel()->path(),
'template' => $file->template(),
'text' => $file->toSafeString($this->text),
'url' => $file->url(),
];
}
@ -174,8 +167,8 @@ return [
];
},
'link' => function () {
$modelLink = $this->model->panelUrl(true);
$parentLink = $this->parent->panelUrl(true);
$modelLink = $this->model->panel()->url(true);
$parentLink = $this->parent->panel()->url(true);
if ($modelLink !== $parentLink) {
return $parentLink;
@ -222,6 +215,7 @@ return [
'max' => $max,
'api' => $this->parent->apiUrl(true) . '/files',
'attributes' => array_filter([
'sort' => $this->sortable === true ? $total + 1 : null,
'template' => $template
])
];

View file

@ -17,7 +17,7 @@ return [
'computed' => [
'text' => function () {
if ($this->text) {
$text = $this->model()->toString($this->text);
$text = $this->model()->toSafeString($this->text);
$text = $this->kirby()->kirbytext($text);
return $text;
}
@ -25,11 +25,9 @@ return [
],
'toArray' => function () {
return [
'options' => [
'headline' => $this->headline,
'text' => $this->text,
'theme' => $this->theme
]
'headline' => $this->headline,
'text' => $this->text,
'theme' => $this->theme
];
}
];

View file

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

View file

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

View file

@ -3,10 +3,12 @@
return [
'props' => [
/**
* Section layout. Available layout methods: `list`, `cards`.
* Section layout.
* Available layout methods: `list`, `cardlets`, `cards`.
*/
'layout' => function (string $layout = 'list') {
return $layout === 'cards' ? 'cards' : 'list';
$layouts = ['list', 'cardlets', 'cards'];
return in_array($layout, $layouts) ? $layout : 'list';
}
]
];

View file

@ -1,8 +1,8 @@
<?php
use Kirby\Cms\Blueprint;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Toolkit\A;
use Kirby\Toolkit\Escape;
use Kirby\Toolkit\I18n;
return [
@ -89,7 +89,13 @@ return [
],
'computed' => [
'parent' => function () {
return $this->parentModel();
$parent = $this->parentModel();
if (is_a($parent, 'Kirby\Cms\Site') === false && is_a($parent, 'Kirby\Cms\Page') === false) {
throw new InvalidArgumentException('The parent is invalid. You must choose the site or a page as parent.');
}
return $parent;
},
'pages' => function () {
switch ($this->status) {
@ -151,32 +157,25 @@ return [
$data = [];
foreach ($this->pages as $item) {
$panel = $item->panel();
$permissions = $item->permissions();
$image = $item->panelImage($this->image);
// escape the default text
// TODO: no longer needed in 3.6
$text = $item->toString($this->text);
if ($this->text === '{{ page.title }}') {
$text = Escape::html($text);
}
$data[] = [
'dragText' => $panel->dragText(),
'id' => $item->id(),
'dragText' => $item->dragText(),
'text' => $text,
'info' => $item->toString($this->info ?? false),
'image' => $panel->image($this->image, $this->layout),
'info' => $item->toSafeString($this->info ?? false),
'link' => $panel->url(true),
'parent' => $item->parentId(),
'icon' => $item->panelIcon($image),
'image' => $image,
'link' => $item->panelUrl(true),
'status' => $item->status(),
'permissions' => [
'sort' => $permissions->can('sort'),
'changeSlug' => $permissions->can('changeSlug'),
'changeStatus' => $permissions->can('changeStatus'),
'changeTitle' => $permissions->can('changeTitle')
]
'changeTitle' => $permissions->can('changeTitle'),
],
'status' => $item->status(),
'template' => $item->intendedTemplate()->name(),
'text' => $item->toSafeString($this->text),
];
}
@ -226,8 +225,8 @@ return [
return true;
},
'link' => function () {
$modelLink = $this->model->panelUrl(true);
$parentLink = $this->parent->panelUrl(true);
$modelLink = $this->model->panel()->url(true);
$parentLink = $this->parent->panel()->url(true);
if ($modelLink !== $parentLink) {
return $parentLink;

View file

@ -1,17 +0,0 @@
<?php
$blocksRoot = __DIR__ . '/blocks';
return [
// blocks
'blocks/code' => $blocksRoot . '/code/code.php',
'blocks/gallery' => $blocksRoot . '/gallery/gallery.php',
'blocks/heading' => $blocksRoot . '/heading/heading.php',
'blocks/image' => $blocksRoot . '/image/image.php',
'blocks/list' => $blocksRoot . '/list/list.php',
'blocks/markdown' => $blocksRoot . '/markdown/markdown.php',
'blocks/quote' => $blocksRoot . '/quote/quote.php',
'blocks/table' => $blocksRoot . '/table/table.php',
'blocks/text' => $blocksRoot . '/text/text.php',
'blocks/video' => $blocksRoot . '/video/video.php',
];

View file

@ -2,8 +2,6 @@
use Kirby\Cms\Html;
use Kirby\Cms\Url;
use Kirby\Text\KirbyTag;
use Kirby\Toolkit\F;
use Kirby\Toolkit\Str;
/**
@ -252,29 +250,6 @@ return [
'width',
],
'html' => function ($tag) {
// all available video tag attributes
$availableAttrs = KirbyTag::$types[$tag->type]['attr'];
// global video tag options
$attrs = $tag->kirby()->option('kirbytext.video', []);
$options = $attrs['options'] ?? [];
// removes options from attributes
if (isset($attrs['options']) === true) {
unset($attrs['options']);
}
// injects default values from global options
// applies only defined attributes to safely update tag props
foreach ($attrs as $key => $value) {
if (
in_array($key, $availableAttrs) === true &&
(isset($tag->{$key}) === false || $tag->{$key} === null)
) {
$tag->{$key} = $value;
}
}
// checks and gets if poster is local file
if (
empty($tag->poster) === false &&
@ -286,26 +261,41 @@ return [
}
}
// converts tag attributes to supported formats (listed below) to output correct html
// booleans: autoplay, controls, loop, muted
// strings : height, poster, preload, width
// for ex : `autoplay` will not work if `false` is a `string` instead of a `boolean`
$attrs = [
'autoplay' => $autoplay = Str::toType($tag->autoplay, 'bool'),
'controls' => Str::toType($tag->controls ?? true, 'bool'),
'height' => $tag->height,
'loop' => Str::toType($tag->loop, 'bool'),
'muted' => Str::toType($tag->muted ?? $autoplay, 'bool'),
'poster' => $tag->poster,
'preload' => $tag->preload,
'width' => $tag->width
];
// handles local and remote video file
if (
// checks video is local or provider(remote)
$isLocalVideo = (
Str::startsWith($tag->value, 'http://') !== true &&
Str::startsWith($tag->value, 'https://') !== true
) {
);
$isProviderVideo = (
$isLocalVideo === false &&
(
Str::contains($tag->value, 'youtu', true) === true ||
Str::contains($tag->value, 'vimeo', true) === true
)
);
// default attributes for local and remote videos
$attrs = [
'height' => $tag->height,
'width' => $tag->width
];
// don't use attributes that iframe doesn't support
if ($isProviderVideo === false) {
// converts tag attributes to supported formats (listed below) to output correct html
// booleans: autoplay, controls, loop, muted
// strings : poster, preload
// for ex : `autoplay` will not work if `false` is a `string` instead of a `boolean`
$attrs['autoplay'] = $autoplay = Str::toType($tag->autoplay, 'bool');
$attrs['controls'] = Str::toType($tag->controls ?? true, 'bool');
$attrs['loop'] = Str::toType($tag->loop, 'bool');
$attrs['muted'] = Str::toType($tag->muted ?? $autoplay, 'bool');
$attrs['poster'] = $tag->poster;
$attrs['preload'] = $tag->preload;
}
// handles local and remote video file
if ($isLocalVideo === true) {
// handles local video file
if ($tag->file = $tag->file($tag->value)) {
$source = Html::tag('source', null, [
@ -315,32 +305,11 @@ return [
$video = Html::tag('video', [$source], $attrs);
}
} else {
// firstly handles supported video providers as youtube, vimeo, etc
try {
$video = Html::video(
$tag->value,
$options,
// providers only support width and height attributes
[
'height' => $tag->height,
'width' => $tag->width
]
);
} catch (Exception $e) {
// if not one of the supported video providers
// it checks if there is a valid remote video file
$extension = F::extension($tag->value);
$type = F::extensionToType($extension);
$mime = F::extensionToMime($extension);
if ($type === 'video') {
$source = Html::tag('source', null, [
'src' => $tag->value,
'type' => $mime
]);
$video = Html::tag('video', [$source], $attrs);
}
}
$video = Html::video(
$tag->value,
$tag->kirby()->option('kirbytext.video.options', []),
$attrs
);
}
return Html::figure([$video ?? ''], $tag->caption, [

View file

@ -1,8 +0,0 @@
<?php
// @codeCoverageIgnoreStart
return [
'emails/auth/login' => __DIR__ . '/templates/emails/auth/login.php',
'emails/auth/password-reset' => __DIR__ . '/templates/emails/auth/password-reset.php'
];
// @codeCoverageIgnoreEnd

View file

@ -1,8 +1,16 @@
<?php
use Kirby\Toolkit\I18n;
/**
* @var \Kirby\Cms\User $user
* @var string $site
* @var string $code
* @var int $timeout
*/
echo I18n::template('login.email.login.body', null, compact('user', 'code', 'timeout'), $user->language());
echo I18n::template(
'login.email.login.body',
null,
compact('user', 'site', 'code', 'timeout'),
$user->language()
);

View file

@ -1,8 +1,16 @@
<?php
use Kirby\Toolkit\I18n;
/**
* @var \Kirby\Cms\User $user
* @var string $site
* @var string $code
* @var int $timeout
*/
echo I18n::template('login.email.password-reset.body', null, compact('user', 'code', 'timeout'), $user->language());
echo I18n::template(
'login.email.password-reset.body',
null,
compact('user', 'site', 'code', 'timeout'),
$user->language()
);

View file

@ -1,33 +0,0 @@
<?php
use Kirby\Cms\Url;
return [
'index' => function () {
return Url::index();
},
'base' => function (array $urls) {
return rtrim($urls['index'], '/');
},
'current' => function (array $urls) {
$path = trim($this->path(), '/');
if (empty($path) === true) {
return $urls['index'];
} else {
return $urls['base'] . '/' . $path;
}
},
'assets' => function (array $urls) {
return $urls['base'] . '/assets';
},
'api' => function (array $urls) {
return $urls['base'] . '/' . ($this->options['api']['slug'] ?? 'api');
},
'media' => function (array $urls) {
return $urls['base'] . '/media';
},
'panel' => function (array $urls) {
return $urls['base'] . '/' . ($this->options['panel']['slug'] ?? 'panel');
}
];

View file

@ -0,0 +1,22 @@
{
"Æ": "Ae",
"æ": "ae",
"Ö": "O",
"ö": "o",
"Þ": "Th",
"þ": "th",
"Ð": "D",
"ð": "d",
"Á": "A",
"á": "a",
"É": "E",
"é": "e",
"Í": "I",
"í": "i",
"Ó": "O",
"ó": "o",
"Ú": "U",
"ú": "u",
"Ý": "Y",
"ý": "y"
}

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Change your name",
"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",
"author": "Author",
"avatar": "Профилна снимка",
"back": "Назад",
"cancel": "\u041e\u0442\u043a\u0430\u0436\u0438",
@ -9,6 +14,7 @@
"collapse": "Collapse",
"collapse.all": "Collapse All",
"copy": "Копирай",
"copy.all": "Copy all",
"create": "Създай",
"date": "Дата",
@ -23,24 +29,28 @@
"days.tue": "\u0412\u0442",
"days.wed": "\u0421\u0440",
"debugging": "Debugging",
"delete": "\u0418\u0437\u0442\u0440\u0438\u0439",
"delete.all": "Delete all",
"dimensions": "Размери",
"disabled": "Disabled",
"discard": "\u041e\u0442\u043c\u0435\u043d\u0438",
"download": "Download",
"duplicate": "Duplicate",
"edit": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439",
"expand": "Expand",
"expand.all": "Expand All",
"dialog.files.empty": "No files to select",
"dialog.pages.empty": "No pages to select",
"dialog.users.empty": "No users to select",
"dimensions": "Размери",
"disabled": "Disabled",
"discard": "\u041e\u0442\u043c\u0435\u043d\u0438",
"download": "Download",
"duplicate": "Duplicate",
"edit": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439",
"email": "Email",
"email.placeholder": "mail@example.com",
"environment": "Environment",
"error.access.code": "Invalid code",
"error.access.login": "Invalid login",
"error.access.panel": "Нямате права за достъп до панела",
@ -92,6 +102,7 @@
"error.language.code": "Please enter a valid code for the language",
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.language.notFound": "The language could not be found",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
@ -100,6 +111,8 @@
"error.license.email": "Моля въведете валиден email адрес",
"error.license.verification": "The license could not be verified",
"error.offline": "The Panel is currently offline",
"error.page.changeSlug.permission": "Не можете да смените URL на \"{slug}\"",
"error.page.changeStatus.incomplete": "Страницата съдържа грешки и не може да бъде публикувана",
"error.page.changeStatus.permission": "Статусът на страницата не може да бъде променен",
@ -165,6 +178,7 @@
"error.user.password.undefined": "Потребителят няма парола",
"error.user.password.wrong": "Wrong password",
"error.user.role.invalid": "Моля въведете валидна роля",
"error.user.undefined": "Потребителят не може да бъде намерен.",
"error.user.update.permission": "Нямате права да обновите този потребител \"{name}\"",
"error.validation.accepted": "Моля потвърдете",
@ -208,6 +222,9 @@
"error.validation.time.between": "Please enter a time between {min} and {max}",
"error.validation.url": "Моля въведете валиден URL",
"expand": "Expand",
"expand.all": "Expand All",
"field.required": "The field is required",
"field.blocks.changeType": "Change type",
"field.blocks.code.name": "Код",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Do you really want to delete the selected blocks?",
"field.blocks.empty": "No blocks yet",
"field.blocks.fieldsets.label": "Please select a block type …",
"field.blocks.fieldsets.paste": "Press <kbd>{{ shortcut }}</kbd> to paste/import blocks from your clipboard",
"field.blocks.gallery.name": "Gallery",
"field.blocks.gallery.images.empty": "No images yet",
"field.blocks.gallery.images.label": "Images",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Select an image",
"field.blocks.image.ratio": "Ratio",
"field.blocks.image.url": "Image URL",
"field.blocks.line.name": "Line",
"field.blocks.list.name": "List",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Text",
@ -263,7 +282,7 @@
"field.structure.empty": "Все още няма статии",
"field.users.empty": "Все още не са избрани потребители",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "Сигурни ли сте, че искате да изтриете <br><strong>{filename}</strong>?",
"file.sort": "Change position",
@ -272,6 +291,7 @@
"hide": "Hide",
"hour": "Hour",
"import": "Import",
"insert": "\u0412\u043c\u044a\u043a\u043d\u0438",
"insert.after": "Insert after",
"insert.before": "Insert before",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Password reset code",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "If your email address is registered, the requested code was sent via email.",
"login.email.login.body": "Hi {user.nameOrEmail},\n\nYou recently requested a login code for the Kirby Panel.\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": "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.subject": "Your login code",
"login.email.password-reset.body": "Hi {user.nameOrEmail},\n\nYou recently requested a password reset code for the Kirby Panel.\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": "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.subject": "Your password reset code",
"login.remember": "Keep me logged in",
"login.reset": "Reset password",
@ -385,7 +405,7 @@
"orientation.portrait": "Портрет",
"orientation.square": "Квадрат",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"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.changeStatus": "Промени статус",
@ -417,7 +437,10 @@
"pagination.page": "Страница",
"password": "\u041f\u0430\u0440\u043e\u043b\u0430",
"paste": "Paste",
"paste.after": "Paste after",
"pixel": "Пиксел",
"plugins": "Plugins",
"prev": "Previous",
"preview": "Preview",
"remove": "Премахни",
@ -454,6 +477,8 @@
"template": "Образец",
"today": "Днес",
"server": "Server",
"site.blueprint": "The site has no blueprint yet. You can define the setup in <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Код",
@ -463,11 +488,15 @@
"toolbar.button.heading.1": "Заглавие 1",
"toolbar.button.heading.2": "Заглавие 2",
"toolbar.button.heading.3": "Заглавие 3",
"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.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.paragraph": "Paragraph",
"toolbar.button.strike": "Strike-through",
"toolbar.button.ol": "Подреден списък",
"toolbar.button.underline": "Underline",
@ -497,7 +526,7 @@
"url.placeholder": "https://example.com",
"user": "Потребител",
"user.blueprint": "Можете да дефинирате допълнителни секции и полета на форми за тази потребителска роля в <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "You can define additional sections and form fields for this user role in <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Промени email",
"user.changeLanguage": "Промени език",
"user.changeName": "Преименувай този потребител",
@ -516,9 +545,10 @@
"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.languages": "Езици",
"view.resetPassword": "Reset password",
"view.settings": "Настройки",
"view.site": "Сайт",
"view.system": "System",
"view.users": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438",
"welcome": "Добре дошли",

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Change your name",
"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": "Afegir",
"author": "Author",
"avatar": "Imatge del perfil",
"back": "Tornar",
"cancel": "Cancel\u00b7lar",
@ -9,6 +14,7 @@
"collapse": "Col·lapsar",
"collapse.all": "Col·lapsar tot",
"copy": "Copiar",
"copy.all": "Copy all",
"create": "Crear",
"date": "Data",
@ -23,24 +29,28 @@
"days.tue": "dt.",
"days.wed": "dc.",
"debugging": "Debugging",
"delete": "Eliminar",
"delete.all": "Eliminar tot",
"dimensions": "Dimensions",
"disabled": "Desactivat",
"discard": "Descartar",
"download": "Descarregar",
"duplicate": "Duplicar",
"edit": "Editar",
"expand": "Expandir",
"expand.all": "Expandir tot",
"dialog.files.empty": "No hi ha cap fitxer per seleccionar",
"dialog.pages.empty": "No hi ha cap pàgina per seleccionar",
"dialog.users.empty": "No hi ha cap usuari per seleccionar",
"dimensions": "Dimensions",
"disabled": "Desactivat",
"discard": "Descartar",
"download": "Descarregar",
"duplicate": "Duplicar",
"edit": "Editar",
"email": "Email",
"email.placeholder": "mail@exemple.com",
"environment": "Environment",
"error.access.code": "Codi invàlid",
"error.access.login": "Inici de sessió no vàlid",
"error.access.panel": "No tens permís per accedir al panell",
@ -92,6 +102,7 @@
"error.language.code": "Introdueix un codi vàlid per a lidioma",
"error.language.duplicate": "L'idioma ja existeix",
"error.language.name": "Introdueix un nom vàlid per a l'idioma",
"error.language.notFound": "The language could not be found",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
@ -100,6 +111,8 @@
"error.license.email": "Si us plau, introdueix una adreça de correu electrònic vàlida",
"error.license.verification": "No sha pogut verificar la llicència",
"error.offline": "The Panel is currently offline",
"error.page.changeSlug.permission": "No teniu permís per canviar l'apèndix d'URL per a \"{slug}\"",
"error.page.changeStatus.incomplete": "La pàgina té errors i no es pot publicar",
"error.page.changeStatus.permission": "No es pot canviar l'estat d'aquesta pàgina",
@ -165,6 +178,7 @@
"error.user.password.undefined": "L'usuari no té una contrasenya",
"error.user.password.wrong": "Wrong password",
"error.user.role.invalid": "Si us plau, introdueix un rol vàlid",
"error.user.undefined": "L'usuari no s'ha trobat",
"error.user.update.permission": "No tens permís per actualitzar l'usuari \"{name}\"",
"error.validation.accepted": "Si us plau confirma",
@ -208,6 +222,9 @@
"error.validation.time.between": "Please enter a time between {min} and {max}",
"error.validation.url": "Si us plau, introduïu una URL vàlida",
"expand": "Expandir",
"expand.all": "Expandir tot",
"field.required": "El camp és obligatori",
"field.blocks.changeType": "Change type",
"field.blocks.code.name": "Codi",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Do you really want to delete the selected blocks?",
"field.blocks.empty": "No blocks yet",
"field.blocks.fieldsets.label": "Please select a block type …",
"field.blocks.fieldsets.paste": "Press <kbd>{{ shortcut }}</kbd> to paste/import blocks from your clipboard",
"field.blocks.gallery.name": "Gallery",
"field.blocks.gallery.images.empty": "No images yet",
"field.blocks.gallery.images.label": "Images",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Select an image",
"field.blocks.image.ratio": "Ratio",
"field.blocks.image.url": "Image URL",
"field.blocks.line.name": "Line",
"field.blocks.list.name": "List",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Text",
@ -263,7 +282,7 @@
"field.structure.empty": "Encara no hi ha entrades.",
"field.users.empty": "Encara no s'ha seleccionat cap usuari",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "Esteu segurs d'eliminar <br><strong>{filename}</strong>?",
"file.sort": "Change position",
@ -272,6 +291,7 @@
"hide": "Hide",
"hour": "Hora",
"import": "Import",
"insert": "Insertar",
"insert.after": "Insert after",
"insert.before": "Insert before",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Password reset code",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "If your email address is registered, the requested code was sent via email.",
"login.email.login.body": "Hi {user.nameOrEmail},\n\nYou recently requested a login code for the Kirby Panel.\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": "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.subject": "Your login code",
"login.email.password-reset.body": "Hi {user.nameOrEmail},\n\nYou recently requested a password reset code for the Kirby Panel.\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": "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.subject": "Your password reset code",
"login.remember": "Manten-me connectat",
"login.reset": "Reset password",
@ -385,7 +405,7 @@
"orientation.portrait": "Vertical",
"orientation.square": "Quadrat",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"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.changeStatus": "Canviar l'estat",
@ -417,7 +437,10 @@
"pagination.page": "Pàgina",
"password": "Contrasenya",
"paste": "Paste",
"paste.after": "Paste after",
"pixel": "Pixel",
"plugins": "Plugins",
"prev": "Anterior",
"preview": "Preview",
"remove": "Eliminar",
@ -454,6 +477,8 @@
"template": "Plantilla",
"today": "Avui",
"server": "Server",
"site.blueprint": "The site has no blueprint yet. You can define the setup in <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Codi",
@ -463,11 +488,15 @@
"toolbar.button.heading.1": "Encapçalament 1",
"toolbar.button.heading.2": "Encapçalament 2",
"toolbar.button.heading.3": "Encapçalament 3",
"toolbar.button.heading.4": "Heading 4",
"toolbar.button.heading.5": "Heading 5",
"toolbar.button.heading.6": "Heading 6",
"toolbar.button.italic": "Cursiva",
"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.paragraph": "Paragraph",
"toolbar.button.strike": "Strike-through",
"toolbar.button.ol": "Llista ordenada",
"toolbar.button.underline": "Underline",
@ -497,7 +526,7 @@
"url.placeholder": "https://example.com",
"user": "Usuari",
"user.blueprint": "Podeu definir seccions addicionals i camps de formulari per a aquest rol d'usuari a <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "You can define additional sections and form fields for this user role in <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Canviar e-mail",
"user.changeLanguage": "Canviar idioma",
"user.changeName": "Canviar el nom d'aquest usuari",
@ -516,9 +545,10 @@
"view.account": "La teva compta",
"view.installation": "Instal·lació",
"view.languages": "Idiomes",
"view.resetPassword": "Reset password",
"view.settings": "Configuració",
"view.site": "Lloc web",
"view.system": "System",
"view.users": "Usuaris",
"welcome": "Benvinguda",

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Přejmenovat",
"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",
"author": "Autor",
"avatar": "Profilov\u00fd obr\u00e1zek",
"back": "Zpět",
"cancel": "Zru\u0161it",
@ -9,6 +14,7 @@
"collapse": "Sbalit",
"collapse.all": "Sbalit vše",
"copy": "Kopírovat",
"copy.all": "Kopírovat vše",
"create": "Vytvořit",
"date": "Datum",
@ -23,24 +29,28 @@
"days.tue": "\u00fat",
"days.wed": "st",
"debugging": "Ladění",
"delete": "Smazat",
"delete.all": "Smazat vše",
"dimensions": "Rozměry",
"disabled": "Zakázáno",
"discard": "Zahodit",
"download": "Stáhnout",
"duplicate": "Duplikovat",
"edit": "Upravit",
"expand": "Rozbalit",
"expand.all": "Rozbalit vše",
"dialog.files.empty": "Žádné soubory k výběru",
"dialog.pages.empty": "Žádné stránky k výběru",
"dialog.users.empty": "Žádní uživatelé k výběru",
"dimensions": "Rozměry",
"disabled": "Zakázáno",
"discard": "Zahodit",
"download": "Stáhnout",
"duplicate": "Duplikovat",
"edit": "Upravit",
"email": "Email",
"email.placeholder": "mail@example.com",
"environment": "Prostředí",
"error.access.code": "Neplatný kód",
"error.access.login": "Neplatné přihlášení",
"error.access.panel": "Nemáte oprávnění k přihlášení do panelu",
@ -92,6 +102,7 @@
"error.language.code": "Zadejte prosím platný kód jazyka",
"error.language.duplicate": "Jazyk již existuje",
"error.language.name": "Zadejte prosím platné jméno jazyka",
"error.language.notFound": "Jazyk nebyl nalezen",
"error.layout.validation.block": "Chyba v bloku {blockIndex} v rozvržení {layoutIndex}",
"error.layout.validation.settings": "Chyba v nastavení rozvržení {index}",
@ -100,6 +111,8 @@
"error.license.email": "Zadejte prosím platnou emailovou adresu",
"error.license.verification": "Licenci nelze ověřit",
"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.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",
@ -165,6 +178,7 @@
"error.user.password.undefined": "Uživatel nemá nastavené heslo.",
"error.user.password.wrong": "Špatné heslo",
"error.user.role.invalid": "Zadejte prosím platnou roli",
"error.user.undefined": "Uživatele se nepodařilo nalézt",
"error.user.update.permission": "Nemáte dovoleno upravit uživatele \"{name}\"",
"error.validation.accepted": "Potvrďte prosím",
@ -208,6 +222,9 @@
"error.validation.time.between": "Zadejte prosím čas v rozmezí od {min} do {max}",
"error.validation.url": "Zadejte prosím platnou adresu URL",
"expand": "Rozbalit",
"expand.all": "Rozbalit vše",
"field.required": "Pole musí být vyplněno.",
"field.blocks.changeType": "Změnit typ",
"field.blocks.code.name": "Kód",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Opravdu chcete smazat vybrané bloky?",
"field.blocks.empty": "Zatím žádné bloky",
"field.blocks.fieldsets.label": "Vyberte prosím typ bloku …",
"field.blocks.fieldsets.paste": "Stiskněte<kbd>{{ shortcut }}</kbd> pro vložení/import bloků z Vaší schránky",
"field.blocks.gallery.name": "Galerie",
"field.blocks.gallery.images.empty": "Zatím žádné obrázky",
"field.blocks.gallery.images.label": "Obrázky",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Vyberte obrázek",
"field.blocks.image.ratio": "Poměr stran",
"field.blocks.image.url": "URL obrázku",
"field.blocks.line.name": "Čára",
"field.blocks.list.name": "Seznam",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Text",
@ -263,7 +282,7 @@
"field.structure.empty": "Zat\u00edm nejsou \u017e\u00e1dn\u00e9 z\u00e1znamy.",
"field.users.empty": "Nebyli zatím vybráni žádní uživatelé",
"file.blueprint": "Tento typ souboru nemá blueprint. Blueprint můžete definovat v <strong>/site/blueprints/{template}.yml</strong>",
"file.blueprint": "Tento typ souboru nemá blueprint. Blueprint můžete definovat v <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "Opravdu chcete smazat tento soubor?",
"file.sort": "Změnit pozici",
@ -272,6 +291,7 @@
"hide": "Skrýt",
"hour": "Hodina",
"import": "Import",
"insert": "Vlo\u017eit",
"insert.after": "Vložit za",
"insert.before": "Vložit před",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Kód pro resetování hesla",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "Vaše e-mailová adresa byla zaregistrována, kód byl odeslán do Vaší e-mailové schránky.",
"login.email.login.body": "Ahoj {user.nameOrEmail},\n\nV nedávné době jsi zažádal(a) o kód pro přihlášení do Kirby Panelu.\nNásledující kód pro přihlášení je platný {timeout} minut:\n\n{code}\n\nPokud jsi o kód pro přihlášení nežádal(a), tuto zprávu prosím ignoruj a v případě dotazů prosím kontaktuj svého administrátora.\nZ bezpečnostních důvodů prosím tuto zprávu nepřeposílej.",
"login.email.login.body": "Ahoj {user.nameOrEmail},\n\nV nedávné době jsi zažádal(a) o kód pro přihlášení do Kirby Panelu na stránce {site}.\nNásledující kód pro přihlášení je platný {timeout} minut:\n\n{code}\n\nPokud jsi o kód pro přihlášení nežádal(a), tuto zprávu prosím ignoruj a v případě dotazů prosím kontaktuj svého administrátora.\nZ bezpečnostních důvodů prosím tuto zprávu nepřeposílej nikomu dalšímu.",
"login.email.login.subject": "Váš kód pro přihlášení",
"login.email.password-reset.body": "Ahoj {user.nameOrEmail},\n\nV nedávné době jsi zažádal(a) o kód pro přihlášení do Kirby Panelu.\nNásledující kód pro přihlášení je platný {timeout} minut:\n\n{code}\n\nPokud jsi o kód pro přihlášení nežádal(a), tuto zprávu prosím ignoruj a v případě dotazů prosím kontaktuj svého administrátora.\nZ bezpečnostních důvodů prosím tuto zprávu nepřeposílej.",
"login.email.password-reset.body": "Ahoj {user.nameOrEmail},\n\nV nedávné době jsi zažádal(a) o kód pro resetování hesla do Kirby Panelu na stránce {site}.\nNásledující kód pro resetování hesla je platný {timeout} minut:\n\n{code}\n\nPokud jsi o kód pro resetování hesla nežádal(a), tuto zprávu prosím ignoruj a v případě dotazů prosím kontaktuj svého administrátora.\nZ bezpečnostních důvodů prosím tuto zprávu nepřeposílej nikomu dalšímu.",
"login.email.password-reset.subject": "Váš kód pro resetování hesla",
"login.remember": "Zůstat přihlášen",
"login.reset": "Resetovat heslo",
@ -385,7 +405,7 @@
"orientation.portrait": "Na výšku",
"orientation.square": "Čtverec",
"page.blueprint": "Tento typ stránky nemá blueprint. Blueprint můžete definovat v <strong>/site/blueprints/{template}.yml</strong>",
"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.changeStatus": "Změnit status",
@ -417,7 +437,10 @@
"pagination.page": "Stránka",
"password": "Heslo",
"paste": "Vložit",
"paste.after": "Vložit za",
"pixel": "Pixel",
"plugins": "Doplňky",
"prev": "Předchozí",
"preview": "Náhled",
"remove": "Odstranit",
@ -454,6 +477,8 @@
"template": "\u0160ablona",
"today": "Dnes",
"server": "Server",
"site.blueprint": "Hlavní panel nemá blueprint. Blueprint můžete definovat v <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Kód",
@ -463,11 +488,15 @@
"toolbar.button.heading.1": "Nadpis 1",
"toolbar.button.heading.2": "Nadpis 2",
"toolbar.button.heading.3": "Nadpis 3",
"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.file": "Soubor",
"toolbar.button.file.select": "Vyberte soubor",
"toolbar.button.file.upload": "Nahrajte soubor",
"toolbar.button.link": "Odkaz",
"toolbar.button.paragraph": "Odstavec",
"toolbar.button.strike": "Přeškrtnutí",
"toolbar.button.ol": "Číslovaný seznam",
"toolbar.button.underline": "Podtržení",
@ -497,7 +526,7 @@
"url.placeholder": "https://example.com",
"user": "Uživatel",
"user.blueprint": "Pro tuto uživatelskou roli můžete definovat další sekce a pole v <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Pro tuto uživatelskou roli můžete definovat další sekce a pole v <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Změnit email",
"user.changeLanguage": "Změnit jazyk",
"user.changeName": "Přejmenovat tohoto uživatele",
@ -516,9 +545,10 @@
"view.account": "V\u00e1\u0161 \u00fa\u010det",
"view.installation": "Instalace",
"view.languages": "Jazyky",
"view.resetPassword": "Resetovat heslo",
"view.settings": "Nastavení",
"view.site": "Stránka",
"view.system": "Systém",
"view.users": "U\u017eivatel\u00e9",
"welcome": "Vítejte",

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Ændre dit navn",
"account.delete": "Slet din konto",
"account.delete.confirm": "Ønsker du virkelig at slette din konto? Du vil blive logget ud med det samme. Din konto kan ikke gendannes.",
"add": "Ny",
"author": "Forfatter",
"avatar": "Profilbillede",
"back": "Tilbage",
"cancel": "Annuller",
@ -9,6 +14,7 @@
"collapse": "Fold sammen",
"collapse.all": "Fold alle sammen",
"copy": "Kopier",
"copy.all": "Kopier alle",
"create": "Opret",
"date": "Dato",
@ -23,24 +29,28 @@
"days.tue": "Tir",
"days.wed": "Ons",
"debugging": "Fejlfinding",
"delete": "Slet",
"delete.all": "Slet alle",
"dimensions": "Dimensioner",
"disabled": "Deaktiveret",
"discard": "Kass\u00e9r",
"download": "Download",
"duplicate": "Dupliker",
"edit": "Rediger",
"expand": "Fold ud",
"expand.all": "Fold alle ud",
"dialog.files.empty": "Ingen filer kan vælges",
"dialog.pages.empty": "Ingen sider kan vælges",
"dialog.users.empty": "Ingen brugere kan vælges",
"dimensions": "Dimensioner",
"disabled": "Deaktiveret",
"discard": "Kass\u00e9r",
"download": "Download",
"duplicate": "Dupliker",
"edit": "Rediger",
"email": "Email",
"email.placeholder": "mail@eksempel.dk",
"environment": "Miljø",
"error.access.code": "Ugyldig kode",
"error.access.login": "Ugyldigt log ind",
"error.access.panel": "Du har ikke adgang til panelet",
@ -92,6 +102,7 @@
"error.language.code": "Indtast venligst en gyldig kode for sproget",
"error.language.duplicate": "Sproget eksisterer allerede",
"error.language.name": "Indtast venligst et gyldigt navn for sproget",
"error.language.notFound": "Sproget fandtes ikke",
"error.layout.validation.block": "Der er fejl i blok {blockIndex} i layout {layoutIndex}",
"error.layout.validation.settings": "Der er fejl i layout {index} indstillinger",
@ -100,6 +111,8 @@
"error.license.email": "Indtast venligst en gyldig email adresse",
"error.license.verification": "Licensen kunne ikke verificeres",
"error.offline": "Panelet er i øjeblikket offline",
"error.page.changeSlug.permission": "Du kan ikke ændre URL-endelse for \"{slug}\"",
"error.page.changeStatus.incomplete": "Siden indeholder fejl og kan derfor ikke udgives",
"error.page.changeStatus.permission": "Status for denne side kan ikke ændres",
@ -118,7 +131,7 @@
"error.page.duplicate.permission": "Du har ikke mulighed for at duplikere \"{slug}\"",
"error.page.notFound": "Siden kunne ikke findes",
"error.page.num.invalid": "Indtast venligst et gyldigt sorteringsnummer. Nummeret kan ikke være negativt.",
"error.page.slug.invalid": "Please enter a valid URL appendix",
"error.page.slug.invalid": "Indtast venligst et gyldigt URL appendix",
"error.page.slug.maxlength": "Navnet skal være kortere end \"{length}\" tegn",
"error.page.sort.permission": "Siden \"{slug}\" kan ikke sorteres",
"error.page.status.invalid": "Sæt venligst en gyldig status for siden",
@ -163,8 +176,9 @@
"error.user.password.invalid": "Indtast venligst en gyldig adgangskode. Adgangskoder skal minimum være 8 tegn lange.",
"error.user.password.notSame": "Bekr\u00e6ft venligst adgangskoden",
"error.user.password.undefined": "Brugeren har ikke en adgangskode",
"error.user.password.wrong": "Wrong password",
"error.user.password.wrong": "Forkert adgangskode",
"error.user.role.invalid": "Indtast venligst en gyldig rolle",
"error.user.undefined": "Brugeren kunne ikke findes",
"error.user.update.permission": "Du har ikke tilladelse til at opdatere brugeren \"{name}\"",
"error.validation.accepted": "Bekræft venligst",
@ -208,6 +222,9 @@
"error.validation.time.between": "Indtast venligst et tidspunkt imellem {min} og {max}",
"error.validation.url": "Indtast venligst en gyldig URL",
"expand": "Fold ud",
"expand.all": "Fold alle ud",
"field.required": "Feltet er påkrævet",
"field.blocks.changeType": "Skift type",
"field.blocks.code.name": "Kode",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Ønsker du virkelig at slette de valgte blokke?",
"field.blocks.empty": "Ingen blokke endnu",
"field.blocks.fieldsets.label": "Vælg venligst en blok type",
"field.blocks.fieldsets.paste": "Tryk <kbd>{{ shortcut }}</kbd> for at indsætte/importere blokke fra dit udklipsholder",
"field.blocks.gallery.name": "Galleri",
"field.blocks.gallery.images.empty": "Ingen billeder endnu",
"field.blocks.gallery.images.label": "Billeder",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Vælg et billede",
"field.blocks.image.ratio": "Størrelsesforhold",
"field.blocks.image.url": "Billede URL",
"field.blocks.line.name": "Linje",
"field.blocks.list.name": "Liste",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Tekst",
@ -263,7 +282,7 @@
"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/{template}.yml</strong>",
"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.sort": "Skift position",
@ -272,6 +291,7 @@
"hide": "Skjul",
"hour": "Time",
"import": "Importer",
"insert": "Inds\u00e6t",
"insert.after": "Indsæt efter",
"insert.before": "Indsæt før",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Sikkerhedskode",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "Hvis din email adresse er registreret er en sikkerhedskode blevet sendt via email.",
"login.email.login.body": "Hej {user.nameOrEmail},\n\nDu har for nyligt anmodet om en log ind kode til Kirby Panel.\nFølgende log ind kode vil være gyldig i {timeout} minutter:\n\n{code}\n\nHvis du ikke har anmodet om en log ind kode, kan du blot ignorere denne email eller kontakte din administrator hvis du har spørgsmål.\nAf sikkerhedsmæssige årsager, bør du IKKE videresende denne email.",
"login.email.login.body": "Hej {user.nameOrEmail},\n\nDu har for nyligt anmodet om en log ind kode til panelet af {site}.\nFølgende log ind kode vil være gyldig i {timeout} minutter:\n\n{code}\n\nHvis du ikke har anmodet om en log ind kode, kan du blot ignorere denne email eller kontakte din administrator hvis du har spørgsmål.\nAf sikkerhedsmæssige årsager, bør du IKKE videresende denne email.",
"login.email.login.subject": "Din log ind kode",
"login.email.password-reset.body": "Hej {user.nameOrEmail},\n\nDu har for nyligt anmodet om kode til nulstilling af adgangskode til Kirby Panel.\nFølgende kode til nulstilling af adgangskode vil være gyldig i {timeout} minutter:\n\n{code}\n\nHvis du ikke har anmodet om kode til nulstilling af adgangskode, kan du blot ignorere denne email eller kontakte din administrator hvis du har spørgsmål.\nAf sikkerhedsmæssige årsager, bør du IKKE videresende denne email.",
"login.email.password-reset.body": "Hej {user.nameOrEmail},\n\nDu har for nyligt anmodet om kode til nulstilling af adgangskode til panelet af {site}.\nFølgende kode til nulstilling af adgangskode vil være gyldig i {timeout} minutter:\n\n{code}\n\nHvis du ikke har anmodet om kode til nulstilling af adgangskode, kan du blot ignorere denne email eller kontakte din administrator hvis du har spørgsmål.\nAf sikkerhedsmæssige årsager, bør du IKKE videresende denne email.",
"login.email.password-reset.subject": "Din kode til nulstilling af adgangskode",
"login.remember": "Forbliv logget ind",
"login.reset": "Nulstil adgangskode",
@ -372,11 +392,11 @@
"more": "Mere",
"name": "Navn",
"next": "Næste",
"no": "no",
"no": "nej",
"off": "Sluk",
"on": "Tænd",
"open": "Åben",
"open.newWindow": "Open in new window",
"open.newWindow": "Åben i et nyt vindue",
"options": "Indstillinger",
"options.none": "Ingen muligheder",
@ -385,7 +405,7 @@
"orientation.portrait": "Portræt",
"orientation.square": "Kvadrat",
"page.blueprint": "Denne side har intet blueprint endnu. Du kan definere opsætningen i <strong>/site/blueprints/{template}.yml</strong>",
"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.fromTitle": "Generer udfra titel",
"page.changeStatus": "Skift status",
@ -417,7 +437,10 @@
"pagination.page": "Side",
"password": "Adgangskode",
"paste": "Indsæt",
"paste.after": "Indsæt efter",
"pixel": "Pixel",
"plugins": "Plugins",
"prev": "Forrige",
"preview": "Forhåndsvisning",
"remove": "Fjern",
@ -454,6 +477,8 @@
"template": "Skabelon",
"today": "Idag",
"server": "Server",
"site.blueprint": "Sitet har intet blueprint endnu. Du kan definere opsætningen i <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Kode",
@ -463,14 +488,18 @@
"toolbar.button.heading.1": "Overskrift 1",
"toolbar.button.heading.2": "Overskrift 2",
"toolbar.button.heading.3": "Overskrift 3",
"toolbar.button.heading.4": "Overskrift 4",
"toolbar.button.heading.5": "Overskrift 5",
"toolbar.button.heading.6": "Overskrift 6",
"toolbar.button.italic": "Kursiv tekst",
"toolbar.button.file": "Fil",
"toolbar.button.file.select": "Vælg en fil",
"toolbar.button.file.upload": "Upload en fil",
"toolbar.button.link": "Link",
"toolbar.button.strike": "Strike-through",
"toolbar.button.paragraph": "Afsnit",
"toolbar.button.strike": "Gennemstreg",
"toolbar.button.ol": "Ordnet liste",
"toolbar.button.underline": "Underline",
"toolbar.button.underline": "Understreg",
"toolbar.button.ul": "Punktliste",
"translation.author": "Kirby Team",
@ -497,7 +526,7 @@
"url.placeholder": "https://example.com",
"user": "Bruger",
"user.blueprint": "Du kan definere yderligere sektioner og formular felter for denne brugerrolle i <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Du kan definere yderligere sektioner og formular felter for denne brugerrolle i <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Skift email",
"user.changeLanguage": "Skift sprog",
"user.changeName": "Omdøb denne bruger",
@ -516,12 +545,13 @@
"view.account": "Din konto",
"view.installation": "Installation",
"view.languages": "Sprog",
"view.resetPassword": "Nulstil adgangskode",
"view.settings": "Indstillinger",
"view.site": "Website",
"view.system": "System",
"view.users": "Brugere",
"welcome": "Velkommen",
"year": "År",
"yes": "yes"
"yes": "ja"
}

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Deinen Namen ändern",
"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",
"author": "Autor",
"avatar": "Profilbild",
"back": "Zurück",
"cancel": "Abbrechen",
@ -9,6 +14,7 @@
"collapse": "Zusammenklappen",
"collapse.all": "Alle zusammenklappen",
"copy": "Kopieren",
"copy.all": "Alle kopieren",
"create": "Erstellen",
"date": "Datum",
@ -23,24 +29,28 @@
"days.tue": "Di",
"days.wed": "Mi",
"debugging": "Debugging",
"delete": "L\u00f6schen",
"delete.all": "Alle löschen",
"dimensions": "Maße",
"disabled": "Gesperrt",
"discard": "Verwerfen",
"download": "Download",
"duplicate": "Duplizieren",
"edit": "Bearbeiten",
"expand": "Aufklappen",
"expand.all": "Alle aufklappen",
"dialog.files.empty": "Keine verfügbaren Dateien",
"dialog.pages.empty": "Keine verfügbaren Seiten",
"dialog.users.empty": "Keine verfügbaren Accounts",
"dimensions": "Maße",
"disabled": "Gesperrt",
"discard": "Verwerfen",
"download": "Download",
"duplicate": "Duplizieren",
"edit": "Bearbeiten",
"email": "E-Mail",
"email.placeholder": "mail@beispiel.de",
"environment": "Umgebung",
"error.access.code": "Ungültiger Code",
"error.access.login": "Ungültige Zugangsdaten",
"error.access.panel": "Du hast keinen Zugang zum Panel",
@ -92,6 +102,7 @@
"error.language.code": "Bitte gib einen gültigen Code für die Sprache an",
"error.language.duplicate": "Die Sprache besteht bereits",
"error.language.name": "Bitte gib einen gültigen Namen für die Sprache an",
"error.language.notFound": "Die Sprache konnte nicht gefunden werden",
"error.layout.validation.block": "Fehler in Block {blockIndex} in Layout {layoutIndex}",
"error.layout.validation.settings": "Fehler in den Einstellungen von Layout {index}",
@ -100,6 +111,8 @@
"error.license.email": "Bitte gib eine gültige E-Mailadresse an",
"error.license.verification": "Die Lizenz konnte nicht verifiziert werden",
"error.offline": "Das Panel ist zur Zeit offline",
"error.page.changeSlug.permission": "Du darfst die URL der Seite \"{slug}\" nicht ändern",
"error.page.changeStatus.incomplete": "Die Seite ist nicht vollständig und kann daher nicht veröffentlicht werden",
"error.page.changeStatus.permission": "Der Status der Seite kann nicht geändert werden",
@ -165,6 +178,7 @@
"error.user.password.undefined": "Der Account hat kein Passwort",
"error.user.password.wrong": "Falsches Passwort",
"error.user.role.invalid": "Bitte gib eine gültige Rolle an",
"error.user.undefined": "Der Benutzer wurde nicht gefunden",
"error.user.update.permission": "Du darfst den den Account \"{name}\" nicht bearbeiten",
"error.validation.accepted": "Bitte bestätige",
@ -208,6 +222,9 @@
"error.validation.time.between": "Bitte gib eine Zeit zwischen {min} und {max} ein",
"error.validation.url": "Bitte gib eine gültige URL ein",
"expand": "Aufklappen",
"expand.all": "Alle aufklappen",
"field.required": "Das Feld ist Pflicht",
"field.blocks.changeType": "Blocktyp ändern",
"field.blocks.code.name": "Code",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Willst du wirklich die ausgewählten Blöcke löschen?",
"field.blocks.empty": "Keine Blöcke",
"field.blocks.fieldsets.label": "Bitte wähle einen Blocktyp aus …",
"field.blocks.fieldsets.paste": "Drücke <kbd>{{ shortcut }}</kbd> um Blöcke aus der Zwischenablage zu importieren",
"field.blocks.gallery.name": "Galerie",
"field.blocks.gallery.images.empty": "Keine Bilder",
"field.blocks.gallery.images.label": "Bilder",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Bild auswählen",
"field.blocks.image.ratio": "Seitenverhältnis",
"field.blocks.image.url": "Bild URL",
"field.blocks.line.name": "Linie",
"field.blocks.list.name": "Liste",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Text",
@ -263,7 +282,7 @@
"field.structure.empty": "Es bestehen keine Eintr\u00e4ge.",
"field.users.empty": "Keine Accounts ausgewählt",
"file.blueprint": "Du kannst zusätzliche Felder und Bereiche für diese Datei in <strong>/site/blueprints/{template}.yml</strong> anlegen",
"file.blueprint": "Du kannst zusätzliche Felder und Bereiche für diese Datei in <strong>/site/blueprints/files/{blueprint}.yml</strong> anlegen",
"file.delete.confirm": "Willst du die Datei <strong>{filename}</strong> <br>wirklich löschen?",
"file.sort": "Position ändern",
@ -272,6 +291,7 @@
"hide": "Verbergen",
"hour": "Stunde",
"import": "Importieren",
"insert": "Einf\u00fcgen",
"insert.after": "Danach einfügen",
"insert.before": "Davor einfügen",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Anmeldecode",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "Wenn deine E-Mail-Adresse registriert ist, wurde der angeforderte Code per E-Mail versendet.",
"login.email.login.body": "Hallo {user.nameOrEmail},\n\ndu hast gerade einen Anmeldecode für das Kirby Panel angefordert.\nDer folgende Anmeldecode ist für die nächsten {timeout} Minuten gültig:\n\n{code}\n\nWenn du keinen Anmeldecode angefordert hast, ignoriere bitte diese E-Mail oder kontaktiere bei Fragen deinen Administrator.\nBitte leite diese E-Mail aus Sicherheitsgründen NICHT weiter.",
"login.email.login.body": "Hallo {user.nameOrEmail},\n\ndu hast gerade einen Anmeldecode für das Kirby Panel von {site} angefordert.\n\nDer folgende Anmeldecode ist für die nächsten {timeout} Minuten gültig:\n\n{code}\n\nWenn du keinen Anmeldecode angefordert hast, ignoriere bitte diese E-Mail oder kontaktiere bei Fragen deinen Administrator.\nBitte leite diese E-Mail aus Sicherheitsgründen NICHT weiter.",
"login.email.login.subject": "Dein Anmeldecode",
"login.email.password-reset.body": "Hallo {user.nameOrEmail},\n\ndu hast gerade einen Anmeldecode für das Kirby Panel angefordert.\nDer folgende Anmeldecode ist für die nächsten {timeout} Minuten gültig:\n\n{code}\n\nWenn du keinen Anmeldecode angefordert hast, ignoriere bitte diese E-Mail oder kontaktiere bei Fragen deinen Administrator.\nBitte leite diese E-Mail aus Sicherheitsgründen NICHT weiter.",
"login.email.password-reset.body": "Hallo {user.nameOrEmail},\n\ndu hast gerade einen Anmeldecode für das Kirby Panel von {site} angefordert.\n\nDer folgende Anmeldecode ist für die nächsten {timeout} Minuten gültig:\n\n{code}\n\nWenn du keinen Anmeldecode angefordert hast, ignoriere bitte diese E-Mail oder kontaktiere bei Fragen deinen Administrator.\nBitte leite diese E-Mail aus Sicherheitsgründen NICHT weiter.",
"login.email.password-reset.subject": "Dein Anmeldecode",
"login.remember": "Angemeldet bleiben",
"login.reset": "Passwort zurücksetzen",
@ -385,7 +405,7 @@
"orientation.portrait": "Hochformat",
"orientation.square": "Quadratisch",
"page.blueprint": "Du kannst zusätzliche Felder und Bereiche für diese Seite in <strong>/site/blueprints/{template}.yml</strong> anlegen",
"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.fromTitle": "Aus Titel erzeugen",
"page.changeStatus": "Status ändern",
@ -417,7 +437,10 @@
"pagination.page": "Seite",
"password": "Passwort",
"paste": "Einfügen",
"paste.after": "Danach einfügen",
"pixel": "Pixel",
"plugins": "Plugins",
"prev": "Vorheriger Eintrag",
"preview": "Vorschau",
"remove": "Entfernen",
@ -454,6 +477,8 @@
"template": "Vorlage",
"today": "Heute",
"server": "Server",
"site.blueprint": "Du kannst zusätzliche Felder und Bereiche für die Seite in <strong>/site/blueprints/site.yml</strong> anlegen",
"toolbar.button.code": "Code",
@ -463,11 +488,15 @@
"toolbar.button.heading.1": "Überschrift 1",
"toolbar.button.heading.2": "Überschrift 2",
"toolbar.button.heading.3": "Überschrift 3",
"toolbar.button.heading.4": "Überschrift 4",
"toolbar.button.heading.5": "Überschrift 5",
"toolbar.button.heading.6": "Überschrift 6",
"toolbar.button.italic": "Kursiver Text",
"toolbar.button.file": "Datei",
"toolbar.button.file.select": "Datei auswählen",
"toolbar.button.file.upload": "Datei hochladen",
"toolbar.button.link": "Link",
"toolbar.button.paragraph": "Absatz",
"toolbar.button.strike": "Durchgestrichen",
"toolbar.button.ol": "Geordnete Liste",
"toolbar.button.underline": "Unterstrichen",
@ -497,7 +526,7 @@
"url.placeholder": "https://beispiel.de",
"user": "Account",
"user.blueprint": "Du kannst zusätzliche Felder und Bereiche für diese Rolle in <strong>/site/blueprints/users/{role}.yml</strong> anlegen",
"user.blueprint": "Du kannst zusätzliche Felder und Bereiche für diese Rolle in <strong>/site/blueprints/users/{blueprint}.yml</strong> anlegen",
"user.changeEmail": "E-Mail ändern",
"user.changeLanguage": "Sprache ändern",
"user.changeName": "Account umbenennen",
@ -516,9 +545,10 @@
"view.account": "Dein Account",
"view.installation": "Installation",
"view.languages": "Sprachen",
"view.resetPassword": "Passwort zurücksetzen",
"view.settings": "Einstellungen",
"view.site": "Seite",
"view.system": "System",
"view.users": "Accounts",
"welcome": "Willkommen",

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Change your name",
"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",
"author": "Author",
"avatar": "\u0395\u03b9\u03ba\u03cc\u03bd\u03b1 \u03c0\u03c1\u03bf\u03c6\u03af\u03bb",
"back": "Πίσω",
"cancel": "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7",
@ -9,6 +14,7 @@
"collapse": "Collapse",
"collapse.all": "Collapse All",
"copy": "Αντιγραφή",
"copy.all": "Copy all",
"create": "Δημιουργία",
"date": "Ημερομηνία",
@ -23,24 +29,28 @@
"days.tue": "\u03a4\u03c1\u03af",
"days.wed": "\u03a4\u03b5\u03c4",
"debugging": "Debugging",
"delete": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae",
"delete.all": "Delete all",
"dimensions": "Διαστάσεις",
"disabled": "Disabled",
"discard": "Απόρριψη",
"download": "Λήψη",
"duplicate": "Αντίγραφο",
"edit": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1",
"expand": "Expand",
"expand.all": "Expand All",
"dialog.files.empty": "No files to select",
"dialog.pages.empty": "No pages to select",
"dialog.users.empty": "No users to select",
"dimensions": "Διαστάσεις",
"disabled": "Disabled",
"discard": "Απόρριψη",
"download": "Λήψη",
"duplicate": "Αντίγραφο",
"edit": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1",
"email": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
"email.placeholder": "mail@example.com",
"environment": "Environment",
"error.access.code": "Mη έγκυρος κωδικός",
"error.access.login": "Mη έγκυρη σύνδεση",
"error.access.panel": "Δεν επιτρέπεται η πρόσβαση στον πίνακα ελέγχου",
@ -92,6 +102,7 @@
"error.language.code": "Please enter a valid code for the language",
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.language.notFound": "The language could not be found",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
@ -100,6 +111,8 @@
"error.license.email": "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου",
"error.license.verification": "The license could not be verified",
"error.offline": "The Panel is currently offline",
"error.page.changeSlug.permission": "Δεν επιτρέπεται να αλλάξετε το URL της σελίδας \"{slug}\"",
"error.page.changeStatus.incomplete": "Δεν ήταν δυνατή η δημοσίευση της σελίδας καθώς περιέχει σφάλματα",
"error.page.changeStatus.permission": "Δεν είναι δυνατή η αλλαγή κατάστασης για αυτή τη σελίδα",
@ -165,6 +178,7 @@
"error.user.password.undefined": "Ο χρήστης δεν έχει κωδικό πρόσβασης",
"error.user.password.wrong": "Wrong password",
"error.user.role.invalid": "Παρακαλώ εισαγάγετε έναν έγκυρο ρόλο",
"error.user.undefined": "Δεν είναι δυνατή η εύρεση του χρήστη",
"error.user.update.permission": "Δεν επιτρέπεται η ενημέρωση του χρήστη \"{name}\"",
"error.validation.accepted": "Παρακαλώ επιβεβαιώστε",
@ -208,6 +222,9 @@
"error.validation.time.between": "Please enter a time between {min} and {max}",
"error.validation.url": "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση URL",
"expand": "Expand",
"expand.all": "Expand All",
"field.required": "The field is required",
"field.blocks.changeType": "Change type",
"field.blocks.code.name": "Κώδικας",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Do you really want to delete the selected blocks?",
"field.blocks.empty": "No blocks yet",
"field.blocks.fieldsets.label": "Please select a block type …",
"field.blocks.fieldsets.paste": "Press <kbd>{{ shortcut }}</kbd> to paste/import blocks from your clipboard",
"field.blocks.gallery.name": "Gallery",
"field.blocks.gallery.images.empty": "No images yet",
"field.blocks.gallery.images.label": "Images",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Select an image",
"field.blocks.image.ratio": "Ratio",
"field.blocks.image.url": "Image URL",
"field.blocks.line.name": "Line",
"field.blocks.list.name": "List",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Text",
@ -263,7 +282,7 @@
"field.structure.empty": "\u0394\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03c5\u03bd \u03b1\u03ba\u03cc\u03bc\u03b7 \u03ba\u03b1\u03c4\u03b1\u03c7\u03c9\u03c1\u03af\u03c3\u03b5\u03b9\u03c2.",
"field.users.empty": "Δεν έχουν επιλεγεί ακόμη χρήστες",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"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.sort": "Change position",
@ -272,6 +291,7 @@
"hide": "Hide",
"hour": "Ώρα",
"import": "Import",
"insert": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae",
"insert.after": "Insert after",
"insert.before": "Insert before",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Password reset code",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "If your email address is registered, the requested code was sent via email.",
"login.email.login.body": "Hi {user.nameOrEmail},\n\nYou recently requested a login code for the Kirby Panel.\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": "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.subject": "Your login code",
"login.email.password-reset.body": "Hi {user.nameOrEmail},\n\nYou recently requested a password reset code for the Kirby Panel.\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": "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.subject": "Your password reset code",
"login.remember": "Κρατήστε με συνδεδεμένο",
"login.reset": "Reset password",
@ -385,7 +405,7 @@
"orientation.portrait": "Κάθετος",
"orientation.square": "Τετράγωνος",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"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.changeStatus": "Αλλαγή κατάστασης",
@ -417,7 +437,10 @@
"pagination.page": "Σελίδα",
"password": "\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03a0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2",
"paste": "Paste",
"paste.after": "Paste after",
"pixel": "Εικονοστοιχέιο",
"plugins": "Plugins",
"prev": "Προηγούμενο",
"preview": "Preview",
"remove": "Αφαίρεση",
@ -454,6 +477,8 @@
"template": "\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf",
"today": "Σήμερα",
"server": "Server",
"site.blueprint": "The site has no blueprint yet. You can define the setup in <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Κώδικας",
@ -463,11 +488,15 @@
"toolbar.button.heading.1": "Επικεφαλίδα 1",
"toolbar.button.heading.2": "Επικεφαλίδα 2",
"toolbar.button.heading.3": "Επικεφαλίδα 3",
"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.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.paragraph": "Paragraph",
"toolbar.button.strike": "Strike-through",
"toolbar.button.ol": "Ταξινομημένη λίστα",
"toolbar.button.underline": "Underline",
@ -497,7 +526,7 @@
"url.placeholder": "https://example.com",
"user": "Χρήστης",
"user.blueprint": "Μπορείτε να ορίσετε επιπλέον τμήματα και πεδία φόρμας για αυτόν τον ρόλο χρήστη στο <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "You can define additional sections and form fields for this user role in <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Αλλαγή διεύθινσης ηλεκτρονικού ταχυδρομείου",
"user.changeLanguage": "Αλλαγή γλώσσας",
"user.changeName": "Μετονομασία χρήστη",
@ -516,9 +545,10 @@
"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.languages": "Γλώσσες",
"view.resetPassword": "Reset password",
"view.settings": "Ρυθμίσεις",
"view.site": "Iστοσελίδα",
"view.system": "System",
"view.users": "\u03a7\u03c1\u03ae\u03c3\u03c4\u03b5\u03c2",
"welcome": "Καλώς ήρθατε",

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Change your name",
"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": "Add",
"author": "Author",
"avatar": "Profile picture",
"back": "Back",
"cancel": "Cancel",
@ -9,6 +14,7 @@
"collapse": "Collapse",
"collapse.all": "Collapse All",
"copy": "Copy",
"copy.all": "Copy all",
"create": "Create",
"date": "Date",
@ -23,24 +29,28 @@
"days.tue": "Tue",
"days.wed": "Wed",
"debugging": "Debugging",
"delete": "Delete",
"delete.all": "Delete all",
"dimensions": "Dimensions",
"disabled": "Disabled",
"discard": "Discard",
"download": "Download",
"duplicate": "Duplicate",
"edit": "Edit",
"expand": "Expand",
"expand.all": "Expand All",
"dialog.files.empty": "No files to select",
"dialog.pages.empty": "No pages to select",
"dialog.users.empty": "No users to select",
"dimensions": "Dimensions",
"disabled": "Disabled",
"discard": "Discard",
"download": "Download",
"duplicate": "Duplicate",
"edit": "Edit",
"email": "Email",
"email.placeholder": "mail@example.com",
"environment": "Environment",
"error.access.code": "Invalid code",
"error.access.login": "Invalid login",
"error.access.panel": "You are not allowed to access the panel",
@ -92,6 +102,7 @@
"error.language.code": "Please enter a valid code for the language",
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.language.notFound": "The language could not be found",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
@ -100,6 +111,8 @@
"error.license.email": "Please enter a valid email address",
"error.license.verification": "The license could not be verified",
"error.offline": "The Panel is currently offline",
"error.page.changeSlug.permission": "You are not allowed to change the URL appendix for \"{slug}\"",
"error.page.changeStatus.incomplete": "The page has errors and cannot be published",
"error.page.changeStatus.permission": "The status for this page cannot be changed",
@ -165,6 +178,7 @@
"error.user.password.undefined": "The user does not have a password",
"error.user.password.wrong": "Wrong password",
"error.user.role.invalid": "Please enter a valid role",
"error.user.undefined": "The user cannot be found",
"error.user.update.permission": "You are not allowed to update the user \"{name}\"",
"error.validation.accepted": "Please confirm",
@ -208,6 +222,9 @@
"error.validation.time.between": "Please enter a time between {min} and {max}",
"error.validation.url": "Please enter a valid URL",
"expand": "Expand",
"expand.all": "Expand All",
"field.required": "The field is required",
"field.blocks.changeType": "Change type",
"field.blocks.code.name": "Code",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Do you really want to delete the selected blocks?",
"field.blocks.empty": "No blocks yet",
"field.blocks.fieldsets.label": "Please select a block type …",
"field.blocks.fieldsets.paste": "Press <kbd>{{ shortcut }}</kbd> to paste/import blocks from your clipboard",
"field.blocks.gallery.name": "Gallery",
"field.blocks.gallery.images.empty": "No images yet",
"field.blocks.gallery.images.label": "Images",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Select an image",
"field.blocks.image.ratio": "Ratio",
"field.blocks.image.url": "Image URL",
"field.blocks.line.name": "Line",
"field.blocks.list.name": "List",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Text",
@ -263,7 +282,7 @@
"field.structure.empty": "No entries yet",
"field.users.empty": "No users selected yet",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "Do you really want to delete <br><strong>{filename}</strong>?",
"file.sort": "Change position",
@ -272,6 +291,7 @@
"hide": "Hide",
"hour": "Hour",
"import": "Import",
"insert": "Insert",
"insert.after": "Insert after",
"insert.before": "Insert before",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Password reset code",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "If your email address is registered, the requested code was sent via email.",
"login.email.login.body": "Hi {user.nameOrEmail},\n\nYou recently requested a login code for the Kirby Panel.\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": "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.subject": "Your login code",
"login.email.password-reset.body": "Hi {user.nameOrEmail},\n\nYou recently requested a password reset code for the Kirby Panel.\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": "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.subject": "Your password reset code",
"login.remember": "Keep me logged in",
"login.reset": "Reset password",
@ -385,7 +405,7 @@
"orientation.portrait": "Portrait",
"orientation.square": "Square",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Change URL",
"page.changeSlug.fromTitle": "Create from title",
"page.changeStatus": "Change status",
@ -417,7 +437,10 @@
"pagination.page": "Page",
"password": "Password",
"paste": "Paste",
"paste.after": "Paste after",
"pixel": "Pixel",
"plugins": "Plugins",
"prev": "Previous",
"preview": "Preview",
"remove": "Remove",
@ -454,6 +477,8 @@
"template": "Template",
"today": "Today",
"server": "Server",
"site.blueprint": "The site has no blueprint yet. You can define the setup in <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Code",
@ -463,11 +488,15 @@
"toolbar.button.heading.1": "Heading 1",
"toolbar.button.heading.2": "Heading 2",
"toolbar.button.heading.3": "Heading 3",
"toolbar.button.heading.4": "Heading 4",
"toolbar.button.heading.5": "Heading 5",
"toolbar.button.heading.6": "Heading 6",
"toolbar.button.italic": "Italic",
"toolbar.button.file": "File",
"toolbar.button.file.select": "Select a file",
"toolbar.button.file.upload": "Upload a file",
"toolbar.button.link": "Link",
"toolbar.button.paragraph": "Paragraph",
"toolbar.button.strike": "Strike-through",
"toolbar.button.ol": "Ordered list",
"toolbar.button.underline": "Underline",
@ -497,7 +526,7 @@
"url.placeholder": "https://example.com",
"user": "User",
"user.blueprint": "You can define additional sections and form fields for this user role in <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "You can define additional sections and form fields for this user role in <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Change email",
"user.changeLanguage": "Change language",
"user.changeName": "Rename this user",
@ -516,9 +545,10 @@
"view.account": "Your account",
"view.installation": "Installation",
"view.languages": "Languages",
"view.resetPassword": "Reset password",
"view.settings": "Settings",
"view.site": "Site",
"view.system": "System",
"view.users": "Users",
"welcome": "Welcome",

View file

@ -0,0 +1,557 @@
{
"account.changeName": "Ŝanĝi vian nomon",
"account.delete": "Forigi vian konton",
"account.delete.confirm": "Ĉu vi certe deziras forigi vian konton? Vi estos tuj elsalutita. Ne eblos malforigi vian konton.",
"add": "Aldoni",
"author": "Aŭtoro",
"avatar": "Profilbildo",
"back": "Reen",
"cancel": "Nuligi",
"change": "Ŝanĝi",
"close": "Fermi",
"confirm": "Bone",
"collapse": "Fermi",
"collapse.all": "Fermi ĉiujn",
"copy": "Kopii",
"copy.all": "Kopii ĉiujn",
"create": "Krei",
"date": "Dato",
"date.select": "Elekti daton",
"day": "Tago",
"days.fri": "Ven",
"days.mon": "Lun",
"days.sat": "Sab",
"days.sun": "Dim",
"days.thu": "Ĵaŭ",
"days.tue": "Mar",
"days.wed": "Mer",
"debugging": "Sencimigado",
"delete": "Forigi",
"delete.all": "Forigi ĉiujn",
"dialog.files.empty": "Neniu dosiero por elekti",
"dialog.pages.empty": "Neniu paĝo por elekti",
"dialog.users.empty": "Neniu uzanto por elekti",
"dimensions": "Dimensioj",
"disabled": "Malebligita",
"discard": "Forĵeti",
"download": "Elŝuti",
"duplicate": "Duobligi",
"edit": "Modifi",
"email": "Retpoŝto",
"email.placeholder": "retpoŝto@ekzemplo.com",
"environment": "Medio",
"error.access.code": "Nevalida kodo",
"error.access.login": "Nevalida ensaluto",
"error.access.panel": "Vi ne rajtas eniri la administran panelon",
"error.access.view": "Vi ne rajtas eniri ĉi tiun areon de la panelo",
"error.avatar.create.fail": "La profilbildo ne povis esti alŝutita",
"error.avatar.delete.fail": "La profilbildo ne povis esti forigita",
"error.avatar.dimensions.invalid": "Bonvolu certigi ke la profilbildo ne estas pli ol 3000 bilderojn larĝa kaj alta",
"error.avatar.mime.forbidden": "La profilbildo devas esti dosiero en dosierformo aŭ JPEG aŭ PNG",
"error.blueprint.notFound": "La plano \"{name}\" ne povis esti ŝargita",
"error.blocks.max.plural": "Oni devas ne aldoni pli ol {max} blokoj",
"error.blocks.max.singular": "Vi devas ne aldoni pli ol unu bloko",
"error.blocks.min.plural": "Oni devas aldoni almenaŭ {min} blokojn",
"error.blocks.min.singular": "Oni devas aldoni almenaŭ unu blokon",
"error.blocks.validation": "Estas eraro en bloko {index}",
"error.email.preset.notFound": "La retpoŝta antaŭagordo \"{name}\" ne estas trovebla",
"error.field.converter.invalid": "Nevalida konvertilo \"{converter}\"",
"error.file.changeName.empty": "La nomo ne rajtas esti malplena",
"error.file.changeName.permission": "Vi ne rajtas ŝanĝi la nomon de \"{filename}\"",
"error.file.duplicate": "Jam ekzistas dosiero nomita \"{filename}\"",
"error.file.extension.forbidden": "La dosiersufikso \"{extension}\" ne estas permesita",
"error.file.extension.invalid": "Nevalida dosiersufikso: {extension}",
"error.file.extension.missing": "Mankas la dosiersufiksoj por \"{filename}\"",
"error.file.maxheight": "La bildo ne povas esti pli ol {height} bilderojn alta ",
"error.file.maxsize": "La dosiero estas tro granda",
"error.file.maxwidth": "La bildo ne povas esti pli oll {width} bilderojn larĝa",
"error.file.mime.differs": "La alŝutata dosiero devas havi la saman MIME-tipon \"{mime}\"",
"error.file.mime.forbidden": "La MIME-tipo \"{mime}\" ne povas esti uzata ĉi tie",
"error.file.mime.invalid": "Nevalida MIME-tipo: {mime}",
"error.file.mime.missing": "La MIME-tipo for \"{filename}\" ne estas detektebla",
"error.file.minheight": "La bildo devas esti almenaŭ {height} bilderojn alta",
"error.file.minsize": "La dosiero estas tro malgranda",
"error.file.minwidth": "La bildo devas esti almenaŭ {width} bilderojn larĝa",
"error.file.name.missing": "La dosiernomo ne rajtas esti malplena",
"error.file.notFound": "La dosiero \"{filename}\" ne troveblas",
"error.file.orientation": "La orientiĝo de la bildo devas esti \"{orientation}\"",
"error.file.type.forbidden": "Vi ne rajtas alŝuti dosiertipon {type}",
"error.file.type.invalid": "Nevalida dosiertipo: {type}",
"error.file.undefined": "La dosiero ne troveblas",
"error.form.incomplete": "Bonvolu korekti ĉiujn erarojn en formularo...",
"error.form.notSaved": "Ne eblis konservi la formularon",
"error.language.code": "Bonvolu entajpi validan kodon por la lingvo",
"error.language.duplicate": "La lingvo jam ekzistas",
"error.language.name": "Bonvolu entajpi validan nomon por la lingvo",
"error.language.notFound": "La lingvo ne troveblas",
"error.layout.validation.block": "Estas eraro en bloko {blockIndex}, en blokaranĝo {layoutIndex}",
"error.layout.validation.settings": "Estas eraro en la agordoj de blokaranĝo {index}",
"error.license.format": "Bonvolu entajpi validan kodon de permisilo",
"error.license.email": "Bonvolu entajpi validan retpoŝtadreson",
"error.license.verification": "Ne eblis kontroli la permisilon",
"error.offline": "La panelo estas ĉi-momente nekonektita",
"error.page.changeSlug.permission": "Vi ne rajtas ŝanĝi la URL-nomon de \"{slug}\"",
"error.page.changeStatus.incomplete": "La paĝo havas erarojn, kaj tiel ne povas esti publikigita",
"error.page.changeStatus.permission": "La paĝstato ne estas ŝanĝebla",
"error.page.changeStatus.toDraft.invalid": "Ne eblas konverti la paĝon \"{slug}\" al malneto",
"error.page.changeTemplate.invalid": "Ne eblas ŝanĝi la ŝablonon de la paĝo \"{slug}\"",
"error.page.changeTemplate.permission": "Vi ne rajtas ŝanĝi la ŝablonon de \"{slug}\"",
"error.page.changeTitle.empty": "La titolo ne rajtas esti malplena",
"error.page.changeTitle.permission": "Vi ne rajtas ŝanĝi la titolon de \"{slug}\"",
"error.page.create.permission": "Vi ne rajtas krei \"{slug}\"",
"error.page.delete": "Ne eblas forigi la paĝon \"{slug}\"",
"error.page.delete.confirm": "Bonvolu entajpi la titolon de la paĝo for konfirmi",
"error.page.delete.hasChildren": "Ne eblas forigi la paĝon ĉar ĝi havas subpaĝojn",
"error.page.delete.permission": "Vi ne rajtas forigi \"{slug}\"",
"error.page.draft.duplicate": "Malneto uzanta la URL-nomon \"{slug}\" jam ekzistas",
"error.page.duplicate": "Paĝo uzanta la URL-nomon \"{slug}\" jam ekzistas",
"error.page.duplicate.permission": "Vi ne rajtas duobligi \"{slug}\"",
"error.page.notFound": "La paĝo \"{slug}\" ne troveblas",
"error.page.num.invalid": "Bonvolu entajpi validan ord-numeron. Numeroj devas esti pozitivaj.",
"error.page.slug.invalid": "Bonvolu entajpi validan URL-nomon",
"error.page.slug.maxlength": "URL-nomo devas esti malpli ol \"{length}\" literojn longa",
"error.page.sort.permission": "Ne eblas ordigi la paĝon \"{slug}\" ",
"error.page.status.invalid": "Bonvolu elekti validan paĝstaton",
"error.page.undefined": "La paĝo ne estas trovebla",
"error.page.update.permission": "Vi ne rajtas ĝisdatigi \"{slug}\"",
"error.section.files.max.plural": "Vi devas aldoni maksimume {max} dosierojn al sekcio \"{section}\"",
"error.section.files.max.singular": "Vi devas aldoni maksimume unu dosieron al sekcio \"{section}\"",
"error.section.files.min.plural": "La sekcio \"{section}\" bezonas almenaŭ {min} dosierojn",
"error.section.files.min.singular": "La sekcio \"{section}\" bezonas almenaŭ unu dosieron",
"error.section.pages.max.plural": "Vi devas aldoni maksimume {max} paĝojn al sekcio \"{section}\"",
"error.section.pages.max.singular": "Vi devas aldoni maksimume unu paĝon al sekcio \"{section}\"",
"error.section.pages.min.plural": "La sekcio \"{section}\" bezonas almenaŭ {min} paĝojn",
"error.section.pages.min.singular": "La sekcio \"{section}\" bezonas almenaŭ unu paĝon",
"error.section.notLoaded": "Ne eblis ŝarĝi la sekcion \"{section}\"",
"error.section.type.invalid": "La sekcia tipo \"{type}\" ne estas valida",
"error.site.changeTitle.empty": "La titolo ne rajtas esti malplena",
"error.site.changeTitle.permission": "Vi ne rajtas ŝanĝi la titolon de la retejo",
"error.site.update.permission": "Vi ne rajtas ĝisdatigi la retejon",
"error.template.default.notFound": "La defaŭlta ŝablono ne ekzistas",
"error.user.changeEmail.permission": "Vi ne rajtas ŝanĝi la retpoŝtadreson de la uzanto \"{name}\"",
"error.user.changeLanguage.permission": "Vi ne rajtas ŝanĝi la lingvon de la uzanto \"{name}\"",
"error.user.changeName.permission": "Vi ne rajtas ŝanĝi la nomon de la uzanto \"{name}\"",
"error.user.changePassword.permission": "Vi ne rajtas ŝanĝi la pasvorton de la uzanto \"{name}\"",
"error.user.changeRole.lastAdmin": "Ne eblas ŝanĝi la rolon de la lasta administranto",
"error.user.changeRole.permission": "Vi ne rajtas ŝanĝi la rolon de la uzanto \"{name}\"",
"error.user.changeRole.toAdmin": "Vi ne rajtas promocii uzanton al rolo 'administranto'",
"error.user.create.permission": "Vi ne rajtas krei ĉi-tiun uzanton",
"error.user.delete": "Ne eblas forigi uzanton \"{name}\"",
"error.user.delete.lastAdmin": "Ne eblas forigi la lastan administranton",
"error.user.delete.lastUser": "Ne eblas forigi la lastan uzanton",
"error.user.delete.permission": "Vi ne rajtas forigi la uzanton \"{name}\"",
"error.user.duplicate": "Jam ekzistas uzanto kies retpoŝtadreso estas \"{email}\"",
"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.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",
"error.user.password.wrong": "Malĝusta pasvorto",
"error.user.role.invalid": "Bonvolu entajpi validan rolon",
"error.user.undefined": "La uzanto ne troveblas",
"error.user.update.permission": "Vi ne rajtas ĝisdatigi la uzanton \"{name}\"",
"error.validation.accepted": "Bonvolu konfirmi",
"error.validation.alpha": "Bonvolu entajpi nur literojn inter a-z",
"error.validation.alphanum": "Bonvolu entajpi nur aŭ literojn inter a-z aũ numerojn inter 0-9",
"error.validation.between": "Bonvolu entajpi valoron inter \"{min}\" kaj \"{max}\"",
"error.validation.boolean": "Bonvolu konfirmi aŭ malkonfirmi",
"error.validation.contains": "Bonvolu entajpi valoron kiu enhavas \"{needle}\"",
"error.validation.date": "Bonvolu entajpi validan daton",
"error.validation.date.after": "Bonvolu entajpi daton post {date}",
"error.validation.date.before": "Bonvolu entajpi daton antaũ {date}",
"error.validation.date.between": "Bonvolu entajpi daton inter {min} kaj {max}",
"error.validation.denied": "Bonvolu malkonfirmi",
"error.validation.different": "La valoro ne rajtas esti \"{other}\"",
"error.validation.email": "Bonvolu entajpi validan retpoŝtadreson",
"error.validation.endswith": "La valoro devas finiĝi per \"{end}\"",
"error.validation.filename": "Bonvolu entajpi validan dosiernomon",
"error.validation.in": "Bonvolu entajpi unu el la sekvaj: ({in})",
"error.validation.integer": "Bonvolu entajpi validan entjeron",
"error.validation.ip": "Bonvolu entajpi validan IP-adreson",
"error.validation.less": "Bonvolu entajpi valoron malpli ol {max}",
"error.validation.match": "La valoro ne kongruas al la atendata ŝablono",
"error.validation.max": "Bonvolu entajpi valoron egalan al aũ malpli ol {max}",
"error.validation.maxlength": "Bonvolu entajpi pli mallongan valoron (maksimume {max} literojn)",
"error.validation.maxwords": "Bonvolu entajpi maksimume {max} vorto(j)n",
"error.validation.min": "Bonvolu entajpi valoron egalan al aŭ pli granda ol {min}",
"error.validation.minlength": "Bonvolu entajpi pli longan valoron (minimume {min} literojn)",
"error.validation.minwords": "Bonvolu entajpi almenaŭ {min} vorto(j)n",
"error.validation.more": "Bonvolu entajpi valoron pli grandan ol {min}",
"error.validation.notcontains": "Bonvolu entajpi valoron kiu ne enhavas \"{needle}\"",
"error.validation.notin": "Bonvolu entajpi neniu ajn el la sekvaj: ({notin})",
"error.validation.option": "Bonvolu fari validan elekton",
"error.validation.num": "Bonvolu entajpi validan numeron",
"error.validation.required": "Bonvolu entajpi ion",
"error.validation.same": "Bonvolu entajpi \"{other}\"",
"error.validation.size": "La grando de la valoro devas esti \"{size}\"",
"error.validation.startswith": "La valoro devas komenciĝi per \"{start}\"",
"error.validation.time": "Bonvolu entajpi validan horaron",
"error.validation.time.after": "Bonvolu entajpi horaron post {time}",
"error.validation.time.before": "Bonvolu entajpi horaron antaŭ {time}",
"error.validation.time.between": "Bonvolu entajpi horaron inter {min} kaj {max}",
"error.validation.url": "Bonvolu entajpi validan URL",
"expand": "Etendi",
"expand.all": "Etendi ĉiujn",
"field.required": "La kampo ne rajtas esti malplena",
"field.blocks.changeType": "Ŝanĝi tipon",
"field.blocks.code.name": "Kodo",
"field.blocks.code.language": "Lingvo",
"field.blocks.code.placeholder": "Via kodo ...",
"field.blocks.delete.confirm": "Ĉu vi certe volas forigi ĉi tiun blokon?",
"field.blocks.delete.confirm.all": "Ĉu vi certe volas forigi ĉiujn blokojn?",
"field.blocks.delete.confirm.selected": "Ĉu vi certe volas forigi la elektitajn blokojn?",
"field.blocks.empty": "Ankoraŭ neniu bloko",
"field.blocks.fieldsets.label": "Bonvolu elekti tipon de bloko ...",
"field.blocks.fieldsets.paste": "Premu <kbd>{{ shortcut }}</kbd>por alglui/importi blokojn el via tondujo",
"field.blocks.gallery.name": "Galerio",
"field.blocks.gallery.images.empty": "Ankoraŭ neniu bildo",
"field.blocks.gallery.images.label": "Bildoj",
"field.blocks.heading.level": "Nivelo",
"field.blocks.heading.name": "Titolo",
"field.blocks.heading.text": "Teksto",
"field.blocks.heading.placeholder": "Titolo ...",
"field.blocks.image.alt": "Alternativa titolo",
"field.blocks.image.caption": "Apudskribo",
"field.blocks.image.crop": "Stuci",
"field.blocks.image.link": "Ligilo",
"field.blocks.image.location": "Loko",
"field.blocks.image.name": "Bildo",
"field.blocks.image.placeholder": "Elekti bildon",
"field.blocks.image.ratio": "Proporcio",
"field.blocks.image.url": "URL de la bildo",
"field.blocks.line.name": "Linio",
"field.blocks.list.name": "Listo",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Teksto",
"field.blocks.markdown.placeholder": "Markdown ...",
"field.blocks.quote.name": "Citaĵo",
"field.blocks.quote.text.label": "Teksto",
"field.blocks.quote.text.placeholder": "Citaĵo ...",
"field.blocks.quote.citation.label": "Citaĵo",
"field.blocks.quote.citation.placeholder": "de ...",
"field.blocks.text.name": "Teksto",
"field.blocks.text.placeholder": "Teksto ...",
"field.blocks.video.caption": "Apudskribo",
"field.blocks.video.name": "Videâjo",
"field.blocks.video.placeholder": "Entajpi URL de videaĵo",
"field.blocks.video.url.label": "Video-URL",
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Ankoraŭ neniu dosiero elektita",
"field.layout.delete": "Forigi blokaranĝo",
"field.layout.delete.confirm": "Ĉu vi certe volas forigi ĉi tiun blokaranĝon?",
"field.layout.empty": "Ankoraŭ neniu vico",
"field.layout.select": "Elekti blokaranĝon",
"field.pages.empty": "Ankoraŭ neniu paĝo elektita",
"field.structure.delete.confirm": "Ĉu vi certe volas forigi ĉi tiun vicon?",
"field.structure.empty": "Ankoraŭ neniu enigo",
"field.users.empty": "Ankoraŭ neniu uzanto elektita",
"file.blueprint": "Ĉi tiu dosiero ankoraŭ havas neniun planon. Vi povas difini planon ĉe <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "Ĉu vi certe vollas forigi <br><strong>{filename}</strong>?",
"file.sort": "Ŝanĝi ordon",
"files": "Dosieroj",
"files.empty": "Ankoraŭ neniu dosiero",
"hide": "Kaŝi",
"hour": "Horo",
"import": "Importi",
"insert": "Enmeti",
"insert.after": "Enmeti post",
"insert.before": "Enmeti antaŭ",
"install": "Instali",
"installation": "Instalado",
"installation.completed": "La panelo estas instalita",
"installation.disabled": "La instalilo de la panelo estas norme malebligita en publikaj serviloj. Bonvolu uzi la instalilon en via loka komputilo, aŭ ebligu ĝin per la opcio <code>panel.install</code>",
"installation.issues.accounts": "La dosierujo <code>/site/accounts</code> ne ekzistas, aŭ ne estas skribebla",
"installation.issues.content": "La dosierujo <code>/content</code> ne ekzistas, aŭ ne estas skribebla",
"installation.issues.curl": "La kromprogramo <code>CURL</code> estas deviga",
"installation.issues.headline": "Ne eblas instali la panelon",
"installation.issues.mbstring": "La kromprogramo <code>MB String</code> estas deviga",
"installation.issues.media": "La dosierujo <code>/media</code> ne ekzistas, aũ ne estas skribebla",
"installation.issues.php": "Nepre uzu <code>PHP 7+</code>",
"installation.issues.server": "Kirby bezonas <code>Apache</code>, <code>Nginx</code> aŭ <code>Caddy</code>",
"installation.issues.sessions": "La dosierujo <code>/site/sessions</code> ne ekzistas, aŭ ne estas skribebla",
"language": "Lingvo",
"language.code": "Kodo",
"language.convert": "Farigi defaŭlton",
"language.convert.confirm": "<p>Ĉu vi certe volas konverti <strong>{name}</strong> al la defaŭlta lingvo? Ĉi tion vi ne povos malfari.</p> <p>Se <strong>{name}</strong> havas netradukitan enhavon, tiuj tekstoj nun ne havos defaŭlton, kaj simple ne aperos en via retejo.</p>",
"language.create": "Aldoni novan lingvon",
"language.delete.confirm": "Ĉu vi certe volas forigi la lingvon <strong>{name}</strong>, inkluzive de ĉiuj tradukoj? Vi ne povos malfari tion!",
"language.deleted": "La lingvo estas forigita",
"language.direction": "Direkto de leĝado",
"language.direction.ltr": "Dekstren",
"language.direction.rtl": "Maldesktren",
"language.locale": "Lokaĵaro de PHP",
"language.locale.warning": "Vi uzas tajloritan agordon de lokaĵaro. Bonvolu ŝanĝi viajn agordojn laŭmende en la lingva dosiero ĉe /site/languages",
"language.name": "Nomo",
"language.updated": "La lingvo estas ĝisdatigita",
"languages": "Lingvoj",
"languages.default": "Defaŭlta lingvo",
"languages.empty": "Ankoraũ estas neniu lingvo",
"languages.secondary": "Kromlingvoj",
"languages.secondary.empty": "Ankoraŭ estas neniu kromlingvoj",
"license": "Permisilo",
"license.buy": "Aĉeti permisilon",
"license.register": "Registriĝi",
"license.register.help": "Vi ricevis vian kodon de permisilo retpoŝte, post aĉeti ĝin. Bonvolu kopii kaj alglui ĝin por registriĝi.",
"license.register.label": "Bonvolu entajpi vian kodon de permisilo",
"license.register.success": "Dankon pro subteni Kirby",
"license.unregistered": "Ĉi tiu estas neregistrita kopio de Kirby",
"link": "Ligilo",
"link.text": "Ligila teksto",
"loading": "Ŝargante",
"lock.unsaved": "Nekonservitaj ŝanĝoj",
"lock.unsaved.empty": "Ĉiuj ŝanĝoj estas nun konservitaj",
"lock.isLocked": "Nekonservitaj ŝanĝoj de <strong>{email}</strong>",
"lock.file.isLocked": "La dosiero estas ĉi-momente redaktata de {email}, kaj tial ne povas esti ŝanĝita",
"lock.page.isLocked": "La paĝo estas ĉi-momente redaktata de {email}, kaj tial ne povas esti ŝanĝita",
"lock.unlock": "Malŝlosi",
"lock.isUnlocked": "Viaj nekonservitaj ŝanĝoj estas ŝanĝitaj de alia uzanto. Vi povas elŝuti dosieron kun viaj ŝanĝoj por permane kunfandi ilin.",
"login": "Ensaluti",
"login.code.label.login": "Ensaluta kodo",
"login.code.label.password-reset": "Kodo por restarigi pasvorton",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "Se via retpoŝtadreso estas enregistrita, via kodo estis sendita retpoŝte",
"login.email.login.body": "Saluton {user.nameOrEmail},\n\nVi petis ensalutan kodon por la panelo de la retejo {site}.\nLa sekvanta kodo validos dum {timeout} minutoj:\n\n{code}\n\nSe vi ne petis ensalutan kodon, bonvolu ignori ĉi tiun mesaĝon, aŭ kontaktu vian sistem-administranton se vi havas demandojn.\nPro sekureco, bonvolu NE plusendi ĉi tiun mesaĝon.",
"login.email.login.subject": "Via ensaluta kodo",
"login.email.password-reset.body": "Saluton {user.nameOrEmail},\n\nVi petis kodon por restarigi vian pasvorton por la panelo de la retejo {site}.\nLa sekvanta kodo validos dum {timeout} minutoj:\n\n{code}\n\nSe vi ne petis kodon por restarigi vian pasvorton, bonvolu ignori ĉi tiun mesaĝon, aŭ kontaktu vian sistem-administranton se vi havas demandojn.\nPro sekureco, bonvolu NE plusendi ĉi tiun mesaĝon.",
"login.email.password-reset.subject": "Kodo por restarigi pasvorton",
"login.remember": "Daŭre tenu min ensalutita",
"login.reset": "Restarigi pasvorton",
"login.toggleText.code.email": "Ensaluti retpoŝte",
"login.toggleText.code.email-password": "Ensaluti per pasvorto",
"login.toggleText.password-reset.email": "Ĉu vi forgesis vian pasvorton?",
"login.toggleText.password-reset.email-password": "← Reen al ensaluto",
"logout": "Elsaluti",
"menu": "Menuo",
"meridiem": "atm/ptm",
"mime": "Tipo de aŭdvidaĵo",
"minutes": "Minutoj",
"month": "Monato",
"months.april": "aprilo",
"months.august": "aŭgusto",
"months.december": "decembro",
"months.february": "februaro",
"months.january": "januaro",
"months.july": "julio",
"months.june": "junio",
"months.march": "marto",
"months.may": "majo",
"months.november": "novembro",
"months.october": "oktobro",
"months.september": "septembro",
"more": "Pli",
"name": "Nomo",
"next": "Sekve",
"no": "ne",
"off": "ne",
"on": "jes",
"open": "Malfermi",
"open.newWindow": "Malfermi novan fenestron",
"options": "Opcioj",
"options.none": "Neniu opcio",
"orientation": "Orientiĝo",
"orientation.landscape": "Horizontala",
"orientation.portrait": "Vertikala",
"orientation.square": "Kvadrata",
"page.blueprint": "Ĉi tiu paĝo ankoraŭ ne havas planon. Vi povas difini planon ĉe <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Ŝanĝi URL",
"page.changeSlug.fromTitle": "Krei el titolo",
"page.changeStatus": "Ŝanĝi staton",
"page.changeStatus.position": "Bonvolu elekti ordon",
"page.changeStatus.select": "Elekti novan staton",
"page.changeTemplate": "Ŝanĝi ŝablonon",
"page.delete.confirm": "Ĉu vi certe volas forigi <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Ĉi tiu paĝo havas subpaĝojn</strong>. <br>Ĉiuj subpaĝoj estos ankaŭ forigitaj.",
"page.delete.confirm.title": "Entajpu la titolon de la paĝo por konfirmi",
"page.draft.create": "Krei malneton",
"page.duplicate.appendix": "Kopii",
"page.duplicate.files": "Kopii dosierojn",
"page.duplicate.pages": "Kopii paĝojn",
"page.sort": "Ŝanĝi ordon",
"page.status": "Stato",
"page.status.draft": "Malneto",
"page.status.draft.description": "La paĝo estas malneto, kaj nur atingebla de ensalutitaj redaktantoj, aŭ per sekreta ligilo",
"page.status.listed": "Publika",
"page.status.listed.description": "La paĝo estas publika por ĉiuj ajn",
"page.status.unlisted": "Nelistata",
"page.status.unlisted.description": "La paĝo estas atingebla nur per URL",
"pages": "Paĝoj",
"pages.empty": "Ankoraŭ neniu paĝo",
"pages.status.draft": "Malnetoj",
"pages.status.listed": "Publikigita",
"pages.status.unlisted": "Nelistata",
"pagination.page": "Paĝo",
"password": "Pasvorto",
"paste": "Alglui",
"paste.after": "Alglui post",
"pixel": "Pikselo",
"plugins": "Kromprogramoj",
"prev": "Antaŭe",
"preview": "Antaŭrigardi",
"remove": "Forigi",
"rename": "Ŝanĝi nomon",
"replace": "Anstataŭi",
"retry": "Provi denove",
"revert": "Malfari",
"revert.confirm": "Ĉu vi certe volas <strong>forigi ĉiujn nekonservitajn ŝanĝojn</strong>?",
"role": "Rolo",
"role.admin.description": "La administranto havas ĉiujn rajtojn",
"role.admin.title": "Administranto",
"role.all": "Ĉiuj",
"role.empty": "Neniu uzanto havas ĉi tiun rolon",
"role.description.placeholder": "Neniu priskribo",
"role.nobody.description": "Ĉi tiu estas retrodefaŭlta rolo sen permesoj",
"role.nobody.title": "Neniu",
"save": "Konservi",
"search": "Serĉi",
"search.min": "Entajpu {min} literojn por serĉi",
"search.all": "Montri ĉiujn",
"search.results.none": "Neniu rezulto",
"section.required": "La sekcio estas deviga",
"select": "Elekti",
"settings": "Agordoj",
"show": "Montri",
"size": "Grando",
"slug": "URL-nomo",
"sort": "Ordigi",
"title": "Titolo",
"template": "Ŝablono",
"today": "Hodiaŭ",
"server": "Servilo",
"site.blueprint": "La retejo ankoraŭ ne havas planon. Vi povas difini planon ĉe <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Kodo",
"toolbar.button.bold": "Grasa",
"toolbar.button.email": "Retpoŝto",
"toolbar.button.headings": "Titoloj",
"toolbar.button.heading.1": "Titolo 1",
"toolbar.button.heading.2": "Titolo 2",
"toolbar.button.heading.3": "Titolo 3",
"toolbar.button.heading.4": "Titolo 4",
"toolbar.button.heading.5": "Titolo 5",
"toolbar.button.heading.6": "Titolo 6",
"toolbar.button.italic": "Kursiva",
"toolbar.button.file": "Dosiero",
"toolbar.button.file.select": "Elekti dosieron",
"toolbar.button.file.upload": "Alŝuti dosieron",
"toolbar.button.link": "Ligilo",
"toolbar.button.paragraph": "Paragrafo",
"toolbar.button.strike": "Trastrekita",
"toolbar.button.ol": "Numerita listo",
"toolbar.button.underline": "Substrekita",
"toolbar.button.ul": "Bula listo",
"translation.author": "Teamo Kirby",
"translation.direction": "demaldekstre",
"translation.name": "Esperanto",
"translation.locale": "eo",
"upload": "Alŝuti",
"upload.error.cantMove": "Ne eblis movi la alŝutita dosiero",
"upload.error.cantWrite": "Ne eblis registri la dosieron en la diskon",
"upload.error.default": "Ne eblis alŝuti la dosieron",
"upload.error.extension": "Alŝutado haltita pro la dosiersufikso",
"upload.error.formSize": "La alŝutita dosiero estas pli granda ol la direktivo MAX_FILE_SIZE indikata en la formularo",
"upload.error.iniPostSize": "La alŝutita dosiero estas pli granda ol la direktivo post_max_size de php.ini",
"upload.error.iniSize": "La alŝutita dosiero estas pli granda ol la direktivo upload_max_filesize de php.ini",
"upload.error.noFile": "Neniu dosiero alŝutita",
"upload.error.noFiles": "Neniuj dosieroj alŝutitaj",
"upload.error.partial": "La dosiero estis nur parte alŝutita",
"upload.error.tmpDir": "Mankas provizora dosierujo",
"upload.errors": "Eraro",
"upload.progress": "Alŝutante...",
"url": "URL",
"url.placeholder": "https://ekzemplo.com",
"user": "Uzanto",
"user.blueprint": "Vi povas difini pluajn sekciojn kaj kampojn de formularo por ĉi tiu rolo de uzanto ĉe <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Ŝanĝi retpoŝtadreson",
"user.changeLanguage": "Ŝanĝi lingvon",
"user.changeName": "Ŝangi la nomon de la uzanto",
"user.changePassword": "Ŝanĝi pasvorton",
"user.changePassword.new": "Nova pasvorto",
"user.changePassword.new.confirm": "Konfirmi la novan pasvorton...",
"user.changeRole": "Ŝanĝi rolon",
"user.changeRole.select": "Elekti novan rolon",
"user.create": "Aldoni novan uzanton",
"user.delete": "Forigi ĉi tiun uzanton",
"user.delete.confirm": "Ĉu vi certe volas forigi <br><strong>{email}</strong>?",
"users": "Uzantoj",
"version": "Versio",
"view.account": "Via konto",
"view.installation": "Instalado",
"view.languages": "Lingvoj",
"view.resetPassword": "Restarigi pasvorton",
"view.site": "Retejo",
"view.system": "Sistemo",
"view.users": "Uzantoj",
"welcome": "Bonvenon",
"year": "Jaro",
"yes": "jes"
}

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Change your name",
"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": "Agregar",
"author": "Author",
"avatar": "Foto de perfil",
"back": "Regresar",
"cancel": "Cancelar",
@ -9,6 +14,7 @@
"collapse": "Collapse",
"collapse.all": "Collapse All",
"copy": "Copiar",
"copy.all": "Copy all",
"create": "Crear",
"date": "Fecha",
@ -23,24 +29,28 @@
"days.tue": "Mar",
"days.wed": "Mi\u00e9",
"debugging": "Debugging",
"delete": "Eliminar",
"delete.all": "Eliminar todos",
"dimensions": "Dimensiones",
"disabled": "Desabilitado",
"discard": "Descartar",
"download": "Descargar",
"duplicate": "Duplicar",
"edit": "Editar",
"expand": "Expandir",
"expand.all": "Expandir todo",
"dialog.files.empty": "No has seleccionado ningún archivo",
"dialog.pages.empty": "No has seleccionado ninguna página",
"dialog.users.empty": "No has seleccionado ningún usuario",
"dimensions": "Dimensiones",
"disabled": "Desabilitado",
"discard": "Descartar",
"download": "Descargar",
"duplicate": "Duplicar",
"edit": "Editar",
"email": "Correo Electrónico",
"email.placeholder": "correo@ejemplo.com",
"environment": "Environment",
"error.access.code": "Código inválido",
"error.access.login": "Ingreso inválido",
"error.access.panel": "No tienes permitido acceder al panel",
@ -92,6 +102,7 @@
"error.language.code": "Por favor introduce un código válido para el idioma",
"error.language.duplicate": "El idioma ya existe",
"error.language.name": "Por favor introduce un nombre válido para el idioma",
"error.language.notFound": "The language could not be found",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
@ -100,6 +111,8 @@
"error.license.email": "Por favor ingresa un correo electrónico valido",
"error.license.verification": "La licencia no pude ser verificada",
"error.offline": "The Panel is currently offline",
"error.page.changeSlug.permission": "No está permitido cambiar el apéndice de URL para \"{slug}\".",
"error.page.changeStatus.incomplete": "La página tiene errores y no puede ser publicada.",
"error.page.changeStatus.permission": "El estado de esta página no se puede cambiar.",
@ -165,6 +178,7 @@
"error.user.password.undefined": "El usuario no tiene contraseña",
"error.user.password.wrong": "Wrong password",
"error.user.role.invalid": "Por favor ingresa un rol valido",
"error.user.undefined": "El usuario no pudo ser encontrado",
"error.user.update.permission": "No tienes permiso para actualizar al usuario \"{name}\"",
"error.validation.accepted": "Por favor, confirma",
@ -208,6 +222,9 @@
"error.validation.time.between": "Please enter a time between {min} and {max}",
"error.validation.url": "Por favor ingresa un URL válido",
"expand": "Expandir",
"expand.all": "Expandir todo",
"field.required": "Este campo es requerido",
"field.blocks.changeType": "Change type",
"field.blocks.code.name": "Código",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Do you really want to delete the selected blocks?",
"field.blocks.empty": "No blocks yet",
"field.blocks.fieldsets.label": "Please select a block type …",
"field.blocks.fieldsets.paste": "Press <kbd>{{ shortcut }}</kbd> to paste/import blocks from your clipboard",
"field.blocks.gallery.name": "Gallery",
"field.blocks.gallery.images.empty": "No images yet",
"field.blocks.gallery.images.label": "Images",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Select an image",
"field.blocks.image.ratio": "Ratio",
"field.blocks.image.url": "Image URL",
"field.blocks.line.name": "Line",
"field.blocks.list.name": "List",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Text",
@ -263,7 +282,7 @@
"field.structure.empty": "A\u00fan no existen entradas.",
"field.users.empty": "Aún no ha seleccionado ningún usuario",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "\u00bfEst\u00e1s seguro que deseas eliminar este archivo?",
"file.sort": "Change position",
@ -272,6 +291,7 @@
"hide": "Hide",
"hour": "Hora",
"import": "Import",
"insert": "Insertar",
"insert.after": "Insert after",
"insert.before": "Insert before",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Password reset code",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "If your email address is registered, the requested code was sent via email.",
"login.email.login.body": "Hi {user.nameOrEmail},\n\nYou recently requested a login code for the Kirby Panel.\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": "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.subject": "Your login code",
"login.email.password-reset.body": "Hi {user.nameOrEmail},\n\nYou recently requested a password reset code for the Kirby Panel.\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": "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.subject": "Your password reset code",
"login.remember": "Mantener mi sesión iniciada",
"login.reset": "Reset password",
@ -385,7 +405,7 @@
"orientation.portrait": "Retrato",
"orientation.square": "Diapositiva",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Cambiar URL",
"page.changeSlug.fromTitle": "Crear a partir del t\u00edtulo",
"page.changeStatus": "Cambiar estado",
@ -417,7 +437,10 @@
"pagination.page": "Página",
"password": "Contrase\u00f1a",
"paste": "Paste",
"paste.after": "Paste after",
"pixel": "Pixel",
"plugins": "Plugins",
"prev": "Anterior",
"preview": "Preview",
"remove": "Eliminar",
@ -454,6 +477,8 @@
"template": "Plantilla",
"today": "Hoy",
"server": "Server",
"site.blueprint": "The site has no blueprint yet. You can define the setup in <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Código",
@ -463,11 +488,15 @@
"toolbar.button.heading.1": "Encabezado 1",
"toolbar.button.heading.2": "Encabezado 2",
"toolbar.button.heading.3": "Encabezado 3",
"toolbar.button.heading.4": "Heading 4",
"toolbar.button.heading.5": "Heading 5",
"toolbar.button.heading.6": "Heading 6",
"toolbar.button.italic": "Texto en It\u00e1licas",
"toolbar.button.file": "Archivo",
"toolbar.button.file.select": "Selecciona un archivo",
"toolbar.button.file.upload": "Sube un archivo",
"toolbar.button.link": "Enlace",
"toolbar.button.paragraph": "Paragraph",
"toolbar.button.strike": "Strike-through",
"toolbar.button.ol": "Lista en orden",
"toolbar.button.underline": "Underline",
@ -497,7 +526,7 @@
"url.placeholder": "https://ejemplo.com",
"user": "Usuario",
"user.blueprint": "Puedes definir secciones adicionales y campos de formulario para este rol de usuario en <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "You can define additional sections and form fields for this user role in <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Cambiar correo electrónico",
"user.changeLanguage": "Cambiar idioma",
"user.changeName": "Renombrar este usuario",
@ -516,9 +545,10 @@
"view.account": "Tu cuenta",
"view.installation": "Instalaci\u00f3n",
"view.languages": "Idiomas",
"view.resetPassword": "Reset password",
"view.settings": "Ajustes",
"view.site": "Sitio",
"view.system": "System",
"view.users": "Usuarios",
"welcome": "Bienvenido",

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Change your name",
"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": "Añadir",
"author": "Author",
"avatar": "Foto de perfil",
"back": "Atrás",
"cancel": "Cancelar",
@ -9,6 +14,7 @@
"collapse": "Collapse",
"collapse.all": "Collapse All",
"copy": "Copiar",
"copy.all": "Copy all",
"create": "Crear",
"date": "Fecha",
@ -23,24 +29,28 @@
"days.tue": "Ma",
"days.wed": "Mi",
"debugging": "Debugging",
"delete": "Borrar",
"delete.all": "Delete all",
"dimensions": "Dimensiones",
"disabled": "Desabilitado",
"discard": "Descartar",
"download": "Descargar",
"duplicate": "Duplicar",
"edit": "Editar",
"expand": "Expand",
"expand.all": "Expand All",
"dialog.files.empty": "No se ha seleccionado ningún archivo",
"dialog.pages.empty": "No se ha seleccionado ninguna página",
"dialog.users.empty": "No se ha seleccionado ningún usuario",
"dimensions": "Dimensiones",
"disabled": "Desabilitado",
"discard": "Descartar",
"download": "Descargar",
"duplicate": "Duplicar",
"edit": "Editar",
"email": "Correo electrónico",
"email.placeholder": "correo@ejemplo.com",
"environment": "Environment",
"error.access.code": "Invalid code",
"error.access.login": "Ingreso inválido",
"error.access.panel": "No estás autorizado para acceder al panel",
@ -92,6 +102,7 @@
"error.language.code": "Please enter a valid code for the language",
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.language.notFound": "The language could not be found",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
@ -100,6 +111,8 @@
"error.license.email": "Por favor, introduce un correo electrónico válido",
"error.license.verification": "The license could not be verified",
"error.offline": "The Panel is currently offline",
"error.page.changeSlug.permission": "No está permitido cambiar el apéndice de URL para \"{slug}\"",
"error.page.changeStatus.incomplete": "La página tiene errores y no puede ser publicada.",
"error.page.changeStatus.permission": "El estado de esta página no se puede cambiar",
@ -165,6 +178,7 @@
"error.user.password.undefined": "El usuario no tiene contraseña",
"error.user.password.wrong": "Wrong password",
"error.user.role.invalid": "Por favor ingrese un rol válido",
"error.user.undefined": "El usuario no puede ser encontrado",
"error.user.update.permission": "No tienes permitido actualizar al usuario \"{name}\"",
"error.validation.accepted": "Por favor, confirma",
@ -208,6 +222,9 @@
"error.validation.time.between": "Please enter a time between {min} and {max}",
"error.validation.url": "Por favor introduzca un URL válido",
"expand": "Expand",
"expand.all": "Expand All",
"field.required": "The field is required",
"field.blocks.changeType": "Change type",
"field.blocks.code.name": "Código",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Do you really want to delete the selected blocks?",
"field.blocks.empty": "No blocks yet",
"field.blocks.fieldsets.label": "Please select a block type …",
"field.blocks.fieldsets.paste": "Press <kbd>{{ shortcut }}</kbd> to paste/import blocks from your clipboard",
"field.blocks.gallery.name": "Gallery",
"field.blocks.gallery.images.empty": "No images yet",
"field.blocks.gallery.images.label": "Images",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Select an image",
"field.blocks.image.ratio": "Ratio",
"field.blocks.image.url": "Image URL",
"field.blocks.line.name": "Line",
"field.blocks.list.name": "List",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Text",
@ -263,7 +282,7 @@
"field.structure.empty": "Aún no hay entradas",
"field.users.empty": "Aún no hay usuarios seleccionados",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "¿Realmente quieres eliminar <br><strong>{filename}</strong>?",
"file.sort": "Change position",
@ -272,6 +291,7 @@
"hide": "Hide",
"hour": "Hora",
"import": "Import",
"insert": "Insertar",
"insert.after": "Insert after",
"insert.before": "Insert before",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Password reset code",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "If your email address is registered, the requested code was sent via email.",
"login.email.login.body": "Hi {user.nameOrEmail},\n\nYou recently requested a login code for the Kirby Panel.\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": "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.subject": "Your login code",
"login.email.password-reset.body": "Hi {user.nameOrEmail},\n\nYou recently requested a password reset code for the Kirby Panel.\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": "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.subject": "Your password reset code",
"login.remember": "Mantener sesión iniciada",
"login.reset": "Reset password",
@ -385,7 +405,7 @@
"orientation.portrait": "Retrato",
"orientation.square": "Cuadrado",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Cambiar URL",
"page.changeSlug.fromTitle": "Crear en base al título",
"page.changeStatus": "Cambiar estado",
@ -417,7 +437,10 @@
"pagination.page": "Página",
"password": "Contraseña",
"paste": "Paste",
"paste.after": "Paste after",
"pixel": "Pixel",
"plugins": "Plugins",
"prev": "Anterior",
"preview": "Preview",
"remove": "Eliminar",
@ -454,6 +477,8 @@
"template": "Plantilla",
"today": "Hoy",
"server": "Server",
"site.blueprint": "The site has no blueprint yet. You can define the setup in <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Código",
@ -463,11 +488,15 @@
"toolbar.button.heading.1": "Encabezado 1",
"toolbar.button.heading.2": "Encabezado 2",
"toolbar.button.heading.3": "Encabezado 3",
"toolbar.button.heading.4": "Heading 4",
"toolbar.button.heading.5": "Heading 5",
"toolbar.button.heading.6": "Heading 6",
"toolbar.button.italic": "Italica",
"toolbar.button.file": "Archivo",
"toolbar.button.file.select": "Seleccione un archivo",
"toolbar.button.file.upload": "Sube un archivo",
"toolbar.button.link": "Enlace",
"toolbar.button.paragraph": "Paragraph",
"toolbar.button.strike": "Strike-through",
"toolbar.button.ol": "Lista ordenada",
"toolbar.button.underline": "Underline",
@ -497,7 +526,7 @@
"url.placeholder": "https://ejemplo.com",
"user": "Usuario",
"user.blueprint": "Puede definir secciones adicionales y campos de formulario para este rol de usuario en <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "You can define additional sections and form fields for this user role in <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Cambiar correo electrónico",
"user.changeLanguage": "Cambiar idioma",
"user.changeName": "Renombrar a este usuario",
@ -516,9 +545,10 @@
"view.account": "Su cuenta",
"view.installation": "Instalación",
"view.languages": "Idiomas",
"view.resetPassword": "Reset password",
"view.settings": "Ajustes",
"view.site": "Sitio",
"view.system": "System",
"view.users": "Usuarios",
"welcome": "Bienvenido(a)",

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Change your name",
"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",
"author": "Author",
"avatar": "\u062a\u0635\u0648\u06cc\u0631 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644",
"back": "بازگشت",
"cancel": "\u0627\u0646\u0635\u0631\u0627\u0641",
@ -9,6 +14,7 @@
"collapse": "Collapse",
"collapse.all": "Collapse All",
"copy": "کپی",
"copy.all": "Copy all",
"create": "ایجاد",
"date": "تاریخ",
@ -23,24 +29,28 @@
"days.tue": "\u0633\u0647 \u0634\u0646\u0628\u0647",
"days.wed": "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
"debugging": "Debugging",
"delete": "\u062d\u0630\u0641",
"delete.all": "Delete all",
"dimensions": "ابعاد",
"disabled": "Disabled",
"discard": "\u0627\u0646\u0635\u0631\u0627\u0641",
"download": "Download",
"duplicate": "Duplicate",
"edit": "\u0648\u06cc\u0631\u0627\u06cc\u0634",
"expand": "Expand",
"expand.all": "Expand All",
"dialog.files.empty": "No files to select",
"dialog.pages.empty": "No pages to select",
"dialog.users.empty": "No users to select",
"dimensions": "ابعاد",
"disabled": "Disabled",
"discard": "\u0627\u0646\u0635\u0631\u0627\u0641",
"download": "Download",
"duplicate": "Duplicate",
"edit": "\u0648\u06cc\u0631\u0627\u06cc\u0634",
"email": "\u067e\u0633\u062a \u0627\u0644\u06a9\u062a\u0631\u0648\u0646\u06cc\u06a9",
"email.placeholder": "mail@example.com",
"environment": "Environment",
"error.access.code": "Invalid code",
"error.access.login": "اطلاعات ورودی نامعتبر است",
"error.access.panel": "شما اجازه دسترسی به پانل را ندارید",
@ -92,6 +102,7 @@
"error.language.code": "Please enter a valid code for the language",
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.language.notFound": "The language could not be found",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
@ -100,6 +111,8 @@
"error.license.email": "لطفا ایمیل صحیحی وارد کنید",
"error.license.verification": "The license could not be verified",
"error.offline": "The Panel is currently offline",
"error.page.changeSlug.permission": "شما امکان تغییر پسوند Url صفحه «{slug}» را ندارید",
"error.page.changeStatus.incomplete": "صفحه حاوی خطا است و قابل انتشار نیست",
"error.page.changeStatus.permission": "وضعیت صفحه جاری قابل تغییر نیست",
@ -165,6 +178,7 @@
"error.user.password.undefined": "کاربر فاقد گذرواژه است",
"error.user.password.wrong": "Wrong password",
"error.user.role.invalid": "لطفا نقش صحیحی وارد نمایید",
"error.user.undefined": "کاربر مورد نظر پیدا نشد",
"error.user.update.permission": "شما اجازه بروزرسانی کاربر «{name}» را ندارید",
"error.validation.accepted": "لطفا تایید کنید",
@ -208,6 +222,9 @@
"error.validation.time.between": "Please enter a time between {min} and {max}",
"error.validation.url": "لطفا آدرس URL صحیح وارد کنید",
"expand": "Expand",
"expand.all": "Expand All",
"field.required": "The field is required",
"field.blocks.changeType": "Change type",
"field.blocks.code.name": "کد",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Do you really want to delete the selected blocks?",
"field.blocks.empty": "No blocks yet",
"field.blocks.fieldsets.label": "Please select a block type …",
"field.blocks.fieldsets.paste": "Press <kbd>{{ shortcut }}</kbd> to paste/import blocks from your clipboard",
"field.blocks.gallery.name": "Gallery",
"field.blocks.gallery.images.empty": "No images yet",
"field.blocks.gallery.images.label": "Images",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Select an image",
"field.blocks.image.ratio": "Ratio",
"field.blocks.image.url": "Image URL",
"field.blocks.line.name": "Line",
"field.blocks.list.name": "List",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Text",
@ -263,7 +282,7 @@
"field.structure.empty": "\u0645\u0648\u0631\u062f\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f.",
"field.users.empty": "کاربری انتخاب نشده است",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "آیا واقعا می خواهید این فایل را حذف کنید؟<br><strong>{filename}</strong>",
"file.sort": "Change position",
@ -272,6 +291,7 @@
"hide": "Hide",
"hour": "ساعت",
"import": "Import",
"insert": "\u062f\u0631\u062c",
"insert.after": "Insert after",
"insert.before": "Insert before",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Password reset code",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "If your email address is registered, the requested code was sent via email.",
"login.email.login.body": "Hi {user.nameOrEmail},\n\nYou recently requested a login code for the Kirby Panel.\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": "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.subject": "Your login code",
"login.email.password-reset.body": "Hi {user.nameOrEmail},\n\nYou recently requested a password reset code for the Kirby Panel.\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": "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.subject": "Your password reset code",
"login.remember": "مرا به خاطر بسپار",
"login.reset": "Reset password",
@ -385,7 +405,7 @@
"orientation.portrait": "عمودی",
"orientation.square": "مربع",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"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.changeStatus": "تغییر وضعیت",
@ -417,7 +437,10 @@
"pagination.page": "صفحه",
"password": "\u06af\u0630\u0631\u0648\u0627\u0698\u0647",
"paste": "Paste",
"paste.after": "Paste after",
"pixel": "پیکسل",
"plugins": "Plugins",
"prev": "قبلی",
"preview": "Preview",
"remove": "حذف",
@ -454,6 +477,8 @@
"template": "\u0642\u0627\u0644\u0628 \u0635\u0641\u062d\u0647",
"today": "امروز",
"server": "Server",
"site.blueprint": "The site has no blueprint yet. You can define the setup in <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "کد",
@ -463,11 +488,15 @@
"toolbar.button.heading.1": "عنوان 1",
"toolbar.button.heading.2": "عنوان 2",
"toolbar.button.heading.3": "عنوان 3",
"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.file.select": "Select a file",
"toolbar.button.file.upload": "Upload a file",
"toolbar.button.link": "\u067e\u06cc\u0648\u0646\u062f",
"toolbar.button.paragraph": "Paragraph",
"toolbar.button.strike": "Strike-through",
"toolbar.button.ol": "لیست مرتب",
"toolbar.button.underline": "Underline",
@ -497,7 +526,7 @@
"url.placeholder": "https://example.com",
"user": "کاربر",
"user.blueprint": "شما می توانید قسمت‌های اضافی و فیلدهای فرم را برای این نقش کاربر در <strong>/site/blueprints/users/{role}.yml</strong> تعریف کنید",
"user.blueprint": "You can define additional sections and form fields for this user role in <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "تغییر ایمیل",
"user.changeLanguage": "تغییر زبان",
"user.changeName": "تغییر نام این کاربر",
@ -516,9 +545,10 @@
"view.account": "حساب کاربری شما",
"view.installation": "\u0646\u0635\u0628 \u0648 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc",
"view.languages": "زبان‌ها",
"view.resetPassword": "Reset password",
"view.settings": "تنظیمات",
"view.site": "سایت",
"view.system": "System",
"view.users": "\u06a9\u0627\u0631\u0628\u0631\u0627\u0646",
"welcome": "خوش آمدید",

View file

@ -1,14 +1,20 @@
{
"account.changeName": "Change your name",
"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": "Lis\u00e4\u00e4",
"author": "Author",
"avatar": "Profiilikuva",
"back": "Takaisin",
"cancel": "Peruuta",
"change": "Muuta",
"close": "Sulje",
"confirm": "Ok",
"collapse": "Collapse",
"collapse.all": "Collapse All",
"collapse": "Pienennä",
"collapse.all": "Pienennä kaikki",
"copy": "Kopioi",
"copy.all": "Copy all",
"create": "Luo",
"date": "Päivämäärä",
@ -23,25 +29,29 @@
"days.tue": "Ti",
"days.wed": "Ke",
"debugging": "Debugging",
"delete": "Poista",
"delete.all": "Delete all",
"dimensions": "Mitat",
"disabled": "Disabled",
"discard": "Hylkää",
"download": "Lataa",
"duplicate": "Kahdenna",
"edit": "Muokkaa",
"expand": "Expand",
"expand.all": "Expand All",
"delete.all": "Poista kaikki",
"dialog.files.empty": "Ei valittavissa olevia tiedostoja",
"dialog.pages.empty": "Ei valittavissa olevia sivuja",
"dialog.users.empty": "Ei valittavissa olevia käyttäjiä",
"dimensions": "Mitat",
"disabled": "Pois käytöstä",
"discard": "Hylkää",
"download": "Lataa",
"duplicate": "Kahdenna",
"edit": "Muokkaa",
"email": "S\u00e4hk\u00f6posti",
"email.placeholder": "nimi@osoite.fi",
"error.access.code": "Invalid code",
"environment": "Environment",
"error.access.code": "Väärä koodi",
"error.access.login": "Kirjautumistiedot eivät kelpaa",
"error.access.panel": "Sinulla ei ole oikeutta käyttää paneelia",
"error.access.view": "Sinulla ei ole oikeutta käyttää tätä osaa paneelista",
@ -51,13 +61,13 @@
"error.avatar.dimensions.invalid": "Profiilikuvan leveys ja korkeus voivat olla enintään 3000 pikseliä",
"error.avatar.mime.forbidden": "Profiilikuvan täytyy olla joko JPEG- tai PNG-formaatissa",
"error.blueprint.notFound": "Kaavaa \"{name}\" ei voitu ladata",
"error.blueprint.notFound": "Suunnitelmaa \"{name}\" ei voitu ladata",
"error.blocks.max.plural": "You must not add more than {max} blocks",
"error.blocks.max.singular": "You must not add more than one block",
"error.blocks.min.plural": "You must add at least {min} blocks",
"error.blocks.min.singular": "You must add at least one block",
"error.blocks.validation": "There's an error in block {index}",
"error.blocks.max.plural": "Voit lisätä enintään {max} lohkoa",
"error.blocks.max.singular": "Voit lisätä enintään yhden lohkon",
"error.blocks.min.plural": "Lisää vähintään {min} lohkoa",
"error.blocks.min.singular": "Lisää vähintään yksi lohko",
"error.blocks.validation": "Virhe lohkossa {index}",
"error.email.preset.notFound": "Nimellä \"{name}\" ja kyseisellä verkkotunnuksella ei löydy sähköpostiosoitetta",
@ -65,41 +75,44 @@
"error.file.changeName.empty": "Nimi ei voi olla tyhjä",
"error.file.changeName.permission": "Sinulla ei ole oikeutta muuttaa tiedoston \"{filename}\" nimeä",
"error.file.duplicate": "Tiedosto nimellä \"{filename}\" on jo olemassa",
"error.file.duplicate": "Tiedosto nimeltä \"{filename}\" on jo olemassa",
"error.file.extension.forbidden": "Tiedostopääte \"{extension}\" ei ole sallittu",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.invalid": "Pääte {extension} ei kelpaa",
"error.file.extension.missing": "Tiedoston \"{filename}\" tiedostopääte puuttuu",
"error.file.maxheight": "The height of the image must not exceed {height} pixels",
"error.file.maxsize": "The file is too large",
"error.file.maxwidth": "The width of the image must not exceed {width} pixels",
"error.file.maxheight": "Kuvan korkeus ei voi ylittää {height} pikseliä",
"error.file.maxsize": "Tiedosto on liian suuri",
"error.file.maxwidth": "Kuvan leveys ei voi ylittää {width} pikseliä",
"error.file.mime.differs": "Lähetetyllä tiedostolla täytyy olla sama mime-tyyppi \"{mime}\"",
"error.file.mime.forbidden": "Median tyyppi \"{mime}\" ei ole sallittu",
"error.file.mime.invalid": "Invalid mime type: {mime}",
"error.file.mime.invalid": "Mime-tyyppi {mime} ei kelpaa",
"error.file.mime.missing": "Tiedoston \"{filename}\" mediatyyppiä ei voida tunnistaa",
"error.file.minheight": "The height of the image must be at least {height} pixels",
"error.file.minsize": "The file is too small",
"error.file.minwidth": "The width of the image must be at least {width} pixels",
"error.file.minheight": "Kuvan korkeus täytyy olla vähintään {height} pikseliä",
"error.file.minsize": "Tiedosto on liian pieni",
"error.file.minwidth": "Kuvan leveys täytyy olla vähintään {width} pikseliä",
"error.file.name.missing": "Tiedostonimi ei voi olla tyhjä",
"error.file.notFound": "Tiedostoa \"{filename}\" ei löytynyt",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
"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": "Invalid file type: {type}",
"error.file.type.invalid": "Tiedostotyyppi {type} ei kelpaa",
"error.file.undefined": "Tiedostoa ei l\u00f6ytynyt",
"error.form.incomplete": "Korjaa kaikki lomakkeen virheet...",
"error.form.incomplete": "Korjaa kaikki lomakkeen virheet",
"error.form.notSaved": "Lomaketta ei voitu tallentaa",
"error.language.code": "Anna kielen lyhenne",
"error.language.duplicate": "Kieli on jo olemassa",
"error.language.name": "Anna kielen nimi",
"error.language.notFound": "The language could not be found",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.layout.validation.block": "Lohkon {blockIndex} asetelmassa {layoutIndex} tapahtui virhe",
"error.layout.validation.settings": "Virhe asetelman {index} asetuksissa",
"error.license.format": "Anna lisenssiavain",
"error.license.email": "Anna kelpaava sähköpostiosoite",
"error.license.email": "Anna sähköpostiosoite",
"error.license.verification": "Lisenssiä ei voitu vahvistaa",
"error.offline": "The Panel is currently offline",
"error.page.changeSlug.permission": "Sinulla ei ole oikeutta muuttaa URL-liitettä sivulle \"{slug}\"",
"error.page.changeStatus.incomplete": "Sivulla on virheitä eikä sitä voitu julkaista",
"error.page.changeStatus.permission": "Tämän sivun tilaa ei voi muuttaa",
@ -118,8 +131,8 @@
"error.page.duplicate.permission": "Sinulla ei ole oikeutta kahdentaa sivua \"{slug}\"",
"error.page.notFound": "Sivua \"{slug}\" ei löytynyt",
"error.page.num.invalid": "Anna kelpaava järjestysnumero. Numero ei voi olla negatiivinen.",
"error.page.slug.invalid": "Please enter a valid URL appendix",
"error.page.slug.maxlength": "Slug length must be less than \"{length}\" characters",
"error.page.slug.invalid": "Anna kelpaava URL-liite",
"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",
@ -163,8 +176,9 @@
"error.user.password.invalid": "Anna kelpaava salasana. Salasanan täytyy olla ainakin 8 merkkiä pitkä.",
"error.user.password.notSame": "Salasanat eivät täsmää",
"error.user.password.undefined": "Käyttäjällä ei ole salasanaa",
"error.user.password.wrong": "Wrong password",
"error.user.password.wrong": "Väärä salasana",
"error.user.role.invalid": "Anna kelpaava käyttäjätaso",
"error.user.undefined": "Käyttäjää ei löytynyt",
"error.user.update.permission": "Sinulla ei ole oikeutta päivittää käyttäjää \"{name}\"",
"error.validation.accepted": "Ole hyvä ja vahvista",
@ -203,78 +217,84 @@
"error.validation.size": "Arvon koko täytyy olla \"{size}\"",
"error.validation.startswith": "Arvon alkuosa täytyy olla \"{start}\"",
"error.validation.time": "Anna kelpaava aika",
"error.validation.time.after": "Please enter a time after {time}",
"error.validation.time.before": "Please enter a time before {time}",
"error.validation.time.between": "Please enter a time between {min} and {max}",
"error.validation.time.after": "Anna myöhempi aika kuin {time}",
"error.validation.time.before": "Anna aiempi aika kuin {time}",
"error.validation.time.between": "Anna aika väliltä {min} ja {max}",
"error.validation.url": "Anna kelpaava URL",
"expand": "Laajenna",
"expand.all": "Laajenna kaikki",
"field.required": "Kenttä on pakollinen",
"field.blocks.changeType": "Change type",
"field.blocks.changeType": "Vaihda tyyppiä",
"field.blocks.code.name": "Koodi",
"field.blocks.code.language": "Kieli",
"field.blocks.code.placeholder": "Your code …",
"field.blocks.delete.confirm": "Do you really want to delete this block?",
"field.blocks.delete.confirm.all": "Do you really want to delete all blocks?",
"field.blocks.delete.confirm.selected": "Do you really want to delete the selected blocks?",
"field.blocks.empty": "No blocks yet",
"field.blocks.fieldsets.label": "Please select a block type …",
"field.blocks.gallery.name": "Gallery",
"field.blocks.gallery.images.empty": "No images yet",
"field.blocks.gallery.images.label": "Images",
"field.blocks.heading.level": "Level",
"field.blocks.heading.name": "Heading",
"field.blocks.heading.text": "Text",
"field.blocks.heading.placeholder": "Heading …",
"field.blocks.image.alt": "Alternative text",
"field.blocks.image.caption": "Caption",
"field.blocks.image.crop": "Crop",
"field.blocks.code.placeholder": "Koodisi …",
"field.blocks.delete.confirm": "Haluatko varmasti poistaa tämän lohkon?",
"field.blocks.delete.confirm.all": "Haluatko varmasti poistaa kaikki lohkot?",
"field.blocks.delete.confirm.selected": "Haluatko varmasti poistaa valitut lohkot?",
"field.blocks.empty": "Ei lohkoja",
"field.blocks.fieldsets.label": "Valitse lohkon tyyppi …",
"field.blocks.fieldsets.paste": "Press <kbd>{{ shortcut }}</kbd> to paste/import blocks from your clipboard",
"field.blocks.gallery.name": "Galleria",
"field.blocks.gallery.images.empty": "Ei kuvia",
"field.blocks.gallery.images.label": "Kuvat",
"field.blocks.heading.level": "Taso",
"field.blocks.heading.name": "Otsikko",
"field.blocks.heading.text": "Teksti",
"field.blocks.heading.placeholder": "Otsikko …",
"field.blocks.image.alt": "Vaihtoehtoinen teksti",
"field.blocks.image.caption": "Kuvateksti",
"field.blocks.image.crop": "Rajaa",
"field.blocks.image.link": "Linkki",
"field.blocks.image.location": "Location",
"field.blocks.image.location": "Sijainti",
"field.blocks.image.name": "Kuva",
"field.blocks.image.placeholder": "Select an image",
"field.blocks.image.ratio": "Ratio",
"field.blocks.image.url": "Image URL",
"field.blocks.list.name": "List",
"field.blocks.image.placeholder": "Valitse kuva",
"field.blocks.image.ratio": "Kuvasuhde",
"field.blocks.image.url": "Kuvan URL",
"field.blocks.line.name": "Line",
"field.blocks.list.name": "Lista",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Text",
"field.blocks.markdown.label": "Teksti",
"field.blocks.markdown.placeholder": "Markdown …",
"field.blocks.quote.name": "Quote",
"field.blocks.quote.text.label": "Text",
"field.blocks.quote.text.placeholder": "Quote …",
"field.blocks.quote.citation.label": "Citation",
"field.blocks.quote.citation.placeholder": "by …",
"field.blocks.text.name": "Text",
"field.blocks.text.placeholder": "Text …",
"field.blocks.video.caption": "Caption",
"field.blocks.quote.name": "Lainaus",
"field.blocks.quote.text.label": "Teksti",
"field.blocks.quote.text.placeholder": "Lainaus …",
"field.blocks.quote.citation.label": "Sitaatti",
"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.name": "Video",
"field.blocks.video.placeholder": "Enter a video URL",
"field.blocks.video.url.label": "Video-URL",
"field.blocks.video.placeholder": "Anna videon URL",
"field.blocks.video.url.label": "Videon URL",
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Tiedostoja ei ole vielä valittu",
"field.layout.delete": "Delete layout",
"field.layout.delete.confirm": "Do you really want to delete this layout?",
"field.layout.empty": "No rows yet",
"field.layout.select": "Select a layout",
"field.layout.delete": "Poista asettelu",
"field.layout.delete.confirm": "Halutako varmasti poistaa tämän asettelun?",
"field.layout.empty": "Ei rivejä",
"field.layout.select": "Valitse asettelu",
"field.pages.empty": " Sivuja ei ole vielä valittu",
"field.structure.delete.confirm": "Haluatko varmasti poistaa tämän rivin?",
"field.structure.empty": "Rivejä ei ole vielä lisätty",
"field.users.empty": "Käyttäjiä ei ole vielä valittu",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "Haluatko varmasti poistaa tiedoston <br><strong>{filename}</strong>?",
"file.sort": "Change position",
"file.sort": "Muuta järjestyspaikkaa",
"files": "Tiedostot",
"files.empty": "Tiedostoja ei ole vielä lisätty",
"hide": "Hide",
"hide": "Piilota",
"hour": "Tunti",
"import": "Import",
"insert": "Lis\u00e4\u00e4",
"insert.after": "Insert after",
"insert.before": "Insert before",
"insert.after": "Lisää eteen",
"insert.before": "Lisää jälkeen",
"install": "Asenna",
"installation": "Asennus",
@ -300,8 +320,8 @@
"language.direction": "Lukusuunta",
"language.direction.ltr": "Vasemmalta oikealle",
"language.direction.rtl": "Oikealta vasemmalle",
"language.locale": "PHP-lokaalin tunniste",
"language.locale.warning": "You are using a custom locale set up. Please modify it in the language file in /site/languages",
"language.locale": "PHP-aluemäärityksen tunniste",
"language.locale.warning": "Käytät mukautettua aluemääritystä. Muokkaa sitä kielitiedostossa /site/languages",
"language.name": "Nimi",
"language.updated": "Kieli on päivitetty",
@ -325,28 +345,28 @@
"loading": "Ladataan",
"lock.unsaved": "Tallentamattomia muutoksia",
"lock.unsaved.empty": "There are no more unsaved changes",
"lock.unsaved.empty": "Ei enempää tallentamattomia muutoksia ",
"lock.isLocked": "Käyttäjällä <strong>{email}</strong> on tallentamattomia muutoksia",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.",
"lock.file.isLocked": "Tiedostoa ei voi muokata juuri nyt, sillä {email} on muokkaamassa tiedostoa.",
"lock.page.isLocked": "Sivua ei voi muokata juuri nyt, sillä {email} on muokkaamassa sivua.",
"lock.unlock": "Vapauta",
"lock.isUnlocked": "Your unsaved changes have been overwritten by another user. You can download your changes to merge them manually.",
"lock.isUnlocked": "Toinen käyttäjä ylikirjoitti tallentamattomat muutoksesi. Voit ladata tekemäsi muutokset ja lisätä ne käsin.",
"login": "Kirjaudu",
"login.code.label.login": "Login code",
"login.code.label.password-reset": "Password reset code",
"login.code.label.login": "Kirjautumiskoodi",
"login.code.label.password-reset": "Salasanan asetuskoodi",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "If your email address is registered, the requested code was sent via email.",
"login.email.login.body": "Hi {user.nameOrEmail},\n\nYou recently requested a login code for the Kirby Panel.\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.subject": "Your login code",
"login.email.password-reset.body": "Hi {user.nameOrEmail},\n\nYou recently requested a password reset code for the Kirby Panel.\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.subject": "Your password reset code",
"login.code.text.email": "Jos sähköpostiosoitteesi on rekisteröity, tilaamasi koodi lähetetään tähän osoitteeseen.",
"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.subject": "Kirjautumiskoodisi",
"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.subject": "Salasanan asetuskoodisi",
"login.remember": "Pidä minut kirjautuneena",
"login.reset": "Reset password",
"login.toggleText.code.email": "Login via email",
"login.toggleText.code.email-password": "Login with password",
"login.toggleText.password-reset.email": "Forgot your password?",
"login.toggleText.password-reset.email-password": "← Back to login",
"login.reset": "Aseta salasana",
"login.toggleText.code.email": "Kirjaudu sähköpostiosoitteella",
"login.toggleText.code.email-password": "Kirjaudu salasanalla",
"login.toggleText.password-reset.email": "Unohditko salasanasi?",
"login.toggleText.password-reset.email-password": "← Takaisin kirjautumiseen",
"logout": "Kirjaudu ulos",
@ -372,20 +392,20 @@
"more": "Lisää",
"name": "Nimi",
"next": "Seuraava",
"no": "no",
"off": "off",
"on": "on",
"no": "ei",
"off": "Pois käytöstä",
"on": "Käytössä",
"open": "Avaa",
"open.newWindow": "Open in new window",
"open.newWindow": "Avaa uudessa ikkunassa",
"options": "Asetukset",
"options.none": "No options",
"options.none": "Ei valintoja",
"orientation": "Suunta",
"orientation.landscape": "Vaakasuuntainen",
"orientation.portrait": "Pystysuuntainen",
"orientation.square": "Neliskulmainen",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Vaihda URL-osoite",
"page.changeSlug.fromTitle": "Luo nimen perusteella",
"page.changeStatus": "Muuta tilaa",
@ -397,12 +417,12 @@
"page.delete.confirm.title": "Anna vahvistuksena sivun nimi",
"page.draft.create": "Uusi luonnos",
"page.duplicate.appendix": "Kopioi",
"page.duplicate.files": "Copy files",
"page.duplicate.pages": "Copy pages",
"page.sort": "Change position",
"page.duplicate.files": "Kopioi tiedostot",
"page.duplicate.pages": "Kopioi sivut",
"page.sort": "Muuta järjestyspaikkaa",
"page.status": "Tila",
"page.status.draft": "Luonnos",
"page.status.draft.description": "The page is in draft mode and only visible for logged in editors or via secret link",
"page.status.draft.description": "Sivu on luonnostilassa ja näkyvissä vain kirjautuneille editoijille tai yksityisen linkin kautta",
"page.status.listed": "Julkinen",
"page.status.listed.description": "Sivu on julkinen kaikille",
"page.status.unlisted": "Listaamaton",
@ -417,15 +437,18 @@
"pagination.page": "Sivu",
"password": "Salasana",
"paste": "Paste",
"paste.after": "Paste after",
"pixel": "Pikseli",
"plugins": "Plugins",
"prev": "Edellinen",
"preview": "Preview",
"preview": "Esikatselu",
"remove": "Poista",
"rename": "Nimeä uudelleen",
"replace": "Korvaa",
"retry": "Yrit\u00e4 uudelleen",
"revert": "Palauta",
"revert.confirm": "Do you really want to <strong>delete all unsaved changes</strong>?",
"revert.confirm": "Haluatko varmasti <strong>poistaa kaikki tallentamattomat muutokset</strong>?",
"role": "K\u00e4ytt\u00e4j\u00e4taso",
"role.admin.description": "Pääkäyttäjällä on kaikki oikeudet",
@ -433,20 +456,20 @@
"role.all": "Kaikki",
"role.empty": "Tällä käyttäjätasolla ei ole yhtään käyttäjää",
"role.description.placeholder": "Ei kuvausta",
"role.nobody.description": "This is a fallback role without any permissions",
"role.nobody.title": "Nobody",
"role.nobody.description": "Tämä on vararooli, jolla ei ole mitään oikeuksia",
"role.nobody.title": "Tuntematon",
"save": "Tallenna",
"search": "Haku",
"search.min": "Enter {min} characters to search",
"search.all": "Show all",
"search.results.none": "No results",
"search.min": "Anna vähintään {min} merkkiä hakua varten",
"search.all": "Näytä kaikki",
"search.results.none": "Ei tuloksia",
"section.required": "Osio on pakollinen",
"select": "Valitse",
"settings": "Asetukset",
"show": "Show",
"show": "Näytä",
"size": "Koko",
"slug": "URL-tunniste",
"sort": "Järjestele",
@ -454,7 +477,9 @@
"template": "Sivupohja",
"today": "Tänään",
"site.blueprint": "The site has no blueprint yet. You can define the setup in <strong>/site/blueprints/site.yml</strong>",
"server": "Server",
"site.blueprint": "Tällä sivustolla ei ole vielä suunnitelmaa. Voit määrittää suunnitelman tiedostoon <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Koodi",
"toolbar.button.bold": "Lihavointi",
@ -463,14 +488,18 @@
"toolbar.button.heading.1": "Otsikko 1",
"toolbar.button.heading.2": "Otsikko 2",
"toolbar.button.heading.3": "Otsikko 3",
"toolbar.button.heading.4": "Heading 4",
"toolbar.button.heading.5": "Heading 5",
"toolbar.button.heading.6": "Heading 6",
"toolbar.button.italic": "Kursivointi",
"toolbar.button.file": "Tiedosto",
"toolbar.button.file.select": "Valitse tiedosto",
"toolbar.button.file.upload": "Lähetä tiedosto",
"toolbar.button.link": "Linkki",
"toolbar.button.strike": "Strike-through",
"toolbar.button.paragraph": "Paragraph",
"toolbar.button.strike": "Yliviivaus",
"toolbar.button.ol": "Järjestetty lista",
"toolbar.button.underline": "Underline",
"toolbar.button.underline": "Alaviiva",
"toolbar.button.ul": "Järjestämätön lista",
"translation.author": "Kirby-tiimi",
@ -482,14 +511,14 @@
"upload.error.cantMove": "Lähetettyä tiedostoa ei voitu siirtää",
"upload.error.cantWrite": "Tiedoston kirjoitus levylle epäonnistui",
"upload.error.default": "Tiedostoa ei voitu lähettää",
"upload.error.extension": "File upload stopped by extension",
"upload.error.extension": "Tiedostoa ei lähetetty tiedostopäätteen takia",
"upload.error.formSize": "Lähetetyn tiedoston koko ylittää lomakkeen sallitun ylärajan MAX_FILE_SIZE",
"upload.error.iniPostSize": "Lähetetyn tiedoston koko ylittää sallitun ylärajan post_max_size asetustiedostossa php.ini",
"upload.error.iniSize": "Lähetetyn tiedoston koko ylittää sallitun ylärajan upload_max_filesize asetustiedostossa php.ini",
"upload.error.noFile": "Tiedostoa ei lähetetty",
"upload.error.noFiles": "Tiedostoja ei lähetetty",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.error.partial": "Tiedoston lähetys onnistui vain osittain",
"upload.error.tmpDir": "Väliaikainen hakemisto puuttuu",
"upload.errors": "Virhe",
"upload.progress": "Lähetetään...",
@ -497,7 +526,7 @@
"url.placeholder": "https://esimerkki.fi",
"user": "Käyttäjä",
"user.blueprint": "Voit määrittää lisää osioita ja lomakekenttiä tälle käyttäjälle kaavassa <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "You can define additional sections and form fields for this user role in <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Muuta sähköpostiosoite",
"user.changeLanguage": "Vaihda kieli",
"user.changeName": "Nimeä uudelleen",
@ -516,12 +545,13 @@
"view.account": "Oma käyttäjätili",
"view.installation": "Asennus",
"view.resetPassword": "Reset password",
"view.settings": "Asetukset",
"view.languages": "Kielet",
"view.resetPassword": "Aseta salasana",
"view.site": "Sivusto",
"view.system": "System",
"view.users": "K\u00e4ytt\u00e4j\u00e4t",
"welcome": "Tervetuloa",
"year": "Vuosi",
"yes": "yes"
"yes": "kyllä"
}

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Modifier votre nom",
"account.delete": "Supprimer votre compte",
"account.delete.confirm": "Voulez-vous vraiment supprimer votre compte ? Vous serez déconnecté immédiatement. Votre compte ne pourra pas être récupéré.",
"add": "Ajouter",
"author": "Auteur",
"avatar": "Image du profil",
"back": "Retour",
"cancel": "Annuler",
@ -9,6 +14,7 @@
"collapse": "Replier",
"collapse.all": "Tout replier",
"copy": "Copier",
"copy.all": "Tout copier",
"create": "Créer",
"date": "Date",
@ -23,24 +29,28 @@
"days.tue": "Mar",
"days.wed": "Mer",
"debugging": "Débogage",
"delete": "Supprimer",
"delete.all": "Tout supprimer",
"dimensions": "Dimensions",
"disabled": "Désactivé",
"discard": "Supprimer",
"download": "Télécharger",
"duplicate": "Dupliquer",
"edit": "Éditer",
"expand": "Déplier",
"expand.all": "Tout déplier",
"dialog.files.empty": "Aucun fichier à sélectionner",
"dialog.pages.empty": "Aucune page à sélectionner",
"dialog.users.empty": "Aucun utilisateur à sélectionner",
"dimensions": "Dimensions",
"disabled": "Désactivé",
"discard": "Supprimer",
"download": "Télécharger",
"duplicate": "Dupliquer",
"edit": "Éditer",
"email": "Courriel",
"email.placeholder": "mail@example.com",
"environment": "Environnement",
"error.access.code": "Code incorrect",
"error.access.login": "Identifiant incorrect",
"error.access.panel": "Vous nêtes pas autorisé à accéder au Panel",
@ -92,6 +102,7 @@
"error.language.code": "Veuillez saisir un code valide pour cette langue",
"error.language.duplicate": "Cette langue existe déjà",
"error.language.name": "Veuillez saisir un nom valide pour cette langue",
"error.language.notFound": "La langue na pu être trouvée",
"error.layout.validation.block": "Il y a une erreur dans le block {blockIndex} de la disposition {layoutIndex}",
"error.layout.validation.settings": "Il y a une erreur dans les paramètres de la disposition {index}",
@ -100,6 +111,8 @@
"error.license.email": "Veuillez saisir un courriel valide",
"error.license.verification": "La licence na pu être vérifiée",
"error.offline": "Le Panel est actuellement hors ligne",
"error.page.changeSlug.permission": "Vous nêtes pas autorisé à modifier lidentifiant dURL pour «&nbsp;{slug}&nbsp;»",
"error.page.changeStatus.incomplete": "La page comporte des erreurs et ne peut pas être publiée",
"error.page.changeStatus.permission": "Le statut de cette page ne peut être modifié",
@ -165,6 +178,7 @@
"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.undefined": "Lutilisateur na pu être trouvé",
"error.user.update.permission": "Vous nêtes pas autorisé à modifier lutilisateur « {name} »",
"error.validation.accepted": "Veuillez confirmer",
@ -208,6 +222,9 @@
"error.validation.time.between": "Veuillez entrer une heure entre {min} et {max}",
"error.validation.url": "Veuillez saisir une URL valide",
"expand": "Déplier",
"expand.all": "Tout déplier",
"field.required": "Le champ est obligatoire",
"field.blocks.changeType": "Changer le type",
"field.blocks.code.name": "Code",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Voulez-vous vraiment supprimer les blocs sélectionnés ?",
"field.blocks.empty": "Pas encore de blocs",
"field.blocks.fieldsets.label": "Veuillez sélectionner un type de bloc…",
"field.blocks.fieldsets.paste": "Presser <kbd>{{ shortcut }}</kbd> pour coller/importer des blocks depuis votre presse-papier",
"field.blocks.gallery.name": "Galerie",
"field.blocks.gallery.images.empty": "Pas encore dimages",
"field.blocks.gallery.images.label": "Images",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Sélectionnez une image",
"field.blocks.image.ratio": "Proportions",
"field.blocks.image.url": "URL de l'image",
"field.blocks.line.name": "Ligne",
"field.blocks.list.name": "Liste",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Texte",
@ -263,7 +282,7 @@
"field.structure.empty": "Pas encore dentrée",
"field.users.empty": "Pas encore dutilisateur sélectionné",
"file.blueprint": "Ce fichier na pas encore de blueprint. Vous pouvez en définir les paramètres dans <strong>/site/blueprints/{template}.yml</strong>",
"file.blueprint": "Ce fichier na pas encore de blueprint. Vous pouvez en définir les paramètres dans <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "Voulez-vous vraiment supprimer <br><strong>{filename}</strong>&nbsp;?",
"file.sort": "Modifier la position",
@ -272,6 +291,7 @@
"hide": "Masquer",
"hour": "Heure",
"import": "Importer",
"insert": "Insérer",
"insert.after": "Insérer après",
"insert.before": "Insérer avant",
@ -337,9 +357,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 demandé récemment un code de connexion pour le Panel de Kirby.\nLe code 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 ladministrateur si vous avez des questions.\nPar sécurité, ne faites PAS 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 codede connexion suivant sera valide pendant {timeout} minutes :\n\n{code}\n\nSi vous navez pas demandé de codede 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 demandé récemment un code de connexion pour le Panel de Kirby.\nLe code suivant sera valide pendant {timeout} minutes:\n\n{code}\n\nSi vous navez pas demandé de code de connexion, veuillez ignorer ce courriel ou contacter ladministrateur si vous avez des questions.\nPar sécurité, ne faites PAS suivre ce courriel.",
"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.subject": "Votre code de réinitialisation du mot de passe",
"login.remember": "Rester connecté",
"login.reset": "Réinitialiser le mot de passe",
@ -385,7 +405,7 @@
"orientation.portrait": "Portrait",
"orientation.square": "Carré",
"page.blueprint": "Cette page na pas encore de blueprint. Vous pouvez en définir les paramètres dans <strong>/site/blueprints/{template}.yml</strong>",
"page.blueprint": "Cette page na pas encore de blueprint. Vous pouvez en définir les paramètres dans <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Modifier lURL",
"page.changeSlug.fromTitle": "Créer à partir du titre",
"page.changeStatus": "Changer le statut",
@ -417,7 +437,10 @@
"pagination.page": "Page",
"password": "Mot de passe",
"paste": "Coller",
"paste.after": "Coller après",
"pixel": "Pixel",
"plugins": "Plugins",
"prev": "Précédent",
"preview": "Prévisualiser",
"remove": "Supprimer",
@ -454,6 +477,8 @@
"template": "Modèle",
"today": "Aujourdhui",
"server": "Serveur",
"site.blueprint": "Ce site na pas encore de blueprint. Vous pouvez en définir les paramètres dans <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Code",
@ -463,11 +488,15 @@
"toolbar.button.heading.1": "Titre 1",
"toolbar.button.heading.2": "Titre 2",
"toolbar.button.heading.3": "Titre 3",
"toolbar.button.heading.4": "Titre 4",
"toolbar.button.heading.5": "Titre 5",
"toolbar.button.heading.6": "Titre 6",
"toolbar.button.italic": "Italique",
"toolbar.button.file": "Fichier",
"toolbar.button.file.select": "Sélectionner un fichier",
"toolbar.button.file.upload": "Transférer un fichier",
"toolbar.button.link": "Lien",
"toolbar.button.paragraph": "Paragraphe",
"toolbar.button.strike": "Barré",
"toolbar.button.ol": "Liste ordonnée",
"toolbar.button.underline": "Souligné",
@ -497,7 +526,7 @@
"url.placeholder": "https://example.com",
"user": "Utilisateur",
"user.blueprint": "Vous pouvez définir des sections et des champs de formulaire supplémentaires pour ce rôle dutilisateur dans <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Vous pouvez définir de nouvelles sections et champs de formulaires pour ce rôle d'utilisateur dans <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Modifier le courriel",
"user.changeLanguage": "Modifier la langue",
"user.changeName": "Renommer cet utilisateur",
@ -516,9 +545,10 @@
"view.account": "Votre compte",
"view.installation": "Installation",
"view.languages": "Langages",
"view.resetPassword": "Réinitialiser le mot de passe",
"view.settings": "Paramètres",
"view.site": "Site",
"view.system": "Système",
"view.users": "Utilisateurs",
"welcome": "Bienvenue",

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Change your name",
"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": "Hozz\u00e1ad",
"author": "Author",
"avatar": "Profilkép",
"back": "Vissza",
"cancel": "M\u00e9gsem",
@ -9,6 +14,7 @@
"collapse": "Collapse",
"collapse.all": "Collapse All",
"copy": "Másol",
"copy.all": "Copy all",
"create": "Létrehoz",
"date": "Dátum",
@ -23,24 +29,28 @@
"days.tue": "ke",
"days.wed": "sze",
"debugging": "Debugging",
"delete": "T\u00f6rl\u00e9s",
"delete.all": "Delete all",
"dimensions": "Méretek",
"disabled": "Disabled",
"discard": "Visszavon\u00e1s",
"download": "Letöltés",
"duplicate": "Másolat",
"edit": "Aloldal szerkeszt\u00e9se",
"expand": "Expand",
"expand.all": "Expand All",
"dialog.files.empty": "Nincsenek fájlok kiválasztva",
"dialog.pages.empty": "Nincsenek oldalak kiválasztva",
"dialog.users.empty": "Nincsenek felhasználók kiválasztva",
"dimensions": "Méretek",
"disabled": "Disabled",
"discard": "Visszavon\u00e1s",
"download": "Letöltés",
"duplicate": "Másolat",
"edit": "Aloldal szerkeszt\u00e9se",
"email": "Email",
"email.placeholder": "mail@pelda.hu",
"environment": "Environment",
"error.access.code": "Invalid code",
"error.access.login": "Érvénytelen bejelentkezés",
"error.access.panel": "Nincs jogosultságod megnyitni a panelt",
@ -92,6 +102,7 @@
"error.language.code": "Kérlek, add meg a nyelv érvényes kódját",
"error.language.duplicate": "A nyelv már létezik",
"error.language.name": "Kérlek, add meg a nyelv érvényes nevét",
"error.language.notFound": "The language could not be found",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
@ -100,6 +111,8 @@
"error.license.email": "Kérlek adj meg egy valós email-címet",
"error.license.verification": "A licensz nem ellenőrizhető",
"error.offline": "The Panel is currently offline",
"error.page.changeSlug.permission": "Nem változtathatod meg az URL-előtagot: \"{slug}\"",
"error.page.changeStatus.incomplete": "Az oldal hibákat tartalmaz és nem publikálható",
"error.page.changeStatus.permission": "Az oldal státusza nem változtatható meg",
@ -165,6 +178,7 @@
"error.user.password.undefined": "A felhasználónak nincs jelszó megadva",
"error.user.password.wrong": "Wrong password",
"error.user.role.invalid": "Kérlek adj meg egy megfelelő szerepkört",
"error.user.undefined": "A felhasználó nem található",
"error.user.update.permission": "Nincs jogosultságod frissíteni \"{name}\" felhasználó adatait",
"error.validation.accepted": "Kérlek erősítsd meg",
@ -208,6 +222,9 @@
"error.validation.time.between": "Please enter a time between {min} and {max}",
"error.validation.url": "Kérlek megfelelő URL-t adj meg",
"expand": "Expand",
"expand.all": "Expand All",
"field.required": "The field is required",
"field.blocks.changeType": "Change type",
"field.blocks.code.name": "Kód",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Do you really want to delete the selected blocks?",
"field.blocks.empty": "No blocks yet",
"field.blocks.fieldsets.label": "Please select a block type …",
"field.blocks.fieldsets.paste": "Press <kbd>{{ shortcut }}</kbd> to paste/import blocks from your clipboard",
"field.blocks.gallery.name": "Gallery",
"field.blocks.gallery.images.empty": "No images yet",
"field.blocks.gallery.images.label": "Images",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Select an image",
"field.blocks.image.ratio": "Ratio",
"field.blocks.image.url": "Image URL",
"field.blocks.line.name": "Line",
"field.blocks.list.name": "List",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Text",
@ -263,7 +282,7 @@
"field.structure.empty": "Nincs m\u00e9g bejegyz\u00e9s",
"field.users.empty": "Nincs felhasználó kiválasztva",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "Biztos törölni akarod ezt a fájlt: <br><strong>{filename}</strong>?",
"file.sort": "Change position",
@ -272,6 +291,7 @@
"hide": "Hide",
"hour": "Óra",
"import": "Import",
"insert": "Beilleszt",
"insert.after": "Insert after",
"insert.before": "Insert before",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Password reset code",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "If your email address is registered, the requested code was sent via email.",
"login.email.login.body": "Hi {user.nameOrEmail},\n\nYou recently requested a login code for the Kirby Panel.\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": "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.subject": "Your login code",
"login.email.password-reset.body": "Hi {user.nameOrEmail},\n\nYou recently requested a password reset code for the Kirby Panel.\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": "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.subject": "Your password reset code",
"login.remember": "Maradjak bejelentkezve",
"login.reset": "Reset password",
@ -385,7 +405,7 @@
"orientation.portrait": "Álló",
"orientation.square": "Négyzetes",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "URL v\u00e1ltoztat\u00e1sa",
"page.changeSlug.fromTitle": "L\u00e9trehoz\u00e1s c\u00edmb\u0151l",
"page.changeStatus": "Állapot módosítása",
@ -417,7 +437,10 @@
"pagination.page": "Oldal",
"password": "Jelsz\u00f3",
"paste": "Paste",
"paste.after": "Paste after",
"pixel": "Pixel",
"plugins": "Plugins",
"prev": "Előző",
"preview": "Preview",
"remove": "Eltávolítás",
@ -454,6 +477,8 @@
"template": "Sablon",
"today": "Ma",
"server": "Server",
"site.blueprint": "The site has no blueprint yet. You can define the setup in <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Kód",
@ -463,11 +488,15 @@
"toolbar.button.heading.1": "Cím 1",
"toolbar.button.heading.2": "Cím 2",
"toolbar.button.heading.3": "Cím 3",
"toolbar.button.heading.4": "Heading 4",
"toolbar.button.heading.5": "Heading 5",
"toolbar.button.heading.6": "Heading 6",
"toolbar.button.italic": "Dőlt szöveg",
"toolbar.button.file": "Fájl",
"toolbar.button.file.select": "Válassz egy fájlt",
"toolbar.button.file.upload": "Fájl feltöltése",
"toolbar.button.link": "Link",
"toolbar.button.paragraph": "Paragraph",
"toolbar.button.strike": "Strike-through",
"toolbar.button.ol": "Rendezett lista",
"toolbar.button.underline": "Underline",
@ -497,7 +526,7 @@
"url.placeholder": "https://pelda.hu",
"user": "Felhasználó",
"user.blueprint": "Ehhez a szerepkörhöz további szekciókat és mezőket vehetsz fel a <strong>/site/blueprints/users/{role}.yml</strong> fájlban",
"user.blueprint": "You can define additional sections and form fields for this user role in <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Email módosítása",
"user.changeLanguage": "Nyelv módosítása",
"user.changeName": "Felhasználó átnevezése",
@ -516,9 +545,10 @@
"view.account": "Fi\u00f3kod",
"view.installation": "Telep\u00edt\u00e9s",
"view.languages": "Nyelvek",
"view.resetPassword": "Reset password",
"view.settings": "Beállítások",
"view.site": "Weboldal",
"view.system": "System",
"view.users": "Felhaszn\u00e1l\u00f3k",
"welcome": "Üdvözlünk",

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Change your name",
"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": "Tambah",
"author": "Author",
"avatar": "Gambar profil",
"back": "Kembali",
"cancel": "Batal",
@ -9,6 +14,7 @@
"collapse": "Lipat",
"collapse.all": "Lipat Semua",
"copy": "Salin",
"copy.all": "Copy all",
"create": "Buat",
"date": "Tanggal",
@ -23,24 +29,28 @@
"days.tue": "Sel",
"days.wed": "Rab",
"debugging": "Debugging",
"delete": "Hapus",
"delete.all": "Hapus semua",
"dimensions": "Dimensi",
"disabled": "Dimatikan",
"discard": "Buang",
"download": "Unduh",
"duplicate": "Duplikasi",
"edit": "Sunting",
"expand": "Luaskan",
"expand.all": "Luaskan Semua",
"dialog.files.empty": "Tidak ada berkas untuk dipilih",
"dialog.pages.empty": "Tidak ada halaman untuk dipilih",
"dialog.users.empty": "Tidak ada pengguna untuk dipilih",
"dimensions": "Dimensi",
"disabled": "Dimatikan",
"discard": "Buang",
"download": "Unduh",
"duplicate": "Duplikasi",
"edit": "Sunting",
"email": "Surel",
"email.placeholder": "surel@contoh.com",
"environment": "Environment",
"error.access.code": "Kode tidak valid",
"error.access.login": "Upaya masuk tidak valid",
"error.access.panel": "Anda tidak diizinkan mengakses panel",
@ -92,6 +102,7 @@
"error.language.code": "Masukkan kode bahasa yang valid",
"error.language.duplicate": "Bahasa sudah ada",
"error.language.name": "Masukkan nama bahasa yang valid",
"error.language.notFound": "The language could not be found",
"error.layout.validation.block": "Ada kesalahan di blok {blockIndex} di tata letak {layoutIndex}",
"error.layout.validation.settings": "Ada kesalahan di pengaturan tata letak {index}",
@ -100,6 +111,8 @@
"error.license.email": "Masukkan surel yang valid",
"error.license.verification": "Lisensi tidak dapat diverifikasi",
"error.offline": "The Panel is currently offline",
"error.page.changeSlug.permission": "Anda tidak diizinkan mengubah akhiran URL untuk \"{slug}\"",
"error.page.changeStatus.incomplete": "Halaman memiliki kesalahan dan tidak dapat diterbitkan",
"error.page.changeStatus.permission": "Status halaman ini tidak dapat diubah",
@ -165,6 +178,7 @@
"error.user.password.undefined": "Pengguna tidak memiliki sandi",
"error.user.password.wrong": "Kata sandi salah",
"error.user.role.invalid": "Masukkan peran yang valid",
"error.user.undefined": "Pengguna tidak dapat ditemukan",
"error.user.update.permission": "Anda tidak diizinkan memperbaharui pengguna \"{name}\"",
"error.validation.accepted": "Mohon konfirmasi",
@ -208,6 +222,9 @@
"error.validation.time.between": "Masukkan waktu antara {min} dan {max}",
"error.validation.url": "Masukkan URL yang valid",
"expand": "Luaskan",
"expand.all": "Luaskan Semua",
"field.required": "Bidang ini wajib",
"field.blocks.changeType": "Ubah tipe",
"field.blocks.code.name": "Kode",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Anda yakin menghapus blok yang dipilih?",
"field.blocks.empty": "Belum ada blok",
"field.blocks.fieldsets.label": "Pilih tipe blok …",
"field.blocks.fieldsets.paste": "Press <kbd>{{ shortcut }}</kbd> to paste/import blocks from your clipboard",
"field.blocks.gallery.name": "Galeri",
"field.blocks.gallery.images.empty": "Belum ada gambar",
"field.blocks.gallery.images.label": "Gambar",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Pilih gambar",
"field.blocks.image.ratio": "Rasio",
"field.blocks.image.url": "URL Gambar",
"field.blocks.line.name": "Line",
"field.blocks.list.name": "Daftar",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Teks",
@ -263,7 +282,7 @@
"field.structure.empty": "Belum ada entri",
"field.users.empty": "Belum ada pengguna yang dipilih",
"file.blueprint": "Berkas ini belum memiliki cetak biru. Anda dapat mendefinisikannya di <strong>/site/blueprints/{template}.yml</strong>",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "Anda yakin menghapus <br> <strong>{filename}</strong>?",
"file.sort": "Ubah posisi",
@ -272,6 +291,7 @@
"hide": "Sembunyikan",
"hour": "Jam",
"import": "Import",
"insert": "Sisipkan",
"insert.after": "Sisipkan setelah",
"insert.before": "Sisipkan sebelum",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Kode atur ulang sandi",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "Jika alamat surel terdaftar, kode yang diminta dikirim via surel",
"login.email.login.body": "Hai {user.nameOrEmail},\n\nAnda baru saja meminta kode masuk untuk Kirby Panel.\nKode masuk berikut valid selama {timeout} menit:\n\n{code}\n\nJika Anda tidak meminta kode masuk, abaikan surel ini atau hubungi admin apabila ada yang ingin ditanyakan.\nUntuk alasan keamanan, JANGAN teruskan surel ini.",
"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.subject": "Kode masuk Anda",
"login.email.password-reset.body": "Hai {user.nameOrEmail},\n\nAnda baru saja meminta kode atur ulang sandi untuk Kirby Panel.\nKode atur ulang sandi berikut valid selama {timeout} menit:\n\n{code}\n\nJika Anda tidak meminta kode atur ulang sandi, abaikan surel ini atau hubungi admin apabila ada yang ingin ditanyakan.\nUntuk alasan keamanan, JANGAN teruskan surel ini.",
"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.subject": "Kode atur ulang sandi Anda",
"login.remember": "Biarkan tetap masuk",
"login.reset": "Atur ulang sandi",
@ -385,7 +405,7 @@
"orientation.portrait": "Tegak",
"orientation.square": "Persegi",
"page.blueprint": "Halaman ini belum memiliki cetak biru. Anda dapat mendefinisikannya di <strong>/site/blueprints/{template}.yml</strong>",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Ubah URL",
"page.changeSlug.fromTitle": "Buat dari judul",
"page.changeStatus": "Ubah status",
@ -417,7 +437,10 @@
"pagination.page": "Halaman",
"password": "Sandi",
"paste": "Paste",
"paste.after": "Paste after",
"pixel": "Piksel",
"plugins": "Plugins",
"prev": "Sebelumnya",
"preview": "Pratinjau",
"remove": "Hapus",
@ -454,6 +477,8 @@
"template": "Templat",
"today": "Hari ini",
"server": "Server",
"site.blueprint": "Situs ini belum memiliki cetak biru. Anda dapat mendefinisikannya di <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Kode",
@ -463,11 +488,15 @@
"toolbar.button.heading.1": "Penajukan 1",
"toolbar.button.heading.2": "Penajukan 2",
"toolbar.button.heading.3": "Penajukan 3",
"toolbar.button.heading.4": "Heading 4",
"toolbar.button.heading.5": "Heading 5",
"toolbar.button.heading.6": "Heading 6",
"toolbar.button.italic": "Miring",
"toolbar.button.file": "Berkas",
"toolbar.button.file.select": "Pilih berkas",
"toolbar.button.file.upload": "Unggah berkas",
"toolbar.button.link": "Tautan",
"toolbar.button.paragraph": "Paragraph",
"toolbar.button.strike": "Coret",
"toolbar.button.ol": "Daftar berurut",
"toolbar.button.underline": "Garis bawah",
@ -497,7 +526,7 @@
"url.placeholder": "https://contoh.com",
"user": "Pengguna",
"user.blueprint": "Anda dapat mendefinisikan bagian tambahan dan bidang formulir untuk peran pengguna ini di <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "You can define additional sections and form fields for this user role in <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Ubah surel",
"user.changeLanguage": "Ubah bahasa",
"user.changeName": "Ubah nama pengguna ini",
@ -516,9 +545,10 @@
"view.account": "Akun Anda",
"view.installation": "Pemasangan",
"view.languages": "Bahasa",
"view.resetPassword": "Atur ulang sandi",
"view.settings": "Pengaturan",
"view.site": "Situs",
"view.system": "System",
"view.users": "Pengguna",
"welcome": "Selamat datang",

View file

@ -0,0 +1,557 @@
{
"account.changeName": "Breyta nafninu þínu",
"account.delete": "Eyða reikningnum þí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ð",
"author": "Höfundur",
"avatar": "Prófíl mynd",
"back": "Til baka",
"cancel": "Hætta við",
"change": "Breyta",
"close": "Loka",
"confirm": "Ok",
"collapse": "Collapse",
"collapse.all": "Collapse All",
"copy": "Afrita",
"copy.all": "Afrita allt",
"create": "Stofna",
"date": "Dagsetning",
"date.select": "Veldu dagsetningu",
"day": "Dagur",
"days.fri": "Fös",
"days.mon": "Mán",
"days.sat": "Lau",
"days.sun": "Sun",
"days.thu": "Fim",
"days.tue": "Þri",
"days.wed": "Mið",
"debugging": "Aflúsun",
"delete": "Eyða",
"delete.all": "Eyða hreint öllu",
"dialog.files.empty": "Engar skrár til að velja úr",
"dialog.pages.empty": "Engar síður til að velja úr",
"dialog.users.empty": "Engir notendur til að velja úr",
"dimensions": "Rýmd",
"disabled": "Óvirkt",
"discard": "Hunsa",
"download": "Hlaða niður",
"duplicate": "Klóna",
"edit": "Breyta",
"email": "Netfang",
"email.placeholder": "nafn@netfang.is",
"environment": "Umhverfi",
"error.access.code": "Ógildur kóði",
"error.access.login": "Ógild innskráning",
"error.access.panel": "Þú hefur ekkert leyfi til að nota panelinn",
"error.access.view": "Þú hefur ekkert leyfi til að nota þennan hluta panelsins",
"error.avatar.create.fail": "Það gekk ekki að hlaða inn prófílmyndinni",
"error.avatar.delete.fail": "Ekki tókst að eyða prófílmyndinni",
"error.avatar.dimensions.invalid": "Vinsamlegast hafðu myndina ekki breiðari né hærri en 3000 punkta",
"error.avatar.mime.forbidden": "Snið myndarinnar þarf að vera af gerðinni JPEG eða PNG",
"error.blueprint.notFound": "Ekki tókst að hlaða bláprentið: \"{name}\". Reyndu aftur?",
"error.blocks.max.plural": "Ekki fleiri en {max} bálka",
"error.blocks.max.singular": "Ekki meira en einn bálkur",
"error.blocks.min.plural": "Minnst {min}. bálka",
"error.blocks.min.singular": "Allavegana einn bálkur takk",
"error.blocks.validation": "Það er villa í bálk {index}",
"error.email.preset.notFound": "Netfangstillingarnar: \"{name}\" fundust ekki",
"error.field.converter.invalid": "Ógildur umbreytari \"{converter}\"",
"error.file.changeName.empty": "Nafn skal fylla út",
"error.file.changeName.permission": "Þú mátt ekkert breyta nafninu á skránni \"{filename}\"",
"error.file.duplicate": "Skrá með nafninu \"{filename}\" er nú þegar til",
"error.file.extension.forbidden": "Skrárendingin \"{extension}\" er ekki leyfð",
"error.file.extension.invalid": "Óleyfilegt skrársnið hér: {extension}",
"error.file.extension.missing": "Skrárendinguna fyrir \"{filename}\" vantar",
"error.file.maxheight": "Hæð myndarinnar má ekki vera meiri en {height} punktar",
"error.file.maxsize": "Skráinn er alltof stór",
"error.file.maxwidth": "Breydd myndarinnar má alls ekki vera meiri en {width} punktar",
"error.file.mime.differs": "Upphlaðna skráin þarf að vera sömu tegundar: \"{mime}\"",
"error.file.mime.forbidden": "Gagnasniðið \"{mime}\" er ekki leyft hér",
"error.file.mime.invalid": "Ógyllt gagnasnið: {mime}",
"error.file.mime.missing": "Gagnasnið skránnar \"{filename}\" er óþekkt",
"error.file.minheight": "Hæð myndarinnar þarf að vera minnst {height} punktar",
"error.file.minsize": "Skráin er of smá",
"error.file.minwidth": "Breidd myndarinnar þarf að vera minnst {width} punktar",
"error.file.name.missing": "Skrárnafnið má ekki skilja eftir tómt",
"error.file.notFound": "Skráin \"{filename}\" fannst ekki",
"error.file.orientation": "Snið myndarinnar þarf að vera \"{orientation}\"",
"error.file.type.forbidden": "Þú mátt ekkert hlaða inn {type} skrám",
"error.file.type.invalid": "Ógild skrártegund: {type}",
"error.file.undefined": "Skráin fannst ekki",
"error.form.incomplete": "Vinsamlegast lagfærðu villurnar í forminu…",
"error.form.notSaved": "Ekki tókst að vista upplýsingar úr forminu",
"error.language.code": "Gófúslega settu inn gildan kóða fyrir tungumál",
"error.language.duplicate": "Þetta tungumál er nú þegar skráð",
"error.language.name": "Gott og gyllt nafn fyrir tungumálið",
"error.language.notFound": "Tungumálið fannst ekkert",
"error.layout.validation.block": "Það er villa í bálki {blockIndex} í rammanum {layoutIndex}",
"error.layout.validation.settings": "Hér er villa í sitllingum fyrir ramman {index}",
"error.license.format": "Gildur leyfiskóði hér",
"error.license.email": "Almennilegt netfang hér",
"error.license.verification": "Ekki heppnaðist að staðfest leyfið",
"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.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íðunn \"{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.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",
"error.page.delete.confirm": "Ritaðu titil síðunnar til að staðfesta",
"error.page.delete.hasChildren": "Síðan hefur undirsíður og er því ekki hægt að eyða",
"error.page.delete.permission": "Þú mátt ekkert eyða \"{slug}\"",
"error.page.draft.duplicate": "Uppkast með slóðinni \"{slug}\" er þegar til",
"error.page.duplicate": "Síða með slóðinni \"{slug}\" er þegar til",
"error.page.duplicate.permission": "Þú mátt ekki klóna \"{slug}\"",
"error.page.notFound": "Síðan \"{slug}\" fannst ekkert",
"error.page.num.invalid": "Veldu ákjósanlega raðtölu. Neikvæðar tölur bannaðar.",
"error.page.slug.invalid": "Veldu ákjósanlega vefslóð",
"error.page.slug.maxlength": "Vefslóð þarf að vera a.m.k. \"{length}\" stafir",
"error.page.sort.permission": "Ekki reyndist unnt að raða síðunni \"{slug}\"",
"error.page.status.invalid": "Ákjósanlega síðustöðu takk",
"error.page.undefined": "Síðan fannst ekkert",
"error.page.update.permission": "Þú mátt ekkert uppfæra síðuna \"{slug}\"",
"error.section.files.max.plural": "Ekki fleiri en {max} skrár í \"{section}\" svæðið",
"error.section.files.max.singular": "Aðeins ein skrá í \"{section}\" svæðið",
"error.section.files.min.plural": "\"{section}\" svæðið krefst a.m.k. {min} skrá sem innihalds",
"error.section.files.min.singular": "\"{section}\" þarf minnst eina skrá til að það virki",
"error.section.pages.max.plural": "Alls ekki fleiri en {max} síður í \"{section}\" svæðið",
"error.section.pages.max.singular": "Ekki fleiri en ein síða í \"{section}\" svæðið",
"error.section.pages.min.plural": "\"{section}\" svæðið krefst a.m.k {min}. síðna",
"error.section.pages.min.singular": "\"{section}\" krefst a.m.k. einnar síðu",
"error.section.notLoaded": "Svæðið \"{name}\" var því miður ekki hægt að sækja",
"error.section.type.invalid": "Svæðiðsgerðin \"{type}\" er því miður ekki gild",
"error.site.changeTitle.empty": "Ekki skilja titilinn eftir tóman",
"error.site.changeTitle.permission": "Þú mátt ekkert breyta titil vefsvæðisins",
"error.site.update.permission": "Þú mátt ekkert uppfæra vefsvæðið",
"error.template.default.notFound": "Ekkert sjálfgefið sniðmát fannst",
"error.user.changeEmail.permission": "Þú mátt ekkert breyta netfangi notandans \"{name}\"",
"error.user.changeLanguage.permission": "Þú hefur ekki leyfi til að breyta tungumáli notandans \"{name}\"",
"error.user.changeName.permission": "Þú mátt alls ekki breyta nafni notandans \"{name}\"",
"error.user.changePassword.permission": "Þér er harðbannað að breyta lykilorði notandans \"{name}\"",
"error.user.changeRole.lastAdmin": "Þetta er síðasti stjórinn og því má ekki breyta hlutverki",
"error.user.changeRole.permission": "Þú hefur ekki leyfi til að breyta hlutverki fyrir notandan \"{name}\"",
"error.user.changeRole.toAdmin": "Þú hefur ekkert leyfi til að gera notendur að stjórum",
"error.user.create.permission": "Þú mátt ekki stofna þennan notanda",
"error.user.delete": "Ekki reyndist unnt að eyða notandanum \"{name}\"",
"error.user.delete.lastAdmin": "Síðasta stjóranum er ekki hægt að eyða",
"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.language.invalid": "Vinsamlegast ákjósanlegt tungumál",
"error.user.notFound": "Þessi notandi; \"{name}\" fannst ekki",
"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ð",
"error.user.password.wrong": "Rangt lykilorð",
"error.user.role.invalid": "Veldu ákjósanlegt hlutverk",
"error.user.undefined": "Notandinn fannst ekkert",
"error.user.update.permission": "Þú mátt ekkert breyta notandanum \"{name}\"",
"error.validation.accepted": "Staðfestu",
"error.validation.alpha": "Aðeins stafir úr Enska stafrófinu, a-z",
"error.validation.alphanum": "Aðeins stafir úr Enska stafrófinu, a-z eða tölustafir 0-9",
"error.validation.between": "Gildi milli \"{min}\" og \"{max}\"",
"error.validation.boolean": "Staðfestu eða hafnaðu þessu",
"error.validation.contains": "Settu inni gildi er inniheldur \"{needle}\"",
"error.validation.date": "Ákjósanlega dagsetningu",
"error.validation.date.after": "Dagsetningu eftir {date}",
"error.validation.date.before": "Dagsetningu fyrir {date}",
"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.endswith": "Gildið verður að enda á \"{end}\"",
"error.validation.filename": "Ákjósanlegt skrárnafn",
"error.validation.in": "Vinsamlegast skráðu eitt af eftirfarandi: ({in})",
"error.validation.integer": "Skráðu heiltölu",
"error.validation.ip": "Skráðu ákjósanlega IP tölu",
"error.validation.less": "Skráðu gildi lægra en {max}",
"error.validation.match": "Gildið er ekki eftir væntingum",
"error.validation.max": "Skráð gildi sem er ekki hærra en {max}",
"error.validation.maxlength": "Veldu eitthvað styttra. (hámark {max} stafir)",
"error.validation.maxwords": "Ekki skrá fleiri en {max}. orð",
"error.validation.min": "Skráðu gildi ekki lægra en {min}",
"error.validation.minlength": "Hafðu þetta lengra en {min}. stafi",
"error.validation.minwords": "Lágmark {min}. orð",
"error.validation.more": "Eitthvað hærra en {min}",
"error.validation.notcontains": "Skráðu eitthvað sem inniheldur ekki \"{needle}\"",
"error.validation.notin": "Ekki skrá neitt af þessu: ({notIn})",
"error.validation.option": "Veldu ákjósanlegan kost",
"error.validation.num": "Skráðu ákjósanlega tölu",
"error.validation.required": "Skráðu eitthvað",
"error.validation.same": "Skráðu \"{other}\"",
"error.validation.size": "Gildið þarf að vera \"{size}\"",
"error.validation.startswith": "Þetta þarf að byrja á \"{start}\"",
"error.validation.time": "Ákjósanlegur tími",
"error.validation.time.after": "Veldu tíma eftir {time}",
"error.validation.time.before": "Veldu tíma fyrir{time}",
"error.validation.time.between": "Veldu tíma milli {min} og {max}",
"error.validation.url": "Ákjósanleg vefslóð",
"expand": "Þenja út",
"expand.all": "Þenja allt út",
"field.required": "Þetta svið er nauðsynlegt",
"field.blocks.changeType": "Breyta um bálkagerð",
"field.blocks.code.name": "Kóði",
"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?",
"field.blocks.delete.confirm.all": "Ertu nú alveg viss um að þú viljir eyða öllum þessum bálkum?",
"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 1{{ shortcut }}1 flýtilyklaaðgerðina til að setja blokkina 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.placeholder": "Fyrirsögn …",
"field.blocks.image.alt": "ALT texti",
"field.blocks.image.caption": "Myndartexti",
"field.blocks.image.crop": "Kroppa",
"field.blocks.image.link": "Tengill",
"field.blocks.image.location": "Staðsetning",
"field.blocks.image.name": "Mynd",
"field.blocks.image.placeholder": "Veldu mynd",
"field.blocks.image.ratio": "Hlutfall",
"field.blocks.image.url": "Slóð myndar",
"field.blocks.line.name": "Lína",
"field.blocks.list.name": "Listi",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Texti",
"field.blocks.markdown.placeholder": "Markdown …",
"field.blocks.quote.name": "Tilvitnun",
"field.blocks.quote.text.label": "Innihald tilvitnunar",
"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.name": "Myndskeið",
"field.blocks.video.placeholder": "Vefslóð myndskeiðs (URL)",
"field.blocks.video.url.label": "Vefslóð",
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Engar skrár valdar ennþá",
"field.layout.delete": "Eyða ramma",
"field.layout.delete.confirm": "Ætlarðu virkilega að eyða þessum ramma?",
"field.layout.empty": "Nei. Engir rammar enn.",
"field.layout.select": "Veldu rammategund",
"field.pages.empty": "Engar síður valdar ennþá",
"field.structure.delete.confirm": "Viltu virkilega eyða þessari röð?",
"field.structure.empty": "Engar færslur enn",
"field.users.empty": "Engir notendur valdir enn",
"file.blueprint": "Þessi skrá hefur ekki skipan (e. blueprint) ennþá. Þú mátt skilgreina skipanina í <strong>/site/blueprints/{template}.yml</strong>",
"file.delete.confirm": "Ætlarðu virkilega að eyða <br><strong>{filename}</strong>?",
"file.sort": "Breyta röðun",
"files": "Skrár",
"files.empty": "Engar skrár enn",
"hide": "Fela",
"hour": "Klukkustund",
"import": "Hlaða inn",
"insert": "Setja inn",
"insert.after": "Setja eftir",
"insert.before": "Setja fyrir",
"install": "Setja upp",
"installation": "Uppsettning",
"installation.completed": "Panellinn er uppsettur",
"installation.disabled": "Paneluppsetning er sjálfgefið óvirk á vefþjónum á Veraldarvefnum. Reyndu frekar að setja Panelinn upp í lokuðu umhverfi eða virkjaðu <code>panel.install</code> möguleikan.",
"installation.issues.accounts": "<code>/site/accounts</code> mappan er annaðhvort ekki til eða er ekki skrifanleg.",
"installation.issues.content": "<code>/content</code> mappan er annaðhvort ekki til eða er ekki skrifanleg",
"installation.issues.curl": "<code>CURL</code> viðbótin er hér bráðnauðsynleg",
"installation.issues.headline": "Uppsetning Panelsins mistókst hrapalega",
"installation.issues.mbstring": "<code>MB String</code> er hér bráðnauðsynleg",
"installation.issues.media": "<code>/media</code> mappan er annaðhvort ekki til eða er ekki skrifanleg",
"installation.issues.php": "Notaðu <code>PHP 7+</code>",
"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.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.ltr": "Vinstra til hægri",
"language.direction.rtl": "Hægra til vinstri",
"language.locale": "PHP locale strengur",
"language.locale.warning": "Þú ert að nota sérsniðna locale uppsetningu. Vinsamlegast breyttu tungumálaskránni á slóðinni /site/languages",
"language.name": "Nafn tungumáls",
"language.updated": "Tungumálið hefur verið uppfært",
"languages": "Tungumál",
"languages.default": "Aðal tungumál",
"languages.empty": "Það eru engin frekari tungumál skilgreind enn",
"languages.secondary": "Auka tungumál",
"languages.secondary.empty": "Það eru engin auka tungumál skilgreind enn",
"license": "Leyfi",
"license.buy": "Kaupa leyfi",
"license.register": "Skr\u00E1 Kirby",
"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.success": "Þakka þér fyrir að velja Kirby",
"license.unregistered": "Þetta er óskráð prufueintak af Kirby",
"link": "Tengill",
"link.text": "Tengilstexti",
"loading": "Hleð",
"lock.unsaved": "Óvistað breytingar",
"lock.unsaved.empty": "Það eru öngvar óvistaðar breytingar",
"lock.isLocked": "Óvistaðar breytingar frá <strong>{email}</strong>",
"lock.file.isLocked": "{email} er að vinna í skránni og þú breytir henni ekki á meðan.",
"lock.page.isLocked": "{email} er að vinna í síðunni og þú breytir henni ekki á meðan.",
"lock.unlock": "Aflæsa",
"lock.isUnlocked": "Þær breytingar sem þú gerðir hafa verið yfirskrifaðar af öðrum notanda. Þú getur sótt þær breytingar og splæst þeim saman við þínar breytingar. Handvirkt.",
"login": "Innskrá",
"login.code.label.login": "Innskráningarkóði",
"login.code.label.password-reset": "Kóði fyrir endurstillingu lykilorðs",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "Ef netfangið (e. email) þitt er skráð þá bíður þín nýr tölvupóstur.",
"login.email.login.body": "Já halló {user.nameOrEmail},\n\nNýlega baðstu um innskráningarkóða fyrir bakendan á sorli.is.\nEftirfarandi kóði er virkur í {timeout} mínútur:\n\n{code}\n\nEf þú óskaðir ekki eftir þessu þá hunsaðu þennan tölvupóst eða talaðu við vefstjóran ef þú vilt fræðast nánar.\nAf öryggisástæðum vinsamlegast áframsendu þennan tölvupóst ALLS EKKI.",
"login.email.login.subject": "Innskráningarkóðinn þinn",
"login.email.password-reset.body": "Nei halló {user.nameOrEmail},\n\nNýverið baðstu um að lykilorði þínu væri endurstillt fyrir bakendan á sorli.is. \nEftirfarandi kóði er virkur í {timeout} mínútur:\n\n{code}\n\nEf þú óskaðir ekki eftir þessu þá hunsaðu þennan tölvupóst eða talaðu við vefstjóran ef þú vilt fræðast nánar.\nAf öryggisástæðum vinsamlegast áframsendu þennan tölvupóst ALLS EKKI.",
"login.email.password-reset.subject": "Kóðinn þinn fyrir endurstillingu lykilorðs",
"login.remember": "Vista innskráningu",
"login.reset": "Endurheimta lykilorð takk",
"login.toggleText.code.email": "Innskrá með netfangi",
"login.toggleText.code.email-password": "Innskrá með lykilorði",
"login.toggleText.password-reset.email": "Mannstu ekki lykilorðið?",
"login.toggleText.password-reset.email-password": "← Aftur í innskráningu",
"logout": "Útskrá",
"menu": "Valmynd",
"meridiem": "AM/PM",
"mime": "Miðilsgerð",
"minutes": "Mínútur",
"month": "Mánuður",
"months.april": "Apríl",
"months.august": "Ágúst",
"months.december": "Desember",
"months.february": "Febrúar",
"months.january": "Janúar",
"months.july": "Júlí",
"months.june": "Júní",
"months.march": "Mars",
"months.may": "Maí",
"months.november": "Nóvember",
"months.october": "Október",
"months.september": "September",
"more": "Meira",
"name": "Nafn",
"next": "Næst",
"no": "nei",
"off": "Af",
"on": "Á",
"open": "Opna",
"open.newWindow": "Opna í nýjum glugga",
"options": "Valmöguleikar",
"options.none": "Engir valmöguleikar",
"orientation": "Snúningur",
"orientation.landscape": "Langsnið",
"orientation.portrait": "Skammsnið",
"orientation.square": "Ferningur",
"page.blueprint": "Þessi síða hefur ekki skipan (e. blueprint) ennþá. Þú mátt skilgreina skipanina í <strong>/site/blueprints/{template}.yml</strong>",
"page.changeSlug": "Breyta vefslóð",
"page.changeSlug.fromTitle": "Slóð af titli",
"page.changeStatus": "Breyta stöðu",
"page.changeStatus.position": "Veldu ákjósanlega stöðu",
"page.changeStatus.select": "Veldu nýja stöðu",
"page.changeTemplate": "Breyta sniðmáti",
"page.delete.confirm": "Viltu virkilega farga <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Þessi síða hefur undirsíður</strong>. <br>Þeim mun verða fargað líka.",
"page.delete.confirm.title": "Skráðu síðutitilinn til staðfestingar",
"page.draft.create": "Stofna uppkast",
"page.duplicate.appendix": "Afrita",
"page.duplicate.files": "Afrita skrár",
"page.duplicate.pages": "Afrita síður",
"page.sort": "Breyta röðun",
"page.status": "Staða",
"page.status.draft": "Uppkast",
"page.status.draft.description": "Þessi síða er uppkast og er aðeins sýnileg höfundum og stjórum eða gegnum falinn tengil.",
"page.status.listed": "Útgefin og listuð",
"page.status.listed.description": "Síðan er aðgengileg öllum og sýnleg í leiðarkerfi vefsins",
"page.status.unlisted": "Útgefin",
"page.status.unlisted.description": "Síðan er aðgengileg öllum en þó ekki sýnileg í leiðarkerfi vefsins",
"pages": "Síður",
"pages.empty": "Engar síður enn",
"pages.status.draft": "Uppköst",
"pages.status.listed": "Útgefnar og listaðar",
"pages.status.unlisted": "Útgefnar",
"pagination.page": "Síða",
"password": "Lykilorð",
"paste": "Líma",
"paste.after": "Líma eftir",
"pixel": "Punkta",
"plugins": "Viðbætur",
"prev": "Fyrri",
"preview": "Forskoða",
"remove": "Fjarlægja",
"rename": "Endurnefna",
"replace": "Setja í stað",
"retry": "Reyndu aftur",
"revert": "Taka upp fyrri siði",
"revert.confirm": "Viltu virkilega <strong>eyða öllum óvistuðum breytingum</strong>?",
"role": "Hlutverk",
"role.admin.description": "Stjórinn hefur öll réttindi",
"role.admin.title": "Stjóri",
"role.all": "Öll",
"role.empty": "Það eru engir notendur með þetta hlutverk",
"role.description.placeholder": "Engin lýsing",
"role.nobody.description": "Þetta hlutverk er til þrautarvara en hefur engin réttindi",
"role.nobody.title": "Enginn",
"save": "Vista",
"search": "Leita",
"search.min": "Lágmark {min} stafir til að leita",
"search.all": "Sýna allt",
"search.results.none": "Engar niðurstöður",
"section.required": "Þetta svæði er nauðsynlegt",
"select": "Velja",
"settings": "Stillingar",
"show": "Sýna",
"size": "Stærð",
"slug": "Slögg",
"sort": "Raða",
"title": "Titill",
"template": "Sniðmát",
"today": "Núna",
"server": "Vefþjónn",
"site.blueprint": "Þessi vefur hefur ekki skipan (e. blueprint) ennþá. Þú mátt skilgreina skipanina í <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Kóðasnið",
"toolbar.button.bold": "Feitletrun",
"toolbar.button.email": "Netfang",
"toolbar.button.headings": "Fyrirsagnir",
"toolbar.button.heading.1": "Fyrirsögn 1",
"toolbar.button.heading.2": "Fyrirsögn 2",
"toolbar.button.heading.3": "Fyrirsögn 3",
"toolbar.button.heading.4": "Fyrirsögn 4",
"toolbar.button.heading.5": "Fyrirsögn 5",
"toolbar.button.heading.6": "Fyrirsögn 6",
"toolbar.button.italic": "Skáletrun",
"toolbar.button.file": "Skrár",
"toolbar.button.file.select": "Veldu skrá",
"toolbar.button.file.upload": "Hlaða inn skrá",
"toolbar.button.link": "Tengill",
"toolbar.button.paragraph": "Efnisgrein",
"toolbar.button.strike": "Gegnumstrika",
"toolbar.button.ol": "Raðaður listi",
"toolbar.button.underline": "Undirstrika",
"toolbar.button.ul": "Áherslumerktur listi",
"translation.author": "Kirby Teymið",
"translation.direction": "ltr",
"translation.name": "Íslenska A137",
"translation.locale": "is_IS",
"upload": "Hlaða inn",
"upload.error.cantMove": "Innhlöðnu skránni var ekki haggað",
"upload.error.cantWrite": "Það mistókst að skrifa skránna í geymslu",
"upload.error.default": "Ekki heppnaðist að hlaða inn skránni",
"upload.error.extension": "Innhleðsla stöðvuð vegna skrárendingar",
"upload.error.formSize": "Innhlaðna skráin er stærri en MAX_FILE_SIZE leyfilegt er.",
"upload.error.iniPostSize": "Innhlaðna skráin er stærri en því sem nemur í post_max_size stillingunni í php.ini",
"upload.error.iniSize": "Innhlaðna skráin er stærri en því sem nemur í upload_max_filesize stillingunni í php.ini",
"upload.error.noFile": "Engri skrá far hlaðið inn",
"upload.error.noFiles": "Engum skrám var hlaðið inn",
"upload.error.partial": "Innhlöðnu skránni var aðeins sótt að hluta",
"upload.error.tmpDir": "Vantar skruggumöppu",
"upload.errors": "Villa",
"upload.progress": "Hleð inn…",
"url": "Slóð",
"url.placeholder": "https://hvitur.is",
"user": "Notandi",
"user.blueprint": "Þér er óhætt að skilgreina fleiri svæði fyrir þetta notenda hlutverk í <strong>/site/blueprints/users/{role}.yml</strong>",
"user.changeEmail": "Breyta netfangi",
"user.changeLanguage": "Breyta tungumáli",
"user.changeName": "Endurnefna þennan notanda",
"user.changePassword": "Breyta lykilorð",
"user.changePassword.new": "Nýtt lykilorð",
"user.changePassword.new.confirm": "Staðfestu nýtt lykilorð…",
"user.changeRole": "Breyta hlutverki",
"user.changeRole.select": "Veldu nýtt hlutverk",
"user.create": "Bæta við nýjum notenda",
"user.delete": "Farga þessum notenda",
"user.delete.confirm": "Viltu virkilega eyða <br><strong>{email}</strong>?",
"users": "Notendur",
"version": "Útgáfa",
"view.account": "Notandareikningurinn þinn",
"view.installation": "Uppsetning",
"view.languages": "Tungumál",
"view.resetPassword": "Endurstilla lykilorð",
"view.site": "Vefsvæðið",
"view.system": "Kerfi",
"view.users": "Notendur",
"welcome": "Komið þér fagnandi",
"year": "Ár",
"yes": "já"
}

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Cambia il tuo nome",
"account.delete": "Elimina l'account",
"account.delete.confirm": "Vuoi davvero eliminare il tuo account? Verrai disconnesso immediatamente. Il tuo account non potrà essere recuperato.",
"add": "Aggiungi",
"author": "Autore",
"avatar": "Immagine del profilo",
"back": "Indietro",
"cancel": "Annulla",
@ -9,6 +14,7 @@
"collapse": "Comprimi",
"collapse.all": "Comprimi tutto",
"copy": "Copia",
"copy.all": "Copia tutto",
"create": "Crea",
"date": "Data",
@ -23,24 +29,28 @@
"days.tue": "Ma",
"days.wed": "Me",
"debugging": "Debugging",
"delete": "Elimina",
"delete.all": "Elimina tutti",
"dimensions": "Dimensioni",
"disabled": "Disabilitato",
"discard": "Abbandona",
"download": "Scarica",
"duplicate": "Duplica",
"edit": "Modifica",
"expand": "Espandi",
"expand.all": "Espandi tutto",
"dialog.files.empty": "Nessun file selezionabile",
"dialog.pages.empty": "Nessuna pagina selezionabile",
"dialog.users.empty": "Nessuno user selezionabile",
"dimensions": "Dimensioni",
"disabled": "Disabilitato",
"discard": "Abbandona",
"download": "Scarica",
"duplicate": "Duplica",
"edit": "Modifica",
"email": "Email",
"email.placeholder": "mail@esempio.com",
"environment": "Ambiente",
"error.access.code": "Codice non valido",
"error.access.login": "Login Invalido",
"error.access.panel": "Non ti è permesso accedere al pannello",
@ -67,7 +77,7 @@
"error.file.changeName.permission": "Non ti è permesso modificare il nome di \"{filename}\"",
"error.file.duplicate": "Un file con il nome \"{filename}\" esiste già",
"error.file.extension.forbidden": "L'estensione \"{extension}\" non è consentita",
"error.file.extension.invalid": "Invalid extension: {extension}",
"error.file.extension.invalid": "Estensione non valida: {extension}",
"error.file.extension.missing": "Il file \"{filename}\" non ha estensione",
"error.file.maxheight": "L'immagine non dev'essere più alta di {height} pixel",
"error.file.maxsize": "Il file è troppo pesante",
@ -83,7 +93,7 @@
"error.file.notFound": "Il file non \u00e8 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": "Invalid file type: {type}",
"error.file.type.invalid": "Tipo di file non valido: {type}",
"error.file.undefined": "Il file non \u00e8 stato trovato",
"error.form.incomplete": "Correggi tutti gli errori nel form...",
@ -92,14 +102,17 @@
"error.language.code": "Inserisci un codice valido per la lingua",
"error.language.duplicate": "La lingua esiste già",
"error.language.name": "Inserisci un nome valido per la lingua",
"error.language.notFound": "La lingua non è stata trovata",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
"error.layout.validation.block": "C'è un errore nel blocco {blockIndex} nel layout {layoutIndex}",
"error.layout.validation.settings": "C'è un errore nelle impostazioni del layout {index}",
"error.license.format": "Inserisci un codice di licenza valido",
"error.license.email": "Inserisci un indirizzo email valido",
"error.license.verification": "Non è stato possibile verificare la licenza",
"error.offline": "Il pannello di controllo è attualmente offline",
"error.page.changeSlug.permission": "Non ti è permesso cambiare l'URL di \"{slug}\"",
"error.page.changeStatus.incomplete": "La pagina contiene errori e non può essere pubblicata",
"error.page.changeStatus.permission": "Lo stato di questa pagina non può essere cambiato",
@ -118,7 +131,7 @@
"error.page.duplicate.permission": "Non ti è permesso duplicare \"{slug}\"",
"error.page.notFound": "La pagina \"{slug}\" non è stata trovata",
"error.page.num.invalid": "Inserisci un numero di ordinamento valido. I numeri non devono essere negativi",
"error.page.slug.invalid": "Please enter a valid URL appendix",
"error.page.slug.invalid": "Per favore inserisci un suffisso valido per l'URL",
"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",
@ -163,8 +176,9 @@
"error.user.password.invalid": "Per favore inserisci una password valida. Le password devono essere lunghe almeno 8 caratteri",
"error.user.password.notSame": "Le password non corrispondono",
"error.user.password.undefined": "L'utente non ha una password",
"error.user.password.wrong": "Wrong password",
"error.user.password.wrong": "Password sbagliata",
"error.user.role.invalid": "Inserisci un ruolo valido",
"error.user.undefined": "L'utente non è stato trovato",
"error.user.update.permission": "Non ti è permesso aggiornare l'utente \"{name}\"",
"error.validation.accepted": "Per favore conferma",
@ -208,6 +222,9 @@
"error.validation.time.between": "Inserisci un orario tra le {min} e le {max}",
"error.validation.url": "Inserisci un URL valido",
"expand": "Espandi",
"expand.all": "Espandi tutto",
"field.required": "Il campo è obbligatorio",
"field.blocks.changeType": "Cambia tipo",
"field.blocks.code.name": "Codice",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Vuoi veramente eliminare i blocchi selezionati?",
"field.blocks.empty": "Nessun blocco inserito",
"field.blocks.fieldsets.label": "Seleziona il tipo di blocco …",
"field.blocks.fieldsets.paste": "Premi <kbd>{{ shortcut }}</kbd> per incollare/importare i blocchi dagli appunti",
"field.blocks.gallery.name": "Galleria",
"field.blocks.gallery.images.empty": "Nessuna immagine inserita",
"field.blocks.gallery.images.label": "Immagini",
@ -233,7 +251,8 @@
"field.blocks.image.name": "Immagine",
"field.blocks.image.placeholder": "Seleziona un'immagine",
"field.blocks.image.ratio": "Rapporto",
"field.blocks.image.url": "Image URL",
"field.blocks.image.url": "URL immagine",
"field.blocks.line.name": "Linea",
"field.blocks.list.name": "Lista",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Testo",
@ -263,7 +282,7 @@
"field.structure.empty": "Non ci sono ancora elementi.",
"field.users.empty": "Nessun utente selezionato",
"file.blueprint": "Questo file non ha ancora un \"blueprint\". Puoi impostarne uno in <strong>/site/blueprints/{template}.yml</strong>",
"file.blueprint": "Questo file non ha ancora un blueprint. Puoi definire la sua configurazione in <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "Sei sicuro di voler eliminare questo file?",
"file.sort": "Cambia posizione",
@ -272,6 +291,7 @@
"hide": "Nascondi",
"hour": "Ora",
"import": "Importa",
"insert": "Inserisci",
"insert.after": "Inserisci dopo",
"insert.before": "Inserisci prima",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Codice per reimpostare la password",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "Qualora il tuo indirizzo email fosse registrato, il codice richiesto è stato inviato tramite email.",
"login.email.login.body": "Ciao {user.nameOrEmail},\n\nHai recentemente richiesto un codice di accesso per il pannello Kirby.\nIl seguente codice sarà valido per {timeout} minuti:\n\n{code}\n\nSe non hai richiesto un codice di accesso, per favore ignora questa email o contatta il tuo amministratore se hai domande. \nPer motivi di sicurezza, per favore NON inoltrare questa email.",
"login.email.login.body": "Ciao {user.nameOrEmail},\n\nHai recentemente richiesto un codice di login per il pannello di controllo di {site}.\nIl seguente codice di login sarà valido per {timeout} minuti:\n\n{code}\n\nSe non hai richiesto un codice di login, per favore ignora questa mail o contatta il tuo amministratore in caso di domande.\nPer sicurezza, per favore NON inoltrare questa email.",
"login.email.login.subject": "Il tuo codice di accesso",
"login.email.password-reset.body": "Ciao {user.nameOrEmail},\n\nHai recentemente richiesto un codice per reimpostare la tua password per il pannello Kirby.\nIl seguente codice sarà valido per {timeout} minuti:\n\n{code}\n\nSe non hai richiesto questo codice, per favore ignora questa email o contatta il tuo amministratore se hai domande. \nPer motivi di sicurezza, per favore NON inoltrare questa email.",
"login.email.password-reset.body": "Ciao {user.nameOrEmail},\n\nHai recentemente richiesto di resettare la password per il pannello di controllo di {site}.\nIl seguente codice di reset della password sarà valido per {timeout} minuti:\n\n{code}\n\nSe non hai richiesto di resettare la password per favore ignora questa email o contatta il tuo amministratore in caso di domande.\nPer sicurezza, per favore NON inoltrare questa email.",
"login.email.password-reset.subject": "Il tuo codice di reimpostazione della password",
"login.remember": "Resta collegato",
"login.reset": "Reimposta la password",
@ -376,7 +396,7 @@
"off": "off",
"on": "on",
"open": "Apri",
"open.newWindow": "Open in new window",
"open.newWindow": "Apri in una finestra nuova",
"options": "Opzioni",
"options.none": "Nessuna opzione",
@ -385,7 +405,7 @@
"orientation.portrait": "Verticale",
"orientation.square": "Quadrato",
"page.blueprint": "Questa pagina non ha ancora un \"blueprint\". Puoi impostarne uno in <strong>/site/blueprints/{template}.yml</strong>",
"page.blueprint": "Questa pagina non ha ancora un blueprint. Puoi definire la sua configurazione in <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Modifica URL",
"page.changeSlug.fromTitle": "Crea in base al titolo",
"page.changeStatus": "Cambia stato",
@ -417,7 +437,10 @@
"pagination.page": "Pagina",
"password": "Password",
"paste": "Incolla",
"paste.after": "Incolla dopo",
"pixel": "Pixel",
"plugins": "Plugins",
"prev": "Precedente",
"preview": "Anteprima",
"remove": "Rimuovi",
@ -454,6 +477,8 @@
"template": "Template",
"today": "Oggi",
"server": "Server",
"site.blueprint": "Il sito non ha ancora un \"blueprint\". Puoi impostarne uno in <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Codice",
@ -463,14 +488,18 @@
"toolbar.button.heading.1": "Titolo 1",
"toolbar.button.heading.2": "Titolo 2",
"toolbar.button.heading.3": "Titolo 3",
"toolbar.button.heading.4": "Titolo 4",
"toolbar.button.heading.5": "Titolo 5",
"toolbar.button.heading.6": "Titolo 6",
"toolbar.button.italic": "Corsivo",
"toolbar.button.file": "File",
"toolbar.button.file.select": "Seleziona un file",
"toolbar.button.file.upload": "Carica un file",
"toolbar.button.link": "Link",
"toolbar.button.strike": "Strike-through",
"toolbar.button.paragraph": "Paragrafo",
"toolbar.button.strike": "Barrato",
"toolbar.button.ol": "Elenco numerato",
"toolbar.button.underline": "Underline",
"toolbar.button.underline": "Sottolinea",
"toolbar.button.ul": "Elenco puntato",
"translation.author": "Kirby Team, Roman Steiner, Manu Moreale",
@ -497,7 +526,7 @@
"url.placeholder": "https://esempio.com",
"user": "Utente",
"user.blueprint": "Puoi definire sezioni e campi del form aggiuntivi per questo ruolo in <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Puoi definire ulteriori sezioni e campi del form aggiuntivi per questo ruolo in <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Modifica email",
"user.changeLanguage": "Cambia lingua",
"user.changeName": "Rinomina questo utente",
@ -516,12 +545,13 @@
"view.account": "Il tuo account",
"view.installation": "Installazione",
"view.languages": "Lingue",
"view.resetPassword": "Reimposta la password",
"view.settings": "Impostazioni",
"view.site": "Sito",
"view.system": "Sistema",
"view.users": "Utenti",
"welcome": "Benvenuto",
"year": "Anno",
"yes": "yes"
"yes": "sì"
}

View file

@ -1,6 +1,11 @@
{
"account.changeName": "이름 변경",
"account.delete": "계정 삭제",
"account.delete.confirm": "계정을 삭제할까요? 계정을 삭제한 뒤에는 복구할 수 없습니다.",
"add": "\ucd94\uac00",
"avatar": "\ud504\ub85c\ud544 \uc774\ubbf8\uc9c0",
"author": "저자",
"avatar": "프로필 이미지",
"back": "복귀",
"cancel": "\ucde8\uc18c",
"change": "\ubcc0\uacbd",
@ -9,6 +14,7 @@
"collapse": "접기",
"collapse.all": "모두 접기",
"copy": "복사",
"copy.all": "모두 복사",
"create": "등록",
"date": "날짜",
@ -23,24 +29,28 @@
"days.tue": "\ud654",
"days.wed": "\uc218",
"debugging": "디버깅",
"delete": "\uc0ad\uc81c",
"delete.all": "모두 삭제",
"dimensions": "크기",
"disabled": "비활성화",
"discard": "무시",
"download": "다운로드",
"duplicate": "복제",
"edit": "\ud3b8\uc9d1",
"expand": "열기",
"expand.all": "모두 열기",
"dialog.files.empty": "선택한 파일이 없습니다.",
"dialog.pages.empty": "선택한 페이지가 없습니다.",
"dialog.users.empty": "선택한 사용자가 없습니다.",
"dimensions": "크기",
"disabled": "비활성화",
"discard": "무시",
"download": "다운로드",
"duplicate": "복제",
"edit": "\ud3b8\uc9d1",
"email": "\uc774\uba54\uc77c \uc8fc\uc18c",
"email.placeholder": "mail@example.com",
"environment": "환경",
"error.access.code": "코드가 올바르지 않습니다.",
"error.access.login": "로그인할 수 없습니다.",
"error.access.panel": "패널에 접근할 권한이 없습니다.",
@ -76,7 +86,7 @@
"error.file.mime.forbidden": "이 MIME 형식({mime})은 업로드할 수 없습니다.",
"error.file.mime.invalid": "MIME 형식({mime})이 올바르지 않습니다.",
"error.file.mime.missing": "파일({filename})의 MIME 형식을 확인할 수 없습니다.",
"error.file.minheight": "{height}픽셀 이상으로 이미지의 높이를 설정하세요.",
"error.file.minheight": "이미지의 높이를 {height}픽셀 이상으로 설정하세요.",
"error.file.minsize": "파일이 너무 작습니다.",
"error.file.minwidth": "이미지의 너비를 {width}픽셀 이상으로 설정하세요.",
"error.file.name.missing": "파일명을 입력하세요.",
@ -92,6 +102,7 @@
"error.language.code": "올바른 언어 코드를 입력하세요.",
"error.language.duplicate": "이미 등록한 언어입니다.",
"error.language.name": "올바른 언어명을 입력하세요.",
"error.language.notFound": "언어를 찾을 수 없습니다.",
"error.layout.validation.block": "레이아웃({layoutIndex})의 블록({blockIndex})을 확인하세요.",
"error.layout.validation.settings": "레이아웃({index})의 옵션을 확인하세요.",
@ -100,6 +111,8 @@
"error.license.email": "올바른 이메일 주소를 입력하세요.",
"error.license.verification": "라이선스 키가 올바르지 않습니다.",
"error.offline": "패널이 오프라인 상태입니다.",
"error.page.changeSlug.permission": "고유 주소({slug})를 변경할 권한이 없습니다.",
"error.page.changeStatus.incomplete": "페이지를 공개할 수 없습니다.",
"error.page.changeStatus.permission": "페이지의 상태를 변경할 수 없습니다.",
@ -119,7 +132,7 @@
"error.page.notFound": "페이지({slug})가 없습니다.",
"error.page.num.invalid": "올바른 정수를 입력하세요.",
"error.page.slug.invalid": "올바른 URL을 입력하세요.",
"error.page.slug.maxlength": "{length}자 이하로 고유 주소를 입력하세요.",
"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.",
@ -165,6 +178,7 @@
"error.user.password.undefined": "암호가 설정되지 않았습니다.",
"error.user.password.wrong": "암호가 올바르지 않습니다.",
"error.user.role.invalid": "올바른 역할을 지정하세요.",
"error.user.undefined": "사용자가 없습니다.",
"error.user.update.permission": "사용자({name})의 정보를 변경할 권한이 없습니다.",
"error.validation.accepted": "확인하세요.",
@ -208,6 +222,9 @@
"error.validation.time.between": "{min}, {max} 사이의 시각을 입력하세요.",
"error.validation.url": "올바른 URL을 입력하세요.",
"expand": "열기",
"expand.all": "모두 열기",
"field.required": "필드를 채우세요.",
"field.blocks.changeType": "유형 변경",
"field.blocks.code.name": "코드",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "선택한 블록을 삭제할까요?",
"field.blocks.empty": "블록이 없습니다.",
"field.blocks.fieldsets.label": "블록의 유형을 선택하세요.",
"field.blocks.fieldsets.paste": "단축키(<kbd>{{ shortcut }}</kbd>)로 클립보드에서 블록을 가져올 수 있습니다.",
"field.blocks.gallery.name": "갤러리",
"field.blocks.gallery.images.empty": "이미지가 없습니다.",
"field.blocks.gallery.images.label": "이미지",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "이미지 선택",
"field.blocks.image.ratio": "비율",
"field.blocks.image.url": "이미지 URL",
"field.blocks.line.name": "가로줄",
"field.blocks.list.name": "목록",
"field.blocks.markdown.name": "마크다운",
"field.blocks.markdown.label": "마크다운",
@ -263,7 +282,7 @@
"field.structure.empty": "항목이 없습니다.",
"field.users.empty": "선택한 사용자가 없습니다.",
"file.blueprint": "블루프린트(<strong>/site/blueprints/{template}.yml</strong>)를 설정하세요.",
"file.blueprint": "블루프린트(<strong>/site/blueprints/files/{blueprint}.yml</strong>)를 설정하세요.",
"file.delete.confirm": "파일(<strong>{filename}</strong>)을 삭제할까요?",
"file.sort": "순서 변경",
@ -272,6 +291,7 @@
"hide": "숨기기",
"hour": "시",
"import": "가져오기",
"insert": "\uc0bd\uc785",
"insert.after": "뒤에 삽입",
"insert.before": "앞에 삽입",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "암호 초기화 코드",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "입력한 이메일 주소로 코드를 전송했습니다.",
"login.email.login.body": "{user.nameOrEmail} 님,\n\nKirby 패널에서 요청한 로그인 코드는 다음과 같습니다. 로그인 코드는 {timeout}분 동안 유효합니다.\n\n{code}\n\n로그인 코드를 요청한 적이 없다면, 이 이메일을 무시하거나 관리자에게 문의하세요. 보안을 위해 이 이메일은 다른 사람과 공유하지 마세요.",
"login.email.login.body": "{user.nameOrEmail} 님,\n\n{site} 패널에서 요청한 로그인 코드는 다음과 같습니다. 로그인 코드는 {timeout}분 동안 유효합니다.\n\n{code}\n\n로그인 코드를 요청한 적이 없다면, 이 이메일을 무시하거나 관리자에게 문의하세요. 보안을 위해 이 이메일은 다른 사람과 공유하지 마세요.",
"login.email.login.subject": "로그인 코드",
"login.email.password-reset.body": "{user.nameOrEmail} 님,\n\nKirby 패널에서 요청한 로그인 코드는 다음과 같습니다. 로그인 코드는 {timeout}분 동안 유효합니다.\n\n{code}\n\n로그인 코드를 요청한 적이 없다면, 이 이메일을 무시하거나 관리자에게 문의하세요. 보안을 위해 이 이메일은 다른 사람과 공유하지 마세요.",
"login.email.password-reset.body": "{user.nameOrEmail} 님,\n\n{site} 패널에서 요청한 암호 초기화 코드는 다음과 같습니다. 암호 초기화 코드는 {timeout}분 동안 유효합니다.\n\n{code}\n\n암호 초기화 코드를 요청한 적이 없다면, 이 이메일을 무시하거나 관리자에게 문의하세요. 보안을 위해 이 이메일은 다른 사람과 공유하지 마세요.",
"login.email.password-reset.subject": "암호 초기화 코드",
"login.remember": "로그인 유지",
"login.reset": "암호 초기화",
@ -372,11 +392,11 @@
"more": "더 보기",
"name": "이름",
"next": "다음",
"no": "no",
"no": "",
"off": "끔",
"on": "켬",
"open": "열기",
"open.newWindow": "Open in new window",
"open.newWindow": "새 창에서 열기",
"options": "옵션",
"options.none": "옵션이 없습니다.",
@ -385,7 +405,7 @@
"orientation.portrait": "세로로 긴 사각형",
"orientation.square": "정사각형",
"page.blueprint": "블루프린트(<strong>/site/blueprints/{template}.yml</strong>)를 설정하세요.",
"page.blueprint": "블루프린트(<strong>/site/blueprints/pages/{blueprint}.yml</strong>)를 설정하세요.",
"page.changeSlug": "고유 주소 변경",
"page.changeSlug.fromTitle": "제목에서 가져오기",
"page.changeStatus": "상태 변경",
@ -417,7 +437,10 @@
"pagination.page": "페이지",
"password": "\uc554\ud638",
"paste": "붙여넣기",
"paste.after": "뒤로 붙여넣기",
"pixel": "픽셀",
"plugins": "플러그인",
"prev": "이전",
"preview": "미리 보기",
"remove": "삭제",
@ -454,6 +477,8 @@
"template": "\ud15c\ud50c\ub9bf",
"today": "오늘",
"server": "서버",
"site.blueprint": "블루프린트(<strong>/site/blueprints/site.yml</strong>)를 설정하세요.",
"toolbar.button.code": "코드",
@ -463,18 +488,22 @@
"toolbar.button.heading.1": "제목 1",
"toolbar.button.heading.2": "제목 2",
"toolbar.button.heading.3": "제목 3",
"toolbar.button.heading.4": "제목 4",
"toolbar.button.heading.5": "제목 5",
"toolbar.button.heading.6": "제목 6",
"toolbar.button.italic": "강조 2",
"toolbar.button.file": "파일",
"toolbar.button.file.select": "파일 선택",
"toolbar.button.file.upload": "파일 업로드",
"toolbar.button.link": "링크",
"toolbar.button.strike": "Strike-through",
"toolbar.button.paragraph": "문단",
"toolbar.button.strike": "취소선",
"toolbar.button.ol": "숫자 목록",
"toolbar.button.underline": "Underline",
"toolbar.button.underline": "밑줄",
"toolbar.button.ul": "기호 목록",
"translation.author": "Kirby 팀",
"translation.direction": "LTR",
"translation.direction": "왼쪽에서 오른쪽",
"translation.name": "한국어",
"translation.locale": "ko_KR",
@ -497,7 +526,7 @@
"url.placeholder": "https://example.com",
"user": "사용자",
"user.blueprint": "블루프린트(<strong>/site/blueprints/users/{role}.yml</strong>)에 섹션과 필드를 추가할 수 있습니다.",
"user.blueprint": "블루프린트(<strong>/site/blueprints/users/{blueprint}.yml</strong>)에 섹션과 필드를 추가할 수 있습니다.",
"user.changeEmail": "이메일 주소 변경",
"user.changeLanguage": "언어 변경",
"user.changeName": "사용자명 변경",
@ -516,12 +545,13 @@
"view.account": "계정",
"view.installation": "\uc124\uce58",
"view.languages": "언어",
"view.resetPassword": "암호 초기화",
"view.settings": "설정",
"view.site": "사이트",
"view.system": "시스템",
"view.users": "\uc0ac\uc6a9\uc790",
"welcome": "반갑습니다.",
"year": "년",
"yes": "yes"
"yes": "아니요"
}

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Change your name",
"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": "Pridėti",
"author": "Author",
"avatar": "Profilio nuotrauka",
"back": "Atgal",
"cancel": "Atšaukti",
@ -9,6 +14,7 @@
"collapse": "Sutraukti",
"collapse.all": "Sutraukti viską",
"copy": "Kopijuoti",
"copy.all": "Kopijuoti visus",
"create": "Sukurti",
"date": "Data",
@ -23,24 +29,28 @@
"days.tue": "Ant",
"days.wed": "Tre",
"debugging": "Debugging",
"delete": "Pašalinti",
"delete.all": "Pašalinti viską",
"dimensions": "Išmatavimai",
"disabled": "Išjungta",
"discard": "Atšaukti",
"download": "Parsisiųsti",
"duplicate": "Kopijuoti",
"edit": "Redaguoti",
"expand": "Išskleisti",
"expand.all": "Išskleisti viską",
"dialog.files.empty": "Nėra failų pasirinkimui",
"dialog.pages.empty": "Nėra puslapių pasirinkimui",
"dialog.users.empty": "Nėra vartotojų pasirinkimui",
"dimensions": "Išmatavimai",
"disabled": "Išjungta",
"discard": "Atšaukti",
"download": "Parsisiųsti",
"duplicate": "Dublikuoti",
"edit": "Redaguoti",
"email": "El. paštas",
"email.placeholder": "mail@example.com",
"environment": "Environment",
"error.access.code": "Neteisinas kodas",
"error.access.login": "Neteisingas prisijungimo vardas",
"error.access.panel": "Neturite teisės prisijungti prie valdymo pulto",
@ -92,6 +102,7 @@
"error.language.code": "Prašome įrašyti teisingą kalbos kodą",
"error.language.duplicate": "Tokia kalba jau yra",
"error.language.name": "Prašome įrašyti teisingą kalbos pavadinimą",
"error.language.notFound": "Nepavyko rasti šios kalbos",
"error.layout.validation.block": "Yra klaida bloke {blockIndex} išdėstyme {layoutIndex}",
"error.layout.validation.settings": "Yra klaida išdėstymo {index} nustatymuose",
@ -100,6 +111,8 @@
"error.license.email": "Prašome įrašyti teisingą el. pašto adresą",
"error.license.verification": "Nepavyko patikrinti licenzijos",
"error.offline": "The Panel is currently offline",
"error.page.changeSlug.permission": "Neturite teisės pakeisti \"{slug}\" URL",
"error.page.changeStatus.incomplete": "Puslapis turi klaidų ir negali būti paskelbtas",
"error.page.changeStatus.permission": "Šiam puslapiui negalima pakeisti statuso",
@ -118,7 +131,7 @@
"error.page.duplicate.permission": "Neturite leidimo dubliuoti \"{slug}\"",
"error.page.notFound": "Puslapis \"{slug}\" nerastas",
"error.page.num.invalid": "Įrašykite teisingą eiliškumo numerį. Numeris negali būti neigiamas.",
"error.page.slug.invalid": "Please enter a valid URL appendix",
"error.page.slug.invalid": "Įrašykite teisingą URL priedą",
"error.page.slug.maxlength": "url adreso maksimalus simbolių kiekis: \"{length}\"",
"error.page.sort.permission": "Puslapiui \"{slug}\" negalima pakeisti eiliškumo",
"error.page.status.invalid": "Nustatykite teisingą puslapio statusą",
@ -163,8 +176,9 @@
"error.user.password.invalid": "Prašome įrašyti galiojantį slaptažodį. Slaptažodį turi sudaryti bent 8 simboliai.",
"error.user.password.notSame": "Slaptažodžiai nesutampa",
"error.user.password.undefined": "Vartotojas neturi slaptažodžio",
"error.user.password.wrong": "Wrong password",
"error.user.password.wrong": "Neteisingas slaptažodis",
"error.user.role.invalid": "Įrašykite teisingą rolę",
"error.user.undefined": "Vartotojas nerastas",
"error.user.update.permission": "Neturite teisės keisti vartotojo \"{name}\"",
"error.validation.accepted": "Prašome patvirtinti",
@ -208,6 +222,9 @@
"error.validation.time.between": "Įrašykite laiką tarp {min} ir {max}",
"error.validation.url": "Prašome įrašyti teisingą URL",
"expand": "Išskleisti",
"expand.all": "Išskleisti viską",
"field.required": "Laukas privalomas",
"field.blocks.changeType": "Pakeisti tipą",
"field.blocks.code.name": "Kodas",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Ar tikrai norite pašalinti pasirinktus blokus?",
"field.blocks.empty": "Dar nėra blokų",
"field.blocks.fieldsets.label": "Pasirinkite bloko tipą ...",
"field.blocks.fieldsets.paste": "Spauskite <kbd>{{ shortcut }}</kbd> įterpti/importuoti nukopijuotus blokus",
"field.blocks.gallery.name": "Galerija",
"field.blocks.gallery.images.empty": "Dar nėra nuotraukų",
"field.blocks.gallery.images.label": "Nuotraukos",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Pasirinkite nuotrauką",
"field.blocks.image.ratio": "Proporcijos",
"field.blocks.image.url": "Nuotraukos URL",
"field.blocks.line.name": "Linija",
"field.blocks.list.name": "Sąrašas",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Tekstas",
@ -263,7 +282,7 @@
"field.structure.empty": "Dar nėra įrašų",
"field.users.empty": "Dar nėra vartotojų",
"file.blueprint": "Šis failas dar neturi blueprint. Jūs galite nustatyti jį <strong>/site/blueprints/{template}.yml</strong>",
"file.blueprint": "Šis failas dar neturi blueprint. Galite nustatyti jį per <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "Ar tikrai norite pašalinti <br><strong>{filename}</strong>?",
"file.sort": "Pakeisti poziciją",
@ -272,6 +291,7 @@
"hide": "Paslėpti",
"hour": "Valanda",
"import": "Importuoti",
"insert": "Įterpti",
"insert.after": "Įterpti po",
"insert.before": "Įterpti prieš",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Slaptažodžio atstatymo kodas",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "Jei jūsų el. paštas yra užregistruotas, užklaistas kodas buvo išsiųstas el. paštu.",
"login.email.login.body": "Sveiki, {user.nameOrEmail},\n\nJūs ką tik užklausėte prisijungimo kodą svetainės valdymui.\nŠis kodas galios {timeout} minučių:\n\n{code}\n\nJei neprašėte šio kodo, galite ignoruoti šį laišką arba kreiptis į administratorių dėl patikslinimo.\nDėl saugumo, prašome nepersiųsti šio laiško kitiems.",
"login.email.login.body": "Sveiki, {user.nameOrEmail},\n\nNeseniai užklausėte prisijungimo kodo svetainėje {site}.\nŠis kodas galios {timeout} min.:\n\n{code}\n\nJei neprašėte šio kodo, tiesiog ignoruokite, arba susisiekite su administratoriumi.\nDėl saugumo, prašome NEPERSIŲSTI šio laiško.",
"login.email.login.subject": "Jūsų prisijungimo kodas",
"login.email.password-reset.body": "Sveiki, {user.nameOrEmail},\n\njūs ką tik užklausėte slaptažodžio atstatymo kodą svetainės valdymui .\nŠis kodas galios {timeout} minučių:\n\n{code}\n\nJei neprašėte šio kodo, galite ignoruoti šį laišką arba kreiptis į administratorių dėl patikslinimo.\nDėl saugumo, prašome nepersiųsti šio laiško kitiems.",
"login.email.password-reset.body": "Sveiki, {user.nameOrEmail},\n\nNeseniai užklausėte naujo slaptažodžio kūrimo kodo svetainėje {site}.\nŠis kodas galios {timeout} min.:\n\n{code}\n\nJei neprašėte šio kodo, tiesiog ignoruokite, arba susisiekite su administratoriumi.\nDėl saugumo, prašome NEPERSIŲSTI šio laiško",
"login.email.password-reset.subject": "Jūsų slaptažodžio atstatymo kodas ",
"login.remember": "Likti prisijungus",
"login.reset": "Sukurti naują slaptažodį",
@ -372,11 +392,11 @@
"more": "Daugiau",
"name": "Pavadinimas",
"next": "Toliau",
"no": "no",
"off": "off",
"on": "on",
"no": "ne",
"off": "ne",
"on": "taip",
"open": "Atidaryti",
"open.newWindow": "Open in new window",
"open.newWindow": "Atidaryti naujame lange",
"options": "Pasirinkimai",
"options.none": "Nėra pasirinkimų",
@ -385,7 +405,7 @@
"orientation.portrait": "Portretas",
"orientation.square": "Kvadratas",
"page.blueprint": "Šis puslapis dar neturi blueprint. Jūs galite nustatyti jį <strong>/site/blueprints/{template}.yml</strong>",
"page.blueprint": "Šis puslapis dar neturi blueprint. Galite jį nustatyti per <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Pakeisti URL",
"page.changeSlug.fromTitle": "Sukurti URL pagal pavadinimą",
"page.changeStatus": "Pakeisti statusą",
@ -417,7 +437,10 @@
"pagination.page": "Puslapis",
"password": "Slaptažodis",
"paste": "Įterpti",
"paste.after": "Įterpti po",
"pixel": "Pikselis",
"plugins": "Plugins",
"prev": "Ankstesnis",
"preview": "Peržiūra",
"remove": "Pašalinti",
@ -454,6 +477,8 @@
"template": "Puslapio šablonas",
"today": "Šiandien",
"server": "Server",
"site.blueprint": "Svetainė neturi blueprint. Jūs galite nustatyti jį <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Kodas",
@ -463,14 +488,18 @@
"toolbar.button.heading.1": "Heading 1",
"toolbar.button.heading.2": "Heading 2",
"toolbar.button.heading.3": "Heading 3",
"toolbar.button.heading.4": "Antrašte 4",
"toolbar.button.heading.5": "Antrašte 5",
"toolbar.button.heading.6": "Antrašte 6",
"toolbar.button.italic": "Italic",
"toolbar.button.file": "Failas",
"toolbar.button.file.select": "Pasirinkite failą",
"toolbar.button.file.upload": "Įkelti failą",
"toolbar.button.link": "Nuoroda",
"toolbar.button.strike": "Strike-through",
"toolbar.button.paragraph": "Paragrafas",
"toolbar.button.strike": "Perbraukimas",
"toolbar.button.ol": "Sąrašas su skaičiais",
"toolbar.button.underline": "Underline",
"toolbar.button.underline": "Pabraukimas",
"toolbar.button.ul": "Sąrašas su taškais",
"translation.author": "Roman U",
@ -497,7 +526,7 @@
"url.placeholder": "https://example.com",
"user": "Vartotojas",
"user.blueprint": "Galite nustatyti papildomas sekcijas ir formos laukelius šiai vartotojo rolei faile <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Galite nustatyti papildomas sekcijas ir formos laukelius šiam vartotojui per <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Keisti el. paštą",
"user.changeLanguage": "Keisti kalbą",
"user.changeName": "Pervadinti vartotoją",
@ -516,12 +545,13 @@
"view.account": "Jūsų paskyra",
"view.installation": "Installation",
"view.languages": "Kalbos",
"view.resetPassword": "Sukurti naują slaptažodį",
"view.settings": "Nustatymai",
"view.site": "Svetainė",
"view.system": "System",
"view.users": "Vartotojai",
"welcome": "Sveiki",
"year": "Metai",
"yes": "yes"
"yes": "taip"
}

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Change your name",
"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": "Legg til",
"author": "Author",
"avatar": "Profilbilde",
"back": "Tilbake",
"cancel": "Avbryt",
@ -9,6 +14,7 @@
"collapse": "Collapse",
"collapse.all": "Collapse All",
"copy": "Kopier",
"copy.all": "Copy all",
"create": "Opprett",
"date": "Dato",
@ -23,24 +29,28 @@
"days.tue": "Tir",
"days.wed": "Ons",
"debugging": "Debugging",
"delete": "Slett",
"delete.all": "Delete all",
"dimensions": "Dimensjoner",
"disabled": "Disabled",
"discard": "Forkast",
"download": "Download",
"duplicate": "Duplicate",
"edit": "Rediger",
"expand": "Expand",
"expand.all": "Expand All",
"dialog.files.empty": "No files to select",
"dialog.pages.empty": "No pages to select",
"dialog.users.empty": "No users to select",
"dimensions": "Dimensjoner",
"disabled": "Disabled",
"discard": "Forkast",
"download": "Download",
"duplicate": "Duplicate",
"edit": "Rediger",
"email": "Epost",
"email.placeholder": "epost@eksempel.no",
"environment": "Environment",
"error.access.code": "Invalid code",
"error.access.login": "Ugyldig innlogging",
"error.access.panel": "Du har ikke tilgang til panelet",
@ -92,6 +102,7 @@
"error.language.code": "Please enter a valid code for the language",
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.language.notFound": "The language could not be found",
"error.layout.validation.block": "There's an error in block {blockIndex} in layout {layoutIndex}",
"error.layout.validation.settings": "There's an error in layout {index} settings",
@ -100,6 +111,8 @@
"error.license.email": "Vennligst skriv inn en gyldig e-postadresse",
"error.license.verification": "The license could not be verified",
"error.offline": "The Panel is currently offline",
"error.page.changeSlug.permission": "Du kan ikke endre URLen for denne siden",
"error.page.changeStatus.incomplete": "Siden har feil og kan ikke publiseres",
"error.page.changeStatus.permission": "Sidens status kan ikke endres",
@ -165,6 +178,7 @@
"error.user.password.undefined": "Brukeren har ikke et passord",
"error.user.password.wrong": "Wrong password",
"error.user.role.invalid": "Vennligst skriv inn en gyldig rolle",
"error.user.undefined": "Brukeren kunne ikke bli funnet",
"error.user.update.permission": "Du har ikke tillatelse til å oppdatere brukeren \"{name}\"",
"error.validation.accepted": "Vennligst bekreft",
@ -208,6 +222,9 @@
"error.validation.time.between": "Please enter a time between {min} and {max}",
"error.validation.url": "Vennligst skriv inn en gyldig URL",
"expand": "Expand",
"expand.all": "Expand All",
"field.required": "The field is required",
"field.blocks.changeType": "Change type",
"field.blocks.code.name": "Kode",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Do you really want to delete the selected blocks?",
"field.blocks.empty": "No blocks yet",
"field.blocks.fieldsets.label": "Please select a block type …",
"field.blocks.fieldsets.paste": "Press <kbd>{{ shortcut }}</kbd> to paste/import blocks from your clipboard",
"field.blocks.gallery.name": "Gallery",
"field.blocks.gallery.images.empty": "No images yet",
"field.blocks.gallery.images.label": "Images",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Select an image",
"field.blocks.image.ratio": "Ratio",
"field.blocks.image.url": "Image URL",
"field.blocks.line.name": "Line",
"field.blocks.list.name": "List",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Text",
@ -263,7 +282,7 @@
"field.structure.empty": "Ingen oppf\u00f8ringer enda",
"field.users.empty": "Ingen bruker har blitt valgt",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "Vil du virkelig slette denne filen?",
"file.sort": "Change position",
@ -272,6 +291,7 @@
"hide": "Hide",
"hour": "Time",
"import": "Import",
"insert": "Sett Inn",
"insert.after": "Insert after",
"insert.before": "Insert before",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Password reset code",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "If your email address is registered, the requested code was sent via email.",
"login.email.login.body": "Hi {user.nameOrEmail},\n\nYou recently requested a login code for the Kirby Panel.\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": "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.subject": "Your login code",
"login.email.password-reset.body": "Hi {user.nameOrEmail},\n\nYou recently requested a password reset code for the Kirby Panel.\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": "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.subject": "Your password reset code",
"login.remember": "Hold meg innlogget",
"login.reset": "Reset password",
@ -385,7 +405,7 @@
"orientation.portrait": "Portrett",
"orientation.square": "Kvadrat",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/{template}.yml</strong>",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Endre URL",
"page.changeSlug.fromTitle": "Opprett fra tittel",
"page.changeStatus": "Endre status",
@ -417,7 +437,10 @@
"pagination.page": "Side",
"password": "Passord",
"paste": "Paste",
"paste.after": "Paste after",
"pixel": "Piksel",
"plugins": "Plugins",
"prev": "Forrige",
"preview": "Preview",
"remove": "Fjern",
@ -454,6 +477,8 @@
"template": "Mal",
"today": "I dag",
"server": "Server",
"site.blueprint": "The site has no blueprint yet. You can define the setup in <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Kode",
@ -463,11 +488,15 @@
"toolbar.button.heading.1": "Overskrift 1",
"toolbar.button.heading.2": "Overskrift 2",
"toolbar.button.heading.3": "Overskrift 3",
"toolbar.button.heading.4": "Heading 4",
"toolbar.button.heading.5": "Heading 5",
"toolbar.button.heading.6": "Heading 6",
"toolbar.button.italic": "Kursiv tekst",
"toolbar.button.file": "Fil",
"toolbar.button.file.select": "Select a file",
"toolbar.button.file.upload": "Upload a file",
"toolbar.button.link": "Adresse",
"toolbar.button.paragraph": "Paragraph",
"toolbar.button.strike": "Strike-through",
"toolbar.button.ol": "Ordnet liste",
"toolbar.button.underline": "Underline",
@ -497,7 +526,7 @@
"url.placeholder": "https://example.com",
"user": "Bruker",
"user.blueprint": "Du kan definere flere seksjoner og skjemafelter for denne brukerrollen i <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "You can define additional sections and form fields for this user role in <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Endre e-post",
"user.changeLanguage": "Endre språk",
"user.changeName": "Angi nytt navn for denne brukeren",
@ -516,9 +545,10 @@
"view.account": "Din konto",
"view.installation": "Installasjon",
"view.languages": "Språk",
"view.resetPassword": "Reset password",
"view.settings": "Innstillinger",
"view.site": "Side",
"view.system": "System",
"view.users": "Brukere",
"welcome": "Velkommen",

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Wijzig je naam",
"account.delete": "Verwijder je account",
"account.delete.confirm": "Wil je echt je account verwijderen? Je wordt direct uitgelogd. Uw account kan niet worden hersteld.",
"add": "Voeg toe",
"author": "Auteur",
"avatar": "Avatar",
"back": "Terug",
"cancel": "Annuleren",
@ -9,6 +14,7 @@
"collapse": "Sluit",
"collapse.all": "Sluit alles",
"copy": "Kopiëren",
"copy.all": "Kopieer alles",
"create": "Aanmaken",
"date": "Datum",
@ -23,24 +29,28 @@
"days.tue": "Di",
"days.wed": "Wo",
"debugging": "Foutopsporing",
"delete": "Verwijderen",
"delete.all": "Verwijder alles",
"dimensions": "Dimensies",
"disabled": "Uitgeschakeld",
"discard": "Annuleren",
"download": "Download",
"duplicate": "Dupliceren",
"edit": "Wijzig",
"expand": "Open",
"expand.all": "Open alles",
"dialog.files.empty": "Geen bestanden om te selecteren",
"dialog.pages.empty": "Geen pagina's om te selecteren",
"dialog.users.empty": "Geen gebruikers om te selecteren",
"dimensions": "Dimensies",
"disabled": "Uitgeschakeld",
"discard": "Annuleren",
"download": "Download",
"duplicate": "Dupliceren",
"edit": "Wijzig",
"email": "E-mailadres",
"email.placeholder": "mail@voorbeeld.nl",
"environment": "Omgeving",
"error.access.code": "Ongeldige code",
"error.access.login": "Ongeldige login",
"error.access.panel": "Je hebt geen toegang tot het Panel",
@ -92,6 +102,7 @@
"error.language.code": "Vul een geldige code voor deze taal in",
"error.language.duplicate": "De taal bestaat al",
"error.language.name": "Vul een geldige naam voor deze taal in",
"error.language.notFound": "De taal kan niet worden gevonden",
"error.layout.validation.block": "Er is een fout gevonden in blok {blockIndex} in ontwerp {layoutIndex}",
"error.layout.validation.settings": "Er is een fout gevonden in de instellingen van ontwerp {index} ",
@ -100,6 +111,8 @@
"error.license.email": "Gelieve een geldig emailadres in te voeren",
"error.license.verification": "De licentie kon niet worden geverifieerd. ",
"error.offline": "Het Panel is momenteel offline",
"error.page.changeSlug.permission": "Je kunt de URL van deze pagina niet wijzigen",
"error.page.changeStatus.incomplete": "Deze pagina bevat fouten en kan niet worden gepubliceerd",
"error.page.changeStatus.permission": "De status van deze pagina kan niet worden gewijzigd",
@ -118,7 +131,7 @@
"error.page.duplicate.permission": "Je bent niet gemachtigd om \"{slug}\" te dupliceren",
"error.page.notFound": "De pagina \"{slug}\" kan niet worden gevonden",
"error.page.num.invalid": "Vul een geldig sorteer-cijfer in. Het cijfer mag niet negatief zijn",
"error.page.slug.invalid": "Please enter a valid URL appendix",
"error.page.slug.invalid": "Vul een geldig URL-achtervoegsel in",
"error.page.slug.maxlength": "Slug lengte moet minder dan \"{length}\" tekens bevatten",
"error.page.sort.permission": "De pagina \"{slug}\" kan niet worden gesorteerd",
"error.page.status.invalid": "Zorg voor een geldige paginastatus",
@ -163,8 +176,9 @@
"error.user.password.invalid": "Gelieve een geldig wachtwoord in te voeren. Wachtwoorden moeten minstens 8 karakters lang zijn.",
"error.user.password.notSame": "De wachtwoorden komen niet overeen",
"error.user.password.undefined": "De gebruiker heeft geen wachtwoord",
"error.user.password.wrong": "Wrong password",
"error.user.password.wrong": "Fout wachtwoord",
"error.user.role.invalid": "Gelieve een geldige rol in te voeren",
"error.user.undefined": "De gebruiker kan niet worden gevonden",
"error.user.update.permission": "Je hebt geen rechten om gebruiker \"{name}\" te updaten",
"error.validation.accepted": "Gelieve te bevestigen",
@ -208,6 +222,9 @@
"error.validation.time.between": "Voer een tijd in tussen {min} en {max}",
"error.validation.url": "Vul een geldige URL in",
"expand": "Open",
"expand.all": "Open alles",
"field.required": "Dit veld is verplicht",
"field.blocks.changeType": "Wijzig type",
"field.blocks.code.name": "Code",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Wil je de geselecteerde blokken echt verwijderen?",
"field.blocks.empty": "Nog geen blokken",
"field.blocks.fieldsets.label": "Selecteer een bloktype ...",
"field.blocks.fieldsets.paste": "Druk op <kbd>{{ shortcut }}</kbd> om blokken van je klembord te plakken/importeren",
"field.blocks.gallery.name": "Galerij",
"field.blocks.gallery.images.empty": "Nog geen afbeeldingen",
"field.blocks.gallery.images.label": "Afbeeldingen",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Selecteer een afbeelding",
"field.blocks.image.ratio": "Verhouding",
"field.blocks.image.url": "Afbeeldings-URL",
"field.blocks.line.name": "Lijn",
"field.blocks.list.name": "Lijst",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Tekst",
@ -263,7 +282,7 @@
"field.structure.empty": "Nog geen items.",
"field.users.empty": "Nog geen gebruikers geselecteerd",
"file.blueprint": "Dit bestand heeft nog geen ontwerp. Je kan het ontwerp hier plaatsen <strong>/site/blueprints/{template}.yml</strong>",
"file.blueprint": "Dit bestand heeft nog geen blauwdruk. U kunt de instellingen definiëren in <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "Wil je dit bestand <br><strong>{filename}</strong> verwijderen?",
"file.sort": "Verander positie",
@ -272,6 +291,7 @@
"hide": "Verberg",
"hour": "Uur",
"import": "Importeer",
"insert": "Toevoegen",
"insert.after": "Voeg toe na",
"insert.before": "Voeg toe voor",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Wachtwoord herstel code",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "Als uw e-mailadres geregistreerd is, werd de gevraagde code per e-mail verzonden.",
"login.email.login.body": "Hallo {user.nameOrEmail},\n\nU heeft onlangs een inlogcode aangevraagd voor het Kirby Panel.\nDe volgende inlogcode is geldig voor {timeout} minuten:\n\n{code}\n\nIndien u geen inlogcode heeft aangevraagd, negeer dan alstublieft deze email of neem contact op met uw beheerder indien u vragen heeft.\nVoor de veiligheid, gelieve deze email NIET door te sturen.",
"login.email.login.body": "Hallo {user.nameOrEmail},\n\nJe hebt onlangs een inlogcode aangevraagd voor het Panel van {site}.\nDe volgende inlogcode is {timeout} minuten geldig:\n\n{code}\n\nAls je geen inlogcode hebt aangevraagd, mag je deze mail negeren of neem je contact op met uw beheerder.\nOm veiligheidsredenen verzoeken wij deze e-mail NIET door te sturen.",
"login.email.login.subject": "Jouw log in code",
"login.email.password-reset.body": "Hallo {user.nameOrEmail},\n\nU heeft onlangs een wachtwoord reset code aangevraagd voor het Kirby Panel.\nDe volgende wachtwoord reset code is geldig voor {timeout} minuten:\n\n{code}\n\nAls u geen wachtwoord reset code heeft aangevraagd, negeer deze e-mail dan alstublieft of neem contact op met uw beheerder als u vragen heeft.\nVoor de veiligheid, gelieve deze email NIET door te sturen.",
"login.email.password-reset.body": "Hallo {user.nameOrEmail},\n\nJe hebt onlangs een paswoord herstel code aangevraagd voor het Panel van {site}.\nDe volgende paswoord herstel code is {timeout} minuten geldig:\n\n{code}\n\nAls je geen paswoord herstel code hebt aangevraagd, mag je deze mail negeren of neem je contact op met uw beheerder.\nOm veiligheidsredenen verzoeken wij deze e-mail NIET door te sturen.",
"login.email.password-reset.subject": "Jouw wachtwoord herstel code",
"login.remember": "Houd mij ingelogd",
"login.reset": "Wachtwoord herstellen",
@ -372,11 +392,11 @@
"more": "Meer",
"name": "Naam",
"next": "Volgende",
"no": "no",
"no": "nee",
"off": "uit",
"on": "aan",
"open": "Open",
"open.newWindow": "Open in new window",
"open.newWindow": "Openen in een nieuw scherm",
"options": "Opties",
"options.none": "Geen opties beschikbaar",
@ -385,7 +405,7 @@
"orientation.portrait": "Staand",
"orientation.square": "Vierkant",
"page.blueprint": "Deze pagina heeft nog geen ontwerp. Je kan het ontwerp hier plaatsten <strong>/site/blueprints/{template}.yml</strong>",
"page.blueprint": "Deze pagina heeft nog geen blauwdruk. Je kan de instellingen definiëren in <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Verander URL",
"page.changeSlug.fromTitle": "Aanmaken op basis van titel",
"page.changeStatus": "Wijzig status",
@ -417,7 +437,10 @@
"pagination.page": "Pagina",
"password": "Wachtwoord",
"paste": "Plak",
"paste.after": "Plak achter",
"pixel": "Pixel",
"plugins": "Plugins",
"prev": "Vorige",
"preview": "Voorbeeld",
"remove": "Verwijder",
@ -454,6 +477,8 @@
"template": "Template",
"today": "Vandaag",
"server": "Server",
"site.blueprint": "Deze website heeft nog geen ontwerp. Je kan het ontwerp hier plaatsen<strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Code",
@ -463,14 +488,18 @@
"toolbar.button.heading.1": "Koptekst 1",
"toolbar.button.heading.2": "Koptekst 2",
"toolbar.button.heading.3": "Koptekst 3",
"toolbar.button.heading.4": "Hoofding 4",
"toolbar.button.heading.5": "Hoofding 5",
"toolbar.button.heading.6": "Hoofding 6",
"toolbar.button.italic": "Cursieve tekst",
"toolbar.button.file": "Bestand",
"toolbar.button.file.select": "Selecteer een bestand",
"toolbar.button.file.upload": "Upload bestand",
"toolbar.button.link": "Link",
"toolbar.button.strike": "Strike-through",
"toolbar.button.paragraph": "Paragraaf",
"toolbar.button.strike": "Doorstreept",
"toolbar.button.ol": "Genummerde lijst",
"toolbar.button.underline": "Underline",
"toolbar.button.underline": "Onderlijn",
"toolbar.button.ul": "Opsomming",
"translation.author": "Het team van Kirby",
@ -497,7 +526,7 @@
"url.placeholder": "https://voorbeeld.nl",
"user": "Gebruiker",
"user.blueprint": "Je kunt extra zones en formuliervelden voor deze rol toevoegen in <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "Je kan aanvullende secties en formuliervelden voor deze gebruikersrol definiëren in <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Email veranderen",
"user.changeLanguage": "Taal veranderen",
"user.changeName": "Gebruiker hernoemen",
@ -516,12 +545,13 @@
"view.account": "Jouw account",
"view.installation": "Installatie",
"view.languages": "Talen",
"view.resetPassword": "Wachtwoord herstellen",
"view.settings": "Opties",
"view.site": "Site",
"view.system": "Systeem",
"view.users": "Gebruikers",
"welcome": "Welkom",
"year": "Jaar",
"yes": "yes"
"yes": "ja"
}

View file

@ -1,5 +1,10 @@
{
"account.changeName": "Change your name",
"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": "Dodaj",
"author": "Author",
"avatar": "Zdj\u0119cie profilowe",
"back": "Wróć",
"cancel": "Anuluj",
@ -9,6 +14,7 @@
"collapse": "Zwiń",
"collapse.all": "Zwiń wszystkie",
"copy": "Kopiuj",
"copy.all": "Copy all",
"create": "Utwórz",
"date": "Data",
@ -23,24 +29,28 @@
"days.tue": "Wt",
"days.wed": "\u015ar",
"debugging": "Debugging",
"delete": "Usu\u0144",
"delete.all": "Usuń wszystkie",
"dimensions": "Wymiary",
"disabled": "Wyłączone",
"discard": "Odrzu\u0107",
"download": "Pobierz",
"duplicate": "Zduplikuj",
"edit": "Edytuj",
"expand": "Rozwiń",
"expand.all": "Rozwiń wszystkie",
"dialog.files.empty": "Brak plików do wyboru",
"dialog.pages.empty": "Brak stron do wyboru",
"dialog.users.empty": "Brak użytkowników do wyboru",
"dimensions": "Wymiary",
"disabled": "Wyłączone",
"discard": "Odrzu\u0107",
"download": "Pobierz",
"duplicate": "Zduplikuj",
"edit": "Edytuj",
"email": "Email",
"email.placeholder": "mail@example.com",
"environment": "Environment",
"error.access.code": "Nieprawidłowy kod",
"error.access.login": "Nieprawidłowy login",
"error.access.panel": "Nie masz uprawnień by dostać się do panelu",
@ -92,6 +102,7 @@
"error.language.code": "Wprowadź poprawny kod języka.",
"error.language.duplicate": "Język już istnieje.",
"error.language.name": "Wprowadź poprawną nazwę języka.",
"error.language.notFound": "The language could not be found",
"error.layout.validation.block": "W bloku {blockIndex} w układzie {layoutIndex} jest błąd",
"error.layout.validation.settings": "W ustawieniach układu {index} jest błąd",
@ -100,6 +111,8 @@
"error.license.email": "Wprowadź poprawny adres email",
"error.license.verification": "Nie udało się zweryfikować licencji",
"error.offline": "The Panel is currently offline",
"error.page.changeSlug.permission": "Nie możesz zmienić końcówki adresu URL w \"{slug}\"",
"error.page.changeStatus.incomplete": "Strona zawiera błędy i nie można jej opublikować",
"error.page.changeStatus.permission": "Status tej strony nie może zostać zmieniony",
@ -165,6 +178,7 @@
"error.user.password.undefined": "Użytkownik nie ma hasła",
"error.user.password.wrong": "Nieprawidłowe hasło",
"error.user.role.invalid": "Wprowadź poprawną rolę",
"error.user.undefined": "Nie można znaleźć użytkownika",
"error.user.update.permission": "Nie masz uprawnień, by zaktualizować użytkownika \"{name}\"",
"error.validation.accepted": "Proszę potwierdzić",
@ -208,6 +222,9 @@
"error.validation.time.between": "Wprowadź czas między {min} a {max}",
"error.validation.url": "Wprowadź poprawny adres URL",
"expand": "Rozwiń",
"expand.all": "Rozwiń wszystkie",
"field.required": "Pole jest wymagane",
"field.blocks.changeType": "Zmień typ",
"field.blocks.code.name": "Kod",
@ -218,6 +235,7 @@
"field.blocks.delete.confirm.selected": "Czy na pewno chcesz usunąć wszystkie wybrane bloki?",
"field.blocks.empty": "Nie ma jeszcze żadnych bloków",
"field.blocks.fieldsets.label": "Wybierz typ bloku …",
"field.blocks.fieldsets.paste": "Press <kbd>{{ shortcut }}</kbd> to paste/import blocks from your clipboard",
"field.blocks.gallery.name": "Galeria",
"field.blocks.gallery.images.empty": "Nie ma jeszcze żadnych obrazków",
"field.blocks.gallery.images.label": "Obrazki",
@ -234,6 +252,7 @@
"field.blocks.image.placeholder": "Wybierz obrazek",
"field.blocks.image.ratio": "Proporcje",
"field.blocks.image.url": "URL obrazka",
"field.blocks.line.name": "Line",
"field.blocks.list.name": "Lista",
"field.blocks.markdown.name": "Markdown",
"field.blocks.markdown.label": "Tekst",
@ -263,7 +282,7 @@
"field.structure.empty": "Nie ma jeszcze \u017cadnych wpis\u00f3w.",
"field.users.empty": "Nie wybrano jeszcze żadnych użytkowników",
"file.blueprint": "Ten plik nie ma jeszcze wzorca. Możesz go zdefiniować w <strong>/site/blueprints/{template}.yml</strong>",
"file.blueprint": "This file has no blueprint yet. You can define the setup in <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.delete.confirm": "Czy na pewno chcesz usunąć <br><strong>{filename}</strong>?",
"file.sort": "Zmień pozycję",
@ -272,6 +291,7 @@
"hide": "Ukryj",
"hour": "Godzina",
"import": "Import",
"insert": "Wstaw",
"insert.after": "Wstaw po",
"insert.before": "Wstaw przed",
@ -337,9 +357,9 @@
"login.code.label.password-reset": "Kod resetowania hasła",
"login.code.placeholder.email": "000 000",
"login.code.text.email": "Jeśli Twój adres email jest zarejestrowany, żądany kod został wysłany na Twoją skrzynkę.",
"login.email.login.body": "Witaj {user.nameOrEmail},\n\nNiedawno poprosiłeś/-aś o kod logowania do panelu Kirby.\nPoniższy kod resetowania hasła będzie ważny przez {timeout} minut:\n\n{code}\n\nJeżeli nie zażądałeś/-aś kodu logowania, zignoruj tę wiadomość e-mail lub skontaktuj się z administratorem, jeśli masz pytania.\nZe względów bezpieczeństwa NIE przesyłaj dalej tego emaila. ",
"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.subject": "Twój kod logowania się",
"login.email.password-reset.body": "Witaj {user.nameOrEmail},\n\nNiedawno poprosiłeś/-aś o kod resetowania hasła do panelu Kirby.\nPoniższy kod resetowania hasła będzie ważny przez {timeout} minut:\n\n{code}\n\nJeżeli nie zażądałeś/-aś kodu resetowania hasła, zignoruj tę wiadomość email lub skontaktuj się z administratorem, jeśli masz pytania.\nZe względów bezpieczeństwa NIE przesyłaj dalej tego emaila.",
"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.subject": "Twój kod resetujący hasło",
"login.remember": "Nie wylogowuj mnie",
"login.reset": "Zresetuj hasło",
@ -385,7 +405,7 @@
"orientation.portrait": "Pionowa",
"orientation.square": "Kwadrat",
"page.blueprint": "Ta strona nie ma jeszcze wzorca. Możesz go zdefiniować w <strong>/site/blueprints/{template}.yml</strong>",
"page.blueprint": "This page has no blueprint yet. You can define the setup in <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
"page.changeSlug": "Zmie\u0144 URL",
"page.changeSlug.fromTitle": "Utw\u00f3rz na podstawie tytu\u0142u",
"page.changeStatus": "Zmień status",
@ -417,7 +437,10 @@
"pagination.page": "Strona",
"password": "Has\u0142o",
"paste": "Paste",
"paste.after": "Paste after",
"pixel": "Piksel",
"plugins": "Plugins",
"prev": "Poprzednie",
"preview": "Podgląd",
"remove": "Usuń",
@ -454,6 +477,8 @@
"template": "Szablon",
"today": "Dzisiaj",
"server": "Server",
"site.blueprint": "Ta strona nie ma jeszcze wzorca. Możesz go zdefiniować w <strong>/site/blueprints/site.yml</strong>",
"toolbar.button.code": "Kod",
@ -463,11 +488,15 @@
"toolbar.button.heading.1": "Nagłówek 1",
"toolbar.button.heading.2": "Nagłówek 2",
"toolbar.button.heading.3": "Nagłówek 3",
"toolbar.button.heading.4": "Heading 4",
"toolbar.button.heading.5": "Heading 5",
"toolbar.button.heading.6": "Heading 6",
"toolbar.button.italic": "Kursywa",
"toolbar.button.file": "Plik",
"toolbar.button.file.select": "Wybierz plik",
"toolbar.button.file.upload": "Prześlij plik",
"toolbar.button.link": "Link",
"toolbar.button.paragraph": "Paragraph",
"toolbar.button.strike": "Przekreślenie",
"toolbar.button.ol": "Lista numerowana",
"toolbar.button.underline": "Podkreślenie",
@ -497,7 +526,7 @@
"url.placeholder": "https://example.com",
"user": "Użytkownik",
"user.blueprint": "Możesz zdefiniować dodatkowe sekcje i pola formularza dla tej roli użytkownika w <strong>/site/blueprints/users/{role}.yml</strong>",
"user.blueprint": "You can define additional sections and form fields for this user role in <strong>/site/blueprints/users/{blueprint}.yml</strong>",
"user.changeEmail": "Zmień email",
"user.changeLanguage": "Zmień język",
"user.changeName": "Zmień nazwę tego użytkownika",
@ -516,9 +545,10 @@
"view.account": "Twoje konto",
"view.installation": "Instalacja",
"view.languages": "Języki",
"view.resetPassword": "Zresetuj hasło",
"view.settings": "Ustawienia",
"view.site": "Strona",
"view.system": "System",
"view.users": "U\u017cytkownicy",
"welcome": "Witaj",

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