diff --git a/public/composer.json b/public/composer.json
index dc68ea8..ccd0f07 100644
--- a/public/composer.json
+++ b/public/composer.json
@@ -23,7 +23,7 @@
},
"require": {
"php": "~8.1.0 || ~8.2.0 || ~8.3.0",
- "getkirby/cms": "^4.5",
+ "getkirby/cms": "^4.6",
"getkirby/kql": "^1.2"
},
"config": {
diff --git a/public/composer.lock b/public/composer.lock
index 9f08a10..6707bf1 100644
--- a/public/composer.lock
+++ b/public/composer.lock
@@ -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": "8f2fa8b1557df883bef5b3425ee05c4c",
+ "content-hash": "b27285f9bf3dfa65b84a013e5b62c6ee",
"packages": [
{
"name": "christian-riesen/base32",
@@ -67,16 +67,16 @@
},
{
"name": "claviska/simpleimage",
- "version": "4.2.0",
+ "version": "4.2.1",
"source": {
"type": "git",
"url": "https://github.com/claviska/SimpleImage.git",
- "reference": "dfbe53c01dae8467468ef2b817c09b786a7839d2"
+ "reference": "ec6d5021e5a7153a2520d64c59b86b6f3c4157c5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/claviska/SimpleImage/zipball/dfbe53c01dae8467468ef2b817c09b786a7839d2",
- "reference": "dfbe53c01dae8467468ef2b817c09b786a7839d2",
+ "url": "https://api.github.com/repos/claviska/SimpleImage/zipball/ec6d5021e5a7153a2520d64c59b86b6f3c4157c5",
+ "reference": "ec6d5021e5a7153a2520d64c59b86b6f3c4157c5",
"shasum": ""
},
"require": {
@@ -108,7 +108,7 @@
"description": "A PHP class that makes working with images as simple as possible.",
"support": {
"issues": "https://github.com/claviska/SimpleImage/issues",
- "source": "https://github.com/claviska/SimpleImage/tree/4.2.0"
+ "source": "https://github.com/claviska/SimpleImage/tree/4.2.1"
},
"funding": [
{
@@ -116,7 +116,7 @@
"type": "github"
}
],
- "time": "2024-04-15T16:07:16+00:00"
+ "time": "2024-11-22T13:25:03+00:00"
},
{
"name": "composer/semver",
@@ -201,16 +201,16 @@
},
{
"name": "filp/whoops",
- "version": "2.16.0",
+ "version": "2.17.0",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
- "reference": "befcdc0e5dce67252aa6322d82424be928214fa2"
+ "reference": "075bc0c26631110584175de6523ab3f1652eb28e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2",
- "reference": "befcdc0e5dce67252aa6322d82424be928214fa2",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/075bc0c26631110584175de6523ab3f1652eb28e",
+ "reference": "075bc0c26631110584175de6523ab3f1652eb28e",
"shasum": ""
},
"require": {
@@ -260,7 +260,7 @@
],
"support": {
"issues": "https://github.com/filp/whoops/issues",
- "source": "https://github.com/filp/whoops/tree/2.16.0"
+ "source": "https://github.com/filp/whoops/tree/2.17.0"
},
"funding": [
{
@@ -268,25 +268,25 @@
"type": "github"
}
],
- "time": "2024-09-25T12:00:00+00:00"
+ "time": "2025-01-25T12:00:00+00:00"
},
{
"name": "getkirby/cms",
- "version": "4.5.0",
+ "version": "4.6.0",
"source": {
"type": "git",
"url": "https://github.com/getkirby/kirby.git",
- "reference": "94cc37ee7c3004ebb4950a53f14e1329ed4d28d3"
+ "reference": "994556ca78eab3c11415702870b6388e8472addc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/getkirby/kirby/zipball/94cc37ee7c3004ebb4950a53f14e1329ed4d28d3",
- "reference": "94cc37ee7c3004ebb4950a53f14e1329ed4d28d3",
+ "url": "https://api.github.com/repos/getkirby/kirby/zipball/994556ca78eab3c11415702870b6388e8472addc",
+ "reference": "994556ca78eab3c11415702870b6388e8472addc",
"shasum": ""
},
"require": {
"christian-riesen/base32": "1.6.0",
- "claviska/simpleimage": "4.2.0",
+ "claviska/simpleimage": "4.2.1",
"composer/semver": "3.4.3",
"ext-ctype": "*",
"ext-curl": "*",
@@ -299,15 +299,15 @@
"ext-mbstring": "*",
"ext-openssl": "*",
"ext-simplexml": "*",
- "filp/whoops": "2.16.0",
+ "filp/whoops": "2.17.0",
"getkirby/composer-installer": "^1.2.1",
- "laminas/laminas-escaper": "2.14.0",
+ "laminas/laminas-escaper": "2.15.0",
"michelf/php-smartypants": "1.8.1",
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0",
- "phpmailer/phpmailer": "6.9.2",
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
+ "phpmailer/phpmailer": "6.9.3",
"symfony/polyfill-intl-idn": "1.31.0",
"symfony/polyfill-mbstring": "1.31.0",
- "symfony/yaml": "6.4.13"
+ "symfony/yaml": "6.4.18"
},
"replace": {
"symfony/polyfill-php72": "*"
@@ -371,7 +371,7 @@
"type": "custom"
}
],
- "time": "2024-11-28T10:10:23+00:00"
+ "time": "2025-01-30T11:02:53+00:00"
},
{
"name": "getkirby/composer-installer",
@@ -477,16 +477,16 @@
},
{
"name": "laminas/laminas-escaper",
- "version": "2.14.0",
+ "version": "2.15.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-escaper.git",
- "reference": "0f7cb975f4443cf22f33408925c231225cfba8cb"
+ "reference": "c612b0488ae486284c39885efca494c180f16351"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/0f7cb975f4443cf22f33408925c231225cfba8cb",
- "reference": "0f7cb975f4443cf22f33408925c231225cfba8cb",
+ "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/c612b0488ae486284c39885efca494c180f16351",
+ "reference": "c612b0488ae486284c39885efca494c180f16351",
"shasum": ""
},
"require": {
@@ -498,12 +498,12 @@
"zendframework/zend-escaper": "*"
},
"require-dev": {
- "infection/infection": "^0.27.9",
- "laminas/laminas-coding-standard": "~3.0.0",
+ "infection/infection": "^0.27.11",
+ "laminas/laminas-coding-standard": "~3.0.1",
"maglnet/composer-require-checker": "^3.8.0",
- "phpunit/phpunit": "^9.6.16",
+ "phpunit/phpunit": "^9.6.22",
"psalm/plugin-phpunit": "^0.19.0",
- "vimeo/psalm": "^5.21.1"
+ "vimeo/psalm": "^5.26.1"
},
"type": "library",
"autoload": {
@@ -535,7 +535,7 @@
"type": "community_bridge"
}
],
- "time": "2024-10-24T10:12:53+00:00"
+ "time": "2024-12-17T19:39:54+00:00"
},
{
"name": "league/color-extractor",
@@ -654,16 +654,16 @@
},
{
"name": "phpmailer/phpmailer",
- "version": "v6.9.2",
+ "version": "v6.9.3",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
- "reference": "a7b17b42fa4887c92146243f3d2f4ccb962af17c"
+ "reference": "2f5c94fe7493efc213f643c23b1b1c249d40f47e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a7b17b42fa4887c92146243f3d2f4ccb962af17c",
- "reference": "a7b17b42fa4887c92146243f3d2f4ccb962af17c",
+ "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/2f5c94fe7493efc213f643c23b1b1c249d40f47e",
+ "reference": "2f5c94fe7493efc213f643c23b1b1c249d40f47e",
"shasum": ""
},
"require": {
@@ -723,7 +723,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.9.2"
+ "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.3"
},
"funding": [
{
@@ -731,7 +731,7 @@
"type": "github"
}
],
- "time": "2024-10-09T10:07:50+00:00"
+ "time": "2024-11-24T18:04:13+00:00"
},
{
"name": "psr/log",
@@ -1175,16 +1175,16 @@
},
{
"name": "symfony/yaml",
- "version": "v6.4.13",
+ "version": "v6.4.18",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "e99b4e94d124b29ee4cf3140e1b537d2dad8cec9"
+ "reference": "bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/e99b4e94d124b29ee4cf3140e1b537d2dad8cec9",
- "reference": "e99b4e94d124b29ee4cf3140e1b537d2dad8cec9",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5",
+ "reference": "bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5",
"shasum": ""
},
"require": {
@@ -1227,7 +1227,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v6.4.13"
+ "source": "https://github.com/symfony/yaml/tree/v6.4.18"
},
"funding": [
{
@@ -1243,7 +1243,7 @@
"type": "tidelift"
}
],
- "time": "2024-09-25T14:18:03+00:00"
+ "time": "2025-01-07T09:44:41+00:00"
}
],
"packages-dev": [],
diff --git a/public/kirby/README.md b/public/kirby/README.md
index 4ef329d..284fd6d 100644
--- a/public/kirby/README.md
+++ b/public/kirby/README.md
@@ -5,7 +5,7 @@
[](https://codecov.io/gh/getkirby/kirby)
[](https://github.com/getkirby/kirby/releases/latest)
-**Kirby: the CMS that adapts to any project, loved by developers and editors alike.**
+**Kirby: the CMS that adapts to any project, loved by developers and editors alike.**
With Kirby, you build your own ideal interface. Combine forms, galleries, articles, spreadsheets and more into an amazing editing experience. You can learn more about Kirby at [getkirby.com](https://getkirby.com).
This is Kirby's core application folder. Get started with one of the following repositories instead:
@@ -21,13 +21,13 @@ Kirby is not free software. However, you can try Kirby and the Starterkit on you
### Contribute
-**Found a bug?**
+**Found a bug?**
Please post all bugs as individual reports in our [issue tracker](https://github.com/getkirby/kirby/issues).
-**Suggest a feature**
+**Suggest a feature**
If you have ideas for a feature or enhancement for Kirby, please use our [feedback platform](https://feedback.getkirby.com).
-**Translations, bug fixes, code contributions ...**
+**Translations, bug fixes, code contributions ...**
Read about how to contribute to the development in our [contributing guide](/CONTRIBUTING.md).
## What's Kirby?
@@ -41,7 +41,7 @@ Read about how to contribute to the development in our [contributing guide](/CON
- **[Discord](https://chat.getkirby.com)** – Hang out and meet the community.
- **[YouTube](https://youtube.com/kirbyCasts)** - Watch the latest video tutorials visually with Bastian.
- **[Mastodon](https://mastodon.social/@getkirby)** – Spread the word.
-- **[Instagram](https://www.instagram.com/getkirby/)** – Share your creations: #madewithkirby.
+- **[Bluesky](https://bsky.app/profile/getkirby.com)** – Tell a friend.
---
diff --git a/public/kirby/bootstrap.php b/public/kirby/bootstrap.php
index 9a419de..9500125 100644
--- a/public/kirby/bootstrap.php
+++ b/public/kirby/bootstrap.php
@@ -6,7 +6,7 @@
*/
if (
version_compare(PHP_VERSION, '8.1.0', '>=') === false ||
- version_compare(PHP_VERSION, '8.4.0', '<') === false
+ version_compare(PHP_VERSION, '8.5.0', '<') === false
) {
die(include __DIR__ . '/views/php.php');
}
diff --git a/public/kirby/cacert.pem b/public/kirby/cacert.pem
index eb11b2f..e8cc6c1 100644
--- a/public/kirby/cacert.pem
+++ b/public/kirby/cacert.pem
@@ -1,7 +1,7 @@
##
## Bundle of CA Root Certificates
##
-## Certificate data from Mozilla as of: Tue Nov 26 13:58:25 2024 GMT
+## Certificate data from Mozilla as of: Tue Dec 31 04:12:05 2024 GMT
##
## Find updated versions here: https://curl.se/docs/caextract.html
##
@@ -16,7 +16,7 @@
## Just configure this file as the SSLCACertificateFile.
##
## Conversion done with mk-ca-bundle.pl version 1.29.
-## SHA256: 36105b01631f9fc03b1eca779b44a30a1a5890b9bf8dc07ccb001a07301e01cf
+## SHA256: c99d6d3f8d3d4e47719ba2b648992f5b58b150128d3aca3c05c566d8dc98e116
##
@@ -584,27 +584,6 @@ NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
-----END CERTIFICATE-----
-SecureSign RootCA11
-===================
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
-SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
-b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
-KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
-cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
-TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
-wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
-g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
-O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
-bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
-t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
-OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
-bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
-Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
-y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
-lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
------END CERTIFICATE-----
-
Microsec e-Szigno Root CA 2009
==============================
-----BEGIN CERTIFICATE-----
@@ -2319,40 +2298,6 @@ hcErulWuBurQB7Lcq9CClnXO0lD+mefPL5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB
dBb9HxEGmpv0
-----END CERTIFICATE-----
-Entrust Root Certification Authority - G4
-=========================================
------BEGIN CERTIFICATE-----
-MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV
-BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu
-bmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1
-dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eSAtIEc0MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYT
-AlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0
-L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eSAtIEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3D
-umSXbcr3DbVZwbPLqGgZ2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV
-3imz/f3ET+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j5pds
-8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAMC1rlLAHGVK/XqsEQ
-e9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73TDtTUXm6Hnmo9RR3RXRv06QqsYJn7
-ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNXwbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5X
-xNMhIWNlUpEbsZmOeX7m640A2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV
-7rtNOzK+mndmnqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8
-dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwlN4y6mACXi0mW
-Hv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNjc0kCAwEAAaNCMEAwDwYDVR0T
-AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9n
-MA0GCSqGSIb3DQEBCwUAA4ICAQAS5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4Q
-jbRaZIxowLByQzTSGwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht
-7LGrhFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/B7NTeLUK
-YvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uIAeV8KEsD+UmDfLJ/fOPt
-jqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbwH5Lk6rWS02FREAutp9lfx1/cH6NcjKF+
-m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKW
-RGhXxNUzzxkvFMSUHHuk2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjA
-JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G
-+TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuYn/PIjhs4ViFqUZPT
-kcpG2om3PVODLAgfi49T3f+sHw==
------END CERTIFICATE-----
-
Microsoft ECC Root Certificate Authority 2017
=============================================
-----BEGIN CERTIFICATE-----
@@ -3170,36 +3115,6 @@ AwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozmut6Dacpps6kFtZaSF4fC0urQe87YQVt8
rgIwRt7qy12a7DLCZRawTDBcMPPaTnOGBtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR
-----END CERTIFICATE-----
-Security Communication RootCA3
-==============================
------BEGIN CERTIFICATE-----
-MIIFfzCCA2egAwIBAgIJAOF8N0D9G/5nMA0GCSqGSIb3DQEBDAUAMF0xCzAJBgNVBAYTAkpQMSUw
-IwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMScwJQYDVQQDEx5TZWN1cml0eSBD
-b21tdW5pY2F0aW9uIFJvb3RDQTMwHhcNMTYwNjE2MDYxNzE2WhcNMzgwMTE4MDYxNzE2WjBdMQsw
-CQYDVQQGEwJKUDElMCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UE
-AxMeU2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEA48lySfcw3gl8qUCBWNO0Ot26YQ+TUG5pPDXC7ltzkBtnTCHsXzW7OT4rCmDvu20r
-hvtxosis5FaU+cmvsXLUIKx00rgVrVH+hXShuRD+BYD5UpOzQD11EKzAlrenfna84xtSGc4RHwsE
-NPXY9Wk8d/Nk9A2qhd7gCVAEF5aEt8iKvE1y/By7z/MGTfmfZPd+pmaGNXHIEYBMwXFAWB6+oHP2
-/D5Q4eAvJj1+XCO1eXDe+uDRpdYMQXF79+qMHIjH7Iv10S9VlkZ8WjtYO/u62C21Jdp6Ts9EriGm
-npjKIG58u4iFW/vAEGK78vknR+/RiTlDxN/e4UG/VHMgly1s2vPUB6PmudhvrvyMGS7TZ2crldtY
-XLVqAvO4g160a75BflcJdURQVc1aEWEhCmHCqYj9E7wtiS/NYeCVvsq1e+F7NGcLH7YMx3weGVPK
-p7FKFSBWFHA9K4IsD50VHUeAR/94mQ4xr28+j+2GaR57GIgUssL8gjMunEst+3A7caoreyYn8xrC
-3PsXuKHqy6C0rtOUfnrQq8PsOC0RLoi/1D+tEjtCrI8Cbn3M0V9hvqG8OmpI6iZVIhZdXw3/JzOf
-GAN0iltSIEdrRU0id4xVJ/CvHozJgyJUt5rQT9nO/NkuHJYosQLTA70lUhw0Zk8jq/R3gpYd0Vcw
-CBEF/VfR2ccCAwEAAaNCMEAwHQYDVR0OBBYEFGQUfPxYchamCik0FW8qy7z8r6irMA4GA1UdDwEB
-/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBDAUAA4ICAQDcAiMI4u8hOscNtybS
-YpOnpSNyByCCYN8Y11StaSWSntkUz5m5UoHPrmyKO1o5yGwBQ8IibQLwYs1OY0PAFNr0Y/Dq9HHu
-Tofjcan0yVflLl8cebsjqodEV+m9NU1Bu0soo5iyG9kLFwfl9+qd9XbXv8S2gVj/yP9kaWJ5rW4O
-H3/uHWnlt3Jxs/6lATWUVCvAUm2PVcTJ0rjLyjQIUYWg9by0F1jqClx6vWPGOi//lkkZhOpn2ASx
-YfQAW0q3nHE3GYV5v4GwxxMOdnE+OoAGrgYWp421wsTL/0ClXI2lyTrtcoHKXJg80jQDdwj98ClZ
-XSEIx2C/pHF7uNkegr4Jr2VvKKu/S7XuPghHJ6APbw+LP6yVGPO5DtxnVW5inkYO0QR4ynKudtml
-+LLfiAlhi+8kTtFZP1rUPcmTPCtk9YENFpb3ksP+MW/oKjJ0DvRMmEoYDjBU1cXrvMUVnuiZIesn
-KwkK2/HmcBhWuwzkvvnoEKQTkrgc4NtnHVMDpCKn3F2SEDzq//wbEBrD2NCcnWXL0CsnMQMeNuE9
-dnUM/0Umud1RvCPHX9jYhxBAEg09ODfnRDwYwFMJZI//1ZqmfHAuc1Uh6N//g7kdPjIe1qZ9LPFm
-6Vwdp6POXiUyK+OVrCoHzrQoeIY8LaadTdJ0MN1kURXbg4NR16/9M51NZg==
------END CERTIFICATE-----
-
Security Communication ECC RootCA1
==================================
-----BEGIN CERTIFICATE-----
diff --git a/public/kirby/composer.json b/public/kirby/composer.json
index 0cf0d0a..b433476 100644
--- a/public/kirby/composer.json
+++ b/public/kirby/composer.json
@@ -3,7 +3,7 @@
"description": "The Kirby core",
"license": "proprietary",
"type": "kirby-cms",
- "version": "4.5.0",
+ "version": "4.6.0",
"keywords": [
"kirby",
"cms",
@@ -24,7 +24,7 @@
"source": "https://github.com/getkirby/kirby"
},
"require": {
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0",
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
"ext-SimpleXML": "*",
"ext-ctype": "*",
"ext-curl": "*",
@@ -37,16 +37,16 @@
"ext-mbstring": "*",
"ext-openssl": "*",
"christian-riesen/base32": "1.6.0",
- "claviska/simpleimage": "4.2.0",
+ "claviska/simpleimage": "4.2.1",
"composer/semver": "3.4.3",
- "filp/whoops": "2.16.0",
+ "filp/whoops": "2.17.0",
"getkirby/composer-installer": "^1.2.1",
- "laminas/laminas-escaper": "2.14.0",
+ "laminas/laminas-escaper": "2.15.0",
"michelf/php-smartypants": "1.8.1",
- "phpmailer/phpmailer": "6.9.2",
+ "phpmailer/phpmailer": "6.9.3",
"symfony/polyfill-intl-idn": "1.31.0",
"symfony/polyfill-mbstring": "1.31.0",
- "symfony/yaml": "6.4.13"
+ "symfony/yaml": "6.4.18"
},
"replace": {
"symfony/polyfill-php72": "*"
diff --git a/public/kirby/composer.lock b/public/kirby/composer.lock
index 778013c..d1d7f20 100644
--- a/public/kirby/composer.lock
+++ b/public/kirby/composer.lock
@@ -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": "f12b026f0a6ca67dc1bd0072f607d1eb",
+ "content-hash": "bb22a0d37b9f64b37d3b4d166bdd1e21",
"packages": [
{
"name": "christian-riesen/base32",
@@ -67,16 +67,16 @@
},
{
"name": "claviska/simpleimage",
- "version": "4.2.0",
+ "version": "4.2.1",
"source": {
"type": "git",
"url": "https://github.com/claviska/SimpleImage.git",
- "reference": "dfbe53c01dae8467468ef2b817c09b786a7839d2"
+ "reference": "ec6d5021e5a7153a2520d64c59b86b6f3c4157c5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/claviska/SimpleImage/zipball/dfbe53c01dae8467468ef2b817c09b786a7839d2",
- "reference": "dfbe53c01dae8467468ef2b817c09b786a7839d2",
+ "url": "https://api.github.com/repos/claviska/SimpleImage/zipball/ec6d5021e5a7153a2520d64c59b86b6f3c4157c5",
+ "reference": "ec6d5021e5a7153a2520d64c59b86b6f3c4157c5",
"shasum": ""
},
"require": {
@@ -108,7 +108,7 @@
"description": "A PHP class that makes working with images as simple as possible.",
"support": {
"issues": "https://github.com/claviska/SimpleImage/issues",
- "source": "https://github.com/claviska/SimpleImage/tree/4.2.0"
+ "source": "https://github.com/claviska/SimpleImage/tree/4.2.1"
},
"funding": [
{
@@ -116,7 +116,7 @@
"type": "github"
}
],
- "time": "2024-04-15T16:07:16+00:00"
+ "time": "2024-11-22T13:25:03+00:00"
},
{
"name": "composer/semver",
@@ -201,16 +201,16 @@
},
{
"name": "filp/whoops",
- "version": "2.16.0",
+ "version": "2.17.0",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
- "reference": "befcdc0e5dce67252aa6322d82424be928214fa2"
+ "reference": "075bc0c26631110584175de6523ab3f1652eb28e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2",
- "reference": "befcdc0e5dce67252aa6322d82424be928214fa2",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/075bc0c26631110584175de6523ab3f1652eb28e",
+ "reference": "075bc0c26631110584175de6523ab3f1652eb28e",
"shasum": ""
},
"require": {
@@ -260,7 +260,7 @@
],
"support": {
"issues": "https://github.com/filp/whoops/issues",
- "source": "https://github.com/filp/whoops/tree/2.16.0"
+ "source": "https://github.com/filp/whoops/tree/2.17.0"
},
"funding": [
{
@@ -268,7 +268,7 @@
"type": "github"
}
],
- "time": "2024-09-25T12:00:00+00:00"
+ "time": "2025-01-25T12:00:00+00:00"
},
{
"name": "getkirby/composer-installer",
@@ -319,16 +319,16 @@
},
{
"name": "laminas/laminas-escaper",
- "version": "2.14.0",
+ "version": "2.15.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-escaper.git",
- "reference": "0f7cb975f4443cf22f33408925c231225cfba8cb"
+ "reference": "c612b0488ae486284c39885efca494c180f16351"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/0f7cb975f4443cf22f33408925c231225cfba8cb",
- "reference": "0f7cb975f4443cf22f33408925c231225cfba8cb",
+ "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/c612b0488ae486284c39885efca494c180f16351",
+ "reference": "c612b0488ae486284c39885efca494c180f16351",
"shasum": ""
},
"require": {
@@ -340,12 +340,12 @@
"zendframework/zend-escaper": "*"
},
"require-dev": {
- "infection/infection": "^0.27.9",
- "laminas/laminas-coding-standard": "~3.0.0",
+ "infection/infection": "^0.27.11",
+ "laminas/laminas-coding-standard": "~3.0.1",
"maglnet/composer-require-checker": "^3.8.0",
- "phpunit/phpunit": "^9.6.16",
+ "phpunit/phpunit": "^9.6.22",
"psalm/plugin-phpunit": "^0.19.0",
- "vimeo/psalm": "^5.21.1"
+ "vimeo/psalm": "^5.26.1"
},
"type": "library",
"autoload": {
@@ -377,7 +377,7 @@
"type": "community_bridge"
}
],
- "time": "2024-10-24T10:12:53+00:00"
+ "time": "2024-12-17T19:39:54+00:00"
},
{
"name": "league/color-extractor",
@@ -496,16 +496,16 @@
},
{
"name": "phpmailer/phpmailer",
- "version": "v6.9.2",
+ "version": "v6.9.3",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
- "reference": "a7b17b42fa4887c92146243f3d2f4ccb962af17c"
+ "reference": "2f5c94fe7493efc213f643c23b1b1c249d40f47e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a7b17b42fa4887c92146243f3d2f4ccb962af17c",
- "reference": "a7b17b42fa4887c92146243f3d2f4ccb962af17c",
+ "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/2f5c94fe7493efc213f643c23b1b1c249d40f47e",
+ "reference": "2f5c94fe7493efc213f643c23b1b1c249d40f47e",
"shasum": ""
},
"require": {
@@ -565,7 +565,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.9.2"
+ "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.3"
},
"funding": [
{
@@ -573,7 +573,7 @@
"type": "github"
}
],
- "time": "2024-10-09T10:07:50+00:00"
+ "time": "2024-11-24T18:04:13+00:00"
},
{
"name": "psr/log",
@@ -627,16 +627,16 @@
},
{
"name": "symfony/deprecation-contracts",
- "version": "v3.5.0",
+ "version": "v3.5.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1"
+ "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
- "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
+ "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
"shasum": ""
},
"require": {
@@ -644,12 +644,12 @@
},
"type": "library",
"extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
"branch-alias": {
"dev-main": "3.5-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@@ -674,7 +674,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1"
},
"funding": [
{
@@ -690,7 +690,7 @@
"type": "tidelift"
}
],
- "time": "2024-04-18T09:32:20+00:00"
+ "time": "2024-09-25T14:20:29+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -718,8 +718,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -795,8 +795,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -877,8 +877,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -961,8 +961,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -1017,16 +1017,16 @@
},
{
"name": "symfony/yaml",
- "version": "v6.4.13",
+ "version": "v6.4.18",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "e99b4e94d124b29ee4cf3140e1b537d2dad8cec9"
+ "reference": "bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/e99b4e94d124b29ee4cf3140e1b537d2dad8cec9",
- "reference": "e99b4e94d124b29ee4cf3140e1b537d2dad8cec9",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5",
+ "reference": "bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5",
"shasum": ""
},
"require": {
@@ -1069,7 +1069,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v6.4.13"
+ "source": "https://github.com/symfony/yaml/tree/v6.4.18"
},
"funding": [
{
@@ -1085,7 +1085,7 @@
"type": "tidelift"
}
],
- "time": "2024-09-25T14:18:03+00:00"
+ "time": "2025-01-07T09:44:41+00:00"
}
],
"packages-dev": [],
@@ -1095,7 +1095,7 @@
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0",
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
"ext-simplexml": "*",
"ext-ctype": "*",
"ext-curl": "*",
diff --git a/public/kirby/config/areas/site/searches.php b/public/kirby/config/areas/site/searches.php
index 4cefefe..f40f218 100644
--- a/public/kirby/config/areas/site/searches.php
+++ b/public/kirby/config/areas/site/searches.php
@@ -8,7 +8,7 @@ return [
'pages' => [
'label' => I18n::translate('pages'),
'icon' => 'page',
- 'query' => function (string $query = null, int $limit, int $page) {
+ 'query' => function (string|null $query, int $limit, int $page) {
$kirby = App::instance();
$pages = $kirby->site()
->index(true)
@@ -31,7 +31,7 @@ return [
'files' => [
'label' => I18n::translate('files'),
'icon' => 'image',
- 'query' => function (string $query = null, int $limit, int $page) {
+ 'query' => function (string|null $query, int $limit, int $page) {
$kirby = App::instance();
$files = $kirby->site()
->index(true)
diff --git a/public/kirby/config/areas/system/views.php b/public/kirby/config/areas/system/views.php
index a24d1bc..5484193 100644
--- a/public/kirby/config/areas/system/views.php
+++ b/public/kirby/config/areas/system/views.php
@@ -35,7 +35,7 @@ return [
],
[
'label' => I18n::translate('server'),
- 'value' => $system->serverSoftware() ?? '?',
+ 'value' => $system->serverSoftwareShort() ?? '?',
'icon' => 'server'
]
];
diff --git a/public/kirby/config/areas/users/searches.php b/public/kirby/config/areas/users/searches.php
index 82bce90..b4e4a0b 100644
--- a/public/kirby/config/areas/users/searches.php
+++ b/public/kirby/config/areas/users/searches.php
@@ -8,7 +8,7 @@ return [
'users' => [
'label' => I18n::translate('users'),
'icon' => 'users',
- 'query' => function (string $query = null, int $limit, int $page) {
+ 'query' => function (string|null $query, int $limit, int $page) {
$kirby = App::instance();
$users = $kirby->users()
->search($query)
diff --git a/public/kirby/config/blocks/image/image.yml b/public/kirby/config/blocks/image/image.yml
index ada9313..dc348a5 100644
--- a/public/kirby/config/blocks/image/image.yml
+++ b/public/kirby/config/blocks/image/image.yml
@@ -7,6 +7,7 @@ fields:
type: radio
columns: 2
default: "kirby"
+ required: true
options:
kirby: "{{ t('field.blocks.image.location.internal') }}"
web: "{{ t('field.blocks.image.location.external') }}"
diff --git a/public/kirby/config/components.php b/public/kirby/config/components.php
index 637e96f..ab93814 100644
--- a/public/kirby/config/components.php
+++ b/public/kirby/config/components.php
@@ -118,7 +118,7 @@ return [
*/
'markdown' => function (
App $kirby,
- string $text = null,
+ string|null $text = null,
array $options = []
): string {
static $markdown;
@@ -230,7 +230,7 @@ return [
$scoring['score'] += 16 * $score;
$scoring['hits'] += 1;
- // check for exact beginning matches
+ // check for exact beginning matches
} elseif (
$options['words'] === false &&
Str::startsWith($lowerValue, $query) === true
@@ -238,7 +238,7 @@ return [
$scoring['score'] += 8 * $score;
$scoring['hits'] += 1;
- // check for exact query matches
+ // check for exact query matches
} elseif ($matches = preg_match_all('!' . $exact . '!ui', $value, $r)) {
$scoring['score'] += 2 * $score;
$scoring['hits'] += $matches;
@@ -270,7 +270,7 @@ return [
*/
'smartypants' => function (
App $kirby,
- string $text = null,
+ string|null $text = null,
array $options = []
): string {
static $smartypants;
@@ -354,7 +354,7 @@ return [
*/
'url' => function (
App $kirby,
- string $path = null,
+ string|null $path = null,
$options = null
): string {
$language = null;
diff --git a/public/kirby/config/fields/checkboxes.php b/public/kirby/config/fields/checkboxes.php
index c8d962d..00a94b8 100644
--- a/public/kirby/config/fields/checkboxes.php
+++ b/public/kirby/config/fields/checkboxes.php
@@ -29,13 +29,13 @@ return [
/**
* Maximum number of checked boxes
*/
- 'max' => function (int $max = null) {
+ 'max' => function (int|null $max = null) {
return $max;
},
/**
* Minimum number of checked boxes
*/
- 'min' => function (int $min = null) {
+ 'min' => function (int|null $min = null) {
return $min;
},
'value' => function ($value = null) {
diff --git a/public/kirby/config/fields/date.php b/public/kirby/config/fields/date.php
index 1cfa41c..34559db 100644
--- a/public/kirby/config/fields/date.php
+++ b/public/kirby/config/fields/date.php
@@ -24,7 +24,7 @@ return [
/**
* Default date when a new page/file/user gets created
*/
- 'default' => function (string $default = null): string {
+ 'default' => function (string|null $default = null): string {
return $this->toDatetime($default) ?? '';
},
@@ -46,13 +46,13 @@ return [
/**
* Latest date, which can be selected/saved (Y-m-d)
*/
- 'max' => function (string $max = null): string|null {
+ 'max' => function (string|null $max = null): string|null {
return Date::optional($max);
},
/**
* Earliest date, which can be selected/saved (Y-m-d)
*/
- 'min' => function (string $min = null): string|null {
+ 'min' => function (string|null $min = null): string|null {
return Date::optional($min);
},
diff --git a/public/kirby/config/fields/info.php b/public/kirby/config/fields/info.php
index e65dc83..57907a2 100644
--- a/public/kirby/config/fields/info.php
+++ b/public/kirby/config/fields/info.php
@@ -26,7 +26,7 @@ return [
/**
* Change the design of the info box
*/
- 'theme' => function (string $theme = null) {
+ 'theme' => function (string|null $theme = null) {
return $theme;
}
],
diff --git a/public/kirby/config/fields/link.php b/public/kirby/config/fields/link.php
index 885eb87..9493c3e 100644
--- a/public/kirby/config/fields/link.php
+++ b/public/kirby/config/fields/link.php
@@ -16,14 +16,29 @@ return [
* @values 'anchor', 'url, 'page, 'file', 'email', 'tel', 'custom'
*/
'options' => function (array|null $options = null): array {
- return $options ?? [
- 'url',
- 'page',
- 'file',
- 'email',
- 'tel',
- 'anchor'
- ];
+ // default options
+ if ($options === null) {
+ return [
+ 'url',
+ 'page',
+ 'file',
+ 'email',
+ 'tel',
+ 'anchor'
+ ];
+ }
+
+ // validate options
+ $available = array_keys($this->availableTypes());
+
+ if ($unavailable = array_diff($options, $available)) {
+ throw new InvalidArgumentException([
+ 'key' => 'field.link.options',
+ 'data' => ['options' => implode(', ', $unavailable)]
+ ]);
+ }
+
+ return $options;
},
'value' => function (string|null $value = null) {
return $value ?? '';
@@ -31,9 +46,11 @@ return [
],
'methods' => [
'activeTypes' => function () {
- return array_filter($this->availableTypes(), function (string $type) {
- return in_array($type, $this->props['options']) === true;
- }, ARRAY_FILTER_USE_KEY);
+ return array_filter(
+ $this->availableTypes(),
+ fn (string $type) => in_array($type, $this->props['options']),
+ ARRAY_FILTER_USE_KEY
+ );
},
'availableTypes' => function () {
return [
diff --git a/public/kirby/config/fields/mixins/datetime.php b/public/kirby/config/fields/mixins/datetime.php
index b47a865..8d43d2a 100644
--- a/public/kirby/config/fields/mixins/datetime.php
+++ b/public/kirby/config/fields/mixins/datetime.php
@@ -7,7 +7,7 @@ return [
/**
* Defines a custom format that is used when the field is saved
*/
- 'format' => function (string $format = null) {
+ 'format' => function (string|null $format = null) {
return $format;
}
],
diff --git a/public/kirby/config/fields/mixins/picker.php b/public/kirby/config/fields/mixins/picker.php
index a555c2f..0e4c5b8 100644
--- a/public/kirby/config/fields/mixins/picker.php
+++ b/public/kirby/config/fields/mixins/picker.php
@@ -23,7 +23,7 @@ return [
/**
* Info text for each item
*/
- 'info' => function (string $info = null) {
+ 'info' => function (string|null $info = null) {
return $info;
},
@@ -37,14 +37,14 @@ return [
/**
* The minimum number of required selected
*/
- 'min' => function (int $min = null) {
+ 'min' => function (int|null $min = null) {
return $min;
},
/**
* The maximum number of allowed selected
*/
- 'max' => function (int $max = null) {
+ 'max' => function (int|null $max = null) {
return $max;
},
@@ -58,7 +58,7 @@ return [
/**
* Query for the items to be included in the picker
*/
- 'query' => function (string $query = null) {
+ 'query' => function (string|null $query = null) {
return $query;
},
@@ -86,7 +86,7 @@ return [
/**
* Main text for each item
*/
- 'text' => function (string $text = null) {
+ 'text' => function (string|null $text = null) {
return $text;
},
],
diff --git a/public/kirby/config/fields/mixins/upload.php b/public/kirby/config/fields/mixins/upload.php
index a5b9962..ec136bd 100644
--- a/public/kirby/config/fields/mixins/upload.php
+++ b/public/kirby/config/fields/mixins/upload.php
@@ -74,7 +74,7 @@ return [
return $map($file, $parent);
});
},
- 'uploadParent' => function (string $parentQuery = null) {
+ 'uploadParent' => function (string|null $parentQuery = null) {
$parent = $this->model();
if ($parentQuery) {
diff --git a/public/kirby/config/fields/number.php b/public/kirby/config/fields/number.php
index 11334e8..cc41887 100644
--- a/public/kirby/config/fields/number.php
+++ b/public/kirby/config/fields/number.php
@@ -13,13 +13,13 @@ return [
/**
* The lowest allowed number
*/
- 'min' => function (float $min = null) {
+ 'min' => function (float|null $min = null) {
return $min;
},
/**
* The highest allowed number
*/
- 'max' => function (float $max = null) {
+ 'max' => function (float|null $max = null) {
return $max;
},
/**
diff --git a/public/kirby/config/fields/pages.php b/public/kirby/config/fields/pages.php
index 54d9aa8..3d9d56d 100644
--- a/public/kirby/config/fields/pages.php
+++ b/public/kirby/config/fields/pages.php
@@ -31,7 +31,7 @@ return [
/**
* Optional query to select a specific set of pages
*/
- 'query' => function (string $query = null) {
+ 'query' => function (string|null $query = null) {
return $query;
},
diff --git a/public/kirby/config/fields/select.php b/public/kirby/config/fields/select.php
index 4c06b5b..2f09c2d 100644
--- a/public/kirby/config/fields/select.php
+++ b/public/kirby/config/fields/select.php
@@ -13,7 +13,7 @@ return [
/**
* Custom icon to replace the arrow down.
*/
- 'icon' => function (string $icon = null) {
+ 'icon' => function (string|null $icon = null) {
return $icon;
},
/**
diff --git a/public/kirby/config/fields/slug.php b/public/kirby/config/fields/slug.php
index 9d8efb5..15c6839 100644
--- a/public/kirby/config/fields/slug.php
+++ b/public/kirby/config/fields/slug.php
@@ -28,7 +28,7 @@ return [
/**
* Set prefix for the help text
*/
- 'path' => function (string $path = null) {
+ 'path' => function (string|null $path = null) {
return $path;
},
@@ -36,7 +36,7 @@ return [
* Name of another field that should be used to
* automatically update this field's value
*/
- 'sync' => function (string $sync = null) {
+ 'sync' => function (string|null $sync = null) {
return $sync;
},
diff --git a/public/kirby/config/fields/structure.php b/public/kirby/config/fields/structure.php
index 510459b..66b614c 100644
--- a/public/kirby/config/fields/structure.php
+++ b/public/kirby/config/fields/structure.php
@@ -45,7 +45,7 @@ return [
/**
* Set the default rows for the structure
*/
- 'default' => function (array $default = null) {
+ 'default' => function (array|null $default = null) {
return $default;
},
@@ -58,38 +58,38 @@ return [
/**
* The number of entries that will be displayed on a single page. Afterwards pagination kicks in.
*/
- 'limit' => function (int $limit = null) {
+ 'limit' => function (int|null $limit = null) {
return $limit;
},
/**
* Maximum allowed entries in the structure. Afterwards the "Add" button will be switched off.
*/
- 'max' => function (int $max = null) {
+ 'max' => function (int|null $max = null) {
return $max;
},
/**
* Minimum required entries in the structure
*/
- 'min' => function (int $min = null) {
+ 'min' => function (int|null $min = null) {
return $min;
},
/**
* Toggles adding to the top or bottom of the list
*/
- 'prepend' => function (bool $prepend = null) {
+ 'prepend' => function (bool|null $prepend = null) {
return $prepend;
},
/**
* Toggles drag & drop sorting
*/
- 'sortable' => function (bool $sortable = null) {
+ 'sortable' => function (bool|null $sortable = null) {
return $sortable;
},
/**
* Sorts the entries by the given field and order (i.e. `title desc`)
* Drag & drop is disabled in this case
*/
- 'sortBy' => function (string $sort = null) {
+ 'sortBy' => function (string|null $sort = null) {
return $sort;
}
],
diff --git a/public/kirby/config/fields/tags.php b/public/kirby/config/fields/tags.php
index b5b6c9e..90020bc 100644
--- a/public/kirby/config/fields/tags.php
+++ b/public/kirby/config/fields/tags.php
@@ -37,13 +37,13 @@ return [
/**
* Minimum number of required entries/tags
*/
- 'min' => function (int $min = null) {
+ 'min' => function (int|null $min = null) {
return $min;
},
/**
* Maximum number of allowed entries/tags
*/
- 'max' => function (int $max = null) {
+ 'max' => function (int|null $max = null) {
return $max;
},
/**
@@ -93,7 +93,7 @@ return [
return $value;
}
],
- 'save' => function (array $value = null): string {
+ 'save' => function (array|null $value = null): string {
return A::join(
$value,
$this->separator() . ' '
diff --git a/public/kirby/config/fields/text.php b/public/kirby/config/fields/text.php
index 574a4ec..ac87d85 100644
--- a/public/kirby/config/fields/text.php
+++ b/public/kirby/config/fields/text.php
@@ -30,28 +30,28 @@ return [
/**
* Sets the font family (sans or monospace)
*/
- 'font' => function (string $font = null) {
+ 'font' => function (string|null $font = null) {
return $font === 'monospace' ? 'monospace' : 'sans-serif';
},
/**
* Maximum number of allowed characters
*/
- 'maxlength' => function (int $maxlength = null) {
+ 'maxlength' => function (int|null $maxlength = null) {
return $maxlength;
},
/**
* Minimum number of required characters
*/
- 'minlength' => function (int $minlength = null) {
+ 'minlength' => function (int|null $minlength = null) {
return $minlength;
},
/**
* A regular expression, which will be used to validate the input
*/
- 'pattern' => function (string $pattern = null) {
+ 'pattern' => function (string|null $pattern = null) {
return $pattern;
},
diff --git a/public/kirby/config/fields/textarea.php b/public/kirby/config/fields/textarea.php
index 7b51c1f..e09d6c1 100644
--- a/public/kirby/config/fields/textarea.php
+++ b/public/kirby/config/fields/textarea.php
@@ -26,7 +26,7 @@ return [
/**
* Sets the default text when a new page/file/user is created
*/
- 'default' => function (string $default = null) {
+ 'default' => function (string|null $default = null) {
return trim($default ?? '');
},
@@ -48,28 +48,28 @@ return [
/**
* Sets the font family (sans or monospace)
*/
- 'font' => function (string $font = null) {
+ 'font' => function (string|null $font = null) {
return $font === 'monospace' ? 'monospace' : 'sans-serif';
},
/**
* Maximum number of allowed characters
*/
- 'maxlength' => function (int $maxlength = null) {
+ 'maxlength' => function (int|null $maxlength = null) {
return $maxlength;
},
/**
* Minimum number of required characters
*/
- 'minlength' => function (int $minlength = null) {
+ 'minlength' => function (int|null $minlength = null) {
return $minlength;
},
/**
* Changes the size of the textarea. Available sizes: `small`, `medium`, `large`, `huge`
*/
- 'size' => function (string $size = null) {
+ 'size' => function (string|null $size = null) {
return $size;
},
@@ -80,7 +80,7 @@ return [
return $spellcheck;
},
- 'value' => function (string $value = null) {
+ 'value' => function (string|null $value = null) {
return trim($value ?? '');
}
],
diff --git a/public/kirby/config/fields/time.php b/public/kirby/config/fields/time.php
index 4a0b6fc..413420b 100644
--- a/public/kirby/config/fields/time.php
+++ b/public/kirby/config/fields/time.php
@@ -36,13 +36,13 @@ return [
/**
* Latest time, which can be selected/saved (H:i or H:i:s)
*/
- 'max' => function (string $max = null): string|null {
+ 'max' => function (string|null $max = null): string|null {
return Date::optional($max);
},
/**
* Earliest time, which can be selected/saved (H:i or H:i:s)
*/
- 'min' => function (string $min = null): string|null {
+ 'min' => function (string|null $min = null): string|null {
return Date::optional($min);
},
diff --git a/public/kirby/config/fields/writer.php b/public/kirby/config/fields/writer.php
index c9f7869..72440ff 100644
--- a/public/kirby/config/fields/writer.php
+++ b/public/kirby/config/fields/writer.php
@@ -36,14 +36,14 @@ return [
/**
* Maximum number of allowed characters
*/
- 'maxlength' => function (int $maxlength = null) {
+ 'maxlength' => function (int|null $maxlength = null) {
return $maxlength;
},
/**
* Minimum number of required characters
*/
- 'minlength' => function (int $minlength = null) {
+ 'minlength' => function (int|null $minlength = null) {
return $minlength;
},
/**
diff --git a/public/kirby/config/helpers.php b/public/kirby/config/helpers.php
index 2dc83d8..79e13dd 100644
--- a/public/kirby/config/helpers.php
+++ b/public/kirby/config/helpers.php
@@ -7,6 +7,8 @@ use Kirby\Cms\Html;
use Kirby\Cms\ModelWithContent;
use Kirby\Cms\Page;
use Kirby\Cms\Pages;
+use Kirby\Cms\Plugin;
+use Kirby\Cms\PluginAssets;
use Kirby\Cms\Response;
use Kirby\Cms\Site;
use Kirby\Cms\Url;
@@ -89,7 +91,7 @@ if (Helpers::hasOverride('css') === false) { // @codeCoverageIgnore
* @param string|array|null $options Pass an array of attributes for the link tag or a media attribute string
*/
function css(
- string|array $url,
+ string|array|Plugin|PluginAssets $url,
string|array|null $options = null
): string|null {
return Html::css($url, $options);
@@ -260,7 +262,7 @@ if (Helpers::hasOverride('js') === false) { // @codeCoverageIgnore
* Creates a script tag to load a javascript file
*/
function js(
- string|array $url,
+ string|array|Plugin|PluginAssets $url,
string|array|bool|null $options = null
): string|null {
return Html::js($url, $options);
diff --git a/public/kirby/config/methods.php b/public/kirby/config/methods.php
index 870c243..760ab24 100644
--- a/public/kirby/config/methods.php
+++ b/public/kirby/config/methods.php
@@ -115,7 +115,7 @@ return function (App $app) {
'toDate' => function (
Field $field,
string|IntlDateFormatter|null $format = null,
- string $fallback = null
+ string|null $fallback = null
) use ($app): string|int|null {
if (empty($field->value) === true && $fallback === null) {
return null;
@@ -504,7 +504,7 @@ return function (App $app) {
*/
'query' => function (
Field $field,
- string $expect = null
+ string|null $expect = null
) use ($app): mixed {
if ($parent = $field->parent()) {
return $parent->query($field->value, $expect);
diff --git a/public/kirby/config/routes.php b/public/kirby/config/routes.php
index cd7924d..0699ef1 100644
--- a/public/kirby/config/routes.php
+++ b/public/kirby/config/routes.php
@@ -33,7 +33,7 @@ return function (App $kirby) {
'pattern' => $api . '/(:all)',
'method' => 'ALL',
'env' => 'api',
- 'action' => function (string $path = null) use ($kirby) {
+ 'action' => function (string|null $path = null) use ($kirby) {
if ($kirby->option('api') === false) {
return null;
}
@@ -125,7 +125,7 @@ return function (App $kirby) {
'pattern' => $panel . '/(:all?)',
'method' => 'ALL',
'env' => 'panel',
- 'action' => function (string $path = null) {
+ 'action' => function (string|null $path = null) {
return Panel::router($path);
}
],
diff --git a/public/kirby/config/sections/files.php b/public/kirby/config/sections/files.php
index 35ff9e3..8bab322 100644
--- a/public/kirby/config/sections/files.php
+++ b/public/kirby/config/sections/files.php
@@ -28,7 +28,7 @@ return [
/**
* Filters all files by template and also sets the template, which will be used for all uploads
*/
- 'template' => function (string $template = null) {
+ 'template' => function (string|null $template = null) {
return $template;
},
/**
diff --git a/public/kirby/config/sections/info.php b/public/kirby/config/sections/info.php
index 7999aac..20a288d 100644
--- a/public/kirby/config/sections/info.php
+++ b/public/kirby/config/sections/info.php
@@ -7,13 +7,13 @@ return [
'headline',
],
'props' => [
- 'icon' => function (string $icon = null) {
+ 'icon' => function (string|null $icon = null) {
return $icon;
},
'text' => function ($text = null) {
return I18n::translate($text, $text);
},
- 'theme' => function (string $theme = null) {
+ 'theme' => function (string|null $theme = null) {
return $theme;
}
],
diff --git a/public/kirby/config/sections/mixins/layout.php b/public/kirby/config/sections/mixins/layout.php
index 75230b0..b348176 100644
--- a/public/kirby/config/sections/mixins/layout.php
+++ b/public/kirby/config/sections/mixins/layout.php
@@ -10,7 +10,7 @@ return [
/**
* Columns config for `layout: table`
*/
- 'columns' => function (array $columns = null) {
+ 'columns' => function (array|null $columns = null) {
return $columns ?? [];
},
/**
diff --git a/public/kirby/config/sections/mixins/max.php b/public/kirby/config/sections/mixins/max.php
index a87c1cc..b49c627 100644
--- a/public/kirby/config/sections/mixins/max.php
+++ b/public/kirby/config/sections/mixins/max.php
@@ -5,7 +5,7 @@ return [
/**
* Sets the maximum number of allowed entries in the section
*/
- 'max' => function (int $max = null) {
+ 'max' => function (int|null $max = null) {
return $max;
}
],
diff --git a/public/kirby/config/sections/mixins/min.php b/public/kirby/config/sections/mixins/min.php
index 6295f2d..40fa82e 100644
--- a/public/kirby/config/sections/mixins/min.php
+++ b/public/kirby/config/sections/mixins/min.php
@@ -5,7 +5,7 @@ return [
/**
* Sets the minimum number of required entries in the section
*/
- 'min' => function (int $min = null) {
+ 'min' => function (int|null $min = null) {
return $min;
}
],
diff --git a/public/kirby/config/sections/mixins/pagination.php b/public/kirby/config/sections/mixins/pagination.php
index 3b2a2b0..39f8d0a 100644
--- a/public/kirby/config/sections/mixins/pagination.php
+++ b/public/kirby/config/sections/mixins/pagination.php
@@ -12,9 +12,9 @@ return [
return $limit;
},
/**
- * Sets the default page for the pagination. This will overwrite default pagination.
+ * Sets the default page for the pagination.
*/
- 'page' => function (int $page = null) {
+ 'page' => function (int|null $page = null) {
return App::instance()->request()->get('page', $page);
},
],
diff --git a/public/kirby/config/sections/mixins/parent.php b/public/kirby/config/sections/mixins/parent.php
index 1096930..1217411 100644
--- a/public/kirby/config/sections/mixins/parent.php
+++ b/public/kirby/config/sections/mixins/parent.php
@@ -11,7 +11,7 @@ return [
/**
* Sets the query to a parent to find items for the list
*/
- 'parent' => function (string $parent = null) {
+ 'parent' => function (string|null $parent = null) {
return $parent;
}
],
diff --git a/public/kirby/config/sections/mixins/sort.php b/public/kirby/config/sections/mixins/sort.php
index 5b994ec..118e03b 100644
--- a/public/kirby/config/sections/mixins/sort.php
+++ b/public/kirby/config/sections/mixins/sort.php
@@ -17,7 +17,7 @@ return [
/**
* Overwrites manual sorting and sorts by the given field and sorting direction (i.e. `date desc`)
*/
- 'sortBy' => function (string $sortBy = null) {
+ 'sortBy' => function (string|null $sortBy = null) {
return $sortBy;
},
],
diff --git a/public/kirby/config/sections/pages.php b/public/kirby/config/sections/pages.php
index 7f142ae..6ca1090 100644
--- a/public/kirby/config/sections/pages.php
+++ b/public/kirby/config/sections/pages.php
@@ -53,7 +53,7 @@ return [
/**
* Filters the list by single template.
*/
- 'template' => function (string|array $template = null) {
+ 'template' => function (string|array|null $template = null) {
return $template;
},
/**
diff --git a/public/kirby/dependencies/parsedown-extra/ParsedownExtra.php b/public/kirby/dependencies/parsedown-extra/ParsedownExtra.php
index 2f9c62d..390edd7 100644
--- a/public/kirby/dependencies/parsedown-extra/ParsedownExtra.php
+++ b/public/kirby/dependencies/parsedown-extra/ParsedownExtra.php
@@ -17,7 +17,7 @@ class ParsedownExtra extends Parsedown
{
# ~
- public const version = '0.8.0-beta-1';
+ public const version = '0.8.0-beta-2';
# ~
@@ -297,7 +297,7 @@ class ParsedownExtra extends Parsedown
#
# Setext
- protected function blockSetextHeader($Line, array $Block = null)
+ protected function blockSetextHeader($Line, array|null $Block = null)
{
$Block = parent::blockSetextHeader($Line, $Block);
diff --git a/public/kirby/dependencies/parsedown/Parsedown.php b/public/kirby/dependencies/parsedown/Parsedown.php
index ab72225..76b2a7c 100644
--- a/public/kirby/dependencies/parsedown/Parsedown.php
+++ b/public/kirby/dependencies/parsedown/Parsedown.php
@@ -17,7 +17,7 @@ class Parsedown
{
# ~
- public const version = '1.8.0-beta-7';
+ public const version = '1.8.0-beta-8';
# ~
@@ -526,7 +526,7 @@ class Parsedown
#
# List
- protected function blockList($Line, array $CurrentBlock = null)
+ protected function blockList($Line, array|null $CurrentBlock = null)
{
list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]{1,9}+[.\)]');
@@ -741,7 +741,7 @@ class Parsedown
#
# Setext
- protected function blockSetextHeader($Line, array $Block = null)
+ protected function blockSetextHeader($Line, array|null $Block = null)
{
if (! isset($Block) or $Block['type'] !== 'Paragraph' or isset($Block['interrupted'])) {
return;
@@ -821,7 +821,7 @@ class Parsedown
#
# Table
- protected function blockTable($Line, array $Block = null)
+ protected function blockTable($Line, array|null $Block = null)
{
if (! isset($Block) or $Block['type'] !== 'Paragraph' or isset($Block['interrupted'])) {
return;
diff --git a/public/kirby/i18n/translations/bg.json b/public/kirby/i18n/translations/bg.json
index 5a3dc20..5b798c2 100644
--- a/public/kirby/i18n/translations/bg.json
+++ b/public/kirby/i18n/translations/bg.json
@@ -21,6 +21,8 @@
"copy": "Копирай",
"copy.all": "Copy all",
"copy.success": "{count} copied!",
+ "copy.success.multiple": "{count} copied!",
+ "copy.url": "Copy URL",
"create": "Създай",
"custom": "Custom",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Invalid cache type \"{type}\"",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "Email шаблонът \"{name}\" не може да бъде открит",
"error.field.converter.invalid": "Невалиден конвертор \"{converter}\"",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Името на файла е задължително",
"error.file.notFound": "Файлът \"{filename}\" не може да бъде намерен",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "Не е позволен ъплоуда на файлове от тип {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "\u0424\u0430\u0439\u043b\u044a\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "The page cannot be moved into itself",
"error.page.move.directory": "The page directory cannot be moved",
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "The moved page could not be found",
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Heading",
"field.blocks.heading.text": "Text",
"field.blocks.heading.placeholder": "Heading …",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Alternative text",
"field.blocks.image.caption": "Caption",
"field.blocks.image.crop": "Crop",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Все още не са избрани файлове",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Change layout",
"field.layout.delete": "Delete layout",
@@ -345,12 +359,14 @@
"field.object.empty": "No information yet",
"field.pages.empty": "Все още не са избрани страници",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "Сигурни ли сте, че искате да изтриете това вписване?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.empty": "Все още няма статии",
"field.users.empty": "Все още не са избрани потребители",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "No fields yet",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Hide",
"hour": "Hour",
"hue": "Hue",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Ready to launch your site?",
"license.status.missing.info": "No valid license",
"license.status.missing.label": "Please activate your license",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Manage your licenses",
"license.purchased": "Purchased",
"license.success": "Thank you for supporting Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Unsaved changes",
"lock.unsaved.empty": "There are no more unsaved changes",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Unsaved changes by {email}",
"lock.unlock": "Unlock",
"lock.unlock.submit": "Unlock and overwrite unsaved changes by {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugins",
"prev": "Previous",
"preview": "Preview",
+
+ "publish": "Publish",
+ "published": "Published",
+
"remove": "Премахни",
"rename": "Преименувай",
"renew": "Renew",
@@ -597,7 +629,9 @@
"role.nobody.title": "Nobody",
"save": "\u0417\u0430\u043f\u0438\u0448\u0438",
+ "saved": "Saved",
"search": "Търси",
+ "searching": "Searching",
"search.min": "Enter {min} characters to search",
"search.all": "Show all {count} results",
"search.results.none": "No results",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "The content folder seems to be exposed",
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
@@ -646,6 +681,12 @@
"tel": "Phone",
"tel.placeholder": "+49123456789",
"template": "Образец",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Заглавие",
"today": "Днес",
@@ -715,10 +756,13 @@
"users": "Потребители",
"version": "\u0412\u0435\u0440\u0441\u0438\u044f \u043d\u0430 Kirby",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
+ "view": "View",
"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": "Езици",
diff --git a/public/kirby/i18n/translations/ca.json b/public/kirby/i18n/translations/ca.json
index a7bcd3f..5e9218f 100644
--- a/public/kirby/i18n/translations/ca.json
+++ b/public/kirby/i18n/translations/ca.json
@@ -21,6 +21,8 @@
"copy": "Copiar",
"copy.all": "Copy all",
"copy.success": "{count} copied!",
+ "copy.success.multiple": "{count} copied!",
+ "copy.url": "Copy URL",
"create": "Crear",
"custom": "Custom",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Invalid cache type \"{type}\"",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "No es pot trobar la configuració de correu electrònic \"{name}\"",
"error.field.converter.invalid": "Convertidor no vàlid \"{converter}\"",
@@ -118,6 +126,7 @@
"error.file.name.missing": "El nom del fitxer no pot estar buit",
"error.file.notFound": "L'arxiu \"{filename}\" no s'ha trobat",
"error.file.orientation": "L’orientació de la imatge ha de ser \"{orientation}\"",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "No tens permís per penjar fitxers {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "L'arxiu no s'ha trobat",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "The page cannot be moved into itself",
"error.page.move.directory": "The page directory cannot be moved",
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "The moved page could not be found",
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Heading",
"field.blocks.heading.text": "Text",
"field.blocks.heading.placeholder": "Heading …",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Alternative text",
"field.blocks.image.caption": "Caption",
"field.blocks.image.crop": "Crop",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Encara no hi ha cap fitxer seleccionat",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Change layout",
"field.layout.delete": "Delete layout",
@@ -345,12 +359,14 @@
"field.object.empty": "No information yet",
"field.pages.empty": "Encara no s'ha seleccionat cap pàgina",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "Segur que voleu eliminar aquesta fila?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.empty": "Encara no hi ha entrades.",
"field.users.empty": "Encara no s'ha seleccionat cap usuari",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "No fields yet",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Hide",
"hour": "Hora",
"hue": "Hue",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Ready to launch your site?",
"license.status.missing.info": "No valid license",
"license.status.missing.label": "Please activate your license",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Manage your licenses",
"license.purchased": "Purchased",
"license.success": "Gràcies per donar suport a Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Canvis no guardats",
"lock.unsaved.empty": "Ja no hi ha canvis no guardats",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Unsaved changes by {email}",
"lock.unlock": "Desbloquejar",
"lock.unlock.submit": "Unlock and overwrite unsaved changes by {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugins",
"prev": "Anterior",
"preview": "Preview",
+
+ "publish": "Publish",
+ "published": "Publicat",
+
"remove": "Eliminar",
"rename": "Canviar el nom",
"renew": "Renew",
@@ -597,7 +629,9 @@
"role.nobody.title": "Ningú",
"save": "Desar",
+ "saved": "Saved",
"search": "Cercar",
+ "searching": "Searching",
"search.min": "Introduïu {min} caràcters per cercar",
"search.all": "Show all {count} results",
"search.results.none": "Sense resultats",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "The content folder seems to be exposed",
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
@@ -646,6 +681,12 @@
"tel": "Phone",
"tel.placeholder": "+49123456789",
"template": "Plantilla",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Títol",
"today": "Avui",
@@ -715,10 +756,13 @@
"users": "Usuaris",
"version": "Versi\u00f3 de Kirby",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
+ "view": "View",
"view.account": "La teva compta",
"view.installation": "Instal·lació",
"view.languages": "Idiomes",
diff --git a/public/kirby/i18n/translations/cs.json b/public/kirby/i18n/translations/cs.json
index e2154f9..9cb6e7f 100644
--- a/public/kirby/i18n/translations/cs.json
+++ b/public/kirby/i18n/translations/cs.json
@@ -21,6 +21,8 @@
"copy": "Kopírovat",
"copy.all": "Kopírovat vše",
"copy.success": "{count} zkopírováno!",
+ "copy.success.multiple": "{count} copied!",
+ "copy.url": "Kopírovat URL",
"create": "Vytvořit",
"custom": "Vlastní",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Neplatný typ cache \"{type}\"",
+ "error.content.lock.delete": "Tato verze je uzamčená a nelze jí smazat",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "Tato verze je již zveřejněná",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "Nelze nalézt emailové přednastavení \"{name}\"",
"error.field.converter.invalid": "Neplatný konvertor \"{converter}\"",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Název souboru nesmí být prázdný",
"error.file.notFound": "Soubor se nepoda\u0159ilo nal\u00e9zt",
"error.file.orientation": "Orientace obrázku másí být \"{orientation}\"",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "Nemáte povoleno nahrávat soubory typu {type} ",
"error.file.type.invalid": "Neplatný typ souboru: {type}",
"error.file.undefined": "Soubor se nepoda\u0159ilo nal\u00e9zt",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "Stránka nemůže být přesunuta sama do sebe",
"error.page.move.directory": "Adresář stránky nelze přesunout",
"error.page.move.duplicate": "Podstránka s URL \"{slug}\" již existuje",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "Přesunutá stránka nebyla nalezena",
"error.page.move.permission": "Nemáte dovoleno přesunout stránku \"{slug}\"",
"error.page.move.template": "Šablonu \"{template}\" nelze použít pro podstránku \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Nadpis",
"field.blocks.heading.text": "Text",
"field.blocks.heading.placeholder": "Nadpis …",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Alternativní text",
"field.blocks.image.caption": "Titulek",
"field.blocks.image.crop": "Oříznout",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Nebyly zatím vybrány žádné soubory",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Změnit rozvržení",
"field.layout.delete": "Smazat rozvržení",
@@ -345,12 +359,14 @@
"field.object.empty": "Zatím žádná informace",
"field.pages.empty": "Nebyly zatím vybrány žádné stránky",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "Opravdu chcete smazat tento z\u00e1znam?",
"field.structure.delete.confirm.all": "Opravdu chcete smazat všechny záznamy?",
"field.structure.empty": "Zat\u00edm nejsou \u017e\u00e1dn\u00e9 z\u00e1znamy.",
"field.users.empty": "Nebyli zatím vybráni žádní uživatelé",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "Zatím žádné pole",
@@ -369,6 +385,13 @@
"filter": "Filtr",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Náhled změn",
+ "form.preview.draft": "Náhled konceptu",
+
"hide": "Skrýt",
"hour": "Hodina",
"hue": "Odstín",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Vše připraveno na spuštění vaši stránky?",
"license.status.missing.info": "Žádlná platná licence",
"license.status.missing.label": "Prosím aktivute svoji licenci",
+ "license.status.unknown.info": "Status licence je neznámý",
+ "license.status.unknown.label": "Neznámá licence",
"license.manage": "Spravovat licence",
"license.purchased": "Zakoupeno",
"license.success": "Děkujeme Vám za podporu Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Neuložené změny",
"lock.unsaved.empty": "Nezbývají již žádné neuložené změny.",
+ "lock.unsaved.files": "Neuložené soubory",
+ "lock.unsaved.pages": "Neuložené stránky",
+ "lock.unsaved.users": "Neuložené účty",
"lock.isLocked": "Neuložené změny od {email}",
"lock.unlock": "Odemknout",
"lock.unlock.submit": "Odemknout a přepsat neuložené změny od {email}",
@@ -578,6 +606,10 @@
"plugins": "Doplňky",
"prev": "Předchozí",
"preview": "Náhled",
+
+ "publish": "Zveřejnit",
+ "published": "Zveřejněno",
+
"remove": "Odstranit",
"rename": "Přejmenovat",
"renew": "Obnovit",
@@ -597,7 +629,9 @@
"role.nobody.title": "Nikdo",
"save": "Ulo\u017eit",
+ "saved": "Uloženo",
"search": "Hledat",
+ "searching": "Hledání",
"search.min": "Pro vyhledání zadejte alespoň {min} znaky",
"search.all": "Zobrazit všech {count} výsledků",
"search.results.none": "Žádné výsledky",
@@ -622,6 +656,7 @@
"system.info.copy": "Kopírovat informace",
"system.info.copied": "Systémové informace zkopírovány",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "Složka content je zřejmě přístupná zvenčí",
"system.issues.eol.kirby": "Instalovaná verze Kirby dosáhla konce životnosti a nebude již dále dostávat bezpečnostní aktualizace",
"system.issues.eol.plugin": "Instalovaná verze doplňku { plugin } dosáhla konce životnosti a nebude již dále dostávat bezpečnostní aktualizace",
@@ -646,6 +681,12 @@
"tel": "Telefon",
"tel.placeholder": "+49123456789",
"template": "\u0160ablona",
+
+ "theme": "Motiv",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Podle nastavení systému",
+
"title": "Název",
"today": "Dnes",
@@ -715,10 +756,13 @@
"users": "Uživatelé",
"version": "Verze Kirby",
+ "version.changes": "Změnit verzi",
+ "version.compare": "Porovnat verze",
"version.current": "Současná verze",
"version.latest": "Poslední verze",
"versionInformation": "Informace o verzi",
+ "view": "View",
"view.account": "V\u00e1\u0161 \u00fa\u010det",
"view.installation": "Instalace",
"view.languages": "Jazyky",
diff --git a/public/kirby/i18n/translations/da.json b/public/kirby/i18n/translations/da.json
index 471b2c5..f2db383 100644
--- a/public/kirby/i18n/translations/da.json
+++ b/public/kirby/i18n/translations/da.json
@@ -21,6 +21,8 @@
"copy": "Kopier",
"copy.all": "Kopier alle",
"copy.success": "{count} copied!",
+ "copy.success.multiple": "{count} copied!",
+ "copy.url": "Copy URL",
"create": "Opret",
"custom": "Custom",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Invalid cache type \"{type}\"",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "Email preset \"{name}\" findes ikke",
"error.field.converter.invalid": "Ugyldig converter \"{converter}\"",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Filnavn må ikke være tomt",
"error.file.notFound": "Filen kunne ikke findes",
"error.file.orientation": "Formatet på billedet skal være \"{orientation}\"",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "Du har ikke tilladelse til at uploade {type} filer",
"error.file.type.invalid": "Ugyldig filtype: {type}",
"error.file.undefined": "Filen kunne ikke findes",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "The page cannot be moved into itself",
"error.page.move.directory": "The page directory cannot be moved",
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "The moved page could not be found",
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Overskrift",
"field.blocks.heading.text": "Tekst",
"field.blocks.heading.placeholder": "Overskrift …",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Alternativ tekst",
"field.blocks.image.caption": "Billedtekst",
"field.blocks.image.crop": "Beskær",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Ingen filer valgt endnu",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Change layout",
"field.layout.delete": "Slet layout",
@@ -345,12 +359,14 @@
"field.object.empty": "No information yet",
"field.pages.empty": "Ingen sider valgt endnu",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "\u00d8nsker du virkelig at slette denne indtastning?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.empty": "Ingen indtastninger endnu.",
"field.users.empty": "Ingen brugere er valgt",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "No fields yet",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Skjul",
"hour": "Time",
"hue": "Hue",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Ready to launch your site?",
"license.status.missing.info": "No valid license",
"license.status.missing.label": "Please activate your license",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Manage your licenses",
"license.purchased": "Purchased",
"license.success": "Tak for din støtte af Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Ugemte ændringer",
"lock.unsaved.empty": "Der er ikke flere ændringer der ikke er gamt",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Unsaved changes by {email}",
"lock.unlock": "Lås op",
"lock.unlock.submit": "Unlock and overwrite unsaved changes by {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugins",
"prev": "Forrige",
"preview": "Forhåndsvisning",
+
+ "publish": "Publish",
+ "published": "Udgivede",
+
"remove": "Fjern",
"rename": "Omdøb",
"renew": "Renew",
@@ -597,7 +629,9 @@
"role.nobody.title": "Ingen",
"save": "Gem",
+ "saved": "Saved",
"search": "Søg",
+ "searching": "Searching",
"search.min": "Indtast {min} tegn for at søge",
"search.all": "Show all {count} results",
"search.results.none": "Ingen resultater",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "The content folder seems to be exposed",
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
@@ -646,6 +681,12 @@
"tel": "Phone",
"tel.placeholder": "+49123456789",
"template": "Skabelon",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Titel",
"today": "Idag",
@@ -715,10 +756,13 @@
"users": "Brugere",
"version": "Kirby version",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
+ "view": "View",
"view.account": "Din konto",
"view.installation": "Installation",
"view.languages": "Sprog",
diff --git a/public/kirby/i18n/translations/de.json b/public/kirby/i18n/translations/de.json
index d57e2c9..2ec324a 100644
--- a/public/kirby/i18n/translations/de.json
+++ b/public/kirby/i18n/translations/de.json
@@ -20,7 +20,9 @@
"coordinates": "Koordinaten",
"copy": "Kopieren",
"copy.all": "Alle kopieren",
- "copy.success": "{count} kopiert!",
+ "copy.success": "Kopiert",
+ "copy.success.multiple": "{count} kopiert!",
+ "copy.url": "URL kopieren",
"create": "Erstellen",
"custom": "Benutzerdefiniert",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Ungültiger Cachetyp: \"{type}\"",
+ "error.content.lock.delete": "Die Version ist blockiert und kann daher nicht gelöscht werden.",
+ "error.content.lock.move": "Die Ursprungsversion ist blockiert und kann daher nicht gelöscht werden",
+ "error.content.lock.publish": "Die Version wurde bereits veröffentlicht",
+ "error.content.lock.replace": "Die Version ist blockiert und kann daher nicht ersetzt werden",
+ "error.content.lock.update": "Die Version ist blockiert und kann daher nicht geändert werden",
+
"error.email.preset.notFound": "Die E-Mailvorlage \"{name}\" wurde nicht gefunden",
"error.field.converter.invalid": "Ungültiger Konverter: \"{converter}\"",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Bitte gib einen Dateinamen an",
"error.file.notFound": "Die Datei \"{filename}\" konnte nicht gefunden werden",
"error.file.orientation": "Das Bildformat ist ungültig. Erwartetes Format: \"{orientation}\"",
+ "error.file.sort.permission": "Du darfst die Sortierung für \"{filename}\" nicht ändern.",
"error.file.type.forbidden": "Du kannst keinen {type}-Dateien hochladen",
"error.file.type.invalid": "Ungültiger Dateityp: {mime}",
"error.file.undefined": "Die Datei konnte nicht gefunden werden",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "Die Seite kann nicht in sich selbst verschoben werden",
"error.page.move.directory": "Der Ordner der Seite kann nicht verschoben werden",
"error.page.move.duplicate": "Eine Seite mit dem URL-Kürzel \"{slug}\" besteht bereits",
+ "error.page.move.noSections": "Die Seite \"{parent}\" kann nicht ausgewählt werden, weil sie keine Unterseiten haben kann. ",
"error.page.move.notFound": "Die verschobene Seite kann nicht gefunden werden",
"error.page.move.permission": "Du kannst die Seite \"{slug}\" nicht verschieben",
"error.page.move.template": "Die Vorlage \"{template}\" wird nicht als Unterseite von \"{parent}\" akzeptiert",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Überschrift",
"field.blocks.heading.text": "Text",
"field.blocks.heading.placeholder": "Überschrift …",
+ "field.blocks.figure.back.plain": "Ohne",
+ "field.blocks.figure.back.pattern.light": "Muster (hell)",
+ "field.blocks.figure.back.pattern.dark": "Muster (dunkel)",
"field.blocks.image.alt": "Alternativer Text",
"field.blocks.image.caption": "Bildunterschrift",
"field.blocks.image.crop": "Beschneiden",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Keine Dateien ausgewählt",
+ "field.files.empty.single": "Keine Dateien ausgewählt",
"field.layout.change": "Layout ändern",
"field.layout.delete": "Layout löschen",
@@ -345,12 +359,14 @@
"field.object.empty": "Noch keine Information",
"field.pages.empty": "Keine Seiten ausgewählt",
+ "field.pages.empty.single": "Keine Seiten ausgewählt",
"field.structure.delete.confirm": "Willst du diesen Eintrag wirklich l\u00f6schen?",
"field.structure.delete.confirm.all": "Möchtest du wirklich alle Einträge löschen?",
"field.structure.empty": "Es bestehen keine Eintr\u00e4ge.",
"field.users.empty": "Keine Accounts ausgewählt",
+ "field.users.empty.single": "Keine Accounts ausgewählt",
"fields.empty": "Keine Felder",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Änderungen verwerfen",
+ "form.discard.confirm": "Willst du wirklich alle ungespeicherten Änderungen verwerfen? ",
+ "form.locked": "Dieser Inhalt ist gesperrt, weil er aktuell von einem anderen Account bearbeitet wird",
+ "form.unsaved": "Die aktuellen Änderungen wurden noch nicht gespeichert",
+ "form.preview": "Änderungsvorschau",
+ "form.preview.draft": "Entwurfsvorschau",
+
"hide": "Verbergen",
"hour": "Stunde",
"hue": "Farbton",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Bereit, deine Seite zu veröffentlichen?",
"license.status.missing.info": "Keine gültige Lizenz",
"license.status.missing.label": "Bitte aktiviere deine Lizenz",
+ "license.status.unknown.info": "Der Lizenzstatus ist unbekannt",
+ "license.status.unknown.label": "Unbekannte Lizenz",
"license.manage": "Verwalte deine Lizenzen",
"license.purchased": "Gekauft",
"license.success": "Vielen Dank für deine Unterstützung",
@@ -456,6 +481,9 @@
"lock.unsaved": "Ungespeicherte Änderungen",
"lock.unsaved.empty": "Keine ungespeicherten Änderungen",
+ "lock.unsaved.files": "Geänderte Dateien",
+ "lock.unsaved.pages": "Geänderte Seiten",
+ "lock.unsaved.users": "Geänderte Accounts",
"lock.isLocked": "Ungespeicherte Änderungen von {email}",
"lock.unlock": "Entsperren",
"lock.unlock.submit": "Entsperre und überschreibe ungespeicherte Änderungen von {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugins",
"prev": "Vorheriger Eintrag",
"preview": "Vorschau",
+
+ "publish": "Veröffentlichen",
+ "published": "Veröffentlicht",
+
"remove": "Entfernen",
"rename": "Umbenennen",
"renew": "Erneuern",
@@ -597,7 +629,9 @@
"role.nobody.title": "Niemand",
"save": "Speichern",
+ "saved": "Gespeichert",
"search": "Suchen",
+ "searching": "Suchen",
"search.min": "Gib mindestens {min} Zeichen ein, um zu suchen",
"search.all": "Zeige alle {count} Ergebnisse",
"search.results.none": "Keine Ergebnisse",
@@ -622,6 +656,7 @@
"system.info.copy": "Info kopieren",
"system.info.copied": "System Info wurde kopiert",
+ "system.issues.api.methods": "Dein Server unterstützt keine PATCH Requests",
"system.issues.content": "Der content Ordner scheint öffentlich zugänglich zu sein",
"system.issues.eol.kirby": "Deine Kirby Installation ist veraltet und erhält keine weiteren Sicherheitsupdates",
"system.issues.eol.plugin": "Deine Version des { plugin } Plugins ist veraltet und erhält keine weiteren Sicherheitsupdates",
@@ -646,6 +681,12 @@
"tel": "Telefon",
"tel.placeholder": "+49123456789",
"template": "Vorlage",
+
+ "theme": "Thema",
+ "theme.light": "Licht an",
+ "theme.dark": "Licht aus",
+ "theme.automatic": "Systemeinstellung übernehmen",
+
"title": "Titel",
"today": "Heute",
@@ -715,10 +756,13 @@
"users": "Accounts",
"version": "Version",
+ "version.changes": "Geänderte Version",
+ "version.compare": "Versionen vergleichen",
"version.current": "Aktuelle Version",
"version.latest": "Neueste Version",
"versionInformation": "Informationen zur Version",
+ "view": "Ansicht",
"view.account": "Dein Account",
"view.installation": "Installation",
"view.languages": "Sprachen",
diff --git a/public/kirby/i18n/translations/el.json b/public/kirby/i18n/translations/el.json
index bd4c1c8..b365750 100644
--- a/public/kirby/i18n/translations/el.json
+++ b/public/kirby/i18n/translations/el.json
@@ -20,7 +20,9 @@
"coordinates": "Coordinates",
"copy": "Αντιγραφή",
"copy.all": "Copy all",
- "copy.success": "{count} copied!",
+ "copy.success": "Copied",
+ "copy.success.multiple": "{count} copied!",
+ "copy.url": "Copy URL",
"create": "Δημιουργία",
"custom": "Custom",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Invalid cache type \"{type}\"",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "Δεν είναι δυνατή η εύρεση της προεπιλογής διεύθινσης ηλεκτρονικού ταχυδρομείου \"{name}\"",
"error.field.converter.invalid": "Μη έγκυρος μετατροπέας \"{converter}\"",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Το όνομα αρχείου δεν μπορεί να είναι άδειο",
"error.file.notFound": "Δεν είναι δυνατό να βρεθεί το αρχείο \"{filename}\"",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "Δεν επιτρέπεται η μεταφόρτωση αρχείων {type}",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "Δεν ήταν δυνατή η εύρεση του αρχείου",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "The page cannot be moved into itself",
"error.page.move.directory": "The page directory cannot be moved",
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "The moved page could not be found",
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Heading",
"field.blocks.heading.text": "Text",
"field.blocks.heading.placeholder": "Heading …",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Alternative text",
"field.blocks.image.caption": "Caption",
"field.blocks.image.crop": "Crop",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Δεν έχουν επιλεγεί αρχεία ακόμα",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Change layout",
"field.layout.delete": "Delete layout",
@@ -345,12 +359,14 @@
"field.object.empty": "No information yet",
"field.pages.empty": "Δεν έχουν επιλεγεί ακόμη σελίδες",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "\u0395\u03af\u03c3\u03c4\u03b5 \u03c3\u03af\u03b3\u03bf\u03c5\u03c1\u03bf\u03c2 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae\u03bd \u03c4\u03b7\u03bd \u03ba\u03b1\u03c4\u03b1\u03c7\u03ce\u03c1\u03b9\u03c3\u03b7;",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.empty": "\u0394\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03c5\u03bd \u03b1\u03ba\u03cc\u03bc\u03b7 \u03ba\u03b1\u03c4\u03b1\u03c7\u03c9\u03c1\u03af\u03c3\u03b5\u03b9\u03c2.",
"field.users.empty": "Δεν έχουν επιλεγεί ακόμη χρήστες",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "No fields yet",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Hide",
"hour": "Ώρα",
"hue": "Hue",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Ready to launch your site?",
"license.status.missing.info": "No valid license",
"license.status.missing.label": "Please activate your license",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Manage your licenses",
"license.purchased": "Purchased",
"license.success": "Σας ευχαριστούμε για την υποστήριξη του Kirby",
@@ -455,7 +480,10 @@
"loading": "Φόρτωση",
"lock.unsaved": "Unsaved changes",
- "lock.unsaved.empty": "There are no more unsaved changes",
+ "lock.unsaved.empty": "There are no unsaved changes",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Unsaved changes by {email}",
"lock.unlock": "Unlock",
"lock.unlock.submit": "Unlock and overwrite unsaved changes by {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugins",
"prev": "Προηγούμενο",
"preview": "Preview",
+
+ "publish": "Publish",
+ "published": "Δημοσιευμένο",
+
"remove": "Αφαίρεση",
"rename": "Μετονομασία",
"renew": "Renew",
@@ -597,7 +629,9 @@
"role.nobody.title": "Nobody",
"save": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7",
+ "saved": "Saved",
"search": "Αναζήτηση",
+ "searching": "Searching",
"search.min": "Enter {min} characters to search",
"search.all": "Show all {count} results",
"search.results.none": "No results",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "The content folder seems to be exposed",
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
@@ -646,6 +681,12 @@
"tel": "Phone",
"tel.placeholder": "+49123456789",
"template": "\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Τίτλος",
"today": "Σήμερα",
@@ -715,10 +756,13 @@
"users": "Χρήστες",
"version": "\u0388\u03ba\u03b4\u03bf\u03c3\u03b7 Kirby",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
+ "view": "View",
"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": "Γλώσσες",
diff --git a/public/kirby/i18n/translations/en.json b/public/kirby/i18n/translations/en.json
index f88d787..010d871 100644
--- a/public/kirby/i18n/translations/en.json
+++ b/public/kirby/i18n/translations/en.json
@@ -93,6 +93,7 @@
"error.email.preset.notFound": "The email preset \"{name}\" cannot be found",
"error.field.converter.invalid": "Invalid converter \"{converter}\"",
+ "error.field.link.options": "Invalid options: {options}",
"error.field.type.missing": "Field \"{ name }\": The field type \"{ type }\" does not exist",
"error.file.changeName.empty": "The name must not be empty",
diff --git a/public/kirby/i18n/translations/eo.json b/public/kirby/i18n/translations/eo.json
index 939b2cc..5cc0825 100644
--- a/public/kirby/i18n/translations/eo.json
+++ b/public/kirby/i18n/translations/eo.json
@@ -21,6 +21,8 @@
"copy": "Kopii",
"copy.all": "Kopii ĉiujn",
"copy.success": "{count} copied!",
+ "copy.success.multiple": "{count} copied!",
+ "copy.url": "Copy URL",
"create": "Krei",
"custom": "Custom",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Invalid cache type \"{type}\"",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "La retpoŝta antaŭagordo \"{name}\" ne estas trovebla",
"error.field.converter.invalid": "Nevalida konvertilo \"{converter}\"",
@@ -118,6 +126,7 @@
"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.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"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",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "The page cannot be moved into itself",
"error.page.move.directory": "The page directory cannot be moved",
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "The moved page could not be found",
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Titolo",
"field.blocks.heading.text": "Teksto",
"field.blocks.heading.placeholder": "Titolo ...",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Alternativa titolo",
"field.blocks.image.caption": "Apudskribo",
"field.blocks.image.crop": "Stuci",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Ankoraŭ neniu dosiero elektita",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Change layout",
"field.layout.delete": "Forigi blokaranĝo",
@@ -345,12 +359,14 @@
"field.object.empty": "No information yet",
"field.pages.empty": "Ankoraŭ neniu paĝo elektita",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "Ĉu vi certe volas forigi ĉi tiun vicon?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.empty": "Ankoraŭ neniu enigo",
"field.users.empty": "Ankoraŭ neniu uzanto elektita",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "No fields yet",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Kaŝi",
"hour": "Horo",
"hue": "Hue",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Ready to launch your site?",
"license.status.missing.info": "No valid license",
"license.status.missing.label": "Please activate your license",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Manage your licenses",
"license.purchased": "Purchased",
"license.success": "Dankon pro subteni Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Nekonservitaj ŝanĝoj",
"lock.unsaved.empty": "Ĉiuj ŝanĝoj estas nun konservitaj",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Unsaved changes by {email}",
"lock.unlock": "Malŝlosi",
"lock.unlock.submit": "Unlock and overwrite unsaved changes by {email}",
@@ -578,6 +606,10 @@
"plugins": "Kromprogramoj",
"prev": "Antaŭe",
"preview": "Antaŭrigardi",
+
+ "publish": "Publish",
+ "published": "Publikigita",
+
"remove": "Forigi",
"rename": "Ŝanĝi nomon",
"renew": "Renew",
@@ -597,7 +629,9 @@
"role.nobody.title": "Neniu",
"save": "Konservi",
+ "saved": "Saved",
"search": "Serĉi",
+ "searching": "Searching",
"search.min": "Entajpu {min} literojn por serĉi",
"search.all": "Show all {count} results",
"search.results.none": "Neniu rezulto",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "The content folder seems to be exposed",
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
@@ -646,6 +681,12 @@
"tel": "Phone",
"tel.placeholder": "+49123456789",
"template": "Ŝablono",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Titolo",
"today": "Hodiaŭ",
@@ -715,10 +756,13 @@
"users": "Uzantoj",
"version": "Versio",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
+ "view": "View",
"view.account": "Via konto",
"view.installation": "Instalado",
"view.languages": "Lingvoj",
diff --git a/public/kirby/i18n/translations/es_419.json b/public/kirby/i18n/translations/es_419.json
index dbaf216..fc23540 100644
--- a/public/kirby/i18n/translations/es_419.json
+++ b/public/kirby/i18n/translations/es_419.json
@@ -21,6 +21,8 @@
"copy": "Copiar",
"copy.all": "Copiar todo",
"copy.success": "{count} copied!",
+ "copy.success.multiple": "{count} copied!",
+ "copy.url": "Copy URL",
"create": "Crear",
"custom": "Custom",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Tipo de caché \"{tipo}\" no válido",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "El preajuste de email \"{name}\" no se pudo encontrar.",
"error.field.converter.invalid": "Convertidor inválido \"{converter}\"",
@@ -118,6 +126,7 @@
"error.file.name.missing": "El nombre del archivo no debe estar vacío.",
"error.file.notFound": "El archivo \"{filename}\" no pudo ser encontrado.",
"error.file.orientation": "La orientación de la imagen debe ser \"{orientation}\"",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "No está permitido subir archivos {type}.",
"error.file.type.invalid": "Tipo de archivo inválido: {type}",
"error.file.undefined": "El archivo no se puede encontrar",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "The page cannot be moved into itself",
"error.page.move.directory": "The page directory cannot be moved",
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "The moved page could not be found",
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Encabezado",
"field.blocks.heading.text": "Texto",
"field.blocks.heading.placeholder": "Encabezado...",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Texto alternativo",
"field.blocks.image.caption": "Leyenda",
"field.blocks.image.crop": "Cortar",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Aún no ha seleccionado ningún archivo",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Change layout",
"field.layout.delete": "Eliminar layout",
@@ -345,12 +359,14 @@
"field.object.empty": "Aún no hay información",
"field.pages.empty": "Aún no ha seleccionado ningúna pagina",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "\u00bfEn realidad desea borrar esta entrada?",
"field.structure.delete.confirm.all": "¿Realmente quieres eliminar todas las entradas?",
"field.structure.empty": "A\u00fan no existen entradas.",
"field.users.empty": "Aún no ha seleccionado ningún usuario",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "No fields yet",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Ocultar",
"hour": "Hora",
"hue": "Hue",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Ready to launch your site?",
"license.status.missing.info": "No valid license",
"license.status.missing.label": "Please activate your license",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Gestiona tus licencias",
"license.purchased": "Purchased",
"license.success": "Gracias por apoyar a Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Cambios sin guardar",
"lock.unsaved.empty": "No hay más cambios sin guardar",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Unsaved changes by {email}",
"lock.unlock": "Desbloquear",
"lock.unlock.submit": "Unlock and overwrite unsaved changes by {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugins",
"prev": "Anterior",
"preview": "Previsualizar",
+
+ "publish": "Publish",
+ "published": "Publicado",
+
"remove": "Eliminar",
"rename": "Renombrar",
"renew": "Renew",
@@ -597,7 +629,9 @@
"role.nobody.title": "Nadie",
"save": "Guardar",
+ "saved": "Saved",
"search": "Buscar",
+ "searching": "Searching",
"search.min": "Introduce {min} caracteres para buscar",
"search.all": "Show all {count} results",
"search.results.none": "Sin resultados",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "La carpeta content parece estar expuesta",
"system.issues.eol.kirby": "La versión de Kirby que tienes instalada ha llegado al final de su vida útil y no recibirá más actualizaciones de seguridad.",
"system.issues.eol.plugin": "Tu versión instalada del plugin { plugin } ha llegado al final de su vida útil y no recibirá más actualizaciones de seguridad.",
@@ -646,6 +681,12 @@
"tel": "Phone",
"tel.placeholder": "+49123456789",
"template": "Plantilla",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Título",
"today": "Hoy",
@@ -715,10 +756,13 @@
"users": "Usuarios",
"version": "Versión",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Versión actual",
"version.latest": "Última versión",
"versionInformation": "información sobre la versión",
+ "view": "View",
"view.account": "Tu cuenta",
"view.installation": "Instalaci\u00f3n",
"view.languages": "Idiomas",
diff --git a/public/kirby/i18n/translations/es_ES.json b/public/kirby/i18n/translations/es_ES.json
index 25ea458..a9555df 100644
--- a/public/kirby/i18n/translations/es_ES.json
+++ b/public/kirby/i18n/translations/es_ES.json
@@ -21,6 +21,8 @@
"copy": "Copiar",
"copy.all": "Copiar todo",
"copy.success": "{count} copied!",
+ "copy.success.multiple": "{count} copied!",
+ "copy.url": "Copy URL",
"create": "Crear",
"custom": "Custom",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Tipo de caché inválido \"{tipo}\"",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "El preset del correo \"{name}\" no puede ser encontrado",
"error.field.converter.invalid": "Convertidor \"{converter}\" inválido",
@@ -118,6 +126,7 @@
"error.file.name.missing": "El nombre de archivo no debe estar vacío",
"error.file.notFound": "El archivo \"{filename}\" no puede ser encontrado",
"error.file.orientation": "La orientación de la imagen debe ser \"{orientation}",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "No tienes permiso para subir archivos {type}",
"error.file.type.invalid": "Tipo de archivo inválido: {type}",
"error.file.undefined": "El archivo no puede ser encontrado",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "The page cannot be moved into itself",
"error.page.move.directory": "The page directory cannot be moved",
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "The moved page could not be found",
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Encabezado",
"field.blocks.heading.text": "Texto",
"field.blocks.heading.placeholder": "Encabezado...",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Texto alternativo",
"field.blocks.image.caption": "Leyenda",
"field.blocks.image.crop": "Cortar",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Aún no hay archivos seleccionados",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Change layout",
"field.layout.delete": "Eliminar layout",
@@ -345,12 +359,14 @@
"field.object.empty": "Aún no hay información",
"field.pages.empty": "Aún no hay páginas seleccionadas",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "¿Realmente quieres eliminar esta fila?",
"field.structure.delete.confirm.all": "¿Realmente quieres eliminar todas las entradas?",
"field.structure.empty": "Aún no hay entradas",
"field.users.empty": "Aún no hay usuarios seleccionados",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "No fields yet",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Ocultar",
"hour": "Hora",
"hue": "Hue",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Ready to launch your site?",
"license.status.missing.info": "No valid license",
"license.status.missing.label": "Please activate your license",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Gestiona licencias",
"license.purchased": "Purchased",
"license.success": "Gracias por apoyar a Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Cambios sin guardar",
"lock.unsaved.empty": "No hay más cambios sin guardar",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Unsaved changes by {email}",
"lock.unlock": "Desbloquear",
"lock.unlock.submit": "Unlock and overwrite unsaved changes by {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugins",
"prev": "Anterior",
"preview": "Previsualizar",
+
+ "publish": "Publish",
+ "published": "Publicadas",
+
"remove": "Eliminar",
"rename": "Renombrar",
"renew": "Renew",
@@ -597,7 +629,9 @@
"role.nobody.title": "Nadie",
"save": "Guardar",
+ "saved": "Saved",
"search": "Buscar",
+ "searching": "Searching",
"search.min": "Introduce {min} caracteres para buscar",
"search.all": "Show all {count} results",
"search.results.none": "Sin resultados",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "La carpeta content parece estar expuesta",
"system.issues.eol.kirby": "La versión de Kirby que tienes instalada ha llegado al final de su vida útil y no recibirá más actualizaciones de seguridad.",
"system.issues.eol.plugin": "La versión del plugin { plugin } que tienes instalada ha llegado al final de su vida útil y no recibirá más actualizaciones de seguridad.",
@@ -646,6 +681,12 @@
"tel": "Phone",
"tel.placeholder": "+49123456789",
"template": "Plantilla",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Título",
"today": "Hoy",
@@ -715,10 +756,13 @@
"users": "Usuarios",
"version": "Versión",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Versión actual",
"version.latest": "Última versión",
"versionInformation": "Información sobre la versión",
+ "view": "View",
"view.account": "Tu cuenta",
"view.installation": "Instalación",
"view.languages": "Idiomas",
diff --git a/public/kirby/i18n/translations/fa.json b/public/kirby/i18n/translations/fa.json
index 9b92a85..a6fa368 100644
--- a/public/kirby/i18n/translations/fa.json
+++ b/public/kirby/i18n/translations/fa.json
@@ -21,6 +21,8 @@
"copy": "کپی",
"copy.all": "Copy all",
"copy.success": "{count} copied!",
+ "copy.success.multiple": "{count} copied!",
+ "copy.url": "Copy URL",
"create": "ایجاد",
"custom": "Custom",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Invalid cache type \"{type}\"",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "قالب ایمیل «{name}» پیدا نشد",
"error.field.converter.invalid": "مبدل «{converter}» نامعتبر است",
@@ -118,6 +126,7 @@
"error.file.name.missing": "نام فایل اجباری است",
"error.file.notFound": "فایل «{filename}» پیدا نشد.",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "شما اجازه بارگذاری فایلهای «{type}» را ندارید",
"error.file.type.invalid": "Invalid file type: {type}",
"error.file.undefined": "\u0641\u0627\u06cc\u0644 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u067e\u06cc\u062f\u0627 \u0646\u0634\u062f.",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "The page cannot be moved into itself",
"error.page.move.directory": "The page directory cannot be moved",
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "The moved page could not be found",
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Heading",
"field.blocks.heading.text": "Text",
"field.blocks.heading.placeholder": "Heading …",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Alternative text",
"field.blocks.image.caption": "Caption",
"field.blocks.image.crop": "Crop",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "فایلی انتخاب نشده است",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Change layout",
"field.layout.delete": "Delete layout",
@@ -345,12 +359,14 @@
"field.object.empty": "No information yet",
"field.pages.empty": "صفحهای انتخاب نشده است",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "\u0645\u062f\u062e\u0644 \u062c\u0627\u0631\u06cc \u062d\u0630\u0641 \u0634\u0648\u062f\u061f",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.empty": "\u0645\u0648\u0631\u062f\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f.",
"field.users.empty": "کاربری انتخاب نشده است",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "No fields yet",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Hide",
"hour": "ساعت",
"hue": "Hue",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Ready to launch your site?",
"license.status.missing.info": "No valid license",
"license.status.missing.label": "Please activate your license",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Manage your licenses",
"license.purchased": "Purchased",
"license.success": "با تشکر از شما برای حمایت از کربی",
@@ -456,6 +481,9 @@
"lock.unsaved": "Unsaved changes",
"lock.unsaved.empty": "There are no more unsaved changes",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Unsaved changes by {email}",
"lock.unlock": "Unlock",
"lock.unlock.submit": "Unlock and overwrite unsaved changes by {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugins",
"prev": "قبلی",
"preview": "Preview",
+
+ "publish": "Publish",
+ "published": "منتشر شده",
+
"remove": "حذف",
"rename": "تغییر نام",
"renew": "Renew",
@@ -597,7 +629,9 @@
"role.nobody.title": "Nobody",
"save": "\u0630\u062e\u06cc\u0631\u0647",
+ "saved": "Saved",
"search": "جستجو",
+ "searching": "Searching",
"search.min": "Enter {min} characters to search",
"search.all": "Show all {count} results",
"search.results.none": "No results",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "The content folder seems to be exposed",
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
@@ -646,6 +681,12 @@
"tel": "Phone",
"tel.placeholder": "+49123456789",
"template": "\u0642\u0627\u0644\u0628 \u0635\u0641\u062d\u0647",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "عنوان",
"today": "امروز",
@@ -715,10 +756,13 @@
"users": "کاربران",
"version": "\u0646\u0633\u062e\u0647 \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
+ "view": "View",
"view.account": "حساب کاربری شما",
"view.installation": "\u0646\u0635\u0628 \u0648 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc",
"view.languages": "زبانها",
diff --git a/public/kirby/i18n/translations/fi.json b/public/kirby/i18n/translations/fi.json
index 68ecc72..b28fcd0 100644
--- a/public/kirby/i18n/translations/fi.json
+++ b/public/kirby/i18n/translations/fi.json
@@ -21,6 +21,8 @@
"copy": "Kopioi",
"copy.all": "Kopioi kaikki",
"copy.success": "{count} copied!",
+ "copy.success.multiple": "{count} copied!",
+ "copy.url": "Copy URL",
"create": "Luo",
"custom": "Custom",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Invalid cache type \"{type}\"",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "Nimellä \"{name}\" ja kyseisellä verkkotunnuksella ei löydy sähköpostiosoitetta",
"error.field.converter.invalid": "Muunnin \"{converter}\" ei kelpaa",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Tiedostonimi ei voi olla tyhjä",
"error.file.notFound": "Tiedostoa \"{filename}\" ei löytynyt",
"error.file.orientation": "Kuvan suuntaus täytyy olla \"{orientation}\"",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "Sinulla ei ole oikeutta lähettää tiedostoja joiden tyyppi on {type}",
"error.file.type.invalid": "Tiedostotyyppi {type} ei kelpaa",
"error.file.undefined": "Tiedostoa ei l\u00f6ytynyt",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "The page cannot be moved into itself",
"error.page.move.directory": "The page directory cannot be moved",
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "The moved page could not be found",
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Otsikko",
"field.blocks.heading.text": "Teksti",
"field.blocks.heading.placeholder": "Otsikko …",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Vaihtoehtoinen teksti",
"field.blocks.image.caption": "Kuvateksti",
"field.blocks.image.crop": "Rajaa",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Tiedostoja ei ole vielä valittu",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Change layout",
"field.layout.delete": "Poista asettelu",
@@ -345,12 +359,14 @@
"field.object.empty": "Ei vielä tietoja",
"field.pages.empty": " Sivuja ei ole vielä valittu",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "Haluatko varmasti poistaa tämän rivin?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.empty": "Rivejä ei ole vielä lisätty",
"field.users.empty": "Käyttäjiä ei ole vielä valittu",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "No fields yet",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Piilota",
"hour": "Tunti",
"hue": "Hue",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Ready to launch your site?",
"license.status.missing.info": "No valid license",
"license.status.missing.label": "Please activate your license",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Hallinnoi lisenssejäsi",
"license.purchased": "Purchased",
"license.success": "Kiitos kun tuet Kirbyä",
@@ -456,6 +481,9 @@
"lock.unsaved": "Tallentamattomia muutoksia",
"lock.unsaved.empty": "Ei enempää tallentamattomia muutoksia ",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Unsaved changes by {email}",
"lock.unlock": "Vapauta",
"lock.unlock.submit": "Unlock and overwrite unsaved changes by {email}",
@@ -578,6 +606,10 @@
"plugins": "Liitännäiset",
"prev": "Edellinen",
"preview": "Esikatselu",
+
+ "publish": "Publish",
+ "published": "Julkaistut",
+
"remove": "Poista",
"rename": "Nimeä uudelleen",
"renew": "Renew",
@@ -597,7 +629,9 @@
"role.nobody.title": "Tuntematon",
"save": "Tallenna",
+ "saved": "Saved",
"search": "Haku",
+ "searching": "Searching",
"search.min": "Anna vähintään {min} merkkiä hakua varten",
"search.all": "Show all {count} results",
"search.results.none": "Ei tuloksia",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "Content-kansio näyttäisi olevan julkinen",
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
@@ -646,6 +681,12 @@
"tel": "Phone",
"tel.placeholder": "+49123456789",
"template": "Sivupohja",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Nimi",
"today": "Tänään",
@@ -715,10 +756,13 @@
"users": "Käyttäjät",
"version": "Versio",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Nykyinen versio ",
"version.latest": "Uusin versio ",
"versionInformation": "Version tiedot",
+ "view": "View",
"view.account": "Oma käyttäjätili",
"view.installation": "Asennus",
"view.languages": "Kielet",
diff --git a/public/kirby/i18n/translations/fr.json b/public/kirby/i18n/translations/fr.json
index 8c75064..eafb173 100644
--- a/public/kirby/i18n/translations/fr.json
+++ b/public/kirby/i18n/translations/fr.json
@@ -21,6 +21,8 @@
"copy": "Copier",
"copy.all": "Tout copier",
"copy.success": "Copié : {count}",
+ "copy.success.multiple": "Copié : {count}",
+ "copy.url": "Copy URL",
"create": "Créer",
"custom": "Personnalisé",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Type de cache invalide « {type} »",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "La configuration de courriel « {name} » n’a pu être trouvé ",
"error.field.converter.invalid": "Convertisseur « {converter} » invalide",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Veuillez entrer un titre",
"error.file.notFound": "Le fichier « {filename} » n’a pu être trouvé",
"error.file.orientation": "L’orientation de l'image doit être « {orientation} »",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "Vous n’êtes pas autorisé à transférer des fichiers {type}",
"error.file.type.invalid": "Type de fichier invalide : {type}",
"error.file.undefined": "Le fichier n’a pu être trouvé",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "La page ne peut être déplacée à l’intérieur d’elle-même",
"error.page.move.directory": "Le répertoire de la page ne peut être déplacé",
"error.page.move.duplicate": "Une sous-page possédant l’identifiant d’URL « {slug} » existe déjà",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "La page déplacée n’a pu être trouvée",
"error.page.move.permission": "Vous n’êtes pas autorisé à déplacer « {slug} » ",
"error.page.move.template": "Le modèle « {template} » n’est pas accepté en tant que sous-page de « {parent} »",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Titre",
"field.blocks.heading.text": "Texte",
"field.blocks.heading.placeholder": "Titre…",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Texte alternatif",
"field.blocks.image.caption": "Légende",
"field.blocks.image.crop": "Recadrer",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Pas encore de fichier sélectionné",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Changer de disposition",
"field.layout.delete": "Supprimer cette disposition",
@@ -345,12 +359,14 @@
"field.object.empty": "Pas encore d‘information",
"field.pages.empty": "Pas encore de page sélectionnée",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "Voulez-vous vraiment supprimer cette ligne ?",
"field.structure.delete.confirm.all": "Voulez-vous vraiment supprimer toutes les entrées ?",
"field.structure.empty": "Pas encore d’entrée",
"field.users.empty": "Pas encore d’utilisateur sélectionné",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "Pas encore de champs",
@@ -369,6 +385,13 @@
"filter": "Filtrer",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Masquer",
"hour": "Heure",
"hue": "Teinte",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Prêt à lancer votre site ?",
"license.status.missing.info": "Pas de licence valide",
"license.status.missing.label": "Veuillez activer votre licence",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Gérer vos licences",
"license.purchased": "Achetée",
"license.success": "Merci pour votre soutien à Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Modifications non enregistrées",
"lock.unsaved.empty": "Il n’y a plus de modifications non enregistrées",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Modifications non enregistrées par {email}",
"lock.unlock": "Déverrouiller",
"lock.unlock.submit": "Déverrouiller et écraser les modifications non enregistrées par {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugins",
"prev": "Précédent",
"preview": "Prévisualiser",
+
+ "publish": "Publish",
+ "published": "Publié",
+
"remove": "Supprimer",
"rename": "Renommer",
"renew": "Renouveler",
@@ -597,7 +629,9 @@
"role.nobody.title": "Personne",
"save": "Enregistrer",
+ "saved": "Sauvegardé",
"search": "Rechercher",
+ "searching": "Searching",
"search.min": "Saisissez {min} caractères pour rechercher",
"search.all": "Afficher tous les résultats de {count}",
"search.results.none": "Pas de résultats",
@@ -622,6 +656,7 @@
"system.info.copy": "Copier les informations",
"system.info.copied": "Informations système copiées",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "Le dossier content semble exposé",
"system.issues.eol.kirby": "La version de Kirby installée a atteint la fin de son cycle de vie et ne recevra plus de mises à jour de sécurité",
"system.issues.eol.plugin": "La version du plugin { plugin } installée a atteint la fin de son cycle de vie et ne recevra plus de mises à jour de sécurité",
@@ -646,6 +681,12 @@
"tel": "Téléphone",
"tel.placeholder": "+33123456789",
"template": "Modèle",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Titre",
"today": "Aujourd’hui",
@@ -715,10 +756,13 @@
"users": "Utilisateurs",
"version": "Version",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Version actuelle",
"version.latest": "Dernière version",
"versionInformation": "Informations de version",
+ "view": "View",
"view.account": "Votre compte",
"view.installation": "Installation",
"view.languages": "Langues",
diff --git a/public/kirby/i18n/translations/hu.json b/public/kirby/i18n/translations/hu.json
index 25c33b0..cbc0bb5 100644
--- a/public/kirby/i18n/translations/hu.json
+++ b/public/kirby/i18n/translations/hu.json
@@ -20,7 +20,9 @@
"coordinates": "Coordinates",
"copy": "Másol",
"copy.all": "Összes másolása",
- "copy.success": "{count} copied!",
+ "copy.success": "Copied",
+ "copy.success.multiple": "{count} copied!",
+ "copy.url": "Copy URL",
"create": "Létrehoz",
"custom": "Custom",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Invalid cache type \"{type}\"",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "A \"{name}\" email-beállítás nem található",
"error.field.converter.invalid": "Érvénytelen konverter: \"{converter}\"",
@@ -118,6 +126,7 @@
"error.file.name.missing": "A fálj neve nem lehet üres",
"error.file.notFound": "A \"{filename}\" fájl nem található",
"error.file.orientation": "A képnek \"{orientation}\" tájolásúnak kell lennie",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "Nem tölthetsz fel \"{type}\" típusú fájlokat",
"error.file.type.invalid": "Érvénytelen fájltípus: {type}",
"error.file.undefined": "A f\u00e1jl nem tal\u00e1lhat\u00f3",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "The page cannot be moved into itself",
"error.page.move.directory": "The page directory cannot be moved",
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "The moved page could not be found",
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Címsor",
"field.blocks.heading.text": "Szöveg",
"field.blocks.heading.placeholder": "Címsor …",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Alternatív szöveg",
"field.blocks.image.caption": "Képaláírás",
"field.blocks.image.crop": "Körülvágás",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Nincs fálj kiválasztva",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Change layout",
"field.layout.delete": "Elrendezés törlése",
@@ -345,12 +359,14 @@
"field.object.empty": "No information yet",
"field.pages.empty": "Nincs oldal kiválasztva",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "Biztos t\u00f6r\u00f6lni szeretn\u00e9d ezt a bejegyz\u00e9st?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.empty": "Nincs m\u00e9g bejegyz\u00e9s",
"field.users.empty": "Nincs felhasználó kiválasztva",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "No fields yet",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Elrejtés",
"hour": "Óra",
"hue": "Hue",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Ready to launch your site?",
"license.status.missing.info": "No valid license",
"license.status.missing.label": "Please activate your license",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Manage your licenses",
"license.purchased": "Purchased",
"license.success": "Köszönjük, hogy támogatod a Kirby-t",
@@ -455,7 +480,10 @@
"loading": "Betöltés",
"lock.unsaved": "Nem mentett változások",
- "lock.unsaved.empty": "Nincsenek nem mentett változások",
+ "lock.unsaved.empty": "There are no unsaved changes",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Unsaved changes by {email}",
"lock.unlock": "Kinyit",
"lock.unlock.submit": "Unlock and overwrite unsaved changes by {email}",
@@ -578,6 +606,10 @@
"plugins": "Pluginek",
"prev": "Előző",
"preview": "Előnézet",
+
+ "publish": "Publish",
+ "published": "Publikálva",
+
"remove": "Eltávolítás",
"rename": "Átnevezés",
"renew": "Renew",
@@ -597,7 +629,9 @@
"role.nobody.title": "Senki",
"save": "Ment\u00e9s",
+ "saved": "Saved",
"search": "Keresés",
+ "searching": "Searching",
"search.min": "A kereséshez írj be minimum {min} karaktert",
"search.all": "Show all {count} results",
"search.results.none": "Nincs találat",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "The content folder seems to be exposed",
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
@@ -646,6 +681,12 @@
"tel": "Phone",
"tel.placeholder": "+49123456789",
"template": "Sablon",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Cím",
"today": "Ma",
@@ -715,10 +756,13 @@
"users": "Felhasználók",
"version": "Kirby verzi\u00f3",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
+ "view": "View",
"view.account": "Fi\u00f3kod",
"view.installation": "Telep\u00edt\u00e9s",
"view.languages": "Nyelvek",
diff --git a/public/kirby/i18n/translations/id.json b/public/kirby/i18n/translations/id.json
index 2dd6ba7..f3676ea 100644
--- a/public/kirby/i18n/translations/id.json
+++ b/public/kirby/i18n/translations/id.json
@@ -21,6 +21,8 @@
"copy": "Salin",
"copy.all": "Salin semua",
"copy.success": "{count} disalin!",
+ "copy.success.multiple": "{count} copied!",
+ "copy.url": "Copy URL",
"create": "Buat",
"custom": "Kustom",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Tipe tembolok tidak valid \"{type}\"",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "Surel \"{name}\" tidak dapat ditemukan",
"error.field.converter.invalid": "Konverter \"{converter}\" tidak valid",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Nama berkas harus diisi",
"error.file.notFound": "Berkas \"{filename}\" tidak dapat ditemukan",
"error.file.orientation": "Orientasi gambar harus \"{orientation}\"",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "Anda tidak diizinkan mengunggah berkas dengan tipe {type}",
"error.file.type.invalid": "Tipe berkas tidak valid: {type}",
"error.file.undefined": "Berkas tidak dapat ditemukan",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "Halaman tidak dapat dipindahkan ke dirinya sendiri",
"error.page.move.directory": "Direktori halaman tidak dapat dipindahkan",
"error.page.move.duplicate": "Suatu sub halaman dengan akhiran URL \"{slug}\" sudah ada",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "Halaman yang dipindahkan tidak dapat ditemukan",
"error.page.move.permission": "Anda tidak diizinkan memindahkan \"{slug}\"",
"error.page.move.template": "Templat \"{template}\" tidak dapat diterima sebagai sub halaman dari \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Penajukan",
"field.blocks.heading.text": "Teks",
"field.blocks.heading.placeholder": "Penajukan …",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Teks alternatif",
"field.blocks.image.caption": "Keterangan",
"field.blocks.image.crop": "Pangkas",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Belum ada berkas yang dipilih",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Change layout",
"field.layout.delete": "Hapus tata letak",
@@ -345,12 +359,14 @@
"field.object.empty": "No information yet",
"field.pages.empty": "Belum ada halaman yang dipilih",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "Anda yakin menghapus baris ini?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.empty": "Belum ada entri",
"field.users.empty": "Belum ada pengguna yang dipilih",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "No fields yet",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Sembunyikan",
"hour": "Jam",
"hue": "Hue",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Ready to launch your site?",
"license.status.missing.info": "No valid license",
"license.status.missing.label": "Please activate your license",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Manage your licenses",
"license.purchased": "Purchased",
"license.success": "Terima kasih atas dukungan untuk Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Perubahan belum tersimpan",
"lock.unsaved.empty": "Tidak ada lagi perubahan belum tersimpan",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Unsaved changes by {email}",
"lock.unlock": "Buka kunci",
"lock.unlock.submit": "Unlock and overwrite unsaved changes by {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugins",
"prev": "Sebelumnya",
"preview": "Pratinjau",
+
+ "publish": "Publish",
+ "published": "Dipublikasikan",
+
"remove": "Hapus",
"rename": "Ubah nama",
"renew": "Renew",
@@ -597,7 +629,9 @@
"role.nobody.title": "Tidak siapapun",
"save": "Simpan",
+ "saved": "Saved",
"search": "Cari",
+ "searching": "Searching",
"search.min": "Masukkan {min} karakter untuk mencari",
"search.all": "Show all {count} results",
"search.results.none": "Tidak ada hasil",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "Folder konten nampaknya terekspos",
"system.issues.eol.kirby": "Versi instalasi Kirby Anda sudah mencapai akhir dan tidak akan lagi mendapat pembaruan keamanan",
"system.issues.eol.plugin": "Versi instalasi plugin { plugin } Anda sudah mencapai akhir dan tidak akan lagi mendapatkan pembaruan keamanan",
@@ -646,6 +681,12 @@
"tel": "Phone",
"tel.placeholder": "+49123456789",
"template": "Templat",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Judul",
"today": "Hari ini",
@@ -715,10 +756,13 @@
"users": "Pengguna",
"version": "Versi",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
+ "view": "View",
"view.account": "Akun Anda",
"view.installation": "Pemasangan",
"view.languages": "Bahasa",
diff --git a/public/kirby/i18n/translations/is_IS.json b/public/kirby/i18n/translations/is_IS.json
index 2a0def1..8c7dd9a 100644
--- a/public/kirby/i18n/translations/is_IS.json
+++ b/public/kirby/i18n/translations/is_IS.json
@@ -21,6 +21,8 @@
"copy": "Afrita",
"copy.all": "Afrita allt",
"copy.success": "Afritaði {count}!",
+ "copy.success.multiple": "Afritaði {count}!",
+ "copy.url": "Afrita slóð",
"create": "Stofna",
"custom": "Sérstillt",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Ógyld skyndiminnisgerð \"{type}\"",
+ "error.content.lock.delete": "Þessi útgáfa er læst og henni verður ekki eytt",
+ "error.content.lock.move": "Þessi útgáfa er læst og hún verður ekki færð",
+ "error.content.lock.publish": "Þessi útgáfa er núþegar útgefin",
+ "error.content.lock.replace": "Þessi útfáfa er læst og það verður ekki skipt út",
+ "error.content.lock.update": "Þessi útgáfa er læst og hún verður ekki uppfærð",
+
"error.email.preset.notFound": "Netfangstillingarnar: \"{name}\" fundust ekki",
"error.field.converter.invalid": "Ógildur umbreytari \"{converter}\"",
@@ -118,6 +126,7 @@
"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.sort.permission": "Þú mátt ekkert breyta röðuninni á \"{filename}\"",
"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",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "Það er ekki hægt að færa síðuna á sjálfa sig.",
"error.page.move.directory": "Ekki er reyndist unnt að færa möppu síðunnar.",
"error.page.move.duplicate": "Undirsíða með slóðinni og forskeytinu \"{slug}\" er núþegar til",
+ "error.page.move.noSections": "Síðan \"{parent}\" getur ekki átt undirsíður þar sem tilskylin svið til umsýslu á undirsíðum vantar",
"error.page.move.notFound": "Síðan sem færð var finnst því miður ekki",
"error.page.move.permission": "Þú mátt ekkert færa \"{slug}\"",
"error.page.move.template": "Sniðmátið \"{template}\" er ekki gillt sem undirsíða af \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Fyrirsögn",
"field.blocks.heading.text": "Texti/Prósi",
"field.blocks.heading.placeholder": "Fyrirsögn …",
+ "field.blocks.figure.back.plain": "Látlaust",
+ "field.blocks.figure.back.pattern.light": "Mynstur (ljóst)",
+ "field.blocks.figure.back.pattern.dark": "Mynstur (dökkt)",
"field.blocks.image.alt": "ALT texti",
"field.blocks.image.caption": "Myndartexti",
"field.blocks.image.crop": "Kroppa",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Engar skrár valdar ennþá",
+ "field.files.empty.single": "Engin skrá valin enn",
"field.layout.change": "Breyta uppsetningu ramma",
"field.layout.delete": "Eyða ramma",
@@ -345,12 +359,14 @@
"field.object.empty": "Engar upplýsingar enn",
"field.pages.empty": "Engar síður valdar ennþá",
+ "field.pages.empty.single": "Engin síða valin enn",
"field.structure.delete.confirm": "Viltu virkilega eyða þessari röð?",
"field.structure.delete.confirm.all": "Ætlar þú virkilega að eyða öllum færslum?",
"field.structure.empty": "Engar færslur enn",
"field.users.empty": "Engir notendur valdir enn",
+ "field.users.empty.single": "Enginn notandi valinn enn",
"fields.empty": "Hér eru engin svið enn",
@@ -369,6 +385,13 @@
"filter": "Sigta",
+ "form.discard": "Hunsa breytingar",
+ "form.discard.confirm": "Ætlarðu virkilega að hunsa alla breytingar?",
+ "form.locked": "Efnið er þér ekki aðgengilegt þar sem annar notandi er nú þegar að vinna í því",
+ "form.unsaved": "Þessar breytingar hafa ekki verið vistaðar",
+ "form.preview": "Skoða breytingar",
+ "form.preview.draft": "Skoða uppkast",
+
"hide": "Fela",
"hour": "Klukkustund",
"hue": "Blær",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Er allt tilbúið til að gefa vefinn út?",
"license.status.missing.info": "Ekkert gilt skráningarleyfi",
"license.status.missing.label": "Vinsamlegast virkjaðu leyfið þitt",
+ "license.status.unknown.info": "Staða leyfis fyrir hugbúnaðinn er óþekkt",
+ "license.status.unknown.label": "Óþekkt leyfi",
"license.manage": "Sýslaðu með leyfin þín",
"license.purchased": "Verslað",
"license.success": "Þakka þér fyrir að velja Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Óvistað breytingar",
"lock.unsaved.empty": "Það eru öngvar óvistaðar breytingar",
+ "lock.unsaved.files": "Óvistaðar skrár",
+ "lock.unsaved.pages": "Óvistaðar síður",
+ "lock.unsaved.users": "Óvistaðir notendareikningar",
"lock.isLocked": "Óvistaðar breytingar framkvæmdar af {email}",
"lock.unlock": "Aflæsa",
"lock.unlock.submit": "Aflæsa og yfirskrifa óvistaðar breytingar framkvæmdar af {email}",
@@ -578,6 +606,10 @@
"plugins": "Viðbætur",
"prev": "Fyrri",
"preview": "Forskoða",
+
+ "publish": "Útgefa",
+ "published": "Útgefnar og listaðar",
+
"remove": "Fjarlægja",
"rename": "Endurnefna",
"renew": "Endurnýja",
@@ -597,7 +629,9 @@
"role.nobody.title": "Enginn",
"save": "Vista",
+ "saved": "Vistað",
"search": "Leita",
+ "searching": "Leita ..",
"search.min": "Lágmark {min} stafir til að leita",
"search.all": "Sýna allar {count} niðurstöður.",
"search.results.none": "Engar niðurstöður",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Vefþjónn þinn styður ekkert PATCH beiðnir",
"system.issues.content": "Efnismappan virðist vera berskjölduð",
"system.issues.eol.kirby": "Uppsett Kirby eintak þitt hefur runnið sitt skeið á enda og mun ekki verða uppfært framar",
"system.issues.eol.plugin": "Uppsett eintak þitt af viðbótinni { plugin } hefur runnið sitt skeið á enda og mun ekki verða uppfærð framar",
@@ -646,6 +681,12 @@
"tel": "Sími",
"tel.placeholder": "+3548561234",
"template": "Sniðmát",
+
+ "theme": "Þema",
+ "theme.light": "Ljósin kveikt",
+ "theme.dark": "Ljósin slökkt",
+ "theme.automatic": "Nota kerfisstillingu",
+
"title": "Titill",
"today": "Núna",
@@ -715,10 +756,13 @@
"users": "Notendur",
"version": "Útgáfa",
+ "version.changes": "Breytt útgáfa",
+ "version.compare": "Bera saman útgáfur",
"version.current": "Núverandi útgáfa",
"version.latest": "Nýjasta útgáfa",
"versionInformation": "Útgáfuupplýsingar",
+ "view": "Sýn",
"view.account": "Þínar stillingar",
"view.installation": "Uppsetning",
"view.languages": "Tungumál",
diff --git a/public/kirby/i18n/translations/it.json b/public/kirby/i18n/translations/it.json
index 6263b62..a1b276a 100644
--- a/public/kirby/i18n/translations/it.json
+++ b/public/kirby/i18n/translations/it.json
@@ -21,6 +21,8 @@
"copy": "Copia",
"copy.all": "Copia tutto",
"copy.success": "{count} copied!",
+ "copy.success.multiple": "{count} copied!",
+ "copy.url": "Copy URL",
"create": "Crea",
"custom": "Custom",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Tipo di cache \"{type}\" non valido",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "Non è stato possibile trovare il preset email \"{name}\"",
"error.field.converter.invalid": "Convertitore \"{converter}\" non valido",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Il nome del file non può essere vuoto",
"error.file.notFound": "Il file non \u00e8 stato trovato",
"error.file.orientation": "L'imaggine dev'essere orientata in \"{orientation}\"",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "Non ti è permesso caricare file {type}",
"error.file.type.invalid": "Tipo di file non valido: {type}",
"error.file.undefined": "Il file non \u00e8 stato trovato",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "The page cannot be moved into itself",
"error.page.move.directory": "The page directory cannot be moved",
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "The moved page could not be found",
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Titolo",
"field.blocks.heading.text": "Testo",
"field.blocks.heading.placeholder": "Titolo …",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Testo alternativo",
"field.blocks.image.caption": "Didascalia",
"field.blocks.image.crop": "Ritaglio",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Nessun file selezionato",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Change layout",
"field.layout.delete": "Elimina layout",
@@ -345,12 +359,14 @@
"field.object.empty": "Ancora nessuna informazione",
"field.pages.empty": "Nessuna pagina selezionata",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "Vuoi veramente eliminare questo elemento?",
"field.structure.delete.confirm.all": "Vuoi davvero cancellare tutte le voci?",
"field.structure.empty": "Non ci sono ancora elementi.",
"field.users.empty": "Nessun utente selezionato",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "No fields yet",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Nascondi",
"hour": "Ora",
"hue": "Hue",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Pronto a lanciare il tuo sito?",
"license.status.missing.info": "Nessuna licenza valida",
"license.status.missing.label": "Attiva la tua licenza ora",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Gestisci le tue licenze",
"license.purchased": "Acquistata",
"license.success": "Ti ringraziamo per aver supportato Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Modifiche non salvate",
"lock.unsaved.empty": "Non ci sono altre modifiche non salvate",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Unsaved changes by {email}",
"lock.unlock": "Sblocca",
"lock.unlock.submit": "Unlock and overwrite unsaved changes by {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugins",
"prev": "Precedente",
"preview": "Anteprima",
+
+ "publish": "Publish",
+ "published": "Pubblicato",
+
"remove": "Rimuovi",
"rename": "Rinomina",
"renew": "Rinnova",
@@ -597,7 +629,9 @@
"role.nobody.title": "Nessuno",
"save": "Salva",
+ "saved": "Saved",
"search": "Cerca",
+ "searching": "Searching",
"search.min": "Inserisci almeno {min} caratteri per la ricerca",
"search.all": "Mostra tutti i {count} risultati",
"search.results.none": "Nessun risultato",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "La cartella content sembra essere esposta",
"system.issues.eol.kirby": "La versione di Kirby installata è giunta alla fine del suo ciclo di vita e non riceverà ulteriori aggiornamenti di sicurezza ",
"system.issues.eol.plugin": "La versione installata del plugin { plugin } è giunta alla fine del suo ciclo di vita e non riceverà ulteriori aggiornamenti di sicurezza",
@@ -646,6 +681,12 @@
"tel": "Phone",
"tel.placeholder": "+49123456789",
"template": "Template",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Titolo",
"today": "Oggi",
@@ -715,10 +756,13 @@
"users": "Utenti",
"version": "Versione di Kirby",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Versione corrente",
"version.latest": "Ultima versione",
"versionInformation": "Informazioni sulla versione",
+ "view": "View",
"view.account": "Il tuo account",
"view.installation": "Installazione",
"view.languages": "Lingue",
diff --git a/public/kirby/i18n/translations/ko.json b/public/kirby/i18n/translations/ko.json
index 4dae542..2fc704a 100644
--- a/public/kirby/i18n/translations/ko.json
+++ b/public/kirby/i18n/translations/ko.json
@@ -21,6 +21,8 @@
"copy": "복사",
"copy.all": "모두 복사",
"copy.success": "복사되었습니다. ({count})",
+ "copy.success.multiple": "복사되었습니다. ({count})",
+ "copy.url": "Copy URL",
"create": "등록",
"custom": "개인화",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "캐시 형식(({type})이 올바르지 않습니다.",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "기본 이메일 주소({name})가 없습니다.",
"error.field.converter.invalid": "컨버터({converter})가 올바르지 않습니다.",
@@ -118,6 +126,7 @@
"error.file.name.missing": "파일명을 입력하세요.",
"error.file.notFound": "파일({filename})이 없습니다.",
"error.file.orientation": "이미지의 비율({orientation})을 확인하세요.",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "이 형식({type})의 파일을 업로드할 권한이 없습니다.",
"error.file.type.invalid": "파일 형식({type})이 올바르지 않습니다.",
"error.file.undefined": "\ud30c\uc77c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "해당 페이지로 이동할 수 없습니다.",
"error.page.move.directory": "페이지 디렉토리는 이동할 수 없습니다.",
"error.page.move.duplicate": "고유 주소({slug})가 같은 서브 페이지가 있습니다.",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "이동된 페이지를 찾을 수 없습니다.",
"error.page.move.permission": "페이지({slug})를 이동할 권한이 없습니다.",
"error.page.move.template": "이 템플릿({template})은 이 페이지({parent})의 서브 페이지로 이동할 수 없습니다.",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "제목",
"field.blocks.heading.text": "제목",
"field.blocks.heading.placeholder": "제목",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "대체 텍스트",
"field.blocks.image.caption": "캡션",
"field.blocks.image.crop": "자르기",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "선택한 파일이 없습니다.",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "레이아웃 변경",
"field.layout.delete": "레이아웃 삭제",
@@ -345,12 +359,14 @@
"field.object.empty": "정보가 없습니다.",
"field.pages.empty": "선택한 페이지가 없습니다.",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "이 항목을 삭제할까요?",
"field.structure.delete.confirm.all": "모든 항목을 삭제할까요?",
"field.structure.empty": "항목이 없습니다.",
"field.users.empty": "선택한 사용자가 없습니다.",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "필드가 없습니다.",
@@ -369,6 +385,13 @@
"filter": "필터",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "숨기기",
"hour": "시",
"hue": "색상",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "사이트를 공개합니다.",
"license.status.missing.info": "유효한 라이선스가 없습니다.",
"license.status.missing.label": "라이선스를 활성화하세요.",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "라이선스 관리",
"license.purchased": "구입했습니다.",
"license.success": "Kirby와 함께해주셔서 감사합니다.",
@@ -456,6 +481,9 @@
"lock.unsaved": "저장되지 않은 항목이 있습니다.",
"lock.unsaved.empty": "모든 페이지를 저장했습니다.",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "사용자({email})의 변경 사항이 저장되지 않았습니다.",
"lock.unlock": "잠금 해제",
"lock.unlock.submit": "사용자({email})의 저장되지 않은 변경 사항을 해제하고 덮어쓰기",
@@ -578,6 +606,10 @@
"plugins": "플러그인",
"prev": "이전",
"preview": "미리 보기",
+
+ "publish": "Publish",
+ "published": "발행",
+
"remove": "삭제",
"rename": "이름 변경",
"renew": "갱신",
@@ -597,7 +629,9 @@
"role.nobody.title": "사용자가 없습니다.",
"save": "\uc800\uc7a5",
+ "saved": "Saved",
"search": "검색",
+ "searching": "Searching",
"search.min": "{min}자 이상 입력하세요.",
"search.all": "모든 결과({count}) 보기",
"search.results.none": "해당하는 결과가 없습니다.",
@@ -622,6 +656,7 @@
"system.info.copy": "정보 복사",
"system.info.copied": "시스템 정보가 복사되었습니다.",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "/content 폴더의 권한을 확인하세요.",
"system.issues.eol.kirby": "설치된 Kirby 버전이 만료되었습니다. 더 이상 보안 업데이트를 받을 수 없습니다.",
"system.issues.eol.plugin": "설치된 플러그인({plugin}의 지원이 종료되었습니다. 더 이상 보안 업데이트를 받을 수 없습니다.",
@@ -646,6 +681,12 @@
"tel": "Phone",
"tel.placeholder": "+49123456789",
"template": "\ud15c\ud50c\ub9bf",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "제목",
"today": "오늘",
@@ -715,10 +756,13 @@
"users": "사용자",
"version": "버전",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "현재 버전",
"version.latest": "최신 버전",
"versionInformation": "버전 정보",
+ "view": "View",
"view.account": "계정",
"view.installation": "\uc124\uce58",
"view.languages": "언어",
diff --git a/public/kirby/i18n/translations/lt.json b/public/kirby/i18n/translations/lt.json
index 6c14373..b7f9987 100644
--- a/public/kirby/i18n/translations/lt.json
+++ b/public/kirby/i18n/translations/lt.json
@@ -21,6 +21,8 @@
"copy": "Kopijuoti",
"copy.all": "Kopijuoti visus",
"copy.success": "{count} nukopijuota!",
+ "copy.success.multiple": "{count} nukopijuota!",
+ "copy.url": "Copy URL",
"create": "Sukurti",
"custom": "Custom",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Invalid cache type \"{type}\"",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "El. pašto paruoštukas \"{name}\" nerastas",
"error.field.converter.invalid": "Neteisingas konverteris \"{converter}\"",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Failo pavadinimas negali būti tuščias",
"error.file.notFound": "Failas \"{filename}\" nerastas",
"error.file.orientation": "Failo orientacija turi būti \"{orientation}\"",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "Jūs neturite teisės įkelti {type} tipo failų",
"error.file.type.invalid": "Neteisingas failo tipas: {type}",
"error.file.undefined": "Failas nerastas",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "Puslapio negalima perkelti į save patį",
"error.page.move.directory": "The page directory cannot be moved",
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "The moved page could not be found",
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Antraštė",
"field.blocks.heading.text": "Tekstas",
"field.blocks.heading.placeholder": "Antraštė ...",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Alternatyvus tekstas",
"field.blocks.image.caption": "Aprašymas",
"field.blocks.image.crop": "Kirpti",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Pasirinkti",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Change layout",
"field.layout.delete": "Pašalinti eilutę",
@@ -345,12 +359,14 @@
"field.object.empty": "Dar nėra informacijos",
"field.pages.empty": "Dar nėra puslapių",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "Ar tikrai norite pašalinti šią eilutę?",
"field.structure.delete.confirm.all": "Ar tikrai norite išrtinti visus įrašus?",
"field.structure.empty": "Dar nėra įrašų",
"field.users.empty": "Dar nėra vartotojų",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "No fields yet",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Paslėpti",
"hour": "Valanda",
"hue": "Hue",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Pasiruošę paleisti naują svetainę?",
"license.status.missing.info": "Nėra galiojančios licencijos",
"license.status.missing.label": "Prašome aktyvuoti jūsų licenciją",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Valdyti savo licencijas",
"license.purchased": "Nupirkta",
"license.success": "Ačiū, kad palaikote Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Neišsaugoti pakeitimai",
"lock.unsaved.empty": "Nebeliko neišsaugotų pakeitimų",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Unsaved changes by {email}",
"lock.unlock": "Atrakinti",
"lock.unlock.submit": "Unlock and overwrite unsaved changes by {email}",
@@ -578,6 +606,10 @@
"plugins": "Įskiepai",
"prev": "Ankstesnis",
"preview": "Peržiūra",
+
+ "publish": "Publish",
+ "published": "Paskelbti",
+
"remove": "Pašalinti",
"rename": "Pervadinti",
"renew": "Atnaujinti",
@@ -597,7 +629,9 @@
"role.nobody.title": "Niekas",
"save": "Išsaugoti",
+ "saved": "Saved",
"search": "Ieškoti",
+ "searching": "Searching",
"search.min": "Minimalus simbolių kiekis paieškai: {min}",
"search.all": "Parodyti visus {count} rezultatus",
"search.results.none": "Nėra rezultatų",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "The content folder seems to be exposed",
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
@@ -646,6 +681,12 @@
"tel": "Phone",
"tel.placeholder": "+49123456789",
"template": "Puslapio šablonas",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Pavadinimas",
"today": "Šiandien",
@@ -715,10 +756,13 @@
"users": "Vartotojai",
"version": "Versija",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Dabartinė versija",
"version.latest": "Naujausia versija",
"versionInformation": "Versijos informacija",
+ "view": "View",
"view.account": "Jūsų paskyra",
"view.installation": "Installation",
"view.languages": "Kalbos",
diff --git a/public/kirby/i18n/translations/nb.json b/public/kirby/i18n/translations/nb.json
index f479dad..ddb2d75 100644
--- a/public/kirby/i18n/translations/nb.json
+++ b/public/kirby/i18n/translations/nb.json
@@ -21,6 +21,8 @@
"copy": "Kopier",
"copy.all": "Kopier alle",
"copy.success": "{count} kopiert!",
+ "copy.success.multiple": "{count} copied!",
+ "copy.url": "Copy URL",
"create": "Opprett",
"custom": "Egendefinert",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Ugyldig type cache \"{type}\"",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "E-postinnstillingen \"{name}\" ble ikke funnet",
"error.field.converter.invalid": "Ugyldig omformer \"{converter}\"",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Filnavnet kan ikke være tomt",
"error.file.notFound": "Filen \"{filename}\" kan ikke bli funnet",
"error.file.orientation": "Bilderetningen må være \"{orientation}\"",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "Du har ikke lov til å laste opp filer av typen {type}",
"error.file.type.invalid": "Ugyldig filtype: {type}",
"error.file.undefined": "Finner ikke filen",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "Siden kan ikke flyttes inn i seg selv",
"error.page.move.directory": "Sidestrukturen kan ikke flyttes",
"error.page.move.duplicate": "En underside med url banen \"{slug}\" finnes allerede",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "Den flyttede siden kan ikke bli funnet",
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
"error.page.move.template": "\"{template}\" malen er ikke akseptert som underside av \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Overskrift",
"field.blocks.heading.text": "Tekst",
"field.blocks.heading.placeholder": "Overskrift…",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Alternativ tekst",
"field.blocks.image.caption": "Caption",
"field.blocks.image.crop": "Beskjær",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Ingen filer har blitt valgt",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Endre layout",
"field.layout.delete": "Slett layout",
@@ -345,12 +359,14 @@
"field.object.empty": "Ingen informasjon enda",
"field.pages.empty": "Ingen side har blitt valgt",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "\u00d8nsker du virkelig \u00e5 slette denne oppf\u00f8ringen?",
"field.structure.delete.confirm.all": "Vil du virkelig slette alle oppføringer?",
"field.structure.empty": "Ingen oppf\u00f8ringer enda",
"field.users.empty": "Ingen bruker har blitt valgt",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "Ingen felt enda",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Skjul",
"hour": "Tid",
"hue": "Hue",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Klar til å lansere din nettside?",
"license.status.missing.info": "Ingen gyldig lisens",
"license.status.missing.label": "Vennligst skriv inn din lisenskode",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Håndter dine lisenser",
"license.purchased": "Kjøpt",
"license.success": "Takk for at du støtter Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Ulagrede endringer",
"lock.unsaved.empty": "Det er ingen flere ulagrede endringer",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Ulagrede endringer av {email}",
"lock.unlock": "Lås opp",
"lock.unlock.submit": "Lås opp og overskriv ulagrede endringer fra {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugins",
"prev": "Forrige",
"preview": "Forhåndsvisning",
+
+ "publish": "Publish",
+ "published": "Publisert",
+
"remove": "Fjern",
"rename": "Endre navn",
"renew": "Fornye",
@@ -597,7 +629,9 @@
"role.nobody.title": "Ingen",
"save": "Lagre",
+ "saved": "Saved",
"search": "Søk",
+ "searching": "Searching",
"search.min": "Skriv inn {min} tegn for å søke",
"search.all": "Vis alle {count} resultat",
"search.results.none": "Ingen resultater",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "content-mappen ser ut til å være eksponert",
"system.issues.eol.kirby": "Din installerte Kirby versjon har nådd sitt end-of-life, og vil ikke lenger motta sikkerhetsoppdateringer",
"system.issues.eol.plugin": "Din installerte plugin { plugin } har nådd sitt end-of-life og vil ikke lenger motta sikkerhetsoppdateringer",
@@ -646,6 +681,12 @@
"tel": "Telefon",
"tel.placeholder": "+49123456789",
"template": "Mal",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Tittel",
"today": "I dag",
@@ -715,10 +756,13 @@
"users": "Brukere",
"version": "Kirby versjon",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Nåværende versjon",
"version.latest": "Siste versjon",
"versionInformation": "Versjonsinformasjon",
+ "view": "View",
"view.account": "Din konto",
"view.installation": "Installasjon",
"view.languages": "Språk",
diff --git a/public/kirby/i18n/translations/nl.json b/public/kirby/i18n/translations/nl.json
index 37fde74..0361968 100644
--- a/public/kirby/i18n/translations/nl.json
+++ b/public/kirby/i18n/translations/nl.json
@@ -21,6 +21,8 @@
"copy": "Kopiëren",
"copy.all": "Kopieer alles",
"copy.success": "{count} gekopieerd!",
+ "copy.success.multiple": "{count} gekopieerd!",
+ "copy.url": "Copy URL",
"create": "Aanmaken",
"custom": "Custom",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Ongeldig cache type \"{type}\"",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "De e-mailvoorinstelling \"{name}\" kan niet worden gevonden",
"error.field.converter.invalid": "Ongeldige converter \"{converter}\"",
@@ -118,6 +126,7 @@
"error.file.name.missing": "De bestandsnaam mag niet leeg zijn",
"error.file.notFound": "Het bestand kan niet worden gevonden",
"error.file.orientation": "De oriëntatie van de afbeelding moet \"{orientation}\" zijn",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "Je hebt geen rechten om {type} bestanden up te loaden",
"error.file.type.invalid": "Ongeldig bestands type: {type}",
"error.file.undefined": "Het bestand kan niet worden gevonden",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "De pagina kan niet in zichzelf worden verplaatst",
"error.page.move.directory": "De page map kan niet worden verplaatst",
"error.page.move.duplicate": "Er bestaat al een subpagina met de URL-appendix \"{slug}\"",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "De verplaatste pagina kan niet gevonden worden",
"error.page.move.permission": "Je hebt geen rechten om \"{slug}\" te verplaatsen",
"error.page.move.template": "De \"{template}\" template is niet toegestaan als een subpagina van \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Koptekst",
"field.blocks.heading.text": "Tekst",
"field.blocks.heading.placeholder": "Koptekst ...",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Alternatieve tekst",
"field.blocks.image.caption": "Beschrijving",
"field.blocks.image.crop": "Uitsnede",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Nog geen bestanden geselecteerd",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Verander layout",
"field.layout.delete": "Verwijder indeling",
@@ -345,12 +359,14 @@
"field.object.empty": "Nog geen informatie",
"field.pages.empty": "Nog geen pagina's geselecteerd",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "Wil je deze rij verwijderen?",
"field.structure.delete.confirm.all": "Weet je zeker dat je alle items wil verwijderen?",
"field.structure.empty": "Nog geen items",
"field.users.empty": "Nog geen gebruikers geselecteerd",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "Nog geen velden",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Verberg",
"hour": "Uur",
"hue": "Hue",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Klaar om je website te lanceren?",
"license.status.missing.info": "Geen geldige licentie",
"license.status.missing.label": "Activeer je licentie",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Beheer je licenties",
"license.purchased": "Gekocht",
"license.success": "Bedankt dat je Kirby ondersteunt",
@@ -456,6 +481,9 @@
"lock.unsaved": "Niet opgeslagen wijzigingen",
"lock.unsaved.empty": "Er zijn geen niet opgeslagen wijzigingen meer",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Niet opgeslagen wijzigingen door {email}",
"lock.unlock": "Ontgrendelen",
"lock.unlock.submit": "Niet-opgeslagen wijzigingen ontgrendelen en overschrijven met {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugins",
"prev": "Vorige",
"preview": "Voorbeeld",
+
+ "publish": "Publish",
+ "published": "Gepubliceerd",
+
"remove": "Verwijder",
"rename": "Hernoem",
"renew": "Verlengen",
@@ -597,7 +629,9 @@
"role.nobody.title": "Niemand",
"save": "Opslaan",
+ "saved": "Saved",
"search": "Zoeken",
+ "searching": "Searching",
"search.min": "Voer {min} tekens in om te zoeken",
"search.all": "Laat alle {count} resultaten zien",
"search.results.none": "Geen resultaten",
@@ -622,6 +656,7 @@
"system.info.copy": "Kopieer informatie",
"system.info.copied": "Systeem informatie gekopieerd",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "De content map lijkt zichtbaar te zijn",
"system.issues.eol.kirby": "De geïnstalleerde Kirby versie is niet meer actueel en zal geen verdere beveiligingsupdates meer ontvangen.",
"system.issues.eol.plugin": "De geïnstalleerde versie van plugin { plugin } is niet meer actueel en zal geen verdere beveiligingsupdates meer ontvangen.",
@@ -646,6 +681,12 @@
"tel": "Telefoon",
"tel.placeholder": "+49123456789",
"template": "Template",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Titel",
"today": "Vandaag",
@@ -715,10 +756,13 @@
"users": "Gebruikers",
"version": "Kirby-versie",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Huidige versie",
"version.latest": "Laatste versie",
"versionInformation": "Versie informatie",
+ "view": "View",
"view.account": "Jouw account",
"view.installation": "Installatie",
"view.languages": "Talen",
diff --git a/public/kirby/i18n/translations/pl.json b/public/kirby/i18n/translations/pl.json
index 26269a4..c4c8b9a 100644
--- a/public/kirby/i18n/translations/pl.json
+++ b/public/kirby/i18n/translations/pl.json
@@ -21,6 +21,8 @@
"copy": "Kopiuj",
"copy.all": "Skopiuj wszystko",
"copy.success": "{count} skopiowanych!",
+ "copy.success.multiple": "{count} skopiowanych!",
+ "copy.url": "Copy URL",
"create": "Utwórz",
"custom": "Niestandardowe",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Nieprawidłowy typ pamięci podręcznej „{type}”",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "Nie udało się załadować wzorca wiadomości e-mail \"{name}\"",
"error.field.converter.invalid": "Nieprawidłowy konwerter \"{converter}\"",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Nazwa pliku nie może być pusta",
"error.file.notFound": "Nie można znaleźć pliku \"{filename}\"",
"error.file.orientation": "Orientacja obrazka musi być \"{orientation}\"",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "Nie możesz przesyłać plików {type}",
"error.file.type.invalid": "Nieprawidłowy typ pliku: {type}",
"error.file.undefined": "Nie można znaleźć pliku",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "Strony nie można przenieść do siebie samej",
"error.page.move.directory": "Nie można przenieść katalogu strony",
"error.page.move.duplicate": "Istnieje już podstrona z końcówką URL \"{slug}\"",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "Przeniesiona strona nie została odnaleziona",
"error.page.move.permission": "Nie masz uprawnień, by przenieść \"{slug}\"",
"error.page.move.template": "Szablon \"{template}\" nie jest akceptowany jako podstrona \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Nagłówek",
"field.blocks.heading.text": "Tekst",
"field.blocks.heading.placeholder": "Nagłówek …",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Tekst alternatywny",
"field.blocks.image.caption": "Podpis",
"field.blocks.image.crop": "Przytnij",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Nie wybrano jeszcze żadnych plików",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Zmień układ",
"field.layout.delete": "Usuń układ",
@@ -345,12 +359,14 @@
"field.object.empty": "Brak informacji",
"field.pages.empty": "Nie wybrano jeszcze żadnych stron",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "Czy na pewno chcesz usunąć ten wiersz?",
"field.structure.delete.confirm.all": "Czy na pewno chcesz usunąć wszystkie wpisy?",
"field.structure.empty": "Nie ma jeszcze \u017cadnych wpis\u00f3w.",
"field.users.empty": "Nie wybrano jeszcze żadnych użytkowników",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "Nie ma jeszcze żadnych pól",
@@ -369,6 +385,13 @@
"filter": "Filtr",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Ukryj",
"hour": "Godzina",
"hue": "Odcień",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Gotowy/-a do uruchomienia strony?",
"license.status.missing.info": "Brak ważnej licencji",
"license.status.missing.label": "Aktywuj swoją licencję",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Zarządzaj swoimi licencjami",
"license.purchased": "Zakupiona",
"license.success": "Dziękujemy za wspieranie Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Niezapisane zmiany",
"lock.unsaved.empty": "Nie ma już żadnych niezapisanych zmian",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Niezapisane zmiany autorstwa {email}",
"lock.unlock": "Odblokuj",
"lock.unlock.submit": "Odblokuj i nadpisz niezapisane zmiany autorstwa {email}",
@@ -578,6 +606,10 @@
"plugins": "Wtyczki",
"prev": "Poprzednie",
"preview": "Podgląd",
+
+ "publish": "Publish",
+ "published": "Opublikowane",
+
"remove": "Usuń",
"rename": "Zmień nazwę",
"renew": "Odnów",
@@ -597,7 +629,9 @@
"role.nobody.title": "Nikt",
"save": "Zapisz",
+ "saved": "Saved",
"search": "Szukaj",
+ "searching": "Searching",
"search.min": "Aby wyszukać, wprowadź co najmniej {min} znaków",
"search.all": "Pokaż wszystkie {count} wyniki/-ów",
"search.results.none": "Brak wyników",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "Zdaje się, że folder „content” jest wystawiony na publiczny dostęp",
"system.issues.eol.kirby": "Twoja zainstalowana wersja Kirby osiągnęła koniec okresu wsparcia i nie będzie otrzymywać dalszych aktualizacji zabezpieczeń",
"system.issues.eol.plugin": "Twoja zainstalowana wersja wtyczki { plugin } osiągnęła koniec okresu wsparcia i nie będzie otrzymywać dalszych aktualizacji zabezpieczeń",
@@ -646,6 +681,12 @@
"tel": "Telefon",
"tel.placeholder": "+48123456789",
"template": "Szablon",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Tytuł",
"today": "Dzisiaj",
@@ -715,10 +756,13 @@
"users": "Użytkownicy",
"version": "Wersja",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Obecna wersja",
"version.latest": "Ostatnia wersja",
"versionInformation": "Informacje o wersji",
+ "view": "View",
"view.account": "Twoje konto",
"view.installation": "Instalacja",
"view.languages": "Języki",
diff --git a/public/kirby/i18n/translations/pt_BR.json b/public/kirby/i18n/translations/pt_BR.json
index 6c018ca..7961f36 100644
--- a/public/kirby/i18n/translations/pt_BR.json
+++ b/public/kirby/i18n/translations/pt_BR.json
@@ -21,6 +21,8 @@
"copy": "Copiar",
"copy.all": "Copiar todos",
"copy.success": "{count} copiados!",
+ "copy.success.multiple": "{count} copiados!",
+ "copy.url": "Copiar URL",
"create": "Criar",
"custom": "Personalizado",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Tipo de cache \"{type}\" inválido",
+ "error.content.lock.delete": "A versão está bloqueada e não pode ser eliminada",
+ "error.content.lock.move": "A versão está bloqueada e não pode ser movida",
+ "error.content.lock.publish": "Esta versão já se encontra publicada",
+ "error.content.lock.replace": "A versão está bloqueada e não pode ser substituída",
+ "error.content.lock.update": "A versão está bloqueada e não pode ser atualizada",
+
"error.email.preset.notFound": "Pré-configuração de email \"{name}\" não foi encontrada",
"error.field.converter.invalid": "Conversor \"{converter}\" inválido",
@@ -118,6 +126,7 @@
"error.file.name.missing": "O nome do arquivo não pode ficar em branco",
"error.file.notFound": "Arquivo \"{filename}\" não encontrado",
"error.file.orientation": "A orientação da imagem deve ser “{orientation}”",
+ "error.file.sort.permission": "Não tem permissão para alterar a ordem de \"{filename}\"",
"error.file.type.forbidden": "Você não tem permissão para enviar arquivos {type}",
"error.file.type.invalid": "Tipo inválido de arquivo: {type}",
"error.file.undefined": "Arquivo n\u00e3o encontrado",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "A página não pode ser movida para dentro dela mesma",
"error.page.move.directory": "A pasta da página não pode ser movida",
"error.page.move.duplicate": "Uma subpágina com o segmento de URL \"{slug}\" já existe",
+ "error.page.move.noSections": "A página \"{parent}\" não pode ser pai de nenhuma página porque não tem secções de páginas na sua blueprint",
"error.page.move.notFound": "A página movida não foi encontrada",
"error.page.move.permission": "Não tem permissão para mover \"{slug}\"",
"error.page.move.template": "O template \"{template}\" não é aceite como subpágina de \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Título ",
"field.blocks.heading.text": "Texto",
"field.blocks.heading.placeholder": "Título …",
+ "field.blocks.figure.back.plain": "Simples",
+ "field.blocks.figure.back.pattern.light": "Padrão (claro)",
+ "field.blocks.figure.back.pattern.dark": "Padrão (escuro)",
"field.blocks.image.alt": "Texto alternativo",
"field.blocks.image.caption": "Legenda",
"field.blocks.image.crop": "Cortar",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Nenhum arquivo selecionado",
+ "field.files.empty.single": "Nenhum ficheiro selecionado ainda",
"field.layout.change": "Alterar layout",
"field.layout.delete": "Deletar layout",
@@ -345,12 +359,14 @@
"field.object.empty": "Nenhuma informação ainda",
"field.pages.empty": "Nenhuma página selecionada",
+ "field.pages.empty.single": "Nenhuma página selecionada ainda",
"field.structure.delete.confirm": "Deseja realmente deletar esta linha?",
"field.structure.delete.confirm.all": "Tem a certeza que pretende eliminar todos os registos?",
"field.structure.empty": "Nenhum registro",
"field.users.empty": "Nenhum usuário selecionado",
+ "field.users.empty.single": "Nenhum utilizador selecionado ainda",
"fields.empty": "Nenhum campo ainda",
@@ -369,6 +385,13 @@
"filter": "Filtro",
+ "form.discard": "Reverter alterações",
+ "form.discard.confirm": "Tem a certeza que pretende reverter todas as suas alterações?",
+ "form.locked": "Este conteúdo está desativado para si porque encontra-se a ser editado por outro utilizador",
+ "form.unsaved": "As alterações atuais ainda não foram guardadas",
+ "form.preview": "Pré-visualizar alterações",
+ "form.preview.draft": "Pré-visualizar rascunho",
+
"hide": "Ocultar",
"hour": "Hora",
"hue": "Tonalidade",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Pronto para lançar o seu site?",
"license.status.missing.info": "Nenhuma licença válida",
"license.status.missing.label": "Por favor, ative a sua licença",
+ "license.status.unknown.info": "O estado da licença é desconhecido",
+ "license.status.unknown.label": "Licença desconhecida",
"license.manage": "Gerir as suas licenças",
"license.purchased": "Compradas",
"license.success": "Obrigado por apoiar o Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Mudanças não salvas",
"lock.unsaved.empty": "Não há mais mudanças não salvas",
+ "lock.unsaved.files": "Ficheiros não guardados",
+ "lock.unsaved.pages": "Páginas não guardadas",
+ "lock.unsaved.users": "Contas não guardadas",
"lock.isLocked": "Alterações não guardadas de {email}",
"lock.unlock": "Destrancar",
"lock.unlock.submit": "Desbloqueie e substitua alterações não guardadas de {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugins",
"prev": "Anterior",
"preview": "Visualizar",
+
+ "publish": "Publicar",
+ "published": "Publicadas",
+
"remove": "Remover",
"rename": "Renomear",
"renew": "Renovar",
@@ -597,7 +629,9 @@
"role.nobody.title": "Ninguém",
"save": "Salvar",
+ "saved": "Guardado",
"search": "Buscar",
+ "searching": "À procura",
"search.min": "Digite {min} caracteres para fazer uma busca",
"search.all": "Mostrar todos os {count} resultados",
"search.results.none": "Nenhum resultado",
@@ -622,6 +656,7 @@
"system.info.copy": "Copiar informação",
"system.info.copied": "Informação de sistema copiada",
+ "system.issues.api.methods": "O servidor não suporta pedidos PATCH",
"system.issues.content": "A pasta \"content\" parece não estar protegida",
"system.issues.eol.kirby": "A versão instalada do Kirby chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
"system.issues.eol.plugin": "A versão instalada do plugin {plugin} chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
@@ -646,6 +681,12 @@
"tel": "Telefone",
"tel.placeholder": "+351 123456789",
"template": "Tema",
+
+ "theme": "Tema",
+ "theme.light": "Luzes ligadas",
+ "theme.dark": "Luzes desligadas",
+ "theme.automatic": "Ajustar ao tema do sistema",
+
"title": "Título",
"today": "Hoje",
@@ -715,10 +756,13 @@
"users": "Usuários",
"version": "Vers\u00e3o do Kirby",
+ "version.changes": "Versão alterada",
+ "version.compare": "Comparar versões",
"version.current": "Versão atual",
"version.latest": "Versão mais recente",
"versionInformation": "Informação da versão",
+ "view": "Visualizar",
"view.account": "Sua conta",
"view.installation": "Instala\u00e7\u00e3o",
"view.languages": "Idiomas",
diff --git a/public/kirby/i18n/translations/pt_PT.json b/public/kirby/i18n/translations/pt_PT.json
index 3da7c47..f225c57 100644
--- a/public/kirby/i18n/translations/pt_PT.json
+++ b/public/kirby/i18n/translations/pt_PT.json
@@ -21,6 +21,8 @@
"copy": "Copiar",
"copy.all": "Copiar todos",
"copy.success": "{count} copiados!",
+ "copy.success.multiple": "{count} copiados!",
+ "copy.url": "Copiar URL",
"create": "Criar",
"custom": "Personalizado",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Tipo de cache \"{type}\" inválido",
+ "error.content.lock.delete": "A versão está bloqueada e não pode ser eliminada",
+ "error.content.lock.move": "A versão está bloqueada e não pode ser movida",
+ "error.content.lock.publish": "Esta versão já se encontra publicada",
+ "error.content.lock.replace": "A versão está bloqueada e não pode ser substituída",
+ "error.content.lock.update": "A versão está bloqueada e não pode ser atualizada",
+
"error.email.preset.notFound": "A predefinição de email \"{name}\" não foi encontrada",
"error.field.converter.invalid": "Conversor \"{converter}\" inválido",
@@ -118,6 +126,7 @@
"error.file.name.missing": "O nome do ficheiro não pode ficar em branco",
"error.file.notFound": "Não foi possível encontrar o ficheiro \"{filename}\"",
"error.file.orientation": "A orientação da imagem deve ser \"{orientation}\"",
+ "error.file.sort.permission": "Não tem permissão para alterar a ordem de \"{filename}\"",
"error.file.type.forbidden": "Não tem permissões para enviar ficheiros {type}",
"error.file.type.invalid": "Tipo de ficheiro inválido: {type}",
"error.file.undefined": "Não foi possível encontrar o ficheiro",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "A página não pode ser movida para dentro dela mesma",
"error.page.move.directory": "A pasta da página não pode ser movida",
"error.page.move.duplicate": "Já existe uma subpágina com o URL \"{slug}\"",
+ "error.page.move.noSections": "A página \"{parent}\" não pode ser pai de nenhuma página porque não tem secções de páginas na sua blueprint",
"error.page.move.notFound": "A página movida não foi encontrada",
"error.page.move.permission": "Não tem permissões para mover \"{slug}\"",
"error.page.move.template": "O template \"{template}\" não é aceite como subpágina de \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Título ",
"field.blocks.heading.text": "Texto",
"field.blocks.heading.placeholder": "Título …",
+ "field.blocks.figure.back.plain": "Simples",
+ "field.blocks.figure.back.pattern.light": "Padrão (claro)",
+ "field.blocks.figure.back.pattern.dark": "Padrão (escuro)",
"field.blocks.image.alt": "Texto alternativo",
"field.blocks.image.caption": "Legenda",
"field.blocks.image.crop": "Cortar",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Nenhum ficheiro selecionado ainda",
+ "field.files.empty.single": "Nenhum ficheiro selecionado ainda",
"field.layout.change": "Alterar layout",
"field.layout.delete": "Eliminar layout",
@@ -345,12 +359,14 @@
"field.object.empty": "Nenhuma informação ainda",
"field.pages.empty": "Nenhuma página selecionada ainda",
+ "field.pages.empty.single": "Nenhuma página selecionada ainda",
"field.structure.delete.confirm": "Tem a certeza que pretende eliminar esta linha?",
"field.structure.delete.confirm.all": "Tem a certeza que pretende eliminar todos os registos?",
"field.structure.empty": "Nenhum registo ainda",
"field.users.empty": "Nenhum utilizador selecionado ainda",
+ "field.users.empty.single": "Nenhum utilizador selecionado ainda",
"fields.empty": "Nenhum campo ainda",
@@ -369,6 +385,13 @@
"filter": "Filtro",
+ "form.discard": "Reverter alterações",
+ "form.discard.confirm": "Tem a certeza que pretende reverter todas as suas alterações?",
+ "form.locked": "Este conteúdo está desativado para si porque encontra-se a ser editado por outro utilizador",
+ "form.unsaved": "As alterações atuais ainda não foram guardadas",
+ "form.preview": "Pré-visualizar alterações",
+ "form.preview.draft": "Pré-visualizar rascunho",
+
"hide": "Ocultar",
"hour": "Hora",
"hue": "Tonalidade",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Pronto para lançar o seu site?",
"license.status.missing.info": "Sem licença válida",
"license.status.missing.label": "Por favor, ative a sua licença",
+ "license.status.unknown.info": "O estado da licença é desconhecido",
+ "license.status.unknown.label": "Licença desconhecida",
"license.manage": "Gerir as suas licenças",
"license.purchased": "Comprada",
"license.success": "Obrigado por apoiar o Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Alterações não guardadas",
"lock.unsaved.empty": "Não existem mais alterações não guardadas",
+ "lock.unsaved.files": "Ficheiros não guardados",
+ "lock.unsaved.pages": "Páginas não guardadas",
+ "lock.unsaved.users": "Contas não guardadas",
"lock.isLocked": "Alterações não guardadas de {email}",
"lock.unlock": "Desbloquear",
"lock.unlock.submit": "Desbloqueie e substitua alterações não guardadas de {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugins",
"prev": "Anterior",
"preview": "Pré-visualizar",
+
+ "publish": "Publicar",
+ "published": "Publicadas",
+
"remove": "Remover",
"rename": "Alterar nome",
"renew": "Renovar",
@@ -597,7 +629,9 @@
"role.nobody.title": "Ninguém",
"save": "Guardar",
+ "saved": "Guardado",
"search": "Pesquisar",
+ "searching": "À procura",
"search.min": "Insira {min} caracteres para pesquisar",
"search.all": "Mostrar todos os {count} resultados",
"search.results.none": "Sem resultados",
@@ -622,6 +656,7 @@
"system.info.copy": "Copiar informação",
"system.info.copied": "Informação de sistema copiada",
+ "system.issues.api.methods": "O servidor não suporta pedidos PATCH",
"system.issues.content": "A pasta content parece não estar protegida",
"system.issues.eol.kirby": "A versão instalada do Kirby chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
"system.issues.eol.plugin": "A versão instalada do plugin { plugin } chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
@@ -646,6 +681,12 @@
"tel": "Telefone",
"tel.placeholder": "+351912345678",
"template": "Template",
+
+ "theme": "Tema",
+ "theme.light": "Luzes ligadas",
+ "theme.dark": "Luzes desligadas",
+ "theme.automatic": "Ajustar ao tema do sistema",
+
"title": "Título",
"today": "Hoje",
@@ -715,10 +756,13 @@
"users": "Utilizadores",
"version": "Versão",
+ "version.changes": "Versão alterada",
+ "version.compare": "Comparar versões",
"version.current": "Versão atual",
"version.latest": "Versão mais recente",
"versionInformation": "Informação da versão",
+ "view": "Visualizar",
"view.account": "A sua conta",
"view.installation": "Instala\u00e7\u00e3o",
"view.languages": "Idiomas",
diff --git a/public/kirby/i18n/translations/ro.json b/public/kirby/i18n/translations/ro.json
index 17a022d..cc40a26 100644
--- a/public/kirby/i18n/translations/ro.json
+++ b/public/kirby/i18n/translations/ro.json
@@ -21,6 +21,8 @@
"copy": "Copiază",
"copy.all": "Copiază toate",
"copy.success": "Copiat {count}!",
+ "copy.success.multiple": "Copiat {count}!",
+ "copy.url": "Copy URL",
"create": "Creează",
"custom": "Personalizat",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Tipul de cache \"{type}\" este nevalid",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "Preset-ul de e-mail \"{name}\" nu a fost găsit",
"error.field.converter.invalid": "Convertorul \"{converter}\" nu este valid",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Numele fișierului nu poate fi gol",
"error.file.notFound": "Fișierul \"{filename}\" nu a fost găsit",
"error.file.orientation": "Orientarea imaginii trebuie să fie \"{orientation}\"",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "Nu ai voie să încarci fișiere {type}",
"error.file.type.invalid": "Tip nevalid de fișier: {type}",
"error.file.undefined": "Fișierul nu a fost găsit",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "Pagina nu poate fi mutată în ea însăși",
"error.page.move.directory": "Directorul de pagini nu poate fi mutat",
"error.page.move.duplicate": "Există deja o sub-pagină cu apendicele URL \"{slug}\"",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "Pagina mutată nu a fost găsită",
"error.page.move.permission": "Nu ai voie să muți \"{slug}\"",
"error.page.move.template": "Șablonul \"{template}\" nu este acceptat ca sub-pagină a \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Subtitlu",
"field.blocks.heading.text": "Text",
"field.blocks.heading.placeholder": "Subtitlu …",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Text alternativ",
"field.blocks.image.caption": "Etichetă",
"field.blocks.image.crop": "Decupaj",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Niciun fișier selectat deocamdată",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Schimbă aranjament",
"field.layout.delete": "Șterge aranjamentul",
@@ -345,12 +359,14 @@
"field.object.empty": "Nicio informație deocamdată",
"field.pages.empty": "Nicio pagină aleasă deocamdată",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "Chiar vrei să ștergi acest rând?",
"field.structure.delete.confirm.all": "Chiar vrei să ștergi toate înregistrările?",
"field.structure.empty": "Nicio înregistrare deocamdată",
"field.users.empty": "Niciun utilizator ales deocamdată",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "Niciun câmp deocamdată",
@@ -369,6 +385,13 @@
"filter": "Filtru",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Ascunde",
"hour": "Ora",
"hue": "Nuanță",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Sunteți pregătit să lansați site-ul?",
"license.status.missing.info": "Licență nevalidă",
"license.status.missing.label": "Vă rugăm să activați licența",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Gestionează-ți licențele",
"license.purchased": "Achiziționat",
"license.success": "Mulțumim că susții Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Schimbări nesalvate",
"lock.unsaved.empty": "Nu mai există nicio schimbare nesalvată",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Schimbări nesalvate de {email}",
"lock.unlock": "Deblochează",
"lock.unlock.submit": "Deblochează și suprascrie schimbările nesalvate de {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugin-uri",
"prev": "Precedenta",
"preview": "Previzualizează",
+
+ "publish": "Publish",
+ "published": "Publicate",
+
"remove": "Înlătură",
"rename": "Redenumește",
"renew": "Reînnoiți",
@@ -597,7 +629,9 @@
"role.nobody.title": "Nimeni",
"save": "Salveaz\u0103",
+ "saved": "Saved",
"search": "Caută",
+ "searching": "Searching",
"search.min": "Introdu {min} caractere pentru a căuta",
"search.all": "Afișați toate {count} rezultatele",
"search.results.none": "Niciun rezultat",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "Directorul de conținut pare să fie expus",
"system.issues.eol.kirby": "Versiunea instalată de Kirby a ajuns la sfârșitul vieții utile și nu va mai primi actualizări de securitate.",
"system.issues.eol.plugin": "Versiunea instalată a plugin-ului { plugin } a ajuns la sfârșitul vieții utile și nu va mai primi actualizări de securitate.",
@@ -646,6 +681,12 @@
"tel": "Telefon",
"tel.placeholder": "+40123456789",
"template": "Șablon",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Titlu",
"today": "Astăzi",
@@ -715,10 +756,13 @@
"users": "Utilizatori",
"version": "Versiune",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Versiunea curentă",
"version.latest": "Ultima versiune",
"versionInformation": "Informații despre versiune",
+ "view": "View",
"view.account": "Contul t\u0103u",
"view.installation": "Instalare",
"view.languages": "Limbi",
diff --git a/public/kirby/i18n/translations/ru.json b/public/kirby/i18n/translations/ru.json
index 8ce0410..aada80d 100644
--- a/public/kirby/i18n/translations/ru.json
+++ b/public/kirby/i18n/translations/ru.json
@@ -21,6 +21,8 @@
"copy": "Скопировать",
"copy.all": "Копировать все",
"copy.success": "{count} скопировано",
+ "copy.success.multiple": "{count} скопировано",
+ "copy.url": "Скопировать ссылку",
"create": "Создать",
"custom": "Другое",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Неверный тип кэша: \"{type}\"",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "Email-шаблон \"{name}\" не найден",
"error.field.converter.invalid": "Неверный конвертер \"{converter}\"",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Название файла не может быть пустым",
"error.file.notFound": "\u0424\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d",
"error.file.orientation": "Ориентация изображения должна быть \"{orientation}\"",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "У вас нет права загружать файлы {type}",
"error.file.type.invalid": "Неверный тип файла: {type}",
"error.file.undefined": "\u0424\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "Невозможно переместить страницу саму в себя",
"error.page.move.directory": "Невозможно перенести каталог страницы",
"error.page.move.duplicate": "Подстраница с URL \"{slug}\" уже существует",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "Перемещенная страница не найдена",
"error.page.move.permission": "У вас нет права переместить \"{slug}\"",
"error.page.move.template": "Шаблон \"{template}\" не разрешен для подстраниц \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Заголовок",
"field.blocks.heading.text": "Текст",
"field.blocks.heading.placeholder": "Заголовок …",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Паттерн (светлый)",
+ "field.blocks.figure.back.pattern.dark": "Паттерн (темный)",
"field.blocks.image.alt": "Альтернативный текст",
"field.blocks.image.caption": "Подпись",
"field.blocks.image.crop": "Обрезать",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Файлы не выбраны",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Изменить разметку",
"field.layout.delete": "Удалить разметку",
@@ -345,12 +359,14 @@
"field.object.empty": "Пока нет информации",
"field.pages.empty": "Страницы не выбраны",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "Вы точно хотите удалить эту запись?",
"field.structure.delete.confirm.all": "Вы действительно хотите удалить все значения?",
"field.structure.empty": "Записей нет",
"field.users.empty": "Пользователей нет",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "Ещё нет полей",
@@ -369,6 +385,13 @@
"filter": "Фильтр",
+ "form.discard": " Отменить изменения",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "Текущие изменения не сохранены",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Скрыть",
"hour": "Час",
"hue": "Оттенок",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Готовы запустить Ваш сайт?",
"license.status.missing.info": "Нет действительной лицензии",
"license.status.missing.label": "Пожалуйста, активируйте Вашу лицензию",
+ "license.status.unknown.info": "Статус лицензии неизвестен",
+ "license.status.unknown.label": "Неизвестная лицензия",
"license.manage": "Управление лицензиями",
"license.purchased": "Приобретено",
"license.success": "Спасибо за поддержку Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Несохраненные изменения",
"lock.unsaved.empty": "Несохраненных изменений нет",
+ "lock.unsaved.files": "Несохраненные файлы",
+ "lock.unsaved.pages": "Несохраненные страницы",
+ "lock.unsaved.users": "Несохраненные аккаунты",
"lock.isLocked": "Несохраненные изменения {email}",
"lock.unlock": "Разблокировать",
"lock.unlock.submit": "Разблокируйте и перезапишите несохраненные изменения {email}",
@@ -578,6 +606,10 @@
"plugins": "Плагины",
"prev": "Предыдущий",
"preview": "Предпросмотр",
+
+ "publish": "Опубликовать",
+ "published": "Опубликовано",
+
"remove": "Удалить",
"rename": "Переименовать",
"renew": "Обновить",
@@ -597,7 +629,9 @@
"role.nobody.title": "Никто",
"save": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c",
+ "saved": "Сохранено",
"search": "Поиск",
+ "searching": "Поиск",
"search.min": "Введите хотя бы {min} символов для поиска",
"search.all": "Показать все результаты ({count})",
"search.results.none": "Нет результатов",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "Похоже, к папке content есть несанкционированный доступ",
"system.issues.eol.kirby": "Срок службы установленной вами версии Kirby истек, и она больше не будет получать обновления для системы безопасности",
"system.issues.eol.plugin": "Срок службы установленной вами версии плагина { plugin } истек, и он не будет получать дальнейших обновлений для системы безопасности",
@@ -646,6 +681,12 @@
"tel": "Телефон",
"tel.placeholder": "+79123456789",
"template": "\u0428\u0430\u0431\u043b\u043e\u043d",
+
+ "theme": "Тема",
+ "theme.light": "Светлая тема",
+ "theme.dark": "Темная тема",
+ "theme.automatic": "Как в системе",
+
"title": "Название",
"today": "Сегодня",
@@ -715,10 +756,13 @@
"users": "Пользователи",
"version": "Версия",
+ "version.changes": "Changed version",
+ "version.compare": "Сравнить версии",
"version.current": "Текущая версия",
"version.latest": "Последняя версия",
"versionInformation": "Информация о версии",
+ "view": "View",
"view.account": "Ваш аккаунт",
"view.installation": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430",
"view.languages": "Языки",
diff --git a/public/kirby/i18n/translations/sk.json b/public/kirby/i18n/translations/sk.json
index 70a43c9..27ef2c0 100644
--- a/public/kirby/i18n/translations/sk.json
+++ b/public/kirby/i18n/translations/sk.json
@@ -21,6 +21,8 @@
"copy": "Kopírovať",
"copy.all": "Copy all",
"copy.success": "{count} copied!",
+ "copy.success.multiple": "{count} copied!",
+ "copy.url": "Copy URL",
"create": "Vytvoriť",
"custom": "Custom",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Invalid cache type \"{type}\"",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "E-mailovú predvoľbu \"{name}\" nie je možné nájsť",
"error.field.converter.invalid": "Neplatný converter \"{converter}\"",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Názov súboru nemôže byť prázdny",
"error.file.notFound": "Súbor \"{filename}\" sa nepodarilo nájsť",
"error.file.orientation": "The orientation of the image must be \"{orientation}\"",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "Nemáte povolenie na nahrávanie súborov s typom {type}",
"error.file.type.invalid": "Neplatný typ súboru: \"{type}\"",
"error.file.undefined": "Súbor nie je možné nájsť",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "The page cannot be moved into itself",
"error.page.move.directory": "The page directory cannot be moved",
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "The moved page could not be found",
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Nadpis",
"field.blocks.heading.text": "Text",
"field.blocks.heading.placeholder": "Nadpis ...",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Alternative text",
"field.blocks.image.caption": "Popis",
"field.blocks.image.crop": "Orezanie",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Žiadne súbory zatiaľ neboli zvolené",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Change layout",
"field.layout.delete": "Delete layout",
@@ -345,12 +359,14 @@
"field.object.empty": "No information yet",
"field.pages.empty": "Žiadne stránky zatiaľ neboli zvolené",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "Ste si istý, že chcete zmazať tento riadok?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.empty": "Zatiaľ žiadne údaje",
"field.users.empty": "Žiadni užívatelia zatiaľ neboli zvolení",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "No fields yet",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Hide",
"hour": "Hodina",
"hue": "Hue",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Ready to launch your site?",
"license.status.missing.info": "No valid license",
"license.status.missing.label": "Please activate your license",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Manage your licenses",
"license.purchased": "Purchased",
"license.success": "Ďakujeme za vašu podporu Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Unsaved changes",
"lock.unsaved.empty": "There are no more unsaved changes",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "Unsaved changes by {email}",
"lock.unlock": "Unlock",
"lock.unlock.submit": "Unlock and overwrite unsaved changes by {email}",
@@ -578,6 +606,10 @@
"plugins": "Plugins",
"prev": "Predchádzajúci",
"preview": "Preview",
+
+ "publish": "Publish",
+ "published": "Zverejnené",
+
"remove": "Odstrániť",
"rename": "Premenovať",
"renew": "Renew",
@@ -597,7 +629,9 @@
"role.nobody.title": "Nobody",
"save": "Uložiť",
+ "saved": "Saved",
"search": "Hľadať",
+ "searching": "Searching",
"search.min": "Enter {min} characters to search",
"search.all": "Show all {count} results",
"search.results.none": "No results",
@@ -622,6 +656,7 @@
"system.info.copy": "Copy info",
"system.info.copied": "System info copied",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "The content folder seems to be exposed",
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
@@ -646,6 +681,12 @@
"tel": "Phone",
"tel.placeholder": "+49123456789",
"template": "Šablóna",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Titulok",
"today": "Dnes",
@@ -715,10 +756,13 @@
"users": "Užívatelia",
"version": "Verzia",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
+ "view": "View",
"view.account": "Váš účet",
"view.installation": "Inštalácia",
"view.languages": "Jazyky",
diff --git a/public/kirby/i18n/translations/sv_SE.json b/public/kirby/i18n/translations/sv_SE.json
index 75e2e20..3c46818 100644
--- a/public/kirby/i18n/translations/sv_SE.json
+++ b/public/kirby/i18n/translations/sv_SE.json
@@ -21,6 +21,8 @@
"copy": "Kopiera",
"copy.all": "Kopiera alla",
"copy.success": "{count} kopierad!",
+ "copy.success.multiple": "{count} kopierad!",
+ "copy.url": "Kopiera URL",
"create": "Skapa",
"custom": "Anpassad",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Ogiltig cachetyp \"{type}\"",
+ "error.content.lock.delete": "Versionen är låst och kan inte raderas",
+ "error.content.lock.move": "Källversionen är låst och kan inte flyttas",
+ "error.content.lock.publish": "Denna version är redan publicerad",
+ "error.content.lock.replace": "Versionen är låst och kan inte bytas ut",
+ "error.content.lock.update": "Versionen är låst och kan inte uppdateras",
+
"error.email.preset.notFound": "E-postförinställningen \"{name}\" kan inte hittas",
"error.field.converter.invalid": "Ogiltig omvandlare \"{converter}\"",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Filnamnet får inte vara tomt",
"error.file.notFound": "Filen \"{filename}\" kan ej hittas",
"error.file.orientation": "Bildens orientering måste vara \"{orientation}\"",
+ "error.file.sort.permission": "Du har inte behörighet att ändra sorteringen av \"{filename}\"",
"error.file.type.forbidden": "Du har inte behörighet att ladda upp filer av typen {type}",
"error.file.type.invalid": "Ogiltig filtyp: {type}",
"error.file.undefined": "Filen kan inte hittas",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "Sidan kan inte flyttas in i sig själv",
"error.page.move.directory": "Sidans mapp kan inte flyttas",
"error.page.move.duplicate": "En undersida med URL-appendixen \"{slug}\" existerar redan",
+ "error.page.move.noSections": "Sidan \"{parent}\" kan inte vara en förälder till någon sida eftersom den saknar sidsektioner i dess blueprint",
"error.page.move.notFound": "Den flyttade sidan kunde inte hittas",
"error.page.move.permission": "Du saknar behörighet för att flytta \"{slug}\"",
"error.page.move.template": "Mallen \"{template}\" accepteras inte som en undersida till \"{parent}\"",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Rubrik",
"field.blocks.heading.text": "Text",
"field.blocks.heading.placeholder": "Rubrik …",
+ "field.blocks.figure.back.plain": "Vanlig",
+ "field.blocks.figure.back.pattern.light": "Mönster (ljust)",
+ "field.blocks.figure.back.pattern.dark": "Mönster (mörkt)",
"field.blocks.image.alt": "Alternativ text",
"field.blocks.image.caption": "Rubrik",
"field.blocks.image.crop": "Beskär",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Inga filer valda än",
+ "field.files.empty.single": "Ingen fil har valts än",
"field.layout.change": "Ändra layout",
"field.layout.delete": "Radera layout",
@@ -345,12 +359,14 @@
"field.object.empty": "Ingen information ännu",
"field.pages.empty": "Inga sidor valda än",
+ "field.pages.empty.single": "Ingen sida har valts än",
"field.structure.delete.confirm": "Vill du verkligen radera denna rad?",
"field.structure.delete.confirm.all": "Vill du verkligen radera alla poster?",
"field.structure.empty": "Inga poster än",
"field.users.empty": "Inga användare valda än",
+ "field.users.empty.single": "Ingen användare har valts än",
"fields.empty": "Inga fält ännu",
@@ -369,6 +385,13 @@
"filter": "Filter",
+ "form.discard": "Kassera ändringar",
+ "form.discard.confirm": "Vill du verkligen kassera dina ändringar?",
+ "form.locked": "Detta innehåll är inaktiverat för dig eftersom det för närvarande redigeras av en annan användare",
+ "form.unsaved": "De aktuella ändringarna har inte sparats än",
+ "form.preview": "Förhandsgranska ändringar",
+ "form.preview.draft": "Förhandsgranska utkast",
+
"hide": "Göm",
"hour": "Timme",
"hue": "Nyans",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Är du redo att lansera din webbplats?",
"license.status.missing.info": "Ingen giltig licens",
"license.status.missing.label": "Vänligen aktivera din licens",
+ "license.status.unknown.info": "Licensstatusen är okänd",
+ "license.status.unknown.label": "Okänd licens",
"license.manage": "Hantera dina licenser",
"license.purchased": "Köpt",
"license.success": "Tack för att du stödjer Kirby",
@@ -456,6 +481,9 @@
"lock.unsaved": "Osparade ändringar",
"lock.unsaved.empty": "Det finns inga fler osparade ändringar",
+ "lock.unsaved.files": "Osparade filer",
+ "lock.unsaved.pages": "Osparade sidor",
+ "lock.unsaved.users": "Osparade konton",
"lock.isLocked": "Osparade ändringar av {email}",
"lock.unlock": "Lås upp",
"lock.unlock.submit": "Lås upp och skriv över osparade ändringar av {email}",
@@ -578,6 +606,10 @@
"plugins": "Tillägg",
"prev": "Föregående",
"preview": "Förhandsgranska",
+
+ "publish": "Publicera",
+ "published": "Publicerade",
+
"remove": "Ta bort",
"rename": "Byt namn",
"renew": "Förnya",
@@ -597,7 +629,9 @@
"role.nobody.title": "Ingen",
"save": "Spara",
+ "saved": "Sparad",
"search": "Sök",
+ "searching": "Söker",
"search.min": "Ange {min} tecken för att söka",
"search.all": "Visa alla {count} resultat",
"search.results.none": "Inga träffar",
@@ -622,6 +656,7 @@
"system.info.copy": "Kopiera info",
"system.info.copied": "Systeminformation kopierad",
+ "system.issues.api.methods": "Din server stöder inte PATCH-förfrågningar",
"system.issues.content": "Mappen content verkar vara exponerad",
"system.issues.eol.kirby": "Din installerade Kirby-version har nått slutet av sin livscykel och kommer inte att få fler säkerhetsuppdateringar",
"system.issues.eol.plugin": "Den installerade versionen av tillägget { plugin } har nått slutet på sin livscykel och kommer inte att få fler säkerhetsuppdateringar.",
@@ -646,6 +681,12 @@
"tel": "Telefon",
"tel.placeholder": "+46701234567",
"template": "Mall",
+
+ "theme": "Tema",
+ "theme.light": "Ljus på",
+ "theme.dark": "Ljus av",
+ "theme.automatic": "Matcha systemstandard",
+
"title": "Titel",
"today": "Idag",
@@ -715,10 +756,13 @@
"users": "Användare",
"version": "Version",
+ "version.changes": "Ändrad version",
+ "version.compare": "Jämför versioner",
"version.current": "Aktuell version",
"version.latest": "Senaste version",
"versionInformation": "Versionsinformation",
+ "view": "Visa",
"view.account": "Ditt konto",
"view.installation": "Installation",
"view.languages": "Språk",
diff --git a/public/kirby/i18n/translations/tr.json b/public/kirby/i18n/translations/tr.json
index 6d529f4..634dfd1 100644
--- a/public/kirby/i18n/translations/tr.json
+++ b/public/kirby/i18n/translations/tr.json
@@ -21,6 +21,8 @@
"copy": "Kopyala",
"copy.all": "Tümünü kopyala",
"copy.success": "{count} kopyalandı!",
+ "copy.success.multiple": "{count} kopyalandı!",
+ "copy.url": "Copy URL",
"create": "Oluştur",
"custom": "Özel",
@@ -90,6 +92,12 @@
"error.cache.type.invalid": "Geçersiz önbellek türü \"{type}\"",
+ "error.content.lock.delete": "The version is locked and cannot be deleted",
+ "error.content.lock.move": "The source version is locked and cannot be moved",
+ "error.content.lock.publish": "This version is already published",
+ "error.content.lock.replace": "The version is locked and cannot be replaced",
+ "error.content.lock.update": "The version is locked and cannot be updated",
+
"error.email.preset.notFound": "\"{name}\" e-posta adresi bulunamadı",
"error.field.converter.invalid": "Geçersiz dönüştürücü \"{converter}\"",
@@ -118,6 +126,7 @@
"error.file.name.missing": "Dosya adı boş bırakılamaz",
"error.file.notFound": "\"{filename}\" dosyası bulunamadı",
"error.file.orientation": "Resmin oryantasyonu \"{orientation}\" olmalıdır",
+ "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"",
"error.file.type.forbidden": "{type} dosya yükleme izni yok",
"error.file.type.invalid": "Geçersiz dosya türü: {type}",
"error.file.undefined": "Dosya bulunamad\u0131",
@@ -168,6 +177,7 @@
"error.page.move.ancestor": "Sayfa kendi içine taşınamaz",
"error.page.move.directory": "Sayfa dizini taşınamaz",
"error.page.move.duplicate": "\"{slug}\" URL ekine sahip bir alt sayfa zaten mevcut",
+ "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
"error.page.move.notFound": "Taşınan sayfa bulunamadı",
"error.page.move.permission": "\"{slug}\" öğesini taşımanıza izin verilmiyor",
"error.page.move.template": "\"{template}\" şablonu \"{parent}\" alt sayfası olarak kabul edilmiyor",
@@ -297,6 +307,9 @@
"field.blocks.heading.name": "Başlık",
"field.blocks.heading.text": "Metin",
"field.blocks.heading.placeholder": "Başlık …",
+ "field.blocks.figure.back.plain": "Plain",
+ "field.blocks.figure.back.pattern.light": "Pattern (light)",
+ "field.blocks.figure.back.pattern.dark": "Pattern (dark)",
"field.blocks.image.alt": "Alternatif metin",
"field.blocks.image.caption": "Altyazı",
"field.blocks.image.crop": "Kırp",
@@ -334,6 +347,7 @@
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
"field.files.empty": "Henüz dosya seçilmedi",
+ "field.files.empty.single": "No file selected yet",
"field.layout.change": "Düzeni değiştir",
"field.layout.delete": "Düzeni sil",
@@ -345,12 +359,14 @@
"field.object.empty": "Henüz bilgi yok",
"field.pages.empty": "Henüz sayfa seçilmedi",
+ "field.pages.empty.single": "No page selected yet",
"field.structure.delete.confirm": "Bu girdiyi silmek istedi\u011finizden emin misiniz?",
"field.structure.delete.confirm.all": "Tüm girdileri gerçekten silmek istiyor musunuz?",
"field.structure.empty": "Hen\u00fcz bir girdi yok",
"field.users.empty": "Henüz kullanıcı seçilmedi",
+ "field.users.empty.single": "No user selected yet",
"fields.empty": "Henüz alan yok",
@@ -369,6 +385,13 @@
"filter": "Filtre",
+ "form.discard": "Discard changes",
+ "form.discard.confirm": "Do you really want to discard all your changes?",
+ "form.locked": "This content is disabled for you as it is currently edited by another user",
+ "form.unsaved": "The current changes have not yet been saved",
+ "form.preview": "Preview changes",
+ "form.preview.draft": "Preview draft",
+
"hide": "Gizle",
"hour": "Saat",
"hue": "Renk tonu",
@@ -444,6 +467,8 @@
"license.status.missing.bubble": "Sitenizi yayına almaya hazır mısınız?",
"license.status.missing.info": "Geçerli lisans yok",
"license.status.missing.label": "Lütfen lisansınızı etkinleştirin",
+ "license.status.unknown.info": "The license status is unknown",
+ "license.status.unknown.label": "Unknown license",
"license.manage": "Lisanslarınızı yönetin",
"license.purchased": "Satın alındı",
"license.success": "Kirby'yi desteklediğiniz için teşekkürler",
@@ -456,6 +481,9 @@
"lock.unsaved": "Kaydedilmemiş değişiklikler",
"lock.unsaved.empty": "Daha fazla kaydedilmemiş değişiklik yok",
+ "lock.unsaved.files": "Unsaved files",
+ "lock.unsaved.pages": "Unsaved pages",
+ "lock.unsaved.users": "Unsaved accounts",
"lock.isLocked": "{email} tarafından yapılan kaydedilmemiş değişiklikler",
"lock.unlock": "Kilidi Aç",
"lock.unlock.submit": "Kaydedilmemiş değişikliklerin kilidini {email} ile açın ve üzerine yazın",
@@ -578,6 +606,10 @@
"plugins": "Eklentiler",
"prev": "Önceki",
"preview": "Önizle",
+
+ "publish": "Publish",
+ "published": "Yayınlandı",
+
"remove": "Kaldır",
"rename": "Yeniden Adlandır",
"renew": "Yenileme",
@@ -597,7 +629,9 @@
"role.nobody.title": "Hiçkimse",
"save": "Kaydet",
+ "saved": "Saved",
"search": "Arama",
+ "searching": "Searching",
"search.min": "Aramak için {min} karakter girin",
"search.all": "Tüm {count} sonuçlarını göster",
"search.results.none": "Sonuç yok",
@@ -622,6 +656,7 @@
"system.info.copy": "Bilgileri kopyala",
"system.info.copied": "Sistem bilgisi kopyalandı",
+ "system.issues.api.methods": "Your server does not support PATCH requests",
"system.issues.content": "İçerik klasörü açığa çıkmış görünüyor",
"system.issues.eol.kirby": "Yüklü Kirby sürümünüz kullanım ömrünün sonuna ulaştı ve daha fazla güvenlik güncellemesi almayacak",
"system.issues.eol.plugin": "{ plugin } eklentisinin yüklü sürümü kullanım ömrünün sonuna ulaştı ve daha fazla güvenlik güncellemesi almayacak",
@@ -646,6 +681,12 @@
"tel": "Telefon",
"tel.placeholder": "+49123456789",
"template": "\u015eablon",
+
+ "theme": "Theme",
+ "theme.light": "Lights on",
+ "theme.dark": "Lights off",
+ "theme.automatic": "Match system default",
+
"title": "Başlık",
"today": "Bugün",
@@ -715,10 +756,13 @@
"users": "Kullanıcılar",
"version": "Versiyon",
+ "version.changes": "Changed version",
+ "version.compare": "Compare versions",
"version.current": "Mevcut sürüm",
"version.latest": "En son sürüm",
"versionInformation": "Sürüm bilgisi",
+ "view": "View",
"view.account": "Hesap Bilgilerin",
"view.installation": "Kurulum",
"view.languages": "Diller",
diff --git a/public/kirby/package-lock.json b/public/kirby/package-lock.json
deleted file mode 100644
index 7c78dd2..0000000
--- a/public/kirby/package-lock.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "name": "kirby",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {}
-}
diff --git a/public/kirby/panel/.prettierignore b/public/kirby/panel/.prettierignore
deleted file mode 100644
index 511620b..0000000
--- a/public/kirby/panel/.prettierignore
+++ /dev/null
@@ -1,2 +0,0 @@
-
-src/components/Text/Highlight.vue
\ No newline at end of file
diff --git a/public/kirby/panel/eslint.config.mjs b/public/kirby/panel/eslint.config.mjs
deleted file mode 100644
index cfe049e..0000000
--- a/public/kirby/panel/eslint.config.mjs
+++ /dev/null
@@ -1,28 +0,0 @@
-import js from "@eslint/js";
-import prettier from "eslint-config-prettier";
-import vue from "eslint-plugin-vue";
-
-export default [
- js.configs.recommended,
- ...vue.configs["flat/vue2-recommended"],
- prettier,
- {
- rules: {
- "vue/attributes-order": "error",
- "vue/component-definition-name-casing": "off",
- "vue/html-closing-bracket-newline": [
- "error",
- {
- singleline: "never",
- multiline: "always"
- }
- ],
- "vue/multi-word-component-names": "off",
- "vue/require-default-prop": "off",
- "vue/require-prop-types": "error"
- },
- languageOptions: {
- ecmaVersion: 2022
- }
- }
-];
diff --git a/public/kirby/src/Api/Api.php b/public/kirby/src/Api/Api.php
index 75b5d1d..e7647b3 100644
--- a/public/kirby/src/Api/Api.php
+++ b/public/kirby/src/Api/Api.php
@@ -592,7 +592,7 @@ class Api
* @return $this
*/
protected function setRequestMethod(
- string $requestMethod = null
+ string|null $requestMethod = null
): static {
$this->requestMethod = $requestMethod ?? 'GET';
return $this;
diff --git a/public/kirby/src/Cms/App.php b/public/kirby/src/Cms/App.php
index 32044c7..953d22d 100644
--- a/public/kirby/src/Cms/App.php
+++ b/public/kirby/src/Cms/App.php
@@ -285,7 +285,7 @@ class App
*
* @return $this
*/
- protected function bakeRoots(array $roots = null): static
+ protected function bakeRoots(array|null $roots = null): static
{
$roots = array_merge($this->core->roots(), (array)$roots);
$this->roots = Ingredients::bake($roots);
@@ -297,7 +297,7 @@ class App
*
* @return $this
*/
- protected function bakeUrls(array $urls = null): static
+ protected function bakeUrls(array|null $urls = null): static
{
$urls = array_merge($this->core->urls(), (array)$urls);
$this->urls = Ingredients::bake($urls);
@@ -331,7 +331,7 @@ class App
/**
* Calls any Kirby route
*/
- public function call(string $path = null, string $method = null): mixed
+ public function call(string|null $path = null, string|null $method = null): mixed
{
$path ??= $this->path();
$method ??= $this->request()->method();
@@ -697,7 +697,7 @@ class App
* @psalm-return ($lazy is false ? static : static|null)
*/
public static function instance(
- self $instance = null,
+ self|null $instance = null,
bool $lazy = false
): static|null {
if ($instance !== null) {
@@ -852,7 +852,7 @@ class App
*
* @internal
*/
- public function kirbytags(string $text = null, array $data = []): string
+ public function kirbytags(string|null $text = null, array $data = []): string
{
$data['kirby'] ??= $this;
$data['site'] ??= $data['kirby']->site();
@@ -872,7 +872,7 @@ class App
*
* @internal
*/
- public function kirbytext(string $text = null, array $options = []): string
+ public function kirbytext(string|null $text = null, array $options = []): string
{
$text = $this->apply('kirbytext:before', compact('text'), 'text');
$text = $this->kirbytags($text, $options);
@@ -891,7 +891,7 @@ class App
* Returns the language by code or shortcut (`default`, `current`).
* Passing `null` is an alias for passing `current`
*/
- public function language(string $code = null): Language|null
+ public function language(string|null $code = null): Language|null
{
if ($this->multilang() === false) {
return null;
@@ -909,7 +909,7 @@ class App
*
* @internal
*/
- public function languageCode(string $languageCode = null): string|null
+ public function languageCode(string|null $languageCode = null): string|null
{
return $this->language($languageCode)?->code();
}
@@ -952,7 +952,7 @@ class App
*
* @internal
*/
- public function markdown(string $text = null, array $options = null): string
+ public function markdown(string|null $text = null, array|null $options = null): string
{
// merge global options with local options
$options = array_merge(
@@ -1181,8 +1181,8 @@ class App
* current request
*/
public function render(
- string $path = null,
- string $method = null
+ string|null $path = null,
+ string|null $method = null
): Response|null {
if (($_ENV['KIRBY_RENDER'] ?? true) === false) {
return null;
@@ -1441,7 +1441,7 @@ class App
*
* @return $this
*/
- protected function setLanguages(array $languages = null): static
+ protected function setLanguages(array|null $languages = null): static
{
if ($languages !== null) {
$objects = [];
@@ -1462,7 +1462,7 @@ class App
*
* @return $this
*/
- protected function setPath(string $path = null): static
+ protected function setPath(string|null $path = null): static
{
$this->path = $path !== null ? trim($path, '/') : null;
return $this;
@@ -1473,7 +1473,7 @@ class App
*
* @return $this
*/
- protected function setRequest(array $request = null): static
+ protected function setRequest(array|null $request = null): static
{
if ($request !== null) {
$this->request = new Request($request);
@@ -1487,7 +1487,7 @@ class App
*
* @return $this
*/
- protected function setRoles(array $roles = null): static
+ protected function setRoles(array|null $roles = null): static
{
if ($roles !== null) {
$this->roles = Roles::factory($roles);
@@ -1501,7 +1501,7 @@ class App
*
* @return $this
*/
- protected function setSite(Site|array $site = null): static
+ protected function setSite(Site|array|null $site = null): static
{
if (is_array($site) === true) {
$site = new Site($site);
@@ -1528,7 +1528,7 @@ class App
*
* @internal
*/
- public function smartypants(string $text = null): string
+ public function smartypants(string|null $text = null): string
{
$options = $this->option('smartypants', []);
diff --git a/public/kirby/src/Cms/AppPlugins.php b/public/kirby/src/Cms/AppPlugins.php
index 8cfeae3..645c652 100644
--- a/public/kirby/src/Cms/AppPlugins.php
+++ b/public/kirby/src/Cms/AppPlugins.php
@@ -99,7 +99,7 @@ trait AppPlugins
*/
public function extend(
array $extensions,
- Plugin $plugin = null
+ Plugin|null $plugin = null
): array {
foreach ($this->extensions as $type => $registered) {
if (isset($extensions[$type]) === true) {
@@ -382,7 +382,7 @@ trait AppPlugins
*/
protected function extendOptions(
array $options,
- Plugin $plugin = null
+ Plugin|null $plugin = null
): array {
if ($plugin !== null) {
$options = [$plugin->prefix() => $options];
@@ -428,7 +428,7 @@ trait AppPlugins
*/
protected function extendPermissions(
array $permissions,
- Plugin $plugin = null
+ Plugin|null $plugin = null
): array {
if ($plugin !== null) {
$permissions = [$plugin->prefix() => $permissions];
@@ -583,7 +583,7 @@ trait AppPlugins
*
* @internal
*/
- public function extensions(string $type = null): array
+ public function extensions(string|null $type = null): array
{
if ($type === null) {
return $this->extensions;
@@ -713,7 +713,7 @@ trait AppPlugins
*/
public static function plugin(
string $name,
- array $extends = null,
+ array|null $extends = null,
array $info = [],
string|null $root = null,
string|null $version = null
@@ -747,7 +747,7 @@ trait AppPlugins
* @internal
* @param array|null $plugins Can be used to overwrite the plugins registry
*/
- public function plugins(array $plugins = null): array
+ public function plugins(array|null $plugins = null): array
{
// overwrite the existing plugins registry
if ($plugins !== null) {
diff --git a/public/kirby/src/Cms/AppTranslations.php b/public/kirby/src/Cms/AppTranslations.php
index 1efae28..1e24f23 100644
--- a/public/kirby/src/Cms/AppTranslations.php
+++ b/public/kirby/src/Cms/AppTranslations.php
@@ -108,7 +108,7 @@ trait AppTranslations
*
* @internal
*/
- public function setCurrentTranslation(string $translationCode = null): void
+ public function setCurrentTranslation(string|null $translationCode = null): void
{
I18n::$locale = $translationCode ?? 'en';
}
diff --git a/public/kirby/src/Cms/AppUsers.php b/public/kirby/src/Cms/AppUsers.php
index 82a61f0..6f2f7be 100644
--- a/public/kirby/src/Cms/AppUsers.php
+++ b/public/kirby/src/Cms/AppUsers.php
@@ -72,7 +72,7 @@ trait AppUsers
*
* @return $this
*/
- protected function setUser(User|string $user = null): static
+ protected function setUser(User|string|null $user = null): static
{
$this->user = $user;
return $this;
@@ -83,7 +83,7 @@ trait AppUsers
*
* @return $this
*/
- protected function setUsers(array $users = null): static
+ protected function setUsers(array|null $users = null): static
{
if ($users !== null) {
$this->users = Users::factory($users);
diff --git a/public/kirby/src/Cms/Auth.php b/public/kirby/src/Cms/Auth.php
index d02b01e..689f567 100644
--- a/public/kirby/src/Cms/Auth.php
+++ b/public/kirby/src/Cms/Auth.php
@@ -202,7 +202,7 @@ class Auth
* @throws \Kirby\Exception\InvalidArgumentException if the authorization header is invalid
* @throws \Kirby\Exception\PermissionException if basic authentication is not allowed
*/
- public function currentUserFromBasicAuth(BasicAuth $auth = null): User|null
+ public function currentUserFromBasicAuth(BasicAuth|null $auth = null): User|null
{
if ($this->kirby->option('api.basicAuth', false) !== true) {
throw new PermissionException('Basic authentication is not activated');
@@ -250,7 +250,7 @@ class Auth
* valid user id in there
*/
public function currentUserFromSession(
- Session|array $session = null
+ Session|array|null $session = null
): User|null {
$session = $this->session($session);
@@ -440,7 +440,7 @@ class Auth
* logged in user will be returned
*/
public function status(
- Session|array $session = null,
+ Session|array|null $session = null,
bool $allowImpersonation = true
): Status {
// try to return from cache
@@ -723,7 +723,7 @@ class Auth
* @throws \Throwable If an authentication error occurred
*/
public function user(
- Session|array $session = null,
+ Session|array|null $session = null,
bool $allowImpersonation = true
): User|null {
if ($allowImpersonation === true && $this->impersonate !== null) {
@@ -887,7 +887,7 @@ class Auth
*/
protected function fail(
Throwable $exception,
- Throwable $fallback = null
+ Throwable|null $fallback = null
): void {
$debug = $this->kirby->option('auth.debug', 'log');
@@ -911,7 +911,7 @@ class Auth
/**
* Creates a session object from the passed options
*/
- protected function session(Session|array $session = null): Session
+ protected function session(Session|array|null $session = null): Session
{
// use passed session options or session object if set
if (is_array($session) === true) {
diff --git a/public/kirby/src/Cms/Blocks.php b/public/kirby/src/Cms/Blocks.php
index 6ea7a6c..5e0c0c9 100644
--- a/public/kirby/src/Cms/Blocks.php
+++ b/public/kirby/src/Cms/Blocks.php
@@ -54,7 +54,7 @@ class Blocks extends Items
* catch blocks from layouts
*/
public static function factory(
- array $items = null,
+ array|null $items = null,
array $params = []
): static {
$items = static::extractFromLayouts($items);
diff --git a/public/kirby/src/Cms/Blueprint.php b/public/kirby/src/Cms/Blueprint.php
index 7895c85..ff97590 100644
--- a/public/kirby/src/Cms/Blueprint.php
+++ b/public/kirby/src/Cms/Blueprint.php
@@ -39,7 +39,7 @@ class Blueprint
/**
* Magic getter/caller for any blueprint prop
*/
- public function __call(string $key, array $arguments = null): mixed
+ public function __call(string $key, array|null $arguments = null): mixed
{
return $this->props[$key] ?? null;
}
@@ -102,7 +102,7 @@ class Blueprint
* Gathers what file templates are allowed in
* this model based on the blueprint
*/
- public function acceptedFileTemplates(string $inSection = null): array
+ public function acceptedFileTemplates(string|null $inSection = null): array
{
// get cached results for the current file model
// (except when collecting for a specific section)
@@ -320,7 +320,7 @@ class Blueprint
*/
public static function factory(
string $name,
- string $fallback = null,
+ string|null $fallback,
ModelWithContent $model
): static|null {
try {
diff --git a/public/kirby/src/Cms/Collection.php b/public/kirby/src/Cms/Collection.php
index a4a5cb6..251b228 100644
--- a/public/kirby/src/Cms/Collection.php
+++ b/public/kirby/src/Cms/Collection.php
@@ -365,7 +365,7 @@ class Collection extends BaseCollection
* Searches the collection
*/
public function search(
- string $query = null,
+ string|null $query = null,
string|array $params = []
): static {
return Search::collection($this, $query, $params);
@@ -376,7 +376,7 @@ class Collection extends BaseCollection
* to an array. This can also take a callback
* function to further modify the array result.
*/
- public function toArray(Closure $map = null): array
+ public function toArray(Closure|null $map = null): array
{
return parent::toArray($map ?? fn ($object) => $object->toArray());
}
diff --git a/public/kirby/src/Cms/ContentLocks.php b/public/kirby/src/Cms/ContentLocks.php
index 2d7c400..bdcc6f4 100644
--- a/public/kirby/src/Cms/ContentLocks.php
+++ b/public/kirby/src/Cms/ContentLocks.php
@@ -173,7 +173,7 @@ class ContentLocks
) {
unset($this->data[$file][$id]);
- // there is empty unlock data, but still lock data
+ // there is empty unlock data, but still lock data
} elseif (
isset($data['unlock']) === true &&
count($data['unlock']) === 0
diff --git a/public/kirby/src/Cms/Email.php b/public/kirby/src/Cms/Email.php
index 80900dc..18f06a2 100644
--- a/public/kirby/src/Cms/Email.php
+++ b/public/kirby/src/Cms/Email.php
@@ -113,7 +113,7 @@ class Email
$this->props['body']['text'] = $text->render($data);
}
- // fallback to single email text template
+ // fallback to single email text template
} elseif ($text->exists()) {
$this->props['body'] = $text->render($data);
} else {
@@ -125,7 +125,7 @@ class Email
/**
* Returns an email template by name and type
*/
- protected function getTemplate(string $name, string $type = null): Template
+ protected function getTemplate(string $name, string|null $type = null): Template
{
return App::instance()->template('emails/' . $name, $type, 'text');
}
@@ -163,7 +163,7 @@ class Email
string $prop,
string $class,
string $contentValue,
- string $contentKey = null
+ string|null $contentKey = null
): array {
$value = $this->props[$prop] ?? [];
diff --git a/public/kirby/src/Cms/Fieldsets.php b/public/kirby/src/Cms/Fieldsets.php
index 181f1c4..4f5f5ce 100644
--- a/public/kirby/src/Cms/Fieldsets.php
+++ b/public/kirby/src/Cms/Fieldsets.php
@@ -74,7 +74,7 @@ class Fieldsets extends Items
}
public static function factory(
- array $items = null,
+ array|null $items = null,
array $params = []
): static {
$items ??= App::instance()->option('blocks.fieldsets', [
diff --git a/public/kirby/src/Cms/File.php b/public/kirby/src/Cms/File.php
index 9937bdc..a3d47ea 100644
--- a/public/kirby/src/Cms/File.php
+++ b/public/kirby/src/Cms/File.php
@@ -155,7 +155,7 @@ class File extends ModelWithContent
* Returns an array with all blueprints that are available for the file
* by comparing files sections and files fields of the parent model
*/
- public function blueprints(string $inSection = null): array
+ public function blueprints(string|null $inSection = null): array
{
// get cached results for the current file model
// (except when collecting for a specific section)
@@ -227,7 +227,7 @@ class File extends ModelWithContent
*/
public function contentFileData(
array $data,
- string $languageCode = null
+ string|null $languageCode = null
): array {
// only add the template in, if the $data array
// doesn't explicitly unsets it
@@ -443,7 +443,7 @@ class File extends ModelWithContent
* Timestamp of the last modification
* of the content file
*/
- protected function modifiedContent(string $languageCode = null): int
+ protected function modifiedContent(string|null $languageCode = null): int
{
return $this->storage()->modified('published', $languageCode) ?? 0;
}
@@ -548,7 +548,7 @@ class File extends ModelWithContent
*
* @return $this
*/
- protected function setBlueprint(array $blueprint = null): static
+ protected function setBlueprint(array|null $blueprint = null): static
{
if ($blueprint !== null) {
$blueprint['model'] = $this;
diff --git a/public/kirby/src/Cms/FileActions.php b/public/kirby/src/Cms/FileActions.php
index 712291a..54fbdca 100644
--- a/public/kirby/src/Cms/FileActions.php
+++ b/public/kirby/src/Cms/FileActions.php
@@ -404,8 +404,8 @@ trait FileActions
* @internal
*/
public function save(
- array $data = null,
- string $languageCode = null,
+ array|null $data = null,
+ string|null $languageCode = null,
bool $overwrite = false
): static {
$file = parent::save($data, $languageCode, $overwrite);
@@ -444,8 +444,8 @@ trait FileActions
* @throws \Kirby\Exception\InvalidArgumentException If the input array contains invalid values
*/
public function update(
- array $input = null,
- string $languageCode = null,
+ array|null $input = null,
+ string|null $languageCode = null,
bool $validate = false
): static {
// delete all public media versions when focus field gets changed
diff --git a/public/kirby/src/Cms/FileModifications.php b/public/kirby/src/Cms/FileModifications.php
index d1a256d..38629ab 100644
--- a/public/kirby/src/Cms/FileModifications.php
+++ b/public/kirby/src/Cms/FileModifications.php
@@ -38,7 +38,7 @@ trait FileModifications
*/
public function crop(
int $width,
- int $height = null,
+ int|null $height = null,
$options = null
): FileVersion|File|Asset {
$quality = null;
@@ -94,9 +94,9 @@ trait FileModifications
* @throws \Kirby\Exception\InvalidArgumentException
*/
public function resize(
- int $width = null,
- int $height = null,
- int $quality = null
+ int|null $width = null,
+ int|null $height = null,
+ int|null $quality = null
): FileVersion|File|Asset {
return $this->thumb([
'width' => $width,
diff --git a/public/kirby/src/Cms/FileRules.php b/public/kirby/src/Cms/FileRules.php
index 84a93ec..ee4b9dd 100644
--- a/public/kirby/src/Cms/FileRules.php
+++ b/public/kirby/src/Cms/FileRules.php
@@ -252,7 +252,7 @@ class FileRules
* Validates the extension, MIME type and filename
*
* @param $mime If not passed, the MIME type is detected from the file,
- * if `false`, the MIME type is not validated for performance reasons
+ * if `false`, the MIME type is not validated for performance reasons
* @throws \Kirby\Exception\InvalidArgumentException If the extension, MIME type or filename is missing or forbidden
*/
public static function validFile(
@@ -312,7 +312,7 @@ class FileRules
*
* @throws \Kirby\Exception\InvalidArgumentException If the MIME type is missing or forbidden
*/
- public static function validMime(File $file, string $mime = null): bool
+ public static function validMime(File $file, string|null $mime = null): bool
{
// make it easier to compare the mime
$mime = strtolower($mime ?? '');
diff --git a/public/kirby/src/Cms/Files.php b/public/kirby/src/Cms/Files.php
index 70760b2..ed5c76a 100644
--- a/public/kirby/src/Cms/Files.php
+++ b/public/kirby/src/Cms/Files.php
@@ -44,19 +44,19 @@ class Files extends Collection
if ($object instanceof self) {
$this->data = array_merge($this->data, $object->data);
- // add a file by id
+ // add a file by id
} elseif (
is_string($object) === true &&
$file = App::instance()->file($object)
) {
$this->__set($file->id(), $file);
- // add a file object
+ // add a file object
} elseif ($object instanceof File) {
$this->__set($object->id(), $object);
- // give a useful error message on invalid input;
- // silently ignore "empty" values for compatibility with existing setups
+ // give a useful error message on invalid input;
+ // silently ignore "empty" values for compatibility with existing setups
} elseif (in_array($object, [null, false, true], true) !== true) {
throw new InvalidArgumentException('You must pass a Files or File object or an ID of an existing file to the Files collection');
}
diff --git a/public/kirby/src/Cms/Find.php b/public/kirby/src/Cms/Find.php
index aa2c363..6059c81 100644
--- a/public/kirby/src/Cms/Find.php
+++ b/public/kirby/src/Cms/Find.php
@@ -142,7 +142,7 @@ class Find
* @param string|null $id User's id
* @throws \Kirby\Exception\NotFoundException if the user for the given id cannot be found
*/
- public static function user(string $id = null): User|null
+ public static function user(string|null $id = null): User|null
{
// account is a reserved word to find the current
// user. It's used in various API and area routes.
diff --git a/public/kirby/src/Cms/HasChildren.php b/public/kirby/src/Cms/HasChildren.php
index 4bc88da..d12ee38 100644
--- a/public/kirby/src/Cms/HasChildren.php
+++ b/public/kirby/src/Cms/HasChildren.php
@@ -176,7 +176,7 @@ trait HasChildren
*
* @return $this
*/
- protected function setChildren(array $children = null): static
+ protected function setChildren(array|null $children = null): static
{
if ($children !== null) {
$this->children = Pages::factory($children, $this);
@@ -190,7 +190,7 @@ trait HasChildren
*
* @return $this
*/
- protected function setDrafts(array $drafts = null): static
+ protected function setDrafts(array|null $drafts = null): static
{
if ($drafts !== null) {
$this->drafts = Pages::factory($drafts, $this, true);
diff --git a/public/kirby/src/Cms/HasFiles.php b/public/kirby/src/Cms/HasFiles.php
index 86788d2..cc6ac65 100644
--- a/public/kirby/src/Cms/HasFiles.php
+++ b/public/kirby/src/Cms/HasFiles.php
@@ -63,7 +63,7 @@ trait HasFiles
* Returns a specific file by filename or the first one
*/
public function file(
- string $filename = null,
+ string|null $filename = null,
string $in = 'files'
): File|null {
if ($filename === null) {
@@ -152,7 +152,7 @@ trait HasFiles
/**
* Returns a specific image by filename or the first one
*/
- public function image(string $filename = null): File|null
+ public function image(string|null $filename = null): File|null
{
return $this->file($filename, 'images');
}
@@ -170,7 +170,7 @@ trait HasFiles
*
* @return $this
*/
- protected function setFiles(array $files = null): static
+ protected function setFiles(array|null $files = null): static
{
if ($files !== null) {
$this->files = Files::factory($files, $this);
diff --git a/public/kirby/src/Cms/Html.php b/public/kirby/src/Cms/Html.php
index 9ab61c4..dfe8101 100644
--- a/public/kirby/src/Cms/Html.php
+++ b/public/kirby/src/Cms/Html.php
@@ -81,7 +81,7 @@ class Html extends \Kirby\Toolkit\Html
*/
public static function link(
string|null $href = null,
- string|array $text = null,
+ string|array|null $text = null,
array $attr = []
): string {
return parent::link(Url::to($href), $text, $attr);
diff --git a/public/kirby/src/Cms/Ingredients.php b/public/kirby/src/Cms/Ingredients.php
index f9c1c59..e8f4b33 100644
--- a/public/kirby/src/Cms/Ingredients.php
+++ b/public/kirby/src/Cms/Ingredients.php
@@ -34,7 +34,7 @@ class Ingredients
/**
* Magic getter for single ingredients
*/
- public function __call(string $method, array $args = null): mixed
+ public function __call(string $method, array|null $args = null): mixed
{
return $this->ingredients[$method] ?? null;
}
diff --git a/public/kirby/src/Cms/Items.php b/public/kirby/src/Cms/Items.php
index 97f8104..13cc966 100644
--- a/public/kirby/src/Cms/Items.php
+++ b/public/kirby/src/Cms/Items.php
@@ -48,7 +48,7 @@ class Items extends Collection
* an array of item props
*/
public static function factory(
- array $items = null,
+ array|null $items = null,
array $params = []
): static {
if (empty($items) === true || is_array($items) === false) {
@@ -93,7 +93,7 @@ class Items extends Collection
/**
* Convert the items to an array
*/
- public function toArray(Closure $map = null): array
+ public function toArray(Closure|null $map = null): array
{
return array_values(parent::toArray($map));
}
diff --git a/public/kirby/src/Cms/Language.php b/public/kirby/src/Cms/Language.php
index d9e3eba..4c6b491 100644
--- a/public/kirby/src/Cms/Language.php
+++ b/public/kirby/src/Cms/Language.php
@@ -344,7 +344,7 @@ class Language
*
* @param int $category If passed, returns the locale for the specified category (e.g. LC_ALL) as string
*/
- public function locale(int $category = null): array|string|null
+ public function locale(int|null $category = null): array|string|null
{
if ($category !== null) {
return $this->locale[$category] ?? $this->locale[LC_ALL] ?? null;
@@ -513,7 +513,7 @@ class Language
* Update language properties and save them
* @internal
*/
- public function update(array $props = null): static
+ public function update(array|null $props = null): static
{
$kirby = App::instance();
$user = $kirby->user();
diff --git a/public/kirby/src/Cms/Layouts.php b/public/kirby/src/Cms/Layouts.php
index 1888680..fa6031c 100644
--- a/public/kirby/src/Cms/Layouts.php
+++ b/public/kirby/src/Cms/Layouts.php
@@ -26,7 +26,7 @@ class Layouts extends Items
public static array $methods = [];
public static function factory(
- array $items = null,
+ array|null $items = null,
array $params = []
): static {
// convert single layout to layouts array
diff --git a/public/kirby/src/Cms/Media.php b/public/kirby/src/Cms/Media.php
index 45c8017..fe8c8e9 100644
--- a/public/kirby/src/Cms/Media.php
+++ b/public/kirby/src/Cms/Media.php
@@ -27,7 +27,7 @@ class Media
* and to copy it to the media folder.
*/
public static function link(
- Page|Site|User $model = null,
+ Page|Site|User|null $model,
string $hash,
string $filename
): Response|false {
diff --git a/public/kirby/src/Cms/Model.php b/public/kirby/src/Cms/Model.php
index b7010d3..a9c61e5 100644
--- a/public/kirby/src/Cms/Model.php
+++ b/public/kirby/src/Cms/Model.php
@@ -86,7 +86,7 @@ abstract class Model
* @param \Kirby\Cms\App|null $kirby
* @return $this
*/
- protected function setKirby(App $kirby = null)
+ protected function setKirby(App|null $kirby = null)
{
static::$kirby = $kirby;
return $this;
@@ -99,7 +99,7 @@ abstract class Model
* @param \Kirby\Cms\Site|null $site
* @return $this
*/
- public function setSite(Site $site = null)
+ public function setSite(Site|null $site = null)
{
$this->site = $site;
return $this;
diff --git a/public/kirby/src/Cms/ModelWithContent.php b/public/kirby/src/Cms/ModelWithContent.php
index 1a7baf5..d525307 100644
--- a/public/kirby/src/Cms/ModelWithContent.php
+++ b/public/kirby/src/Cms/ModelWithContent.php
@@ -71,7 +71,7 @@ abstract class ModelWithContent implements Identifiable
/**
* Returns an array with all blueprints that are available
*/
- public function blueprints(string $inSection = null): array
+ public function blueprints(string|null $inSection = null): array
{
// helper function
$toBlueprints = function (array $sections): array {
@@ -176,7 +176,7 @@ abstract class ModelWithContent implements Identifiable
* @throws \Kirby\Exception\InvalidArgumentException If the language for the given code does not exist
*/
public function contentFile(
- string $languageCode = null,
+ string|null $languageCode = null,
bool $force = false
): string {
Helpers::deprecated('The internal $model->contentFile() method has been deprecated. You can use $model->storage()->contentFile() instead, however please note that this method is also internal and may be removed in the future.', 'model-content-file');
@@ -212,7 +212,7 @@ abstract class ModelWithContent implements Identifiable
*/
public function contentFileData(
array $data,
- string $languageCode = null
+ string|null $languageCode = null
): array {
return $data;
}
@@ -371,7 +371,7 @@ abstract class ModelWithContent implements Identifiable
public function increment(
string $field,
int $by = 1,
- int $max = null
+ int|null $max = null
): static {
$value = (int)$this->content()->get($field)->value() + $by;
@@ -462,8 +462,8 @@ abstract class ModelWithContent implements Identifiable
* @internal
*/
public function query(
- string $query = null,
- string $expect = null
+ string|null $query = null,
+ string|null $expect = null
): mixed {
if ($query === null) {
return null;
@@ -491,7 +491,7 @@ abstract class ModelWithContent implements Identifiable
* Read the content from the content file
* @internal
*/
- public function readContent(string $languageCode = null): array
+ public function readContent(string|null $languageCode = null): array
{
try {
return $this->storage()->read(
@@ -531,7 +531,7 @@ abstract class ModelWithContent implements Identifiable
* Save the single language content
*/
protected function saveContent(
- array $data = null,
+ array|null $data = null,
bool $overwrite = false
): static {
// create a clone to avoid modifying the original
@@ -552,8 +552,8 @@ abstract class ModelWithContent implements Identifiable
* @throws \Kirby\Exception\InvalidArgumentException If the language for the given code does not exist
*/
protected function saveTranslation(
- array $data = null,
- string $languageCode = null,
+ array|null $data = null,
+ string|null $languageCode = null,
bool $overwrite = false
): static {
// create a clone to not touch the original
@@ -603,7 +603,7 @@ abstract class ModelWithContent implements Identifiable
*
* @return $this
*/
- protected function setContent(array $content = null): static
+ protected function setContent(array|null $content = null): static
{
if ($content !== null) {
$content = new Content($content, $this);
@@ -618,7 +618,7 @@ abstract class ModelWithContent implements Identifiable
*
* @return $this
*/
- protected function setTranslations(array $translations = null): static
+ protected function setTranslations(array|null $translations = null): static
{
if ($translations !== null) {
$this->translations = new Collection();
@@ -675,7 +675,7 @@ abstract class ModelWithContent implements Identifiable
* (`null` to keep the original token)
*/
public function toSafeString(
- string $template = null,
+ string|null $template = null,
array $data = [],
string|null $fallback = ''
): string {
@@ -691,7 +691,7 @@ abstract class ModelWithContent implements Identifiable
* @param string $handler For internal use
*/
public function toString(
- string $template = null,
+ string|null $template = null,
array $data = [],
string|null $fallback = '',
string $handler = 'template'
@@ -728,7 +728,7 @@ abstract class ModelWithContent implements Identifiable
* If no code is specified the current translation is returned
*/
public function translation(
- string $languageCode = null
+ string|null $languageCode = null
): ContentTranslation|null {
if ($language = $this->kirby()->language($languageCode)) {
return $this->translations()->find($language->code());
@@ -766,8 +766,8 @@ abstract class ModelWithContent implements Identifiable
* @throws \Kirby\Exception\InvalidArgumentException If the input array contains invalid values
*/
public function update(
- array $input = null,
- string $languageCode = null,
+ array|null $input = null,
+ string|null $languageCode = null,
bool $validate = false
): static {
$form = Form::for($this, [
@@ -811,7 +811,7 @@ abstract class ModelWithContent implements Identifiable
* to store the given data on disk or anywhere else
* @internal
*/
- public function writeContent(array $data, string $languageCode = null): bool
+ public function writeContent(array $data, string|null $languageCode = null): bool
{
$data = $this->contentFileData($data, $languageCode);
$id = $this->storage()->defaultVersion();
diff --git a/public/kirby/src/Cms/NestCollection.php b/public/kirby/src/Cms/NestCollection.php
index 129668d..605b0cb 100644
--- a/public/kirby/src/Cms/NestCollection.php
+++ b/public/kirby/src/Cms/NestCollection.php
@@ -21,7 +21,7 @@ class NestCollection extends BaseCollection
* to an array. This can also take a callback
* function to further modify the array result.
*/
- public function toArray(Closure $map = null): array
+ public function toArray(Closure|null $map = null): array
{
return parent::toArray($map ?? fn ($object) => $object->toArray());
}
diff --git a/public/kirby/src/Cms/Page.php b/public/kirby/src/Cms/Page.php
index 413a267..a1e04df 100644
--- a/public/kirby/src/Cms/Page.php
+++ b/public/kirby/src/Cms/Page.php
@@ -776,7 +776,7 @@ class Page extends ModelWithContent
* This is only used for drafts so far.
* @internal
*/
- public function isVerified(string $token = null): bool
+ public function isVerified(string|null $token = null): bool
{
if (
$this->isPublished() === true &&
@@ -1091,7 +1091,7 @@ class Page extends ModelWithContent
*
* @return $this
*/
- protected function setBlueprint(array $blueprint = null): static
+ protected function setBlueprint(array|null $blueprint = null): static
{
if ($blueprint !== null) {
$blueprint['model'] = $this;
@@ -1106,7 +1106,7 @@ class Page extends ModelWithContent
*
* @return $this
*/
- protected function setTemplate(string $template = null): static
+ protected function setTemplate(string|null $template = null): static
{
if ($template !== null) {
$this->intendedTemplate = $this->kirby()->template($template);
@@ -1120,7 +1120,7 @@ class Page extends ModelWithContent
*
* @return $this
*/
- protected function setUrl(string $url = null): static
+ protected function setUrl(string|null $url = null): static
{
if (is_string($url) === true) {
$url = rtrim($url, '/');
@@ -1133,7 +1133,7 @@ class Page extends ModelWithContent
/**
* Returns the slug of the page
*/
- public function slug(string $languageCode = null): string
+ public function slug(string|null $languageCode = null): string
{
if ($this->kirby()->multilang() === true) {
$languageCode ??= $this->kirby()->languageCode();
@@ -1245,7 +1245,7 @@ class Page extends ModelWithContent
* The uri is the same as the id, except
* that it will be translated in multi-language setups
*/
- public function uri(string $languageCode = null): string
+ public function uri(string|null $languageCode = null): string
{
// set the id, depending on the parent
if ($parent = $this->parent()) {
@@ -1301,7 +1301,7 @@ class Page extends ModelWithContent
*/
public function urlForLanguage(
$language = null,
- array $options = null
+ array|null $options = null
): string {
if ($options !== null) {
return Url::to($this->urlForLanguage($language), $options);
diff --git a/public/kirby/src/Cms/PageActions.php b/public/kirby/src/Cms/PageActions.php
index 4145692..4e27018 100644
--- a/public/kirby/src/Cms/PageActions.php
+++ b/public/kirby/src/Cms/PageActions.php
@@ -578,7 +578,7 @@ trait PageActions
* Create the sorting number for the page
* depending on the blueprint settings
*/
- public function createNum(int $num = null): int
+ public function createNum(int|null $num = null): int
{
$mode = $this->blueprint()->num();
@@ -827,7 +827,7 @@ trait PageActions
/**
* @throws \Kirby\Exception\LogicException If the page is not included in the siblings collection
*/
- protected function resortSiblingsAfterListing(int $position = null): bool
+ protected function resortSiblingsAfterListing(int|null $position = null): bool
{
// get all siblings including the current page
$siblings = $this
diff --git a/public/kirby/src/Cms/PagePicker.php b/public/kirby/src/Cms/PagePicker.php
index f8dccf8..e51464a 100644
--- a/public/kirby/src/Cms/PagePicker.php
+++ b/public/kirby/src/Cms/PagePicker.php
@@ -79,7 +79,7 @@ class PagePicker extends Picker
* parent model that is currently selected
* in the page picker.
*/
- public function modelToArray(Page|Site $model = null): array|null
+ public function modelToArray(Page|Site|null $model = null): array|null
{
if ($model === null) {
return null;
@@ -126,13 +126,13 @@ class PagePicker extends Picker
if (empty($this->options['query']) === true) {
$items = $this->itemsForParent();
- // when subpage navigation is enabled, a parent
- // might be passed in addition to the query.
- // The parent then takes priority.
+ // when subpage navigation is enabled, a parent
+ // might be passed in addition to the query.
+ // The parent then takes priority.
} elseif ($this->options['subpages'] === true && empty($this->options['parent']) === false) {
$items = $this->itemsForParent();
- // search by query
+ // search by query
} else {
$items = $this->itemsForQuery();
}
diff --git a/public/kirby/src/Cms/PageRules.php b/public/kirby/src/Cms/PageRules.php
index 8bc6736..bef0993 100644
--- a/public/kirby/src/Cms/PageRules.php
+++ b/public/kirby/src/Cms/PageRules.php
@@ -25,7 +25,7 @@ class PageRules
*
* @throws \Kirby\Exception\InvalidArgumentException If the given number is invalid
*/
- public static function changeNum(Page $page, int $num = null): bool
+ public static function changeNum(Page $page, int|null $num = null): bool
{
if ($num !== null && $num < 0) {
throw new InvalidArgumentException(['key' => 'page.num.invalid']);
@@ -86,7 +86,7 @@ class PageRules
public static function changeStatus(
Page $page,
string $status,
- int $position = null
+ int|null $position = null
): bool {
if (isset($page->blueprint()->status()[$status]) === false) {
throw new InvalidArgumentException(['key' => 'page.status.invalid']);
diff --git a/public/kirby/src/Cms/Pages.php b/public/kirby/src/Cms/Pages.php
index 692d047..8c96708 100644
--- a/public/kirby/src/Cms/Pages.php
+++ b/public/kirby/src/Cms/Pages.php
@@ -61,19 +61,19 @@ class Pages extends Collection
if ($object instanceof self) {
$this->data = array_merge($this->data, $object->data);
- // add a page by id
+ // add a page by id
} elseif (
is_string($object) === true &&
$page = $site->find($object)
) {
$this->__set($page->id(), $page);
- // add a page object
+ // add a page object
} elseif ($object instanceof Page) {
$this->__set($object->id(), $object);
- // give a useful error message on invalid input;
- // silently ignore "empty" values for compatibility with existing setups
+ // give a useful error message on invalid input;
+ // silently ignore "empty" values for compatibility with existing setups
} elseif (in_array($object, [null, false, true], true) !== true) {
throw new InvalidArgumentException('You must pass a Pages or Page object or an ID of an existing page to the Pages collection');
}
@@ -142,8 +142,8 @@ class Pages extends Collection
*/
public static function factory(
array $pages,
- Page|Site $model = null,
- bool $draft = null
+ Page|Site|null $model = null,
+ bool|null $draft = null
): static {
$model ??= App::instance()->site();
$children = new static([], $model);
@@ -248,7 +248,7 @@ class Pages extends Collection
*/
protected function findByKeyRecursive(
string $id,
- string $startAt = null,
+ string|null $startAt = null,
bool $multiLang = false
) {
$path = explode('/', $id);
diff --git a/public/kirby/src/Cms/Pagination.php b/public/kirby/src/Cms/Pagination.php
index fdefddd..223d80a 100644
--- a/public/kirby/src/Cms/Pagination.php
+++ b/public/kirby/src/Cms/Pagination.php
@@ -125,7 +125,7 @@ class Pagination extends BasePagination
* If the `$page` variable is set, the URL
* for that page will be returned.
*/
- public function pageUrl(int $page = null): string|null
+ public function pageUrl(int|null $page = null): string|null
{
if ($page === null) {
return $this->pageUrl($this->page());
diff --git a/public/kirby/src/Cms/Picker.php b/public/kirby/src/Cms/Picker.php
index da4b7a5..f3bcce0 100644
--- a/public/kirby/src/Cms/Picker.php
+++ b/public/kirby/src/Cms/Picker.php
@@ -68,7 +68,7 @@ abstract class Picker
* array that is already optimized for the
* panel picker component.
*/
- public function itemsToArray(Collection $items = null): array
+ public function itemsToArray(Collection|null $items = null): array
{
if ($items === null) {
return [];
diff --git a/public/kirby/src/Cms/Plugin.php b/public/kirby/src/Cms/Plugin.php
index d20a4c3..cc6cc8f 100644
--- a/public/kirby/src/Cms/Plugin.php
+++ b/public/kirby/src/Cms/Plugin.php
@@ -77,7 +77,7 @@ class Plugin
/**
* Allows access to any composer.json field by method call
*/
- public function __call(string $key, array $arguments = null): mixed
+ public function __call(string $key, array|null $arguments = null): mixed
{
return $this->info()[$key] ?? null;
}
diff --git a/public/kirby/src/Cms/Responder.php b/public/kirby/src/Cms/Responder.php
index e99ce56..640381e 100644
--- a/public/kirby/src/Cms/Responder.php
+++ b/public/kirby/src/Cms/Responder.php
@@ -75,7 +75,7 @@ class Responder
*
* @return $this|string|null
*/
- public function body(string $body = null): static|string|null
+ public function body(string|null $body = null): static|string|null
{
if ($body === null) {
return $this->body;
@@ -210,7 +210,7 @@ class Responder
*
* @return int|$this
*/
- public function code(int $code = null)
+ public function code(int|null $code = null)
{
if ($code === null) {
return $this->code;
@@ -266,7 +266,7 @@ class Responder
*
* @return array|$this
*/
- public function headers(array $headers = null)
+ public function headers(array|null $headers = null)
{
if ($headers === null) {
$injectedHeaders = [];
@@ -305,7 +305,7 @@ class Responder
*
* @return string|$this
*/
- public function json(array $json = null)
+ public function json(array|null $json = null)
{
if ($json !== null) {
$this->body(json_encode($json));
@@ -334,7 +334,7 @@ class Responder
/**
* Creates and returns the response object from the config
*/
- public function send(string $body = null): Response
+ public function send(string|null $body = null): Response
{
if ($body !== null) {
$this->body($body);
@@ -365,7 +365,7 @@ class Responder
*
* @return string|$this
*/
- public function type(string $type = null)
+ public function type(string|null $type = null)
{
if ($type === null) {
return $this->type;
diff --git a/public/kirby/src/Cms/Role.php b/public/kirby/src/Cms/Role.php
index 3579b62..ecdf2a6 100644
--- a/public/kirby/src/Cms/Role.php
+++ b/public/kirby/src/Cms/Role.php
@@ -82,7 +82,11 @@ class Role
public static function factory(array $props, array $inject = []): static
{
- return new static($props + $inject);
+ // ensure to properly extend the blueprint
+ $props = $props + $inject;
+ $props = Blueprint::extend($props);
+
+ return new static($props);
}
public function id(): string
diff --git a/public/kirby/src/Cms/Roles.php b/public/kirby/src/Cms/Roles.php
index b2a4dec..4b33db6 100644
--- a/public/kirby/src/Cms/Roles.php
+++ b/public/kirby/src/Cms/Roles.php
@@ -96,7 +96,7 @@ class Roles extends Collection
return $collection->sort('name', 'asc');
}
- public static function load(string $root = null, array $inject = []): static
+ public static function load(string|null $root = null, array $inject = []): static
{
$kirby = App::instance();
$roles = new static();
diff --git a/public/kirby/src/Cms/Search.php b/public/kirby/src/Cms/Search.php
index 14add5c..b8e66f9 100644
--- a/public/kirby/src/Cms/Search.php
+++ b/public/kirby/src/Cms/Search.php
@@ -17,7 +17,7 @@ namespace Kirby\Cms;
class Search
{
public static function files(
- string $query = null,
+ string|null $query = null,
array $params = []
): Files {
return App::instance()->site()->index()->files()->search($query, $params);
@@ -36,14 +36,14 @@ class Search
}
public static function pages(
- string $query = null,
+ string|null $query = null,
array $params = []
): Pages {
return App::instance()->site()->index()->search($query, $params);
}
public static function users(
- string $query = null,
+ string|null $query = null,
array $params = []
): Users {
return App::instance()->users()->search($query, $params);
diff --git a/public/kirby/src/Cms/Structure.php b/public/kirby/src/Cms/Structure.php
index 222881d..efdfad1 100644
--- a/public/kirby/src/Cms/Structure.php
+++ b/public/kirby/src/Cms/Structure.php
@@ -30,7 +30,7 @@ class Structure extends Items
* an array of item props
*/
public static function factory(
- array $items = null,
+ array|null $items = null,
array $params = []
): static {
if (is_array($items) === true) {
diff --git a/public/kirby/src/Cms/System.php b/public/kirby/src/Cms/System.php
index f1a7ee6..47a08ec 100644
--- a/public/kirby/src/Cms/System.php
+++ b/public/kirby/src/Cms/System.php
@@ -364,7 +364,7 @@ class System
{
return
version_compare(PHP_VERSION, '8.1.0', '>=') === true &&
- version_compare(PHP_VERSION, '8.4.0', '<') === true;
+ version_compare(PHP_VERSION, '8.5.0', '<') === true;
}
/**
@@ -385,7 +385,7 @@ class System
* @throws \Kirby\Exception\Exception
* @throws \Kirby\Exception\InvalidArgumentException
*/
- public function register(string $license = null, string $email = null): bool
+ public function register(string|null $license = null, string|null $email = null): bool
{
$license = new License(
code: $license,
@@ -405,6 +405,16 @@ class System
return $this->app->environment()->get('SERVER_SOFTWARE', '–');
}
+ /**
+ * Returns the short version of the detected server software
+ * @since 4.6.0
+ */
+ public function serverSoftwareShort(): string
+ {
+ $software = $this->serverSoftware();
+ return strtok($software, ' ');
+ }
+
/**
* Check for a writable sessions folder
*/
diff --git a/public/kirby/src/Cms/Translation.php b/public/kirby/src/Cms/Translation.php
index 680f212..d71d336 100644
--- a/public/kirby/src/Cms/Translation.php
+++ b/public/kirby/src/Cms/Translation.php
@@ -87,7 +87,7 @@ class Translation
* Returns a single translation
* string by key
*/
- public function get(string $key, string $default = null): string|null
+ public function get(string $key, string|null $default = null): string|null
{
return $this->data[$key] ?? $default;
}
diff --git a/public/kirby/src/Cms/Url.php b/public/kirby/src/Cms/Url.php
index 2ec0fd7..eb5036f 100644
--- a/public/kirby/src/Cms/Url.php
+++ b/public/kirby/src/Cms/Url.php
@@ -44,9 +44,9 @@ class Url extends BaseUrl
* @return string The safe string
*/
public static function slug(
- string $string = null,
- string $separator = null,
- string $allowed = null,
+ string|null $string = null,
+ string|null $separator = null,
+ string|null $allowed = null,
): string {
$maxlength = App::instance()->option('slugs.maxlength', 255);
return Str::slug($string, $separator, $allowed, $maxlength);
diff --git a/public/kirby/src/Cms/User.php b/public/kirby/src/Cms/User.php
index d72df94..6b09900 100644
--- a/public/kirby/src/Cms/User.php
+++ b/public/kirby/src/Cms/User.php
@@ -239,7 +239,7 @@ class User extends ModelWithContent
*/
public static function hashPassword(
#[SensitiveParameter]
- string $password = null
+ string|null $password = null
): string|null {
if ($password !== null) {
$password = password_hash($password, PASSWORD_DEFAULT);
@@ -279,7 +279,7 @@ class User extends ModelWithContent
/**
* Compares the current object with the given user object
*/
- public function is(User $user = null): bool
+ public function is(User|null $user = null): bool
{
if ($user === null) {
return false;
@@ -625,7 +625,7 @@ class User extends ModelWithContent
*
* @return $this
*/
- protected function setBlueprint(array $blueprint = null): static
+ protected function setBlueprint(array|null $blueprint = null): static
{
if ($blueprint !== null) {
$blueprint['model'] = $this;
@@ -683,7 +683,7 @@ class User extends ModelWithContent
* (`null` to keep the original token)
*/
public function toString(
- string $template = null,
+ string|null $template = null,
array $data = [],
string|null $fallback = '',
string $handler = 'template'
@@ -711,7 +711,7 @@ class User extends ModelWithContent
*/
public function validatePassword(
#[SensitiveParameter]
- string $password = null
+ string|null $password = null
): bool {
if (empty($this->password()) === true) {
throw new NotFoundException(['key' => 'user.password.undefined']);
diff --git a/public/kirby/src/Cms/UserActions.php b/public/kirby/src/Cms/UserActions.php
index 728acc1..3f0ccac 100644
--- a/public/kirby/src/Cms/UserActions.php
+++ b/public/kirby/src/Cms/UserActions.php
@@ -209,7 +209,7 @@ trait UserActions
/**
* Creates a new User from the given props and returns a new User object
*/
- public static function create(array $props = null): User
+ public static function create(array|null $props = null): User
{
$data = $props;
@@ -364,8 +364,8 @@ trait UserActions
* Updates the user data
*/
public function update(
- array $input = null,
- string $languageCode = null,
+ array|null $input = null,
+ string|null $languageCode = null,
bool $validate = false
): static {
$user = parent::update($input, $languageCode, $validate);
@@ -408,7 +408,7 @@ trait UserActions
*/
protected function writePassword(
#[SensitiveParameter]
- string $password = null
+ string|null $password = null
): bool {
return $this->writeSecret('password', $password);
}
diff --git a/public/kirby/src/Cms/Users.php b/public/kirby/src/Cms/Users.php
index df2f6c3..4014402 100644
--- a/public/kirby/src/Cms/Users.php
+++ b/public/kirby/src/Cms/Users.php
@@ -49,19 +49,19 @@ class Users extends Collection
if ($object instanceof self) {
$this->data = array_merge($this->data, $object->data);
- // add a user by id
+ // add a user by id
} elseif (
is_string($object) === true &&
$user = App::instance()->user($object)
) {
$this->__set($user->id(), $user);
- // add a user object
+ // add a user object
} elseif ($object instanceof User) {
$this->__set($object->id(), $object);
- // give a useful error message on invalid input;
- // silently ignore "empty" values for compatibility with existing setups
+ // give a useful error message on invalid input;
+ // silently ignore "empty" values for compatibility with existing setups
} elseif (in_array($object, [null, false, true], true) !== true) {
throw new InvalidArgumentException('You must pass a Users or User object or an ID of an existing user to the Users collection');
}
diff --git a/public/kirby/src/Content/Content.php b/public/kirby/src/Content/Content.php
index 978c8d2..0169287 100644
--- a/public/kirby/src/Content/Content.php
+++ b/public/kirby/src/Content/Content.php
@@ -54,7 +54,7 @@ class Content
*/
public function __construct(
array $data = [],
- ModelWithContent $parent = null,
+ ModelWithContent|null $parent = null,
bool $normalize = true
) {
if ($normalize === true) {
@@ -149,7 +149,7 @@ class Content
* Returns either a single field object
* or all registered fields
*/
- public function get(string $key = null): Field|array
+ public function get(string|null $key = null): Field|array
{
if ($key === null) {
return $this->fields();
@@ -234,7 +234,7 @@ class Content
* @return $this
*/
public function update(
- array $content = null,
+ array|null $content = null,
bool $overwrite = false
): static {
$content = array_change_key_case((array)$content, CASE_LOWER);
diff --git a/public/kirby/src/Content/ContentTranslation.php b/public/kirby/src/Content/ContentTranslation.php
index c04ec32..e341d15 100644
--- a/public/kirby/src/Content/ContentTranslation.php
+++ b/public/kirby/src/Content/ContentTranslation.php
@@ -145,7 +145,7 @@ class ContentTranslation
*
* @return $this
*/
- public function update(array $data = null, bool $overwrite = false): static
+ public function update(array|null $data = null, bool $overwrite = false): static
{
$data = array_change_key_case((array)$data);
diff --git a/public/kirby/src/Content/Field.php b/public/kirby/src/Content/Field.php
index 82ae4b6..201ccc2 100644
--- a/public/kirby/src/Content/Field.php
+++ b/public/kirby/src/Content/Field.php
@@ -210,7 +210,7 @@ class Field
* the modified field will be returned. Otherwise it
* will return the field value.
*/
- public function value(string|Closure $value = null): mixed
+ public function value(string|Closure|null $value = null): mixed
{
if ($value === null) {
return $this->value;
diff --git a/public/kirby/src/Data/Txt.php b/public/kirby/src/Data/Txt.php
index 7ea7d06..985f5ea 100644
--- a/public/kirby/src/Data/Txt.php
+++ b/public/kirby/src/Data/Txt.php
@@ -45,7 +45,7 @@ class Txt extends Handler
// avoid problems with arrays
if (is_array($value) === true) {
$value = Data::encode($value, 'yaml');
- // avoid problems with localized floats
+ // avoid problems with localized floats
} elseif (is_float($value) === true) {
$value = Str::float($value);
}
diff --git a/public/kirby/src/Database/Query.php b/public/kirby/src/Database/Query.php
index 1181b98..73dfe10 100644
--- a/public/kirby/src/Database/Query.php
+++ b/public/kirby/src/Database/Query.php
@@ -421,7 +421,7 @@ class Query
* @param string|null $order
* @return $this
*/
- public function order(string $order = null)
+ public function order(string|null $order = null)
{
$this->order = $order;
return $this;
@@ -828,13 +828,13 @@ class Query
if ($args[0] === null) {
return $current;
- // ->where('username like "myuser"');
+ // ->where('username like "myuser"');
} elseif (is_string($args[0]) === true) {
// simply add the entire string to the where clause
// escaping or using bindings has to be done before calling this method
$result = $args[0];
- // ->where(['username' => 'myuser']);
+ // ->where(['username' => 'myuser']);
} elseif (is_array($args[0]) === true) {
// simple array mode (AND operator)
$sql = $this->database->sql()->values($this->table, $args[0], ' AND ', true, true);
@@ -868,7 +868,7 @@ class Query
// store the bindings
$this->bindings($args[1]);
- // ->where('username like ?', 'myuser')
+ // ->where('username like ?', 'myuser')
} elseif (is_string($args[0]) === true && is_scalar($args[1]) === true) {
// prepared where clause
$result = $args[0];
@@ -913,7 +913,7 @@ class Query
};
$result = $key . ' ' . $predicate . ' ' . $values;
- // ->where('username', 'like', 'myuser');
+ // ->where('username', 'like', 'myuser');
} else {
$predicates = [
'=', '>=', '>', '<=', '<', '<>', '!=', '<=>',
diff --git a/public/kirby/src/Database/Sql.php b/public/kirby/src/Database/Sql.php
index 16349af..877d61f 100644
--- a/public/kirby/src/Database/Sql.php
+++ b/public/kirby/src/Database/Sql.php
@@ -146,7 +146,7 @@ abstract class Sql
* Combines an identifier (table and column)
*
* @param $values bool Whether the identifier is going to be used for a VALUES clause;
- * only relevant for SQLite
+ * only relevant for SQLite
*/
public function combineIdentifier(string $table, string $column, bool $values = false): string
{
diff --git a/public/kirby/src/Database/Sql/Sqlite.php b/public/kirby/src/Database/Sql/Sqlite.php
index fcb36b5..267014e 100644
--- a/public/kirby/src/Database/Sql/Sqlite.php
+++ b/public/kirby/src/Database/Sql/Sqlite.php
@@ -130,7 +130,7 @@ class Sqlite extends Sql
public function tables(): array
{
return [
- 'query' => 'SELECT name FROM sqlite_master WHERE type = "table" OR type = "view"',
+ 'query' => 'SELECT name FROM sqlite_master WHERE type = \'table\' OR type = \'view\'',
'bindings' => []
];
}
diff --git a/public/kirby/src/Filesystem/Dir.php b/public/kirby/src/Filesystem/Dir.php
index 680789b..c12b7d1 100644
--- a/public/kirby/src/Filesystem/Dir.php
+++ b/public/kirby/src/Filesystem/Dir.php
@@ -149,7 +149,7 @@ class Dir
string $dir,
bool $recursive = false,
array|false|null $ignore = [],
- string $path = null
+ string|null $path = null
): array {
$result = [];
$dir = realpath($dir);
@@ -434,7 +434,7 @@ class Dir
*/
public static function modified(
string $dir,
- string $format = null,
+ string|null $format = null,
string|null $handler = null
): int|string {
$modified = filemtime($dir);
diff --git a/public/kirby/src/Filesystem/File.php b/public/kirby/src/Filesystem/File.php
index 035c25c..fc9beec 100644
--- a/public/kirby/src/Filesystem/File.php
+++ b/public/kirby/src/Filesystem/File.php
@@ -59,8 +59,8 @@ class File
* @throws \Kirby\Exception\InvalidArgumentException When the model does not use the `Kirby\Filesystem\IsFile` trait
*/
public function __construct(
- array|string $props = null,
- string $url = null
+ array|string|null $props = null,
+ string|null $url = null
) {
// Legacy support for old constructor of
// the `Kirby\Image\Image` class
diff --git a/public/kirby/src/Filesystem/Mime.php b/public/kirby/src/Filesystem/Mime.php
index 5b83918..2bb2a03 100644
--- a/public/kirby/src/Filesystem/Mime.php
+++ b/public/kirby/src/Filesystem/Mime.php
@@ -251,7 +251,7 @@ class Mime
/**
* Returns the extension for a given MIME type
*/
- public static function toExtension(string $mime = null): string|false
+ public static function toExtension(string|null $mime = null): string|false
{
foreach (static::$types as $key => $value) {
if (is_array($value) === true && in_array($mime, $value) === true) {
@@ -269,7 +269,7 @@ class Mime
/**
* Returns all available extensions for a given MIME type
*/
- public static function toExtensions(string $mime = null, bool $matchWildcards = false): array
+ public static function toExtensions(string|null $mime = null, bool $matchWildcards = false): array
{
$extensions = [];
$testMime = fn (string $v) => static::matches($v, $mime);
diff --git a/public/kirby/src/Form/Field.php b/public/kirby/src/Form/Field.php
index cb95fd4..114a826 100644
--- a/public/kirby/src/Form/Field.php
+++ b/public/kirby/src/Form/Field.php
@@ -127,7 +127,7 @@ class Field extends Component
/**
* Sets the focus on this field when the form loads. Only the first field with this label gets
*/
- 'autofocus' => function (bool $autofocus = null): bool {
+ 'autofocus' => function (bool|null $autofocus = null): bool {
return $autofocus ?? false;
},
/**
@@ -145,7 +145,7 @@ class Field extends Component
/**
* If `true`, the field is no longer editable and will not be saved
*/
- 'disabled' => function (bool $disabled = null): bool {
+ 'disabled' => function (bool|null $disabled = null): bool {
return $disabled ?? false;
},
/**
@@ -157,7 +157,7 @@ class Field extends Component
/**
* Optional icon that will be shown at the end of the field
*/
- 'icon' => function (string $icon = null) {
+ 'icon' => function (string|null $icon = null) {
return $icon;
},
/**
@@ -175,7 +175,7 @@ class Field extends Component
/**
* If `true`, the field has to be filled in correctly to be saved.
*/
- 'required' => function (bool $required = null): bool {
+ 'required' => function (bool|null $required = null): bool {
return $required ?? false;
},
/**
diff --git a/public/kirby/src/Form/Field/BlocksField.php b/public/kirby/src/Form/Field/BlocksField.php
index e37d373..2d66a6b 100644
--- a/public/kirby/src/Form/Field/BlocksField.php
+++ b/public/kirby/src/Form/Field/BlocksField.php
@@ -214,7 +214,7 @@ class BlocksField extends FieldClass
'action' => function (
string $fieldsetType,
string $fieldName,
- string $path = null
+ string|null $path = null
) use ($field) {
$fields = $field->fields($fieldsetType);
$field = $field->form($fields)->field($fieldName);
@@ -276,7 +276,7 @@ class BlocksField extends FieldClass
);
}
- protected function setGroup(string $group = null): void
+ protected function setGroup(string|null $group = null): void
{
$this->group = $group;
}
diff --git a/public/kirby/src/Form/Field/LayoutField.php b/public/kirby/src/Form/Field/LayoutField.php
index 2e595c0..d92c352 100644
--- a/public/kirby/src/Form/Field/LayoutField.php
+++ b/public/kirby/src/Form/Field/LayoutField.php
@@ -175,7 +175,7 @@ class LayoutField extends BlocksField
'method' => 'ALL',
'action' => function (
string $fieldName,
- string $path = null
+ string|null $path = null
) use ($field): array {
$form = $field->attrsForm();
$field = $form->field($fieldName);
diff --git a/public/kirby/src/Form/FieldClass.php b/public/kirby/src/Form/FieldClass.php
index cc4115e..613122c 100644
--- a/public/kirby/src/Form/FieldClass.php
+++ b/public/kirby/src/Form/FieldClass.php
@@ -610,7 +610,7 @@ abstract class FieldClass
}
protected function valueToJson(
- array $value = null,
+ array|null $value = null,
bool $pretty = false
): string {
$constants = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE;
@@ -622,7 +622,7 @@ abstract class FieldClass
return json_encode($value, $constants);
}
- protected function valueToYaml(array $value = null): string
+ protected function valueToYaml(array|null $value = null): string
{
return Data::encode($value, 'yaml');
}
diff --git a/public/kirby/src/Form/Fields.php b/public/kirby/src/Form/Fields.php
index ef46f2e..95c8fec 100644
--- a/public/kirby/src/Form/Fields.php
+++ b/public/kirby/src/Form/Fields.php
@@ -39,7 +39,7 @@ class Fields extends Collection
* array and also does that for every
* included field.
*/
- public function toArray(Closure $map = null): array
+ public function toArray(Closure|null $map = null): array
{
$array = [];
diff --git a/public/kirby/src/Form/Mixin/Max.php b/public/kirby/src/Form/Mixin/Max.php
index 3141bbe..1641917 100644
--- a/public/kirby/src/Form/Mixin/Max.php
+++ b/public/kirby/src/Form/Mixin/Max.php
@@ -11,7 +11,7 @@ trait Max
return $this->max;
}
- protected function setMax(int $max = null)
+ protected function setMax(int|null $max = null)
{
$this->max = $max;
}
diff --git a/public/kirby/src/Form/Mixin/Min.php b/public/kirby/src/Form/Mixin/Min.php
index 1b585e1..aa57af5 100644
--- a/public/kirby/src/Form/Mixin/Min.php
+++ b/public/kirby/src/Form/Mixin/Min.php
@@ -11,7 +11,7 @@ trait Min
return $this->min;
}
- protected function setMin(int $min = null)
+ protected function setMin(int|null $min = null)
{
$this->min = $min;
}
diff --git a/public/kirby/src/Http/Environment.php b/public/kirby/src/Http/Environment.php
index bb8f4f6..c7b1f05 100644
--- a/public/kirby/src/Http/Environment.php
+++ b/public/kirby/src/Http/Environment.php
@@ -153,8 +153,8 @@ class Environment
* @param array|null $info Optional override for `$_SERVER`
*/
public function detect(
- array $options = null,
- array $info = null
+ array|null $options = null,
+ array|null $info = null
): array {
$defaults = [
'cli' => null,
@@ -178,11 +178,11 @@ class Environment
if ($options['allowed'] === '*' || $options['allowed'] === ['*']) {
$this->detectAuto(true);
- // fixed environments
+ // fixed environments
} elseif (empty($options['allowed']) === false) {
$this->detectAllowed($options['allowed']);
- // secure auto-detection
+ // secure auto-detection
} else {
$this->detectAuto();
}
diff --git a/public/kirby/src/Http/Route.php b/public/kirby/src/Http/Route.php
index 7d6dd7d..8bc8348 100644
--- a/public/kirby/src/Http/Route.php
+++ b/public/kirby/src/Http/Route.php
@@ -63,7 +63,7 @@ class Route
/**
* Magic getter for route attributes
*/
- public function __call(string $key, array $args = null): mixed
+ public function __call(string $key, array|null $args = null): mixed
{
return $this->attributes[$key] ?? null;
}
diff --git a/public/kirby/src/Http/Url.php b/public/kirby/src/Http/Url.php
index 9360040..8139b94 100644
--- a/public/kirby/src/Http/Url.php
+++ b/public/kirby/src/Http/Url.php
@@ -220,7 +220,7 @@ class Url
*/
public static function to(
string|null $path = null,
- array $options = null
+ array|null $options = null
): string {
// make sure $path is string
$path ??= '';
diff --git a/public/kirby/src/Image/Image.php b/public/kirby/src/Image/Image.php
index 4e7b0de..f012a1e 100644
--- a/public/kirby/src/Image/Image.php
+++ b/public/kirby/src/Image/Image.php
@@ -2,6 +2,7 @@
namespace Kirby\Image;
+use Kirby\Cms\FileVersion;
use Kirby\Content\Content;
use Kirby\Exception\LogicException;
use Kirby\Filesystem\File;
@@ -115,15 +116,20 @@ class Image extends File
*/
public function html(array $attr = []): string
{
+ $model = match (true) {
+ $this->model instanceof FileVersion => $this->model->original(),
+ default => $this->model
+ };
+
// if no alt text explicitly provided,
// try to infer from model content file
if (
- $this->model !== null &&
- method_exists($this->model, 'content') === true &&
- $this->model->content() instanceof Content &&
- $this->model->content()->get('alt')->isNotEmpty() === true
+ $model !== null &&
+ method_exists($model, 'content') === true &&
+ $model->content() instanceof Content &&
+ $model->content()->get('alt')->isNotEmpty() === true
) {
- $attr['alt'] ??= $this->model->content()->get('alt')->value();
+ $attr['alt'] ??= $model->content()->get('alt')->value();
}
if ($url = $this->url()) {
diff --git a/public/kirby/src/Option/Option.php b/public/kirby/src/Option/Option.php
index 3e58741..7de4b42 100644
--- a/public/kirby/src/Option/Option.php
+++ b/public/kirby/src/Option/Option.php
@@ -28,7 +28,7 @@ class Option
$this->text ??= new NodeText(['en' => $this->value]);
}
- public static function factory(string|int|float|null|array $props): static
+ public static function factory(string|int|float|array|null $props): static
{
if (is_array($props) === false) {
$props = ['value' => $props];
diff --git a/public/kirby/src/Panel/Model.php b/public/kirby/src/Panel/Model.php
index 9391780..b00873f 100644
--- a/public/kirby/src/Panel/Model.php
+++ b/public/kirby/src/Panel/Model.php
@@ -115,12 +115,19 @@ abstract class Model
$blueprint = null;
}
+ // convert string blueprint settings to proper array
+ if (is_string($blueprint) === true) {
+ $blueprint = ['query' => $blueprint];
+ }
+
// skip image thumbnail if option
// is explicitly set to show the icon
if ($settings === 'icon') {
$settings = ['query' => false];
- } elseif (is_string($settings) === true) {
- // convert string settings to proper array
+ }
+
+ // convert string settings to proper array
+ if (is_string($settings) === true) {
$settings = ['query' => $settings];
}
diff --git a/public/kirby/src/Panel/Panel.php b/public/kirby/src/Panel/Panel.php
index e6f9ff6..b88bcab 100644
--- a/public/kirby/src/Panel/Panel.php
+++ b/public/kirby/src/Panel/Panel.php
@@ -235,7 +235,7 @@ class Panel
if ($result === null || $result === false) {
$result = new NotFoundException('The data could not be found');
- // interpret strings as errors
+ // interpret strings as errors
} elseif (is_string($result) === true) {
$result = new Exception($result);
}
diff --git a/public/kirby/src/Panel/View.php b/public/kirby/src/Panel/View.php
index 9058e5e..c857710 100644
--- a/public/kirby/src/Panel/View.php
+++ b/public/kirby/src/Panel/View.php
@@ -330,15 +330,15 @@ class View
if ($data instanceof Redirect) {
return Response::redirect($data->location(), $data->code());
- // handle Kirby exceptions
+ // handle Kirby exceptions
} elseif ($data instanceof Exception) {
$data = static::error($data->getMessage(), $data->getHttpCode());
- // handle regular exceptions
+ // handle regular exceptions
} elseif ($data instanceof Throwable) {
$data = static::error($data->getMessage(), 500);
- // only expect arrays from here on
+ // only expect arrays from here on
} elseif (is_array($data) === false) {
$data = static::error('Invalid Panel response', 500);
}
diff --git a/public/kirby/src/Parsley/Parsley.php b/public/kirby/src/Parsley/Parsley.php
index 3f2242e..b6d834b 100644
--- a/public/kirby/src/Parsley/Parsley.php
+++ b/public/kirby/src/Parsley/Parsley.php
@@ -212,7 +212,7 @@ class Parsley
) {
$this->blocks[$lastIndex]['content']['text'] .= ' ' . $block['content']['text'];
- // append
+ // append
} else {
$this->blocks[] = $block;
}
diff --git a/public/kirby/src/Query/Expression.php b/public/kirby/src/Query/Expression.php
index f205c30..84928c3 100644
--- a/public/kirby/src/Query/Expression.php
+++ b/public/kirby/src/Query/Expression.php
@@ -25,7 +25,7 @@ class Expression
/**
* Parses an expression string into its parts
*/
- public static function factory(string $expression, Query $parent = null): static|Segments
+ public static function factory(string $expression, Query|null $parent = null): static|Segments
{
// split into different expression parts and operators
$parts = static::parse($expression);
diff --git a/public/kirby/src/Query/Query.php b/public/kirby/src/Query/Query.php
index ab6381c..20cefa5 100644
--- a/public/kirby/src/Query/Query.php
+++ b/public/kirby/src/Query/Query.php
@@ -131,12 +131,12 @@ Query::$entries['site'] = function (): Site {
Query::$entries['t'] = function (
string $key,
- string|array $fallback = null,
- string $locale = null
+ string|array|null $fallback = null,
+ string|null $locale = null
): string|null {
return I18n::translate($key, $fallback, $locale);
};
-Query::$entries['user'] = function (string $id = null): User|null {
+Query::$entries['user'] = function (string|null $id = null): User|null {
return App::instance()->user($id);
};
diff --git a/public/kirby/src/Query/Segments.php b/public/kirby/src/Query/Segments.php
index d2af470..c4069a1 100644
--- a/public/kirby/src/Query/Segments.php
+++ b/public/kirby/src/Query/Segments.php
@@ -28,7 +28,7 @@ class Segments extends Collection
* Split query string into segments by dot
* but not inside (nested) parens
*/
- public static function factory(string $query, Query $parent = null): static
+ public static function factory(string $query, Query|null $parent = null): static
{
$segments = static::parse($query);
$position = 0;
diff --git a/public/kirby/src/Session/Session.php b/public/kirby/src/Session/Session.php
index e530258..39478cd 100644
--- a/public/kirby/src/Session/Session.php
+++ b/public/kirby/src/Session/Session.php
@@ -149,7 +149,7 @@ class Session
* @param string|null $mode Optional new transmission mode
* @return string Transmission mode
*/
- public function mode(string $mode = null): string
+ public function mode(string|null $mode = null): string
{
if ($mode !== null) {
// only allow this if this is a new session, otherwise the change
@@ -214,7 +214,7 @@ class Session
* @param int|null $duration Optional new duration in seconds to set
* @return int Number of seconds
*/
- public function duration(int $duration = null): int
+ public function duration(int|null $duration = null): int
{
if ($duration !== null) {
// verify that the duration is at least 1 second
diff --git a/public/kirby/src/Session/Sessions.php b/public/kirby/src/Session/Sessions.php
index 581d144..0606b33 100644
--- a/public/kirby/src/Session/Sessions.php
+++ b/public/kirby/src/Session/Sessions.php
@@ -105,7 +105,7 @@ class Sessions
* @param string $token Session token, either including or without the key
* @param string|null $mode Optional transmission mode override
*/
- public function get(string $token, string $mode = null): Session
+ public function get(string $token, string|null $mode = null): Session
{
return $this->cache[$token] ??= new Session(
$this,
diff --git a/public/kirby/src/Toolkit/A.php b/public/kirby/src/Toolkit/A.php
index 1970cc9..d8ac7a2 100644
--- a/public/kirby/src/Toolkit/A.php
+++ b/public/kirby/src/Toolkit/A.php
@@ -508,7 +508,7 @@ class A
) {
$merged[] = $value;
- // recursively merge the two array values
+ // recursively merge the two array values
} elseif (
is_array($value) === true &&
isset($merged[$key]) === true &&
@@ -516,7 +516,7 @@ class A
) {
$merged[$key] = static::merge($merged[$key], $value, $mode);
- // simply overwrite with the value from the second array
+ // simply overwrite with the value from the second array
} else {
$merged[$key] = $value;
}
diff --git a/public/kirby/src/Toolkit/Collection.php b/public/kirby/src/Toolkit/Collection.php
index 7c9fa16..a962bcb 100644
--- a/public/kirby/src/Toolkit/Collection.php
+++ b/public/kirby/src/Toolkit/Collection.php
@@ -198,7 +198,7 @@ class Collection extends Iterator implements Countable
* @param array|null $data
* @return array|$this
*/
- public function data(array $data = null)
+ public function data(array|null $data = null)
{
if ($data === null) {
return $this->data;
@@ -775,7 +775,7 @@ class Collection extends Iterator implements Countable
* @param bool $unique
* @return array
*/
- public function pluck(string $field, string $split = null, bool $unique = false): array
+ public function pluck(string $field, string|null $split = null, bool $unique = false): array
{
$result = [];
@@ -956,7 +956,7 @@ class Collection extends Iterator implements Countable
* @param int|null $limit The optional number of elements to return
* @return $this|static
*/
- public function slice(int $offset = 0, int $limit = null)
+ public function slice(int $offset = 0, int|null $limit = null)
{
if ($offset === 0 && $limit === null) {
return $this;
@@ -1027,7 +1027,7 @@ class Collection extends Iterator implements Countable
} elseif ($arg === SORT_DESC || $argLower === 'desc') {
$fields[$currentField]['direction'] = SORT_DESC;
- // other string: the field name
+ // other string: the field name
} elseif (is_string($arg) === true) {
$values = [];
@@ -1041,7 +1041,7 @@ class Collection extends Iterator implements Countable
$fields[] = ['field' => $arg, 'values' => $values];
- // callable: custom field values
+ // callable: custom field values
} elseif (is_callable($arg) === true) {
$values = [];
@@ -1055,7 +1055,7 @@ class Collection extends Iterator implements Countable
$fields[] = ['field' => null, 'values' => $values];
- // flags
+ // flags
} else {
$fields[$currentField]['flags'] = $arg;
}
@@ -1126,7 +1126,7 @@ class Collection extends Iterator implements Countable
* @param \Closure|null $map
* @return array
*/
- public function toArray(Closure $map = null): array
+ public function toArray(Closure|null $map = null): array
{
if ($map !== null) {
return array_map($map, $this->data);
@@ -1163,7 +1163,7 @@ class Collection extends Iterator implements Countable
* @param Closure|null $map
* @return array
*/
- public function values(Closure $map = null): array
+ public function values(Closure|null $map = null): array
{
$data = $map === null ? $this->data : array_map($map, $this->data);
return array_values($data);
@@ -1181,7 +1181,7 @@ class Collection extends Iterator implements Countable
* @param \Closure|null $fallback
* @return mixed
*/
- public function when($condition, Closure $callback, Closure $fallback = null)
+ public function when($condition, Closure $callback, Closure|null $fallback = null)
{
if ($condition) {
return $callback->call($this, $condition);
diff --git a/public/kirby/src/Toolkit/Facade.php b/public/kirby/src/Toolkit/Facade.php
index b1547ec..04e9e15 100644
--- a/public/kirby/src/Toolkit/Facade.php
+++ b/public/kirby/src/Toolkit/Facade.php
@@ -23,7 +23,7 @@ abstract class Facade
/**
* Proxy for all public instance calls
*/
- public static function __callStatic(string $method, array $args = null)
+ public static function __callStatic(string $method, array|null $args = null)
{
return static::instance()->$method(...$args);
}
diff --git a/public/kirby/src/Toolkit/Html.php b/public/kirby/src/Toolkit/Html.php
index 56c4ed8..9170c67 100644
--- a/public/kirby/src/Toolkit/Html.php
+++ b/public/kirby/src/Toolkit/Html.php
@@ -405,7 +405,7 @@ class Html extends Xml
string $name,
array|string|null $content = '',
array $attr = [],
- string $indent = null,
+ string|null $indent = null,
int $level = 0
): string {
// treat an explicit `null` value as an empty tag
diff --git a/public/kirby/src/Toolkit/I18n.php b/public/kirby/src/Toolkit/I18n.php
index 0c790de..793072c 100644
--- a/public/kirby/src/Toolkit/I18n.php
+++ b/public/kirby/src/Toolkit/I18n.php
@@ -78,7 +78,7 @@ class I18n
/**
* Formats a number
*/
- public static function formatNumber(int|float $number, string $locale = null): string
+ public static function formatNumber(int|float $number, string|null $locale = null): string
{
$locale ??= static::locale();
$formatter = static::decimalNumberFormatter($locale);
@@ -108,7 +108,7 @@ class I18n
*/
public static function template(
string $key,
- string|array $fallback = null,
+ string|array|null $fallback = null,
array|null $replace = null,
string|null $locale = null
): string {
@@ -130,8 +130,8 @@ class I18n
*/
public static function translate(
string|array|null $key,
- string|array $fallback = null,
- string $locale = null
+ string|array|null $fallback = null,
+ string|null $locale = null
): string|array|Closure|null {
// use current locale if no specific is passed
$locale ??= static::locale();
@@ -242,7 +242,7 @@ class I18n
* by locale. If the translation does not exist
* yet, the loader will try to load it, if defined.
*/
- public static function translation(string $locale = null): array
+ public static function translation(string|null $locale = null): array
{
$locale ??= static::locale();
@@ -304,7 +304,7 @@ class I18n
public static function translateCount(
string $key,
int $count,
- string $locale = null,
+ string|null $locale = null,
bool $formatNumber = true
) {
$locale ??= static::locale();
diff --git a/public/kirby/src/Toolkit/Properties.php b/public/kirby/src/Toolkit/Properties.php
index 8ab1a77..64575ba 100644
--- a/public/kirby/src/Toolkit/Properties.php
+++ b/public/kirby/src/Toolkit/Properties.php
@@ -96,7 +96,7 @@ trait Properties
}
}
- protected function setProperties($props, array $keys = null)
+ protected function setProperties($props, array|null $keys = null)
{
foreach (get_object_vars($this) as $name => $default) {
if ($name === 'propertyData') {
diff --git a/public/kirby/src/Toolkit/Silo.php b/public/kirby/src/Toolkit/Silo.php
index d377dcc..ace941b 100644
--- a/public/kirby/src/Toolkit/Silo.php
+++ b/public/kirby/src/Toolkit/Silo.php
@@ -30,7 +30,7 @@ class Silo
return static::$data;
}
- public static function get(string|array $key = null, $default = null)
+ public static function get(string|array|null $key = null, $default = null)
{
if ($key === null) {
return static::$data;
@@ -42,7 +42,7 @@ class Silo
/**
* Removes an item from the data array
*/
- public static function remove(string $key = null): array
+ public static function remove(string|null $key = null): array
{
// reset the entire array
if ($key === null) {
diff --git a/public/kirby/src/Toolkit/Str.php b/public/kirby/src/Toolkit/Str.php
index 73fdbf6..0a4dde4 100644
--- a/public/kirby/src/Toolkit/Str.php
+++ b/public/kirby/src/Toolkit/Str.php
@@ -263,7 +263,7 @@ class Str
* Returns everything between two strings from the first occurrence of a given string
*/
public static function between(
- string $string = null,
+ string|null $string,
string $start,
string $end
): string {
@@ -275,7 +275,7 @@ class Str
*
* @param string $value The string to convert
*/
- public static function camel(string $value = null): string
+ public static function camel(string|null $value = null): string
{
return lcfirst(static::studly($value));
}
@@ -286,7 +286,7 @@ class Str
*
* @param string $value The string to convert
*/
- public static function camelToKebab(string $value = null): string
+ public static function camelToKebab(string|null $value = null): string
{
return static::lower(preg_replace('!([a-z0-9])([A-Z])!', '$1-$2', $value));
}
@@ -295,7 +295,7 @@ class Str
* Checks if a str contains another string
*/
public static function contains(
- string $string = null,
+ string|null $string,
string $needle,
bool $caseInsensitive = false
): bool {
@@ -316,7 +316,7 @@ class Str
*/
public static function date(
int|null $time = null,
- string|IntlDateFormatter $format = null,
+ string|IntlDateFormatter|null $format = null,
string|null $handler = null
): string|int|false {
if (is_null($format) === true) {
@@ -365,7 +365,7 @@ class Str
public static function convert(
string $string,
string $targetEncoding,
- string $sourceEncoding = null
+ string|null $sourceEncoding = null
): string {
// detect the source encoding if not passed as third argument
$sourceEncoding ??= static::encoding($string);
@@ -414,7 +414,7 @@ class Str
* Checks if a string ends with the passed needle
*/
public static function endsWith(
- string $string = null,
+ string|null $string,
string $needle,
bool $caseInsensitive = false
): bool {
@@ -574,7 +574,7 @@ class Str
/**
* Convert a string to kebab case.
*/
- public static function kebab(string $value = null): string
+ public static function kebab(string|null $value = null): string
{
return static::snake($value, '-');
}
@@ -582,7 +582,7 @@ class Str
/**
* Convert a kebab case string to camel case.
*/
- public static function kebabToCamel(string $value = null): string
+ public static function kebabToCamel(string|null $value = null): string
{
return ucfirst(preg_replace_callback(
'/-(.)/',
@@ -594,7 +594,7 @@ class Str
/**
* A UTF-8 safe version of strlen()
*/
- public static function length(string $string = null): int
+ public static function length(string|null $string = null): int
{
return mb_strlen($string ?? '', 'UTF-8');
}
@@ -602,7 +602,7 @@ class Str
/**
* A UTF-8 safe version of strtolower()
*/
- public static function lower(string $string = null): string
+ public static function lower(string|null $string = null): string
{
return mb_strtolower($string ?? '', 'UTF-8');
}
@@ -707,7 +707,7 @@ class Str
* @throws \Kirby\Exception\InvalidArgumentException for empty $needle
*/
public static function position(
- string $string = null,
+ string|null $string,
string $needle,
bool $caseInsensitive = false
): int|false {
@@ -739,7 +739,7 @@ class Str
* @param string $type Pool type (type of allowed characters)
*/
public static function random(
- int $length = null,
+ int|null $length = null,
string $type = 'alphaNum'
): string|false {
$length ??= random_int(5, 10);
@@ -967,7 +967,7 @@ class Str
* @return string The filled-in and partially escaped string
*/
public static function safeTemplate(
- string $string = null,
+ string|null $string = null,
array $data = [],
array $options = []
): string {
@@ -1024,7 +1024,7 @@ class Str
* @return string The shortened string
*/
public static function short(
- string $string = null,
+ string|null $string = null,
int $length = 0,
string $appendix = '…'
): string {
@@ -1129,9 +1129,9 @@ class Str
* @return string The safe string
*/
public static function slug(
- string $string = null,
- string $separator = null,
- string $allowed = null,
+ string|null $string = null,
+ string|null $separator = null,
+ string|null $allowed = null,
int|false $maxlength = 128
): string {
$separator ??= static::$defaults['slug']['separator'];
@@ -1176,7 +1176,7 @@ class Str
* Convert a string to snake case.
*/
public static function snake(
- string $value = null,
+ string|null $value = null,
string $delimiter = '_'
): string {
if (ctype_lower($value) === false) {
@@ -1230,7 +1230,7 @@ class Str
* Checks if a string starts with the passed needle
*/
public static function startsWith(
- string $string = null,
+ string|null $string,
string $needle,
bool $caseInsensitive = false
): bool {
@@ -1247,7 +1247,7 @@ class Str
*
* @param string $value The string to convert
*/
- public static function studly(string $value = null): string
+ public static function studly(string|null $value = null): string
{
$value = str_replace(['-', '_'], ' ', $value);
$value = ucwords($value);
@@ -1258,9 +1258,9 @@ class Str
* A UTF-8 safe version of substr()
*/
public static function substr(
- string $string = null,
+ string|null $string = null,
int $start = 0,
- int $length = null
+ int|null $length = null
): string {
return mb_substr($string ?? '', $start, $length, 'UTF-8');
}
@@ -1287,7 +1287,7 @@ class Str
* @return string The filled-in string
*/
public static function template(
- string $string = null,
+ string|null $string = null,
array $data = [],
array $options = []
): string {
@@ -1384,7 +1384,7 @@ class Str
/**
* A UTF-8 safe version of ucfirst()
*/
- public static function ucfirst(string $string = null): string
+ public static function ucfirst(string|null $string = null): string
{
$first = static::substr($string, 0, 1);
$rest = static::substr($string, 1);
@@ -1394,7 +1394,7 @@ class Str
/**
* A UTF-8 safe version of ucwords()
*/
- public static function ucwords(string $string = null): string
+ public static function ucwords(string|null $string = null): string
{
return mb_convert_case($string ?? '', MB_CASE_TITLE, 'UTF-8');
}
@@ -1409,7 +1409,7 @@ class Str
*
*
*/
- public static function unhtml(string $string = null): string
+ public static function unhtml(string|null $string = null): string
{
return Html::decode($string);
}
@@ -1434,7 +1434,7 @@ class Str
/**
* A UTF-8 safe version of strotoupper()
*/
- public static function upper(string $string = null): string
+ public static function upper(string|null $string = null): string
{
return mb_strtoupper($string ?? '', 'UTF-8');
}
@@ -1472,7 +1472,7 @@ class Str
* typographical widows at the end of a paragraph –
* that's a single word in the last line
*/
- public static function widont(string $string = null): string
+ public static function widont(string|null $string = null): string
{
// make sure $string is string
$string ??= '';
@@ -1504,7 +1504,7 @@ class Str
public static function wrap(
string $string,
string $before,
- string $after = null
+ string|null $after = null
): string {
return $before . $string . ($after ?? $before);
}
diff --git a/public/kirby/src/Toolkit/V.php b/public/kirby/src/Toolkit/V.php
index 1170542..5d5ce63 100644
--- a/public/kirby/src/Toolkit/V.php
+++ b/public/kirby/src/Toolkit/V.php
@@ -306,7 +306,7 @@ V::$validators = [
* Pass an operator as second argument and another date as
* third argument to compare them.
*/
- 'date' => function (string|null $value, string $operator = null, string $test = null): bool {
+ 'date' => function (string|null $value, string|null $operator = null, string|null $test = null): bool {
// make sure $value is a string
$value ??= '';
@@ -474,28 +474,28 @@ V::$validators = [
/**
* Checks if the number of characters in the value equals or is below the given maximum
*/
- 'maxLength' => function (string $value = null, $max): bool {
+ 'maxLength' => function (string|null $value, $max): bool {
return Str::length(trim($value)) <= $max;
},
/**
* Checks if the number of characters in the value equals or is greater than the given minimum
*/
- 'minLength' => function (string $value = null, $min): bool {
+ 'minLength' => function (string|null $value, $min): bool {
return Str::length(trim($value)) >= $min;
},
/**
* Checks if the number of words in the value equals or is below the given maximum
*/
- 'maxWords' => function (string $value = null, $max): bool {
+ 'maxWords' => function (string|null $value, $max): bool {
return V::max(explode(' ', trim($value)), $max) === true;
},
/**
* Checks if the number of words in the value equals or is below the given maximum
*/
- 'minWords' => function (string $value = null, $min): bool {
+ 'minWords' => function (string|null $value, $min): bool {
return V::min(explode(' ', trim($value)), $min) === true;
},
@@ -628,7 +628,7 @@ V::$validators = [
/**
* Checks for a valid Uuid, optionally for specific model type
*/
- 'uuid' => function (string $value, string $type = null): bool {
+ 'uuid' => function (string $value, string|null $type = null): bool {
return Uuid::is($value, $type);
}
];
diff --git a/public/kirby/src/Toolkit/Xml.php b/public/kirby/src/Toolkit/Xml.php
index e140d5f..72a9855 100644
--- a/public/kirby/src/Toolkit/Xml.php
+++ b/public/kirby/src/Toolkit/Xml.php
@@ -373,7 +373,7 @@ class Xml
string $name,
array|string|null $content = '',
array $attr = [],
- string $indent = null,
+ string|null $indent = null,
int $level = 0
): string {
$attr = static::attr($attr);
diff --git a/public/kirby/src/Uuid/Uri.php b/public/kirby/src/Uuid/Uri.php
index 33295c7..34faf1d 100644
--- a/public/kirby/src/Uuid/Uri.php
+++ b/public/kirby/src/Uuid/Uri.php
@@ -61,7 +61,7 @@ class Uri extends BaseUri
* Returns the ID part of the UUID string
* (and sets it when new one passed)
*/
- public function host(string $host = null): string|null
+ public function host(string|null $host = null): string|null
{
if ($host !== null) {
return $this->host = $host;
diff --git a/src/assets/css/index.css b/src/assets/css/index.css
index 631352d..c3d67b4 100644
--- a/src/assets/css/index.css
+++ b/src/assets/css/index.css
@@ -18,6 +18,7 @@
@import 'src/2.blocks.badge.css';
@import 'src/2.blocks.button.css';
@import 'src/2.blocks.card.css';
+@import 'src/2.blocks.comments.css';
@import 'src/2.blocks.design-to-light.css';
@import 'src/2.blocks.dialog.css';
@import 'src/2.blocks.header.css';
diff --git a/src/assets/css/src/2.blocks.comments.css b/src/assets/css/src/2.blocks.comments.css
new file mode 100644
index 0000000..27cc823
--- /dev/null
+++ b/src/assets/css/src/2.blocks.comments.css
@@ -0,0 +1,216 @@
+/* COMMENTS BLOCK */
+
+#toggle-comments {
+ position: absolute;
+ right: var(--space-16);
+ bottom: var(--space-16);
+ padding: 0.625rem;
+}
+
+#comments-container {
+ background-color: black;
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 4.5rem;
+ width: var(--dialog-comments-w);
+ padding: var(--space-24) var(--space-32);
+}
+
+.comments {
+ scroll-behavior: smooth;
+ overflow-y: auto;
+ height: calc(100% - 3.5rem);
+ margin-bottom: 1rem;
+ margin-right: -2rem;
+ padding-right: 2rem;
+}
+
+.comments.empty::after {
+ content: "Partagez vos idées en ajoutant des commentaires";
+ height: 100%;
+ display: grid;
+ place-items: center;
+ text-align: center;
+ max-width: 24ch;
+ margin: auto;
+ font-size: var(--text-sm);
+ color: var(--color-grey-400);
+}
+.comments.empty::before {
+ --icon-size: 1.25rem;
+ --icon-color: var(--color-white);
+ content: "";
+ display: block;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, calc(-50% - 4.5rem));
+ width: var(--icon-size);
+ height: var(--icon-size);
+ background: var(--icon-color, currentColor);
+ mask-repeat: no-repeat;
+ mask-position: center;
+ mask-size: var(--icon-size);
+ mask-image: var(--icon-comment);
+}
+
+#new-comment {
+ position: absolute;
+ bottom: var(--space-24);
+ left: var(--space-32);
+ right: var(--space-32);
+}
+#new-comment [data-icon] {
+ --column-gap: var(--space-12);
+ font-weight: 500;
+}
+
+#comments-container form {
+ --flow-space: 0.5rem;
+ flex-direction: column;
+ position: -webkit-sticky;
+ position: sticky;
+ bottom: 5.5rem;
+ background: #333;
+}
+#comments-container textarea:not(.comment__body) {
+ position: sticky;
+ bottom: 0;
+ margin: 0;
+ background: none;
+ padding: 0;
+ color: var(--color-white);
+}
+#comments-container textarea {
+ resize: none;
+}
+#comments-container textarea:focus {
+ outline: none;
+}
+::placeholder {
+ color: var(--color-white-50);
+}
+#comments-container form footer {
+ gap: var(--space-12);
+}
+#comments-container form footer > * {
+ flex-grow: 1;
+}
+
+.track.waiting-comment,
+.track.waiting-comment .drag-zone,
+.vpv-pages-inner-container.waiting-comment .page-inner-container,
+.vpv-pages-inner-container.waiting-comment .vpv-text-layer-text,
+.vpv-pages-inner-container.waiting-comment .vpv-text-layer-wrapper {
+ cursor: var(--icon-comment-cursor) -2 28, cell !important;
+}
+
+.comment-marker {
+ --marker-size: 1.75rem;
+ position: absolute;
+ display: block;
+ width: var(--marker-size);
+ height: var(--marker-size);
+ background: var(--icon-comment-default) no-repeat center / contain;
+ scroll-margin-block-start: 4rem;
+ cursor: pointer !important;
+ z-index: 999;
+ overflow: visible;
+ transition: transform 0.1s ease-out;
+ transform-origin: bottom left;
+ margin-left: calc(var(--marker-size) * -0.025);
+ margin-top: calc(var(--marker-size) / -1.025);
+}
+.comment-marker:hover,
+.comment-marker.big {
+ transform: scale(1.1);
+}
+.comment-marker.active,
+.comment-marker:focus {
+ background-image: var(--icon-comment-focus);
+}
+
+.comments > .comment:not([data-opened="true"]) {
+ cursor: pointer;
+}
+.comment {
+ --flow-space: var(--space-12);
+ font-size: var(--text-sm);
+ border: var(--border);
+ border-width: 2px;
+ border-radius: var(--rounded-lg);
+ padding: var(--space-12);
+ color: var(--color-grey-400);
+ transition: border-color 0.1s ease-in-out;
+}
+.comment.highlight {
+ border-color: #fff;
+}
+
+.comment header p {
+ display: flex;
+ gap: var(--space-8);
+}
+.comment header strong,
+.comment footer {
+ font-weight: 500;
+ color: var(--color-white);
+}
+.comment header time {
+ color: var(--color-primary);
+ font-weight: 500;
+ margin-left: auto;
+}
+.comment[data-status="unread"] {
+ background: var(--color-white);
+ border-color: var(--color-white);
+ color: var(--color-grey-700);
+}
+.comment[data-status="unread"] header p > :first-child::before {
+ content: "";
+ display: inline-block;
+ width: 0.375rem;
+ height: 0.375rem;
+ border-radius: 50%;
+ background: var(--color-primary);
+ margin-right: var(--space-8);
+ margin-bottom: 0.075em;
+}
+.comment[data-status="unread"] header strong,
+.comment[data-status="unread"] footer {
+ color: var(--color-black);
+}
+.comment[data-status="unread"] header time {
+ color: var(--color-primary);
+}
+.comment[data-opened="true"] {
+ border-color: transparent;
+}
+.comment[data-opened="true"] .comment__replies {
+ color: var(--color-primary);
+}
+.comment__id,
+.comment__page,
+.comment__date {
+ flex-shrink: 0;
+}
+.comment__body {
+ width: 100%;
+ padding: 0;
+ margin-bottom: 0;
+ color: var(--color-grey-400);
+ font: inherit;
+ letter-spacing: inherit;
+}
+.comment__ctas > * {
+ --border-color: transparent;
+ margin-right: var(--space-4);
+}
+.comment__edit-ctas {
+ display: flex;
+ gap: var(--space-12);
+}
+.comment__edit-ctas > * {
+ flex-grow: 1;
+}
diff --git a/src/components/comments/Comment.vue b/src/components/comments/Comment.vue
index 5803e9b..f1b5ceb 100644
--- a/src/components/comments/Comment.vue
+++ b/src/components/comments/Comment.vue
@@ -231,89 +231,3 @@ function unhightlightCorrespondingMarker() {
correspondingMarker.classList.remove("big");
}
-
-
diff --git a/src/components/comments/Comments.vue b/src/components/comments/Comments.vue
index 7b576c8..5f3e15b 100644
--- a/src/components/comments/Comments.vue
+++ b/src/components/comments/Comments.vue
@@ -329,6 +329,7 @@ function showCorrespondingView() {
);
}
+<<<<<<< HEAD
+=======
+>>>>>>> comments