Compare commits

..

365 Commits

Author SHA1 Message Date
El RIDO
50a695b609
add missing method added upstream 2025-04-23 19:14:47 +02:00
El RIDO
cfb609814a
remove duplicate options 2025-04-23 19:05:53 +02:00
El RIDO
0199bed133
Merge pull request #1537 from jesussuarz/feature/add-delete-all-option
Add --delete-all option to administration script for mass paste deletion
2025-04-23 19:03:43 +02:00
Jesus Suarez
bce152c890
Update bin/administration
Use spaces instead of tabs for indentation consistency

Co-authored-by: El RIDO <elrido@gmx.net>
2025-04-22 16:44:12 -05:00
Jesus Suarez
abe7874829
Update bin/administration
Replace tabs with spaces for consistent code formatting

Co-authored-by: El RIDO <elrido@gmx.net>
2025-04-22 16:43:54 -05:00
Jesus Suarez
df1f742789
Update bin/administration
Refactor lines 160-165 as suggested for improved readability and consistency

Co-authored-by: El RIDO <elrido@gmx.net>
2025-04-22 16:43:35 -05:00
Jesus Suarez
1f7f6c93b0
Update bin/administration
Refactor code style: replace tabs with spaces, document new option, and maintain alphabetical order

Co-authored-by: El RIDO <elrido@gmx.net>
2025-04-22 16:43:01 -05:00
root
302921a811 Add --delete-all option to administration script for mass paste deletion 2025-04-22 04:12:46 -05:00
El RIDO
d220ba7c2b
Merge pull request #1536 from PrivateBin/crowdin-translation
New Crowdin updates
2025-04-15 21:47:02 +02:00
PrivateBin Translator Bot
9a9eb44102 New translations en.json (Polish) 2025-04-15 13:58:35 +02:00
El RIDO
10ee2fa2e4
Merge pull request #1535 from PrivateBin/crowdin-translation
New Crowdin updates
2025-04-13 07:59:49 +02:00
PrivateBin Translator Bot
e34a35bf30 New translations en.json (Arabic) 2025-04-12 16:30:55 +02:00
El RIDO
75db58800c
Merge pull request #1534 from PrivateBin/crowdin-translation
New Crowdin updates
2025-04-10 06:51:07 +02:00
PrivateBin Translator Bot
cbdd3d50a5 New translations en.json (Arabic) 2025-04-10 02:52:54 +02:00
El RIDO
b1608e5119
Merge pull request #1533 from PrivateBin/crowdin-translation
New Crowdin updates
2025-04-09 21:23:38 +02:00
PrivateBin Translator Bot
f8df10d2e1 New translations en.json (Hebrew) 2025-04-09 21:17:20 +02:00
El RIDO
37871eac69
node 20 seems to fail with the updated jsdom, locally I had tested with 18 - lets downgrade till we can find a solution 2025-04-09 21:11:10 +02:00
PrivateBin Translator Bot
edb753b3d7 New translations en.json (Hebrew) 2025-04-08 07:34:59 +02:00
El RIDO
bb4a3a09b0
Merge pull request #1532 from relspas/update-hebrew-support
Update Hebrew strings
2025-04-07 20:51:57 +02:00
El RIDO
1c72380443
Merge pull request #1531 from PrivateBin/crowdin-translation
New Crowdin updates
2025-04-07 20:49:32 +02:00
Raphael Elspas
a4be833937 Update Hebrew strings file 2025-04-07 12:14:05 -04:00
PrivateBin Translator Bot
16129b610d New translations en.json (Finnish) 2025-04-06 20:12:36 +02:00
El RIDO
31162e8011
upgrading DOMpurify library to 3.2.5 2025-04-06 08:30:49 +02:00
El RIDO
bac849d98a
Merge pull request #1526 from PrivateBin/pass-by-reference
Pass by reference & drop ctype
2025-03-17 06:52:48 +01:00
El RIDO
6ee9563b27
Merge pull request #1528 from fzxx/master
Update zh.json
2025-03-15 19:22:04 +01:00
风之暇想
797bf5eb6a
Update zh.json 2025-03-15 23:12:05 +08:00
El RIDO
abb49609e0
Merge pull request #1523 from jacquesbh/use-another-configuration-loader
Allow to use another Configuration class
2025-03-13 09:39:16 +01:00
El RIDO
46c49e5455
apply StyleCI recommendation 2025-03-13 09:32:39 +01:00
El RIDO
8ad6300c1c
pass by reference, closes #858 2025-03-13 09:22:27 +01:00
Jacques Bodin-Hullin
c04a551215
feat: Allow to change the Configuration in the _construct
So, now we can change the Configuration class, override it even if we
want.
2025-03-13 09:22:22 +01:00
El RIDO
5d4561bd0a
drop ctype requirement (only one use left) 2025-03-13 08:29:53 +01:00
El RIDO
7825471d70
avoid duplication of ID check 2025-03-13 08:14:01 +01:00
El RIDO
629f263cf5
pass by reference, closes #858 2025-03-11 08:22:21 +01:00
El RIDO
e67972417e
Merge pull request #1522 from jacquesbh/avoid-multiple-configuration-instances
Do not instanciate the Configuration more than once
2025-03-09 21:29:41 +01:00
Jacques Bodin-Hullin
c62a3fbd2d
perf(configuration): Do not create multiple instances of Configuration
Since the configuration is loaded in the _init method, and this method
is called in the _construct, there is no reason to instanciate the
Configuration class more than once.
2025-03-09 20:23:01 +01:00
El RIDO
81e9c8672f
Merge pull request #1521 from PrivateBin/crowdin-translation
New Crowdin updates
2025-03-09 13:31:13 +01:00
PrivateBin Translator Bot
24316f3e07 New translations en.json (Finnish) 2025-03-08 21:36:08 +01:00
El RIDO
495a84b292
chore: documentation 2025-03-08 08:44:28 +01:00
El RIDO
1d53f5a054
Merge pull request #1520 from PrivateBin/crowdin-translation
New Crowdin updates
2025-03-08 08:25:15 +01:00
PrivateBin Translator Bot
4d0fbfd02b New translations en.json (Estonian) 2025-03-07 14:34:00 +01:00
El RIDO
dd6537b277
Merge pull request #1518 from ixten/master
Fix available templates configuration and adding custom themes
2025-03-07 07:57:21 +01:00
Michael Kuilboer
9221629d8d Fix available templates configuration and adding custom themes 2025-03-06 02:27:31 +01:00
El RIDO
ebb9e231aa
Merge pull request #1516 from PrivateBin/js-devel-dep-update
update jsdom
2025-02-28 22:39:03 +01:00
El RIDO
e68430e9c5
clarify comments 2025-02-28 21:38:30 +01:00
El RIDO
d0303dce9c
clarify comments 2025-02-28 21:36:51 +01:00
El RIDO
9f82eb64cb
clarify test descriptions 2025-02-28 21:25:40 +01:00
El RIDO
a9ea962adc
Merge pull request #1517 from PrivateBin/dependabot/github_actions/dawidd6/action-download-artifact-9
Bump dawidd6/action-download-artifact from 8 to 9
2025-02-27 22:52:41 +01:00
dependabot[bot]
d89bc1b97b
Bump dawidd6/action-download-artifact from 8 to 9
Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 8 to 9.
- [Release notes](https://github.com/dawidd6/action-download-artifact/releases)
- [Commits](20319c5641...07ab29fd4a)

---
updated-dependencies:
- dependency-name: dawidd6/action-download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-27 11:25:13 +00:00
El RIDO
e0b6aee65a
indentation 2025-02-27 08:17:03 +01:00
El RIDO
4e518b3fce
update jsdom dependency, fix tests 2025-02-27 08:16:30 +01:00
El RIDO
bb98d5b6c1
Merge pull request #1515 from PrivateBin/dependabot/github_actions/slsa-framework/slsa-github-generator-2.1.0
Bump slsa-framework/slsa-github-generator from 2.0.0 to 2.1.0
2025-02-27 06:49:39 +01:00
dependabot[bot]
478b79b7b7
Bump slsa-framework/slsa-github-generator from 2.0.0 to 2.1.0
Bumps [slsa-framework/slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/slsa-framework/slsa-github-generator/releases)
- [Changelog](https://github.com/slsa-framework/slsa-github-generator/blob/main/CHANGELOG.md)
- [Commits](https://github.com/slsa-framework/slsa-github-generator/compare/v2.0.0...v2.1.0)

---
updated-dependencies:
- dependency-name: slsa-framework/slsa-github-generator
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-25 11:57:15 +00:00
El RIDO
57636ee6d4
Merge pull request #1513 from PrivateBin/crowdin-translation
New Crowdin updates
2025-02-17 22:04:24 +01:00
PrivateBin Translator Bot
bd3486eda7 New translations en.json (Corsican) 2025-02-17 12:36:17 +01:00
PrivateBin Translator Bot
ddc9de345d New translations en.json (Russian) 2025-02-17 07:12:20 +01:00
PrivateBin Translator Bot
e511ab74b1 New translations en.json (Russian) 2025-02-16 09:11:36 +01:00
El RIDO
c32c74a630
Merge pull request #1501 from Ribas160/allow_change_template
Added the ability to web users to change the theme
2025-02-16 09:07:46 +01:00
Ribas160
412987ea5b Merge remote-tracking branch 'origin/master' into allow_change_template
# Conflicts:
#	lib/Configuration.php
2025-02-14 15:36:57 +02:00
Ribas160
b90967a14b Apply StyleCI changes 2025-02-14 15:33:34 +02:00
El RIDO
654bff65cc
add config for older apache releases without included mime type
kudos @cryptomilk for the suggestion
2025-02-13 09:03:13 +01:00
El RIDO
95188eea94
chore: update SRI hash 2025-02-11 19:51:24 +01:00
El RIDO
6bab8b014f
Merge pull request #1510 from PrivateBin/dompurify-remove
Remove SAFE_FOR_JQUERY from DOMPurify as it has been removed
2025-02-11 19:32:55 +01:00
rugk
ac62d909b9
Remove SAFE_FOR_JQUERY from DOMPurify as it has been removed
DOMPurify removed this configuration option, so I guess it has no effect and can be removed.

See docs: https://github.com/cure53/DOMPurify?tab=readme-ov-file#removed-configuration
>  SAFE_FOR_JQUERY 	2.1.0 	No replacement required.

The PR https://github.com/cure53/DOMPurify/pull/474 also links the commits, which removed it.
2025-02-11 17:32:40 +01:00
El RIDO
64b0e33574
update jsdom dependency, fix tests 2025-02-11 08:10:25 +01:00
El RIDO
e4d1f4a26d
update jsdom dependency, disable test 2025-02-11 07:52:23 +01:00
Ribas160
5b54f2cdb0 Use the traditional "template" config key, update unit-tests 2025-02-10 18:19:36 +02:00
El RIDO
0eef8d62d7
Merge pull request #1492 from PrivateBin/oxipng
optimized images
2025-02-09 09:34:46 +01:00
ribas160
bce449de10 Merge remote-tracking branch 'origin/master' into allow_change_template
# Conflicts:
#	CHANGELOG.md
2025-02-08 22:01:10 +02:00
ribas160
edad5ba1e0 Config documentation update 2025-02-08 21:49:27 +02:00
ribas160
dce5a73444 CHANGELOG and CREDITS update 2025-02-08 16:34:23 +02:00
ribas160
a4b0a993c7 Doc blocks added, available templates may be set in the general configuration file 2025-02-08 14:32:20 +02:00
El RIDO
1c2c45ec2d
Merge pull request #1507 from PrivateBin/vulnerability-policy
Change SECURITY.md to hint for acceping vulnerability reports via the GitHub mail
2025-02-07 22:21:07 +01:00
rugk
ec5b72476e
Change SECURITY.md to hint for acceping vulnerability reports via the GitHub mail
This seems to be a new feature and I've had this tested (with a different account) that this can be used by anyone.

IMHO, this is a convenient feature, as we'd need to publish it anyway there.
2025-02-07 21:39:59 +01:00
El RIDO
540172d0f7
update jsdom dependency 2025-02-07 09:00:53 +01:00
El RIDO
3b6b97429d
update jsdom dependency, fix tests 2025-02-07 08:54:55 +01:00
El RIDO
dc983621ac
update jsdom dependency, fix tests 2025-02-07 08:19:09 +01:00
El RIDO
ac63b91a1b
fix prompt test
rngState 883a6d2e518704c9fb fails on a single \n (line feed)

password inputs can't contain carriage returns *or* line feeds
2025-02-06 08:48:36 +01:00
El RIDO
db15ae8b43
fix prompt test
rngState 003ad8214ef0579cb6 fails on a single \n (line feed)

password inputs can't contain carriage returns *or* line feeds
2025-02-06 08:43:02 +01:00
El RIDO
740fd90db9
update jsdom & jsdom-global development dependency, fix cookie test 2025-02-06 08:39:25 +01:00
El RIDO
aa8f77f673
update jsdom-url development dependency 2025-02-06 08:09:15 +01:00
El RIDO
0a37a884e2
chore: document change 2025-02-05 22:27:21 +01:00
El RIDO
bbf6ad76f4
Merge pull request #1500 from PrivateBin/dependabot/composer/mlocati/ip-lib-1.20.0
Bump mlocati/ip-lib from 1.19.0 to 1.20.0
2025-02-05 22:25:25 +01:00
Ribas160
c7a4ced9e1 Added the ability to web users to change the theme 2025-02-05 15:24:15 +02:00
dependabot[bot]
f111def946
Bump mlocati/ip-lib from 1.19.0 to 1.20.0
Bumps [mlocati/ip-lib](https://github.com/mlocati/ip-lib) from 1.19.0 to 1.20.0.
- [Release notes](https://github.com/mlocati/ip-lib/releases)
- [Commits](https://github.com/mlocati/ip-lib/compare/1.19.0...1.20.0)

---
updated-dependencies:
- dependency-name: mlocati/ip-lib
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-05 11:20:36 +00:00
El RIDO
f88c643be9
Merge pull request #1499 from PrivateBin/dependabot/composer/mlocati/ip-lib-1.19.0
Bump mlocati/ip-lib from 1.18.1 to 1.19.0
2025-02-04 21:58:08 +01:00
dependabot[bot]
ed3347e835
Bump mlocati/ip-lib from 1.18.1 to 1.19.0
Bumps [mlocati/ip-lib](https://github.com/mlocati/ip-lib) from 1.18.1 to 1.19.0.
- [Release notes](https://github.com/mlocati/ip-lib/releases)
- [Commits](https://github.com/mlocati/ip-lib/compare/1.18.1...1.19.0)

---
updated-dependencies:
- dependency-name: mlocati/ip-lib
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-04 11:50:21 +00:00
El RIDO
6ba9fe5a93
Merge pull request #1496 from PrivateBin/crowdin-translation
New Crowdin updates
2025-02-04 08:36:23 +01:00
El RIDO
e8ae354c63
Merge branch 'master' into crowdin-translation 2025-02-04 08:34:56 +01:00
PrivateBin Translator Bot
2809403893 New translations en.json (Dutch) 2025-02-03 14:37:24 +01:00
El RIDO
aeba6e24cd
Merge pull request #1498 from AnonymousWP/chore(translation)-update-Dutch-translation
chore(translation): update Dutch translation
2025-02-03 14:23:59 +01:00
Anonymoussaurus
f9ac763e62
chore(translation): update Dutch translation 2025-02-03 11:43:42 +01:00
PrivateBin Translator Bot
d86f502136 New translations en.json (Chinese Simplified) 2025-02-03 08:24:15 +01:00
El RIDO
c963ba4d7a
upgrade webcrypto used in testing
old package got corrupted on npm and fails to install
2025-02-03 07:52:32 +01:00
El RIDO
cf14766d9f
Merge pull request #1495 from fzxx/master
Update zh.json
2025-02-03 07:35:13 +01:00
风之暇想
4b2443f3eb
Update zh.json
Update translations
2025-02-03 12:11:48 +08:00
El RIDO
94ab727139
Merge pull request #1493 from MickGe/master
update new translation in fr.json
2025-02-01 14:55:48 +01:00
MickGe
bbaee2c737
update new translation in fr.json 2025-02-01 14:42:37 +01:00
El RIDO
2a27c767a5
optimized images
using oxipng 9.1.3 and parameters:
oxipng -ao max --preserve --strip safe -Z -r .
2025-02-01 12:32:04 +01:00
El RIDO
e25fe01d82
chore: prepare for next release 2025-02-01 11:40:29 +01:00
El RIDO
473baf8250
incrementing version 2025-02-01 10:43:54 +01:00
El RIDO
d5d55322de
Merge pull request #1490 from PrivateBin/dompurify-3.2.4
upgrading DOMpurify library to 3.2.4
2025-02-01 10:17:46 +01:00
El RIDO
58d11f2ba0
upgrading DOMpurify library to 3.2.4 2025-01-31 08:16:03 +01:00
El RIDO
6282e75fa0
Merge pull request #1486 from PrivateBin/dependabot/github_actions/dawidd6/action-download-artifact-8
Bump dawidd6/action-download-artifact from 7 to 8
2025-01-22 22:00:40 +01:00
dependabot[bot]
6dbd9bd157
Bump dawidd6/action-download-artifact from 7 to 8
Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 7 to 8.
- [Release notes](https://github.com/dawidd6/action-download-artifact/releases)
- [Commits](80620a5d27...20319c5641)

---
updated-dependencies:
- dependency-name: dawidd6/action-download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-22 11:07:30 +00:00
El RIDO
e27e3ace16
fix google cloud sdk tests
Adds new method required by interface since https://github.com/googleapis/google-cloud-php/pull/7966
2025-01-11 20:37:50 +01:00
El RIDO
c27c18faf9
fix google cloud sdk tests
Adds new method required by interface since https://github.com/googleapis/google-cloud-php/pull/7966
2025-01-11 20:29:03 +01:00
El RIDO
4b31528fed
Merge pull request #1484 from Ribas160/copy_to_clipboard_unit_tests
CopyToClipboard unit tests
2025-01-11 13:22:18 +01:00
ribas160
48eb6ef87a Custom clipboard object added to the unit tests 2025-01-10 16:24:49 +02:00
El RIDO
863c5b320e
Merge pull request #1483 from PrivateBin/crowdin-translation
New Crowdin updates
2025-01-09 07:52:26 +01:00
Ribas160
6c651ea676 CopyToClipboard unit tests 2025-01-07 17:40:18 +02:00
PrivateBin Translator Bot
7733916ad9 New translations en.json (Corsican) 2025-01-07 16:11:02 +01:00
El RIDO
42b7b9060d
Merge pull request #1482 from Ribas160/bootstrap5_template_improvements
Bootstrap5 template improvements
2025-01-07 06:04:43 +01:00
ribas160
650dd4464a Create button icon fixed 2025-01-06 23:07:48 +02:00
Ribas160
739f105a55 Increase navbar margin bottom, centralize button icons on bootstrap5 template 2025-01-06 18:29:37 +02:00
El RIDO
65440c63c9
Merge pull request #1479 from PrivateBin/crowdin-translation
New Crowdin updates
2025-01-06 07:56:56 +01:00
PrivateBin Translator Bot
9c27143abd New translations en.json (Portuguese) 2025-01-06 07:49:25 +01:00
PrivateBin Translator Bot
85fa4ba374 New translations en.json (Corsican) 2025-01-06 06:39:15 +01:00
PrivateBin Translator Bot
4b1063b251 New translations en.json (Occitan) 2025-01-06 06:39:14 +01:00
PrivateBin Translator Bot
d3e6990d1d New translations en.json (Estonian) 2025-01-06 06:39:13 +01:00
PrivateBin Translator Bot
ee3db3ceae New translations en.json (Thai) 2025-01-06 06:39:12 +01:00
PrivateBin Translator Bot
28bec95ee8 New translations en.json (Indonesian) 2025-01-06 06:39:11 +01:00
PrivateBin Translator Bot
f031d63bd5 New translations en.json (Ukrainian) 2025-01-06 06:39:10 +01:00
PrivateBin Translator Bot
a56be85343 New translations en.json (Turkish) 2025-01-06 06:39:08 +01:00
PrivateBin Translator Bot
34645797b0 New translations en.json (Slovenian) 2025-01-06 06:39:07 +01:00
PrivateBin Translator Bot
e6216fcc6a New translations en.json (Slovak) 2025-01-06 06:39:06 +01:00
PrivateBin Translator Bot
bc8c4e72f9 New translations en.json (Russian) 2025-01-06 06:39:05 +01:00
PrivateBin Translator Bot
abb1f28905 New translations en.json (Polish) 2025-01-06 06:39:04 +01:00
PrivateBin Translator Bot
42491216f1 New translations en.json (Norwegian) 2025-01-06 06:39:03 +01:00
PrivateBin Translator Bot
598e5ae73d New translations en.json (Dutch) 2025-01-06 06:39:02 +01:00
PrivateBin Translator Bot
c2876ff8bd New translations en.json (Lithuanian) 2025-01-06 06:39:00 +01:00
PrivateBin Translator Bot
e7b28b1c9c New translations en.json (Japanese) 2025-01-06 06:38:59 +01:00
PrivateBin Translator Bot
08819f6635 New translations en.json (Italian) 2025-01-06 06:38:58 +01:00
PrivateBin Translator Bot
51e39c07eb New translations en.json (Hungarian) 2025-01-06 06:38:57 +01:00
PrivateBin Translator Bot
cc06df828b New translations en.json (Hebrew) 2025-01-06 06:38:56 +01:00
PrivateBin Translator Bot
736368378c New translations en.json (Finnish) 2025-01-06 06:38:55 +01:00
PrivateBin Translator Bot
4311f8683d New translations en.json (Greek) 2025-01-06 06:38:53 +01:00
PrivateBin Translator Bot
d0bcc46a6d New translations en.json (Czech) 2025-01-06 06:38:52 +01:00
PrivateBin Translator Bot
e2bc31bd73 New translations en.json (Bulgarian) 2025-01-06 06:38:51 +01:00
PrivateBin Translator Bot
f204051aef New translations en.json (Arabic) 2025-01-06 06:38:50 +01:00
PrivateBin Translator Bot
e76a31ca30 New translations en.json (Spanish) 2025-01-06 06:38:49 +01:00
PrivateBin Translator Bot
bcb953b0f2 New translations en.json (French) 2025-01-06 06:38:48 +01:00
PrivateBin Translator Bot
12b202a4e5 New translations en.json (Romanian) 2025-01-06 06:38:47 +01:00
El RIDO
b7451de8f2
Merge pull request #1480 from Ribas160/change_language_url_fix
Keep paste URL, if changing language in dropdown
2025-01-06 06:38:13 +01:00
ribas160
67a1dfb683 Keep paste URL, if changing language in dropdown 2025-01-05 23:21:25 +02:00
PrivateBin Translator Bot
73073f25e1 New translations en.json (Chinese Simplified) 2025-01-05 21:01:24 +01:00
PrivateBin Translator Bot
b6c01f139f New translations en.json (Italian) 2025-01-05 21:01:23 +01:00
PrivateBin Translator Bot
f232d370bc New translations en.json (German) 2025-01-05 21:01:22 +01:00
PrivateBin Translator Bot
917cd221fe New translations en.json (French) 2025-01-05 21:01:21 +01:00
PrivateBin Translator Bot
75d204fcfb New translations en.json (Corsican) 2025-01-05 19:49:53 +01:00
PrivateBin Translator Bot
d2159d81e7 New translations en.json (Occitan) 2025-01-05 19:49:52 +01:00
PrivateBin Translator Bot
9c809ff666 New translations en.json (Estonian) 2025-01-05 19:49:50 +01:00
PrivateBin Translator Bot
629c98f322 New translations en.json (Thai) 2025-01-05 19:49:49 +01:00
PrivateBin Translator Bot
b197cb4d0d New translations en.json (Indonesian) 2025-01-05 19:49:48 +01:00
PrivateBin Translator Bot
b6888f0aa9 New translations en.json (Chinese Simplified) 2025-01-05 19:49:47 +01:00
PrivateBin Translator Bot
4d8a9efa9d New translations en.json (Ukrainian) 2025-01-05 19:49:46 +01:00
PrivateBin Translator Bot
0c5dc38381 New translations en.json (Turkish) 2025-01-05 19:49:45 +01:00
PrivateBin Translator Bot
08766f3162 New translations en.json (Slovenian) 2025-01-05 19:49:44 +01:00
PrivateBin Translator Bot
8f353badef New translations en.json (Slovak) 2025-01-05 19:49:43 +01:00
PrivateBin Translator Bot
dd964f9bfc New translations en.json (Russian) 2025-01-05 19:49:42 +01:00
PrivateBin Translator Bot
eb31355364 New translations en.json (Portuguese) 2025-01-05 19:49:41 +01:00
PrivateBin Translator Bot
6f248c382b New translations en.json (Polish) 2025-01-05 19:49:40 +01:00
PrivateBin Translator Bot
d4d0e48221 New translations en.json (Norwegian) 2025-01-05 19:49:39 +01:00
PrivateBin Translator Bot
98f46a3f1a New translations en.json (Dutch) 2025-01-05 19:49:38 +01:00
PrivateBin Translator Bot
9c9a38c54e New translations en.json (Lithuanian) 2025-01-05 19:49:36 +01:00
PrivateBin Translator Bot
80a8ba9749 New translations en.json (Japanese) 2025-01-05 19:49:35 +01:00
PrivateBin Translator Bot
8d43769717 New translations en.json (Italian) 2025-01-05 19:49:34 +01:00
PrivateBin Translator Bot
645661757f New translations en.json (Hungarian) 2025-01-05 19:49:32 +01:00
PrivateBin Translator Bot
97320dfbe7 New translations en.json (Hebrew) 2025-01-05 19:49:32 +01:00
PrivateBin Translator Bot
9189945a00 New translations en.json (Finnish) 2025-01-05 19:49:31 +01:00
PrivateBin Translator Bot
eb95967bea New translations en.json (Greek) 2025-01-05 19:49:30 +01:00
PrivateBin Translator Bot
62da1ff721 New translations en.json (German) 2025-01-05 19:49:29 +01:00
PrivateBin Translator Bot
ff9d8e70d5 New translations en.json (Czech) 2025-01-05 19:49:28 +01:00
PrivateBin Translator Bot
34960fb3b4 New translations en.json (Bulgarian) 2025-01-05 19:49:26 +01:00
PrivateBin Translator Bot
9d09c4974d New translations en.json (Arabic) 2025-01-05 19:49:25 +01:00
PrivateBin Translator Bot
bdc88298a0 New translations en.json (Spanish) 2025-01-05 19:49:24 +01:00
PrivateBin Translator Bot
441fd7a979 New translations en.json (French) 2025-01-05 19:49:23 +01:00
PrivateBin Translator Bot
18db3c6670 New translations en.json (Romanian) 2025-01-05 19:49:22 +01:00
El RIDO
ffd4210fe2
Comment is now superfluous thanks to better code. 🎉
Co-authored-by: rugk <rugk+git@posteo.de>
2025-01-05 19:28:35 +01:00
El RIDO
4076a831eb
Merge branch 'master' into keyboard-trap 2025-01-05 07:23:41 +01:00
El RIDO
346ae23ade
document changes 2025-01-05 07:11:29 +01:00
El RIDO
5936dbbb10
Merge branch 'master' into Ribas160-ux_adjustments_delete_link 2025-01-05 07:07:54 +01:00
El RIDO
68be47f4d7
Merge pull request #1473 from PrivateBin/php84-tests
bump libraries, fixing PHP 8.4 tests
2025-01-05 06:40:20 +01:00
El RIDO
03fbb5e1e9
Merge branch 'master' into php84-tests 2025-01-05 06:39:28 +01:00
El RIDO
ee49f90f39
Merge pull request #1472 from PrivateBin/purify-3.2.3
upgrading DOMpurify library to 3.2.3
2025-01-05 06:33:42 +01:00
ribas160
7b57d7b289 - trash icon added to bootstrap-icons.svg
- made delete link a separate button
- unit tests updated
2025-01-04 22:53:32 +02:00
El RIDO
52cd7b3590
Merge pull request #1477 from PrivateBin/crowdin-translation
New Crowdin updates
2025-01-04 09:45:30 +01:00
PrivateBin Translator Bot
fb7bca7d71 New translations en.json (Chinese Simplified) 2025-01-04 09:33:21 +01:00
PrivateBin Translator Bot
90957850b9 New translations en.json (Russian) 2025-01-04 09:33:20 +01:00
PrivateBin Translator Bot
2cc2a4b0b5 New translations en.json (German) 2025-01-04 09:33:19 +01:00
PrivateBin Translator Bot
22eaba62f2 New translations en.json (French) 2025-01-04 09:33:18 +01:00
El RIDO
2e69154e9a
Merge branch 'master' into php84-tests 2025-01-04 09:03:51 +01:00
El RIDO
eaa60e3a81
Merge branch 'master' into purify-3.2.3 2025-01-04 08:58:00 +01:00
El RIDO
45b38770db
Merge branch 'master' into keyboard-trap 2025-01-04 08:48:08 +01:00
El RIDO
a14d0a3d11
updating documentation & optimizing composer autoload (using: make composer) 2025-01-04 08:26:14 +01:00
El RIDO
dc85a67a03
Merge pull request #1476 from Ribas160/replace_usage_of_strpos_with_php8_functions
Replace usage of strpos with str_starts_with etc.
2025-01-04 08:18:04 +01:00
El RIDO
d6020c635b
documentation 2025-01-04 08:03:50 +01:00
PrivateBin Translator Bot
870e2ea97c New translations en.json (Chinese Simplified) 2025-01-04 07:32:56 +01:00
PrivateBin Translator Bot
d7eed290ad New translations en.json (Russian) 2025-01-04 07:32:52 +01:00
El RIDO
c7d085a51f
Merge pull request #1475 from Ribas160/copy_to_clipboard_btn
Copy paste to clipboard button added. Copy paste to clipboard shortcu…
2025-01-04 07:26:25 +01:00
ribas160
f9e2373e62 - str_starts_with, str_contains used instead of strpos === 0, strpos !== 0, strpos === false, strpos !== false
- symfony/polyfill-php80 installed to introduce the polyfill and support php7.3 using php8 functions
- symfony/polyfill-ctype installed to introduce ctype functions in case somebody doesn't have the ctype extension installed
2025-01-04 00:46:20 +02:00
ribas160
b86eb93dbe Added the button to copy the paste link to the clipboard 2025-01-03 18:19:12 +02:00
ribas160
0462da6e8e - used bootstrap 5 CSS icon named copy, bootstrap 3 CSS glyphicon named duplicate
- keyboard-shortcuts made more accessible by wrapping the keys into kbd-tags
- translate messages may contain allowed HTML tags
- added the record to the CHANGELOG.md
2025-01-02 15:13:44 +02:00
ribas160
a6a7df9a72 Merge remote-tracking branch 'upstream/master' into copy_to_clipboard_btn
# Conflicts:
#	i18n/ar.json
#	i18n/bg.json
#	i18n/ca.json
#	i18n/co.json
#	i18n/cs.json
#	i18n/de.json
#	i18n/el.json
#	i18n/en.json
#	i18n/es.json
#	i18n/et.json
#	i18n/fi.json
#	i18n/fr.json
#	i18n/he.json
#	i18n/hi.json
#	i18n/hu.json
#	i18n/id.json
#	i18n/it.json
#	i18n/ja.json
#	i18n/jbo.json
#	i18n/ko.json
#	i18n/ku.json
#	i18n/la.json
#	i18n/lt.json
#	i18n/nl.json
#	i18n/no.json
#	i18n/oc.json
#	i18n/pl.json
#	i18n/pt.json
#	i18n/ro.json
#	i18n/ru.json
#	i18n/sk.json
#	i18n/sl.json
#	i18n/sv.json
#	i18n/th.json
#	i18n/tr.json
#	i18n/uk.json
#	i18n/zh.json
#	lib/Configuration.php
2024-12-29 22:19:35 +02:00
ribas160
6c39a1441c Copy paste to clipboard button added. Copy paste to clipboard shortcut added 2024-12-28 18:42:46 +02:00
El RIDO
5aa7a95841
avoid unnecessary indentation 2024-12-27 13:42:16 +01:00
El RIDO
333f0568b6
fix bootstrap 5 modal usage
kudos @kanna5
2024-12-27 09:17:35 +01:00
El RIDO
84866f9b09
Merge branch 'master' into keyboard-trap 2024-12-27 07:33:50 +01:00
El RIDO
99e0b7efac fix brackets, kudos @kanna5 2024-12-25 07:27:58 +01:00
El RIDO
8b7ccb0fd4
PHP 8.4 is no longer a development release 2024-12-22 12:14:25 +01:00
El RIDO
21b259b5eb
bump libraries, document change
fixes #1301
2024-12-22 12:05:55 +01:00
El RIDO
be18dcb838
upgrading DOMpurify library to 3.2.3 2024-12-22 11:17:34 +01:00
El RIDO
15488d3405
bump checkout action 2024-12-14 09:14:44 +01:00
El RIDO
65ea73e638
Merge pull request #1470 from PrivateBin/crowdin-translation
New Crowdin updates
2024-12-12 21:53:58 +01:00
PrivateBin Translator Bot
f7a9631a2f New translations en.json (Ukrainian) 2024-12-12 21:29:46 +01:00
El RIDO
178ae10904
Merge pull request #1467 from PrivateBin/crowdin-translation
New Crowdin updates
2024-12-04 09:22:20 +01:00
PrivateBin Translator Bot
f9094874eb New translations en.json (Thai) 2024-12-03 11:59:49 +01:00
PrivateBin Translator Bot
e92f2ac9ca New translations en.json (Thai) 2024-12-03 09:49:56 +01:00
El RIDO
90d5bf9990
Merge pull request #1466 from PrivateBin/dependabot/github_actions/dawidd6/action-download-artifact-7
Bump dawidd6/action-download-artifact from 6 to 7
2024-11-29 17:26:48 +01:00
El RIDO
d22c6e31dc
Merge pull request #1465 from PrivateBin/crowdin-translation
New Crowdin updates
2024-11-29 17:04:54 +01:00
dependabot[bot]
7ee6bcafc4
Bump dawidd6/action-download-artifact from 6 to 7
Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 6 to 7.
- [Release notes](https://github.com/dawidd6/action-download-artifact/releases)
- [Commits](bf251b5aa9...80620a5d27)

---
updated-dependencies:
- dependency-name: dawidd6/action-download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-29 11:11:25 +00:00
PrivateBin Translator Bot
75ec510f2d New translations en.json (Corsican) 2024-11-28 14:44:35 +01:00
El RIDO
652cf0cf26 bump PHP libraries 2024-11-28 07:48:27 +01:00
El RIDO
1c7d639546
Merge pull request #1464 from PrivateBin/wasm-streaming
WASM streaming / eliminate unsafe-eval
2024-11-28 07:10:32 +01:00
El RIDO
6587466a9b remove async & ES6 feature detection
It requires eval and webcrypto got introduced in older Chrome & Firefox versions, so seems superfluous to keep.
2024-11-26 07:01:34 +01:00
El RIDO
6b180ac7b1
Merge branch 'master' into wasm-streaming 2024-11-24 21:15:56 +01:00
El RIDO
3d59d3da50
change focus order for accessibility
tabbing out of the textarea jumps to the "Create" button, then the tab-toggle
2024-11-24 16:17:45 +01:00
El RIDO
c7195aaf9a
replicate template changes, fix bugs
- fixes QR code height introducing space even when hidden in page layout
- fix modals in bootstrap 5 (modal syntax changed heavily, no longer jQuery integrated)
- hide and show tab-toggle depending on application state
- don't encode HTML entities in translated messages containing kbd tags (in addition to links)
2024-11-24 15:42:38 +01:00
El RIDO
9028ddbb97
update all language files & SRI hashes
all tests pass, still need to replicate template changes and do manual testing to validate the UX
2024-11-24 12:49:21 +01:00
El RIDO
544c4d2f5f prototype keyboard trap toggle
- needs updating all language files
- replicate changes to all templates
2024-11-24 11:45:46 +01:00
El RIDO
5ba56c20cb
Merge branch 'MickGe'
fix selectors, deduplicate common styles
2024-11-23 09:32:42 +01:00
El RIDO
7cbabc871a
Merge pull request #1461 from fzxx/master
Update zh.json
2024-11-23 08:38:11 +01:00
风之暇想
7e019c4aae
Update zh.json
Translation
2024-11-23 10:24:24 +08:00
MickGe
390e268bb0
Update css/bootstrap5/privatebin.css 2024-11-22 10:46:54 +01:00
MickGe
c9067f1f23
Update css/bootstrap/privatebin.css 2024-11-22 10:46:44 +01:00
MickGe
ab9d9416d9
fix: responsive long url in plaintext 2024-11-21 22:49:00 +01:00
El RIDO
eaa72ab41a
Merge pull request #1458 from PrivateBin/crowdin-translation
New Crowdin updates
2024-11-17 07:56:01 +01:00
PrivateBin Translator Bot
85241f2615 New translations en.json (Norwegian) 2024-11-17 00:49:57 +01:00
El RIDO
ab5fa3d14d
chore: prepare for next release 2024-11-16 08:27:23 +01:00
El RIDO
1a434b0e8d
incrementing version 2024-11-16 08:02:20 +01:00
El RIDO
3460f20e40
Merge pull request #1448 from slaweallx/patch-1
Update tr.json
2024-11-09 20:13:42 +01:00
Ali Çömez | Slaweally
82c2e685b6
Update tr.json 2024-11-09 22:05:49 +03:00
El RIDO
9eadf09ac3 bump libraries, document change 2024-10-31 08:05:49 +01:00
El RIDO
365782ebeb
Merge pull request #1446 from PrivateBin/dependabot/composer/mlocati/ip-lib-1.18.1
Bump mlocati/ip-lib from 1.18.0 to 1.18.1
2024-10-31 07:55:09 +01:00
dependabot[bot]
6db7d9a6fa
Bump mlocati/ip-lib from 1.18.0 to 1.18.1
Bumps [mlocati/ip-lib](https://github.com/mlocati/ip-lib) from 1.18.0 to 1.18.1.
- [Release notes](https://github.com/mlocati/ip-lib/releases)
- [Commits](https://github.com/mlocati/ip-lib/compare/1.18.0...1.18.1)

---
updated-dependencies:
- dependency-name: mlocati/ip-lib
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-30 11:33:35 +00:00
El RIDO
631b65c1ea
Merge pull request #1438 from PrivateBin/array-key-type-error
Numeric array key type errors
2024-10-27 07:10:25 +01:00
El RIDO
8752354d63 apply StyleCI fixes 2024-10-25 07:12:30 +02:00
El RIDO
0268e01ab5 experiment: add return types to a unit test facility 2024-10-25 07:09:13 +02:00
El RIDO
e468f07626 avoid clever key manipulation, all we need are incremental numbers starting at 1 2024-10-25 06:58:05 +02:00
El RIDO
cf83e3825f ensure key is cast to string, fixes #1435 2024-10-23 08:23:02 +02:00
El RIDO
93a2b97d69 add failing test case, dedup code 2024-10-23 08:17:13 +02:00
El RIDO
d23bb748d4
Merge pull request #1401 from PrivateBin/b5-message-height
bootstrap footer improvements
2024-10-23 07:22:04 +02:00
El RIDO
7d6a70a24e
Merge branch 'master' into b5-message-height 2024-10-23 07:21:28 +02:00
El RIDO
9da6d8b24b
Merge pull request #1424 from PrivateBin/fix-webkit
Restore WebKit (Safari, iOS, etc.) compatibility
2024-10-23 07:19:35 +02:00
rugk
6876e14679 Merge remote-tracking branch 'origin/master' into fix-webkit 2024-10-22 22:32:32 +00:00
rugk
628b60dcb4 refactor: deferring everything including all potential deps
Also works on Safari…
2024-10-22 22:29:42 +00:00
rugk
5b3537a7cf Merge branch 'fix-webkit' of https://github.com/PrivateBin/PrivateBin into fix-webkit 2024-10-22 22:22:21 +00:00
rugk
f0ca1ac888 fix: also loaad dark-mode switch defer'Ed to make it load correctly
(async fails on WebKIt)
2024-10-22 22:20:49 +00:00
El RIDO
b077fb7749
Merge pull request #1432 from PrivateBin/crowdin-translation
New Crowdin updates
2024-10-20 15:33:45 +02:00
PrivateBin Translator Bot
dd4f3a43fe New translations en.json (Corsican) 2024-10-20 12:12:07 +02:00
El RIDO
eed2a13757
Merge pull request #1431 from PrivateBin/dompurify-3.1.7
upgrading DOMpurify library to 3.1.7
2024-10-19 16:52:33 +02:00
El RIDO
bcf163dd8a
Merge pull request #1430 from PrivateBin/crowdin-translation
New Crowdin updates
2024-10-19 12:44:41 +02:00
PrivateBin Translator Bot
d321995d7d New translations en.json (Czech) 2024-10-19 12:28:51 +02:00
El RIDO
07aeed1c4c
Merge branch 'master' into fix-webkit 2024-10-19 11:35:57 +02:00
El RIDO
849e32201e
improve SRI example 2024-10-19 11:28:01 +02:00
PrivateBin Translator Bot
2cd1dca600 New translations en.json (Czech) 2024-10-19 11:26:11 +02:00
El RIDO
ec2e981984
upgrading DOMpurify library to 3.1.7 2024-10-19 11:17:53 +02:00
El RIDO
233a69adde
typo in usage 2024-10-19 10:55:36 +02:00
PrivateBin Translator Bot
95935fe628 New translations en.json (Czech) 2024-10-19 10:09:33 +02:00
PrivateBin Translator Bot
2b668de6c6 New translations en.json (Czech) 2024-10-19 09:02:01 +02:00
PrivateBin Translator Bot
0985cad5bf New translations en.json (Occitan) 2024-10-19 00:32:34 +02:00
PrivateBin Translator Bot
6e3cb7791c New translations en.json (Italian) 2024-10-19 00:32:33 +02:00
PrivateBin Translator Bot
bc052b9c74 New translations en.json (German) 2024-10-19 00:32:31 +02:00
PrivateBin Translator Bot
35b3a823d2 New translations en.json (Czech) 2024-10-19 00:32:30 +02:00
PrivateBin Translator Bot
38c28b8b96 New translations en.json (French) 2024-10-19 00:32:29 +02:00
El RIDO
980bdc922f Update SRI 2024-10-18 23:08:02 +02:00
PrivateBin Translator Bot
3bd8a873a7 New translations en.json (Occitan) 2024-10-18 22:53:18 +02:00
PrivateBin Translator Bot
160e875bc5 New translations en.json (Czech) 2024-10-18 22:53:02 +02:00
El RIDO
52ab0abf51
Merge pull request #1417 from PrivateBin/crowdin-translation
New Crowdin updates
2024-10-18 22:46:28 +02:00
El RIDO
a7e9c7a52b
Merge branch 'master' into crowdin-translation 2024-10-18 22:45:57 +02:00
El RIDO
b4e584c574
Merge pull request #1413 from Parthiv-M/navigate-after-delete
Fix: redirect to home page after a paste is deleted
2024-10-18 22:43:40 +02:00
El RIDO
97edbcc167
Merge branch 'master' into navigate-after-delete 2024-10-18 22:39:04 +02:00
parthiv-m
11326f86ba Update SRI 2024-10-18 11:51:57 -04:00
parthiv-m
4d2d9d75c1 Add new key to all translation related files 2024-10-18 11:51:39 -04:00
El RIDO
b31bb4f4e2
Merge pull request #1427 from PrivateBin/doc/unittesting
Fix phpunit doc missing crucial step of installing GCS
2024-10-18 07:07:56 +02:00
El RIDO
6c9e2e054f
Merge pull request #1421 from PrivateBin/fixmail
Fix paste link not always being included in mail
2024-10-18 07:04:21 +02:00
parthiv-m
851dadf600 Update CHANGELOG.md 2024-10-17 21:56:42 -04:00
parthiv-m
788146012e Fix failing tests, update button icon and text according to feedback 2024-10-17 21:56:27 -04:00
theProton
922971590e
Merge branch 'PrivateBin:master' into navigate-after-delete 2024-10-17 21:22:29 -04:00
rugk
8d435d7c14
Fix style by removing optional parameter
Co-authored-by: El RIDO <elrido@gmx.net>
2024-10-18 02:59:20 +02:00
rugk
763d6fca7e
Adding hint that you will see unrelated files and to ignore these 2024-10-18 02:20:50 +02:00
rugk
5b245a3f85
Fix phpunit doc missing crucial step of installing GCS
I tried following the steps when running, for https://github.com/PrivateBin/PrivateBin/pull/1421, but this crucial one step is missing.

Maybe more was missing, most tests failed so hmm… but I only wanted it for the SRI generation and this was hard enough.

(And no, I did not feel like trying to run a container in a [dev]container, so these manual steps should better work.)

Maybe we can improve that further here, I the things I've noticed in this or the other PR.
2024-10-18 02:18:45 +02:00
rugk
2bc5931672 Codespace: Also ensure composer deps like phpunit are usable in devcontainer 2024-10-18 00:13:18 +00:00
rugk
368e8a2ee7 chore: update SRI hash 2024-10-18 00:11:35 +00:00
rugk
2790113199 Revert "Move jquery initialisation/startup logic at the end/down"
This reverts commit eabf763c41d08df92f0b0e9a090fe2bdbae561f6.

It is not needed anymore, apparently.
2024-10-16 22:56:35 +00:00
rugk
64ed6e96ee fix: load in WebKit again by loading jquery, base and deflate libs non-async'ly 2024-10-16 22:46:18 +00:00
rugk
6631e770a0 doc: make config consistent in quoting yourls header too as everything is unused 2024-10-16 22:30:11 +00:00
rugk
2cb10b841f doc: fix wrong doc missing quotation marks 2024-10-16 22:29:20 +00:00
rugk
eabf763c41 Move jquery initialisation/startup logic at the end/down 2024-10-16 22:27:50 +00:00
rugk
ff3a9eea79 Improve devcontainer experience by linking sample config as real config 2024-10-16 21:40:17 +00:00
rugk
e675b2547f
Fix
Fixes https://github.com/PrivateBin/PrivateBin/issues/1420

I have not tested it practically (just a quick hotfix), but given the code history and this was what worked before, I guess this should work. 🙃
2024-10-16 23:09:00 +02:00
parthiv-m
773c56fc94 Fix conditional display of 'New' paste button on alert 2024-10-14 12:54:36 -04:00
parthiv-m
5acecdb879 Fix for styleci failures 2024-10-13 17:51:45 -04:00
parthiv-m
f2b60d3765 Add _is_deleted status message to Controller and prompt for button click after paste delete 2024-10-13 17:45:05 -04:00
PrivateBin Translator Bot
b5da63318d New translations en.json (Polish) 2024-10-11 14:12:31 +02:00
El RIDO
702831ea38
Merge pull request #1416 from ensag-dev/patch-1
i18n: Update Occitan locale
2024-10-11 07:15:28 +02:00
El RIDO
aafc143a5a strict types in templates 2024-10-11 07:14:18 +02:00
El RIDO
a36d72e914 handle potential key cast
since we introduced strict types, this test occasionally fails when a ID consisting only of decimal numbers gets generated
2024-10-11 07:13:20 +02:00
ensag-dev
a8331d65df
Update Occitan locale 2024-10-10 09:31:08 +02:00
El RIDO
0040531057 fix Czech translation tests, test strings now use a non-breaking space 2024-10-09 07:04:12 +02:00
El RIDO
0cc556e8ad
Merge pull request #1415 from PrivateBin/crowdin-translation
New Crowdin updates
2024-10-09 06:55:49 +02:00
PrivateBin Translator Bot
55e5f65cbd New translations en.json (Polish) 2024-10-08 23:30:43 +02:00
parthiv-m
d69d29f3a9 Fix: Once a paste is deleted, navigate to
the home page after 5 seconds; change type
of the corresponding alert to alert-success
2024-10-07 17:42:37 -04:00
El RIDO
545ef9f64a
Merge pull request #1411 from mormegil-cz/cs-translation
Fix/improve/complete Czech translation
2024-10-05 09:01:30 +02:00
Mormegil
4cc2a20d66 Fix/improve/complete Czech translation 2024-10-03 16:26:47 +02:00
El RIDO
f4bb624ae6
Merge pull request #1410 from PrivateBin/crowdin-translation
New Crowdin updates
2024-10-02 18:23:25 +02:00
PrivateBin Translator Bot
a58b7b80f8 New translations en.json (Ukrainian) 2024-10-02 06:03:27 +02:00
El RIDO
9ac08ba202
Merge pull request #1408 from PrivateBin/crowdin-translation
New Crowdin updates
2024-10-01 22:06:30 +02:00
PrivateBin Translator Bot
d8a986dbda New translations en.json (Greek) 2024-10-01 21:54:55 +02:00
PrivateBin Translator Bot
d9fa9786c9 New translations en.json (Ukrainian) 2024-10-01 21:54:54 +02:00
PrivateBin Translator Bot
50ac504fed New translations en.json (Greek) 2024-10-01 16:54:37 +02:00
PrivateBin Translator Bot
471f6ba355 New translations en.json (Ukrainian) 2024-10-01 00:27:21 +02:00
El RIDO
cc16dd0165
undue footer change for bootstrap 3, switch to dvh heights, deal with small screens 2024-09-15 10:57:42 +02:00
El RIDO
57080eb7cc
use recommended bootstrap sticky footer solutions 2024-09-14 08:43:19 +02:00
El RIDO
1a51c0973d
bootstrap improvements, fixes #1392
- remove unused styles (no IDs called preview or comments)
- replace margins & paddings with bootstrap utility classes
- apply min body height to placeholder, plaintext & prettymessage, to move footer to end of viewport
2024-09-12 07:50:52 +02:00
El RIDO
c1333e5831
Merge pull request #1399 from PrivateBin/crowdin-translation
New Crowdin updates
2024-09-10 05:31:05 +02:00
PrivateBin Translator Bot
2a0ea64456 New translations en.json (Lithuanian) 2024-09-10 01:06:41 +02:00
El RIDO
e865bec9c3 document changes 2024-09-03 05:53:01 +02:00
El RIDO
a85a7552c1
Merge pull request #1396 from alexistoulotte/fix/use-opt-model-options-configuration
fix(configuration): Use "model_options[opt]" section from "conf.php"
2024-09-03 05:50:15 +02:00
Alexis Toulotte
d0d0d7b6e5 fix: Get rid of unused code 2024-09-03 09:40:08 +11:00
Alexis Toulotte
46c92e7404 fix(configuration): Use "model_options[opt]" section from "conf.php" 2024-09-03 09:19:01 +11:00
El RIDO
81f4a1f34a
Merge pull request #1395 from Lopkop/patch-1
Update LICENSE.md
2024-08-31 19:22:03 +02:00
El RIDO
083632a074
Merge pull request #1394 from alexistoulotte/fix/allow-non-persistent-sql-connection
Allow non persistent SQL connections
2024-08-31 19:20:09 +02:00
El RIDO
cbd6183f61
Merge pull request #1389 from PrivateBin/crowdin-translation
New Crowdin updates
2024-08-31 19:13:52 +02:00
Mark
a696069ead
Update LICENSE.md 2024-08-30 15:14:28 +00:00
Alexis Toulotte
05644d39f8 fix(configuration): Allow non persistent SQL connections 2024-08-30 11:10:25 +11:00
PrivateBin Translator Bot
8e40b96586 New translations en.json (Catalan) 2024-08-23 09:54:19 +02:00
PrivateBin Translator Bot
fb9ad37db2 New translations en.json (Catalan) 2024-08-22 13:53:01 +02:00
PrivateBin Translator Bot
a04fa272da New translations en.json (Catalan) 2024-08-22 12:29:54 +02:00
PrivateBin Translator Bot
bf22c15782 New translations en.json (Dutch) 2024-08-18 23:59:36 +02:00
PrivateBin Translator Bot
6ebc7a7dcb New translations en.json (Dutch) 2024-08-18 22:08:46 +02:00
PrivateBin Translator Bot
0915c8858b New translations en.json (Dutch) 2024-08-17 06:55:56 +02:00
PrivateBin Translator Bot
aad14ac05f New translations en.json (Korean) 2024-08-17 06:55:54 +02:00
El RIDO
2f4fa349ec
Merge pull request #1384 from PrivateBin/dompurify-3.1.6
upgrading DOMpurify library to 3.1.6
2024-08-03 13:14:45 +02:00
El RIDO
ab2d2f2477 upgrading DOMpurify library to 3.1.6 2024-08-03 09:52:30 +02:00
El RIDO
123d5833a5
Merge pull request #1372 from PrivateBin/sri-into-config
Make SRI hashes configurable, no longer hardcoded in templates
2024-08-03 09:38:54 +02:00
El RIDO
41369e28d5
Merge pull request #1380 from PrivateBin/crowdin-translation
New Crowdin updates
2024-07-23 07:05:31 +02:00
PrivateBin Translator Bot
435f201e2e New translations en.json (Greek) 2024-07-22 22:29:08 +02:00
El RIDO
d032efdb64
Merge pull request #1379 from PrivateBin/crowdin-translation
New Crowdin updates
2024-07-20 21:03:17 +02:00
PrivateBin Translator Bot
d038966b64 New translations en.json (Ukrainian) 2024-07-20 00:48:16 +02:00
El RIDO
93bc122086 apply StyleCI recommendation 2024-07-19 08:20:15 +02:00
El RIDO
2b76898546 preserve configured SRI hashes 2024-07-19 08:05:40 +02:00
El RIDO
5ef8a094e7
re-add missing attribute 2024-07-09 22:47:15 +02:00
El RIDO
4b6c8356f5
clarify use of cache buster, avoid using regex 2024-07-09 22:35:21 +02:00
El RIDO
3c6df4573e
apply StyleCI recommendation 2024-07-09 22:21:01 +02:00
El RIDO
6261c94fc9
break unit tests if mismatch between JS files and SRI configuration array is detected 2024-07-09 22:20:08 +02:00
El RIDO
118c919663
adjust regex due to StyleCI spacing change 2024-07-09 21:51:19 +02:00
El RIDO
e051cde317
apply StyleCI recommendation 2024-07-09 21:48:40 +02:00
El RIDO
d27e7e8ee3
make scriptTag parameter a string for flexibility and clarity 2024-07-09 21:38:41 +02:00
El RIDO
7294ea7847
Merge branch 'master' into sri-into-config 2024-07-09 21:32:42 +02:00
El RIDO
cf95e0b1d1
Merge branch 'master' into pg-tables-query 2024-07-09 21:30:17 +02:00
El RIDO
d2f311d246
chore: prepare for next release 2024-07-09 21:27:49 +02:00
El RIDO
8b3b16be44
SRI hashes are now configurable, no longer hardcoded in templates
- addresses #1365
- should make upgrades easier for those using custom templates
- if the JS files got customized, the default SRI hashes can be replaced in the conf.php file, added commented section in conf.sample.php
2024-07-07 16:36:52 +02:00
El RIDO
e0bca0d4dc simpler PostgreSQL table lookup query, fixes #1361 2024-07-07 12:37:28 +02:00
El RIDO
55176309a7
remove unsafe-eval from CSP 2021-06-20 08:44:25 +02:00
El RIDO
a4a32f6b9e
switch to streaming WASM loading, fixes #814 2021-06-20 08:43:44 +02:00
154 changed files with 4249 additions and 2396 deletions

View File

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

View File

@ -43,7 +43,7 @@ jobs:
actions: read actions: read
id-token: write id-token: write
contents: 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: with:
base64-subjects: "${{ needs.release.outputs.hashes }}" base64-subjects: "${{ needs.release.outputs.hashes }}"
draft-release: true draft-release: true

View File

@ -24,7 +24,7 @@ jobs:
steps: steps:
- name: Download and Extract Artifacts - name: Download and Extract Artifacts
uses: dawidd6/action-download-artifact@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11 uses: dawidd6/action-download-artifact@07ab29fd4a977ae4d2b275087cf67563dfdf0295
with: with:
run_id: ${{ github.event.workflow_run.id }} run_id: ${{ github.event.workflow_run.id }}
path: artifacts path: artifacts

View File

@ -22,11 +22,12 @@ jobs:
continue-on-error: "${{ matrix.experimental }}" continue-on-error: "${{ matrix.experimental }}"
strategy: strategy:
matrix: 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] experimental: [false]
include: # uncomment this to start testing on development release
- php-versions: '8.4' # development release, things can break # include:
experimental: true # - php-versions: '8.5' # development release, things can break
# experimental: true
env: env:
extensions: gd, sqlite3 extensions: gd, sqlite3
extensions-cache-key-name: phpextensions extensions-cache-key-name: phpextensions
@ -120,7 +121,7 @@ jobs:
- name: Setup Node - name: Setup Node
uses: actions/setup-node@v4 uses: actions/setup-node@v4
with: with:
node-version: '20' node-version: '18'
cache: 'npm' cache: 'npm'
cache-dependency-path: 'js/package-lock.json' cache-dependency-path: 'js/package-lock.json'

View File

@ -2,6 +2,7 @@ RewriteEngine on
RewriteCond !%{HTTP_USER_AGENT} "Let's Encrypt validation server" [NC] RewriteCond !%{HTTP_USER_AGENT} "Let's Encrypt validation server" [NC]
RewriteCond %{HTTP_USER_AGENT} ^.*(bot|spider|crawl|https?://|WhatsApp|SkypeUriPreview|facebookexternalhit) [NC] RewriteCond %{HTTP_USER_AGENT} ^.*(bot|spider|crawl|https?://|WhatsApp|SkypeUriPreview|facebookexternalhit) [NC]
RewriteRule .* - [R=403,L] RewriteRule .* - [R=403,L]
AddType application/wasm .wasm
<IfModule mod_php7.c> <IfModule mod_php7.c>
php_value max_execution_time 30 php_value max_execution_time 30

View File

@ -1,5 +1,31 @@
# PrivateBin version history # PrivateBin version history
## 1.7.7 (not yet released)
* ADDED: Switching templates using the web ui (#1501)
* 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.5, ip-lib 1.20.0
## 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
* CHANGED: Tweaked page footer of the `bootstrap5` template (#1392)
* CHANGED: Simpler PostgreSQL table lookup query (#1361)
* CHANGED: SRI hashes are now configurable, no longer hardcoded in templates (#1365)
* CHANGED: Upgrading libraries to: DOMpurify 3.1.7, ip-lib 1.18.1, cloud-storage 1.43.0, aws-sdk-php 3.325.0
* FIXED: Numeric array keys being cast to integer causing failures under strict type checking (#1435)
## 1.7.4 (2024-07-09) ## 1.7.4 (2024-07-09)
* CHANGED: Saving markdown pastes uses `.md` extension instead of `.txt` (#1293) * CHANGED: Saving markdown pastes uses `.md` extension instead of `.txt` (#1293)
* CHANGED: Enable strict type checking in PHP (#1350) * CHANGED: Enable strict type checking in PHP (#1350)

View File

@ -33,6 +33,7 @@
* Mounir Idrassi & J. Mozdzen - secure YOURLS integration * Mounir Idrassi & J. Mozdzen - secure YOURLS integration
* Felipe Nakandakari - enabled AWS SDK to use default credential provider chain in the S3 Storage backend * Felipe Nakandakari - enabled AWS SDK to use default credential provider chain in the S3 Storage backend
* Aaron Sherber - cache control headers for API calls & use of `shortenviayourls` in query parameters * Aaron Sherber - cache control headers for API calls & use of `shortenviayourls` in query parameters
* Mikhail Romanov - copying to clipboard, UI/UX improvements, templates switching
## Translations ## Translations
* Hexalyse - French * Hexalyse - French

View File

@ -1,7 +1,7 @@
# License # License
PrivateBin consists of PHP and JS code which was originally written by Sébastien PrivateBin consists of PHP and JS code which was originally written by Sébastien
Sauvage in 2012 and falls unter the Zlib/libpng license. Also included are Sauvage in 2012 and falls under the Zlib/libpng license. Also included are
libraries that fall under the GPLv2 (rawinflate), BSD 3-clause (Showdown), MIT libraries that fall under the GPLv2 (rawinflate), BSD 3-clause (Showdown), MIT
(base64.js version 1.7, Bootstrap, Identicon, random_compat, composer, kjua, (base64.js version 1.7, Bootstrap, Identicon, random_compat, composer, kjua,
base-x), Apache (prettify.js) and CC-BY (favicon, icon, logo) licenses. All of base-x), Apache (prettify.js) and CC-BY (favicon, icon, logo) licenses. All of

View File

@ -1,7 +1,7 @@
.PHONY: all coverage coverage-js coverage-php doc doc-js doc-php increment sign test test-js test-php help .PHONY: all coverage coverage-js coverage-php doc doc-js doc-php increment sign test test-js test-php help
CURRENT_VERSION = 1.7.4 CURRENT_VERSION = 1.7.6
VERSION ?= 1.7.4 VERSION ?= 1.7.7
VERSION_FILES = README.md SECURITY.md doc/Installation.md js/package*.json lib/Controller.php Makefile VERSION_FILES = README.md SECURITY.md doc/Installation.md js/package*.json lib/Controller.php Makefile
REGEX_CURRENT_VERSION := $(shell echo $(CURRENT_VERSION) | sed "s/\./\\\./g") REGEX_CURRENT_VERSION := $(shell echo $(CURRENT_VERSION) | sed "s/\./\\\./g")
REGEX_VERSION := $(shell echo $(VERSION) | sed "s/\./\\\./g") REGEX_VERSION := $(shell echo $(VERSION) | sed "s/\./\\\./g")
@ -33,7 +33,7 @@ increment: ## Increment and commit new version number, set target version using
do \ do \
sed -i "s/$(REGEX_CURRENT_VERSION)/$(REGEX_VERSION)/g" $$F; \ sed -i "s/$(REGEX_CURRENT_VERSION)/$(REGEX_VERSION)/g" $$F; \
done done
git add $(VERSION_FILES) git add $(VERSION_FILES) CHANGELOG.md
git commit -m "incrementing version" git commit -m "incrementing version"
sign: ## Sign a release. sign: ## Sign a release.

View File

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

View File

@ -4,8 +4,8 @@
| Version | Supported | | Version | Supported |
| ------- | ------------------ | | ------- | ------------------ |
| 1.7.4 | :heavy_check_mark: | | 1.7.6 | :heavy_check_mark: |
| < 1.7.4 | :x: | | < 1.7.6 | :x: |
## Reporting a Vulnerability ## 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 reply from their personal address and can offer you their GPG public key to
support end-to-end encrypted communication on sensitive topics or attachments. support end-to-end encrypted communication on sensitive topics or attachments.
You can also [use the corresponding GitHub form](https://github.com/PrivateBin/PrivateBin/security/advisories/new)
to report a new vulnerability directly on GitHub.
You can also contact us via the regular issue tracker if the risk of early You can also contact us via the regular issue tracker if the risk of early
publication is low or you would request input from other PrivateBin users. publication is low or you would request input from other PrivateBin users.

View File

@ -72,6 +72,35 @@ class Administration
exit("paste $pasteId successfully deleted" . PHP_EOL); 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 * removes empty directories, if current storage model uses Filesystem
* *
@ -124,13 +153,15 @@ class Administration
{ {
echo <<<'EOT' echo <<<'EOT'
Usage: Usage:
administration [--delete <paste id> | --empty-dirs | --help | --purge | --statistics] administration [--delete <paste id> | --delete-all | --empty-dirs | --help | --list-ids | --purge | --statistics]
Options: Options:
-d, --delete deletes the requested paste ID -d, --delete deletes the requested paste ID
--delete-all deletes all paste IDs
-e, --empty-dirs removes empty directories (only if Filesystem storage is -e, --empty-dirs removes empty directories (only if Filesystem storage is
configured) configured)
-h, --help displays this help message -h, --help displays this help message
-l, --list-ids lists all paste IDs
-p, --purge purge all expired pastes -p, --purge purge all expired pastes
-s, --statistics reads all stored pastes and comments and reports statistics -s, --statistics reads all stored pastes and comments and reports statistics
EOT, PHP_EOL; EOT, PHP_EOL;
@ -177,7 +208,8 @@ EOT, PHP_EOL;
self::_help(2); 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) { if (!$this->_opts) {
self::_error_echo('unsupported arguments given'); self::_error_echo('unsupported arguments given');
echo PHP_EOL; echo PHP_EOL;
@ -308,6 +340,12 @@ EOT, PHP_EOL;
$class = 'PrivateBin\\Data\\' . $this->_conf->getKey('class', 'model'); $class = 'PrivateBin\\Data\\' . $this->_conf->getKey('class', 'model');
$this->_store = new $class($this->_conf->getSection('model_options')); $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) { if (($pasteId = $this->_option('d', 'delete')) !== null) {
$this->_delete($pasteId); $this->_delete($pasteId);
} }

View File

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

View File

@ -42,13 +42,28 @@ defaultformatter = "plaintext"
; size limit per paste or comment in bytes, defaults to 10 Mebibytes ; size limit per paste or comment in bytes, defaults to 10 Mebibytes
sizelimit = 10485760 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 ; available are "page" (tpl/page.php), the classic ZeroBin style and several
; bootstrap variants: "bootstrap-dark", "bootstrap-compact", "bootstrap-page", ; bootstrap variants: "bootstrap-dark", "bootstrap-compact", "bootstrap-page",
; which can be combined with "-dark" and "-compact" for "bootstrap-dark-page" ; which can be combined with "-dark" and "-compact" for "bootstrap-dark-page",
; and finally "bootstrap-compact-page" - previews at: ; "bootstrap-compact-page" and finally "bootstrap5" (tpl/bootstrap5.php) - previews at:
; https://privatebin.info/screenshots.html ; https://privatebin.info/screenshots.html
template = "bootstrap" ; template = "bootstrap"
; (optional) info text to display ; (optional) info text to display
; use single, instead of double quotes for HTML attributes ; use single, instead of double quotes for HTML attributes
@ -101,11 +116,9 @@ languageselection = false
; they are embedded in pastes. If you wish to allow that, you can adjust the ; 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 ; policy here. See https://github.com/PrivateBin/PrivateBin/wiki/FAQ#why-does-not-it-load-embedded-images
; for details. ; for details.
; - The 'unsafe-eval' is used in two cases; to check if the browser supports ; - The 'wasm-unsafe-eval' is used to enable webassembly support (used for zlib
; async functions and display an error if not and for Chrome to enable ; compression). You can remove it if compression doesn't need to be supported.
; webassembly support (used for zlib compression). You can remove it if Chrome ; 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'; 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"
; 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"
; stay compatible with PrivateBin Alpha 0.19, less secure ; 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 ; if enabled will use base64.js version 1.7 instead of 2.1.9 and sha1 instead of
@ -259,7 +272,7 @@ dir = PATH "data"
;version = "latest" ;version = "latest"
;bucket = "my-bucket" ;bucket = "my-bucket"
[yourls] ;[yourls]
; When using YOURLS as a "urlshortener" config item: ; When using YOURLS as a "urlshortener" config item:
; - By default, "urlshortener" will point to the YOURLS API URL, with or without ; - By default, "urlshortener" will point to the YOURLS API URL, with or without
; credentials, and will be visible in public on the PrivateBin web page. ; credentials, and will be visible in public on the PrivateBin web page.
@ -275,3 +288,9 @@ dir = PATH "data"
; signature = "" ; signature = ""
; (optional) the URL of the YOURLS API, called to shorten a PrivateBin URL ; (optional) the URL of the YOURLS API, called to shorten a PrivateBin URL
; apiurl = "https://yourls.example.com/yourls-api.php" ; apiurl = "https://yourls.example.com/yourls-api.php"
;[sri]
; Subresource integrity (SRI) hashes used in template files. Uncomment and set
; these for all js files used. See:
; https://github.com/PrivateBin/PrivateBin/wiki/FAQ#user-content-how-to-make-privatebin-work-when-i-have-changed-some-javascript-files
;js/privatebin.js = "sha512-[…]"

View File

@ -24,7 +24,7 @@ jobs:
steps: steps:
# Checkout the repository to the GitHub Actions runner # Checkout the repository to the GitHub Actions runner
- name: Checkout code - name: Checkout code
uses: actions/checkout@v2 uses: actions/checkout@v4
# Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis # Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis
- name: Run Codacy Analysis CLI - name: Run Codacy Analysis CLI

View File

@ -26,12 +26,13 @@
"require" : { "require" : {
"php": "^7.3 || ^8.0", "php": "^7.3 || ^8.0",
"jdenticon/jdenticon": "1.0.2", "jdenticon/jdenticon": "1.0.2",
"mlocati/ip-lib": "1.18.0", "mlocati/ip-lib": "1.20.0",
"symfony/polyfill-php80": "1.31.0",
"yzalis/identicon": "2.0.0" "yzalis/identicon": "2.0.0"
}, },
"suggest" : { "suggest" : {
"google/cloud-storage" : "1.41.0", "google/cloud-storage" : "1.45.0",
"aws/aws-sdk-php" : "3.302.0" "aws/aws-sdk-php" : "3.336.2"
}, },
"require-dev" : { "require-dev" : {
"phpunit/phpunit" : "^9" "phpunit/phpunit" : "^9"

205
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "b76c0c25f93dc79c4525cb3c86e5af99", "content-hash": "6c7e6dea19e8bfd5641b220cb68c4b65",
"packages": [ "packages": [
{ {
"name": "jdenticon/jdenticon", "name": "jdenticon/jdenticon",
@ -57,16 +57,16 @@
}, },
{ {
"name": "mlocati/ip-lib", "name": "mlocati/ip-lib",
"version": "1.18.0", "version": "1.20.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/mlocati/ip-lib.git", "url": "https://github.com/mlocati/ip-lib.git",
"reference": "c77bd0b1f3e3956c7e9661e75cb1f54ed67d95d2" "reference": "fd45fc3bf08ed6c7e665e2e70562082ac954afd4"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/mlocati/ip-lib/zipball/c77bd0b1f3e3956c7e9661e75cb1f54ed67d95d2", "url": "https://api.github.com/repos/mlocati/ip-lib/zipball/fd45fc3bf08ed6c7e665e2e70562082ac954afd4",
"reference": "c77bd0b1f3e3956c7e9661e75cb1f54ed67d95d2", "reference": "fd45fc3bf08ed6c7e665e2e70562082ac954afd4",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -112,7 +112,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/mlocati/ip-lib/issues", "issues": "https://github.com/mlocati/ip-lib/issues",
"source": "https://github.com/mlocati/ip-lib/tree/1.18.0" "source": "https://github.com/mlocati/ip-lib/tree/1.20.0"
}, },
"funding": [ "funding": [
{ {
@ -124,7 +124,87 @@
"type": "other" "type": "other"
} }
], ],
"time": "2022-01-13T18:05:33+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", "name": "yzalis/identicon",
@ -257,16 +337,16 @@
}, },
{ {
"name": "myclabs/deep-copy", "name": "myclabs/deep-copy",
"version": "1.11.1", "version": "1.13.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/myclabs/DeepCopy.git", "url": "https://github.com/myclabs/DeepCopy.git",
"reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" "reference": "024473a478be9df5fdaca2c793f2232fe788e414"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414",
"reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "reference": "024473a478be9df5fdaca2c793f2232fe788e414",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -274,11 +354,12 @@
}, },
"conflict": { "conflict": {
"doctrine/collections": "<1.6.8", "doctrine/collections": "<1.6.8",
"doctrine/common": "<2.13.3 || >=3,<3.2.2" "doctrine/common": "<2.13.3 || >=3 <3.2.2"
}, },
"require-dev": { "require-dev": {
"doctrine/collections": "^1.6.8", "doctrine/collections": "^1.6.8",
"doctrine/common": "^2.13.3 || ^3.2.2", "doctrine/common": "^2.13.3 || ^3.2.2",
"phpspec/prophecy": "^1.10",
"phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
}, },
"type": "library", "type": "library",
@ -304,7 +385,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/myclabs/DeepCopy/issues", "issues": "https://github.com/myclabs/DeepCopy/issues",
"source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0"
}, },
"funding": [ "funding": [
{ {
@ -312,20 +393,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-03-08T13:26:56+00:00" "time": "2025-02-12T12:17:51+00:00"
}, },
{ {
"name": "nikic/php-parser", "name": "nikic/php-parser",
"version": "v4.19.1", "version": "v4.19.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/nikic/PHP-Parser.git", "url": "https://github.com/nikic/PHP-Parser.git",
"reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/715f4d25e225bc47b293a8b997fe6ce99bf987d2",
"reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -334,7 +415,7 @@
}, },
"require-dev": { "require-dev": {
"ircmaxell/php-yacc": "^0.0.7", "ircmaxell/php-yacc": "^0.0.7",
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
}, },
"bin": [ "bin": [
"bin/php-parse" "bin/php-parse"
@ -366,9 +447,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/nikic/PHP-Parser/issues", "issues": "https://github.com/nikic/PHP-Parser/issues",
"source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.4"
}, },
"time": "2024-03-17T08:10:35+00:00" "time": "2024-09-29T15:01:53+00:00"
}, },
{ {
"name": "phar-io/manifest", "name": "phar-io/manifest",
@ -490,35 +571,35 @@
}, },
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",
"version": "9.2.31", "version": "9.2.32",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5",
"reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-dom": "*", "ext-dom": "*",
"ext-libxml": "*", "ext-libxml": "*",
"ext-xmlwriter": "*", "ext-xmlwriter": "*",
"nikic/php-parser": "^4.18 || ^5.0", "nikic/php-parser": "^4.19.1 || ^5.1.0",
"php": ">=7.3", "php": ">=7.3",
"phpunit/php-file-iterator": "^3.0.3", "phpunit/php-file-iterator": "^3.0.6",
"phpunit/php-text-template": "^2.0.2", "phpunit/php-text-template": "^2.0.4",
"sebastian/code-unit-reverse-lookup": "^2.0.2", "sebastian/code-unit-reverse-lookup": "^2.0.3",
"sebastian/complexity": "^2.0", "sebastian/complexity": "^2.0.3",
"sebastian/environment": "^5.1.2", "sebastian/environment": "^5.1.5",
"sebastian/lines-of-code": "^1.0.3", "sebastian/lines-of-code": "^1.0.4",
"sebastian/version": "^3.0.1", "sebastian/version": "^3.0.2",
"theseer/tokenizer": "^1.2.0" "theseer/tokenizer": "^1.2.3"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^9.3" "phpunit/phpunit": "^9.6"
}, },
"suggest": { "suggest": {
"ext-pcov": "PHP extension that provides line coverage", "ext-pcov": "PHP extension that provides line coverage",
@ -527,7 +608,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "9.2-dev" "dev-main": "9.2.x-dev"
} }
}, },
"autoload": { "autoload": {
@ -556,7 +637,7 @@
"support": { "support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32"
}, },
"funding": [ "funding": [
{ {
@ -564,7 +645,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2024-03-02T06:37:42+00:00" "time": "2024-08-22T04:23:01+00:00"
}, },
{ {
"name": "phpunit/php-file-iterator", "name": "phpunit/php-file-iterator",
@ -809,45 +890,45 @@
}, },
{ {
"name": "phpunit/phpunit", "name": "phpunit/phpunit",
"version": "9.6.19", "version": "9.6.22",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git", "url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "a1a54a473501ef4cdeaae4e06891674114d79db8" "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f80235cb4d3caa59ae09be3adf1ded27521d1a9c",
"reference": "a1a54a473501ef4cdeaae4e06891674114d79db8", "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"doctrine/instantiator": "^1.3.1 || ^2", "doctrine/instantiator": "^1.5.0 || ^2",
"ext-dom": "*", "ext-dom": "*",
"ext-json": "*", "ext-json": "*",
"ext-libxml": "*", "ext-libxml": "*",
"ext-mbstring": "*", "ext-mbstring": "*",
"ext-xml": "*", "ext-xml": "*",
"ext-xmlwriter": "*", "ext-xmlwriter": "*",
"myclabs/deep-copy": "^1.10.1", "myclabs/deep-copy": "^1.12.1",
"phar-io/manifest": "^2.0.3", "phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.0.2", "phar-io/version": "^3.2.1",
"php": ">=7.3", "php": ">=7.3",
"phpunit/php-code-coverage": "^9.2.28", "phpunit/php-code-coverage": "^9.2.32",
"phpunit/php-file-iterator": "^3.0.5", "phpunit/php-file-iterator": "^3.0.6",
"phpunit/php-invoker": "^3.1.1", "phpunit/php-invoker": "^3.1.1",
"phpunit/php-text-template": "^2.0.3", "phpunit/php-text-template": "^2.0.4",
"phpunit/php-timer": "^5.0.2", "phpunit/php-timer": "^5.0.3",
"sebastian/cli-parser": "^1.0.1", "sebastian/cli-parser": "^1.0.2",
"sebastian/code-unit": "^1.0.6", "sebastian/code-unit": "^1.0.8",
"sebastian/comparator": "^4.0.8", "sebastian/comparator": "^4.0.8",
"sebastian/diff": "^4.0.3", "sebastian/diff": "^4.0.6",
"sebastian/environment": "^5.1.3", "sebastian/environment": "^5.1.5",
"sebastian/exporter": "^4.0.5", "sebastian/exporter": "^4.0.6",
"sebastian/global-state": "^5.0.1", "sebastian/global-state": "^5.0.7",
"sebastian/object-enumerator": "^4.0.3", "sebastian/object-enumerator": "^4.0.4",
"sebastian/resource-operations": "^3.0.3", "sebastian/resource-operations": "^3.0.4",
"sebastian/type": "^3.2", "sebastian/type": "^3.2.1",
"sebastian/version": "^3.0.2" "sebastian/version": "^3.0.2"
}, },
"suggest": { "suggest": {
@ -892,7 +973,7 @@
"support": { "support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues", "issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy", "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.19" "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.22"
}, },
"funding": [ "funding": [
{ {
@ -908,7 +989,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-04-05T04:35:58+00:00" "time": "2024-12-05T13:48:26+00:00"
}, },
{ {
"name": "sebastian/cli-parser", "name": "sebastian/cli-parser",
@ -1936,5 +2017,5 @@
"platform-overrides": { "platform-overrides": {
"php": "7.3" "php": "7.3"
}, },
"plugin-api-version": "2.6.0" "plugin-api-version": "2.3.0"
} }

View File

@ -69,45 +69,8 @@ body.loading {
margin-right: 8px; margin-right: 8px;
} }
#qrcodemodalClose {
float: right;
}
#qrcode-display {
width: 200px;
height: 200px;
margin: auto;
}
#pastelink {
display: inline;
}
#pastelink > a {
word-wrap: break-word;
}
#preview {
margin-bottom: 10px;
}
#message, .replymessage {
font-family: monospace;
resize: vertical;
}
#nickname {
margin: 5px 0;
}
#comments, #comments button {
margin-bottom: 10px;
}
.comment { .comment {
border-left: 1px solid #ccc;
padding: 5px 0 5px 10px; padding: 5px 0 5px 10px;
transition: background-color 0.75s ease-out;
} }
footer h4 { footer h4 {
@ -175,3 +138,31 @@ html[dir="rtl"] #language {
html[dir="rtl"] #deletelink, html[dir="rtl"] #qrcodemodalClose { html[dir="rtl"] #deletelink, html[dir="rtl"] #qrcodemodalClose {
float: left; 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;
}

View File

@ -14,55 +14,23 @@
display: none !important; display: none !important;
} }
#qrcodemodalClose { .opacity-05-1-hover {
float: right; opacity: 0.5;
transition: all 0.15s ease;
} }
#qrcode-display { .opacity-05-1-hover:hover {
width: 200px; opacity: 1;
height: 200px;
margin: auto;
}
#pastelink {
display: inline;
}
#pastelink > a {
word-wrap: break-word;
}
#preview {
margin-bottom: 10px;
}
#message {
height: 70vh;
}
#message, .replymessage {
font-family: monospace;
resize: vertical;
}
#nickname {
margin: 5px 0;
}
#comments, #comments button {
margin-bottom: 10px;
}
.comment {
border-left: 1px solid #ccc;
padding: 5px 0 5px 10px;
transition: background-color 0.75s ease-out;
} }
.dropdown-menu { .dropdown-menu {
--bs-dropdown-min-width: 23rem; --bs-dropdown-min-width: 23rem;
} }
pre {
margin-bottom: 0;
}
[data-bs-theme=light] pre, [data-bs-theme=light] .card { [data-bs-theme=light] pre, [data-bs-theme=light] .card {
background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)); background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1));
} }
@ -84,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 { html[dir="rtl"] #deletelink, html[dir="rtl"] #qrcodemodalClose {
float: left; 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);
}

