Преглед изворни кода

Merge remote-tracking branch 'upstream/master' into style/short-array-syntax-1640

# Conflicts:
#	tst/Bootstrap.php
#	tst/RequestTest.php
Matt Van Horn пре 1 недеља
родитељ
комит
077fc16695
71 измењених фајлова са 713 додато и 558 уклоњено
  1. 6 4
      .github/workflows/codacy-analysis.yml
  2. 6 4
      .github/workflows/codeql-analysis.yml
  3. 5 4
      .github/workflows/eslint.yml
  4. 4 3
      .github/workflows/release.yml
  5. 6 4
      .github/workflows/snyk-scan.yml
  6. 19 11
      .github/workflows/tests.yml
  7. 11 1
      CHANGELOG.md
  8. 2 2
      Makefile
  9. 1 1
      README.md
  10. 8 6
      SECURITY.md
  11. 0 20
      css/bootstrap/privatebin.css
  12. 0 28
      css/bootstrap5/privatebin.css
  13. 1 1
      doc/Installation.md
  14. 6 3
      i18n/ar.json
  15. 6 3
      i18n/bg.json
  16. 6 3
      i18n/ca.json
  17. 6 3
      i18n/co.json
  18. 6 3
      i18n/cs.json
  19. 6 3
      i18n/de.json
  20. 6 3
      i18n/el.json
  21. 6 3
      i18n/en.json
  22. 6 3
      i18n/es.json
  23. 6 3
      i18n/et.json
  24. 6 3
      i18n/fa.json
  25. 6 3
      i18n/fi.json
  26. 6 3
      i18n/fr.json
  27. 16 13
      i18n/he.json
  28. 6 3
      i18n/hi.json
  29. 6 3
      i18n/hu.json
  30. 6 3
      i18n/id.json
  31. 6 3
      i18n/it.json
  32. 6 3
      i18n/ja.json
  33. 6 3
      i18n/jbo.json
  34. 6 3
      i18n/ko.json
  35. 6 3
      i18n/ku.json
  36. 6 3
      i18n/la.json
  37. 6 3
      i18n/lt.json
  38. 6 3
      i18n/nl.json
  39. 6 3
      i18n/no.json
  40. 6 3
      i18n/oc.json
  41. 6 3
      i18n/pl.json
  42. 6 3
      i18n/pt.json
  43. 6 3
      i18n/ro.json
  44. 20 17
      i18n/ru.json
  45. 6 3
      i18n/sk.json
  46. 6 3
      i18n/sl.json
  47. 6 3
      i18n/sv.json
  48. 6 3
      i18n/th.json
  49. 6 3
      i18n/tr.json
  50. 10 7
      i18n/uk.json
  51. 6 3
      i18n/zh.json
  52. 1 1
      js/common.js
  53. 165 230
      js/package-lock.json
  54. 4 3
      js/package.json
  55. 61 45
      js/privatebin.js
  56. 0 1
      js/purify-3.4.1.js
  57. 1 0
      js/purify-3.4.12.js
  58. 27 25
      js/test/CopyToClipboard.js
  59. 34 0
      js/test/PasteStatus.js
  60. 2 2
      lib/Configuration.php
  61. 1 1
      lib/Controller.php
  62. 13 0
      lib/I18n.php
  63. 2 2
      lib/Proxy/YourlsProxy.php
  64. 2 2
      lib/Request.php
  65. 13 6
      tpl/bootstrap.php
  66. 11 8
      tpl/bootstrap5.php
  67. 5 1
      tpl/shortenerproxy.php
  68. 5 0
      tst/Bootstrap.php
  69. 15 0
      tst/I18nTest.php
  70. 3 0
      tst/RequestTest.php
  71. 23 0
      tst/YourlsProxyTest.php

+ 6 - 4
.github/workflows/codacy-analysis.yml

@@ -17,18 +17,20 @@ on:
   schedule:
   schedule:
     - cron: '45 16 * * 1'
     - cron: '45 16 * * 1'
 
 
-permissions:
-  contents: read
-  security-events: write
+permissions: {}
 
 
 jobs:
 jobs:
   codacy-security-scan:
   codacy-security-scan:
     name: Codacy Security Scan
     name: Codacy Security Scan
+    permissions:
+      security-events: write
     runs-on: ubuntu-latest
     runs-on: ubuntu-latest
     steps:
     steps:
       # Checkout the repository to the GitHub Actions runner
       # Checkout the repository to the GitHub Actions runner
       - name: Checkout code
       - name: Checkout code
-        uses: actions/checkout@v6
+        uses: actions/checkout@v7
+        with:
+          persist-credentials: false
 
 
       - name: Remove folders causing errors in report
       - name: Remove folders causing errors in report
         run: rm -rf doc img *.md
         run: rm -rf doc img *.md

+ 6 - 4
.github/workflows/codeql-analysis.yml

@@ -18,13 +18,13 @@ on:
   schedule:
   schedule:
     - cron: '28 22 * * 5'
     - cron: '28 22 * * 5'
 
 
-permissions:
-  contents: read
-  security-events: write
+permissions: {}
 
 
 jobs:
 jobs:
   analyze:
   analyze:
     name: Analyze
     name: Analyze
+    permissions:
+      security-events: write
     runs-on: ubuntu-latest
     runs-on: ubuntu-latest
 
 
     strategy:
     strategy:
@@ -37,7 +37,9 @@ jobs:
 
 
     steps:
     steps:
     - name: Checkout repository
     - name: Checkout repository
-      uses: actions/checkout@v6
+      uses: actions/checkout@v7
+      with:
+        persist-credentials: false
 
 
     # Initializes the CodeQL tools for scanning.
     # Initializes the CodeQL tools for scanning.
     - name: Initialize CodeQL
     - name: Initialize CodeQL

+ 5 - 4
.github/workflows/eslint.yml

@@ -12,18 +12,19 @@ on:
       - 'js/package-lock.json'
       - 'js/package-lock.json'
       - .github/workflows/eslint.yml
       - .github/workflows/eslint.yml
 
 
-permissions:
-  contents: read
+permissions: {}
 
 
 jobs:
 jobs:
   eslint:
   eslint:
     runs-on: ubuntu-latest
     runs-on: ubuntu-latest
     steps:
     steps:
       - name: Checkout repository
       - name: Checkout repository
-        uses: actions/checkout@v6
+        uses: actions/checkout@v7
+        with:
+          persist-credentials: false
 
 
       - name: Set up Node.js
       - name: Set up Node.js
-        uses: actions/setup-node@v6
+        uses: actions/setup-node@v7
         with:
         with:
           node-version: '20'
           node-version: '20'
 
 

+ 4 - 3
.github/workflows/release.yml

@@ -13,8 +13,9 @@ jobs:
     runs-on: ubuntu-latest
     runs-on: ubuntu-latest
     steps:
     steps:
       - name: Fetch changelog from tag
       - name: Fetch changelog from tag
-        uses: actions/checkout@v6
+        uses: actions/checkout@v7
         with:
         with:
+          persist-credentials: false
           sparse-checkout: CHANGELOG.md
           sparse-checkout: CHANGELOG.md
           sparse-checkout-cone-mode: false
           sparse-checkout-cone-mode: false
 
 
@@ -32,8 +33,8 @@ jobs:
     steps:
     steps:
       - name: Collect artifacts
       - name: Collect artifacts
         run: |
         run: |
-          wget -q https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${GITHUB_REF_NAME}.tar.gz
-          wget -q https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${GITHUB_REF_NAME}.zip
+          wget -q "https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${GITHUB_REF_NAME}.tar.gz"
+          wget -q "https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${GITHUB_REF_NAME}.zip"
 
 
       - name: Generate hashes
       - name: Generate hashes
         shell: bash
         shell: bash

+ 6 - 4
.github/workflows/snyk-scan.yml

@@ -9,13 +9,13 @@ on:
   pull_request:
   pull_request:
     branches: [ master ]
     branches: [ master ]
 
 
-permissions:
-  contents: read
-  security-events: write
+permissions: {}
 
 
 jobs:
 jobs:
   # https://github.com/snyk/actions/tree/master/php
   # https://github.com/snyk/actions/tree/master/php
   snyk-php:
   snyk-php:
+    permissions:
+      security-events: write
     runs-on: ubuntu-latest
     runs-on: ubuntu-latest
     if: |
     if: |
       github.repository == 'PrivateBin/PrivateBin' && (
       github.repository == 'PrivateBin/PrivateBin' && (
@@ -24,7 +24,9 @@ jobs:
       github.event.pull_request.author_association == 'MEMBER' ||
       github.event.pull_request.author_association == 'MEMBER' ||
       github.event.pull_request.author_association == 'OWNER' )
       github.event.pull_request.author_association == 'OWNER' )
     steps:
     steps:
-      - uses: actions/checkout@v6
+      - uses: actions/checkout@v7
+        with:
+          persist-credentials: false
       - name: Run Snyk to check for vulnerabilities
       - name: Run Snyk to check for vulnerabilities
         uses: snyk/actions/php@master
         uses: snyk/actions/php@master
         continue-on-error: true # To make sure that SARIF upload gets called
         continue-on-error: true # To make sure that SARIF upload gets called

+ 19 - 11
.github/workflows/tests.yml

@@ -14,7 +14,9 @@ jobs:
     runs-on: ubuntu-latest
     runs-on: ubuntu-latest
     steps:
     steps:
     - name: Checkout
     - name: Checkout
-      uses: actions/checkout@v6
+      uses: actions/checkout@v7
+      with:
+        persist-credentials: false
     - name: Validate composer.json and composer.lock
     - name: Validate composer.json and composer.lock
       run: composer validate
       run: composer validate
     - name: Install dependencies
     - name: Install dependencies
@@ -41,7 +43,9 @@ jobs:
 
 
     # let's get started!
     # let's get started!
     - name: Checkout
     - name: Checkout
-      uses: actions/checkout@v6
+      uses: actions/checkout@v7
+      with:
+        persist-credentials: false
 
 
     # cache PHP extensions
     # cache PHP extensions
     - name: Setup cache environment
     - name: Setup cache environment
@@ -53,7 +57,7 @@ jobs:
         key: ${{ runner.os }}-${{ env.extensions-cache-key }}
         key: ${{ runner.os }}-${{ env.extensions-cache-key }}
 
 
     - name: Cache extensions
     - name: Cache extensions
-      uses: actions/cache@v5
+      uses: actions/cache@v6
       with:
       with:
         path: ${{ steps.extcache.outputs.dir }}
         path: ${{ steps.extcache.outputs.dir }}
         key: ${{ steps.extcache.outputs.key }}
         key: ${{ steps.extcache.outputs.key }}
@@ -89,7 +93,7 @@ jobs:
       shell: bash
       shell: bash
 
 
     - name: Cache dependencies
     - name: Cache dependencies
-      uses: actions/cache@v5
+      uses: actions/cache@v6
       with:
       with:
         path: "${{ steps.composer-cache.outputs.dir }}"
         path: "${{ steps.composer-cache.outputs.dir }}"
         key: "${{ runner.os }}-composer-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/composer.json') }}"
         key: "${{ runner.os }}-composer-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/composer.json') }}"
@@ -121,7 +125,7 @@ jobs:
     name: PHP configuration combination unit tests
     name: PHP configuration combination unit tests
     runs-on: ubuntu-latest
     runs-on: ubuntu-latest
     env:
     env:
-      php-version: '8.4'
+      php-version: '8.5'
       extensions: gd, sqlite3
       extensions: gd, sqlite3
       extensions-cache-key-name: phpextensions
       extensions-cache-key-name: phpextensions
 
 
@@ -129,7 +133,9 @@ jobs:
 
 
     # let's get started!
     # let's get started!
     - name: Checkout
     - name: Checkout
-      uses: actions/checkout@v6
+      uses: actions/checkout@v7
+      with:
+        persist-credentials: false
 
 
     # cache PHP extensions
     # cache PHP extensions
     - name: Setup cache environment
     - name: Setup cache environment
@@ -141,7 +147,7 @@ jobs:
         key: ${{ runner.os }}-${{ env.extensions-cache-key }}
         key: ${{ runner.os }}-${{ env.extensions-cache-key }}
 
 
     - name: Cache extensions
     - name: Cache extensions
-      uses: actions/cache@v5
+      uses: actions/cache@v6
       with:
       with:
         path: ${{ steps.extcache.outputs.dir }}
         path: ${{ steps.extcache.outputs.dir }}
         key: ${{ steps.extcache.outputs.key }}
         key: ${{ steps.extcache.outputs.key }}
@@ -177,7 +183,7 @@ jobs:
       shell: bash
       shell: bash
 
 
     - name: Cache dependencies
     - name: Cache dependencies
-      uses: actions/cache@v5
+      uses: actions/cache@v6
       with:
       with:
         path: "${{ steps.composer-cache.outputs.dir }}"
         path: "${{ steps.composer-cache.outputs.dir }}"
         key: "${{ runner.os }}-composer-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/composer.json') }}"
         key: "${{ runner.os }}-composer-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/composer.json') }}"
@@ -213,12 +219,14 @@ jobs:
     steps:
     steps:
 
 
     - name: Checkout
     - name: Checkout
-      uses: actions/checkout@v6
+      uses: actions/checkout@v7
+      with:
+        persist-credentials: false
 
 
     - name: Setup Node
     - name: Setup Node
-      uses: actions/setup-node@v6
+      uses: actions/setup-node@v7
       with:
       with:
-        node-version: '18'
+        node-version: '20'
         cache: 'npm'
         cache: 'npm'
         cache-dependency-path: 'js/package-lock.json'
         cache-dependency-path: 'js/package-lock.json'
 
 

+ 11 - 1
CHANGELOG.md

@@ -1,6 +1,16 @@
 # PrivateBin version history
 # PrivateBin version history
 
 
-## 2.0.5 (not yet released)
+## 2.0.6 (not yet released)
+* CHANGED: Upgrading libraries to: DOMpurify 3.4.12
+* FIXED: Gracefully handle YOURLS replies with a 200 status code but no shorturl, instead of raising a TypeError
+
+## 2.0.5 (2026-07-11)
+* CHANGED: Show OS-specific copy hotkey hint (Cmd+c on Mac, Ctrl+c on others) (#1506)
+* FIXED: Prevent browsers from rendering unsafe attachments like HTML in a new tab
+* FIXED: State corruption after "Remove attachment" (#1824)
+* FIXED: Copy button is hidden if the document is made as markdown (#1703)
+* FIXED: Shortened URLs from YOURLS received but failed to parse (#1844)
+* FIXED: Insert only base path in JSON API responses, without GET parameters
 
 
 ## 2.0.4 (2026-05-03)
 ## 2.0.4 (2026-05-03)
 * ADDED: Translations for Swedish & Persian
 * ADDED: Translations for Swedish & Persian

+ 2 - 2
Makefile

@@ -1,7 +1,7 @@
 .PHONY: all coverage coverage-js coverage-php doc doc-js doc-php increment sign test test-js test-php help
 .PHONY: all coverage coverage-js coverage-php doc doc-js doc-php increment sign test test-js test-php help
 
 
-CURRENT_VERSION = 2.0.4
-VERSION ?= 2.0.5
+CURRENT_VERSION = 2.0.5
+VERSION ?= 2.0.6
 VERSION_FILES = README.md SECURITY.md doc/Installation.md js/package.json lib/Controller.php Makefile
 VERSION_FILES = README.md SECURITY.md doc/Installation.md js/package.json lib/Controller.php Makefile
 REGEX_CURRENT_VERSION := $(shell echo $(CURRENT_VERSION) | sed "s/\./\\\./g")
 REGEX_CURRENT_VERSION := $(shell echo $(CURRENT_VERSION) | sed "s/\./\\\./g")
 REGEX_VERSION := $(shell echo $(VERSION) | sed "s/\./\\\./g")
 REGEX_VERSION := $(shell echo $(VERSION) | sed "s/\./\\\./g")

+ 1 - 1
README.md

@@ -1,6 +1,6 @@
 # [![PrivateBin](https://raw.githubusercontent.com/PrivateBin/assets/master/images/preview/logoSmall.png)](https://privatebin.info/)
 # [![PrivateBin](https://raw.githubusercontent.com/PrivateBin/assets/master/images/preview/logoSmall.png)](https://privatebin.info/)
 
 
-*Current version: 2.0.4*
+*Current version: 2.0.5*
 
 
 **PrivateBin** is a minimalist, open source online
 **PrivateBin** is a minimalist, open source online
 [pastebin](https://en.wikipedia.org/wiki/Pastebin)
 [pastebin](https://en.wikipedia.org/wiki/Pastebin)

+ 8 - 6
SECURITY.md

@@ -4,18 +4,20 @@
 
 
 | Version | Supported          |
 | Version | Supported          |
 | ------- | ------------------ |
 | ------- | ------------------ |
-| 2.0.4   | :heavy_check_mark: |
-| < 2.0.4 | :x:                |
+| 2.0.5   | :heavy_check_mark: |
+| < 2.0.5 | :x:                |
 
 
 ## Reporting a Vulnerability
 ## Reporting a Vulnerability
 
 
-You can send us email at security@privatebin.org. You should be able to get
+We suggest to [use the corresponding GitHub form](https://github.com/PrivateBin/PrivateBin/security/advisories/new)
+to report a new vulnerability directly on GitHub. [It can be handled there](https://docs.github.com/code-security/how-tos/report-and-fix-vulnerabilities/report-privately)
+and all necessary steps like verifying the vulnerability, crediting the finder
+and drafting a security advisory will be done there.
+
+You can also send us email at security@privatebin.org. You should be able to get
 a response within a week (usually during the next weekend). The respondee will
 a response within a week (usually during the next weekend). The respondee will
 reply from their personal address and can offer you their GPG public key to
 reply from their personal address and can offer you their GPG public key to
 support end-to-end encrypted communication on sensitive topics or attachments.
 support end-to-end encrypted communication on sensitive topics or attachments.
 
 
-You can also [use the corresponding GitHub form](https://github.com/PrivateBin/PrivateBin/security/advisories/new)
-to report a new vulnerability directly on GitHub.
-
 You can also contact us via the regular issue tracker if the risk of early
 You can also contact us via the regular issue tracker if the risk of early
 publication is low or you would request input from other PrivateBin users.
 publication is low or you would request input from other PrivateBin users.

+ 0 - 20
css/bootstrap/privatebin.css

@@ -143,26 +143,6 @@ html[dir="rtl"] #deletelink, html[dir="rtl"] #qrcodemodalClose {
 	padding-right: 30px;
 	padding-right: 30px;
 }
 }
 
 
-#prettyMessageCopyBtn {
-	position: absolute;
-	top: 8px;
-	right: 25px;
-	left: auto;
-	padding: 0;
-	background: none;
-	border: none;
-	z-index: 1;
-}
-
-html[dir="rtl"] #prettyMessageCopyBtn {
-	left: 25px;
-	right: auto;
-}
-
-#copySuccessIcon {
-	display: none;
-}
-
 #copyShortcutHint {
 #copyShortcutHint {
 	margin-bottom: 5px;
 	margin-bottom: 5px;
 }
 }

+ 0 - 28
css/bootstrap5/privatebin.css

@@ -57,34 +57,6 @@ html[dir="rtl"] #deletelink, html[dir="rtl"] #qrcodemodalClose {
 	padding-right: 30px;
 	padding-right: 30px;
 }
 }
 
 
