Kaynağa Gözat

Merge branch 'master' into b5-message-height

El RIDO 1 yıl önce
ebeveyn
işleme
7d6a70a24e

+ 4 - 0
.devcontainer/postCreateCommand.sh

@@ -1,5 +1,9 @@
 #!/bin/sh
 #!/bin/sh
 
 
+export PATH="$PATH:$HOME/.composer/vendor/bin"
+ln -s ./conf.sample.php cfg/conf.php
 composer install --no-dev --optimize-autoloader
 composer install --no-dev --optimize-autoloader
+
 sudo chmod a+x "$(pwd)" && sudo rm -rf /var/www/html && sudo ln -s "$(pwd)" /var/www/html
 sudo chmod a+x "$(pwd)" && sudo rm -rf /var/www/html && sudo ln -s "$(pwd)" /var/www/html
+
 npm install --global nyc
 npm install --global nyc

+ 2 - 1
CHANGELOG.md

@@ -2,10 +2,11 @@
 
 
 ## 1.7.5 (not yet released)
 ## 1.7.5 (not yet released)
 * ADDED: Allow non persistent SQL connections, if configured (#1394)
 * ADDED: Allow non persistent SQL connections, if configured (#1394)
+* ADDED: Show a button (that redirects to the `basepath` URL) inside the alert after a paste is deleted
 * CHANGED: Tweaked page footer of the `bootstrap5` template (#1392)
 * CHANGED: Tweaked page footer of the `bootstrap5` template (#1392)
 * CHANGED: Simpler PostgreSQL table lookup query (#1361)
 * CHANGED: Simpler PostgreSQL table lookup query (#1361)
 * CHANGED: SRI hashes are now configurable, no longer hardcoded in templates (#1365)
 * CHANGED: SRI hashes are now configurable, no longer hardcoded in templates (#1365)
-* CHANGED: Upgrading libraries to: DOMpurify 3.1.6
+* CHANGED: Upgrading libraries to: DOMpurify 3.1.7
 
 
 ## 1.7.4 (2024-07-09)
 ## 1.7.4 (2024-07-09)
 * CHANGED: Saving markdown pastes uses `.md` extension instead of `.txt` (#1293)
 * CHANGED: Saving markdown pastes uses `.md` extension instead of `.txt` (#1293)

+ 2 - 2
bin/migrate

@@ -200,9 +200,9 @@ Options:
   -h, --help       displays this help message
   -h, --help       displays this help message
   -n               dry run, do not copy data
   -n               dry run, do not copy data
   -v               be verbose
   -v               be verbose
-  <srcconfdir>     use storage backend configration from conf.php found in
+  <srcconfdir>     use storage backend configuration from conf.php found in
                    this directory as source
                    this directory as source
-  <dstconfdir>     optionally, use storage backend configration from conf.php
+  <dstconfdir>     optionally, use storage backend configuration from conf.php
                    found in this directory as destination; defaults to:
                    found in this directory as destination; defaults to:
                    " . PATH . "cfg" . DIRECTORY_SEPARATOR . "conf.php
                    " . PATH . "cfg" . DIRECTORY_SEPARATOR . "conf.php
 ");
 ");

+ 2 - 2
cfg/conf.sample.php

@@ -259,7 +259,7 @@ dir = PATH "data"
 ;version = "latest"
 ;version = "latest"
 ;bucket = "my-bucket"
 ;bucket = "my-bucket"
 
 
-[yourls]
+;[yourls]
 ; When using YOURLS as a "urlshortener" config item:
 ; When using YOURLS as a "urlshortener" config item:
 ; - By default, "urlshortener" will point to the YOURLS API URL, with or without
 ; - By default, "urlshortener" will point to the YOURLS API URL, with or without
 ;   credentials, and will be visible in public on the PrivateBin web page.
 ;   credentials, and will be visible in public on the PrivateBin web page.
@@ -280,4 +280,4 @@ dir = PATH "data"
 ; Subresource integrity (SRI) hashes used in template files. Uncomment and set
 ; Subresource integrity (SRI) hashes used in template files. Uncomment and set
 ; these for all js files used. See:
 ; these for all js files used. See:
 ; https://github.com/PrivateBin/PrivateBin/wiki/FAQ#user-content-how-to-make-privatebin-work-when-i-have-changed-some-javascript-files
 ; https://github.com/PrivateBin/PrivateBin/wiki/FAQ#user-content-how-to-make-privatebin-work-when-i-have-changed-some-javascript-files
-;privatebin.js = sha512-[…]
+;js/privatebin.js = "sha512-[…]"

+ 8 - 0
doc/Running Unit Tests.md

@@ -43,6 +43,14 @@ Example for Debian and Ubuntu:
 $ sudo apt install phpunit php-gd php-sqlite3 php-xdebug
 $ sudo apt install phpunit php-gd php-sqlite3 php-xdebug
 ```
 ```
 
 
+Because the unit tests depend on this, you also need to install the optional. Otherwise they won't run:
+```console
+composer require google/cloud-storage
+```
+
+If you do this and want to develop further, please go into `.gitignore` and adjust it to ignore the whole
+vendor directory. Otherwise your `git status` will be filled with lot's of unrelated PHP files.
+
 To run the tests, change into the `tst` directory and run phpunit:
 To run the tests, change into the `tst` directory and run phpunit:
 
 
 ```console
 ```console

+ 2 - 1
i18n/ar.json

@@ -219,5 +219,6 @@
     "Yes, see it": "نعم، حمله",
     "Yes, see it": "نعم، حمله",
     "Dark Mode": "الوضع الداكن",
     "Dark Mode": "الوضع الداكن",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/bg.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Yes, see it",
     "Yes, see it": "Yes, see it",
     "Dark Mode": "Dark Mode",
     "Dark Mode": "Dark Mode",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/ca.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Yes, see it",
     "Yes, see it": "Yes, see it",
     "Dark Mode": "Dark Mode",
     "Dark Mode": "Dark Mode",
     "Error compressing paste, due to missing WebAssembly support.": "Error de compressió de la nota, no hi ha suport de WebAssembly.",
     "Error compressing paste, due to missing WebAssembly support.": "Error de compressió de la nota, no hi ha suport de WebAssembly.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/co.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Iè, fighjallu",
     "Yes, see it": "Iè, fighjallu",
     "Dark Mode": "Modu scuru",
     "Dark Mode": "Modu scuru",
     "Error compressing paste, due to missing WebAssembly support.": "Sbagliu durante a cumpressione di l’appiccicu, perchè WebAssembly ùn hè micca accettatu.",
     "Error compressing paste, due to missing WebAssembly support.": "Sbagliu durante a cumpressione di l’appiccicu, perchè WebAssembly ùn hè micca accettatu.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Sbagliu durante a scumpressione di l’appiccicu, perchè u vostru navigatore ùn accetteghja micca WebAssembly. Ci vole à impiegà un altru navigatore per affissà st’appiccicu."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Sbagliu durante a scumpressione di l’appiccicu, perchè u vostru navigatore ùn accetteghja micca WebAssembly. Ci vole à impiegà un altru navigatore per affissà st’appiccicu.",
+    "Start over": "Principià torna"
 }
 }

+ 121 - 120
i18n/cs.json

@@ -1,34 +1,34 @@
 {
 {
     "PrivateBin": "PrivateBin",
     "PrivateBin": "PrivateBin",
-    "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s je minimalistický open source 'pastebin' server, který neanalyzuje vložená data. Data jsou šifrována %sv prohlížeči%s pomocí 256 bitů AES.",
-    "More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Více informací na <a href=\"https://privatebin.info/\">stránce projetu</a>.",
+    "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s je minimalistický open source 'pastebin' server, který nemá přístup ke vloženým datům. Data jsou šifrována %sv prohlížeči%s pomocí 256bitového AES.",
+    "More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Více informací na <a href=\"https://privatebin.info/\">stránce projektu</a>.",
     "Because ignorance is bliss": "Protože nevědomost je sladká",
     "Because ignorance is bliss": "Protože nevědomost je sladká",
     "Paste does not exist, has expired or has been deleted.": "Vložený text neexistuje, expiroval nebo byl odstraněn.",
     "Paste does not exist, has expired or has been deleted.": "Vložený text neexistuje, expiroval nebo byl odstraněn.",
     "%s requires php %s or above to work. Sorry.": "%s vyžaduje php %s nebo vyšší. Lituji.",
     "%s requires php %s or above to work. Sorry.": "%s vyžaduje php %s nebo vyšší. Lituji.",
-    "%s requires configuration section [%s] to be present in configuration file.": "%s vyžaduje, aby byla v konfiguračním souboru přítomna sekce [%s].",
+    "%s requires configuration section [%s] to be present in configuration file.": "%s vyžaduje, aby byla v konfiguračním souboru přítomna sekce [%s].",
     "Please wait %d seconds between each post.": [
     "Please wait %d seconds between each post.": [
-        "Počet sekund do dalšího příspěvku: %d.",
-        "Počet sekund do dalšího příspěvku: %d.",
-        "Počet sekund do dalšího příspěvku: %d.",
-        "Počet sekund do dalšího příspěvku: %d.",
-        "Počet sekund do dalšího příspěvku: %d.",
-        "Počet sekund do dalšího příspěvku: %d."
+        "Vyčkejte prosím %d sekundu mezi následujícími příspěvky.",
+        "Vyčkejte prosím %d sekundy mezi následujícími příspěvky.",
+        "Vyčkejte prosím %d sekund mezi následujícími příspěvky.",
+        "Vyčkejte prosím %d sekund mezi následujícími příspěvky.",
+        "Vyčkejte prosím %d sekund mezi následujícími příspěvky.",
+        "Vyčkejte prosím %d sekund mezi následujícími příspěvky."
     ],
     ],
     "Paste is limited to %s of encrypted data.": "Příspěvek je limitován na %s šífrovaných dat",
     "Paste is limited to %s of encrypted data.": "Příspěvek je limitován na %s šífrovaných dat",
     "Invalid data.": "Chybná data.",
     "Invalid data.": "Chybná data.",
     "You are unlucky. Try again.": "Lituji, zkuste to znovu.",
     "You are unlucky. Try again.": "Lituji, zkuste to znovu.",
-    "Error saving comment. Sorry.": "Chyba při ukládání komentáře.",
-    "Error saving paste. Sorry.": "Chyba při ukládání příspěvku.",
-    "Invalid paste ID.": "Chybně vložené ID.",
-    "Paste is not of burn-after-reading type.": "Příspěvek není nastaven na smazaní po přečtení.",
+    "Error saving comment. Sorry.": "Chyba při ukládání komentáře. Promiňte.",
+    "Error saving paste. Sorry.": "Chyba při ukládání příspěvku. Promiňte.",
+    "Invalid paste ID.": "Chybné ID příspěvku.",
+    "Paste is not of burn-after-reading type.": "Příspěvek není nastaven na smazání po přečtení.",
     "Wrong deletion token. Paste was not deleted.": "Chybný token pro odstranění. Příspěvek nebyl smazán.",
     "Wrong deletion token. Paste was not deleted.": "Chybný token pro odstranění. Příspěvek nebyl smazán.",
     "Paste was properly deleted.": "Příspěvek byl řádně smazán.",
     "Paste was properly deleted.": "Příspěvek byl řádně smazán.",
     "JavaScript is required for %s to work. Sorry for the inconvenience.": "Pro fungování %s je vyžadován JavaScript. Omlouváme se za nepříjemnosti.",
     "JavaScript is required for %s to work. Sorry for the inconvenience.": "Pro fungování %s je vyžadován JavaScript. Omlouváme se za nepříjemnosti.",
-    "%s requires a modern browser to work.": "%%s requires a modern browser to work.",
+    "%s requires a modern browser to work.": "Pro fungování %s je vyžadován moderní prohlížeč.",
     "New": "Nový",
     "New": "Nový",
     "Create": "Vytvořit",
     "Create": "Vytvořit",
     "Clone": "Klonovat",
     "Clone": "Klonovat",
-    "Raw text": "Pouze Text",
+    "Raw text": "Čistý text",
     "Expires": "Expirace",
     "Expires": "Expirace",
     "Burn after reading": "Po přečtení smazat",
     "Burn after reading": "Po přečtení smazat",
     "Open discussion": "Povolit komentáře",
     "Open discussion": "Povolit komentáře",
@@ -36,113 +36,113 @@
     "Discussion": "Komentáře",
     "Discussion": "Komentáře",
     "Toggle navigation": "Přepnout navigaci",
     "Toggle navigation": "Přepnout navigaci",
     "%d seconds": [
     "%d seconds": [
-        "%d sekuda",
-        "%d sekundy",
-        "%d sekund",
-        "%d sekund",
-        "%d sekund",
-        "%d sekund"
+        "%d sekunda",
+        "%d sekundy",
+        "%d sekund",
+        "%d sekund",
+        "%d sekund",
+        "%d sekund"
     ],
     ],
     "%d minutes": [
     "%d minutes": [
-        "%d minuta",
-        "%d minuty",
-        "%d minut",
-        "%d minut",
-        "%d minut",
-        "%d minut"
+        "%d minuta",
+        "%d minuty",
+        "%d minut",
+        "%d minut",
+        "%d minut",
+        "%d minut"
     ],
     ],
     "%d hours": [
     "%d hours": [
-        "%d hodina",
-        "%d hodiny",
-        "%d hodin",
-        "%d hodin",
-        "%d hodin",
-        "%d hodin"
+        "%d hodina",
+        "%d hodiny",
+        "%d hodin",
+        "%d hodin",
+        "%d hodin",
+        "%d hodin"
     ],
     ],
     "%d days": [
     "%d days": [
-        "%d den",
-        "%d dny",
-        "%d dní",
-        "%d dní",
-        "%d dní",
-        "%d dní"
+        "%d den",
+        "%d dny",
+        "%d dní",
+        "%d dní",
+        "%d dní",
+        "%d dní"
     ],
     ],
     "%d weeks": [
     "%d weeks": [
-        "%d týden",
-        "%d týdeny",
-        "%d týdnů",
-        "%d týdnů",
-        "%d týdnů",
-        "%d týdnů"
+        "%d týden",
+        "%d týdny",
+        "%d týdnů",
+        "%d týdnů",
+        "%d týdnů",
+        "%d týdnů"
     ],
     ],
     "%d months": [
     "%d months": [
-        "%d měsíc",
-        "%d měsíce",
-        "%d měsíců",
-        "%d měsíců",
-        "%d měsíců",
-        "%d měsíců"
+        "%d měsíc",
+        "%d měsíce",
+        "%d měsíců",
+        "%d měsíců",
+        "%d měsíců",
+        "%d měsíců"
     ],
     ],
     "%d years": [
     "%d years": [
-        "%d rok",
-        "%d roky",
-        "%d roků",
-        "%d roků",
-        "%d roků",
-        "%d roků"
+        "%d rok",
+        "%d roky",
+        "%d let",
+        "%d let",
+        "%d let",
+        "%d let"
     ],
     ],
     "Never": "Nikdy",
     "Never": "Nikdy",
-    "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Poznámka: Tato služba slouží k vyzkoušení: Data mohou být kdykoliv smazána. Při zneužití této služby zemřou koťátka.",
+    "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Poznámka: Toto je testovací služba: Data mohou být kdykoliv smazána. Při zneužití této služby zemřou koťátka.",
     "This document will expire in %d seconds.": [
     "This document will expire in %d seconds.": [
-        "Tento dokument expiruje za %d sekundu.",
-        "Tento dokument expiruje za %d sekundy.",
-        "Tento dokument expiruje za %d sekund.",
-        "Tento dokument expiruje za %d sekund.",
-        "Tento dokument expiruje za %d sekund.",
-        "Tento dokument expiruje za %d sekund."
+        "Tento dokument expiruje za %d sekundu.",
+        "Tento dokument expiruje za %d sekundy.",
+        "Tento dokument expiruje za %d sekund.",
+        "Tento dokument expiruje za %d sekund.",
+        "Tento dokument expiruje za %d sekund.",
+        "Tento dokument expiruje za %d sekund."
     ],
     ],
     "This document will expire in %d minutes.": [
     "This document will expire in %d minutes.": [
-        "Tento dokument expiruje za %d minutu.",
-        "Tento dokument expiruje za %d minuty.",
-        "Tento dokument expiruje za %d minut.",
-        "Tento dokument expiruje za %d minut.",
-        "Tento dokument expiruje za %d minut.",
-        "Tento dokument expiruje za %d minut."
+        "Tento dokument expiruje za %d minutu.",
+        "Tento dokument expiruje za %d minuty.",
+        "Tento dokument expiruje za %d minut.",
+        "Tento dokument expiruje za %d minut.",
+        "Tento dokument expiruje za %d minut.",
+        "Tento dokument expiruje za %d minut."
     ],
     ],
     "This document will expire in %d hours.": [
     "This document will expire in %d hours.": [
-        "Tento dokument expiruje za %d hodinu.",
-        "Tento dokument expiruje za %d hodiny.",
-        "Tento dokument expiruje za %d hodin.",
-        "Tento dokument expiruje za %d hodin.",
-        "Tento dokument expiruje za %d hodin.",
-        "Tento dokument expiruje za %d hodin."
+        "Tento dokument expiruje za %d hodinu.",
+        "Tento dokument expiruje za %d hodiny.",
+        "Tento dokument expiruje za %d hodin.",
+        "Tento dokument expiruje za %d hodin.",
+        "Tento dokument expiruje za %d hodin.",
+        "Tento dokument expiruje za %d hodin."
     ],
     ],
     "This document will expire in %d days.": [
     "This document will expire in %d days.": [
-        "Tento dokument expiruje za %d den.",
-        "Tento dokument expiruje za %d dny.",
-        "Tento dokument expiruje za %d dny.",
-        "Tento dokument expiruje za %d dny.",
-        "Tento dokument expiruje za %d dny.",
-        "Tento dokument expiruje za %d dny."
+        "Tento dokument expiruje za %d den.",
+        "Tento dokument expiruje za %d dny.",
+        "Tento dokument expiruje za %d dní.",
+        "Tento dokument expiruje za %d dní.",
+        "Tento dokument expiruje za %d dní.",
+        "Tento dokument expiruje za %d dní."
     ],
     ],
     "This document will expire in %d months.": [
     "This document will expire in %d months.": [
-        "Tento dokument expiruje za %d měsíc.",
-        "Tento dokument expiruje za %d měsíce.",
-        "Tento dokument expiruje za %d měsíců.",
-        "Tento dokument expiruje za %d měsíců.",
-        "Tento dokument expiruje za %d měsíců.",
-        "Tento dokument expiruje za %d měsíců."
+        "Tento dokument expiruje za %d měsíc.",
+        "Tento dokument expiruje za %d měsíce.",
+        "Tento dokument expiruje za %d měsíců.",
+        "Tento dokument expiruje za %d měsíců.",
+        "Tento dokument expiruje za %d měsíců.",
+        "Tento dokument expiruje za %d měsíců."
     ],
     ],
-    "Please enter the password for this paste:": "Zadejte prosím heslo:",
+    "Please enter the password for this paste:": "Zadejte prosím heslo k tomuto příspěvku:",
     "Could not decrypt data (Wrong key?)": "Nepodařilo se dešifrovat data (Špatný klíč?)",
     "Could not decrypt data (Wrong key?)": "Nepodařilo se dešifrovat data (Špatný klíč?)",
-    "Could not delete the paste, it was not stored in burn after reading mode.": "Nepodařilo se odstranit příspěvek, nebyl uložen v režimu smazání po přečtení.",
+    "Could not delete the paste, it was not stored in burn after reading mode.": "Nepodařilo se odstranit příspěvek, nebyl uložen v režimu smazání po přečtení.",
     "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "POUZE PRO VAŠE OČI. Nezavírejte toto okno, tuto zprávu nelze znovu zobrazit.",
     "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "POUZE PRO VAŠE OČI. Nezavírejte toto okno, tuto zprávu nelze znovu zobrazit.",
     "Could not decrypt comment; Wrong key?": "Nepodařilo se dešifrovat komentář; Špatný klíč?",
     "Could not decrypt comment; Wrong key?": "Nepodařilo se dešifrovat komentář; Špatný klíč?",
     "Reply": "Odpovědět",
     "Reply": "Odpovědět",
     "Anonymous": "Anonym",
     "Anonymous": "Anonym",
-    "Avatar generated from IP address": "Avatar vygenerován z IP adresy",
+    "Avatar generated from IP address": "Avatar vygenerován podle IP adresy",
     "Add comment": "Přidat komentář",
     "Add comment": "Přidat komentář",
-    "Optional nickname…": "Volitelný nickname…",
+    "Optional nickname…": "Nepovinná přezdívka…",
     "Post comment": "Odeslat komentář",
     "Post comment": "Odeslat komentář",
     "Sending comment…": "Odesílání komentáře…",
     "Sending comment…": "Odesílání komentáře…",
     "Comment posted.": "Komentář odeslán.",
     "Comment posted.": "Komentář odeslán.",
@@ -151,10 +151,10 @@
     "server error or not responding": "Chyba na serveru nebo server neodpovídá",
     "server error or not responding": "Chyba na serveru nebo server neodpovídá",
     "Could not post comment: %s": "Nelze odeslat komentář: %s",
     "Could not post comment: %s": "Nelze odeslat komentář: %s",
     "Sending paste…": "Odesílání příspěvku…",
     "Sending paste…": "Odesílání příspěvku…",
-    "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Váš link je <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Stiskněte [Ctrl]+[c] pro zkopírování)</span>",
+    "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Váš příspěvek je <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Stiskněte [Ctrl]+[c] pro zkopírování)</span>",
     "Delete data": "Odstranit data",
     "Delete data": "Odstranit data",
-    "Could not create paste: %s": "Nelze vytvořit příspěvek: %s",
-    "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nepodařilo se dešifrovat příspěvek: V adrese chybí dešifrovací klíč (Možnou příčinou může být URL shortener?)",
+    "Could not create paste: %s": "Nepodařilo se vytvořit příspěvek: %s",
+    "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nepodařilo se dešifrovat příspěvek: V adrese chybí dešifrovací klíč (Nepoužili jste přesměrovač nebo zkracovač URL, který maže části URL?)",
     "B": "B",
     "B": "B",
     "KiB": "KiB",
     "KiB": "KiB",
     "MiB": "MiB",
     "MiB": "MiB",
@@ -165,59 +165,60 @@
     "ZiB": "ZiB",
     "ZiB": "ZiB",
     "YiB": "YiB",
     "YiB": "YiB",
     "Format": "Formát",
     "Format": "Formát",
-    "Plain Text": "Prostý Text",
+    "Plain Text": "Prostý text",
     "Source Code": "Zdrojový kód",
     "Source Code": "Zdrojový kód",
     "Markdown": "Markdown",
     "Markdown": "Markdown",
     "Download attachment": "Stáhnout přílohu",
     "Download attachment": "Stáhnout přílohu",
-    "Cloned: '%s'": "Klonováno: '%s'",
-    "The cloned file '%s' was attached to this paste.": "Naklonovaný soubor '%s' byl připojen k tomuto příspěvku.",
+    "Cloned: '%s'": "Naklonováno: '%s'",
+    "The cloned file '%s' was attached to this paste.": "Naklonovaný soubor „%s“ byl připojen k tomuto příspěvku.",
     "Attach a file": "Připojit soubor",
     "Attach a file": "Připojit soubor",
-    "alternatively drag & drop a file or paste an image from the clipboard": "alternativně přetáhněte soubor nebo vložte obrázek ze schránky",
+    "alternatively drag & drop a file or paste an image from the clipboard": "případně přetáhněte soubor nebo vložte obrázek ze schránky",
     "File too large, to display a preview. Please download the attachment.": "Soubor je příliš velký pro zobrazení náhledu. Stáhněte si přílohu.",
     "File too large, to display a preview. Please download the attachment.": "Soubor je příliš velký pro zobrazení náhledu. Stáhněte si přílohu.",
     "Remove attachment": "Odstranit přílohu",
     "Remove attachment": "Odstranit přílohu",
     "Your browser does not support uploading encrypted files. Please use a newer browser.": "Váš prohlížeč nepodporuje nahrávání šifrovaných souborů. Použijte modernější verzi prohlížeče.",
     "Your browser does not support uploading encrypted files. Please use a newer browser.": "Váš prohlížeč nepodporuje nahrávání šifrovaných souborů. Použijte modernější verzi prohlížeče.",
     "Invalid attachment.": "Chybná příloha.",
     "Invalid attachment.": "Chybná příloha.",
-    "Options": "Volby",
+    "Options": "Možnosti",
     "Shorten URL": "Zkrátit URL",
     "Shorten URL": "Zkrátit URL",
     "Editor": "Editor",
     "Editor": "Editor",
     "Preview": "Náhled",
     "Preview": "Náhled",
-    "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s vyžaduje, aby PATH skončil s \"%s\". Aktualizujte PATH ve vašem souboru index.php.",
+    "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s vyžaduje, aby PATH končilo na „%s“. Aktualizujte PATH ve vašem souboru index.php.",
     "Decrypt": "Dešifrovat",
     "Decrypt": "Dešifrovat",
     "Enter password": "Zadejte heslo",
     "Enter password": "Zadejte heslo",
     "Loading…": "Načítání…",
     "Loading…": "Načítání…",
     "Decrypting paste…": "Dešifruji příspěvek…",
     "Decrypting paste…": "Dešifruji příspěvek…",
     "Preparing new paste…": "Připravuji nový příspěvek…",
     "Preparing new paste…": "Připravuji nový příspěvek…",
-    "In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "V případě, že tato zpráva nezmizí, se podívejte na <a href=\"%s\">tyto často kladené otázky pro řešení</a>.",
-    "+++ no paste text +++": "+++ žádný vložený text +++",
+    "In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "Pokud tato zpráva nezmizí, podívejte se na <a href=\"%s\">tyto často kladené otázky pro řešení problémů</a>.",
+    "+++ no paste text +++": "+++ žádný text příspěvku +++",
     "Could not get paste data: %s": "Nepodařilo se získat data příspěvku: %s",
     "Could not get paste data: %s": "Nepodařilo se získat data příspěvku: %s",
     "QR code": "QR kód",
     "QR code": "QR kód",
-    "This website is using an insecure HTTP connection! Please use it only for testing.": "Tato stránka používá nezabezpečený připojení HTTP! Použijte ji prosím jen pro testování.",
-    "For more information <a href=\"%s\">see this FAQ entry</a>.": "Více informací naleznete <a href=\"%s\">v této položce FAQ</a>.",
+    "This website is using an insecure HTTP connection! Please use it only for testing.": "Tato stránka používá nezabezpečené HTTP připojení! Použijte ji prosím jen pro testování.",
+    "For more information <a href=\"%s\">see this FAQ entry</a>.": "Více informací naleznete <a href=\"%s\">v této položce FAQ</a>.",
     "Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Váš prohlížeč může vyžadovat připojení HTTPS pro podporu WebCrypto API. Zkuste <a href=\"%s\">přepnout na HTTPS</a>.",
     "Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Váš prohlížeč může vyžadovat připojení HTTPS pro podporu WebCrypto API. Zkuste <a href=\"%s\">přepnout na HTTPS</a>.",
-    "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Váš prohlížeč nepodporuje WebAssembly, který se používá pro zlib kompresi. Můžete vytvořit nekomprimované dokumenty, ale nebudete moct číst ty komprimované.",
+    "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Váš prohlížeč nepodporuje WebAssembly, které se používá pro zlib kompresi. Můžete vytvořit nekomprimované dokumenty, ale nebudete moct číst ty komprimované.",
     "waiting on user to provide a password": "čekám na zadání hesla",
     "waiting on user to provide a password": "čekám na zadání hesla",
     "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Nepodařilo se dešifrovat data. Zadali jste špatné heslo? Zkuste to znovu pomocí tlačítka nahoře.",
     "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Nepodařilo se dešifrovat data. Zadali jste špatné heslo? Zkuste to znovu pomocí tlačítka nahoře.",
     "Retry": "Opakovat",
     "Retry": "Opakovat",
-    "Showing raw text…": "Zobrazuji surový text…",
+    "Showing raw text…": "Zobrazuji čistý text…",
     "Notice:": "Upozornění:",
     "Notice:": "Upozornění:",
     "This link will expire after %s.": "Tento odkaz vyprší za %s.",
     "This link will expire after %s.": "Tento odkaz vyprší za %s.",
-    "This link can only be accessed once, do not use back or refresh button in your browser.": "Tento odkaz je přístupný pouze jednou, nepoužívejte tlačítko zpět ani neobnovujte tuto stránku ve vašem prohlížeči.",
+    "This link can only be accessed once, do not use back or refresh button in your browser.": "Tento odkaz je přístupný pouze jednou, nepoužívejte tlačítko zpět ani neobnovujte tuto stránku v prohlížeči.",
     "Link:": "Odkaz:",
     "Link:": "Odkaz:",
-    "Recipient may become aware of your timezone, convert time to UTC?": "Příjemce se může dozvědět o vašem časovém pásmu, převést čas na UTC?",
+    "Recipient may become aware of your timezone, convert time to UTC?": "Příjemce může zjistit vaše časové pásmo, převést čas na UTC?",
     "Use Current Timezone": "Použít aktuální časové pásmo",
     "Use Current Timezone": "Použít aktuální časové pásmo",
     "Convert To UTC": "Převést na UTC",
     "Convert To UTC": "Převést na UTC",
     "Close": "Zavřít",
     "Close": "Zavřít",
     "Encrypted note on %s": "Šifrovaná poznámka ve službě %s",
     "Encrypted note on %s": "Šifrovaná poznámka ve službě %s",
-    "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Navštivte tento odkaz pro zobrazení poznámky. Přeposláním URL umožníte také jiným lidem přístup.",
-    "URL shortener may expose your decrypt key in URL.": "Zkracovač URL může odhalit váš dešifrovací klíč v URL.",
+    "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Pro zobrazení poznámky navštivte tento odkaz. Přeposláním URL umožníte přístup také jiným lidem.",
+    "URL shortener may expose your decrypt key in URL.": "Zkracovač URL může prozradit váš dešifrovací klíč v URL.",
     "Save paste": "Uložit příspěvek",
     "Save paste": "Uložit příspěvek",
-    "Your IP is not authorized to create pastes.": "Vaše IP adresa nemá oprávnění k vytvoření vložení.",
-    "Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
-    "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
-    "Error parsing YOURLS response.": "Error parsing YOURLS response.",
-    "This secret message can only be displayed once. Would you like to see it now?": "This secret message can only be displayed once. Would you like to see it now?",
-    "Yes, see it": "Yes, see it",
-    "Dark Mode": "Dark Mode",
-    "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Your IP is not authorized to create pastes.": "Vaše IP adresa nemá oprávnění k vytváření příspěvků.",
+    "Trying to shorten a URL that isn't pointing at our instance.": "Pokus o zkrácení URL, které neodkazuje na naši instanci.",
+    "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Chyba volání YOURLS. Pravděpodobně chyba konfigurace, např. nesprávné či chybějící „apiurl“ nebo „signature“.",
+    "Error parsing YOURLS response.": "Chyba čtení odpovědi YOURLS.",
+    "This secret message can only be displayed once. Would you like to see it now?": "Tuto tajnou zprávu lze zobrazit pouze jednou. Chcete si ji prohlédnout teď?",
+    "Yes, see it": "Ano, zobrazit",
+    "Dark Mode": "Tmavý režim",
+    "Error compressing paste, due to missing WebAssembly support.": "Chyba při komprimování příspěvku kvůli chybějící podpoře WebAssembly.",
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Chyba při dekomprimování příspěvku, váš prohlížeč nepodporuje WebAssembly. Pro zobrazení tohoto příspěvku prosím použijte jiný prohlížeč.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/de.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Ja, jetzt einsehen",
     "Yes, see it": "Ja, jetzt einsehen",
     "Dark Mode": "Nachtmodus",
     "Dark Mode": "Nachtmodus",
     "Error compressing paste, due to missing WebAssembly support.": "Fehler beim Komprimieren des Textes, da WebAssembly-Unterstützung fehlt.",
     "Error compressing paste, due to missing WebAssembly support.": "Fehler beim Komprimieren des Textes, da WebAssembly-Unterstützung fehlt.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Fehler beim Dekomprimieren des Textes. Dein Browser unterstützt WebAssembly nicht. Bitte verwende einen anderen Browser, um diesen Text anzuzeigen."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Fehler beim Dekomprimieren des Textes. Dein Browser unterstützt WebAssembly nicht. Bitte verwende einen anderen Browser, um diesen Text anzuzeigen.",
+    "Start over": "Neuen Text erstellen"
 }
 }

+ 4 - 3
i18n/el.json

@@ -1,6 +1,6 @@
 {
 {
     "PrivateBin": "PrivateBin",
     "PrivateBin": "PrivateBin",
-    "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s είναι ένα λιτό, ανοικτού λογισμικού διαδικτυακής υπηρεσίας επικόλλησης όπου ο διακομιστής έχει πλήρη άγνια του περιεχομένου που επικολλήθηκαν. Τα Δεδομένα κρυπτογραφούνται και αποκρυπτογραφούνται %sστον φιλομετρητή (browser)%s χρησιμοποιόντας 256 bits AES.",
+    "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "Το %s αποτελεί ένα εργαλείο επικόλλησης δεδομένων στο διαδίκτυο, που βασίζεται σε λογισμικό ανοιχτού κώδικα. Ο διακομιστής έχει πλήρη άγνοια αυτών των δεδομένων, τα οποία από/κρυπτογραφούνται %sστο πρόγραμμα περιήγησης%s, χρησιμοποιώντας τη μέθοδο 256-bits AES.",
     "More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Περισσότερες πληροφορίες στον <a href=\"https://privatebin.info/\">ιστότοπο του εργαλείου</a>.",
     "More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Περισσότερες πληροφορίες στον <a href=\"https://privatebin.info/\">ιστότοπο του εργαλείου</a>.",
     "Because ignorance is bliss": "Επειδή η άγνοια είναι ευτυχία",
     "Because ignorance is bliss": "Επειδή η άγνοια είναι ευτυχία",
     "Paste does not exist, has expired or has been deleted.": "Η επικόλληση δεν υπάρχει, έληξε ή διαγράφηκε",
     "Paste does not exist, has expired or has been deleted.": "Η επικόλληση δεν υπάρχει, έληξε ή διαγράφηκε",
@@ -212,12 +212,13 @@
     "URL shortener may expose your decrypt key in URL.": "Συντομευτές συνδέσμων πιθανώς να δημοσιοποιήσουν το κλειδί αποκρυπτογράφισης στον σύνδεσμο.",
     "URL shortener may expose your decrypt key in URL.": "Συντομευτές συνδέσμων πιθανώς να δημοσιοποιήσουν το κλειδί αποκρυπτογράφισης στον σύνδεσμο.",
     "Save paste": "Αποθήκευση επικόλλησης",
     "Save paste": "Αποθήκευση επικόλλησης",
     "Your IP is not authorized to create pastes.": "Η IP σας δεν επιτρέπεται να δημιουργεί επικολλήσεις.",
     "Your IP is not authorized to create pastes.": "Η IP σας δεν επιτρέπεται να δημιουργεί επικολλήσεις.",
-    "Trying to shorten a URL that isn't pointing at our instance.": "Προσπαθώντας να συντομεύσει μια διεύθυνση URL που δεν δείχνει στην περίπτωσή μας.",
+    "Trying to shorten a URL that isn't pointing at our instance.": "Έγινε προσπάθεια συντόμευσης ενός URL που δε δείχνει προς τη δική μας υπηρεσία.",
     "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Σφάλμα κατά την κλήση YOURLS. Πιθανώς ένα ζήτημα διαμόρφωσης, όπως λάθος ή λείπει \"apiurl\" ή \"υπογραφή\".",
     "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Σφάλμα κατά την κλήση YOURLS. Πιθανώς ένα ζήτημα διαμόρφωσης, όπως λάθος ή λείπει \"apiurl\" ή \"υπογραφή\".",
     "Error parsing YOURLS response.": "Σφάλμα ανάλυσης της απόκρισης YOURLS.",
     "Error parsing YOURLS response.": "Σφάλμα ανάλυσης της απόκρισης YOURLS.",
     "This secret message can only be displayed once. Would you like to see it now?": "Αυτό το μυστικό μήνυμα μπορεί να εμφανιστεί μόνο μία φορά. Θα θέλατε να το δείτε τώρα;",
     "This secret message can only be displayed once. Would you like to see it now?": "Αυτό το μυστικό μήνυμα μπορεί να εμφανιστεί μόνο μία φορά. Θα θέλατε να το δείτε τώρα;",
     "Yes, see it": "Ναι, δείτε το",
     "Yes, see it": "Ναι, δείτε το",
     "Dark Mode": "Σκοτεινό Θέμα",
     "Dark Mode": "Σκοτεινό Θέμα",
     "Error compressing paste, due to missing WebAssembly support.": "Σφάλμα συμπίεσης επικόλλησης, λόγω έλλειψης υποστήριξης WebAssembly.",
     "Error compressing paste, due to missing WebAssembly support.": "Σφάλμα συμπίεσης επικόλλησης, λόγω έλλειψης υποστήριξης WebAssembly.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Σφάλμα αποσυμπίεσης της επικόλλησης, ο περιηγητής σας δεν υποστηρίζει WebAssembly. Παρακαλούμε χρησιμοποιήστε έναν άλλο περιηγητή για να δείτε αυτή την επικόλληση."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Σφάλμα αποσυμπίεσης της επικόλλησης, ο περιηγητής σας δεν υποστηρίζει WebAssembly. Παρακαλούμε χρησιμοποιήστε έναν άλλο περιηγητή για να δείτε αυτή την επικόλληση.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/en.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Yes, see it",
     "Yes, see it": "Yes, see it",
     "Dark Mode": "Dark Mode",
     "Dark Mode": "Dark Mode",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/es.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Sí, verlo",
     "Yes, see it": "Sí, verlo",
     "Dark Mode": "Modo nocturno",
     "Dark Mode": "Modo nocturno",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/et.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Yes, see it",
     "Yes, see it": "Yes, see it",
     "Dark Mode": "Tume režiim",
     "Dark Mode": "Tume režiim",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/fi.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Kyllä, näet sen",
     "Yes, see it": "Kyllä, näet sen",
     "Dark Mode": "Tumma tila",
     "Dark Mode": "Tumma tila",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/fr.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Oui, le voir",
     "Yes, see it": "Oui, le voir",
     "Dark Mode": "Mode Sombre",
     "Dark Mode": "Mode Sombre",
     "Error compressing paste, due to missing WebAssembly support.": "Erreur lors de la compression du paste, en raison du support de WebAssembly manquant.",
     "Error compressing paste, due to missing WebAssembly support.": "Erreur lors de la compression du paste, en raison du support de WebAssembly manquant.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Erreur lors de la décompression du paste, votre navigateur ne supporte pas WebAssembly. Veuillez utiliser un autre navigateur pour voir ce paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Erreur lors de la décompression du paste, votre navigateur ne supporte pas WebAssembly. Veuillez utiliser un autre navigateur pour voir ce paste.",
+    "Start over": "Recommencer"
 }
 }

+ 2 - 1
i18n/he.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Yes, see it",
     "Yes, see it": "Yes, see it",
     "Dark Mode": "Dark Mode",
     "Dark Mode": "Dark Mode",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/hi.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Yes, see it",
     "Yes, see it": "Yes, see it",
     "Dark Mode": "Dark Mode",
     "Dark Mode": "Dark Mode",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/hu.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Yes, see it",
     "Yes, see it": "Yes, see it",
     "Dark Mode": "Sötét mód",
     "Dark Mode": "Sötét mód",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/id.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Yes, see it",
     "Yes, see it": "Yes, see it",
     "Dark Mode": "Mode Gelap",
     "Dark Mode": "Mode Gelap",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/it.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Sì, visualizzalo",
     "Yes, see it": "Sì, visualizzalo",
     "Dark Mode": "Tema Scuro",
     "Dark Mode": "Tema Scuro",
     "Error compressing paste, due to missing WebAssembly support.": "Errore nella compressione dell messaggio, a causa del supporto WebAssembly mancante.",
     "Error compressing paste, due to missing WebAssembly support.": "Errore nella compressione dell messaggio, a causa del supporto WebAssembly mancante.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Errore nella decompressione dell messaggio, il tuo browser non supporta WebAssembly. Utilizza un altro browser per visualizzare questo messaggio."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Errore nella decompressione dell messaggio, il tuo browser non supporta WebAssembly. Utilizza un altro browser per visualizzare questo messaggio.",
+    "Start over": "Ricominciare"
 }
 }

+ 2 - 1
i18n/ja.json

@@ -219,5 +219,6 @@
     "Yes, see it": "はい、使用します",
     "Yes, see it": "はい、使用します",
     "Dark Mode": "ダークモード",
     "Dark Mode": "ダークモード",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/jbo.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Yes, see it",
     "Yes, see it": "Yes, see it",
     "Dark Mode": "Dark Mode",
     "Dark Mode": "Dark Mode",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/ko.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Yes, see it",
     "Yes, see it": "Yes, see it",
     "Dark Mode": "Dark Mode",
     "Dark Mode": "Dark Mode",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/ku.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Yes, see it",
     "Yes, see it": "Yes, see it",
     "Dark Mode": "جۆری ڕەش",
     "Dark Mode": "جۆری ڕەش",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/la.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Yes, see it",
     "Yes, see it": "Yes, see it",
     "Dark Mode": "Dark Mode",
     "Dark Mode": "Dark Mode",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/lt.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Taip, pamatyti",
     "Yes, see it": "Taip, pamatyti",
     "Dark Mode": "Tamsi veiksena",
     "Dark Mode": "Tamsi veiksena",
     "Error compressing paste, due to missing WebAssembly support.": "Klaida glaudinant įdėjimą, nes trūksta WebAssembly palaikymo.",
     "Error compressing paste, due to missing WebAssembly support.": "Klaida glaudinant įdėjimą, nes trūksta WebAssembly palaikymo.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Klaida išglaudinant įdėjimą, jūsų naršyklė nepalaiko WebAssembly. Norėdami peržiūrėti šį įdėjimą, naudokite kitą naršyklę."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Klaida išglaudinant įdėjimą, jūsų naršyklė nepalaiko WebAssembly. Norėdami peržiūrėti šį įdėjimą, naudokite kitą naršyklę.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/nl.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Ja, tonen",
     "Yes, see it": "Ja, tonen",
     "Dark Mode": "Donkere modus",
     "Dark Mode": "Donkere modus",
     "Error compressing paste, due to missing WebAssembly support.": "Fout bij het comprimeren van notitie door ontbrekende ondersteuning voor WebAssembly.",
     "Error compressing paste, due to missing WebAssembly support.": "Fout bij het comprimeren van notitie door ontbrekende ondersteuning voor WebAssembly.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Fout bij het decomprimeren van de notitie, uw browser ondersteunt WebAssembly niet. Gebruik een andere browser om deze notitie te bekijken."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Fout bij het decomprimeren van de notitie, uw browser ondersteunt WebAssembly niet. Gebruik een andere browser om deze notitie te bekijken.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/no.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Ja, se det",
     "Yes, see it": "Ja, se det",
     "Dark Mode": "Mørk modus",
     "Dark Mode": "Mørk modus",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 6 - 5
i18n/oc.json

@@ -215,9 +215,10 @@
     "Trying to shorten a URL that isn't pointing at our instance.": "Ensag d’abracar una URL que mena pas a nòstra instància.",
     "Trying to shorten a URL that isn't pointing at our instance.": "Ensag d’abracar una URL que mena pas a nòstra instància.",
     "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error en cridant YOURLS. Es probablament un problèma de configuracion, quicòm coma « apirul » o « signature » marrit o absent.",
     "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error en cridant YOURLS. Es probablament un problèma de configuracion, quicòm coma « apirul » o « signature » marrit o absent.",
     "Error parsing YOURLS response.": "Error d'analisi de la responsa YOURLS.",
     "Error parsing YOURLS response.": "Error d'analisi de la responsa YOURLS.",
-    "This secret message can only be displayed once. Would you like to see it now?": "This secret message can only be displayed once. Would you like to see it now?",
-    "Yes, see it": "Yes, see it",
-    "Dark Mode": "Dark Mode",
-    "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "This secret message can only be displayed once. Would you like to see it now?": "Aqueste messatge secrèt se pòt pas qu'afichar un còp. Lo volètz veire ara ?",
+    "Yes, see it": "Òc, afichatz-lo",
+    "Dark Mode": "Mòde escur",
+    "Error compressing paste, due to missing WebAssembly support.": "Error al moment de la compression de l'empegatge, a causa de la manca de presa en carga de WebAssembly.",
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error al moment de descompresar l'empegatge, vòstre navegador pren pas en carga WebAssembly. Mercés d'utilizar un autre navigador per visualizar aquesta pega.",
+    "Start over": "Start over"
 }
 }

+ 31 - 30
i18n/pl.json

@@ -167,7 +167,7 @@
     "Format": "Format",
     "Format": "Format",
     "Plain Text": "Czysty tekst",
     "Plain Text": "Czysty tekst",
     "Source Code": "Kod źródłowy",
     "Source Code": "Kod źródłowy",
-    "Markdown": "Markdown",
+    "Markdown": "Znakowanie",
     "Download attachment": "Pobierz załącznik",
     "Download attachment": "Pobierz załącznik",
     "Cloned: '%s'": "Sklonowano: '%s'",
     "Cloned: '%s'": "Sklonowano: '%s'",
     "The cloned file '%s' was attached to this paste.": "Sklonowany plik '%s' był dołączony do tej wklejki.",
     "The cloned file '%s' was attached to this paste.": "Sklonowany plik '%s' był dołączony do tej wklejki.",
@@ -181,7 +181,7 @@
     "Shorten URL": "Skróć adres URL",
     "Shorten URL": "Skróć adres URL",
     "Editor": "Edytować",
     "Editor": "Edytować",
     "Preview": "Podgląd",
     "Preview": "Podgląd",
-    "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.",
+    "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s wymaga zmiennej PATH zakończonej w \"%s\". Zaktualizuj zmienną PATH w index.php.",
     "Decrypt": "Odszyfruj",
     "Decrypt": "Odszyfruj",
     "Enter password": "Wpisz hasło",
     "Enter password": "Wpisz hasło",
     "Loading…": "Wczytywanie…",
     "Loading…": "Wczytywanie…",
@@ -191,33 +191,34 @@
     "+++ no paste text +++": "+++ brak wklejonego tekstu +++",
     "+++ no paste text +++": "+++ brak wklejonego tekstu +++",
     "Could not get paste data: %s": "Nie można było pobrać danych wklejki: %s",
     "Could not get paste data: %s": "Nie można było pobrać danych wklejki: %s",
     "QR code": "Kod QR",
     "QR code": "Kod QR",
-    "This website is using an insecure HTTP connection! Please use it only for testing.": "This website is using an insecure HTTP connection! Please use it only for testing.",
-    "For more information <a href=\"%s\">see this FAQ entry</a>.": "For more information <a href=\"%s\">see this FAQ entry</a>.",
-    "Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.",
-    "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.",
-    "waiting on user to provide a password": "waiting on user to provide a password",
-    "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.",
-    "Retry": "Retry",
-    "Showing raw text…": "Showing raw text…",
-    "Notice:": "Notice:",
-    "This link will expire after %s.": "This link will expire after %s.",
-    "This link can only be accessed once, do not use back or refresh button in your browser.": "This link can only be accessed once, do not use back or refresh button in your browser.",
-    "Link:": "Link:",
-    "Recipient may become aware of your timezone, convert time to UTC?": "Recipient may become aware of your timezone, convert time to UTC?",
-    "Use Current Timezone": "Use Current Timezone",
-    "Convert To UTC": "Convert To UTC",
-    "Close": "Close",
-    "Encrypted note on %s": "Encrypted note on %s",
-    "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
-    "URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
-    "Save paste": "Save paste",
-    "Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
-    "Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
-    "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
-    "Error parsing YOURLS response.": "Error parsing YOURLS response.",
-    "This secret message can only be displayed once. Would you like to see it now?": "This secret message can only be displayed once. Would you like to see it now?",
-    "Yes, see it": "Yes, see it",
+    "This website is using an insecure HTTP connection! Please use it only for testing.": "Ta witryna używa niezabezpieczonego połączenia HTTP! Używaj jej wyłącznie do testowania.",
+    "For more information <a href=\"%s\">see this FAQ entry</a>.": "Aby uzyskać więcej informacji, <a href=\"%s\">sprawdź to często zadawane pytanie</a>.",
+    "Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Twoja przeglądarka może wymagać połączenia HTTPS do obsługi API WebCrypto. Wypróbuj <a href=\"%s\">przełączenie na HTTPS</a>.",
+    "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Twoja przeglądarka nie obsługuje WebAssembly używanego do kompresji zlib. Możesz utworzyć nieskompresowane dokumenty, ale nie możesz odczytać skompresowanych.",
+    "waiting on user to provide a password": "oczekiwanie na podanie hasła przez użytkownika",
+    "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Błąd odszyfrowywania danych. Czy wprowadzono niepoprawne hasło? Spróbuj ponownie, używając przycisku na górze.",
+    "Retry": "Ponów",
+    "Showing raw text…": "Pokazywanie nieprzetworzonego tekstu…",
+    "Notice:": "Uwaga:",
+    "This link will expire after %s.": "Ten odnośnik wygaśnie po %s.",
+    "This link can only be accessed once, do not use back or refresh button in your browser.": "Tego odnośnika można użyć tylko jeden raz. Nie cofaj ani nie odświeżaj strony w przeglądarce.",
+    "Link:": "Odnośnik:",
+    "Recipient may become aware of your timezone, convert time to UTC?": "Odbiorca może uzyskać informację o twojej strefie czasowej. Zamienić czas na UTC?",
+    "Use Current Timezone": "Użyj bieżącej strefy czasowej",
+    "Convert To UTC": "Zamień na UTC",
+    "Close": "Zamknij",
+    "Encrypted note on %s": "Zaszyfrowana notatka na %s",
+    "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Naciśnij tej odnośnik, aby zobaczyć notatkę. Każda osoba z dostępem do tego adresu URL również może zobaczyć tę notatkę.",
+    "URL shortener may expose your decrypt key in URL.": "Skrócenie adresu URL może ujawnić Twój klucz odszyfrowujący w adresie URL.",
+    "Save paste": "Zapisz wklejenie",
+    "Your IP is not authorized to create pastes.": "Twój adres IP nie jest upoważniony do tworzenia wklejeń.",
+    "Trying to shorten a URL that isn't pointing at our instance.": "Próba skrócenia adresu URL wskazującego na inną instancję.",
+    "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Błąd wywoływania YOURLS. Możliwy błąd konfiguracji, taki jak błędne lub brakujące \"apiurl\" lub \"signature\".",
+    "Error parsing YOURLS response.": "Błąd przetwarzania odpowiedzi YOURLS.",
+    "This secret message can only be displayed once. Would you like to see it now?": "Tę tajną wiadomość możesz zobaczyć tylko jeden raz. Czy chcesz to zrobić teraz?",
+    "Yes, see it": "Tak, pokaż",
     "Dark Mode": "Ciemny motyw",
     "Dark Mode": "Ciemny motyw",
-    "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error compressing paste, due to missing WebAssembly support.": "Błąd kompresowania wklejenia przez brak obsługi WebAssembly.",
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Błąd dekompresowania wklejenia przez brak obsługi WebAssembly przez przeglądarkę. Użyj innej przeglądarki, aby zobaczyć to wklejenie.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/pt.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Sim, veja",
     "Yes, see it": "Sim, veja",
     "Dark Mode": "Modo Noturno",
     "Dark Mode": "Modo Noturno",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/ro.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Da, vezi",
     "Yes, see it": "Da, vezi",
     "Dark Mode": "Mod întunecat",
     "Dark Mode": "Mod întunecat",
     "Error compressing paste, due to missing WebAssembly support.": "Eroare la compresia paste-ului din cauza incompatibilității cu WebAssembly.",
     "Error compressing paste, due to missing WebAssembly support.": "Eroare la compresia paste-ului din cauza incompatibilității cu WebAssembly.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Eroare la deschiderea paste-ului, browserul dvs. nu acceptă WebAssembly. Vă rugăm să utilizați un alt browser pentru a vedea acest paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Eroare la deschiderea paste-ului, browserul dvs. nu acceptă WebAssembly. Vă rugăm să utilizați un alt browser pentru a vedea acest paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/ru.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Да, загрузить",
     "Yes, see it": "Да, загрузить",
     "Dark Mode": "Тёмная",
     "Dark Mode": "Тёмная",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/sk.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Yes, see it",
     "Yes, see it": "Yes, see it",
     "Dark Mode": "Tmavý Režim",
     "Dark Mode": "Tmavý Režim",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/sl.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Yes, see it",
     "Yes, see it": "Yes, see it",
     "Dark Mode": "Temni način",
     "Dark Mode": "Temni način",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/sv.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Yes, see it",
     "Yes, see it": "Yes, see it",
     "Dark Mode": "Mörkt Läge",
     "Dark Mode": "Mörkt Läge",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/th.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Yes, see it",
     "Yes, see it": "Yes, see it",
     "Dark Mode": "โหมดมืด",
     "Dark Mode": "โหมดมืด",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/tr.json

@@ -219,5 +219,6 @@
     "Yes, see it": "Evet, görüyorum",
     "Yes, see it": "Evet, görüyorum",
     "Dark Mode": "Koyu Mod",
     "Dark Mode": "Koyu Mod",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 10 - 9
i18n/uk.json

@@ -1,6 +1,6 @@
 {
 {
     "PrivateBin": "PrivateBin",
     "PrivateBin": "PrivateBin",
-    "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s це мінімалістичний Open Source проєкт для створення нотаток, де сервер не знає нічого про дані, що зберігаються. Дані шифруються/розшифровуються %sу переглядачі%s з використанням 256-бітного шифрувания AES.",
+    "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s це мінімалістичний Open Source проєкт для створення нотаток, де сервер не знає нічого про дані, що зберігаються. Дані шифруються/розшифровуються %sу браузері%s з використанням 256-бітного шифрування AES.",
     "More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Подробиці можна дізнатися на <a href=\"https://privatebin.info/\">сайті проєкту</a>.",
     "More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Подробиці можна дізнатися на <a href=\"https://privatebin.info/\">сайті проєкту</a>.",
     "Because ignorance is bliss": "Бо незнання - благо",
     "Because ignorance is bliss": "Бо незнання - благо",
     "Paste does not exist, has expired or has been deleted.": "Допис не існує, протермінований чи був видалений.",
     "Paste does not exist, has expired or has been deleted.": "Допис не існує, протермінований чи був видалений.",
@@ -16,15 +16,15 @@
     ],
     ],
     "Paste is limited to %s of encrypted data.": "Розмір допису обмежений %s зашифрованих даних.",
     "Paste is limited to %s of encrypted data.": "Розмір допису обмежений %s зашифрованих даних.",
     "Invalid data.": "Неправильні дані.",
     "Invalid data.": "Неправильні дані.",
-    "You are unlucky. Try again.": "Вам не пощастило. Спробуйте ще раз.",
+    "You are unlucky. Try again.": "Якась халепа! Спробуйте ще раз.",
     "Error saving comment. Sorry.": "Помилка при збереженні коментаря. Вибачте.",
     "Error saving comment. Sorry.": "Помилка при збереженні коментаря. Вибачте.",
     "Error saving paste. Sorry.": "Помилка при збереженні допису. Вибачте.",
     "Error saving paste. Sorry.": "Помилка при збереженні допису. Вибачте.",
     "Invalid paste ID.": "Неправильний ID допису.",
     "Invalid paste ID.": "Неправильний ID допису.",
     "Paste is not of burn-after-reading type.": "Тип допису не \"Знищити після прочитання\".",
     "Paste is not of burn-after-reading type.": "Тип допису не \"Знищити після прочитання\".",
-    "Wrong deletion token. Paste was not deleted.": "Неправильний ключ вилучення допису. Допис не вилучено.",
+    "Wrong deletion token. Paste was not deleted.": "Неправильний жетон вилучення допису. Допис не вилучено.",
     "Paste was properly deleted.": "Допис був вилучений повністю.",
     "Paste was properly deleted.": "Допис був вилучений повністю.",
     "JavaScript is required for %s to work. Sorry for the inconvenience.": "Для роботи %s потрібен увімкнутий JavaScript. Вибачте.",
     "JavaScript is required for %s to work. Sorry for the inconvenience.": "Для роботи %s потрібен увімкнутий JavaScript. Вибачте.",
-    "%s requires a modern browser to work.": "Для роботи %s потрібен більш сучасний переглядач.",
+    "%s requires a modern browser to work.": "Для роботи %s потрібен більш сучасний браузер.",
     "New": "Новий допис",
     "New": "Новий допис",
     "Create": "Створити",
     "Create": "Створити",
     "Clone": "Дублювати",
     "Clone": "Дублювати",
@@ -36,8 +36,8 @@
     "Discussion": "Обговорення",
     "Discussion": "Обговорення",
     "Toggle navigation": "Перемкнути навігацію",
     "Toggle navigation": "Перемкнути навігацію",
     "%d seconds": [
     "%d seconds": [
-        "%d секунду",
-        "%d секунди",
+        "%d секунд",
+        "%d секунд",
         "%d секунд",
         "%d секунд",
         "%d секунд",
         "%d секунд",
         "%d секунд",
         "%d секунд",
@@ -134,7 +134,7 @@
         "Документ буде вилучений через %d місяців."
         "Документ буде вилучений через %d місяців."
     ],
     ],
     "Please enter the password for this paste:": "Будь ласка, введіть пароль від допису:",
     "Please enter the password for this paste:": "Будь ласка, введіть пароль від допису:",
-    "Could not decrypt data (Wrong key?)": "Неможливо розшифрувати дані (Неправильний  ключ?)",
+    "Could not decrypt data (Wrong key?)": "Неможливо розшифрувати дані (можливо, невірний ключ?)",
     "Could not delete the paste, it was not stored in burn after reading mode.": "Неможливо вилучити допис, він не був збережений в режимі знищити після прочитання.",
     "Could not delete the paste, it was not stored in burn after reading mode.": "Неможливо вилучити допис, він не був збережений в режимі знищити після прочитання.",
     "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "ЛИШЕ ДЛЯ ВАШИХ ОЧЕЙ. Не закривайте це вікно, це повідомлення не може бути показано знову.",
     "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "ЛИШЕ ДЛЯ ВАШИХ ОЧЕЙ. Не закривайте це вікно, це повідомлення не може бути показано знову.",
     "Could not decrypt comment; Wrong key?": "Неможливо розшифрувати коментар; Неправильний ключ?",
     "Could not decrypt comment; Wrong key?": "Неможливо розшифрувати коментар; Неправильний ключ?",
@@ -166,7 +166,7 @@
     "YiB": "Йбайт",
     "YiB": "Йбайт",
     "Format": "Формат",
     "Format": "Формат",
     "Plain Text": "Звичайний текст",
     "Plain Text": "Звичайний текст",
-    "Source Code": "Джерельний код",
+    "Source Code": "Вихідний код",
     "Markdown": "Мова розмітки",
     "Markdown": "Мова розмітки",
     "Download attachment": "Звантажити прикріплений файл",
     "Download attachment": "Звантажити прикріплений файл",
     "Cloned: '%s'": "Дубльовано: '%s'",
     "Cloned: '%s'": "Дубльовано: '%s'",
@@ -219,5 +219,6 @@
     "Yes, see it": "Так, побачити",
     "Yes, see it": "Так, побачити",
     "Dark Mode": "Темний режим",
     "Dark Mode": "Темний режим",
     "Error compressing paste, due to missing WebAssembly support.": "Помилка при стисканні допису, через відсутність підтримки WebAssembly сервера.",
     "Error compressing paste, due to missing WebAssembly support.": "Помилка при стисканні допису, через відсутність підтримки WebAssembly сервера.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Помилка при розпакуванні допису, бо ваш браузер не підтримує WebAssembly. Будь ласка, відкрийте інший браузер для перегляду цього допису."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Помилка при розпакуванні допису, бо ваш браузер не підтримує WebAssembly. Будь ласка, відкрийте в іншому браузері для перегляду цього допису.",
+    "Start over": "Start over"
 }
 }

+ 2 - 1
i18n/zh.json

@@ -219,5 +219,6 @@
     "Yes, see it": "是的,加载它",
     "Yes, see it": "是的,加载它",
     "Dark Mode": "暗黑模式",
     "Dark Mode": "暗黑模式",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
     "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
-    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste."
+    "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
+    "Start over": "Start over"
 }
 }