View File

@ -38,27 +38,64 @@
outline-offset: -50px; outline-offset: -50px;
} }
.dragAndDropFile {
color: #777;
font-size: 1em;
display: inline;
white-space: normal;
}
#filewrap { #filewrap {
transition: background-color 0.75s ease-out; transition: background-color 0.75s ease-out;
} }
.highlight {
background-color: #fd8;
transition: background-color 0.2s ease-in;
}
#deletelink { #deletelink {
float: right; float: right;
margin-left: 5px; 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 { .commentdata {
white-space: pre-wrap; 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;
}

View File

@ -86,6 +86,7 @@ h3.title {
#aboutbox a { color: #94a3b4; } #aboutbox a { color: #94a3b4; }
#message, #cleartext, #prettymessage, #attachment, .replymessage { #message, #cleartext, #prettymessage, #attachment, .replymessage {
position: relative;
clear: both; clear: both;
color: #000; color: #000;
background-color: #fff; background-color: #fff;
@ -125,7 +126,7 @@ h3.title {
#pasteresult button { margin-left: 11px; } #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 } #copyhint { color: #666; font-size: 0.85em }

View File

@ -22,7 +22,6 @@ for more information.
### Minimal Requirements ### Minimal Requirements
- PHP version 7.3 or above - PHP version 7.3 or above
- ctype extension
- GD extension (when using identicon or vizhash icons, jdenticon works without it) - GD extension (when using identicon or vizhash icons, jdenticon works without it)
- zlib extension - zlib extension
- some disk space or a database supported by [PDO](https://php.net/manual/book.pdo.php) - 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 ( CREATE TABLE prefix_config (
id CHAR(16) NOT NULL, value TEXT, PRIMARY KEY (id) id CHAR(16) NOT NULL, value TEXT, PRIMARY KEY (id)
); );
INSERT INTO prefix_config VALUES('VERSION', '1.7.4'); INSERT INTO prefix_config VALUES('VERSION', '1.7.6');
``` ```
In **PostgreSQL**, the `data`, `attachment`, `nickname` and `vizhash` columns In **PostgreSQL**, the `data`, `attachment`, `nickname` and `vizhash` columns

View File

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

View File

@ -151,7 +151,7 @@
"server error or not responding": "خطأ في الخادم أو لا يستجيب", "server error or not responding": "خطأ في الخادم أو لا يستجيب",
"Could not post comment: %s": "لا يمكن نشر تعليق: %s", "Could not post comment: %s": "لا يمكن نشر تعليق: %s",
"Sending paste…": "يُرسل لصق…", "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": "حذف البيانات", "Delete data": "حذف البيانات",
"Could not create paste: %s": "تعذر إنشاء اللصق: %s", "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؟)", "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؟)",
@ -218,6 +218,14 @@
"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 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.": "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.": "خطأ في فك ضغط اللصق، متصفحك لا يدعم 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": "السمة"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "Грешка в сървъра или не отговаря", "server error or not responding": "Грешка в сървъра или не отговаря",
"Could not post comment: %s": "Публикуването на коментара Ви беше неуспешно: %s", "Could not post comment: %s": "Публикуването на коментара Ви беше неуспешно: %s",
"Sending paste…": "Изпращане на информацията Ви…", "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": "Изтриване на информацията", "Delete data": "Изтриване на информацията",
"Could not create paste: %s": "Създаването на връзката ви беше неуспешно: %s", "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?)": "Дешифроването на информацията беше неуспешно: Ключа за декриптиране липсва във връзката (Да не сте използвали услуга за пренасочване или скъсяване на връзката, което би изрязало части от нея?)", "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Дешифроването на информацията беше неуспешно: Ключа за декриптиране липсва във връзката (Да не сте използвали услуга за пренасочване или скъсяване на връзката, което би изрязало части от нея?)",
@ -219,5 +219,13 @@
"Yes, see it": "Yes, see it", "Yes, see it": "Yes, see it",
"Dark Mode": "Dark Mode", "Dark Mode": "Dark Mode",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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"
} }