-#prettyMessageCopyBtn {
-	position: absolute;
-	top: 8px;
-	right: 8px;
-	left: auto;
-	width: 20px;
-	height: 20px;
-	padding: 0;
-	background: none;
-	border: none;
-	z-index: 1;
-}
-
-html[dir="rtl"] #prettyMessageCopyBtn {
-	left: 8px;
-	right: auto;
-}
-
-#prettyMessageCopyBtn svg {
-	width: 100%;
-	height: 100%;
-	vertical-align: baseline;
-}
-
-#copySuccessIcon {
-	display: none;
-}
-
 #sendbutton svg {
 #sendbutton svg {
 	transform: translateY(1.5px);
 	transform: translateY(1.5px);
 }
 }

+ 1 - 1
doc/Installation.md

@@ -206,7 +206,7 @@ CREATE INDEX parent ON prefix_comment(pasteid);
 CREATE TABLE prefix_config (
 CREATE TABLE prefix_config (
     id CHAR(16) NOT NULL, value TEXT, PRIMARY KEY (id)
     id CHAR(16) NOT NULL, value TEXT, PRIMARY KEY (id)
 );
 );
-INSERT INTO prefix_config VALUES('VERSION', '2.0.4');
+INSERT INTO prefix_config VALUES('VERSION', '2.0.5');
 ```
 ```
 
 
 In **PostgreSQL**, the `data`, `attachment`, `nickname` and `vizhash` columns
 In **PostgreSQL**, the `data`, `attachment`, `nickname` and `vizhash` columns

+ 6 - 3
i18n/ar.json

@@ -151,7 +151,7 @@
     "server error or not responding": "خطأ في الخادم أو لا يستجيب",
     "server error or not responding": "خطأ في الخادم أو لا يستجيب",
     "Could not post comment: %s": "لا يمكن نشر تعليق: %s",
     "Could not post comment: %s": "لا يمكن نشر تعليق: %s",
     "Sending document…": "يُرسل لصق…",
     "Sending document…": "يُرسل لصق…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "لصقك هو <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(اضغط على <kbd>Ctrl</kbd> + <kbd>c</kbd> للنسخ)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "لصقك هو <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(اضغط على <kbd>%s</kbd> + <kbd>c</kbd> للنسخ)</span>",
     "Delete data": "حذف البيانات",
     "Delete data": "حذف البيانات",
     "Could not create document: %s": "تعذر إنشاء اللصق: %s",
     "Could not create document: %s": "تعذر إنشاء اللصق: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "لا يمكن فك تشفير اللصق: مفتاح فك التشفير مفقود في URL (هل استخدمت معيد توجيه أو أداة تقصير لعناوين URL تزيل جزءًا من عنوان URL؟)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "لا يمكن فك تشفير اللصق: مفتاح فك التشفير مفقود في URL (هل استخدمت معيد توجيه أو أداة تقصير لعناوين URL تزيل جزءًا من عنوان URL؟)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "خطأ في فك ضغط اللصق، متصفحك لا يدعم WebAssembly. الرجاء استخدام متصفح آخر لعرض هذه اللصقة.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "خطأ في فك ضغط اللصق، متصفحك لا يدعم WebAssembly. الرجاء استخدام متصفح آخر لعرض هذه اللصقة.",
     "Start over": "ابدأ من جديد",
     "Start over": "ابدأ من جديد",
     "Document copied to clipboard": "نُسخ اللصق إلى الحافظة",
     "Document copied to clipboard": "نُسخ اللصق إلى الحافظة",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "لنسخ اللصق انقر على زر النسخ أو استخدم اختصار الحافظة <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "لنسخ اللصق انقر على زر النسخ أو استخدم اختصار الحافظة <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "نسخ الرابط",
     "Copy link": "نسخ الرابط",
     "Link copied to clipboard": "نُسخ الرابط إلى الحافظة",
     "Link copied to clipboard": "نُسخ الرابط إلى الحافظة",
     "Document text": "لصق النص",
     "Document text": "لصق النص",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "مفتاح التبويب يعمل كشخصية (انقر <kbd>Ctrl</kbd>+<kbd>m</kbd> أو <kbd>Esc</kbd> للتبديل)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "مفتاح التبويب يعمل كشخصية (انقر <kbd>Ctrl</kbd>+<kbd>m</kbd> أو <kbd>Esc</kbd> للتبديل)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "السمة"
+    "Theme": "السمة",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/bg.json

@@ -151,7 +151,7 @@
     "server error or not responding": "Грешка в сървъра или не отговаря",
     "server error or not responding": "Грешка в сървъра или не отговаря",
     "Could not post comment: %s": "Публикуването на коментара Ви беше неуспешно: %s",
     "Could not post comment: %s": "Публикуването на коментара Ви беше неуспешно: %s",
     "Sending document…": "Изпращане на информацията Ви…",
     "Sending document…": "Изпращане на информацията Ви…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Вашата връзка е <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Натиснете <kbd>Ctrl</kbd>+<kbd>c</kbd> за да копирате)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Вашата връзка е <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Натиснете <kbd>%s</kbd>+<kbd>c</kbd> за да копирате)</span>",
     "Delete data": "Изтриване на информацията",
     "Delete data": "Изтриване на информацията",
     "Could not create document: %s": "Създаването на връзката ви беше неуспешно: %s",
     "Could not create document: %s": "Създаването на връзката ви беше неуспешно: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Дешифроването на информацията беше неуспешно: Ключа за декриптиране липсва във връзката (Да не сте използвали услуга за пренасочване или скъсяване на връзката, което би изрязало части от нея?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Дешифроването на информацията беше неуспешно: Ключа за декриптиране липсва във връзката (Да не сте използвали услуга за пренасочване или скъсяване на връзката, което би изрязало части от нея?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Start over": "Start over",
     "Start over": "Start over",
     "Document copied to clipboard": "Document copied to clipboard",
     "Document copied to clipboard": "Document copied to clipboard",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copy link",
     "Copy link": "Copy link",
     "Link copied to clipboard": "Link copied to clipboard",
     "Link copied to clipboard": "Link copied to clipboard",
     "Document text": "Document text",
     "Document text": "Document text",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Theme"
+    "Theme": "Theme",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/ca.json

@@ -151,7 +151,7 @@
     "server error or not responding": "server error or not responding",
     "server error or not responding": "server error or not responding",
     "Could not post comment: %s": "No s'ha pogut publicar el comentari: %s",
     "Could not post comment: %s": "No s'ha pogut publicar el comentari: %s",
     "Sending document…": "Enviant document…",
     "Sending document…": "Enviant document…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>",
     "Delete data": "Esborrar les dades",
     "Delete data": "Esborrar les dades",
     "Could not create document: %s": "Could not create document: %s",
     "Could not create document: %s": "Could not create document: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "No es pot desxifrar la nota: falta la clau de desxifrat a l'URL (vau utilitzar un adreçament o un escurçador d'URL que elimina part de l'URL?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "No es pot desxifrar la nota: falta la clau de desxifrat a l'URL (vau utilitzar un adreçament o un escurçador d'URL que elimina part de l'URL?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Start over": "Start over",
     "Start over": "Start over",
     "Document copied to clipboard": "Document copied to clipboard",
     "Document copied to clipboard": "Document copied to clipboard",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copy link",
     "Copy link": "Copy link",
     "Link copied to clipboard": "Link copied to clipboard",
     "Link copied to clipboard": "Link copied to clipboard",
     "Document text": "Document text",
     "Document text": "Document text",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Theme"
+    "Theme": "Theme",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/co.json

@@ -151,7 +151,7 @@
     "server error or not responding": "sbagliu di u servitore o u servitore ùn risponde micca",
     "server error or not responding": "sbagliu di u servitore o u servitore ùn risponde micca",
     "Could not post comment: %s": "Ùn si pò micca impustà u cummentu : %s",
     "Could not post comment: %s": "Ùn si pò micca impustà u cummentu : %s",
     "Sending document…": "Inviu di u ducumentu…",
     "Sending document…": "Inviu di u ducumentu…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "U vostru ducumentu si trova à l’indirizzu <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Appughjate nant’à <kbd>Ctrl</kbd>+<kbd>c</kbd> per cupià u liame)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "U vostru ducumentu si trova à l’indirizzu <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Appughjate nant’à <kbd>%s</kbd>+<kbd>c</kbd> per cupià u liame)</span>",
     "Delete data": "Squassà i dati",
     "Delete data": "Squassà i dati",
     "Could not create document: %s": "Ùn si pò micca creà u ducumentu : %s",
     "Could not create document: %s": "Ùn si pò micca creà u ducumentu : %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Ùn si pò micca dicifrà u ducumentu : A chjave di dicifratura hè assente in l’indirizzu. Averiate impiegatu un orientadore d’indirizzu o un riduttore chì ammuzzeghja una parte di l’indirizzu ?",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Ùn si pò micca dicifrà u ducumentu : A chjave di dicifratura hè assente in l’indirizzu. Averiate impiegatu un orientadore d’indirizzu o un riduttore chì ammuzzeghja una parte di l’indirizzu ?",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Sbagliu durante a scumpressione di u ducumentu, perchè u vostru navigatore ùn accetteghja micca WebAssembly. Ci vole à impiegà un altru navigatore per affissà stu ducumentu.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Sbagliu durante a scumpressione di u ducumentu, perchè u vostru navigatore ùn accetteghja micca WebAssembly. Ci vole à impiegà un altru navigatore per affissà stu ducumentu.",
     "Start over": "Principià torna",
     "Start over": "Principià torna",
     "Document copied to clipboard": "U ducumentu hè statu cupiatu in u preme’papei",
     "Document copied to clipboard": "U ducumentu hè statu cupiatu in u preme’papei",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Per cupià u ducumentu, appughjate nant’à u buttone di copia o impiegate l’accurtatoghju di tastera <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "Per cupià u ducumentu, appughjate nant’à u buttone di copia o impiegate l’accurtatoghju di tastera <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Cupià u liame",
     "Copy link": "Cupià u liame",
     "Link copied to clipboard": "U liame hè statu cupiatu in u preme’papei",
     "Link copied to clipboard": "U liame hè statu cupiatu in u preme’papei",
     "Document text": "Testu di u ducumentu",
     "Document text": "Testu di u ducumentu",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "U tastu di tabulazione ghjova cum’è un caratteru (Appughjate nant’à <kbd>Ctrl</kbd>+<kbd>m</kbd> o <kbd>Scapp</kbd> per scambià)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "U tastu di tabulazione ghjova cum’è un caratteru (Appughjate nant’à <kbd>Ctrl</kbd>+<kbd>m</kbd> o <kbd>Scapp</kbd> per scambià)",
     "Show password": "Affissà a parolla d’intesa",
     "Show password": "Affissà a parolla d’intesa",
     "Hide password": "Piattà a parolla d’intesa",
     "Hide password": "Piattà a parolla d’intesa",
-    "Theme": "Tema"
+    "Theme": "Tema",
+    "Copy": "Cupià",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/cs.json

@@ -151,7 +151,7 @@
     "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 document…": "Odesílání příspěvku…",
     "Sending document…": "Odesílání příspěvku…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Váš příspěvek je <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Stiskněte <kbd>Ctrl</kbd>+<kbd>c</kbd> pro zkopírování)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Váš příspěvek je <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Stiskněte <kbd>%s</kbd>+<kbd>c</kbd> pro zkopírování)</span>",
     "Delete data": "Odstranit data",
     "Delete data": "Odstranit data",
     "Could not create document: %s": "Nepodařilo se vytvořit příspěvek: %s",
     "Could not create document: %s": "Nepodařilo se vytvořit příspěvek: %s",
     "Cannot decrypt document: 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?)",
     "Cannot decrypt document: 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?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "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č.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "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": "Začít znovu",
     "Start over": "Začít znovu",
     "Document copied to clipboard": "Dokument zkopírován do schránky",
     "Document copied to clipboard": "Dokument zkopírován do schránky",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Pro zkopírování dokumentu klikněte na tlačítko nebo použijte klávesovou zkratku schránky <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "Pro zkopírování dokumentu klikněte na tlačítko nebo použijte klávesovou zkratku schránky <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Zkopírovat odkaz",
     "Copy link": "Zkopírovat odkaz",
     "Link copied to clipboard": "Odkaz zkopírován do schránky",
     "Link copied to clipboard": "Odkaz zkopírován do schránky",
     "Document text": "Text dokumentu",
     "Document text": "Text dokumentu",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulátor funguje jako znak (pro přepnutí stiskněte <kbd>Ctrl</kbd>+<kbd>m</kbd> nebo <kbd>Esc</kbd>)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulátor funguje jako znak (pro přepnutí stiskněte <kbd>Ctrl</kbd>+<kbd>m</kbd> nebo <kbd>Esc</kbd>)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Vzhled"
+    "Theme": "Vzhled",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/de.json

@@ -151,7 +151,7 @@
     "server error or not responding": "Fehler auf dem Server oder keine Antwort vom Server",
     "server error or not responding": "Fehler auf dem Server oder keine Antwort vom Server",
     "Could not post comment: %s": "Konnte Kommentar nicht senden: %s",
     "Could not post comment: %s": "Konnte Kommentar nicht senden: %s",
     "Sending document…": "Sende Document…",
     "Sending document…": "Sende Document…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Dein Dokument ist unter <a id=\"pasteurl\" href=\"%s\">%s</a> zu finden <span id=\"copyhint\">(Drücke <kbd>Strg</kbd>+<kbd>c</kbd> um den Link zu kopieren)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Dein Dokument ist unter <a id=\"pasteurl\" href=\"%s\">%s</a> zu finden <span id=\"copyhint\">(Drücke <kbd>Strg</kbd>+<kbd>c</kbd> um den Link zu kopieren)</span>",
     "Delete data": "Lösche Daten",
     "Delete data": "Lösche Daten",
     "Could not create document: %s": "Dokument konnte nicht erstellt werden: %s",
     "Could not create document: %s": "Dokument konnte nicht erstellt werden: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Konnte Document nicht entschlüsseln: Der Schlüssel fehlt in der Adresse (Hast du eine Umleitung oder einen URL-Verkürzer benutzt, der Teile der Adresse entfernt?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Konnte Document nicht entschlüsseln: Der Schlüssel fehlt in der Adresse (Hast du eine Umleitung oder einen URL-Verkürzer benutzt, der Teile der Adresse entfernt?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Fehler beim Dekomprimieren des Dokumentes. Dein Browser unterstützt WebAssembly nicht. Bitte verwende einen anderen Browser, um dieses Dokument anzuzeigen.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Fehler beim Dekomprimieren des Dokumentes. Dein Browser unterstützt WebAssembly nicht. Bitte verwende einen anderen Browser, um dieses Dokument anzuzeigen.",
     "Start over": "Neues Dokument erstellen",
     "Start over": "Neues Dokument erstellen",
     "Document copied to clipboard": "Dokument wurde in Zwischenablage kopiert.",
     "Document copied to clipboard": "Dokument wurde in Zwischenablage kopiert.",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Zum Kopieren des Textes drücken Sie die Kopieren-Schaltfläche oder verwenden Sie die Tastenkombination <kbd>Strg</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "Zum Kopieren des Textes drücken Sie die Kopieren-Schaltfläche oder verwenden Sie die Tastenkombination <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Verknüpfung kopieren",
     "Copy link": "Verknüpfung kopieren",
     "Link copied to clipboard": "Verknüpfung wurde in die Zwischenablage kopiert.",
     "Link copied to clipboard": "Verknüpfung wurde in die Zwischenablage kopiert.",
     "Document text": "Text des Dokuments",
     "Document text": "Text des Dokuments",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulatortaste als Zeichen interpretieren (Umschalten durch <kbd>Strg</kbd>+<kbd>m</kbd> oder <kbd>Esc</kbd>)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulatortaste als Zeichen interpretieren (Umschalten durch <kbd>Strg</kbd>+<kbd>m</kbd> oder <kbd>Esc</kbd>)",
     "Show password": "Passwort anzeigen",
     "Show password": "Passwort anzeigen",
     "Hide password": "Passwort verbergen",
     "Hide password": "Passwort verbergen",
-    "Theme": "Design"
+    "Theme": "Design",
+    "Copy": "Kopieren",
+    "Cmd": "Cmd",
+    "Ctrl": "Strg"
 }
 }

+ 6 - 3
i18n/el.json

@@ -151,7 +151,7 @@
     "server error or not responding": "Πρόβλημα του διακομιστή ή δεν υπάρχει απάντηση",
     "server error or not responding": "Πρόβλημα του διακομιστή ή δεν υπάρχει απάντηση",
     "Could not post comment: %s": "Δεν ήταν δυνατή η δημοσίευση του σχολίου: %s",
     "Could not post comment: %s": "Δεν ήταν δυνατή η δημοσίευση του σχολίου: %s",
     "Sending document…": "Η επικόλληση αποστέλλεται…",
     "Sending document…": "Η επικόλληση αποστέλλεται…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Η επικόλλησή σας είναι <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Πληκτρολογήστε <kbd>Ctrl</kbd>+<kbd>c</kbd> για αντιγραφή)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Η επικόλλησή σας είναι <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Πληκτρολογήστε <kbd>%s</kbd>+<kbd>c</kbd> για αντιγραφή)</span>",
     "Delete data": "Διαγραφή δεδομένων",
     "Delete data": "Διαγραφή δεδομένων",
     "Could not create document: %s": "Δεν ήταν δυνατή η δημιουργία επικόλλησης: %s",
     "Could not create document: %s": "Δεν ήταν δυνατή η δημιουργία επικόλλησης: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Δεν ήταν δυνατή η αποκρυπτογράφηση της επικόλλησης: Το κλειδί αποκρυπτογράφησης λείπει από τον σύνδεσμο (Μήπως χρησιμοποιήσατε ανακατεύθυνση συνδέσμου ή υπηρεσία συντόμευσης συνδέσμου;)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Δεν ήταν δυνατή η αποκρυπτογράφηση της επικόλλησης: Το κλειδί αποκρυπτογράφησης λείπει από τον σύνδεσμο (Μήπως χρησιμοποιήσατε ανακατεύθυνση συνδέσμου ή υπηρεσία συντόμευσης συνδέσμου;)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Σφάλμα αποσυμπίεσης της επικόλλησης, ο περιηγητής σας δεν υποστηρίζει WebAssembly. Παρακαλούμε χρησιμοποιήστε έναν άλλο περιηγητή για να δείτε αυτή την επικόλληση.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Σφάλμα αποσυμπίεσης της επικόλλησης, ο περιηγητής σας δεν υποστηρίζει WebAssembly. Παρακαλούμε χρησιμοποιήστε έναν άλλο περιηγητή για να δείτε αυτή την επικόλληση.",
     "Start over": "Start over",
     "Start over": "Start over",
     "Document copied to clipboard": "Document copied to clipboard",
     "Document copied to clipboard": "Document copied to clipboard",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copy link",
     "Copy link": "Copy link",
     "Link copied to clipboard": "Link copied to clipboard",
     "Link copied to clipboard": "Link copied to clipboard",
     "Document text": "Document text",
     "Document text": "Document text",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Theme"
+    "Theme": "Theme",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/en.json

@@ -151,7 +151,7 @@
     "server error or not responding": "server error or not responding",
     "server error or not responding": "server error or not responding",
     "Could not post comment: %s": "Could not post comment: %s",
     "Could not post comment: %s": "Could not post comment: %s",
     "Sending document…": "Sending document…",
     "Sending document…": "Sending document…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>",
     "Delete data": "Delete data",
     "Delete data": "Delete data",
     "Could not create document: %s": "Could not create document: %s",
     "Could not create document: %s": "Could not create document: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Start over": "Start over",
     "Start over": "Start over",
     "Document copied to clipboard": "Document copied to clipboard",
     "Document copied to clipboard": "Document copied to clipboard",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copy link",
     "Copy link": "Copy link",
     "Link copied to clipboard": "Link copied to clipboard",
     "Link copied to clipboard": "Link copied to clipboard",
     "Document text": "Document text",
     "Document text": "Document text",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Theme"