+ 1 - 1
js/common.js

@@ -17,7 +17,7 @@ require('./prettify');
 global.prettyPrint = window.PR.prettyPrint;
 global.prettyPrint = window.PR.prettyPrint;
 global.prettyPrintOne = window.PR.prettyPrintOne;
 global.prettyPrintOne = window.PR.prettyPrintOne;
 global.showdown = require('./showdown-2.1.0');
 global.showdown = require('./showdown-2.1.0');
-global.DOMPurify = require('./purify-3.1.6');
+global.DOMPurify = require('./purify-3.1.7');
 global.baseX = require('./base-x-4.0.0').baseX;
 global.baseX = require('./base-x-4.0.0').baseX;
 global.Legacy = require('./legacy').Legacy;
 global.Legacy = require('./legacy').Legacy;
 require('./bootstrap-3.4.1');
 require('./bootstrap-3.4.1');

+ 5 - 2
js/privatebin.js

@@ -3988,7 +3988,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
             }
             }
             emailBody += I18n._('Link:');
             emailBody += I18n._('Link:');
             emailBody += EOL;
             emailBody += EOL;
-            emailBody += $('#pasteurl').attr('href'); // might have been shortened
+            emailBody += $('#pasteurl').attr('href') || window.location.href; // href is tried first as it might have been shortened
             return emailBody;
             return emailBody;
         }
         }
 
 