View File

@ -20,7 +20,7 @@
"Error saving comment. Sorry.": "S'ha produït un error en desar el comentari. Ho sento.", "Error saving comment. Sorry.": "S'ha produït un error en desar el comentari. Ho sento.",
"Error saving paste. Sorry.": "S'ha produït un error en desar l'enganxat. Ho sento.", "Error saving paste. Sorry.": "S'ha produït un error en desar l'enganxat. Ho sento.",
"Invalid paste ID.": "Identificador d'enganxament no vàlid.", "Invalid paste ID.": "Identificador d'enganxament no vàlid.",
"Paste is not of burn-after-reading type.": "Paste is not of burn-after-reading type.", "Paste is not of burn-after-reading type.": "La nota no és del tipus eliminar després de llegir.",
"Wrong deletion token. Paste was not deleted.": "El token d'eliminació és incorrecte. El Paste no s'ha eliminat.", "Wrong deletion token. Paste was not deleted.": "El token d'eliminació és incorrecte. El Paste no s'ha eliminat.",
"Paste was properly deleted.": "El Paste s'ha esborrat correctament.", "Paste was properly deleted.": "El Paste s'ha esborrat correctament.",
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Cal JavaScript perquè %s funcioni. Em sap greu les molèsties.", "JavaScript is required for %s to work. Sorry for the inconvenience.": "Cal JavaScript perquè %s funcioni. Em sap greu les molèsties.",
@ -92,7 +92,7 @@
"%d anys" "%d anys"
], ],
"Never": "Mai", "Never": "Mai",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.", "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Nota: Aquest és un servei de prova. Les dades s'eliminaran. Molts gatets moriran si abuses d'aquest servei.",
"This document will expire in %d seconds.": [ "This document will expire in %d seconds.": [
"Aquest document caducarà d'aquí %d segon.", "Aquest document caducarà d'aquí %d segon.",
"Aquest document caducarà d'aquí %d segons.", "Aquest document caducarà d'aquí %d segons.",
@ -151,10 +151,10 @@
"server error or not responding": "server error or not responding", "server error or not responding": "server error or not responding",
"Could not post comment: %s": "No s'ha pogut publicar el comentari: %s", "Could not post comment: %s": "No s'ha pogut publicar el comentari: %s",
"Sending paste…": "Enviant paste…", "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", "Delete data": "Esborrar les dades",
"Could not create paste: %s": "Could not create paste: %s", "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?)", "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?)",
"B": "B", "B": "B",
"KiB": "KiB", "KiB": "KiB",
"MiB": "MiB", "MiB": "MiB",
@ -172,8 +172,8 @@
"Cloned: '%s'": "Cloned: '%s'", "Cloned: '%s'": "Cloned: '%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.": "The cloned file '%s' was attached to this paste.",
"Attach a file": "Adjuntar un fitxer", "Attach a file": "Adjuntar un fitxer",
"alternatively drag & drop a file or paste an image from the clipboard": "alternatively drag & drop a file or paste an image from the clipboard", "alternatively drag & drop a file or paste an image from the clipboard": "alternativament, pots arrossegar i deixar anar un fitxer o enganxar una imatge des del porta-retalls",
"File too large, to display a preview. Please download the attachment.": "File too large, to display a preview. Please download the attachment.", "File too large, to display a preview. Please download the attachment.": "El fitxer és massa gran per fer una vista prèvia. Si us plau, descarrega l'adjunt.",
"Remove attachment": "Remove 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.", "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.",
"Invalid attachment.": "Invalid attachment.", "Invalid attachment.": "Invalid attachment.",
@ -211,13 +211,21 @@
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.", "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.", "URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
"Save paste": "Save paste", "Save paste": "Save paste",
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.", "Your IP is not authorized to create pastes.": "La teva IP no està autoritzada a crear notes.",
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.", "Trying to shorten a URL that isn't pointing at our instance.": "S'està intentant escurçar un URL que no apunta a la nostra instància.",
"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 calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error en la crida a YOURLS. Probablement és un problema de configuració, com ara \"apiurl\" o \"signature\" incorrectes o que falten.",
"Error parsing YOURLS response.": "Error parsing YOURLS response.", "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?", "This secret message can only be displayed once. Would you like to see it now?": "Aquest missatge secret sols es pot veure una vegada. Vols obrir-ho ara?",
"Yes, see it": "Yes, see it", "Yes, see it": "Yes, see it",
"Dark Mode": "Dark Mode", "Dark Mode": "Dark Mode",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error de compressió de la nota, no hi ha suport de WebAssembly.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "sbagliu di u servitore o u servitore ùn risponde micca", "server error or not responding": "sbagliu di u servitore o u servitore ùn risponde micca",
"Could not post comment: %s": "Ùn si pò micca impustà u cummentu : %s", "Could not post comment: %s": "Ùn si pò micca impustà u cummentu : %s",
"Sending paste…": "Inviu di lappiccicu…", "Sending paste…": "Inviu di lappiccicu…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "U vostru appiccicu si trova à lindirizzu<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 à lindirizzu <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", "Delete data": "Squassà i dati",
"Could not create paste: %s": "Ùn si pò micca creà lappiccicu : %s", "Could not create paste: %s": "Ùn si pò micca creà lappiccicu : %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à lappiccicu : A chjave di dicifratura hè assente in lindirizzu. Averiate impiegatu un orientadore dindirizzu o un riduttore chì ammuzzeghja una parte di lindirizzu ?", "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à lappiccicu : A chjave di dicifratura hè assente in lindirizzu. Averiate impiegatu un orientadore dindirizzu o un riduttore chì ammuzzeghja una parte di lindirizzu ?",
@ -168,15 +168,15 @@
"Plain Text": "Testu in chjaru", "Plain Text": "Testu in chjaru",
"Source Code": "Codice di fonte", "Source Code": "Codice di fonte",
"Markdown": "Markdown", "Markdown": "Markdown",
"Download attachment": "Scaricà a pezza aghjunta", "Download attachment": "Scaricà a pezza ghjunta",
"Cloned: '%s'": "Duppiatu : « %s »", "Cloned: '%s'": "Duppiatu : « %s »",
"The cloned file '%s' was attached to this paste.": "U schedariu duppiatu « %s » hè statu aghjuntu à stappiccicu.", "The cloned file '%s' was attached to this paste.": "U schedariu duppiatu « %s » hè statu aghjuntu à stappiccicu.",
"Attach a file": "Aghjunghje un schedariu", "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 premepapei", "alternatively drag & drop a file or paste an image from the clipboard": "in alternanza, sguillà è depone un schedariu o incullà una fiura da u premepapei",
"File too large, to display a preview. Please download the attachment.": "Schedariu troppu maiò per affissà una fighjulata. Scaricate 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 aghjunta", "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 linviu di i schedarii cifrati. Impiegate un navigatore più recente.", "Your browser does not support uploading encrypted files. Please use a newer browser.": "U vostru navigatore ùn accetta micca linviu 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", "Options": "Ozzioni",
"Shorten URL": "Ammuzzà lindirizzu", "Shorten URL": "Ammuzzà lindirizzu",
"Editor": "Editore", "Editor": "Editore",
@ -219,5 +219,13 @@
"Yes, see it": "Iè, fighjallu", "Yes, see it": "Iè, fighjallu",
"Dark Mode": "Modu scuru", "Dark Mode": "Modu scuru",
"Error compressing paste, due to missing WebAssembly support.": "Sbagliu durante a cumpressione di lappiccicu, perchè WebAssembly ùn hè micca accettatu.", "Error compressing paste, due to missing WebAssembly support.": "Sbagliu durante a cumpressione di lappiccicu, 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 lappiccicu, perchè u vostru navigatore ùn accetteghja micca WebAssembly. Ci vole à impiegà un altru navigatore per affissà stappiccicu." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Sbagliu durante a scumpressione di lappiccicu, perchè u vostru navigatore ùn accetteghja micca WebAssembly. Ci vole à impiegà un altru navigatore per affissà stappiccicu.",
"Start over": "Principià torna",
"Paste copied to clipboard": "Lappiccicu hè statu cupiatu in u premepapei",
"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à lappiccicu, appughjate nantà u buttone di copia o impiegate laccurtatoghju di u premepapei <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 premepapei",
"Paste text": "Testu di lappiccicu",
"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"
} }

View File

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

View File

@ -151,7 +151,7 @@
"server error or not responding": "Fehler auf dem Server oder keine Antwort vom Server", "server error or not responding": "Fehler auf dem Server oder keine Antwort vom Server",
"Could not post comment: %s": "Konnte Kommentar nicht senden: %s", "Could not post comment: %s": "Konnte Kommentar nicht senden: %s",
"Sending paste…": "Sende Paste…", "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", "Delete data": "Lösche Daten",
"Could not create paste: %s": "Text konnte nicht erstellt werden: %s", "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?)", "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?)",
@ -219,5 +219,13 @@
"Yes, see it": "Ja, jetzt einsehen", "Yes, see it": "Ja, jetzt einsehen",
"Dark Mode": "Nachtmodus", "Dark Mode": "Nachtmodus",
"Error compressing paste, due to missing WebAssembly support.": "Fehler beim Komprimieren des Textes, da WebAssembly-Unterstützung fehlt.", "Error compressing paste, due to missing WebAssembly support.": "Fehler beim Komprimieren des Textes, da WebAssembly-Unterstützung fehlt.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Fehler beim Dekomprimieren des Textes. Dein Browser unterstützt WebAssembly nicht. Bitte verwende einen anderen Browser, um diesen Text anzuzeigen." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Fehler beim Dekomprimieren des Textes. Dein Browser unterstützt WebAssembly nicht. Bitte verwende einen anderen Browser, um diesen Text anzuzeigen.",
"Start over": "Neuen Text erstellen",
"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"
} }

View File

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

View File

@ -151,7 +151,7 @@
"server error or not responding": "server error or not responding", "server error or not responding": "server error or not responding",
"Could not post comment: %s": "Could not post comment: %s", "Could not post comment: %s": "Could not post comment: %s",
"Sending paste…": "Sending paste…", "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", "Delete data": "Delete data",
"Could not create paste: %s": "Could not create paste: %s", "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?)", "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?)",
@ -219,5 +219,13 @@
"Yes, see it": "Yes, see it", "Yes, see it": "Yes, see it",
"Dark Mode": "Dark Mode", "Dark Mode": "Dark Mode",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "Error del servidor o el servidor no responde", "server error or not responding": "Error del servidor o el servidor no responde",
"Could not post comment: %s": "No fue posible publicar comentario: %s", "Could not post comment: %s": "No fue posible publicar comentario: %s",
"Sending paste…": "Enviando \"paste\"…", "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", "Delete data": "Eliminar datos",
"Could not create paste: %s": "No fue posible crear el archivo: %s", "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?)", "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?)",
@ -219,5 +219,13 @@
"Yes, see it": "Sí, verlo", "Yes, see it": "Sí, verlo",
"Dark Mode": "Modo nocturno", "Dark Mode": "Modo nocturno",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "serveri viga või ei vasta", "server error or not responding": "serveri viga või ei vasta",
"Could not post comment: %s": "Ei suutnud kommentaari postitada: %s", "Could not post comment: %s": "Ei suutnud kommentaari postitada: %s",
"Sending paste…": "Kleepe saatmine…", "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", "Delete data": "Kustuta andmed",
"Could not create paste: %s": "Ei suutnud kleebet luua: %s", "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?)", "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?)",
@ -215,9 +215,17 @@
"Trying to shorten a URL that isn't pointing at our instance.": "Püüame lühendada URL-i, mis ei viita meie instantsile.", "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 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.", "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?", "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": "Yes, see it", "Yes, see it": "Jah, vaata seda",
"Dark Mode": "Tume režiim", "Dark Mode": "Tume režiim",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "palvelinvirhe tai palvelin ei vastaa", "server error or not responding": "palvelinvirhe tai palvelin ei vastaa",
"Could not post comment: %s": "Kommenttia ei voitu lähettää: %s", "Could not post comment: %s": "Kommenttia ei voitu lähettää: %s",
"Sending paste…": "Lähetetään pastea…", "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", "Delete data": "Poista data",
"Could not create paste: %s": "Pastea ei voitu luoda: %s", "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ä?)", "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ä?)",
@ -218,6 +218,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?", "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", "Yes, see it": "Kyllä, näet sen",
"Dark Mode": "Tumma tila", "Dark Mode": "Tumma tila",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Virhe pakattaessa pastea, koska WebAssembly-tuki puuttuu.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "Le serveur ne répond pas ou a rencontré une erreur", "server error or not responding": "Le serveur ne répond pas ou a rencontré une erreur",
"Could not post comment: %s": "Impossible de poster le commentaire : %s", "Could not post comment: %s": "Impossible de poster le commentaire : %s",
"Sending paste…": "Envoi du paste…", "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", "Delete data": "Supprimer les données du paste",
"Could not create paste: %s": "Impossible de créer le paste : %s", "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 ?)", "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 ?)",
@ -219,5 +219,13 @@
"Yes, see it": "Oui, le voir", "Yes, see it": "Oui, le voir",
"Dark Mode": "Mode Sombre", "Dark Mode": "Mode Sombre",
"Error compressing paste, due to missing WebAssembly support.": "Erreur lors de la compression du paste, en raison du support de WebAssembly manquant.", "Error compressing paste, due to missing WebAssembly support.": "Erreur lors de la compression du paste, en raison du support de WebAssembly manquant.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Erreur lors de la décompression du paste, votre navigateur ne supporte pas WebAssembly. Veuillez utiliser un autre navigateur pour voir ce paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Erreur lors de la décompression du paste, votre navigateur ne supporte pas WebAssembly. Veuillez utiliser un autre navigateur pour voir ce paste.",
"Start over": "Recommencer",
"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": "Theme"
} }

View File

@ -1,7 +1,7 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s 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.": "%s הוא שירות pastebin מקוון, מינימליסטי וקוד פתוח, שבו לשרת אין כל ידע על המידע שהודבק. הנתונים מוצפנים ומפוענחים %sבדפדפן%s באמצעות הצפנת AES ב-256 סיביות.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "More information on the <a href=\"https://privatebin.info/\">project page</a>.", "More information on the <a href=\"https://privatebin.info/\">project page</a>.": "מידע נוסף בדף <a href=\"https://privatebin.info/\">הפרויקט</a>.",
"Because ignorance is bliss": "כיוון שבורות היא ברכה", "Because ignorance is bliss": "כיוון שבורות היא ברכה",
"Paste does not exist, has expired or has been deleted.": "ההדבקה לא קיימת, פגה או נמחקה.", "Paste does not exist, has expired or has been deleted.": "ההדבקה לא קיימת, פגה או נמחקה.",
"%s requires php %s or above to work. Sorry.": "%s דורש PHP %s כדי לפעול.", "%s requires php %s or above to work. Sorry.": "%s דורש PHP %s כדי לפעול.",
@ -29,7 +29,7 @@
"Create": "צור", "Create": "צור",
"Clone": "שכפול", "Clone": "שכפול",
"Raw text": "טקסט גולמי", "Raw text": "טקסט גולמי",
"Expires": "Expires", "Expires": "יפוג ב",
"Burn after reading": "קוראים-שורפים", "Burn after reading": "קוראים-שורפים",
"Open discussion": "פתיחת דיון", "Open discussion": "פתיחת דיון",
"Password (recommended)": "ססמה (מומלץ)", "Password (recommended)": "ססמה (מומלץ)",
@ -53,11 +53,11 @@
], ],
"%d hours": [ "%d hours": [
"שעה אחת", "שעה אחת",
"%d hours (1st plural)", "%d שעות",
"%d hours (2nd plural)", "%d שעות",
"%d hours (3rd plural)", "%d שעות",
"%d hours (4th plural)", "%d שעות",
"%d hours (5th plural)" "%d שעות"
], ],
"%d days": [ "%d days": [
"יום אחד", "יום אחד",
@ -94,44 +94,44 @@
"Never": "לעולם לא", "Never": "לעולם לא",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "הערה: זהו שירות בדקה: המידע לא ישמר.", "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 seconds.": [
"This document will expire in %d second. (singular)", "מסמך זה יפוג בעוד שנייה אחת.",
"This document will expire in %d seconds. (1st plural)", "מסמך זה יפוג בעוד %d שניות.",
"This document will expire in %d seconds. (2nd plural)", "מסמך זה יפוג בעוד %d שניות.",
"This document will expire in %d seconds. (3rd plural)", "מסמך זה יפוג בעוד %d שניות.",
"This document will expire in %d seconds. (4th plural)", "מסמך זה יפוג בעוד %d שניות.",
"This document will expire in %d seconds. (5th plural)" "מסמך זה יפוג בעוד %d שניות."
], ],
"This document will expire in %d minutes.": [ "This document will expire in %d minutes.": [
"This document will expire in %d minute. (singular)", "מסמך זה יפוג בעוד דקה אחת.",
"This document will expire in %d minutes. (1st plural)", "מסמך זה יפוג בעוד %d דקות.",
"This document will expire in %d minutes. (2nd plural)", "מסמך זה יפוג בעוד %d דקות.",
"This document will expire in %d minutes. (3rd plural)", "מסמך זה יפוג בעוד %d דקות.",
"This document will expire in %d minutes. (4th plural)", "מסמך זה יפוג בעוד %d דקות.",
"This document will expire in %d minutes. (5th plural)" "מסמך זה יפוג בעוד %d דקות."
], ],
"This document will expire in %d hours.": [ "This document will expire in %d hours.": [
"This document will expire in %d hour. (singular)", "מסמך זה יפוג בעוד שעה אחת.",
"This document will expire in %d hours. (1st plural)", "מסמך זה יפוג בעוד %d שעות.",
"This document will expire in %d hours. (2nd plural)", "מסמך זה יפוג בעוד %d שעות.",
"This document will expire in %d hours. (3rd plural)", "מסמך זה יפוג בעוד %d שעות.",
"This document will expire in %d hours. (4th plural)", "מסמך זה יפוג בעוד %d שעות.",
"This document will expire in %d hours. (5th plural)" "מסמך זה יפוג בעוד %d שעות."
], ],
"This document will expire in %d days.": [ "This document will expire in %d days.": [
"This document will expire in %d day. (singular)", "מסמך זה יפוג בעוד יום אחד.",
"This document will expire in %d days. (1st plural)", "מסמך זה יפוג בעוד %d ימים.",
"This document will expire in %d days. (2nd plural)", "מסמך זה יפוג בעוד %d ימים.",
"This document will expire in %d days. (3rd plural)", "מסמך זה יפוג בעוד %d ימים.",
"This document will expire in %d days. (4th plural)", "מסמך זה יפוג בעוד %d ימים.",
"This document will expire in %d days. (5th plural)" "מסמך זה יפוג בעוד %d ימים."
], ],
"This document will expire in %d months.": [ "This document will expire in %d months.": [
"This document will expire in %d month. (singular)", "מסמך זה יפוג בעוד חודש אחד.",
"This document will expire in %d months. (1st plural)", "מסמך זה יפוג בעוד %d חודשים.",
"This document will expire in %d months. (2nd plural)", "מסמך זה יפוג בעוד %d חודשים.",
"This document will expire in %d months. (3rd plural)", "מסמך זה יפוג בעוד %d חודשים.",
"This document will expire in %d months. (4th plural)", "מסמך זה יפוג בעוד %d חודשים.",
"This document will expire in %d months. (5th plural)" "מסמך זה יפוג בעוד %d חודשים."
], ],
"Please enter the password for this paste:": "נא למלא את הססמה להדבקה הזו:", "Please enter the password for this paste:": "נא למלא את הססמה להדבקה הזו:",
"Could not decrypt data (Wrong key?)": "לא ניתן לפענח את הנתונים (מפתח שגוי?)", "Could not decrypt data (Wrong key?)": "לא ניתן לפענח את הנתונים (מפתח שגוי?)",
@ -151,7 +151,7 @@
"server error or not responding": "שגיאת שרת או שהשרת לא מגיב", "server error or not responding": "שגיאת שרת או שהשרת לא מגיב",
"Could not post comment: %s": "לא ניתן לפרסם תגובה: %s", "Could not post comment: %s": "לא ניתן לפרסם תגובה: %s",
"Sending paste…": "ההדבקה נשלחת…", "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": "מחיקת נתונים", "Delete data": "מחיקת נתונים",
"Could not create paste: %s": "לא ניתן ליצור הדבקה: %s", "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?)": "לא ניתן לפענח הדבקה: מפתח הפענוח חסר בכתובת (השתמשת במערכת הפנייה או מקצר כתובות שחותכים חלק מהכתובת?)", "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "לא ניתן לפענח הדבקה: מפתח הפענוח חסר בכתובת (השתמשת במערכת הפנייה או מקצר כתובות שחותכים חלק מהכתובת?)",
@ -170,29 +170,29 @@
"Markdown": "Markdown", "Markdown": "Markdown",
"Download attachment": "הורדת קובץ מצורף", "Download attachment": "הורדת קובץ מצורף",
"Cloned: '%s'": "שוכפל: '%s'", "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": "צירוף קובץ", "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", "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.", "File too large, to display a preview. Please download the attachment.": "הקובץ גדול מדי כדי להציג תצוגה מקדימה. אנא הורד את הקובץ המצורף.",
"Remove 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.", "Your browser does not support uploading encrypted files. Please use a newer browser.": "הדפדפן שלך אינו תומך בהעלאת קבצים מוצפנים. אנא השתמש בדפדפן עדכני יותר.",
"Invalid attachment.": "קובץ מצורף שגוי.", "Invalid attachment.": "קובץ מצורף שגוי.",
"Options": "אפשרויות", "Options": "אפשרויות",
"Shorten URL": "קיצור כתובת", "Shorten URL": "קיצור כתובת",
"Editor": "עורך", "Editor": "עורך",
"Preview": "תצוגה מקדימה", "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": "פענוח", "Decrypt": "פענוח",
"Enter password": "נא למלא ססמה", "Enter password": "נא למלא ססמה",
"Loading…": "בטעינה…", "Loading…": "בטעינה…",
"Decrypting paste…": "ההדבקה מפוענחת…", "Decrypting paste…": "ההדבקה מפוענחת…",
"Preparing new 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 +++": "+++ אין טקסט להדבקה +++", "+++ no paste text +++": "+++ אין טקסט להדבקה +++",
"Could not get paste data: %s": "לא ניתן לקבל את נתוני ההדבקה: %s", "Could not get paste data: %s": "לא ניתן לקבל את נתוני ההדבקה: %s",
"QR code": "קוד QR", "QR code": "קוד QR",
"This website is using an insecure HTTP connection! Please use it only for testing.": "האתר הזה משתמש בחיבור HTTP בלתי מאובטח! נא להשתמש בזה לבדיקות בלבד.", "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 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. אפשר ליצור מסמכים בלתי מוצפנים אך אין אפשרות לקרוא מסמכים מוצפנים.", "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": "בהמתנה למילוי הססמה מצד המשתמש", "waiting on user to provide a password": "בהמתנה למילוי הססמה מצד המשתמש",
@ -209,15 +209,23 @@
"Close": "סגירה", "Close": "סגירה",
"Encrypted note on %s": "%sהערה מוצפנת ב־", "Encrypted note on %s": "%sהערה מוצפנת ב־",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "נא לבקר בקישור כדי לצפות בהערה. מסירת הקישור לאנשים כלשהם תאפשר גם להם לגשת להערה.", "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "נא לבקר בקישור כדי לצפות בהערה. מסירת הקישור לאנשים כלשהם תאפשר גם להם לגשת להערה.",
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.", "URL shortener may expose your decrypt key in URL.": "שירות קיצור כתובת URL עשוי לחשוף את מפתח הפענוח שלך בכתובת ה-URL.",
"Save paste": "Save paste", "Save paste": "שמור הדבקה",
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.", "Your IP is not authorized to create pastes.": "ה-IP שלך אינו מורשה ליצור הדבקות.",
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.", "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\".": "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\".": "שגיאה בעת קריאה ל-YOURLS. כנראה מדובר בבעיה בהגדרות, כמו \"apiurl\" או \"signature\" שגויים או חסרים.",
"Error parsing YOURLS response.": "Error parsing YOURLS response.", "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?", "This secret message can only be displayed once. Would you like to see it now?": "ההודעה הסודית הזו יכולה להוצג רק פעם אחת. האם תרצה לראות אותה עכשיו?",
"Yes, see it": "Yes, see it", "Yes, see it": "כן, ראה אותה",
"Dark Mode": "Dark Mode", "Dark Mode": "מצב כהה",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "שגיאה בדחיסת ההדבקה, עקב חוסר תמיכה ב-WebAssembly.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "שגיאה בהפקת ההדבקה, הדפדפן שלך לא תומך ב-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": "נושא"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "server error or not responding", "server error or not responding": "server error or not responding",
"Could not post comment: %s": "Could not post comment: %s", "Could not post comment: %s": "Could not post comment: %s",
"Sending paste…": "Sending paste…", "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", "Delete data": "Delete data",
"Could not create paste: %s": "Could not create paste: %s", "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?)", "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?)",
@ -219,5 +219,13 @@
"Yes, see it": "Yes, see it", "Yes, see it": "Yes, see it",
"Dark Mode": "Dark Mode", "Dark Mode": "Dark Mode",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "A szerveren hiba lépett fel vagy nem válaszol.", "server error or not responding": "A szerveren hiba lépett fel vagy nem válaszol.",
"Could not post comment: %s": "Nem tudtuk beküldeni a hozzászólást: %s", "Could not post comment: %s": "Nem tudtuk beküldeni a hozzászólást: %s",
"Sending paste…": "Bejegyzés elküldése...", "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", "Delete data": "Adat törlése",
"Could not create paste: %s": "Nem tudtuk létrehozni a bejegyzést: %s", "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?", "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?",
@ -219,5 +219,13 @@
"Yes, see it": "Yes, see it", "Yes, see it": "Yes, see it",
"Dark Mode": "Sötét mód", "Dark Mode": "Sötét mód",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "kesalahan server atau server tidak merespon", "server error or not responding": "kesalahan server atau server tidak merespon",
"Could not post comment: %s": "Tidak dapat memposting komentar: %s", "Could not post comment: %s": "Tidak dapat memposting komentar: %s",
"Sending paste…": "Mengirim paste…", "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", "Delete data": "Hapus data",
"Could not create paste: %s": "Tidak dapat membuat paste: %s", "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?)", "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?)",
@ -219,5 +219,13 @@
"Yes, see it": "Yes, see it", "Yes, see it": "Yes, see it",
"Dark Mode": "Mode Gelap", "Dark Mode": "Mode Gelap",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "errore o mancata risposta dal server", "server error or not responding": "errore o mancata risposta dal server",
"Could not post comment: %s": "Impossibile inviare il commento: %s", "Could not post comment: %s": "Impossibile inviare il commento: %s",
"Sending paste…": "Messaggio in fase di invio…", "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", "Delete data": "Cancella i dati",
"Could not create paste: %s": "Non riesco a creare il messaggio: %s", "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?)", "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?)",
@ -219,5 +219,13 @@
"Yes, see it": "Sì, visualizzalo", "Yes, see it": "Sì, visualizzalo",
"Dark Mode": "Tema Scuro", "Dark Mode": "Tema Scuro",
"Error compressing paste, due to missing WebAssembly support.": "Errore nella compressione dell messaggio, a causa del supporto WebAssembly mancante.", "Error compressing paste, due to missing WebAssembly support.": "Errore nella compressione dell messaggio, a causa del supporto WebAssembly mancante.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Errore nella decompressione dell messaggio, il tuo browser non supporta WebAssembly. Utilizza un altro browser per visualizzare questo messaggio." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Errore nella decompressione dell messaggio, il tuo browser non supporta WebAssembly. Utilizza un altro browser per visualizzare questo messaggio.",
"Start over": "Ricominciare",
"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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "サーバーエラーまたは応答しません", "server error or not responding": "サーバーエラーまたは応答しません",
"Could not post comment: %s": "コメントを投稿できませんでした:%s", "Could not post comment: %s": "コメントを投稿できませんでした:%s",
"Sending paste…": "ペーストを送信しています…", "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": "データを削除", "Delete data": "データを削除",
"Could not create paste: %s": "ペーストを作成できませんでした:%s", "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の短縮アプリケーションを使いましたか", "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の短縮アプリケーションを使いましたか",
@ -219,5 +219,13 @@
"Yes, see it": "はい、使用します", "Yes, see it": "はい、使用します",
"Dark Mode": "ダークモード", "Dark Mode": "ダークモード",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "server error or not responding", "server error or not responding": "server error or not responding",
"Could not post comment: %s": "Could not post comment: %s", "Could not post comment: %s": "Could not post comment: %s",
"Sending paste…": "Sending paste…", "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", "Delete data": "Delete data",
"Could not create paste: %s": "Could not create paste: %s", "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?)", "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?)",
@ -219,5 +219,13 @@
"Yes, see it": "Yes, see it", "Yes, see it": "Yes, see it",
"Dark Mode": "Dark Mode", "Dark Mode": "Dark Mode",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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"
} }

231
i18n/ko.json Normal file
View File

@ -0,0 +1,231 @@
{
"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>.",
"Because ignorance is bliss": "Because ignorance is bliss",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.",
"%s requires php %s or above to work. Sorry.": "%s requires php %s or above to work. Sorry.",
"%s requires configuration section [%s] to be present in configuration file.": "%s requires configuration section [%s] to be present in configuration file.",
"Please wait %d seconds between each post.": [
"Please wait %d second between each post. (singular)",
"Please wait %d seconds between each post. (1st plural)",
"Please wait %d seconds between each post. (2nd plural)",
"Please wait %d seconds between each post. (3rd plural)",
"Please wait %d seconds between each post. (4th plural)",
"Please wait %d seconds between each post. (5th plural)"
],
"Paste is limited to %s of encrypted data.": "Paste is limited to %s of encrypted data.",
"Invalid data.": "Invalid data.",
"You are unlucky. Try again.": "You are unlucky. Try again.",
"Error saving comment. Sorry.": "Error saving comment. Sorry.",
"Error saving paste. Sorry.": "Error saving paste. Sorry.",
"Invalid paste ID.": "Invalid paste ID.",
"Paste is not of burn-after-reading type.": "Paste is not of burn-after-reading type.",
"Wrong deletion token. Paste was not deleted.": "Wrong deletion token. Paste was not deleted.",
"Paste was properly deleted.": "Paste was properly deleted.",
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript is required for %s to work. Sorry for the inconvenience.",
"%s requires a modern browser to work.": "%s requires a modern browser to work.",
"New": "New",
"Create": "Create",
"Clone": "Clone",
"Raw text": "Raw text",
"Expires": "Expires",
"Burn after reading": "Burn after reading",
"Open discussion": "Open discussion",
"Password (recommended)": "Password (recommended)",
"Discussion": "Discussion",
"Toggle navigation": "Toggle navigation",
"%d seconds": [
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)",
"%d seconds (4th plural)",
"%d seconds (5th plural)"
],
"%d minutes": [
"%d minute (singular)",
"%d minutes (1st plural)",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)",
"%d minutes (4th plural)",
"%d minutes (5th plural)"
],
"%d hours": [
"%d hour (singular)",
"%d hours (1st plural)",
"%d hours (2nd plural)",
"%d hours (3rd plural)",
"%d hours (4th plural)",
"%d hours (5th plural)"
],
"%d days": [
"%d day (singular)",
"%d days (1st plural)",
"%d days (2nd plural)",
"%d days (3rd plural)",
"%d days (4th plural)",
"%d days (5th plural)"
],
"%d weeks": [
"%d week (singular)",
"%d weeks (1st plural)",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)",
"%d weeks (4th plural)",
"%d weeks (5th plural)"
],
"%d months": [
"%d month (singular)",
"%d months (1st plural)",
"%d months (2nd plural)",
"%d months (3rd plural)",
"%d months (4th plural)",
"%d months (5th plural)"
],
"%d years": [
"%d year (singular)",
"%d years (1st plural)",
"%d years (2nd plural)",
"%d years (3rd plural)",
"%d years (4th plural)",
"%d years (5th plural)"
],
"Never": "Never",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "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)"
],
"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)"
],
"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)"
],
"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)"
],
"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)"
],
"Please enter the password for this paste:": "Please enter the password for this paste:",
"Could not decrypt data (Wrong key?)": "Could not decrypt data (Wrong key?)",
"Could not delete the paste, it was not stored in burn after reading mode.": "Could not delete the paste, it was not stored in burn after reading mode.",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.",
"Could not decrypt comment; Wrong key?": "Could not decrypt comment; Wrong key?",
"Reply": "Reply",
"Anonymous": "Anonymous",
"Avatar generated from IP address": "Avatar generated from IP address",
"Add comment": "Add comment",
"Optional nickname…": "Optional nickname…",
"Post comment": "Post comment",
"Sending comment…": "Sending comment…",
"Comment posted.": "Comment posted.",
"Could not refresh display: %s": "Could not refresh display: %s",
"unknown status": "unknown status",
"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 <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?)",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB",
"PiB": "PiB",
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Format",
"Plain Text": "Plain Text",
"Source Code": "Source Code",
"Markdown": "Markdown",
"Download attachment": "Download attachment",
"Cloned: '%s'": "Cloned: '%s'",
"The cloned file '%s' was attached to this paste.": "The cloned file '%s' was attached to this paste.",
"Attach a file": "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.",
"Invalid attachment.": "Invalid attachment.",
"Options": "Options",
"Shorten URL": "Shorten URL",
"Editor": "Editor",
"Preview": "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.",
"Decrypt": "Decrypt",
"Enter password": "Enter password",
"Loading…": "Loading…",
"Decrypting paste…": "Decrypting paste…",
"Preparing new 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>.",
"+++ no paste text +++": "+++ no paste text +++",
"Could not get paste data: %s": "Could not get paste data: %s",
"QR code": "QR code",
"This website is using an insecure HTTP connection! Please use it only for testing.": "This website is using an insecure HTTP connection! Please use it only for testing.",
"For more information <a href=\"%s\">see this FAQ entry</a>.": "For more information <a href=\"%s\">see this FAQ entry</a>.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.",
"waiting on user to provide a password": "waiting on user to provide a password",
"Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.",
"Retry": "Retry",
"Showing raw text…": "Showing raw text…",
"Notice:": "Notice:",
"This link will expire after %s.": "This link will expire after %s.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "This link can only be accessed once, do not use back or refresh button in your browser.",
"Link:": "Link:",
"Recipient may become aware of your timezone, convert time to UTC?": "Recipient may become aware of your timezone, convert time to UTC?",
"Use Current Timezone": "Use Current Timezone",
"Convert To UTC": "Convert To UTC",
"Close": "Close",
"Encrypted note on %s": "Encrypted note on %s",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
"Save paste": "Save paste",
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"This secret message can only be displayed once. Would you like to see it now?": "This secret message can only be displayed once. Would you like to see it now?",
"Yes, see it": "Yes, see it",
"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",
"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"
}

View File

@ -151,7 +151,7 @@
"server error or not responding": "server error or not responding", "server error or not responding": "server error or not responding",
"Could not post comment: %s": "Could not post comment: %s", "Could not post comment: %s": "Could not post comment: %s",
"Sending paste…": "Sending paste…", "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", "Delete data": "Delete data",
"Could not create paste: %s": "Could not create paste: %s", "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?)", "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?)",
@ -219,5 +219,13 @@
"Yes, see it": "Yes, see it", "Yes, see it": "Yes, see it",
"Dark Mode": "جۆری ڕەش", "Dark Mode": "جۆری ڕەش",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "server error or not responding", "server error or not responding": "server error or not responding",
"Could not post comment: %s": "Could not post comment: %s", "Could not post comment: %s": "Could not post comment: %s",
"Sending paste…": "Sending paste…", "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", "Delete data": "Delete data",
"Could not create paste: %s": "Could not create paste: %s", "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?)", "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?)",
@ -219,5 +219,13 @@
"Yes, see it": "Yes, see it", "Yes, see it": "Yes, see it",
"Dark Mode": "Dark Mode", "Dark Mode": "Dark Mode",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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"
} }

View File

@ -26,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "%s darbui reikalinga JavaScript. Atsiprašome už nepatogumus.", "JavaScript is required for %s to work. Sorry for the inconvenience.": "%s darbui reikalinga JavaScript. Atsiprašome už nepatogumus.",
"%s requires a modern browser to work.": "%s savo darbui reikalauja šiuolaikinės naršyklės.", "%s requires a modern browser to work.": "%s savo darbui reikalauja šiuolaikinės naršyklės.",
"New": "Naujas", "New": "Naujas",
"Create": "Kurti", "Create": "Sukurti",
"Clone": "Dubliuoti", "Clone": "Dubliuoti",
"Raw text": "Neapdorotas tekstas", "Raw text": "Neapdorotas tekstas",
"Expires": "Baigs galioti po", "Expires": "Baigs galioti po",
@ -151,7 +151,7 @@
"server error or not responding": "serverio klaida arba jis neatsako", "server error or not responding": "serverio klaida arba jis neatsako",
"Could not post comment: %s": "Nepavyko paskelbti komentaro: %s", "Could not post comment: %s": "Nepavyko paskelbti komentaro: %s",
"Sending paste…": "Siunčiamas įdėjimas…", "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", "Delete data": "Ištrinti duomenis",
"Could not create paste: %s": "Nepavyko sukurti įdėjimo: %s", "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į?)", "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į?)",
@ -215,9 +215,17 @@
"Trying to shorten a URL that isn't pointing at our instance.": "Bandoma sutrumpinti URL adresą, kuris nenurodo į mūsų egzempliorių.", "Trying to shorten a URL that isn't pointing at our instance.": "Bandoma sutrumpinti URL adresą, kuris nenurodo į mūsų egzempliorių.",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Klaida iškviečiant YOURLS. Tikriausiai, konfigūracijos klaida, pavyzdžiui, neteisingi „apiurl“ ar „signature“, arba jų nėra.", "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Klaida iškviečiant YOURLS. Tikriausiai, konfigūracijos klaida, pavyzdžiui, neteisingi „apiurl“ ar „signature“, arba jų nėra.",
"Error parsing YOURLS response.": "Klaida nagrinėjant YOURLS atsaką.", "Error parsing YOURLS response.": "Klaida nagrinėjant YOURLS atsaką.",
"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?", "This secret message can only be displayed once. Would you like to see it now?": "Ši slapta žinutė gali būti parodyta tik vieną kartą. Ar norėtumėte ją dabar pamatyti?",
"Yes, see it": "Yes, see it", "Yes, see it": "Taip, pamatyti",
"Dark Mode": "Tamsus režimas", "Dark Mode": "Tamsi veiksena",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "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.": "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.": "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",
"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"
} }

View File

@ -143,7 +143,7 @@
"Avatar generated from IP address": "Anonieme avatar (van het IP-adres)", "Avatar generated from IP address": "Anonieme avatar (van het IP-adres)",
"Add comment": "Commentaar toevoegen", "Add comment": "Commentaar toevoegen",
"Optional nickname…": "Optionele bijnaam…", "Optional nickname…": "Optionele bijnaam…",
"Post comment": "Plaats een commentaar", "Post comment": "Plaats commentaar",
"Sending comment…": "Commentaar verzenden…", "Sending comment…": "Commentaar verzenden…",
"Comment posted.": "Commentaar geplaatst.", "Comment posted.": "Commentaar geplaatst.",
"Could not refresh display: %s": "Kon de weergave niet vernieuwen: %s", "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", "server error or not responding": "Serverfout of server reageert niet",
"Could not post comment: %s": "Kon het commentaar niet plaatsen: %s", "Could not post comment: %s": "Kon het commentaar niet plaatsen: %s",
"Sending paste…": "Paste verzenden…", "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", "Delete data": "Gegevens wissen",
"Could not create paste: %s": "Kon de paste niet aanmaken: %s", "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?)", "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?)",
@ -219,5 +219,13 @@
"Yes, see it": "Ja, tonen", "Yes, see it": "Ja, tonen",
"Dark Mode": "Donkere modus", "Dark Mode": "Donkere modus",
"Error compressing paste, due to missing WebAssembly support.": "Fout bij het comprimeren van notitie door ontbrekende ondersteuning voor WebAssembly.", "Error compressing paste, due to missing WebAssembly support.": "Fout bij het comprimeren van notitie door ontbrekende ondersteuning voor WebAssembly.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Fout bij het decomprimeren van de notitie, uw browser ondersteunt WebAssembly niet. Gebruik een andere browser om deze notitie te bekijken." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Fout bij het decomprimeren van de notitie, uw browser ondersteunt WebAssembly niet. Gebruik een andere browser om deze notitie te bekijken.",
"Start over": "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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "tjener feilet eller svarer ikke", "server error or not responding": "tjener feilet eller svarer ikke",
"Could not post comment: %s": "Kunne ikke sende kommentar: %s", "Could not post comment: %s": "Kunne ikke sende kommentar: %s",
"Sending paste…": "Sender innlegg…", "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", "Delete data": "Slett data",
"Could not create paste: %s": "Kunne ikke opprette innlegg: %s", "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?)", "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?)",
@ -211,13 +211,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.", "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.", "URL shortener may expose your decrypt key in URL.": "URL forkorter kan avsløre dekrypteringsnøkkelen.",
"Save paste": "Lagre utklipp", "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.", "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.", "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å?", "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", "Yes, see it": "Ja, se det",
"Dark Mode": "Mørk modus", "Dark Mode": "Mørk modus",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "lo servidor respond pas o a rescontrat una error", "server error or not responding": "lo servidor respond pas o a rescontrat una error",
"Could not post comment: %s": "Impossible de mandar lo comentari:%s", "Could not post comment: %s": "Impossible de mandar lo comentari:%s",
"Sending paste…": "Mandadís del tèxte…", "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 ladreç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 ladreç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", "Delete data": "Supprimir las donadas del tèxte",
"Could not create paste: %s": "Impossible de crear lo tèxte:%s", "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 lURL (Avètz utilizat un redirector o un site de reduccion dURL que suprimís una partida de lURL?)", "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 lURL (Avètz utilizat un redirector o un site de reduccion dURL que suprimís una partida de lURL?)",
@ -215,9 +215,17 @@
"Trying to shorten a URL that isn't pointing at our instance.": "Ensag dabracar una URL que mena pas a nòstra instància.", "Trying to shorten a URL that isn't pointing at our instance.": "Ensag dabracar una URL que mena pas a nòstra instància.",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error en cridant YOURLS. Es probablament un problèma de configuracion, quicòm coma « apirul » o « signature » marrit o absent.", "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error en cridant YOURLS. Es probablament un problèma de configuracion, quicòm coma « apirul » o « signature » marrit o absent.",
"Error parsing YOURLS response.": "Error d'analisi de la responsa YOURLS.", "Error parsing YOURLS response.": "Error d'analisi de la responsa YOURLS.",
"This secret message can only be displayed once. Would you like to see it now?": "This secret message can only be displayed once. Would you like to see it now?", "This secret message can only be displayed once. Would you like to see it now?": "Aqueste messatge secrèt se pòt pas qu'afichar un còp. Lo volètz veire ara?",
"Yes, see it": "Yes, see it", "Yes, see it": "Òc, afichatz-lo",
"Dark Mode": "Dark Mode", "Dark Mode": "Mòde escur",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error 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 decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error 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",
"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"
} }

View File

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

View File

@ -151,7 +151,7 @@
"server error or not responding": "Servidor em erro ou não responsivo", "server error or not responding": "Servidor em erro ou não responsivo",
"Could not post comment: %s": "Não foi possível publicar o comentário: %s", "Could not post comment: %s": "Não foi possível publicar o comentário: %s",
"Sending paste…": "Enviando cópia…", "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", "Delete data": "Excluir dados",
"Could not create paste: %s": "Não foi possível criar cópia: %s", "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?)", "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?)",
@ -219,5 +219,13 @@
"Yes, see it": "Sim, veja", "Yes, see it": "Sim, veja",
"Dark Mode": "Modo Noturno", "Dark Mode": "Modo Noturno",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "eroare de server sau nu răspunde", "server error or not responding": "eroare de server sau nu răspunde",
"Could not post comment: %s": "Nu s-a putut posta comentariul: %s", "Could not post comment: %s": "Nu s-a putut posta comentariul: %s",
"Sending paste…": "Se trimite paste-ul…", "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", "Delete data": "Ștergeți datele",
"Could not create paste: %s": "Nu s-a putut crea paste-ul: %s", "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?)", "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?)",
@ -219,5 +219,13 @@
"Yes, see it": "Da, vezi", "Yes, see it": "Da, vezi",
"Dark Mode": "Mod întunecat", "Dark Mode": "Mod întunecat",
"Error compressing paste, due to missing WebAssembly support.": "Eroare la compresia paste-ului din cauza incompatibilității cu WebAssembly.", "Error compressing paste, due to missing WebAssembly support.": "Eroare la compresia paste-ului din cauza incompatibilității cu WebAssembly.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Eroare la deschiderea paste-ului, browserul dvs. nu acceptă WebAssembly. Vă rugăm să utilizați un alt browser pentru a vedea acest paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Eroare la deschiderea paste-ului, browserul dvs. nu acceptă WebAssembly. Vă rugăm să utilizați un alt browser pentru a vedea acest paste.",
"Start over": "Start over",
"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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "ошибка сервера или нет ответа", "server error or not responding": "ошибка сервера или нет ответа",
"Could not post comment: %s": "Не удалось опубликовать комментарий: %s", "Could not post comment: %s": "Не удалось опубликовать комментарий: %s",
"Sending paste…": "Отправка записи…", "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": "Удалить запись", "Delete data": "Удалить запись",
"Could not create paste: %s": "Не удалось опубликовать запись: %s", "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?)": "Невозможно расшифровать запись: Ключ расшифровки отсутствует в ссылке (Может быть, вы используете сокращатель ссылок, который удаляет часть ссылки?)", "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Невозможно расшифровать запись: Ключ расшифровки отсутствует в ссылке (Может быть, вы используете сокращатель ссылок, который удаляет часть ссылки?)",
@ -219,5 +219,13 @@
"Yes, see it": "Да, загрузить", "Yes, see it": "Да, загрузить",
"Dark Mode": "Тёмная", "Dark Mode": "Тёмная",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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": "Тема"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "chyba servera alebo server neodpovedá", "server error or not responding": "chyba servera alebo server neodpovedá",
"Could not post comment: %s": "Nepodarilo sa pridať komentár: %s", "Could not post comment: %s": "Nepodarilo sa pridať komentár: %s",
"Sending paste…": "Odosiela sa príspevok…", "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", "Delete data": "Odstrániť dáta",
"Could not create paste: %s": "Nepodarilo sa vytvoriť príspevok: %s", "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?)", "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?)",
@ -219,5 +219,13 @@
"Yes, see it": "Yes, see it", "Yes, see it": "Yes, see it",
"Dark Mode": "Tmavý Režim", "Dark Mode": "Tmavý Režim",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "napaka na strežniku, ali pa se strežnik ne odziva", "server error or not responding": "napaka na strežniku, ali pa se strežnik ne odziva",
"Could not post comment: %s": "Komentarja ni bilo mogoče objaviti : %s", "Could not post comment: %s": "Komentarja ni bilo mogoče objaviti : %s",
"Sending paste…": "Pošiljam prilepek…", "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", "Delete data": "Izbriši podatke",
"Could not create paste: %s": "Ne morem ustvariti prilepka: %s", "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?)", "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?)",
@ -219,5 +219,13 @@
"Yes, see it": "Yes, see it", "Yes, see it": "Yes, see it",
"Dark Mode": "Temni način", "Dark Mode": "Temni način",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "server error or not responding", "server error or not responding": "server error or not responding",
"Could not post comment: %s": "Could not post comment: %s", "Could not post comment: %s": "Could not post comment: %s",
"Sending paste…": "Sending paste…", "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", "Delete data": "Delete data",
"Could not create paste: %s": "Could not create paste: %s", "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?)", "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?)",
@ -219,5 +219,13 @@
"Yes, see it": "Yes, see it", "Yes, see it": "Yes, see it",
"Dark Mode": "Mörkt Läge", "Dark Mode": "Mörkt Läge",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.",
"Start over": "Start over",
"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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "เซิร์ฟเวอร์มีข้อผิดพลาดหรือไม่ตอบสนอง", "server error or not responding": "เซิร์ฟเวอร์มีข้อผิดพลาดหรือไม่ตอบสนอง",
"Could not post comment: %s": "ไม่สามารถส่งความคิดเห็นได้: %s", "Could not post comment: %s": "ไม่สามารถส่งความคิดเห็นได้: %s",
"Sending paste…": "กำลังส่งข้อมูล…", "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": "ลบข้อมูล", "Delete data": "ลบข้อมูล",
"Could not create paste: %s": "ไม่สามารถสร้างข้อมูลการฝากโค้ดได้: %s", "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 ออกหรือไม่)", "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 ออกหรือไม่)",
@ -215,9 +215,17 @@
"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\".": "เกิดข้อผิดพลาดในการเรียก YOURLS อาจเป็นปัญหามาจากการกำหนดค่า เช่น \"apiurl\" หรือ \"signature\" ไม่ถูกต้องหรือขาดหายไป", "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "เกิดข้อผิดพลาดในการเรียก YOURLS อาจเป็นปัญหามาจากการกำหนดค่า เช่น \"apiurl\" หรือ \"signature\" ไม่ถูกต้องหรือขาดหายไป",
"Error parsing YOURLS response.": "เกิดข้อผิดพลาดในการแยกวิเคราะห์การตอบสนองของ YOURLS", "Error parsing YOURLS response.": "เกิดข้อผิดพลาดในการแยกวิเคราะห์การตอบสนองของ YOURLS",
"This secret message can only be displayed once. Would you like to see it now?": "This secret message can only be displayed once. Would you like to see it now?", "This secret message can only be displayed once. Would you like to see it now?": "ข้อความลับนี้จะแสดงได้เพียงครั้งเดียวเท่านั้น คุณต้องการดูข้อความนี้ตอนนี้เลยใช่หรือไม่",
"Yes, see it": "Yes, see it", "Yes, see it": "ใช่ ดูเลย",
"Dark Mode": "โหมดมืด", "Dark Mode": "โหมดสีเข้ม",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "ไม่สามารถบีบอัดข้อมูลที่คุณต้องการฝากโค้ดได้ เนื่องจากอุปกรณ์ของคุณขาดการรองรับ WebAssembly",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "ไม่สามารถอ่านข้อมูลที่คุณได้ฝากโค้ดไว้ เบราว์เซอร์ของคุณไม่รองรับ 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"
} }

View File

@ -69,7 +69,7 @@
], ],
"%d weeks": [ "%d weeks": [
"%d hafta", "%d hafta",
"%d haftalar", "%d hafta",
"%d hafta", "%d hafta",
"%d hafta", "%d hafta",
"%d hafta", "%d hafta",
@ -92,7 +92,7 @@
"%d yıl" "%d yıl"
], ],
"Never": "Asla", "Never": "Asla",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.", "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Not: Bu bir test hizmetidir: Veriler herhangi bir zamanda silinebilir. Bu hizmeti kötüye kullanırsanız, kedicikler ölebilir.",
"This document will expire in %d seconds.": [ "This document will expire in %d seconds.": [
"Bu belge %d saniyede silinecektir.", "Bu belge %d saniyede silinecektir.",
"Bu belge %d saniyede silinecektir.", "Bu belge %d saniyede silinecektir.",
@ -151,7 +151,7 @@
"server error or not responding": "sunucu hatası veya yanıt vermiyor", "server error or not responding": "sunucu hatası veya yanıt vermiyor",
"Could not post comment: %s": "Yorum paylaşılamadı: %s", "Could not post comment: %s": "Yorum paylaşılamadı: %s",
"Sending paste…": "Yazı gönderiliyor…", "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", "Delete data": "Veriyi sil",
"Could not create paste: %s": "Yazı oluşturulamadı: %s", "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.)", "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.)",
@ -172,52 +172,60 @@
"Cloned: '%s'": "Klonlandı: '%s'", "Cloned: '%s'": "Klonlandı: '%s'",
"The cloned file '%s' was attached to this paste.": "Klonlanmış dosya '%s' bu yazıya eklendi.", "The cloned file '%s' was attached to this paste.": "Klonlanmış dosya '%s' bu yazıya eklendi.",
"Attach a file": "Dosya ekle", "Attach a file": "Dosya ekle",
"alternatively drag & drop a file or paste an image from the clipboard": "alternatif olarak dosyasyı yapıştırabilir veya sürükleyip bırakabilirsin", "alternatively drag & drop a file or paste an image from the clipboard": "alternatif olarak dosyayı yapıştırabilir veya sürükleyip bırakabilirsiniz",
"File too large, to display a preview. Please download the attachment.": "Dosya önizleme için çok büyük. Lütfen eki indirin.", "File too large, to display a preview. Please download the attachment.": "Dosya önizleme için çok büyük. Lütfen eki indirin.",
"Remove attachment": "Eki sil", "Remove attachment": "Eki sil",
"Your browser does not support uploading encrypted files. Please use a newer browser.": "Tarayıcınız şifreli dosyaları desteklemiyor.", "Your browser does not support uploading encrypted files. Please use a newer browser.": "Tarayıcınız şifreli dosyaları yüklemeyi desteklemiyor. Lütfen daha yeni bir tarayıcı kullanın.",
"Invalid attachment.": "Geçersiz ek.", "Invalid attachment.": "Geçersiz ek.",
"Options": "Seçenekler", "Options": "Seçenekler",
"Shorten URL": "URL kısaltma", "Shorten URL": "URL kısaltma",
"Editor": "Düzenleyici", "Editor": "Düzenleyici",
"Preview": "Ön izleme", "Preview": "Ön izleme",
"%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'in \"%s\" ile bitmesini gerektirir. Lütfen index.php dosyanızdaki PATH'i güncelleyin.",
"Decrypt": "Şifreyi çöz", "Decrypt": "Şifreyi çöz",
"Enter password": "Şifreyi girin", "Enter password": "Şifreyi girin",
"Loading…": "Yükleniyor…", "Loading…": "Yükleniyor…",
"Decrypting paste…": "Yazı şifresi çözülüyor…", "Decrypting paste…": "Yazı şifresi çözülüyor…",
"Preparing new paste…": "Yeni yazı hazırlanıyor…", "Preparing new paste…": "Yeni yazı hazırlanıyor…",
"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>.": "Bu mesaj hiç kaybolmazsa, sorun giderme bilgileri için <a href=\"%s\">bu SSS'ye göz atın</a>.",
"+++ no paste text +++": "+++ yazı içeriği yok +++", "+++ no paste text +++": "+++ yazı içeriği yok +++",
"Could not get paste data: %s": "Yazı verisi alınamıyor: %s", "Could not get paste data: %s": "Yazı verisi alınamıyor: %s",
"QR code": "QR kodu", "QR code": "QR kodu",
"This website is using an insecure HTTP connection! Please use it only for testing.": "This website is using an insecure HTTP connection! Please use it only for testing.", "This website is using an insecure HTTP connection! Please use it only for testing.": "Bu web sitesi güvensiz bir HTTP bağlantısı kullanıyor! Lütfen bunu yalnızca test için kullanın.",
"For more information <a href=\"%s\">see this FAQ entry</a>.": "For more information <a href=\"%s\">see this FAQ entry</a>.", "For more information <a href=\"%s\">see this FAQ entry</a>.": "Daha fazla bilgi için <a href=\"%s\">bu SSS girişine bakın</a>.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.", "Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Tarayıcınızın WebCrypto API'sini desteklemesi için HTTPS bağlantısına ihtiyacı olabilir. <a href=\"%s\">HTTPS'ye geçmeyi deneyin</a>.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.", "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Tarayıcınız zlib sıkıştırma için kullanılan WebAssembly'i desteklemiyor. Sıkıştırılmamış belgeler oluşturabilirsiniz, ancak sıkıştırılmış olanları okuyamazsınız.",
"waiting on user to provide a password": "waiting on user to provide a password", "waiting on user to provide a password": "kullanıcının şifre girmesi bekleniyor",
"Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Dosya şifresi çözülemedi, doğru şifreyi kullandığınıza emin misiniz? Üstteki buton ile tekrar deneyin.", "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Şifre çözülemedi, yanlış şifre mi girdiniz? Üstteki butonla tekrar deneyin.",
"Retry": "Yeniden Dene", "Retry": "Yeniden Dene",
"Showing raw text…": "Açık yazı gösteriliyor…", "Showing raw text…": "Açık yazı gösteriliyor…",
"Notice:": "Bildirim:", "Notice:": "Bildirim:",
"This link will expire after %s.": "Bu bağlantı şu kadar zaman sonra etkisiz kalacaktır: %s.", "This link will expire after %s.": "Bu bağlantı %s sonra geçersiz hale gelecektir.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "Bu bağlantı sadece bir kere erişilebilir, lütfen sayfayı yenilemeyiniz.", "This link can only be accessed once, do not use back or refresh button in your browser.": "Bu bağlantıya yalnızca bir kez erişilebilir, tarayıcınızda geri veya yenile butonunu kullanmayın.",
"Link:": "Bağlantı:", "Link:": "Bağlantı:",
"Recipient may become aware of your timezone, convert time to UTC?": "Alıcı zaman dilmini öğrenebilir, zaman dilimini UTC'ye çevirmek ister misin?", "Recipient may become aware of your timezone, convert time to UTC?": "Alıcı zaman diliminizi öğrenebilir, zamanı UTC'ye çevirmek ister misiniz?",
"Use Current Timezone": "Şuanki zaman dilimini kullan", "Use Current Timezone": "Mevcut Zaman Dilimini Kullan",
"Convert To UTC": "UTC zaman dilimine çevir", "Convert To UTC": "UTC'ye Dönüştür",
"Close": "Kapat", "Close": "Kapat",
"Encrypted note on %s": "%s üzerinde şifrelenmiş not", "Encrypted note on %s": "%s üzerinde şifrelenmiş not",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Notu görmek için bu bağlantıyı ziyaret et. Bağlantıya sahip olan birisi notu görebilir.", "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Notu görmek için bu bağlantıyı ziyaret edin. URL'yi birine vermek, onların da nota erişmesini sağlar.",
"URL shortener may expose your decrypt key in URL.": "URL kısaltıcı şifreleme anahtarınızı URL içerisinde gösterebilir.", "URL shortener may expose your decrypt key in URL.": "URL kısaltıcı, şifre çözme anahtarınızı URL içinde gösterebilir.",
"Save paste": "Yazıyı kaydet", "Save paste": "Yazıyı kaydet",
"Your IP is not authorized to create pastes.": "IP adresinizin yazı oluşturmaya yetkisi yoktur.", "Your IP is not authorized to create pastes.": "IP adresinizin yazı oluşturmaya yetkisi yoktur.",
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.", "Trying to shorten a URL that isn't pointing at our instance.": "URL'yi kısaltmaya çalışırken, bizim sunucumuza işaret etmeyen bir URL kullanıyorsunuz.",
"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 calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "YOURLS çağrısı başarısız oldu. Muhtemelen \"apiurl\" veya \"signature\" gibi yanlış veya eksik yapılandırma hatası.",
"Error parsing YOURLS response.": "Error parsing YOURLS response.", "Error parsing YOURLS response.": "YOURLS yanıtı ayrıştırılamadı.",
"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?", "This secret message can only be displayed once. Would you like to see it now?": "Bu gizli mesaj yalnızca bir kez görüntülenebilir. Şimdi görmek ister misiniz?",
"Yes, see it": "Evet, görüyorum", "Yes, see it": "Evet, gör",
"Dark Mode": "Koyu Mod", "Dark Mode": "Koyu Mod",
"Error compressing paste, due to missing WebAssembly support.": "Error compressing paste, due to missing WebAssembly support.", "Error compressing paste, due to missing WebAssembly support.": "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.": "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.": "Yazıı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",
"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"
} }

View File

@ -1,6 +1,6 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s це мінімалістичний Open Source проєкт для створення нотаток, де сервер не знає нічого про дані, що зберігаються. Дані шифруються/розшифровуються %sу переглядачі%s з використанням 256-бітного шифрувания AES.", "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s це мінімалістичний Open Source проєкт для створення нотаток, де сервер не знає нічого про дані, що зберігаються. Дані шифруються/розшифровуються %sу браузері%s з використанням 256-бітного шифрування AES.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Подробиці можна дізнатися на <a href=\"https://privatebin.info/\">сайті проєкту</a>.", "More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Подробиці можна дізнатися на <a href=\"https://privatebin.info/\">сайті проєкту</a>.",
"Because ignorance is bliss": "Бо незнання - благо", "Because ignorance is bliss": "Бо незнання - благо",
"Paste does not exist, has expired or has been deleted.": "Допис не існує, протермінований чи був видалений.", "Paste does not exist, has expired or has been deleted.": "Допис не існує, протермінований чи був видалений.",
@ -16,15 +16,15 @@
], ],
"Paste is limited to %s of encrypted data.": "Розмір допису обмежений %s зашифрованих даних.", "Paste is limited to %s of encrypted data.": "Розмір допису обмежений %s зашифрованих даних.",
"Invalid data.": "Неправильні дані.", "Invalid data.": "Неправильні дані.",
"You are unlucky. Try again.": "Вам не пощастило. Спробуйте ще раз.", "You are unlucky. Try again.": "Якась халепа! Спробуйте ще раз.",
"Error saving comment. Sorry.": "Помилка при збереженні коментаря. Вибачте.", "Error saving comment. Sorry.": "Помилка при збереженні коментаря. Вибачте.",
"Error saving paste. Sorry.": "Помилка при збереженні допису. Вибачте.", "Error saving paste. Sorry.": "Помилка при збереженні допису. Вибачте.",
"Invalid paste ID.": "Неправильний ID допису.", "Invalid paste ID.": "Неправильний ID допису.",
"Paste is not of burn-after-reading type.": "Тип допису не \"Знищити після прочитання\".", "Paste is not of burn-after-reading type.": "Тип допису не \"Знищити після прочитання\".",
"Wrong deletion token. Paste was not deleted.": "Неправильний ключ вилучення допису. Допис не вилучено.", "Wrong deletion token. Paste was not deleted.": "Неправильний жетон вилучення допису. Допис не вилучено.",
"Paste was properly deleted.": "Допис був вилучений повністю.", "Paste was properly deleted.": "Допис був вилучений повністю.",
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Для роботи %s потрібен увімкнутий JavaScript. Вибачте.", "JavaScript is required for %s to work. Sorry for the inconvenience.": "Для роботи %s потрібен увімкнутий JavaScript. Вибачте.",
"%s requires a modern browser to work.": "Для роботи %s потрібен більш сучасний переглядач.", "%s requires a modern browser to work.": "Для роботи %s потрібен більш сучасний браузер.",
"New": "Новий допис", "New": "Новий допис",
"Create": "Створити", "Create": "Створити",
"Clone": "Дублювати", "Clone": "Дублювати",
@ -36,8 +36,8 @@
"Discussion": "Обговорення", "Discussion": "Обговорення",
"Toggle navigation": "Перемкнути навігацію", "Toggle navigation": "Перемкнути навігацію",
"%d seconds": [ "%d seconds": [
"%d секунду", "%d секунд",
"%d секунди", "%d секунд",
"%d секунд", "%d секунд",
"%d секунд", "%d секунд",
"%d секунд", "%d секунд",
@ -134,7 +134,7 @@
"Документ буде вилучений через %d місяців." "Документ буде вилучений через %d місяців."
], ],
"Please enter the password for this paste:": "Будь ласка, введіть пароль від допису:", "Please enter the password for this paste:": "Будь ласка, введіть пароль від допису:",
"Could not decrypt data (Wrong key?)": "Неможливо розшифрувати дані (Неправильний ключ?)", "Could not decrypt data (Wrong key?)": "Неможливо розшифрувати дані (можливо, невірний ключ?)",
"Could not delete the paste, it was not stored in burn after reading mode.": "Неможливо вилучити допис, він не був збережений в режимі знищити після прочитання.", "Could not delete the paste, it was not stored in burn after reading mode.": "Неможливо вилучити допис, він не був збережений в режимі знищити після прочитання.",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "ЛИШЕ ДЛЯ ВАШИХ ОЧЕЙ. Не закривайте це вікно, це повідомлення не може бути показано знову.", "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "ЛИШЕ ДЛЯ ВАШИХ ОЧЕЙ. Не закривайте це вікно, це повідомлення не може бути показано знову.",
"Could not decrypt comment; Wrong key?": "Неможливо розшифрувати коментар; Неправильний ключ?", "Could not decrypt comment; Wrong key?": "Неможливо розшифрувати коментар; Неправильний ключ?",
@ -151,7 +151,7 @@
"server error or not responding": "помилка на сервері чи немає відповіді", "server error or not responding": "помилка на сервері чи немає відповіді",
"Could not post comment: %s": "Не вдалося опублікувати коментар: %s", "Could not post comment: %s": "Не вдалося опублікувати коментар: %s",
"Sending paste…": "Відправка допису…", "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": "Видалити допис", "Delete data": "Видалити допис",
"Could not create paste: %s": "Не вдалося опублікувати допис: %s", "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?)": "Неможливо розшифрувати запис: Ключ дешифрування відсутній в посиланні (Можливо, ви використовуєте скорочувач посилань, що видаляє частину посилання?)", "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Неможливо розшифрувати запис: Ключ дешифрування відсутній в посиланні (Можливо, ви використовуєте скорочувач посилань, що видаляє частину посилання?)",
@ -166,7 +166,7 @@
"YiB": "Йбайт", "YiB": "Йбайт",
"Format": "Формат", "Format": "Формат",
"Plain Text": "Звичайний текст", "Plain Text": "Звичайний текст",
"Source Code": "Джерельний код", "Source Code": "Вихідний код",
"Markdown": "Мова розмітки", "Markdown": "Мова розмітки",
"Download attachment": "Звантажити прикріплений файл", "Download attachment": "Звантажити прикріплений файл",
"Cloned: '%s'": "Дубльовано: '%s'", "Cloned: '%s'": "Дубльовано: '%s'",
@ -213,11 +213,19 @@
"Save paste": "Зберегти вставку", "Save paste": "Зберегти вставку",
"Your IP is not authorized to create pastes.": "Вашому IP не дозволено створювати вставки.", "Your IP is not authorized to create pastes.": "Вашому IP не дозволено створювати вставки.",
"Trying to shorten a URL that isn't pointing at our instance.": "Спроба скоротити URL, який не вказує на наш екземпляр.", "Trying to shorten a URL that isn't pointing at our instance.": "Спроба скоротити URL, який не вказує на наш екземпляр.",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Помилка виклику YOURLS. Ймовірно проблема з конфігурацією, наприклад \"apiurl\" чи \"signature\".", "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Помилка виклику YOURLS. Ймовірно проблема з налаштуванням, наприклад \"apiurl\" чи \"signature\".",
"Error parsing YOURLS response.": "Помилка розбору відповіді YOURLS.", "Error parsing YOURLS response.": "Помилка розбору відповіді YOURLS.",
"This secret message can only be displayed once. Would you like to see it now?": "Спалити після вставки читання можна вивести лише один раз під час завантаження. Відкрити його зараз?", "This secret message can only be displayed once. Would you like to see it now?": "Це таємне повідомлення можна надіслати лише один раз. Хочете переглянути його зараз?",
"Yes, see it": "Так, завантажити", "Yes, see it": "Так, побачити",
"Dark Mode": "Темний режим", "Dark Mode": "Темний режим",
"Error compressing paste, due to missing WebAssembly support.": "Помилка при стисканні допису, через відсутність підтримки WebAssembly сервера.", "Error compressing paste, due to missing WebAssembly support.": "Помилка при стисканні допису, через відсутність підтримки WebAssembly сервера.",
"Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Помилка при розпакуванні допису, бо ваш браузер не підтримує WebAssembly. Будь ласка, відкрийте інший браузер для перегляду цього допису." "Error decompressing paste, your browser does not support WebAssembly. Please use another browser to view this paste.": "Помилка при розпакуванні допису, бо ваш браузер не підтримує WebAssembly. Будь ласка, відкрийте в іншому браузері для перегляду цього допису.",
"Start over": "Почати знову",
"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"
} }

View File

@ -151,7 +151,7 @@
"server error or not responding": "服务器错误或无回应", "server error or not responding": "服务器错误或无回应",
"Could not post comment: %s": "无法发送评论: %s", "Could not post comment: %s": "无法发送评论: %s",
"Sending paste…": "粘贴内容提交中…", "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": "删除数据", "Delete data": "删除数据",
"Could not create paste: %s": "无法创建粘贴:%s", "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中缺失解密密钥是否使用了重定向或者短链接导致密钥丢失", "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "无法解密粘贴URL中缺失解密密钥是否使用了重定向或者短链接导致密钥丢失",
@ -218,6 +218,14 @@
"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 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.": "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.": "解压粘贴时出错,您的浏览器不支持 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": "主题"
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 749 B

After

Width:  |  Height:  |  Size: 741 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 B

After

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 B

After

Width:  |  Height:  |  Size: 104 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 299 B

After

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 B

After

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 B

After

Width:  |  Height:  |  Size: 144 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 B

After

Width:  |  Height:  |  Size: 149 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -5,7 +5,6 @@ global.assert = require('assert');
global.jsc = require('jsverify'); global.jsc = require('jsverify');
global.jsdom = require('jsdom-global'); global.jsdom = require('jsdom-global');
global.cleanup = global.jsdom(); global.cleanup = global.jsdom();
global.URL = require('jsdom-url').URL;
global.fs = require('fs'); global.fs = require('fs');
global.WebCrypto = require('@peculiar/webcrypto').Crypto; global.WebCrypto = require('@peculiar/webcrypto').Crypto;
@ -17,7 +16,7 @@ require('./prettify');
global.prettyPrint = window.PR.prettyPrint; global.prettyPrint = window.PR.prettyPrint;
global.prettyPrintOne = window.PR.prettyPrintOne; global.prettyPrintOne = window.PR.prettyPrintOne;
global.showdown = require('./showdown-2.1.0'); global.showdown = require('./showdown-2.1.0');
global.DOMPurify = require('./purify-3.1.3'); global.DOMPurify = require('./purify-3.2.5');
global.baseX = require('./base-x-4.0.0').baseX; global.baseX = require('./base-x-4.0.0').baseX;
global.Legacy = require('./legacy').Legacy; global.Legacy = require('./legacy').Legacy;
require('./bootstrap-3.4.1'); require('./bootstrap-3.4.1');
@ -79,8 +78,16 @@ function parseMime(line) {
} }
// common testing helper functions // common testing helper functions
exports.atob = atob; // as of jsDOM 22 the base64 functions provided in the DOM are more restrictive
exports.btoa = btoa; // 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 // provides random lowercase characters from a to z
exports.jscA2zString = function() { exports.jscA2zString = function() {
@ -152,3 +159,22 @@ exports.urlToString = function (url) {
encodeURI(url.query.join('').replace(/^&+|&+$/gm,'')) : '') + encodeURI(url.query.join('').replace(/^&+|&+$/gm,'')) : '') +
(url.fragment ? '#' + encodeURI(url.fragment) : ''); (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,
};
})();
};

View File

@ -68,7 +68,7 @@
} else { } else {
delStoredPrettifyTheme() delStoredPrettifyTheme()
} }
const toggle = document.querySelector('#bd-theme') const toggle = document.getElementById('bd-theme')
const theme = getStoredPreferredTheme() const theme = getStoredPreferredTheme()
setTheme(theme) setTheme(theme)
toggle.checked = (theme === 'dark') toggle.checked = (theme === 'dark')

View File

@ -6,7 +6,6 @@
* @see {@link https://github.com/PrivateBin/PrivateBin} * @see {@link https://github.com/PrivateBin/PrivateBin}
* @copyright 2012 Sébastien SAUVAGE ({@link http://sebsauvage.net}) * @copyright 2012 Sébastien SAUVAGE ({@link http://sebsauvage.net})
* @license {@link https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License} * @license {@link https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License}
* @version 1.3.1
* @name Legacy * @name Legacy
* @namespace * @namespace
*/ */
@ -175,18 +174,6 @@
)) { )) {
return true; return true;
} }
// async & ES6 support
try {
eval('async () => {}');
} catch (e) {
if (e instanceof SyntaxError) {
return true;
} else {
throw e; // throws CSP error
}
}
return false; return false;
} }
@ -238,7 +225,7 @@
{ {
return init; return init;
}; };
/** /**
* returns the current status of the check * returns the current status of the check
* *
@ -250,7 +237,7 @@
{ {
return status; return status;
}; };
/** /**
* init on application start, returns an all-clear signal * init on application start, returns an all-clear signal
* *
@ -308,4 +295,4 @@
this.Legacy = { this.Legacy = {
Check: Check Check: Check
}; };
}).call(this); }).call(this);

2016
js/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +1,16 @@
{ {
"name": "privatebin", "name": "privatebin",
"version": "1.7.4", "version": "1.7.6",
"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).", "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", "main": "privatebin.js",
"directories": { "directories": {
"test": "test" "test": "test"
}, },
"dependencies": {},
"devDependencies": { "devDependencies": {
"jsdom": "^9.12.0", "@peculiar/webcrypto": "^1.5.0",
"jsdom-global": "^2.1.1", "jsdom": "^26.0.0",
"jsdom-url": "^2.2.1", "jsdom-global": "^3.0.2",
"jsverify": "^0.8.3", "jsverify": "^0.8.3"
"@peculiar/webcrypto": "^1.1.1"
}, },
"scripts": { "scripts": {
"test": "mocha", "test": "mocha",

View File

@ -58,7 +58,6 @@ jQuery.PrivateBin = (function($, RawDeflate) {
*/ */
const purifyHtmlConfig = { const purifyHtmlConfig = {
ALLOWED_URI_REGEXP: /^(?:(?:(?:f|ht)tps?|mailto|magnet):)/i, ALLOWED_URI_REGEXP: /^(?:(?:(?:f|ht)tps?|mailto|magnet):)/i,
SAFE_FOR_JQUERY: true,
USE_PROFILES: { USE_PROFILES: {
html: true html: true
} }
@ -757,14 +756,14 @@ jQuery.PrivateBin = (function($, RawDeflate) {
args[0] = translations[messageId]; args[0] = translations[messageId];
} }
// messageID may contain links, but should be from a trusted source (code or translation JSON files) // messageID may contain HTML, but should be from a trusted source (code or translation JSON files)
let containsLinks = args[0].indexOf('<a') !== -1; let containsHtml = isStringContainsHtml(args[0]);
// prevent double encoding, when we insert into a text node // prevent double encoding, when we insert into a text node
if (containsLinks || $element === null) { if (containsHtml || $element === null) {
for (let i = 0; i < args.length; ++i) { for (let i = 0; i < args.length; ++i) {
// parameters (i > 0) may never contain HTML as they may come from untrusted parties // parameters (i > 0) may never contain HTML as they may come from untrusted parties
if ((containsLinks ? i > 1 : i > 0) || !containsLinks) { if ((containsHtml ? i > 1 : i > 0) || !containsHtml) {
args[i] = Helper.htmlEntities(args[i]); args[i] = Helper.htmlEntities(args[i]);
} }
} }
@ -772,11 +771,11 @@ jQuery.PrivateBin = (function($, RawDeflate) {
// format string // format string
let output = Helper.sprintf.apply(this, args); let output = Helper.sprintf.apply(this, args);
if (containsLinks) { if (containsHtml) {
// only allow tags/attributes we actually use in translations // only allow tags/attributes we actually use in translations
output = DOMPurify.sanitize( output = DOMPurify.sanitize(
output, { output, {
ALLOWED_TAGS: ['a', 'i', 'span'], ALLOWED_TAGS: ['a', 'i', 'span', 'kbd'],
ALLOWED_ATTR: ['href', 'id'] ALLOWED_ATTR: ['href', 'id']
} }
); );
@ -784,7 +783,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
// if $element is given, insert translation // if $element is given, insert translation
if ($element !== null) { if ($element !== null) {
if (containsLinks) { if (containsHtml) {
$element.html(output); $element.html(output);
} else { } else {
// text node takes care of entity encoding // text node takes care of entity encoding
@ -914,6 +913,25 @@ jQuery.PrivateBin = (function($, RawDeflate) {
translations = mockTranslations || {}; translations = mockTranslations || {};
}; };
/**
* Check if string contains valid HTML code
*
* @name I18n.isStringContainsHtml
* @function
* @private
* @param {string} messageId
* @returns {boolean}
*/
function isStringContainsHtml(messageId) {
// An integer which specifies the type of the node. An Element node like <p> or <div>.
const elementNodeType = 1;
const div = document.createElement('div');
div.innerHTML = messageId;
return Array.from(div.childNodes).some(node => node.nodeType === elementNodeType);
}
return me; return me;
})(); })();
@ -2092,7 +2110,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
{ {
I18n._( I18n._(
$('#pastelink'), $('#pastelink'),
'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>',
url, url url, url
); );
// save newly created element // save newly created element
@ -2101,8 +2119,8 @@ jQuery.PrivateBin = (function($, RawDeflate) {
$pasteUrl.click(pasteLinkClick); $pasteUrl.click(pasteLinkClick);
// delete link // delete link
$('#deletelink').html('<a href="' + deleteUrl + '"></a>'); $('#deletelink').attr('href', deleteUrl);
I18n._($('#deletelink a').first(), 'Delete data'); I18n._($('#deletelink span').not('.glyphicon').first(), 'Delete data');
// enable shortener button // enable shortener button
$shortenButton.removeClass('buttondisabled'); $shortenButton.removeClass('buttondisabled');
@ -2237,8 +2255,8 @@ jQuery.PrivateBin = (function($, RawDeflate) {
const me = {}; const me = {};
let $passwordDecrypt, let $passwordDecrypt,
$passwordForm,
$passwordModal, $passwordModal,
bootstrap5PasswordModal = null,
password = ''; password = '';
/** /**
@ -2257,7 +2275,11 @@ jQuery.PrivateBin = (function($, RawDeflate) {
password = $passwordDecrypt.val(); password = $passwordDecrypt.val();
// hide modal // hide modal
$passwordModal.modal('hide'); if (bootstrap5PasswordModal) {
bootstrap5PasswordModal.hide();
} else {
$passwordModal.modal('hide');
}
PasteDecrypter.run(); PasteDecrypter.run();
} }
@ -2278,7 +2300,11 @@ jQuery.PrivateBin = (function($, RawDeflate) {
const $loadconfirmClose = $loadconfirmmodal.find('.close'); const $loadconfirmClose = $loadconfirmmodal.find('.close');
$loadconfirmClose.off('click.close'); $loadconfirmClose.off('click.close');
$loadconfirmClose.on('click.close', Controller.newPaste); $loadconfirmClose.on('click.close', Controller.newPaste);
$loadconfirmmodal.modal('show'); if (typeof bootstrap !== 'undefined' && bootstrap.Tooltip.VERSION) {
(new bootstrap.Modal($loadconfirmmodal[0])).show();
} else {
$loadconfirmmodal.modal('show');
}
} else { } else {
if (window.confirm( if (window.confirm(
I18n._('This secret message can only be displayed once. Would you like to see it now?') I18n._('This secret message can only be displayed once. Would you like to see it now?')
@ -2300,17 +2326,11 @@ jQuery.PrivateBin = (function($, RawDeflate) {
{ {
// show new bootstrap method (if available) // show new bootstrap method (if available)
if ($passwordModal.length !== 0) { if ($passwordModal.length !== 0) {
$passwordModal.modal({ if (bootstrap5PasswordModal) {
backdrop: 'static', bootstrap5PasswordModal.show();
keyboard: false } else {
}); $passwordModal.modal('show');
$passwordModal.modal('show'); }
// focus password input
$passwordDecrypt.focus();
// then re-focus it, when modal causes it to loose focus again
setTimeout(function () {
$passwordDecrypt.focus();
}, 500);
return; return;
} }
@ -2354,7 +2374,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
// and also reset UI // and also reset UI
$passwordDecrypt.val(''); $passwordDecrypt.val('');
} };
/** /**
* init status manager * init status manager
@ -2367,11 +2387,26 @@ jQuery.PrivateBin = (function($, RawDeflate) {
me.init = function() me.init = function()
{ {
$passwordDecrypt = $('#passworddecrypt'); $passwordDecrypt = $('#passworddecrypt');
$passwordForm = $('#passwordform');
$passwordModal = $('#passwordmodal'); $passwordModal = $('#passwordmodal');
// bind events - handle Model password submission // bind events - handle Model password submission
$passwordForm.submit(submitPasswordModal); if ($passwordModal.length !== 0) {
$('#passwordform').submit(submitPasswordModal);
const disableClosingConfig = {
backdrop: 'static',
keyboard: false,
show: false
};
if (typeof bootstrap !== 'undefined' && bootstrap.Tooltip.VERSION) {
bootstrap5PasswordModal = new bootstrap.Modal($passwordModal[0], disableClosingConfig);
} else {
$passwordModal.modal(disableClosingConfig);
}
$passwordModal.on('shown.bs.modal', () => {
$passwordDecrypt.focus();
});
}
}; };
return me; return me;
@ -2393,8 +2428,11 @@ jQuery.PrivateBin = (function($, RawDeflate) {
$messageEditParent, $messageEditParent,
$messagePreview, $messagePreview,
$messagePreviewParent, $messagePreviewParent,
$messageTab,
$messageTabParent,
$message, $message,
isPreview = false; isPreview = false,
isTabSupported = true;
/** /**
* support input of tab character * support input of tab character
@ -2406,9 +2444,13 @@ jQuery.PrivateBin = (function($, RawDeflate) {
*/ */
function supportTabs(event) function supportTabs(event)
{ {
const keyCode = event.keyCode || event.which; // support disabling tab support using [Esc] and [Ctrl]+[m]
// tab was pressed if (event.key === 'Escape' || (event.ctrlKey && event.key === 'm')) {
if (keyCode === 9) { toggleTabSupport();
$messageTab[0].checked = isTabSupported;
event.preventDefault();
}
else if (isTabSupported && event.key === 'Tab') {
// get caret position & selection // get caret position & selection
const val = this.value, const val = this.value,
start = this.selectionStart, start = this.selectionStart,
@ -2422,6 +2464,18 @@ jQuery.PrivateBin = (function($, RawDeflate) {
} }
} }
/**
* toggle tab support in message textarea
*
* @name Editor.toggleTabSupport
* @private
* @function
*/
function toggleTabSupport()
{
isTabSupported = !isTabSupported;
}
/** /**
* view the Editor tab * view the Editor tab
* *
@ -2444,6 +2498,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
// reshow input // reshow input
$message.removeClass('hidden'); $message.removeClass('hidden');
$messageTabParent.removeClass('hidden');
me.focusInput(); me.focusInput();
@ -2476,6 +2531,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
// hide input as now preview is shown // hide input as now preview is shown
$message.addClass('hidden'); $message.addClass('hidden');
$messageTabParent.addClass('hidden');
// show preview // show preview
PasteViewer.setText($message.val()); PasteViewer.setText($message.val());
@ -2534,6 +2590,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
me.show = function() me.show = function()
{ {
$message.removeClass('hidden'); $message.removeClass('hidden');
$messageTabParent.removeClass('hidden');
$editorTabs.removeClass('hidden'); $editorTabs.removeClass('hidden');
}; };
@ -2546,6 +2603,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
me.hide = function() me.hide = function()
{ {
$message.addClass('hidden'); $message.addClass('hidden');
$messageTabParent.addClass('hidden');
$editorTabs.addClass('hidden'); $editorTabs.addClass('hidden');
}; };
@ -2585,7 +2643,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
}; };
/** /**
* init status manager * init editor
* *
* preloads jQuery elements * preloads jQuery elements
* *
@ -2596,9 +2654,12 @@ jQuery.PrivateBin = (function($, RawDeflate) {
{ {
$editorTabs = $('#editorTabs'); $editorTabs = $('#editorTabs');
$message = $('#message'); $message = $('#message');
$messageTab = $('#messagetab');
$messageTabParent = $messageTab.parent();
// bind events // bind events
$message.keydown(supportTabs); $message.keydown(supportTabs);
$messageTab.change(toggleTabSupport);
// bind click events to tab switchers (a), and save parents (li) // bind click events to tab switchers (a), and save parents (li)
$messageEdit = $('#messageedit').click(viewEditor); $messageEdit = $('#messageedit').click(viewEditor);
@ -2619,7 +2680,8 @@ jQuery.PrivateBin = (function($, RawDeflate) {
const PasteViewer = (function () { const PasteViewer = (function () {
const me = {}; const me = {};
let $placeholder, let $messageTabParent,
$placeholder,
$prettyMessage, $prettyMessage,
$prettyPrint, $prettyPrint,
$plainText, $plainText,
@ -2699,6 +2761,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
} }
// otherwise hide the placeholder // otherwise hide the placeholder
$placeholder.addClass('hidden'); $placeholder.addClass('hidden');
$messageTabParent.addClass('hidden');
if (format === 'markdown') { if (format === 'markdown') {
$plainText.removeClass('hidden'); $plainText.removeClass('hidden');
@ -2837,6 +2900,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
*/ */
me.init = function() me.init = function()
{ {
$messageTabParent = $('#messagetab').parent();
$placeholder = $('#placeholder'); $placeholder = $('#placeholder');
$plainText = $('#plaintext'); $plainText = $('#plaintext');
$prettyMessage = $('#prettymessage'); $prettyMessage = $('#prettymessage');
@ -3768,7 +3832,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
/** /**
* Clear the password input in the top navigation * Clear the password input in the top navigation
* *
* @name TopNav.clearPasswordInput * @name TopNav.clearPasswordInput
* @function * @function
*/ */
@ -3868,8 +3932,27 @@ jQuery.PrivateBin = (function($, RawDeflate) {
*/ */
function setLanguage(event) function setLanguage(event)
{ {
document.cookie = 'lang=' + $(event.target).data('lang') + '; SameSite=Lax; Secure'; let lang = $(event.target).data('lang') || event.target.value;
UiHelper.reloadHome();
document.cookie = 'lang=' + lang + '; SameSite=Lax; Secure';
window.location.reload();
event.preventDefault();
}
/**
* save the template in a cookie and reloads the page
*
* @name TopNav.setTemplate
* @private
* @function
* @param {Event} event
*/
function setTemplate(event)
{
let template = $(event.target).data('template') || event.target.value;
document.cookie = 'template=' + template + '; SameSite=Lax; Secure';
window.location.reload();
event.preventDefault(); event.preventDefault();
} }
@ -3940,10 +4023,6 @@ jQuery.PrivateBin = (function($, RawDeflate) {
text: window.location.href text: window.location.href
}); });
$('#qrcode-display').html(qrCanvas); $('#qrcode-display').html(qrCanvas);
// only necessary for bootstrap 5, other templates won't have this
if (bootstrap.Tooltip.VERSION) {
$('#qrcodemodal').modal('show');
}
} }
/** /**
@ -3988,7 +4067,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
} }
emailBody += I18n._('Link:'); emailBody += I18n._('Link:');
emailBody += EOL; emailBody += EOL;
emailBody += $('#pasteurl').attr('href'); // might have been shortened emailBody += $('#pasteurl').attr('href') || window.location.href; // href is tried first as it might have been shortened
return emailBody; return emailBody;
} }
@ -4032,23 +4111,37 @@ jQuery.PrivateBin = (function($, RawDeflate) {
if (expirationDate !== null) { if (expirationDate !== null) {
const $emailconfirmTimezoneCurrent = $emailconfirmmodal.find('#emailconfirm-timezone-current'); const $emailconfirmTimezoneCurrent = $emailconfirmmodal.find('#emailconfirm-timezone-current');
const $emailconfirmTimezoneUtc = $emailconfirmmodal.find('#emailconfirm-timezone-utc'); const $emailconfirmTimezoneUtc = $emailconfirmmodal.find('#emailconfirm-timezone-utc');
$emailconfirmTimezoneCurrent.off('click.sendEmailCurrentTimezone'); let localeConfiguration = { dateStyle: 'long', timeStyle: 'long' };
$emailconfirmTimezoneCurrent.on('click.sendEmailCurrentTimezone', () => { const bootstrap5EmailConfirmModal = typeof bootstrap !== 'undefined' && bootstrap.Tooltip.VERSION ?
const emailBody = templateEmailBody(expirationDateRoundedToSecond.toLocaleString(), isBurnafterreading); new bootstrap.Modal($emailconfirmmodal[0]) : null;
$emailconfirmmodal.modal('hide');
function sendEmailAndHideModal() {
const emailBody = templateEmailBody(
// we don't use Date.prototype.toUTCString() because we would like to avoid GMT
expirationDateRoundedToSecond.toLocaleString(
[], localeConfiguration
), isBurnafterreading
);
if (bootstrap5EmailConfirmModal) {
bootstrap5EmailConfirmModal.hide();
} else {
$emailconfirmmodal.modal('hide');
}
triggerEmailSend(emailBody); triggerEmailSend(emailBody);
}); };
$emailconfirmTimezoneCurrent.off('click.sendEmailCurrentTimezone');
$emailconfirmTimezoneCurrent.on('click.sendEmailCurrentTimezone', sendEmailAndHideModal);
$emailconfirmTimezoneUtc.off('click.sendEmailUtcTimezone'); $emailconfirmTimezoneUtc.off('click.sendEmailUtcTimezone');
$emailconfirmTimezoneUtc.on('click.sendEmailUtcTimezone', () => { $emailconfirmTimezoneUtc.on('click.sendEmailUtcTimezone', () => {
const emailBody = templateEmailBody(expirationDateRoundedToSecond.toLocaleString( localeConfiguration.timeZone = 'UTC';
undefined, sendEmailAndHideModal();
// we don't use Date.prototype.toUTCString() because we would like to avoid GMT
{ timeZone: 'UTC', dateStyle: 'long', timeStyle: 'long' }
), isBurnafterreading);
$emailconfirmmodal.modal('hide');
triggerEmailSend(emailBody);
}); });
$emailconfirmmodal.modal('show'); if (bootstrap5EmailConfirmModal) {
bootstrap5EmailConfirmModal.show();
} else {
$emailconfirmmodal.modal('show');
}
} else { } else {
triggerEmailSend(templateEmailBody(null, isBurnafterreading)); triggerEmailSend(templateEmailBody(null, isBurnafterreading));
} }
@ -4550,7 +4643,12 @@ jQuery.PrivateBin = (function($, RawDeflate) {
// bootstrap template drop down // bootstrap template drop down
$('#language ul.dropdown-menu li a').click(setLanguage); $('#language ul.dropdown-menu li a').click(setLanguage);
// page template drop down // page template drop down
$('#language select option').click(setLanguage); $('#language select').change(setLanguage);
// bootstrap template drop down
$('#template ul.dropdown-menu li a').click(setTemplate);
// page template drop down
$('#template select').change(setTemplate);
// bind events // bind events
$burnAfterReading.change(changeBurnAfterReading); $burnAfterReading.change(changeBurnAfterReading);
@ -4901,6 +4999,9 @@ jQuery.PrivateBin = (function($, RawDeflate) {
TopNav.showViewButtons(); TopNav.showViewButtons();
CopyToClipboard.setUrl(url);
CopyToClipboard.showKeyboardShortcutHint();
// this cannot be grouped with showViewButtons due to remaining time calculation // this cannot be grouped with showViewButtons due to remaining time calculation
TopNav.showEmailButton(); TopNav.showEmailButton();
@ -5337,6 +5438,8 @@ jQuery.PrivateBin = (function($, RawDeflate) {
// shows the remaining time (until) deletion // shows the remaining time (until) deletion
PasteStatus.showRemainingTime(paste); PasteStatus.showRemainingTime(paste);
CopyToClipboard.showKeyboardShortcutHint();
Promise.all(decryptionPromises) Promise.all(decryptionPromises)
.then(() => { .then(() => {
Alert.hideLoading(); Alert.hideLoading();
@ -5366,6 +5469,187 @@ jQuery.PrivateBin = (function($, RawDeflate) {
return me; return me;
})(); })();
/**
*
* @name CopyToClipboard
* @class
*/
const CopyToClipboard = (function () {
const me = {};
let copyButton,
copyLinkButton,
copyIcon,
successIcon,
shortcutHint,
url;
/**
* Handle copy to clipboard button click
*
* @name CopyToClipboard.handleCopyButtonClick
* @private
* @function
*/
function handleCopyButtonClick() {
$(copyButton).click(function() {
const text = PasteViewer.getText();
saveToClipboard(text);
toggleSuccessIcon();
showAlertMessage('Paste copied to clipboard');
});
};
/**
* Handle copy link to clipboard button click
*
* @name CopyToClipboard.handleCopyLinkButtonClick
* @private
* @function
*/
function handleCopyLinkButtonClick() {
$(copyLinkButton).click(function () {
saveToClipboard(url);
showAlertMessage('Link copied to clipboard');
});
}
/**
* Handle CTRL+C/CMD+C keyboard shortcut
*
* @name CopyToClipboard.handleKeyboardShortcut
* @private
* @function
*/
function handleKeyboardShortcut() {
$(document).bind('copy', function () {
if (!isUserSelectedTextToCopy()) {
const text = PasteViewer.getText();
saveToClipboard(text);
showAlertMessage('Paste copied to clipboard');
}
});
};
/**
* Check if user selected some text on the page to copy it
*
* @name CopyToClipboard.isUserSelectedTextToCopy
* @private
* @function
* @returns {boolean}
*/
function isUserSelectedTextToCopy() {
let text = '';
if (window.getSelection) {
text = window.getSelection().toString();
} else if (document.selection && document.selection.type != 'Control') {
text = document.selection.createRange().text;
}
return text.length > 0;
};
/**
* Save text to the clipboard
*
* @name CopyToClipboard.saveToClipboard
* @private
* @param {string} text
* @function
*/
function saveToClipboard(text) {
navigator.clipboard.writeText(text);
};
/**
* Show alert message after text copy
*
* @name CopyToClipboard.showAlertMessage
* @private
* @param {string} message
* @function
*/
function showAlertMessage(message) {
Alert.showStatus(message);
};
/**
* Toogle success icon after copy
*
* @name CopyToClipboard.toggleSuccessIcon
* @private
* @function
*/
function toggleSuccessIcon() {
$(copyIcon).css('display', 'none');
$(successIcon).css('display', 'block');
setTimeout(function() {
$(copyIcon).css('display', 'block');
$(successIcon).css('display', 'none');
}, 1000);
};
/**
* Show keyboard shortcut hint
*
* @name CopyToClipboard.showKeyboardShortcutHint
* @function
*/
me.showKeyboardShortcutHint = function () {
I18n._(
shortcutHint,
'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>'
);
};
/**
* Hide keyboard shortcut hint
*
* @name CopyToClipboard.showKeyboardShortcutHint
* @function
*/
me.hideKeyboardShortcutHint = function () {
$(shortcutHint).html('');
};
/**
* Set paste url
*
* @name CopyToClipboard.setUrl
* @param {string} newUrl
* @function
*/
me.setUrl = function (newUrl) {
url = newUrl;
};
/**
* Initialize
*
* @name CopyToClipboard.init
* @function
*/
me.init = function() {
copyButton = $('#prettyMessageCopyBtn');
copyLinkButton = $('#copyLink');
copyIcon = $('#copyIcon');
successIcon = $('#copySuccessIcon');
shortcutHint = $('#copyShortcutHintText');
handleCopyButtonClick();
handleCopyLinkButtonClick();
handleKeyboardShortcut();
};
return me;
})();
/** /**
* (controller) main PrivateBin logic * (controller) main PrivateBin logic
* *
@ -5387,6 +5671,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
{ {
PasteStatus.hideMessages(); PasteStatus.hideMessages();
Alert.hideMessages(); Alert.hideMessages();
CopyToClipboard.hideKeyboardShortcutHint();
}; };
/** /**
@ -5612,6 +5897,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
Prompt.init(); Prompt.init();
TopNav.init(); TopNav.init();
UiHelper.init(); UiHelper.init();
CopyToClipboard.init();
// check for legacy browsers before going any further // check for legacy browsers before going any further
if (!Legacy.Check.getInit()) { if (!Legacy.Check.getInit()) {
@ -5626,8 +5912,11 @@ jQuery.PrivateBin = (function($, RawDeflate) {
me.initZ(); me.initZ();
// if delete token is passed (i.e. paste has been deleted by this // if delete token is passed (i.e. paste has been deleted by this
// access), there is nothing more to do // access), add an event listener for the 'new' paste button in the alert
if (Model.hasDeleteToken()) { if (Model.hasDeleteToken()) {
$("#new-from-alert").on("click", function () {
UiHelper.reloadHome();
});
return; return;
} }
@ -5668,6 +5957,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
ServerInteraction: ServerInteraction, ServerInteraction: ServerInteraction,
PasteEncrypter: PasteEncrypter, PasteEncrypter: PasteEncrypter,
PasteDecrypter: PasteDecrypter, PasteDecrypter: PasteDecrypter,
CopyToClipboard: CopyToClipboard,
Controller: Controller Controller: Controller
}; };
})(jQuery, RawDeflate); })(jQuery, RawDeflate);

File diff suppressed because one or more lines are too long

2
js/purify-3.2.5.js Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); const common = require('../common');
describe('AttachmentViewer', function () { describe('AttachmentViewer', function () {
describe('setAttachment, showAttachment, removeAttachment, hideAttachment, hideAttachmentPreview, hasAttachment, getAttachment & moveAttachmentTo', function () { describe('setAttachment, showAttachment, removeAttachment, hideAttachment, hideAttachmentPreview, hasAttachment, getAttachment & moveAttachmentTo', function () {
@ -14,11 +14,12 @@ describe('AttachmentViewer', function () {
'string', 'string',
function (mimeType, rawdata, filename, prefix, postfix) { function (mimeType, rawdata, filename, prefix, postfix) {
let clean = jsdom(), let clean = jsdom(),
data = 'data:' + mimeType + ';base64,' + btoa(rawdata), data = 'data:' + mimeType + ';base64,' + common.btoa(rawdata),
mimePrefix = mimeType.substring(0, 6),
previewSupported = ( previewSupported = (
mimeType.substring(0, 6) === 'image/' || mimePrefix === 'image/' ||
mimeType.substring(0, 6) === 'audio/' || mimePrefix === 'audio/' ||
mimeType.substring(0, 6) === 'video/' || mimePrefix === 'video/' ||
mimeType.match(/\/pdf/i) mimeType.match(/\/pdf/i)
), ),
results = [], results = [],
@ -48,6 +49,7 @@ describe('AttachmentViewer', function () {
$('#attachment').hasClass('hidden') && $('#attachment').hasClass('hidden') &&
$('#attachmentPreview').hasClass('hidden') $('#attachmentPreview').hasClass('hidden')
); );
global.atob = common.atob;
if (filename.length) { if (filename.length) {
$.PrivateBin.AttachmentViewer.setAttachment(data, filename); $.PrivateBin.AttachmentViewer.setAttachment(data, filename);
} else { } else {

View File

@ -19,10 +19,9 @@ describe('Check', function () {
} }
); );
Legacy.Check.init(); Legacy.Check.init();
const result1 = Legacy.Check.getInit() && !Legacy.Check.getStatus(), const result = Legacy.Check.getInit() && !Legacy.Check.getStatus();
result2 = (document.getElementById('errormessage').className !== 'hidden');
clean(); clean();
return result1 && result2; return result;
} }
), ),
{tests: 10}); {tests: 10});
@ -67,7 +66,10 @@ describe('Check', function () {
'url': (secureProtocol ? 'https' : 'http' ) + '://' + domain.join('') + '/' 'url': (secureProtocol ? 'https' : 'http' ) + '://' + domain.join('') + '/'
} }
); );
window.crypto = new WebCrypto(); Object.defineProperty(window, 'crypto', {
value: new WebCrypto(),
writeable: false,
});
Legacy.Check.init(); Legacy.Check.init();
const result1 = Legacy.Check.getInit() && Legacy.Check.getStatus(), const result1 = Legacy.Check.getInit() && Legacy.Check.getStatus(),
result2 = secureProtocol === (document.getElementById('httpnotice').className === 'hidden'); result2 = secureProtocol === (document.getElementById('httpnotice').className === 'hidden');

139
js/test/CopyToClipboard.js Normal file
View 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;
}
);
});
});

View File

@ -1,5 +1,5 @@
'use strict'; 'use strict';
require('../common'); const common = require('../common');
describe('CryptTool', function () { describe('CryptTool', function () {
describe('cipher & decipher', function () { describe('cipher & decipher', function () {
@ -15,21 +15,26 @@ describe('CryptTool', function () {
'string', 'string',
'string', 'string',
async function (key, password, message) { async function (key, password, message) {
// pause to let async functions conclude const clean = jsdom();
await new Promise(resolve => setTimeout(resolve, 300));
let clean = jsdom();
// ensure zlib is getting loaded // ensure zlib is getting loaded
$.PrivateBin.Controller.initZ(); $.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(); message = message.trim();
let cipherMessage = await $.PrivateBin.CryptTool.cipher( const cipherMessage = await $.PrivateBin.CryptTool.cipher(
key, password, message, [] key, password, message, []
), ),
plaintext = await $.PrivateBin.CryptTool.decipher( plaintext = await $.PrivateBin.CryptTool.decipher(
key, password, cipherMessage key, password, cipherMessage
); );
clean(); clean();
return message === plaintext; const result = (message === plaintext);
if (!result) console.log(plaintext, cipherMessage);
return result;
} }
), ),
{tests: 3}); {tests: 3});
@ -38,15 +43,19 @@ describe('CryptTool', function () {
// The below static unit tests are included to ensure deciphering of "classic" // The below static unit tests are included to ensure deciphering of "classic"
// SJCL based pastes still works // SJCL based pastes still works
it( it(
'supports PrivateBin v1 ciphertext (SJCL & browser atob)', 'supports PrivateBin v1 ciphertext with password (SJCL & browser atob)',
function () { async function () {
delete global.Base64; delete global.Base64;
let clean = jsdom(); const clean = jsdom();
window.crypto = new WebCrypto(); 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. // Of course you can easily decipher the following texts, if you like.
// Bonus points for finding their sources and hidden meanings. // Bonus points for finding their sources and hidden meanings.
return $.PrivateBin.CryptTool.decipher( const paste = await $.PrivateBin.CryptTool.decipher(
'6t2qsmLyfXIokNCL+3/yl15rfTUBQvm5SOnFPvNE7Q8=', '6t2qsmLyfXIokNCL+3/yl15rfTUBQvm5SOnFPvNE7Q8=',
// -- "That's amazing. I've got the same combination on my luggage." // -- "That's amazing. I've got the same combination on my luggage."
Array.apply(0, Array(6)).map((_,b) => b + 1).join(''), Array.apply(0, Array(6)).map((_,b) => b + 1).join(''),
@ -77,53 +86,76 @@ describe('CryptTool', function () {
'QUxMXI5htsn2rf0HxCFu7Po8DNYLxTS+67hYjDIYWYaEIc8LXWMLyDm9' + 'QUxMXI5htsn2rf0HxCFu7Po8DNYLxTS+67hYjDIYWYaEIc8LXWMLyDm9' +
'C5fARPJ4F2BIWgzgzkNj+dVjusft2XnziamWdbS5u3kuRlVuz5LQj+R5' + 'C5fARPJ4F2BIWgzgzkNj+dVjusft2XnziamWdbS5u3kuRlVuz5LQj+R5' +
'imnqQAincdZTkTT1nYx+DatlOLllCYIHffpI="}' 'imnqQAincdZTkTT1nYx+DatlOLllCYIHffpI="}'
).then(function (paste1) { );
$.PrivateBin.CryptTool.decipher( clean();
's9pmKZKOBN7EVvHpTA8jjLFH3Xlz/0l8lB4+ONPACrM=', const result = typeof paste === 'string' && paste.includes('securely packed in iron');
'', // no password if (!result) console.log(paste);
'{"iv":"WA42mdxIVXUwBqZu7JYNiw==","v":1,"iter":10000,"ks"' + assert.ok(result);
':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')
);
});
});
} }
); );
it( it(
'supports ZeroBin ciphertext (SJCL & Base64 1.7)', 'supports PrivateBin v1 ciphertext no password (SJCL & browser atob)',
function () { async function () {
global.Base64 = require('../base64-1.7').Base64; delete global.Base64;
var clean = jsdom(); const clean = jsdom();
window.crypto = new WebCrypto(); // 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. // Of course you can easily decipher the following texts, if you like.
// Bonus points for finding their sources and hidden meanings. // 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=', '6t2qsmLyfXIokNCL+3/yl15rfTUBQvm5SOnFPvNE7Q8=',
// -- "That's amazing. I've got the same combination on my luggage." // -- "That's amazing. I've got the same combination on my luggage."
Array.apply(0, Array(6)).map((_,b) => b + 1).join(''), Array.apply(0, Array(6)).map((_,b) => b + 1).join(''),
@ -146,54 +178,74 @@ describe('CryptTool', function () {
'7mNNo7xba/YT9KoPDaniqnYqb+q2pX1WNWE7dLS2wfroMAS3kh8P22DA' + '7mNNo7xba/YT9KoPDaniqnYqb+q2pX1WNWE7dLS2wfroMAS3kh8P22DA' +
'V37AeiNoD2PcI6ZcHbRdPa+XRrRcJhSPPW7UQ0z4OvBfjdu/w390QxAx' + 'V37AeiNoD2PcI6ZcHbRdPa+XRrRcJhSPPW7UQ0z4OvBfjdu/w390QxAx' +
'SxvZewoh49fKKB6hTsRnZb4tpHkjlww=="}' 'SxvZewoh49fKKB6hTsRnZb4tpHkjlww=="}'
).then(function (paste1) { );
$.PrivateBin.CryptTool.decipher( clean();
's9pmKZKOBN7EVvHpTA8jjLFH3Xlz/0l8lB4+ONPACrM=', delete global.Base64;
'', // no password const result = typeof paste === 'string' && paste.includes('securely packed in iron');
'{"iv":"Z7lAZQbkrqGMvruxoSm6Pw==","v":1,"iter":10000,"ks"' + if (!result) console.log(paste);
':256,"ts":128,"mode":"gcm","adata":"","cipher":"aes","sa' + assert.ok(result);
'lt":"jN6CjbQMJCM=","ct":"PuOPWB3i2FPcreSrLYeQf84LdE8RHjs' + }
'c+MGtiOr4b7doNyWKYtkNorbRadxaPnEee2/Utrp1MIIfY5juJSy8RGw' + );
'EPX5ciWcYe6EzsXWznsnvhmpKNj9B7eIIrfSbxfy8E2e/g7xav1nive+' +
'ljToka3WT1DZ8ILQd/NbnJeHWaoSEOfvz8+d8QJPb1tNZvs7zEY95Dum' + it(
'QwbyOsIMKAvcZHJ9OJNpujXzdMyt6DpcFcqlldWBZ/8q5rAUTw0HNx/r' + 'supports ZeroBin ciphertext no password (SJCL & Base64 1.7)',
'CgbhAxRYfNoTLIcMM4L0cXbPSgCjwf5FuO3EdE13mgEDhcClW79m0Qvc' + async function () {
'nIh8xgzYoxLbp0+AwvC/MbZM8savN/0ieWr2EKkZ04ggiOIEyvfCUuNp' + global.Base64 = require('../base64-1.7').Base64;
'rQBYO+y8kKduNEN6by0Yf4LRCPfmwN+GezDLuzTnZIMhPbGqUAdgV6Ex' + const clean = jsdom();
'qK2ULEEIrQEMoOuQIxfoMhqLlzG79vXGt2O+BY+4IiYfvmuRLks4UXfy' + Object.defineProperty(window, 'crypto', {
'HqxPXTJg48IYbGs0j4TtJPUgp3523EyYLwEGyVTAuWhYAmVIwd/hoV7d' + value: new WebCrypto(),
'7tmfcF73w9dufDFI3LNca2KxzBnWNPYvIZKBwWbq8ncxkb191dP6mjEi' + writeable: false,
'7NnhqVk5A6vIBbu4AC5PZf76l6yep4xsoy/QtdDxCMocCXeAML9MQ9uP' +
'QbuspOKrBvMfN5igA1kBqasnxI472KBNXsdZnaDddSVUuvhTcETM="}'
).then(function (paste2) {
clean();
delete global.Base64;
assert.ok(
paste1.includes('securely packed in iron') &&
paste2.includes('Sol is right')
);
});
}); });
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 () { 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(); clean = jsdom();
window.crypto = new WebCrypto(); Object.defineProperty(window, 'crypto', {
value: new WebCrypto(),
writeable: false,
});
// ensure zlib is getting loaded // ensure zlib is getting loaded
$.PrivateBin.Controller.initZ(); $.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, [] 'foo', 'bar', message, []
), ),
plaintext = await $.PrivateBin.CryptTool.decipher( plaintext = await $.PrivateBin.CryptTool.decipher(
'foo', 'bar', cipherMessage 'foo', 'bar', cipherMessage
); );
clean(); clean();
assert.strictEqual( const result = (message === plaintext);
message, if (!result) console.log(plaintext, cipherMessage);
plaintext assert.ok(result);
);
}); });
it('can en- and decrypt a particular message (#260)', function () { it('can en- and decrypt a particular message (#260)', function () {
@ -201,8 +253,6 @@ describe('CryptTool', function () {
'string', 'string',
'string', 'string',
async function (key, password) { async function (key, password) {
// pause to let async functions conclude
await new Promise(resolve => setTimeout(resolve, 300));
const message = ` const message = `
1 subgoal 1 subgoal
@ -225,18 +275,23 @@ isWhile : interp (while expr sBody) (MemElem mem) =
======================== ( 1 / 1 ) ======================== ( 1 / 1 )
conseq_or_bottom inv (interp (nth_iterate sBody n) (MemElem mem)) conseq_or_bottom inv (interp (nth_iterate sBody n) (MemElem mem))
`; `;
let clean = jsdom(); const clean = jsdom();
// ensure zlib is getting loaded // ensure zlib is getting loaded
$.PrivateBin.Controller.initZ(); $.PrivateBin.Controller.initZ();
window.crypto = new WebCrypto(); Object.defineProperty(window, 'crypto', {
let cipherMessage = await $.PrivateBin.CryptTool.cipher( value: new WebCrypto(),
writeable: false,
});
const cipherMessage = await $.PrivateBin.CryptTool.cipher(
key, password, message, [] key, password, message, []
), ),
plaintext = await $.PrivateBin.CryptTool.decipher( plaintext = await $.PrivateBin.CryptTool.decipher(
key, password, cipherMessage key, password, cipherMessage
); );
clean(); clean();
return message === plaintext; const result = (message === plaintext);
if (!result) console.log(plaintext, cipherMessage);
return result;
} }
), ),
{tests: 3}); {tests: 3});
@ -244,23 +299,27 @@ conseq_or_bottom inv (interp (nth_iterate sBody n) (MemElem mem))
}); });
describe('getSymmetricKey', function () { describe('getSymmetricKey', function () {
this.timeout(30000); this.timeout(10000);
var keys = []; let keys = [];
// the parameter is used to ensure the test is run more then one time // the parameter is used to ensure the test is run more then one time
jsc.property( it('returns random, non-empty keys', function () {
'returns random, non-empty keys', jsc.assert(jsc.forall(
'integer', 'integer',
function(counter) { function(counter) {
var clean = jsdom(); const clean = jsdom();
window.crypto = new WebCrypto(); Object.defineProperty(window, 'crypto', {
var key = $.PrivateBin.CryptTool.getSymmetricKey(), value: new WebCrypto(),
result = (key !== '' && keys.indexOf(key) === -1); writeable: false,
keys.push(key); });
clean(); const key = $.PrivateBin.CryptTool.getSymmetricKey(),
return result; result = (key !== '' && keys.indexOf(key) === -1);
} keys.push(key);
); clean();
return result;
}
),
{tests: 10});
});
}); });
}); });

View File

@ -229,30 +229,30 @@ describe('Helper', function () {
cleanup(); cleanup();
}); });
/* TODO test fails since jsDOM version 17 - document.cookie remains empty
jsc.property( jsc.property(
'returns the requested cookie', 'returns the requested cookie',
jsc.nearray(jsc.nearray(common.jscAlnumString())), jsc.nearray(jsc.nearray(common.jscAlnumString())),
jsc.nearray(jsc.nearray(common.jscAlnumString())), jsc.nearray(jsc.nearray(common.jscAlnumString())),
function (labels, values) { function (labels, values) {
var selectedKey = '', selectedValue = '', let selectedKey = '', selectedValue = '';
cookieArray = []; const clean = jsdom();
labels.forEach(function(item, i) { labels.forEach(function(item, i) {
var key = item.join(''), const key = item.join(''),
value = (values[i] || values[0]).join(''); value = (values[i] || values[0]).join('');
cookieArray.push(key + '=' + value); document.cookie = key + '=' + value;
if (Math.random() < 1 / i || selectedKey === key) if (Math.random() < 1 / i || selectedKey === key)
{ {
selectedKey = key; selectedKey = key;
selectedValue = value; selectedValue = value;
} }
}); });
var clean = jsdom('', {cookie: cookieArray}), const result = $.PrivateBin.Helper.getCookie(selectedKey);
result = $.PrivateBin.Helper.getCookie(selectedKey);
$.PrivateBin.Helper.reset(); $.PrivateBin.Helper.reset();
clean(); clean();
return result === selectedValue; return result === selectedValue;
} }
); ); */
}); });
describe('baseUri', function () { describe('baseUri', function () {

View File

@ -94,7 +94,6 @@ describe('Model', function () {
url.query = queryStart.concat(pasteId, queryEnd); url.query = queryStart.concat(pasteId, queryEnd);
const pasteIdString = pasteId.join(''), const pasteIdString = pasteId.join(''),
clean = jsdom('', {url: common.urlToString(url)}); clean = jsdom('', {url: common.urlToString(url)});
global.URL = require('jsdom-url').URL;
const result = $.PrivateBin.Model.getPasteId(); const result = $.PrivateBin.Model.getPasteId();
$.PrivateBin.Model.reset(); $.PrivateBin.Model.reset();
clean(); clean();
@ -107,7 +106,6 @@ describe('Model', function () {
function (url) { function (url) {
let clean = jsdom('', {url: common.urlToString(url)}), let clean = jsdom('', {url: common.urlToString(url)}),
result = false; result = false;
global.URL = require('jsdom-url').URL;
try { try {
$.PrivateBin.Model.getPasteId(); $.PrivateBin.Model.getPasteId();
} }
@ -131,7 +129,7 @@ describe('Model', function () {
'returns the fragment of a v1 URL', 'returns the fragment of a v1 URL',
common.jscUrl(), common.jscUrl(),
function (url) { 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)}), const clean = jsdom('', {url: common.urlToString(url)}),
result = $.PrivateBin.Model.getPasteKey(); result = $.PrivateBin.Model.getPasteKey();
$.PrivateBin.Model.reset(); $.PrivateBin.Model.reset();
@ -140,17 +138,17 @@ describe('Model', function () {
} }
); );
jsc.property( jsc.property(
'returns the v1 fragment stripped of trailing query parts', 'returns the fragment stripped of trailing query parts',
common.jscUrl(), common.jscUrl(),
jsc.array(common.jscHashString()), jsc.array(common.jscHashString()),
function (url, trail) { function (url, trail) {
const fragmentString = common.btoa(url.fragment.padStart(32, '\u0000')); const fragment = url.fragment.padStart(32, '\u0000');
url.fragment = fragmentString + '&' + trail.join(''); url.fragment = $.PrivateBin.CryptTool.base58encode(fragment) + '&' + trail.join('');
const clean = jsdom('', {url: common.urlToString(url)}), const clean = jsdom('', {url: common.urlToString(url)}),
result = $.PrivateBin.Model.getPasteKey(); result = $.PrivateBin.Model.getPasteKey();
$.PrivateBin.Model.reset(); $.PrivateBin.Model.reset();
clean(); clean();
return fragmentString === result; return fragment === result;
} }
); );
jsc.property( jsc.property(

View File

@ -30,11 +30,11 @@ describe('PasteStatus', function () {
const expected1 = common.urlToString(url1).replace(/&(gt|lt)$/, '&$1a'), const expected1 = common.urlToString(url1).replace(/&(gt|lt)$/, '&$1a'),
expected2 = common.urlToString(url2).replace(/&(gt|lt)$/, '&$1a'), expected2 = common.urlToString(url2).replace(/&(gt|lt)$/, '&$1a'),
clean = jsdom(); 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.init();
$.PrivateBin.PasteStatus.createPasteNotification(expected1, expected2); $.PrivateBin.PasteStatus.createPasteNotification(expected1, expected2);
const result1 = $('#pasteurl')[0].href, const result1 = $('#pasteurl')[0].href,
result2 = $('#deletelink a')[0].href; result2 = $('#deletelink')[0].href;
clean(); clean();
return result1 === expected1 && result2 === expected2; return result1 === expected1 && result2 === expected2;
} }
@ -155,7 +155,7 @@ describe('PasteStatus', function () {
'\t\t<title>PrivateBin</title>\n' + '\t\t<title>PrivateBin</title>\n' +
'\t</head>\n' + '\t</head>\n' +
'\t<body>\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' + '\t</body>\n' +
'</html>', '</html>',
clean = jsdom(); clean = jsdom();
@ -255,4 +255,3 @@ describe('PasteStatus', function () {
); );
}); });
}); });

View File

@ -11,7 +11,7 @@ describe('Prompt', function () {
'returns the password fed into the dialog', 'returns the password fed into the dialog',
'string', 'string',
function (password) { function (password) {
password = password.replace(/\r+/g, ''); password = password.replace(/\r+|\n+/g, '');
var clean = jsdom('', {url: 'ftp://example.com/?0000000000000000'}); var clean = jsdom('', {url: 'ftp://example.com/?0000000000000000'});
$('body').html( $('body').html(
'<div id="passwordmodal" class="modal fade" role="dialog">' + '<div id="passwordmodal" class="modal fade" role="dialog">' +
@ -32,7 +32,8 @@ describe('Prompt', function () {
//var result = $.PrivateBin.Prompt.getPassword(); //var result = $.PrivateBin.Prompt.getPassword();
var result = $('#passworddecrypt').val(); var result = $('#passworddecrypt').val();
$.PrivateBin.Model.reset(); $.PrivateBin.Model.reset();
clean(); // TODO triggers error messages in jsDOM since version 11
//clean();
return result === password; return result === password;
} }
); );

View File

@ -621,7 +621,7 @@ describe('TopNav', function () {
'returns the contents of the password input', 'returns the contents of the password input',
'string', 'string',
function (password) { function (password) {
password = password.replace(/\r+/g, ''); password = password.replace(/\r+|\n+/g, '');
var results = []; var results = [];
$('body').html( $('body').html(
'<nav><div id="navbar"><ul><li><div id="password" ' + '<nav><div id="navbar"><ul><li><div id="password" ' +
@ -727,11 +727,11 @@ describe('TopNav', function () {
cleanup(); cleanup();
}); });
// TODO triggers error messages in jsDOM since version 12, but passes
it( it(
'displays raw text view correctly', 'displays raw text view correctly',
function () { function () {
const clean = jsdom('', {url: 'https://privatebin.net/?0123456789abcdef#0'}); const clean = jsdom('', {url: 'https://privatebin.net/?0123456789abcdef#0'});
global.URL = require('jsdom-url').URL;
$('body').html('<button id="rawtextbutton"></button>'); $('body').html('<button id="rawtextbutton"></button>');
const sample = 'example'; const sample = 'example';
$.PrivateBin.PasteViewer.setText(sample); $.PrivateBin.PasteViewer.setText(sample);

View File

@ -18,11 +18,6 @@ describe('UiHelper', function () {
const expected = common.urlToString(url), const expected = common.urlToString(url),
clean = jsdom('', {url: expected}); clean = jsdom('', {url: expected});
// make window.location.href writable
Object.defineProperty(window.location, 'href', {
writable: true,
value: window.location.href
});
$.PrivateBin.UiHelper.mockHistoryChange(); $.PrivateBin.UiHelper.mockHistoryChange();
$.PrivateBin.Helper.reset(); $.PrivateBin.Helper.reset();
var result = window.location.href; var result = window.location.href;
@ -40,11 +35,6 @@ describe('UiHelper', function () {
const expected = common.urlToString(url), const expected = common.urlToString(url),
clean = jsdom('', {url: expected}); clean = jsdom('', {url: expected});
// make window.location.href writable
Object.defineProperty(window.location, 'href', {
writable: true,
value: window.location.href
});
$.PrivateBin.UiHelper.mockHistoryChange([ $.PrivateBin.UiHelper.mockHistoryChange([
{type: 'newpaste'}, '', expected {type: 'newpaste'}, '', expected
]); ]);
@ -57,6 +47,8 @@ describe('UiHelper', function () {
}); });
describe('reloadHome', function () { describe('reloadHome', function () {
// TODO triggers error messages in jsDOM since version 11
/*
this.timeout(30000); this.timeout(30000);
before(function () { before(function () {
$.PrivateBin.Helper.reset(); $.PrivateBin.Helper.reset();
@ -71,11 +63,6 @@ describe('UiHelper', function () {
delete(url.fragment); delete(url.fragment);
const expected = common.urlToString(url); 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.UiHelper.reloadHome();
$.PrivateBin.Helper.reset(); $.PrivateBin.Helper.reset();
var result = window.location.href; var result = window.location.href;
@ -83,6 +70,7 @@ describe('UiHelper', function () {
return expected === result; return expected === result;
} }
); );
*/
}); });
describe('isVisible', function () { describe('isVisible', function () {

View File

@ -1,6 +1,6 @@
'use strict'; 'use strict';
(function() { (function () {
let ret; let ret;
async function initialize() { async function initialize() {
@ -23,16 +23,7 @@
_abort: errno => { console.error(`Error: ${errno}`) }, _abort: errno => { console.error(`Error: ${errno}`) },
_grow: () => { }, _grow: () => { },
}; };
const ins = (await WebAssembly.instantiateStreaming(fetch('js/zlib-1.3.1.wasm'), { env })).instance;
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 srcPtr = ins.exports._malloc(CHUNK_SIZE); const srcPtr = ins.exports._malloc(CHUNK_SIZE);
const dstPtr = ins.exports._malloc(CHUNK_SIZE); const dstPtr = ins.exports._malloc(CHUNK_SIZE);
@ -116,28 +107,28 @@
} }
ret = { ret = {
inflate(rawDeflateBuffer) { inflate(rawDeflateBuffer) {
const rawInf = new RawInf(); const rawInf = new RawInf();
for (let offset = 0; offset < rawDeflateBuffer.length; offset += CHUNK_SIZE) { for (let offset = 0; offset < rawDeflateBuffer.length; offset += CHUNK_SIZE) {
const end = Math.min(offset + CHUNK_SIZE, rawDeflateBuffer.length); const end = Math.min(offset + CHUNK_SIZE, rawDeflateBuffer.length);
const chunk = rawDeflateBuffer.subarray(offset, end); const chunk = rawDeflateBuffer.subarray(offset, end);
rawInf.inflate(chunk); rawInf.inflate(chunk);
} }
const ret = rawInf.getBuffer(); const ret = rawInf.getBuffer();
rawInf.destroy(); rawInf.destroy();
return ret; return ret;
}, },
deflate(rawInflateBuffer) { deflate(rawInflateBuffer) {
const rawDef = new RawDef(); const rawDef = new RawDef();
for (let offset = 0; offset < rawInflateBuffer.length; offset += CHUNK_SIZE) { for (let offset = 0; offset < rawInflateBuffer.length; offset += CHUNK_SIZE) {
const end = Math.min(offset + CHUNK_SIZE, rawInflateBuffer.length); const end = Math.min(offset + CHUNK_SIZE, rawInflateBuffer.length);
const chunk = rawInflateBuffer.subarray(offset, end); const chunk = rawInflateBuffer.subarray(offset, end);
rawDef.deflate(chunk, rawInflateBuffer.length <= offset + CHUNK_SIZE); rawDef.deflate(chunk, rawInflateBuffer.length <= offset + CHUNK_SIZE);
} }
const ret = rawDef.getBuffer(); const ret = rawDef.getBuffer();
rawDef.destroy(); rawDef.destroy();
return ret; return ret;
}, },
} }
return ret; return ret;

View File

@ -12,7 +12,6 @@
namespace PrivateBin; namespace PrivateBin;
use Exception; use Exception;
use PDO;
/** /**
* Configuration * Configuration
@ -46,7 +45,18 @@ class Configuration
'defaultformatter' => 'plaintext', 'defaultformatter' => 'plaintext',
'syntaxhighlightingtheme' => '', 'syntaxhighlightingtheme' => '',
'sizelimit' => 10485760, 'sizelimit' => 10485760,
'templateselection' => false,
'template' => 'bootstrap', '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>.', 'info' => 'More information on the <a href=\'https://privatebin.info/\'>project page</a>.',
'notice' => '', 'notice' => '',
'languageselection' => false, 'languageselection' => false,
@ -55,7 +65,7 @@ class Configuration
'qrcode' => true, 'qrcode' => true,
'email' => true, 'email' => true,
'icon' => 'identicon', '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\'; 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, 'zerobincompatibility' => false,
'httpwarning' => true, 'httpwarning' => true,
'compression' => 'zlib', 'compression' => 'zlib',
@ -98,6 +108,23 @@ class Configuration
'signature' => '', 'signature' => '',
'apiurl' => '', 'apiurl' => '',
), ),
// update this array when adding/changing/removing js files
'sri' => array(
'js/base-x-4.0.0.js' => 'sha512-nNPg5IGCwwrveZ8cA/yMGr5HiRS5Ps2H+s0J/mKTPjCPWUgFGGw7M5nqdnPD3VsRwCVysUh3Y8OWjeSKGkEQJQ==',
'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-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-UxW/TOZKon83n6dk/09GsYKIyeO5LeBHokxyIq+r7KFS5KMBeIB/EM7NrkVYIezwZBaovnyNtY2d9tKFicRlXg==',
'js/prettify.js' => 'sha512-puO0Ogy++IoA2Pb9IjSxV1n4+kQkKXYAEUtVzfZpQepyDPyXk8hokiYDS7ybMogYlyyEIwMLpZqVhCkARQWLMg==',
'js/privatebin.js' => 'sha512-yN0ZaVFrXpiYaeFRcofdCrlHVcw4ZJAXU3K1l6H9rsoY//iLKegX0GdWxRCFWzhd1xO4eDJKCT7qyaA1Vt65bg==',
'js/purify-3.2.5.js' => 'sha512-eLlLLL/zYuf5JuG0x4WQm687MToqOGP9cDQHIdmOy1ZpjiY4J48BBcOM7DtZheKk1UogW920+9RslWYB4KGuuA==',
'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-5bU9IIP4PgBrOKLZvGWJD4kgfQrkTz8Z3Iqeu058mbQzW3mCumOU6M3UVbVZU9rrVoVwaW4cZK8U8h5xjF88eQ==',
),
); );
/** /**
@ -149,7 +176,7 @@ class Configuration
'tbl' => null, 'tbl' => null,
'usr' => null, 'usr' => null,
'pwd' => null, 'pwd' => null,
'opt' => array(PDO::ATTR_PERSISTENT => true), 'opt' => array(),
); );
} elseif ( } elseif (
$section == 'model_options' && in_array( $section == 'model_options' && in_array(
@ -193,6 +220,10 @@ class Configuration
} }
// check for missing keys and set defaults if necessary // check for missing keys and set defaults if necessary
else { else {
// preserve configured SRI hashes
if ($section == 'sri' && array_key_exists($section, $config)) {
$this->_configuration[$section] = $config[$section];
}
foreach ($values as $key => $val) { foreach ($values as $key => $val) {
if ($key == 'dir') { if ($key == 'dir') {
$val = PATH . $val; $val = PATH . $val;
@ -214,6 +245,8 @@ class Configuration
$result = (int) $config[$section][$key]; $result = (int) $config[$section][$key];
} elseif (is_string($val) && !empty($config[$section][$key])) { } elseif (is_string($val) && !empty($config[$section][$key])) {
$result = (string) $config[$section][$key]; $result = (string) $config[$section][$key];
} elseif (is_array($val) && is_array($config[$section][$key])) {
$result = $config[$section][$key];
} }
} }
$this->_configuration[$section][$key] = $result; $this->_configuration[$section][$key] = $result;

View File

@ -27,7 +27,7 @@ class Controller
* *
* @const string * @const string
*/ */
const VERSION = '1.7.4'; const VERSION = '1.7.6';
/** /**
* minimal required PHP version * minimal required PHP version
@ -67,6 +67,14 @@ class Controller
*/ */
private $_status = ''; private $_status = '';
/**
* status message
*
* @access private
* @var bool
*/
private $_is_deleted = false;
/** /**
* JSON message * JSON message
* *
@ -104,10 +112,12 @@ class Controller
* *
* initializes and runs PrivateBin * initializes and runs PrivateBin
* *
* @param ?Configuration $config
*
* @access public * @access public
* @throws Exception * @throws Exception
*/ */
public function __construct() public function __construct(?Configuration $config = null)
{ {
if (version_compare(PHP_VERSION, self::MIN_PHP_VERSION) < 0) { 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)); error_log(I18n::_('%s requires php %s or above to work. Sorry.', I18n::_('PrivateBin'), self::MIN_PHP_VERSION));
@ -118,7 +128,8 @@ class Controller
return; 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(); $this->_init();
switch ($this->_request->getOperation()) { switch ($this->_request->getOperation()) {
@ -166,12 +177,21 @@ class Controller
*/ */
private function _init() private function _init()
{ {
$this->_conf = new Configuration;
$this->_model = new Model($this->_conf); $this->_model = new Model($this->_conf);
$this->_request = new Request; $this->_request = new Request;
$this->_urlBase = $this->_request->getRequestUri(); $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'); $lang = $this->_conf->getKey('languagedefault');
I18n::setLanguageFallback($lang); I18n::setLanguageFallback($lang);
// force default language, if language selection is disabled and a default is set // force default language, if language selection is disabled and a default is set
@ -181,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 * Turn off browser caching
* *
@ -308,7 +347,8 @@ class Controller
if (hash_equals($paste->getDeleteToken(), $deletetoken)) { if (hash_equals($paste->getDeleteToken(), $deletetoken)) {
// Paste exists and deletion token is valid: Delete the paste. // Paste exists and deletion token is valid: Delete the paste.
$paste->delete(); $paste->delete();
$this->_status = 'Paste was properly deleted.'; $this->_status = 'Paste was properly deleted.';
$this->_is_deleted = true;
} else { } else {
$this->_error = 'Wrong deletion token. Paste was not deleted.'; $this->_error = 'Wrong deletion token. Paste was not deleted.';
} }
@ -391,6 +431,13 @@ class Controller
setcookie('lang', $languageselection, array('SameSite' => 'Lax', 'Secure' => true)); 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 // strip policies that are unsupported in meta tag
$metacspheader = str_replace( $metacspheader = str_replace(
array( array(
@ -412,6 +459,7 @@ class Controller
} }
$page->assign('BASEPATH', I18n::_($this->_conf->getKey('basepath'))); $page->assign('BASEPATH', I18n::_($this->_conf->getKey('basepath')));
$page->assign('STATUS', I18n::_($this->_status)); $page->assign('STATUS', I18n::_($this->_status));
$page->assign('ISDELETED', I18n::_(json_encode($this->_is_deleted)));
$page->assign('VERSION', self::VERSION); $page->assign('VERSION', self::VERSION);
$page->assign('DISCUSSION', $this->_conf->getKey('discussion')); $page->assign('DISCUSSION', $this->_conf->getKey('discussion'));
$page->assign('OPENDISCUSSION', $this->_conf->getKey('opendiscussion')); $page->assign('OPENDISCUSSION', $this->_conf->getKey('opendiscussion'));
@ -428,6 +476,8 @@ class Controller
$page->assign('ZEROBINCOMPATIBILITY', $this->_conf->getKey('zerobincompatibility')); $page->assign('ZEROBINCOMPATIBILITY', $this->_conf->getKey('zerobincompatibility'));
$page->assign('LANGUAGESELECTION', $languageselection); $page->assign('LANGUAGESELECTION', $languageselection);
$page->assign('LANGUAGES', I18n::getLanguageLabels(I18n::getAvailableLanguages())); $page->assign('LANGUAGES', I18n::getLanguageLabels(I18n::getAvailableLanguages()));
$page->assign('TEMPLATESELECTION', $templateselection);
$page->assign('TEMPLATES', TemplateSwitcher::getAvailableTemplates());
$page->assign('EXPIRE', $expire); $page->assign('EXPIRE', $expire);
$page->assign('EXPIREDEFAULT', $this->_conf->getKey('default', 'expire')); $page->assign('EXPIREDEFAULT', $this->_conf->getKey('default', 'expire'));
$page->assign('URLSHORTENER', $this->_conf->getKey('urlshortener')); $page->assign('URLSHORTENER', $this->_conf->getKey('urlshortener'));
@ -436,7 +486,8 @@ class Controller
$page->assign('HTTPWARNING', $this->_conf->getKey('httpwarning')); $page->assign('HTTPWARNING', $this->_conf->getKey('httpwarning'));
$page->assign('HTTPSLINK', 'https://' . $this->_request->getHost() . $this->_request->getRequestUri()); $page->assign('HTTPSLINK', 'https://' . $this->_request->getHost() . $this->_request->getRequestUri());
$page->assign('COMPRESSION', $this->_conf->getKey('compression')); $page->assign('COMPRESSION', $this->_conf->getKey('compression'));
$page->draw($this->_conf->getKey('template')); $page->assign('SRI', $this->_conf->getSection('sri'));
$page->draw(TemplateSwitcher::getTemplate());
} }
/** /**

View File

@ -34,7 +34,7 @@ abstract class AbstractData
* @param array $paste * @param array $paste
* @return bool * @return bool
*/ */
abstract public function create($pasteid, array $paste); abstract public function create($pasteid, array &$paste);
/** /**
* Read a paste. * Read a paste.
@ -72,7 +72,7 @@ abstract class AbstractData
* @param array $comment * @param array $comment
* @return bool * @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. * Read all comments of paste.
@ -199,7 +199,7 @@ abstract class AbstractData
* @param array $paste * @param array $paste
* @return array * @return array
*/ */
protected static function upgradePreV1Format(array $paste) protected static function upgradePreV1Format(array &$paste)
{ {
if (array_key_exists('attachment', $paste['meta'])) { if (array_key_exists('attachment', $paste['meta'])) {
$paste['attachment'] = $paste['meta']['attachment']; $paste['attachment'] = $paste['meta']['attachment'];

View File

@ -72,7 +72,9 @@ class Database extends AbstractData
// set default options // set default options
$options['opt'][PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $options['opt'][PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$options['opt'][PDO::ATTR_EMULATE_PREPARES] = false; $options['opt'][PDO::ATTR_EMULATE_PREPARES] = false;
$options['opt'][PDO::ATTR_PERSISTENT] = true; if (!array_key_exists(PDO::ATTR_PERSISTENT, $options['opt'])) {
$options['opt'][PDO::ATTR_PERSISTENT] = true;
}
$db_tables_exist = true; $db_tables_exist = true;
// setup type and dabase connection // setup type and dabase connection
@ -138,7 +140,7 @@ class Database extends AbstractData
* @param array $paste * @param array $paste
* @return bool * @return bool
*/ */
public function create($pasteid, array $paste) public function create($pasteid, array &$paste)
{ {
$expire_date = 0; $expire_date = 0;
$opendiscussion = $burnafterreading = false; $opendiscussion = $burnafterreading = false;
@ -295,14 +297,18 @@ class Database extends AbstractData
* @param array $comment * @param array $comment
* @return bool * @return bool
*/ */
public function createComment($pasteid, $parentid, $commentid, array $comment) public function createComment($pasteid, $parentid, $commentid, array &$comment)
{ {
if (array_key_exists('data', $comment)) { if (array_key_exists('data', $comment)) {
$version = 1; $version = 1;
$data = $comment['data']; $data = $comment['data'];
} else { } else {
$version = 2; try {
$data = Json::encode($comment); $version = 2;
$data = Json::encode($comment);
} catch (Exception $e) {
return false;
}
} }
list($createdKey, $iconKey) = $this->_getVersionedKeys($version); list($createdKey, $iconKey) = $this->_getVersionedKeys($version);
$meta = $comment['meta']; $meta = $comment['meta'];
@ -504,8 +510,8 @@ class Database extends AbstractData
private function _exec($sql, array $params) private function _exec($sql, array $params)
{ {
$statement = $this->_db->prepare($sql); $statement = $this->_db->prepare($sql);
foreach ($params as $key => &$parameter) { $position = 1;
$position = $key + 1; foreach ($params as &$parameter) {
if (is_int($parameter)) { if (is_int($parameter)) {
$statement->bindParam($position, $parameter, PDO::PARAM_INT); $statement->bindParam($position, $parameter, PDO::PARAM_INT);
} elseif (is_string($parameter) && strlen($parameter) >= 4000) { } elseif (is_string($parameter) && strlen($parameter) >= 4000) {
@ -513,6 +519,7 @@ class Database extends AbstractData
} else { } else {
$statement->bindParam($position, $parameter); $statement->bindParam($position, $parameter);
} }
++$position;
} }
$result = $statement->execute(); $result = $statement->execute();
$statement->closeCursor(); $statement->closeCursor();
@ -598,18 +605,8 @@ class Database extends AbstractData
$sql = 'SELECT table_name FROM all_tables'; $sql = 'SELECT table_name FROM all_tables';
break; break;
case 'pgsql': case 'pgsql':
$sql = 'SELECT c."relname" AS "table_name" ' $sql = 'SELECT "tablename" FROM "pg_catalog"."pg_tables" '
. 'FROM "pg_class" c, "pg_user" u ' . 'WHERE "schemaname" NOT IN (\'pg_catalog\', \'information_schema\')';
. 'WHERE c."relowner" = u."usesysid" AND c."relkind" = \'r\' '
. 'AND NOT EXISTS (SELECT 1 FROM "pg_views" WHERE "viewname" = c."relname") '
. "AND c.\"relname\" !~ '^(pg_|sql_)' "
. 'UNION '
. 'SELECT c."relname" AS "table_name" '
. 'FROM "pg_class" c '
. "WHERE c.\"relkind\" = 'r' "
. 'AND NOT EXISTS (SELECT 1 FROM "pg_views" WHERE "viewname" = c."relname") '
. 'AND NOT EXISTS (SELECT 1 FROM "pg_user" WHERE "usesysid" = c."relowner") '
. "AND c.\"relname\" !~ '^pg_'";
break; break;
case 'sqlite': case 'sqlite':
$sql = 'SELECT "name" FROM "sqlite_master" WHERE "type"=\'table\' ' $sql = 'SELECT "name" FROM "sqlite_master" WHERE "type"=\'table\' '

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