+    "Theme": "Theme",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/es.json

@@ -151,7 +151,7 @@
     "server error or not responding": "Error del servidor o el servidor no responde",
     "server error or not responding": "Error del servidor o el servidor no responde",
     "Could not post comment: %s": "No fue posible publicar comentario: %s",
     "Could not post comment: %s": "No fue posible publicar comentario: %s",
     "Sending document…": "Enviando documento…",
     "Sending document…": "Enviando documento…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Su texto está en <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Presione <kbd>Ctrl</kbd>+<kbd>c</kbd> para copiar)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Su texto está en <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Presione <kbd>%s</kbd>+<kbd>c</kbd> para copiar)</span>",
     "Delete data": "Eliminar datos",
     "Delete data": "Eliminar datos",
     "Could not create document: %s": "No fue posible crear el archivo: %s",
     "Could not create document: %s": "No fue posible crear el archivo: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "No es posible descifrar el documento: Falta la clave de descifrado en la URL (¿Utilizó un redirector o un acortador de URL que quite parte de la URL?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "No es posible descifrar el documento: Falta la clave de descifrado en la URL (¿Utilizó un redirector o un acortador de URL que quite parte de la URL?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error al descomprimir el documento. Su navegador no es compatible con WebAssembly. Utilice otro navegador para ver este documento.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error al descomprimir el documento. Su navegador no es compatible con WebAssembly. Utilice otro navegador para ver este documento.",
     "Start over": "Empezar de nuevo",
     "Start over": "Empezar de nuevo",
     "Document copied to clipboard": "Documento copiado al portapapeles",
     "Document copied to clipboard": "Documento copiado al portapapeles",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Para copiar el documento presione el botón copiar o use el atajo del portapapeles <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "Para copiar el documento presione el botón copiar o use el atajo del portapapeles <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copiar enlace",
     "Copy link": "Copiar enlace",
     "Link copied to clipboard": "Enlace copiado al portapapeles",
     "Link copied to clipboard": "Enlace copiado al portapapeles",
     "Document text": "Texto del documento",
     "Document text": "Texto del documento",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "La tecla de tabulación funciona como carácter (presione <kbd>Ctrl</kbd>+<kbd>m</kbd> o <kbd>Esc</kbd> para alternar)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "La tecla de tabulación funciona como carácter (presione <kbd>Ctrl</kbd>+<kbd>m</kbd> o <kbd>Esc</kbd> para alternar)",
     "Show password": "Mostrar contraseña",
     "Show password": "Mostrar contraseña",
     "Hide password": "Ocultar contraseña",
     "Hide password": "Ocultar contraseña",
-    "Theme": "Tema"
+    "Theme": "Tema",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/et.json

@@ -151,7 +151,7 @@
     "server error or not responding": "serveri viga või ei vasta",
     "server error or not responding": "serveri viga või ei vasta",
     "Could not post comment: %s": "Ei suutnud kommentaari postitada: %s",
     "Could not post comment: %s": "Ei suutnud kommentaari postitada: %s",
     "Sending document…": "Kleepe saatmine…",
     "Sending document…": "Kleepe saatmine…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Sinu kleebe on <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Kopeerimiseks vajuta <kbd>Ctrl</kbd>+<kbd>c</kbd>)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Sinu kleebe on <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Kopeerimiseks vajuta <kbd>%s</kbd>+<kbd>c</kbd>)</span>",
     "Delete data": "Kustuta andmed",
     "Delete data": "Kustuta andmed",
     "Could not create document: %s": "Ei suutnud kleebet luua: %s",
     "Could not create document: %s": "Ei suutnud kleebet luua: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Ei suutnud kleebet dekrüpteerida: Dekrüpteerimisvõti on URL-ist puudu (Kas kasutasid ümbersuunajat või URL-i lühendajat, mis eemaldab osa URL-ist?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Ei suutnud kleebet dekrüpteerida: Dekrüpteerimisvõti on URL-ist puudu (Kas kasutasid ümbersuunajat või URL-i lühendajat, mis eemaldab osa URL-ist?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Start over": "Alusta uuesti",
     "Start over": "Alusta uuesti",
     "Document copied to clipboard": "Kleebe kopeeriti lõikelauale",
     "Document copied to clipboard": "Kleebe kopeeriti lõikelauale",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Kopeeri link",
     "Copy link": "Kopeeri link",
     "Link copied to clipboard": "Link kopeeriti lõikelauale",
     "Link copied to clipboard": "Link kopeeriti lõikelauale",
     "Document text": "Kleebi tekst",
     "Document text": "Kleebi tekst",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Teema"
+    "Theme": "Teema",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/fa.json

@@ -151,7 +151,7 @@
     "server error or not responding": "خطای سرور یا عدم پاسخ‌دهی",
     "server error or not responding": "خطای سرور یا عدم پاسخ‌دهی",
     "Could not post comment: %s": "ارسال نظر ممکن نیست: %s",
     "Could not post comment: %s": "ارسال نظر ممکن نیست: %s",
     "Sending document…": "در حال ارسال سند…",
     "Sending document…": "در حال ارسال سند…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "سند شما <a id=\"pasteurl\" href=\"%s\">%s</a> است <span id=\"copyhint\">(برای کپی‌کردن <kbd>Ctrl</kbd>+<kbd>c</kbd> را فشار دهید)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "سند شما <a id=\"pasteurl\" href=\"%s\">%s</a> است <span id=\"copyhint\">(برای کپی‌کردن <kbd>%s</kbd>+<kbd>c</kbd> را فشار دهید)</span>",
     "Delete data": "حذف داده‌ها",
     "Delete data": "حذف داده‌ها",
     "Could not create document: %s": "ایجاد سند ممکن نیست: %s",
     "Could not create document: %s": "ایجاد سند ممکن نیست: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "رمزگشایی سند ممکن نیست: کلید رمزگشایی در URL موجود نیست (آیا از ریدایرکت یا کوتاه‌کنندهٔ URL استفاده کرده‌اید که بخشی از URL را حذف می‌کند؟)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "رمزگشایی سند ممکن نیست: کلید رمزگشایی در URL موجود نیست (آیا از ریدایرکت یا کوتاه‌کنندهٔ URL استفاده کرده‌اید که بخشی از URL را حذف می‌کند؟)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "خطا در رفع فشرده‌سازی سند، مرورگر شما از WebAssembly پشتیبانی نمی‌کند. لطفاً برای مشاهدهٔ این سند از مرورگر دیگری استفاده کنید.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "خطا در رفع فشرده‌سازی سند، مرورگر شما از WebAssembly پشتیبانی نمی‌کند. لطفاً برای مشاهدهٔ این سند از مرورگر دیگری استفاده کنید.",
     "Start over": "شروع دوباره",
     "Start over": "شروع دوباره",
     "Document copied to clipboard": "سند در کلیپ‌بورد کپی شد",
     "Document copied to clipboard": "سند در کلیپ‌بورد کپی شد",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "برای کپی‌کردن سند، دکمهٔ کپی را فشار دهید یا از میانبر کلیپ‌بورد <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd> استفاده کنید",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "برای کپی‌کردن سند، دکمهٔ کپی را فشار دهید یا از میانبر کلیپ‌بورد <kbd>%s</kbd>+<kbd>c</kbd> استفاده کنید",
     "Copy link": "کپی لینک",
     "Copy link": "کپی لینک",
     "Link copied to clipboard": "لینک در کلیپ‌بورد کپی شد",
     "Link copied to clipboard": "لینک در کلیپ‌بورد کپی شد",
     "Document text": "متن سند",
     "Document text": "متن سند",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "کلید Tab به‌عنوان کاراکتر عمل می‌کند (برای تغییر وضعیت <kbd>Ctrl</kbd>+<kbd>m</kbd> یا <kbd>Esc</kbd> را فشار دهید)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "کلید Tab به‌عنوان کاراکتر عمل می‌کند (برای تغییر وضعیت <kbd>Ctrl</kbd>+<kbd>m</kbd> یا <kbd>Esc</kbd> را فشار دهید)",
     "Show password": "نمایش رمز عبور",
     "Show password": "نمایش رمز عبور",
     "Hide password": "مخفی‌کردن رمز عبور",
     "Hide password": "مخفی‌کردن رمز عبور",
-    "Theme": "تم"
+    "Theme": "تم",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/fi.json

@@ -151,7 +151,7 @@
     "server error or not responding": "palvelinvirhe tai palvelin ei vastaa",
     "server error or not responding": "palvelinvirhe tai palvelin ei vastaa",
     "Could not post comment: %s": "Kommenttia ei voitu lähettää: %s",
     "Could not post comment: %s": "Kommenttia ei voitu lähettää: %s",
     "Sending document…": "Lähetetään pastea…",
     "Sending document…": "Lähetetään pastea…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Pastesi on <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Paina <kbd>Ctrl</kbd>+<kbd>c</kbd> kopioidaksesi)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Pastesi on <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Paina <kbd>%s</kbd>+<kbd>c</kbd> kopioidaksesi)</span>",
     "Delete data": "Poista data",
     "Delete data": "Poista data",
     "Could not create document: %s": "Pastea ei voitu luoda: %s",
     "Could not create document: %s": "Pastea ei voitu luoda: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Pastea ei voitu purkaa: Purkausavain puuttuu URL:stä (Käytitkö uudelleenohjaajaa tai URL-lyhentäjää joka poistaa osan URL:stä?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Pastea ei voitu purkaa: Purkausavain puuttuu URL:stä (Käytitkö uudelleenohjaajaa tai URL-lyhentäjää joka poistaa osan URL:stä?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Virhe pasten purkamisessa, selaimesi ei tue WebAssemblyä. Ole hyvä ja käytä toista selainta nähdäksesi tämä asiakirja.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Virhe pasten purkamisessa, selaimesi ei tue WebAssemblyä. Ole hyvä ja käytä toista selainta nähdäksesi tämä asiakirja.",
     "Start over": "Aloita alusta",
     "Start over": "Aloita alusta",
     "Document copied to clipboard": "Asiakirja kopioitu leikepöydälle",
     "Document copied to clipboard": "Asiakirja kopioitu leikepöydälle",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Voit kopioida pasten painamalla kopioi-painiketta tai käyttämällä leikepöydän oikotietä <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "Voit kopioida pasten painamalla kopioi-painiketta tai käyttämällä leikepöydän oikotietä <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Kopioi linkki",
     "Copy link": "Kopioi linkki",
     "Link copied to clipboard": "Linkki kopioitu leikepöydälle",
     "Link copied to clipboard": "Linkki kopioitu leikepöydälle",
     "Document text": "Liitä teksti",
     "Document text": "Liitä teksti",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulaattori toimii merkkinä (Paina <kbd>Ctrl</kbd>+<kbd>m</kbd> tai <kbd>Esc</kbd> vaihtaaksesi)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulaattori toimii merkkinä (Paina <kbd>Ctrl</kbd>+<kbd>m</kbd> tai <kbd>Esc</kbd> vaihtaaksesi)",
     "Show password": "Näytä salasana",
     "Show password": "Näytä salasana",
     "Hide password": "Piilota salasana",
     "Hide password": "Piilota salasana",
-    "Theme": "Teema"
+    "Theme": "Teema",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/fr.json

@@ -151,7 +151,7 @@
     "server error or not responding": "Le serveur ne répond pas ou a rencontré une erreur",
     "server error or not responding": "Le serveur ne répond pas ou a rencontré une erreur",
     "Could not post comment: %s": "Impossible de poster le commentaire : %s",
     "Could not post comment: %s": "Impossible de poster le commentaire : %s",
     "Sending document…": "Envoi du document…",
     "Sending document…": "Envoi du document…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Votre document est disponible à l'adresse <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Appuyez sur <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd> pour copier)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Votre document est disponible à l'adresse <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Appuyez sur <kbd>%s</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd> pour copier)</span>",
     "Delete data": "Supprimer les données du document",
     "Delete data": "Supprimer les données du document",
     "Could not create document: %s": "Impossible de créer le document : %s",
     "Could not create document: %s": "Impossible de créer le document : %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Impossible de déchiffrer le document : Clé de déchiffrement manquante dans l'URL (Avez-vous utilisé un redirecteur ou un site de réduction d'URL qui supprime une partie de l'URL ?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Impossible de déchiffrer le document : Clé de déchiffrement manquante dans l'URL (Avez-vous utilisé un redirecteur ou un site de réduction d'URL qui supprime une partie de l'URL ?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Erreur lors de la décompression du document, votre navigateur ne supporte pas WebAssembly. Veuillez utiliser un autre navigateur pour voir ce document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Erreur lors de la décompression du document, votre navigateur ne supporte pas WebAssembly. Veuillez utiliser un autre navigateur pour voir ce document.",
     "Start over": "Recommencer",
     "Start over": "Recommencer",
     "Document copied to clipboard": "Document copié dans le presse-papier",
     "Document copied to clipboard": "Document copié dans le presse-papier",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Pour copier appuyer sur le bouton Copier le lien ou utiliser le raccourci <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "Pour copier appuyer sur le bouton Copier le lien ou utiliser le raccourci <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copier le lien",
     "Copy link": "Copier le lien",
     "Link copied to clipboard": "Lien copié dans le presse-papier",
     "Link copied to clipboard": "Lien copié dans le presse-papier",
     "Document text": "Texte du document",
     "Document text": "Texte du document",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "La touche de tabulation sert de caractère (Presser <kbd>Ctrl</kbd>+<kbd>m</kbd> ou <kbd>Esc</kbd> pour basculer)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "La touche de tabulation sert de caractère (Presser <kbd>Ctrl</kbd>+<kbd>m</kbd> ou <kbd>Esc</kbd> pour basculer)",
     "Show password": "Afficher le mot de passe",
     "Show password": "Afficher le mot de passe",
     "Hide password": "Cacher le mot de passe",
     "Hide password": "Cacher le mot de passe",
-    "Theme": "Thème"
+    "Theme": "Thème",
+    "Copy": "Copier",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 16 - 13
i18n/he.json

@@ -151,19 +151,19 @@
     "server error or not responding": "שגיאת שרת או שהשרת לא מגיב",
     "server error or not responding": "שגיאת שרת או שהשרת לא מגיב",
     "Could not post comment: %s": "לא ניתן לפרסם תגובה: %s",
     "Could not post comment: %s": "לא ניתן לפרסם תגובה: %s",
     "Sending document…": "ההדבקה נשלחת…",
     "Sending document…": "ההדבקה נשלחת…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "ההדבקה שלך היא <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(יש ללחוץ <kbd>Ctrl</kbd>+<kbd>c</kbd> כדי להעתיק)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "ההדבקה שלך היא <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(יש ללחוץ <kbd>%s</kbd>+<kbd>c</kbd> כדי להעתיק)</span>",
     "Delete data": "מחיקת נתונים",
     "Delete data": "מחיקת נתונים",
     "Could not create document: %s": "לא ניתן ליצור הדבקה: %s",
     "Could not create document: %s": "לא ניתן ליצור הדבקה: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "לא ניתן לפענח הדבקה: מפתח הפענוח חסר בכתובת (השתמשת במערכת הפנייה או מקצר כתובות שחותכים חלק מהכתובת?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "לא ניתן לפענח הדבקה: מפתח הפענוח חסר בכתובת (השתמשת במערכת הפנייה או מקצר כתובות שחותכים חלק מהכתובת?)",
     "B": "ב׳",
     "B": "ב׳",
-    "kB": "kB",
-    "MB": "MB",
-    "GB": "GB",
-    "TB": "TB",
-    "PB": "PB",
-    "EB": "EB",
-    "ZB": "ZB",
-    "YB": "YB",
+    "kB": "ק\"ב",
+    "MB": "מ\"ב",
+    "GB": "ג\"ב",
+    "TB": "ט\"ב",
+    "PB": "פ\"ב",
+    "EB": "א\"ב",
+    "ZB": "ז\"ב",
+    "YB": "י\"ב",
     "Format": "פורמט",
     "Format": "פורמט",
     "Plain Text": "טקסט פשוט",
     "Plain Text": "טקסט פשוט",
     "Source Code": "קוד מקור",
     "Source Code": "קוד מקור",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "שגיאה בהפקת ההדבקה, הדפדפן שלך לא תומך ב-WebAssembly. אנא השתמש בדפדפן אחר כדי לצפות בהדבקה זו.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "שגיאה בהפקת ההדבקה, הדפדפן שלך לא תומך ב-WebAssembly. אנא השתמש בדפדפן אחר כדי לצפות בהדבקה זו.",
     "Start over": "להתחיל מחדש",
     "Start over": "להתחיל מחדש",
     "Document copied to clipboard": "ההדבקה הועתקה ללוח",
     "Document copied to clipboard": "ההדבקה הועתקה ללוח",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "על מנת להעתיק את ההדבקה, לחץ על כפתור ההעתקה או השתמש בקיצור הדרך ללוח <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "על מנת להעתיק את ההדבקה, לחץ על כפתור ההעתקה או השתמש בקיצור הדרך ללוח <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "העתק קישור",
     "Copy link": "העתק קישור",
     "Link copied to clipboard": "הקישור הועתק ללוח",
     "Link copied to clipboard": "הקישור הועתק ללוח",
     "Document text": "הדבק טקסט",
     "Document text": "הדבק טקסט",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "משטח ה-tab פועל כמקש תו (לחץ על <kbd>Ctrl</kbd>+<kbd>m</kbd> או <kbd>Esc</kbd> להחלפה)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "משטח ה-tab פועל כמקש תו (לחץ על <kbd>Ctrl</kbd>+<kbd>m</kbd> או <kbd>Esc</kbd> להחלפה)",
-    "Show password": "Show password",
-    "Hide password": "Hide password",
-    "Theme": "נושא"
+    "Show password": "הצג סיסמה",
+    "Hide password": "הסתר סיסמה",
+    "Theme": "נושא",
+    "Copy": "העתק",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/hi.json

@@ -151,7 +151,7 @@
     "server error or not responding": "server error or not responding",
     "server error or not responding": "server error or not responding",
     "Could not post comment: %s": "Could not post comment: %s",
     "Could not post comment: %s": "Could not post comment: %s",
     "Sending document…": "Sending document…",
     "Sending document…": "Sending document…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>",
     "Delete data": "Delete data",
     "Delete data": "Delete data",
     "Could not create document: %s": "Could not create document: %s",
     "Could not create document: %s": "Could not create document: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Start over": "Start over",
     "Start over": "Start over",
     "Document copied to clipboard": "Document copied to clipboard",
     "Document copied to clipboard": "Document copied to clipboard",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copy link",
     "Copy link": "Copy link",
     "Link copied to clipboard": "Link copied to clipboard",
     "Link copied to clipboard": "Link copied to clipboard",
     "Document text": "Document text",
     "Document text": "Document text",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Theme"
+    "Theme": "Theme",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/hu.json

@@ -151,7 +151,7 @@
     "server error or not responding": "A szerveren hiba lépett fel vagy nem válaszol.",
     "server error or not responding": "A szerveren hiba lépett fel vagy nem válaszol.",
     "Could not post comment: %s": "Nem tudtuk beküldeni a hozzászólást: %s",
     "Could not post comment: %s": "Nem tudtuk beküldeni a hozzászólást: %s",
     "Sending document…": "Bejegyzés elküldése...",
     "Sending document…": "Bejegyzés elküldése...",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "A bejegyzésed a <a id=\"pasteurl\" href=\"%s\">%s</a> címen elérhető. <span id=\"copyhint\"> <kbd>Ctrl</kbd>+<kbd>c</kbd>-vel tudod vágólapra másolni.</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "A bejegyzésed a <a id=\"pasteurl\" href=\"%s\">%s</a> címen elérhető. <span id=\"copyhint\"> <kbd>%s</kbd>+<kbd>c</kbd>-vel tudod vágólapra másolni.</span>",
     "Delete data": "Adat törlése",
     "Delete data": "Adat törlése",
     "Could not create document: %s": "Nem tudtuk létrehozni a bejegyzést: %s",
     "Could not create document: %s": "Nem tudtuk létrehozni a bejegyzést: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nem tudjuk visszafejteni a bejegyzést: a dekódoláshoz szükséges kulcs hiányzik a címből. Talán URL rövidítőt használtál, amely azt kivágta belőle?",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nem tudjuk visszafejteni a bejegyzést: a dekódoláshoz szükséges kulcs hiányzik a címből. Talán URL rövidítőt használtál, amely azt kivágta belőle?",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Start over": "Újrakezdés",
     "Start over": "Újrakezdés",
     "Document copied to clipboard": "Bejegyzés másolva",
     "Document copied to clipboard": "Bejegyzés másolva",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Másoláshoz használd a <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd> billentyűkombinációt",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "Másoláshoz használd a <kbd>%s</kbd>+<kbd>c</kbd> billentyűkombinációt",
     "Copy link": "Link másolása",
     "Copy link": "Link másolása",
     "Link copied to clipboard": "Link másolva",
     "Link copied to clipboard": "Link másolva",
     "Document text": "Bejegyzés szövege",
     "Document text": "Bejegyzés szövege",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "A tabulátor karakternek használható (nyomd le a <kbd>Ctrl</kbd>+<kbd>m</kbd> vagy az <kbd>Esc</kbd> to billentyűket ennek megszüntetéséhez).",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "A tabulátor karakternek használható (nyomd le a <kbd>Ctrl</kbd>+<kbd>m</kbd> vagy az <kbd>Esc</kbd> to billentyűket ennek megszüntetéséhez).",
     "Show password": "Jelszó megjelenítése",
     "Show password": "Jelszó megjelenítése",
     "Hide password": "Jelszó elrejtése",
     "Hide password": "Jelszó elrejtése",
-    "Theme": "Téma"
+    "Theme": "Téma",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/id.json

@@ -151,7 +151,7 @@
     "server error or not responding": "kesalahan server atau server tidak merespon",
     "server error or not responding": "kesalahan server atau server tidak merespon",
     "Could not post comment: %s": "Tidak dapat memposting komentar: %s",
     "Could not post comment: %s": "Tidak dapat memposting komentar: %s",
     "Sending document…": "Mengirim document…",
     "Sending document…": "Mengirim document…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Document Anda adalah <a id=\"pasteurl\" href=\"%s\">%s</a><span id=\"copyhint\">(Tekan <kbd>Ctrl</kbd>+<kbd>c</kbd> untuk menyalin)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Document Anda adalah <a id=\"pasteurl\" href=\"%s\">%s</a><span id=\"copyhint\">(Tekan <kbd>%s</kbd>+<kbd>c</kbd> untuk menyalin)</span>",
     "Delete data": "Hapus data",
     "Delete data": "Hapus data",
     "Could not create document: %s": "Tidak dapat membuat document: %s",
     "Could not create document: %s": "Tidak dapat membuat document: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Tidak dapat mendekripsi document: Kunci dekripsi tidak ada di URL (Apakah Anda menggunakan redirector atau penyingkat URL yang menghapus bagian dari URL?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Tidak dapat mendekripsi document: Kunci dekripsi tidak ada di URL (Apakah Anda menggunakan redirector atau penyingkat URL yang menghapus bagian dari URL?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Start over": "Start over",
     "Start over": "Start over",
     "Document copied to clipboard": "Document copied to clipboard",
     "Document copied to clipboard": "Document copied to clipboard",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copy link",
     "Copy link": "Copy link",
     "Link copied to clipboard": "Link copied to clipboard",
     "Link copied to clipboard": "Link copied to clipboard",
     "Document text": "Document text",
     "Document text": "Document text",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Theme"
+    "Theme": "Theme",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/it.json

@@ -151,7 +151,7 @@
     "server error or not responding": "errore o mancata risposta dal server",
     "server error or not responding": "errore o mancata risposta dal server",
     "Could not post comment: %s": "Impossibile inviare il commento: %s",
     "Could not post comment: %s": "Impossibile inviare il commento: %s",
     "Sending document…": "Messaggio in fase di invio…",
     "Sending document…": "Messaggio in fase di invio…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Il tuo messaggio è qui: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Premi <kbd>Ctrl</kbd>+<kbd>c</kbd> (Windows) o [Cmd]+[c] (Mac) per copiare il link)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Il tuo messaggio è qui: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Premi <kbd>%s</kbd>+<kbd>c</kbd> (Windows) o [Cmd]+[c] (Mac) per copiare il link)</span>",
     "Delete data": "Cancella i dati",
     "Delete data": "Cancella i dati",
     "Could not create document: %s": "Non riesco a creare il messaggio: %s",
     "Could not create document: %s": "Non riesco a creare il messaggio: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Non riesco a decifrare il messaggio: manca la chiave di decifrazione nell'URL (La chiave è parte integrante dell'URL. Per caso hai usato un Redirector o un altro servizio che ha rimosso una parte dell'URL?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Non riesco a decifrare il messaggio: manca la chiave di decifrazione nell'URL (La chiave è parte integrante dell'URL. Per caso hai usato un Redirector o un altro servizio che ha rimosso una parte dell'URL?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Errore nella decompressione dell messaggio, il tuo browser non supporta WebAssembly. Utilizza un altro browser per visualizzare questo messaggio.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Errore nella decompressione dell messaggio, il tuo browser non supporta WebAssembly. Utilizza un altro browser per visualizzare questo messaggio.",
     "Start over": "Ricominciare",
     "Start over": "Ricominciare",
     "Document copied to clipboard": "Messaggio copiato",
     "Document copied to clipboard": "Messaggio copiato",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Per copiare il documento premere sul pulsante di copia o utilizzare la scorciatoia <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "Per copiare il documento premere sul pulsante di copia o utilizzare la scorciatoia <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copia il link",
     "Copy link": "Copia il link",
     "Link copied to clipboard": "Link copiato negli appunti",
     "Link copied to clipboard": "Link copiato negli appunti",
     "Document text": "Testo del messaggio",
     "Document text": "Testo del messaggio",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Il tasto Tabulatore serve come carattere (basta <kbd>Ctrl</kbd>+<kbd>m</kbd> o <kbd>Esc</kbd> per attivare/disattivare)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Il tasto Tabulatore serve come carattere (basta <kbd>Ctrl</kbd>+<kbd>m</kbd> o <kbd>Esc</kbd> per attivare/disattivare)",
     "Show password": "Mostra password",
     "Show password": "Mostra password",
     "Hide password": "Nascondi password",
     "Hide password": "Nascondi password",
-    "Theme": "Tema"
+    "Theme": "Tema",
+    "Copy": "Copiare",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/ja.json

@@ -151,7 +151,7 @@
     "server error or not responding": "サーバーエラーまたは応答しません",
     "server error or not responding": "サーバーエラーまたは応答しません",
     "Could not post comment: %s": "コメントを投稿できませんでした:%s",
     "Could not post comment: %s": "コメントを投稿できませんでした:%s",
     "Sending document…": "ペーストを送信しています…",
     "Sending document…": "ペーストを送信しています…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "ペーストは<a id=\"pasteurl\" href=\"%s\">%s</a>です<span id=\"copyhint\">(コピーするには<kbd>Ctrl</kbd>+<kbd>c</kbd>を押してください)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "ペーストは<a id=\"pasteurl\" href=\"%s\">%s</a>です<span id=\"copyhint\">(コピーするには<kbd>%s</kbd>+<kbd>c</kbd>を押してください)</span>",
     "Delete data": "データを削除",
     "Delete data": "データを削除",
     "Could not create document: %s": "ペーストを作成できませんでした:%s",
     "Could not create document: %s": "ペーストを作成できませんでした:%s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "ペーストを復号化できません:復号化キーがURLにありません(URLの一部を削除するリダイレクト機能またはURLの短縮アプリケーションを使いましたか?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "ペーストを復号化できません:復号化キーがURLにありません(URLの一部を削除するリダイレクト機能またはURLの短縮アプリケーションを使いましたか?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Start over": "Start over",
     "Start over": "Start over",
     "Document copied to clipboard": "Document copied to clipboard",
     "Document copied to clipboard": "Document copied to clipboard",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copy link",
     "Copy link": "Copy link",
     "Link copied to clipboard": "Link copied to clipboard",
     "Link copied to clipboard": "Link copied to clipboard",
     "Document text": "Document text",
     "Document text": "Document text",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Theme"
+    "Theme": "Theme",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/jbo.json

@@ -151,7 +151,7 @@
     "server error or not responding": "server error or not responding",
     "server error or not responding": "server error or not responding",
     "Could not post comment: %s": "Could not post comment: %s",
     "Could not post comment: %s": "Could not post comment: %s",
     "Sending document…": "ca'o benji le papri…",
     "Sending document…": "ca'o benji le papri…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>",
     "Delete data": "vimcu loi datni",
     "Delete data": "vimcu loi datni",
     "Could not create document: %s": "Could not create document: %s",
     "Could not create document: %s": "Could not create document: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Start over": "Start over",
     "Start over": "Start over",
     "Document copied to clipboard": "Document copied to clipboard",
     "Document copied to clipboard": "Document copied to clipboard",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "sorcu fukpi le urli",
     "Copy link": "sorcu fukpi le urli",
     "Link copied to clipboard": "Link copied to clipboard",
     "Link copied to clipboard": "Link copied to clipboard",
     "Document text": "se dokcu",
     "Document text": "se dokcu",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "jvinu"
+    "Theme": "jvinu",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/ko.json

@@ -151,7 +151,7 @@
     "server error or not responding": "server error or not responding",
     "server error or not responding": "server error or not responding",
     "Could not post comment: %s": "Could not post comment: %s",
     "Could not post comment: %s": "Could not post comment: %s",
     "Sending document…": "Sending document…",
     "Sending document…": "Sending document…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>",
     "Delete data": "Delete data",
     "Delete data": "Delete data",
     "Could not create document: %s": "Could not create document: %s",
     "Could not create document: %s": "Could not create document: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Start over": "Start over",
     "Start over": "Start over",
     "Document copied to clipboard": "Document copied to clipboard",
     "Document copied to clipboard": "Document copied to clipboard",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copy link",
     "Copy link": "Copy link",
     "Link copied to clipboard": "Link copied to clipboard",
     "Link copied to clipboard": "Link copied to clipboard",
     "Document text": "Document text",
     "Document text": "Document text",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Theme"
+    "Theme": "Theme",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/ku.json

@@ -151,7 +151,7 @@
     "server error or not responding": "server error or not responding",
     "server error or not responding": "server error or not responding",
     "Could not post comment: %s": "Could not post comment: %s",
     "Could not post comment: %s": "Could not post comment: %s",
     "Sending document…": "Sending document…",
     "Sending document…": "Sending document…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>",
     "Delete data": "Delete data",
     "Delete data": "Delete data",
     "Could not create document: %s": "Could not create document: %s",
     "Could not create document: %s": "Could not create document: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Start over": "Start over",
     "Start over": "Start over",
     "Document copied to clipboard": "Document copied to clipboard",
     "Document copied to clipboard": "Document copied to clipboard",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copy link",
     "Copy link": "Copy link",
     "Link copied to clipboard": "Link copied to clipboard",
     "Link copied to clipboard": "Link copied to clipboard",
     "Document text": "Document text",
     "Document text": "Document text",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Theme"
+    "Theme": "Theme",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/la.json

@@ -151,7 +151,7 @@
     "server error or not responding": "server error or not responding",
     "server error or not responding": "server error or not responding",
     "Could not post comment: %s": "Could not post comment: %s",
     "Could not post comment: %s": "Could not post comment: %s",
     "Sending document…": "Sending document…",
     "Sending document…": "Sending document…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>",
     "Delete data": "Delete data",
     "Delete data": "Delete data",
     "Could not create document: %s": "Could not create document: %s",
     "Could not create document: %s": "Could not create document: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Start over": "Start over",
     "Start over": "Start over",
     "Document copied to clipboard": "Document copied to clipboard",
     "Document copied to clipboard": "Document copied to clipboard",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copy link",
     "Copy link": "Copy link",
     "Link copied to clipboard": "Link copied to clipboard",
     "Link copied to clipboard": "Link copied to clipboard",
     "Document text": "Document text",
     "Document text": "Document text",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Theme"
+    "Theme": "Theme",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/lt.json

@@ -151,7 +151,7 @@
     "server error or not responding": "serverio klaida arba jis neatsako",
     "server error or not responding": "serverio klaida arba jis neatsako",
     "Could not post comment: %s": "Nepavyko paskelbti komentaro: %s",
     "Could not post comment: %s": "Nepavyko paskelbti komentaro: %s",
     "Sending document…": "Siunčiamas dokumentas…",
     "Sending document…": "Siunčiamas dokumentas…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Jūsų dokumentas yra <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Paspauskite <kbd>Ctrl</kbd>+<kbd>c</kbd> norėdami nukopijuoti)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Jūsų dokumentas yra <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Paspauskite <kbd>%s</kbd>+<kbd>c</kbd> norėdami nukopijuoti)</span>",
     "Delete data": "Ištrinti duomenis",
     "Delete data": "Ištrinti duomenis",
     "Could not create document: %s": "Nepavyko sukurti dokumento: %s",
     "Could not create document: %s": "Nepavyko sukurti dokumento: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nepavyksta iššifruoti dokumento: URL adrese trūksta iššifravimo rakto (Ar naudojote peradresavimo ar URL trumpinimo įrankį, kuris pašalina URL dalį?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nepavyksta iššifruoti dokumento: URL adrese trūksta iššifravimo rakto (Ar naudojote peradresavimo ar URL trumpinimo įrankį, kuris pašalina URL dalį?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Klaida išglaudinant dokumentą, jūsų naršyklė nepalaiko „WebAssembly“. Norėdami peržiūrėti šį dokumentą, naudokite kitą naršyklę.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Klaida išglaudinant dokumentą, jūsų naršyklė nepalaiko „WebAssembly“. Norėdami peržiūrėti šį dokumentą, naudokite kitą naršyklę.",
     "Start over": "Pradėti iš naujo",
     "Start over": "Pradėti iš naujo",
     "Document copied to clipboard": "Dokumentas nukopijuotas į iškarpinę",
     "Document copied to clipboard": "Dokumentas nukopijuotas į iškarpinę",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Norėdami nukopijuoti dokumentą paspauskite kopijavimo mygtuką arba naudokite iškarpinės sparčiuosius klavišus <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "Norėdami nukopijuoti dokumentą paspauskite kopijavimo mygtuką arba naudokite iškarpinės sparčiuosius klavišus <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Kopijuoti nuorodą",
     "Copy link": "Kopijuoti nuorodą",
     "Link copied to clipboard": "Nuoroda nukopijuota į iškarpinę",
     "Link copied to clipboard": "Nuoroda nukopijuota į iškarpinę",
     "Document text": "Dokumento tekstas",
     "Document text": "Dokumento tekstas",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabuliatoriaus klavišas tarnauja kaip simbolis (Paspauskite <kbd>Ctrl</kbd>+<kbd>m</kbd> arba <kbd>Esc</kbd> norėdami perjungti)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabuliatoriaus klavišas tarnauja kaip simbolis (Paspauskite <kbd>Ctrl</kbd>+<kbd>m</kbd> arba <kbd>Esc</kbd> norėdami perjungti)",
     "Show password": "Rodyti slaptažodį",
     "Show password": "Rodyti slaptažodį",
     "Hide password": "Slėpti slaptažodį",
     "Hide password": "Slėpti slaptažodį",
-    "Theme": "Apipavidalinimas"
+    "Theme": "Apipavidalinimas",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/nl.json

@@ -151,7 +151,7 @@
     "server error or not responding": "Serverfout of server reageert niet",
     "server error or not responding": "Serverfout of server reageert niet",
     "Could not post comment: %s": "Kon het commentaar niet plaatsen: %s",
     "Could not post comment: %s": "Kon het commentaar niet plaatsen: %s",
     "Sending document…": "Document verzenden…",
     "Sending document…": "Document verzenden…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Je document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Druk <kbd>Ctrl</kbd>+<kbd>c</kbd> om te kopiëren)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Je document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Druk <kbd>%s</kbd>+<kbd>c</kbd> om te kopiëren)</span>",
     "Delete data": "Gegevens wissen",
     "Delete data": "Gegevens wissen",
     "Could not create document: %s": "Kon het document niet aanmaken: %s",
     "Could not create document: %s": "Kon het document niet aanmaken: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Kon het document niet decoderen: Decoderingssleutel ontbreekt in URL (Heb je een doorverwijzer of een URL-verkorter gebruikt die een deel van de URL verwijdert?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Kon het document niet decoderen: Decoderingssleutel ontbreekt in URL (Heb je een doorverwijzer of een URL-verkorter gebruikt die een deel van de URL verwijdert?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Fout bij het decomprimeren van het document, uw browser ondersteunt WebAssembly niet. Gebruik een andere browser om dit document te bekijken.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Fout bij het decomprimeren van het document, uw browser ondersteunt WebAssembly niet. Gebruik een andere browser om dit document te bekijken.",
     "Start over": "Opnieuw beginnen",
     "Start over": "Opnieuw beginnen",
     "Document copied to clipboard": "Document gekopieerd naar klembord",
     "Document copied to clipboard": "Document gekopieerd naar klembord",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Om te kopiëren en plakken druk je op de knop Kopiëren of gebruik je de sneltoets op het klembord <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "Om te kopiëren en plakken druk je op de knop Kopiëren of gebruik je de sneltoets op het klembord <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Kopieer link",
     "Copy link": "Kopieer link",
     "Link copied to clipboard": "Link gekopieerd naar klembord",
     "Link copied to clipboard": "Link gekopieerd naar klembord",
     "Document text": "Tekst plakken",
     "Document text": "Tekst plakken",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulatortoets dient als teken (gebruik <kbd>Ctrl</kbd>+<kbd>m</kbd> of <kbd>Esc</kbd> om te schakelen)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulatortoets dient als teken (gebruik <kbd>Ctrl</kbd>+<kbd>m</kbd> of <kbd>Esc</kbd> om te schakelen)",
     "Show password": "Toon wachtwoord",
     "Show password": "Toon wachtwoord",
     "Hide password": "Verberg wachtwoord",
     "Hide password": "Verberg wachtwoord",
-    "Theme": "Thema"
+    "Theme": "Thema",
+    "Copy": "Kopieëren",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/no.json

@@ -151,7 +151,7 @@
     "server error or not responding": "tjener feilet eller svarer ikke",
     "server error or not responding": "tjener feilet eller svarer ikke",
     "Could not post comment: %s": "Kunne ikke sende kommentar: %s",
     "Could not post comment: %s": "Kunne ikke sende kommentar: %s",
     "Sending document…": "Sender innlegg…",
     "Sending document…": "Sender innlegg…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Ditt innlegg er <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Trykk <kbd>Ctrl</kbd>+<kbd>c</kbd> for å kopiere)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Ditt innlegg er <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Trykk <kbd>%s</kbd>+<kbd>c</kbd> for å kopiere)</span>",
     "Delete data": "Slett data",
     "Delete data": "Slett data",
     "Could not create document: %s": "Kunne ikke opprette innlegg: %s",
     "Could not create document: %s": "Kunne ikke opprette innlegg: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Kan ikke dekryptere innlegg: Dekrypteringsnøkkelen mangler i adressen (Har du bruket en redirector eller en URL forkorter som fjerner en del av addressen?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Kan ikke dekryptere innlegg: Dekrypteringsnøkkelen mangler i adressen (Har du bruket en redirector eller en URL forkorter som fjerner en del av addressen?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Start over": "Start over",
     "Start over": "Start over",
     "Document copied to clipboard": "Document copied to clipboard",
     "Document copied to clipboard": "Document copied to clipboard",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copy link",
     "Copy link": "Copy link",
     "Link copied to clipboard": "Link copied to clipboard",
     "Link copied to clipboard": "Link copied to clipboard",
     "Document text": "Document text",
     "Document text": "Document text",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Theme"
+    "Theme": "Theme",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/oc.json

@@ -151,7 +151,7 @@
     "server error or not responding": "lo servidor respond pas o a rescontrat una error",
     "server error or not responding": "lo servidor respond pas o a rescontrat una error",
     "Could not post comment: %s": "Impossible de mandar lo comentari : %s",
     "Could not post comment: %s": "Impossible de mandar lo comentari : %s",
     "Sending document…": "Mandadís del tèxte…",
     "Sending document…": "Mandadís del tèxte…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Vòstre tèxte es disponible a l’adreça <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Picatz sus <kbd>Ctrl</kbd>+<kbd>c</kbd> per copiar)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Vòstre tèxte es disponible a l’adreça <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Picatz sus <kbd>%s</kbd>+<kbd>c</kbd> per copiar)</span>",
     "Delete data": "Supprimir las donadas del tèxte",
     "Delete data": "Supprimir las donadas del tèxte",
     "Could not create document: %s": "Impossible de crear lo tèxte : %s",
     "Could not create document: %s": "Impossible de crear lo tèxte : %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Impossible de deschifrar lo tèxte : clau de deschiframent absenta de l’URL (Avètz utilizat un redirector o un site de reduccion d’URL que suprimís una partida de l’URL ?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Impossible de deschifrar lo tèxte : clau de deschiframent absenta de l’URL (Avètz utilizat un redirector o un site de reduccion d’URL que suprimís una partida de l’URL ?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "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.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "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",
     "Start over": "Start over",
     "Document copied to clipboard": "Document copied to clipboard",
     "Document copied to clipboard": "Document copied to clipboard",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copy link",
     "Copy link": "Copy link",
     "Link copied to clipboard": "Link copied to clipboard",
     "Link copied to clipboard": "Link copied to clipboard",
     "Document text": "Document text",
     "Document text": "Document text",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Theme"
+    "Theme": "Theme",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/pl.json

@@ -151,7 +151,7 @@
     "server error or not responding": "błąd serwera lub brak odpowiedzi",
     "server error or not responding": "błąd serwera lub brak odpowiedzi",
     "Could not post comment: %s": "Nie udało się wysłać komentarza: %s",
     "Could not post comment: %s": "Nie udało się wysłać komentarza: %s",
     "Sending document…": "Wysyłanie dokumentu…",
     "Sending document…": "Wysyłanie dokumentu…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Twój dokument: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Użyj <kbd>Ctrl</kbd>+<kbd>c</kbd>, aby skopiować)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Twój dokument: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Użyj <kbd>%s</kbd>+<kbd>c</kbd>, aby skopiować)</span>",
     "Delete data": "Usuń dane",
     "Delete data": "Usuń dane",
     "Could not create document: %s": "Nie można utworzyć dokumentu: %s",
     "Could not create document: %s": "Nie można utworzyć dokumentu: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nie można odszyfrować dokumentu — brakuje klucza deszyfrującego w adresie URL (czy użyto przekierowania lub skracacza adresów, który usuwa część linku?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nie można odszyfrować dokumentu — brakuje klucza deszyfrującego w adresie URL (czy użyto przekierowania lub skracacza adresów, który usuwa część linku?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Błąd dekompresji dokumentu — Twoja przeglądarka nie obsługuje WebAssembly. Użyj innej przeglądarki, aby go otworzyć.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Błąd dekompresji dokumentu — Twoja przeglądarka nie obsługuje WebAssembly. Użyj innej przeglądarki, aby go otworzyć.",
     "Start over": "Zacznij od nowa",
     "Start over": "Zacznij od nowa",
     "Document copied to clipboard": "Dokument skopiowany do schowka",
     "Document copied to clipboard": "Dokument skopiowany do schowka",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Aby skopiować dokument, kliknij przycisk kopiowania lub użyj skrótu <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "Aby skopiować dokument, kliknij przycisk kopiowania lub użyj skrótu <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Kopiuj link",
     "Copy link": "Kopiuj link",
     "Link copied to clipboard": "Link skopiowany do schowka",
     "Link copied to clipboard": "Link skopiowany do schowka",
     "Document text": "Treść dokumentu",
     "Document text": "Treść dokumentu",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Klawisz Tabulatora służy jako znak (użyj <kbd>Ctrl</kbd>+<kbd>m</kbd> lub <kbd>Esc</kbd>, aby przełączyć tryb)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Klawisz Tabulatora służy jako znak (użyj <kbd>Ctrl</kbd>+<kbd>m</kbd> lub <kbd>Esc</kbd>, aby przełączyć tryb)",
     "Show password": "Pokaż hasło",
     "Show password": "Pokaż hasło",
     "Hide password": "Ukryj hasło",
     "Hide password": "Ukryj hasło",
-    "Theme": "Motyw"
+    "Theme": "Motyw",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/pt.json

@@ -151,7 +151,7 @@
     "server error or not responding": "Servidor em erro ou não responsivo",
     "server error or not responding": "Servidor em erro ou não responsivo",
     "Could not post comment: %s": "Não foi possível publicar o comentário: %s",
     "Could not post comment: %s": "Não foi possível publicar o comentário: %s",
     "Sending document…": "Enviando cópia…",
     "Sending document…": "Enviando cópia…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Sua cópia é <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Pressione <kbd>Ctrl</kbd>+<kbd>c</kbd> para copiar)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Sua cópia é <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Pressione <kbd>%s</kbd>+<kbd>c</kbd> para copiar)</span>",
     "Delete data": "Excluir dados",
     "Delete data": "Excluir dados",
     "Could not create document: %s": "Não foi possível criar cópia: %s",
     "Could not create document: %s": "Não foi possível criar cópia: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Não foi possível decifrar a cópia: chave de decriptografia ausente na URL (Você utilizou um redirecionador ou encurtador de URL que removeu parte dela?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Não foi possível decifrar a cópia: chave de decriptografia ausente na URL (Você utilizou um redirecionador ou encurtador de URL que removeu parte dela?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Start over": "Start over",
     "Start over": "Start over",
     "Document copied to clipboard": "Document copied to clipboard",
     "Document copied to clipboard": "Document copied to clipboard",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copy link",
     "Copy link": "Copy link",
     "Link copied to clipboard": "Link copied to clipboard",
     "Link copied to clipboard": "Link copied to clipboard",
     "Document text": "Document text",
     "Document text": "Document text",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Theme"
+    "Theme": "Theme",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/ro.json

@@ -151,7 +151,7 @@
     "server error or not responding": "eroare de server sau nu răspunde",
     "server error or not responding": "eroare de server sau nu răspunde",
     "Could not post comment: %s": "Nu s-a putut posta comentariul: %s",
     "Could not post comment: %s": "Nu s-a putut posta comentariul: %s",
     "Sending document…": "Se trimite document-ul…",
     "Sending document…": "Se trimite document-ul…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Document-ul dvs. este <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Apăsați <kbd>Ctrl</kbd>+<kbd>c</kbd> pentru a copia)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Document-ul dvs. este <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Apăsați <kbd>%s</kbd>+<kbd>c</kbd> pentru a copia)</span>",
     "Delete data": "Ștergeți datele",
     "Delete data": "Ștergeți datele",
     "Could not create document: %s": "Nu s-a putut crea document-ul: %s",
     "Could not create document: %s": "Nu s-a putut crea document-ul: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nu s-a putut decripta document-ul: Cheia de decriptare lipsește din URL (Ați folosit un redirector sau un scurtător de URL care a tăiat o parte din URL?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nu s-a putut decripta document-ul: Cheia de decriptare lipsește din URL (Ați folosit un redirector sau un scurtător de URL care a tăiat o parte din URL?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Eroare la deschiderea document-ului, browserul dvs. nu acceptă WebAssembly. Vă rugăm să utilizați un alt browser pentru a vedea acest document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Eroare la deschiderea document-ului, browserul dvs. nu acceptă WebAssembly. Vă rugăm să utilizați un alt browser pentru a vedea acest document.",
     "Start over": "Start over",
     "Start over": "Start over",
     "Document copied to clipboard": "Document copied to clipboard",
     "Document copied to clipboard": "Document copied to clipboard",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copy link",
     "Copy link": "Copy link",
     "Link copied to clipboard": "Link copied to clipboard",
     "Link copied to clipboard": "Link copied to clipboard",
     "Document text": "Document text",
     "Document text": "Document text",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Theme"
+    "Theme": "Theme",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 20 - 17
i18n/ru.json

@@ -3,7 +3,7 @@
     "%s is a minimalist, open source online pastebin where the server has zero knowledge of stored 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 stored 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": "Потому что неведение - благо",
-    "Document does not exist, has expired or has been deleted.": "Запись не существует, просрочена или была удалена.",
+    "Document does not exist, has expired or has been deleted.": "Документ не существует, его срок действия истек или он был удален.",
     "%s requires php %s or above to work. Sorry.": "Для работы %s требуется php %s или выше. Извините.",
     "%s requires php %s or above to work. Sorry.": "Для работы %s требуется php %s или выше. Извините.",
     "%s requires configuration section [%s] to be present in configuration file.": "%s необходимо наличие секции [%s] в конфигурационном файле.",
     "%s requires configuration section [%s] to be present in configuration file.": "%s необходимо наличие секции [%s] в конфигурационном файле.",
     "Please wait %d seconds between each post.": [
     "Please wait %d seconds between each post.": [
@@ -14,13 +14,13 @@
         "Пожалуйста, ожидайте %d секунд между каждыми записями.",
         "Пожалуйста, ожидайте %d секунд между каждыми записями.",
         "Пожалуйста, ожидайте %d секунд между каждыми записями."
         "Пожалуйста, ожидайте %d секунд между каждыми записями."
     ],
     ],
-    "Document is limited to %s of encrypted data.": "Размер записи ограничен %s зашифрованных данных.",
+    "Document 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 document. Sorry.": "Ошибка при сохранении записи. Извините.",
-    "Invalid document ID.": "Неверный ID записи.",
-    "Document is not of burn-after-reading type.": "Тип записи не \"Удалить после прочтения\".",
+    "Error saving document. Sorry.": "Ошибка сохранения документа. Извините.",
+    "Invalid document ID.": "Неверный ID документа.",
+    "Document is not of burn-after-reading type.": "Документ не относится к типу \"Удалить после прочтения\".",
     "Wrong deletion token. Document was not deleted.": "Неверный ключ удаления записи. Запись не удалена.",
     "Wrong deletion token. Document was not deleted.": "Неверный ключ удаления записи. Запись не удалена.",
     "Document was properly deleted.": "Запись была успешно удалена.",
     "Document 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. Приносим извинения за неудобства.",
@@ -151,7 +151,7 @@
     "server error or not responding": "ошибка сервера или нет ответа",
     "server error or not responding": "ошибка сервера или нет ответа",
     "Could not post comment: %s": "Не удалось опубликовать комментарий: %s",
     "Could not post comment: %s": "Не удалось опубликовать комментарий: %s",
     "Sending document…": "Отправка записи…",
     "Sending document…": "Отправка записи…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Ссылка на запись <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Нажмите <kbd>Ctrl</kbd>+<kbd>c</kbd>, чтобы скопировать ссылку)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Ссылка на запись <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Нажмите <kbd>%s</kbd>+<kbd>c</kbd>, чтобы скопировать ссылку)</span>",
     "Delete data": "Удалить запись",
     "Delete data": "Удалить запись",
     "Could not create document: %s": "Не удалось опубликовать запись: %s",
     "Could not create document: %s": "Не удалось опубликовать запись: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Невозможно расшифровать запись: Ключ расшифровки отсутствует в ссылке (Может быть, вы используете сокращатель ссылок, который удаляет часть ссылки?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Невозможно расшифровать запись: Ключ расшифровки отсутствует в ссылке (Может быть, вы используете сокращатель ссылок, который удаляет часть ссылки?)",
@@ -210,26 +210,29 @@
     "Encrypted note on %s": "Зашифрованная запись на %s",
     "Encrypted note on %s": "Зашифрованная запись на %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.": "Сервис сокращения ссылок может получить ваш ключ расшифровки из ссылки.",
-    "URL shortener is enabled by default.": "URL shortener is enabled by default.",
+    "URL shortener is enabled by default.": "Сокращатель URL-адресов включен по умолчанию.",
     "Save document": "Сохранить запись",
     "Save document": "Сохранить запись",
     "Your IP is not authorized to create documents.": "Вашему IP адресу не разрешено создавать записи.",
     "Your IP is not authorized to create documents.": "Вашему 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, который указывает не на наш сервер.",
     "Proxy error: Proxy URL is empty. This can be a configuration issue, like wrong or missing config keys.": "Ошибка обращения к YOURLS. Возможно в конфигурации допущена ошибка, например неверный или отсутствующий параметр \"apiurl\" или \"signature\".",
     "Proxy error: Proxy URL is empty. This can be a configuration issue, like wrong or missing config keys.": "Ошибка обращения к YOURLS. Возможно в конфигурации допущена ошибка, например неверный или отсутствующий параметр \"apiurl\" или \"signature\".",
     "Proxy error: Error parsing proxy response. This can be a configuration issue, like wrong or missing config keys.": "Ошибка разбора ответа от YOURLS.",
     "Proxy error: Error parsing proxy response. This can be a configuration issue, like wrong or missing config keys.": "Ошибка разбора ответа от YOURLS.",
-    "Proxy error: Bad response. This can be a configuration issue, like wrong or missing config keys or a temporary outage.": "Proxy error: Bad response. This can be a configuration issue, like wrong or missing config keys or a temporary outage.",
+    "Proxy error: Bad response. This can be a configuration issue, like wrong or missing config keys or a temporary outage.": "Ошибка прокси: неверный ответ. Это может быть проблемой конфигурации, например из-за неверных или отсутствующих ключей, либо временным сбоем.",
     "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 document, due to missing WebAssembly support.": "Error compressing document, due to missing WebAssembly support.",
-    "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
-    "Start over": "Start over",
+    "Error compressing document, due to missing WebAssembly support.": "Ошибка сжатия документа из-за отсутствия поддержки WebAssembly.",
+    "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Ошибка распаковки документа, ваш браузер не поддерживает WebAssembly. Пожалуйста, используйте другой браузер для просмотра этого документа.",
+    "Start over": "Начать заново",
     "Document copied to clipboard": "Запись скопирована в буфер обмена",
     "Document copied to clipboard": "Запись скопирована в буфер обмена",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Чтобы скопировать запись нажмите на кнопку копирования или используйте комбинацию клавиш <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "Чтобы скопировать запись нажмите на кнопку копирования или используйте комбинацию клавиш <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Скопировать ссылку",
     "Copy link": "Скопировать ссылку",
     "Link copied to clipboard": "Ссылка скопирована в буфер обмена",
     "Link copied to clipboard": "Ссылка скопирована в буфер обмена",
-    "Document text": "Document text",
-    "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
-    "Show password": "Show password",
-    "Hide password": "Hide password",
-    "Theme": "Тема"
+    "Document text": "Текст документа",
+    "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Клавиша Tab работает как символ (Нажмите <kbd>Ctrl</kbd>+<kbd>M</kbd> или <kbd>Esc</kbd> для переключения)",
+    "Show password": "Показать пароль",
+    "Hide password": "Скрыть пароль",
+    "Theme": "Тема",
+    "Copy": "Скопировать",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/sk.json

@@ -151,7 +151,7 @@
     "server error or not responding": "chyba servera alebo server neodpovedá",
     "server error or not responding": "chyba servera alebo server neodpovedá",
     "Could not post comment: %s": "Nepodarilo sa pridať komentár: %s",
     "Could not post comment: %s": "Nepodarilo sa pridať komentár: %s",
     "Sending document…": "Odosiela sa príspevok…",
     "Sending document…": "Odosiela sa príspevok…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Váš príspevok je <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(skopírujte stlačením <kbd>Ctrl</kbd>+<kbd>c</kbd>)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Váš príspevok je <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(skopírujte stlačením <kbd>%s</kbd>+<kbd>c</kbd>)</span>",
     "Delete data": "Odstrániť dáta",
     "Delete data": "Odstrániť dáta",
     "Could not create document: %s": "Nepodarilo sa vytvoriť príspevok: %s",
     "Could not create document: %s": "Nepodarilo sa vytvoriť príspevok: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nie je možné dešifrovať príspevok: V URL adrese chýba dešifrovací kľúč (Použili ste presmerovač alebo skracovač adresy, ktorý odstráni časť adresy URL?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nie je možné dešifrovať príspevok: V URL adrese chýba dešifrovací kľúč (Použili ste presmerovač alebo skracovač adresy, ktorý odstráni časť adresy URL?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.",
     "Start over": "Začať odznova",
     "Start over": "Začať odznova",
     "Document copied to clipboard": "Kópia vložená do schránky",
     "Document copied to clipboard": "Kópia vložená do schránky",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Kopírovať odkaz",
     "Copy link": "Kopírovať odkaz",
     "Link copied to clipboard": "Odkaz vložený do schránky",
     "Link copied to clipboard": "Odkaz vložený do schránky",
     "Document text": "Document text",
     "Document text": "Document text",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Theme"
+    "Theme": "Theme",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/sl.json

@@ -151,7 +151,7 @@
     "server error or not responding": "napaka na strežniku, ali pa se strežnik ne odziva",
     "server error or not responding": "napaka na strežniku, ali pa se strežnik ne odziva",
     "Could not post comment: %s": "Komentarja ni bilo mogoče objaviti : %s",
     "Could not post comment: %s": "Komentarja ni bilo mogoče objaviti : %s",
     "Sending document…": "Pošiljam prilepek…",
     "Sending document…": "Pošiljam prilepek…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Tvoj prilepek je dostopen na naslovu: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Pritisni <kbd>Ctrl</kbd>+<kbd>c</kbd> ali [Cmd] + [c] in skopiraj)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Tvoj prilepek je dostopen na naslovu: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Pritisni <kbd>%s</kbd>+<kbd>c</kbd> ali [Cmd] + [c] in skopiraj)</span>",
     "Delete data": "Izbriši podatke",
     "Delete data": "Izbriši podatke",
     "Could not create document: %s": "Ne morem ustvariti prilepka: %s",
     "Could not create document: %s": "Ne morem ustvariti prilepka: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Prilepka ni mogoče odkodirati: v URL-ju manjka ključ. Ali je bil uporabljen krajšalnik URL-jev, ki odstrani del URL-ja?",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Prilepka ni mogoče odkodirati: v URL-ju manjka ključ. Ali je bil uporabljen krajšalnik URL-jev, ki odstrani del URL-ja?",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Napaka pri razpakiranju dokumenta, vaš brskalnik ne podpira WebAssembly. Za ogled tega dokumenta uporabite drug brskalnik.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Napaka pri razpakiranju dokumenta, vaš brskalnik ne podpira WebAssembly. Za ogled tega dokumenta uporabite drug brskalnik.",
     "Start over": "Začni znova",
     "Start over": "Začni znova",
     "Document copied to clipboard": "Dokument kopiran v odložišče",
     "Document copied to clipboard": "Dokument kopiran v odložišče",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Za kopiranje dokumenta pritisnite gumb za kopiranje ali uporabite bližnjico odložišča <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "Za kopiranje dokumenta pritisnite gumb za kopiranje ali uporabite bližnjico odložišča <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Kopiraj povezavo",
     "Copy link": "Kopiraj povezavo",
     "Link copied to clipboard": "Povezava kopirana v odložišče",
     "Link copied to clipboard": "Povezava kopirana v odložišče",
     "Document text": "Besedilo dokumenta",
     "Document text": "Besedilo dokumenta",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulatorska tipka služi kot znak (za preklop pritisnite <kbd>Ctrl</kbd>+<kbd>m</kbd> ali <kbd>Esc</kbd>)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulatorska tipka služi kot znak (za preklop pritisnite <kbd>Ctrl</kbd>+<kbd>m</kbd> ali <kbd>Esc</kbd>)",
     "Show password": "Pokaži geslo",
     "Show password": "Pokaži geslo",
     "Hide password": "Skrij geslo",
     "Hide password": "Skrij geslo",
-    "Theme": "Tema"
+    "Theme": "Tema",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/sv.json

@@ -151,7 +151,7 @@
     "server error or not responding": "serverfel eller inget svar",
     "server error or not responding": "serverfel eller inget svar",
     "Could not post comment: %s": "Kunde inte publicera kommentar: %s",
     "Could not post comment: %s": "Kunde inte publicera kommentar: %s",
     "Sending document…": "Skickar dokument…",
     "Sending document…": "Skickar dokument…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Ditt dokument är <a id=\\\"pasteurl\\\" href=\\\"%s\\\">%s</a> <span id=\\\"copyhint\\\">(Tryck <kbd>Ctrl</kbd>+<kbd>c</kbd> för att kopiera)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Ditt dokument är <a id=\\\"pasteurl\\\" href=\\\"%s\\\">%s</a> <span id=\\\"copyhint\\\">(Tryck <kbd>%s</kbd>+<kbd>c</kbd> för att kopiera)</span>",
     "Delete data": "Radera data",
     "Delete data": "Radera data",
     "Could not create document: %s": "Kunde inte skapa dokument: %s",
     "Could not create document: %s": "Kunde inte skapa dokument: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Kan inte dekryptera dokument: Dekrypteringsnyckel saknas i URL:en (använde du en omdirigerare eller URL-förkortare som tar bort delar av URL:en?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Kan inte dekryptera dokument: Dekrypteringsnyckel saknas i URL:en (använde du en omdirigerare eller URL-förkortare som tar bort delar av URL:en?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Fel vid dekomprimering av dokumentet, din webbläsare stöder inte WebAssembly. Använd en annan webbläsare för att visa detta dokument.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Fel vid dekomprimering av dokumentet, din webbläsare stöder inte WebAssembly. Använd en annan webbläsare för att visa detta dokument.",
     "Start over": "Börja om",
     "Start over": "Börja om",
     "Document copied to clipboard": "Dokument kopierat till urklipp",
     "Document copied to clipboard": "Dokument kopierat till urklipp",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "För att kopiera dokumentet, klicka på kopieringsknappen eller använd kortkommandot <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "För att kopiera dokumentet, klicka på kopieringsknappen eller använd kortkommandot <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Kopiera länk",
     "Copy link": "Kopiera länk",
     "Link copied to clipboard": "Länk kopierad till urklipp",
     "Link copied to clipboard": "Länk kopierad till urklipp",
     "Document text": "Dokumenttext",
     "Document text": "Dokumenttext",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabb-tangenten fungerar som tecken (Tryck <kbd>Ctrl</kbd>+<kbd>m</kbd> eller <kbd>Esc</kbd> för att växla)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabb-tangenten fungerar som tecken (Tryck <kbd>Ctrl</kbd>+<kbd>m</kbd> eller <kbd>Esc</kbd> för att växla)",
     "Show password": "Visa lösenord",
     "Show password": "Visa lösenord",
     "Hide password": "Dölj lösenord",
     "Hide password": "Dölj lösenord",
-    "Theme": "Tema"
+    "Theme": "Tema",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/th.json

@@ -151,7 +151,7 @@
     "server error or not responding": "เซิร์ฟเวอร์มีข้อผิดพลาดหรือไม่ตอบสนอง",
     "server error or not responding": "เซิร์ฟเวอร์มีข้อผิดพลาดหรือไม่ตอบสนอง",
     "Could not post comment: %s": "ไม่สามารถส่งความคิดเห็นได้: %s",
     "Could not post comment: %s": "ไม่สามารถส่งความคิดเห็นได้: %s",
     "Sending document…": "กำลังส่งข้อมูล…",
     "Sending document…": "กำลังส่งข้อมูล…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "การฝากโค้ดของคุณอยู่ที่ <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(กดปุ่ม <kbd>Ctrl</kbd>+<kbd>c</kbd> เพื่อคัดลอก)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "การฝากโค้ดของคุณอยู่ที่ <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(กดปุ่ม <kbd>%s</kbd>+<kbd>c</kbd> เพื่อคัดลอก)</span>",
     "Delete data": "ลบข้อมูล",
     "Delete data": "ลบข้อมูล",
     "Could not create document: %s": "ไม่สามารถสร้างข้อมูลการฝากโค้ดได้: %s",
     "Could not create document: %s": "ไม่สามารถสร้างข้อมูลการฝากโค้ดได้: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "ไม่สามารถถอดรหัสข้อมูลการฝากโค้ดได้: คีย์ถอดรหัสที่อยู่ใน URL หายไป (คุณได้ใช้ตัวเปลี่ยนเส้นทางหรือตัวย่อ URL ที่มีการตัดส่วนของ URL ออกหรือไม่)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "ไม่สามารถถอดรหัสข้อมูลการฝากโค้ดได้: คีย์ถอดรหัสที่อยู่ใน URL หายไป (คุณได้ใช้ตัวเปลี่ยนเส้นทางหรือตัวย่อ URL ที่มีการตัดส่วนของ URL ออกหรือไม่)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "ไม่สามารถอ่านข้อมูลที่คุณได้ฝากโค้ดไว้ เบราว์เซอร์ของคุณไม่รองรับ WebAssembly กรุณาลองเปลี่ยนใช้เบราว์เซอร์ตัวอื่นเพื่อดูการฝากโค้ดนี้อีกครั้ง",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "ไม่สามารถอ่านข้อมูลที่คุณได้ฝากโค้ดไว้ เบราว์เซอร์ของคุณไม่รองรับ WebAssembly กรุณาลองเปลี่ยนใช้เบราว์เซอร์ตัวอื่นเพื่อดูการฝากโค้ดนี้อีกครั้ง",
     "Start over": "เริ่มใหม่",
     "Start over": "เริ่มใหม่",
     "Document copied to clipboard": "คัดลอกการฝากโค้ดไปที่คลิปบอร์ดแล้ว",
     "Document copied to clipboard": "คัดลอกการฝากโค้ดไปที่คลิปบอร์ดแล้ว",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "หากต้องการคัดลอกและวาง กรุณากดปุ่มคัดลอก หรือใช้ปุ่มลัด <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd> สำหรับคลิปบอร์ด",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "หากต้องการคัดลอกและวาง กรุณากดปุ่มคัดลอก หรือใช้ปุ่มลัด <kbd>%s</kbd>+<kbd>c</kbd> สำหรับคลิปบอร์ด",
     "Copy link": "คัดลอกลิงก์",
     "Copy link": "คัดลอกลิงก์",
     "Link copied to clipboard": "คัดลอกลิงก์ไปที่คลิปบอร์ดแล้ว",
     "Link copied to clipboard": "คัดลอกลิงก์ไปที่คลิปบอร์ดแล้ว",
     "Document text": "ฝากข้อความ",
     "Document text": "ฝากข้อความ",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "ปุ่ม Tabulator ใช้เป็นอักขระ (กด <kbd>Ctrl</kbd>+<kbd>m</kbd> หรือ <kbd>Esc</kbd> เพื่อสลับ)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "ปุ่ม Tabulator ใช้เป็นอักขระ (กด <kbd>Ctrl</kbd>+<kbd>m</kbd> หรือ <kbd>Esc</kbd> เพื่อสลับ)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "ธีม"
+    "Theme": "ธีม",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/tr.json

@@ -151,7 +151,7 @@
     "server error or not responding": "sunucu hatası veya yanıt vermiyor",
     "server error or not responding": "sunucu hatası veya yanıt vermiyor",
     "Could not post comment: %s": "Yorum paylaşılamadı: %s",
     "Could not post comment: %s": "Yorum paylaşılamadı: %s",
     "Sending document…": "Yazı gönderiliyor…",
     "Sending document…": "Yazı gönderiliyor…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Yazınız: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(<kbd>Ctrl</kbd>+<kbd>c</kbd> tuşlarına basarak kopyalayın.)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Yazınız: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(<kbd>%s</kbd>+<kbd>c</kbd> tuşlarına basarak kopyalayın.)</span>",
     "Delete data": "Veriyi sil",
     "Delete data": "Veriyi sil",
     "Could not create document: %s": "Yazı oluşturulamadı: %s",
     "Could not create document: %s": "Yazı oluşturulamadı: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Yazı şifresi çözülemedi, çözme anahtarı URL'de bulunamadı. (Buraya bir yönlendirici veya URL kısaltıcı kullanarak gelmiş olabilirsiniz.)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Yazı şifresi çözülemedi, çözme anahtarı URL'de bulunamadı. (Buraya bir yönlendirici veya URL kısaltıcı kullanarak gelmiş olabilirsiniz.)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Yazı açılırken hata oluştu, tarayıcınız WebAssembly'i desteklemiyor. Lütfen bu yazıyı görüntülemek için başka bir tarayıcı kullanın.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Yazı açılırken hata oluştu, tarayıcınız WebAssembly'i desteklemiyor. Lütfen bu yazıyı görüntülemek için başka bir tarayıcı kullanın.",
     "Start over": "Baştan başla",
     "Start over": "Baştan başla",
     "Document copied to clipboard": "Document copied to clipboard",
     "Document copied to clipboard": "Document copied to clipboard",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Copy link",
     "Copy link": "Copy link",
     "Link copied to clipboard": "Link copied to clipboard",
     "Link copied to clipboard": "Link copied to clipboard",
     "Document text": "Document text",
     "Document text": "Document text",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)",
     "Show password": "Show password",
     "Show password": "Show password",
     "Hide password": "Hide password",
     "Hide password": "Hide password",
-    "Theme": "Theme"
+    "Theme": "Theme",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 10 - 7
i18n/uk.json

@@ -5,7 +5,7 @@
     "Because ignorance is bliss": "Менше знаєш — краще спиш",
     "Because ignorance is bliss": "Менше знаєш — краще спиш",
     "Document does not exist, has expired or has been deleted.": "Документ не існує. Можливо, його протерміновано чи видалено.",
     "Document does not exist, has expired or has been deleted.": "Документ не існує. Можливо, його протерміновано чи видалено.",
     "%s requires php %s or above to work. Sorry.": "Для роботи %s потрібен php %s чи вище. Вибачте.",
     "%s requires php %s or above to work. Sorry.": "Для роботи %s потрібен php %s чи вище. Вибачте.",
-    "%s requires configuration section [%s] to be present in configuration file.": "%s потрібна секція [%s] в конфігураційному файлі.",
+    "%s requires configuration section [%s] to be present in configuration file.": "%s потрібна секція [%s] у файлі налаштувань.",
     "Please wait %d seconds between each post.": [
     "Please wait %d seconds between each post.": [
         "Будь ласка, зачекайте %d секунду між створеннями.",
         "Будь ласка, зачекайте %d секунду між створеннями.",
         "Будь ласка, зачекайте %d секунди між створеннями.",
         "Будь ласка, зачекайте %d секунди між створеннями.",
@@ -36,8 +36,8 @@
     "Discussion": "Обговорення",
     "Discussion": "Обговорення",
     "Toggle navigation": "Перемкнути навігацію",
     "Toggle navigation": "Перемкнути навігацію",
     "%d seconds": [
     "%d seconds": [
-        "%d секунду",
-        "%d секунди",
+        "%d секунд",
+        "%d секунд",
         "%d секунд",
         "%d секунд",
         "%d секунд",
         "%d секунд",
         "%d секунд",
         "%d секунд",
@@ -151,7 +151,7 @@
     "server error or not responding": "помилка на сервері чи немає відповіді",
     "server error or not responding": "помилка на сервері чи немає відповіді",
     "Could not post comment: %s": "Не вдалося опублікувати коментар: %s",
     "Could not post comment: %s": "Не вдалося опублікувати коментар: %s",
     "Sending document…": "Надсилання документа…",
     "Sending document…": "Надсилання документа…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Документ: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(копіювати: <kbd>Ctrl</kbd>+<kbd>c</kbd>)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "Документ: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(копіювати: <kbd>%s</kbd>+<kbd>c</kbd>)</span>",
     "Delete data": "Видалити дані",
     "Delete data": "Видалити дані",
     "Could not create document: %s": "Не вдалося опублікувати документ: %s",
     "Could not create document: %s": "Не вдалося опублікувати документ: %s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Не вдається розшифрувати документ: ключ дешифрування відсутній у посиланні (можливо, ваш сервіс переспрямування чи скорочення посилань видаляє частину посилання?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Не вдається розшифрувати документ: ключ дешифрування відсутній у посиланні (можливо, ваш сервіс переспрямування чи скорочення посилань видаляє частину посилання?)",
@@ -213,7 +213,7 @@
     "URL shortener is enabled by default.": "Скорочення посилань типово увімкнено.",
     "URL shortener is enabled by default.": "Скорочення посилань типово увімкнено.",
     "Save document": "Зберегти документ",
     "Save document": "Зберегти документ",
     "Your IP is not authorized to create documents.": "Вашій IP-адресі не дозволено створювати документи.",
     "Your IP is not authorized to create documents.": "Вашій 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, який не вказує на наш екземпляр.",
     "Proxy error: Proxy URL is empty. This can be a configuration issue, like wrong or missing config keys.": "Помилка проксі: не вказано URL-адреси проксі. Ймовірно, проблема в налаштуваннях: ключі конфігурації можуть бути відсутні або містити одрук.",
     "Proxy error: Proxy URL is empty. This can be a configuration issue, like wrong or missing config keys.": "Помилка проксі: не вказано URL-адреси проксі. Ймовірно, проблема в налаштуваннях: ключі конфігурації можуть бути відсутні або містити одрук.",
     "Proxy error: Error parsing proxy response. This can be a configuration issue, like wrong or missing config keys.": "Помилка проксі: не вдається розпізнати відповідь проксі. Ймовірно, проблема в налаштуваннях: ключі конфігурації можуть бути відсутні або містити одрук",
     "Proxy error: Error parsing proxy response. This can be a configuration issue, like wrong or missing config keys.": "Помилка проксі: не вдається розпізнати відповідь проксі. Ймовірно, проблема в налаштуваннях: ключі конфігурації можуть бути відсутні або містити одрук",
     "Proxy error: Bad response. This can be a configuration issue, like wrong or missing config keys or a temporary outage.": "Помилка проксі: хибна відповідь. Ймовірно, проблема в налаштуваннях: ключі конфігурації можуть бути відсутні або містити одрук.",
     "Proxy error: Bad response. This can be a configuration issue, like wrong or missing config keys or a temporary outage.": "Помилка проксі: хибна відповідь. Ймовірно, проблема в налаштуваннях: ключі конфігурації можуть бути відсутні або містити одрук.",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Помилка розпакування документа: браузер не підтримує WebAssembly. Спробуйте відкрити документ в іншому браузері.",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "Помилка розпакування документа: браузер не підтримує WebAssembly. Спробуйте відкрити документ в іншому браузері.",
     "Start over": "Почати знову",
     "Start over": "Почати знову",
     "Document copied to clipboard": "Документ скопійовано до буфера",
     "Document copied to clipboard": "Документ скопійовано до буфера",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Щоб скопіювати документ, натисніть кнопку «Копіювати» чи клавіші <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "Щоб скопіювати документ, натисніть кнопку «Копіювати» чи клавіші <kbd>%s</kbd>+<kbd>c</kbd>",
     "Copy link": "Копіювати посилання",
     "Copy link": "Копіювати посилання",
     "Link copied to clipboard": "Посилання скопійовано до буфера",
     "Link copied to clipboard": "Посилання скопійовано до буфера",
     "Document text": "Текст документа",
     "Document text": "Текст документа",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Клавіша Tab вводить символ табуляції (перемикається клавішами <kbd>Ctrl</kbd>+<kbd>m</kbd> чи <kbd>Esc</kbd>)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Клавіша Tab вводить символ табуляції (перемикається клавішами <kbd>Ctrl</kbd>+<kbd>m</kbd> чи <kbd>Esc</kbd>)",
     "Show password": "Показати пароль",
     "Show password": "Показати пароль",
     "Hide password": "Сховати пароль",
     "Hide password": "Сховати пароль",
-    "Theme": "Тема"
+    "Theme": "Тема",
+    "Copy": "Copy",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 6 - 3
i18n/zh.json

@@ -151,7 +151,7 @@
     "server error or not responding": "服务器错误或无回应",
     "server error or not responding": "服务器错误或无回应",
     "Could not post comment: %s": "无法发送评论: %s",
     "Could not post comment: %s": "无法发送评论: %s",
     "Sending document…": "正在发送粘贴内容…",
     "Sending document…": "正在发送粘贴内容…",
-    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "您粘贴内容的链接是 <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(按下 <kbd>Ctrl</kbd>+<kbd>c</kbd> 以复制)</span>",
+    "Your document is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>": "您粘贴内容的链接是 <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(按下 <kbd>%s</kbd>+<kbd>c</kbd> 以复制)</span>",
     "Delete data": "删除数据",
     "Delete data": "删除数据",
     "Could not create document: %s": "无法创建粘贴:%s",
     "Could not create document: %s": "无法创建粘贴:%s",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "无法解密粘贴:URL中缺失解密密钥(是否使用了重定向或者短链接导致密钥丢失?)",
     "Cannot decrypt document: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "无法解密粘贴:URL中缺失解密密钥(是否使用了重定向或者短链接导致密钥丢失?)",
@@ -224,12 +224,15 @@
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "解压粘贴时出错,您的浏览器不支持 WebAssembly。请使用其他浏览器查看此粘贴。",
     "Error decompressing document, your browser does not support WebAssembly. Please use another browser to view this document.": "解压粘贴时出错,您的浏览器不支持 WebAssembly。请使用其他浏览器查看此粘贴。",
     "Start over": "重新开始",
     "Start over": "重新开始",
     "Document copied to clipboard": "粘贴内容已复制到剪贴板",
     "Document copied to clipboard": "粘贴内容已复制到剪贴板",
-    "To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "要复制粘贴内容,请点击复制按钮或使用快捷键 <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>。",
+    "To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>": "要复制粘贴内容,请点击复制按钮或使用快捷键 <kbd>%s</kbd>+<kbd>c</kbd>。",
     "Copy link": "复制链接",
     "Copy link": "复制链接",
     "Link copied to clipboard": "链接已复制到剪贴板",
     "Link copied to clipboard": "链接已复制到剪贴板",
     "Document text": "粘贴文本",
     "Document text": "粘贴文本",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tab 键可作为字符(按 <kbd>Ctrl</kbd>+<kbd>m</kbd> 或 <kbd>Esc</kbd> 切换开关)",
     "Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)": "Tab 键可作为字符(按 <kbd>Ctrl</kbd>+<kbd>m</kbd> 或 <kbd>Esc</kbd> 切换开关)",
     "Show password": "显示密码",
     "Show password": "显示密码",
     "Hide password": "隐藏密码",
     "Hide password": "隐藏密码",
-    "Theme": "主题"
+    "Theme": "主题",
+    "Copy": "复制",
+    "Cmd": "Cmd",
+    "Ctrl": "Ctrl"
 }
 }

+ 1 - 1
js/common.js

@@ -15,7 +15,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.4.1');
+global.DOMPurify = require('./purify-3.4.12');
 global.baseX = require('./base-x-5.0.1').baseX;
 global.baseX = require('./base-x-5.0.1').baseX;
 global.Legacy = require('./legacy').Legacy;
 global.Legacy = require('./legacy').Legacy;
 require('./privatebin');
 require('./privatebin');

Разлика између датотеке није приказан због своје велике величине
+ 165 - 230
js/package-lock.json


+ 4 - 3
js/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "privatebin",
   "name": "privatebin",
-  "version": "2.0.4",
+  "version": "2.0.5",
   "description": "PrivateBin is a minimalist, open source online pastebin where the server has zero knowledge of stored data. Data is encrypted/decrypted in the browser using 256 bit AES in Galois Counter mode (GCM).",
   "description": "PrivateBin is a minimalist, open source online pastebin where the server has zero knowledge of stored data. Data is encrypted/decrypted in the browser using 256 bit AES in Galois Counter mode (GCM).",
   "main": "privatebin.js",
   "main": "privatebin.js",
   "directories": {
   "directories": {
@@ -9,11 +9,12 @@
   "devDependencies": {
   "devDependencies": {
     "@peculiar/webcrypto": "^1.5.0",
     "@peculiar/webcrypto": "^1.5.0",
     "eslint": "^9.37.0",
     "eslint": "^9.37.0",
-    "jsdom": "^26.0.0",
+    "jsdom": "^26.1.0",
     "jsdom-global": "^3.0.2",
     "jsdom-global": "^3.0.2",
     "jsverify": "^0.8.3",
     "jsverify": "^0.8.3",
+    "mime-types": "^3.0.2",
     "mocha": "^11.7.5",
     "mocha": "^11.7.5",
-    "nyc": "^17.1.0"
+    "nyc": "^18.0.0"
   },
   },
   "scripts": {
   "scripts": {
     "test": "mocha",
     "test": "mocha",

+ 61 - 45
js/privatebin.js

@@ -2107,10 +2107,13 @@ jQuery.PrivateBin = (function($) {
          */
          */
         me.createPasteNotification = function(url, deleteUrl)
         me.createPasteNotification = function(url, deleteUrl)
         {
         {
+            const ua = navigator.userAgent;
+            const isMac = /Mac/.test(ua);
+            const hotkey = isMac ? I18n._('Cmd') : I18n._('Ctrl');
             I18n._(
             I18n._(
                 $('#pastelink'),
                 $('#pastelink'),
-                'Your document is <a id="pasteurl" href="%s">%s</a> <span id="copyhint">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>',
-                url, url
+                'Your document is <a id="pasteurl" href="%s">%s</a> <span id="copyhint">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>',
+                url, url, hotkey
             );
             );
             // save newly created element
             // save newly created element
             $pasteUrl = $('#pasteurl');
             $pasteUrl = $('#pasteurl');
@@ -2317,6 +2320,10 @@ jQuery.PrivateBin = (function($) {
             $loadconfirmClose.off('click.close');
             $loadconfirmClose.off('click.close');
             $loadconfirmClose.on('click.close', Controller.newPaste);
             $loadconfirmClose.on('click.close', Controller.newPaste);
 
 
+            $loadconfirmmodal.on('shown.bs.modal', () => {
+                $loadconfirmOpenNow.trigger('focus');
+            });
+
             if (typeof bootstrap !== 'undefined' && bootstrap.Tooltip.VERSION) {
             if (typeof bootstrap !== 'undefined' && bootstrap.Tooltip.VERSION) {
                 (new bootstrap.Modal($loadconfirmmodal[0])).show();
                 (new bootstrap.Modal($loadconfirmmodal[0])).show();
             } else {
             } else {
@@ -2990,11 +2997,18 @@ jQuery.PrivateBin = (function($) {
 
 
             const mimeType = me.getAttachmentMimeType(attachmentData);
             const mimeType = me.getAttachmentMimeType(attachmentData);
 
 
+            // We explicitly do _not_ use the original mime type for the download link
+            // to always force a download instead of potentially dangerous browser rendering/parsing/interpretation
+            let safeMimeType = 'application/octet-stream';
+            if (me.isSafeMimeType(mimeType)) {
+                safeMimeType = mimeType;
+            }
+
             // extract data and convert to binary
             // extract data and convert to binary
             const rawData = attachmentData.substring(base64Start);
             const rawData = attachmentData.substring(base64Start);
             const decodedData = rawData.length > 0 ? atob(rawData) : '';
             const decodedData = rawData.length > 0 ? atob(rawData) : '';
 
 
-            let blobUrl = getBlobUrl(decodedData, mimeType);
+            let blobUrl = getBlobUrl(decodedData, safeMimeType);
             attachmentLink.attr('href', blobUrl);
             attachmentLink.attr('href', blobUrl);
 
 
             if (typeof fileName !== 'undefined') {
             if (typeof fileName !== 'undefined') {
@@ -3024,6 +3038,28 @@ jQuery.PrivateBin = (function($) {
             me.handleBlobAttachmentPreview($attachmentPreview, blobUrl, mimeType);
             me.handleBlobAttachmentPreview($attachmentPreview, blobUrl, mimeType);
         };
         };
 
 
+
+        /**
+         * Evaluates whether this is known a safe mime type.
+         *
+         * This means, the media can safely be displayed and e.g. no XSS should be possible.
+         * 
+         * @name AttachmentViewer.isSafeMimeType
+         * @function
+         * @param {string}
+         * @returns {bool}
+         */
+        me.isSafeMimeType = function(mimeType) {
+            return (
+                    mimeType.startsWith('image/') && 
+                    !mimeType.includes('svg')
+                ) ||
+                mimeType.startsWith('video/') ||
+                mimeType.startsWith('audio/') ||
+                mimeType.endsWith('/pdf') ||
+                mimeType === 'text/plain';
+        }
+
         /**
         /**
          * displays the attachment
          * displays the attachment
          *
          *
@@ -3075,7 +3111,7 @@ jQuery.PrivateBin = (function($) {
          */
          */
         me.removeAttachmentData = function()
         me.removeAttachmentData = function()
         {
         {
-            files = undefined;
+            files = [];
             attachmentsData = [];
             attachmentsData = [];
         };
         };
 
 
@@ -4193,6 +4229,10 @@ jQuery.PrivateBin = (function($) {
                     triggerEmailSend(emailBody);
                     triggerEmailSend(emailBody);
                 }
                 }
 
 
+                $emailconfirmmodal.on('shown.bs.modal', () => {
+                    $emailconfirmTimezoneUtc.trigger('focus');
+                });
+
                 $emailconfirmTimezoneCurrent.off('click.sendEmailCurrentTimezone');
                 $emailconfirmTimezoneCurrent.off('click.sendEmailCurrentTimezone');
                 $emailconfirmTimezoneCurrent.on('click.sendEmailCurrentTimezone', sendEmailAndHideModal);
                 $emailconfirmTimezoneCurrent.on('click.sendEmailCurrentTimezone', sendEmailAndHideModal);
                 $emailconfirmTimezoneUtc.off('click.sendEmailUtcTimezone');
                 $emailconfirmTimezoneUtc.off('click.sendEmailUtcTimezone');
@@ -4713,16 +4753,17 @@ jQuery.PrivateBin = (function($) {
             $fileRemoveButton.click(removeAttachment);
             $fileRemoveButton.click(removeAttachment);
             $qrCodeLink.click(displayQrCode);
             $qrCodeLink.click(displayQrCode);
 
 
-            // bootstrap template drop downs
-            $('ul.dropdown-menu li a', $('#expiration').parent()).click(updateExpiration);
-            $('ul.dropdown-menu li a', $('#formatter').parent()).click(updateFormat);
-            // bootstrap5 & page drop downs
-            $('#pasteExpiration').on('change', function() {
-                pasteExpiration = Model.getExpirationDefault();
-            });
-            $('#pasteFormatter').on('change', function() {
-                PasteViewer.setFormat(Model.getFormatDefault());
-            });
+            if (Helper.isBootstrap5()) {
+                $('#pasteExpiration').on('change', function() {
+                    pasteExpiration = Model.getExpirationDefault();
+                });
+                $('#pasteFormatter').on('change', function() {
+                    PasteViewer.setFormat(Model.getFormatDefault());
+                });
+            } else {
+                $('ul.dropdown-menu li a', $('#expiration').parent()).click(updateExpiration);
+                $('ul.dropdown-menu li a', $('#formatter').parent()).click(updateFormat);
+            }
 
 
             // initiate default state of checkboxes
             // initiate default state of checkboxes
             changeBurnAfterReading();
             changeBurnAfterReading();
@@ -5231,7 +5272,7 @@ jQuery.PrivateBin = (function($) {
                 };
                 };
             if (attachmentsData.length) {
             if (attachmentsData.length) {
                 cipherMessage['attachment'] = attachmentsData;
                 cipherMessage['attachment'] = attachmentsData;
-                cipherMessage['attachment_name'] = AttachmentViewer.getFiles()?.map((fileInfo => fileInfo.name)) ?? [];
+                cipherMessage['attachment_name'] = AttachmentViewer.getFiles().map(fileInfo => fileInfo.name);
             } else if (AttachmentViewer.hasAttachment()) {
             } else if (AttachmentViewer.hasAttachment()) {
                 // fall back to cloned part
                 // fall back to cloned part
                 let attachments = AttachmentViewer.getAttachments();
                 let attachments = AttachmentViewer.getAttachments();
@@ -5526,8 +5567,6 @@ jQuery.PrivateBin = (function($) {
 
 
         let copyButton,
         let copyButton,
             copyLinkButton,
             copyLinkButton,
-            copyIcon,
-            successIcon,
             shortcutHint,
             shortcutHint,
             url;
             url;
 
 
@@ -5539,11 +5578,10 @@ jQuery.PrivateBin = (function($) {
          * @function
          * @function
          */
          */
         function handleCopyButtonClick() {
         function handleCopyButtonClick() {
-            $(copyButton).click(function() {
+            $(copyButton).click(function () {
                 const text = PasteViewer.getText();
                 const text = PasteViewer.getText();
                 saveToClipboard(text);
                 saveToClipboard(text);
 
 
-                toggleSuccessIcon();
                 showAlertMessage('Document copied to clipboard');
                 showAlertMessage('Document copied to clipboard');
             });
             });
         }
         }
@@ -5625,23 +5663,6 @@ jQuery.PrivateBin = (function($) {
             Alert.showStatus(message);
             Alert.showStatus(message);
         }
         }
 
 
-        /**
-         * Toogle success icon after copy
-         *
-         * @name CopyToClipboard.toggleSuccessIcon
-         * @private
-         * @function
-         */
-        function toggleSuccessIcon() {
-            $(copyIcon).css('display', 'none');
-            $(successIcon).css('display', 'block');
-
-            setTimeout(function() {
-                $(copyIcon).css('display', 'block');
-                $(successIcon).css('display', 'none');
-            }, 1000);
-        }
-
         /**
         /**
          * Show keyboard shortcut hint
          * Show keyboard shortcut hint
          *
          *
@@ -5649,10 +5670,7 @@ jQuery.PrivateBin = (function($) {
          * @function
          * @function
          */
          */
         me.showKeyboardShortcutHint = function () {
         me.showKeyboardShortcutHint = function () {
-            I18n._(
-                shortcutHint,
-                'To copy document press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>'
-            );
+            $(shortcutHint).removeClass('hidden');
         };
         };
 
 
         /**
         /**
@@ -5662,7 +5680,7 @@ jQuery.PrivateBin = (function($) {
          * @function
          * @function
          */
          */
         me.hideKeyboardShortcutHint = function () {
         me.hideKeyboardShortcutHint = function () {
-            $(shortcutHint).html('');
+            $(shortcutHint).addClass('hidden');
         };
         };
 
 
         /**
         /**
@@ -5683,11 +5701,9 @@ jQuery.PrivateBin = (function($) {
          * @function
          * @function
          */
          */
         me.init = function() {
         me.init = function() {
-            copyButton = $('#prettyMessageCopyBtn');
+            copyButton = $('#copyShortcutHintBtn');
             copyLinkButton = $('#copyLink');
             copyLinkButton = $('#copyLink');
-            copyIcon = $('#copyIcon');
-            successIcon = $('#copySuccessIcon');
-            shortcutHint = $('#copyShortcutHintText');
+            shortcutHint = $('#copyShortcutHint');
 
 
             handleCopyButtonClick();
             handleCopyButtonClick();
             handleCopyLinkButtonClick();
             handleCopyLinkButtonClick();

Разлика између датотеке није приказан због своје велике величине
+ 0 - 1
js/purify-3.4.1.js


Разлика између датотеке није приказан због своје велике величине
+ 1 - 0
js/purify-3.4.12.js


+ 27 - 25
js/test/CopyToClipboard.js

@@ -13,12 +13,15 @@ describe('CopyToClipboard', function() {
                 common.enableClipboard();
                 common.enableClipboard();
 
 
                 $('body').html(
                 $('body').html(
-                    '<div id="placeholder" class="hidden">+++ no document text ' +
-                    '+++</div><div id="prettymessage" class="hidden">' +
-                    '<button type="button" id="prettyMessageCopyBtn"><svg id="copyIcon"></svg>' +
-                    '<svg id="copySuccessIcon"></svg></button><pre ' +
-                    'id="prettyprint" class="prettyprint linenums:1"></pre>' +
-                    '</div><div id="plaintext" class="hidden"></div>'
+                    '<div id="placeholder"></div>' +
+					'<div id="attachmentPreview" class="hidden"></div>' +
+                    '<h5 id="copyShortcutHint" class="hidden">' +
+						'<small id="copyShortcutHintText"></small>' +
+						'<button type="button" id="copyShortcutHintBtn"></button>' +
+					'</h5>' +
+                    '<div id="prettymessage" class="hidden">' +
+						'<pre id="prettyprint"></pre>' +
+					'</div>'
                 );
                 );
 
 
                 $.PrivateBin.PasteViewer.init();
                 $.PrivateBin.PasteViewer.init();
@@ -28,7 +31,7 @@ describe('CopyToClipboard', function() {
 
 
                 $.PrivateBin.CopyToClipboard.init();
                 $.PrivateBin.CopyToClipboard.init();
 
 
-                $('#prettyMessageCopyBtn').trigger('click');
+                $('#copyShortcutHintBtn').trigger('click');
 
 
                 const savedToClipboardText = await navigator.clipboard.readText();
                 const savedToClipboardText = await navigator.clipboard.readText();
 
 
@@ -50,12 +53,15 @@ describe('CopyToClipboard', function() {
                 common.enableClipboard();
                 common.enableClipboard();
 
 
                 $('body').html(
                 $('body').html(
-                    '<div id="placeholder">+++ no document text ' +
-                    '+++</div><div id="prettymessage" class="hidden">' +
-                    '<button type="button" id="prettyMessageCopyBtn"><svg id="copyIcon"></svg>' +
-                    '<svg id="copySuccessIcon"></svg></button><pre ' +
-                    'id="prettyprint" class="prettyprint linenums:1"></pre>' +
-                    '</div><div id="plaintext" class="hidden"></div>'
+                    '<div id="placeholder"></div>' +
+					'<div id="attachmentPreview" class="hidden"></div>' +
+                    '<h5 id="copyShortcutHint" class="hidden">' +
+						'<small id="copyShortcutHintText"></small>' +
+						'<button type="button" id="copyShortcutHintBtn"></button>' +
+					'</h5>' +
+                    '<div id="prettymessage" class="hidden">' +
+						'<pre id="prettyprint"></pre>' +
+					'</div>'
                 );
                 );
 
 
                 $.PrivateBin.PasteViewer.init();
                 $.PrivateBin.PasteViewer.init();
@@ -100,39 +106,35 @@ describe('CopyToClipboard', function() {
 
 
 
 
     describe('Keyboard shortcut hint', function () {
     describe('Keyboard shortcut hint', function () {
-        jsc.property('Show hint',
-            'nestring',
-            function (text) {
+        jsc.property('Show hint', function () {
                 var clean = jsdom();
                 var clean = jsdom();
 
 
-                $('body').html('<small id="copyShortcutHintText"></small>');
+                $('body').html('<h5 id="copyShortcutHint" class="hidden"></h5>');
 
 
                 $.PrivateBin.CopyToClipboard.init();
                 $.PrivateBin.CopyToClipboard.init();
                 $.PrivateBin.CopyToClipboard.showKeyboardShortcutHint();
                 $.PrivateBin.CopyToClipboard.showKeyboardShortcutHint();
 
 
-                const keyboardShortcutHint = $('#copyShortcutHintText').text();
+                const hasHidden = $('#copyShortcutHint').hasClass('hidden');
 
 
                 clean();
                 clean();
 
 
-                return keyboardShortcutHint.length > 0;
+                return !hasHidden;
             }
             }
         );
         );
 
 
-        jsc.property('Hide hint',
-            'nestring',
-            function (text) {
+        jsc.property('Hide hint', function () {
                 var clean = jsdom();
                 var clean = jsdom();
 
 
-                $('body').html('<small id="copyShortcutHintText">' + text + '</small>');
+                $('body').html('<h5 id="copyShortcutHint"></h5>');
 
 
                 $.PrivateBin.CopyToClipboard.init();
                 $.PrivateBin.CopyToClipboard.init();
                 $.PrivateBin.CopyToClipboard.hideKeyboardShortcutHint();
                 $.PrivateBin.CopyToClipboard.hideKeyboardShortcutHint();
 
 
-                const keyboardShortcutHint = $('#copyShortcutHintText').text();
+                const hasHidden = $('#copyShortcutHint').hasClass('hidden');
 
 
                 clean();
                 clean();
 
 
-                return keyboardShortcutHint.length === 0;
+                return hasHidden;
             }
             }
         );
         );
     });
     });

+ 34 - 0
js/test/PasteStatus.js

@@ -39,6 +39,40 @@ describe('PasteStatus', function () {
                 return result1 === expected1 && result2 === expected2;
                 return result1 === expected1 && result2 === expected2;
             }
             }
         );
         );
+
+        it(
+            'shows Cmd hotkey hint on macOS',
+            function () {
+                const clean = jsdom();
+                Object.defineProperty(navigator, 'userAgent', {
+                    value: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
+                    configurable: true
+                });
+                $('body').html('<a href="#" id="deletelink"><span></span></a><div id="pastelink"></div>');
+                $.PrivateBin.PasteStatus.init();
+                $.PrivateBin.PasteStatus.createPasteNotification('https://example.com/', 'https://example.com/delete');
+                const hotkey = $('#copyhint kbd').first().text();
+                clean();
+                assert.strictEqual(hotkey, 'Cmd');
+            }
+        );
+
+        it(
+            'shows Ctrl hotkey hint on non-Mac platforms',
+            function () {
+                const clean = jsdom();
+                Object.defineProperty(navigator, 'userAgent', {
+                    value: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
+                    configurable: true
+                });
+                $('body').html('<a href="#" id="deletelink"><span></span></a><div id="pastelink"></div>');
+                $.PrivateBin.PasteStatus.init();
+                $.PrivateBin.PasteStatus.createPasteNotification('https://example.com/', 'https://example.com/delete');
+                const hotkey = $('#copyhint kbd').first().text();
+                clean();
+                assert.strictEqual(hotkey, 'Ctrl');
+            }
+        );
     });
     });
 
 
     describe('extractUrl', function () {
     describe('extractUrl', function () {

+ 2 - 2
lib/Configuration.php

@@ -122,8 +122,8 @@ class Configuration
             'js/kjua-0.10.0.js'      => 'sha512-BYj4xggowR7QD150VLSTRlzH62YPfhpIM+b/1EUEr7RQpdWAGKulxWnOvjFx1FUlba4m6ihpNYuQab51H6XlYg==',
             'js/kjua-0.10.0.js'      => 'sha512-BYj4xggowR7QD150VLSTRlzH62YPfhpIM+b/1EUEr7RQpdWAGKulxWnOvjFx1FUlba4m6ihpNYuQab51H6XlYg==',
             'js/legacy.js'           => 'sha512-RQEo1hxpNc37i+jz/D9/JiAZhG8GFx3+SNxjYnI7jUgirDIqrCSj6QPAAZeaidditcWzsJ3jxfEj5lVm7ZwTRQ==',
             'js/legacy.js'           => 'sha512-RQEo1hxpNc37i+jz/D9/JiAZhG8GFx3+SNxjYnI7jUgirDIqrCSj6QPAAZeaidditcWzsJ3jxfEj5lVm7ZwTRQ==',
             'js/prettify.js'         => 'sha512-puO0Ogy++IoA2Pb9IjSxV1n4+kQkKXYAEUtVzfZpQepyDPyXk8hokiYDS7ybMogYlyyEIwMLpZqVhCkARQWLMg==',
             'js/prettify.js'         => 'sha512-puO0Ogy++IoA2Pb9IjSxV1n4+kQkKXYAEUtVzfZpQepyDPyXk8hokiYDS7ybMogYlyyEIwMLpZqVhCkARQWLMg==',
-            'js/privatebin.js'       => 'sha512-kRRgq+R3dUScoqqjTQo+re+T+FrsaukqMO7qSMen2fq0Rcgz2S0GnR52sqKukbDDKRr/dDba01WWPccduYr+Jg==',
-            'js/purify-3.4.1.js'     => 'sha512-280a/Vb6fVFsYaeRrkuDp4EDmdYlt2XS+dlDEO/U9qljPrAraA2bIzHTNmP+9dpwPDDwTML+RS+h5iaagPwTzA==',
+            'js/privatebin.js'       => 'sha512-g58rPgrKnvxBDnT6lzYazdEfgY3XhRh7Yt7i1jkJw4oSvN0k/VPZ4zBSL/dCGfXGIOHqlqmX8DO5UFv2XYqsXg==',
+            'js/purify-3.4.12.js'    => 'sha512-Akf6HnAJZm0sWWWI4gp2GYff0NDnHUB02XJE5S7Hdq/Z5xtMjkuFacsDA8ZtViv1gi+onBxMhEMIaGyQeGxBng==',
             'js/showdown-2.1.0.js'   => 'sha512-WYXZgkTR0u/Y9SVIA4nTTOih0kXMEd8RRV6MLFdL6YU8ymhR528NLlYQt1nlJQbYz4EW+ZsS0fx1awhiQJme1Q==',
             'js/showdown-2.1.0.js'   => 'sha512-WYXZgkTR0u/Y9SVIA4nTTOih0kXMEd8RRV6MLFdL6YU8ymhR528NLlYQt1nlJQbYz4EW+ZsS0fx1awhiQJme1Q==',
             'js/zlib-1.3.2.js'       => 'sha512-RAhJgxg9siMIA8ky4c10Rc2zUgnK80olHB8Tt1IOYWY4Eh1WmrviQkDn+sgBlb38ZHq3tzufGC41kP360gmosQ==',
             'js/zlib-1.3.2.js'       => 'sha512-RAhJgxg9siMIA8ky4c10Rc2zUgnK80olHB8Tt1IOYWY4Eh1WmrviQkDn+sgBlb38ZHq3tzufGC41kP360gmosQ==',
             'js/zlib.js'             => 'sha512-QOaEwssHqHRRcWJ2Un3Kl2Zhyprzl7T8zmsKN2FppFxW3VR+8UChYOx2iuL0HbXK42fuBWJm5PNQJxufulrt/w==',
             'js/zlib.js'             => 'sha512-QOaEwssHqHRRcWJ2Un3Kl2Zhyprzl7T8zmsKN2FppFxW3VR+8UChYOx2iuL0HbXK42fuBWJm5PNQJxufulrt/w==',

+ 1 - 1
lib/Controller.php

@@ -32,7 +32,7 @@ class Controller
      *
      *
      * @const string
      * @const string
      */
      */
-    const VERSION = '2.0.4';
+    const VERSION = '2.0.5';
 
 
     /**
     /**
      * minimal required PHP version
      * minimal required PHP version

+ 13 - 0
lib/I18n.php

@@ -297,6 +297,19 @@ class I18n
         return in_array(self::$_language, ['ar', 'he']);
         return in_array(self::$_language, ['ar', 'he']);
     }
     }
 
 
+    /**
+     * get OS-specific copy hotkey modifier key name based on user agent
+     *
+     * @access public
+     * @static
+     * @return string 'Cmd' on macOS, 'Ctrl' otherwise
+     */
+    public static function getCopyHotkey()
+    {
+        return isset($_SERVER['HTTP_USER_AGENT']) &&
+            strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false ? self::_('Cmd') : self::_('Ctrl');
+    }
+
     /**
     /**
      * set the default language
      * set the default language
      *
      *

+ 2 - 2
lib/Proxy/YourlsProxy.php

@@ -65,8 +65,8 @@ class YourlsProxy extends AbstractProxy
      */
      */
     protected function _extractShortUrl(array $data): ?string
     protected function _extractShortUrl(array $data): ?string
     {
     {
-        if (($data['statusCode'] ?? 0) === 200) {
-            return $data['shorturl'] ?? 0;
+        if ((int) ($data['statusCode'] ?? 0) === 200) {
+            return $data['shorturl'] ?? null;
         }
         }
         return null;
         return null;
     }
     }

+ 2 - 2
lib/Request.php

@@ -220,7 +220,7 @@ class Request
     }
     }
 
 
     /**
     /**
-     * Get request URI
+     * Get request URI path without GET parameters
      *
      *
      * @access public
      * @access public
      * @return string
      * @return string
@@ -228,7 +228,7 @@ class Request
     public function getRequestUri()
     public function getRequestUri()
     {
     {
         $uri = array_key_exists('REQUEST_URI', $_SERVER) ? filter_var($_SERVER['REQUEST_URI'], FILTER_SANITIZE_URL) : '';
         $uri = array_key_exists('REQUEST_URI', $_SERVER) ? filter_var($_SERVER['REQUEST_URI'], FILTER_SANITIZE_URL) : '';
-        return empty($uri) ? '/' : $uri;
+        return empty($uri) ? '/' : parse_url($uri, PHP_URL_PATH);
     }
     }
 
 
     /**
     /**

+ 13 - 6
tpl/bootstrap.php

@@ -66,7 +66,7 @@ if ($MARKDOWN) :
 <?php
 <?php
 endif;
 endif;
 ?>
 ?>
-		<?php $this->_scriptTag('js/purify-3.4.1.js', 'defer'); ?>
+		<?php $this->_scriptTag('js/purify-3.4.12.js', 'defer'); ?>
 		<?php $this->_scriptTag('js/legacy.js', 'defer'); ?>
 		<?php $this->_scriptTag('js/legacy.js', 'defer'); ?>
 		<?php $this->_scriptTag('js/privatebin.js', 'defer'); ?>
 		<?php $this->_scriptTag('js/privatebin.js', 'defer'); ?>
 		<!-- icon -->
 		<!-- icon -->
@@ -622,12 +622,19 @@ endif;
 				<article class="row">
 				<article class="row">
 					<div id="placeholder" class="col-md-12 hidden"><?php echo I18n::_('+++ no document text +++'); ?></div>
 					<div id="placeholder" class="col-md-12 hidden"><?php echo I18n::_('+++ no document text +++'); ?></div>
 					<div id="attachmentPreview" class="col-md-12 text-center hidden"></div>
 					<div id="attachmentPreview" class="col-md-12 text-center hidden"></div>
-					<h5 id="copyShortcutHint" class="col-md-12"><small id="copyShortcutHintText"></small></h5>
+					<h5 id="copyShortcutHint" class="media col-md-12 hidden" style="margin-top: 0;">
+						<div class="media-body media-middle">
+							<small id="copyShortcutHintText" class="hidden-xs">
+								<?php
+									echo I18n::_("To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>", I18n::getCopyHotkey())
+								?>
+							</small>
+						</div>
+						<div class="media-right media-middle">
+							<button type="button" id="copyShortcutHintBtn" class="btn btn-default"><?php echo I18n::_('Copy'); ?></button>
+						</div>
+					</h5>
 					<div id="prettymessage" class="col-md-12 hidden">
 					<div id="prettymessage" class="col-md-12 hidden">
-						<button id="prettyMessageCopyBtn">
-							<span id="copyIcon" class="glyphicon glyphicon-duplicate" aria-hidden="true"></span>
-							<span id="copySuccessIcon" class="glyphicon glyphicon-ok text-success" aria-hidden="true"></span>
-						</button>
 						<pre id="prettyprint" class="col-md-12 prettyprint linenums:1"></pre>
 						<pre id="prettyprint" class="col-md-12 prettyprint linenums:1"></pre>
 					</div>
 					</div>
 					<div id="plaintext" class="col-md-12 hidden"></div>
 					<div id="plaintext" class="col-md-12 hidden"></div>

+ 11 - 8
tpl/bootstrap5.php

@@ -50,7 +50,7 @@ if ($MARKDOWN) :
 <?php
 <?php
 endif;
 endif;
 ?>
 ?>
-		<?php $this->_scriptTag('js/purify-3.4.1.js', 'defer'); ?>
+		<?php $this->_scriptTag('js/purify-3.4.12.js', 'defer'); ?>
 		<?php $this->_scriptTag('js/legacy.js', 'defer'); ?>
 		<?php $this->_scriptTag('js/legacy.js', 'defer'); ?>
 		<?php $this->_scriptTag('js/privatebin.js', 'defer'); ?>
 		<?php $this->_scriptTag('js/privatebin.js', 'defer'); ?>
 		<!-- icon -->
 		<!-- icon -->
@@ -379,7 +379,7 @@ if ($FILEUPLOAD) :
 <?php
 <?php
 endif;
 endif;
 ?>
 ?>
-				<div id="status" role="alert" class="d-flex justify-content-between align-items-center alert alert-<?php echo $ISDELETED ? 'success' : 'info'; echo empty($STATUS) ? ' hidden' : '' ?>">
+				<div id="status" role="alert" class="d-flex align-items-center gap-2 alert alert-<?php echo $ISDELETED ? 'success' : 'info'; echo empty($STATUS) ? ' hidden' : '' ?>">
 					<div>
 					<div>
 						<svg width="16" height="16" fill="currentColor" aria-hidden="true"><use href="img/bootstrap-icons.svg#info-circle" /></svg>
 						<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; ?>
 						<?php echo I18n::encode($STATUS), PHP_EOL; ?>
@@ -387,7 +387,7 @@ endif;
 <?php
 <?php
 if ($ISDELETED) :
 if ($ISDELETED) :
 ?>
 ?>
-					<button type="button" class="btn btn-secondary d-flex justify-content-center align-items-center gap-1" id="new-from-alert">
+					<button type="button" class="btn btn-secondary d-flex justify-content-center align-items-center gap-1 ms-auto" id="new-from-alert">
 						<svg width="16" height="16" fill="currentColor" aria-hidden="true"><use href="img/bootstrap-icons.svg#repeat" /></svg>
 						<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; ?>
 						<?php echo I18n::_('Start over'), PHP_EOL; ?>
 					</button>
 					</button>
@@ -480,12 +480,15 @@ endif;
 				<article>
 				<article>
 					<div id="placeholder" class="col-md-12 hidden"><?php echo I18n::_('+++ no document text +++'); ?></div>
 					<div id="placeholder" class="col-md-12 hidden"><?php echo I18n::_('+++ no document text +++'); ?></div>
 					<div id="attachmentPreview" class="col-md-12 text-center hidden"></div>
 					<div id="attachmentPreview" class="col-md-12 text-center hidden"></div>
-					<h6 id="copyShortcutHint" class="col-md-12"><small id="copyShortcutHintText"></small></h6>
+					<h6 id="copyShortcutHint" class="col-md-12 nav justify-content-between align-items-center mb-2 hidden">
+						<small id="copyShortcutHintText" class="d-none d-md-inline">
+							<?php
+								echo I18n::_("To copy document press on the copy button or use the clipboard shortcut <kbd>%s</kbd>+<kbd>c</kbd>", I18n::getCopyHotkey())
+							?>
+						</small>
+						<button type="button" id="copyShortcutHintBtn" class="btn btn-secondary ms-auto"><?php echo I18n::_('Copy'); ?></button>
+					</h6>
 					<div id="prettymessage" class="card col-md-12 hidden">
 					<div id="prettymessage" class="card col-md-12 hidden">
-						<button type="button" id="prettyMessageCopyBtn" class="text-secondary opacity-05-1-hover">
-							<svg id="copyIcon" fill="currentColor" aria-hidden="true"><use href="img/bootstrap-icons.svg#copy" /></svg>
-							<svg id="copySuccessIcon" class="text-success" fill="currentColor" aria-hidden="true"><use href="img/bootstrap-icons.svg#check" /></svg>
-						</button>
 						<pre id="prettyprint" class="card-body col-md-12 prettyprint linenums:1"></pre>
 						<pre id="prettyprint" class="card-body col-md-12 prettyprint linenums:1"></pre>
 					</div>
 					</div>
 					<div id="plaintext" class="col-md-12 hidden"></div>
 					<div id="plaintext" class="col-md-12 hidden"></div>

+ 5 - 1
tpl/shortenerproxy.php

@@ -12,7 +12,11 @@ use PrivateBin\I18n;
 <?php
 <?php
 if (empty($ERROR)) :
 if (empty($ERROR)) :
 ?>
 ?>
-		<p><?php echo I18n::_('Your document is <a id="pasteurl" href="%s">%s</a> <span id="copyhint">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>', $SHORTURL, $SHORTURL); ?></p>
+		<p>
+			<?php
+				echo I18n::_('Your document is <a id="pasteurl" href="%s">%s</a> <span id="copyhint">(Hit <kbd>%s</kbd>+<kbd>c</kbd> to copy)</span>', $SHORTURL, $SHORTURL, I18n::getCopyHotkey());
+			?>
+		</p>
 <?php
 <?php
 else:
 else:
 ?>
 ?>

+ 5 - 0
tst/Bootstrap.php

@@ -792,6 +792,11 @@ class ConnectionInterfaceStub implements ConnectionInterface
         throw new BadMethodCallException('not supported by this stub');
         throw new BadMethodCallException('not supported by this stub');
     }
     }
 
 
+    public function headObject(array $args = []): array
+    {
+        throw new BadMethodCallException('not supported by this stub');
+    }
+
     public function listObjects(array $args = [])
     public function listObjects(array $args = [])
     {
     {
         throw new BadMethodCallException('not supported by this stub');
         throw new BadMethodCallException('not supported by this stub');

+ 15 - 0
tst/I18nTest.php

@@ -231,6 +231,21 @@ class I18nTest extends TestCase
         Helper::rmDir($path);
         Helper::rmDir($path);
     }
     }
 
 
+    public function testGetCopyHotkey()
+    {
+        $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)';
+        $this->assertEquals('Cmd', I18n::getCopyHotkey(), 'returns Cmd on macOS');
+
+        $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)';
+        $this->assertEquals('Ctrl', I18n::getCopyHotkey(), 'returns Ctrl on Windows');
+
+        $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (X11; Linux x86_64)';
+        $this->assertEquals('Ctrl', I18n::getCopyHotkey(), 'returns Ctrl on Linux');
+
+        unset($_SERVER['HTTP_USER_AGENT']);
+        $this->assertEquals('Ctrl', I18n::getCopyHotkey(), 'returns Ctrl when user agent absent');
+    }
+
     public function testMessageIdsExistInAllLanguages()
     public function testMessageIdsExistInAllLanguages()
     {
     {
         $messageIds = [];
         $messageIds = [];

+ 3 - 0
tst/RequestTest.php

@@ -218,6 +218,7 @@ class RequestTest extends TestCase
     {
     {
         $this->reset();
         $this->reset();
         $id              = Helper::getRandomId();
         $id              = Helper::getRandomId();
+        $path            = '/' . $this->getRandomQueryChars() . '/';
         $queryParams     = [$id];
         $queryParams     = [$id];
         $queryParamCount = random_int(1, 5);
         $queryParamCount = random_int(1, 5);
         for ($i = 0; $i < $queryParamCount; ++$i) {
         for ($i = 0; $i < $queryParamCount; ++$i) {
@@ -226,8 +227,10 @@ class RequestTest extends TestCase
         shuffle($queryParams);
         shuffle($queryParams);
         $_SERVER['REQUEST_METHOD'] = 'GET';
         $_SERVER['REQUEST_METHOD'] = 'GET';
         $_SERVER['QUERY_STRING']   = implode('&', $queryParams);
         $_SERVER['QUERY_STRING']   = implode('&', $queryParams);
+        $_SERVER['REQUEST_URI']    = $path . '?' . $_SERVER['QUERY_STRING'];
         $_GET[$id]                 = '';
         $_GET[$id]                 = '';
         $request                   = new Request;
         $request                   = new Request;
         $this->assertEquals($id, $request->getParam('pasteid'));
         $this->assertEquals($id, $request->getParam('pasteid'));
+        $this->assertEquals($path, $request->getRequestUri());
     }
     }
 }
 }

+ 23 - 0
tst/YourlsProxyTest.php

@@ -51,6 +51,16 @@ class YourlsProxyTest extends TestCase
         $this->assertEquals($yourls->getUrl(), 'https://example.com/1');
         $this->assertEquals($yourls->getUrl(), 'https://example.com/1');
     }
     }
 
 
+    public function testYourlsProxyWithStringStatusCode(): void
+    {
+        // YOURLS API returns statusCode as a string "200", not integer 200
+        file_put_contents($this->_mock_yourls_service, '{"shorturl":"https:\/\/example.com\/1","statusCode":"200"}');
+
+        $yourls = new YourlsProxy($this->_conf, 'https://example.com/?foo#bar');
+        $this->assertFalse($yourls->isError());
+        $this->assertEquals($yourls->getUrl(), 'https://example.com/1');
+    }
+
     /**
     /**
      * @dataProvider providerInvalidUrl
      * @dataProvider providerInvalidUrl
      */
      */
@@ -125,6 +135,19 @@ class YourlsProxyTest extends TestCase
         $this->assertEquals($yourls->getError(), 'Proxy error: Error parsing proxy response. This can be a configuration issue, like wrong or missing config keys.');
         $this->assertEquals($yourls->getError(), 'Proxy error: Error parsing proxy response. This can be a configuration issue, like wrong or missing config keys.');
     }
     }
 
 
+    public function testYourlsSuccessWithoutShortUrl()
+    {
+        // YOURLS may reply with statusCode 200 but without a shorturl field;
+        // this must be handled gracefully as an error instead of raising a
+        // TypeError (the method is declared to return ?string). YOURLS returns
+        // the status code as a string, so mirror that here.
+        file_put_contents($this->_mock_yourls_service, '{"statusCode":"200"}');
+
+        $yourls = new YourlsProxy($this->_conf, 'https://example.com/?foo#bar');
+        $this->assertTrue($yourls->isError());
+        $this->assertEquals($yourls->getError(), 'Proxy error: Error parsing proxy response. This can be a configuration issue, like wrong or missing config keys.');
+    }
+
     public function testServerError()
     public function testServerError()
     {
     {
         // simulate some other server error that results in a non-JSON reply
         // simulate some other server error that results in a non-JSON reply

Неке датотеке нису приказане због велике количине промена