Compare commits
370 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d5cd6741c5 | ||
|
|
1842d356e5 | ||
|
|
207b5ccc5f | ||
|
|
ce2942a370 | ||
|
|
fa662547fe | ||
|
|
fcce915a5f | ||
|
|
f282043b9e | ||
|
|
3d1b6d2666 | ||
|
|
78dd0e2d8e | ||
|
|
20e30b6637 | ||
|
|
6929a6eb76 | ||
|
|
7f9d29b13f | ||
|
|
989a49852e | ||
|
|
d8efd4cd2a | ||
|
|
541426b400 | ||
|
|
4a4cbf1455 | ||
|
|
f68d3cc89c | ||
|
|
b8ee73eacf | ||
|
|
b03ca0cdd5 | ||
|
|
1d4c206a7e | ||
|
|
eac1824cb5 | ||
|
|
4df7684ee5 | ||
|
|
1a4ac8cd9b | ||
|
|
8b66002521 | ||
|
|
4162d0f6c9 | ||
|
|
09682de11e | ||
|
|
9437486b10 | ||
|
|
5c33ee094f | ||
|
|
21d94668a1 | ||
|
|
1285fa935f | ||
|
|
12832c05cc | ||
|
|
8823f30881 | ||
|
|
241bcc6d2d | ||
|
|
e02eb6f56f | ||
|
|
8c318658f8 | ||
|
|
ad5d5716c7 | ||
|
|
a42a5d467e | ||
|
|
b893e7c2b5 | ||
|
|
66d0b92ea1 | ||
|
|
0da6613cbb | ||
|
|
6a05598c9b | ||
|
|
fff9ab3e13 | ||
|
|
03e2b4f4ba | ||
|
|
1042a650ec | ||
|
|
1eb694ea27 | ||
|
|
32da95dafd | ||
|
|
ac894404c0 | ||
|
|
d6ef7a9dc3 | ||
|
|
c2a6f8fddb | ||
|
|
dfed599409 | ||
|
|
f9117ca483 | ||
|
|
fb75637dd0 | ||
|
|
dd99cad66c | ||
|
|
384ea22ba6 | ||
|
|
83a7ad6538 | ||
|
|
e409ad6880 | ||
|
|
4d38551c08 | ||
|
|
0e42ccdb6b | ||
|
|
c35729e23e | ||
|
|
72da9970cd | ||
|
|
1e4d3990b4 | ||
|
|
8180f538c5 | ||
|
|
a2a88f7c3e | ||
|
|
427f03e779 | ||
|
|
800ebcc616 | ||
|
|
4151a459ab | ||
|
|
d6fe310ded | ||
|
|
8076649965 | ||
|
|
d22b9302b1 | ||
|
|
a10fb589ca | ||
|
|
f1c4b79652 | ||
|
|
4cbd449d75 | ||
|
|
cdc0938044 | ||
|
|
8f5a6257a9 | ||
|
|
e626f609b0 | ||
|
|
8d59a37dde | ||
|
|
bcdd795c08 | ||
|
|
6563682fad | ||
|
|
331484b89f | ||
|
|
f7bb92d660 | ||
|
|
58d158b735 | ||
|
|
a2eb40946d | ||
|
|
3516bdbd12 | ||
|
|
a75e58ae8d | ||
|
|
eb3396ba9d | ||
|
|
93cd2ba38b | ||
|
|
de6423866e | ||
|
|
fc60d3bee9 | ||
|
|
d10634f3c1 | ||
|
|
c005f0954e | ||
|
|
ff52413e6b | ||
|
|
3cbade2325 | ||
|
|
869222821e | ||
|
|
3764fc1395 | ||
|
|
fd0b2379b3 | ||
|
|
389b215b2f | ||
|
|
a2ca2ecb37 | ||
|
|
d15ac590d7 | ||
|
|
964b4da50a | ||
|
|
d01c37c59d | ||
|
|
409af9b991 | ||
|
|
c7b9ce0bc2 | ||
|
|
f3d851b0ba | ||
|
|
d7b32f0219 | ||
|
|
c7f465fe8b | ||
|
|
9455fea799 | ||
|
|
44f8cfbfb8 | ||
|
|
4eb6555e3c | ||
|
|
d544d1281d | ||
|
|
91bfd2eec1 | ||
|
|
f49c042cc9 | ||
|
|
8d720e4990 | ||
|
|
34028229c8 | ||
|
|
8268a92ebd | ||
|
|
89c5ebb5f2 | ||
|
|
d778887cd1 | ||
|
|
3a1eb8d534 | ||
|
|
095a5be0b6 | ||
|
|
6ff08b6884 | ||
|
|
6dac586f41 | ||
|
|
5654ef2db8 | ||
|
|
dededc9935 | ||
|
|
c08a792f01 | ||
|
|
6347b6193e | ||
|
|
bace4695ac | ||
|
|
7a42f31aef | ||
|
|
e149e1b412 | ||
|
|
e091f88544 | ||
|
|
2460caddc8 | ||
|
|
95f232232e | ||
|
|
50a695b609 | ||
|
|
cfb609814a | ||
|
|
0199bed133 | ||
|
|
bce152c890 | ||
|
|
abe7874829 | ||
|
|
df1f742789 | ||
|
|
1f7f6c93b0 | ||
|
|
302921a811 | ||
|
|
d220ba7c2b | ||
|
|
9a9eb44102 | ||
|
|
10ee2fa2e4 | ||
|
|
e34a35bf30 | ||
|
|
75db58800c | ||
|
|
cbdd3d50a5 | ||
|
|
b1608e5119 | ||
|
|
f8df10d2e1 | ||
|
|
37871eac69 | ||
|
|
edb753b3d7 | ||
|
|
bb4a3a09b0 | ||
|
|
1c72380443 | ||
|
|
a4be833937 | ||
|
|
16129b610d | ||
|
|
31162e8011 | ||
|
|
bac849d98a | ||
|
|
6ee9563b27 | ||
|
|
797bf5eb6a | ||
|
|
abb49609e0 | ||
|
|
46c49e5455 | ||
|
|
8ad6300c1c | ||
|
|
c04a551215 | ||
|
|
5d4561bd0a | ||
|
|
7825471d70 | ||
|
|
629f263cf5 | ||
|
|
e67972417e | ||
|
|
c62a3fbd2d | ||
|
|
81e9c8672f | ||
|
|
24316f3e07 | ||
|
|
495a84b292 | ||
|
|
1d53f5a054 | ||
|
|
4d0fbfd02b | ||
|
|
dd6537b277 | ||
|
|
9221629d8d | ||
|
|
ebb9e231aa | ||
|
|
e68430e9c5 | ||
|
|
d0303dce9c | ||
|
|
9f82eb64cb | ||
|
|
a9ea962adc | ||
|
|
d89bc1b97b | ||
|
|
e0b6aee65a | ||
|
|
4e518b3fce | ||
|
|
bb98d5b6c1 | ||
|
|
478b79b7b7 | ||
|
|
57636ee6d4 | ||
|
|
bd3486eda7 | ||
|
|
ddc9de345d | ||
|
|
e511ab74b1 | ||
|
|
c32c74a630 | ||
|
|
412987ea5b | ||
|
|
b90967a14b | ||
|
|
654bff65cc | ||
|
|
95188eea94 | ||
|
|
6bab8b014f | ||
|
|
ac62d909b9 | ||
|
|
64b0e33574 | ||
|
|
e4d1f4a26d | ||
|
|
5b54f2cdb0 | ||
|
|
0eef8d62d7 | ||
|
|
bce449de10 | ||
|
|
edad5ba1e0 | ||
|
|
dce5a73444 | ||
|
|
a4b0a993c7 | ||
|
|
1c2c45ec2d | ||
|
|
ec5b72476e | ||
|
|
540172d0f7 | ||
|
|
3b6b97429d | ||
|
|
dc983621ac | ||
|
|
ac63b91a1b | ||
|
|
db15ae8b43 | ||
|
|
740fd90db9 | ||
|
|
aa8f77f673 | ||
|
|
0a37a884e2 | ||
|
|
bbf6ad76f4 | ||
|
|
c7a4ced9e1 | ||
|
|
f111def946 | ||
|
|
f88c643be9 | ||
|
|
ed3347e835 | ||
|
|
6ba9fe5a93 | ||
|
|
e8ae354c63 | ||
|
|
2809403893 | ||
|
|
aeba6e24cd | ||
|
|
f9ac763e62 | ||
|
|
d86f502136 | ||
|
|
c963ba4d7a | ||
|
|
cf14766d9f | ||
|
|
4b2443f3eb | ||
|
|
94ab727139 | ||
|
|
bbaee2c737 | ||
|
|
2a27c767a5 | ||
|
|
e25fe01d82 | ||
|
|
473baf8250 | ||
|
|
d5d55322de | ||
|
|
58d11f2ba0 | ||
|
|
6282e75fa0 | ||
|
|
6dbd9bd157 | ||
|
|
e27e3ace16 | ||
|
|
c27c18faf9 | ||
|
|
4b31528fed | ||
|
|
48eb6ef87a | ||
|
|
863c5b320e | ||
|
|
6c651ea676 | ||
|
|
7733916ad9 | ||
|
|
42b7b9060d | ||
|
|
650dd4464a | ||
|
|
739f105a55 | ||
|
|
65440c63c9 | ||
|
|
9c27143abd | ||
|
|
85fa4ba374 | ||
|
|
4b1063b251 | ||
|
|
d3e6990d1d | ||
|
|
ee3db3ceae | ||
|
|
28bec95ee8 | ||
|
|
f031d63bd5 | ||
|
|
a56be85343 | ||
|
|
34645797b0 | ||
|
|
e6216fcc6a | ||
|
|
bc8c4e72f9 | ||
|
|
abb1f28905 | ||
|
|
42491216f1 | ||
|
|
598e5ae73d | ||
|
|
c2876ff8bd | ||
|
|
e7b28b1c9c | ||
|
|
08819f6635 | ||
|
|
51e39c07eb | ||
|
|
cc06df828b | ||
|
|
736368378c | ||
|
|
4311f8683d | ||
|
|
d0bcc46a6d | ||
|
|
e2bc31bd73 | ||
|
|
f204051aef | ||
|
|
e76a31ca30 | ||
|
|
bcb953b0f2 | ||
|
|
12b202a4e5 | ||
|
|
b7451de8f2 | ||
|
|
67a1dfb683 | ||
|
|
73073f25e1 | ||
|
|
b6c01f139f | ||
|
|
f232d370bc | ||
|
|
917cd221fe | ||
|
|
75d204fcfb | ||
|
|
d2159d81e7 | ||
|
|
9c809ff666 | ||
|
|
629c98f322 | ||
|
|
b197cb4d0d | ||
|
|
b6888f0aa9 | ||
|
|
4d8a9efa9d | ||
|
|
0c5dc38381 | ||
|
|
08766f3162 | ||
|
|
8f353badef | ||
|
|
dd964f9bfc | ||
|
|
eb31355364 | ||
|
|
6f248c382b | ||
|
|
d4d0e48221 | ||
|
|
98f46a3f1a | ||
|
|
9c9a38c54e | ||
|
|
80a8ba9749 | ||
|
|
8d43769717 | ||
|
|
645661757f | ||
|
|
97320dfbe7 | ||
|
|
9189945a00 | ||
|
|
eb95967bea | ||
|
|
62da1ff721 | ||
|
|
ff9d8e70d5 | ||
|
|
34960fb3b4 | ||
|
|
9d09c4974d | ||
|
|
bdc88298a0 | ||
|
|
441fd7a979 | ||
|
|
18db3c6670 | ||
|
|
ffd4210fe2 | ||
|
|
4076a831eb | ||
|
|
346ae23ade | ||
|
|
5936dbbb10 | ||
|
|
68be47f4d7 | ||
|
|
03fbb5e1e9 | ||
|
|
ee49f90f39 | ||
|
|
7b57d7b289 | ||
|
|
52cd7b3590 | ||
|
|
fb7bca7d71 | ||
|
|
90957850b9 | ||
|
|
2cc2a4b0b5 | ||
|
|
22eaba62f2 | ||
|
|
2e69154e9a | ||
|
|
eaa60e3a81 | ||
|
|
45b38770db | ||
|
|
a14d0a3d11 | ||
|
|
dc85a67a03 | ||
|
|
d6020c635b | ||
|
|
870e2ea97c | ||
|
|
d7eed290ad | ||
|
|
c7d085a51f | ||
|
|
f9e2373e62 | ||
|
|
b86eb93dbe | ||
|
|
0462da6e8e | ||
|
|
a6a7df9a72 | ||
|
|
6c39a1441c | ||
|
|
5aa7a95841 | ||
|
|
333f0568b6 | ||
|
|
84866f9b09 | ||
|
|
99e0b7efac | ||
|
|
8b7ccb0fd4 | ||
|
|
21b259b5eb | ||
|
|
be18dcb838 | ||
|
|
15488d3405 | ||
|
|
65ea73e638 | ||
|
|
f7a9631a2f | ||
|
|
178ae10904 | ||
|
|
f9094874eb | ||
|
|
e92f2ac9ca | ||
|
|
90d5bf9990 | ||
|
|
d22c6e31dc | ||
|
|
7ee6bcafc4 | ||
|
|
75ec510f2d | ||
|
|
652cf0cf26 | ||
|
|
1c7d639546 | ||
|
|
6587466a9b | ||
|
|
6b180ac7b1 | ||
|
|
3d59d3da50 | ||
|
|
c7195aaf9a | ||
|
|
9028ddbb97 | ||
|
|
544c4d2f5f | ||
|
|
5ba56c20cb | ||
|
|
7cbabc871a | ||
|
|
7e019c4aae | ||
|
|
390e268bb0 | ||
|
|
c9067f1f23 | ||
|
|
ab9d9416d9 | ||
|
|
eaa72ab41a | ||
|
|
85241f2615 | ||
|
|
ab5fa3d14d | ||
|
|
55176309a7 | ||
|
|
a4a32f6b9e |
2
.github/workflows/release.yml
vendored
@@ -43,7 +43,7 @@ jobs:
|
||||
actions: read
|
||||
id-token: write
|
||||
contents: write
|
||||
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.0.0
|
||||
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.1.0
|
||||
with:
|
||||
base64-subjects: "${{ needs.release.outputs.hashes }}"
|
||||
draft-release: true
|
||||
|
||||
2
.github/workflows/test-results.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Download and Extract Artifacts
|
||||
uses: dawidd6/action-download-artifact@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11
|
||||
uses: dawidd6/action-download-artifact@ac66b43f0e6a346234dd65d4d0c8fbb31cb316e5
|
||||
with:
|
||||
run_id: ${{ github.event.workflow_run.id }}
|
||||
path: artifacts
|
||||
|
||||
11
.github/workflows/tests.yml
vendored
@@ -22,11 +22,12 @@ jobs:
|
||||
continue-on-error: "${{ matrix.experimental }}"
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['7.3', '7.4', '8.0', '8.1', '8.2', '8.3']
|
||||
php-versions: ['7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4']
|
||||
experimental: [false]
|
||||
include:
|
||||
- php-versions: '8.4' # development release, things can break
|
||||
experimental: true
|
||||
# uncomment this to start testing on development release
|
||||
# include:
|
||||
# - php-versions: '8.5' # development release, things can break
|
||||
# experimental: true
|
||||
env:
|
||||
extensions: gd, sqlite3
|
||||
extensions-cache-key-name: phpextensions
|
||||
@@ -120,7 +121,7 @@ jobs:
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
node-version: '18'
|
||||
cache: 'npm'
|
||||
cache-dependency-path: 'js/package-lock.json'
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ RewriteEngine on
|
||||
RewriteCond !%{HTTP_USER_AGENT} "Let's Encrypt validation server" [NC]
|
||||
RewriteCond %{HTTP_USER_AGENT} ^.*(bot|spider|crawl|https?://|WhatsApp|SkypeUriPreview|facebookexternalhit) [NC]
|
||||
RewriteRule .* - [R=403,L]
|
||||
AddType application/wasm .wasm
|
||||
|
||||
<IfModule mod_php7.c>
|
||||
php_value max_execution_time 30
|
||||
|
||||
28
CHANGELOG.md
@@ -1,5 +1,33 @@
|
||||
# PrivateBin version history
|
||||
|
||||
## 1.7.8 (2025-06-30)
|
||||
* FIXED: Duplicate attachment for every comment (#1577)
|
||||
* FIXED: Attachments with empty file names (#1577)
|
||||
* FIXED: Page template scripts loading order (#1579)
|
||||
|
||||
## 1.7.7 (2025-06-28)
|
||||
* ADDED: Switching templates using the web ui (#1501)
|
||||
* ADDED: Show file name and size on download page (#603)
|
||||
* CHANGED: Passing large data structures by reference to reduce memory consumption (#858)
|
||||
* CHANGED: Removed use of ctype functions and polyfill library for ctype
|
||||
* CHANGED: Upgrading libraries to: DOMpurify 3.2.6, ip-lib 1.20.0
|
||||
* CHANGED: Support for multiple file uploads (#1060)
|
||||
* CHANGED: Documented CSP change necessary to allow PDF attachment preview (#1552)
|
||||
* FIXED: Hide Reply button in the discussions once clicked to avoid losing the text input (#1508)
|
||||
* FIXED: Bump zlib library suffix, ensuring cache refresh for WASM streaming change
|
||||
* FIXED: Handle undefined globals in file based persisted values (#1544)
|
||||
|
||||
## 1.7.6 (2025-02-01)
|
||||
* ADDED: Ability to copy the paste by clicking the copy icon button or using the keyboard shortcut ctrl+c/cmd+c (#1390 & #12)
|
||||
* CHANGED: Allow toggling tab-key-support using `[Ctrl]+[m]` or `[Esc]` in textarea for keyboard navigation (#1386)
|
||||
* CHANGED: Switched to WASM streaming and replace unsafe-eval with wasm-unsafe-eval CSP declaration (#1464), requires webserver to have `application/wasm` MIME type configured.
|
||||
* CHANGED: Replaced usage of strpos with str_starts_with & str_contains (#1373)
|
||||
* CHANGED: Added polyfill libraries for ctype, str_starts_with & str_contains functions (#1476)
|
||||
* CHANGED: Turned paste delete link into a button (#266)
|
||||
* CHANGED: Upgrading libraries to: DOMpurify 3.2.4, cloud-storage 1.45.0, aws-sdk-php 3.336.2
|
||||
* CHANGED: `bootstrap5` template UI improvements
|
||||
* FIXED: Redirect to the home page after changing the language (#92)
|
||||
|
||||
## 1.7.5 (2024-11-16)
|
||||
* ADDED: Allow non persistent SQL connections, if configured (#1394)
|
||||
* ADDED: Show a button (that redirects to the `basepath` URL) inside the alert after a paste is deleted
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
* Simon Rupf - current developer and maintainer
|
||||
* rugk - security review, doc improvment, JS refactoring & various other stuff
|
||||
* R4SAS - python client, compression, blob URI to support larger attachments
|
||||
* Mikhail Romanov - UI improvements, theme switching, clipboard support, multi-file upload, bugfixes, code refactoring
|
||||
|
||||
## Past contributions
|
||||
|
||||
|
||||
4
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
|
||||
|
||||
CURRENT_VERSION = 1.7.5
|
||||
VERSION ?= 1.7.6
|
||||
CURRENT_VERSION = 1.7.8
|
||||
VERSION ?= 2.0.0
|
||||
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_VERSION := $(shell echo $(VERSION) | sed "s/\./\\\./g")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# [](https://privatebin.info/)
|
||||
|
||||
*Current version: 1.7.5*
|
||||
*Current version: 1.7.8*
|
||||
|
||||
**PrivateBin** is a minimalist, open source online
|
||||
[pastebin](https://en.wikipedia.org/wiki/Pastebin)
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 1.7.5 | :heavy_check_mark: |
|
||||
| < 1.7.5 | :x: |
|
||||
| 1.7.8 | :heavy_check_mark: |
|
||||
| < 1.7.8 | :x: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
@@ -14,5 +14,8 @@ 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
|
||||
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
|
||||
publication is low or you would request input from other PrivateBin users.
|
||||
|
||||
@@ -72,6 +72,35 @@ class Administration
|
||||
exit("paste $pasteId successfully deleted" . PHP_EOL);
|
||||
}
|
||||
|
||||
/**
|
||||
* lists all stored paste IDs
|
||||
*
|
||||
* @access private
|
||||
*/
|
||||
private function _list_ids()
|
||||
{
|
||||
$ids = $this->_store->getAllPastes();
|
||||
foreach ($ids as $pasteid) {
|
||||
echo $pasteid, PHP_EOL;
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* deletes all stored pastes (regardless of expiration)
|
||||
*
|
||||
* @access private
|
||||
*/
|
||||
private function _delete_all()
|
||||
{
|
||||
$ids = $this->_store->getAllPastes();
|
||||
foreach ($ids as $pasteid) {
|
||||
echo "Deleting paste ID: $pasteid" . PHP_EOL;
|
||||
$this->_store->delete($pasteid);
|
||||
}
|
||||
exit("All pastes successfully deleted" . PHP_EOL);
|
||||
}
|
||||
|
||||
/**
|
||||
* removes empty directories, if current storage model uses Filesystem
|
||||
*
|
||||
@@ -124,13 +153,15 @@ class Administration
|
||||
{
|
||||
echo <<<'EOT'
|
||||
Usage:
|
||||
administration [--delete <paste id> | --empty-dirs | --help | --purge | --statistics]
|
||||
administration [--delete <paste id> | --delete-all | --empty-dirs | --help | --list-ids | --purge | --statistics]
|
||||
|
||||
Options:
|
||||
-d, --delete deletes the requested paste ID
|
||||
--delete-all deletes all paste IDs
|
||||
-e, --empty-dirs removes empty directories (only if Filesystem storage is
|
||||
configured)
|
||||
-h, --help displays this help message
|
||||
-l, --list-ids lists all paste IDs
|
||||
-p, --purge purge all expired pastes
|
||||
-s, --statistics reads all stored pastes and comments and reports statistics
|
||||
EOT, PHP_EOL;
|
||||
@@ -177,7 +208,8 @@ EOT, PHP_EOL;
|
||||
self::_help(2);
|
||||
}
|
||||
|
||||
$this->_opts = getopt('hd:eps', array('help', 'delete:', 'empty-dirs', 'purge', 'statistics'));
|
||||
$this->_opts = getopt('hd:epsl', array('help', 'delete:', 'empty-dirs', 'purge', 'statistics', 'list-ids', 'delete-all'));
|
||||
|
||||
if (!$this->_opts) {
|
||||
self::_error_echo('unsupported arguments given');
|
||||
echo PHP_EOL;
|
||||
@@ -308,6 +340,12 @@ EOT, PHP_EOL;
|
||||
$class = 'PrivateBin\\Data\\' . $this->_conf->getKey('class', 'model');
|
||||
$this->_store = new $class($this->_conf->getSection('model_options'));
|
||||
|
||||
if ($this->_option('l', 'list-ids') !== null) {
|
||||
$this->_list_ids();
|
||||
}
|
||||
if ($this->_option(null, 'delete-all') !== null) {
|
||||
$this->_delete_all();
|
||||
}
|
||||
if (($pasteId = $this->_option('d', 'delete')) !== null) {
|
||||
$this->_delete($pasteId);
|
||||
}
|
||||
|
||||
@@ -42,13 +42,28 @@ defaultformatter = "plaintext"
|
||||
; size limit per paste or comment in bytes, defaults to 10 Mebibytes
|
||||
sizelimit = 10485760
|
||||
|
||||
; template to include, default is "bootstrap" (tpl/bootstrap.php), also
|
||||
; by default PrivateBin use "bootstrap" template (tpl/bootstrap.php).
|
||||
; Optionally you can enable the template selection menu, which uses
|
||||
; a session cookie to store the choice until the browser is closed.
|
||||
templateselection = false
|
||||
|
||||
; List of available for selection templates when "templateselection" option is enabled
|
||||
availabletemplates[] = "bootstrap"
|
||||
availabletemplates[] = "bootstrap-page"
|
||||
availabletemplates[] = "bootstrap-dark"
|
||||
availabletemplates[] = "bootstrap-dark-page"
|
||||
availabletemplates[] = "bootstrap-compact"
|
||||
availabletemplates[] = "bootstrap-compact-page"
|
||||
availabletemplates[] = "bootstrap5"
|
||||
availabletemplates[] = "page"
|
||||
|
||||
; set the template your installs defaults to, defaults to "bootstrap" (tpl/bootstrap.php), also
|
||||
; available are "page" (tpl/page.php), the classic ZeroBin style and several
|
||||
; bootstrap variants: "bootstrap-dark", "bootstrap-compact", "bootstrap-page",
|
||||
; which can be combined with "-dark" and "-compact" for "bootstrap-dark-page"
|
||||
; and finally "bootstrap-compact-page" - previews at:
|
||||
; which can be combined with "-dark" and "-compact" for "bootstrap-dark-page",
|
||||
; "bootstrap-compact-page" and finally "bootstrap5" (tpl/bootstrap5.php) - previews at:
|
||||
; https://privatebin.info/screenshots.html
|
||||
template = "bootstrap"
|
||||
; template = "bootstrap"
|
||||
|
||||
; (optional) info text to display
|
||||
; use single, instead of double quotes for HTML attributes
|
||||
@@ -101,11 +116,17 @@ languageselection = false
|
||||
; they are embedded in pastes. If you wish to allow that, you can adjust the
|
||||
; policy here. See https://github.com/PrivateBin/PrivateBin/wiki/FAQ#why-does-not-it-load-embedded-images
|
||||
; for details.
|
||||
; - The 'unsafe-eval' is used in two cases; to check if the browser supports
|
||||
; async functions and display an error if not and for Chrome to enable
|
||||
; webassembly support (used for zlib compression). You can remove it if Chrome
|
||||
; doesn't need to be supported and old browsers don't need to be warned.
|
||||
; cspheader = "default-src 'none'; base-uri 'self'; form-action 'none'; manifest-src 'self'; connect-src * blob:; script-src 'self' 'unsafe-eval'; style-src 'self'; font-src 'self'; frame-ancestors 'none'; img-src 'self' data: blob:; media-src blob:; object-src blob:; sandbox allow-same-origin allow-scripts allow-forms allow-popups allow-modals allow-downloads"
|
||||
; - The 'wasm-unsafe-eval' is used to enable webassembly support (used for zlib
|
||||
; compression). You can remove it if compression doesn't need to be supported.
|
||||
; - The 'unsafe-inline' style-src is used by Chrome when displaying PDF previews
|
||||
; and can be omitted if attachment upload is disabled (which is the default).
|
||||
; See https://issues.chromium.org/issues/343754409
|
||||
; - To allow displaying PDF previews in Firefox or Chrome, sandboxing must also
|
||||
; get turned off. The following CSP allows PDF previews:
|
||||
; cspheader = "default-src 'none'; base-uri 'self'; form-action 'none'; manifest-src 'self'; connect-src * blob:; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; font-src 'self'; frame-ancestors 'none'; frame-src blob:; img-src 'self' data: blob:; media-src blob:; object-src blob:"
|
||||
;
|
||||
; The recommended and default used CSP is:
|
||||
; cspheader = "default-src 'none'; base-uri 'self'; form-action 'none'; manifest-src 'self'; connect-src * blob:; script-src 'self' 'wasm-unsafe-eval'; style-src 'self'; font-src 'self'; frame-ancestors 'none'; frame-src blob:; img-src 'self' data: blob:; media-src blob:; object-src blob:; sandbox allow-same-origin allow-scripts allow-forms allow-popups allow-modals allow-downloads"
|
||||
|
||||
; stay compatible with PrivateBin Alpha 0.19, less secure
|
||||
; if enabled will use base64.js version 1.7 instead of 2.1.9 and sha1 instead of
|
||||
|
||||
@@ -24,7 +24,7 @@ jobs:
|
||||
steps:
|
||||
# Checkout the repository to the GitHub Actions runner
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis
|
||||
- name: Run Codacy Analysis CLI
|
||||
|
||||
@@ -26,12 +26,13 @@
|
||||
"require" : {
|
||||
"php": "^7.3 || ^8.0",
|
||||
"jdenticon/jdenticon": "1.0.2",
|
||||
"mlocati/ip-lib": "1.18.1",
|
||||
"mlocati/ip-lib": "1.20.0",
|
||||
"symfony/polyfill-php80": "1.31.0",
|
||||
"yzalis/identicon": "2.0.0"
|
||||
},
|
||||
"suggest" : {
|
||||
"google/cloud-storage" : "1.43.0",
|
||||
"aws/aws-sdk-php" : "3.325.0"
|
||||
"google/cloud-storage" : "1.45.0",
|
||||
"aws/aws-sdk-php" : "3.336.2"
|
||||
},
|
||||
"require-dev" : {
|
||||
"phpunit/phpunit" : "^9"
|
||||
|
||||
120
composer.lock
generated
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "bb78267a7d61d23706111a91bc90d515",
|
||||
"content-hash": "6c7e6dea19e8bfd5641b220cb68c4b65",
|
||||
"packages": [
|
||||
{
|
||||
"name": "jdenticon/jdenticon",
|
||||
@@ -57,16 +57,16 @@
|
||||
},
|
||||
{
|
||||
"name": "mlocati/ip-lib",
|
||||
"version": "1.18.1",
|
||||
"version": "1.20.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/mlocati/ip-lib.git",
|
||||
"reference": "08bb43b4949069c543ebdf099a6b2c322d0172ab"
|
||||
"reference": "fd45fc3bf08ed6c7e665e2e70562082ac954afd4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/mlocati/ip-lib/zipball/08bb43b4949069c543ebdf099a6b2c322d0172ab",
|
||||
"reference": "08bb43b4949069c543ebdf099a6b2c322d0172ab",
|
||||
"url": "https://api.github.com/repos/mlocati/ip-lib/zipball/fd45fc3bf08ed6c7e665e2e70562082ac954afd4",
|
||||
"reference": "fd45fc3bf08ed6c7e665e2e70562082ac954afd4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -112,7 +112,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/mlocati/ip-lib/issues",
|
||||
"source": "https://github.com/mlocati/ip-lib/tree/1.18.1"
|
||||
"source": "https://github.com/mlocati/ip-lib/tree/1.20.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -124,7 +124,87 @@
|
||||
"type": "other"
|
||||
}
|
||||
],
|
||||
"time": "2024-10-29T15:44:19+00:00"
|
||||
"time": "2025-02-04T17:30:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php80",
|
||||
"version": "v1.31.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
|
||||
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.2"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"thanks": {
|
||||
"url": "https://github.com/symfony/polyfill",
|
||||
"name": "symfony/polyfill"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Symfony\\Polyfill\\Php80\\": ""
|
||||
},
|
||||
"classmap": [
|
||||
"Resources/stubs"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Ion Bazan",
|
||||
"email": "ion.bazan@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"compatibility",
|
||||
"polyfill",
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-09-09T11:45:10+00:00"
|
||||
},
|
||||
{
|
||||
"name": "yzalis/identicon",
|
||||
@@ -257,16 +337,16 @@
|
||||
},
|
||||
{
|
||||
"name": "myclabs/deep-copy",
|
||||
"version": "1.12.0",
|
||||
"version": "1.13.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/myclabs/DeepCopy.git",
|
||||
"reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c"
|
||||
"reference": "024473a478be9df5fdaca2c793f2232fe788e414"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
|
||||
"reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
|
||||
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414",
|
||||
"reference": "024473a478be9df5fdaca2c793f2232fe788e414",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -305,7 +385,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/myclabs/DeepCopy/issues",
|
||||
"source": "https://github.com/myclabs/DeepCopy/tree/1.12.0"
|
||||
"source": "https://github.com/myclabs/DeepCopy/tree/1.13.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -313,7 +393,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-06-12T14:39:25+00:00"
|
||||
"time": "2025-02-12T12:17:51+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nikic/php-parser",
|
||||
@@ -810,16 +890,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpunit/phpunit",
|
||||
"version": "9.6.21",
|
||||
"version": "9.6.22",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||
"reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa"
|
||||
"reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa",
|
||||
"reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f80235cb4d3caa59ae09be3adf1ded27521d1a9c",
|
||||
"reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -830,7 +910,7 @@
|
||||
"ext-mbstring": "*",
|
||||
"ext-xml": "*",
|
||||
"ext-xmlwriter": "*",
|
||||
"myclabs/deep-copy": "^1.12.0",
|
||||
"myclabs/deep-copy": "^1.12.1",
|
||||
"phar-io/manifest": "^2.0.4",
|
||||
"phar-io/version": "^3.2.1",
|
||||
"php": ">=7.3",
|
||||
@@ -893,7 +973,7 @@
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.21"
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.22"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -909,7 +989,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-09-19T10:50:18+00:00"
|
||||
"time": "2024-12-05T13:48:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/cli-parser",
|
||||
|
||||
@@ -69,47 +69,8 @@ body.loading {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
#qrcodemodalClose {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#qrcode-display {
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
#pastelink {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
#pastelink > a {
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
#message {
|
||||
height: 70dvh;
|
||||
}
|
||||
|
||||
@media ((max-width: 450px) and (max-height: 950px)) {
|
||||
#message {
|
||||
height: 55dvh;
|
||||
}
|
||||
}
|
||||
|
||||
#message, .replymessage {
|
||||
font-family: monospace;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
#nickname {
|
||||
margin: 5px 0;
|
||||
}
|
||||
|
||||
.comment {
|
||||
border-left: 1px solid #ccc;
|
||||
padding: 5px 0 5px 10px;
|
||||
transition: background-color 0.75s ease-out;
|
||||
}
|
||||
|
||||
footer h4 {
|
||||
@@ -177,3 +138,31 @@ html[dir="rtl"] #language {
|
||||
html[dir="rtl"] #deletelink, html[dir="rtl"] #qrcodemodalClose {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#prettyprint {
|
||||
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 {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
@@ -14,48 +14,23 @@
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#qrcodemodalClose {
|
||||
float: right;
|
||||
.opacity-05-1-hover {
|
||||
opacity: 0.5;
|
||||
transition: all 0.15s ease;
|
||||
}
|
||||
|
||||
#qrcode-display {
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
#pastelink {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
#pastelink > a {
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
#message {
|
||||
height: 70dvh;
|
||||
}
|
||||
|
||||
@media ((max-width: 450px) and (max-height: 950px)) {
|
||||
#message {
|
||||
height: 55dvh;
|
||||
}
|
||||
}
|
||||
|
||||
#message, .replymessage {
|
||||
font-family: monospace;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
.comment {
|
||||
border-left: 1px solid #ccc;
|
||||
transition: background-color 0.75s ease-out;
|
||||
.opacity-05-1-hover:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
--bs-dropdown-min-width: 23rem;
|
||||
}
|
||||
|
||||
pre {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
[data-bs-theme=light] pre, [data-bs-theme=light] .card {
|
||||
background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1));
|
||||
}
|
||||
@@ -77,3 +52,39 @@ li.L0, li.L1, li.L2, li.L3, li.L4, li.L5, li.L6, li.L7, li.L8, li.L9 {
|
||||
html[dir="rtl"] #deletelink, html[dir="rtl"] #qrcodemodalClose {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#prettyprint {
|
||||
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 {
|
||||
transform: translateY(1.5px);
|
||||
}
|
||||
|
||||
@@ -8,6 +8,12 @@
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
*/
|
||||
|
||||
#attachmentPreview {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
#attachmentPreview img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
@@ -38,27 +44,64 @@
|
||||
outline-offset: -50px;
|
||||
}
|
||||
|
||||
.dragAndDropFile {
|
||||
color: #777;
|
||||
font-size: 1em;
|
||||
display: inline;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
#filewrap {
|
||||
transition: background-color 0.75s ease-out;
|
||||
}
|
||||
|
||||
.highlight {
|
||||
background-color: #fd8;
|
||||
transition: background-color 0.2s ease-in;
|
||||
}
|
||||
|
||||
#deletelink {
|
||||
float: right;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
#qrcodemodalClose {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#qrcode-display {
|
||||
width: 200px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
#pastelink {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
#pastelink > a, #plaintext > a {
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
#message {
|
||||
height: 70dvh;
|
||||
}
|
||||
|
||||
@media ((max-width: 450px) and (max-height: 950px)) {
|
||||
#message {
|
||||
height: 55dvh;
|
||||
}
|
||||
}
|
||||
|
||||
#message, .replymessage {
|
||||
font-family: monospace;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
.comment {
|
||||
border-left: 1px solid #ccc;
|
||||
transition: background-color 0.75s ease-out;
|
||||
}
|
||||
|
||||
.commentdata {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.dragAndDropFile {
|
||||
color: #777;
|
||||
font-size: 1em;
|
||||
display: inline;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.highlight {
|
||||
background-color: #fd8;
|
||||
transition: background-color 0.2s ease-in;
|
||||
}
|
||||
|
||||
@@ -86,6 +86,7 @@ h3.title {
|
||||
#aboutbox a { color: #94a3b4; }
|
||||
|
||||
#message, #cleartext, #prettymessage, #attachment, .replymessage {
|
||||
position: relative;
|
||||
clear: both;
|
||||
color: #000;
|
||||
background-color: #fff;
|
||||
@@ -125,7 +126,7 @@ h3.title {
|
||||
|
||||
#pasteresult button { margin-left: 11px; }
|
||||
|
||||
#toolbar, #status { margin-bottom: 5px; }
|
||||
#message, #plaintext, #prettymessage, #toolbar, #status { margin-bottom: 5px; }
|
||||
|
||||
#copyhint { color: #666; font-size: 0.85em }
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@ for more information.
|
||||
### Minimal Requirements
|
||||
|
||||
- PHP version 7.3 or above
|
||||
- ctype extension
|
||||
- GD extension (when using identicon or vizhash icons, jdenticon works without it)
|
||||
- zlib extension
|
||||
- some disk space or a database supported by [PDO](https://php.net/manual/book.pdo.php)
|
||||
@@ -201,7 +200,7 @@ CREATE INDEX parent ON prefix_comment(pasteid);
|
||||
CREATE TABLE prefix_config (
|
||||
id CHAR(16) NOT NULL, value TEXT, PRIMARY KEY (id)
|
||||
);
|
||||
INSERT INTO prefix_config VALUES('VERSION', '1.7.5');
|
||||
INSERT INTO prefix_config VALUES('VERSION', '1.7.8');
|
||||
```
|
||||
|
||||
In **PostgreSQL**, the `data`, `attachment`, `nickname` and `vizhash` columns
|
||||
|
||||
37
i18n/ar.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "خطأ في الخادم أو لا يستجيب",
|
||||
"Could not post comment: %s": "لا يمكن نشر تعليق: %s",
|
||||
"Sending paste…": "يُرسل لصق…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "لصقك هو <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(اضغط على [Ctrl] + [c] للنسخ)</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "حذف البيانات",
|
||||
"Could not create paste: %s": "تعذر إنشاء اللصق: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "لا يمكن فك تشفير اللصق: مفتاح فك التشفير مفقود في URL (هل استخدمت معيد توجيه أو أداة تقصير لعناوين URL تزيل جزءًا من عنوان URL؟)",
|
||||
@@ -164,17 +164,25 @@
|
||||
"EiB": "إكسابايت",
|
||||
"ZiB": "زيتابايت",
|
||||
"YiB": "يوتابايت",
|
||||
"kB": "كيلوبايت",
|
||||
"MB": "ميجابايت",
|
||||
"GB": "جيجابايت",
|
||||
"TB": "تيرابايت",
|
||||
"PB": "بيتابايت",
|
||||
"EB": "إكسابايت",
|
||||
"ZB": "زيتابايت",
|
||||
"YB": "يوتابايت",
|
||||
"Format": "التنسيق",
|
||||
"Plain Text": "نص عادي",
|
||||
"Source Code": "كود مصدر",
|
||||
"Markdown": "ماركداون",
|
||||
"Download attachment": "تنزيل المرفقات",
|
||||
"Download attachment": "نزّل المرفق",
|
||||
"Cloned: '%s'": "مستنسخ: '%s'",
|
||||
"The cloned file '%s' was attached to this paste.": "تم إرفاق المِلَفّ المستنسخ '%s' بهذا اللصق.",
|
||||
"Attach a file": "إرفاق مِلَفّ",
|
||||
"The cloned file '%s' was attached to this paste.": "تم إرفاق الملف المستنسخ '%s' بهذا اللصق.",
|
||||
"Attach a file": "أرفق ملف",
|
||||
"alternatively drag & drop a file or paste an image from the clipboard": "بدلاً من ذلك، اسحب ملفًا وأسقطه أو الصق صورة من الحافظة",
|
||||
"File too large, to display a preview. Please download the attachment.": "المِلَفّ كبير جدًا، بحيث لا يمكن عرض معاينة. الرجاء تنزيل المرفق.",
|
||||
"Remove attachment": "إزالة المرفق",
|
||||
"File too large, to display a preview. Please download the attachment.": "الملف كبير جدًا، بحيث لا يمكن عرض معاينة. الرجاء تنزيل المرفق.",
|
||||
"Remove attachment": "أزِل المرفق",
|
||||
"Your browser does not support uploading encrypted files. Please use a newer browser.": "متصفحك لا يدعم رفع الملفات المشفرة. الرجاء استخدام متصفح أحدث.",
|
||||
"Invalid attachment.": "مرفق غير صحيح.",
|
||||
"Options": "الخيارات",
|
||||
@@ -215,10 +223,17 @@
|
||||
"Trying to shorten a URL that isn't pointing at our instance.": "محاولة تقصير عنوان URL لا يشير إلى خادمنا.",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "خطأ في الاتصال بـ YOURLS. ربما تكون هناك مشكلة في التضبيط، مثل \"apiurl\" أو \"التوقيع\" الخاطئ أو المفقود.",
|
||||
"Error parsing YOURLS response.": "خطأ في تحليل استجابة YOURLS.",
|
||||
"This secret message can only be displayed once. Would you like to see it now?": "لا يمكن عرض اللصق احرقه بعد قراءته إلا مرة واحدة عند تحميله. هل تريد فتحه الآن؟",
|
||||
"Yes, see it": "نعم، حمله",
|
||||
"This secret message can only be displayed once. Would you like to see it now?": "يمكن عرض هذه الرسالة السرية مرة واحدة فقط. هل ترغب في رؤيتها الآن؟",
|
||||
"Yes, see it": "نعم، دعني اراها",
|
||||
"Dark Mode": "الوضع الداكن",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Error compressing paste, due to missing WebAssembly support.": "خطأ في ضغط اللصق، بسبب فقدان دعم WebAssembly.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "خطأ في فك ضغط اللصق، متصفحك لا يدعم WebAssembly. الرجاء استخدام متصفح آخر لعرض هذه اللصقة.",
|
||||
"Start over": "ابدأ من جديد",
|
||||
"Paste copied to clipboard": "نُسخ اللصق إلى الحافظة",
|
||||
"To copy paste 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>",
|
||||
"Copy link": "نسخ الرابط",
|
||||
"Link copied to clipboard": "نُسخ الرابط إلى الحافظة",
|
||||
"Paste 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> للتبديل)",
|
||||
"Theme": "السمة"
|
||||
}
|
||||
|
||||
19
i18n/bg.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "Грешка в сървъра или не отговаря",
|
||||
"Could not post comment: %s": "Публикуването на коментара Ви беше неуспешно: %s",
|
||||
"Sending paste…": "Изпращане на информацията Ви…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Вашата връзка е <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Натиснете [Ctrl]+[c] за да копирате)</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "Изтриване на информацията",
|
||||
"Could not create paste: %s": "Създаването на връзката ви беше неуспешно: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Дешифроването на информацията беше неуспешно: Ключа за декриптиране липсва във връзката (Да не сте използвали услуга за пренасочване или скъсяване на връзката, което би изрязало части от нея?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Формат",
|
||||
"Plain Text": "Чист текст",
|
||||
"Source Code": "Изходен код",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Dark Mode",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/ca.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "server error or not responding",
|
||||
"Could not post comment: %s": "No s'ha pogut publicar el comentari: %s",
|
||||
"Sending paste…": "Enviant paste…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>",
|
||||
"Delete data": "Esborrar les dades",
|
||||
"Could not create paste: %s": "Could not create paste: %s",
|
||||
"Cannot decrypt paste: 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?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Format",
|
||||
"Plain Text": "Text sense format",
|
||||
"Source Code": "Codi font",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Dark Mode",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error de compressió de la nota, no hi ha suport de WebAssembly.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
43
i18n/co.json
@@ -151,32 +151,40 @@
|
||||
"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",
|
||||
"Sending paste…": "Inviu di l’appiccicu…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "U vostru appiccicu si trova à l’indirizzu<a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Appughjate [Ctrl]+[c] per cupià u liame)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "U vostru appiccicu 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>",
|
||||
"Delete data": "Squassà i dati",
|
||||
"Could not create paste: %s": "Ùn si pò micca creà l’appiccicu : %s",
|
||||
"Cannot decrypt paste: 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à l’appiccicu : 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 ?",
|
||||
"B": "o",
|
||||
"KiB": "Ko",
|
||||
"MiB": "Mo",
|
||||
"GiB": "Go",
|
||||
"TiB": "To",
|
||||
"PiB": "Po",
|
||||
"EiB": "Eo",
|
||||
"ZiB": "Zo",
|
||||
"YiB": "Yo",
|
||||
"KiB": "Kio",
|
||||
"MiB": "Mio",
|
||||
"GiB": "Gio",
|
||||
"TiB": "Tio",
|
||||
"PiB": "Pio",
|
||||
"EiB": "Eio",
|
||||
"ZiB": "Zio",
|
||||
"YiB": "Yio",
|
||||
"kB": "Ko",
|
||||
"MB": "Mo",
|
||||
"GB": "Go",
|
||||
"TB": "To",
|
||||
"PB": "Po",
|
||||
"EB": "Eo",
|
||||
"ZB": "Zo",
|
||||
"YB": "Yo",
|
||||
"Format": "Furmatu",
|
||||
"Plain Text": "Testu in chjaru",
|
||||
"Source Code": "Codice di fonte",
|
||||
"Markdown": "Markdown",
|
||||
"Download attachment": "Scaricà a pezza aghjunta",
|
||||
"Download attachment": "Scaricà a pezza ghjunta",
|
||||
"Cloned: '%s'": "Duppiatu : « %s »",
|
||||
"The cloned file '%s' was attached to this paste.": "U schedariu duppiatu « %s » hè statu aghjuntu à st’appiccicu.",
|
||||
"Attach a file": "Aghjunghje un schedariu",
|
||||
"alternatively drag & drop a file or paste an image from the clipboard": "in alternanza, sguillà è depone un schedariu o incullà una fiura da u preme’papei",
|
||||
"File too large, to display a preview. Please download the attachment.": "Schedariu troppu maiò per affissà una fighjulata. Scaricate a pezza aghjunta.",
|
||||
"Remove attachment": "Caccià a pezza aghjunta",
|
||||
"File too large, to display a preview. Please download the attachment.": "Schedariu troppu maiò per affissà una fighjulata. Scaricate a pezza ghjunta.",
|
||||
"Remove attachment": "Caccià a pezza ghjunta",
|
||||
"Your browser does not support uploading encrypted files. Please use a newer browser.": "U vostru navigatore ùn accetta micca l’inviu di i schedarii cifrati. Impiegate un navigatore più recente.",
|
||||
"Invalid attachment.": "A pezza aghjunta hè inaccettevule.",
|
||||
"Invalid attachment.": "A pezza ghjunta hè inaccettevule.",
|
||||
"Options": "Ozzioni",
|
||||
"Shorten URL": "Ammuzzà l’indirizzu",
|
||||
"Editor": "Editore",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Modu scuru",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Sbagliu durante a cumpressione di l’appiccicu, perchè WebAssembly ùn hè micca accettatu.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Sbagliu durante a scumpressione di l’appiccicu, perchè u vostru navigatore ùn accetteghja micca WebAssembly. Ci vole à impiegà un altru navigatore per affissà st’appiccicu.",
|
||||
"Start over": "Principià torna"
|
||||
"Start over": "Principià torna",
|
||||
"Paste copied to clipboard": "L’appiccicu hè statu cupiatu in u preme’papei",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Per cupià l’appiccicu, appughjate nant’à u buttone di copia o impiegate l’accurtatoghju di u preme’papei <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Cupià u liame",
|
||||
"Link copied to clipboard": "U liame hè statu cupiatu in u preme’papei",
|
||||
"Paste text": "Testu di l’appiccicu",
|
||||
"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à)",
|
||||
"Theme": "Tema"
|
||||
}
|
||||
|
||||
19
i18n/cs.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "Chyba na serveru nebo server neodpovídá",
|
||||
"Could not post comment: %s": "Nelze odeslat komentář: %s",
|
||||
"Sending paste…": "Odesílání příspěvku…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Váš příspěvek je <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Stiskněte [Ctrl]+[c] pro zkopírování)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <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>",
|
||||
"Delete data": "Odstranit data",
|
||||
"Could not create paste: %s": "Nepodařilo se vytvořit příspěvek: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nepodařilo se dešifrovat příspěvek: V adrese chybí dešifrovací klíč (Nepoužili jste přesměrovač nebo zkracovač URL, který maže části URL?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Formát",
|
||||
"Plain Text": "Prostý text",
|
||||
"Source Code": "Zdrojový kód",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Tmavý režim",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Chyba při komprimování příspěvku kvůli chybějící podpoře WebAssembly.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Chyba při dekomprimování příspěvku, váš prohlížeč nepodporuje WebAssembly. Pro zobrazení tohoto příspěvku prosím použijte jiný prohlížeč.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/de.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "Fehler auf dem Server oder keine Antwort vom Server",
|
||||
"Could not post comment: %s": "Konnte Kommentar nicht senden: %s",
|
||||
"Sending paste…": "Sende Paste…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Dein Text ist unter <a id=\"pasteurl\" href=\"%s\">%s</a> zu finden <span id=\"copyhint\">(Drücke [Strg]+[c] um den Link zu kopieren)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Dein Text 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",
|
||||
"Could not create paste: %s": "Text konnte nicht erstellt werden: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Konnte Paste 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?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Format",
|
||||
"Plain Text": "Nur Text",
|
||||
"Source Code": "Quellcode",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Nachtmodus",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Fehler beim Komprimieren des Textes, da WebAssembly-Unterstützung fehlt.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Fehler beim Dekomprimieren des Textes. Dein Browser unterstützt WebAssembly nicht. Bitte verwende einen anderen Browser, um diesen Text anzuzeigen.",
|
||||
"Start over": "Neuen Text erstellen"
|
||||
"Start over": "Neuen Text erstellen",
|
||||
"Paste copied to clipboard": "Text wurde in Zwischenablage kopiert.",
|
||||
"To copy paste 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>",
|
||||
"Copy link": "Verknüpfung kopieren",
|
||||
"Link copied to clipboard": "Verknüpfung wurde in die Zwischenablage kopiert.",
|
||||
"Paste text": "Text",
|
||||
"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>)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/el.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "Πρόβλημα του διακομιστή ή δεν υπάρχει απάντηση",
|
||||
"Could not post comment: %s": "Δεν ήταν δυνατή η δημοσίευση του σχολίου: %s",
|
||||
"Sending paste…": "Η επικόλληση αποστέλλεται…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Η επικόλλησή σας είναι <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Πληκτρολογήστε [Ctrl]+[c] για αντιγραφή)</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "Διαγραφή δεδομένων",
|
||||
"Could not create paste: %s": "Δεν ήταν δυνατή η δημιουργία επικόλλησης: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Δεν ήταν δυνατή η αποκρυπτογράφηση της επικόλλησης: Το κλειδί αποκρυπτογράφησης λείπει από τον σύνδεσμο (Μήπως χρησιμοποιήσατε ανακατεύθυνση συνδέσμου ή υπηρεσία συντόμευσης συνδέσμου;)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Μορφοποίηση",
|
||||
"Plain Text": "Απλό κείμενο",
|
||||
"Source Code": "Πηγαίος Κώδικας",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Σκοτεινό Θέμα",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Σφάλμα συμπίεσης επικόλλησης, λόγω έλλειψης υποστήριξης WebAssembly.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Σφάλμα αποσυμπίεσης της επικόλλησης, ο περιηγητής σας δεν υποστηρίζει WebAssembly. Παρακαλούμε χρησιμοποιήστε έναν άλλο περιηγητή για να δείτε αυτή την επικόλληση.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/en.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "server error or not responding",
|
||||
"Could not post comment: %s": "Could not post comment: %s",
|
||||
"Sending paste…": "Sending paste…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>",
|
||||
"Delete data": "Delete data",
|
||||
"Could not create paste: %s": "Could not create paste: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Format",
|
||||
"Plain Text": "Plain Text",
|
||||
"Source Code": "Source Code",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Dark Mode",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/es.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "Error del servidor o el servidor no responde",
|
||||
"Could not post comment: %s": "No fue posible publicar comentario: %s",
|
||||
"Sending paste…": "Enviando \"paste\"…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Su texto está en <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Presione [Ctrl]+[c] para copiar)</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "Eliminar datos",
|
||||
"Could not create paste: %s": "No fue posible crear el archivo: %s",
|
||||
"Cannot decrypt paste: 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?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Formato",
|
||||
"Plain Text": "Texto sin formato",
|
||||
"Source Code": "Código fuente",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Modo nocturno",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
23
i18n/et.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "serveri viga või ei vasta",
|
||||
"Could not post comment: %s": "Ei suutnud kommentaari postitada: %s",
|
||||
"Sending paste…": "Kleepe saatmine…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Sinu kleebe on <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Kopeerimiseks vajuta [Ctrl]+[c])</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "Kustuta andmed",
|
||||
"Could not create paste: %s": "Ei suutnud kleebet luua: %s",
|
||||
"Cannot decrypt paste: 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?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Formaat",
|
||||
"Plain Text": "Lihttekst",
|
||||
"Source Code": "Lähtekood",
|
||||
@@ -215,10 +223,17 @@
|
||||
"Trying to shorten a URL that isn't pointing at our instance.": "Püüame lühendada URL-i, mis ei viita meie instantsile.",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Viga YOURLS-i kutsumisel. Tõenäoliselt konfiguratsiooniprobleem, näiteks vale või puuduv \"apiurl\" või \"signature\".",
|
||||
"Error parsing YOURLS response.": "Viga YOURLS vastuse parsimisel.",
|
||||
"This secret message can only be displayed once. Would you like to see it now?": "This secret message can only be displayed once. Would you like to see it now?",
|
||||
"Yes, see it": "Yes, see it",
|
||||
"This secret message can only be displayed once. Would you like to see it now?": "Seda turvalist sõnumit saab kuvada vaid ühe korra. \nKas soovid seda näha nüüd?",
|
||||
"Yes, see it": "Jah, vaata seda",
|
||||
"Dark Mode": "Tume režiim",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Alusta uuesti",
|
||||
"Paste copied to clipboard": "Kleebe kopeeriti lõikelauale",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Kopeeri link",
|
||||
"Link copied to clipboard": "Link kopeeriti lõikelauale",
|
||||
"Paste 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)",
|
||||
"Theme": "Teema"
|
||||
}
|
||||
|
||||
23
i18n/fi.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "palvelinvirhe tai palvelin ei vastaa",
|
||||
"Could not post comment: %s": "Kommenttia ei voitu lähettää: %s",
|
||||
"Sending paste…": "Lähetetään pastea…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Pastesi on <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Paina [Ctrl]+[c] kopioidaksesi)</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "Poista data",
|
||||
"Could not create paste: %s": "Pastea ei voitu luoda: %s",
|
||||
"Cannot decrypt paste: 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ä?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Formaatti",
|
||||
"Plain Text": "Perusteksti",
|
||||
"Source Code": "Lähdekoodi",
|
||||
@@ -218,7 +226,14 @@
|
||||
"This secret message can only be displayed once. Would you like to see it now?": "Tämä salainen viesti voidaan näyttää vain kerran. Haluatko nähdä sen nyt?",
|
||||
"Yes, see it": "Kyllä, näet sen",
|
||||
"Dark Mode": "Tumma tila",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Virhe pakattaessa pastea, koska WebAssembly-tuki puuttuu.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Virhe pasten purkamisessa, selaimesi ei tue WebAssemblyä. Ole hyvä ja käytä toista selainta nähdäksesi tämä paste.",
|
||||
"Start over": "Aloita alusta",
|
||||
"Paste copied to clipboard": "Paste kopioitu leikepöydälle",
|
||||
"To copy paste 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>",
|
||||
"Copy link": "Kopioi linkki",
|
||||
"Link copied to clipboard": "Linkki kopioitu leikepöydälle",
|
||||
"Paste 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)",
|
||||
"Theme": "Teema"
|
||||
}
|
||||
|
||||
19
i18n/fr.json
@@ -151,7 +151,7 @@
|
||||
"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",
|
||||
"Sending paste…": "Envoi du paste…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Votre paste est disponible à l'adresse <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Appuyez sur [Ctrl]+[c] pour copier)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Votre paste 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>",
|
||||
"Delete data": "Supprimer les données du paste",
|
||||
"Could not create paste: %s": "Impossible de créer le paste : %s",
|
||||
"Cannot decrypt paste: 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 paste : 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 ?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "Eio",
|
||||
"ZiB": "Zio",
|
||||
"YiB": "Yio",
|
||||
"kB": "ko",
|
||||
"MB": "Mo",
|
||||
"GB": "Go",
|
||||
"TB": "To",
|
||||
"PB": "Po",
|
||||
"EB": "Eo",
|
||||
"ZB": "Zo",
|
||||
"YB": "Yo",
|
||||
"Format": "Format",
|
||||
"Plain Text": "Texte brut",
|
||||
"Source Code": "Code source",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Mode Sombre",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Erreur lors de la compression du paste, en raison du support de WebAssembly manquant.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Erreur lors de la décompression du paste, votre navigateur ne supporte pas WebAssembly. Veuillez utiliser un autre navigateur pour voir ce paste.",
|
||||
"Start over": "Recommencer"
|
||||
"Start over": "Recommencer",
|
||||
"Paste copied to clipboard": "Paste copié dans le presse-papier",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Pour copier-coller appuyer sur le bouton To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copier le lien",
|
||||
"Link copied to clipboard": "Lien copié dans le presse-papier",
|
||||
"Paste text": "Texte du paste",
|
||||
"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)",
|
||||
"Theme": "Thème"
|
||||
}
|
||||
|
||||
133
i18n/he.json
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"PrivateBin": "PrivateBin",
|
||||
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.",
|
||||
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "More information on the <a href=\"https://privatebin.info/\">project page</a>.",
|
||||
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s הוא שירות pastebin מקוון, מינימליסטי וקוד פתוח, שבו לשרת אין כל ידע על המידע שהודבק. הנתונים מוצפנים ומפוענחים %sבדפדפן%s באמצעות הצפנת AES ב-256 סיביות.",
|
||||
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "מידע נוסף בדף <a href=\"https://privatebin.info/\">הפרויקט</a>.",
|
||||
"Because ignorance is bliss": "כיוון שבורות היא ברכה",
|
||||
"Paste does not exist, has expired or has been deleted.": "ההדבקה לא קיימת, פגה או נמחקה.",
|
||||
"%s requires php %s or above to work. Sorry.": "%s דורש PHP %s כדי לפעול.",
|
||||
@@ -29,7 +29,7 @@
|
||||
"Create": "צור",
|
||||
"Clone": "שכפול",
|
||||
"Raw text": "טקסט גולמי",
|
||||
"Expires": "Expires",
|
||||
"Expires": "יפוג ב",
|
||||
"Burn after reading": "קוראים-שורפים",
|
||||
"Open discussion": "פתיחת דיון",
|
||||
"Password (recommended)": "ססמה (מומלץ)",
|
||||
@@ -53,11 +53,11 @@
|
||||
],
|
||||
"%d hours": [
|
||||
"שעה אחת",
|
||||
"%d hours (1st plural)",
|
||||
"%d hours (2nd plural)",
|
||||
"%d hours (3rd plural)",
|
||||
"%d hours (4th plural)",
|
||||
"%d hours (5th plural)"
|
||||
"%d שעות",
|
||||
"%d שעות",
|
||||
"%d שעות",
|
||||
"%d שעות",
|
||||
"%d שעות"
|
||||
],
|
||||
"%d days": [
|
||||
"יום אחד",
|
||||
@@ -94,44 +94,44 @@
|
||||
"Never": "לעולם לא",
|
||||
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "הערה: זהו שירות בדקה: המידע לא ישמר.",
|
||||
"This document will expire in %d seconds.": [
|
||||
"This document will expire in %d second. (singular)",
|
||||
"This document will expire in %d seconds. (1st plural)",
|
||||
"This document will expire in %d seconds. (2nd plural)",
|
||||
"This document will expire in %d seconds. (3rd plural)",
|
||||
"This document will expire in %d seconds. (4th plural)",
|
||||
"This document will expire in %d seconds. (5th plural)"
|
||||
"מסמך זה יפוג בעוד שנייה אחת.",
|
||||
"מסמך זה יפוג בעוד %d שניות.",
|
||||
"מסמך זה יפוג בעוד %d שניות.",
|
||||
"מסמך זה יפוג בעוד %d שניות.",
|
||||
"מסמך זה יפוג בעוד %d שניות.",
|
||||
"מסמך זה יפוג בעוד %d שניות."
|
||||
],
|
||||
"This document will expire in %d minutes.": [
|
||||
"This document will expire in %d minute. (singular)",
|
||||
"This document will expire in %d minutes. (1st plural)",
|
||||
"This document will expire in %d minutes. (2nd plural)",
|
||||
"This document will expire in %d minutes. (3rd plural)",
|
||||
"This document will expire in %d minutes. (4th plural)",
|
||||
"This document will expire in %d minutes. (5th plural)"
|
||||
"מסמך זה יפוג בעוד דקה אחת.",
|
||||
"מסמך זה יפוג בעוד %d דקות.",
|
||||
"מסמך זה יפוג בעוד %d דקות.",
|
||||
"מסמך זה יפוג בעוד %d דקות.",
|
||||
"מסמך זה יפוג בעוד %d דקות.",
|
||||
"מסמך זה יפוג בעוד %d דקות."
|
||||
],
|
||||
"This document will expire in %d hours.": [
|
||||
"This document will expire in %d hour. (singular)",
|
||||
"This document will expire in %d hours. (1st plural)",
|
||||
"This document will expire in %d hours. (2nd plural)",
|
||||
"This document will expire in %d hours. (3rd plural)",
|
||||
"This document will expire in %d hours. (4th plural)",
|
||||
"This document will expire in %d hours. (5th plural)"
|
||||
"מסמך זה יפוג בעוד שעה אחת.",
|
||||
"מסמך זה יפוג בעוד %d שעות.",
|
||||
"מסמך זה יפוג בעוד %d שעות.",
|
||||
"מסמך זה יפוג בעוד %d שעות.",
|
||||
"מסמך זה יפוג בעוד %d שעות.",
|
||||
"מסמך זה יפוג בעוד %d שעות."
|
||||
],
|
||||
"This document will expire in %d days.": [
|
||||
"This document will expire in %d day. (singular)",
|
||||
"This document will expire in %d days. (1st plural)",
|
||||
"This document will expire in %d days. (2nd plural)",
|
||||
"This document will expire in %d days. (3rd plural)",
|
||||
"This document will expire in %d days. (4th plural)",
|
||||
"This document will expire in %d days. (5th plural)"
|
||||
"מסמך זה יפוג בעוד יום אחד.",
|
||||
"מסמך זה יפוג בעוד %d ימים.",
|
||||
"מסמך זה יפוג בעוד %d ימים.",
|
||||
"מסמך זה יפוג בעוד %d ימים.",
|
||||
"מסמך זה יפוג בעוד %d ימים.",
|
||||
"מסמך זה יפוג בעוד %d ימים."
|
||||
],
|
||||
"This document will expire in %d months.": [
|
||||
"This document will expire in %d month. (singular)",
|
||||
"This document will expire in %d months. (1st plural)",
|
||||
"This document will expire in %d months. (2nd plural)",
|
||||
"This document will expire in %d months. (3rd plural)",
|
||||
"This document will expire in %d months. (4th plural)",
|
||||
"This document will expire in %d months. (5th plural)"
|
||||
"מסמך זה יפוג בעוד חודש אחד.",
|
||||
"מסמך זה יפוג בעוד %d חודשים.",
|
||||
"מסמך זה יפוג בעוד %d חודשים.",
|
||||
"מסמך זה יפוג בעוד %d חודשים.",
|
||||
"מסמך זה יפוג בעוד %d חודשים.",
|
||||
"מסמך זה יפוג בעוד %d חודשים."
|
||||
],
|
||||
"Please enter the password for this paste:": "נא למלא את הססמה להדבקה הזו:",
|
||||
"Could not decrypt data (Wrong key?)": "לא ניתן לפענח את הנתונים (מפתח שגוי?)",
|
||||
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "שגיאת שרת או שהשרת לא מגיב",
|
||||
"Could not post comment: %s": "לא ניתן לפרסם תגובה: %s",
|
||||
"Sending paste…": "ההדבקה נשלחת…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "ההדבקה שלך היא <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(יש ללחוץ [Ctrl]+[c] כדי להעתיק)</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "מחיקת נתונים",
|
||||
"Could not create paste: %s": "לא ניתן ליצור הדבקה: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "לא ניתן לפענח הדבקה: מפתח הפענוח חסר בכתובת (השתמשת במערכת הפנייה או מקצר כתובות שחותכים חלק מהכתובת?)",
|
||||
@@ -164,35 +164,43 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "פורמט",
|
||||
"Plain Text": "טקסט פשוט",
|
||||
"Source Code": "קוד מקור",
|
||||
"Markdown": "Markdown",
|
||||
"Download attachment": "הורדת קובץ מצורף",
|
||||
"Cloned: '%s'": "שוכפל: '%s'",
|
||||
"The cloned file '%s' was attached to this paste.": "The cloned file '%s' was attached to this paste.",
|
||||
"The cloned file '%s' was attached to this paste.": "הקובץ '%s' שהועתק צורף להדבקה זו.",
|
||||
"Attach a file": "צירוף קובץ",
|
||||
"alternatively drag & drop a file or paste an image from the clipboard": "alternatively drag & drop a file or paste an image from the clipboard",
|
||||
"File too large, to display a preview. Please download the attachment.": "File too large, to display a preview. Please download the attachment.",
|
||||
"Remove attachment": "Remove attachment",
|
||||
"Your browser does not support uploading encrypted files. Please use a newer browser.": "Your browser does not support uploading encrypted files. Please use a newer browser.",
|
||||
"alternatively drag & drop a file or paste an image from the clipboard": "לחלופין, ניתן לגרור ולשחרר קובץ או להדביק תמונה מהלוח.",
|
||||
"File too large, to display a preview. Please download the attachment.": "הקובץ גדול מדי כדי להציג תצוגה מקדימה. אנא הורד את הקובץ המצורף.",
|
||||
"Remove attachment": "הסר קובץ מצורף",
|
||||
"Your browser does not support uploading encrypted files. Please use a newer browser.": "הדפדפן שלך אינו תומך בהעלאת קבצים מוצפנים. אנא השתמש בדפדפן עדכני יותר.",
|
||||
"Invalid attachment.": "קובץ מצורף שגוי.",
|
||||
"Options": "אפשרויות",
|
||||
"Shorten URL": "קיצור כתובת",
|
||||
"Editor": "עורך",
|
||||
"Preview": "תצוגה מקדימה",
|
||||
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.",
|
||||
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s דורש שה-PATH יסתיים ב-\"%s\". אנא עדכן את ה-PATH בקובץ index.php שלך.",
|
||||
"Decrypt": "פענוח",
|
||||
"Enter password": "נא למלא ססמה",
|
||||
"Loading…": "בטעינה…",
|
||||
"Decrypting paste…": "ההדבקה מפוענחת…",
|
||||
"Preparing new paste…": "ההדבקה החדשה בהכנות…",
|
||||
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.",
|
||||
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "אם הודעה זו לא נעלמת, אנא עיין ב- <a href=\"%s\">שאלות נפוצות אלה למידע לפתרון בעיות</a>.",
|
||||
"+++ no paste text +++": "+++ אין טקסט להדבקה +++",
|
||||
"Could not get paste data: %s": "לא ניתן לקבל את נתוני ההדבקה: %s",
|
||||
"QR code": "קוד QR",
|
||||
"This website is using an insecure HTTP connection! Please use it only for testing.": "האתר הזה משתמש בחיבור HTTP בלתי מאובטח! נא להשתמש בזה לבדיקות בלבד.",
|
||||
"For more information <a href=\"%s\">see this FAQ entry</a>.": "יש מידע נוסף <a href=\"%s\">ברשומה הזאת בשו״ת</a>.",
|
||||
"For more information <a href=\"%s\">see this FAQ entry</a>.": "לפרטים נוספים <a href=\"%s\">עיין ברשומת שאלות נפוצות זו</a>.",
|
||||
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "יכול להיות שהדפדפן שלך ידרוש חיבור HTTPS כדי לתמוך ב־API של WebCrypto. כדי לנסות <a href=\"%s\">לעבור ל־HTTPS</a>.",
|
||||
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "הדפדפן שלך לא תומך ב־WebAssembly שמשמש לדחיסת zlib. אפשר ליצור מסמכים בלתי מוצפנים אך אין אפשרות לקרוא מסמכים מוצפנים.",
|
||||
"waiting on user to provide a password": "בהמתנה למילוי הססמה מצד המשתמש",
|
||||
@@ -209,16 +217,23 @@
|
||||
"Close": "סגירה",
|
||||
"Encrypted note on %s": "%sהערה מוצפנת ב־",
|
||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "נא לבקר בקישור כדי לצפות בהערה. מסירת הקישור לאנשים כלשהם תאפשר גם להם לגשת להערה.",
|
||||
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
||||
"Save paste": "Save paste",
|
||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
|
||||
"This secret message can only be displayed once. Would you like to see it now?": "This secret message can only be displayed once. Would you like to see it now?",
|
||||
"Yes, see it": "Yes, see it",
|
||||
"Dark Mode": "Dark Mode",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"URL shortener may expose your decrypt key in URL.": "שירות קיצור כתובת URL עשוי לחשוף את מפתח הפענוח שלך בכתובת ה-URL.",
|
||||
"Save paste": "שמור הדבקה",
|
||||
"Your IP is not authorized to create pastes.": "ה-IP שלך אינו מורשה ליצור הדבקות.",
|
||||
"Trying to shorten a URL that isn't pointing at our instance.": "מנסים לקצר כתובת URL שאינה מצביעה על המערכת שלנו.",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "שגיאה בעת קריאה ל-YOURLS. כנראה מדובר בבעיה בהגדרות, כמו \"apiurl\" או \"signature\" שגויים או חסרים.",
|
||||
"Error parsing YOURLS response.": "שגיאה בניתוח התגובה מ-YOURLS.",
|
||||
"This secret message can only be displayed once. Would you like to see it now?": "ההודעה הסודית הזו יכולה להוצג רק פעם אחת. האם תרצה לראות אותה עכשיו?",
|
||||
"Yes, see it": "כן, ראה אותה",
|
||||
"Dark Mode": "מצב כהה",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "שגיאה בדחיסת ההדבקה, עקב חוסר תמיכה ב-WebAssembly.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "שגיאה בהפקת ההדבקה, הדפדפן שלך לא תומך ב-WebAssembly. אנא השתמש בדפדפן אחר כדי לצפות בהדבקה זו.",
|
||||
"Start over": "להתחיל מחדש",
|
||||
"Paste copied to clipboard": "ההדבקה הועתקה ללוח",
|
||||
"To copy paste 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>",
|
||||
"Copy link": "העתק קישור",
|
||||
"Link copied to clipboard": "הקישור הועתק ללוח",
|
||||
"Paste 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> להחלפה)",
|
||||
"Theme": "נושא"
|
||||
}
|
||||
|
||||
19
i18n/hi.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "server error or not responding",
|
||||
"Could not post comment: %s": "Could not post comment: %s",
|
||||
"Sending paste…": "Sending paste…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>",
|
||||
"Delete data": "Delete data",
|
||||
"Could not create paste: %s": "Could not create paste: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Format",
|
||||
"Plain Text": "Plain Text",
|
||||
"Source Code": "Source Code",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Dark Mode",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/hu.json
@@ -151,7 +151,7 @@
|
||||
"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",
|
||||
"Sending paste…": "Bejegyzés elküldése...",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "A bejegyzésed a <a id=\"pasteurl\" href=\"%s\">%s</a> címen elérhető. <span id=\"copyhint\"> [Ctrl]+[c]-vel tudod vágólapra másolni.</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "Adat törlése",
|
||||
"Could not create paste: %s": "Nem tudtuk létrehozni a bejegyzést: %s",
|
||||
"Cannot decrypt paste: 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 ami kivágta azt belőle?",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Formátum",
|
||||
"Plain Text": "Egyszerű szöveg",
|
||||
"Source Code": "Forráskód",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Sötét mód",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/id.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "kesalahan server atau server tidak merespon",
|
||||
"Could not post comment: %s": "Tidak dapat memposting komentar: %s",
|
||||
"Sending paste…": "Mengirim paste…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Paste Anda adalah <a id=\"pasteurl\" href=\"%s\">%s</a><span id=\"copyhint\">(Tekan [Ctrl]+[c] untuk menyalin)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Paste Anda adalah <a id=\"pasteurl\" href=\"%s\">%s</a><span id=\"copyhint\">(Tekan <kbd>Ctrl</kbd>+<kbd>c</kbd> untuk menyalin)</span>",
|
||||
"Delete data": "Hapus data",
|
||||
"Could not create paste: %s": "Tidak dapat membuat paste: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Tidak dapat mendekripsi paste: Kunci dekripsi tidak ada di URL (Apakah Anda menggunakan redirector atau penyingkat URL yang menghapus bagian dari URL?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Format",
|
||||
"Plain Text": "Teks Biasa",
|
||||
"Source Code": "Kode Sumber",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Mode Gelap",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/it.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "errore o mancata risposta dal server",
|
||||
"Could not post comment: %s": "Impossibile inviare il commento: %s",
|
||||
"Sending paste…": "Messaggio in fase di invio…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Il tuo messaggio è qui: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Premi [Ctrl]+[c] (Windows) o [Cmd]+[c] (Mac) per copiare il link)</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "Cancella i dati",
|
||||
"Could not create paste: %s": "Non riesco a creare il messaggio: %s",
|
||||
"Cannot decrypt paste: 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?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Formato",
|
||||
"Plain Text": "Solo Testo",
|
||||
"Source Code": "Codice Sorgente",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Tema Scuro",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Errore nella compressione dell messaggio, a causa del supporto WebAssembly mancante.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Errore nella decompressione dell messaggio, il tuo browser non supporta WebAssembly. Utilizza un altro browser per visualizzare questo messaggio.",
|
||||
"Start over": "Ricominciare"
|
||||
"Start over": "Ricominciare",
|
||||
"Paste copied to clipboard": "Messaggio copiato",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copia il link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Testo del messaggio",
|
||||
"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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/ja.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "サーバーエラーまたは応答しません",
|
||||
"Could not post comment: %s": "コメントを投稿できませんでした:%s",
|
||||
"Sending paste…": "ペーストを送信しています…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "ペーストは<a id=\"pasteurl\" href=\"%s\">%s</a>です<span id=\"copyhint\">(コピーするには[Ctrl]+[c]を押してください)</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "データを削除",
|
||||
"Could not create paste: %s": "ペーストを作成できませんでした:%s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "ペーストを復号化できません:復号化キーがURLにありません(URLの一部を削除するリダイレクト機能またはURLの短縮アプリケーションを使いましたか?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "形式",
|
||||
"Plain Text": "プレーンテキスト",
|
||||
"Source Code": "ソースコード",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "ダークモード",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "server error or not responding",
|
||||
"Could not post comment: %s": "Could not post comment: %s",
|
||||
"Sending paste…": "Sending paste…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>",
|
||||
"Delete data": "Delete data",
|
||||
"Could not create paste: %s": "Could not create paste: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Format",
|
||||
"Plain Text": "Plain Text",
|
||||
"Source Code": "Source Code",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Dark Mode",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/ko.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "server error or not responding",
|
||||
"Could not post comment: %s": "Could not post comment: %s",
|
||||
"Sending paste…": "Sending paste…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>",
|
||||
"Delete data": "Delete data",
|
||||
"Could not create paste: %s": "Could not create paste: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Format",
|
||||
"Plain Text": "Plain Text",
|
||||
"Source Code": "Source Code",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Dark Mode",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/ku.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "server error or not responding",
|
||||
"Could not post comment: %s": "Could not post comment: %s",
|
||||
"Sending paste…": "Sending paste…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>",
|
||||
"Delete data": "Delete data",
|
||||
"Could not create paste: %s": "Could not create paste: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Format",
|
||||
"Plain Text": "Plain Text",
|
||||
"Source Code": "Source Code",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "جۆری ڕەش",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/la.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "server error or not responding",
|
||||
"Could not post comment: %s": "Could not post comment: %s",
|
||||
"Sending paste…": "Sending paste…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>",
|
||||
"Delete data": "Delete data",
|
||||
"Could not create paste: %s": "Could not create paste: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Format",
|
||||
"Plain Text": "Plain Text",
|
||||
"Source Code": "Source Code",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Dark Mode",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/lt.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "serverio klaida arba jis neatsako",
|
||||
"Could not post comment: %s": "Nepavyko paskelbti komentaro: %s",
|
||||
"Sending paste…": "Siunčiamas įdėjimas…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Jūsų įdėjimas yra <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Paspauskite [Vald]+[c] norėdami nukopijuoti)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Jūsų įdėjimas yra <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Paspauskite <kbd>Vald</kbd>+<kbd>c</kbd> norėdami nukopijuoti)</span>",
|
||||
"Delete data": "Ištrinti duomenis",
|
||||
"Could not create paste: %s": "Nepavyko sukurti įdėjimo: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nepavyksta iššifruoti įdėjimo: URL adrese trūksta iššifravimo rakto (Ar naudojote peradresavimo ar URL trumpinimo įrankį, kuris pašalina URL dalį?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Formatas",
|
||||
"Plain Text": "Grynasis tekstas",
|
||||
"Source Code": "Pirminis kodas",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Tamsi veiksena",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Klaida glaudinant įdėjimą, nes trūksta WebAssembly palaikymo.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Klaida išglaudinant įdėjimą, jūsų naršyklė nepalaiko WebAssembly. Norėdami peržiūrėti šį įdėjimą, naudokite kitą naršyklę.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
21
i18n/nl.json
@@ -143,7 +143,7 @@
|
||||
"Avatar generated from IP address": "Anonieme avatar (van het IP-adres)",
|
||||
"Add comment": "Commentaar toevoegen",
|
||||
"Optional nickname…": "Optionele bijnaam…",
|
||||
"Post comment": "Plaats een commentaar",
|
||||
"Post comment": "Plaats commentaar",
|
||||
"Sending comment…": "Commentaar verzenden…",
|
||||
"Comment posted.": "Commentaar geplaatst.",
|
||||
"Could not refresh display: %s": "Kon de weergave niet vernieuwen: %s",
|
||||
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "Serverfout of server reageert niet",
|
||||
"Could not post comment: %s": "Kon het commentaar niet plaatsen: %s",
|
||||
"Sending paste…": "Paste verzenden…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Je paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Druk [Ctrl]+[c] om te kopiëren)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Je paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Druk <kbd>Ctrl</kbd>+<kbd>c</kbd> om te kopiëren)</span>",
|
||||
"Delete data": "Gegevens wissen",
|
||||
"Could not create paste: %s": "Kon de paste niet aanmaken: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Kon de paste niet decoderen: Decoderingssleutel ontbreekt in URL (Heb je een doorverwijzer of een URL-verkorter gebruikt die een deel van de URL verwijdert?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Formaat",
|
||||
"Plain Text": "Platte tekst",
|
||||
"Source Code": "Broncode",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Donkere modus",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Fout bij het comprimeren van notitie door ontbrekende ondersteuning voor WebAssembly.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Fout bij het decomprimeren van de notitie, uw browser ondersteunt WebAssembly niet. Gebruik een andere browser om deze notitie te bekijken.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Opnieuw beginnen",
|
||||
"Paste copied to clipboard": "Notitie gekopieerd naar klembord",
|
||||
"To copy paste 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>",
|
||||
"Copy link": "Kopieer link",
|
||||
"Link copied to clipboard": "Link gekopieerd naar klembord",
|
||||
"Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
23
i18n/no.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "tjener feilet eller svarer ikke",
|
||||
"Could not post comment: %s": "Kunne ikke sende kommentar: %s",
|
||||
"Sending paste…": "Sender innlegg…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Ditt innlegg er <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Trykk [Ctrl]+[c] for å kopiere)</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "Slett data",
|
||||
"Could not create paste: %s": "Kunne ikke opprette innlegg: %s",
|
||||
"Cannot decrypt paste: 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?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Format",
|
||||
"Plain Text": "Ren Tekst",
|
||||
"Source Code": "Kildekode",
|
||||
@@ -211,14 +219,21 @@
|
||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Besøk denne lenken for å se notatet. Hvis lenken deles med andre, vil de også kunne se notatet.",
|
||||
"URL shortener may expose your decrypt key in URL.": "URL forkorter kan avsløre dekrypteringsnøkkelen.",
|
||||
"Save paste": "Lagre utklipp",
|
||||
"Your IP is not authorized to create pastes.": "Din IP er ikke autorisert til å opprette advarsler.",
|
||||
"Your IP is not authorized to create pastes.": "Din IP er ikke autorisert til å opprette dokumenter.",
|
||||
"Trying to shorten a URL that isn't pointing at our instance.": "Prøver å forkorte en URL som ikke peker i vår instans.",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Feil ved å ringe YOURLS. Sannsynligvis et konfigurasjonsproblem, som feil eller mangler, \"apiurl\" eller \"signatur\".",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Feil ved å besøke YOURLS. Sannsynligvis et konfigurasjonsproblem, eksempelvis feil eller mangler, med \"apiurl\" eller \"signatur\".",
|
||||
"Error parsing YOURLS response.": "Feil ved analyse av YOURLS svar.",
|
||||
"This secret message can only be displayed once. Would you like to see it now?": "Denne hemmelige meldingen kan bare vises én gang. Vil du se den nå?",
|
||||
"Yes, see it": "Ja, se det",
|
||||
"Dark Mode": "Mørk modus",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/oc.json
@@ -151,7 +151,7 @@
|
||||
"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",
|
||||
"Sending paste…": "Mandadís del tèxte…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] 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 [Ctrl]+[c] per copiar)</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "Supprimir las donadas del tèxte",
|
||||
"Could not create paste: %s": "Impossible de crear lo tèxte : %s",
|
||||
"Cannot decrypt paste: 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 ?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "Eio",
|
||||
"ZiB": "Zio",
|
||||
"YiB": "Yio",
|
||||
"kB": "ko",
|
||||
"MB": "Mo",
|
||||
"GB": "Go",
|
||||
"TB": "To",
|
||||
"PB": "Po",
|
||||
"EB": "Eo",
|
||||
"ZB": "Zo",
|
||||
"YB": "Yo",
|
||||
"Format": "Format",
|
||||
"Plain Text": "Tèxte brut",
|
||||
"Source Code": "Còdi font",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Mòde escur",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error al moment de la compression de l'empegatge, a causa de la manca de presa en carga de WebAssembly.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error al moment de descompresar l'empegatge, vòstre navegador pren pas en carga WebAssembly. Mercés d'utilizar un autre navigador per visualizar aquesta pega.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/pl.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "błąd serwera lub brak odpowiedzi",
|
||||
"Could not post comment: %s": "Nie udało się wysłać komentarza: %s",
|
||||
"Sending paste…": "Wysyłanie wklejki…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Twoja wklejka to <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(wciśnij [Ctrl]+[c] aby skopiować)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Twoja wklejka to <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(wciśnij <kbd>Ctrl</kbd>+<kbd>c</kbd> aby skopiować)</span>",
|
||||
"Delete data": "Skasuj dane",
|
||||
"Could not create paste: %s": "Nie udało się utworzyć wklejki: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nie udało się odszyfrować wklejki - brak klucza deszyfrującego w adresie (użyłeś skracacza linków, który ucina część adresu?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Format",
|
||||
"Plain Text": "Czysty tekst",
|
||||
"Source Code": "Kod źródłowy",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Ciemny motyw",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Błąd kompresowania wklejenia przez brak obsługi WebAssembly.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Błąd dekompresowania wklejenia przez brak obsługi WebAssembly przez przeglądarkę. Użyj innej przeglądarki, aby zobaczyć to wklejenie.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Zacznij od nowa",
|
||||
"Paste copied to clipboard": "Wklejka skopiowana do schowka",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "Aby skopiować wklejkę, naciśnij przycisk kopiowania lub użyj skrótu schowka <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Kopiuj link",
|
||||
"Link copied to clipboard": "Link został skopiowany do schowka",
|
||||
"Paste text": "Wklej tekst",
|
||||
"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 (przytrzymaj <kbd>Ctrl</kbd>+<kbd>m</kbd> lub <kbd>Esc</kbd> aby przełączać)",
|
||||
"Theme": "Motyw"
|
||||
}
|
||||
|
||||
19
i18n/pt.json
@@ -151,7 +151,7 @@
|
||||
"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",
|
||||
"Sending paste…": "Enviando cópia…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Sua cópia é <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Pressione [Ctrl]+[c] para copiar)</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "Excluir dados",
|
||||
"Could not create paste: %s": "Não foi possível criar cópia: %s",
|
||||
"Cannot decrypt paste: 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?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Formato",
|
||||
"Plain Text": "Texto sem formato",
|
||||
"Source Code": "Código fonte",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Modo Noturno",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/ro.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "eroare de server sau nu răspunde",
|
||||
"Could not post comment: %s": "Nu s-a putut posta comentariul: %s",
|
||||
"Sending paste…": "Se trimite paste-ul…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Paste-ul dvs. este <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Apăsați [Ctrl]+[c] pentru a copia)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Paste-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>",
|
||||
"Delete data": "Ștergeți datele",
|
||||
"Could not create paste: %s": "Nu s-a putut crea paste-ul: %s",
|
||||
"Cannot decrypt paste: 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 paste-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?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Formatare",
|
||||
"Plain Text": "Text neformatat",
|
||||
"Source Code": "Cod sursă",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Mod întunecat",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Eroare la compresia paste-ului din cauza incompatibilității cu WebAssembly.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Eroare la deschiderea paste-ului, browserul dvs. nu acceptă WebAssembly. Vă rugăm să utilizați un alt browser pentru a vedea acest paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/ru.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "ошибка сервера или нет ответа",
|
||||
"Could not post comment: %s": "Не удалось опубликовать комментарий: %s",
|
||||
"Sending paste…": "Отправка записи…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Ссылка на запись <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Нажмите [Ctrl]+[c], чтобы скопировать ссылку)</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "Удалить запись",
|
||||
"Could not create paste: %s": "Не удалось опубликовать запись: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Невозможно расшифровать запись: Ключ расшифровки отсутствует в ссылке (Может быть, вы используете сокращатель ссылок, который удаляет часть ссылки?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "Эбайт",
|
||||
"ZiB": "Збайт",
|
||||
"YiB": "Йбайт",
|
||||
"kB": "кбайт",
|
||||
"MB": "Мбайт",
|
||||
"GB": "Гбайт",
|
||||
"TB": "Тбайт",
|
||||
"PB": "Пбайт",
|
||||
"EB": "Эбайт",
|
||||
"ZB": "Збайт",
|
||||
"YB": "Йбайт",
|
||||
"Format": "Формат",
|
||||
"Plain Text": "Обычный текст",
|
||||
"Source Code": "Исходный код",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Тёмная",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Запись скопирована в буфер обмена",
|
||||
"To copy paste 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>",
|
||||
"Copy link": "Скопировать ссылку",
|
||||
"Link copied to clipboard": "Ссылка скопирована в буфер обмена",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Тема"
|
||||
}
|
||||
|
||||
19
i18n/sk.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "chyba servera alebo server neodpovedá",
|
||||
"Could not post comment: %s": "Nepodarilo sa pridať komentár: %s",
|
||||
"Sending paste…": "Odosiela sa príspevok…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Váš príspevok je <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(skopírujte stlačením [Ctrl]+[c])</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "Odstrániť dáta",
|
||||
"Could not create paste: %s": "Nepodarilo sa vytvoriť príspevok: %s",
|
||||
"Cannot decrypt paste: 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?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Formát",
|
||||
"Plain Text": "Čistý text",
|
||||
"Source Code": "Zdrojový kód",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Tmavý Režim",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/sl.json
@@ -151,7 +151,7 @@
|
||||
"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",
|
||||
"Sending paste…": "Pošiljam prilepek…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Tvoj prilepek je dostopen na naslovu: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Pritisni [Ctrl]+[c] ali [Cmd] + [c] in skopiraj)</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "Izbriši podatke",
|
||||
"Could not create paste: %s": "Ne morem ustvariti prilepka: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Ne morem odkodirati prilepka: V URL-ju manjka ključ (A si uporabil krajšalnik URL-jev, ki odstrani del URL-ja?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EB",
|
||||
"ZiB": "ZB",
|
||||
"YiB": "YB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Format",
|
||||
"Plain Text": "Surov tekst",
|
||||
"Source Code": "Odprta koda",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Temni način",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/sv.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "server error or not responding",
|
||||
"Could not post comment: %s": "Could not post comment: %s",
|
||||
"Sending paste…": "Sending paste…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span>",
|
||||
"Delete data": "Delete data",
|
||||
"Could not create paste: %s": "Could not create paste: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Format",
|
||||
"Plain Text": "Plain Text",
|
||||
"Source Code": "Source Code",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Mörkt Läge",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Start over",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
29
i18n/th.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "เซิร์ฟเวอร์มีข้อผิดพลาดหรือไม่ตอบสนอง",
|
||||
"Could not post comment: %s": "ไม่สามารถส่งความคิดเห็นได้: %s",
|
||||
"Sending paste…": "กำลังส่งข้อมูล…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "การฝากโค้ดของคุณอยู่ที่ <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(กดปุ่ม [Ctrl]+[c] เพื่อคัดลอก)</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "ลบข้อมูล",
|
||||
"Could not create paste: %s": "ไม่สามารถสร้างข้อมูลการฝากโค้ดได้: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "ไม่สามารถถอดรหัสข้อมูลการฝากโค้ดได้: คีย์ถอดรหัสที่อยู่ใน URL หายไป (คุณได้ใช้ตัวเปลี่ยนเส้นทางหรือตัวย่อ URL ที่มีการตัดส่วนของ URL ออกหรือไม่)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "รูปแบบ",
|
||||
"Plain Text": "ข้อความล้วน",
|
||||
"Source Code": "ซอร์สโค้ด",
|
||||
@@ -215,10 +223,17 @@
|
||||
"Trying to shorten a URL that isn't pointing at our instance.": "กำลังพยายามใช้เครื่องมือสร้างลิงก์ย่อ ที่ไม่ได้ชี้ไปที่อินสแตนซ์ของเรา",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "เกิดข้อผิดพลาดในการเรียก YOURLS อาจเป็นปัญหามาจากการกำหนดค่า เช่น \"apiurl\" หรือ \"signature\" ไม่ถูกต้องหรือขาดหายไป",
|
||||
"Error parsing YOURLS response.": "เกิดข้อผิดพลาดในการแยกวิเคราะห์การตอบสนองของ YOURLS",
|
||||
"This secret message can only be displayed once. Would you like to see it now?": "This secret message can only be displayed once. Would you like to see it now?",
|
||||
"Yes, see it": "Yes, see it",
|
||||
"Dark Mode": "โหมดมืด",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"This secret message can only be displayed once. Would you like to see it now?": "ข้อความลับนี้จะแสดงได้เพียงครั้งเดียวเท่านั้น คุณต้องการดูข้อความนี้ตอนนี้เลยใช่หรือไม่",
|
||||
"Yes, see it": "ใช่ ดูเลย",
|
||||
"Dark Mode": "โหมดสีเข้ม",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "ไม่สามารถบีบอัดข้อมูลที่คุณต้องการฝากโค้ดได้ เนื่องจากอุปกรณ์ของคุณขาดการรองรับ WebAssembly",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "ไม่สามารถอ่านข้อมูลที่คุณได้ฝากโค้ดไว้ เบราว์เซอร์ของคุณไม่รองรับ WebAssembly กรุณาลองเปลี่ยนใช้เบราว์เซอร์ตัวอื่นเพื่อดูการฝากโค้ดนี้อีกครั้ง",
|
||||
"Start over": "เริ่มใหม่",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/tr.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "sunucu hatası veya yanıt vermiyor",
|
||||
"Could not post comment: %s": "Yorum paylaşılamadı: %s",
|
||||
"Sending paste…": "Yazı gönderiliyor…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Yazınız: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">([Ctrl]+[c] tuşlarına basarak kopyalayın.)</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "Veriyi sil",
|
||||
"Could not create paste: %s": "Yazı oluşturulamadı: %s",
|
||||
"Cannot decrypt paste: 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.)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "Format",
|
||||
"Plain Text": "Düz Yazı",
|
||||
"Source Code": "Kaynak Kodu",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Koyu Mod",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "WebAssembly desteği eksik olduğundan yazı sıkıştırılamadı.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "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",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
19
i18n/uk.json
@@ -151,7 +151,7 @@
|
||||
"server error or not responding": "помилка на сервері чи немає відповіді",
|
||||
"Could not post comment: %s": "Не вдалося опублікувати коментар: %s",
|
||||
"Sending paste…": "Відправка допису…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Посилання на допис <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Тисніть [Ctrl]+[c], щоб скопіювати посилання)</span>",
|
||||
"Your paste 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>",
|
||||
"Delete data": "Видалити допис",
|
||||
"Could not create paste: %s": "Не вдалося опублікувати допис: %s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Неможливо розшифрувати запис: Ключ дешифрування відсутній в посиланні (Можливо, ви використовуєте скорочувач посилань, що видаляє частину посилання?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "Ебайт",
|
||||
"ZiB": "Збайт",
|
||||
"YiB": "Йбайт",
|
||||
"kB": "кбайт",
|
||||
"MB": "Мбайт",
|
||||
"GB": "Гбайт",
|
||||
"TB": "Тбайт",
|
||||
"PB": "Пбайт",
|
||||
"EB": "Ебайт",
|
||||
"ZB": "Збайт",
|
||||
"YB": "Йбайт",
|
||||
"Format": "Формат",
|
||||
"Plain Text": "Звичайний текст",
|
||||
"Source Code": "Вихідний код",
|
||||
@@ -220,5 +228,12 @@
|
||||
"Dark Mode": "Темний режим",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Помилка при стисканні допису, через відсутність підтримки WebAssembly сервера.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Помилка при розпакуванні допису, бо ваш браузер не підтримує WebAssembly. Будь ласка, відкрийте в іншому браузері для перегляду цього допису.",
|
||||
"Start over": "Start over"
|
||||
"Start over": "Почати знову",
|
||||
"Paste copied to clipboard": "Paste copied to clipboard",
|
||||
"To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>": "To copy paste press on the copy button or use the clipboard shortcut <kbd>Ctrl</kbd>+<kbd>c</kbd>/<kbd>Cmd</kbd>+<kbd>c</kbd>",
|
||||
"Copy link": "Copy link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Paste text": "Paste 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)",
|
||||
"Theme": "Theme"
|
||||
}
|
||||
|
||||
65
i18n/zh.json
@@ -7,12 +7,12 @@
|
||||
"%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] 部分。",
|
||||
"Please wait %d seconds between each post.": [
|
||||
"每 %d 秒只能粘贴一次。",
|
||||
"每 %d 秒只能粘贴一次。",
|
||||
"每 %d 秒只能粘贴一次。",
|
||||
"每 %d 秒只能粘贴一次。",
|
||||
"每 %d 秒只能粘贴一次。",
|
||||
"每 %d 秒只能粘贴一次。"
|
||||
"每 %d 秒只能创建一次粘贴。",
|
||||
"每 %d 秒只能创建一次粘贴。",
|
||||
"每 %d 秒只能创建一次粘贴。",
|
||||
"每 %d 秒只能创建一次粘贴。",
|
||||
"每 %d 秒只能创建一次粘贴。",
|
||||
"每 %d 秒只能创建一次粘贴。"
|
||||
],
|
||||
"Paste is limited to %s of encrypted data.": "对于加密数据,上限为 %s。",
|
||||
"Invalid data.": "无效的数据。",
|
||||
@@ -46,10 +46,10 @@
|
||||
"%d minutes": [
|
||||
"%d 分钟",
|
||||
"%d 分钟",
|
||||
"%d 秒",
|
||||
"%d 秒",
|
||||
"%d 秒",
|
||||
"%d 秒"
|
||||
"%d 分钟",
|
||||
"%d 分钟",
|
||||
"%d 分钟",
|
||||
"%d 分钟"
|
||||
],
|
||||
"%d hours": [
|
||||
"%d 小时",
|
||||
@@ -94,7 +94,7 @@
|
||||
"Never": "永不过期",
|
||||
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "注意:这是一个测试服务,数据随时可能被删除。如果你滥用这个服务的话,小猫咪会死的。",
|
||||
"This document will expire in %d seconds.": [
|
||||
"这份文档将在一秒后过期。",
|
||||
"这份文档将在 %d 秒后过期。",
|
||||
"这份文档将在 %d 秒后过期。",
|
||||
"这份文档将在 %d 秒后过期。",
|
||||
"这份文档将在 %d 秒后过期。",
|
||||
@@ -102,7 +102,7 @@
|
||||
"这份文档将在 %d 秒后过期。"
|
||||
],
|
||||
"This document will expire in %d minutes.": [
|
||||
"这份文档将在一分钟后过期。",
|
||||
"这份文档将在 %d 分钟后过期。",
|
||||
"这份文档将在 %d 分钟后过期。",
|
||||
"这份文档将在 %d 分钟后过期。",
|
||||
"这份文档将在 %d 分钟后过期。",
|
||||
@@ -110,7 +110,7 @@
|
||||
"这份文档将在 %d 分钟后过期。"
|
||||
],
|
||||
"This document will expire in %d hours.": [
|
||||
"这份文档将在一小时后过期。",
|
||||
"这份文档将在 %d 小时后过期。",
|
||||
"这份文档将在 %d 小时后过期。",
|
||||
"这份文档将在 %d 小时后过期。",
|
||||
"这份文档将在 %d 小时后过期。",
|
||||
@@ -118,7 +118,7 @@
|
||||
"这份文档将在 %d 小时后过期。"
|
||||
],
|
||||
"This document will expire in %d days.": [
|
||||
"这份文档将在一天后过期。",
|
||||
"这份文档将在 %d 天后过期。",
|
||||
"这份文档将在 %d 天后过期。",
|
||||
"这份文档将在 %d 天后过期。",
|
||||
"这份文档将在 %d 天后过期。",
|
||||
@@ -126,7 +126,7 @@
|
||||
"这份文档将在 %d 天后过期。"
|
||||
],
|
||||
"This document will expire in %d months.": [
|
||||
"这份文档将在一个月后过期。",
|
||||
"这份文档将在 %d 个月后过期。",
|
||||
"这份文档将在 %d 个月后过期。",
|
||||
"这份文档将在 %d 个月后过期。",
|
||||
"这份文档将在 %d 个月后过期。",
|
||||
@@ -136,7 +136,7 @@
|
||||
"Please enter the password for this paste:": "请输入这份粘贴内容的密码:",
|
||||
"Could not decrypt data (Wrong key?)": "无法解密数据(密钥错误?)",
|
||||
"Could not delete the paste, it was not stored in burn after reading mode.": "无法删除此粘贴内容,它没有以阅后即焚模式保存。",
|
||||
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "看!仔!细!了!不要关闭窗口,否则你再也见不到这条消息了。",
|
||||
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "睁大眼睛看清楚!不要关闭窗口,否则你再也见不到这条消息了。",
|
||||
"Could not decrypt comment; Wrong key?": "无法解密评论;密钥错误?",
|
||||
"Reply": "回复",
|
||||
"Anonymous": "匿名",
|
||||
@@ -150,8 +150,8 @@
|
||||
"unknown status": "未知状态",
|
||||
"server error or not responding": "服务器错误或无回应",
|
||||
"Could not post comment: %s": "无法发送评论: %s",
|
||||
"Sending paste…": "粘贴内容提交中…",
|
||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "您粘贴内容的链接是 <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(按下 [Ctrl]+[C] 以复制)</span>",
|
||||
"Sending paste…": "正在发送粘贴内容…",
|
||||
"Your paste 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>",
|
||||
"Delete data": "删除数据",
|
||||
"Could not create paste: %s": "无法创建粘贴:%s",
|
||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "无法解密粘贴:URL中缺失解密密钥(是否使用了重定向或者短链接导致密钥丢失?)",
|
||||
@@ -164,6 +164,14 @@
|
||||
"EiB": "EiB",
|
||||
"ZiB": "ZiB",
|
||||
"YiB": "YiB",
|
||||
"kB": "kB",
|
||||
"MB": "MB",
|
||||
"GB": "GB",
|
||||
"TB": "TB",
|
||||
"PB": "PB",
|
||||
"EB": "EB",
|
||||
"ZB": "ZB",
|
||||
"YB": "YB",
|
||||
"Format": "格式",
|
||||
"Plain Text": "纯文本",
|
||||
"Source Code": "源代码",
|
||||
@@ -185,8 +193,8 @@
|
||||
"Decrypt": "解密",
|
||||
"Enter password": "输入密码",
|
||||
"Loading…": "载入中…",
|
||||
"Decrypting paste…": "正在解密",
|
||||
"Preparing new paste…": "正在准备新的粘贴内容",
|
||||
"Decrypting paste…": "正在解密…",
|
||||
"Preparing new paste…": "正在准备新的粘贴内容…",
|
||||
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "如果此消息一直存在,请参考 <a href=\"%s\">这里的 FAQ(英文版)</a>排除故障。",
|
||||
"+++ no paste text +++": "+++ 无粘贴内容 +++",
|
||||
"Could not get paste data: %s": "无法获取粘贴数据:%s",
|
||||
@@ -200,7 +208,7 @@
|
||||
"Retry": "重试",
|
||||
"Showing raw text…": "显示原始文字…",
|
||||
"Notice:": "注意:",
|
||||
"This link will expire after %s.": "这个链接将会在 %s 过期。",
|
||||
"This link will expire after %s.": "此链接将会在 %s 过期。",
|
||||
"This link can only be accessed once, do not use back or refresh button in your browser.": "此链接只能被访问一次,请勿使用浏览器中的返回和刷新按钮。",
|
||||
"Link:": "链接:",
|
||||
"Recipient may become aware of your timezone, convert time to UTC?": "收件人可能会知道您的时区,将时间转换为 UTC?",
|
||||
@@ -217,8 +225,15 @@
|
||||
"Error parsing YOURLS response.": "解析 YOURLS 响应时出错。",
|
||||
"This secret message can only be displayed once. Would you like to see it now?": "读取粘贴后只能在加载时显示一次。您想现在打开吗?",
|
||||
"Yes, see it": "是的,加载它",
|
||||
"Dark Mode": "暗黑模式",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
|
||||
"Start over": "Start over"
|
||||
"Dark Mode": "夜间模式",
|
||||
"Error compressing paste, due to missing WebAssembly support.": "由于缺少 WebAssembly 支持,在压缩粘贴时出错。",
|
||||
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "解压粘贴时出错,您的浏览器不支持 WebAssembly。请使用其他浏览器查看此粘贴。",
|
||||
"Start over": "重新开始",
|
||||
"Paste copied to clipboard": "粘贴内容已复制到剪贴板",
|
||||
"To copy paste 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>。",
|
||||
"Copy link": "复制链接",
|
||||
"Link copied to clipboard": "链接已复制到剪贴板",
|
||||
"Paste 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> 切换开关)",
|
||||
"Theme": "主题"
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 749 B After Width: | Height: | Size: 741 B |
|
Before Width: | Height: | Size: 266 B After Width: | Height: | Size: 180 B |
|
Before Width: | Height: | Size: 253 B After Width: | Height: | Size: 217 B |
BIN
img/icon_new.png
|
Before Width: | Height: | Size: 157 B After Width: | Height: | Size: 104 B |
BIN
img/icon_qr.png
|
Before Width: | Height: | Size: 299 B After Width: | Height: | Size: 200 B |
BIN
img/icon_raw.png
|
Before Width: | Height: | Size: 183 B After Width: | Height: | Size: 174 B |
|
Before Width: | Height: | Size: 209 B After Width: | Height: | Size: 144 B |
|
Before Width: | Height: | Size: 196 B After Width: | Height: | Size: 149 B |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 8.7 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
36
js/common.js
@@ -5,19 +5,18 @@ global.assert = require('assert');
|
||||
global.jsc = require('jsverify');
|
||||
global.jsdom = require('jsdom-global');
|
||||
global.cleanup = global.jsdom();
|
||||
global.URL = require('jsdom-url').URL;
|
||||
global.fs = require('fs');
|
||||
global.WebCrypto = require('@peculiar/webcrypto').Crypto;
|
||||
|
||||
// application libraries to test
|
||||
global.$ = global.jQuery = require('./jquery-3.7.1');
|
||||
global.RawDeflate = require('./rawinflate-0.3').RawDeflate;
|
||||
global.zlib = require('./zlib-1.3.1').zlib;
|
||||
global.zlib = require('./zlib-1.3.1-1').zlib;
|
||||
require('./prettify');
|
||||
global.prettyPrint = window.PR.prettyPrint;
|
||||
global.prettyPrintOne = window.PR.prettyPrintOne;
|
||||
global.showdown = require('./showdown-2.1.0');
|
||||
global.DOMPurify = require('./purify-3.1.7');
|
||||
global.DOMPurify = require('./purify-3.2.6');
|
||||
global.baseX = require('./base-x-4.0.0').baseX;
|
||||
global.Legacy = require('./legacy').Legacy;
|
||||
require('./bootstrap-3.4.1');
|
||||
@@ -79,8 +78,16 @@ function parseMime(line) {
|
||||
}
|
||||
|
||||
// common testing helper functions
|
||||
exports.atob = atob;
|
||||
exports.btoa = btoa;
|
||||
// as of jsDOM 22 the base64 functions provided in the DOM are more restrictive
|
||||
// than browser implementation and throw when being passed invalid unicode
|
||||
// codepoints - as we use these in the encryption with binary data, we need
|
||||
// these to be character encoding agnostic
|
||||
exports.atob = function(encoded) {
|
||||
return Buffer.from(encoded, 'base64').toString('binary');
|
||||
}
|
||||
exports.btoa = function(text) {
|
||||
return Buffer.from(text, 'binary').toString('base64');
|
||||
}
|
||||
|
||||
// provides random lowercase characters from a to z
|
||||
exports.jscA2zString = function() {
|
||||
@@ -152,3 +159,22 @@ exports.urlToString = function (url) {
|
||||
encodeURI(url.query.join('').replace(/^&+|&+$/gm,'')) : '') +
|
||||
(url.fragment ? '#' + encodeURI(url.fragment) : '');
|
||||
};
|
||||
|
||||
exports.enableClipboard = function () {
|
||||
navigator.clipboard = (function () {
|
||||
let savedText = "";
|
||||
|
||||
async function writeText(text) {
|
||||
savedText = text;
|
||||
};
|
||||
|
||||
async function readText() {
|
||||
return savedText;
|
||||
};
|
||||
|
||||
return {
|
||||
writeText,
|
||||
readText,
|
||||
};
|
||||
})();
|
||||
};
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
} else {
|
||||
delStoredPrettifyTheme()
|
||||
}
|
||||
const toggle = document.querySelector('#bd-theme')
|
||||
const toggle = document.getElementById('bd-theme')
|
||||
const theme = getStoredPreferredTheme()
|
||||
setTheme(theme)
|
||||
toggle.checked = (theme === 'dark')
|
||||
|
||||
19
js/legacy.js
@@ -6,7 +6,6 @@
|
||||
* @see {@link https://github.com/PrivateBin/PrivateBin}
|
||||
* @copyright 2012 Sébastien SAUVAGE ({@link http://sebsauvage.net})
|
||||
* @license {@link https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License}
|
||||
* @version 1.3.1
|
||||
* @name Legacy
|
||||
* @namespace
|
||||
*/
|
||||
@@ -175,18 +174,6 @@
|
||||
)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// async & ES6 support
|
||||
try {
|
||||
eval('async () => {}');
|
||||
} catch (e) {
|
||||
if (e instanceof SyntaxError) {
|
||||
return true;
|
||||
} else {
|
||||
throw e; // throws CSP error
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -238,7 +225,7 @@
|
||||
{
|
||||
return init;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* returns the current status of the check
|
||||
*
|
||||
@@ -250,7 +237,7 @@
|
||||
{
|
||||
return status;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* init on application start, returns an all-clear signal
|
||||
*
|
||||
@@ -308,4 +295,4 @@
|
||||
this.Legacy = {
|
||||
Check: Check
|
||||
};
|
||||
}).call(this);
|
||||
}).call(this);
|
||||
|
||||
2016
js/package-lock.json
generated
@@ -1,18 +1,16 @@
|
||||
{
|
||||
"name": "privatebin",
|
||||
"version": "1.7.5",
|
||||
"version": "1.7.8",
|
||||
"description": "PrivateBin is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted in the browser using 256 bit AES in Galois Counter mode (GCM).",
|
||||
"main": "privatebin.js",
|
||||
"directories": {
|
||||
"test": "test"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"jsdom": "^9.12.0",
|
||||
"jsdom-global": "^2.1.1",
|
||||
"jsdom-url": "^2.2.1",
|
||||
"jsverify": "^0.8.3",
|
||||
"@peculiar/webcrypto": "^1.1.1"
|
||||
"@peculiar/webcrypto": "^1.5.0",
|
||||
"jsdom": "^26.0.0",
|
||||
"jsdom-global": "^3.0.2",
|
||||
"jsverify": "^0.8.3"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "mocha",
|
||||
|
||||
791
js/privatebin.js
2
js/purify-3.2.6.js
Normal file
@@ -1,5 +1,5 @@
|
||||
'use strict';
|
||||
var common = require('../common');
|
||||
const common = require('../common');
|
||||
|
||||
describe('AttachmentViewer', function () {
|
||||
describe('setAttachment, showAttachment, removeAttachment, hideAttachment, hideAttachmentPreview, hasAttachment, getAttachment & moveAttachmentTo', function () {
|
||||
@@ -14,11 +14,12 @@ describe('AttachmentViewer', function () {
|
||||
'string',
|
||||
function (mimeType, rawdata, filename, prefix, postfix) {
|
||||
let clean = jsdom(),
|
||||
data = 'data:' + mimeType + ';base64,' + btoa(rawdata),
|
||||
data = 'data:' + mimeType + ';base64,' + common.btoa(rawdata),
|
||||
mimePrefix = mimeType.substring(0, 6),
|
||||
previewSupported = (
|
||||
mimeType.substring(0, 6) === 'image/' ||
|
||||
mimeType.substring(0, 6) === 'audio/' ||
|
||||
mimeType.substring(0, 6) === 'video/' ||
|
||||
mimePrefix === 'image/' ||
|
||||
mimePrefix === 'audio/' ||
|
||||
mimePrefix === 'video/' ||
|
||||
mimeType.match(/\/pdf/i)
|
||||
),
|
||||
results = [],
|
||||
@@ -26,11 +27,14 @@ describe('AttachmentViewer', function () {
|
||||
prefix = prefix.replace(/%(s|d)/g, '%%');
|
||||
postfix = postfix.replace(/%(s|d)/g, '%%');
|
||||
$('body').html(
|
||||
'<div id="attachment" role="alert" class="hidden alert ' +
|
||||
'alert-info"><span class="glyphicon glyphicon-download-' +
|
||||
'alt" aria-hidden="true"></span> <a class="alert-link">' +
|
||||
'Download attachment</a></div><div id="attachmentPrevie' +
|
||||
'w" class="hidden"></div>'
|
||||
'<div id="attachmentPreview" class="col-md-12 text-center hidden"></div>' +
|
||||
'<div id="attachment" class="hidden"></div>' +
|
||||
'<div id="templates">' +
|
||||
'<div id="attachmenttemplate" role="alert" class="attachment hidden alert alert-info">' +
|
||||
'<span class="glyphicon glyphicon-download-alt" aria-hidden="true"></span>' +
|
||||
'<a class="alert-link">Download attachment</a>' +
|
||||
'</div>' +
|
||||
'</div>'
|
||||
);
|
||||
// mock createObjectURL for jsDOM
|
||||
if (typeof window.URL.createObjectURL === 'undefined') {
|
||||
@@ -43,29 +47,35 @@ describe('AttachmentViewer', function () {
|
||||
)
|
||||
}
|
||||
$.PrivateBin.AttachmentViewer.init();
|
||||
$.PrivateBin.Model.init();
|
||||
results.push(
|
||||
!$.PrivateBin.AttachmentViewer.hasAttachment() &&
|
||||
$('#attachment').hasClass('hidden') &&
|
||||
$('#attachment').children().length === 0 &&
|
||||
$('#attachmenttemplate').hasClass('hidden') &&
|
||||
$('#attachmentPreview').hasClass('hidden')
|
||||
);
|
||||
global.atob = common.atob;
|
||||
if (filename.length) {
|
||||
$.PrivateBin.AttachmentViewer.setAttachment(data, filename);
|
||||
} else {
|
||||
$.PrivateBin.AttachmentViewer.setAttachment(data);
|
||||
}
|
||||
// beyond this point we will get the blob URL instead of the data
|
||||
// // beyond this point we will get the blob URL instead of the data
|
||||
data = window.URL.createObjectURL(data);
|
||||
const attachment = $.PrivateBin.AttachmentViewer.getAttachment();
|
||||
const attachment = $.PrivateBin.AttachmentViewer.getAttachments();
|
||||
results.push(
|
||||
$.PrivateBin.AttachmentViewer.hasAttachment() &&
|
||||
$('#attachment').hasClass('hidden') &&
|
||||
$('#attachment').children().length > 0 &&
|
||||
$('#attachmentPreview').hasClass('hidden') &&
|
||||
attachment[0] === data &&
|
||||
attachment[1] === filename
|
||||
attachment[0][0] === data &&
|
||||
attachment[0][1] === filename
|
||||
);
|
||||
$.PrivateBin.AttachmentViewer.showAttachment();
|
||||
results.push(
|
||||
!$('#attachment').hasClass('hidden') &&
|
||||
$('#attachment').children().length > 0 &&
|
||||
(previewSupported ? !$('#attachmentPreview').hasClass('hidden') : $('#attachmentPreview').hasClass('hidden'))
|
||||
);
|
||||
$.PrivateBin.AttachmentViewer.hideAttachment();
|
||||
@@ -83,7 +93,7 @@ describe('AttachmentViewer', function () {
|
||||
(previewSupported ? !$('#attachmentPreview').hasClass('hidden') : $('#attachmentPreview').hasClass('hidden'))
|
||||
);
|
||||
let element = $('<div>');
|
||||
$.PrivateBin.AttachmentViewer.moveAttachmentTo(element, prefix + '%s' + postfix);
|
||||
$.PrivateBin.AttachmentViewer.moveAttachmentTo(element, attachment[0], prefix + '%s' + postfix);
|
||||
// messageIDs with links get a relaxed treatment
|
||||
if (prefix.indexOf('<a') === -1 && postfix.indexOf('<a') === -1) {
|
||||
result = $('<textarea>').text((prefix + filename + postfix)).text();
|
||||
@@ -97,16 +107,17 @@ describe('AttachmentViewer', function () {
|
||||
}
|
||||
if (filename.length) {
|
||||
results.push(
|
||||
element.children()[0].href === data &&
|
||||
element.children()[0].getAttribute('download') === filename &&
|
||||
element.children()[0].text === result
|
||||
element.find('a')[0].href === data &&
|
||||
element.find('a')[0].getAttribute('download') === filename &&
|
||||
element.find('a')[0].text === result
|
||||
);
|
||||
} else {
|
||||
results.push(element.children()[0].href === data);
|
||||
results.push(element.find('a')[0].href === data);
|
||||
}
|
||||
$.PrivateBin.AttachmentViewer.removeAttachment();
|
||||
results.push(
|
||||
$('#attachment').hasClass('hidden') &&
|
||||
$('#attachment').children().length === 0 &&
|
||||
$('#attachmentPreview').hasClass('hidden')
|
||||
);
|
||||
clean();
|
||||
|
||||
@@ -19,10 +19,9 @@ describe('Check', function () {
|
||||
}
|
||||
);
|
||||
Legacy.Check.init();
|
||||
const result1 = Legacy.Check.getInit() && !Legacy.Check.getStatus(),
|
||||
result2 = (document.getElementById('errormessage').className !== 'hidden');
|
||||
const result = Legacy.Check.getInit() && !Legacy.Check.getStatus();
|
||||
clean();
|
||||
return result1 && result2;
|
||||
return result;
|
||||
}
|
||||
),
|
||||
{tests: 10});
|
||||
@@ -67,7 +66,10 @@ describe('Check', function () {
|
||||
'url': (secureProtocol ? 'https' : 'http' ) + '://' + domain.join('') + '/'
|
||||
}
|
||||
);
|
||||
window.crypto = new WebCrypto();
|
||||
Object.defineProperty(window, 'crypto', {
|
||||
value: new WebCrypto(),
|
||||
writeable: false,
|
||||
});
|
||||
Legacy.Check.init();
|
||||
const result1 = Legacy.Check.getInit() && Legacy.Check.getStatus(),
|
||||
result2 = secureProtocol === (document.getElementById('httpnotice').className === 'hidden');
|
||||
|
||||
139
js/test/CopyToClipboard.js
Normal file
@@ -0,0 +1,139 @@
|
||||
'use strict';
|
||||
const common = require('../common');
|
||||
|
||||
describe('CopyToClipboard', function() {
|
||||
this.timeout(30000);
|
||||
|
||||
describe ('Copy paste to clipboard', function () {
|
||||
jsc.property('Copy with button click',
|
||||
common.jscFormats(),
|
||||
'nestring',
|
||||
async function (format, text) {
|
||||
var clean = jsdom();
|
||||
common.enableClipboard();
|
||||
|
||||
$('body').html(
|
||||
'<div id="placeholder" class="hidden">+++ no paste 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>'
|
||||
);
|
||||
|
||||
$.PrivateBin.PasteViewer.init();
|
||||
$.PrivateBin.PasteViewer.setFormat(format);
|
||||
$.PrivateBin.PasteViewer.setText(text);
|
||||
$.PrivateBin.PasteViewer.run();
|
||||
|
||||
$.PrivateBin.CopyToClipboard.init();
|
||||
|
||||
$('#prettyMessageCopyBtn').trigger('click');
|
||||
|
||||
const savedToClipboardText = await navigator.clipboard.readText();
|
||||
|
||||
clean();
|
||||
|
||||
return text === savedToClipboardText;
|
||||
}
|
||||
);
|
||||
|
||||
/**
|
||||
* Unfortunately in JSVerify impossible to check if copy with shortcut when user selected some text on the page
|
||||
* (the copy paste to clipboard should not work in this case) due to lacking window.getSelection() in jsdom.
|
||||
*/
|
||||
jsc.property('Copy with keyboard shortcut',
|
||||
common.jscFormats(),
|
||||
'nestring',
|
||||
async function (format, text) {
|
||||
var clean = jsdom();
|
||||
common.enableClipboard();
|
||||
|
||||
$('body').html(
|
||||
'<div id="placeholder">+++ no paste 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>'
|
||||
);
|
||||
|
||||
$.PrivateBin.PasteViewer.init();
|
||||
$.PrivateBin.PasteViewer.setFormat(format);
|
||||
$.PrivateBin.PasteViewer.setText(text);
|
||||
$.PrivateBin.PasteViewer.run();
|
||||
|
||||
$.PrivateBin.CopyToClipboard.init();
|
||||
|
||||
$('body').trigger('copy');
|
||||
|
||||
const copiedTextWithoutSelectedText = await navigator.clipboard.readText();
|
||||
|
||||
clean();
|
||||
|
||||
return copiedTextWithoutSelectedText === text;
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
jsc.property('Copy link to clipboard',
|
||||
'nestring',
|
||||
async function (text) {
|
||||
var clean = jsdom();
|
||||
common.enableClipboard();
|
||||
|
||||
$('body').html('<button id="copyLink"></button>');
|
||||
|
||||
$.PrivateBin.CopyToClipboard.init();
|
||||
$.PrivateBin.CopyToClipboard.setUrl(text);
|
||||
|
||||
$('#copyLink').trigger('click');
|
||||
|
||||
const copiedText = await navigator.clipboard.readText();
|
||||
|
||||
clean();
|
||||
|
||||
return text === copiedText;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
describe('Keyboard shortcut hint', function () {
|
||||
jsc.property('Show hint',
|
||||
'nestring',
|
||||
function (text) {
|
||||
var clean = jsdom();
|
||||
|
||||
$('body').html('<small id="copyShortcutHintText"></small>');
|
||||
|
||||
$.PrivateBin.CopyToClipboard.init();
|
||||
$.PrivateBin.CopyToClipboard.showKeyboardShortcutHint();
|
||||
|
||||
const keyboardShortcutHint = $('#copyShortcutHintText').text();
|
||||
|
||||
clean();
|
||||
|
||||
return keyboardShortcutHint.length > 0;
|
||||
}
|
||||
);
|
||||
|
||||
jsc.property('Hide hint',
|
||||
'nestring',
|
||||
function (text) {
|
||||
var clean = jsdom();
|
||||
|
||||
$('body').html('<small id="copyShortcutHintText">' + text + '</small>');
|
||||
|
||||
$.PrivateBin.CopyToClipboard.init();
|
||||
$.PrivateBin.CopyToClipboard.hideKeyboardShortcutHint();
|
||||
|
||||
const keyboardShortcutHint = $('#copyShortcutHintText').text();
|
||||
|
||||
clean();
|
||||
|
||||
return keyboardShortcutHint.length === 0;
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -1,5 +1,5 @@
|
||||
'use strict';
|
||||
require('../common');
|
||||
const common = require('../common');
|
||||
|
||||
describe('CryptTool', function () {
|
||||
describe('cipher & decipher', function () {
|
||||
@@ -15,21 +15,26 @@ describe('CryptTool', function () {
|
||||
'string',
|
||||
'string',
|
||||
async function (key, password, message) {
|
||||
// pause to let async functions conclude
|
||||
await new Promise(resolve => setTimeout(resolve, 300));
|
||||
let clean = jsdom();
|
||||
const clean = jsdom();
|
||||
// ensure zlib is getting loaded
|
||||
$.PrivateBin.Controller.initZ();
|
||||
window.crypto = new WebCrypto();
|
||||
Object.defineProperty(window, 'crypto', {
|
||||
value: new WebCrypto(),
|
||||
writeable: false,
|
||||
});
|
||||
global.atob = common.atob;
|
||||
global.btoa = common.btoa;
|
||||
message = message.trim();
|
||||
let cipherMessage = await $.PrivateBin.CryptTool.cipher(
|
||||
const cipherMessage = await $.PrivateBin.CryptTool.cipher(
|
||||
key, password, message, []
|
||||
),
|
||||
plaintext = await $.PrivateBin.CryptTool.decipher(
|
||||
key, password, cipherMessage
|
||||
);
|
||||
clean();
|
||||
return message === plaintext;
|
||||
const result = (message === plaintext);
|
||||
if (!result) console.log(plaintext, cipherMessage);
|
||||
return result;
|
||||
}
|
||||
),
|
||||
{tests: 3});
|
||||
@@ -38,15 +43,19 @@ describe('CryptTool', function () {
|
||||
// The below static unit tests are included to ensure deciphering of "classic"
|
||||
// SJCL based pastes still works
|
||||
it(
|
||||
'supports PrivateBin v1 ciphertext (SJCL & browser atob)',
|
||||
function () {
|
||||
'supports PrivateBin v1 ciphertext with password (SJCL & browser atob)',
|
||||
async function () {
|
||||
delete global.Base64;
|
||||
let clean = jsdom();
|
||||
window.crypto = new WebCrypto();
|
||||
const clean = jsdom();
|
||||
Object.defineProperty(window, 'crypto', {
|
||||
value: new WebCrypto(),
|
||||
writeable: false,
|
||||
});
|
||||
global.atob = common.atob;
|
||||
|
||||
// Of course you can easily decipher the following texts, if you like.
|
||||
// Bonus points for finding their sources and hidden meanings.
|
||||
return $.PrivateBin.CryptTool.decipher(
|
||||
const paste = await $.PrivateBin.CryptTool.decipher(
|
||||
'6t2qsmLyfXIokNCL+3/yl15rfTUBQvm5SOnFPvNE7Q8=',
|
||||
// -- "That's amazing. I've got the same combination on my luggage."
|
||||
Array.apply(0, Array(6)).map((_,b) => b + 1).join(''),
|
||||
@@ -77,53 +86,76 @@ describe('CryptTool', function () {
|
||||
'QUxMXI5htsn2rf0HxCFu7Po8DNYLxTS+67hYjDIYWYaEIc8LXWMLyDm9' +
|
||||
'C5fARPJ4F2BIWgzgzkNj+dVjusft2XnziamWdbS5u3kuRlVuz5LQj+R5' +
|
||||
'imnqQAincdZTkTT1nYx+DatlOLllCYIHffpI="}'
|
||||
).then(function (paste1) {
|
||||
$.PrivateBin.CryptTool.decipher(
|
||||
's9pmKZKOBN7EVvHpTA8jjLFH3Xlz/0l8lB4+ONPACrM=',
|
||||
'', // no password
|
||||
'{"iv":"WA42mdxIVXUwBqZu7JYNiw==","v":1,"iter":10000,"ks"' +
|
||||
':256,"ts":128,"mode":"gcm","adata":"","cipher":"aes","sa' +
|
||||
'lt":"jN6CjbQMJCM=","ct":"kYYMo5DFG1+w0UHiYXT5pdV0IUuXxzO' +
|
||||
'lslkW/c3DRCbGFROCVkAskHce7HoRczee1N9c5MhHjVMJUIZE02qIS8U' +
|
||||
'yHdJ/GqcPVidTUcj9rnDNWsTXkjVv8jCwHS/cwmAjDTWpwp5ThECN+ov' +
|
||||
'/wNp/NdtTj8Qj7f/T3rfZIOCWfwLH9s4Des35UNcUidfPTNQ1l0Gm0X+' +
|
||||
'r98CCUSYZjQxkZc6hRZBLPQ8EaNVooUwd5eP4GiYlmSDNA0wOSA+5isP' +
|
||||
'YxomVCt+kFf58VBlNhpfNi7BLYAUTPpXT4SfH5drR9+C7NTeZ+tTCYjb' +
|
||||
'U94PzYItOpu8vgnB1/a6BAM5h3m9w+giUb0df4hgTWeZnZxLjo5BN8WV' +
|
||||
'+kdTXMj3/Vv0gw0DQrDcCuX/cBAjpy3lQGwlAN1vXoOIyZJUjMpQRrOL' +
|
||||
'dKvLB+zcmVNtGDbgnfP2IYBzk9NtodpUa27ne0T0ZpwOPlVwevsIVZO2' +
|
||||
'24WLa+iQmmHOWDFFpVDlS0t0fLfOk7Hcb2xFsTxiCIiyKMho/IME1Du3' +
|
||||
'X4e6BVa3hobSSZv0rRtNgY1KcyYPrUPW2fxZ+oik3y9SgGvb7XpjVIta' +
|
||||
'8DWlDWRfZ9kzoweWEYqz9IA8Xd373RefpyuWI25zlHoX3nwljzsZU6dC' +
|
||||
'//h/Dt2DNr+IAvKO3+u23cWoB9kgcZJ2FJuqjLvVfCF+OWcig7zs2pTY' +
|
||||
'JW6Rg6lqbBCxiUUlae6xJrjfv0pzD2VYCLY7v1bVTagppwKzNI3WaluC' +
|
||||
'OrdDYUCxUSe56yd1oAoLPRVbYvomRboUO6cjQhEknERyvt45og2kORJO' +
|
||||
'EJayHW+jZgR0Y0jM3Nk17ubpij2gHxNx9kiLDOiCGSV5mn9mV7qd3HHc' +
|
||||
'OMSykiBgbyzjobi96LT2dIGLeDXTIdPOog8wyobO4jWq0GGs0vBB8oSY' +
|
||||
'XhHvixZLcSjX2KQuHmEoWzmJcr3DavdoXZmAurGWLKjzEdJc5dSD/eNr' +
|
||||
'99gjHX7wphJ6umKMM+fn6PcbYJkhDh2GlJL5COXjXfm/5aj/vuyaRRWZ' +
|
||||
'MZtmnYpGAtAPg7AUG"}'
|
||||
).then(function (paste2) {
|
||||
clean();
|
||||
assert.ok(
|
||||
paste1.includes('securely packed in iron') &&
|
||||
paste2.includes('Sol is right')
|
||||
);
|
||||
});
|
||||
});
|
||||
);
|
||||
clean();
|
||||
const result = typeof paste === 'string' && paste.includes('securely packed in iron');
|
||||
if (!result) console.log(paste);
|
||||
assert.ok(result);
|
||||
}
|
||||
);
|
||||
|
||||
it(
|
||||
'supports ZeroBin ciphertext (SJCL & Base64 1.7)',
|
||||
function () {
|
||||
global.Base64 = require('../base64-1.7').Base64;
|
||||
var clean = jsdom();
|
||||
window.crypto = new WebCrypto();
|
||||
'supports PrivateBin v1 ciphertext no password (SJCL & browser atob)',
|
||||
async function () {
|
||||
delete global.Base64;
|
||||
const clean = jsdom();
|
||||
// ensure zlib is getting loaded
|
||||
$.PrivateBin.Controller.initZ();
|
||||
Object.defineProperty(window, 'crypto', {
|
||||
value: new WebCrypto(),
|
||||
writeable: false,
|
||||
});
|
||||
global.atob = common.atob;
|
||||
|
||||
// Of course you can easily decipher the following texts, if you like.
|
||||
// Bonus points for finding their sources and hidden meanings.
|
||||
return $.PrivateBin.CryptTool.decipher(
|
||||
const paste = await $.PrivateBin.CryptTool.decipher(
|
||||
's9pmKZKOBN7EVvHpTA8jjLFH3Xlz/0l8lB4+ONPACrM=',
|
||||
'', // no password
|
||||
'{"iv":"WA42mdxIVXUwBqZu7JYNiw==","v":1,"iter":10000,"ks"' +
|
||||
':256,"ts":128,"mode":"gcm","adata":"","cipher":"aes","sa' +
|
||||
'lt":"jN6CjbQMJCM=","ct":"kYYMo5DFG1+w0UHiYXT5pdV0IUuXxzO' +
|
||||
'lslkW/c3DRCbGFROCVkAskHce7HoRczee1N9c5MhHjVMJUIZE02qIS8U' +
|
||||
'yHdJ/GqcPVidTUcj9rnDNWsTXkjVv8jCwHS/cwmAjDTWpwp5ThECN+ov' +
|
||||
'/wNp/NdtTj8Qj7f/T3rfZIOCWfwLH9s4Des35UNcUidfPTNQ1l0Gm0X+' +
|
||||
'r98CCUSYZjQxkZc6hRZBLPQ8EaNVooUwd5eP4GiYlmSDNA0wOSA+5isP' +
|
||||
'YxomVCt+kFf58VBlNhpfNi7BLYAUTPpXT4SfH5drR9+C7NTeZ+tTCYjb' +
|
||||
'U94PzYItOpu8vgnB1/a6BAM5h3m9w+giUb0df4hgTWeZnZxLjo5BN8WV' +
|
||||
'+kdTXMj3/Vv0gw0DQrDcCuX/cBAjpy3lQGwlAN1vXoOIyZJUjMpQRrOL' +
|
||||
'dKvLB+zcmVNtGDbgnfP2IYBzk9NtodpUa27ne0T0ZpwOPlVwevsIVZO2' +
|
||||
'24WLa+iQmmHOWDFFpVDlS0t0fLfOk7Hcb2xFsTxiCIiyKMho/IME1Du3' +
|
||||
'X4e6BVa3hobSSZv0rRtNgY1KcyYPrUPW2fxZ+oik3y9SgGvb7XpjVIta' +
|
||||
'8DWlDWRfZ9kzoweWEYqz9IA8Xd373RefpyuWI25zlHoX3nwljzsZU6dC' +
|
||||
'//h/Dt2DNr+IAvKO3+u23cWoB9kgcZJ2FJuqjLvVfCF+OWcig7zs2pTY' +
|
||||
'JW6Rg6lqbBCxiUUlae6xJrjfv0pzD2VYCLY7v1bVTagppwKzNI3WaluC' +
|
||||
'OrdDYUCxUSe56yd1oAoLPRVbYvomRboUO6cjQhEknERyvt45og2kORJO' +
|
||||
'EJayHW+jZgR0Y0jM3Nk17ubpij2gHxNx9kiLDOiCGSV5mn9mV7qd3HHc' +
|
||||
'OMSykiBgbyzjobi96LT2dIGLeDXTIdPOog8wyobO4jWq0GGs0vBB8oSY' +
|
||||
'XhHvixZLcSjX2KQuHmEoWzmJcr3DavdoXZmAurGWLKjzEdJc5dSD/eNr' +
|
||||
'99gjHX7wphJ6umKMM+fn6PcbYJkhDh2GlJL5COXjXfm/5aj/vuyaRRWZ' +
|
||||
'MZtmnYpGAtAPg7AUG"}'
|
||||
);
|
||||
clean();
|
||||
const result = typeof paste === 'string' && paste.includes('Sol is right');
|
||||
if (!result) console.log(paste);
|
||||
assert.ok(result);
|
||||
}
|
||||
);
|
||||
|
||||
it(
|
||||
'supports ZeroBin ciphertext with password (SJCL & Base64 1.7)',
|
||||
async function () {
|
||||
global.Base64 = require('../base64-1.7').Base64;
|
||||
const clean = jsdom();
|
||||
Object.defineProperty(window, 'crypto', {
|
||||
value: new WebCrypto(),
|
||||
writeable: false,
|
||||
});
|
||||
global.atob = common.atob;
|
||||
|
||||
// Of course you can easily decipher the following texts, if you like.
|
||||
// Bonus points for finding their sources and hidden meanings.
|
||||
const paste = await $.PrivateBin.CryptTool.decipher(
|
||||
'6t2qsmLyfXIokNCL+3/yl15rfTUBQvm5SOnFPvNE7Q8=',
|
||||
// -- "That's amazing. I've got the same combination on my luggage."
|
||||
Array.apply(0, Array(6)).map((_,b) => b + 1).join(''),
|
||||
@@ -146,54 +178,74 @@ describe('CryptTool', function () {
|
||||
'7mNNo7xba/YT9KoPDaniqnYqb+q2pX1WNWE7dLS2wfroMAS3kh8P22DA' +
|
||||
'V37AeiNoD2PcI6ZcHbRdPa+XRrRcJhSPPW7UQ0z4OvBfjdu/w390QxAx' +
|
||||
'SxvZewoh49fKKB6hTsRnZb4tpHkjlww=="}'
|
||||
).then(function (paste1) {
|
||||
$.PrivateBin.CryptTool.decipher(
|
||||
's9pmKZKOBN7EVvHpTA8jjLFH3Xlz/0l8lB4+ONPACrM=',
|
||||
'', // no password
|
||||
'{"iv":"Z7lAZQbkrqGMvruxoSm6Pw==","v":1,"iter":10000,"ks"' +
|
||||
':256,"ts":128,"mode":"gcm","adata":"","cipher":"aes","sa' +
|
||||
'lt":"jN6CjbQMJCM=","ct":"PuOPWB3i2FPcreSrLYeQf84LdE8RHjs' +
|
||||
'c+MGtiOr4b7doNyWKYtkNorbRadxaPnEee2/Utrp1MIIfY5juJSy8RGw' +
|
||||
'EPX5ciWcYe6EzsXWznsnvhmpKNj9B7eIIrfSbxfy8E2e/g7xav1nive+' +
|
||||
'ljToka3WT1DZ8ILQd/NbnJeHWaoSEOfvz8+d8QJPb1tNZvs7zEY95Dum' +
|
||||
'QwbyOsIMKAvcZHJ9OJNpujXzdMyt6DpcFcqlldWBZ/8q5rAUTw0HNx/r' +
|
||||
'CgbhAxRYfNoTLIcMM4L0cXbPSgCjwf5FuO3EdE13mgEDhcClW79m0Qvc' +
|
||||
'nIh8xgzYoxLbp0+AwvC/MbZM8savN/0ieWr2EKkZ04ggiOIEyvfCUuNp' +
|
||||
'rQBYO+y8kKduNEN6by0Yf4LRCPfmwN+GezDLuzTnZIMhPbGqUAdgV6Ex' +
|
||||
'qK2ULEEIrQEMoOuQIxfoMhqLlzG79vXGt2O+BY+4IiYfvmuRLks4UXfy' +
|
||||
'HqxPXTJg48IYbGs0j4TtJPUgp3523EyYLwEGyVTAuWhYAmVIwd/hoV7d' +
|
||||
'7tmfcF73w9dufDFI3LNca2KxzBnWNPYvIZKBwWbq8ncxkb191dP6mjEi' +
|
||||
'7NnhqVk5A6vIBbu4AC5PZf76l6yep4xsoy/QtdDxCMocCXeAML9MQ9uP' +
|
||||
'QbuspOKrBvMfN5igA1kBqasnxI472KBNXsdZnaDddSVUuvhTcETM="}'
|
||||
).then(function (paste2) {
|
||||
clean();
|
||||
delete global.Base64;
|
||||
assert.ok(
|
||||
paste1.includes('securely packed in iron') &&
|
||||
paste2.includes('Sol is right')
|
||||
);
|
||||
});
|
||||
);
|
||||
clean();
|
||||
delete global.Base64;
|
||||
const result = typeof paste === 'string' && paste.includes('securely packed in iron');
|
||||
if (!result) console.log(paste);
|
||||
assert.ok(result);
|
||||
}
|
||||
);
|
||||
|
||||
it(
|
||||
'supports ZeroBin ciphertext no password (SJCL & Base64 1.7)',
|
||||
async function () {
|
||||
global.Base64 = require('../base64-1.7').Base64;
|
||||
const clean = jsdom();
|
||||
Object.defineProperty(window, 'crypto', {
|
||||
value: new WebCrypto(),
|
||||
writeable: false,
|
||||
});
|
||||
global.atob = common.atob;
|
||||
|
||||
const paste = await $.PrivateBin.CryptTool.decipher(
|
||||
's9pmKZKOBN7EVvHpTA8jjLFH3Xlz/0l8lB4+ONPACrM=',
|
||||
'', // no password
|
||||
'{"iv":"Z7lAZQbkrqGMvruxoSm6Pw==","v":1,"iter":10000,"ks"' +
|
||||
':256,"ts":128,"mode":"gcm","adata":"","cipher":"aes","sa' +
|
||||
'lt":"jN6CjbQMJCM=","ct":"PuOPWB3i2FPcreSrLYeQf84LdE8RHjs' +
|
||||
'c+MGtiOr4b7doNyWKYtkNorbRadxaPnEee2/Utrp1MIIfY5juJSy8RGw' +
|
||||
'EPX5ciWcYe6EzsXWznsnvhmpKNj9B7eIIrfSbxfy8E2e/g7xav1nive+' +
|
||||
'ljToka3WT1DZ8ILQd/NbnJeHWaoSEOfvz8+d8QJPb1tNZvs7zEY95Dum' +
|
||||
'QwbyOsIMKAvcZHJ9OJNpujXzdMyt6DpcFcqlldWBZ/8q5rAUTw0HNx/r' +
|
||||
'CgbhAxRYfNoTLIcMM4L0cXbPSgCjwf5FuO3EdE13mgEDhcClW79m0Qvc' +
|
||||
'nIh8xgzYoxLbp0+AwvC/MbZM8savN/0ieWr2EKkZ04ggiOIEyvfCUuNp' +
|
||||
'rQBYO+y8kKduNEN6by0Yf4LRCPfmwN+GezDLuzTnZIMhPbGqUAdgV6Ex' +
|
||||
'qK2ULEEIrQEMoOuQIxfoMhqLlzG79vXGt2O+BY+4IiYfvmuRLks4UXfy' +
|
||||
'HqxPXTJg48IYbGs0j4TtJPUgp3523EyYLwEGyVTAuWhYAmVIwd/hoV7d' +
|
||||
'7tmfcF73w9dufDFI3LNca2KxzBnWNPYvIZKBwWbq8ncxkb191dP6mjEi' +
|
||||
'7NnhqVk5A6vIBbu4AC5PZf76l6yep4xsoy/QtdDxCMocCXeAML9MQ9uP' +
|
||||
'QbuspOKrBvMfN5igA1kBqasnxI472KBNXsdZnaDddSVUuvhTcETM="}'
|
||||
);
|
||||
clean();
|
||||
delete global.Base64;
|
||||
const result = typeof paste === 'string' && paste.includes('Sol is right');
|
||||
if (!result) console.log(paste);
|
||||
assert.ok(result);
|
||||
}
|
||||
);
|
||||
|
||||
it('does not truncate messages', async function () {
|
||||
let message = fs.readFileSync('test/compression-sample.txt', 'utf8'),
|
||||
const message = fs.readFileSync('test/compression-sample.txt', 'ascii').trim(),
|
||||
clean = jsdom();
|
||||
window.crypto = new WebCrypto();
|
||||
Object.defineProperty(window, 'crypto', {
|
||||
value: new WebCrypto(),
|
||||
writeable: false,
|
||||
});
|
||||
// ensure zlib is getting loaded
|
||||
$.PrivateBin.Controller.initZ();
|
||||
let cipherMessage = await $.PrivateBin.CryptTool.cipher(
|
||||
global.atob = common.atob;
|
||||
global.btoa = common.btoa;
|
||||
const cipherMessage = await $.PrivateBin.CryptTool.cipher(
|
||||
'foo', 'bar', message, []
|
||||
),
|
||||
plaintext = await $.PrivateBin.CryptTool.decipher(
|
||||
'foo', 'bar', cipherMessage
|
||||
'foo', 'bar', cipherMessage
|
||||
);
|
||||
clean();
|
||||
assert.strictEqual(
|
||||
message,
|
||||
plaintext
|
||||
);
|
||||
const result = (message === plaintext);
|
||||
if (!result) console.log(plaintext, cipherMessage);
|
||||
assert.ok(result);
|
||||
});
|
||||
|
||||
it('can en- and decrypt a particular message (#260)', function () {
|
||||
@@ -201,8 +253,6 @@ describe('CryptTool', function () {
|
||||
'string',
|
||||
'string',
|
||||
async function (key, password) {
|
||||
// pause to let async functions conclude
|
||||
await new Promise(resolve => setTimeout(resolve, 300));
|
||||
const message = `
|
||||
1 subgoal
|
||||
|
||||
@@ -225,18 +275,23 @@ isWhile : interp (while expr sBody) (MemElem mem) =
|
||||
======================== ( 1 / 1 )
|
||||
conseq_or_bottom inv (interp (nth_iterate sBody n) (MemElem mem))
|
||||
`;
|
||||
let clean = jsdom();
|
||||
const clean = jsdom();
|
||||
// ensure zlib is getting loaded
|
||||
$.PrivateBin.Controller.initZ();
|
||||
window.crypto = new WebCrypto();
|
||||
let cipherMessage = await $.PrivateBin.CryptTool.cipher(
|
||||
Object.defineProperty(window, 'crypto', {
|
||||
value: new WebCrypto(),
|
||||
writeable: false,
|
||||
});
|
||||
const cipherMessage = await $.PrivateBin.CryptTool.cipher(
|
||||
key, password, message, []
|
||||
),
|
||||
plaintext = await $.PrivateBin.CryptTool.decipher(
|
||||
key, password, cipherMessage
|
||||
);
|
||||
clean();
|
||||
return message === plaintext;
|
||||
const result = (message === plaintext);
|
||||
if (!result) console.log(plaintext, cipherMessage);
|
||||
return result;
|
||||
}
|
||||
),
|
||||
{tests: 3});
|
||||
@@ -244,23 +299,27 @@ conseq_or_bottom inv (interp (nth_iterate sBody n) (MemElem mem))
|
||||
});
|
||||
|
||||
describe('getSymmetricKey', function () {
|
||||
this.timeout(30000);
|
||||
var keys = [];
|
||||
this.timeout(10000);
|
||||
let keys = [];
|
||||
|
||||
// the parameter is used to ensure the test is run more then one time
|
||||
jsc.property(
|
||||
'returns random, non-empty keys',
|
||||
'integer',
|
||||
function(counter) {
|
||||
var clean = jsdom();
|
||||
window.crypto = new WebCrypto();
|
||||
var key = $.PrivateBin.CryptTool.getSymmetricKey(),
|
||||
result = (key !== '' && keys.indexOf(key) === -1);
|
||||
keys.push(key);
|
||||
clean();
|
||||
return result;
|
||||
}
|
||||
);
|
||||
it('returns random, non-empty keys', function () {
|
||||
jsc.assert(jsc.forall(
|
||||
'integer',
|
||||
function(counter) {
|
||||
const clean = jsdom();
|
||||
Object.defineProperty(window, 'crypto', {
|
||||
value: new WebCrypto(),
|
||||
writeable: false,
|
||||
});
|
||||
const key = $.PrivateBin.CryptTool.getSymmetricKey(),
|
||||
result = (key !== '' && keys.indexOf(key) === -1);
|
||||
keys.push(key);
|
||||
clean();
|
||||
return result;
|
||||
}
|
||||
),
|
||||
{tests: 10});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -229,30 +229,30 @@ describe('Helper', function () {
|
||||
cleanup();
|
||||
});
|
||||
|
||||
/* TODO test fails since jsDOM version 17 - document.cookie remains empty
|
||||
jsc.property(
|
||||
'returns the requested cookie',
|
||||
jsc.nearray(jsc.nearray(common.jscAlnumString())),
|
||||
jsc.nearray(jsc.nearray(common.jscAlnumString())),
|
||||
function (labels, values) {
|
||||
var selectedKey = '', selectedValue = '',
|
||||
cookieArray = [];
|
||||
let selectedKey = '', selectedValue = '';
|
||||
const clean = jsdom();
|
||||
labels.forEach(function(item, i) {
|
||||
var key = item.join(''),
|
||||
const key = item.join(''),
|
||||
value = (values[i] || values[0]).join('');
|
||||
cookieArray.push(key + '=' + value);
|
||||
document.cookie = key + '=' + value;
|
||||
if (Math.random() < 1 / i || selectedKey === key)
|
||||
{
|
||||
selectedKey = key;
|
||||
selectedValue = value;
|
||||
}
|
||||
});
|
||||
var clean = jsdom('', {cookie: cookieArray}),
|
||||
result = $.PrivateBin.Helper.getCookie(selectedKey);
|
||||
const result = $.PrivateBin.Helper.getCookie(selectedKey);
|
||||
$.PrivateBin.Helper.reset();
|
||||
clean();
|
||||
return result === selectedValue;
|
||||
}
|
||||
);
|
||||
); */
|
||||
});
|
||||
|
||||
describe('baseUri', function () {
|
||||
@@ -290,5 +290,31 @@ describe('Helper', function () {
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
describe('formatBytes', function () {
|
||||
jsc.property('returns 0 B for 0 bytes', function () {
|
||||
return $.PrivateBin.Helper.formatBytes(0) === '0 B';
|
||||
});
|
||||
|
||||
jsc.property('formats bytes < 1000 as B', function () {
|
||||
return $.PrivateBin.Helper.formatBytes(500) === '500 B';
|
||||
});
|
||||
|
||||
jsc.property('formats kibibytes correctly', function () {
|
||||
return $.PrivateBin.Helper.formatBytes(1500) === '1.46 KiB';
|
||||
});
|
||||
|
||||
jsc.property('formats mebibytes correctly', function () {
|
||||
return $.PrivateBin.Helper.formatBytes(2 * 1000 * 1000) === '1.91 MiB';
|
||||
});
|
||||
|
||||
jsc.property('formats gibibytes correctly', function () {
|
||||
return $.PrivateBin.Helper.formatBytes(3.45 * 1000 * 1000 * 1000) === '3.21 GiB';
|
||||
});
|
||||
|
||||
jsc.property('rounds to two decimal places', function () {
|
||||
return $.PrivateBin.Helper.formatBytes(1234567) === '1.18 MiB';
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -94,7 +94,6 @@ describe('Model', function () {
|
||||
url.query = queryStart.concat(pasteId, queryEnd);
|
||||
const pasteIdString = pasteId.join(''),
|
||||
clean = jsdom('', {url: common.urlToString(url)});
|
||||
global.URL = require('jsdom-url').URL;
|
||||
const result = $.PrivateBin.Model.getPasteId();
|
||||
$.PrivateBin.Model.reset();
|
||||
clean();
|
||||
@@ -107,7 +106,6 @@ describe('Model', function () {
|
||||
function (url) {
|
||||
let clean = jsdom('', {url: common.urlToString(url)}),
|
||||
result = false;
|
||||
global.URL = require('jsdom-url').URL;
|
||||
try {
|
||||
$.PrivateBin.Model.getPasteId();
|
||||
}
|
||||
@@ -131,7 +129,7 @@ describe('Model', function () {
|
||||
'returns the fragment of a v1 URL',
|
||||
common.jscUrl(),
|
||||
function (url) {
|
||||
url.fragment = common.btoa(url.fragment.padStart(32, '\u0000'));
|
||||
url.fragment = '0OIl'; // any non-base58 string
|
||||
const clean = jsdom('', {url: common.urlToString(url)}),
|
||||
result = $.PrivateBin.Model.getPasteKey();
|
||||
$.PrivateBin.Model.reset();
|
||||
@@ -140,17 +138,17 @@ describe('Model', function () {
|
||||
}
|
||||
);
|
||||
jsc.property(
|
||||
'returns the v1 fragment stripped of trailing query parts',
|
||||
'returns the fragment stripped of trailing query parts',
|
||||
common.jscUrl(),
|
||||
jsc.array(common.jscHashString()),
|
||||
function (url, trail) {
|
||||
const fragmentString = common.btoa(url.fragment.padStart(32, '\u0000'));
|
||||
url.fragment = fragmentString + '&' + trail.join('');
|
||||
const fragment = url.fragment.padStart(32, '\u0000');
|
||||
url.fragment = $.PrivateBin.CryptTool.base58encode(fragment) + '&' + trail.join('');
|
||||
const clean = jsdom('', {url: common.urlToString(url)}),
|
||||
result = $.PrivateBin.Model.getPasteKey();
|
||||
$.PrivateBin.Model.reset();
|
||||
clean();
|
||||
return fragmentString === result;
|
||||
return fragment === result;
|
||||
}
|
||||
);
|
||||
jsc.property(
|
||||
|
||||
@@ -30,11 +30,11 @@ describe('PasteStatus', function () {
|
||||
const expected1 = common.urlToString(url1).replace(/&(gt|lt)$/, '&$1a'),
|
||||
expected2 = common.urlToString(url2).replace(/&(gt|lt)$/, '&$1a'),
|
||||
clean = jsdom();
|
||||
$('body').html('<div><div id="deletelink"></div><div id="pastelink"></div></div>');
|
||||
$('body').html('<a href="#" id="deletelink"><span></span></a><div id="pastelink"></div>');
|
||||
$.PrivateBin.PasteStatus.init();
|
||||
$.PrivateBin.PasteStatus.createPasteNotification(expected1, expected2);
|
||||
const result1 = $('#pasteurl')[0].href,
|
||||
result2 = $('#deletelink a')[0].href;
|
||||
result2 = $('#deletelink')[0].href;
|
||||
clean();
|
||||
return result1 === expected1 && result2 === expected2;
|
||||
}
|
||||
@@ -155,7 +155,7 @@ describe('PasteStatus', function () {
|
||||
'\t\t<title>PrivateBin</title>\n' +
|
||||
'\t</head>\n' +
|
||||
'\t<body>\n' +
|
||||
'\t\t<p>Your paste is <a id="pasteurl" href="' + shortUrlString + '">' + shortUrlString + '</a> <span id="copyhint">(Hit [Ctrl]+[c] to copy)</span></p>\n' +
|
||||
'\t\t<p>Your paste is <a id="pasteurl" href="' + shortUrlString + '">' + shortUrlString + '</a> <span id="copyhint">(Hit <kbd>Ctrl</kbd>+<kbd>c</kbd> to copy)</span></p>\n' +
|
||||
'\t</body>\n' +
|
||||
'</html>',
|
||||
clean = jsdom();
|
||||
@@ -255,4 +255,3 @@ describe('PasteStatus', function () {
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ describe('Prompt', function () {
|
||||
'returns the password fed into the dialog',
|
||||
'string',
|
||||
function (password) {
|
||||
password = password.replace(/\r+/g, '');
|
||||
password = password.replace(/\r+|\n+/g, '');
|
||||
var clean = jsdom('', {url: 'ftp://example.com/?0000000000000000'});
|
||||
$('body').html(
|
||||
'<div id="passwordmodal" class="modal fade" role="dialog">' +
|
||||
@@ -32,7 +32,8 @@ describe('Prompt', function () {
|
||||
//var result = $.PrivateBin.Prompt.getPassword();
|
||||
var result = $('#passworddecrypt').val();
|
||||
$.PrivateBin.Model.reset();
|
||||
clean();
|
||||
// TODO triggers error messages in jsDOM since version 11
|
||||
//clean();
|
||||
return result === password;
|
||||
}
|
||||
);
|
||||
|
||||
@@ -621,7 +621,7 @@ describe('TopNav', function () {
|
||||
'returns the contents of the password input',
|
||||
'string',
|
||||
function (password) {
|
||||
password = password.replace(/\r+/g, '');
|
||||
password = password.replace(/\r+|\n+/g, '');
|
||||
var results = [];
|
||||
$('body').html(
|
||||
'<nav><div id="navbar"><ul><li><div id="password" ' +
|
||||
@@ -727,11 +727,11 @@ describe('TopNav', function () {
|
||||
cleanup();
|
||||
});
|
||||
|
||||
// TODO triggers error messages in jsDOM since version 12, but passes
|
||||
it(
|
||||
'displays raw text view correctly',
|
||||
function () {
|
||||
const clean = jsdom('', {url: 'https://privatebin.net/?0123456789abcdef#0'});
|
||||
global.URL = require('jsdom-url').URL;
|
||||
$('body').html('<button id="rawtextbutton"></button>');
|
||||
const sample = 'example';
|
||||
$.PrivateBin.PasteViewer.setText(sample);
|
||||
|
||||
@@ -18,11 +18,6 @@ describe('UiHelper', function () {
|
||||
const expected = common.urlToString(url),
|
||||
clean = jsdom('', {url: expected});
|
||||
|
||||
// make window.location.href writable
|
||||
Object.defineProperty(window.location, 'href', {
|
||||
writable: true,
|
||||
value: window.location.href
|
||||
});
|
||||
$.PrivateBin.UiHelper.mockHistoryChange();
|
||||
$.PrivateBin.Helper.reset();
|
||||
var result = window.location.href;
|
||||
@@ -40,11 +35,6 @@ describe('UiHelper', function () {
|
||||
const expected = common.urlToString(url),
|
||||
clean = jsdom('', {url: expected});
|
||||
|
||||
// make window.location.href writable
|
||||
Object.defineProperty(window.location, 'href', {
|
||||
writable: true,
|
||||
value: window.location.href
|
||||
});
|
||||
$.PrivateBin.UiHelper.mockHistoryChange([
|
||||
{type: 'newpaste'}, '', expected
|
||||
]);
|
||||
@@ -57,6 +47,8 @@ describe('UiHelper', function () {
|
||||
});
|
||||
|
||||
describe('reloadHome', function () {
|
||||
// TODO triggers error messages in jsDOM since version 11
|
||||
/*
|
||||
this.timeout(30000);
|
||||
before(function () {
|
||||
$.PrivateBin.Helper.reset();
|
||||
@@ -71,11 +63,6 @@ describe('UiHelper', function () {
|
||||
delete(url.fragment);
|
||||
const expected = common.urlToString(url);
|
||||
|
||||
// make window.location.href writable
|
||||
Object.defineProperty(window.location, 'href', {
|
||||
writable: true,
|
||||
value: window.location.href
|
||||
});
|
||||
$.PrivateBin.UiHelper.reloadHome();
|
||||
$.PrivateBin.Helper.reset();
|
||||
var result = window.location.href;
|
||||
@@ -83,6 +70,7 @@ describe('UiHelper', function () {
|
||||
return expected === result;
|
||||
}
|
||||
);
|
||||
*/
|
||||
});
|
||||
|
||||
describe('isVisible', function () {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
'use strict';
|
||||
|
||||
(function() {
|
||||
(function () {
|
||||
let ret;
|
||||
|
||||
async function initialize() {
|
||||
@@ -23,16 +23,7 @@
|
||||
_abort: errno => { console.error(`Error: ${errno}`) },
|
||||
_grow: () => { },
|
||||
};
|
||||
|
||||
let buff;
|
||||
if (typeof fs === 'object') {
|
||||
buff = fs.readFileSync('zlib-1.3.1.wasm');
|
||||
} else {
|
||||
const resp = await fetch('js/zlib-1.3.1.wasm');
|
||||
buff = await resp.arrayBuffer();
|
||||
}
|
||||
const module = await WebAssembly.compile(buff);
|
||||
const ins = await WebAssembly.instantiate(module, { env });
|
||||
const ins = (await WebAssembly.instantiateStreaming(fetch('js/zlib-1.3.1.wasm'), { env })).instance;
|
||||
|
||||
const srcPtr = ins.exports._malloc(CHUNK_SIZE);
|
||||
const dstPtr = ins.exports._malloc(CHUNK_SIZE);
|
||||
@@ -116,28 +107,28 @@
|
||||
}
|
||||
|
||||
ret = {
|
||||
inflate(rawDeflateBuffer) {
|
||||
const rawInf = new RawInf();
|
||||
for (let offset = 0; offset < rawDeflateBuffer.length; offset += CHUNK_SIZE) {
|
||||
const end = Math.min(offset + CHUNK_SIZE, rawDeflateBuffer.length);
|
||||
const chunk = rawDeflateBuffer.subarray(offset, end);
|
||||
rawInf.inflate(chunk);
|
||||
}
|
||||
const ret = rawInf.getBuffer();
|
||||
rawInf.destroy();
|
||||
return ret;
|
||||
},
|
||||
deflate(rawInflateBuffer) {
|
||||
const rawDef = new RawDef();
|
||||
for (let offset = 0; offset < rawInflateBuffer.length; offset += CHUNK_SIZE) {
|
||||
const end = Math.min(offset + CHUNK_SIZE, rawInflateBuffer.length);
|
||||
const chunk = rawInflateBuffer.subarray(offset, end);
|
||||
rawDef.deflate(chunk, rawInflateBuffer.length <= offset + CHUNK_SIZE);
|
||||
}
|
||||
const ret = rawDef.getBuffer();
|
||||
rawDef.destroy();
|
||||
return ret;
|
||||
},
|
||||
inflate(rawDeflateBuffer) {
|
||||
const rawInf = new RawInf();
|
||||
for (let offset = 0; offset < rawDeflateBuffer.length; offset += CHUNK_SIZE) {
|
||||
const end = Math.min(offset + CHUNK_SIZE, rawDeflateBuffer.length);
|
||||
const chunk = rawDeflateBuffer.subarray(offset, end);
|
||||
rawInf.inflate(chunk);
|
||||
}
|
||||
const ret = rawInf.getBuffer();
|
||||
rawInf.destroy();
|
||||
return ret;
|
||||
},
|
||||
deflate(rawInflateBuffer) {
|
||||
const rawDef = new RawDef();
|
||||
for (let offset = 0; offset < rawInflateBuffer.length; offset += CHUNK_SIZE) {
|
||||
const end = Math.min(offset + CHUNK_SIZE, rawInflateBuffer.length);
|
||||
const chunk = rawInflateBuffer.subarray(offset, end);
|
||||
rawDef.deflate(chunk, rawInflateBuffer.length <= offset + CHUNK_SIZE);
|
||||
}
|
||||
const ret = rawDef.getBuffer();
|
||||
rawDef.destroy();
|
||||
return ret;
|
||||
},
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -45,7 +45,18 @@ class Configuration
|
||||
'defaultformatter' => 'plaintext',
|
||||
'syntaxhighlightingtheme' => '',
|
||||
'sizelimit' => 10485760,
|
||||
'templateselection' => false,
|
||||
'template' => 'bootstrap',
|
||||
'availabletemplates' => array(
|
||||
'bootstrap5',
|
||||
'bootstrap',
|
||||
'bootstrap-page',
|
||||
'bootstrap-dark',
|
||||
'bootstrap-dark-page',
|
||||
'bootstrap-compact',
|
||||
'bootstrap-compact-page',
|
||||
'page',
|
||||
),
|
||||
'info' => 'More information on the <a href=\'https://privatebin.info/\'>project page</a>.',
|
||||
'notice' => '',
|
||||
'languageselection' => false,
|
||||
@@ -54,7 +65,7 @@ class Configuration
|
||||
'qrcode' => true,
|
||||
'email' => true,
|
||||
'icon' => 'identicon',
|
||||
'cspheader' => 'default-src \'none\'; base-uri \'self\'; form-action \'none\'; manifest-src \'self\'; connect-src * blob:; script-src \'self\' \'unsafe-eval\'; style-src \'self\'; font-src \'self\'; frame-ancestors \'none\'; img-src \'self\' data: blob:; media-src blob:; object-src blob:; sandbox allow-same-origin allow-scripts allow-forms allow-popups allow-modals allow-downloads',
|
||||
'cspheader' => 'default-src \'none\'; base-uri \'self\'; form-action \'none\'; manifest-src \'self\'; connect-src * blob:; script-src \'self\' \'wasm-unsafe-eval\'; style-src \'self\'; font-src \'self\'; frame-ancestors \'none\'; frame-src blob:; img-src \'self\' data: blob:; media-src blob:; object-src blob:; sandbox allow-same-origin allow-scripts allow-forms allow-popups allow-modals allow-downloads',
|
||||
'zerobincompatibility' => false,
|
||||
'httpwarning' => true,
|
||||
'compression' => 'zlib',
|
||||
@@ -103,16 +114,16 @@ class Configuration
|
||||
'js/base64-1.7.js' => 'sha512-JdwsSP3GyHR+jaCkns9CL9NTt4JUJqm/BsODGmYhBcj5EAPKcHYh+OiMfyHbcDLECe17TL0hjXADFkusAqiYgA==',
|
||||
'js/bootstrap-3.4.1.js' => 'sha512-oBTprMeNEKCnqfuqKd6sbvFzmFQtlXS3e0C/RGFV0hD6QzhHV+ODfaQbAlmY6/q0ubbwlAM/nCJjkrgA3waLzg==',
|
||||
'js/bootstrap-5.3.3.js' => 'sha512-in2rcOpLTdJ7/pw5qjF4LWHFRtgoBDxXCy49H4YGOcVdGiPaQucGIbOqxt1JvmpvOpq3J/C7VTa0FlioakB2gQ==',
|
||||
'js/dark-mode-switch.js' => 'sha512-CCbdHdeWDbDO7aqFFmhgnvFESzaILHbUYmbhNjTpcjyO/XYdouQ9Pw8W9rpV8oJT1TsK5FbwSHU1oazmnb7BWA==',
|
||||
'js/dark-mode-switch.js' => 'sha512-BhY7dNU14aDN5L+muoUmA66x0CkYUWkQT0nxhKBLP/o2d7jE025+dvWJa4OiYffBGEFgmhrD/Sp+QMkxGMTz2g==',
|
||||
'js/jquery-3.7.1.js' => 'sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==',
|
||||
'js/kjua-0.9.0.js' => 'sha512-CVn7af+vTMBd9RjoS4QM5fpLFEOtBCoB0zPtaqIDC7sF4F8qgUSRFQQpIyEDGsr6yrjbuOLzdf20tkHHmpaqwQ==',
|
||||
'js/legacy.js' => 'sha512-LYos+qXHIRqFf5ZPNphvtTB0cgzHUizu2wwcOwcwz/VIpRv9lpcBgPYz4uq6jx0INwCAj6Fbnl5HoKiLufS2jg==',
|
||||
'js/legacy.js' => 'sha512-UxW/TOZKon83n6dk/09GsYKIyeO5LeBHokxyIq+r7KFS5KMBeIB/EM7NrkVYIezwZBaovnyNtY2d9tKFicRlXg==',
|
||||
'js/prettify.js' => 'sha512-puO0Ogy++IoA2Pb9IjSxV1n4+kQkKXYAEUtVzfZpQepyDPyXk8hokiYDS7ybMogYlyyEIwMLpZqVhCkARQWLMg==',
|
||||
'js/privatebin.js' => 'sha512-JUj/Sbl/bMHlIoIUT1U9e89JU33fDBxCxLSGxwwaeydBFXOBHyfdF7hwSIjgbPxb4d9CO7CSe4meouTIRMy8Vg==',
|
||||
'js/purify-3.1.7.js' => 'sha512-LegvqULiMtOfboJZw9MpETN/b+xnLRXZI90gG7oIFHW+yAeHmKvRtEUbiMFx2WvUqQoL9XB3gwU+hWXUT0X+8A==',
|
||||
'js/privatebin.js' => 'sha512-i0l0rh+NCY8Oeg9SxzQREHin6egXJ6sdIC84RTEsBpBNhYGObv8QEdRng1dMERZmw4olVeXx2ZCkusTyT1G+SA==',
|
||||
'js/purify-3.2.6.js' => 'sha512-zqwL4OoBLFx89QPewkz4Lz5CSA2ktU+f31fuECkF0iK3Id5qd3Zpq5dMby8KwHjIEpsUgOqwF58cnmcaNem0EA==',
|
||||
'js/rawinflate-0.3.js' => 'sha512-g8uelGgJW9A/Z1tB6Izxab++oj5kdD7B4qC7DHwZkB6DGMXKyzx7v5mvap2HXueI2IIn08YlRYM56jwWdm2ucQ==',
|
||||
'js/showdown-2.1.0.js' => 'sha512-WYXZgkTR0u/Y9SVIA4nTTOih0kXMEd8RRV6MLFdL6YU8ymhR528NLlYQt1nlJQbYz4EW+ZsS0fx1awhiQJme1Q==',
|
||||
'js/zlib-1.3.1.js' => 'sha512-Z90oppVx/mn0DG2k9airjFVQuliELlXLeT3SRiO6MLiUSbhGlAq+UFwmYbG4i9mwW87dkG8fgJPapGwnUq7Osg==',
|
||||
'js/zlib-1.3.1-1.js' => 'sha512-5bU9IIP4PgBrOKLZvGWJD4kgfQrkTz8Z3Iqeu058mbQzW3mCumOU6M3UVbVZU9rrVoVwaW4cZK8U8h5xjF88eQ==',
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ class Controller
|
||||
*
|
||||
* @const string
|
||||
*/
|
||||
const VERSION = '1.7.5';
|
||||
const VERSION = '1.7.8';
|
||||
|
||||
/**
|
||||
* minimal required PHP version
|
||||
@@ -112,10 +112,12 @@ class Controller
|
||||
*
|
||||
* initializes and runs PrivateBin
|
||||
*
|
||||
* @param ?Configuration $config
|
||||
*
|
||||
* @access public
|
||||
* @throws Exception
|
||||
*/
|
||||
public function __construct()
|
||||
public function __construct(?Configuration $config = null)
|
||||
{
|
||||
if (version_compare(PHP_VERSION, self::MIN_PHP_VERSION) < 0) {
|
||||
error_log(I18n::_('%s requires php %s or above to work. Sorry.', I18n::_('PrivateBin'), self::MIN_PHP_VERSION));
|
||||
@@ -126,7 +128,8 @@ class Controller
|
||||
return;
|
||||
}
|
||||
|
||||
// load config from ini file, initialize required classes
|
||||
// load config (using ini file by default) & initialize required classes
|
||||
$this->_conf = $config ?? new Configuration();
|
||||
$this->_init();
|
||||
|
||||
switch ($this->_request->getOperation()) {
|
||||
@@ -174,12 +177,21 @@ class Controller
|
||||
*/
|
||||
private function _init()
|
||||
{
|
||||
$this->_conf = new Configuration;
|
||||
$this->_model = new Model($this->_conf);
|
||||
$this->_request = new Request;
|
||||
$this->_urlBase = $this->_request->getRequestUri();
|
||||
|
||||
// set default language
|
||||
$this->_setDefaultLanguage();
|
||||
$this->_setDefaultTemplate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set default language
|
||||
*
|
||||
* @access private
|
||||
*/
|
||||
private function _setDefaultLanguage()
|
||||
{
|
||||
$lang = $this->_conf->getKey('languagedefault');
|
||||
I18n::setLanguageFallback($lang);
|
||||
// force default language, if language selection is disabled and a default is set
|
||||
@@ -189,6 +201,25 @@ class Controller
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set default template
|
||||
*
|
||||
* @access private
|
||||
*/
|
||||
private function _setDefaultTemplate()
|
||||
{
|
||||
$templates = $this->_conf->getKey('availabletemplates');
|
||||
$template = $this->_conf->getKey('template');
|
||||
TemplateSwitcher::setAvailableTemplates($templates);
|
||||
TemplateSwitcher::setTemplateFallback($template);
|
||||
|
||||
// force default template, if template selection is disabled and a default is set
|
||||
if (!$this->_conf->getKey('templateselection') && !empty($template)) {
|
||||
$_COOKIE['template'] = $template;
|
||||
setcookie('template', $template, array('SameSite' => 'Lax', 'Secure' => true));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Turn off browser caching
|
||||
*
|
||||
@@ -400,6 +431,13 @@ class Controller
|
||||
setcookie('lang', $languageselection, array('SameSite' => 'Lax', 'Secure' => true));
|
||||
}
|
||||
|
||||
// set template cookie if that functionality was enabled
|
||||
$templateselection = '';
|
||||
if ($this->_conf->getKey('templateselection')) {
|
||||
$templateselection = TemplateSwitcher::getTemplate();
|
||||
setcookie('template', $templateselection, array('SameSite' => 'Lax', 'Secure' => true));
|
||||
}
|
||||
|
||||
// strip policies that are unsupported in meta tag
|
||||
$metacspheader = str_replace(
|
||||
array(
|
||||
@@ -438,6 +476,8 @@ class Controller
|
||||
$page->assign('ZEROBINCOMPATIBILITY', $this->_conf->getKey('zerobincompatibility'));
|
||||
$page->assign('LANGUAGESELECTION', $languageselection);
|
||||
$page->assign('LANGUAGES', I18n::getLanguageLabels(I18n::getAvailableLanguages()));
|
||||
$page->assign('TEMPLATESELECTION', $templateselection);
|
||||
$page->assign('TEMPLATES', TemplateSwitcher::getAvailableTemplates());
|
||||
$page->assign('EXPIRE', $expire);
|
||||
$page->assign('EXPIREDEFAULT', $this->_conf->getKey('default', 'expire'));
|
||||
$page->assign('URLSHORTENER', $this->_conf->getKey('urlshortener'));
|
||||
@@ -447,7 +487,7 @@ class Controller
|
||||
$page->assign('HTTPSLINK', 'https://' . $this->_request->getHost() . $this->_request->getRequestUri());
|
||||
$page->assign('COMPRESSION', $this->_conf->getKey('compression'));
|
||||
$page->assign('SRI', $this->_conf->getSection('sri'));
|
||||
$page->draw($this->_conf->getKey('template'));
|
||||
$page->draw(TemplateSwitcher::getTemplate());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -34,7 +34,7 @@ abstract class AbstractData
|
||||
* @param array $paste
|
||||
* @return bool
|
||||
*/
|
||||
abstract public function create($pasteid, array $paste);
|
||||
abstract public function create($pasteid, array &$paste);
|
||||
|
||||
/**
|
||||
* Read a paste.
|
||||
@@ -72,7 +72,7 @@ abstract class AbstractData
|
||||
* @param array $comment
|
||||
* @return bool
|
||||
*/
|
||||
abstract public function createComment($pasteid, $parentid, $commentid, array $comment);
|
||||
abstract public function createComment($pasteid, $parentid, $commentid, array &$comment);
|
||||
|
||||
/**
|
||||
* Read all comments of paste.
|
||||
@@ -199,7 +199,7 @@ abstract class AbstractData
|
||||
* @param array $paste
|
||||
* @return array
|
||||
*/
|
||||
protected static function upgradePreV1Format(array $paste)
|
||||
protected static function upgradePreV1Format(array &$paste)
|
||||
{
|
||||
if (array_key_exists('attachment', $paste['meta'])) {
|
||||
$paste['attachment'] = $paste['meta']['attachment'];
|
||||
|
||||
@@ -140,7 +140,7 @@ class Database extends AbstractData
|
||||
* @param array $paste
|
||||
* @return bool
|
||||
*/
|
||||
public function create($pasteid, array $paste)
|
||||
public function create($pasteid, array &$paste)
|
||||
{
|
||||
$expire_date = 0;
|
||||
$opendiscussion = $burnafterreading = false;
|
||||
@@ -297,14 +297,18 @@ class Database extends AbstractData
|
||||
* @param array $comment
|
||||
* @return bool
|
||||
*/
|
||||
public function createComment($pasteid, $parentid, $commentid, array $comment)
|
||||
public function createComment($pasteid, $parentid, $commentid, array &$comment)
|
||||
{
|
||||
if (array_key_exists('data', $comment)) {
|
||||
$version = 1;
|
||||
$data = $comment['data'];
|
||||
} else {
|
||||
$version = 2;
|
||||
$data = Json::encode($comment);
|
||||
try {
|
||||
$version = 2;
|
||||
$data = Json::encode($comment);
|
||||
} catch (Exception $e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
list($createdKey, $iconKey) = $this->_getVersionedKeys($version);
|
||||
$meta = $comment['meta'];
|
||||
|
||||
@@ -85,7 +85,7 @@ class Filesystem extends AbstractData
|
||||
* @param array $paste
|
||||
* @return bool
|
||||
*/
|
||||
public function create($pasteid, array $paste)
|
||||
public function create($pasteid, array &$paste)
|
||||
{
|
||||
$storagedir = $this->_dataid2path($pasteid);
|
||||
$file = $storagedir . $pasteid . '.php';
|
||||
@@ -188,7 +188,7 @@ class Filesystem extends AbstractData
|
||||
* @param array $comment
|
||||
* @return bool
|
||||
*/
|
||||
public function createComment($pasteid, $parentid, $commentid, array $comment)
|
||||
public function createComment($pasteid, $parentid, $commentid, array &$comment)
|
||||
{
|
||||
$storagedir = $this->_dataid2discussionpath($pasteid);
|
||||
$file = $storagedir . $pasteid . '.' . $commentid . '.' . $parentid . '.php';
|
||||
@@ -276,7 +276,7 @@ class Filesystem extends AbstractData
|
||||
case 'purge_limiter':
|
||||
return $this->_storeString(
|
||||
$this->_path . DIRECTORY_SEPARATOR . 'purge_limiter.php',
|
||||
'<?php' . PHP_EOL . '$GLOBALS[\'purge_limiter\'] = ' . $value . ';'
|
||||
'<?php' . PHP_EOL . '$GLOBALS[\'purge_limiter\'] = ' . var_export($value, true) . ';'
|
||||
);
|
||||
case 'salt':
|
||||
return $this->_storeString(
|
||||
@@ -308,7 +308,9 @@ class Filesystem extends AbstractData
|
||||
$file = $this->_path . DIRECTORY_SEPARATOR . 'purge_limiter.php';
|
||||
if (is_readable($file)) {
|
||||
require $file;
|
||||
return $GLOBALS['purge_limiter'];
|
||||
if (array_key_exists('purge_limiter', $GLOBALS)) {
|
||||
return $GLOBALS['purge_limiter'];
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'salt':
|
||||
@@ -324,9 +326,11 @@ class Filesystem extends AbstractData
|
||||
$file = $this->_path . DIRECTORY_SEPARATOR . 'traffic_limiter.php';
|
||||
if (is_readable($file)) {
|
||||
require $file;
|
||||
$this->_last_cache = $GLOBALS['traffic_limiter'];
|
||||
if (array_key_exists($key, $this->_last_cache)) {
|
||||
return $this->_last_cache[$key];
|
||||
if (array_key_exists('traffic_limiter', $GLOBALS)) {
|
||||
$this->_last_cache = $GLOBALS['traffic_limiter'];
|
||||
if (array_key_exists($key, $this->_last_cache)) {
|
||||
return $this->_last_cache[$key];
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -343,12 +347,11 @@ class Filesystem extends AbstractData
|
||||
*/
|
||||
private function _get($filename)
|
||||
{
|
||||
return Json::decode(
|
||||
substr(
|
||||
file_get_contents($filename),
|
||||
strlen(self::PROTECTION_LINE . PHP_EOL)
|
||||
)
|
||||
$data = substr(
|
||||
file_get_contents($filename),
|
||||
strlen(self::PROTECTION_LINE . PHP_EOL)
|
||||
);
|
||||
return Json::decode($data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -105,7 +105,7 @@ class GoogleCloudStorage extends AbstractData
|
||||
* @param $payload array to store
|
||||
* @return bool true if successful, otherwise false.
|
||||
*/
|
||||
private function _upload($key, $payload)
|
||||
private function _upload($key, &$payload)
|
||||
{
|
||||
$metadata = array_key_exists('meta', $payload) ? $payload['meta'] : array();
|
||||
unset($metadata['attachment'], $metadata['attachmentname'], $metadata['salt']);
|
||||
@@ -136,7 +136,7 @@ class GoogleCloudStorage extends AbstractData
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function create($pasteid, array $paste)
|
||||
public function create($pasteid, array &$paste)
|
||||
{
|
||||
if ($this->exists($pasteid)) {
|
||||
return false;
|
||||
@@ -201,7 +201,7 @@ class GoogleCloudStorage extends AbstractData
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function createComment($pasteid, $parentid, $commentid, array $comment)
|
||||
public function createComment($pasteid, $parentid, $commentid, array &$comment)
|
||||
{
|
||||
if ($this->existsComment($pasteid, $parentid, $commentid)) {
|
||||
return false;
|
||||
@@ -219,7 +219,8 @@ class GoogleCloudStorage extends AbstractData
|
||||
$prefix = $this->_getKey($pasteid) . '/discussion/';
|
||||
try {
|
||||
foreach ($this->_bucket->objects(array('prefix' => $prefix)) as $key) {
|
||||
$comment = JSON::decode($this->_bucket->object($key->name())->downloadAsString());
|
||||
$data = $this->_bucket->object($key->name())->downloadAsString();
|
||||
$comment = Json::decode($data);
|
||||
$comment['id'] = basename($key->name());
|
||||
$slot = $this->getOpenSlot($comments, (int) $comment['meta']['created']);
|
||||
$comments[$slot] = $comment;
|
||||
@@ -371,7 +372,7 @@ class GoogleCloudStorage extends AbstractData
|
||||
try {
|
||||
foreach ($this->_bucket->objects(array('prefix' => $prefix)) as $object) {
|
||||
$candidate = substr($object->name(), strlen($prefix));
|
||||
if (strpos($candidate, '/') === false) {
|
||||
if (!str_contains($candidate, '/')) {
|
||||
$pastes[] = $candidate;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,7 +165,7 @@ class S3Storage extends AbstractData
|
||||
* @param $payload array to store
|
||||
* @return bool true if successful, otherwise false.
|
||||
*/
|
||||
private function _upload($key, $payload)
|
||||
private function _upload($key, &$payload)
|
||||
{
|
||||
$metadata = array_key_exists('meta', $payload) ? $payload['meta'] : array();
|
||||
unset($metadata['attachment'], $metadata['attachmentname'], $metadata['salt']);
|
||||
@@ -191,7 +191,7 @@ class S3Storage extends AbstractData
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function create($pasteid, array $paste)
|
||||
public function create($pasteid, array &$paste)
|
||||
{
|
||||
if ($this->exists($pasteid)) {
|
||||
return false;
|
||||
@@ -263,7 +263,7 @@ class S3Storage extends AbstractData
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function createComment($pasteid, $parentid, $commentid, array $comment)
|
||||
public function createComment($pasteid, $parentid, $commentid, array &$comment)
|
||||
{
|
||||
if ($this->existsComment($pasteid, $parentid, $commentid)) {
|
||||
return false;
|
||||
@@ -462,7 +462,7 @@ class S3Storage extends AbstractData
|
||||
try {
|
||||
foreach ($this->_listAllObjects($prefix) as $object) {
|
||||
$candidate = substr($object['Key'], strlen($prefix));
|
||||
if (strpos($candidate, '/') === false) {
|
||||
if (!str_contains($candidate, '/')) {
|
||||
$pastes[] = $candidate;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ class FormatV2
|
||||
* @param bool $isComment
|
||||
* @return bool
|
||||
*/
|
||||
public static function isValid($message, $isComment = false)
|
||||
public static function isValid(&$message, $isComment = false)
|
||||
{
|
||||
$required_keys = array('adata', 'v', 'ct');
|
||||
if ($isComment) {
|
||||
|
||||