@@ -5626,8 +5626,11 @@ jQuery.PrivateBin = (function($, RawDeflate) {
             me.initZ();
             me.initZ();
 
 
             // if delete token is passed (i.e. paste has been deleted by this
             // if delete token is passed (i.e. paste has been deleted by this
-            // access), there is nothing more to do
+            // access), add an event listener for the 'new' paste button in the alert
             if (Model.hasDeleteToken()) {
             if (Model.hasDeleteToken()) {
+                $("#new-from-alert").on("click", function () {
+                    UiHelper.reloadHome();
+                });
                 return;
                 return;
             }
             }
 
 

Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 1
js/purify-3.1.6.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
js/purify-3.1.7.js


+ 2 - 2
lib/Configuration.php

@@ -108,8 +108,8 @@ class Configuration
             'js/kjua-0.9.0.js'       => 'sha512-CVn7af+vTMBd9RjoS4QM5fpLFEOtBCoB0zPtaqIDC7sF4F8qgUSRFQQpIyEDGsr6yrjbuOLzdf20tkHHmpaqwQ==',
             'js/kjua-0.9.0.js'       => 'sha512-CVn7af+vTMBd9RjoS4QM5fpLFEOtBCoB0zPtaqIDC7sF4F8qgUSRFQQpIyEDGsr6yrjbuOLzdf20tkHHmpaqwQ==',
             'js/legacy.js'           => 'sha512-LYos+qXHIRqFf5ZPNphvtTB0cgzHUizu2wwcOwcwz/VIpRv9lpcBgPYz4uq6jx0INwCAj6Fbnl5HoKiLufS2jg==',
             'js/legacy.js'           => 'sha512-LYos+qXHIRqFf5ZPNphvtTB0cgzHUizu2wwcOwcwz/VIpRv9lpcBgPYz4uq6jx0INwCAj6Fbnl5HoKiLufS2jg==',
             'js/prettify.js'         => 'sha512-puO0Ogy++IoA2Pb9IjSxV1n4+kQkKXYAEUtVzfZpQepyDPyXk8hokiYDS7ybMogYlyyEIwMLpZqVhCkARQWLMg==',
             'js/prettify.js'         => 'sha512-puO0Ogy++IoA2Pb9IjSxV1n4+kQkKXYAEUtVzfZpQepyDPyXk8hokiYDS7ybMogYlyyEIwMLpZqVhCkARQWLMg==',
-            'js/privatebin.js'       => 'sha512-cbmXvtZ/5gZPFjQDzP3IEhUAIhFPAoM31gw2kRYCT5xOh8wv9gXeDqI/t798luRW1xdC4gaYodjEFCzrsZR4mA==',
-            'js/purify-3.1.6.js'     => 'sha512-SDwfsqHZFhbcBo/6AN7Te4KoUkWHHw7TzyZCuRkkpl0o8oV4owT/lprznWWe9+qFtigb6MrF81K4CQRLN6be+A==',
+            'js/privatebin.js'       => 'sha512-JUj/Sbl/bMHlIoIUT1U9e89JU33fDBxCxLSGxwwaeydBFXOBHyfdF7hwSIjgbPxb4d9CO7CSe4meouTIRMy8Vg==',
+            'js/purify-3.1.7.js'     => 'sha512-LegvqULiMtOfboJZw9MpETN/b+xnLRXZI90gG7oIFHW+yAeHmKvRtEUbiMFx2WvUqQoL9XB3gwU+hWXUT0X+8A==',
             'js/rawinflate-0.3.js'   => 'sha512-g8uelGgJW9A/Z1tB6Izxab++oj5kdD7B4qC7DHwZkB6DGMXKyzx7v5mvap2HXueI2IIn08YlRYM56jwWdm2ucQ==',
             'js/rawinflate-0.3.js'   => 'sha512-g8uelGgJW9A/Z1tB6Izxab++oj5kdD7B4qC7DHwZkB6DGMXKyzx7v5mvap2HXueI2IIn08YlRYM56jwWdm2ucQ==',
             'js/showdown-2.1.0.js'   => 'sha512-WYXZgkTR0u/Y9SVIA4nTTOih0kXMEd8RRV6MLFdL6YU8ymhR528NLlYQt1nlJQbYz4EW+ZsS0fx1awhiQJme1Q==',
             'js/showdown-2.1.0.js'   => 'sha512-WYXZgkTR0u/Y9SVIA4nTTOih0kXMEd8RRV6MLFdL6YU8ymhR528NLlYQt1nlJQbYz4EW+ZsS0fx1awhiQJme1Q==',
             'js/zlib-1.3.1.js'       => 'sha512-Z90oppVx/mn0DG2k9airjFVQuliELlXLeT3SRiO6MLiUSbhGlAq+UFwmYbG4i9mwW87dkG8fgJPapGwnUq7Osg==',
             'js/zlib-1.3.1.js'       => 'sha512-Z90oppVx/mn0DG2k9airjFVQuliELlXLeT3SRiO6MLiUSbhGlAq+UFwmYbG4i9mwW87dkG8fgJPapGwnUq7Osg==',

+ 11 - 1
lib/Controller.php

@@ -67,6 +67,14 @@ class Controller
      */
      */
     private $_status = '';
     private $_status = '';
 
 
+    /**
+     * status message
+     *
+     * @access private
+     * @var    bool
+     */
+    private $_is_deleted = false;
+
     /**
     /**
      * JSON message
      * JSON message
      *
      *
@@ -308,7 +316,8 @@ class Controller
                 if (hash_equals($paste->getDeleteToken(), $deletetoken)) {
                 if (hash_equals($paste->getDeleteToken(), $deletetoken)) {
                     // Paste exists and deletion token is valid: Delete the paste.
                     // Paste exists and deletion token is valid: Delete the paste.
                     $paste->delete();
                     $paste->delete();
-                    $this->_status = 'Paste was properly deleted.';
+                    $this->_status     = 'Paste was properly deleted.';
+                    $this->_is_deleted = true;
                 } else {
                 } else {
                     $this->_error = 'Wrong deletion token. Paste was not deleted.';
                     $this->_error = 'Wrong deletion token. Paste was not deleted.';
                 }
                 }
@@ -412,6 +421,7 @@ class Controller
         }
         }
         $page->assign('BASEPATH', I18n::_($this->_conf->getKey('basepath')));
         $page->assign('BASEPATH', I18n::_($this->_conf->getKey('basepath')));
         $page->assign('STATUS', I18n::_($this->_status));
         $page->assign('STATUS', I18n::_($this->_status));
+        $page->assign('ISDELETED', I18n::_(json_encode($this->_is_deleted)));
         $page->assign('VERSION', self::VERSION);
         $page->assign('VERSION', self::VERSION);
         $page->assign('DISCUSSION', $this->_conf->getKey('discussion'));
         $page->assign('DISCUSSION', $this->_conf->getKey('discussion'));
         $page->assign('OPENDISCUSSION', $this->_conf->getKey('opendiscussion'));
         $page->assign('OPENDISCUSSION', $this->_conf->getKey('opendiscussion'));

+ 13 - 6
tpl/bootstrap.php

@@ -1,4 +1,4 @@
-<?php
+<?php declare(strict_types=1);
 use PrivateBin\I18n;
 use PrivateBin\I18n;
 $isCpct = substr($template, 9, 8) === '-compact';
 $isCpct = substr($template, 9, 8) === '-compact';
 $isDark = substr($template, 9, 5) === '-dark';
 $isDark = substr($template, 9, 5) === '-dark';
@@ -42,7 +42,7 @@ if ($SYNTAXHIGHLIGHTING) :
 endif;
 endif;
 ?>
 ?>
 		<noscript><link type="text/css" rel="stylesheet" href="css/noscript.css" /></noscript>
 		<noscript><link type="text/css" rel="stylesheet" href="css/noscript.css" /></noscript>
-		<?php $this->_scriptTag('js/jquery-3.7.1.js', 'async'); ?>
+		<?php $this->_scriptTag('js/jquery-3.7.1.js', 'defer'); ?>
 <?php
 <?php
 if ($QRCODE) :
 if ($QRCODE) :
 ?>
 ?>
@@ -56,8 +56,8 @@ if ($ZEROBINCOMPATIBILITY) :
 endif;
 endif;
 ?>
 ?>
 		<?php $this->_scriptTag('js/zlib-1.3.1.js', 'async'); ?>
 		<?php $this->_scriptTag('js/zlib-1.3.1.js', 'async'); ?>
-		<?php $this->_scriptTag('js/base-x-4.0.0.js', 'async'); ?>
-		<?php $this->_scriptTag('js/rawinflate-0.3.js', 'async'); ?>
+		<?php $this->_scriptTag('js/base-x-4.0.0.js', 'defer'); ?>
+		<?php $this->_scriptTag('js/rawinflate-0.3.js', 'defer'); ?>
 		<?php $this->_scriptTag('js/bootstrap-3.4.1.js', 'defer'); ?>
 		<?php $this->_scriptTag('js/bootstrap-3.4.1.js', 'defer'); ?>
 <?php
 <?php
 if ($SYNTAXHIGHLIGHTING) :
 if ($SYNTAXHIGHLIGHTING) :
@@ -71,7 +71,7 @@ if ($MARKDOWN) :
 <?php
 <?php
 endif;
 endif;
 ?>
 ?>
-		<?php $this->_scriptTag('js/purify-3.1.6.js', 'async'); ?>
+		<?php $this->_scriptTag('js/purify-3.1.7.js', 'async'); ?>
 		<?php $this->_scriptTag('js/legacy.js', 'async'); ?>
 		<?php $this->_scriptTag('js/legacy.js', 'async'); ?>
 		<?php $this->_scriptTag('js/privatebin.js', 'defer'); ?>
 		<?php $this->_scriptTag('js/privatebin.js', 'defer'); ?>
 		<!-- icon -->
 		<!-- icon -->
@@ -490,9 +490,16 @@ if ($FILEUPLOAD) :
 <?php
 <?php
 endif;
 endif;
 ?>
 ?>
-				<div id="status" role="alert" class="alert alert-info<?php echo empty($STATUS) ? ' hidden' : '' ?>">
+				<div id="status" role="alert" class="clearfix alert alert-<?php echo (bool)$ISDELETED ? 'success' : 'info'; echo empty($STATUS) ? ' hidden' : '' ?>">
 					<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
 					<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
 					<?php echo I18n::encode($STATUS), PHP_EOL; ?>
 					<?php echo I18n::encode($STATUS), PHP_EOL; ?>
+					<?php
+						if ((bool)$ISDELETED):
+					?>
+						<button type="button" class="btn btn-default pull-right" id="new-from-alert">
+							<span class="glyphicon glyphicon-repeat"></span> <?php echo I18n::_('Start over'), PHP_EOL; ?>
+						</button>
+					<?php endif; ?>
 				</div>
 				</div>
 				<div id="errormessage" role="alert" class="<?php echo empty($ERROR) ? 'hidden' : '' ?> alert alert-danger">
 				<div id="errormessage" role="alert" class="<?php echo empty($ERROR) ? 'hidden' : '' ?> alert alert-danger">
 					<span class="glyphicon glyphicon-alert" aria-hidden="true"></span>
 					<span class="glyphicon glyphicon-alert" aria-hidden="true"></span>

+ 19 - 10
tpl/bootstrap5.php

@@ -1,4 +1,4 @@
-<?php
+<?php declare(strict_types=1);
 use PrivateBin\I18n;
 use PrivateBin\I18n;
 ?><!DOCTYPE html>
 ?><!DOCTYPE html>
 <html lang="<?php echo I18n::getLanguage(); ?>"<?php echo I18n::isRtl() ? ' dir="rtl"' : ''; ?> class="h-100">
 <html lang="<?php echo I18n::getLanguage(); ?>"<?php echo I18n::isRtl() ? ' dir="rtl"' : ''; ?> class="h-100">
@@ -34,15 +34,15 @@ if ($QRCODE) :
 endif;
 endif;
 if ($ZEROBINCOMPATIBILITY) :
 if ($ZEROBINCOMPATIBILITY) :
 ?>
 ?>
-		<?php $this->_scriptTag('js/base64-1.7.js', 'async'); ?>
+		<?php $this->_scriptTag('js/base64-1.7.js', 'defer'); ?>
 <?php
 <?php
 endif;
 endif;
 ?>
 ?>
-		<?php $this->_scriptTag('js/zlib-1.3.1.js', 'async'); ?>
-		<?php $this->_scriptTag('js/base-x-4.0.0.js', 'async'); ?>
-		<?php $this->_scriptTag('js/rawinflate-0.3.js', 'async'); ?>
+		<?php $this->_scriptTag('js/zlib-1.3.1.js', 'defer'); ?>
+		<?php $this->_scriptTag('js/base-x-4.0.0.js', 'defer'); ?>
+		<?php $this->_scriptTag('js/rawinflate-0.3.js', 'defer'); ?>
 		<?php $this->_scriptTag('js/bootstrap-5.3.3.js', 'async'); ?>
 		<?php $this->_scriptTag('js/bootstrap-5.3.3.js', 'async'); ?>
-		<?php $this->_scriptTag('js/dark-mode-switch.js', 'async'); ?>
+		<?php $this->_scriptTag('js/dark-mode-switch.js', 'defer'); ?>
 <?php
 <?php
 if ($SYNTAXHIGHLIGHTING) :
 if ($SYNTAXHIGHLIGHTING) :
 ?>
 ?>
@@ -55,7 +55,7 @@ if ($MARKDOWN) :
 <?php
 <?php
 endif;
 endif;
 ?>
 ?>
-		<?php $this->_scriptTag('js/purify-3.1.6.js', 'async'); ?>
+		<?php $this->_scriptTag('js/purify-3.1.7.js', 'defer'); ?>
 		<?php $this->_scriptTag('js/legacy.js', 'async'); ?>
 		<?php $this->_scriptTag('js/legacy.js', 'async'); ?>
 		<?php $this->_scriptTag('js/privatebin.js', 'defer'); ?>
 		<?php $this->_scriptTag('js/privatebin.js', 'defer'); ?>
 		<!-- icon -->
 		<!-- icon -->
@@ -353,9 +353,18 @@ if ($FILEUPLOAD) :
 <?php
 <?php
 endif;
 endif;
 ?>
 ?>
-				<div id="status" role="alert" class="alert alert-info<?php echo empty($STATUS) ? ' hidden' : '' ?>">
-					<svg width="16" height="16" fill="currentColor" aria-hidden="true"><use href="img/bootstrap-icons.svg#info-circle" /></svg>
-					<?php echo I18n::encode($STATUS), PHP_EOL; ?>
+				<div id="status" role="alert" class="d-flex justify-content-between align-items-center alert alert-<?php echo (bool)$ISDELETED ? 'success' : 'info'; echo empty($STATUS) ? ' hidden' : '' ?>">
+					<div>
+						<svg width="16" height="16" fill="currentColor" aria-hidden="true"><use href="img/bootstrap-icons.svg#info-circle" /></svg>
+						<?php echo I18n::encode($STATUS), PHP_EOL; ?>
+					</div>
+					<?php
+						if ((bool)$ISDELETED):
+					?>
+						<button type="button" class="btn btn-secondary" id="new-from-alert">
+							<svg width="16" height="16" fill="currentColor" aria-hidden="true"><use href="img/bootstrap-icons.svg#repeat" /></svg> <?php echo I18n::_('Start over'), PHP_EOL; ?>
+						</button>
+					<?php endif; ?>
 				</div>
 				</div>
 				<div id="errormessage" role="alert" class="<?php echo empty($ERROR) ? 'hidden' : '' ?> alert alert-danger">
 				<div id="errormessage" role="alert" class="<?php echo empty($ERROR) ? 'hidden' : '' ?> alert alert-danger">
 					<svg width="16" height="16" fill="currentColor" aria-hidden="true"><use href="img/bootstrap-icons.svg#exclamation-triangle" /></svg>
 					<svg width="16" height="16" fill="currentColor" aria-hidden="true"><use href="img/bootstrap-icons.svg#exclamation-triangle" /></svg>

+ 2 - 2
tpl/page.php

@@ -1,4 +1,4 @@
-<?php
+<?php declare(strict_types=1);
 use PrivateBin\I18n;
 use PrivateBin\I18n;
 ?><!DOCTYPE html>
 ?><!DOCTYPE html>
 <html lang="<?php echo I18n::getLanguage(); ?>"<?php echo I18n::isRtl() ? ' dir="rtl"' : ''; ?>>
 <html lang="<?php echo I18n::getLanguage(); ?>"<?php echo I18n::isRtl() ? ' dir="rtl"' : ''; ?>>
@@ -49,7 +49,7 @@ if ($MARKDOWN):
 <?php
 <?php
 endif;
 endif;
 ?>
 ?>
-		<?php $this->_scriptTag('js/purify-3.1.6.js', 'async'); ?>
+		<?php $this->_scriptTag('js/purify-3.1.7.js', 'async'); ?>
 		<?php $this->_scriptTag('js/legacy.js', 'async'); ?>
 		<?php $this->_scriptTag('js/legacy.js', 'async'); ?>
 		<?php $this->_scriptTag('js/privatebin.js', 'defer'); ?>
 		<?php $this->_scriptTag('js/privatebin.js', 'defer'); ?>
 		<!-- icon -->
 		<!-- icon -->

+ 1 - 1
tpl/yourlsproxy.php

@@ -1,4 +1,4 @@
-<?php
+<?php declare(strict_types=1);
 use PrivateBin\I18n;
 use PrivateBin\I18n;
 ?><!DOCTYPE html>
 ?><!DOCTYPE html>
 <html lang="<?php echo I18n::getLanguage(); ?>"<?php echo I18n::isRtl() ? ' dir="rtl"' : ''; ?>>
 <html lang="<?php echo I18n::getLanguage(); ?>"<?php echo I18n::isRtl() ? ' dir="rtl"' : ''; ?>>

+ 1 - 0
tst/Data/FilesystemTest.php

@@ -162,6 +162,7 @@ class FilesystemTest extends TestCase
         // check that all 10 pastes were converted after the purge
         // check that all 10 pastes were converted after the purge
         $this->_model->purge(10);
         $this->_model->purge(10);
         foreach ($ids as $dataid => $storagedir) {
         foreach ($ids as $dataid => $storagedir) {
+            $dataid = (string) $dataid; // undue potential key cast, see https://www.php.net/manual/en/language.types.array.php
             $this->assertFileExists($storagedir . $dataid . '.php', "paste $dataid exists in new format");
             $this->assertFileExists($storagedir . $dataid . '.php', "paste $dataid exists in new format");
             $this->assertFileDoesNotExist($storagedir . $dataid, "old format paste $dataid got removed");
             $this->assertFileDoesNotExist($storagedir . $dataid, "old format paste $dataid got removed");
             $this->assertTrue($this->_model->exists($dataid), "paste $dataid exists");
             $this->assertTrue($this->_model->exists($dataid), "paste $dataid exists");

+ 4 - 4
tst/I18nTest.php

@@ -154,10 +154,10 @@ class I18nTest extends TestCase
         $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'cs;q=0.8,en-GB;q=0.6,en-US;q=0.4,en;q=0.2';
         $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'cs;q=0.8,en-GB;q=0.6,en-US;q=0.4,en;q=0.2';
         I18n::loadTranslations();
         I18n::loadTranslations();
         $this->assertEquals('cs', I18n::getLanguage(), 'browser language cs');
         $this->assertEquals('cs', I18n::getLanguage(), 'browser language cs');
-        $this->assertEquals('1 hodina', I18n::_('%d hours', 1), '1 hour in Czech');
-        $this->assertEquals('2 hodiny', I18n::_('%d hours', 2), '2 hours in Czech');
-        $this->assertEquals('5 minut',  I18n::_('%d minutes', 5), '5 minutes in Czech');
-        $this->assertEquals('14 minut',  I18n::_('%d minutes', 14), '14 minutes in Czech');
+        $this->assertEquals('1 hodina', I18n::_('%d hours', 1), '1 hour in Czech');
+        $this->assertEquals('2 hodiny', I18n::_('%d hours', 2), '2 hours in Czech');
+        $this->assertEquals('5 minut',  I18n::_('%d minutes', 5), '5 minutes in Czech');
+        $this->assertEquals('14 minut',  I18n::_('%d minutes', 14), '14 minutes in Czech');
     }
     }
 
 
     public function testBrowserLanguageAnyDetection()
     public function testBrowserLanguageAnyDetection()

+ 3 - 0
tst/ViewTest.php

@@ -10,6 +10,8 @@ class ViewTest extends TestCase
 
 
     private static $status = '!*#@?$+';
     private static $status = '!*#@?$+';
 
 
+    private static $is_deleted = false;
+
     private static $formatters = array(
     private static $formatters = array(
         'plaintext'          => 'Plain Text',
         'plaintext'          => 'Plain Text',
         'syntaxhighlighting' => 'Source Code',
         'syntaxhighlighting' => 'Source Code',
@@ -38,6 +40,7 @@ class ViewTest extends TestCase
         $page->assign('BASEPATH', '');
         $page->assign('BASEPATH', '');
         $page->assign('ERROR', self::$error);
         $page->assign('ERROR', self::$error);
         $page->assign('STATUS', self::$status);
         $page->assign('STATUS', self::$status);
+        $page->assign('ISDELETED', self::$is_deleted);
         $page->assign('VERSION', self::$version);
         $page->assign('VERSION', self::$version);
         $page->assign('DISCUSSION', true);
         $page->assign('DISCUSSION', true);
         $page->assign('OPENDISCUSSION', true);
         $page->assign('OPENDISCUSSION', true);

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor