Compare commits

...

662 Commits

Author SHA1 Message Date
El RIDO 74ac3350a3
Merge pull request #1268 from PrivateBin/crowdin-translation
New Crowdin updates
2024-03-18 19:24:44 +01:00
PrivateBin Translator Bot 5a52f71bb7 New translations en.json (French) 2024-03-18 18:14:41 +01:00
El RIDO f0794e3c0b document & attribute changes from #1267 2024-03-18 07:48:20 +01:00
El RIDO db287a10fe
Merge pull request #1267 from asherber/shorten-yourls
Allow for shortenviayourls in query params
2024-03-18 07:42:59 +01:00
Aaron Sherber 7a4c6c010f
Update conf.sample.php 2024-03-16 19:46:57 -04:00
Aaron Sherber 7c9cc7754f
Allow for shortenviayourls in query params 2024-03-16 16:55:49 -04:00
El RIDO 6eb5fdcc06
Merge pull request #1264 from PrivateBin/email-shortend-url
shortened paste URL does not appear in email
2024-03-14 06:59:07 +01:00
El RIDO e1e0e8399c
phpdoc improvements 2024-03-10 18:01:46 +01:00
El RIDO 89a5d07b94
shortened paste URL does not appear in email
fixes #606
2024-03-10 17:26:30 +01:00
El RIDO 5f00587d71
phpdoc improvements, fixes #1036 2024-03-10 17:07:10 +01:00
El RIDO 53d2d3334d
document & attribute changes 2024-03-10 16:12:40 +01:00
Aaron Sherber fd7d9f4715
Fix styleci issues 2024-03-09 16:55:44 -05:00
Aaron Sherber 8abf6ae9cb
Always add cache control headers 2024-03-09 16:49:42 -05:00
El RIDO a62f4babbf
Merge pull request #1258 from PrivateBin/dependabot/composer/phpunit/phpunit-9.6.17
Bump phpunit/phpunit from 9.6.16 to 9.6.17
2024-02-26 12:37:38 +01:00
El RIDO d52b8af0f5
Merge pull request #1257 from PrivateBin/crowdin-translation
New Crowdin updates
2024-02-26 12:35:33 +01:00
dependabot[bot] 6474c374e2
Bump phpunit/phpunit from 9.6.16 to 9.6.17
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.6.16 to 9.6.17.
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/9.6.17/ChangeLog-9.6.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.6.16...9.6.17)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 11:13:45 +00:00
PrivateBin Translator Bot b15571ae4a New translations en.json (German) 2024-02-26 10:05:41 +01:00
El RIDO c162f04384
Merge pull request #1256 from LMS235/patch-1
Update de.json
2024-02-22 08:46:08 +01:00
Florian 6999ed3f4b
Update de.json
Text verständlicher gemacht
2024-02-21 11:34:33 +01:00
El RIDO 03e7f6a9a7
Merge pull request #1250 from PrivateBin/crowdin-translation
New Crowdin updates
2024-02-17 20:25:15 +01:00
PrivateBin Translator Bot a1095d0d21 New translations en.json (Arabic) 2024-02-17 17:15:15 +01:00
El RIDO 7576459135
Merge pull request #1249 from PrivateBin/doc-slsa
doc: Fix (direct) link to SLSA verifier
2024-02-17 09:03:14 +01:00
rugk cb117d6797
doc: Fix (direct) link to SLSA verifier
Apparently the headline changed, this is the direct link for GitHub.
2024-02-16 17:19:17 +01:00
El RIDO 244703babb
Merge pull request #1248 from PrivateBin/crowdin-translation
New Crowdin updates
2024-02-15 07:53:06 +01:00
PrivateBin Translator Bot b00085f30f New translations en.json (Romanian) 2024-02-15 07:09:13 +01:00
PrivateBin Translator Bot fc1b1ae0ca New translations en.json (Russian) 2024-02-15 07:09:12 +01:00
PrivateBin Translator Bot 45e335eca6 New translations en.json (German) 2024-02-15 07:09:11 +01:00
PrivateBin Translator Bot f03bccd31e New translations en.json (Bulgarian) 2024-02-15 07:09:10 +01:00
PrivateBin Translator Bot 04da6db079 New translations en.json (Arabic) 2024-02-15 07:09:09 +01:00
PrivateBin Translator Bot 580a034189 New translations en.json (French) 2024-02-15 07:09:08 +01:00
PrivateBin Translator Bot 6c5a500fcd New translations en.json (Corsican) 2024-02-15 00:50:42 +01:00
PrivateBin Translator Bot da4ad06758 New translations en.json (Occitan) 2024-02-14 21:17:17 +01:00
PrivateBin Translator Bot 2f394a4714 New translations en.json (Lojban) 2024-02-14 21:17:16 +01:00
PrivateBin Translator Bot 39949cea34 New translations en.json (Estonian) 2024-02-14 21:17:15 +01:00
PrivateBin Translator Bot a9d287874b New translations en.json (Thai) 2024-02-14 21:17:14 +01:00
PrivateBin Translator Bot 2381e30dc4 New translations en.json (Indonesian) 2024-02-14 21:17:13 +01:00
PrivateBin Translator Bot 0255f72ae0 New translations en.json (Chinese Simplified) 2024-02-14 21:17:12 +01:00
PrivateBin Translator Bot 900200c35f New translations en.json (Ukrainian) 2024-02-14 21:17:11 +01:00
PrivateBin Translator Bot 860b4b183e New translations en.json (Turkish) 2024-02-14 21:17:10 +01:00
PrivateBin Translator Bot e585aeacda New translations en.json (Swedish) 2024-02-14 21:17:09 +01:00
PrivateBin Translator Bot a4820618dd New translations en.json (Slovenian) 2024-02-14 21:17:08 +01:00
PrivateBin Translator Bot d957d344d1 New translations en.json (Slovak) 2024-02-14 21:17:07 +01:00
PrivateBin Translator Bot c9c99f7535 New translations en.json (Portuguese) 2024-02-14 21:17:06 +01:00
PrivateBin Translator Bot 516a4c7d13 New translations en.json (Polish) 2024-02-14 21:17:05 +01:00
PrivateBin Translator Bot 2ccc90798f New translations en.json (Norwegian) 2024-02-14 21:17:04 +01:00
PrivateBin Translator Bot 647ddebb5c New translations en.json (Dutch) 2024-02-14 21:17:03 +01:00
PrivateBin Translator Bot f40f3dd3a5 New translations en.json (Lithuanian) 2024-02-14 21:17:02 +01:00
PrivateBin Translator Bot ce4f3a1b09 New translations en.json (Japanese) 2024-02-14 21:17:01 +01:00
PrivateBin Translator Bot 888b3cb49c New translations en.json (Italian) 2024-02-14 21:17:00 +01:00
PrivateBin Translator Bot 6e0bc8bceb New translations en.json (Hungarian) 2024-02-14 21:16:59 +01:00
PrivateBin Translator Bot 43d396efd9 New translations en.json (Hebrew) 2024-02-14 21:16:58 +01:00
PrivateBin Translator Bot 3b6ebfdf02 New translations en.json (Finnish) 2024-02-14 21:16:57 +01:00
PrivateBin Translator Bot f3df151a8c New translations en.json (Greek) 2024-02-14 21:16:56 +01:00
PrivateBin Translator Bot e4329b623d New translations en.json (Czech) 2024-02-14 21:16:55 +01:00
PrivateBin Translator Bot e18ec99aa9 New translations en.json (Catalan) 2024-02-14 21:16:54 +01:00
PrivateBin Translator Bot 6d2d19c38c New translations en.json (Spanish) 2024-02-14 21:16:53 +01:00
PrivateBin Translator Bot 532f85c6b7 New translations en.json (Romanian) 2024-02-14 19:53:04 +01:00
PrivateBin Translator Bot 0dc7b1f6fc New translations en.json (Corsican) 2024-02-14 19:53:03 +01:00
PrivateBin Translator Bot f0cc0e878a New translations en.json (Occitan) 2024-02-14 19:53:02 +01:00
PrivateBin Translator Bot 2f775c218c New translations en.json (Latin) 2024-02-14 19:53:01 +01:00
PrivateBin Translator Bot 98b3d0e2ae New translations en.json (Lojban) 2024-02-14 19:53:00 +01:00
PrivateBin Translator Bot 7ba642c0ad New translations en.json (Hindi) 2024-02-14 19:52:59 +01:00
PrivateBin Translator Bot 63b63354d7 New translations en.json (Estonian) 2024-02-14 19:52:58 +01:00
PrivateBin Translator Bot 569b47ee62 New translations en.json (Thai) 2024-02-14 19:52:57 +01:00
PrivateBin Translator Bot 050917f035 New translations en.json (Indonesian) 2024-02-14 19:52:56 +01:00
PrivateBin Translator Bot eff7eb5e23 New translations en.json (Chinese Simplified) 2024-02-14 19:52:55 +01:00
PrivateBin Translator Bot 326feb1808 New translations en.json (Ukrainian) 2024-02-14 19:52:54 +01:00
PrivateBin Translator Bot 3ed954fef4 New translations en.json (Turkish) 2024-02-14 19:52:53 +01:00
PrivateBin Translator Bot ebe997bd02 New translations en.json (Swedish) 2024-02-14 19:52:52 +01:00
PrivateBin Translator Bot a90a874d82 New translations en.json (Slovenian) 2024-02-14 19:52:51 +01:00
PrivateBin Translator Bot dd49b8e694 New translations en.json (Slovak) 2024-02-14 19:52:50 +01:00
PrivateBin Translator Bot fec82754bb New translations en.json (Russian) 2024-02-14 19:52:50 +01:00
PrivateBin Translator Bot 24bd804d38 New translations en.json (Portuguese) 2024-02-14 19:52:49 +01:00
PrivateBin Translator Bot d0d77325de New translations en.json (Polish) 2024-02-14 19:52:48 +01:00
PrivateBin Translator Bot a8b4bf84c4 New translations en.json (Norwegian) 2024-02-14 19:52:47 +01:00
PrivateBin Translator Bot a398b1ff59 New translations en.json (Dutch) 2024-02-14 19:52:46 +01:00
PrivateBin Translator Bot 3e2fc24e11 New translations en.json (Lithuanian) 2024-02-14 19:52:45 +01:00
PrivateBin Translator Bot e6acab38d8 New translations en.json (Kurdish) 2024-02-14 19:52:44 +01:00
PrivateBin Translator Bot bcd899b3c4 New translations en.json (Japanese) 2024-02-14 19:52:43 +01:00
PrivateBin Translator Bot 196e5046ac New translations en.json (Italian) 2024-02-14 19:52:42 +01:00
PrivateBin Translator Bot 64a209483a New translations en.json (Hungarian) 2024-02-14 19:52:41 +01:00
PrivateBin Translator Bot a5725d503e New translations en.json (Hebrew) 2024-02-14 19:52:40 +01:00
PrivateBin Translator Bot 14a73ddc61 New translations en.json (Finnish) 2024-02-14 19:52:39 +01:00
PrivateBin Translator Bot 1503fb8aa7 New translations en.json (Greek) 2024-02-14 19:52:38 +01:00
PrivateBin Translator Bot 5291e381c8 New translations en.json (German) 2024-02-14 19:52:37 +01:00
PrivateBin Translator Bot a412a85ad0 New translations en.json (Czech) 2024-02-14 19:52:37 +01:00
PrivateBin Translator Bot 64e533ba8c New translations en.json (Catalan) 2024-02-14 19:52:36 +01:00
PrivateBin Translator Bot 57a03839fa New translations en.json (Bulgarian) 2024-02-14 19:52:35 +01:00
PrivateBin Translator Bot 7d8f57ffe8 New translations en.json (Arabic) 2024-02-14 19:52:34 +01:00
PrivateBin Translator Bot a14151b85c New translations en.json (Spanish) 2024-02-14 19:52:33 +01:00
PrivateBin Translator Bot 76affbc63b New translations en.json (French) 2024-02-14 19:52:32 +01:00
El RIDO 253e078263 fix base translation 2024-02-14 19:49:52 +01:00
PrivateBin Translator Bot 8b66612622 New translations en.json (Corsican) 2024-02-14 17:50:16 +01:00
PrivateBin Translator Bot bfddc388b9 New translations en.json (Russian) 2024-02-14 17:50:15 +01:00
PrivateBin Translator Bot a68d81b10b New translations en.json (Russian) 2024-02-14 16:14:15 +01:00
PrivateBin Translator Bot c37ca3f495 New translations en.json (Corsican) 2024-02-14 01:19:05 +01:00
PrivateBin Translator Bot 4048e2f45d New translations en.json (Occitan) 2024-02-14 01:19:04 +01:00
PrivateBin Translator Bot 024bbc246e New translations en.json (Latin) 2024-02-14 01:19:03 +01:00
PrivateBin Translator Bot 25318facd7 New translations en.json (Lojban) 2024-02-14 01:19:02 +01:00
PrivateBin Translator Bot 1e9c5cb812 New translations en.json (Hindi) 2024-02-14 01:19:01 +01:00
PrivateBin Translator Bot cab26c619b New translations en.json (Estonian) 2024-02-14 01:19:00 +01:00
PrivateBin Translator Bot cabfa18a35 New translations en.json (Thai) 2024-02-14 01:18:59 +01:00
PrivateBin Translator Bot 629faeea8d New translations en.json (Indonesian) 2024-02-14 01:18:58 +01:00
PrivateBin Translator Bot 0a9770ae51 New translations en.json (Chinese Simplified) 2024-02-14 01:18:57 +01:00
PrivateBin Translator Bot 5c76cc9203 New translations en.json (Ukrainian) 2024-02-14 01:18:56 +01:00
PrivateBin Translator Bot 7710a6066c New translations en.json (Turkish) 2024-02-14 01:18:55 +01:00
PrivateBin Translator Bot 94f0808996 New translations en.json (Swedish) 2024-02-14 01:18:55 +01:00
PrivateBin Translator Bot 494623eec7 New translations en.json (Slovenian) 2024-02-14 01:18:54 +01:00
PrivateBin Translator Bot 7174be4dfb New translations en.json (Slovak) 2024-02-14 01:18:53 +01:00
PrivateBin Translator Bot af72f0694d New translations en.json (Russian) 2024-02-14 01:18:52 +01:00
PrivateBin Translator Bot 126d08933a New translations en.json (Portuguese) 2024-02-14 01:18:51 +01:00
PrivateBin Translator Bot 5ec102a75c New translations en.json (Polish) 2024-02-14 01:18:50 +01:00
PrivateBin Translator Bot cd33a4824b New translations en.json (Norwegian) 2024-02-14 01:18:49 +01:00
PrivateBin Translator Bot 966d0f5d64 New translations en.json (Dutch) 2024-02-14 01:18:48 +01:00
PrivateBin Translator Bot 37c57e5815 New translations en.json (Lithuanian) 2024-02-14 01:18:47 +01:00
PrivateBin Translator Bot 5854770286 New translations en.json (Kurdish) 2024-02-14 01:18:46 +01:00
PrivateBin Translator Bot 40df875334 New translations en.json (Japanese) 2024-02-14 01:18:45 +01:00
PrivateBin Translator Bot 120fe77e1e New translations en.json (Italian) 2024-02-14 01:18:45 +01:00
PrivateBin Translator Bot 5bf7c04e04 New translations en.json (Hungarian) 2024-02-14 01:18:44 +01:00
PrivateBin Translator Bot 9f623b4130 New translations en.json (Hebrew) 2024-02-14 01:18:43 +01:00
PrivateBin Translator Bot 41b20da78b New translations en.json (Finnish) 2024-02-14 01:18:42 +01:00
PrivateBin Translator Bot 3547e67cc6 New translations en.json (Greek) 2024-02-14 01:18:41 +01:00
PrivateBin Translator Bot 4eb55be55e New translations en.json (Czech) 2024-02-14 01:18:39 +01:00
PrivateBin Translator Bot c3d143f9ba New translations en.json (Catalan) 2024-02-14 01:18:39 +01:00
PrivateBin Translator Bot 7467c7998c New translations en.json (Bulgarian) 2024-02-14 01:18:38 +01:00
PrivateBin Translator Bot 979dc58575 New translations en.json (Arabic) 2024-02-14 01:18:37 +01:00
PrivateBin Translator Bot 41a3748656 New translations en.json (Spanish) 2024-02-14 01:18:36 +01:00
El RIDO c5704b445a
Merge pull request #1246 from PrivateBin/crowdin-translation
New Crowdin updates
2024-02-14 00:02:04 +01:00
El RIDO c172cde994
Merge pull request #1245 from PrivateBin/send-create-button
Rename "Send" button to "Create"
2024-02-14 00:00:29 +01:00
El RIDO 7d070fe3a4
Merge pull request #1244 from PrivateBin/composer
composer fixes for #1222
2024-02-13 23:58:53 +01:00
PrivateBin Translator Bot 28a05abfc5 New translations en.json (Arabic) 2024-02-13 13:56:04 +01:00
PrivateBin Translator Bot 456e62f29b New translations en.json (Romanian) 2024-02-12 23:51:38 +01:00
El RIDO 63b2526ee7
"Send" button now labeled "Create", fixes #946 2024-02-12 21:50:11 +01:00
El RIDO dd8aa4f8fb
Merge branch 'master' into send-create-button 2024-02-12 21:42:15 +01:00
El RIDO 6dddf808c6
composer fixes #1222
- clarify installation
- ensure composer files get released in exported archive
- fix lock checksum
2024-02-12 21:18:58 +01:00
El RIDO eb59f3a4f3
post-release cleanup 2024-02-11 15:36:59 +01:00
El RIDO aad975a721
incrementing version 2024-02-11 15:31:11 +01:00
El RIDO 5c29619fee
post-release cleanup
- prep changelog for future changes
- composer changes from re-running composer on the repo, testing deps
- change to phpunit coverage make target, required with newer releases
2024-02-11 15:10:01 +01:00
El RIDO a3ee624d3a
incrementing version 2024-02-11 14:17:27 +01:00
El RIDO 1eee8032c7
Merge pull request #1240 from PrivateBin/crowdin-translation
New Crowdin updates
2024-02-09 07:19:21 +01:00
PrivateBin Translator Bot f3fba1c0f5 New translations en.json (Corsican) 2024-02-09 00:48:48 +01:00
PrivateBin Translator Bot a54a55a9a1 New translations en.json (Italian) 2024-02-08 07:21:52 +01:00
PrivateBin Translator Bot 56f0ec7d52 New translations en.json (German) 2024-02-08 07:21:51 +01:00
PrivateBin Translator Bot 208c922e04 New translations en.json (French) 2024-02-08 07:21:50 +01:00
El RIDO 4db0db320b Merge branch 'master' into crowdin-translation 2024-02-08 05:29:53 +01:00
PrivateBin Translator Bot 772ab96364 New translations en.json (Corsican) 2024-02-07 20:47:56 +01:00
PrivateBin Translator Bot dc2db9e622 New translations en.json (Occitan) 2024-02-07 20:47:55 +01:00
PrivateBin Translator Bot 6d559c3043 New translations en.json (Latin) 2024-02-07 20:47:54 +01:00
PrivateBin Translator Bot 096a5118d1 New translations en.json (Lojban) 2024-02-07 20:47:54 +01:00
PrivateBin Translator Bot 5084ab7a07 New translations en.json (Hindi) 2024-02-07 20:47:53 +01:00
PrivateBin Translator Bot fbe4ac5a6c New translations en.json (Estonian) 2024-02-07 20:47:52 +01:00
PrivateBin Translator Bot 4e21e980de New translations en.json (Thai) 2024-02-07 20:47:51 +01:00
PrivateBin Translator Bot a3243b3165 New translations en.json (Indonesian) 2024-02-07 20:47:50 +01:00
PrivateBin Translator Bot 223ef02a43 New translations en.json (Chinese Simplified) 2024-02-07 20:47:49 +01:00
PrivateBin Translator Bot c7da424ef9 New translations en.json (Ukrainian) 2024-02-07 20:47:48 +01:00
PrivateBin Translator Bot e1c74457e5 New translations en.json (Turkish) 2024-02-07 20:47:47 +01:00
PrivateBin Translator Bot 1a6c3dd8d8 New translations en.json (Swedish) 2024-02-07 20:47:46 +01:00
PrivateBin Translator Bot 146b2513c1 New translations en.json (Slovenian) 2024-02-07 20:47:45 +01:00
PrivateBin Translator Bot 5ec8a57c60 New translations en.json (Slovak) 2024-02-07 20:47:44 +01:00
PrivateBin Translator Bot cd67d81ae3 New translations en.json (Russian) 2024-02-07 20:47:43 +01:00
PrivateBin Translator Bot 218e68a604 New translations en.json (Portuguese) 2024-02-07 20:47:42 +01:00
PrivateBin Translator Bot 9611991748 New translations en.json (Polish) 2024-02-07 20:47:41 +01:00
PrivateBin Translator Bot b613d9558c New translations en.json (Norwegian) 2024-02-07 20:47:40 +01:00
PrivateBin Translator Bot 5523ba9a45 New translations en.json (Dutch) 2024-02-07 20:47:39 +01:00
PrivateBin Translator Bot 421342396f New translations en.json (Lithuanian) 2024-02-07 20:47:38 +01:00
PrivateBin Translator Bot 4e3b469c08 New translations en.json (Kurdish) 2024-02-07 20:47:37 +01:00
PrivateBin Translator Bot cb0edf4f2b New translations en.json (Japanese) 2024-02-07 20:47:37 +01:00
PrivateBin Translator Bot a0f8e0a566 New translations en.json (Italian) 2024-02-07 20:47:36 +01:00
PrivateBin Translator Bot 089652382a New translations en.json (Hungarian) 2024-02-07 20:47:35 +01:00
PrivateBin Translator Bot a1408601d9 New translations en.json (Hebrew) 2024-02-07 20:47:34 +01:00
PrivateBin Translator Bot 3d4887e5f0 New translations en.json (Finnish) 2024-02-07 20:47:33 +01:00
PrivateBin Translator Bot 5c876df2ea New translations en.json (Greek) 2024-02-07 20:47:32 +01:00
PrivateBin Translator Bot fe4a64529a New translations en.json (German) 2024-02-07 20:47:31 +01:00
PrivateBin Translator Bot a25bfd4cce New translations en.json (Czech) 2024-02-07 20:47:30 +01:00
PrivateBin Translator Bot 53639b913e New translations en.json (Catalan) 2024-02-07 20:47:29 +01:00
PrivateBin Translator Bot 9379a73632 New translations en.json (Bulgarian) 2024-02-07 20:47:28 +01:00
PrivateBin Translator Bot efd6c3f8c4 New translations en.json (Arabic) 2024-02-07 20:47:27 +01:00
PrivateBin Translator Bot 51f68f0c78 New translations en.json (Spanish) 2024-02-07 20:47:26 +01:00
PrivateBin Translator Bot ad2de3a135 New translations en.json (French) 2024-02-07 20:47:25 +01:00
PrivateBin Translator Bot ea7f1fca6e New translations en.json (Romanian) 2024-02-07 20:47:25 +01:00
El RIDO 57b1890815 Merge branch 'master' into ask-before-burn 2024-02-07 19:45:54 +01:00
El RIDO 7bb913acdf
Merge pull request #1236 from PrivateBin/bump-libs
bump libraries to DOMpurify 3.0.8 & zlib 1.3.1, increase compression level
2024-02-07 19:30:25 +01:00
El RIDO 25de89c954
change loading confirm prefix, fix password modal focus, again 2024-02-06 20:22:47 +01:00
El RIDO 950c0b56b4
revert changing compression level
as per discussion with @rugk, see:
https://github.com/PrivateBin/PrivateBin/pull/1236#discussion_r1473639960
2024-02-06 19:21:14 +01:00
El RIDO 070ae2e5ec
Merge pull request #1228 from PrivateBin/crowdin-translation
New Crowdin updates
2024-01-27 19:23:34 +01:00
El RIDO 239f6da73c
Merge branch 'master' into crowdin-translation 2024-01-27 19:19:08 +01:00
El RIDO 257fc5d2b6
enable Romanian translation and credit it 2024-01-27 19:15:40 +01:00
El RIDO 03d2291ec7
Merge branch 'master' into ask-before-burn 2024-01-27 18:56:52 +01:00
El RIDO 56f5b2386c
document changes 2024-01-27 18:51:12 +01:00
El RIDO d0e03e5167
change logic into asking for loading confirmation
also:
- fixes #1039 - email buttons overlapping in some languages
- fixes #1191 - language change URL mangling
- adds focus to password input in modal
- prevents needless reload on visiting default URL
2024-01-27 18:26:19 +01:00
El RIDO 0d2376cd88
bump libraries to DOMpurify 3.0.8 & zlib 1.3.1, increase compression level to 9 2024-01-27 11:33:54 +01:00
El RIDO df703dfe4b
Merge pull request #1234 from PrivateBin/dependabot/composer/phpunit/phpunit-9.6.16
Bump phpunit/phpunit from 9.6.15 to 9.6.16
2024-01-20 08:50:57 +01:00
dependabot[bot] 3ff3db72a1
Bump phpunit/phpunit from 9.6.15 to 9.6.16
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.6.15 to 9.6.16.
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/9.6.16/ChangeLog-9.6.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.6.15...9.6.16)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-19 11:44:19 +00:00
El RIDO a27cb0cffc
Merge pull request #1233 from PrivateBin/dependabot/github_actions/actions/cache-4
Bump actions/cache from 3 to 4
2024-01-18 18:23:52 +01:00
dependabot[bot] ba25ab8fa9
Bump actions/cache from 3 to 4
Bumps [actions/cache](https://github.com/actions/cache) from 3 to 4.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-18 11:21:35 +00:00
El RIDO d091382313
Merge pull request #1229 from PrivateBin/shortener-sort
add YOURLS API samples for extractUrl validation
2024-01-09 06:36:32 +01:00
Tobias Gurtzick 2a508cb7bf
burn after reading only
Signed-off-by: Tobias Gurtzick <magic@wizardtales.com>
2024-01-08 12:38:48 +01:00
Tobias Gurtzick 8516a3f4a4
Merge branch '162' into encrypt-browser 2024-01-08 12:29:06 +01:00
Tobias Gurtzick 2cc2cf0de7
working browser password
Signed-off-by: Tobias Gurtzick <magic@wizardtales.com>
2024-01-08 12:28:41 +01:00
Tobias Gurtzick e1e8618015
Merge branch 'change' into 162 2024-01-08 11:10:11 +01:00
Tobias Gurtzick 7fddefeb05
password
Signed-off-by: Tobias Gurtzick <magic@wizardtales.com>
2024-01-08 10:36:59 +01:00
El RIDO 4e62e1f6ef address jsverify rngState 87ab3f64de258190c7, fixes #1139 2024-01-08 08:09:29 +01:00
El RIDO 405479642f add YOURLS API samples for extractUrl validation 2024-01-07 17:45:01 +01:00
El RIDO fd82b937a9 refactor URL generators 2024-01-07 16:06:24 +01:00
El RIDO d493ba7337 refactor URL generators 2024-01-07 15:47:29 +01:00
El RIDO 37ee3b1c7c refactor URL generators 2024-01-07 14:10:43 +01:00
PrivateBin Translator Bot 7ab20c23e9 New translations en.json (Romanian) 2024-01-06 23:17:48 +01:00
PrivateBin Translator Bot cc5c81afbc New translations en.json (Romanian) 2024-01-06 22:12:59 +01:00
El RIDO 9fb7aee589
Merge pull request #1227 from PrivateBin/shortener-idn
Shortener URL validation improvement
2024-01-06 17:35:09 +01:00
El RIDO ba17e94c5e use the newer function, if possible 2024-01-05 06:40:12 +01:00
El RIDO c3331070cb codestyle, let's use readable variable names
Co-authored-by: rugk <rugk+git@posteo.de>
2024-01-05 06:30:21 +01:00
El RIDO cc0b6e387a avoid use of bleeding edge function
only supported in Firefox & Chrome >= 120 & node >= 19.9.0 & 18.17.0
2024-01-04 23:23:47 +01:00
El RIDO a80bd4e4ea fix url filter, IDN URL unit test 2024-01-04 23:08:17 +01:00
PrivateBin Translator Bot b3b97b69c6 New translations en.json (Romanian) 2024-01-04 20:47:08 +01:00
El RIDO 8427c1136c document change 2024-01-04 06:52:27 +01:00
El RIDO 7cb1f8ca67 relax URL regex to support finding IDN domains, filter using built in function, removing non-URLs 2024-01-04 06:48:34 +01:00
El RIDO 9a707e288a
Merge pull request #1225 from PrivateBin/crowdin-translation
New Crowdin updates
2024-01-02 07:50:28 +01:00
El RIDO 83a1de271a
Merge pull request #1223 from PrivateBin/install-cloud-libs
improve SDK install docs
2024-01-02 07:49:26 +01:00
PrivateBin Translator Bot c264904f77 New translations en.json (Chinese Simplified) 2024-01-01 12:29:13 +01:00
El RIDO 712715caba improve SDK install docs
fixes #1222
2023-12-27 18:58:39 +01:00
El RIDO 2985305dbb
Merge pull request #1220 from PrivateBin/en-default-test
prevent regression around presence or absence of en.json
2023-12-23 13:06:05 +01:00
El RIDO 0581522414
Merge pull request #1221 from PrivateBin/zlib-1.3
updating zlib to 1.3
2023-12-19 21:39:13 +01:00
El RIDO dc8cb66adc
updating zlib to 1.3 2023-12-19 06:22:30 +01:00
El RIDO 54585549e0
Merge pull request #1218 from PrivateBin/detect-broken-pastes
detect and report on damaged pastes
2023-12-19 05:39:39 +01:00
El RIDO d49be80ffb
prevent regression around presence or absence of en.json
it gets excluded in the release archive, it's absence should not make
any difference
2023-12-18 21:49:21 +01:00
El RIDO a17529c7e1
document change 2023-12-18 21:02:27 +01:00
El RIDO 0a7a341fda
Merge pull request #1217 from PrivateBin/releasedoc
Created doc for “how to verify and how to do release” (release doc)
2023-12-18 20:57:11 +01:00
El RIDO d88945663e detect and report on damaged pastes
May occur during statistics or purge, when existing pastes get parsed, addresses #1214
2023-12-16 07:38:09 +01:00
El RIDO 255fd4b12b updated release document
- removed duplicate content
- clarified what is signed and since which release
- updated verification sample output (also in wiki) using the output of https://github.com/PrivateBin/docker-nginx-fpm-alpine/actions/runs/7228527399/job/19698112056#step:7:156
- Corrected release process - we trigger the release on the push of the tag, not a branch (fixed point in time instead of a moving target)
2023-12-16 07:02:21 +01:00
rugk 43d162f452
Created doc for “how to verify and how to do release” (release doc) (WIP)
This documents/should document:
* what the signatures are and what they proof
* how to verify them
* how to build releases (I know more of a maintainer doc, but yeah, I found it a good place here, if you want a separate one feel free)

This should also make it easier for other maintainers to create releases or so.

@elrido feel free to adjust/push to the branch if you want to have some details fixed. I have left some TODOs of stuff where I am unsure.
2023-12-15 14:17:51 +01:00
El RIDO 9b07e3ff62
Merge pull request #1215 from PrivateBin/dependabot/github_actions/github/codeql-action-3
Bump github/codeql-action from 2 to 3
2023-12-15 08:13:08 +01:00
El RIDO d0420fb418
1.6.2 release 2023-12-15 07:20:20 +01:00
El RIDO 3b17dfc6ef
Merge pull request #1213 from PrivateBin/en-lang-selection
ensure English is always added to available languages, fixes #1208
2023-12-15 07:03:06 +01:00
dependabot[bot] 03e3e4fa06
Bump github/codeql-action from 2 to 3
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2 to 3.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-14 11:52:46 +00:00
El RIDO 879c7400bf
Merge pull request #1212 from joeskeen/conf-view-as-ini
add workspace settings with config files treated as INI
2023-12-09 12:17:51 +01:00
El RIDO 46d8d7d781
Merge pull request #1210 from joeskeen/devcontainer-postcreate
move postCreateCommands to a separate file
2023-12-09 12:16:21 +01:00
El RIDO 684924e9e5
apply StyleCI patch 2023-12-09 12:00:57 +01:00
El RIDO a7f720d825
ensure English is always added to available languages, fixes #1208
bug got introduced in 3668f1e3f4 and
started affecting release after 896a49c8cf
2023-12-09 11:58:29 +01:00
El RIDO 826444bef7
fix shasum in release pipeline, hope this fixes #1169 2023-12-09 10:50:49 +01:00
Joe Skeen 10c6841f8a
Update .devcontainer/postCreateCommand.sh
Co-authored-by: rugk <rugk+git@posteo.de>
2023-12-08 15:31:45 -07:00
Joe Skeen 49a87c6038 add workspace settings with config files treated as INI 2023-12-08 16:30:45 +00:00
Joe Skeen 7a5036d957 move postCreateCommands to a separate file 2023-12-08 15:34:00 +00:00
El RIDO f8c2f58604
typo 2023-12-04 21:24:12 +01:00
El RIDO edec91de1c
Merge branch 'master' of github.com:PrivateBin/PrivateBin 2023-12-04 21:17:32 +01:00
El RIDO 3bd570bd6a
incrementing version 2023-12-04 21:07:17 +01:00
El RIDO 8131518ba1
Merge pull request #1204 from PrivateBin/crowdin-translation
New Crowdin updates
2023-12-04 19:10:18 +01:00
PrivateBin Translator Bot bb89eb7fba New translations en.json (Finnish) 2023-12-04 18:46:19 +01:00
El RIDO 94d1908777
Merge pull request #1203 from PrivateBin/dependabot/composer/phpunit/phpunit-9.6.15
Bump phpunit/phpunit from 9.6.14 to 9.6.15
2023-12-04 17:39:48 +01:00
PrivateBin Translator Bot 5b2f788e48 New translations en.json (Finnish) 2023-12-04 16:43:03 +01:00
PrivateBin Translator Bot 33e9025d09 New translations en.json (Finnish) 2023-12-04 15:14:57 +01:00
dependabot[bot] 6133f6c35c
Bump phpunit/phpunit from 9.6.14 to 9.6.15
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.6.14 to 9.6.15.
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/9.6.15/ChangeLog-9.6.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.6.14...9.6.15)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-04 11:37:40 +00:00
El RIDO 0107b1258e
forgot to update SRI hashes
caused in b150450fac
2023-12-04 06:10:47 +01:00
El RIDO 65f289e516
Merge pull request #1202 from PrivateBin/release-prep
1.6.1 release preparations
2023-12-03 17:07:19 +01:00
El RIDO b150450fac
address nodejs unit testing issue
mocha tests started failing as of node 20.10.0, likely due to this change:
https://github.com/nodejs/node/pull/49936

Error was:
node:internal/deps/undici/undici:11730
    Error.captureStackTrace(err, this);
          ^

TypeError: Failed to parse URL from js/zlib-1.2.13.wasm
    at Object.fetch (node:internal/deps/undici/undici:11730:11)
    at async initialize (/home/runner/work/PrivateBin/PrivateBin/js/zlib-1.2.13.js:31:26) {
  [cause]: TypeError: Invalid URL: js/zlib-1.2.13.wasm
      at new URLImpl (/home/runner/work/PrivateBin/PrivateBin/js/node_modules/jsdom-url/node_modules/whatwg-url/lib/URL-impl.js:21:13)
      at new URLImplCore (/home/runner/work/PrivateBin/PrivateBin/js/node_modules/jsdom-url/lib/URLImpl.js:18:9)
      at new URLCore (/home/runner/work/PrivateBin/PrivateBin/js/node_modules/jsdom-url/lib/URL.js:28:9)
      at Object.construct (/home/runner/work/PrivateBin/PrivateBin/js/node_modules/class-proxy/index.js:18:23)
      at new Request (node:internal/deps/undici/undici:5270:25)
      at fetch (node:internal/deps/undici/undici:9508:25)
      at Object.fetch (node:internal/deps/undici/undici:11728:18)
      at fetch (node:internal/process/pre_execution:314:27)
      at initialize (/home/runner/work/PrivateBin/PrivateBin/js/zlib-1.2.13.js:31:32)
      at Object.<anonymous> (/home/runner/work/PrivateBin/PrivateBin/js/zlib-1.2.13.js:145:17)
      at Object.<anonymous> (/home/runner/work/PrivateBin/PrivateBin/js/zlib-1.2.13.js:146:4)
[...]

Notice that the error occurs on line 31, meaning that fetch is not
undefined anymore. Node works on supporting fetch, which would make our
workaround using fs.readFileSync obsolete, but it (or rather the undici
library) currently doesn't support relative URLs.
2023-12-03 14:40:59 +01:00
El RIDO aa1a44e329
upgrading DOMpurify to 3.0.6 2023-12-03 14:02:30 +01:00
El RIDO ee151ad29d
fix phpdoc parameters for newer releases 2023-12-03 13:54:35 +01:00
El RIDO c090f8d27f
fixed comments
so that these functions end up on the correct jsdoc page
2023-12-03 13:41:17 +01:00
El RIDO 8c1310c334
update unit test doc & PHP 8 fixes
having had to re-do all of these steps on a new environment, I noticed
some inconsistencies and updated the doc:
- moved unit testing doc into common doc folder, so it is easier to find
- removed no longer supported Janitor reference
- removed note regarding generated test duration, current version takes
  less than a minute
- addressed each function removal & phpunit deprecations
2023-12-03 13:40:04 +01:00
El RIDO c895c511c1
Merge pull request #1201 from PrivateBin/dependabot/composer/phpunit/phpunit-9.6.14
Bump phpunit/phpunit from 9.6.13 to 9.6.14
2023-12-02 18:20:58 +01:00
dependabot[bot] 421fd4901f
Bump phpunit/phpunit from 9.6.13 to 9.6.14
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.6.13 to 9.6.14.
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/9.6.14/ChangeLog-9.6.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.6.13...9.6.14)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-01 11:58:32 +00:00
El RIDO b2bf90d14e
Merge pull request #1200 from PrivateBin/php83
enable unit testing on PHP 8.3 &  8.4 nightly
2023-11-28 20:48:19 +01:00
El RIDO 8d97569de0
enable testing on PHP 8.3 and 8.4
at this time both are still installed out of nightly builds, though 8.3
got released last week, see:
https://github.com/shivammathur/setup-php#tada-php-support
2023-11-26 09:54:28 +01:00
El RIDO d34f9c0b8c
new phpdoc temp file location 2023-11-26 09:50:36 +01:00
El RIDO 9614ee90f2
Merge pull request #1190 from PrivateBin/node20
Use Node20 for tests
2023-10-25 12:43:33 +02:00
El RIDO 95d6a0d3b9
Merge pull request #1189 from PrivateBin/dependabot/github_actions/actions/setup-node-4
Bump actions/setup-node from 3 to 4
2023-10-25 12:39:56 +02:00
rugk b9d74ecd35
Use Node20 for tests
A try following https://github.com/PrivateBin/PrivateBin/pull/1189#pullrequestreview-1695447526
2023-10-24 19:03:47 +02:00
dependabot[bot] 9114ca00bf
Bump actions/setup-node from 3 to 4
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 3 to 4.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-24 11:05:40 +00:00
El RIDO 0fb40d5d3a
Merge pull request #1183 from PrivateBin/crowdin-translation
New Crowdin updates
2023-10-22 14:19:20 +02:00
PrivateBin Translator Bot cb4e95b917 New translations en.json (Japanese) 2023-10-19 10:37:44 +02:00
PrivateBin Translator Bot 52b0e0b369 New translations en.json (Japanese) 2023-10-19 08:18:59 +02:00
PrivateBin Translator Bot 515bfd8122 New translations en.json (Japanese) 2023-10-19 07:11:36 +02:00
PrivateBin Translator Bot fbc302c0a1 New translations en.json (Japanese) 2023-10-19 06:07:25 +02:00
PrivateBin Translator Bot b62e9dbc6e New translations en.json (Japanese) 2023-10-19 01:05:19 +02:00
PrivateBin Translator Bot 5c2496d474 New translations en.json (Japanese) 2023-10-18 05:59:11 +02:00
PrivateBin Translator Bot f3eb2759ce New translations en.json (Japanese) 2023-10-18 04:26:14 +02:00
PrivateBin Translator Bot cdb7ec0443 New translations en.json (Japanese) 2023-10-17 18:47:08 +02:00
PrivateBin Translator Bot 05dc1dd32e New translations en.json (Japanese) 2023-10-17 17:27:56 +02:00
El RIDO b70be94538
Merge pull request #1181 from voidquark/master
Update Ansible Galaxy links in Installation.md
2023-10-02 06:45:04 +02:00
VoidQuark 9a4c5b30c6
Update Ansible Galaxy links in Installation.md 2023-10-01 20:43:11 +02:00
El RIDO 4ef0318495
Merge pull request #1179 from PrivateBin/dependabot/github_actions/actions/checkout-4
Bump actions/checkout from 3 to 4
2023-09-24 07:36:04 +02:00
dependabot[bot] 58f919ecdd
Bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-22 11:33:49 +00:00
El RIDO 7518ea74c5
Merge pull request #1175 from PrivateBin/slsa-release
release workflow for SLSA & changelog
2023-09-22 05:24:04 +02:00
El RIDO 7e1dfdb012
Merge pull request #1178 from PrivateBin/crowdin-translation
New Crowdin updates
2023-09-20 22:12:53 +02:00
El RIDO 1a4e2f8f06 Merge branch 'master' into crowdin-translation 2023-09-20 22:09:59 +02:00
PrivateBin Translator Bot 8053daec14 New translations en.json (Corsican) 2023-09-20 07:33:00 +02:00
PrivateBin Translator Bot 9612637881 New translations en.json (Occitan) 2023-09-20 07:32:59 +02:00
PrivateBin Translator Bot fb1ea260ba New translations en.json (Latin) 2023-09-20 07:32:58 +02:00
PrivateBin Translator Bot 17b629018c New translations en.json (Lojban) 2023-09-20 07:32:57 +02:00
PrivateBin Translator Bot a92407ea4e New translations en.json (Hindi) 2023-09-20 07:32:56 +02:00
PrivateBin Translator Bot 441ac9d8d9 New translations en.json (Estonian) 2023-09-20 07:32:56 +02:00
PrivateBin Translator Bot 046ccf2000 New translations en.json (Thai) 2023-09-20 07:32:55 +02:00
PrivateBin Translator Bot 6c7c0ec09c New translations en.json (Indonesian) 2023-09-20 07:32:54 +02:00
PrivateBin Translator Bot b0f4a63705 New translations en.json (Chinese Simplified) 2023-09-20 07:32:53 +02:00
PrivateBin Translator Bot 1b772d0404 New translations en.json (Ukrainian) 2023-09-20 07:32:52 +02:00
PrivateBin Translator Bot 8dbf954870 New translations en.json (Turkish) 2023-09-20 07:32:51 +02:00
PrivateBin Translator Bot 69efa00d7f New translations en.json (Swedish) 2023-09-20 07:32:50 +02:00
PrivateBin Translator Bot d17a0f091b New translations en.json (Slovenian) 2023-09-20 07:32:49 +02:00
PrivateBin Translator Bot 6a1371822a New translations en.json (Slovak) 2023-09-20 07:32:48 +02:00
PrivateBin Translator Bot 0cc5880354 New translations en.json (Russian) 2023-09-20 07:32:47 +02:00
PrivateBin Translator Bot eb17f75793 New translations en.json (Portuguese) 2023-09-20 07:32:46 +02:00
PrivateBin Translator Bot 0568d10bca New translations en.json (Polish) 2023-09-20 07:32:45 +02:00
PrivateBin Translator Bot ac681d6aa9 New translations en.json (Norwegian) 2023-09-20 07:32:44 +02:00
PrivateBin Translator Bot 6f9496511a New translations en.json (Dutch) 2023-09-20 07:32:43 +02:00
PrivateBin Translator Bot 31cfa5b6e3 New translations en.json (Lithuanian) 2023-09-20 07:32:42 +02:00
PrivateBin Translator Bot d27f43eb1d New translations en.json (Kurdish) 2023-09-20 07:32:41 +02:00
PrivateBin Translator Bot e395717a54 New translations en.json (Japanese) 2023-09-20 07:32:40 +02:00
PrivateBin Translator Bot 6a68d59d8b New translations en.json (Italian) 2023-09-20 07:32:39 +02:00
PrivateBin Translator Bot bc7a346aa0 New translations en.json (Hungarian) 2023-09-20 07:32:38 +02:00
PrivateBin Translator Bot 0a24df6adb New translations en.json (Hebrew) 2023-09-20 07:32:37 +02:00
PrivateBin Translator Bot 4cdf21ecd1 New translations en.json (Finnish) 2023-09-20 07:32:36 +02:00
PrivateBin Translator Bot e2fac1be9d New translations en.json (Greek) 2023-09-20 07:32:35 +02:00
PrivateBin Translator Bot fa714c03dd New translations en.json (German) 2023-09-20 07:32:34 +02:00
PrivateBin Translator Bot c025c83e33 New translations en.json (Czech) 2023-09-20 07:32:33 +02:00
PrivateBin Translator Bot 76e7ca4942 New translations en.json (Catalan) 2023-09-20 07:32:32 +02:00
PrivateBin Translator Bot 7aceed6a03 New translations en.json (Bulgarian) 2023-09-20 07:32:31 +02:00
PrivateBin Translator Bot 1795c1cf1a New translations en.json (Arabic) 2023-09-20 07:32:30 +02:00
PrivateBin Translator Bot fd95445831 New translations en.json (Spanish) 2023-09-20 07:32:29 +02:00
PrivateBin Translator Bot 70ca60089f New translations en.json (French) 2023-09-20 07:32:28 +02:00
El RIDO 4f8c19c80e Merge branch 'master' into slsa-release 2023-09-20 07:19:20 +02:00
El RIDO 7a6aa84b76
Merge pull request #1176 from PrivateBin/rtl
add basic right-to-left (RTL) support
2023-09-20 07:12:31 +02:00
El RIDO f255905a6f
Merge pull request #1177 from PrivateBin/dependabot/composer/phpunit/phpunit-9.6.13
Bump phpunit/phpunit from 9.6.12 to 9.6.13
2023-09-20 07:12:03 +02:00
dependabot[bot] b4ca795b6a
Bump phpunit/phpunit from 9.6.12 to 9.6.13
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.6.12 to 9.6.13.
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/9.6.13/ChangeLog-9.6.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.6.12...9.6.13)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-19 11:24:56 +00:00
El RIDO 80546bf629
add some basic RTL CSS overrides 2023-09-19 07:29:49 +02:00
El RIDO 5c97443d1d
add basic RTL support, drop default language key 2023-09-19 07:29:00 +02:00
El RIDO 896a49c8cf
en.json is not used at runtime 2023-09-19 06:35:50 +02:00
El RIDO ad50950b3c
Extract latest changelog entry and attach it to draft 2023-09-18 20:50:14 +02:00
El RIDO 73c13af10d
add workflow attaching SLSA provinence to draft release 2023-09-18 20:47:16 +02:00
El RIDO 8a03c85708
Merge pull request #1173 from PrivateBin/bugreport
Also add FAQ section/tick box requirement for bug template
2023-09-15 06:26:28 +02:00
El RIDO 6a454c1765
Merge pull request #1172 from PrivateBin/patchqaagain
Fix error message about QA template
2023-09-15 06:23:25 +02:00
El RIDO f862e062cd
Merge pull request #1171 from PrivateBin/dependabot/composer/phpunit/phpunit-9.6.12
Bump phpunit/phpunit from 9.6.11 to 9.6.12
2023-09-14 05:31:40 +02:00
rugk db2d8f1598
Also add FAQ sectiontick box requirement for bug template
It's apparently not enough to have in the Q/A, best is we have it here to.

The next step would be converting that into the same form like the QA template. After all, it may mostly just be copy paste as it is nearly identical but well…
2023-09-14 00:02:01 +02:00
rugk 168fb46767
Fix error message about QA template
GitHub complains:
> title must be of type String and cannot be empty. Learn more about this error.

Well then… as we don't want to provide a default title (see https://github.com/PrivateBin/PrivateBin/pull/1155) let's remove it.
2023-09-13 23:56:35 +02:00
dependabot[bot] ff6b9b8e01
Bump phpunit/phpunit from 9.6.11 to 9.6.12
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.6.11 to 9.6.12.
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/9.6.12/ChangeLog-9.6.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.6.11...9.6.12)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-13 11:39:25 +00:00
El RIDO b998820957
Merge pull request #1168 from tristanlatr/patch-1
Fix install docs
2023-09-12 21:05:44 +02:00
tristanlatr edc86ffd72
Fix install docs
CONFIG_PATH should actually point to the directory that contains the conf.php file.
2023-09-11 17:58:13 -04:00
El RIDO bbc5b627c2
hide github codepages artifacts from release archive 2023-09-11 19:42:18 +02:00
El RIDO f56907bd38
increment version 2023-09-11 19:36:45 +02:00
El RIDO e534a2f6a6
document changes 2023-09-11 19:36:09 +02:00
El RIDO 9a3bfd7f5b
Merge pull request #1164 from sergiorgiraldo/master
feat: make the email button optional.
2023-09-10 19:42:23 +02:00
Sergio Giraldo bf090fabb8
refactor: removed unnecessary php tag
::by sergio giraldo
@ 20230910T1650CEST, gpg signed
2023-09-10 16:50:00 +02:00
Sergio Giraldo 6728053ab0
test: default value for email configuration item;nit necessary to close php comment
::by sergio giraldo
@ 20230910T0958CEST, gpg signed
2023-09-10 09:58:04 +02:00
Sergio Giraldo c665385ff6
feat: make the email button optional. Issue #1031
::by sergio giraldo
@ 20230909T2226CEST, gpg signed
2023-09-09 22:26:11 +02:00
El RIDO c3baeab5aa
Merge pull request #1163 from voidquark/doc-installation-ansible
Doc installation ansible
2023-09-08 06:59:57 +02:00
voidquark 42cf45542f consistency 2023-09-07 20:50:58 +02:00
voidquark 172efafb81 modify ansible installation part 2023-09-07 20:49:10 +02:00
rugk 73f8a1d4ae
Merge pull request #1161 from PrivateBin/dependabot/github_actions/actions/checkout-4
Bump actions/checkout from 3 to 4
2023-09-05 21:02:31 +02:00
dependabot[bot] 5bd2eb97e6
Bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-05 11:13:01 +00:00
El RIDO 9b8bee82cf
Merge pull request #1160 from PrivateBin/r4sas-issue-template
Fix comment in bug report issue template
2023-09-04 06:26:24 +02:00
R4SAS 617b421d8f
Fix comment in bug report issue template 2023-09-03 19:30:32 +03:00
El RIDO e6f2ad0ff4
Merge pull request #1157 from PrivateBin/securitybutton
Remove custom security button as GitHub added own
2023-08-28 20:42:07 +02:00
rugk 876a59cedc
Apprently GitHub
Apparently GitHub now adds a security policy button by default (this is new, is not it?)?
Also they have a policy report form behind that button. So reports can apparently now be made online at GitHub? (IMHO that is fine, just need to be aware of that)

As such, IMHO two buttons would be confusing, so let's remove our custom one here?
2023-08-28 18:49:27 +02:00
El RIDO 5e42b4f242
Merge pull request #1136 from PrivateBin/codespaces/init-files
chore: commit all files initiated by coddespaces
2023-08-25 06:53:06 +02:00
rugk 664a8fff08 feat: also open doc readme by default 2023-08-25 06:49:19 +02:00
rugk b2e4920aa2 feat: add basic support for debugging and working with devcontainer
For GitHub Codespaces e.g.
2023-08-25 06:49:19 +02:00
El RIDO 4c9c5b2941
Merge pull request #1155 from PrivateBin/betterqwaagain
QA template: remove prefilled title
2023-08-25 06:14:21 +02:00
rugk 1470b0cb9c
QA tenplate: remove prefilled title
Let's remove that.

1. With label and A&A category we have more than enough options for filtering such requests.
2. Actually, as you can see in https://github.com/orgs/PrivateBin/discussions/1152, as it is a required field, but already filled out… we want them to write proper titles.
2023-08-24 22:14:15 +02:00
rugk f8ce73b46e
Merge pull request #1154 from PrivateBin/betterqa
Make QA template more strict and helpful
2023-08-24 22:10:33 +02:00
rugk 61457c46c0
doc: link FAQ in option too
The doc says MD is supported for that here, too.
2023-08-24 21:35:42 +02:00
rugk 11fd21f8a8
doc: improve wording/grammar 2023-08-24 21:32:42 +02:00
rugk 906c115a97
Make QA template more strict and helpful
1. Require to fill out STRs.
2. Add more fields for client stuff, i.e. web browser and OS.
3. Add more placeholders and descriptions to guide users.
4. Adjust the reproducibility thing to be more clear. I.e. before the result was sth. like "Issue reproducibility: Yes" - this could be confused with "Is it always reproducible? Yes", and not "It is reproducible on our test instance."
2023-08-24 21:30:25 +02:00
El RIDO b0869c3280
Merge pull request #1151 from PrivateBin/dependabot/composer/phpunit/phpunit-9.6.11
Bump phpunit/phpunit from 9.6.10 to 9.6.11
2023-08-23 06:31:38 +02:00
dependabot[bot] e14b55bd27
Bump phpunit/phpunit from 9.6.10 to 9.6.11
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.6.10 to 9.6.11.
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/9.6.11/ChangeLog-9.6.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.6.10...9.6.11)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-21 11:06:57 +00:00
El RIDO 5047e6c550
Merge pull request #1149 from PrivateBin/delete-shifleft
Delete shiftleft-analysis.yml
2023-08-18 06:33:12 +02:00
El RIDO f0615d561f
Merge pull request #1150 from PrivateBin/r4sas-templ-qa
[GH] update discussion q-a template (#1143)
2023-08-17 07:35:55 +02:00
R4SAS 1c42576575
[GH] update discussion q-a template (#1143) 2023-08-17 03:05:39 +03:00
El RIDO 81ae359dfc
Delete shiftleft-analysis.yml
Development on this stopped in 2021 and apart from the (false positive) secret scan, dev suggests CodeQL replaces it, feature wise: https://github.com/ShiftLeftSecurity/sast-scan/issues/352
2023-08-17 00:00:30 +02:00
El RIDO ad35c30d45
Update q-a.yml, one more try
body[12]: options must not include booleans. Please wrap values such as 'yes', and 'true' in quotes.
2023-08-16 23:14:07 +02:00
El RIDO 0f9aee5335
Merge pull request #1147 from PrivateBin/r4sas-discus-templ
Update discussion template
2023-08-16 23:09:04 +02:00
R4SAS 7f28e8cc0c
Update discussion template
Try to fix #1143.
2023-08-16 23:21:46 +03:00
rugk a0a9147e63
Merge pull request #1145 from PrivateBin/template-tweaks
Template tweaks
2023-08-15 23:37:30 +02:00
El RIDO 15bf1fcf38
Merge pull request #1144 from idarlund/master
reverted Markdown
2023-08-11 21:01:53 +02:00
El RIDO 0e582e8934 fix syntax, standardize form attributes
radio buttons are not supported, checkboxes would allow selecting
multiple things, so dropdown it is
2023-08-11 20:53:06 +02:00
El RIDO e89593b4fc comment fix, kudos @r4sas 2023-08-11 20:51:12 +02:00
Idar Lund 0697a514ca
Merge pull request #1 from idarlund/idarlund-patch-1
Idarlund patch 1
2023-08-11 13:08:19 +02:00
Idar Lund 79386027fb
reverted Markdown
Markdown is a name of a language and not something that should be translated.
2023-08-11 13:07:48 +02:00
El RIDO 33285aeaf4
Merge pull request #1142 from PrivateBin/rugk-patch-1
Remove markdown from issue selector
2023-08-10 06:50:09 +02:00
rugk 1bb23ef9ca
Remove markdown from issue selector
Was worth a try, but apparently markdown is not supported there.
2023-08-09 23:11:35 +02:00
El RIDO b2926357d3
Merge pull request #1140 from PrivateBin/better-issue-templates
Fix potential syntax error in YAML
2023-08-09 20:08:48 +02:00
rugk 991ec6ca22
Fix potential syntax error in YAML
Likely that online VSCode did a stupid line wrapping here, let's see whether that works.
2023-08-09 18:19:33 +02:00
El RIDO 3513d18029
Merge pull request #1063 from PrivateBin/restructure-doc
Restructure documentation
2023-08-08 20:24:20 +02:00
El RIDO e83f51b547
Merge pull request #1138 from PrivateBin/dependabot/github_actions/github/codeql-action-2
Bump github/codeql-action from 1 to 2
2023-08-08 20:19:02 +02:00
El RIDO 41e4072899
Merge pull request #1137 from PrivateBin/dependabot/github_actions/actions/checkout-3
Bump actions/checkout from 2 to 3
2023-08-08 20:18:00 +02:00
dependabot[bot] cbff1c8488
Bump github/codeql-action from 1 to 2
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 1 to 2.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v1...v2)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-08 11:13:15 +00:00
dependabot[bot] 5f71c9de10
Bump actions/checkout from 2 to 3
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-08 11:13:08 +00:00
El RIDO be6eadd7c6
needs to get incremented on releases as well
contains the sample SQL schema with version string
2023-08-07 20:52:02 +02:00
El RIDO a5a888a225
Merge branch 'master' into restructure-doc 2023-08-07 20:47:55 +02:00
El RIDO 4796c7ff02
Merge pull request #807 from PrivateBin/siftleft-scan
Add Shiftleft scan
2023-08-07 20:46:43 +02:00
El RIDO 771d7a3df8
Merge pull request #1134 from PrivateBin/better-issue-templates
Update and create new issue templates for better catgeorisation
2023-08-07 20:31:17 +02:00
rugk a22b96b7fc
style: fix typo 2023-08-07 20:02:36 +02:00
rugk 204d1756c9 refactor: redirect support questions to discussions including form + more links
Discussions apparently onyl support forms see,
so I quickly used ChatGPT to convert the Markdown file into the YAMl format
and after telling the format it seems to have done that in a good eay:
https://chat.openai.com/share/99718495-28d0-4382-ab5e-6a4a733c1ccb

(maybe GitHub introduced that after end of 2021 hehe, so the LLM could not know that)
2023-08-07 17:59:07 +00:00
rugk 8deb68c2da chore: remove old issue template 2023-08-07 17:26:26 +00:00
rugk 1a37f7b865
Update and create new issue templates for better ctageorisation
[128 of 600 issues are just questions and support and this is getting out of hand IMHO](https://github.com/PrivateBin/PrivateBin/issues?q=is%3Aissue+is%3Aopen+label%3Aquestion%2Fsupport), so I thought we need to do something while of course IMHO keeping support in some sense that is vital to an open-source project.

Anyway, this here now:
* Converts the "one and only issue template" to multiple ones with the new GitHub way, see https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/
  Note this uses mostly the templates they have, modifies them to use proper headers (sorry but I don't get why they always want to use **bold text** as headers, when you have real markdown headings) and adjusts/ports the
* We could use even more elaborate issue forms, but that  was too much for me to do now and is also beta, so maybe when they have a visual editor for that or so 😉 https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#creating-issue-forms

The aim:
* is to get support requests and stuff directly sorted and tagged, so they are out the way
* is to nudge people to improve the quality of issues/reports by providing a more useful template or their use case
* is to redirect people to the appropriate resource (give me a moment)
2023-08-07 19:24:13 +02:00
El RIDO 48079483be
Merge pull request #1131 from PrivateBin/crowdin-translation
New Crowdin updates
2023-08-06 15:19:16 +02:00
PrivateBin Translator Bot 222ebd06a9 New translations en.json (Dutch) 2023-08-06 13:36:40 +02:00
PrivateBin Translator Bot d8f2d01c1e New translations en.json (Lojban) 2023-08-06 12:19:09 +02:00
PrivateBin Translator Bot 1050fa303f New translations en.json (Dutch) 2023-08-06 12:19:08 +02:00
PrivateBin Translator Bot 94d07039b6 New translations en.json (French) 2023-08-06 12:19:07 +02:00
PrivateBin Translator Bot e3e500cb2d New translations en.json (Corsican) 2023-08-06 11:17:05 +02:00
PrivateBin Translator Bot 5faa09f83e New translations en.json (Occitan) 2023-08-06 11:17:04 +02:00
PrivateBin Translator Bot 66f2a4b6f5 New translations en.json (Estonian) 2023-08-06 11:17:04 +02:00
PrivateBin Translator Bot 39ad584a52 New translations en.json (Thai) 2023-08-06 11:17:03 +02:00
PrivateBin Translator Bot dc790cb2e0 New translations en.json (Indonesian) 2023-08-06 11:17:02 +02:00
PrivateBin Translator Bot 18189a148a New translations en.json (Chinese Simplified) 2023-08-06 11:17:01 +02:00
PrivateBin Translator Bot d20a09c3d6 New translations en.json (Ukrainian) 2023-08-06 11:17:00 +02:00
PrivateBin Translator Bot f9a5891072 New translations en.json (Turkish) 2023-08-06 11:16:59 +02:00
PrivateBin Translator Bot 4aefd56e96 New translations en.json (Slovenian) 2023-08-06 11:16:58 +02:00
PrivateBin Translator Bot 5aab567d94 New translations en.json (Slovak) 2023-08-06 11:16:57 +02:00
PrivateBin Translator Bot 7c25ce2b6f New translations en.json (Russian) 2023-08-06 11:16:56 +02:00
PrivateBin Translator Bot 8ede9a4e08 New translations en.json (Portuguese) 2023-08-06 11:16:56 +02:00
PrivateBin Translator Bot 728d38a89d New translations en.json (Polish) 2023-08-06 11:16:55 +02:00
PrivateBin Translator Bot 04ab3ccea9 New translations en.json (Norwegian) 2023-08-06 11:16:54 +02:00
PrivateBin Translator Bot b3bbb91987 New translations en.json (Dutch) 2023-08-06 11:16:53 +02:00
PrivateBin Translator Bot 0fea8c44a4 New translations en.json (Lithuanian) 2023-08-06 11:16:52 +02:00
PrivateBin Translator Bot b7604b57ab New translations en.json (Japanese) 2023-08-06 11:16:51 +02:00
PrivateBin Translator Bot cc46b74705 New translations en.json (Italian) 2023-08-06 11:16:50 +02:00
PrivateBin Translator Bot e2c71290cf New translations en.json (Hungarian) 2023-08-06 11:16:49 +02:00
PrivateBin Translator Bot 0ce8d7dfd0 New translations en.json (Hebrew) 2023-08-06 11:16:48 +02:00
PrivateBin Translator Bot a357c7f34d New translations en.json (Finnish) 2023-08-06 11:16:47 +02:00
PrivateBin Translator Bot 941b0bdce8 New translations en.json (Greek) 2023-08-06 11:16:47 +02:00
PrivateBin Translator Bot 0b2939bb94 New translations en.json (German) 2023-08-06 11:16:46 +02:00
PrivateBin Translator Bot 9ce0878db2 New translations en.json (Czech) 2023-08-06 11:16:45 +02:00
PrivateBin Translator Bot 45b52ee895 New translations en.json (Catalan) 2023-08-06 11:16:44 +02:00
PrivateBin Translator Bot d91848de2d New translations en.json (Bulgarian) 2023-08-06 11:16:43 +02:00
PrivateBin Translator Bot d5f8bef276 New translations en.json (Spanish) 2023-08-06 11:16:42 +02:00
PrivateBin Translator Bot 63dabced9a New translations en.json (French) 2023-08-06 11:16:41 +02:00
PrivateBin Translator Bot 5aa06e5b26 New translations en.json (Corsican) 2023-08-06 09:37:07 +02:00
PrivateBin Translator Bot 68aeef687d New translations en.json (Occitan) 2023-08-06 09:37:06 +02:00
PrivateBin Translator Bot e261167ea5 New translations en.json (Lojban) 2023-08-06 09:37:04 +02:00
PrivateBin Translator Bot 0211a27a24 New translations en.json (Estonian) 2023-08-06 09:37:03 +02:00
PrivateBin Translator Bot 21157a2ad9 New translations en.json (Thai) 2023-08-06 09:37:02 +02:00
PrivateBin Translator Bot 20dc8d7c21 New translations en.json (Indonesian) 2023-08-06 09:37:01 +02:00
PrivateBin Translator Bot 5bc5295e60 New translations en.json (Chinese Simplified) 2023-08-06 09:37:00 +02:00
PrivateBin Translator Bot b5ca9efc95 New translations en.json (Ukrainian) 2023-08-06 09:36:59 +02:00
PrivateBin Translator Bot 92864f837d New translations en.json (Turkish) 2023-08-06 09:36:59 +02:00
PrivateBin Translator Bot 81627713be New translations en.json (Slovenian) 2023-08-06 09:36:57 +02:00
PrivateBin Translator Bot 81170c0d78 New translations en.json (Slovak) 2023-08-06 09:36:57 +02:00
PrivateBin Translator Bot 0b22083409 New translations en.json (Russian) 2023-08-06 09:36:56 +02:00
PrivateBin Translator Bot 8ad5a104cb New translations en.json (Portuguese) 2023-08-06 09:36:55 +02:00
PrivateBin Translator Bot e002b439a5 New translations en.json (Polish) 2023-08-06 09:36:54 +02:00
PrivateBin Translator Bot de23016288 New translations en.json (Norwegian) 2023-08-06 09:36:53 +02:00
PrivateBin Translator Bot 6da15f4a41 New translations en.json (Dutch) 2023-08-06 09:36:52 +02:00
PrivateBin Translator Bot d845ffc174 New translations en.json (Lithuanian) 2023-08-06 09:36:51 +02:00
PrivateBin Translator Bot 6f69a6756a New translations en.json (Japanese) 2023-08-06 09:36:50 +02:00
PrivateBin Translator Bot 5cc312f4a1 New translations en.json (Italian) 2023-08-06 09:36:49 +02:00
PrivateBin Translator Bot 68a25ae4a4 New translations en.json (Hungarian) 2023-08-06 09:36:48 +02:00
PrivateBin Translator Bot ed519395b1 New translations en.json (Hebrew) 2023-08-06 09:36:47 +02:00
PrivateBin Translator Bot 2274d90875 New translations en.json (Finnish) 2023-08-06 09:36:47 +02:00
PrivateBin Translator Bot 73c9b3169b New translations en.json (Greek) 2023-08-06 09:36:46 +02:00
PrivateBin Translator Bot 7b74f7dc35 New translations en.json (German) 2023-08-06 09:36:45 +02:00
PrivateBin Translator Bot 190f6d693d New translations en.json (Czech) 2023-08-06 09:36:44 +02:00
PrivateBin Translator Bot 8bc21ef38b New translations en.json (Catalan) 2023-08-06 09:36:43 +02:00
PrivateBin Translator Bot 27964b7298 New translations en.json (Bulgarian) 2023-08-06 09:36:42 +02:00
PrivateBin Translator Bot da08fbd5d7 New translations en.json (Spanish) 2023-08-06 09:36:41 +02:00
PrivateBin Translator Bot 4c316a8729 New translations en.json (French) 2023-08-06 09:36:40 +02:00
El RIDO 776a22fbcd
Merge pull request #1130 from PrivateBin/japanese-and-arabic
Enable use of Japanese and Arabic translations
2023-08-06 08:18:51 +02:00
El RIDO dc4bbe07f1 Merge remote-tracking branch 'origin/master' into japanese-and-arabic 2023-08-04 06:52:06 +02:00
El RIDO cdd29d4798 extend translations with a 4th & 5th plural case
These are used by Arabic, described in https://arabeyes.org/Plural_Forms
2023-08-04 06:32:33 +02:00
El RIDO 900e45c69b
Merge pull request #1129 from PrivateBin/crowdin-translation
New Crowdin updates
2023-08-02 19:59:12 +02:00
PrivateBin Translator Bot 032a9c9862 New translations en.json (Spanish) 2023-08-02 00:49:59 +02:00
PrivateBin Translator Bot 6047dcfe2d New translations en.json (Arabic) 2023-08-02 00:49:58 +02:00
PrivateBin Translator Bot a78d0536c6 New translations en.json (Arabic) 2023-08-01 23:47:20 +02:00
El RIDO 1dbe46cfed update SRI hashes 2023-08-01 14:05:20 +02:00
El RIDO fe37b7f0e5 enable & credit Japanese & Arabic translations 2023-08-01 14:00:45 +02:00
El RIDO 8df69a1120
Merge pull request #1128 from PrivateBin/crowdin-translation
New Crowdin updates
2023-08-01 13:32:36 +02:00
PrivateBin Translator Bot fcec76b151 New translations en.json (Arabic) 2023-08-01 12:11:21 +02:00
El RIDO e8448225af
Merge pull request #1126 from PrivateBin/crowdin-translation
New Crowdin updates
2023-08-01 07:21:10 +02:00
PrivateBin Translator Bot bff0561e01 New translations en.json (Arabic) 2023-07-31 00:43:52 +02:00
El RIDO 5296f05904
Merge pull request #1121 from PrivateBin/php8
merge PHP 8 branch, upgrading to PHPunit 9 and minimum PHP version 7.3
2023-07-23 16:48:28 +02:00
El RIDO b6ad6b538a allow composer to run at scrutinizer, explicitly telling it about our minimum supported PHP version 2023-07-23 10:38:14 +02:00
El RIDO c1b3bffe8c document change, update composer, dropping obsolete library with polyfill for random_bytes function on PHP < 7 2023-07-23 10:19:35 +02:00
El RIDO ecf100551d document change, raise minimum PHP version to 7.3, remove branch refresh 2023-07-23 10:04:57 +02:00
github-actions[bot] 48df1d29ac Merge remote-tracking branch 'origin/master' into php8 2023-07-22 08:14:07 +00:00
El RIDO 969f433861
Merge pull request #1120 from PrivateBin/dependabot/npm_and_yarn/js/word-wrap-1.2.4
Bump word-wrap from 1.2.3 to 1.2.4 in /js
2023-07-22 10:13:38 +02:00
dependabot[bot] 86ba5b4966
Bump word-wrap from 1.2.3 to 1.2.4 in /js
Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.4.
- [Release notes](https://github.com/jonschlinkert/word-wrap/releases)
- [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4)

---
updated-dependencies:
- dependency-name: word-wrap
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-19 18:58:23 +00:00
github-actions[bot] 10909c133a Merge remote-tracking branch 'origin/master' into php8 2023-07-10 04:47:03 +00:00
El RIDO b2d8d480e4
Merge pull request #1115 from PrivateBin/crowdin-translation
New Crowdin updates
2023-07-10 04:46:12 +00:00
PrivateBin Translator Bot c29d6c2a3a New translations en.json (Japanese) 2023-07-10 04:02:37 +02:00
PrivateBin Translator Bot d0ea125b11 New translations en.json (Japanese) 2023-07-10 02:55:46 +02:00
github-actions[bot] 95747ed11c Merge remote-tracking branch 'origin/master' into php8 2023-07-09 07:32:46 +00:00
El RIDO 01afe7d481
incrementing version 2023-07-09 08:44:22 +02:00
El RIDO dabcafb99b
Merge branch 'master' into php8 2023-07-05 07:15:28 +02:00
El RIDO 6c2d7431fe
Merge pull request #1093 from PrivateBin/php82-deprecation
fix PHP 8.2 ${var} string interpolation deprecation
2023-07-05 04:23:52 +00:00
El RIDO 243e43a940
Merge pull request #1102 from PrivateBin/bump-libraries
bump libraries, update changelog
2023-07-04 04:11:13 +00:00
El RIDO 172088e59b bump optional PHP libraries 2023-07-01 07:59:25 +02:00
El RIDO f7838bfe8a bump libraries, update changelog 2023-07-01 07:58:28 +02:00
El RIDO f840cccb74 remove broken scrutinizer CI PHP Code Sniffer integration - they ship a buggy release and the upgrade is ignored 2023-06-18 18:20:09 +02:00
El RIDO 0505513153 bump scrutinizer CI PHP Code Sniffer version 2023-06-18 18:09:32 +02:00
El RIDO 9208de7625 bump scrutinizer CI OS version 2023-06-18 17:51:10 +02:00
El RIDO 283927b966 bump scrutinizer CI PHP version 2023-06-18 17:21:30 +02:00
El RIDO 99c26d01d3 Merge branch 'master' into bump-libraries 2023-06-18 17:16:43 +02:00
El RIDO ebd17462c3 Merge branch 'master' into php82-deprecation 2023-06-18 17:15:48 +02:00
github-actions[bot] 2fc920394d Merge remote-tracking branch 'origin/master' into php8 2023-06-18 15:15:00 +00:00
El RIDO 73e000fc75
Merge pull request #1101 from PrivateBin/fix-styleci
apply StyleCI patch, fixes #1084
2023-06-18 15:14:15 +00:00
El RIDO 57be10ed53
bump libraries, update changelog
required minimal changes in checkmark jQuery accessor code, found by unit tests
2023-06-18 13:47:54 +02:00
El RIDO 8988899c8c
apply StyleCI patch, fixes #1084 2023-06-18 12:54:22 +02:00
El RIDO 01ea041f94
fix PHP 8.2 ${var} string interpolation deprecation
see also https://php.watch/versions/8.2/$%7Bvar%7D-string-interpolation-deprecated
2023-05-21 11:07:21 +02:00
github-actions[bot] 9271af481d Merge remote-tracking branch 'origin/master' into php8 2023-05-18 19:41:08 +00:00
El RIDO 5b458a17c2
Merge pull request #1091 from PrivateBin/crowdin-translation
New Crowdin updates
2023-05-18 19:40:16 +00:00
PrivateBin Translator Bot 4701e83968 New translations en.json (Finnish) 2023-05-18 18:09:19 +02:00
PrivateBin Translator Bot fa4aee9aac New translations en.json (Finnish) 2023-05-18 17:13:45 +02:00
github-actions[bot] 75d42ccbf6 Merge remote-tracking branch 'origin/master' into php8 2023-04-15 14:22:10 +00:00
El RIDO 5a6fba6ab1
Merge pull request #1086 from PrivateBin/crowdin-translation
New Crowdin updates
2023-04-15 14:21:26 +00:00
PrivateBin Translator Bot abcb2ed200 New translations en.json (Italian) 2023-04-11 13:26:07 +02:00
PrivateBin Translator Bot a7e21e76bc New translations en.json (Italian) 2023-04-11 12:25:54 +02:00
github-actions[bot] e20bacca27 Merge remote-tracking branch 'origin/master' into php8 2023-03-25 06:45:33 +00:00
El RIDO 9083ae5a5c
Merge pull request #1083 from PrivateBin/crowdin-translation
New Crowdin updates
2023-03-25 06:44:47 +00:00
PrivateBin Translator Bot ce1be669e2 New translations en.json (Bulgarian) 2023-03-24 08:41:11 +01:00
PrivateBin Translator Bot 44462e0202 New translations en.json (Turkish) 2023-03-24 06:43:50 +01:00
PrivateBin Translator Bot 867fb0580b New translations en.json (Turkish) 2023-03-17 22:55:40 +01:00
github-actions[bot] 83cbbdece2 Merge remote-tracking branch 'origin/master' into php8 2023-03-17 05:55:05 +00:00
El RIDO 7791aadcc8
Merge pull request #1080 from PrivateBin/crowdin-translation
New Crowdin updates
2023-03-17 05:54:17 +00:00
PrivateBin Translator Bot 4c9edb85e9 New translations en.json (Chinese Simplified) 2023-03-11 14:28:26 +01:00
PrivateBin Translator Bot a4636f1b91 New translations en.json (Chinese Simplified) 2023-03-11 13:13:13 +01:00
github-actions[bot] c19df94fc2 Merge remote-tracking branch 'origin/master' into php8 2023-02-28 04:49:39 +00:00
El RIDO b23e781b5b
Merge pull request #1070 from fenak/feat/allow-aws-sdk-to-use-default-credential-provider-chain
Feature: Allow AWS SDK to use default credential provider chain for S3Storage
2023-02-28 04:48:55 +00:00
Felipe Nakandakari f48fffd7c2
Add sample config for S3 without hard-coded access keys 2023-02-28 08:30:58 +11:00
github-actions[bot] 5e43dcf56e Merge remote-tracking branch 'origin/master' into php8 2023-02-27 17:45:26 +00:00
El RIDO dd6fed1e4d
Merge pull request #1072 from PrivateBin/crowdin-translation
New Crowdin updates
2023-02-27 17:44:36 +00:00
PrivateBin Translator Bot 390a3ba81f New translations en.json (Portuguese) 2023-02-27 17:33:24 +01:00
Felipe Nakandakari 6d4d3af377
Fix code style issues 2023-02-27 13:26:45 +11:00
Felipe Nakandakari e3abc042a8
Use credentials array only if values passed via conf.php 2023-02-27 12:58:18 +11:00
github-actions[bot] b8a425f7a1 Merge remote-tracking branch 'origin/master' into php8 2023-02-26 15:16:05 +00:00
El RIDO 643832b2b8
Merge pull request #1067 from PrivateBin/crowdin-translation
New Crowdin updates
2023-02-26 15:15:17 +00:00
PrivateBin Translator Bot 5827f196e7 New translations en.json (Portuguese) 2023-02-26 03:18:25 +01:00
github-actions[bot] e3b2ae2a0b Merge remote-tracking branch 'origin/master' into php8 2023-02-19 07:47:31 +00:00
El RIDO 6cbc91936f
Merge pull request #1062 from PrivateBin/crowdin-translation
New Crowdin updates
2023-02-19 07:46:41 +00:00
El RIDO ccc5dd037f update links, unify formats, add documentation index 2023-02-19 08:32:10 +01:00
El RIDO 411629df37 rename documentation files 2023-02-19 08:30:44 +01:00
PrivateBin Translator Bot c2480aae67 New translations en.json (Finnish) 2023-02-18 12:21:31 +01:00
github-actions[bot] 8818a99677 Merge remote-tracking branch 'origin/master' into php8 2023-02-10 05:28:40 +00:00
El RIDO 9a65b8e72b
Merge pull request #1059 from PrivateBin/crowdin-translation
New Crowdin updates
2023-02-10 06:28:00 +01:00
PrivateBin Translator Bot e2524d8093 New translations en.json (Thai) 2023-02-09 22:55:55 +01:00
github-actions[bot] 714ebdaa0b Merge remote-tracking branch 'origin/master' into php8 2023-02-03 06:25:42 +00:00
El RIDO fa8cc59ec0
Merge pull request #1054 from Fejby/patch-1
Update cs.json
2023-02-03 07:25:06 +01:00
Fejby e7c7e7512d
Update cs.json
Correction of translation
2023-02-03 00:32:01 +01:00
github-actions[bot] 1987f4a165 Merge remote-tracking branch 'origin/master' into php8 2023-01-27 17:42:53 +00:00
El RIDO a7b4b4c59d
Merge pull request #1050 from PrivateBin/crowdin-translation
New Crowdin updates
2023-01-27 18:42:15 +01:00
PrivateBin Translator Bot f5d16e3af1 New translations en.json (Occitan) 2023-01-27 17:30:10 +01:00
github-actions[bot] 476aa0d3f1 Merge remote-tracking branch 'origin/master' into php8 2023-01-21 07:46:05 +00:00
El RIDO b7f1621bbc
Merge pull request #1046 from PrivateBin/types-jsonld
expose types JSON-LD incl. configured expiration dates
2023-01-21 08:45:32 +01:00
El RIDO 3a4e5ed0c9
unnecessary string concatenation 2023-01-15 14:45:10 +01:00
El RIDO bf7d2f05b6
expose types JSON-LD incl. configured expiration dates, resolves #1045 2023-01-15 08:04:44 +01:00
github-actions[bot] 4ae461df47 Merge remote-tracking branch 'origin/master' into php8 2022-12-24 06:11:22 +00:00
El RIDO e84a8694e4
incrementing version 2022-12-24 05:52:07 +01:00
github-actions[bot] 99ce99a9fc Merge remote-tracking branch 'origin/master' into php8 2022-12-24 04:48:56 +00:00
El RIDO 12ab9bf586
Merge pull request #1019 from PrivateBin/admin
administrative script
2022-12-24 05:48:23 +01:00
github-actions[bot] e1bfdadf23 Merge remote-tracking branch 'origin/master' into php8 2022-12-22 04:39:01 +00:00
El RIDO e26407d038
Merge pull request #1033 from PrivateBin/crowdin-translation
New Crowdin updates
2022-12-22 05:38:27 +01:00
PrivateBin Translator Bot 0504575362 New translations en.json (Lithuanian) 2022-12-21 23:14:25 +01:00
github-actions[bot] 9247b25824 Merge remote-tracking branch 'origin/master' into php8 2022-12-20 18:54:23 +00:00
El RIDO 67aab7a491
bump optional libraries for GCS & S3 to address PHP 8.1 deprecation warnings 2022-12-20 19:53:32 +01:00
El RIDO 5de779a989
improve documentation 2022-12-20 19:14:37 +01:00
El RIDO 6d116e0cd9
Merge branch 'master' into php8 2022-12-20 18:28:19 +01:00
El RIDO 5c43ab6ef8
refactor administrative script into OOP style and to our code guidelines 2022-12-19 20:41:12 +01:00
El RIDO c00b95011b
Merge branch 'master' into admin 2022-12-19 19:15:27 +01:00
El RIDO 8ee69cbda3
Merge pull request #1030 from PrivateBin/improvements
Some minor improvements
2022-12-19 19:13:17 +01:00
El RIDO 30fec3e2eb
document changes 2022-12-13 18:45:41 +01:00
El RIDO a93c8ceccb
fold extracted function back into the one remaining place calling it 2022-12-13 06:21:37 +01:00
El RIDO 53ab57627e
re-add shuffling paste list 2022-12-12 21:28:38 +01:00
El RIDO 78e75d5a3f
Merge branch 'master' into improvements 2022-12-12 20:56:35 +01:00
github-actions[bot] 5b78cc80f2 Merge remote-tracking branch 'origin/master' into php8 2022-12-12 19:52:53 +00:00
El RIDO 1128c679eb
Merge pull request #1029 from AnonymousWP/dutch-translation-updates
Translate new strings to Dutch
2022-12-12 20:52:22 +01:00
github-actions[bot] 00cd331eaa Merge remote-tracking branch 'origin/master' into php8 2022-12-12 19:51:50 +00:00
El RIDO 0e5002f0d5
fix CS i18n unit test 2022-12-12 20:51:06 +01:00
El RIDO 23a2c1829f
deal with annotation reported in github actions 2022-12-12 20:49:04 +01:00
El RIDO e54277f014
re-add 10 * batch size limit in filesystem purge and support v1 dates for sorting mixed versioned comments 2022-12-12 20:48:36 +01:00
El RIDO 38574f0196
return invalid data error on API instead of exception 2022-12-12 20:46:47 +01:00
El RIDO 62c11fc782
duplications 2022-12-12 20:45:46 +01:00
AnonymousWP 8e9da9dec5
Translate new strings to Dutch
- Fix spelling errors
- Improve sentences
- Change formal to informal use of 'you' in Dutch
- Do not use literal translation of 'paste'
2022-12-11 20:05:44 +01:00
PrivateBin Translator Bot 7d34fe30b6 New translations en.json (Czech) 2022-12-11 17:31:01 +01:00
github-actions[bot] 46831d76a8 Merge remote-tracking branch 'origin/master' into php8 2022-12-11 05:15:59 +00:00
El RIDO be30f8e78f
tag needs to be signed 2022-12-11 06:15:13 +01:00
github-actions[bot] dc60d6b27e Merge remote-tracking branch 'origin/master' into php8 2022-12-11 04:09:19 +00:00
El RIDO d8bcc58d22
Merge branch 'master' into admin 2022-12-05 20:40:33 +01:00
github-actions[bot] 36925687b2 Merge remote-tracking branch 'origin/master' into php8 2022-11-18 04:39:49 +00:00
github-actions[bot] e888877f23 Merge remote-tracking branch 'origin/master' into php8 2022-11-18 04:37:18 +00:00
El RIDO 46c0fc851c
Merge branch 'master' into php8 2022-11-17 06:04:12 +01:00
El RIDO 08854db6d6
documented change 2022-11-13 14:27:11 +01:00
El RIDO 4e2ff47b1c
add an administrative script 2022-11-13 11:18:56 +01:00
github-actions[bot] ba5c859d85 Merge remote-tracking branch 'origin/master' into php8 2022-11-03 18:55:30 +00:00
El RIDO a731a1143c
update jdenticon 2022-10-31 20:36:39 +01:00
github-actions[bot] 46013df620 Merge remote-tracking branch 'origin/master' into php8 2022-10-31 16:19:19 +00:00
github-actions[bot] f0bbf99306 Merge remote-tracking branch 'origin/master' into php8 2022-10-31 16:07:38 +00:00
El RIDO c44b252aa8
Merge branch 'master' into php8 2022-10-29 19:38:01 +02:00
El RIDO 34264cb7f5
Merge branch 'master' into php8 2022-10-26 08:24:41 +02:00
El RIDO 7b98d7381f
allow tests to be manually triggered 2022-10-26 05:30:37 +02:00
github-actions[bot] fa61e4507c Merge remote-tracking branch 'origin/master' into php8 2022-10-26 02:39:53 +00:00
github-actions[bot] f79c8c63e5 Merge remote-tracking branch 'origin/master' into php8 2022-10-25 19:12:00 +00:00
El RIDO 5b3d61cedc
revert, this one actually was correct 2022-10-25 06:58:42 +02:00
El RIDO 510103fd9f
make tests compatible with newer phpunit 2022-10-25 06:55:24 +02:00
El RIDO b890d768d1
enable use of PHP 8.2 2022-10-25 06:53:26 +02:00
El RIDO 27965d0287
make tests compatible with newer phpunit 2022-10-25 06:53:07 +02:00
El RIDO 8ed9fccf25
make YourlsProxyTest compatible with newer phpunit 2022-10-25 06:43:17 +02:00
El RIDO 522c2721a2
make YourlsProxyTest compatible with newer phpunit 2022-10-25 06:41:42 +02:00
El RIDO 17d7a6967e
make YourlsProxyTest compatible with newer phpunit 2022-10-25 06:39:50 +02:00
El RIDO f6edcc1acd
Merge branch 'master' into php8 2022-10-25 06:37:15 +02:00
github-actions[bot] 5b2ec7f7c2 Merge remote-tracking branch 'origin/master' into php8 2022-10-23 03:14:46 +00:00
github-actions[bot] 5768b1e4bd Merge remote-tracking branch 'origin/master' into php8 2022-10-22 16:35:34 +00:00
github-actions[bot] 23928d26f0 Merge remote-tracking branch 'origin/master' into php8 2022-10-07 05:54:07 +00:00
github-actions[bot] cbeb30adf1 Merge remote-tracking branch 'origin/master' into php8 2022-10-07 03:59:28 +00:00
github-actions[bot] b488359e35 Merge remote-tracking branch 'origin/master' into php8 2022-09-30 03:25:00 +00:00
github-actions[bot] 9f541e6276 Merge remote-tracking branch 'origin/master' into php8 2022-09-29 19:06:55 +00:00
github-actions[bot] 4aa95107d3 Merge remote-tracking branch 'origin/master' into php8 2022-09-26 10:16:10 +00:00
github-actions[bot] 4f7b3d2ac3 Merge remote-tracking branch 'origin/master' into php8 2022-09-24 08:06:29 +00:00
github-actions[bot] 5165845b54 Merge remote-tracking branch 'origin/master' into php8 2022-09-18 12:45:32 +00:00
github-actions[bot] 05e236ed6c Merge remote-tracking branch 'origin/master' into php8 2022-08-24 04:28:45 +00:00
El RIDO 8c2cc18b66
Merge branch 'master' into php8 2022-07-31 08:53:52 +02:00
J. Fernando LAGRANGE f797311650 Change "Send" button label to "Save"
Includes french translation.
2022-06-28 10:34:40 +02:00
github-actions[bot] d7e88b236e Merge remote-tracking branch 'origin/master' into php8 2022-06-10 02:59:39 +00:00
github-actions[bot] b48430cd4d Merge remote-tracking branch 'origin/master' into php8 2022-06-08 18:29:26 +00:00
github-actions[bot] b5d9850bee Merge remote-tracking branch 'origin/master' into php8 2022-06-06 05:36:56 +00:00
github-actions[bot] 8b534ace28 Merge remote-tracking branch 'origin/master' into php8 2022-06-02 17:22:48 +00:00
El RIDO 2ad79ebf71
add php 8.1 unit tests 2022-06-01 20:50:38 +02:00
El RIDO a376f894a9
Merge branch 'php8' of github.com:PrivateBin/PrivateBin into php8 2022-06-01 20:48:33 +02:00
github-actions[bot] 43cd87c417 Merge remote-tracking branch 'origin/master' into php8 2022-05-02 17:22:36 +00:00
github-actions[bot] b8be814015 Merge remote-tracking branch 'origin/master' into php8 2022-04-30 07:45:50 +00:00
github-actions[bot] b73f4be25e Merge remote-tracking branch 'origin/master' into php8 2022-04-30 07:23:22 +00:00
github-actions[bot] f18770eaa6 Merge remote-tracking branch 'origin/master' into php8 2022-04-28 17:44:58 +00:00
github-actions[bot] 878374979b Merge remote-tracking branch 'origin/master' into php8 2022-04-20 17:56:55 +00:00
github-actions[bot] abd722d0e4 Merge remote-tracking branch 'origin/master' into php8 2022-04-14 04:20:29 +00:00
github-actions[bot] 16d6cfb1ac Merge remote-tracking branch 'origin/master' into php8 2022-04-11 17:09:34 +00:00
github-actions[bot] 60bb381796 Merge remote-tracking branch 'origin/master' into php8 2022-04-10 09:16:48 +00:00
github-actions[bot] f2397ac532 Merge remote-tracking branch 'origin/master' into php8 2022-04-09 17:56:36 +00:00
github-actions[bot] ebf6a92c8f Merge remote-tracking branch 'origin/master' into php8 2022-04-09 12:39:05 +00:00
github-actions[bot] 634b3a6605 Merge remote-tracking branch 'origin/master' into php8 2022-04-04 17:13:18 +00:00
github-actions[bot] e770065edf Merge remote-tracking branch 'origin/master' into php8 2022-03-30 18:49:51 +00:00
github-actions[bot] 5f53150390 Merge remote-tracking branch 'origin/master' into php8 2022-03-28 17:06:05 +00:00
github-actions[bot] 184b8b567d Merge remote-tracking branch 'origin/master' into php8 2022-03-28 17:03:38 +00:00
github-actions[bot] de6db843ba Merge remote-tracking branch 'origin/master' into php8 2022-03-23 19:45:37 +00:00
github-actions[bot] 6caf1a5f06 Merge remote-tracking branch 'origin/master' into php8 2022-03-01 05:45:16 +00:00
github-actions[bot] bda1ab23b8 Merge remote-tracking branch 'origin/master' into php8 2022-02-28 18:22:17 +00:00
github-actions[bot] 50fb12e3b3 Merge remote-tracking branch 'origin/master' into php8 2022-02-27 18:33:35 +00:00
github-actions[bot] 955334ff91 Merge remote-tracking branch 'origin/master' into php8 2022-02-26 10:53:14 +00:00
El RIDO fa7aa3e88c
fix composer lock 2022-02-26 07:22:32 +01:00
El RIDO 38c13398fc
Merge branch 'master' into php8 2022-02-26 06:51:32 +01:00
github-actions[bot] 14de09789e Merge remote-tracking branch 'origin/master' into php8 2022-02-18 05:51:15 +00:00
github-actions[bot] 595f9cf42e Merge remote-tracking branch 'origin/master' into php8 2022-02-18 05:18:21 +00:00
github-actions[bot] fb0d13937b Merge remote-tracking branch 'origin/master' into php8 2022-02-17 19:38:19 +00:00
github-actions[bot] 26ae7db0eb Merge remote-tracking branch 'origin/master' into php8 2022-02-13 08:04:35 +00:00
github-actions[bot] 0212429c4a Merge remote-tracking branch 'origin/master' into php8 2022-02-13 07:59:02 +00:00
github-actions[bot] 484ab3cd84 Merge remote-tracking branch 'origin/master' into php8 2022-02-12 16:29:53 +00:00
github-actions[bot] 7694c1460b Merge remote-tracking branch 'origin/master' into php8 2022-02-12 16:18:17 +00:00
github-actions[bot] 8812b09f5f Merge remote-tracking branch 'origin/master' into php8 2022-01-31 05:41:10 +00:00
github-actions[bot] f5d8d7735f Merge remote-tracking branch 'origin/master' into php8 2022-01-10 20:29:09 +00:00
github-actions[bot] 3a801bc238 Merge remote-tracking branch 'origin/master' into php8 2021-10-30 15:26:05 +00:00
El RIDO 91462da29d
update composer 2021-10-07 22:39:57 +02:00
El RIDO 5c61a442a0
phpunit compatibility 2021-10-07 22:36:11 +02:00
El RIDO 9c81d85bb7
phpunit compatibility 2021-10-07 22:34:15 +02:00
El RIDO 168ce1d85c
phpunit compatibility 2021-10-07 22:25:51 +02:00
El RIDO 1f6b962468
phpunit compatibility 2021-10-07 22:24:30 +02:00
El RIDO 1f95f57be9
phpunit compatibility 2021-10-07 22:22:32 +02:00
El RIDO a2e479192f
phpunit compatibility 2021-10-07 22:20:25 +02:00
El RIDO 3f469f715f
Merge branch 'master' into php8 2021-10-07 22:17:11 +02:00
rugk 79c0ad1670
Add Siftleft scan
It seems [to cover](https://slscan.io/en/latest/#supported-languages-frameworks) PHP including license check in addition to dependency scanning.
2021-06-05 00:21:48 +02:00
El RIDO 09133f4f10
kudos StyleCI for spotting the unneccessary namespace 2020-10-11 11:39:36 +02:00
El RIDO ec190fdcf6
phpunit 9 requires php >= 7.3 2020-10-11 10:34:03 +02:00
El RIDO 17c3cb35c0
change tests for phpunit 9 support, breaking support with phpunit 5.6 2020-10-11 10:31:24 +02:00
El RIDO 37a620df95
return type void is required as of PHPunit 7, breaking test compatibility with PHP < 7.1 2020-10-10 12:22:20 +02:00
El RIDO 6f90df9545
updating tests by dropping PHPunit 4.6 support 2020-10-10 12:08:58 +02:00
El RIDO 99f50f6de3
update composer dependencies - test phpunit 9 2020-10-10 11:50:48 +02:00
El RIDO 50f81e1d2e
unlock PHP 8 for composer 2020-10-10 11:24:36 +02:00
El RIDO 4312f77385
experimentally enable PHP 8 beta unit testing 2020-10-10 11:21:53 +02:00
159 changed files with 5349 additions and 3940 deletions

View File

@ -0,0 +1,46 @@
{
"name": "PHP",
"image": "mcr.microsoft.com/devcontainers/php",
"customizations": {
"vscode": {
"extensions": [
"github.codespaces",
// PHP from https://github.com/devcontainers/templates/tree/main/src/php
"xdebug.php-debug",
"bmewburn.vscode-intelephense-client",
"xdebug.php-pack",
// PHP
"DEVSENSE.phptools-vscode",
"DEVSENSE.composer-php-vscode",
// linting
"EditorConfig.EditorConfig",
"dbaeumer.vscode-eslint",
"raymondcamden.CSSLint",
// testing
"maty.vscode-mocha-sidebar"
]
},
"codespaces": {
"openFiles": [
"README.md",
"doc/README.md"
],
"repositories": {
"PrivateBin/*": {
"permissions": {
"pull_requests": "write"
}
}
}
}
},
"features": {
"ghcr.io/devcontainers-contrib/features/mocha:2": {}
},
"forwardPorts": [
8080
],
"postCreateCommand": ".devcontainer/postCreateCommand.sh",
// alternatiuve: apache2ctl start (but requires root)
"postAttachCommand": "php -S 0.0.0.0:8080"
}

View File

@ -0,0 +1,5 @@
#!/bin/sh
composer install --no-dev --optimize-autoloader
sudo chmod a+x "$(pwd)" && sudo rm -rf /var/www/html && sudo ln -s "$(pwd)" /var/www/html
npm install --global nyc

5
.gitattributes vendored
View File

@ -2,6 +2,7 @@ bin/configuration-test-generator export-ignore
bin/icon-test export-ignore
doc/ export-ignore
tst/ export-ignore
i18n/en.json export-ignore
img/browserstack.svg export-ignore
js/.istanbul.yml export-ignore
js/.nycrc.yml export-ignore
@ -9,6 +10,7 @@ js/common.js export-ignore
js/test/ export-ignore
.codeclimate.yml export-ignore
.csslintrc export-ignore
.devcontainer export-ignore
.editorconfig export-ignore
.eslintignore export-ignore
.eslintrc export-ignore
@ -21,10 +23,9 @@ js/test/ export-ignore
.scrutinizer.yml export-ignore
.styleci.yml export-ignore
.travis.yml export-ignore
.vscode export-ignore
codacy-analysis.yml export-ignore
crowdin.yml export-ignore
composer.json export-ignore
composer.lock export-ignore
BADGES.md export-ignore
CODE_OF_CONDUCT.md export-ignore
Makefile export-ignore

90
.github/DISCUSSION_TEMPLATE/q-a.yml vendored Normal file
View File

@ -0,0 +1,90 @@
labels: ["question/support"]
body:
- type: markdown
attributes:
value: |
## Thanks for taking the time to fill out this form!
- type: textarea
id: description
attributes:
label: Describe the problem/question
description: A clear and concise description of what the problem/issue or question is.
validations:
required: true
- type: checkboxes
id: readed-faq
attributes:
label: Did you use the FAQ section?
description: Have you read [the FAQ](https://github.com/PrivateBin/PrivateBin/wiki/FAQ)?
options:
- label: Yes, I have read [the FAQ](https://github.com/PrivateBin/PrivateBin/wiki/FAQ) and I found no solution/answer there.
required: true
- type: textarea
id: what_you_did
attributes:
label: What you did?
description: Tell us how to reproduce the problem.
value: |
1.
2.
...
validations:
required: true
- type: textarea
id: what_happens
attributes:
label: What happens
placeholder: Tell us what you see!
- type: textarea
id: what_should_happen
attributes:
label: What should happen
placeholder: Tell us what you want to see!
- type: textarea
id: additional_info
attributes:
label: Additional information
description: E.g. if you have access to the server log files, copy them here. Or copy the browser console content, if appropiate.
- type: input
id: server_address
attributes:
label: Server address
description: The instance of PrivateBin, where you experience the issue.
placeholder: e.g. https://privatebin.net
- type: input
id: server_os
attributes:
label: Server OS
placeholder: e.g. Ubuntu
- type: input
id: webserver
attributes:
label: Webserver
placeholder: e.g. Apache
- type: input
id: privatebin_version
attributes:
label: PrivateBin version
description: The PrivateBin version, where you experience the issue. It is e.g. shown at the bottom left in the web interface.
placeholder: e.g. v1.5.2
- type: input
id: browser
attributes:
label: Browser and version
placeholder: e.g. Firefox v116.3.0 (desktop)
- type: input
id: client
attributes:
label: Local operating system and version
placeholder: e.g. Windows 10
- type: dropdown
id: reproduce_issue
attributes:
label: Issue reproducibility
description: Can you reproduce this issue on [https://privatebin.net](https://privatebin.net)?
options:
- "No, I cannot reproduce it on https://privatebin.net."
- "Yes, reproducible on https://privatebin.net."
default: 0
validations:
required: true

View File

@ -1,5 +1,19 @@
<!-- Please have a look at our FAQ before submitting an issue: https://github.com/PrivateBin/PrivateBin/wiki/FAQ -->
<!-- This is a template for a bug report. If you would like to suggest a feature, feel free to delete the part below. -->
---
name: Bug report
about: Create a report to help us improve (only for software bugs)
title: ''
labels: bug
assignees: ''
---
<!-- Please make sure to **only** use this template when it is about bugs in the PrivateBin PHP project.
Otherwise, for help and support issues e.g. for deployment issues, please go back and chose the appropiate category. -->
**Did you use the FAQ section?**
- [ ] Yes, I have read [the FAQ](https://github.com/PrivateBin/PrivateBin/wiki/FAQ) and I found no solution/answer there.
<!-- Describe the bug: A clear and concise description of what the bug is. -->
## Steps to reproduce
<!-- Tell us how to reproduce the problem. -->
@ -26,7 +40,7 @@ If you have access to the server log files, also copy them here.
<!-- The Operation System of your server -->
**Server OS:**
<!-- The webserver running on your server, preferrably including the version -->
<!-- The webserver running on your server, preferably including the version -->
**Webserver:**
<!-- The version of your browser (when it is a client-side issue) -->

9
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@ -0,0 +1,9 @@
blank_issues_enabled: false
contact_links:
- name: Question and support
url: https://github.com/orgs/PrivateBin/discussions/new?category=q-a
about: Your setup is not working and you need help or you have a question regarding PrivateBin
- name: Problem with the container image
url: https://github.com/PrivateBin/docker-nginx-fpm-alpine/issues/new
about: Please report all problems that apply only(!) to the official (Docker) image “docker-nginx-fpm-alpine” here.

View File

@ -0,0 +1,22 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''
---
## The problem
<!-- Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when -->
## The solution
<!-- A clear and concise description of what you want to happen. Pitch your solution! What would happen, if we don't implement this? -->
## Alternatives
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
## Additional context
<!-- Add any other context or screenshots about the feature request here. -->

View File

@ -33,11 +33,11 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@ -46,4 +46,4 @@ jobs:
# queries: ./path/to/local/query, your-org/your-repo/queries@main
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
uses: github/codeql-action/analyze@v3

View File

@ -1,37 +0,0 @@
name: Refresh PHP 8 branch
on:
push:
branches: [ master ]
schedule:
- cron: '42 2 * * *'
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout php8 branch
uses: actions/checkout@v3
with:
# directly checkout the php8 branch
ref: php8
# Number of commits to fetch. 0 indicates all history for all branches and tags.
# Default: 1
fetch-depth: 0
- name: Merge master changes into php8
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git merge origin/master
- name: Push new changes
uses: github-actions-x/commit@v2.9
with:
name: github-actions[bot]
email: 41898282+github-actions[bot]@users.noreply.github.com
github-token: ${{ secrets.GITHUB_TOKEN }}
push-branch: 'php8'

50
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,50 @@
name: Draft Release
on:
push:
tags: '[0-9]+.[0-9]?[0-9]?[0-9]?.?[0-9]+'
jobs:
draft:
runs-on: ubuntu-latest
steps:
- name: Fetch changelog from tag
uses: actions/checkout@v4
with:
sparse-checkout: CHANGELOG.md
sparse-checkout-cone-mode: false
- name: Extract latest changelog entry and attach it to draft
uses: taiki-e/create-gh-release-action@v1
with:
changelog: CHANGELOG.md
draft: true
token: ${{ secrets.GITHUB_TOKEN }}
release:
outputs:
hashes: ${{ steps.hash.outputs.hashes }}
runs-on: ubuntu-latest
steps:
- name: Collect artifacts
run: |
wget -q https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${GITHUB_REF_NAME}.tar.gz
wget -q https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${GITHUB_REF_NAME}.zip
- name: Generate hashes
shell: bash
id: hash
run: echo "hashes=$(sha256sum ${GITHUB_REF_NAME}.* | base64 -w0)" >> "$GITHUB_OUTPUT"
provenance:
needs:
- release
permissions:
actions: read
id-token: write
contents: write
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.9.0
with:
base64-subjects: "${{ needs.release.outputs.hashes }}"
draft-release: true
upload-assets: true

View File

@ -13,7 +13,7 @@ jobs:
snyk-php:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install Google Cloud Storage
run: composer require --no-update google/cloud-storage && composer update --no-dev
- name: Run Snyk to check for vulnerabilities
@ -24,6 +24,6 @@ jobs:
with:
args: --sarif-file-output=snyk.sarif
- name: Upload result to GitHub Code Scanning
uses: github/codeql-action/upload-sarif@v2
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: snyk.sarif

View File

@ -1,5 +1,7 @@
name: Tests
on: [push]
on:
push:
workflow_dispatch:
jobs:
@ -7,28 +9,28 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Validate composer.json and composer.lock
run: composer validate
- name: Install dependencies
run: composer install --prefer-dist --no-dev
PHPunit:
runs-on: ubuntu-latest
strategy:
matrix:
php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4']
php-versions: ['7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4']
name: PHP ${{ matrix.php-versions }} unit tests on ${{ matrix.operating-system }}
env:
extensions: gd, sqlite3
extensions-cache-key-name: phpextensions
steps:
# let's get started!
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
# cache PHP extensions
- name: Setup cache environment
id: extcache
@ -39,82 +41,80 @@ jobs:
key: ${{ runner.os }}-${{ env.extensions-cache-key }}
- name: Cache extensions
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ${{ steps.extcache.outputs.dir }}
key: ${{ steps.extcache.outputs.key }}
restore-keys: ${{ runner.os }}-${{ env.extensions-cache-key }}
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
extensions: ${{ env.extensions }}
# Setup GitHub CI PHP problem matchers
# https://github.com/shivammathur/setup-php#problem-matchers
- name: Setup problem matchers for PHP
run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"
run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"
- name: Setup problem matchers for PHPUnit
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
# composer cache
- name: Remove composer lock
run: rm composer.lock
- name: Get composer cache directory
id: composer-cache
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
# http://man7.org/linux/man-pages/man1/date.1.html
# https://github.com/actions/cache#creating-a-cache-key
- name: Get Date
id: get-date
run: echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT
shell: bash
- name: Cache dependencies
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/composer.json') }}
restore-keys: ${{ runner.os }}-composer-${{ steps.get-date.outputs.date }}-
# composer installation
- name: Setup PHPunit
run: composer install -n
- name: Install Google Cloud Storage
run: composer require google/cloud-storage
# testing
- name: Run unit tests
run: ../vendor/bin/phpunit --no-coverage
working-directory: tst
Mocha:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: '16'
node-version: '20'
cache: 'npm'
cache-dependency-path: 'js/package-lock.json'
- name: Setup Mocha
run: npm install -g mocha
- name: Setup Node modules
run: npm ci
working-directory: js
- name: Run unit tests
run: npm test
working-directory: js

2
.gitignore vendored
View File

@ -31,9 +31,11 @@ js/node_modules/
js/test.log
tst/log/
tst/ConfigurationCombinationsTest.php
tst/.phpunit.result.cache
.settings
.buildpath
.project
.phpdoc
.externalToolBuilders
.c9
/.idea/

View File

@ -15,9 +15,10 @@ coding_style:
additive: false
concatenation: true
build:
image: default-bionic
environment:
php:
version: '7.2'
version: 7.4
tests:
override:
-
@ -30,7 +31,4 @@ build:
analysis:
tests:
override:
-
command: phpcs-run
use_website_config: true
- php-scrutinizer-run

7
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,7 @@
{
"recommendations": [
"recca0120.vscode-phpunit",
"onecentlin.phpunit-snippets",
"devsense.profiler-php-vscode"
]
}

35
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,35 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch built-in server and debug",
"type": "php",
"request": "launch",
"runtimeArgs": [
"-S",
"localhost:8000",
"-t",
"."
],
"port": 9003,
"serverReadyAction": {
"action": "openExternally"
}
},
{
"name": "Debug current script in console",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"externalConsole": false,
"port": 9003
},
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
]
}

5
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,5 @@
{
"files.associations": {
"**/cfg/conf*.php": "ini"
}
}

View File

@ -1,279 +1,355 @@
# PrivateBin version history
* **1.5 (2022-12-11)**
* ADDED: script for data storage backend migrations (#1012)
* ADDED: Translations for Turkish, Slovak, Greek and Thai
* ADDED: S3 Storage backend (#994)
* ADDED: Jdenticons as an option for comment icons (#793)
* CHANGED: Avoid `SUPER` privilege for setting the `sql_mode` for MariaDB/MySQL (#919)
* CHANGED: Upgrading libraries to: DOMpurify 2.4.6, jQuery 3.6.1, Showdown 2.1.0 & zlib 1.2.13
* FIXED: Revert to CREATE INDEX without IF NOT EXISTS clauses, to support MySQL (#943)
* FIXED: Apply table prefix to indexes as well, to support multiple instances sharing a single database (#943)
* FIXED: YOURLS integration via new proxy, storing signature in configuration (#725)
* **1.4 (2022-04-09)**
* ADDED: Translations for Corsican, Estonian, Finnish and Lojban
* ADDED: new HTTP headers improving security (#765)
* ADDED: Download button for paste text (#774)
* ADDED: Opt-out of federated learning of cohorts (FLoC) (#776)
* ADDED: Configuration option to exempt IPs from the rate-limiter (#787)
* ADDED: Google Cloud Storage backend support (#795)
* ADDED: Oracle database support (#868)
* ADDED: Configuration option to limit paste creation and commenting to certain IPs (#883)
* ADDED: Set CSP also as meta tag, to deal with misconfigured webservers mangling the HTTP header
* ADDED: Sanitize SVG preview, preventing script execution in instance context
* CHANGED: Language selection cookie only transmitted over HTTPS (#472)
* CHANGED: Upgrading libraries to: base-x 4.0.0, bootstrap 3.4.1 (JS), DOMpurify 2.3.6, ip-lib 1.18.0, jQuery 3.6.0, random_compat 2.0.21, Showdown 2.0.3 & zlib 1.2.12
* CHANGED: Removed automatic `.ini` configuration file migration (#808)
* CHANGED: Removed configurable `dir` for `traffic` & `purge` limiters (#419)
* CHANGED: Server salt, traffic and purge limiter now stored in the storage backend (#419)
* CHANGED: Drop support for attachment download in IE
* FIXED: Error when attachments are disabled, but paste with attachment gets displayed
* **1.3.5 (2021-04-05)**
* ADDED: Translations for Hebrew, Lithuanian, Indonesian and Catalan
* ADDED: Make the project info configurable (#681)
* CHANGED: Upgrading libraries to: DOMpurify 2.2.7, kjua 0.9.0 & random_compat 2.0.18
* CHANGED: Open all links in new window (#630)
* FIXED: PDF display in Firefox (#630)
* FIXED: Allow pasting into password input dialog (#630)
* FIXED: Display of expiration date in email (#630)
* FIXED: Allow display of durations in weeks (#630)
* FIXED: Avoid exposing burn-after-reading messages from cache (#630)
* FIXED: Only display the dropzone when it should (#630)
* FIXED: Detect delete token properly (#630)
* FIXED: Sanitize output from `Helper.urls2links()` (#630)
* FIXED: Avoid recreation of existing pasteurl element when calling URL shortener (#630)
* FIXED: Downloads in Chrome >= 83 (#634)
* FIXED: Display of empty files (#663)
* FIXED: Improve OpenGraph attributes (#651)
* FIXED: Reset to configured burn-after-reading, discussion and expiration settings (#682)
* FIXED: Italic segment of project information (#756)
* **1.3.4 (2020-03-22)**
* CHANGED: Minimum required PHP version is 5.6, due to a change in the identicon library and to use php's native hash_equals()
* CHANGED: Upgrading libraries to: identicon 2.0.0
* FIXED: Support custom expiration options in email function (#586)
* FIXED: Regression with encoding of HTML entities (#588)
* FIXED: Unable to paste password on paste with attachment (#565 & #595)
* **1.3.3 (2020-02-16)**
* CHANGED: Upgrading libraries to: DOMpurify 2.0.8
* CHANGED: Several translations got updated with missing messages
* CHANGED: Introduce HTML entity encoding on server side (#581)
* FIXED: HTML entity double encoding issues introduced in 1.3.2 (#560)
* **1.2.3 (2020-02-16)**
* CHANGED: Upgrading libraries to: DOMpurify 2.0.8
* CHANGED: Introduce HTML entity encoding on server side (#581)
* FIXED: HTML entity double encoding issues introduced in 1.3.2 (#560)
* **1.3.2 (2020-01-11)**
* ADDED: Translation for Ukrainian (#533)
* ADDED: Option to send a mail with the link, when creating a paste (#398)
* ADDED: Add support for CONFIG_PATH environment variable (#552)
* CHANGED: Upgrading libraries to: base-x 3.0.7, DOMpurify 2.0.7 & Showdown 1.9.1
* FIXED: HTML injection via unescaped attachment filename (#554)
* FIXED: Password disabling option (#527)
* **1.2.2 (2020-01-11)**
* CHANGED: Upgrading libraries to: bootstrap 3.4.1 (CSS), DOMpurify 2.0.7, jQuery 3.4.1, kjua 0.6.0, Showdown 1.9.1 & SJCL 1.0.8
* FIXED: HTML injection via unescaped attachment filename (#554)
* **1.3.1 (2019-09-22)**
* ADDED: Translation for Bulgarian (#455)
* CHANGED: Improved mobile UI - obscured send button and hard to click shortener button (#477)
* CHANGED: Enhanced URL shortener integration (#479)
* CHANGED: Improved file upload drag & drop UI (#317)
* CHANGED: Increased default size limit from 2 to 10 MiB, switch data from BLOB to MEDIUMBLOB in MySQL (#458)
* CHANGED: Upgrading libraries to: DOMpurify 2.0.1
* FIXED: Enabling browsers without WASM to create pastes and read uncompressed ones (#454)
* FIXED: Cloning related issues (#489, #491, #493, #494)
* FIXED: Enable file operation only when editing (#497)
* FIXED: Clicking 'New' on a previously submitted paste does not blank address bar (#354)
* FIXED: Clear address bar when create new paste from existing paste (#479)
* FIXED: Discussion section not hiding when new/clone paste is clicked on (#484)
* FIXED: Showdown.js error when posting svg qrcode (#485)
* FIXED: Failed to handle the case where user cancelled attachment selection properly (#487)
* FIXED: Displaying the appropriate errors in older browsers (#508)
* **1.3 (2019-07-09)**
* ADDED: Translation for Czech (#424)
* ADDED: Threat modeled the application (#177)
* ADDED: Made compression configurable (#38)
* CHANGED: Minimum required PHP version is 5.5, due to a change in the identicon library
* CHANGED: Minimum required browser versions are Firefox 54, Chrome 57, Opera 44, Safari 11, Edge 16, due to use of WebCrypto API, async/await, ES6 & WebAssembly features - all Internet Explorer versions are incompatible
* CHANGED: JSON and encryption formats were changed to replace SJCL library by browser integrated WebCrypto API (#28, #74)
* CHANGED: Replaced rawdeflate.js with zlib.wasm to resolve decompression failures and gain compatibility with standard deflate implementations (#193, #260, #328, #434, #440)
* CHANGED: Increase PBKDF2 iterations to 100k (#350)
* CHANGED: Replaced last use of MD5 with FowlerNollVo checksum which produces the exact length we need for the paste ID (#49)
* CHANGED: Simplified some PHP code & renamed PrivateBin class into Controller, to make MVC pattern use more obvious (#342)
* CHANGED: Upgrading libraries to: identicon 1.2.0, random_compat 2.0.18, jQuery 3.4.1, Showdown 1.9.0, DOMpurify 1.0.11 & kjua 0.6.0
* FIXED: Prevent Chrome from sending content of paste to Google for translation (#378)
* FIXED: To support attachments larger then 2 MiB in newer Chrome versions, we switched to blob instead of data URIs (#432)
* FIXED: Since Outlook strips trailing equal signs in links, the key in URL hash is now base58 encoded, instead of base64 (#377)
* FIXED: Facebooks started injecting parameters into shared URLs for tracking that lead to inaccessible pastes (#396)
* FIXED: Properly escaped HTML in raw text mode (#358)
* FIXED: Made download links better readable in the dark bootstrap theme (#364)
* FIXED: Allow Letsencrypt bot to access on apache servers (#413)
* **1.2.1 (2018-08-11)**
* ADDED: Add support for mega.nz links in pastes and comments (#331)
* CHANGED: Added some missing Russian translations (#348)
* CHANGED: Minor PHP refactoring: Rename PrivateBin class to Controller, improved logic of some persistence classes (#342)
* CHANGED: Upgrading DOMpurify library to 1.0.7
* FIXED: Ensure legacy browsers without webcrypto support can't create paste keys with insufficient entropy (#346)
* FIXED: Re-add support for old browsers (Firefox&lt;21, Chrome&lt;31, Safari&lt;7, IE&lt;11), broken in 1.2, will be removed again in 1.3
* **1.2 (2018-07-22)**
* ADDED: Translations for Spanish, Occitan, Norwegian, Portuguese, Dutch and Hungarian
* ADDED: Option in configuration to change the default "PrivateBin" title of the site
* ADDED: Added display of video, audio & PDF, drag & drop, preview of attachments (#182)
* ADDED: QR code generation (#169)
* ADDED: Introduced DOMpurify library to sanitize generated HTML before display (#183)
* CHANGED: Force JSON request for getting paste data & password retry (#216)
* CHANGED: Minimum required PHP version is 5.4 (#186)
* CHANGED: Shipped .htaccess files were updated for Apache 2.4 (#192)
* CHANGED: Cleanup of bootstrap template variants and moved icons to `img` directory
* CHANGED: Removed option to hide clone button on expiring pastes, since this requires reading the paste for rendering the template, which leaks information on the pastes state
* CHANGED: Upgrading libraries to: SJCL 1.0.7, jQuery 3.3.1, Base64 2.4.5, Showdown 1.8.6, DOMpurify 1.0.5 & Prettify 453bd5f
* CHANGED: Refactored JavaScript code, making it modular with private and public functions, making it much easier to maintain (#178)
* FIXED: To counteract regressions introduced by the refactoring, we finally introduced property based unit testing for the JavaScript code, this caught several regressions, but also some very old bugs not found so far (#32)
* **1.1.1 (2017-10-06)**
* CHANGED: Switched to `.php` file extension for configuration file, to avoid leaking configuration data in unprotected installation.
* **1.1 (2016-12-26)**
* ADDED: Translations for Italian and Russian
* ADDED: Loading message displayed until decryption succeeded for slower (in terms of CPU or network) systems
* ADDED: Dockerfile for docker container creation
* CHANGED: Using modal dialog to request password input instead of native JS input window (#69)
* CHANGED: Suppressed referrer HTTP header sending when following links in a paste or comment (#96) and added additional HTTP headers for XSS mitigation (#91)
* CHANGED: Updated random_compat and jQuery libraries
* FIXED: XSS using JavaScript stored as markdown formatted paste, after clicking on Raw paste button (#137)
* FIXED: Automatic purging deleting non-expiring pastes, when using database store (#149)
* **1.0 (2016-08-25)**
* ADDED: Translations for Slowene and Chinese
* ADDED: re-introduced (optional) URL shortener support, which was removed back in version 0.16 for privacy concerns
* ADDED: Preview tab, helpful for writing markdown code or check the source code rendering
* ADDED: Automatic purging of expired pastes, done on paste creation
* ADDED: Option to disable icons in discussions (will only affect newly created pastes)
* ADDED: Composer support
* CHANGED: Renamed the ZeroBin fork to PrivateBin
* CHANGED: Removed unmaintained RainTPL template engine, replacing the templates with straight forward PHP files
* CHANGED: New logo and favicons
* CHANGED: Upgrading SJCL library to 1.0.4
* CHANGED: Switched to GCM instead of CCM mode for AES encryption for newly created pastes
* CHANGED: Use backported random bytes function from PHP7 for older PHP versions instead of mcrypt
* CHANGED: Switched to a SHA256 HMAC of the IP in traffic limiter instead of storing it in plain text on the server
* CHANGED: Introduced content security policy header to reduce cross site scripting (XSS) risks
* CHANGED: Added SHA512 subresource integrity hashes for all javascript includes to reduce the risk of manipulated scripts and easier detection of such
* CHANGED: Refactored PHP code to conform to PSR-4 and PSR-2 standards
* CHANGED: Switched to Identicons as the default for comments with nicknames
* CHANGED: Vizhash is now optional and based on (128 byte) SHA512 HMAC instead of (144 byte) combination of MD5, SHA1 and a reversal of that string
* FIXED: Content-type negociation for HTML in certain uncommon browser configurations
* FIXED: JavaScript error displayed before page is loaded or during attachment load
* FIXED: Don't strip space characters at beginning or end of optional password
* FIXED: Various UI glitches in mobile version or on smaller desktops with language menu, button spacing and long URLs
* FIXED: Back button now works as expected after switching to raw text view of a paste
* FIXED: Reactivated second error message above send comment button to ensure its visibility when the main error message is outside the viewport
* FIXED: Raw text now displays original markdown instead of rendered HTML
* FIXED: Removed unused code detected with the help of various code review tools
* FIXED: Table format for PostgreSQL, making it possible to use PostgreSQL as backend in addition to MySQL, SQLite and flat files
* **0.22 (2015-11-09)**:
* ADDED: Tab character input support
* ADDED: Dark bootstrap theme
* ADDED: Option to hide clone button on expiring pastes
* ADDED: Option to set a different default language then English and/or enforce it as the only language
* ADDED: Database now contains version to allow automatic update of structure, only if necessary; removing database structure check on each request
* ADDED: Favicons
* FIXING: Regressions in database layer, prohibiting pastes from being stored
* FIXING: Fixing "missing" comments when they were posted during the same second to the same paste
* FIXING: JS failing when password input disabled
* CHANGED: Switching positions of "New" and "Send" button, highlighting the latter to improve workflow
* CHANGED: Renamed config file to make updates easier
* CHANGED: Switching to JSON-based REST-API
* CHANGED: Database structure to store attachments, allowing larger attachments to be stored (depending on maximum BLOB size of database backend)
* CHANGED: Refactored data model, traffic limiting & request handling
* **0.21.1 (2015-09-21)**:
* FIXING: lost meta data when using DB model instead of flat files
* FIXING: mobile navbar getting triggered on load
* CHANGED: database table "paste" gets automatically extended with a "meta" column
* CHANGED: navbar of "bootstrap" template now spans full width of view port on large screens
* **0.21 (2015-09-19)**:
* ADDED: Translations for German, French and Polish, language selection menu (optional)
* ADDED: File upload and image display support (optional)
* ADDED: Markdown format support
* ADDED: "bootstrap-compact" template that hides some of the options in a drop down menu to ensure the nav bar fitting on one line on smaller screen sizes
* FIXING: Various usability issues with different screen sizes / device types in the "bootstrap" template
* CHANGED: Instead of having different options to enable and preselect certain formats there is now a generic `[formatter_options]` section where formats can be added to the displayed format drop down menu. A `defaultformatter` can be set, it defaults to "plaintext". The `syntaxhighlighting` configuration got deprecated.
* `zerobin.js` got a major refactoring:
* moved from global namespace into anonymous function
* events are no longer set via "onclick" attributes in the templates, but bound by from JS side
* for simpler maintenance the functions were grouped into objects: zerobin (display logic, event handling), filter (compression,
## 1.7.2 (not yet released)
* ADDED: Allow use of `shortenviayourls` in query parameters (#1267)
* CHANGED: "Send" button now labeled "Create" (#946)
* FIXED: Add cache control headers also to API calls (#1263)
* FIXED: Shortened paste URL does not appear in email (#606)
## 1.7.1 (2024-02-11)
* FIXED: zlib 1.3.1 wasm file reference
## 1.7.0 (2024-02-11)
* ADDED: Translations for Romanian
* ADDED: Detect and report on damaged pastes (#1218)
* CHANGED: Ask for confirmation, before loading burn after reading pastes (#1237)
* CHANGED: Focus on password input in modal dialog
* CHANGED: Upgrading libraries to: DOMpurify 3.0.8 & zlib 1.3.1
* FIXED: Support more types of valid URLs for shorteners, incl. IDN ones (#1224)
* FIXED: Email timezone buttons overlapping in some languages (#1039)
* FIXED: Changing language mangles URL (#1191)
* FIXED: Needless reload when visiting default URL
## 1.6.2 (2023-12-15)
* FIXED: English not selectable when `languageselection` enabled (#1208)
* FIXED: SRI mismatch due to cached file having changed (#1207)
## 1.6.1 (2023-12-04)
* ADDED: Right-To-Left (RTL) support for Arabic & Hebrew (#1174)
* CHANGED: Upgrading libraries to: DOMpurify 3.0.6
## 1.6.0 (2023-09-11)
* ADDED: Translations for Japanese & Arabic
* ADDED: Configuration option to disable email button (#1164)
* CHANGED: Minimum required PHP version is 7.3, due to upgrading PHPunit (#707)
* CHANGED: Removed PHP 5 polyfill for random_bytes()
## 1.5.2 (2023-07-09)
* ADDED: Allow AWS SDK to use default credential provider chain for S3Storage (#1070)
* CHANGED: Upgrading libraries to: DOMpurify 3.0.4 & jQuery 3.7.0
* FIXED: Addressed PHP 8.2 deprecation warnings (#1092)
* FIXED: Expose types JSON-LD incl. configured expiration dates (#1045)
## 1.5.1 (2022-12-24)
* ADDED: script for administrative tasks: deleting pastes (#274), removing empty directories (#277), purging expired pastes (#276) & statistics (#319)
* FIXED: Revert Filesystem purge to limited and randomized lookup (#1030)
* FIXED: Catch JSON decode errors when invalid data gets sent to the API (#1030)
* FIXED: Support sorting v1 format in mixed version comments in Filesystem backend (#1030)
## 1.5 (2022-12-11)
* ADDED: script for data storage backend migrations (#1012)
* ADDED: Translations for Turkish, Slovak, Greek and Thai
* ADDED: S3 Storage backend (#994)
* ADDED: Jdenticons as an option for comment icons (#793)
* CHANGED: Avoid `SUPER` privilege for setting the `sql_mode` for MariaDB/MySQL (#919)
* CHANGED: Upgrading libraries to: DOMpurify 2.4.6, jQuery 3.6.1, Showdown 2.1.0 & zlib 1.2.13
* FIXED: Revert to CREATE INDEX without IF NOT EXISTS clauses, to support MySQL (#943)
* FIXED: Apply table prefix to indexes as well, to support multiple instances sharing a single database (#943)
* FIXED: YOURLS integration via new proxy, storing signature in configuration (#725)
## 1.4 (2022-04-09)
* ADDED: Translations for Corsican, Estonian, Finnish and Lojban
* ADDED: new HTTP headers improving security (#765)
* ADDED: Download button for paste text (#774)
* ADDED: Opt-out of federated learning of cohorts (FLoC) (#776)
* ADDED: Configuration option to exempt IPs from the rate-limiter (#787)
* ADDED: Google Cloud Storage backend support (#795)
* ADDED: Oracle database support (#868)
* ADDED: Configuration option to limit paste creation and commenting to certain IPs (#883)
* ADDED: Set CSP also as meta tag, to deal with misconfigured webservers mangling the HTTP header
* ADDED: Sanitize SVG preview, preventing script execution in instance context
* CHANGED: Language selection cookie only transmitted over HTTPS (#472)
* CHANGED: Upgrading libraries to: base-x 4.0.0, bootstrap 3.4.1 (JS), DOMpurify 2.3.6, ip-lib 1.18.0, jQuery 3.6.0, random_compat 2.0.21, Showdown 2.0.3 & zlib 1.2.12
* CHANGED: Removed automatic `.ini` configuration file migration (#808)
* CHANGED: Removed configurable `dir` for `traffic` & `purge` limiters (#419)
* CHANGED: Server salt, traffic and purge limiter now stored in the storage backend (#419)
* CHANGED: Drop support for attachment download in IE
* FIXED: Error when attachments are disabled, but paste with attachment gets displayed
## 1.3.5 (2021-04-05)
* ADDED: Translations for Hebrew, Lithuanian, Indonesian and Catalan
* ADDED: Make the project info configurable (#681)
* CHANGED: Upgrading libraries to: DOMpurify 2.2.7, kjua 0.9.0 & random_compat 2.0.18
* CHANGED: Open all links in new window (#630)
* FIXED: PDF display in Firefox (#630)
* FIXED: Allow pasting into password input dialog (#630)
* FIXED: Display of expiration date in email (#630)
* FIXED: Allow display of durations in weeks (#630)
* FIXED: Avoid exposing burn-after-reading messages from cache (#630)
* FIXED: Only display the dropzone when it should (#630)
* FIXED: Detect delete token properly (#630)
* FIXED: Sanitize output from `Helper.urls2links()` (#630)
* FIXED: Avoid recreation of existing pasteurl element when calling URL shortener (#630)
* FIXED: Downloads in Chrome >= 83 (#634)
* FIXED: Display of empty files (#663)
* FIXED: Improve OpenGraph attributes (#651)
* FIXED: Reset to configured burn-after-reading, discussion and expiration settings (#682)
* FIXED: Italic segment of project information (#756)
## 1.3.4 (2020-03-22)
* CHANGED: Minimum required PHP version is 5.6, due to a change in the identicon library and to use php's native hash_equals()
* CHANGED: Upgrading libraries to: identicon 2.0.0
* FIXED: Support custom expiration options in email function (#586)
* FIXED: Regression with encoding of HTML entities (#588)
* FIXED: Unable to paste password on paste with attachment (#565 & #595)
## 1.3.3 (2020-02-16)
* CHANGED: Upgrading libraries to: DOMpurify 2.0.8
* CHANGED: Several translations got updated with missing messages
* CHANGED: Introduce HTML entity encoding on server side (#581)
* FIXED: HTML entity double encoding issues introduced in 1.3.2 (#560)
## 1.2.3 (2020-02-16)
* CHANGED: Upgrading libraries to: DOMpurify 2.0.8
* CHANGED: Introduce HTML entity encoding on server side (#581)
* FIXED: HTML entity double encoding issues introduced in 1.3.2 (#560)
## 1.3.2 (2020-01-11)
* ADDED: Translation for Ukrainian (#533)
* ADDED: Option to send a mail with the link, when creating a paste (#398)
* ADDED: Add support for CONFIG_PATH environment variable (#552)
* CHANGED: Upgrading libraries to: base-x 3.0.7, DOMpurify 2.0.7 & Showdown 1.9.1
* FIXED: HTML injection via unescaped attachment filename (#554)
* FIXED: Password disabling option (#527)
## 1.2.2 (2020-01-11)
* CHANGED: Upgrading libraries to: bootstrap 3.4.1 (CSS), DOMpurify 2.0.7, jQuery 3.4.1, kjua 0.6.0, Showdown 1.9.1 & SJCL 1.0.8
* FIXED: HTML injection via unescaped attachment filename (#554)
## 1.3.1 (2019-09-22)
* ADDED: Translation for Bulgarian (#455)
* CHANGED: Improved mobile UI - obscured send button and hard to click shortener button (#477)
* CHANGED: Enhanced URL shortener integration (#479)
* CHANGED: Improved file upload drag & drop UI (#317)
* CHANGED: Increased default size limit from 2 to 10 MiB, switch data from BLOB to MEDIUMBLOB in MySQL (#458)
* CHANGED: Upgrading libraries to: DOMpurify 2.0.1
* FIXED: Enabling browsers without WASM to create pastes and read uncompressed ones (#454)
* FIXED: Cloning related issues (#489, #491, #493, #494)
* FIXED: Enable file operation only when editing (#497)
* FIXED: Clicking 'New' on a previously submitted paste does not blank address bar (#354)
* FIXED: Clear address bar when create new paste from existing paste (#479)
* FIXED: Discussion section not hiding when new/clone paste is clicked on (#484)
* FIXED: Showdown.js error when posting svg qrcode (#485)
* FIXED: Failed to handle the case where user cancelled attachment selection properly (#487)
* FIXED: Displaying the appropriate errors in older browsers (#508)
## 1.3 (2019-07-09)
* ADDED: Translation for Czech (#424)
* ADDED: Threat modeled the application (#177)
* ADDED: Made compression configurable (#38)
* CHANGED: Minimum required PHP version is 5.5, due to a change in the identicon library
* CHANGED: Minimum required browser versions are Firefox 54, Chrome 57, Opera 44, Safari 11, Edge 16, due to use of WebCrypto API, async/await, ES6 & WebAssembly features - all Internet Explorer versions are incompatible
* CHANGED: JSON and encryption formats were changed to replace SJCL library by browser integrated WebCrypto API (#28, #74)
* CHANGED: Replaced rawdeflate.js with zlib.wasm to resolve decompression failures and gain compatibility with standard deflate implementations (#193, #260, #328, #434, #440)
* CHANGED: Increase PBKDF2 iterations to 100k (#350)
* CHANGED: Replaced last use of MD5 with FowlerNollVo checksum which produces the exact length we need for the paste ID (#49)
* CHANGED: Simplified some PHP code & renamed PrivateBin class into Controller, to make MVC pattern use more obvious (#342)
* CHANGED: Upgrading libraries to: identicon 1.2.0, random_compat 2.0.18, jQuery 3.4.1, Showdown 1.9.0, DOMpurify 1.0.11 & kjua 0.6.0
* FIXED: Prevent Chrome from sending content of paste to Google for translation (#378)
* FIXED: To support attachments larger then 2 MiB in newer Chrome versions, we switched to blob instead of data URIs (#432)
* FIXED: Since Outlook strips trailing equal signs in links, the key in URL hash is now base58 encoded, instead of base64 (#377)
* FIXED: Facebooks started injecting parameters into shared URLs for tracking that lead to inaccessible pastes (#396)
* FIXED: Properly escaped HTML in raw text mode (#358)
* FIXED: Made download links better readable in the dark bootstrap theme (#364)
* FIXED: Allow Letsencrypt bot to access on apache servers (#413)
## 1.2.1 (2018-08-11)
* ADDED: Add support for mega.nz links in pastes and comments (#331)
* CHANGED: Added some missing Russian translations (#348)
* CHANGED: Minor PHP refactoring: Rename PrivateBin class to Controller, improved logic of some persistence classes (#342)
* CHANGED: Upgrading DOMpurify library to 1.0.7
* FIXED: Ensure legacy browsers without webcrypto support can't create paste keys with insufficient entropy (#346)
* FIXED: Re-add support for old browsers (Firefox&lt;21, Chrome&lt;31, Safari&lt;7, IE&lt;11), broken in 1.2, will be removed again in 1.3
## 1.2 (2018-07-22)
* ADDED: Translations for Spanish, Occitan, Norwegian, Portuguese, Dutch and Hungarian
* ADDED: Option in configuration to change the default "PrivateBin" title of the site
* ADDED: Added display of video, audio & PDF, drag & drop, preview of attachments (#182)
* ADDED: QR code generation (#169)
* ADDED: Introduced DOMpurify library to sanitize generated HTML before display (#183)
* CHANGED: Force JSON request for getting paste data & password retry (#216)
* CHANGED: Minimum required PHP version is 5.4 (#186)
* CHANGED: Shipped .htaccess files were updated for Apache 2.4 (#192)
* CHANGED: Cleanup of bootstrap template variants and moved icons to `img` directory
* CHANGED: Removed option to hide clone button on expiring pastes, since this requires reading the paste for rendering the template, which leaks information on the pastes state
* CHANGED: Upgrading libraries to: SJCL 1.0.7, jQuery 3.3.1, Base64 2.4.5, Showdown 1.8.6, DOMpurify 1.0.5 & Prettify 453bd5f
* CHANGED: Refactored JavaScript code, making it modular with private and public functions, making it much easier to maintain (#178)
* FIXED: To counteract regressions introduced by the refactoring, we finally introduced property based unit testing for the JavaScript code, this caught several regressions, but also some very old bugs not found so far (#32)
## 1.1.1 (2017-10-06)
* CHANGED: Switched to `.php` file extension for configuration file, to avoid leaking configuration data in unprotected installation.
## 1.1 (2016-12-26)
* ADDED: Translations for Italian and Russian
* ADDED: Loading message displayed until decryption succeeded for slower (in terms of CPU or network) systems
* ADDED: Dockerfile for docker container creation
* CHANGED: Using modal dialog to request password input instead of native JS input window (#69)
* CHANGED: Suppressed referrer HTTP header sending when following links in a paste or comment (#96) and added additional HTTP headers for XSS mitigation (#91)
* CHANGED: Updated random_compat and jQuery libraries
* FIXED: XSS using JavaScript stored as markdown formatted paste, after clicking on Raw paste button (#137)
* FIXED: Automatic purging deleting non-expiring pastes, when using database store (#149)
## 1.0 (2016-08-25)
* ADDED: Translations for Slowene and Chinese
* ADDED: re-introduced (optional) URL shortener support, which was removed back in version 0.16 for privacy concerns
* ADDED: Preview tab, helpful for writing markdown code or check the source code rendering
* ADDED: Automatic purging of expired pastes, done on paste creation
* ADDED: Option to disable icons in discussions (will only affect newly created pastes)
* ADDED: Composer support
* CHANGED: Renamed the ZeroBin fork to PrivateBin
* CHANGED: Removed unmaintained RainTPL template engine, replacing the templates with straight forward PHP files
* CHANGED: New logo and favicons
* CHANGED: Upgrading SJCL library to 1.0.4
* CHANGED: Switched to GCM instead of CCM mode for AES encryption for newly created pastes
* CHANGED: Use backported random bytes function from PHP7 for older PHP versions instead of mcrypt
* CHANGED: Switched to a SHA256 HMAC of the IP in traffic limiter instead of storing it in plain text on the server
* CHANGED: Introduced content security policy header to reduce cross site scripting (XSS) risks
* CHANGED: Added SHA512 subresource integrity hashes for all javascript includes to reduce the risk of manipulated scripts and easier detection of such
* CHANGED: Refactored PHP code to conform to PSR-4 and PSR-2 standards
* CHANGED: Switched to Identicons as the default for comments with nicknames
* CHANGED: Vizhash is now optional and based on (128 byte) SHA512 HMAC instead of (144 byte) combination of MD5, SHA1 and a reversal of that string
* FIXED: Content-type negociation for HTML in certain uncommon browser configurations
* FIXED: JavaScript error displayed before page is loaded or during attachment load
* FIXED: Don't strip space characters at beginning or end of optional password
* FIXED: Various UI glitches in mobile version or on smaller desktops with language menu, button spacing and long URLs
* FIXED: Back button now works as expected after switching to raw text view of a paste
* FIXED: Reactivated second error message above send comment button to ensure its visibility when the main error message is outside the viewport
* FIXED: Raw text now displays original markdown instead of rendered HTML
* FIXED: Removed unused code detected with the help of various code review tools
* FIXED: Table format for PostgreSQL, making it possible to use PostgreSQL as backend in addition to MySQL, SQLite and flat files
## 0.22 (2015-11-09):
* ADDED: Tab character input support
* ADDED: Dark bootstrap theme
* ADDED: Option to hide clone button on expiring pastes
* ADDED: Option to set a different default language then English and/or enforce it as the only language
* ADDED: Database now contains version to allow automatic update of structure, only if necessary; removing database structure check on each request
* ADDED: Favicons
* FIXING: Regressions in database layer, prohibiting pastes from being stored
* FIXING: Fixing "missing" comments when they were posted during the same second to the same paste
* FIXING: JS failing when password input disabled
* CHANGED: Switching positions of "New" and "Send" button, highlighting the latter to improve workflow
* CHANGED: Renamed config file to make updates easier
* CHANGED: Switching to JSON-based REST-API
* CHANGED: Database structure to store attachments, allowing larger attachments to be stored (depending on maximum BLOB size of database backend)
* CHANGED: Refactored data model, traffic limiting & request handling
## 0.21.1 (2015-09-21):
* FIXING: lost meta data when using DB model instead of flat files
* FIXING: mobile navbar getting triggered on load
* CHANGED: database table "paste" gets automatically extended with a "meta" column
* CHANGED: navbar of "bootstrap" template now spans full width of view port on large screens
## 0.21 (2015-09-19):
* ADDED: Translations for German, French and Polish, language selection menu (optional)
* ADDED: File upload and image display support (optional)
* ADDED: Markdown format support
* ADDED: "bootstrap-compact" template that hides some of the options in a drop down menu to ensure the nav bar fitting on one line on smaller screen sizes
* FIXING: Various usability issues with different screen sizes / device types in the "bootstrap" template
* CHANGED: Instead of having different options to enable and preselect certain formats there is now a generic `[formatter_options]` section where formats can be added to the displayed format drop down menu. A `defaultformatter` can be set, it defaults to "plaintext". The `syntaxhighlighting` configuration got deprecated.
* `zerobin.js` got a major refactoring:
* moved from global namespace into anonymous function
* events are no longer set via "onclick" attributes in the templates, but bound by from JS side
* for simpler maintenance the functions were grouped into objects: zerobin (display logic, event handling), filter (compression,
encryption), i18n (translation, counterpart of i18n.php) and helper (stateless utilities)
* Wiki pages were added to address common topics:
* [Upgrading from ZeroBin 0.19 Alpha](https://github.com/PrivateBin/PrivateBin/wiki/Upgrading-from-ZeroBin-0.19-Alpha)
* [Directory of public PrivateBin servers](https://github.com/PrivateBin/PrivateBin/wiki/PrivateBin-Directory)
* [Translation](https://github.com/PrivateBin/PrivateBin/wiki/Translation)
* [Templates](https://github.com/PrivateBin/PrivateBin/wiki/Templates)
* **0.20 (2015-09-03)**:
* ADDED: Password protected pastes (optional)
* ADDED: configuration options for highlighting, password, discussions, expiration times, rate limiting
* ADDED: JSON-only retrieval of paste incl. discussion, used to be able to refresh paste when posting a comment
* ADDED: bootstrap CSS based template
* CHANGED: "Burn after reading" pastes are now deleted only after the paste was successfully decrypted via callback. This prevents accidental deletion by chatbots following URLs and the like. Usage of a password is suggested to ensure only the desired recipient is able to encrypt it.
* CHANGED: the "opendiscussion" option now only controls if the discussion checkbox is preselected. Use "discussion = false" to disable the discussion feature completely (which also removes the checkbox from the template).
* FIXING: Behaviour of several conflicting configuration options. As a general measure unit tests for 9 of the options and all their possible configurations were added via a unit test generator.
* updated JS libraries: jquery to 1.11.3, sjcl to 1.0.2, base64.js to 2.1.9, deflate to 0.5, inflate to 0.3 and prettify to latest
* generally improved documentation, both inline phpdoc / JSdoc source code documentation, as well as Wiki pages on installation, configuration, development and JSON-API
* **Alpha 0.19 (2013-07-05)**:
* Corrected XSS security flaw which affected IE<10. Other browsers were not affected.
* Corrected spacing display in IE<10.
* **Alpha 0.18 (2013-02-24)**:
* ADDED: The resulting URL is automatically selected after pressing "Send". You just have to press CTRL+C.
* ADDED: Automatic syntax highlighting for 53 languages using highlight.js
* ADDED: "5 minutes" and "1 week" expirations.
* ADDED: "Raw text" button.
* jQuery upgraded to 1.9.1
* sjcl upgraded to GitHub master 2013-02-23
* base64.js upgraded to 1.7
* FIXED: Dates in discussion are now proper local dates.
* ADDED: Robot meta tags in HTML to prevent search engines indexing.
* ADDED: Better json checking (including entropy).
* ADDED: Added version to js/css assets URLs in order to prevent some abusive caches to serve an obsolete version of these files when ZeroBin is upgraded.
* "Burn after reading" option has been moved out of Expiration combo to a separate checkbox. Reason is: You can prevent a read-once paste to be available ad vitam eternam on the net.
* **Alpha 0.17 (2013-02-23)**:
* ADDED: Deletion URL.
* small refactoring.
* improved regex checks.
* larger server alt on installation.
* **Alpha 0.16**:
* FIXED minor php warnings.
* FIXED: zerobin.js reformated and properly commented.
* FIXED: Directory structure re-organized.
* CHANGED: URL shortening button was removed. (It was bad for privacy.)
* **Alpha 0.15 (2012-04-20):**
* FIXED: 2 minor corrections to avoid notices in php log.
* FIXED: Sources converted to UTF-8.
* **Alpha 0.14 (2012-04-20):**
* ADDED: GD presence is checked.
* CHANGED: Traffic limiter data files moved to data/ (→easier rights management)
* ADDED: "Burn after reading" implemented. Opening the URL will display the paste and immediately destroy it on server.
* **Alpha 0.13 (2012-04-18):**
* FIXED: ''imageantialias()'' call removed because it's not really usefull and can be a problem on most hosts (if GD is not compiled in php).
* FIXED: $error not properly initialized in index.php
* **Alpha 0.12 (2012-04-18):**
* **DISCUSSIONS !** Now you can enable discussions on your pastes. Of course, posted comments and nickname are also encrypted and the server cannot see them.
* This feature implies a change in storage format. You will have to delete all previous pastes in your ZeroBin.
* Added [[php:vizhash_gd|Vizhash]] as avatars, so you can match posters IP addresses without revealing them. (Same image = same IP). Of course the IP address cannot be deduced from the Vizhash.
* Remaining time before expiration is now displayed.
* Explicit tags were added to CSS and jQuery selectors (eg. div#aaa instead of #aaa) to speed up browser.
* Better cleaning of the URL (to make sure the key is not broken by some stupid redirection service)
* **Alpha 0.11 (2012-04-12):**
* Automatically ignore parameters (such as &utm_source=...) added //after// the anchor by some stupid Web 2.0 services.
* First public release.
* **Alpha 0.10 (2012-04-12):**
* IE9 does not seem to correctly support ''pre-wrap'' either. Special handling mode activated for all version of IE<10. (Note: **ALL other browsers** correctly support this feature.)
* **Alpha 0.9 (2012-04-11):**
* Oh bummer... IE 8 is as shitty as IE6/7: Its does not seem to support ''white-space:pre-wrap'' correctly. I had to activate the special handling mode. I still have to test IE 9.
* **Alpha 0.8 (2012-04-11):**
* Source code not published yet.
* Interface completely redesigned. Icons added.
* Now properly supports IE6/7 (ugly display, but it works. "Clone" button is disabled though.)
* Added one level of depth for storage directories (This is better for higher load servers).
* php version is now checked (min: 5.2.6)
* Better checks on posted json data on server.
* Added "1 year" expiration.
* URLs are now converted to clickable links. This include http, https, ftp and magnet links.
* Clickable links include ''rel="nofollow"'' to discourage SEO.
* On my public service (http://sebsauvage.net/paste/)
* All data will be deleted (you were warned - this is a test service)
* Default paste expiration is now 1 month to prevent clogging-up my host.
* Wiki pages were added to address common topics:
* [Upgrading from ZeroBin 0.19 Alpha](https://github.com/PrivateBin/PrivateBin/wiki/Upgrading-from-ZeroBin-0.19-Alpha)
* [Directory of public PrivateBin servers](https://github.com/PrivateBin/PrivateBin/wiki/PrivateBin-Directory)
* [Translation](https://github.com/PrivateBin/PrivateBin/wiki/Translation)
* [Templates](https://github.com/PrivateBin/PrivateBin/wiki/Templates)
## 0.20 (2015-09-03):
* ADDED: Password protected pastes (optional)
* ADDED: configuration options for highlighting, password, discussions, expiration times, rate limiting
* ADDED: JSON-only retrieval of paste incl. discussion, used to be able to refresh paste when posting a comment
* ADDED: bootstrap CSS based template
* CHANGED: "Burn after reading" pastes are now deleted only after the paste was successfully decrypted via callback. This prevents accidental deletion by chatbots following URLs and the like. Usage of a password is suggested to ensure only the desired recipient is able to encrypt it.
* CHANGED: the "opendiscussion" option now only controls if the discussion checkbox is preselected. Use "discussion = false" to disable the discussion feature completely (which also removes the checkbox from the template).
* FIXING: Behaviour of several conflicting configuration options. As a general measure unit tests for 9 of the options and all their possible configurations were added via a unit test generator.
* updated JS libraries: jquery to 1.11.3, sjcl to 1.0.2, base64.js to 2.1.9, deflate to 0.5, inflate to 0.3 and prettify to latest
* generally improved documentation, both inline phpdoc / JSdoc source code documentation, as well as Wiki pages on installation, configuration, development and JSON-API
## Alpha 0.19 (2013-07-05):
* Corrected XSS security flaw which affected IE<10. Other browsers were not affected.
* Corrected spacing display in IE<10.
## Alpha 0.18 (2013-02-24):
* ADDED: The resulting URL is automatically selected after pressing "Send". You just have to press CTRL+C.
* ADDED: Automatic syntax highlighting for 53 languages using highlight.js
* ADDED: "5 minutes" and "1 week" expirations.
* ADDED: "Raw text" button.
* jQuery upgraded to 1.9.1
* sjcl upgraded to GitHub master 2013-02-23
* base64.js upgraded to 1.7
* FIXED: Dates in discussion are now proper local dates.
* ADDED: Robot meta tags in HTML to prevent search engines indexing.
* ADDED: Better json checking (including entropy).
* ADDED: Added version to js/css assets URLs in order to prevent some abusive caches to serve an obsolete version of these files when ZeroBin is upgraded.
* "Burn after reading" option has been moved out of Expiration combo to a separate checkbox. Reason is: You can prevent a read-once paste to be available ad vitam eternam on the net.
## Alpha 0.17 (2013-02-23):
* ADDED: Deletion URL.
* small refactoring.
* improved regex checks.
* larger server alt on installation.
## Alpha 0.16:
* FIXED minor php warnings.
* FIXED: zerobin.js reformated and properly commented.
* FIXED: Directory structure re-organized.
* CHANGED: URL shortening button was removed. (It was bad for privacy.)
## Alpha 0.15 (2012-04-20):
* FIXED: 2 minor corrections to avoid notices in php log.
* FIXED: Sources converted to UTF-8.
## Alpha 0.14 (2012-04-20):
* ADDED: GD presence is checked.
* CHANGED: Traffic limiter data files moved to data/ (→easier rights management)
* ADDED: "Burn after reading" implemented. Opening the URL will display the paste and immediately destroy it on server.
## Alpha 0.13 (2012-04-18):
* FIXED: ''imageantialias()'' call removed because it's not really usefull and can be a problem on most hosts (if GD is not compiled in php).
* FIXED: $error not properly initialized in index.php
## Alpha 0.12 (2012-04-18):
## DISCUSSIONS ! Now you can enable discussions on your pastes. Of course, posted comments and nickname are also encrypted and the server cannot see them.
* This feature implies a change in storage format. You will have to delete all previous pastes in your ZeroBin.
* Added [[php:vizhash_gd|Vizhash]] as avatars, so you can match posters IP addresses without revealing them. (Same image = same IP). Of course the IP address cannot be deduced from the Vizhash.
* Remaining time before expiration is now displayed.
* Explicit tags were added to CSS and jQuery selectors (eg. div#aaa instead of #aaa) to speed up browser.
* Better cleaning of the URL (to make sure the key is not broken by some stupid redirection service)
## Alpha 0.11 (2012-04-12):
* Automatically ignore parameters (such as &utm_source=...) added //after// the anchor by some stupid Web 2.0 services.
* First public release.
## Alpha 0.10 (2012-04-12):
* IE9 does not seem to correctly support ''pre-wrap'' either. Special handling mode activated for all version of IE<10. (Note: ALL other browsers correctly support this feature.)
## Alpha 0.9 (2012-04-11):
* Oh bummer... IE 8 is as shitty as IE6/7: Its does not seem to support ''white-space:pre-wrap'' correctly. I had to activate the special handling mode. I still have to test IE 9.
## Alpha 0.8 (2012-04-11):
* Source code not published yet.
* Interface completely redesigned. Icons added.
* Now properly supports IE6/7 (ugly display, but it works. "Clone" button is disabled though.)
* Added one level of depth for storage directories (This is better for higher load servers).
* php version is now checked (min: 5.2.6)
* Better checks on posted json data on server.
* Added "1 year" expiration.
* URLs are now converted to clickable links. This include http, https, ftp and magnet links.
* Clickable links include ''rel="nofollow"'' to discourage SEO.
* On my public service (http://sebsauvage.net/paste/)
* All data will be deleted (you were warned - this is a test service)
* Default paste expiration is now 1 month to prevent clogging-up my host.

View File

@ -29,9 +29,10 @@
* rodehoed - option to exempt ips from the rate-limiter
* Mark van Holsteijn - Google Cloud Storage backend
* Austin Huang - Oracle database support
* Felix J. Ogris - S3 Storage backend
* Felix J. Ogris - S3 Storage backend, script for data backend migrations, dropped singleton behaviour of data backends
* Mounir Idrassi & J. Mozdzen - secure YOURLS integration
* Felix J. Ogris - script for data backend migrations, dropped singleton behaviour of data backends
* 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
## Translations
* Hexalyse - French
@ -63,3 +64,6 @@
* Stevo984 - Slovak
* Christos Karamolegkos - Greek
* jaideejung007 - Thai
* Nicolas Le Gall - Japanese
* lazerns - Arabic
* Edward205 - Romanian

View File

@ -342,12 +342,11 @@ any theory of liability, whether in contract, strict liability, or tort
(including negligence or otherwise) arising in any way out of the use of this
software, even if advised of the possibility of such damage.
## MIT License for base64.js version 1.7, Bootstrap, Identicon, random_compat, Composer, kjua and base-x
## MIT License for base64.js version 1.7, Bootstrap, Identicon, Composer, kjua and base-x
Copyright © 2012 Dan Kogai
Copyright © 2011-2016 Twitter, Inc.
Copyright © 2013 Benjamin Laugueux <benjamin@yzalis.com>
Copyright © 2015 Paragon Initiative Enterprises
Copyright © 2016 Nils Adermann, Jordi Boggiano
Copyright © 2016 Lars Jung (https://larsjung.de)
Copyright © 2018 base-x contributors

View File

@ -1,8 +1,8 @@
.PHONY: all coverage coverage-js coverage-php doc doc-js doc-php increment sign test test-js test-php help
CURRENT_VERSION = 1.5.0
VERSION ?= 1.5.1
VERSION_FILES = index.php cfg/ *.md css/ i18n/ img/ js/package.json js/privatebin.js lib/ Makefile tpl/ tst/
CURRENT_VERSION = 1.7.1
VERSION ?= 1.7.2
VERSION_FILES = index.php bin/ cfg/ *.md doc/Installation.md css/ i18n/ img/ js/package.json js/privatebin.js lib/ Makefile tpl/ tst/
REGEX_CURRENT_VERSION := $(shell echo $(CURRENT_VERSION) | sed "s/\./\\\./g")
REGEX_VERSION := $(shell echo $(VERSION) | sed "s/\./\\\./g")
@ -17,8 +17,8 @@ coverage-js: ## Run JS unit tests and generate code coverage reports.
cd js && nyc mocha
coverage-php: ## Run PHP unit tests and generate code coverage reports.
cd tst && phpunit 2> /dev/null
cd tst/log/php-coverage-report && sed -i "s#$(CURDIR)##g" *.html */*.html
cd tst && XDEBUG_MODE=coverage phpunit 2> /dev/null
cd tst/log/php-coverage-report && sed -i "s#$(CURDIR)/##g" *.html */*.html
doc: doc-js doc-php ## Generate all code documentation.
@ -26,7 +26,7 @@ doc-js: ## Generate JS code documentation.
jsdoc -p -d doc/jsdoc js/privatebin.js js/legacy.js
doc-php: ## Generate JS code documentation.
phpdoc --visibility public,protected,private -t doc/phpdoc -d lib/
phpdoc --visibility=public,protected,private --target=doc/phpdoc --directory=lib/
increment: ## Increment and commit new version number, set target version using `make increment VERSION=1.2.3`.
for F in `grep -l -R $(REGEX_CURRENT_VERSION) $(VERSION_FILES) | grep -v -e tst/log/ -e ":0" -e CHANGELOG.md`; \
@ -38,7 +38,7 @@ increment: ## Increment and commit new version number, set target version using
git commit -m "incrementing version"
sign: ## Sign a release.
git tag $(VERSION)
git tag --sign --message "Release v$(VERSION)" $(VERSION)
git push origin $(VERSION)
signrelease.sh

View File

@ -1,6 +1,6 @@
# [![PrivateBin](https://cdn.rawgit.com/PrivateBin/assets/master/images/preview/logoSmall.png)](https://privatebin.info/)
*Current version: 1.5.0*
*Current version: 1.7.1*
**PrivateBin** is a minimalist, open source online
[pastebin](https://en.wikipedia.org/wiki/Pastebin)
@ -55,7 +55,7 @@ without losing any data.
paste (first) might still be disclosed via access logs.
- In case of a server breach your data is secure as it is only stored encrypted
on the server. However, the server could be absused or the server admin could
on the server. However, the server could be abused or the server admin could
be legally forced into sending malicious code to their users, which logs
the decryption key and sends it to a server when a user accesses a paste.
Therefore, do not access any PrivateBin instance if you think it has been
@ -96,7 +96,7 @@ file](https://github.com/PrivateBin/PrivateBin/wiki/Configuration):
* [FAQ](https://github.com/PrivateBin/PrivateBin/wiki/FAQ)
* [Installation guide](https://github.com/PrivateBin/PrivateBin/blob/master/INSTALL.md#installation)
* [Installation guide](https://github.com/PrivateBin/PrivateBin/blob/master/doc/Installation.md#installation)
* [Configuration guide](https://github.com/PrivateBin/PrivateBin/wiki/Configuration)

View File

@ -4,8 +4,8 @@
| Version | Supported |
| ------- | ------------------ |
| 1.5.0 | :heavy_check_mark: |
| < 1.5.0 | :x: |
| 1.7.1 | :heavy_check_mark: |
| < 1.7.1 | :x: |
## Reporting a Vulnerability

333
bin/administration Executable file
View File

@ -0,0 +1,333 @@
#!/usr/bin/env php
<?php
/**
* PrivateBin
*
* a zero-knowledge paste bin
*
* @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.7.1
*/
namespace PrivateBin;
use Exception;
use PrivateBin\Configuration;
use PrivateBin\Data\AbstractData;
use PrivateBin\Model\Paste;
define('PATH', dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR);
require PATH . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
/**
* Administration
*
* Command line utility for administrative tasks.
*/
class Administration
{
/**
* configuration
*
* @access private
* @var Configuration
*/
private $_conf;
/**
* options, parsed from the command line arguments
*
* @access private
* @var array
*/
private $_opts = array();
/**
* data storage model
*
* @access private
* @var AbstractData
*/
private $_store;
/**
* deletes the requested paste ID, if a valid ID and it exists
*
* @access private
* @param string $pasteId
*/
private function _delete($pasteId)
{
if (!Paste::isValidId($pasteId)) {
self::_error('given ID is not a valid paste ID (16 hexadecimal digits)', 5);
}
if (!$this->_store->exists($pasteId)) {
self::_error('given ID does not exist, has expired or was already deleted', 6);
}
$this->_store->delete($pasteId);
if ($this->_store->exists($pasteId)) {
self::_error('paste ID exists after deletion, permission problem?', 7);
}
exit("paste $pasteId successfully deleted" . PHP_EOL);
}
/**
* removes empty directories, if current storage model uses Filesystem
*
* @access private
*/
private function _empty_dirs()
{
if ($this->_conf->getKey('class', 'model') !== 'Filesystem') {
self::_error('instance not using Filesystem storage, no directories to empty', 4);
}
$dir = $this->_conf->getKey('dir', 'model_options');
passthru("find $dir -type d -empty -delete", $code);
exit($code);
}
/**
* display a message on STDERR and exits
*
* @access private
* @static
* @param string $message
* @param int $code optional, defaults to 1
*/
private static function _error($message, $code = 1)
{
self::_error_echo($message);
exit($code);
}
/**
* display a message on STDERR
*
* @access private
* @static
* @param string $message
*/
private static function _error_echo($message)
{
fwrite(STDERR, 'Error: ' . $message . PHP_EOL);
}
/**
* display usage help on STDOUT and exits
*
* @access private
* @static
* @param int $code optional, defaults to 0
*/
private static function _help($code = 0)
{
echo <<<'EOT'
Usage:
administration [--delete <paste id> | --empty-dirs | --help | --purge | --statistics]
Options:
-d, --delete deletes the requested paste ID
-e, --empty-dirs removes empty directories (only if Filesystem storage is
configured)
-h, --help displays this help message
-p, --purge purge all expired pastes
-s, --statistics reads all stored pastes and comments and reports statistics
EOT, PHP_EOL;
exit($code);
}
/**
* return option for given short or long keyname, if it got set
*
* @access private
* @static
* @param string $short
* @param string $long
* @return string|null
*/
private function _option($short, $long)
{
foreach (array($short, $long) as $key) {
if (array_key_exists($key, $this->_opts)) {
return $this->_opts[$key];
}
}
return null;
}
/**
* initialize options from given argument array
*
* @access private
* @static
* @param array $arguments
*/
private function _options_initialize($arguments)
{
if ($arguments > 3) {
self::_error_echo('too many arguments given');
echo PHP_EOL;
self::_help(1);
}
if ($arguments < 2) {
self::_error_echo('missing arguments');
echo PHP_EOL;
self::_help(2);
}
$this->_opts = getopt('hd:eps', array('help', 'delete:', 'empty-dirs', 'purge', 'statistics'));
if (!$this->_opts) {
self::_error_echo('unsupported arguments given');
echo PHP_EOL;
self::_help(3);
}
}
/**
* reads all stored pastes and comments and reports statistics
*
* @access public
*/
private function _statistics()
{
$counters = array(
'burn' => 0,
'damaged' => 0,
'discussion' => 0,
'expired' => 0,
'md' => 0,
'percent' => 1,
'plain' => 0,
'progress' => 0,
'syntax' => 0,
'total' => 0,
'unknown' => 0,
);
$time = time();
$ids = $this->_store->getAllPastes();
$counters['total'] = count($ids);
$dots = $counters['total'] < 100 ? 10 : (
$counters['total'] < 1000 ? 50 : 100
);
$percentages = $counters['total'] < 100 ? 0 : (
$counters['total'] < 1000 ? 4 : 10
);
echo "Total:\t\t\t{$counters['total']}", PHP_EOL;
foreach ($ids as $pasteid) {
try {
$paste = $this->_store->read($pasteid);
} catch (Exception $e) {
echo "Error reading paste {$pasteid}: ", $e->getMessage(), PHP_EOL;
++$counters['damaged'];
}
++$counters['progress'];
if (
array_key_exists('expire_date', $paste['meta']) &&
$paste['meta']['expire_date'] < $time
) {
++$counters['expired'];
}
if (array_key_exists('adata', $paste)) {
$format = $paste['adata'][1];
$discussion = $paste['adata'][2];
$burn = $paste['adata'][3];
} else {
$format = array_key_exists('formatter', $paste['meta']) ? $paste['meta']['formatter'] : 'plaintext';
$discussion = array_key_exists('opendiscussion', $paste['meta']) ? $paste['meta']['opendiscussion'] : false;
$burn = array_key_exists('burnafterreading', $paste['meta']) ? $paste['meta']['burnafterreading'] : false;
}
if ($format === 'plaintext') {
++$counters['plain'];
} elseif ($format === 'syntaxhighlighting') {
++$counters['syntax'];
} elseif ($format === 'markdown') {
++$counters['md'];
} else {
++$counters['unknown'];
}
$counters['discussion'] += (int) $discussion;
$counters['burn'] += (int) $burn;
// display progress
if ($counters['progress'] % $dots === 0) {
echo '.';
if ($percentages) {
$progress = $percentages / $counters['total'] * $counters['progress'];
if ($progress >= $counters['percent']) {
printf(' %d%% ', 100 / $percentages * $progress);
++$counters['percent'];
}
}
}
}
echo PHP_EOL, <<<EOT
Expired:\t\t{$counters['expired']}
Burn after reading:\t{$counters['burn']}
Discussions:\t\t{$counters['discussion']}
Plain Text:\t\t{$counters['plain']}
Source Code:\t\t{$counters['syntax']}
Markdown:\t\t{$counters['md']}
EOT, PHP_EOL;
if ($counters['damaged'] > 0) {
echo "Damaged:\t\t{$counters['damaged']}", PHP_EOL;
}
if ($counters['unknown'] > 0) {
echo "Unknown format:\t\t{$counters['unknown']}", PHP_EOL;
}
}
/**
* constructor
*
* initializes and runs administrative tasks
*
* @access public
*/
public function __construct()
{
$this->_options_initialize($_SERVER['argc']);
if ($this->_option('h', 'help') !== null) {
self::_help();
}
$this->_conf = new Configuration;
if ($this->_option('e', 'empty-dirs') !== null) {
$this->_empty_dirs();
}
$class = 'PrivateBin\\Data\\' . $this->_conf->getKey('class', 'model');
$this->_store = new $class($this->_conf->getSection('model_options'));
if (($pasteId = $this->_option('d', 'delete')) !== null) {
$this->_delete($pasteId);
}
if ($this->_option('p', 'purge') !== null) {
try {
$this->_store->purge(PHP_INT_MAX);
} catch (Exception $e) {
echo 'Error purging pastes: ', $e->getMessage(), PHP_EOL,
'Run the statistics to find damaged paste IDs and either delete them or restore them from backup.', PHP_EOL;
}
exit('purging of expired pastes concluded' . PHP_EOL);
}
if ($this->_option('s', 'statistics') !== null) {
$this->_statistics();
}
}
}
new Administration();

View File

@ -23,7 +23,7 @@ new ConfigurationTestGenerator(array(
'tests' => array(
array(
'conditions' => array('steps' => $vd),
'type' => 'RegExp',
'type' => 'MatchesRegularExpression',
'args' => array(
'#<div[^>]*id="opendiscussionoption"[^>]*>#',
'$content',
@ -53,7 +53,7 @@ new ConfigurationTestGenerator(array(
'setting' => false,
'tests' => array(
array(
'type' => 'NotRegExp',
'type' => 'DoesNotMatchRegularExpression',
'args' => array(
'#<div[^>]*id="opendiscussionoption"[^>]*>#',
'$content',
@ -70,7 +70,7 @@ new ConfigurationTestGenerator(array(
'tests' => array(
array(
'conditions' => array('main/discussion' => true),
'type' => 'RegExp',
'type' => 'MatchesRegularExpression',
'args' => array(
'#<input[^>]+id="opendiscussion"[^>]*checked="checked"[^>]*>#',
'$content',
@ -84,7 +84,7 @@ new ConfigurationTestGenerator(array(
'tests' => array(
array(
'conditions' => array('main/discussion' => true),
'type' => 'NotRegExp',
'type' => 'DoesNotMatchRegularExpression',
'args' => array(
'#<input[^>]+id="opendiscussion"[^>]*checked="checked"[^>]*>#',
'$content',
@ -100,7 +100,7 @@ new ConfigurationTestGenerator(array(
'setting' => true,
'tests' => array(
array(
'type' => 'RegExp',
'type' => 'MatchesRegularExpression',
'args' => array(
'#<input[^>]+id="burnafterreading"[^>]*checked="checked"[^>]*>#',
'$content',
@ -113,7 +113,7 @@ new ConfigurationTestGenerator(array(
'setting' => false,
'tests' => array(
array(
'type' => 'NotRegExp',
'type' => 'DoesNotMatchRegularExpression',
'args' => array(
'#<input[^>]+id="burnafterreading"[^>]*checked="checked"[^>]*>#',
'$content',
@ -129,7 +129,7 @@ new ConfigurationTestGenerator(array(
'setting' => true,
'tests' => array(
array(
'type' => 'RegExp',
'type' => 'MatchesRegularExpression',
'args' => array(
'#<div[^>]*id="password"[^>]*>#',
'$content',
@ -143,7 +143,7 @@ new ConfigurationTestGenerator(array(
'tests' => array(
array(
'conditions' => array('main/discussion' => true),
'type' => 'NotRegExp',
'type' => 'DoesNotMatchRegularExpression',
'args' => array(
'#<div[^>]*id="password"[^>]*>#',
'$content',
@ -159,14 +159,14 @@ new ConfigurationTestGenerator(array(
'setting' => 'page',
'tests' => array(
array(
'type' => 'RegExp',
'type' => 'MatchesRegularExpression',
'args' => array(
'#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/privatebin\.css\\?\d[\d\.]+\d+"[^>]*/>#',
'$content',
'outputs "page" stylesheet correctly',
),
), array(
'type' => 'NotRegExp',
'type' => 'DoesNotMatchRegularExpression',
'args' => array(
'#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/bootstrap/bootstrap-\d[\d\.]+\d\.css"[^>]*/>#',
'$content',
@ -179,14 +179,14 @@ new ConfigurationTestGenerator(array(
'setting' => 'bootstrap',
'tests' => array(
array(
'type' => 'NotRegExp',
'type' => 'DoesNotMatchRegularExpression',
'args' => array(
'#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/privatebin\.css\\?\d[\d\.]+\d+"[^>]*/>#',
'$content',
'removes "page" stylesheet correctly',
),
), array(
'type' => 'RegExp',
'type' => 'MatchesRegularExpression',
'args' => array(
'#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/bootstrap/bootstrap-\d[\d\.]+\d\.css"[^>]*/>#',
'$content',
@ -361,7 +361,7 @@ class ConfigurationTestGenerator
}
// skip if not all test conditions are met
if (array_key_exists('conditions', $test)) {
while (list($path, $setting) = each($test['conditions'])) {
foreach ($test['conditions'] as $path => $setting) {
if ($path == 'steps' && !in_array($step, $setting)) {
continue 2;
} elseif ($path != 'steps') {
@ -410,13 +410,14 @@ class ConfigurationTestGenerator
* DO NOT EDIT: This file is generated automatically using configGenerator.php
*/
use PHPUnit\Framework\TestCase;
use PrivateBin\Controller;
use PrivateBin\Data\Filesystem;
use PrivateBin\Persistence\ServerSalt;
use PrivateBin\Persistence\TrafficLimiter;
use PrivateBin\Request;
class ConfigurationCombinationsTest extends PHPUnit_Framework_TestCase
class ConfigurationCombinationsTest extends TestCase
{
private $_conf;
@ -424,7 +425,7 @@ class ConfigurationCombinationsTest extends PHPUnit_Framework_TestCase
private $_path;
public function setUp()
public function setUp(): void
{
/* Setup Routine */
Helper::confBackup();
@ -435,7 +436,7 @@ class ConfigurationCombinationsTest extends PHPUnit_Framework_TestCase
$this->reset();
}
public function tearDown()
public function tearDown(): void
{
/* Tear Down Routine */
unlink(CONF);
@ -564,7 +565,7 @@ EOT;
case 'Delete':
$code .= <<<'EOT'
$this->assertRegExp(
$this->assertMatchesRegularExpression(
'#<div[^>]*id="status"[^>]*>.*Paste was properly deleted[^<]*</div>#s',
$content,
'outputs deleted status correctly'
@ -590,8 +591,9 @@ EOT;
return $this->_configurations;
}
echo "generateConfigurations: iteration $this->_iterationCount", PHP_EOL;
$continue = list($path, $settings) = each($this->_options);
if ($continue === false) {
$path = key($this->_options);
$settings = current($this->_options);
if (next($this->_options) === false) {
return $this->_configurations;
}
list($section, $option) = explode('/', $path);

View File

@ -17,13 +17,14 @@ if (version_compare(PHP_VERSION, '7.1.0') < 0) {
$longopts = array(
"delete-after",
"delete-during"
"delete-during",
"help"
);
$opts_arr = getopt("fhnv", $longopts, $rest);
if ($opts_arr === false) {
dieerr("Erroneous command line options. Please use -h");
dieerr("Erroneous command line options. Please use --help");
}
if (array_key_exists("h", $opts_arr)) {
if (array_key_exists("h", $opts_arr) || array_key_exists("help", $opts_arr)) {
helpexit();
}
@ -173,12 +174,12 @@ function debug ($text) {
function helpexit ()
{
print("migrate.php - Copy data between PrivateBin backends
print("migrate - Copy data between PrivateBin backends
Usage:
migrate [--delete-after] [--delete-during] [-f] [-n] [-v] srcconfdir
[<dstconfdir>]
migrate [-h]
migrate [-h|--help]
Options:
--delete-after delete data from source after all pastes and comments have
@ -187,6 +188,7 @@ Options:
comments have successfully been copied to the destination
-f forcefully overwrite data which already exists at the
destination
-h, --help displays this help message
-n dry run, do not copy data
-v be verbose
<srcconfdir> use storage backend configration from conf.php found in

View File

@ -65,6 +65,10 @@ languageselection = false
; It works both when a new paste is created and when you view a paste.
; qrcode = true
; (optional) Let users send an email sharing the paste URL with one click.
; It works both when a new paste is created and when you view a paste.
; email = true
; (optional) IP based icons are a weak mechanism to detect if a comment was from
; a different user when the same username was used in a comment. It might get
; used to get the IP of a comment poster if the server salt is leaked and a
@ -230,6 +234,19 @@ dir = PATH "data"
;accesskey = "access key id"
;secretkey = "secret access key"
;[model]
; example of S3 configuration for AWS using its SDK default credential provider chain
; if relying on environment variables, the AWS SDK will look for the following:
; - AWS_ACCESS_KEY_ID
; - AWS_SECRET_ACCESS_KEY
; - AWS_SESSION_TOKEN (if needed)
; for more details, see https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html#default-credential-chain
;class = S3Storage
;[model_options]
;region = "eu-central-1"
;version = "latest"
;bucket = "my-bucket"
[yourls]
; When using YOURLS as a "urlshortener" config item:
; - By default, "urlshortener" will point to the YOURLS API URL, with or without
@ -237,8 +254,8 @@ dir = PATH "data"
; Only use this if you allow short URL creation without credentials.
; - Alternatively, using the parameters in this section ("signature" and
; "apiurl"), "urlshortener" needs to point to the base URL of your PrivateBin
; instance with "shortenviayourls?link=" appended. For example:
; urlshortener = "${basepath}shortenviayourls?link="
; instance with "?shortenviayourls&link=" appended. For example:
; urlshortener = "${basepath}?shortenviayourls&link="
; This URL will in turn call YOURLS on the server side, using the URL from
; "apiurl" and the "access signature" from the "signature" parameters below.

View File

@ -24,18 +24,17 @@
"docs" : "https://privatebin.info/codedoc/"
},
"require" : {
"php" : "^5.6.0 || ^7.0 || ^8.0",
"paragonie/random_compat" : "2.0.21",
"yzalis/identicon" : "2.0.0",
"mlocati/ip-lib" : "1.18.0",
"jdenticon/jdenticon": "^1.0"
"php": "^7.3 || ^8.0",
"jdenticon/jdenticon": "1.0.2",
"mlocati/ip-lib": "1.18.0",
"yzalis/identicon": "2.0.0"
},
"suggest" : {
"google/cloud-storage" : "1.26.1",
"aws/aws-sdk-php" : "3.239.0"
"google/cloud-storage" : "1.32.0",
"aws/aws-sdk-php" : "3.275.1"
},
"require-dev" : {
"phpunit/phpunit" : "^4.6 || ^5.0"
"phpunit/phpunit" : "^9"
},
"autoload" : {
"psr-4" : {
@ -43,6 +42,12 @@
}
},
"config" : {
"autoloader-suffix" : "DontChange"
"autoloader-suffix" : "DontChange",
"optimize-autoloader": true,
"preferred-install": "dist",
"sort-packages": true,
"platform": {
"php": "7.3"
}
}
}

1634
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@
* @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.5.0
* @version 1.7.1
*/
body {
@ -113,6 +113,7 @@ body.loading {
#qrcodemodalClose {
float: right;
}
#qrcode-display {
width: 200px;
height: 200px;
@ -205,3 +206,23 @@ li.L0, li.L1, li.L2, li.L3, li.L5, li.L6, li.L7, li.L8 {
.modal .modal-content button {
margin: 0.5em 0;
}
/* right-to-left overrides */
html[dir="rtl"] .checkbox label {
padding-left: inherit;
padding-right: 20px;
}
html[dir="rtl"] .checkbox input[type="checkbox"] {
margin-left: inherit;
margin-right: -20px;
}
html[dir="rtl"] #language {
margin-left: inherit;
margin-right: 8px;
}
html[dir="rtl"] #deletelink, html[dir="rtl"] #qrcodemodalClose {
float: left;
}

View File

@ -6,7 +6,7 @@
* @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.5.0
* @version 1.7.1
*/
/* When there is no script at all other */

View File

@ -6,7 +6,7 @@
* @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.5.0
* @version 1.7.1
*/
/* CSS Reset from YUI 3.4.1 (build 4118) - Copyright 2011 Yahoo! Inc. All rights reserved.
@ -261,6 +261,7 @@ button img {
#newbutton {
float: right;
margin-left: 0;
margin-right: 0;
margin-bottom: 5px;
display: inline;
@ -488,3 +489,17 @@ img.vizhash {
#cleartext h3 {
font-size: 1.2em;
}
/* right-to-left overrides */
html[dir="rtl"] #aboutbox, html[dir="rtl"] #deletelink, html[dir="rtl"] #newbutton {
float: left;
}
html[dir="rtl"] button, html[dir="rtl"] .button, html[dir="rtl"] button img {
margin-left: 5px;
margin-right: inherit;
}
html[dir="rtl"] button img {
margin-left: 8px;
}

View File

@ -0,0 +1,59 @@
# Generating Source Code Documentation
## Generating PHP documentation
In order to generate the documentation, you will need to install the following
packages and its dependencies:
* phpdoc
* graphviz
Details about
[installing phpDocumentor](https://phpdoc.org/docs/latest/getting-started/installing.html)
can be found in that projects documentation.
Example for Debian and Ubuntu:
```console
$ sudo apt install php-pear graphviz
$ sudo pear channel-discover pear.phpdoc.org
$ sudo pear install phpdoc/phpDocumentor
```
To generate the documentation, change into the main directory and run phpdoc:
```console
$ cd PrivateBin
$ phpdoc --visibility=public,protected,private --target=doc/phpdoc --directory=lib/
```
**Note:** When used with PHP 7, the prerelease of phpDocumentator 2.9 needs to be
manually installed by downloading it from
[GitHub](https://github.com/phpDocumentor/phpDocumentor2/releases/download/v2.9.0/phpDocumentor.phar)
and then manually moving it to e.g. `/usr/local/bin` and making it executable.
## Generating JS documentation
In order to generate the documentation, you will need to install the following
packages and its dependencies:
* npm
Then you can use the node package manager to install the latest stable release
of jsdoc globally:
```console
$ npm install -g jsdoc
```
Example for Debian and Ubuntu, including steps to allow current user to install
node modules globally:
```console
$ sudo apt install npm
$ sudo mkdir /usr/local/lib/node_modules
$ sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
$ npm install -g jsdoc
$ ln -s /usr/bin/nodejs /usr/local/bin/node
```
To generate the documentation, change into the main directory and run phpdoc:
```console
$ cd PrivateBin
$ jsdoc -p -d doc/jsdoc js/privatebin.js js/legacy.js
```

View File

@ -1,6 +1,8 @@
# Installation
**TL;DR:** Download the
## TL;DR
Download the
[latest release archive](https://github.com/PrivateBin/PrivateBin/releases/latest)
(with the link labelled as "Source code (…)") and extract it in your web hosts
folder where you want to install your PrivateBin instance. We try to provide a
@ -11,21 +13,15 @@ mostly safe default configuration, but we urge you to check the
**NOTE:** See our [FAQ entry on securely downloading release files](https://github.com/PrivateBin/PrivateBin/wiki/FAQ#how-can-i-securely-clonedownload-your-project)
for more information.
**NOTE:** There is a [ansible](https://ansible.com) role by @e1mo available to
install and configure PrivateBin on your server. It's available on
[ansible galaxy](https://galaxy.ansible.com/e1mo/privatebin)
([source code](https://git.sr.ht/~e1mo/ansible-role-privatebin)).
**NOTE:** There are Ansible roles available for installing and configuring PrivateBin on your server. You can choose from the following options:
- [Podman Rootless - PrivateBin by @voidquark](https://galaxy.ansible.com/ui/standalone/roles/voidquark/privatebin/) ([Github source code](https://github.com/voidquark/privatebin)): Simplifies the deployment and management of a secure PrivateBin service using a rootless Podman container. Key features include root-less deployment, ensuring security within a user namespace, idempotent deployment for consistent state, out-of-the-box setup for Red Hat systems, and the flexibility to customize PrivateBin configurations. It has been tested on EL9.
- [Config Configuration - PrivateBin by @e1mo](https://galaxy.ansible.com/ui/standalone/roles/e1mo/privatebin/) ([Github source code](https://git.sr.ht/~e1mo/ansible-role-privatebin)): Deploy PrivateBin configuration to disk with a customized configuration.
### Minimal Requirements
- PHP version 7.0 or above
- Or PHP version 5.6 AND _one_ of the following sources of cryptographically
safe randomness:
- [Libsodium](https://download.libsodium.org/libsodium/content/installation/)
and it's [PHP extension](https://paragonie.com/book/pecl-libsodium/read/00-intro.md#installing-libsodium)
- `open_basedir` access to `/dev/urandom`
- mcrypt extension AND `open_basedir` access to `/dev/urandom`
- com_dotnet extension
- PHP version 7.3 or above
- GD extension (when using identicon or vizhash icons, jdenticon works without it)
- zlib extension
- some disk space or a database supported by [PDO](https://php.net/manual/book.pdo.php)
@ -63,7 +59,7 @@ accessible to your webserver and PHP process (see also
In situations where you want to keep the PrivateBin static files separate from the
rest of your data, or you want to reuse the installation files on multiple vhosts,
you may only want to change the `conf.php`. In this case, you can set the
`CONFIG_PATH` environment variable to the absolute path to the `conf.php` file.
`CONFIG_PATH` environment variable to the absolute path to the directory containing the `conf.php` file.
This can be done in your web server's virtual host config, the PHP config, or in
the index.php, if you choose to customize it.
@ -72,13 +68,13 @@ wherever it may be.
> #### CONFIG_PATH example
> Setting the value in an Apache Vhost:
> SetEnv CONFIG_PATH /var/lib/privatebin/conf.php
> SetEnv CONFIG_PATH /var/lib/privatebin/
>
> In a php-fpm pool config:
> env[CONFIG_PATH] = /var/lib/privatebin/conf.php
> env[CONFIG_PATH] = /var/lib/privatebin/
>
> In the index.php, near the top:
> putenv('CONFIG_PATH=/var/lib/privatebin/conf.php');
> putenv('CONFIG_PATH=/var/lib/privatebin/');
### Transport security
@ -205,7 +201,7 @@ CREATE INDEX parent ON prefix_comment(pasteid);
CREATE TABLE prefix_config (
id CHAR(16) NOT NULL, value TEXT, PRIMARY KEY (id)
);
INSERT INTO prefix_config VALUES('VERSION', '1.5.0');
INSERT INTO prefix_config VALUES('VERSION', '1.7.1');
```
In **PostgreSQL**, the `data`, `attachment`, `nickname` and `vizhash` columns
@ -217,11 +213,30 @@ to be `CLOB` and not `BLOB` or `MEDIUMBLOB`, the `id` column in the `config`
table needs to be `VARCHAR2(16)` and the `meta` column in the `paste` table
and the `value` column in the `config` table need to be `VARCHAR2(4000)`.
### Cloud Storage Backends
Due to the large size of the respective cloud SDKs required for these, we didn't
include these in the `vendor` directory shipped in our release archives. To use
these in your manual installation, you will need [composer installed](https://getcomposer.org/)
and require the used library (see instructions below).
This is not required if using the dedicated container images that have these SDKs
preinstalled.
#### Using Google Cloud Storage
If you want to deploy PrivateBin in a serverless manner in the Google Cloud, you
can choose the `GoogleCloudStorage` as backend. To use this backend, you create
a GCS bucket and specify the name as the model option `bucket`. Alternatively,
you can set the name through the environment variable `PRIVATEBIN_GCS_BUCKET`.
can choose the `GoogleCloudStorage` as backend.
To use this backend, you first have to install the SDK from the installation
directory of PrivateBin:
```console
composer require --no-update google/cloud-storage
composer update --no-dev --optimize-autoloader
```
You have to create a GCS bucket and specify the name as the model option `bucket`.
Alternatively, you can set the name through the environment variable `PRIVATEBIN_GCS_BUCKET`.
The default prefix for pastes stored in the bucket is `pastes`. To change the
prefix, specify the option `prefix`.
@ -230,15 +245,20 @@ Google Cloud Storage buckets may be significantly slower than a `FileSystem` or
`Database` backend. The big advantage is that the deployment on Google Cloud
Platform using Google Cloud Run is easy and cheap.
To use the Google Cloud Storage backend you have to install the suggested
library using the command `composer require google/cloud-storage`.
#### Using S3 Storage
Similar to Google Cloud Storage, you can choose S3 as storage backend. It uses
the AWS SDK for PHP, but can also talk to a Rados gateway as part of a CEPH
cluster. To use this backend, you first have to install the SDK in the
document root of PrivateBin: `composer require aws/aws-sdk-php`. You have to
create the S3 bucket on the CEPH cluster before using the S3 backend.
the AWS SDK for PHP, but can also talk to a Rados gateway as part of a Ceph
cluster.
To use this backend, you first have to install the SDK from the installation
directory of PrivateBin:
```console
composer require --no-update aws/aws-sdk-php
composer update --no-dev --optimize-autoloader
```
You have to create an S3 bucket on the Ceph cluster before using the S3 backend.
In the `[model]` section of cfg/conf.php, set `class` to `S3Storage`.
@ -260,7 +280,7 @@ data beneath this prefix.
For AWS, you have to provide at least `region`, `bucket`, `accesskey`, and
`secretkey`.
For CEPH, follow this example:
For Ceph, follow this example:
```
region = ""

View File

@ -1,60 +1,37 @@
Generating PHP documentation
============================
# PrivateBin Documentation
In order to generate the documentation, you will need to install the following
packages and its dependencies:
* phpdoc
* graphviz
## [Frequently Asked Questions](https://github.com/PrivateBin/PrivateBin/wiki/FAQ)
Details about
[installing phpDocumentor](https://phpdoc.org/docs/latest/getting-started/installing.html)
can be found in that projects documentation.
Please have a look at these questions *before* opening an issue in this repo.
Example for Debian and Ubuntu:
```console
$ sudo apt install php-pear graphviz
$ sudo pear channel-discover pear.phpdoc.org
$ sudo pear install phpdoc/phpDocumentor
```
## [Installation guide](https://github.com/PrivateBin/PrivateBin/blob/master/doc/Installation.md#installation)
To generate the documentation, change into the main directory and run phpdoc:
```console
$ cd PrivateBin
$ phpdoc --visibility public,protected,private -t doc/phpdoc -d lib/
```
Minimal requirements, hardening and securing your installation and initial
configuration.
**Note:** When used with PHP 7, the prerelease of phpDocumentator 2.9 needs to be
manually installed by downloading it from
[GitHub](https://github.com/phpDocumentor/phpDocumentor2/releases/download/v2.9.0/phpDocumentor.phar)
and then manually moving it to e.g. `/usr/local/bin` and making it executable.
## [Configuration guide](https://github.com/PrivateBin/PrivateBin/wiki/Configuration)
Generating JS documentation
============================
Detailed guide on each configuration option and their effects.
In order to generate the documentation, you will need to install the following
packages and its dependencies:
* npm
## [Templates](https://github.com/PrivateBin/PrivateBin/wiki/Templates)
Then you can use the node package manager to install the latest stable release
of jsdoc globally:
How to change an existing template or create your own, as well as an overview of
the currently included templates.
```console
$ npm install -g jsdoc
```
## [Translation guide](https://github.com/PrivateBin/PrivateBin/wiki/Translation)
Example for Debian and Ubuntu, including steps to allow current user to install
node modules globally:
```console
$ sudo apt install npm
$ sudo mkdir /usr/local/lib/node_modules
$ sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
$ npm install -g jsdoc
$ ln -s /usr/bin/nodejs /usr/local/bin/node
```
How to help translate PrivateBin and technical background on it's implementation.
To generate the documentation, change into the main directory and run phpdoc:
```console
$ cd PrivateBin
$ jsdoc -p -d doc/jsdoc js/privatebin.js js/legacy.js
```
## [Developer guide](https://github.com/PrivateBin/PrivateBin/wiki/Development)
Know how for participating in PrivateBins development.
### [Generating Source Code Documentation](https://github.com/PrivateBin/PrivateBin/blob/master/doc/Generating%20Source%20Code%20Documentation.md#generating-source-code-documentation)
How to generate the source code API documentation, as found on the project
website for [PHP](https://privatebin.info/codedoc/) and [JS](https://privatebin.info/jsdoc/)
### [Running Unit Tests](https://github.com/PrivateBin/PrivateBin/blob/master/doc/Running Unit Tests.md#running-all-unit-tests)
How to run the PHP & JS unit tests, including a brief introduction to property
based unit testing.

44
doc/Release.md Normal file
View File

@ -0,0 +1,44 @@
# Release
## Overview of Supply-Chain Security
As of the PrivateBin 1.0 release we [cryptographically sign](https://git-scm.com/book/uz/v2/Git-Tools-Signing-Your-Work) our git commits and tags, so that you can verify we actually developed the software. Later, we also [started signing the release archives on GitHub](https://github.com/PrivateBin/PrivateBin/issues/219) and retroactively signed all releases from 1.0 forward.
Since [release 1.6.2](https://github.com/PrivateBin/PrivateBin/releases/tag/1.6.2) our release assets additionally also are [verified with the SLSA (Supply-chain Levels for Software Artifacts) framework](https://slsa.dev/), providing an in-toto manifest of the release archive.
This achieves the following:
1. It ensures no maintainer has gone rogue and has modified/tampered with the source code before “building” the release.
2. It ensures the release is build exactly according to the source as defined by the branch that was used for the release.
This includes the workflow file defining how the release is done itself.
3. Our release should achieve [SLSA build level 3](https://slsa.dev/spec/v1.0/levels#build-l3) as it [runs on GitHub](https://slsa.dev/spec/v1.0/threats). Some more properties [are thus achieved](https://slsa.dev/spec/v1.0/threats).
For more information [see the corresponding issue](https://github.com/PrivateBin/PrivateBin/issues/1169) and [the GitHub workflow file](/.github/workflows/release.yml).
## Reproducible builds
All releases `.tar.gz` and `.zip` archives since 1.0 come with corresponding `.asc` signatures that can be used to confirm the authenticity of the fact that the release has been issued by a PrivateBin maintainer.
This uses traditional [PGP](https://en.wikipedia.org/wiki/Pretty_Good_Privacy) signatures.
## Verification
You can use the gpg signatures for verifying the reproducibility and that a maintainer in posession with that PGP private key created the release with that content:
```
$ gpg2 --verify 1.6.2.tar.gz.asc
gpg: assuming signed data in '1.6.2.tar.gz'
gpg: Signature made Fri Dec 15 06:21:08 2023 UTC
gpg: using RSA key 28CA7C964938EA5C1481D42AE11B7950E9E183DB
gpg: Good signature from "PrivateBin release (solely used for signing releases)" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 28CA 7C96 4938 EA5C 1481 D42A E11B 7950 E9E1 83DB
```
For a more step-by-step guide in detail [see this FAQ](https://github.com/PrivateBin/PrivateBin/wiki/FAQ#how-can-i-securely-clonedownload-your-project).
SLSA verification can be performed using the [SLSA verifier](https://github.com/slsa-framework/slsa-verifier?tab=readme-ov-file#verification-for-github-builders).
## Release process
The release process is outlined in the [release checklist](https://github.com/PrivateBin/PrivateBin/wiki/Release-Checklist). The key manual steps are performed using a [Makefile](https://github.com/PrivateBin/PrivateBin/blob/master/Makefile#L31-L43) and using a [shell script](https://github.com/rugk/gittools/blob/master/signrelease.sh).

View File

@ -1,5 +1,4 @@
Running all unit tests
======================
# Running All Unit Tests
Since it is non-trivial to setup all dependencies for our unit testing suite,
we provide a docker image that bundles all of them into one container, both
@ -29,13 +28,7 @@ docker run --rm --read-only -v ~/PrivateBin:/srv:ro privatebin/unit-testing phpu
docker run --rm --read-only -v ~/PrivateBin:/srv:ro privatebin/unit-testing mocha
```
We also provide a Janitor image that includes the Cloud9 and Theia WebIDEs as
well as the integrated unit testing utilities. See our [docker wiki
page](https://github.com/PrivateBin/PrivateBin/wiki/Docker#janitor-image-with-cloud9-and-theia-webide-janitortechnologyprivatebin)
for further details on this.
Running PHP unit tests
======================
## Running PHP Unit Tests
In order to run these tests, you will need to install the following packages
and their dependencies:
@ -63,20 +56,16 @@ configurations defined in its constructor, it generates the unit test file
of these configurations and tests for (most of the) valid combinations. Some of
combinations can't be tested with this method, i.e. a valid option combined with
an invalid one. Other very specific test cases (i.e. to trigger multiple errors)
are covered in `tst/PrivateBinTest.php`. Here is how to generate the
are covered in `tst/ControllerTest.php`. Here is how to generate the
configuration test and run it:
```console
$ cd PrivateBin/tst
$ php ConfigurationTestGenerator.php
$ ../bin/configuration-test-generator
$ phpunit ConfigurationCombinationsTest.php
```
Note that it can take an hour or longer to run the several thousand tests.
Running JavaScript unit tests
=============================
## Running JavaScript Unit Tests
In order to run these tests, you will need to install the following packages
and its dependencies:
@ -112,8 +101,7 @@ $ cd PrivateBin/js
$ nyc mocha
```
Property based unit testing
---------------------------
### Property Based Unit Testing
In the JavaScript unit tests we use the JSVerify library to leverage property
based unit testing. Instead of artificially creating specific test cases to
@ -138,7 +126,7 @@ associated random number generator (RNG) state, so you can reproduce it easily:
1 failing
1) Helper getCookie returns the requested cookie:
Error: Failed after 30 tests and 11 shrinks. rngState: 88caf85079d32e416b; Counterexample: ["{", "9", "9", "YD8%fT"]; [" ", "_|K:"];
Error: Failed after 30 tests and 11 shrinks. rngState: 88caf85079d32e416b; Counterexample: ["{", "9", "9", "YD8%fT"]; [" ", "_|K:"];
[...]
```
@ -154,4 +142,3 @@ with the same RNG state as follows:
```console
$ nyc mocha test --jsverifyRngState 88caf85079d32e416b
```

View File

@ -1,193 +1,220 @@
{
"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",
"en": "ar",
"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.",
"%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 بت AES.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "مزيد من المعلومات على <a href=\"https://privatebin.info/\">صفحة المشروع</a>.",
"Because ignorance is bliss": "لأن الجهل نعمة",
"Paste does not exist, has expired or has been deleted.": "اللصق غير موجود أو انتهت صلاحيته أو تم حذفه.",
"%s requires php %s or above to work. Sorry.": "%s يتطلب php %s أو أعلى للعمل. آسف.",
"%s requires configuration section [%s] to be present in configuration file.": "%s يتطلب وجود قسم [%s] تضبيط في ملف تضبيط.",
"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)"
"الرجاء الانتظار %d ثانية بين كل مشاركة.",
"الرجاء الانتظار %d ثواني بين كل مشاركة.",
"الرجاء الانتظار %d ثواني بين كل مشاركة.",
"الرجاء الانتظار %d ثواني بين كل مشاركة.",
"الرجاء الانتظار %d ثواني بين كل مشاركة.",
"الرجاء الانتظار %d ثواني بين كل مشاركة."
],
"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",
"Send": "Send",
"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",
"Paste is limited to %s of encrypted data.": "يقتصر اللصق على %s البيانات المشفرة.",
"Invalid data.": "بيانات غير صالحة.",
"You are unlucky. Try again.": "أنت غير محظوظ. أعِد المحاولة.",
"Error saving comment. Sorry.": "خطأ في حفظ التعليق. آسف.",
"Error saving paste. Sorry.": "خطأ في حفظ اللصق. آسف.",
"Invalid paste ID.": "معرف لصق غير صالح.",
"Paste is not of burn-after-reading type.": "اللصق ليس من النوع الذي يحرق بعد القراءة.",
"Wrong deletion token. Paste was not deleted.": "رمز حذف خاطئ. لم يتم يحُذف اللصق.",
"Paste was properly deleted.": "حُذفت اللصق بشكل صحيح.",
"JavaScript is required for %s to work. Sorry for the inconvenience.": "جافاسكرِبت (JavaScript) مطلوب %s للعمل. نأسف للإزعاج.",
"%s requires a modern browser to work.": "%s يتطلب متصفحًا حديثًا للعمل.",
"New": "جديد",
"Create": "أنشِئ",
"Clone": "استنساخ",
"Raw text": "نص خام",
"Expires": "تنتهي",
"Burn after reading": "حرق بعد القراءة",
"Open discussion": "مناقشة مفتوحة",
"Password (recommended)": "كلمة المرور (مستحسن)",
"Discussion": "مناقشة",
"Toggle navigation": "تبديل التنقل",
"%d seconds": [
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
"%d ثانية",
"%d ثواني",
"%d ثواني",
"%d ثواني",
"%d ثواني",
"%d ثواني"
],
"%d minutes": [
"%d minute (singular)",
"%d minutes (1st plural)",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
"%d دقيقة",
"%d دقائق",
"%d دقائق",
"%d دقائق",
"%d دقائق",
"%d دقائق"
],
"%d hours": [
"%d hour (singular)",
"%d hours (1st plural)",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
"%d ساعة",
"%d ساعات",
"%d ساعات",
"%d ساعات",
"%d ساعات",
"%d ساعات"
],
"%d days": [
"%d day (singular)",
"%d days (1st plural)",
"%d days (2nd plural)",
"%d days (3rd plural)"
"%d يوم",
"%d أيام",
"%d أيام",
"%d أيام",
"%d أيام",
"%d أيام"
],
"%d weeks": [
"%d week (singular)",
"%d weeks (1st plural)",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
"%d أسبوع",
"%d أسابيع",
"%d أسابيع",
"%d أسابيع",
"%d أسابيع",
"%d أسابيع"
],
"%d months": [
"%d month (singular)",
"%d months (1st plural)",
"%d months (2nd plural)",
"%d months (3rd plural)"
"%d شهر",
"%d شهور",
"%d شهور",
"%d شهور",
"%d شهور",
"%d شهور"
],
"%d years": [
"%d year (singular)",
"%d years (1st plural)",
"%d years (2nd plural)",
"%d years (3rd plural)"
"%d سنة",
"%d سنين",
"%d سنين",
"%d سنين",
"%d سنين",
"%d سنين"
],
"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.",
"Never": "أبدًا",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "ملاحظة: هذه خدمة اختبارية: يمكن حذف البيانات في أي وقت. سوف تموت القطط إذا أساءت استخدام هذه الخدمة.",
"This document will expire in %d seconds.": [
"This document will expire in %d second. (singular)",
"This document will expire in %d seconds. (1st plural)",
"This document will expire in %d seconds. (2nd plural)",
"This document will expire in %d seconds. (3rd plural)"
"ستنتهي صلاحية هذا المستند في %d ثانية.",
"ستنتهي صلاحية هذا المستند في %d ثواني.",
"ستنتهي صلاحية هذا المستند في %d ثواني.",
"ستنتهي صلاحية هذا المستند في %d ثواني.",
"ستنتهي صلاحية هذا المستند في %d ثواني.",
"ستنتهي صلاحية هذا المستند في %d ثواني."
],
"This document will expire in %d minutes.": [
"This document will expire in %d minute. (singular)",
"This document will expire in %d minutes. (1st plural)",
"This document will expire in %d minutes. (2nd plural)",
"This document will expire in %d minutes. (3rd plural)"
"ستنتهي صلاحية هذا المستند في %d دقيقة.",
"ستنتهي صلاحية هذا المستند في %d دقائق.",
"ستنتهي صلاحية هذا المستند في %d دقائق.",
"ستنتهي صلاحية هذا المستند في %d دقائق.",
"ستنتهي صلاحية هذا المستند في %d دقائق.",
"ستنتهي صلاحية هذا المستند في %d دقائق."
],
"This document will expire in %d hours.": [
"This document will expire in %d hour. (singular)",
"This document will expire in %d hours. (1st plural)",
"This document will expire in %d hours. (2nd plural)",
"This document will expire in %d hours. (3rd plural)"
"ستنتهي صلاحية هذا المستند في غضون %d ساعة.",
"ستنتهي صلاحية هذا المستند في غضون %d ساعات.",
"ستنتهي صلاحية هذا المستند في غضون %d ساعات.",
"ستنتهي صلاحية هذا المستند في غضون %d ساعات.",
"ستنتهي صلاحية هذا المستند في غضون %d ساعات.",
"ستنتهي صلاحية هذا المستند في غضون %d ساعات."
],
"This document will expire in %d days.": [
"This document will expire in %d day. (singular)",
"This document will expire in %d days. (1st plural)",
"This document will expire in %d days. (2nd plural)",
"This document will expire in %d days. (3rd plural)"
"ستنتهي صلاحية هذا المستند خلال %d يوم.",
"ستنتهي صلاحية هذا المستند خلال %d أيام.",
"ستنتهي صلاحية هذا المستند خلال %d أيام.",
"ستنتهي صلاحية هذا المستند خلال %d أيام.",
"ستنتهي صلاحية هذا المستند خلال %d أيام.",
"ستنتهي صلاحية هذا المستند خلال %d أيام."
],
"This document will expire in %d months.": [
"This document will expire in %d month. (singular)",
"This document will expire in %d months. (1st plural)",
"This document will expire in %d months. (2nd plural)",
"This document will expire in %d months. (3rd plural)"
"ستنتهي صلاحية هذا المستند خلال %d شهر.",
"ستنتهي صلاحية هذا المستند خلال %d شهور.",
"ستنتهي صلاحية هذا المستند خلال %d شهور.",
"ستنتهي صلاحية هذا المستند خلال %d شهور.",
"ستنتهي صلاحية هذا المستند خلال %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?",
"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 [Ctrl]+[c] to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] 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."
"Please enter the password for this paste:": "الرجاء إدخال كلمة المرور لهذا اللصق:",
"Could not decrypt data (Wrong key?)": "تعذر فك تشفير البيانات (مفتاح غير صحيح؟)",
"Could not delete the paste, it was not stored in burn after reading mode.": "تعذر حذف اللصق، ولم يخزين في وضع النسخ بعد القراءة.",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "فقط من أجل عينيك. لا تغلق هذه النافذة، لا يمكن عرض هذه الرسالة مرة أخرى.",
"Could not decrypt comment; Wrong key?": "تعذر فك تشفير التعليق؛ المفتاح غير صحيح؟",
"Reply": "رد",
"Anonymous": "وهمي",
"Avatar generated from IP address": "تم إنشاء أفتار من عنوان IP",
"Add comment": "أضف تعليق",
"Optional nickname…": "لقب اختياري…",
"Post comment": "أضف تعليقا",
"Sending comment…": "يُرسل تعليق…",
"Comment posted.": "نُشر التعليق.",
"Could not refresh display: %s": "تعذر تحديث العرض: %s",
"unknown status": "حالة غير معروفة",
"server error or not responding": "خطأ في الخادم أو لا يستجيب",
"Could not post comment: %s": "لا يمكن نشر تعليق: %s",
"Sending paste…": "يُرسل لصق…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "لصقك هو <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(اضغط على [Ctrl] + [c] للنسخ)</span>",
"Delete data": "حذف البيانات",
"Could not create paste: %s": "تعذر إنشاء اللصق: %s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "لا يمكن فك تشفير اللصق: مفتاح فك التشفير مفقود في URL (هل استخدمت معيد توجيه أو أداة تقصير لعناوين URL تزيل جزءًا من عنوان URL؟)",
"B": "بايت",
"KiB": "كيلوبايت",
"MiB": "ميجابايت",
"GiB": "جيجابايت",
"TiB": "تيرابايت",
"PiB": "بيتابايت",
"EiB": "إكسابايت",
"ZiB": "زيتابايت",
"YiB": "يوتابايت",
"Format": "التنسيق",
"Plain Text": "نص عادي",
"Source Code": "كود مصدر",
"Markdown": "ماركداون",
"Download attachment": "تنزيل المرفقات",
"Cloned: '%s'": "مستنسخ: '%s'",
"The cloned file '%s' was attached to this paste.": "تم إرفاق المِلَفّ المستنسخ '%s' بهذا اللصق.",
"Attach a file": "إرفاق مِلَفّ",
"alternatively drag & drop a file or paste an image from the clipboard": "بدلاً من ذلك، اسحب ملفًا وأسقطه أو الصق صورة من الحافظة",
"File too large, to display a preview. Please download the attachment.": "المِلَفّ كبير جدًا، بحيث لا يمكن عرض معاينة. الرجاء تنزيل المرفق.",
"Remove attachment": "إزالة المرفق",
"Your browser does not support uploading encrypted files. Please use a newer browser.": "متصفحك لا يدعم رفع الملفات المشفرة. الرجاء استخدام متصفح أحدث.",
"Invalid attachment.": "مرفق غير صحيح.",
"Options": "الخيارات",
"Shorten URL": "تقصير URL",
"Editor": "المحرّر",
"Preview": "معاينة",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s يتطلب PATH لينتهي ب \"%s\". يرجى تحديث PATH في ملف index.php الخاص بك.",
"Decrypt": "فك التشفير",
"Enter password": "أدخل كلمة المرور",
"Loading…": "تحميل…",
"Decrypting paste…": "يفك تشفير اللصق…",
"Preparing new paste…": "تحضير لصقة جديدة…",
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "في حالة عدم اختفاء هذه الرسالة مطلقًا ، يرجى إلقاء نظرة على <a href=\"%s\">الأسئلة الشائعة هذه للحصول على معلومات لتحري الخلل وإصلاحه</a>.",
"+++ no paste text +++": "+++ لا يوجد نص لصق +++",
"Could not get paste data: %s": "تعذر الحصول على لصق البيانات: %s",
"QR code": "رمز QR",
"This website is using an insecure HTTP connection! Please use it only for testing.": "هذا الموقع يستخدم اتصال HTTP غير آمن! الرجاء استخدامه للاختبار فقط.",
"For more information <a href=\"%s\">see this FAQ entry</a>.": "لمزيد من المعلومات <a href=\"%s\">راجع هذه الأسئلة الشائعة</a>.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "قد يتطلب متصفحك اتصال HTTPS لدعم WebCrypto API. حاول <a href=\"%s\">التبديل إلى HTTPS </a>.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "لا يدعم المستعرض الخاص بك WebAssembly، المستخدم لضغط zlib. يمكنك إنشاء مستندات غير مضغوطة، لكن لا يمكنك قراءة المستندات المضغوطة.",
"waiting on user to provide a password": "ينتظر المستخدم لتقديم كلمة مرور",
"Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "تعذر فك تشفير البيانات. هل أدخلت كلمة مرور خاطئة؟ أعِد المحاولة باستخدام الزر الموجود في الأعلى.",
"Retry": "أعِد المحاولة",
"Showing raw text…": "يُظهر نص خام…",
"Notice:": "إشعار:",
"This link will expire after %s.": "ستنتهي صلاحية هذا الرابط بعد %s.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "لا يمكن الوصول إلى هذا الرابط إلا مرة واحدة، لا تستخدم زر الرجوع أو التحديث في متصفحك.",
"Link:": "الرابط:",
"Recipient may become aware of your timezone, convert time to UTC?": "قد يكون المستلم على علم بمنطقتك الزمنية، هل تريد تحويل الوقت إلى التوقيت العالمي المنسق (UTC)؟",
"Use Current Timezone": "استخدم المنطقة الزمنية الحالية",
"Convert To UTC": "تحويل إلى UTC",
"Close": "إغلاق",
"Encrypted note on %s": "ملاحظة مشفرة على %s",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "زُر هذا الرابط لرؤية الملاحظة. يتيح إعطاء عنوان URL لأي شخص الوصول إلى الملاحظة أيضًا.",
"URL shortener may expose your decrypt key in URL.": "قد يفضح أداة تقصير عناوين URL مفتاح فك التشفير الخاص بك في URL.",
"Save paste": "احفظ اللصق",
"Your IP is not authorized to create pastes.": "عنوان IP الخاص بك غير مصرح له بإنشاء لصُق.",
"Trying to shorten a URL that isn't pointing at our instance.": "محاولة تقصير عنوان URL لا يشير إلى خادمنا.",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "خطأ في الاتصال بـ YOURLS. ربما تكون هناك مشكلة في التضبيط، مثل \"apiurl\" أو \"التوقيع\" الخاطئ أو المفقود.",
"Error parsing YOURLS response.": "خطأ في تحليل استجابة YOURLS.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "لا يمكن عرض اللصق احرقه بعد قراءته إلا مرة واحدة عند تحميله. هل تريد فتحه الآن؟",
"Yes, load it": "نعم، حمله"
}

View File

@ -3,7 +3,6 @@
"%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 е изчистен и изцяло достъпен като отворен код, онлайн \"paste\" услуга, където сървъра не знае подадената информация. Тя се шифрова/дешифрова %sвъв браузъра%s използвайки 256 битов AES алгоритъм.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Повече информация може да намерите на <a href=\"https://privatebin.info/\">страницата на проекта (Английски)</a>.",
"Because ignorance is bliss": "Невежеството е блаженство",
"en": "bg",
"Paste does not exist, has expired or has been deleted.": "Информацията не съществува, срокът и е изтекъл или е била изтрита.",
"%s requires php %s or above to work. Sorry.": "%s има нужда от PHP %s или по-нова, за да работи. Съжалявам.",
"%s requires configuration section [%s] to be present in configuration file.": "%s задължава отдела от настройките [%s] да съществува във файла със настройките.",
@ -11,6 +10,8 @@
"Моля изчакайте една секунда между всяка публикация.",
"Моля изчакайте %d секунди между всяка публикация.",
"Моля изчакайте %d секунди между всяка публикация.",
"Моля изчакайте %d секунди между всяка публикация.",
"Моля изчакайте %d секунди между всяка публикация.",
"Моля изчакайте %d секунди между всяка публикация."
],
"Paste is limited to %s of encrypted data.": "Съдържанието е ограничено до %s криптирана информация.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Услугата %s се нуждае от JavaScript, за да работи. Съжаляваме за неудобството.",
"%s requires a modern browser to work.": "%s се нуждае от съвременен браузър за да работи.",
"New": "Създаване",
"Send": "Изпрати",
"Create": "Създай",
"Clone": "Дублирай",
"Raw text": "Чист текст",
"Expires": "Изтича",
@ -38,42 +39,56 @@
"%d секунди",
"%d секунда",
"%d секунда",
"%d секунда",
"%d секунда",
"%d секунда"
],
"%d minutes": [
"%d минути",
"%d минута",
"%d минута",
"%d минута",
"%d минута",
"%d минута"
],
"%d hours": [
"%d часа",
"%d час",
"%d час",
"%d час",
"%d час",
"%d час"
],
"%d days": [
"%d дни",
"%d ден",
"%d ден",
"%d ден",
"%d ден",
"%d ден"
],
"%d weeks": [
"%d седмици",
"%d седмица",
"%d седмица",
"%d седмица",
"%d седмица",
"%d седмица"
],
"%d months": [
"%d месеци",
"%d месец",
"%d месец",
"%d месец",
"%d месец",
"%d месец"
],
"%d years": [
"%d години",
"%d година",
"%d година",
"%d година",
"%d година",
"%d година"
],
"Never": "Никога",
@ -82,30 +97,40 @@
"Този документ изтича след една секунда.",
"Този документ изтича след %d секунди.",
"Този документ изтича след %d секунди.",
"Този документ изтича след %d секунди.",
"Този документ изтича след %d секунди.",
"Този документ изтича след %d секунди."
],
"This document will expire in %d minutes.": [
"Този документ изтича след една минута.",
"Този документ изтича след %d минути.",
"Този документ изтича след %d минути.",
"Този документ изтича след %d минути.",
"Този документ изтича след %d минути.",
"Този документ изтича след %d минути."
],
"This document will expire in %d hours.": [
"Този документ изтича след един час.",
"Този документ изтича след %d часа.",
"Този документ изтича след %d часа.",
"Този документ изтича след %d часа.",
"Този документ изтича след %d часа.",
"Този документ изтича след %d часа."
],
"This document will expire in %d days.": [
"Този документ изтича след един ден.",
"Този документ изтича след %d дни.",
"Този документ изтича след %d дни.",
"Този документ изтича след %d дни.",
"Този документ изтича след %d дни.",
"Този документ изтича след %d дни."
],
"This document will expire in %d months.": [
"Този документ изтича след една година.",
"Този документ изтича след %d години.",
"Този документ изтича след %d години.",
"Този документ изтича след %d години.",
"Този документ изтича след %d години.",
"Този документ изтича след %d години."
],
"Please enter the password for this paste:": "Моля въведете паролата за това съдържание:",
@ -139,7 +164,7 @@
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Format",
"Format": "Формат",
"Plain Text": "Чист текст",
"Source Code": "Изходен код",
"Markdown": "Markdown",
@ -172,16 +197,16 @@
"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",
"Retry": "Нов опит",
"Showing raw text…": "Showing raw text…",
"Notice:": "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:",
"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",
"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.",
@ -189,5 +214,7 @@
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,15 +3,16 @@
"%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 un pastebin en línia de codi obert i minimalista on el servidor no té coneixement de les dades enganxades. Les dades estan encriptades/desxifrades %sen el navegador%s utilitzant AES de 256 bits.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Més informació a la <a href=\"https://privatebin.info/\">pàgina del projecte</a>.",
"Because ignorance is bliss": "Perquè la ignorància és felicitat",
"en": "ca",
"Paste does not exist, has expired or has been deleted.": "El paste no existeix, ha caducat o s'ha eliminat.",
"%s requires php %s or above to work. Sorry.": "%s requereix php %s o superior per funcionar. Ho sento.",
"%s requires configuration section [%s] to be present in configuration file.": "%s requereix que la secció de configuració [%s] sigui present al fitxer de configuració.",
"Please wait %d seconds between each post.": [
"Espereu %d segon entre cada entrada.",
"Espereu %d segons entre cada entrada.",
"Please wait %d seconds between each post. (2nd plural)",
"Please wait %d seconds between each post. (3rd plural)"
"Espereu %d segons entre cada entrada.",
"Espereu %d segons entre cada entrada.",
"Espereu %d segons entre cada entrada.",
"Espereu %d segons entre cada entrada."
],
"Paste is limited to %s of encrypted data.": "L'enganxat està limitat a %s de dades encriptades.",
"Invalid data.": "Dades no vàlides.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Cal JavaScript perquè %s funcioni. Em sap greu les molèsties.",
"%s requires a modern browser to work.": "%s requereix un navegador modern per funcionar.",
"New": "Nou",
"Send": "Enviar",
"Create": "Crear",
"Clone": "Clona",
"Raw text": "Text sense processar",
"Expires": "Caducitat",
@ -37,44 +38,58 @@
"%d seconds": [
"%d segon",
"%d segons",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
"%d segons",
"%d segons",
"%d segons",
"%d segons"
],
"%d minutes": [
"%d minut",
"%d minuts",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
"%d minutes (3rd plural)",
"%d minuts",
"%d minuts"
],
"%d hours": [
"%d hora",
"%d hores",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
"%d hours (3rd plural)",
"%d hores",
"%d hores"
],
"%d days": [
"%d dia",
"%d dies",
"%d days (2nd plural)",
"%d days (3rd plural)"
"%d dies",
"%d dies",
"%d dies",
"%d dies"
],
"%d weeks": [
"%d setmana",
"%d setmanes",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
"%d setmanes",
"%d setmanes",
"%d setmanes",
"%d setmanes"
],
"%d months": [
"%d mes",
"%d mesos",
"%d months (2nd plural)",
"%d months (3rd plural)"
"%d mesos",
"%d mesos",
"%d mesos",
"%d mesos"
],
"%d years": [
"%d any",
"%d anys",
"%d years (2nd plural)",
"%d years (3rd plural)"
"%d anys",
"%d anys",
"%d anys",
"%d anys"
],
"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.",
@ -82,30 +97,40 @@
"Aquest document caducarà d'aquí %d segon.",
"Aquest document caducarà d'aquí %d segons.",
"Aquest document caducarà d'aquí %d segons.",
"Aquest document caducarà d'aquí %d segons.",
"Aquest document caducarà d'aquí %d segons.",
"Aquest document caducarà d'aquí %d segons."
],
"This document will expire in %d minutes.": [
"Aquest document caducarà d'aquí %d minut.",
"Aquest document caducarà d'aquí %d minuts.",
"Aquest document caducarà d'aquí %d minuts.",
"Aquest document caducarà d'aquí %d minuts.",
"Aquest document caducarà d'aquí %d minuts.",
"Aquest document caducarà d'aquí %d minuts."
],
"This document will expire in %d hours.": [
"Aquest document caducarà d'aquí %d hora.",
"Aquest document caducarà d'aquí %d hores.",
"Aquest document caducarà d'aquí %d hores.",
"Aquest document caducarà d'aquí %d hores.",
"Aquest document caducarà d'aquí %d hores.",
"Aquest document caducarà d'aquí %d hores."
],
"This document will expire in %d days.": [
"Aquest document caducarà d'aquí %d dia.",
"Aquest document caducarà d'aquí %d dies.",
"Aquest document caducarà d'aquí %d dies.",
"Aquest document caducarà d'aquí %d dies.",
"Aquest document caducarà d'aquí %d dies.",
"Aquest document caducarà d'aquí %d dies."
],
"This document will expire in %d months.": [
"Aquest document caducarà d'aquí %d mes.",
"Aquest document caducarà d'aquí %d mesos.",
"Aquest document caducarà d'aquí %d mesos.",
"Aquest document caducarà d'aquí %d mesos.",
"Aquest document caducarà d'aquí %d mesos.",
"Aquest document caducarà d'aquí %d mesos."
],
"Please enter the password for this paste:": "Si us plau, introdueix la contrasenya per aquest paste:",
@ -189,5 +214,7 @@
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,7 +3,6 @@
"%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 hè un serviziu in linea di tipu « pastebin » (ghjestiunariu dappiccicu di pezzi di testu è di codice di fonte) minimalistu è à fonte aperta induve u servitore ùn hà micca cunnuscenza di i dati mandati. I dati sò cifrati è dicifrati %sin u navigatore%s cù una cifratura AES di 256 bit.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Più dinfurmazione annantà a <a href=\"https://privatebin.info/\">pagina di u prughjettu</a>.",
"Because ignorance is bliss": "Perchè lignurenza hè una campa",
"en": "co",
"Paste does not exist, has expired or has been deleted.": "Lappiccicu ùn esiste micca, hè scadutu o hè statu squassatu.",
"%s requires php %s or above to work. Sorry.": "Per disgrazzia, %s richiede php %s o più recente per funziunà.",
"%s requires configuration section [%s] to be present in configuration file.": "%s richiede a presenza di a sezzione di cunfigurazione [%s] in a schedariu di cunfigurazione.",
@ -11,6 +10,8 @@
"Aspettate %d seconda trà dui publicazioni.",
"Aspettate %d seconde trà dui publicazioni.",
"Aspettate %d seconde trà dui publicazioni.",
"Aspettate %d seconde trà dui publicazioni.",
"Aspettate %d seconde trà dui publicazioni.",
"Aspettate %d seconde trà dui publicazioni."
],
"Paste is limited to %s of encrypted data.": "Lappiccicu hè limitatu à %s di dati cifrati.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript hè richiestu per fà funziunà %s. Scusate per stu penseru.",
"%s requires a modern browser to work.": "%s richiede un navigatore mudernu per funziunà.",
"New": "Novu",
"Send": "Mandà",
"Create": "Creà",
"Clone": "Duppione",
"Raw text": "Testu grossu",
"Expires": "Scadenza",
@ -38,42 +39,56 @@
"%d seconda",
"%d seconde",
"%d seconde",
"%d seconde",
"%d seconde",
"%d seconde"
],
"%d minutes": [
"%d minutu",
"%d minuti",
"%d minuti",
"%d minuti",
"%d minuti",
"%d minuti"
],
"%d hours": [
"%d ora",
"%d ore",
"%d ore",
"%d ore",
"%d ore",
"%d ore"
],
"%d days": [
"%d ghjornu",
"%d ghjorni",
"%d ghjorni",
"%d ghjorni",
"%d ghjorni",
"%d ghjorni"
],
"%d weeks": [
"%d settimana",
"%d settimane",
"%d settimane",
"%d settimane",
"%d settimane",
"%d settimane"
],
"%d months": [
"%d mese",
"%d mesi",
"%d mesi",
"%d mesi",
"%d mesi",
"%d mesi"
],
"%d years": [
"%d annu",
"%d anni",
"%d anni",
"%d anni",
"%d anni",
"%d anni"
],
"Never": "Mai",
@ -82,30 +97,40 @@
"Stu ducumentu serà scadutu in %d seconda.",
"Stu ducumentu serà scadutu in %d seconde.",
"Stu ducumentu serà scadutu in %d seconde.",
"Stu ducumentu serà scadutu in %d seconde.",
"Stu ducumentu serà scadutu in %d seconde.",
"Stu ducumentu serà scadutu in %d seconde."
],
"This document will expire in %d minutes.": [
"Stu ducumentu serà scadutu in %d minutu.",
"Stu ducumentu serà scadutu in %d minuti.",
"Stu ducumentu serà scadutu in %d minuti.",
"Stu ducumentu serà scadutu in %d minuti.",
"Stu ducumentu serà scadutu in %d minuti.",
"Stu ducumentu serà scadutu in %d minuti."
],
"This document will expire in %d hours.": [
"Stu ducumentu serà scadutu in %d ora.",
"Stu ducumentu serà scadutu in %d ore.",
"Stu ducumentu serà scadutu in %d ore.",
"Stu ducumentu serà scadutu in %d ore.",
"Stu ducumentu serà scadutu in %d ore.",
"Stu ducumentu serà scadutu in %d ore."
],
"This document will expire in %d days.": [
"Stu ducumentu serà scadutu in %d ghjornu.",
"Stu ducumentu serà scadutu in %d ghjorni.",
"Stu ducumentu serà scadutu in %d ghjorni.",
"Stu ducumentu serà scadutu in %d ghjorni.",
"Stu ducumentu serà scadutu in %d ghjorni.",
"Stu ducumentu serà scadutu in %d ghjorni."
],
"This document will expire in %d months.": [
"Stu ducumentu serà scadutu in %d mese.",
"Stu ducumentu serà scadutu in %d mesi.",
"Stu ducumentu serà scadutu in %d mesi.",
"Stu ducumentu serà scadutu in %d mesi.",
"Stu ducumentu serà scadutu in %d mesi.",
"Stu ducumentu serà scadutu in %d mesi."
],
"Please enter the password for this paste:": "Stampittate a parolla dintesa per stappiccicu :",
@ -189,5 +214,7 @@
"Your IP is not authorized to create pastes.": "U vostru indirizzu IP ùn hè micca auturizatu à creà lappiccichi.",
"Trying to shorten a URL that isn't pointing at our instance.": "Pruvate dammuzzà un indirizzu web chì ùn punta micca versu a vostra instanza.",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Sbagliu à a chjama di YOURLS. Seria forse una cunfigurazione gattiva, tale una \"apiurl\" o \"signature\" falsa o assente.",
"Error parsing YOURLS response.": "Sbagliu durante lanalisa di a risposta di YOURLS."
"Error parsing YOURLS response.": "Sbagliu durante lanalisa di a risposta di YOURLS.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Si pò affissà lappiccichi « Squassà dopu a lettura » solu dopu u so caricamentu. Vulete aprelu subitu ?",
"Yes, load it": "Iè, caricatelu"
}

View File

@ -3,11 +3,12 @@
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s je minimalistický open source 'pastebin' server, který neanalyzuje vložená data. Data jsou šifrována %sv prohlížeči%s pomocí 256 bitů AES.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Více informací na <a href=\"https://privatebin.info/\">stránce projetu</a>.",
"Because ignorance is bliss": "Protože nevědomost je sladká",
"en": "cs",
"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 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.": [
"Počet sekund do dalšího příspěvku: %d.",
"Počet sekund do dalšího příspěvku: %d.",
"Počet sekund do dalšího příspěvku: %d.",
"Počet sekund do dalšího příspěvku: %d.",
"Počet sekund do dalšího příspěvku: %d.",
@ -25,7 +26,7 @@
"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.",
"New": "Nový",
"Send": "Odeslat",
"Create": "Vytvořit",
"Clone": "Klonovat",
"Raw text": "Pouze Text",
"Expires": "Expirace",
@ -38,43 +39,57 @@
"%d sekuda",
"%d sekundy",
"%d sekund",
"%d seconds (3rd plural)"
"%d sekund",
"%d sekund",
"%d sekund"
],
"%d minutes": [
"%d minuta",
"%d minuty",
"%d minut",
"%d minutes (3rd plural)"
"%d minut",
"%d minut",
"%d minut"
],
"%d hours": [
"%d hodin",
"%d hodina",
"%d hodiny",
"%d hodin",
"%d hours (3rd plural)"
"%d hodin",
"%d hodin",
"%d hodin"
],
"%d days": [
"%d den",
"%d dny",
"%d dní",
"%d days (3rd plural)"
"%d dní",
"%d dní",
"%d dní"
],
"%d weeks": [
"%d týden",
"%d týdeny",
"%d týdnů",
"%d weeks (3rd plural)"
"%d týdnů",
"%d týdnů",
"%d týdnů"
],
"%d months": [
"%d měsíc",
"%d měsíce",
"%d měsíců",
"%d months (3rd plural)"
"%d měsíců",
"%d měsíců",
"%d měsíců"
],
"%d years": [
"%d rok",
"%d roky",
"%d roků",
"%d years (3rd plural)"
"%d roků",
"%d roků",
"%d roků"
],
"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.",
@ -82,30 +97,40 @@
"Tento dokument expiruje za %d sekundu.",
"Tento dokument expiruje za %d sekundy.",
"Tento dokument expiruje za %d sekund.",
"Tento dokument expiruje za %d sekund.",
"Tento dokument expiruje za %d sekund.",
"Tento dokument expiruje za %d sekund."
],
"This document will expire in %d minutes.": [
"Tento dokument expiruje za %d minutu.",
"Tento dokument expiruje za %d minuty.",
"Tento dokument expiruje za %d minut.",
"Tento dokument expiruje za %d minut.",
"Tento dokument expiruje za %d minut.",
"Tento dokument expiruje za %d minut."
],
"This document will expire in %d hours.": [
"Tento dokument expiruje za %d hodinu.",
"Tento dokument expiruje za %d hodiny.",
"Tento dokument expiruje za %d hodin.",
"Tento dokument expiruje za %d hodin.",
"Tento dokument expiruje za %d hodin.",
"Tento dokument expiruje za %d hodin."
],
"This document will expire in %d days.": [
"Tento dokument expiruje za %d den.",
"Tento dokument expiruje za %d dny.",
"Tento dokument expiruje za %d dny.",
"Tento dokument expiruje za %d dny.",
"Tento dokument expiruje za %d dny.",
"Tento dokument expiruje za %d dny."
],
"This document will expire in %d months.": [
"Tento dokument expiruje za %d měsíc.",
"Tento dokument expiruje za %d měsíce.",
"Tento dokument expiruje za %d měsíců.",
"Tento dokument expiruje za %d měsíců.",
"Tento dokument expiruje za %d měsíců.",
"Tento dokument expiruje za %d měsíců."
],
"Please enter the password for this paste:": "Zadejte prosím heslo:",
@ -189,5 +214,7 @@
"Your IP is not authorized to create pastes.": "Vaše IP adresa nemá oprávnění k vytvoření vložení.",
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
"Error parsing YOURLS response.": "Error parsing YOURLS response."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,7 +3,6 @@
"%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 ist ein minimalistischer, quelloffener \"Pastebin\"-artiger Dienst, bei dem der Server keinerlei Kenntnis der Inhalte hat. Die Daten werden %sim Browser%s mit 256 Bit AES ver- und entschlüsselt.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Weitere Informationen sind auf der <a href=\"https://privatebin.info/\">Projektseite</a> zu finden.",
"Because ignorance is bliss": "Unwissenheit ist ein Segen",
"en": "de",
"Paste does not exist, has expired or has been deleted.": "Diesen Text gibt es nicht, er ist abgelaufen oder wurde gelöscht.",
"%s requires php %s or above to work. Sorry.": "%s benötigt PHP %s oder höher, um zu funktionieren. Sorry.",
"%s requires configuration section [%s] to be present in configuration file.": "%s benötigt den Konfigurationsabschnitt [%s] in der Konfigurationsdatei um zu funktionieren.",
@ -11,6 +10,8 @@
"Bitte warte eine Sekunde zwischen dem Absenden zweier Beiträge.",
"Bitte warte %d Sekunden zwischen dem Absenden zweier Beiträge.",
"Bitte warte %d Sekunden zwischen dem Absenden zweier Beiträge.",
"Bitte warte %d Sekunden zwischen dem Absenden zweier Beiträge.",
"Bitte warte %d Sekunden zwischen dem Absenden zweier Beiträge.",
"Bitte warte %d Sekunden zwischen dem Absenden zweier Beiträge."
],
"Paste is limited to %s of encrypted data.": "Texte sind auf %s verschlüsselte Datenmenge beschränkt.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript ist eine Voraussetzung, um %s zu nutzen. Bitte entschuldige die Unannehmlichkeiten.",
"%s requires a modern browser to work.": "%s setzt einen modernen Browser voraus, um funktionieren zu können.",
"New": "Neu",
"Send": "Senden",
"Create": "Erstellen",
"Clone": "Klonen",
"Raw text": "Reiner Text",
"Expires": "Ablaufzeit",
@ -37,44 +38,58 @@
"%d seconds": [
"%d Sekunde",
"%d Sekunden",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
"%d Sekunden",
"%d Sekunden",
"%d Sekunden",
"%d Sekunden"
],
"%d minutes": [
"%d Minute",
"%d Minuten",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
"%d Minuten",
"%d Minuten",
"%d Minuten",
"%d Minuten"
],
"%d hours": [
"%d Stunde",
"%d Stunden",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
"%d Stunden",
"%d Stunden",
"%d Stunden",
"%d Stunden"
],
"%d days": [
"%d Tag",
"%d Tage",
"%d days (2nd plural)",
"%d days (3rd plural)"
"%d Tage",
"%d Tage",
"%d Tage",
"%d Tage"
],
"%d weeks": [
"%d Woche",
"%d Wochen",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
"%d Wochen",
"%d Wochen",
"%d Wochen",
"%d Wochen"
],
"%d months": [
"%d Monat",
"%d Monate",
"%d months (2nd plural)",
"%d months (3rd plural)"
"%d Monate",
"%d Monate",
"%d Monate",
"%d Monate"
],
"%d years": [
"%d Jahr",
"%d Jahre",
"%d years (2nd plural)",
"%d years (3rd plural)"
"%d Monate",
"%d Monate",
"%d Monate",
"%d Monate"
],
"Never": "Nie",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Hinweis: Dies ist ein Versuchsdienst. Daten können jederzeit gelöscht werden. Kätzchen werden sterben, wenn du diesen Dienst missbrauchst.",
@ -82,30 +97,40 @@
"Dieses Dokument läuft in einer Sekunde ab.",
"Dieses Dokument läuft in %d Sekunden ab.",
"Dieses Dokument läuft in %d Sekunden ab.",
"Dieses Dokument läuft in %d Sekunden ab.",
"Dieses Dokument läuft in %d Sekunden ab.",
"Dieses Dokument läuft in %d Sekunden ab."
],
"This document will expire in %d minutes.": [
"Dieses Dokument läuft in einer Minute ab.",
"Dieses Dokument läuft in %d Minuten ab.",
"Dieses Dokument läuft in %d Minuten ab.",
"Dieses Dokument läuft in %d Minuten ab.",
"Dieses Dokument läuft in %d Minuten ab.",
"Dieses Dokument läuft in %d Minuten ab."
],
"This document will expire in %d hours.": [
"Dieses Dokument läuft in einer Stunde ab.",
"Dieses Dokument läuft in %d Stunden ab.",
"This document will expire in %d hours (2nd plural)",
"This document will expire in %d hours (3rd plural)"
"Dieses Dokument läuft in %d Stunden ab.",
"Dieses Dokument läuft in %d Stunden ab.",
"Dieses Dokument läuft in %d Stunden ab.",
"Dieses Dokument läuft in %d Stunden ab."
],
"This document will expire in %d days.": [
"Dieses Dokument läuft in einem Tag ab.",
"Dieses Dokument läuft in %d Tagen ab.",
"Dieses Dokument läuft in %d Tagen ab.",
"Dieses Dokument läuft in %d Tagen ab.",
"Dieses Dokument läuft in %d Tagen ab.",
"Dieses Dokument läuft in %d Tagen ab."
],
"This document will expire in %d months.": [
"Dieses Dokument läuft in einem Monat ab.",
"Dieses Dokument läuft in %d Monaten ab.",
"Dieses Dokument läuft in %d Monaten ab.",
"Dieses Dokument läuft in %d Monaten ab.",
"Dieses Dokument läuft in %d Monaten ab.",
"Dieses Dokument läuft in %d Monaten ab."
],
"Please enter the password for this paste:": "Bitte gib das Passwort für diesen Text ein:",
@ -189,5 +214,7 @@
"Your IP is not authorized to create pastes.": "Deine IP ist nicht berechtigt, Texte zu erstellen.",
"Trying to shorten a URL that isn't pointing at our instance.": "Versuch eine URL zu verkürzen, die nicht auf unsere Instanz zeigt.",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Fehler beim Aufruf von YOURLS. Wahrscheinlich ein Konfigurationsproblem, wie eine falsche oder fehlende \"apiurl\" oder \"signature\".",
"Error parsing YOURLS response.": "Fehler beim Verarbeiten der YOURLS-Antwort."
"Error parsing YOURLS response.": "Fehler beim Verarbeiten der YOURLS-Antwort.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Texte des \"Einmal\"-Typs können nach dem Öffnen nur einmal angezeigt werden. Möchtest Du ihn jetzt öffnen?",
"Yes, load it": "Ja, jetzt öffnen"
}

View File

@ -3,7 +3,6 @@
"%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.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Περισσότερες πληροφορίες στον <a href=\"https://privatebin.info/\">ιστότοπο του εργαλείου</a>.",
"Because ignorance is bliss": "Επειδή η άγνοια είναι ευτυχία",
"en": "el",
"Paste does not exist, has expired or has been deleted.": "Η επικόλληση δεν υπάρχει, έληξε ή διαγράφηκε",
"%s requires php %s or above to work. Sorry.": "%s απαιτεί php %s ή νεότερη για να λειτουργήσει. Συγγνώμη.",
"%s requires configuration section [%s] to be present in configuration file.": "%s απαιτεί οι ρυθμίσεις [%s] να υπάρχουν στο αρχείο ρυθμίσεων.",
@ -11,6 +10,8 @@
"Παρακαλώ περιμένετε %d δευτερόλεπτο μεταξύ κάθε επικόλλησης.",
"Παρακαλώ περιμένετε %d δευτερόλεπτα μεταξύ κάθε επικόλλησης.",
"Παρακαλώ περιμένετε %d δευτερόλεπτα μεταξύ κάθε επικόλλησης.",
"Παρακαλώ περιμένετε %d δευτερόλεπτα μεταξύ κάθε επικόλλησης.",
"Παρακαλώ περιμένετε %d δευτερόλεπτα μεταξύ κάθε επικόλλησης.",
"Παρακαλώ περιμένετε %d δευτερόλεπτα μεταξύ κάθε επικόλλησης."
],
"Paste is limited to %s of encrypted data.": "Η επικόλληση είναι περιορισμένη σε %s κρυπτογραφημένων δεδομένων.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Η JavaScript είναι απαραίτητη για να λειτουργήσει το %s. Συγγνώμη για την ταλαιπωρία.",
"%s requires a modern browser to work.": "%s απαιτεί σύγχρονο φυλλομετρητή (browser) για να λειτουργήσει.",
"New": "Νέο",
"Send": "Αποστολή",
"Create": "Δημιουργία",
"Clone": "Κλωνοποίηση",
"Raw text": "Κείμενο",
"Expires": "Λήγει",
@ -38,42 +39,56 @@
"%d δευτερόλεπτο",
"%d δευτερόλεπτα",
"%d δευτερόλεπτα",
"%d δευτερόλεπτα",
"%d δευτερόλεπτα",
"%d δευτερόλεπτα"
],
"%d minutes": [
"%d λεπτό",
"%d λεπτά",
"%d λεπτά",
"%d λεπτά",
"%d λεπτά",
"%d λεπτά"
],
"%d hours": [
"%d ώρα",
"%d ώρες",
"%d ώρες",
"%d ώρες",
"%d ώρες",
"%d ώρες"
],
"%d days": [
"%d ημέρα",
"%d ημέρες",
"%d ημέρες",
"%d ημέρες",
"%d ημέρες",
"%d ημέρες"
],
"%d weeks": [
"%d εβδομάδα",
"%d εβδομάδες",
"%d εβδομάδες",
"%d εβδομάδες",
"%d εβδομάδες",
"%d εβδομάδες"
],
"%d months": [
"%d μήνας",
"%d μήνες",
"%d μήνες",
"%d μήνες",
"%d μήνες",
"%d μήνες"
],
"%d years": [
"%d χρόνο",
"%d χρόνια",
"%d χρόνια",
"%d χρόνια",
"%d χρόνια",
"%d χρόνια"
],
"Never": "Ποτέ",
@ -82,30 +97,40 @@
"Αυτό το έγγραφο θα λήξει σε %d δευτερόλεπτο.",
"Αυτό το έγγραφο θα λήξει σε %d δευτερόλεπτα.",
"Αυτό το έγγραφο θα λήξει σε %d δευτερόλεπτα.",
"Αυτό το έγγραφο θα λήξει σε %d δευτερόλεπτα.",
"Αυτό το έγγραφο θα λήξει σε %d δευτερόλεπτα.",
"Αυτό το έγγραφο θα λήξει σε %d δευτερόλεπτα."
],
"This document will expire in %d minutes.": [
"Αυτό το έγγραφο θα λήξει σε %d λεπτό.",
"Αυτό το έγγραφο θα λήξει σε %d λεπτά.",
"Αυτό το έγγραφο θα λήξει σε %d λεπτά.",
"Αυτό το έγγραφο θα λήξει σε %d λεπτά.",
"Αυτό το έγγραφο θα λήξει σε %d λεπτά.",
"Αυτό το έγγραφο θα λήξει σε %d λεπτά."
],
"This document will expire in %d hours.": [
"Αυτό το έγγραφο θα λήξει σε %d ώρα.",
"Αυτό το έγγραφο θα λήξει σε %d ώρες.",
"Αυτό το έγγραφο θα λήξει σε %d ώρες.",
"Αυτό το έγγραφο θα λήξει σε %d ώρες.",
"Αυτό το έγγραφο θα λήξει σε %d ώρες.",
"Αυτό το έγγραφο θα λήξει σε %d ώρες."
],
"This document will expire in %d days.": [
"Αυτό το έγγραφο θα λήξει σε %d ημέρα.",
"Αυτό το έγγραφο θα λήξει σε %d ημέρες.",
"Αυτό το έγγραφο θα λήξει σε %d ημέρες.",
"Αυτό το έγγραφο θα λήξει σε %d ημέρες.",
"Αυτό το έγγραφο θα λήξει σε %d ημέρες.",
"Αυτό το έγγραφο θα λήξει σε %d ημέρες."
],
"This document will expire in %d months.": [
"Αυτό το έγγραφο θα λήξει σε %d μήνα.",
"Αυτό το έγγραφο θα λήξει σε %d μήνες.",
"Αυτό το έγγραφο θα λήξει σε %d μήνες.",
"Αυτό το έγγραφο θα λήξει σε %d μήνες.",
"Αυτό το έγγραφο θα λήξει σε %d μήνες.",
"Αυτό το έγγραφο θα λήξει σε %d μήνες."
],
"Please enter the password for this paste:": "Παρακαλώ εισάγετε τον κωδικό για αυτή την επικόληση:",
@ -189,5 +214,7 @@
"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.",
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,7 +3,6 @@
"%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",
"en": "en",
"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.",
@ -11,7 +10,9 @@
"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. (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.",
@ -25,7 +26,7 @@
"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",
"Send": "Send",
"Create": "Create",
"Clone": "Clone",
"Raw text": "Raw text",
"Expires": "Expires",
@ -38,43 +39,57 @@
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd 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 (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 (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 (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 (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 (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 (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.",
@ -82,31 +97,41 @@
"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. (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. (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. (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. (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. (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?)",
@ -189,5 +214,7 @@
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,7 +3,6 @@
"%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 es un \"pastebin\" en línea minimalista de código abierto, donde el servidor no tiene ningún conocimiento de los datos guardados. Los datos son cifrados/descifrados %sen el navegador%s usando 256 bits AES.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Más información en la <a href=\"https://privatebin.info/\">página del proyecto</a>.",
"Because ignorance is bliss": "Porque la ignorancia es felicidad",
"en": "es",
"Paste does not exist, has expired or has been deleted.": "El \"paste\" no existe, ha caducado o ha sido eliminado.",
"%s requires php %s or above to work. Sorry.": "%s requiere php %s o superior para funcionar. Lo siento.",
"%s requires configuration section [%s] to be present in configuration file.": "%s requiere que la sección de configuración [%s] esté presente en el archivo de configuración.",
@ -11,6 +10,8 @@
"Por favor espere %d segundo entre cada publicación.",
"Por favor espere %d segundos entre cada publicación.",
"Por favor espere %d segundos entre cada publicación.",
"Por favor espere %d segundos entre cada publicación.",
"Por favor espere %d segundos entre cada publicación.",
"Por favor espere %d segundos entre cada publicación."
],
"Paste is limited to %s of encrypted data.": "El \"paste\" está limitado a %s de datos cifrados.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript es necesario para que %s funcione. Sentimos los inconvenientes ocasionados.",
"%s requires a modern browser to work.": "%s requiere un navegador moderno para funcionar.",
"New": "Nuevo",
"Send": "Enviar",
"Create": "Crear",
"Clone": "Clonar",
"Raw text": "Texto sin formato",
"Expires": "Caducar en",
@ -38,42 +39,56 @@
"%d segundo",
"%d segundos",
"%d segundos",
"%d segundos",
"%d segundos",
"%d segundos"
],
"%d minutes": [
"%d minuto",
"%d minutos",
"%d minutos",
"%d minutos",
"%d minutos",
"%d minutos"
],
"%d hours": [
"%d hora",
"%d horas",
"%d horas",
"%d horas",
"%d horas",
"%d horas"
],
"%d days": [
"%d día",
"%d días",
"%d días",
"%d días",
"%d días",
"%d días"
],
"%d weeks": [
"%d semana",
"%d semanas",
"%d semanas",
"%d semanas",
"%d semanas",
"%d semanas"
],
"%d months": [
"%d mes",
"%d meses",
"%d minutos",
"%d meses",
"%d meses",
"%d meses",
"%d meses"
],
"%d years": [
"%d año",
"%d años",
"%d años",
"%d años",
"%d años",
"%d años"
],
"Never": "Nunca",
@ -82,30 +97,40 @@
"Este documento caducará en un segundo.",
"Este documento caducará en %d segundos.",
"Este documento caducará en %d segundos",
"Este documento caducará en %d segundos",
"Este documento caducará en %d segundos",
"Este documento caducará en %d segundos"
],
"This document will expire in %d minutes.": [
"Este documento caducará en un minuto.",
"Este documento caducará en %d minutos.",
"Este documento caducará en %d minutos",
"Este documento caducará en %d minutos",
"Este documento caducará en %d minutos",
"Este documento caducará en %d minutos"
],
"This document will expire in %d hours.": [
"Este documento caducará en una hora.",
"Este documento caducará en %d horas.",
"Este documento caducará en %d horas",
"Este documento caducará en %d horas",
"Este documento caducará en %d horas",
"Este documento caducará en %d horas"
],
"This document will expire in %d days.": [
"Este documento caducará en un día.",
"Este documento caducará en %d días.",
"Este documento caducará en %d días",
"Este documento caducará en %d días",
"Este documento caducará en %d días",
"Este documento caducará en %d días"
],
"This document will expire in %d months.": [
"Este documento caducará en un mes.",
"Este documento caducará en %d meses.",
"Este documento caducará en %d meses",
"Este documento caducará en %d meses",
"Este documento caducará en %d meses",
"Este documento caducará en %d meses"
],
"Please enter the password for this paste:": "Por favor ingrese la contraseña para este \"paste\":",
@ -187,7 +212,9 @@
"URL shortener may expose your decrypt key in URL.": "El acortador de URL puede exponer su clave de descifrado en el URL.",
"Save paste": "Guardar \"paste\"",
"Your IP is not authorized to create pastes.": "Tu IP no está autorizada para crear contenido.",
"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.": "Intentando acortar una URL que no apunta a nuestra instancia.",
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,7 +3,6 @@
"%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 on minimalistlik, avatud lähtekoodiga online pastebin, kus serveril pole kleebitud andmete kohta teadmist. Andmed krüpteeritakse/dekrüpteeritakse %sbrauseris%s kasutades 256-bitist AES-i.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Lisateave <a href=\"https://privatebin.info/\">projekti lehel</a>.",
"Because ignorance is bliss": "Kuna teadmatus on õndsus",
"en": "et",
"Paste does not exist, has expired or has been deleted.": "Kleebet ei eksisteeri, on aegunud või on kustutatud.",
"%s requires php %s or above to work. Sorry.": "%s vajab, et oleks php %s või kõrgem, et töötada. Vabandame.",
"%s requires configuration section [%s] to be present in configuration file.": "%s vajab, et [%s] seadistamise jaotis oleks olemas konfiguratsioonifailis.",
@ -11,6 +10,8 @@
"Palun oota %d sekund iga postituse vahel.",
"Palun oota %d sekundit iga postituse vahel.",
"Palun oota %d sekundit iga postituse vahel.",
"Palun oota %d sekundit iga postituse vahel.",
"Palun oota %d sekundit iga postituse vahel.",
"Palun oota %d sekundit iga postituse vahel."
],
"Paste is limited to %s of encrypted data.": "Kleepe limiit on %s krüpteeritud andmeid.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript on vajalik %s'i töötamiseks. Vabandame ebamugavuste pärast.",
"%s requires a modern browser to work.": "%s vajab töötamiseks kaasaegset brauserit.",
"New": "Uus",
"Send": "Saada",
"Create": "Loo",
"Clone": "Klooni",
"Raw text": "Lähtetekst",
"Expires": "Aegub",
@ -38,71 +39,95 @@
"%d sekund",
"%d sekundit",
"%d sekundit",
"%d sekundit",
"%d sekundit",
"%d sekundit"
],
"%d minutes": [
"%d minut",
"%d minutit",
"%d minutit",
"%d minutit",
"%d minutit",
"%d minutit"
],
"%d hours": [
"%d tund",
"%d tundi",
"%d tundi",
"%d tundi",
"%d tundi",
"%d tundi"
],
"%d days": [
"%d päev",
"%d päeva",
"%d päeva",
"%d päeva",
"%d päeva",
"%d päeva"
],
"%d weeks": [
"%d nädal",
"%d nädalat",
"%d nädalat",
"%d nädalat",
"%d nädalat",
"%d nädalat"
],
"%d months": [
"%d kuu",
"%d kuud",
"%d kuud",
"%d kuud",
"%d kuud",
"%d kuud"
],
"%d years": [
"%d aasta",
"%d aastat",
"%d aastat",
"%d aastat",
"%d aastat",
"%d aastat"
],
"Never": "Mitte kunagi",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Märge: See on testimisteenus: Andmeid võidakse igal ajal kustutada. Kiisupojad hukuvad, kui seda teenust kuritarvitad.",
"This document will expire in %d seconds.": [
"See dokument aegub %d sekundi pärast.",
"See dokument aegub %d sekundi pärast.",
"See dokument aegub %d sekundi pärast.",
"See dokument aegub %d sekundi pärast.",
"See dokument aegub %d sekundi pärast.",
"See dokument aegub %d sekundi pärast."
],
"This document will expire in %d minutes.": [
"See dokument aegub %d minuti pärast.",
"See dokument aegub %d minuti pärast.",
"See dokument aegub %d minuti pärast.",
"See dokument aegub %d minuti pärast.",
"See dokument aegub %d minuti pärast.",
"See dokument aegub %d minuti pärast."
],
"This document will expire in %d hours.": [
"See dokument aegub %d tunni pärast.",
"See dokument aegub %d tunni pärast.",
"See dokument aegub %d tunni pärast.",
"See dokument aegub %d tunni pärast.",
"See dokument aegub %d tunni pärast.",
"See dokument aegub %d tunni pärast."
],
"This document will expire in %d days.": [
"See dokument aegub %d päeva pärast.",
"See dokument aegub %d päeva pärast.",
"See dokument aegub %d päeva pärast.",
"See dokument aegub %d päeva pärast.",
"See dokument aegub %d päeva pärast.",
"See dokument aegub %d päeva pärast."
],
"This document will expire in %d months.": [
"See dokument aegub %d kuu pärast.",
"See dokument aegub %d kuu pärast.",
"See dokument aegub %d kuu pärast.",
"See dokument aegub %d kuu pärast.",
"See dokument aegub %d kuu pärast.",
@ -186,8 +211,10 @@
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Kirja nägemiseks külasta seda linki. Teistele URL-i andmine lubab ka neil ligi pääseda kirjale.",
"URL shortener may expose your decrypt key in URL.": "URL-i lühendaja võib paljastada sinu dekrüpteerimisvõtme URL-is.",
"Save paste": "Salvesta kleebe",
"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."
"Your IP is not authorized to create pastes.": "Su IP-l ei ole lubatud kleepeid luua.",
"Trying to shorten a URL that isn't pointing at our instance.": "Püüame lühendada URL-i, mis ei viita meie instantsile.",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Viga YOURLS-i kutsumisel. Tõenäoliselt konfiguratsiooniprobleem, näiteks vale või puuduv \"apiurl\" või \"signature\".",
"Error parsing YOURLS response.": "Viga YOURLS vastuse parsimisel.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -1,16 +1,17 @@
{
"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 on minimalistinen, avoimen lähdekoodin online pastebin jossa palvelimella ei ole tietoa syötetystä datasta. Data salataan/puretaan %sselaimessa%s käyttäen 256-bittistä AES:ää.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Enemmän tietoa <a href=\"https://privatebin.info/\">projektisivulla</a>.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Lisää tietoa <a href=\"https://privatebin.info/\">projektisivulla</a>.",
"Because ignorance is bliss": "Koska tieto lisää tuskaa",
"en": "fi",
"Paste does not exist, has expired or has been deleted.": "Pastea ei ole olemassa, se on vanhentunut, tai se on poistettu.",
"%s requires php %s or above to work. Sorry.": "%s tarvitsee php %s-versiota tai uudempaa toimiakseen. Anteeksi.",
"Paste does not exist, has expired or has been deleted.": "Pastea ei ole olemassa, se on vanhentunut tai se on poistettu.",
"%s requires php %s or above to work. Sorry.": "%s vaatii php:n %s-version tai uudemman toimiakseen. Anteeksi.",
"%s requires configuration section [%s] to be present in configuration file.": "%s vaatii konfiguraatio-osion [%s] olevan läsnä konfiguraatiotiedostossa.",
"Please wait %d seconds between each post.": [
"Odotathan %d sekuntin jokaisen lähetyksen välillä.",
"Odotathan %d sekuntia jokaisen lähetyksen välillä.",
"Odotathan %d sekuntia jokaisen lähetyksen välillä.",
"Odotathan %d sekuntia jokaisen lähetyksen välillä.",
"Odotathan %d sekuntia jokaisen lähetyksen välillä.",
"Odotathan %d sekuntia jokaisen lähetyksen välillä."
],
"Paste is limited to %s of encrypted data.": "Paste on rajoitettu kokoon %s salattua dataa.",
@ -22,10 +23,10 @@
"Paste is not of burn-after-reading type.": "Paste ei ole polta-lukemisen-jälkeen-tyyppiä.",
"Wrong deletion token. Paste was not deleted.": "Virheellinen poistotunniste. Pastea ei poistettu.",
"Paste was properly deleted.": "Paste poistettiin kunnolla.",
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScriptiä tarvitaan jotta %s toimisi. Anteeksi haitasta.",
"%s requires a modern browser to work.": "%s tarvitsee modernia selainta toimiakseen.",
"JavaScript is required for %s to work. Sorry for the inconvenience.": "%s vaatii JavaScriptiä toimiakseen. Anteeksi haitasta.",
"%s requires a modern browser to work.": "%s vaatii modernin selaimen toimiakseen.",
"New": "Uusi",
"Send": "Lähetä",
"Create": "Luo",
"Clone": "Kloonaa",
"Raw text": "Raaka teksti",
"Expires": "Vanhenee",
@ -33,47 +34,61 @@
"Open discussion": "Avaa keskustelu",
"Password (recommended)": "Salasana (suositeltu)",
"Discussion": "Keskustelu",
"Toggle navigation": "Navigointi päällä/pois",
"Toggle navigation": "Navigointi päälle/pois",
"%d seconds": [
"%d sekunti",
"%d sekuntia",
"%d sekuntia",
"%d sekuntia",
"%d sekuntia",
"%d sekuntia"
],
"%d minutes": [
"%d minuutti",
"%d minuuttia",
"%d minuuttia",
"%d minuuttia",
"%d minuuttia",
"%d minuuttia"
],
"%d hours": [
"%d tunti",
"%d tuntia",
"%d tuntia",
"%d tuntia",
"%d tuntia",
"%d tuntia"
],
"%d days": [
"%d päivä",
"%d päivää",
"%d päivää",
"%d päivää",
"%d päivää",
"%d päivää"
],
"%d weeks": [
"%d viikko",
"%d viikkoa",
"%d viikkoa",
"%d viikkoa",
"%d viikkoa",
"%d viikkoa"
],
"%d months": [
"%d kuukausi",
"%d kuukautta",
"%d kuukautta",
"%d kuukautta",
"%d kuukautta",
"%d kuukautta"
],
"%d years": [
"%d vuosi",
"%d vuotta",
"%d vuotta",
"%d vuotta",
"%d vuotta",
"%d vuotta"
],
"Never": "Ei koskaan",
@ -82,27 +97,37 @@
"Tämä dokumentti vanhenee %d sekuntissa.",
"Tämä dokumentti vanhenee %d sekunnissa.",
"Tämä dokumentti vanhenee %d sekunnissa.",
"Tämä dokumentti vanhenee %d sekunnissa.",
"Tämä dokumentti vanhenee %d sekunnissa.",
"Tämä dokumentti vanhenee %d sekunnissa."
],
"This document will expire in %d minutes.": [
"Tämä dokumentti vanhenee %d minuutissa.",
"Tämä dokumentti vanhenee %d minuutissa.",
"Tämä dokumentti vanhenee %d minuutissa.",
"Tämä dokumentti vanhenee %d minuutissa.",
"Tämä dokumentti vanhenee %d minuutissa.",
"Tämä dokumentti vanhenee %d minuutissa."
],
"This document will expire in %d hours.": [
"Tämä dokumentti vanhenee %d tunnissa.",
"Tämä dokumentti vanhenee %d tunnissa.",
"Tämä dokumentti vanhenee %d tunnissa.",
"Tämä dokumentti vanhenee %d tunnissa.",
"Tämä dokumentti vanhenee %d tunnissa.",
"Tämä dokumentti vanhenee %d tunnissa."
],
"This document will expire in %d days.": [
"Tämä dokumentti vanhenee %d päivässä.",
"Tämä dokumentti vanhenee %d päivässä.",
"Tämä dokumentti vanhenee %d päivässä.",
"Tämä dokumentti vanhenee %d päivässä.",
"Tämä dokumentti vanhenee %d päivässä.",
"Tämä dokumentti vanhenee %d päivässä."
],
"This document will expire in %d months.": [
"Tämä dokumentti vanhenee %d kuukaudessa.",
"Tämä dokumentti vanhenee %d kuukaudessa.",
"Tämä dokumentti vanhenee %d kuukaudessa.",
"Tämä dokumentti vanhenee %d kuukaudessa.",
"Tämä dokumentti vanhenee %d kuukaudessa.",
@ -154,7 +179,7 @@
"Invalid attachment.": "Virheellinen liite.",
"Options": "Asetukset",
"Shorten URL": "Lyhennä URL",
"Editor": "Muokkaaja",
"Editor": "Muokkain",
"Preview": "Esikatselu",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s vaatii PATH:in loppuvan \"%s\"-merkkiin. Päivitäthän PATH:in index.php:ssäsi.",
"Decrypt": "Pura",
@ -183,11 +208,13 @@
"Convert To UTC": "Muuta UTC:ksi",
"Close": "Sulje",
"Encrypted note on %s": "Salattu viesti %sissä",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Käy tässä linkissä nähdäksesi viestin. URL:n antaminen kenellekään antaa heidänkin päästä katsomeen viestiä. ",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Vieraile tässä linkissä nähdäksesi viestin. URL:n antaminen kenellekään antaa heidänkin päästä katsomaan viestiä.",
"URL shortener may expose your decrypt key in URL.": "URL-lyhentäjä voi paljastaa purkuavaimesi URL:ssä.",
"Save paste": "Tallenna paste",
"Your IP is not authorized to create pastes.": "IP:llesi ei ole annettu oikeutta luoda pasteja.",
"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."
"Trying to shorten a URL that isn't pointing at our instance.": "Yritetään lyhentää URL-osoite, joka ei osoita meidän instanssiiin.",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Virhe kutsuttaessa YOURLS. Luultavasti asetusongelma kuten väärä tai puuttuuva \"apiurl\" tai \"signature\".",
"Error parsing YOURLS response.": "Virhe jäsennettäessä YOURLS-vastausta.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,7 +3,6 @@
"%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 est un 'pastebin' (ou gestionnaire d'extraits de texte et de code source) minimaliste et open source, dans lequel le serveur n'a aucune connaissance des données envoyées. Les données sont chiffrées/déchiffrées %sdans le navigateur%s par un chiffrement AES 256 bits.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Plus d'informations sur <a href=\"https://privatebin.info/\">la page du projet</a>.",
"Because ignorance is bliss": "Vivons heureux, vivons cachés",
"en": "fr",
"Paste does not exist, has expired or has been deleted.": "Le paste n'existe pas, a expiré, ou a été supprimé.",
"%s requires php %s or above to work. Sorry.": "Désolé, %s nécessite php %s ou supérieur pour fonctionner.",
"%s requires configuration section [%s] to be present in configuration file.": "%s a besoin de la section de configuration [%s] dans le fichier de configuration pour fonctionner.",
@ -11,6 +10,8 @@
"Merci d'attendre %d seconde entre chaque publication.",
"Merci d'attendre %d secondes entre chaque publication.",
"Merci d'attendre %d secondes entre chaque publication.",
"Merci d'attendre %d secondes entre chaque publication.",
"Merci d'attendre %d secondes entre chaque publication.",
"Merci d'attendre %d secondes entre chaque publication."
],
"Paste is limited to %s of encrypted data.": "Le paste est limité à %s de données chiffrées.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript est requis pour faire fonctionner %s. Désolé pour cet inconvénient.",
"%s requires a modern browser to work.": "%s nécessite un navigateur moderne pour fonctionner.",
"New": "Nouveau",
"Send": "Envoyer",
"Create": "Créer",
"Clone": "Cloner",
"Raw text": "Texte brut",
"Expires": "Expire",
@ -37,72 +38,96 @@
"%d seconds": [
"%d seconde",
"%d secondes",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
"%d secondes",
"%d secondes",
"%d secondes",
"%d secondes"
],
"%d minutes": [
"%d minute",
"%d minutes",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
"%d minutes",
"%d minutes",
"%d minutes",
"%d minutes"
],
"%d hours": [
"%d heure",
"%d heures",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
"%d heures",
"%d heures",
"%d heures",
"%d heures"
],
"%d days": [
"%d jour",
"%d jours",
"%d days (2nd plural)",
"%d days (3rd plural)"
"%d jours",
"%d jours",
"%d jours",
"%d jours"
],
"%d weeks": [
"%d semaine",
"%d semaines",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
"%d semaines",
"%d semaines",
"%d semaines",
"%d semaines"
],
"%d months": [
"%d mois",
"%d mois",
"%d months (2nd plural)",
"%d months (3rd plural)"
"%d mois",
"%d mois",
"%d mois",
"%d mois"
],
"%d years": [
"%d an",
"%d ans",
"%d years (2nd plural)",
"%d years (3rd plural)"
"%d ans",
"%d ans",
"%d ans",
"%d ans"
],
"Never": "Jamais",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Note : Ceci est un service de test : les données peuvent être supprimées à tout moment. Des chatons mourront si vous utilisez ce service de manière abusive.",
"This document will expire in %d seconds.": [
"Ce document expirera dans %d seconde.",
"Ce document expirera dans %d secondes.",
"This document will expire in %d seconds (2nd plural)",
"This document will expire in %d seconds (3rd plural)"
"Ce document expirera dans %d secondes.",
"Ce document expirera dans %d secondes.",
"Ce document expirera dans %d secondes.",
"Ce document expirera dans %d secondes."
],
"This document will expire in %d minutes.": [
"Ce document expirera dans %d minute.",
"Ce document expirera dans %d minutes.",
"Ce document expirera dans %d minutes.",
"Ce document expirera dans %d minutes.",
"Ce document expirera dans %d minutes.",
"Ce document expirera dans %d minutes."
],
"This document will expire in %d hours.": [
"Ce document expirera dans %d heure.",
"Ce document expirera dans %d heures.",
"Ce document expirera dans %d heures.",
"Ce document expirera dans %d heures.",
"Ce document expirera dans %d heures.",
"Ce document expirera dans %d heures."
],
"This document will expire in %d days.": [
"Ce document expirera dans %d jour.",
"Ce document expirera dans %d jours.",
"Ce document expirera dans %d jours.",
"Ce document expirera dans %d jours.",
"Ce document expirera dans %d jours.",
"Ce document expirera dans %d jours."
],
"This document will expire in %d months.": [
"Ce document expirera dans %d mois.",
"Ce document expirera dans %d mois.",
"Ce document expirera dans %d mois.",
"Ce document expirera dans %d mois.",
"Ce document expirera dans %d mois.",
@ -187,7 +212,9 @@
"URL shortener may expose your decrypt key in URL.": "Raccourcir l'URL peut exposer votre clé de déchiffrement dans l'URL.",
"Save paste": "Sauver le paste",
"Your IP is not authorized to create pastes.": "Votre adresse IP n'est pas autorisée à créer des 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."
"Trying to shorten a URL that isn't pointing at our instance.": "Essayer de raccourcir une URL qui ne pointe pas vers notre instance.",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Erreur lors de l'appel de YOURLS. Peut-être un problème de configuration, comme \"apiurl\" ou \"signature\" manquant.",
"Error parsing YOURLS response.": "Erreur d'analyse de la réponse YOURLS.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Les pastes de type \"Effacer après la lecture\" ne peuvent être affichés qu'une seule fois. Voulez-vous l'ouvrir maintenant ?",
"Yes, load it": "Oui, chargez-le"
}

View File

@ -3,7 +3,6 @@
"%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": "כיוון שבורות היא ברכה",
"en": "he",
"Paste does not exist, has expired or has been deleted.": "ההדבקה לא קיימת, פגה או נמחקה.",
"%s requires php %s or above to work. Sorry.": "%s דורש PHP %s כדי לפעול.",
"%s requires configuration section [%s] to be present in configuration file.": "%s דורש שסעיף ההגדרות [%s] יהיה קיים בקובץ ההגדרות.",
@ -11,6 +10,8 @@
"נא להמתין שנייה אחת בין פרסום לפרסום.",
"נא להמתין %d שניות בין פרסום לפרסום.",
"נא להמתין %d שניות בין פרסום לפרסום.",
"נא להמתין %d שניות בין פרסום לפרסום.",
"נא להמתין %d שניות בין פרסום לפרסום.",
"נא להמתין %d שניות בין פרסום לפרסום."
],
"Paste is limited to %s of encrypted data.": "ההדבקה מוגבלת ל־%s של נתונים מוצפנים.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "צריך JavaScript כדי לאפשר ל־%s לפעול. סליחה על חוסר הנוחות.",
"%s requires a modern browser to work.": "%s דורש דפדפן מודרני כדי לפעול.",
"New": "חדש",
"Send": "שליחה",
"Create": "צור",
"Clone": "שכפול",
"Raw text": "טקסט גולמי",
"Expires": "Expires",
@ -37,43 +38,57 @@
"%d seconds": [
"שנייה אחת",
"%d שניות",
"%d שניות (צורת ריבוי 2)",
"%d שניות",
"%d שניות",
"%d שניות",
"%d שניות"
],
"%d minutes": [
"דקה אחת",
"%d דקות",
"%d דקות",
"%d דקות",
"%d דקות",
"%d דקות"
],
"%d hours": [
"שעה אחת",
"%d hours (1st plural)",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
"%d hours (3rd plural)",
"%d hours (4th plural)",
"%d hours (5th plural)"
],
"%d days": [
"יום אחד",
"%d ימים",
"%d ימים",
"%d ימים",
"%d ימים",
"%d ימים"
],
"%d weeks": [
"שבוע אחד",
"%d שבועות",
"%d שבועות",
"%d שבועות",
"%d שבועות",
"%d שבועות"
],
"%d months": [
"חודש אחד",
"%d חודשים",
"%d חודשים",
"%d חודשים",
"%d חודשים",
"%d חודשים"
],
"%d years": [
"שנה אחת",
"%d שנים",
"%d שנים",
"%d שנים",
"%d שנים",
"%d שנים"
],
"Never": "לעולם לא",
@ -82,31 +97,41 @@
"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. (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. (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. (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. (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. (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:": "נא למלא את הססמה להדבקה הזו:",
"Could not decrypt data (Wrong key?)": "לא ניתן לפענח את הנתונים (מפתח שגוי?)",
@ -189,5 +214,7 @@
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,7 +3,6 @@
"%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",
"en": "hi",
"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.",
@ -11,7 +10,9 @@
"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. (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.",
@ -25,7 +26,7 @@
"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",
"Send": "Send",
"Create": "Create",
"Clone": "Clone",
"Raw text": "Raw text",
"Expires": "Expires",
@ -38,43 +39,57 @@
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd 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 (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 (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 (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 (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 (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 (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.",
@ -82,31 +97,41 @@
"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. (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. (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. (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. (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. (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?)",
@ -189,5 +214,7 @@
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,11 +3,12 @@
"%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.": "A %s egy minimalista, nyílt forráskódú adattároló szoftver, ahol a szerver semmilyen információt nem tárol a feltett adatról. Azt ugyanis a %sböngésződ%s segítségével titkosítja és oldja fel 256 bit hosszú titkosítási kulcsú AES-t használva.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "További információt a <a href=\"https://privatebin.info/\">projekt oldalán</a> találsz.",
"Because ignorance is bliss": "A titok egyfajta hatalom.",
"en": "hu",
"Paste does not exist, has expired or has been deleted.": "A bejegyzés nem létezik, lejárt vagy törölve lett.",
"%s requires php %s or above to work. Sorry.": "Bocs, de a %s működéséhez %s vagy ezt meghaladó verziójú php-s környezet szükséges.",
"%s requires configuration section [%s] to be present in configuration file.": "A %s megfelelő működéséhez a konfigurációs fájlban a [%s] résznek léteznie kell.",
"Please wait %d seconds between each post.": [
"Kérlek várj %d másodpercet két beküldés között.",
"Kérlek várj %d másodpercet két beküldés között.",
"Kérlek várj %d másodpercet két beküldés között.",
"Kérlek várj %d másodpercet két beküldés között.",
"Kérlek várj %d másodpercet két beküldés között.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript szükséges a %s működéséhez. Elnézést a fennakadásért.",
"%s requires a modern browser to work.": "A %s működéséhez a jelenleginél újabb böngészőre van szükség.",
"New": "Új",
"Send": "Beküldöm!",
"Create": "Létrehozás",
"Clone": "Másol",
"Raw text": "A nyers szöveg",
"Expires": "Lejárati idő",
@ -37,72 +38,96 @@
"%d seconds": [
"%d másodperc",
"%d másodperc",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
"%d másodperc",
"%d másodperc",
"%d másodperc",
"%d másodperc"
],
"%d minutes": [
"%d perc",
"%d perc",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
"%d perc",
"%d perc",
"%d perc",
"%d perc"
],
"%d hours": [
"%d óra",
"%d óra",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
"%d óra",
"%d óra",
"%d óra",
"%d óra"
],
"%d days": [
"%d nap",
"%d nap",
"%d days (2nd plural)",
"%d days (3rd plural)"
"%d nap",
"%d nap",
"%d nap",
"%d nap"
],
"%d weeks": [
"%d hét",
"%d hét",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
"%d hét",
"%d hét",
"%d hét",
"%d hét"
],
"%d months": [
"%d hónap",
"%d hónap",
"%d months (2nd plural)",
"%d months (3rd plural)"
"%d hónap",
"%d hónap",
"%d hónap",
"%d hónap"
],
"%d years": [
"%d év",
"%d év",
"%d years (2nd plural)",
"%d years (3rd plural)"
"%d év",
"%d év",
"%d év",
"%d év"
],
"Never": "Soha",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Megjegyzés: ez egy teszt szolgáltatás, az adatok bármikor törlődhetnek. Ha visszaélsz vele, kiscicák bánhatják! :)",
"This document will expire in %d seconds.": [
"Ez a bejegyzés %d másodperc múlva megsemmisül.",
"Ez a bejegyzés %d másodperc múlva megsemmisül.",
"Ez a bejegyzés %d másodperc múlva megsemmisül.",
"Ez a bejegyzés %d másodperc múlva megsemmisül.",
"Ez a bejegyzés %d másodperc múlva megsemmisül.",
"Ez a bejegyzés %d másodperc múlva megsemmisül."
],
"This document will expire in %d minutes.": [
"Ez a bejegyzés %d perc múlva megsemmisül.",
"Ez a bejegyzés %d perc múlva megsemmisül.",
"Ez a bejegyzés %d perc múlva megsemmisül.",
"Ez a bejegyzés %d perc múlva megsemmisül.",
"Ez a bejegyzés %d perc múlva megsemmisül.",
"Ez a bejegyzés %d perc múlva megsemmisül."
],
"This document will expire in %d hours.": [
"Ez a bejegyzés %d óra múlva megsemmisül.",
"Ez a bejegyzés %d óra múlva megsemmisül.",
"Ez a bejegyzés %d óra múlva megsemmisül.",
"Ez a bejegyzés %d óra múlva megsemmisül.",
"Ez a bejegyzés %d óra múlva megsemmisül.",
"Ez a bejegyzés %d óra múlva megsemmisül."
],
"This document will expire in %d days.": [
"Ez a bejegyzés %d nap múlva megsemmisül.",
"Ez a bejegyzés %d nap múlva megsemmisül.",
"Ez a bejegyzés %d nap múlva megsemmisül.",
"Ez a bejegyzés %d nap múlva megsemmisül.",
"Ez a bejegyzés %d nap múlva megsemmisül.",
"Ez a bejegyzés %d nap múlva megsemmisül."
],
"This document will expire in %d months.": [
"Ez a bejegyzés %d hónap múlva megsemmisül.",
"Ez a bejegyzés %d hónap múlva megsemmisül.",
"Ez a bejegyzés %d hónap múlva megsemmisül.",
"Ez a bejegyzés %d hónap múlva megsemmisül.",
"Ez a bejegyzés %d hónap múlva megsemmisül.",
@ -189,5 +214,7 @@
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,11 +3,12 @@
"%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 adalah sebuah pastebin online sumber terbuka dan minimalis, dimana servernya tersebut tidak punya pengetahuan tentang data yang ditempelkan. Data tersebut di enkrip/dekrip %sdi dalam browser%s menggunakan metode enkrip AES 256 bit.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Infomasi lebih lanjut pada <a href=\"https://privatebin.info/\">halaman proyek</a>.",
"Because ignorance is bliss": "Karena ketidaktahuan adalah kebahagiaan, gitu loh",
"en": "id",
"Paste does not exist, has expired or has been deleted.": "Paste tidak ada, telah kedaluwarsa atau telah dihapus.",
"%s requires php %s or above to work. Sorry.": "%s memerlukan php %s atau versi diatasnya untuk dapat dijalankan. Maaf.",
"%s requires configuration section [%s] to be present in configuration file.": "%s membutuhkan bagian konfigurasi [%s] untuk ada di file konfigurasi.",
"Please wait %d seconds between each post.": [
"Silahkan menunggu %d detik antara masing-masing postingan.",
"Silahkan menunggu %d detik antara masing-masing postingan.",
"Silahkan menunggu %d detik antara masing-masing postingan.",
"Silahkan menunggu %d detik antara masing-masing postingan.",
"Silahkan menunggu %d detik antara masing-masing postingan.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript diperlukan agar %s bekerja. Maaf untuk ketidaknyamanannya.",
"%s requires a modern browser to work.": "%s memerlukan sebuah browser modern untuk bekerja.",
"New": "Baru",
"Send": "Kirim",
"Create": "Buat baru",
"Clone": "Klon",
"Raw text": "Teks mentah",
"Expires": "Kadaluarsa",
@ -35,42 +36,56 @@
"Discussion": "Diskusi",
"Toggle navigation": "Alihkan navigasi",
"%d seconds": [
"%d detik",
"%d detik",
"%d detik",
"%d detik",
"%d detik",
"%d detik"
],
"%d minutes": [
"%d menit",
"%d menit",
"%d menit",
"%d menit",
"%d menit",
"%d menit"
],
"%d hours": [
"%d jam",
"%d jam",
"%d jam",
"%d jam",
"%d jam",
"%d jam"
],
"%d days": [
"%d hari",
"%d hari",
"%d hari",
"%d hari",
"%d hari",
"%d hari"
],
"%d weeks": [
"%d minggu",
"%d minggu",
"%d minggu",
"%d minggu",
"%d minggu",
"%d minggu"
],
"%d months": [
"%d bulan",
"%d bulan",
"%d bulan",
"%d bulan",
"%d bulan",
"%d bulan"
],
"%d years": [
"%d tahun",
"%d tahun",
"%d tahun",
"%d tahun",
"%d tahun",
@ -79,30 +94,40 @@
"Never": "Jangan pernah",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Catatan: Ini adalah layanan percobaan: Data mungkin bisa terhapus kapanpun juga. Anak-anak kucing akan mati jika Anda mengekploitasi layanan ini.",
"This document will expire in %d seconds.": [
"Dokumen ini kadaluarsa dalam %d detik.",
"Dokumen ini kadaluarsa dalam %d detik.",
"Dokumen ini kadaluarsa dalam %d detik.",
"Dokumen ini kadaluarsa dalam %d detik.",
"Dokumen ini kadaluarsa dalam %d detik.",
"Dokumen ini kadaluarsa dalam %d detik."
],
"This document will expire in %d minutes.": [
"Dokumen ini akan kadaluarsa dalam %d menit.",
"Dokumen ini akan kadaluarsa dalam %d menit.",
"Dokumen ini akan kadaluarsa dalam %d menit.",
"Dokumen ini akan kadaluarsa dalam %d menit.",
"Dokumen ini akan kadaluarsa dalam %d menit.",
"Dokumen ini akan kadaluarsa dalam %d menit."
],
"This document will expire in %d hours.": [
"Dokumen ini akan kadaluarsa dalam %d jam.",
"Dokumen ini akan kadaluarsa dalam %d jam.",
"Dokumen ini akan kadaluarsa dalam %d jam.",
"Dokumen ini akan kadaluarsa dalam %d jam.",
"Dokumen ini akan kadaluarsa dalam %d jam.",
"Dokumen ini akan kadaluarsa dalam %d jam."
],
"This document will expire in %d days.": [
"Dokumen ini akan kadaluarsa dalam %d hari.",
"Dokumen ini akan kadaluarsa dalam %d hari.",
"Dokumen ini akan kadaluarsa dalam %d hari.",
"Dokumen ini akan kadaluarsa dalam %d hari.",
"Dokumen ini akan kadaluarsa dalam %d hari.",
"Dokumen ini akan kadaluarsa dalam %d hari."
],
"This document will expire in %d months.": [
"Dokumen ini akan kadaluarsa dalam %d bulan.",
"Dokumen ini akan kadaluarsa dalam %d bulan.",
"Dokumen ini akan kadaluarsa dalam %d bulan.",
"Dokumen ini akan kadaluarsa dalam %d bulan.",
"Dokumen ini akan kadaluarsa dalam %d bulan.",
@ -189,5 +214,7 @@
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,7 +3,6 @@
"%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 è un sistema di tipo \"Pastebin\" online, open source, minimalista. Il server non possiede alcuna conoscenza (\"Zero Knowledge\") del contenuto dei dati inviati. I dati sono cifrati/decifrati %snel Browser%s con algoritmo AES a 256 Bit.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Per ulteriori informazioni, vedi <a href=\"https://privatebin.info/\">Sito del progetto</a>.",
"Because ignorance is bliss": "Perché l'ignoranza è una benedizione (Because ignorance is bliss)",
"en": "it",
"Paste does not exist, has expired or has been deleted.": "Questo messaggio non esiste, è scaduto o è stato cancellato.",
"%s requires php %s or above to work. Sorry.": "%s richiede php %s o superiore per funzionare. Ci spiace.",
"%s requires configuration section [%s] to be present in configuration file.": "%s richiede la presenza della sezione [%s] nei file di configurazione.",
@ -11,6 +10,8 @@
"Attendi per favore un secondo prima di ciascun invio.",
"Attendi per favore %d secondi prima di ciascun invio.",
"Attendi per favore %d secondi prima di ciascun invio.",
"Attendi per favore %d secondi prima di ciascun invio.",
"Attendi per favore %d secondi prima di ciascun invio.",
"Attendi per favore %d secondi prima di ciascun invio."
],
"Paste is limited to %s of encrypted data.": "La dimensione del messaggio è limitata a %s di dati cifrati.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "%s funziona solo con JavaScript attivo. Ci dispiace per l'inconveniente.",
"%s requires a modern browser to work.": "%s richiede un browser moderno e aggiornato per funzionare.",
"New": "Nuovo",
"Send": "Invia",
"Create": "Crea",
"Clone": "Clona",
"Raw text": "Testo Raw",
"Expires": "Scade",
@ -37,44 +38,58 @@
"%d seconds": [
"%d secondo",
"%d secondi",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
"%d secondi",
"%d secondi",
"%d secondi",
"%d secondi"
],
"%d minutes": [
"%d minuto",
"%d minuti",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
"%d minuti",
"%d minuti",
"%d minuti",
"%d minuti"
],
"%d hours": [
"%d ora",
"%d ore",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
"%d ore",
"%d ore",
"%d ore",
"%d ore"
],
"%d days": [
"%d giorno",
"%d giorni",
"%d days (2nd plural)",
"%d days (3rd plural)"
"%d giorni",
"%d giorni",
"%d giorni",
"%d giorni"
],
"%d weeks": [
"%d settimana",
"%d settimane",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
"%d settimane",
"%d settimane",
"%d settimane",
"%d settimane"
],
"%d months": [
"%d mese",
"%d mesi",
"%d months (2nd plural)",
"%d months (3rd plural)"
"%d mesi",
"%d mesi",
"%d mesi",
"%d mesi"
],
"%d years": [
"%d anno",
"%d anni",
"%d years (2nd plural)",
"%d years (3rd plural)"
"%d anni",
"%d anni",
"%d anni",
"%d anni"
],
"Never": "Mai",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Nota: questo è un servizio di prova, i messaggi salvati possono essere cancellati in qualsiasi momento. Moriranno dei gattini se abuserai di questo servizio.",
@ -82,30 +97,40 @@
"Questo documento scadrà tra un secondo.",
"Questo documento scadrà in %d secondi.",
"Questo documento scadrà in %d secondi.",
"Questo documento scadrà in %d secondi.",
"Questo documento scadrà in %d secondi.",
"Questo documento scadrà in %d secondi."
],
"This document will expire in %d minutes.": [
"Questo documento scadrà tra un minuto.",
"Questo documento scadrà in %d minuti.",
"Questo documento scadrà in %d minuti.",
"Questo documento scadrà in %d minuti.",
"Questo documento scadrà in %d minuti.",
"Questo documento scadrà in %d minuti."
],
"This document will expire in %d hours.": [
"Questo documento scadrà tra un'ora.",
"Questo documento scadrà in %d ore.",
"Questo documento scadrà in %d ore.",
"Questo documento scadrà in %d ore.",
"Questo documento scadrà in %d ore.",
"Questo documento scadrà in %d ore."
],
"This document will expire in %d days.": [
"Questo documento scadrà tra un giorno.",
"Questo documento scadrà in %d giorni.",
"Questo documento scadrà in %d giorni.",
"Questo documento scadrà in %d giorni.",
"Questo documento scadrà in %d giorni.",
"Questo documento scadrà in %d giorni."
],
"This document will expire in %d months.": [
"Questo documento scadrà tra un mese.",
"Questo documento scadrà in %d mesi.",
"Questo documento scadrà in %d mesi.",
"Questo documento scadrà in %d mesi.",
"Questo documento scadrà in %d mesi.",
"Questo documento scadrà in %d mesi."
],
"Please enter the password for this paste:": "Inserisci la password per questo messaggio:",
@ -187,7 +212,9 @@
"URL shortener may expose your decrypt key in URL.": "URL shortener può esporre la tua chiave decrittografata nell'URL.",
"Save paste": "Salva il messagio",
"Your IP is not authorized to create pastes.": "Il tuo IP non è autorizzato a creare dei messaggi.",
"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."
"Trying to shorten a URL that isn't pointing at our instance.": "Tantativo in corso di accorciare un URL che non punta alla nostra istanza.",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Errore nella chiamata a YOURLS. Probabilmente un problema di configurazione, come un \"apiurl\" o una \"signature\" sbagliati o mancanti.",
"Error parsing YOURLS response.": "Errore nell'analizzare la risposta YOURLS.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Messaggi di tipo Distruggi-dopo-lettura piovono essere visualizzata solo una volta al caricamento. Vuoi aprirle ora?",
"Yes, load it": "Sì, caricalo"
}

View File

@ -1,135 +1,160 @@
{
"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",
"en": "ja",
"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.",
"%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 はミニマリストで、オープンソースのオンラインデータ貼り付けサービスです。サーバーに、貼り付けられたデータの中身を読み取ることはできません。データは、256ビットのAESを用いて%sブラウザー上で%s暗号化、または復号化されます。",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "詳細については<a href=\"https://privatebin.info/\">プロジェクトのページ</a>をご覧ください。",
"Because ignorance is bliss": "知らぬが仏",
"Paste does not exist, has expired or has been deleted.": "ペーストが存在しないか、期限切れ、または削除されました。",
"%s requires php %s or above to work. Sorry.": "%s の動作には php %s 以上が必要です。申し訳ありません。",
"%s requires configuration section [%s] to be present in configuration file.": "%sには設定ファイルに[%s]の設定セクションが必要です。",
"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)"
"投稿ごとに%d秒間お待ちください。",
"投稿ごとに%d秒間お待ちください。",
"投稿ごとに%d秒間お待ちください。",
"投稿ごとに%d秒間お待ちください。",
"投稿ごとに%d秒間お待ちください。",
"投稿ごとに%d秒間お待ちください。"
],
"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",
"Send": "Send",
"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",
"Paste is limited to %s of encrypted data.": "ペーストは暗号化されたデータの%sに制限されています。",
"Invalid data.": "無効なデータです。",
"You are unlucky. Try again.": "何か問題が発生しました。もう一度やり直してください。",
"Error saving comment. Sorry.": "コメントの保存中にエラーが発生しました。申し訳ありません。",
"Error saving paste. Sorry.": "ペーストの保存中にエラーが発生しました。申し訳ありません。",
"Invalid paste ID.": "無効なペーストIDです。",
"Paste is not of burn-after-reading type.": "ペーストは、読み込んだ後に消去される種類のものではありません。",
"Wrong deletion token. Paste was not deleted.": "不正な削除トークンです。ペーストは削除されませんでした。",
"Paste was properly deleted.": "ペーストが正しく削除されました。",
"JavaScript is required for %s to work. Sorry for the inconvenience.": "%s の動作にはJavaScriptが必要です。ご迷惑をおかけして申し訳ありません。",
"%s requires a modern browser to work.": "%s の動作には最近のブラウザが必要です。",
"New": "新規",
"Create": "作成",
"Clone": "複製",
"Raw text": "未加工テキスト",
"Expires": "有効期限",
"Burn after reading": "読み込んだ後に消去",
"Open discussion": "ディスカッションを開く",
"Password (recommended)": "パスワード(推奨)",
"Discussion": "ディスカッション",
"Toggle navigation": "ナビゲーションを切り替え",
"%d seconds": [
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
"%d秒",
"%d秒",
"%d秒",
"%d秒",
"%d秒",
"%d秒"
],
"%d minutes": [
"%d minute (singular)",
"%d minutes (1st plural)",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
"%d分",
"%d分",
"%d分",
"%d分",
"%d分",
"%d分"
],
"%d hours": [
"%d hour (singular)",
"%d hours (1st plural)",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
"%d時間",
"%d時間",
"%d時間",
"%d時間",
"%d時間",
"%d 時間"
],
"%d days": [
"%d day (singular)",
"%d days (1st plural)",
"%d days (2nd plural)",
"%d days (3rd plural)"
"%d 日",
"%d 日",
"%d 日",
"%d 日",
"%d 日",
"%d 日"
],
"%d weeks": [
"%d week (singular)",
"%d weeks (1st plural)",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
"%d週間",
"%d週間",
"%d週間",
"%d週間",
"%d週間",
"%d週間"
],
"%d months": [
"%d month (singular)",
"%d months (1st plural)",
"%d months (2nd plural)",
"%d months (3rd plural)"
"%dか月",
"%dか月",
"%dか月",
"%dか月",
"%dか月",
"%dか月"
],
"%d years": [
"%d year (singular)",
"%d years (1st plural)",
"%d years (2nd plural)",
"%d years (3rd plural)"
"%d年",
"%d年",
"%d年",
"%d年",
"%d年",
"%d年"
],
"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.",
"Never": "無期限",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "注意これはテストサービスです。データはいつでも削除される可能性があります。このサービスを悪用するとKittensの動作は停止します。",
"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)"
"このドキュメントは%d秒後に失効します。",
"このドキュメントは%d秒後に失効します。",
"このドキュメントは%d秒後に失効します。",
"このドキュメントは%d秒後に失効します。",
"このドキュメントは%d秒後に失効します。",
"このドキュメントは%d秒後に失効します。"
],
"This document will expire in %d minutes.": [
"This document will expire in %d minute. (singular)",
"This document will expire in %d minutes. (1st plural)",
"This document will expire in %d minutes. (2nd plural)",
"This document will expire in %d minutes. (3rd plural)"
"このドキュメントは%d分後に失効します。",
"このドキュメントは%d分後に失効します。",
"このドキュメントは%d分後に失効します。",
"このドキュメントは%d分後に失効します。",
"このドキュメントは%d分後に失効します。",
"このドキュメントは%d分後に失効します。"
],
"This document will expire in %d hours.": [
"This document will expire in %d hour. (singular)",
"This document will expire in %d hours. (1st plural)",
"This document will expire in %d hours. (2nd plural)",
"This document will expire in %d hours. (3rd plural)"
"このドキュメントは%d時間後に失効します。",
"このドキュメントは%d時間後に失効します。",
"このドキュメントは%d時間後に失効します。",
"このドキュメントは%d時間後に失効します。",
"このドキュメントは%d時間後に失効します。",
"このドキュメントは%d時間後に失効します。"
],
"This document will expire in %d days.": [
"This document will expire in %d day. (singular)",
"This document will expire in %d days. (1st plural)",
"This document will expire in %d days. (2nd plural)",
"This document will expire in %d days. (3rd plural)"
"このドキュメントは%d日後に失効します。",
"このドキュメントは%d日後に失効します。",
"このドキュメントは%d日後に失効します。",
"このドキュメントは%d日後に失効します。",
"このドキュメントは%d日後に失効します。",
"このドキュメントは%d日後に失効します。"
],
"This document will expire in %d months.": [
"This document will expire in %d month. (singular)",
"This document will expire in %d months. (1st plural)",
"This document will expire in %d months. (2nd plural)",
"This document will expire in %d months. (3rd plural)"
"このドキュメントは%dか月後に失効します。",
"このドキュメントは%dか月後に失効します。",
"このドキュメントは%dか月後に失効します。",
"このドキュメントは%dか月後に失効します。",
"このドキュメントは%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?",
"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 [Ctrl]+[c] to copy)</span>": "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] 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?)",
"Please enter the password for this paste:": "このペーストのパスワードを入力してください。",
"Could not decrypt data (Wrong key?)": "データを復号することができませんでした(間違った鍵ですか?)",
"Could not delete the paste, it was not stored in burn after reading mode.": "ペーストを削除できませんでした。このペーストは、読み込んだ後に消去するモードでは保存されませんでした。",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "このウィンドウを閉じないでください。このメッセージはもう表示できません。",
"Could not decrypt comment; Wrong key?": "コメントを復号することができませんでした。間違った鍵ですか?",
"Reply": "返信",
"Anonymous": "匿名",
"Avatar generated from IP address": "IPアドレスから生成したアバター",
"Add comment": "コメントを追加",
"Optional nickname…": "任意のニックネーム…",
"Post comment": "コメントを投稿",
"Sending comment…": "コメントを送信しています…",
"Comment posted.": "コメントを投稿しました。",
"Could not refresh display: %s": "表示を更新できませんでした:%s",
"unknown status": "不明な状態",
"server error or not responding": "サーバーエラーまたは応答しません",
"Could not post comment: %s": "コメントを投稿できませんでした:%s",
"Sending paste…": "ペーストを送信しています…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "ペーストは<a id=\"pasteurl\" href=\"%s\">%s</a>です<span id=\"copyhint\">(コピーするには[Ctrl]+[c]を押してください)</span>",
"Delete data": "データを削除",
"Could not create paste: %s": "ペーストを作成できませんでした:%s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "ペーストを復号化できません復号化キーがURLにありませんURLの一部を削除するリダイレクト機能またはURLの短縮アプリケーションを使いましたか",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
@ -139,55 +164,57 @@
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Format",
"Plain Text": "Plain Text",
"Source Code": "Source Code",
"Format": "形式",
"Plain Text": "プレーンテキスト",
"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."
"Download attachment": "添付ファイルをダウンロード",
"Cloned: '%s'": "複製済:'%s'",
"The cloned file '%s' was attached to this paste.": "複製されたファイル '%s' がこのペーストに添付されました。",
"Attach a file": "ファイルを添付",
"alternatively drag & drop a file or paste an image from the clipboard": "代わりに、ファイルをドラッグ&ドロップまたはクリップボードから画像を貼り付け",
"File too large, to display a preview. Please download the attachment.": "ファイルが大きすぎるため、プレビューを表示できません。ダウンロードしてください。",
"Remove attachment": "添付ファイルを削除",
"Your browser does not support uploading encrypted files. Please use a newer browser.": "お使いのブラウザーは暗号化されたファイルのアップロードをサポートしていません。新しいブラウザーを使用してください。",
"Invalid attachment.": "不正な添付ファイルです。",
"Options": "設定",
"Shorten URL": "URLを短縮",
"Editor": "エディター",
"Preview": "プレビュー",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s は「%s」で終わるPATHが必要です。index.phpのPATHを更新してください。",
"Decrypt": "復号化",
"Enter password": "パスワードを入力",
"Loading…": "読み込んでいます…",
"Decrypting paste…": "ペーストを復号化しています…",
"Preparing new paste…": "新しいペーストを準備しています…",
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "このメッセージが消去されない場合、<a href=\"%s\">トラブルシュート用のFAQ</a>をご確認ください。",
"+++ no paste text +++": "+++ ペーストのテキストはありません +++",
"Could not get paste data: %s": "ペーストのデータを取得できませんでした:%s",
"QR code": "QRコード",
"This website is using an insecure HTTP connection! Please use it only for testing.": "このウェブサイトは安全でない HTTP 接続を使用しています!テストにのみ使用してください。",
"For more information <a href=\"%s\">see this FAQ entry</a>.": "詳細については、<a href=\"%s\">こちらのFAQエントリー</a>をご覧ください。",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "お使いのブラウザーはWebCrypto APIのサポートにHTTPS接続を必要とするかもしれません。<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.": "お使いのブラウザーはzlib圧縮に必要なWebAssemblyをサポートしていません。圧縮されていないドキュメントを作成することはできますが、圧縮されたドキュメントを読み込むことはできません。",
"waiting on user to provide a password": "ユーザーがパスワードを入力するのを待機しています",
"Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "データを復号できませんでした。パスワードが間違っていましたか? 上部のボタンで再試行してください。",
"Retry": "再試行",
"Showing raw text…": "未加工テキストを表示しています…",
"Notice:": "注意:",
"This link will expire after %s.": "このリンクは%s後に期限切れになります。",
"This link can only be accessed once, do not use back or refresh button in your browser.": "このリンクは一度だけアクセスできます。ブラウザで戻ったり更新したりしないでください。",
"Link:": "リンク:",
"Recipient may become aware of your timezone, convert time to UTC?": "受信する人はあなたのタイムゾーンに気づくかもしれません。時間をUTCに変換しますか",
"Use Current Timezone": "現在のタイムゾーンを使用",
"Convert To UTC": "UTCに変換",
"Close": "閉じる",
"Encrypted note on %s": "%sの暗号化されたメモ",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "メモを見るには、このリンクを参照してください。誰でもURLからこのメモにアクセスできます。",
"URL shortener may expose your decrypt key in URL.": "URLの短縮アプリケーションを使うと、復号用のキーが漏洩するおそれがあります。",
"Save paste": "ペーストを保存",
"Your IP is not authorized to create pastes.": "あなたのIPアドレスにはペーストを作成する権限がありません。",
"Trying to shorten a URL that isn't pointing at our instance.": "このインスタンスを指していないURLを短縮しようとしています。",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "YOURLSの呼び出し中にエラーが発生しました。\"apiurl\"または\"signature\"等の設定に問題がある可能性があります。",
"Error parsing YOURLS response.": "YOURLSレスポンスの解析中にエラーが発生しました。",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,7 +3,6 @@
"%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.": ".i la %s mupli lo sorcu lo'e se setca kibro .i ji'a zo'e se zancari gi'e fingubni .i lo samse'u na djuno lo datni selru'e cu .i ba'e %sle brauzero%s ku mipri le do datni ku fi la'oi AES poi bitni li 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>.",
"Because ignorance is bliss": ".i ki'u le ka na djuno cu ka saxfri",
"en": "jbo",
"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.",
@ -11,7 +10,9 @@
"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. (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.": ".i le selru'e cu na drani",
@ -25,7 +26,7 @@
"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": "cnino",
"Send": "benji",
"Create": "benji",
"Clone": "fukpi",
"Raw text": "vlapoi nalselrucyzu'e",
"Expires": "vimcu",
@ -38,43 +39,57 @@
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd 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 (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 (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 (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 (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 (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 (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.",
@ -82,31 +97,41 @@
"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. (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. (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. (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. (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. (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?)",
@ -189,5 +214,7 @@
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,7 +3,6 @@
"%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",
"en": "ku",
"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.",
@ -11,7 +10,9 @@
"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. (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.",
@ -25,7 +26,7 @@
"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",
"Send": "Send",
"Create": "Create",
"Clone": "Clone",
"Raw text": "Raw text",
"Expires": "Expires",
@ -38,43 +39,57 @@
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd 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 (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 (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 (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 (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 (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 (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.",
@ -82,31 +97,41 @@
"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. (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. (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. (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. (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. (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?)",
@ -189,5 +214,7 @@
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,7 +3,6 @@
"%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",
"en": "la",
"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.",
@ -11,7 +10,9 @@
"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. (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.",
@ -25,7 +26,7 @@
"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",
"Send": "Send",
"Create": "Create",
"Clone": "Clone",
"Raw text": "Raw text",
"Expires": "Expires",
@ -38,43 +39,57 @@
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd 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 (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 (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 (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 (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 (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 (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.",
@ -82,31 +97,41 @@
"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. (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. (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. (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. (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. (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?)",
@ -189,5 +214,7 @@
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,15 +3,16 @@
"%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 yra minimalistinis, atvirojo kodo internetinis įdėjimų dėklas, kurį naudojant, serveris nieko nenutuokia apie įdėtus duomenis. Duomenys yra šifruojami/iššifruojami %snaršyklėje%s naudojant 256 bitų AES.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Daugiau informacijos rasite <a href=\"https://privatebin.info/\">projekto puslapyje</a>.",
"Because ignorance is bliss": "Nes nežinojimas yra palaima",
"en": "lt",
"Paste does not exist, has expired or has been deleted.": "Įdėjimo nėra, jis nebegalioja arba buvo ištrintas.",
"%s requires php %s or above to work. Sorry.": "%s savo darbui reikalauja php %s arba naujesnės versijos. Apgailestaujame.",
"%s requires configuration section [%s] to be present in configuration file.": "%s reikalauja, kad konfigūracijos faile būtų [%s] konfigūracijos sekcija.",
"Please wait %d seconds between each post.": [
"Tarp kiekvieno įrašo palaukite %d sekundę.",
"Tarp kiekvieno įrašo palaukite %d sekundes.",
"Tarp kiekvieno įrašo palaukite %d sekundės.",
"Tarp kiekvieno įrašo palaukite %d sekundžių.",
"Tarp kiekvieno įrašo palaukite %d sekundę."
"Tarp kiekvieno įrašo palaukite %d sekundžių.",
"Tarp kiekvieno įrašo palaukite %d sekundžių.",
"Tarp kiekvieno įrašo palaukite %d sekundžių."
],
"Paste is limited to %s of encrypted data.": "Įdėjimas yra apribotas iki %s šifruotų duomenų.",
"Invalid data.": "Neteisingi duomenys.",
@ -25,7 +26,7 @@
"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.",
"New": "Naujas",
"Send": "Siųsti",
"Create": "Kurti",
"Clone": "Dubliuoti",
"Raw text": "Neapdorotas tekstas",
"Expires": "Baigs galioti po",
@ -35,42 +36,56 @@
"Discussion": "Diskusija",
"Toggle navigation": "Perjungti naršymą",
"%d seconds": [
"%d sekundę",
"%d sekundės",
"%d sekundžių",
"%d sekundžių",
"%d sekundės"
"%d sekundžių",
"%d sekundžių"
],
"%d minutes": [
"%d minutės",
"%d minučių",
"%d minučių",
"%d minutės"
"%d minučių",
"%d minučių",
"%d minučių"
],
"%d hours": [
"%d valandos",
"%d valandų",
"%d valandų",
"%d valandos"
"%d valandų",
"%d valandų",
"%d valandų"
],
"%d days": [
"%d dienos",
"%d dienų",
"%d dienų",
"%d dienos"
"%d dienų",
"%d dienų",
"%d dienų"
],
"%d weeks": [
"%d savaitės",
"%d savaičių",
"%d savaičių",
"%d savaitės"
"%d savaičių",
"%d savaičių",
"%d savaičių"
],
"%d months": [
"%d mėnesio",
"%d mėnesių",
"%d mėnesių",
"%d mėnesio"
"%d mėnesių",
"%d mėnesių",
"%d mėnesių"
],
"%d years": [
"%d metų",
"%d metų",
"%d metų",
"%d metų",
"%d metų",
@ -82,31 +97,41 @@
"Šis dokumentas nustos galioti po %d sekundės.",
"Šis dokumentas nustos galioti po %d sekundžių.",
"Šis dokumentas nustos galioti po %d sekundžių.",
"Šis dokumentas nustos galioti po %d sekundės."
"Šis dokumentas nustos galioti po %d sekundžių.",
"Šis dokumentas nustos galioti po %d sekundžių.",
"Šis dokumentas nustos galioti po %d sekundžių."
],
"This document will expire in %d minutes.": [
"Šis dokumentas nustos galioti po %d minutės.",
"Šis dokumentas nustos galioti po %d minučių.",
"Šis dokumentas nustos galioti po %d minučių.",
"Šis dokumentas nustos galioti po %d minutės."
"Šis dokumentas nustos galioti po %d minučių.",
"Šis dokumentas nustos galioti po %d minučių.",
"Šis dokumentas nustos galioti po %d minučių."
],
"This document will expire in %d hours.": [
"Šis dokumentas nustos galioti po %d valandos.",
"Šis dokumentas nustos galioti po %d valandų.",
"Šis dokumentas nustos galioti po %d valandų.",
"Šis dokumentas nustos galioti po %d valandos."
"Šis dokumentas nustos galioti po %d valandų.",
"Šis dokumentas nustos galioti po %d valandų.",
"Šis dokumentas nustos galioti po %d valandų."
],
"This document will expire in %d days.": [
"Šis dokumentas nustos galioti po %d dienos.",
"Šis dokumentas nustos galioti po %d dienų.",
"Šis dokumentas nustos galioti po %d dienų.",
"Šis dokumentas nustos galioti po %d dienos."
"Šis dokumentas nustos galioti po %d dienų.",
"Šis dokumentas nustos galioti po %d dienų.",
"Šis dokumentas nustos galioti po %d dienų."
],
"This document will expire in %d months.": [
"Šis dokumentas nustos galioti po %d mėnesio.",
"Šis dokumentas nustos galioti po %d mėnesių.",
"Šis dokumentas nustos galioti po %d mėnesių.",
"Šis dokumentas nustos galioti po %d mėnesio."
"Šis dokumentas nustos galioti po %d mėnesių.",
"Šis dokumentas nustos galioti po %d mėnesių.",
"Šis dokumentas nustos galioti po %d mėnesių."
],
"Please enter the password for this paste:": "Įveskite šio įdėjimo slaptažodį:",
"Could not decrypt data (Wrong key?)": "Nepavyko iššifruoti duomenų (Neteisingas raktas?)",
@ -187,7 +212,9 @@
"URL shortener may expose your decrypt key in URL.": "URL trumpinimo įrankis gali atskleisti URL adrese jūsų iššifravimo raktą.",
"Save paste": "Įrašyti įdėjimą",
"Your IP is not authorized to create pastes.": "Jūsų IP adresas neturi įgaliojimų kurti įdėjimų.",
"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."
"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 parsing YOURLS response.": "Klaida nagrinėjant YOURLS atsaką.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -1,32 +1,33 @@
{
"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 een minimalistische, open source online pastebin waarbij de server geen kennis heeft van de geplakte gegevens. Gegevens worden gecodeerd/gedecodeerd %s in de browser %s met behulp van 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 een minimalistische, open source online pastebin waarbij de server geen kennis heeft van de paste data zelf. Gegevens worden gecodeerd/gedecodeerd %s in de browser %s met behulp van 256-bits AES.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Meer informatie is te vinden op de <a href=\"https://privatebin.info/\">projectpagina</a>.",
"Because ignorance is bliss": "Onwetendheid is een zegen",
"en": "nl",
"Paste does not exist, has expired or has been deleted.": "Geplakte tekst bestaat niet, is verlopen of verwijderd.",
"Paste does not exist, has expired or has been deleted.": "Paste bestaat niet, is verlopen of verwijderd.",
"%s requires php %s or above to work. Sorry.": "%s vereist PHP %s of hoger om te kunnen werken. Sorry",
"%s requires configuration section [%s] to be present in configuration file.": "%s vereist dat de configuratiesectie [%s] aanwezig is in het configuratiebestand",
"Please wait %d seconds between each post.": [
"Alstublieft %d second wachten tussen elk bericht.",
"Alstublieft %d seconden wachten tussen elk bericht.",
"Alstublieft %d seconden wachten tussen elk bericht.",
"Alstublieft %d seconden wachten tussen elk bericht.",
"Alstublieft %d seconden wachten tussen elk bericht.",
"Alstublieft %d seconden wachten tussen elk bericht."
],
"Paste is limited to %s of encrypted data.": "Geplakte tekst is beperkt tot %s aan versleutelde gegevens",
"Invalid data.": "Ongeldige gegevens",
"You are unlucky. Try again.": "Helaas. Probeer het nog eens",
"Error saving comment. Sorry.": "Fout bij het opslaan van het commentaar. Sorry",
"Error saving paste. Sorry.": "Fout bij het opslaan van de geplakte tekst. Sorry.",
"Paste is limited to %s of encrypted data.": "Paste is beperkt tot %s aan versleutelde gegevens.",
"Invalid data.": "Ongeldige gegevens.",
"You are unlucky. Try again.": "Helaas. Probeer het nog eens.",
"Error saving comment. Sorry.": "Fout bij het opslaan van het commentaar. Sorry.",
"Error saving paste. Sorry.": "Fout bij het opslaan van de paste. Sorry.",
"Invalid paste ID.": "Ongeldige ID.",
"Paste is not of burn-after-reading type.": "Geplakte tekst is geen 'vernietig na lezen' type",
"Wrong deletion token. Paste was not deleted.": "Foutieve verwijdercode. Geplakte tekst is niet verwijderd.",
"Paste was properly deleted.": "Geplakte tekst is correct verwijderd.",
"Paste is not of burn-after-reading type.": "Paste is geen 'vernietig na lezen' type.",
"Wrong deletion token. Paste was not deleted.": "Foutieve verwijdercode. Paste is niet verwijderd.",
"Paste was properly deleted.": "Paste is correct verwijderd.",
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript vereist om %s te laten werken. Sorry voor het ongemak.",
"%s requires a modern browser to work.": "%s vereist een moderne browser om te kunnen werken ",
"%s requires a modern browser to work.": "%s vereist een moderne browser om te kunnen werken.",
"New": "Nieuw",
"Send": "Verzenden",
"Clone": "Clonen",
"Create": "Maak",
"Clone": "Klonen",
"Raw text": "Onbewerkte tekst",
"Expires": "Verloopt",
"Burn after reading": "Vernietig na lezen",
@ -37,85 +38,109 @@
"%d seconds": [
"%d seconde",
"%d seconden",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
"%d seconden",
"%d seconden",
"%d seconden",
"%d seconden"
],
"%d minutes": [
"%d minuut",
"%d minuten",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
"%d minuten",
"%d minuten",
"%d minuten",
"%d minuten"
],
"%d hours": [
"%d uur",
"%d uren",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
"%d uren",
"%d uren",
"%d uren",
"%d uren"
],
"%d days": [
"%d dag",
"%d dagen",
"%d days (2nd plural)",
"%d days (3rd plural)"
"%d dagen",
"%d dagen",
"%d dagen",
"%d dagen"
],
"%d weeks": [
"%d week",
"%d weken",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
"%d weken",
"%d weken",
"%d weken",
"%d weken"
],
"%d months": [
"%d maand",
"%d maanden",
"%d months (2nd plural)",
"%d months (3rd plural)"
"%d maanden",
"%d maanden",
"%d maanden",
"%d maanden"
],
"%d years": [
"%d jaar",
"%d jaren",
"%d years (2nd plural)",
"%d years (3rd plural)"
"%d jaren",
"%d jaren",
"%d jaren",
"%d jaren"
],
"Never": "Nooit",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Opmerking: Dit is een testservice: Gegevens kunnen op elk gegeven moment verwijderd worden.",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Opmerking: Dit is een testservice: Gegevens kunnen op elk gegeven moment verwijderd worden. Katten zullen doodgaan als je misbruikt maakt van deze service.",
"This document will expire in %d seconds.": [
"Dit document verloopt over %d seconde.",
"Dit document verloopt over %d seconden.",
"Dit document verloopt over %d seconden.",
"Dit document verloopt over %d seconden.",
"Dit document verloopt over %d seconden.",
"Dit document verloopt over %d seconden."
],
"This document will expire in %d minutes.": [
"Dit document verloopt over %d minuut.",
"Dit document verloopt over %d minuten.",
"Dit document verloopt over %d minuten.",
"Dit document verloopt over %d minuten.",
"Dit document verloopt over %d minuten.",
"Dit document verloopt over %d minuten."
],
"This document will expire in %d hours.": [
"Dit document verloopt over %d uur.",
"Dit document verloopt over %d uren.",
"Dit document verloopt over %d uren.",
"Dit document verloopt over %d uren.",
"Dit document verloopt over %d uren.",
"Dit document verloopt over %d uren."
],
"This document will expire in %d days.": [
"Dit document verloopt over %d dag.",
"Dit document verloopt over %d dagen.",
"Dit document verloopt over %d dagen.",
"Dit document verloopt over %d dagen.",
"Dit document verloopt over %d dagen.",
"Dit document verloopt over %d dagen."
],
"This document will expire in %d months.": [
"Dit document verloopt over %d maand.",
"Dit document verloopt over %d maanden.",
"Dit document verloopt over %d maanden.",
"Dit document verloopt over %d maanden.",
"Dit document verloopt over %d maanden.",
"Dit document verloopt over %d maanden."
],
"Please enter the password for this paste:": "Voer het wachtwoord in voor deze geplakte tekst:",
"Please enter the password for this paste:": "Voer het wachtwoord in voor deze paste:",
"Could not decrypt data (Wrong key?)": "Kon de gegevens niet decoderen (verkeerde sleutel?)",
"Could not delete the paste, it was not stored in burn after reading mode.": "Verwijderen van de geplakte tekst niet mogelijk, deze werd niet opgeslagen in 'vernietig na lezen' modus.",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "FOR YOUR EYES ONLY. Sluit dit venster niet, dit bericht kan niet opnieuw worden weergegeven.",
"Could not delete the paste, it was not stored in burn after reading mode.": "Verwijderen van de paste niet mogelijk, deze werd niet opgeslagen in 'vernietig na lezen' modus.",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "ALLEEN VOOR JOUW OGEN BESTEMD. Sluit dit venster niet, dit bericht kan niet opnieuw worden weergegeven.",
"Could not decrypt comment; Wrong key?": "Kon het commentaar niet decoderen; Verkeerde sleutel?",
"Reply": "Beantwoorden",
"Anonymous": "Anoniem",
"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",
"Optional nickname…": "Optionele bijnaam…",
"Post comment": "Plaats een commentaar",
@ -125,11 +150,11 @@
"unknown status": "Onbekende status",
"server error or not responding": "Serverfout of server reageert niet",
"Could not post comment: %s": "Kon het commentaar niet plaatsen: %s",
"Sending paste…": "Geplakte tekst verzenden…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Uw geplakte tekst is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Druk [Ctrl]+[c] om te kopiëren)</span>",
"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>",
"Delete data": "Gegevens wissen",
"Could not create paste: %s": "Kon de geplakte tekst 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 geplakte tekst niet decoderen: Decoderingssleutel ontbreekt in URL (Hebt u een redirector of een URL-verkorter gebruikt die een deel van de URL verwijdert?)",
"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 redirector of een URL-verkorter gebruikt die een deel van de URL verwijdert?)",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
@ -145,49 +170,51 @@
"Markdown": "Markdown",
"Download attachment": "Bijlage downloaden",
"Cloned: '%s'": "Gekloond: '%s'",
"The cloned file '%s' was attached to this paste.": "Het gekloonde bestand '%s' is bijgevoegd aan de geplakte tekst.",
"The cloned file '%s' was attached to this paste.": "Het gekloonde bestand '%s' is bijgevoegd aan de paste.",
"Attach a file": "Een bestand toevoegen",
"alternatively drag & drop a file or paste an image from the clipboard": "U kunt ook een bestand slepen en neerzetten of een afbeelding plakken van het klembord",
"File too large, to display a preview. Please download the attachment.": "Het bestand is te groot om voorbeeld weer te geven. Aub de bijlage downloaden",
"alternatively drag & drop a file or paste an image from the clipboard": "Je kunt ook een bestand slepen en neerzetten of een afbeelding plakken van het klembord",
"File too large, to display a preview. Please download the attachment.": "Het bestand is te groot om voorbeeld weer te geven. Aub de bijlage downloaden.",
"Remove attachment": "Bijlage verwijderen",
"Your browser does not support uploading encrypted files. Please use a newer browser.": "Uw browser biedt geen ondersteuning voor het uploaden van gecodeerde bestanden. Gebruik alstublieft een nieuwere browser",
"Invalid attachment.": "Ongeldige bijlage",
"Your browser does not support uploading encrypted files. Please use a newer browser.": "Je browser biedt geen ondersteuning voor het uploaden van gecodeerde bestanden. Gebruik alstublieft een nieuwere browser.",
"Invalid attachment.": "Ongeldige bijlage.",
"Options": "Opties",
"Shorten URL": "URL verkorten",
"Editor": "Editor",
"Preview": "Preview",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s vereist dat het PATH eindigt in een '%s'. Aub het PATH updaten in uw index.php.",
"Preview": "Voorbeeld",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s vereist dat PATH eindigt in een '%s'. a.u.b. PATH updaten in je index.php.",
"Decrypt": "Decoderen",
"Enter password": "Voer het wachtwoord in",
"Loading…": "Laden…",
"Decrypting paste…": "Geplakte tekst decoderen…",
"Preparing new paste…": "Nieuwe geplakte tekst voorbereiden…",
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "In het geval dat dit bericht nooit verdwijnt, kijkt u dan eens naar <a href=\"%s\"> veelgestelde vragen voor informatie over het oplossen van problemen </a>.",
"+++ no paste text +++": "+++ geen geplakte tekst +++",
"Could not get paste data: %s": "Kon geen klembordgegevens verkrijgen: %s",
"Decrypting paste…": "Paste decoderen…",
"Preparing new paste…": "Nieuwe paste voorbereiden…",
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "In het geval dat dit bericht nooit verdwijnt, kijkt dan eens naar <a href=\"%s\"> veelgestelde vragen voor informatie over het oplossen van problemen</a>.",
"+++ no paste text +++": "+++ geen paste tekst +++",
"Could not get paste data: %s": "Kon geen paste data verkrijgen: %s",
"QR code": "QR-code",
"This website is using an insecure HTTP connection! Please use it only for testing.": "Deze website gebruikt een onveilige HTTP-verbinding! Gelieve deze enkel te gebruiken om te testen.",
"For more information <a href=\"%s\">see this FAQ entry</a>.": "Voor meer informatie <a href=\"%s\">zie dit FAQ-artikel</a>.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Uw browser kan een HTTPS-verbinding nodig hebben om de WebCrypto API te ondersteunen. Probeer <a href=\"%s\">het met HTTPS</a>.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Uw browser ondersteunt WebAssembly niet, wat wordt gebruikt voor zlib compressie. U kunt niet-gecomprimeerde documenten maken, maar geen gecomprimeerde documenten lezen.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Je browser kan een HTTPS-verbinding nodig hebben om de WebCrypto API te ondersteunen. Probeer <a href=\"%s\">het met HTTPS</a>.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Je browser ondersteunt WebAssembly niet, wat wordt gebruikt voor zlib compressie. Je kunt niet-gecomprimeerde documenten maken, maar geen gecomprimeerde documenten lezen.",
"waiting on user to provide a password": "wachtend op gebruiker om een wachtwoord te geven",
"Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Kon de gegevens niet decoderen. Heeft u een verkeerd wachtwoord ingevoerd? Probeer het opnieuw met de knop bovenaan.",
"Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Kon de gegevens niet decoderen. Heb je een verkeerd wachtwoord ingevoerd? Probeer het opnieuw met de knop bovenaan.",
"Retry": "Opnieuw proberen",
"Showing raw text…": "Platte tekst tonen…",
"Notice:": "Let op:",
"This link will expire after %s.": "Deze link vervalt na %s.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "Deze link kan slechts eenmaal worden geopend, gebruik niet de terug- of verversknop in uw browser.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "Deze link kan slechts eenmaal worden geopend, gebruik niet de terug- of verversknop in je browser.",
"Link:": "Link:",
"Recipient may become aware of your timezone, convert time to UTC?": "Ontvanger kan zich bewust worden van uw tijdzone, tijd omzetten naar UTC?",
"Recipient may become aware of your timezone, convert time to UTC?": "Ontvanger kan zich bewust worden van je tijdzone, tijd omzetten naar UTC?",
"Use Current Timezone": "Gebruik huidige tijdzone",
"Convert To UTC": "Omzetten naar UTC",
"Close": "Sluiten",
"Encrypted note on %s": "Versleutelde notitie op %s",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Bezoek deze link om de notitie te bekijken. Als je de URL aan iemand geeft, kan die de notitie ook bekijken.",
"URL shortener may expose your decrypt key in URL.": "URL-verkorter kan uw ontcijferingssleutel in URL blootleggen.",
"URL shortener may expose your decrypt key in URL.": "URL-verkorter kan je ontcijferingssleutel in URL blootleggen.",
"Save paste": "Notitie opslaan",
"Your IP is not authorized to create pastes.": "Uw IP-adres is niet gemachtigd om geplakte tekst te maken.",
"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."
"Your IP is not authorized to create pastes.": "Je IP-adres is niet gemachtigd om pastes te maken.",
"Trying to shorten a URL that isn't pointing at our instance.": "Proberen om een URL te verkorten dat niet naar ons systeem wijst.",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Foutmelding ophalen YOURLS. Waarschijnlijk een configuratiefout, zoals een verkeerde of missende \"apiurl\" of \"signature\".",
"Error parsing YOURLS response.": "Foutmelding bij parsen van YOURLS respons.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Brand na het lezen van de plagen kan slechts eenmaal worden weergegeven wanneer deze worden geladen. Wilt u het nu openen?",
"Yes, load it": "Ja, laad het"
}

View File

@ -3,7 +3,6 @@
"%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 er en minimalistisk, åpen kildekode, elektronisk tilgjengelig pastebin hvor serveren ikke har kunnskap om dataene som limes inn. Dataene krypteres/dekrypteres %si nettleseren%s ved hjelp av 256 bits AES.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Mer informasjon om prosjektet på <a href=\"https://privatebin.info/\">prosjektsiden</a>.",
"Because ignorance is bliss": "Fordi uvitenhet er lykke",
"en": "no",
"Paste does not exist, has expired or has been deleted.": "Innlegget eksisterer ikke, er utløpt eller har blitt slettet.",
"%s requires php %s or above to work. Sorry.": "Beklager, %s krever php %s eller nyere for å kjøre.",
"%s requires configuration section [%s] to be present in configuration file.": "%s krever konfigurasjonsdel [%s] å være til stede i konfigurasjonsfilen .",
@ -11,6 +10,8 @@
"Vennligst vent %d sekund mellom hvert innlegg.",
"Vennligst vent %d sekunder mellom hvert innlegg.",
"Vennligst vent %d sekunder mellom hvert innlegg.",
"Vennligst vent %d sekunder mellom hvert innlegg.",
"Vennligst vent %d sekunder mellom hvert innlegg.",
"Vennligst vent %d sekunder mellom hvert innlegg."
],
"Paste is limited to %s of encrypted data.": "Innlegg er begrenset til %s av kryptert data.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Javascript kreves for at %s skal fungere. Beklager.",
"%s requires a modern browser to work.": "%s krever en moderne nettleser for å fungere.",
"New": "Ny",
"Send": "Send",
"Create": "Opprette",
"Clone": "Kopier",
"Raw text": "Ren tekst",
"Expires": "Utgår",
@ -38,39 +39,53 @@
"%d sekund",
"%d sekunder",
"%d sekunder",
"%d sekunder",
"%d sekunder",
"%d sekunder"
],
"%d minutes": [
"%d minutt",
"%d minutter",
"%d minutter",
"%d minutter",
"%d minutter",
"%d minutter"
],
"%d hours": [
"%d time",
"%d timer",
"%d timer",
"%d timer",
"%d timer",
"%d timer"
],
"%d days": [
"%d dag",
"%d dager",
"%d dager",
"%d dager",
"%d dager",
"%d dager"
],
"%d weeks": [
"%d uke",
"%d uker",
"%d uker",
"%d uker",
"%d uker",
"%d uker"
],
"%d months": [
"%d måned",
"%d måneder",
"%d måneder",
"%d måneder",
"%d måneder",
"%d måneder"
],
"%d years": [
"%d år",
"%d år",
"%d år",
"%d år",
"%d år",
@ -82,30 +97,40 @@
"Dette dokumentet vil utløpe om %d sekund.",
"Dette dokumentet vil utløpe om %d sekunder.",
"Dette dokumentet vil utløpe om %d sekunder.",
"Dette dokumentet vil utløpe om %d sekunder.",
"Dette dokumentet vil utløpe om %d sekunder.",
"Dette dokumentet vil utløpe om %d sekunder."
],
"This document will expire in %d minutes.": [
"Dette dokumentet vil utløpe om %d minutt.",
"Dette dokumentet vil utløpe om %d minutter.",
"Dette dokumentet vil utløpe om %d minutter.",
"Dette dokumentet vil utløpe om %d minutter.",
"Dette dokumentet vil utløpe om %d minutter.",
"Dette dokumentet vil utløpe om %d minutter."
],
"This document will expire in %d hours.": [
"Dette dokumentet vil utløpe om %d time.",
"Dette dokumentet vil utløpe om %d timer.",
"Dette dokumentet vil utløpe om %d timer.",
"Dette dokumentet vil utløpe om %d timer.",
"Dette dokumentet vil utløpe om %d timer.",
"Dette dokumentet vil utløpe om %d timer."
],
"This document will expire in %d days.": [
"Dette dokumentet vil utløpe om %d dag.",
"Dette dokumentet vil utløpe om %d dager.",
"Dette dokumentet vil utløpe om %d dager.",
"Dette dokumentet vil utløpe om %d dager.",
"Dette dokumentet vil utløpe om %d dager.",
"Dette dokumentet vil utløpe om %d dager."
],
"This document will expire in %d months.": [
"Dette dokumentet vil utløpe om %d måned.",
"Dette dokumentet vil utløpe om %d måneder.",
"Dette dokumentet vil utløpe om %d måneder.",
"Dette dokumentet vil utløpe om %d måneder.",
"Dette dokumentet vil utløpe om %d måneder.",
"Dette dokumentet vil utløpe om %d måneder."
],
"Please enter the password for this paste:": "Vennligst skriv inn passordet for dette innlegget:",
@ -142,7 +167,7 @@
"Format": "Format",
"Plain Text": "Ren Tekst",
"Source Code": "Kildekode",
"Markdown": "Oppmerket",
"Markdown": "Markdown",
"Download attachment": "Last ned vedlegg",
"Cloned: '%s'": "Kopiert: '%s'",
"The cloned file '%s' was attached to this paste.": "Den klonede filen '%s' var koblet til denne innlimingen.",
@ -186,8 +211,10 @@
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Besøk denne lenken for å se notatet. Hvis lenken deles med andre, vil de også kunne se notatet.",
"URL shortener may expose your decrypt key in URL.": "URL forkorter kan avsløre dekrypteringsnøkkelen.",
"Save paste": "Lagre utklipp",
"Your IP is not authorized to create pastes.": "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."
"Your IP is not authorized to create pastes.": "Din IP er ikke autorisert til å opprette advarsler.",
"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 parsing YOURLS response.": "Feil ved analyse av YOURLS svar.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Brenne etter lesing av pasta kan kun vises når den lastes inn. Vil du åpne den nå?",
"Yes, load it": "Ja, last den"
}

View File

@ -3,7 +3,6 @@
"%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 es un 'pastebin' (o gestionari dextrachs de tèxte e còdi font) minimalista e open source, dins lo qual lo servidor a pas cap de coneissença de las donadas mandadas. Las donadas son chifradas/deschifradas %sdins lo navigator%s per un chiframent AES 256 bits.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Mai informacions sus <a href=\"https://privatebin.info/\">la pagina del projècte</a>.",
"Because ignorance is bliss": "Perque lo bonaür es lignorància",
"en": "oc",
"Paste does not exist, has expired or has been deleted.": "Lo tèxte existís pas, a expirat, o es estat suprimit.",
"%s requires php %s or above to work. Sorry.": "O planhèm, %s necessita php %s o superior per foncionar.",
"%s requires configuration section [%s] to be present in configuration file.": "%s fa besonh de la seccion de configuracion [%s] dins lo fichièr de configuracion per foncionar.",
@ -11,6 +10,8 @@
"Mercés d'esperar %d segonda entre cada publicacion.",
"Mercés d'esperar %d segondas entre cada publicacion.",
"Mercés d'esperar %d segondas entre cada publicacion.",
"Mercés d'esperar %d segondas entre cada publicacion.",
"Mercés d'esperar %d segondas entre cada publicacion.",
"Mercés d'esperar %d segondas entre cada publicacion."
],
"Paste is limited to %s of encrypted data.": "Lo tèxte es limitat a %s de donadas chifradas.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript es requesit per far foncionar %s. O planhèm per linconvenient.",
"%s requires a modern browser to work.": "%s requerís un navigator modèrn per foncionar.",
"New": "Nòu",
"Send": "Mandar",
"Create": "Mandar",
"Clone": "Clonar",
"Raw text": "Tèxte brut",
"Expires": "Expira",
@ -38,42 +39,56 @@
"%d segonda",
"%d segondas",
"%d segondas",
"%d segondas",
"%d segondas",
"%d segondas"
],
"%d minutes": [
"%d minuta",
"%d minutas",
"%d minutas",
"%d minutas",
"%d minutas",
"%d minutas"
],
"%d hours": [
"%d ora",
"%d oras",
"%d oras",
"%d oras",
"%d oras",
"%d oras"
],
"%d days": [
"%d jorn",
"%d jorns",
"%d jorns",
"%d jorns",
"%d jorns",
"%d jorns"
],
"%d weeks": [
"%d setmana",
"%d setmanas",
"%d setmanas",
"%d setmanas",
"%d setmanas",
"%d setmanas"
],
"%d months": [
"%d mes",
"%d meses",
"%d meses",
"%d meses",
"%d meses",
"%d meses"
],
"%d years": [
"%d an",
"%d ans",
"%d ans",
"%d ans",
"%d ans",
"%d ans"
],
"Never": "Jamai",
@ -82,30 +97,40 @@
"Aqueste document expirarà daquí %d segonda.",
"Aqueste document expirarà daquí %d segondas.",
"Aqueste document expirarà daquí %d segondas.",
"Aqueste document expirarà daquí %d segondas.",
"Aqueste document expirarà daquí %d segondas.",
"Aqueste document expirarà daquí %d segondas."
],
"This document will expire in %d minutes.": [
"Aqueste document expirarà daquí %d minuta.",
"Aqueste document expirarà daquí %d minutas.",
"Aqueste document expirarà daquí %d minutas.",
"Aqueste document expirarà daquí %d minutas.",
"Aqueste document expirarà daquí %d minutas.",
"Aqueste document expirarà daquí %d minutas."
],
"This document will expire in %d hours.": [
"Aqueste document expirarà daquí %d ora.",
"Aqueste document expirarà daquí %d oras.",
"Aqueste document expirarà daquí %d oras.",
"Aqueste document expirarà daquí %d oras.",
"Aqueste document expirarà daquí %d oras.",
"Aqueste document expirarà daquí %d oras."
],
"This document will expire in %d days.": [
"Aqueste document expirarà daquí %d jorn.",
"Aqueste document expirarà daquí %d jorns.",
"Aqueste document expirarà daquí %d jorns.",
"Aqueste document expirarà daquí %d jorns.",
"Aqueste document expirarà daquí %d jorns.",
"Aqueste document expirarà daquí %d jorns."
],
"This document will expire in %d months.": [
"Aqueste document expirarà daquí %d mes.",
"Aqueste document expirarà daquí %d meses.",
"Aqueste document expirarà daquí %d meses.",
"Aqueste document expirarà daquí %d meses.",
"Aqueste document expirarà daquí %d meses.",
"Aqueste document expirarà daquí %d meses."
],
"Please enter the password for this paste:": "Picatz lo senhal per aqueste tèxte:",
@ -122,8 +147,8 @@
"Sending comment…": "Mandadís del comentari…",
"Comment posted.": "Comentari mandat.",
"Could not refresh display: %s": "Impossible dactualizar lafichatge:%s",
"unknown status": "Estatut desconegut",
"server error or not responding": "Lo servidor respond pas o a rescontrat una error",
"unknown status": "estatut desconegut",
"server error or not responding": "lo servidor respond pas o a rescontrat una error",
"Could not post comment: %s": "Impossible de mandar lo comentari:%s",
"Sending paste…": "Mandadís del tèxte…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Vòstre tèxte es disponible a ladreça <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Picatz sus [Ctrl]+[c] per copiar)</span>",
@ -187,7 +212,9 @@
"URL shortener may expose your decrypt key in URL.": "Los espleches dacorchiment dURL pòdon expausar la clau de deschiframent dins lURL.",
"Save paste": "Enregistrar lo tèxt",
"Your IP is not authorized to create pastes.": "Vòstra adreça IP a pas lautorizacion de crear de tèxtes.",
"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."
"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 parsing YOURLS response.": "Error d'analisi de la responsa YOURLS.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,7 +3,6 @@
"%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 jest minimalistycznym, otwartoźródłowym serwisem typu pastebin, w którym serwer nie ma jakichkolwiek informacji o tym, co jest wklejane. Dane są szyfrowane i deszyfrowane %sw przeglądarce%s z użyciem 256-bitowego klucza AES.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Więcej informacji na <a href=\"https://privatebin.info/\">stronie projektu</a>.",
"Because ignorance is bliss": "Ponieważ ignorancja jest cnotą",
"en": "pl",
"Paste does not exist, has expired or has been deleted.": "Wklejka nie istnieje, wygasła albo została usunięta.",
"%s requires php %s or above to work. Sorry.": "%s wymaga PHP w wersji %s lub nowszej. Przykro mi.",
"%s requires configuration section [%s] to be present in configuration file.": "%s wymaga obecności sekcji [%s] w pliku konfiguracyjnym.",
@ -11,6 +10,8 @@
"Poczekaj %d sekundę pomiędzy każdą wklejką.",
"Poczekaj %d sekund pomiędzy każdą wklejką.",
"Poczekaj %d sekund pomiędzy każdą wklejką.",
"Poczekaj %d sekund pomiędzy każdą wklejką.",
"Poczekaj %d sekund pomiędzy każdą wklejką.",
"Poczekaj %d sekund pomiędzy każdą wklejką."
],
"Paste is limited to %s of encrypted data.": "Wklejka jest limitowana do %s zaszyfrowanych danych.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Do działania %sa jest wymagany JavaScript. Przepraszamy za tę niedogodność.",
"%s requires a modern browser to work.": "%s wymaga do działania nowoczesnej przeglądarki.",
"New": "Nowa",
"Send": "Wyślij",
"Create": "Stwórz",
"Clone": "Sklonuj",
"Raw text": "Czysty tekst",
"Expires": "Wygasa za",
@ -35,12 +36,16 @@
"Discussion": "Dyskusja",
"Toggle navigation": "Przełącz nawigację",
"%d seconds": [
"%d second",
"%d second",
"%d second",
"%d second",
"%d second",
"%d second"
],
"%d minutes": [
"%d minut",
"%d minut",
"%d minut",
"%d minut",
"%d minut",
@ -50,27 +55,37 @@
"%d godzina",
"%d godzina",
"%d godzinę",
"%d godzinę",
"%d godzinę",
"%d godzinę"
],
"%d days": [
"%d dzień",
"%d dzień",
"%d dzień",
"%d dzień",
"%d dzień",
"%d dzień"
],
"%d weeks": [
"%d tydzień",
"%d tydzień",
"%d tydzień",
"%d tydzień",
"%d tydzień",
"%d tydzień"
],
"%d months": [
"%d miesiąc",
"%d miesiąc",
"%d miesiąc",
"%d miesiąc",
"%d miesiąc",
"%d miesiąc"
],
"%d years": [
"%d rok",
"%d rok",
"%d rok",
"%d rok",
"%d rok",
@ -82,30 +97,40 @@
"Ten dokument wygaśnie za %d sekundę.",
"Ten dokument wygaśnie za %d sekund.",
"Ten dokument wygaśnie za %d sekund.",
"Ten dokument wygaśnie za %d sekund.",
"Ten dokument wygaśnie za %d sekund.",
"Ten dokument wygaśnie za %d sekund."
],
"This document will expire in %d minutes.": [
"Ten dokument wygaśnie za %d minutę.",
"Ten dokument wygaśnie za %d minut.",
"Ten dokument wygaśnie za %d minut.",
"Ten dokument wygaśnie za %d minut.",
"Ten dokument wygaśnie za %d minut.",
"Ten dokument wygaśnie za %d minut."
],
"This document will expire in %d hours.": [
"Ten dokument wygaśnie za godzinę.",
"Ten dokument wygaśnie za %d godzin.",
"Ten dokument wygaśnie za %d godzin.",
"Ten dokument wygaśnie za %d godzin.",
"Ten dokument wygaśnie za %d godzin.",
"Ten dokument wygaśnie za %d godzin."
],
"This document will expire in %d days.": [
"Ten dokument wygaśnie za %d dzień.",
"Ten dokument wygaśnie za %d dni.",
"Ten dokument wygaśnie za %d dni.",
"Ten dokument wygaśnie za %d dni.",
"Ten dokument wygaśnie za %d dni.",
"Ten dokument wygaśnie za %d dni."
],
"This document will expire in %d months.": [
"Ten dokument wygaśnie za miesiąc.",
"Ten dokument wygaśnie za %d miesięcy.",
"Ten dokument wygaśnie za %d miesięcy.",
"Ten dokument wygaśnie za %d miesięcy.",
"Ten dokument wygaśnie za %d miesięcy.",
"Ten dokument wygaśnie za %d miesięcy."
],
"Please enter the password for this paste:": "Wpisz hasło dla tej wklejki:",
@ -189,5 +214,7 @@
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,7 +3,6 @@
"%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 é um serviço minimalista e de código aberto do tipo \"pastebin\", em que o servidor tem zero conhecimento dos dados copiados. Os dados são cifrados e decifrados %sno navegador%s usando 256 bits AES.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Mais informações na <a href=\"https://privatebin.info/\">página do projeto</a>.",
"Because ignorance is bliss": "Porque a ignorância é uma benção",
"en": "pt",
"Paste does not exist, has expired or has been deleted.": "A cópia não existe, expirou ou já foi excluída.",
"%s requires php %s or above to work. Sorry.": "%s requer php %s ou superior para funcionar. Desculpa.",
"%s requires configuration section [%s] to be present in configuration file.": "%s requer que a seção de configuração [% s] esteja no arquivo de configuração.",
@ -11,6 +10,8 @@
"Por favor espere %d segundo entre cada publicação.",
"Por favor espere %d segundos entre cada publicação.",
"Por favor espere %d segundos entre cada publicação.",
"Por favor espere %d segundos entre cada publicação.",
"Por favor espere %d segundos entre cada publicação.",
"Por favor espere %d segundos entre cada publicação."
],
"Paste is limited to %s of encrypted data.": "A cópia está limitada a %s de dados cifrados.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript é necessário para que %s funcione. Pedimos desculpas pela inconveniência.",
"%s requires a modern browser to work.": "%s requer um navegador moderno para funcionar.",
"New": "Novo",
"Send": "Enviar",
"Create": "Criar",
"Clone": "Clonar",
"Raw text": "Texto sem formato",
"Expires": "Expirar em",
@ -38,42 +39,56 @@
"%d segundo",
"%d segundos",
"%d segundos",
"%d segundos",
"%d segundos",
"%d segundos"
],
"%d minutes": [
"%d minuto",
"%d minutos",
"%d minutos",
"%d minutos",
"%d minutos",
"%d minutos"
],
"%d hours": [
"%d hora",
"%d horas",
"%d horas (2° plural)",
"%d horas",
"%d horas",
"%d horas",
"%d horas"
],
"%d days": [
"%d dia",
"%d dias",
"%d dias",
"%d dias",
"%d dias",
"%d dias"
],
"%d weeks": [
"%d semana",
"%d semanas",
"%d semanas",
"%d semanas",
"%d semanas",
"%d semanas"
],
"%d months": [
"%d mês",
"%d meses",
"%d meses",
"%d meses",
"%d meses",
"%d meses"
],
"%d years": [
"%d ano",
"%d anos",
"%d anos",
"%d anos",
"%d anos",
"%d anos"
],
"Never": "Nunca",
@ -82,30 +97,40 @@
"Este documento irá expirar em um segundo.",
"Este documento irá expirar em %d segundos.",
"Este documento irá expirar em %d segundos.",
"Este documento irá expirar em %d segundos.",
"Este documento irá expirar em %d segundos.",
"Este documento irá expirar em %d segundos."
],
"This document will expire in %d minutes.": [
"Este documento irá expirar em um minuto.",
"Este documento irá expirar em %d minutos.",
"Este documento irá expirar em %d minutos.",
"Este documento irá expirar em %d minutos.",
"Este documento irá expirar em %d minutos.",
"Este documento irá expirar em %d minutos."
],
"This document will expire in %d hours.": [
"Este documento irá expirar em uma hora.",
"Este documento irá expirar em %d horas.",
"Este documento irá expirar em %d horas.",
"Este documento irá expirar em %d horas.",
"Este documento irá expirar em %d horas.",
"Este documento irá expirar em %d horas."
],
"This document will expire in %d days.": [
"Este documento irá expirar em um dia.",
"Este documento irá expirar em %d dias.",
"Este documento irá expirar em %d dias.",
"Este documento irá expirar em %d dias.",
"Este documento irá expirar em %d dias.",
"Este documento irá expirar em %d dias."
],
"This document will expire in %d months.": [
"Este documento irá expirar em um mês.",
"Este documento irá expirar em %d meses.",
"Este documento irá expirar em %d meses.",
"Este documento irá expirar em %d meses.",
"Este documento irá expirar em %d meses.",
"Este documento irá expirar em %d meses."
],
"Please enter the password for this paste:": "Por favor, digite a senha para essa cópia:",
@ -185,9 +210,11 @@
"Encrypted note on %s": "Nota criptografada no %s",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visite esse link para ver a nota. Dar a URL para qualquer um permite que eles também acessem a nota.",
"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.",
"Save paste": "Salvar cópia",
"Your IP is not authorized to create pastes.": "Seu IP não está autorizado a criar cópias.",
"Trying to shorten a URL that isn't pointing at our instance.": "Tentando encurtar uma URL que não aponta para a nossa 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 parsing YOURLS response.": "Error parsing YOURLS response."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

220
i18n/ro.json Normal file
View File

@ -0,0 +1,220 @@
{
"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 este un pastebin online, minimalist și cu sursă deschisă unde serverul are zero acces la datele introduse. Datele sunt criptate/decriptate %sîn browser%s folosind AES cu 256 de biți.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Mai multe informații pe <a href=\"https://privatebin.info/\">pagina proiectului</a>.",
"Because ignorance is bliss": "Ignoranța este o binecuvântare",
"Paste does not exist, has expired or has been deleted.": "Paste-ul nu există, a expirat sau a fost șters.",
"%s requires php %s or above to work. Sorry.": "%s necesită php %s sau mai nou pentru a funcționa. Scuze.",
"%s requires configuration section [%s] to be present in configuration file.": "%s necesită ca secțiunea de configurare [%s] să fie prezentă în fișierul de configurare.",
"Please wait %d seconds between each post.": [
"Vă rugăm să așteptați %d secundă între fiecare postare",
"Vă rugăm să așteptați %d secunde între fiecare postare",
"Vă rugăm să așteptați %d de secunde între fiecare postare",
"Vă rugăm să așteptați %d de secunde între fiecare postare",
"Vă rugăm să așteptați %d de secunde între fiecare postare",
"Vă rugăm să așteptați %d de secunde între fiecare postare"
],
"Paste is limited to %s of encrypted data.": "Paste-ul este limitat la %s de date criptate.",
"Invalid data.": "Date invalide.",
"You are unlucky. Try again.": "Ați avut ghinion. Încercați din nou.",
"Error saving comment. Sorry.": "Eroare la salvarea comentariului. Ne pare rău.",
"Error saving paste. Sorry.": "Eroare la salvarea paste-ului. Ne pare rău.",
"Invalid paste ID.": "ID paste invalid.",
"Paste is not of burn-after-reading type.": "Paste-ul nu se șterge după citire.",
"Wrong deletion token. Paste was not deleted.": "Token de ștergere incorect. Paste-ul nu a fost șters.",
"Paste was properly deleted.": "Paste-ul a fost șters cu succes.",
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript este necesar pentru ca %s să funcționeze. Ne cerem scuze pentru neplăceri.",
"%s requires a modern browser to work.": "%s necesită un browser modern pentru a funcționa.",
"New": "Nou",
"Create": "Creează",
"Clone": "Clonați",
"Raw text": "Text brut",
"Expires": "Expiră",
"Burn after reading": "Ștergere după citire",
"Open discussion": "Deschideți discuția",
"Password (recommended)": "Parolă (recomandată)",
"Discussion": "Discuție",
"Toggle navigation": "Comutați navigarea",
"%d seconds": [
"%d secundă",
"%d secunde",
"%d de secunde",
"%d de secunde",
"%d de secunde",
"%d de secunde"
],
"%d minutes": [
"%d minut",
"%d minute",
"%d de minute",
"%d de secunde",
"%d de secunde",
"%d de secunde"
],
"%d hours": [
"%d oră",
"%d ore",
"%d de ore",
"%d de ore",
"%d de ore",
"%d de ore"
],
"%d days": [
"%d zi",
"%d zile",
"%d de zile",
"%d de zile",
"%d de zile",
"%d de zile"
],
"%d weeks": [
"%d săptămână",
"%d săptămână",
"%d săptămâni",
"%d de săptămâni",
"%d de săptămâni",
"%d de săptămâni"
],
"%d months": [
"%d lună",
"%d luni",
"%d de luni",
"%d de luni",
"%d de luni",
"%d de luni"
],
"%d years": [
"%d an",
"%d ani",
"%d de ani",
"%d de ani",
"%d de ani",
"%d de ani"
],
"Never": "Niciodată",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Notă: Acesta este un serviciu de test: Datele ar putea fi șterse oricând. Vor muri niște pisicuțe dacă abuzați acest serviciu.",
"This document will expire in %d seconds.": [
"Acest document va expira în %d secundă.",
"Acest document va expira în %d secunde.",
"Acest document va expira în %d de secunde.",
"Acest document va expira în %d de secunde.",
"Acest document va expira în %d de secunde.",
"Acest document va expira în %d de secunde."
],
"This document will expire in %d minutes.": [
"Acest document va expira în %d minut.",
"Acest document va expira în %d minute.",
"Acest document va expira în %d de minute.",
"Acest document va expira în %d de minute.",
"Acest document va expira în %d de minute.",
"Acest document va expira în %d de minute."
],
"This document will expire in %d hours.": [
"Acest document va expira în %d oră.",
"Acest document va expira în %d ore.",
"Acest document va expira în %d de ore.",
"Acest document va expira în %d de ore.",
"Acest document va expira în %d de ore.",
"Acest document va expira în %d de ore."
],
"This document will expire in %d days.": [
"Acest document va expira în %d zi.",
"Acest document va expira în %d zile.",
"Acest document va expira în %d de zile.",
"Acest document va expira în %d de zile.",
"Acest document va expira în %d de zile.",
"Acest document va expira în %d de zile."
],
"This document will expire in %d months.": [
"Acest document va expira în %d lună.",
"Acest document va expira în %d luni.",
"Acest document va expira în %d de luni.",
"Acest document va expira în %d de luni.",
"Acest document va expira în %d de luni.",
"Acest document va expira în %d de luni."
],
"Please enter the password for this paste:": "Va rugăm să introduceți parola pentru acest paste:",
"Could not decrypt data (Wrong key?)": "Nu s-au putut decripta datele (Cheie gresită?)",
"Could not delete the paste, it was not stored in burn after reading mode.": "Nu s-a putut șterge paste-ul, nu a fost stocat în modul de ștergere după citire.",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "NUMAI PENTRU OCHII DVS. Nu închideți această fereastră, acest mesaj nu poate fi afișat din nou.",
"Could not decrypt comment; Wrong key?": "Nu s-a putut decripta comentariul; Cheie greșită?",
"Reply": "Răspundeți",
"Anonymous": "Anonim",
"Avatar generated from IP address": "Avatar generat din adresa IP",
"Add comment": "Adăugați un comentariu",
"Optional nickname…": "Poreclă opțională…",
"Post comment": "Postați comentariul",
"Sending comment…": "Se trimite comentariul…",
"Comment posted.": "Comentariul a fost postat.",
"Could not refresh display: %s": "Nu s-a putut actualiza afișarea: %s",
"unknown status": "stare necunoscută",
"server error or not responding": "eroare de server sau nu răspunde",
"Could not post comment: %s": "Nu s-a putut posta comentariul: %s",
"Sending paste…": "Se trimite paste-ul…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Paste-ul dvs. este <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Apăsați [Ctrl]+[c] pentru a copia)</span>",
"Delete data": "Ștergeți datele",
"Could not create paste: %s": "Nu s-a putut crea paste-ul: %s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nu s-a putut decripta paste-ul: Cheia de decriptare lipsește din URL (Ați folosit un redirector sau un scurtător de URL care a tăiat o parte din URL?)",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB",
"PiB": "PiB",
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Formatare",
"Plain Text": "Text neformatat",
"Source Code": "Cod sursă",
"Markdown": "Markdown",
"Download attachment": "Descărcați fișierul atașat",
"Cloned: '%s'": "S-a clonat: '%s'",
"The cloned file '%s' was attached to this paste.": "Fișierul clonat '%s' a fost atașat la acest paste.",
"Attach a file": "Atașați un fișier",
"alternatively drag & drop a file or paste an image from the clipboard": "alternativ, trageți și plasați un fișier sau lipiți o imagine din clipboard",
"File too large, to display a preview. Please download the attachment.": "Fișierul este prea mare pentru a afișa o previzualizare. Vă rugăm să descărcaţi fișierul.",
"Remove attachment": "Eliminați fișierul atașat",
"Your browser does not support uploading encrypted files. Please use a newer browser.": "Browserul dvs. nu acceptă încărcarea fișierelor criptate. Vă rugăm să folosiți un browser mai nou.",
"Invalid attachment.": "Fișier invalid.",
"Options": "Opţiuni",
"Shorten URL": "Scurtați URL-ul",
"Editor": "Editor",
"Preview": "Previzualizare",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s necesită ca PATH să se termine cu \"%s\". Vă rugăm să actualizați PATH în index.php.",
"Decrypt": "Decriptare",
"Enter password": "Introduceţi parola",
"Loading…": "Se încarcă…",
"Decrypting paste…": "Se decriptează paste-ul…",
"Preparing new paste…": "Se pregătește un paste nou…",
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "În cazul în care acest mesaj nu dispare niciodată, vă rugăm să aruncaţi o privire la <a href=\"%s\">acest FAQ pentru informații de depanare</a>.",
"+++ no paste text +++": "+++ fără text +++",
"Could not get paste data: %s": "Nu s-a putut obține datele paste-ului: %s",
"QR code": "Cod QR",
"This website is using an insecure HTTP connection! Please use it only for testing.": "Acest website folosește o conexiune HTTP nesigură! Vă rugăm să îl folosiți doar pentru teste.",
"For more information <a href=\"%s\">see this FAQ entry</a>.": "Pentru mai multe informații <a href=\"%s\">a se vedea secțiunea FAQ</a>.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Este posibil ca browserul dvs. să necesite o conexiune HTTPS pentru a suporta API-ul WebCrypto. Încercați să <a href=\"%s\">comutați la HTTPS</a>.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Browserul dvs. nu acceptă WebAssembly folosit pentru compresia zlib. Puteți crea documente necompresate, dar nu le puteți citi pe cele compresate.",
"waiting on user to provide a password": "se așteaptă ca utilizatorul să furnizeze o parolă",
"Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Nu s-au putut decripta datele. Ați introdus parola greșită? Reîncercați folosind butonul de sus.",
"Retry": "Reîncercați",
"Showing raw text…": "Se afișează textul brut…",
"Notice:": "Observaţie:",
"This link will expire after %s.": "Acest link va expira după %s.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "Acest link poate fi accesat o singură dată, nu folosiți butonul înapoi sau reîmprospătare din browserul dvs.",
"Link:": "Link:",
"Recipient may become aware of your timezone, convert time to UTC?": "Destinatarul vă poate afla fusul dvs. orar, convertiți timpul în UTC?",
"Use Current Timezone": "Se folosește fusul orar actual",
"Convert To UTC": "Convertire la UTC",
"Close": "Închideți",
"Encrypted note on %s": "Notă criptată pe %s",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Accesați acest link pentru a vedea nota. Nota poate fi accesată de către oricine care are acest URL.",
"URL shortener may expose your decrypt key in URL.": "Scurtătorul de URL ar putea să vă expună cheia de decriptare din URL.",
"Save paste": "Salvați paste-ul",
"Your IP is not authorized to create pastes.": "Adresa dvs. IP nu este autorizată să creeze paste-uri.",
"Trying to shorten a URL that isn't pointing at our instance.": "Încercarea de a scurta un URL care nu direcționează spre instanța noastră.",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Eroare la apelarea YOURLS. Probabil o problemă de configurare, cum ar fi \"apiurl\" sau \"signature\" greșite sau lipsă.",
"Error parsing YOURLS response.": "Eroare la analizarea răspunsului YOURLS.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Paste-urile care se șterg după citire pot fi afișate numai o dată după încărcare. Doriți să o deschideți acum?",
"Yes, load it": "Da, deschide-o"
}

View File

@ -3,7 +3,6 @@
"%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>.",
"Because ignorance is bliss": "Потому что неведение - благо",
"en": "ru",
"Paste does not exist, has expired or has been deleted.": "Запись не существует, просрочена или была удалена.",
"%s requires php %s or above to work. Sorry.": "Для работы %s требуется php %s или выше. Извините.",
"%s requires configuration section [%s] to be present in configuration file.": "%s необходимо наличие секции [%s] в конфигурационном файле.",
@ -11,6 +10,8 @@
"Пожалуйста, ожидайте %d секунду между каждыми записями.",
"Пожалуйста, ожидайте %d секунды между каждыми записями.",
"Пожалуйста, ожидайте %d секунд между каждыми записями.",
"Пожалуйста, ожидайте %d секунд между каждыми записями.",
"Пожалуйста, ожидайте %d секунд между каждыми записями.",
"Пожалуйста, ожидайте %d секунд между каждыми записями."
],
"Paste is limited to %s of encrypted data.": "Размер записи ограничен %s зашифрованных данных.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Для работы %s требуется включенный JavaScript. Приносим извинения за неудобства.",
"%s requires a modern browser to work.": "Для работы %s требуется более современный браузер.",
"New": "Новая запись",
"Send": "Отправить",
"Create": "Создать",
"Clone": "Дублировать",
"Raw text": "Исходный текст",
"Expires": "Удалить через",
@ -38,42 +39,56 @@
"%d секунду",
"%d секунды",
"%d секунд",
"%d секунд",
"%d секунд",
"%d секунд"
],
"%d minutes": [
"%d минуту",
"%d минуты",
"%d минут",
"%d минут",
"%d минут",
"%d минут"
],
"%d hours": [
"%d час",
"%d часа",
"%d часов",
"%d часов",
"%d часов",
"%d часов"
],
"%d days": [
"%d день",
"%d дня",
"%d дней",
"%d дней",
"%d дней",
"%d дней"
],
"%d weeks": [
"%d неделю",
"%d недели",
"%d недель",
"%d недель",
"%d недель",
"%d недель"
],
"%d months": [
"%d месяц",
"%d месяца",
"%d месяцев",
"%d месяцев",
"%d месяцев",
"%d месяцев"
],
"%d years": [
"%d год",
"%d года",
"%d лет",
"%d лет",
"%d лет",
"%d лет"
],
"Never": "Никогда",
@ -82,30 +97,40 @@
"Документ будет удален через %d секунду.",
"Документ будет удален через %d секунды.",
"Документ будет удален через %d секунд.",
"Документ будет удален через %d секунд.",
"Документ будет удален через %d секунд.",
"Документ будет удален через %d секунд."
],
"This document will expire in %d minutes.": [
"Документ будет удален через %d минуту.",
"Документ будет удален через %d минуты.",
"Документ будет удален через %d минут.",
"Документ будет удален через %d минут.",
"Документ будет удален через %d минут.",
"Документ будет удален через %d минут."
],
"This document will expire in %d hours.": [
"Документ будет удален через %d час.",
"Документ будет удален через %d часа.",
"Документ будет удален через %d часов.",
"Документ будет удален через %d часов.",
"Документ будет удален через %d часов.",
"Документ будет удален через %d часов."
],
"This document will expire in %d days.": [
"Документ будет удален через %d день.",
"Документ будет удален через %d дня.",
"Документ будет удален через %d дней.",
"Документ будет удален через %d дней.",
"Документ будет удален через %d дней.",
"Документ будет удален через %d дней."
],
"This document will expire in %d months.": [
"Документ будет удален через %d месяц.",
"Документ будет удален через %d месяца.",
"Документ будет удален через %d месяцев.",
"Документ будет удален через %d месяцев.",
"Документ будет удален через %d месяцев.",
"Документ будет удален через %d месяцев."
],
"Please enter the password for this paste:": "Пожалуйста, введите пароль от записи:",
@ -187,7 +212,9 @@
"URL shortener may expose your decrypt key in URL.": "Сервис сокращения ссылок может получить ваш ключ расшифровки из ссылки.",
"Save paste": "Сохранить запись",
"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.",
"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."
"Trying to shorten a URL that isn't pointing at our instance.": "Попытка сократить URL, который указывает не на наш сервер.",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Ошибка обращения к YOURLS. Возможно в конфигурации допущена ошибка, например неверный или отсутствующий параметр \"apiurl\" или \"signature\".",
"Error parsing YOURLS response.": "Ошибка разбора ответа от YOURLS.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Записи, удаляемые после прочтения, могут быть отображены после загрузки только один раз. Вы хотите открыть её сейчас?",
"Yes, load it": "Да, загрузить"
}

View File

@ -3,11 +3,12 @@
"%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 online pastebin, kde server nemá žiadne znalosti o vložených údajoch. Údaje sú šifrované/dešifrované %sv prehliadači%s pomocou 256-bitového AES.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Viac informácií na <a href=\"https://privatebin.info/\">stránke projektu</a>.",
"Because ignorance is bliss": "Pretože nevedomosť je sladká",
"en": "sk",
"Paste does not exist, has expired or has been deleted.": "Vložený text neexistuje, jeho platnosť vypršala alebo bol vymazaný.",
"%s requires php %s or above to work. Sorry.": "%s vyžaduje php %s alebo vyššie. Prepáčte.",
"%s requires configuration section [%s] to be present in configuration file.": "%s vyžaduje, aby bola v konfiguračnom súbore prítomná sekcia [%s].",
"Please wait %d seconds between each post.": [
"Počet sekúnd do ďalšieho príspevku: %d",
"Počet sekúnd do ďalšieho príspevku: %d",
"Počet sekúnd do ďalšieho príspevku: %d",
"Počet sekúnd do ďalšieho príspevku: %d",
"Počet sekúnd do ďalšieho príspevku: %d",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Na fungovanie %s je potrebný JavaScript. Ospravedlňujeme sa za nepríjemnosti.",
"%s requires a modern browser to work.": "%s vyžaduje na fungovanie moderný prehliadač.",
"New": "Nový",
"Send": "Odoslať",
"Create": "Vytvoriť",
"Clone": "Klonovať",
"Raw text": "Surový text",
"Expires": "Expirácia",
@ -38,42 +39,56 @@
"%d sekunda",
"%d sekundy",
"%d sekúnd",
"%d sekúnd",
"%d sekúnd",
"%d sekúnd"
],
"%d minutes": [
"%d minúta",
"%d minúty",
"%d minút",
"%d minút",
"%d minút",
"%d minút"
],
"%d hours": [
"%d hodina",
"%d hodiny",
"%d hodín",
"%d hodín",
"%d hodín",
"%d hodín"
],
"%d days": [
"%d deň",
"%d dni",
"%d dní",
"%d dní",
"%d dní",
"%d dní"
],
"%d weeks": [
"%d týždeň",
"%d týždne",
"%d týždňov",
"%d týždňov",
"%d týždňov",
"%d týždňov"
],
"%d months": [
"%d mesiac",
"%d mesiace",
"%d mesiacov",
"%d mesiacov",
"%d mesiacov",
"%d mesiacov"
],
"%d years": [
"%d rok",
"%d roky",
"%d rokov",
"%d rokov",
"%d rokov",
"%d rokov"
],
"Never": "Nikdy",
@ -82,30 +97,40 @@
"Platnosť tohto dokumentu vyprší o %d sekundu.",
"Platnosť tohto dokumentu vyprší o %d sekundy.",
"Platnosť tohto dokumentu vyprší o %d sekúnd.",
"Platnosť tohto dokumentu vyprší o %d sekúnd.",
"Platnosť tohto dokumentu vyprší o %d sekúnd.",
"Platnosť tohto dokumentu vyprší o %d sekúnd."
],
"This document will expire in %d minutes.": [
"Platnosť tohto dokumentu vyprší o %d minútu.",
"Platnosť tohto dokumentu vyprší o %d minúty.",
"Platnosť tohto dokumentu vyprší o %d minút.",
"Platnosť tohto dokumentu vyprší o %d minút.",
"Platnosť tohto dokumentu vyprší o %d minút.",
"Platnosť tohto dokumentu vyprší o %d minút."
],
"This document will expire in %d hours.": [
"Platnosť tohto dokumentu vyprší o %d hodinu.",
"Platnosť tohto dokumentu vyprší o %d hodiny.",
"Platnosť tohto dokumentu vyprší o %d hodín.",
"Platnosť tohto dokumentu vyprší o %d hodín.",
"Platnosť tohto dokumentu vyprší o %d hodín.",
"Platnosť tohto dokumentu vyprší o %d hodín."
],
"This document will expire in %d days.": [
"Platnosť tohto dokumentu vyprší o %d deň.",
"Platnosť tohto dokumentu vyprší o %d dni.",
"Platnosť tohto dokumentu vyprší o %d dní.",
"Platnosť tohto dokumentu vyprší o %d dní.",
"Platnosť tohto dokumentu vyprší o %d dní.",
"Platnosť tohto dokumentu vyprší o %d dní."
],
"This document will expire in %d months.": [
"Platnosť tohto dokumentu vyprší o %d mesiac.",
"Platnosť tohto dokumentu vyprší o %d mesiace.",
"Platnosť tohto dokumentu vyprší o %d mesiacov.",
"Platnosť tohto dokumentu vyprší o %d mesiacov.",
"Platnosť tohto dokumentu vyprší o %d mesiacov.",
"Platnosť tohto dokumentu vyprší o %d mesiacov."
],
"Please enter the password for this paste:": "Zadajte prosím heslo:",
@ -189,5 +214,7 @@
"Your IP is not authorized to create pastes.": "Vaša IP adresa nie je oprávnená vytvárať príspevky.",
"Trying to shorten a URL that isn't pointing at our instance.": "Pokúšate sa skrátiť adresu URL, ktorá neukazuje na túto inštanciu.",
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,7 +3,6 @@
"%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 minimalističen, odprtokodni spletni 'pastebin', kjer server ne ve ničesar o prilepljenih podatkih. Podatki so zakodirani/odkodirani %sv brskalniku%s z uporabo 256 bitnega AES.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Več informacij na <a href=\"https://privatebin.info/\">spletni strani projekta.</a>.",
"Because ignorance is bliss": "Ker kar ne veš ne boli.",
"en": "sl",
"Paste does not exist, has expired or has been deleted.": "Prilepek ne obstaja, mu je potekla življenjska doba, ali pa je izbrisan.",
"%s requires php %s or above to work. Sorry.": "Oprosti, %s za delovanje potrebuje vsaj php %s.",
"%s requires configuration section [%s] to be present in configuration file.": "%s potrebuje sekcijo konfiguracij [%s] v konfiguracijski datoteki.",
@ -11,6 +10,8 @@
"Prosim počakaj vsaj %d sekundo pred vsako naslednjo objavo.",
"Prosim počakaj vsaj %d sekundi pred vsako naslednjo objavo.",
"Prosim počakaj vsaj %d sekunde pred vsako naslednjo objavo.",
"Prosim počakaj vsaj %d sekund pred vsako naslednjo objavo.",
"Prosim počakaj vsaj %d sekund pred vsako naslednjo objavo.",
"Prosim počakaj vsaj %d sekund pred vsako naslednjo objavo."
],
"Paste is limited to %s of encrypted data.": "Velikost prilepka je omejena na %s zakodiranih podatkov.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Da %s deluje, moraš vklopiti JavaScript. Oprosti za povročene nevšečnosti.",
"%s requires a modern browser to work.": "%s za svoje delovanje potrebuje moderen brskalnik.",
"New": "Nov prilepek",
"Send": "Pošlji",
"Create": "Ustvari",
"Clone": "Kloniraj",
"Raw text": "Surov tekst",
"Expires": "Poteče",
@ -38,42 +39,56 @@
"%d sekunda",
"%d sekundi",
"%d sekunde",
"%d sekund",
"%d sekund",
"%d sekund"
],
"%d minutes": [
"%d minuta",
"%d minuti",
"%d minute",
"%d minut",
"%d minut",
"%d minut"
],
"%d hours": [
"%d ura",
"%d uri",
"%d ure",
"%d ur",
"%d ur",
"%d ur"
],
"%d days": [
"%d dan",
"%d dneva",
"%d dnevi",
"%d dni",
"%d dni",
"%d dni"
],
"%d weeks": [
"%d teden",
"%d tedna",
"%d tedni",
"%d tednov",
"%d tednov",
"%d tednov"
],
"%d months": [
"%d mesec",
"%d meseca",
"%d meseci",
"%d mesecev",
"%d mesecev",
"%d mesecev"
],
"%d years": [
"%d leto",
"%d leti",
"%d leta",
"%d let",
"%d let",
"%d let"
],
"Never": "Nikoli",
@ -82,30 +97,40 @@
"Ta dokument bo potekel čez %d sekundo.",
"Ta dokument bo potekel čez %d sekundi.",
"Ta dokument bo potekel čez %d sekunde.",
"Ta dokument bo potekel čez %d sekund.",
"Ta dokument bo potekel čez %d sekund.",
"Ta dokument bo potekel čez %d sekund."
],
"This document will expire in %d minutes.": [
"Ta dokument bo potekel čez %d minuto.",
"Ta dokument bo potekel čez %d minuti.",
"Ta dokument bo potekel čez %d minute.",
"Ta dokument bo potekel čez %d minut.",
"Ta dokument bo potekel čez %d minut.",
"Ta dokument bo potekel čez %d minut."
],
"This document will expire in %d hours.": [
"Ta dokument bo potekel čez %d uro.",
"Ta dokument bo potekel čez %d uri.",
"Ta dokument bo potekel čez %d ure.",
"Ta dokument bo potekel čez %d ur.",
"Ta dokument bo potekel čez %d ur.",
"Ta dokument bo potekel čez %d ur."
],
"This document will expire in %d days.": [
"Ta dokument bo potekel čez %d dan.",
"Ta dokument bo potekel čez %d dni.",
"Ta dokument bo potekel čez %d dni.",
"Ta dokument bo potekel čez %d dni.",
"Ta dokument bo potekel čez %d dni.",
"Ta dokument bo potekel čez %d dni."
],
"This document will expire in %d months.": [
"Ta dokument bo potekel čez %d mesec.",
"Ta dokument bo potekel čez %d meseca.",
"Ta dokument bo potekel čez %d mesece.",
"Ta dokument bo potekel čez %d mesecev.",
"Ta dokument bo potekel čez %d mesecev.",
"Ta dokument bo potekel čez %d mesecev."
],
"Please enter the password for this paste:": "Prosim vnesi geslo tega prilepka:",
@ -189,5 +214,7 @@
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,7 +3,6 @@
"%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",
"en": "sv",
"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.",
@ -11,7 +10,9 @@
"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. (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.",
@ -25,7 +26,7 @@
"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",
"Send": "Send",
"Create": "Skapa",
"Clone": "Clone",
"Raw text": "Raw text",
"Expires": "Expires",
@ -38,43 +39,57 @@
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd 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 (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 (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 (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 (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 (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 (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.",
@ -82,31 +97,41 @@
"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. (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. (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. (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. (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. (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?)",
@ -189,5 +214,7 @@
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -1,13 +1,14 @@
{
"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 เป็น pastebin ออนไลน์แบบโอเพ่นซอร์สที่มีสไตล์แบบมินิมัลลิสท์ เซิร์ฟเวอร์ไม่สามารถรู้ได้ว่าข้อมูลโค้ดที่มาฝากนั้นเป็นข้อมูลอะไร โดยจะถูก %sเข้ารหัส/ถอดรหัส%s ด้วยกระบวนการ AES จำนวน 256 บิตผ่านเบราว์เซอร์",
"%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 ออนไลน์แบบโอเพ่นซอร์สที่มีรูปแบบการใช้งานที่เรียบง่าย เซิร์ฟเวอร์ไม่สามารถรู้ได้ว่าข้อมูลโค้ดที่มาฝากนั้นเป็นข้อมูลอะไร โดยจะถูกเข้ารหัส/ถอดรหัสด้วยกระบวนการ AES จำนวน 256 บิต%sผ่านเบราว์เซอร์%s",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "ข้อมูลเพิ่มเติม ดูได้ที่<a href=\"https://privatebin.info/\">หน้าโครงการ</a>",
"Because ignorance is bliss": "ไม่รู้ไม่ชี้ดีที่สุด",
"en": "th",
"Paste does not exist, has expired or has been deleted.": "การฝากโค้ดไม่มีอยู่ อาจจะหมดอายุหรือถูกลบไปแล้ว",
"%s requires php %s or above to work. Sorry.": "ขออภัย %s ต้องใช้ PHP %s ขึ้นไปจึงจะใช้งานได้",
"%s requires configuration section [%s] to be present in configuration file.": "%s จำเป็นต้องตั้งค่าตัวแปร [%s] ในไฟล์กำหนดค่า",
"Please wait %d seconds between each post.": [
"กรุณาเว้นระยะเวลาการส่งข้อมูลอย่างน้อย %d วินาที",
"กรุณาเว้นระยะเวลาการส่งข้อมูลอย่างน้อย %d วินาที",
"กรุณาเว้นระยะเวลาการส่งข้อมูลอย่างน้อย %d วินาที",
"กรุณาเว้นระยะเวลาการส่งข้อมูลอย่างน้อย %d วินาที",
"กรุณาเว้นระยะเวลาการส่งข้อมูลอย่างน้อย %d วินาที",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "จำเป็นต้องใช้ JavaScript เพื่อให้ %s สามารถทำงานได้ ขออภัยในความไม่สะดวก",
"%s requires a modern browser to work.": "%s ต้องใช้เบราว์เซอร์สมัยใหม่ถึงจะสามารถใช้งานได้",
"New": "ใหม่",
"Send": "ส่ง",
"Create": "สร้าง",
"Clone": "โคลน",
"Raw text": "ข้อความล้วน",
"Expires": "หมดอายุ",
@ -35,74 +36,98 @@
"Discussion": "ความคิดเห็น",
"Toggle navigation": "สลับเปิดปิดการนำทาง",
"%d seconds": [
"%d วินาที",
"%d วินาที",
"%d วินาที",
"%d วินาที",
"%d วินาที",
"%d วินาที"
],
"%d minutes": [
"%d นาที",
"%d นาที",
"%d นาที",
"%d นาที",
"%d นาที",
"%d นาที"
],
"%d hours": [
"%d ชั่วโมง",
"%d ชั่วโมง",
"%d ชั่วโมง",
"%d ชั่วโมง",
"%d ชั่วโมง",
"%d ชั่วโมง"
],
"%d days": [
"%d วัน",
"%d วัน",
"%d วัน",
"%d วัน",
"%d วัน",
"%d วัน"
],
"%d weeks": [
"%d สัปดาห์",
"%d สัปดาห์",
"%d สัปดาห์",
"%d สัปดาห์",
"%d สัปดาห์",
"%d สัปดาห์"
],
"%d months": [
"%d เดือน",
"%d เดือน",
"%d เดือน",
"%d เดือน",
"%d เดือน",
"%d เดือน"
],
"%d years": [
"%d ปี",
"%d ปี",
"%d ปี",
"%d ปี",
"%d ปี",
"%d ปี"
],
"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.": [
"เอกสารนี้จะหมดอายุใน %d วินาที",
"เอกสารนี้จะหมดอายุใน %d วินาที",
"เอกสารนี้จะหมดอายุใน %d วินาที",
"เอกสารนี้จะหมดอายุใน %d วินาที",
"เอกสารนี้จะหมดอายุใน %d วินาที",
"เอกสารนี้จะหมดอายุใน %d วินาที"
],
"This document will expire in %d minutes.": [
"เอกสารนี้จะหมดอายุใน %d นาที",
"เอกสารนี้จะหมดอายุใน %d นาที",
"เอกสารนี้จะหมดอายุใน %d นาที",
"เอกสารนี้จะหมดอายุใน %d นาที",
"เอกสารนี้จะหมดอายุใน %d นาที",
"เอกสารนี้จะหมดอายุใน %d นาที"
],
"This document will expire in %d hours.": [
"เอกสารนี้จะหมดอายุใน %d ชั่วโมง",
"เอกสารนี้จะหมดอายุใน %d ชั่วโมง",
"เอกสารนี้จะหมดอายุใน %d ชั่วโมง",
"เอกสารนี้จะหมดอายุใน %d ชั่วโมง",
"เอกสารนี้จะหมดอายุใน %d ชั่วโมง",
"เอกสารนี้จะหมดอายุใน %d ชั่วโมง"
],
"This document will expire in %d days.": [
"เอกสารนี้จะหมดอายุใน %d วัน",
"เอกสารนี้จะหมดอายุใน %d วัน",
"เอกสารนี้จะหมดอายุใน %d วัน",
"เอกสารนี้จะหมดอายุใน %d วัน",
"เอกสารนี้จะหมดอายุใน %d วัน",
"เอกสารนี้จะหมดอายุใน %d วัน"
],
"This document will expire in %d months.": [
"เอกสารนี้จะหมดอายุใน %d เดือน",
"เอกสารนี้จะหมดอายุใน %d เดือน",
"เอกสารนี้จะหมดอายุใน %d เดือน",
"เอกสารนี้จะหมดอายุใน %d เดือน",
"เอกสารนี้จะหมดอายุใน %d เดือน",
@ -189,5 +214,7 @@
"Your IP is not authorized to create pastes.": "IP ของคุณไม่ได้รับอนุญาตให้สร้างการฝากโค้ด",
"Trying to shorten a URL that isn't pointing at our instance.": "กำลังพยายามใช้เครื่องมือสร้างลิงก์ย่อ ที่ไม่ได้ชี้ไปที่อินสแตนซ์ของเรา",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "เกิดข้อผิดพลาดในการเรียก YOURLS อาจเป็นปัญหามาจากการกำหนดค่า เช่น \"apiurl\" หรือ \"signature\" ไม่ถูกต้องหรือขาดหายไป",
"Error parsing YOURLS response.": "เกิดข้อผิดพลาดในการแยกวิเคราะห์การตอบสนองของ YOURLS"
"Error parsing YOURLS response.": "เกิดข้อผิดพลาดในการแยกวิเคราะห์การตอบสนองของ YOURLS",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,11 +3,12 @@
"%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 sunucunun burada paylaştığınız veriyi görmediği, minimal, açık kaynak bir pastebindir. Veriler tarayıcıda 256 bit AES kullanılarak şifrelenir/çözülür.",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Daha fazla bilgi için <a href=\"https://privatebin.info/\">proje sayfası</a>'na göz atabilirsiniz.",
"Because ignorance is bliss": "Çünkü, cehalet mutluluktur",
"en": "tr",
"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 veya daha üstünü gerektirir.",
"%s requires configuration section [%s] to be present in configuration file.": "%s konfigürasyon bölümünün [%s] bulunmasını gerektir.",
"Please wait %d seconds between each post.": [
"Lütfen paylaşımlar arasında %d saniye bekleyiniz.",
"Lütfen paylaşımlar arasında %d saniye bekleyiniz.",
"Lütfen paylaşımlar arasında %d saniye bekleyiniz.",
"Lütfen paylaşımlar arasında %d saniye bekleyiniz.",
"Lütfen paylaşımlar arasında %d saniye bekleyiniz.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript %s 'in çalışması için gereklidir. Rahatsızlıktan dolayı özür dileriz.",
"%s requires a modern browser to work.": "%s çalışmak için çağdaş bir tarayıcı gerektirir.",
"New": "Yeni",
"Send": "Gönder",
"Create": "Oluştur",
"Clone": "Kopyala",
"Raw text": "Açık yazı",
"Expires": "Süre Sonu",
@ -35,24 +36,32 @@
"Discussion": "Tartışma",
"Toggle navigation": "Gezinmeyi değiştir",
"%d seconds": [
"%d saniye",
"%d saniye",
"%d saniye",
"%d saniye",
"%d saniye",
"%d saniye"
],
"%d minutes": [
"%d dakika",
"%d dakika",
"%d dakika",
"%d dakika",
"%d dakika",
"%d dakika"
],
"%d hours": [
"%d saat",
"%d saat",
"%d saat",
"%d saat",
"%d saat",
"%d saat"
],
"%d days": [
"%d gün",
"%d gün",
"%d gün",
"%d gün",
"%d gün",
@ -62,15 +71,21 @@
"%d hafta",
"%d haftalar",
"%d hafta",
"%d hafta",
"%d hafta",
"%d hafta"
],
"%d months": [
"%d ay",
"%d ay",
"%d ay",
"%d ay",
"%d ay",
"%d ay"
],
"%d years": [
"%d yıl",
"%d yıl",
"%d yıl",
"%d yıl",
"%d yıl",
@ -79,30 +94,40 @@
"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.",
"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.",
"Bu belge %d saniyede silinecektir.",
"Bu belge %d saniyede silinecektir."
],
"This document will expire in %d minutes.": [
"Bu belge %d dakikada silinecektir.",
"Bu belge %d dakikada silinecektir.",
"Bu belge %d dakikada silinecektir.",
"Bu belge %d dakikada silinecektir.",
"Bu belge %d dakikada silinecektir.",
"Bu belge %d dakikada silinecektir."
],
"This document will expire in %d hours.": [
"Bu belge %d saatte silinecektir.",
"Bu belge %d saatte silinecektir.",
"Bu belge %d saatte silinecektir.",
"Bu belge %d saatte silinecektir.",
"Bu belge %d saatte silinecektir.",
"Bu belge %d saatte silinecektir."
],
"This document will expire in %d days.": [
"Bu belge %d günde silinecektir.",
"Bu belge %d günde silinecektir.",
"Bu belge %d günde silinecektir.",
"Bu belge %d günde silinecektir.",
"Bu belge %d günde silinecektir.",
"Bu belge %d günde silinecektir."
],
"This document will expire in %d months.": [
"Bu belge %d ayda silinecektir.",
"Bu belge %d ayda silinecektir.",
"Bu belge %d ayda silinecektir.",
"Bu belge %d ayda silinecektir.",
"Bu belge %d ayda silinecektir.",
@ -189,5 +214,7 @@
"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.",
"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."
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
"Yes, load it": "Yes, load it"
}

View File

@ -3,7 +3,6 @@
"%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>.",
"Because ignorance is bliss": "Бо незнання - благо",
"en": "uk",
"Paste does not exist, has expired or has been deleted.": "Допис не існує, протермінований чи був видалений.",
"%s requires php %s or above to work. Sorry.": "Для роботи %s потрібен php %s и вище. Вибачте.",
"%s requires configuration section [%s] to be present in configuration file.": "%s потрібна секція [%s] в конфігураційному файлі.",
@ -11,6 +10,8 @@
"Будь ласка, зачекайте %d секунду між створеннями.",
"Будь ласка, зачекайте %d секунди між створеннями.",
"Будь ласка, зачекайте %d секунд між створеннями.",
"Будь ласка, зачекайте %d секунд між створеннями.",
"Будь ласка, зачекайте %d секунд між створеннями.",
"Будь ласка, зачекайте %d секунд між створеннями."
],
"Paste is limited to %s of encrypted data.": "Розмір допису обмежений %s зашифрованих даних.",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Для роботи %s потрібен увімкнутий JavaScript. Вибачте.",
"%s requires a modern browser to work.": "Для роботи %s потрібен більш сучасний переглядач.",
"New": "Новий допис",
"Send": "Відправити",
"Create": "Створити",
"Clone": "Дублювати",
"Raw text": "Початковий текст",
"Expires": "Вилучити через",
@ -38,42 +39,56 @@
"%d секунду",
"%d секунди",
"%d секунд",
"%d секунд",
"%d секунд",
"%d секунд"
],
"%d minutes": [
"%d хвилину",
"%d хвилини",
"%d хвилин",
"%d хвилин",
"%d хвилин",
"%d хвилин"
],
"%d hours": [
"%d годину",
"%d години",
"%d годин",
"%d годин",
"%d годин",
"%d годин"
],
"%d days": [
"%d день",
"%d дні",
"%d днів",
"%d днів",
"%d днів",
"%d днів"
],
"%d weeks": [
"%d тиждень",
"%d тижні",
"%d тижнів",
"%d тижнів",
"%d тижнів",
"%d тижнів"
],
"%d months": [
"%d місяць",
"%d місяці",
"%d місяців",
"%d місяців",
"%d місяців",
"%d місяців"
],
"%d years": [
"%d рік",
"%d роки",
"%d років",
"%d років",
"%d років",
"%d років"
],
"Never": "Ніколи",
@ -82,30 +97,40 @@
"Документ буде вилучений через %d секунду.",
"Документ буде вилучений через %d секунди.",
"Документ буде вилучений через %d секунд.",
"Документ буде вилучений через %d секунд.",
"Документ буде вилучений через %d секунд.",
"Документ буде вилучений через %d секунд."
],
"This document will expire in %d minutes.": [
"Документ буде вилучений через %d хвилину.",
"Документ буде вилучений через %d хвилини.",
"Документ буде вилучений через %d хвилин.",
"Документ буде вилучений через %d хвилин.",
"Документ буде вилучений через %d хвилин.",
"Документ буде вилучений через %d хвилин."
],
"This document will expire in %d hours.": [
"Документ буде вилучений через %d годину.",
"Документ буде вилучений через %d години.",
"Документ буде вилучений через %d годин.",
"Документ буде вилучений через %d годин.",
"Документ буде вилучений через %d годин.",
"Документ буде вилучений через %d годин."
],
"This document will expire in %d days.": [
"Документ буде вилучений через %d день.",
"Документ буде вилучений через %d дні.",
"Документ буде вилучений через %d днів.",
"Документ буде вилучений через %d днів.",
"Документ буде вилучений через %d днів.",
"Документ буде вилучений через %d днів."
],
"This document will expire in %d months.": [
"Документ буде вилучений через %d місяць.",
"Документ буде вилучений через %d місяці.",
"Документ буде вилучений через %d місяців.",
"Документ буде вилучений через %d місяців.",
"Документ буде вилучений через %d місяців.",
"Документ буде вилучений через %d місяців."
],
"Please enter the password for this paste:": "Будь ласка, введіть пароль від допису:",
@ -187,7 +212,9 @@
"URL shortener may expose your decrypt key in URL.": "Сервіс скорочення посилань може викрити ваш ключ дешифрування з URL.",
"Save paste": "Зберегти вставку",
"Your IP is not authorized to create pastes.": "Вашому IP не дозволено створювати вставки.",
"Trying to shorten a URL that isn't pointing at our instance.": "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."
"Trying to shorten a URL that isn't pointing at our instance.": "Спроба скоротити URL, який не вказує на наш екземпляр.",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Помилка виклику YOURLS. Ймовірно проблема з конфігурацією, наприклад \"apiurl\" чи \"signature\".",
"Error parsing YOURLS response.": "Помилка розбору відповіді YOURLS.",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Спалити після вставки читання можна вивести лише один раз під час завантаження. Відкрити його зараз?",
"Yes, load it": "Так, завантажити"
}

View File

@ -2,12 +2,13 @@
"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在浏览器内%s进行 AES-256 加密和解密。",
"More information on the <a href=\"https://privatebin.info/\">project page</a>.": "更多信息请查看<a href=\"https://privatebin.info/\">项目主页</a>。",
"Because ignorance is bliss": "因为无知是福",
"en": "zh",
"Because ignorance is bliss": "以不知为幸",
"Paste does not exist, has expired or has been deleted.": "粘贴内容不存在、已过期或已被删除。",
"%s requires php %s or above to work. Sorry.": "抱歉,%s 需要 PHP %s 及以上版本才能运行。",
"%s requires configuration section [%s] to be present in configuration file.": "%s 需要设置配置文件中的 [%s] 部分。",
"Please wait %d seconds between each post.": [
"每 %d 秒只能粘贴一次。",
"每 %d 秒只能粘贴一次。",
"每 %d 秒只能粘贴一次。",
"每 %d 秒只能粘贴一次。",
"每 %d 秒只能粘贴一次。",
@ -25,7 +26,7 @@
"JavaScript is required for %s to work. Sorry for the inconvenience.": "%s 需要 JavaScript 来进行加解密。 给你带来的不便敬请谅解。",
"%s requires a modern browser to work.": "%s 需要在现代浏览器上工作。",
"New": "新建",
"Send": "送出",
"Create": "创建",
"Clone": "复制",
"Raw text": "纯文本",
"Expires": "有效期",
@ -35,6 +36,8 @@
"Discussion": "讨论",
"Toggle navigation": "切换导航栏",
"%d seconds": [
"%d 秒",
"%d 秒",
"%d 秒",
"%d 秒",
"%d 秒",
@ -44,33 +47,45 @@
"%d 分钟",
"%d 分钟",
"%d 秒",
"%d 秒",
"%d 秒",
"%d 秒"
],
"%d hours": [
"%d 小时",
"%d 小时",
"%d 小时",
"%d 小时",
"%d 小时",
"%d 小时"
],
"%d days": [
"%d 天",
"%d 天",
"%d 天",
"%d 天",
"%d 天",
"%d 天"
],
"%d weeks": [
"%d 周",
"%d 周",
"%d 周",
"%d 周",
"%d 周",
"%d 周"
],
"%d months": [
"%d 个月",
"%d 个月",
"%d 个月",
"%d 个月",
"%d 个月",
"%d 个月"
],
"%d years": [
"%d 年",
"%d 年",
"%d 年",
"%d 年",
"%d 年",
@ -82,30 +97,40 @@
"这份文档将在一秒后过期。",
"这份文档将在 %d 秒后过期。",
"这份文档将在 %d 秒后过期。",
"这份文档将在 %d 秒后过期。",
"这份文档将在 %d 秒后过期。",
"这份文档将在 %d 秒后过期。"
],
"This document will expire in %d minutes.": [
"这份文档将在一分钟后过期。",
"这份文档将在 %d 分钟后过期。",
"这份文档将在 %d 分钟后过期。",
"这份文档将在 %d 分钟后过期。",
"这份文档将在 %d 分钟后过期。",
"这份文档将在 %d 分钟后过期。"
],
"This document will expire in %d hours.": [
"这份文档将在一小时后过期。",
"这份文档将在 %d 小时后过期。",
"这份文档将在 %d 小时后过期。",
"这份文档将在 %d 小时后过期。",
"这份文档将在 %d 小时后过期。",
"这份文档将在 %d 小时后过期。"
],
"This document will expire in %d days.": [
"这份文档将在一天后过期。",
"这份文档将在 %d 天后过期。",
"这份文档将在 %d 天后过期。",
"这份文档将在 %d 天后过期。",
"这份文档将在 %d 天后过期。",
"这份文档将在 %d 天后过期。"
],
"This document will expire in %d months.": [
"这份文档将在一个月后过期。",
"这份文档将在 %d 个月后过期。",
"这份文档将在 %d 个月后过期。",
"这份文档将在 %d 个月后过期。",
"这份文档将在 %d 个月后过期。",
"这份文档将在 %d 个月后过期。"
],
"Please enter the password for this paste:": "请输入这份粘贴内容的密码:",
@ -187,7 +212,9 @@
"URL shortener may expose your decrypt key in URL.": "短链接服务可能会暴露您在 URL 中的解密密钥。",
"Save paste": "保存内容",
"Your IP is not authorized to create pastes.": "您的 IP 无权创建粘贴。",
"Trying to shorten a URL that isn't pointing at our instance.": "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."
"Trying to shorten a URL that isn't pointing at our instance.": "尝试缩短一个不指向我们实例的URL。",
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "调用 YOURLS 时出错。可能是配置问题例如“apiurl”或“signature”错误或缺失。",
"Error parsing YOURLS response.": "解析 YOURLS 响应时出错。",
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "读取粘贴后只能在加载时显示一次。您想现在打开吗?",
"Yes, load it": "是的,加载它"
}

View File

@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.5.0
* @version 1.7.1
*/
// change this, if your php files and data is outside of your webservers document root

View File

@ -10,14 +10,14 @@ global.fs = require('fs');
global.WebCrypto = require('@peculiar/webcrypto').Crypto;
// application libraries to test
global.$ = global.jQuery = require('./jquery-3.6.1');
global.$ = global.jQuery = require('./jquery-3.7.0');
global.RawDeflate = require('./rawinflate-0.3').RawDeflate;
global.zlib = require('./zlib-1.2.13').zlib;
global.zlib = require('./zlib-1.3.1').zlib;
require('./prettify');
global.prettyPrint = window.PR.prettyPrint;
global.prettyPrintOne = window.PR.prettyPrintOne;
global.showdown = require('./showdown-2.1.0');
global.DOMPurify = require('./purify-2.4.6');
global.DOMPurify = require('./purify-3.0.8');
global.baseX = require('./base-x-4.0.0').baseX;
global.Legacy = require('./legacy').Legacy;
require('./bootstrap-3.4.1');
@ -37,7 +37,7 @@ var a2zString = ['a','b','c','d','e','f','g','h','i','j','k','l','m',
})
),
schemas = ['ftp','http','https'],
supportedLanguages = ['de', 'es', 'fr', 'it', 'no', 'pl', 'pt', 'oc', 'ru', 'sl', 'zh'],
supportedLanguages = ['ar', 'bg', 'ca', 'co', 'cs', 'de', 'el', 'es', 'et', 'fi', 'fr', 'he', 'hu', 'id', 'it', 'ja', 'jbo', 'lt', 'no', 'nl', 'pl', 'pt', 'oc', 'ru', 'sk', 'sl', 'th', 'tr', 'uk', 'zh'],
mimeTypes = ['image/png', 'application/octet-stream'],
formats = ['plaintext', 'markdown', 'syntaxhighlighting'],
mimeFile = fs.createReadStream('/etc/mime.types'),
@ -113,8 +113,8 @@ exports.jscBase64String = function() {
};
// provides a random URL schema supported by the whatwg-url library
exports.jscSchemas = function() {
return jsc.elements(schemas);
exports.jscSchemas = function(withFtp = true) {
return jsc.elements(withFtp ? schemas : schemas.slice(1));
};
// provides a random supported language string
@ -131,3 +131,24 @@ exports.jscMimeTypes = function() {
exports.jscFormats = function() {
return jsc.elements(formats);
};
// provides random URLs
exports.jscUrl = function(withFragment = true, withQuery = true) {
let url = {
schema: exports.jscSchemas(),
address: jsc.nearray(exports.jscA2zString()),
};
if (withFragment) {
url.fragment = jsc.string;
}
if(withQuery) {
url.query = jsc.array(exports.jscQueryString());
}
return jsc.record(url);
};
exports.urlToString = function (url) {
return url.schema + '://' + url.address.join('') + '/' + (url.query ? '?' +
encodeURI(url.query.join('').replace(/^&+|&+$/gm,'')) : '') +
(url.fragment ? '#' + encodeURI(url.fragment) : '');
};

2
js/jquery-3.6.1.js vendored

File diff suppressed because one or more lines are too long

2
js/jquery-3.7.0.js vendored Normal file

File diff suppressed because one or more lines are too long

16
js/package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "privatebin",
"version": "1.4.0",
"version": "1.6.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "privatebin",
"version": "1.4.0",
"version": "1.6.2",
"license": "zlib-acknowledgement",
"devDependencies": {
"@peculiar/webcrypto": "^1.1.1",
@ -966,9 +966,9 @@
"dev": true
},
"node_modules/word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz",
"integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@ -1770,9 +1770,9 @@
}
},
"word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz",
"integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==",
"dev": true
},
"xml-name-validator": {

View File

@ -1,6 +1,6 @@
{
"name": "privatebin",
"version": "1.5.0",
"version": "1.7.1",
"description": "PrivateBin is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted in the browser using 256 bit AES in Galois Counter mode (GCM).",
"main": "privatebin.js",
"directories": {

View File

@ -6,7 +6,7 @@
* @see {@link https://github.com/PrivateBin/PrivateBin}
* @copyright 2012 Sébastien SAUVAGE ({@link http://sebsauvage.net})
* @license {@link https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License}
* @version 1.5.0
* @version 1.7.1
* @name PrivateBin
* @namespace
*/
@ -77,10 +77,17 @@ jQuery.PrivateBin = (function($, RawDeflate) {
}
};
/**
* URL fragment prefix requiring load confirmation
*
* @private
*/
const loadConfirmPrefix = '#-';
/**
* CryptoData class
*
* bundles helper fuctions used in both paste and comment formats
* bundles helper functions used in both paste and comment formats
*
* @name CryptoData
* @class
@ -95,7 +102,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
/**
* gets the cipher data (cipher text + adata)
*
* @name Paste.getCipherData
* @name CryptoData.getCipherData
* @function
* @return {Array}|{string}
*/
@ -108,7 +115,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
/**
* Paste class
*
* bundles helper fuctions around the paste formats
* bundles helper functions around the paste formats
*
* @name Paste
* @class
@ -171,7 +178,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
/**
* Comment class
*
* bundles helper fuctions around the comment formats
* bundles helper functions around the comment formats
*
* @name Comment
* @class
@ -183,7 +190,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
/**
* gets the UNIX timestamp of the comment creation
*
* @name Paste.getCreated
* @name Comment.getCreated
* @function
* @return {int}
*/
@ -195,7 +202,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
/**
* gets the icon of the comment submitter
*
* @name Paste.getIcon
* @name Comment.getIcon
* @function
* @return {string}
*/
@ -228,7 +235,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#39;',
'\'': '&#39;',
'/': '&#x2F;',
'`': '&#x60;',
'=': '&#x3D;'
@ -627,7 +634,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
* @prop {string[]}
* @readonly
*/
const supportedLanguages = ['bg', 'ca', 'co', 'cs', 'de', 'el', 'es', 'et', 'fi', 'fr', 'he', 'hu', 'id', 'it', 'jbo', 'lt', 'no', 'nl', 'pl', 'pt', 'oc', 'ru', 'sk', 'sl', 'th', 'tr', 'uk', 'zh'];
const supportedLanguages = ['ar', 'bg', 'ca', 'co', 'cs', 'de', 'el', 'es', 'et', 'fi', 'fr', 'he', 'hu', 'id', 'it', 'ja', 'jbo', 'lt', 'no', 'nl', 'pl', 'pt', 'oc', 'ro', 'ru', 'sk', 'sl', 'th', 'tr', 'uk', 'zh'];
/**
* built in language
@ -790,6 +797,18 @@ jQuery.PrivateBin = (function($, RawDeflate) {
return output;
};
/**
* get currently loaded language
*
* @name I18n.getLanguage
* @function
* @return {string}
*/
me.getLanguage = function()
{
return language;
};
/**
* per language functions to use to determine the plural form
*
@ -802,6 +821,8 @@ jQuery.PrivateBin = (function($, RawDeflate) {
me.getPluralForm = function(n) {
switch (language)
{
case 'ar':
return n === 0 ? 0 : (n === 1 ? 1 : (n === 2 ? 2 : (n % 100 >= 3 && n % 100 <= 10 ? 3 : (n % 100 >= 11 ? 4 : 5))));
case 'cs':
case 'sk':
return n === 1 ? 0 : (n >= 2 && n <= 4 ? 1 : 2);
@ -814,6 +835,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
case 'he':
return n === 1 ? 0 : (n === 2 ? 1 : ((n < 0 || n > 10) && (n % 10 === 0) ? 2 : 3));
case 'id':
case 'ja':
case 'jbo':
case 'th':
return 0;
@ -821,6 +843,8 @@ jQuery.PrivateBin = (function($, RawDeflate) {
return n % 10 === 1 && n % 100 !== 11 ? 0 : ((n % 10 >= 2 && n % 100 < 10 || n % 100 >= 20) ? 1 : 2);
case 'pl':
return n === 1 ? 0 : (n % 10 >= 2 && n %10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);
case 'ro':
return n === 1 ? 0 : ((n === 0 || (n % 100 > 0 && n % 100 < 20)) ? 1 : 2);
case 'ru':
case 'uk':
return n % 10 === 1 && n % 100 !== 11 ? 0 : (n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);
@ -844,7 +868,10 @@ jQuery.PrivateBin = (function($, RawDeflate) {
// auto-select language based on browser settings
if (newLanguage.length === 0) {
newLanguage = (navigator.language || navigator.userLanguage || 'en').substring(0, 2);
newLanguage = (navigator.language || navigator.userLanguage || 'en');
if (newLanguage.indexOf('-') > 0) {
newLanguage = newLanguage.split('-')[0];
}
}
// if language is already used skip update
@ -1494,10 +1521,11 @@ jQuery.PrivateBin = (function($, RawDeflate) {
me.getPasteKey = function()
{
if (symmetricKey === null) {
let newKey = window.location.hash.substring(1);
if (newKey === '') {
throw 'no encryption key given';
let startPos = 1;
if(window.location.hash.startsWith(loadConfirmPrefix)) {
startPos = loadConfirmPrefix.length;
}
let newKey = window.location.hash.substring(startPos);
// Some web 2.0 services and redirectors add data AFTER the anchor
// (such as &utm_source=...). We will strip any additional data.
@ -1506,6 +1534,9 @@ jQuery.PrivateBin = (function($, RawDeflate) {
{
newKey = newKey.substring(0, ampersandPos);
}
if (newKey === '') {
throw 'no encryption key given';
}
// version 2 uses base58, version 1 uses base64 without decoding
try {
@ -2017,29 +2048,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
xhrFields: {
withCredentials: false
},
success: function(response) {
let responseString = response;
if (typeof responseString === 'object') {
responseString = JSON.stringify(responseString);
}
if (typeof responseString === 'string' && responseString.length > 0) {
const shortUrlMatcher = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g;
const shortUrl = (responseString.match(shortUrlMatcher) || []).sort(function(a, b) {
return a.length - b.length;
})[0];
if (typeof shortUrl === 'string' && shortUrl.length > 0) {
// we disable the button to avoid calling shortener again
$shortenButton.addClass('buttondisabled');
// update link
$pasteUrl.text(shortUrl);
$pasteUrl.prop('href', shortUrl);
// we pre-select the link so that the user only has to [Ctrl]+[c] the link
Helper.selectText($pasteUrl[0]);
return;
}
}
Alert.showError('Cannot parse response from URL shortener.');
}
success: PasteStatus.extractUrl
})
.fail(function(data, textStatus, errorThrown) {
console.error(textStatus, errorThrown);
@ -2105,6 +2114,50 @@ jQuery.PrivateBin = (function($, RawDeflate) {
Helper.selectText($pasteUrl[0]);
};
/**
* extracts URLs from given string
*
* if at least one is found, it disables the shortener button and
* replaces the paste URL
*
* @name PasteStatus.extractUrl
* @function
* @param {string} response
*/
me.extractUrl = function(response)
{
if (typeof response === 'object') {
response = JSON.stringify(response);
}
if (typeof response === 'string' && response.length > 0) {
const shortUrlMatcher = /https?:\/\/[^\s"<]+/g; // JSON API will have URL in quotes, XML in tags
const shortUrl = (response.match(shortUrlMatcher) || []).filter(function(urlRegExMatch) {
if (typeof URL.canParse === 'function') {
return URL.canParse(urlRegExMatch);
}
// polyfill for older browsers (< 120) & node (< 19.9 & < 18.17)
try {
return !!new URL(urlRegExMatch);
} catch (error) {
return false;
}
}).sort(function(a, b) {
return a.length - b.length; // shortest first
})[0];
if (typeof shortUrl === 'string' && shortUrl.length > 0) {
// we disable the button to avoid calling shortener again
$shortenButton.addClass('buttondisabled');
// update link
$pasteUrl.text(shortUrl);
$pasteUrl.prop('href', shortUrl);
// we pre-select the link so that the user only has to [Ctrl]+[c] the link
Helper.selectText($pasteUrl[0]);
return;
}
}
Alert.showError('Cannot parse response from URL shortener.');
};
/**
* shows the remaining time
*
@ -2210,6 +2263,34 @@ jQuery.PrivateBin = (function($, RawDeflate) {
PasteDecrypter.run();
}
/**
* Request users confirmation to load possibly burn after reading paste
*
* @name Prompt.requestLoadConfirmation
* @function
*/
me.requestLoadConfirmation = function()
{
const $loadconfirmmodal = $('#loadconfirmmodal');
if ($loadconfirmmodal.length > 0) {
const $loadconfirmOpenNow = $loadconfirmmodal.find('#loadconfirm-open-now');
$loadconfirmOpenNow.off('click.loadPaste');
$loadconfirmOpenNow.on('click.loadPaste', PasteDecrypter.run);
const $loadconfirmClose = $loadconfirmmodal.find('.close');
$loadconfirmClose.off('click.close');
$loadconfirmClose.on('click.close', Controller.newPaste);
$loadconfirmmodal.modal('show');
} else {
if (window.confirm(
I18n._('Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?')
)) {
PasteDecrypter.run();
} else {
Controller.newPaste();
}
}
}
/**
* ask the user for the password and set it
*
@ -2224,6 +2305,12 @@ jQuery.PrivateBin = (function($, RawDeflate) {
backdrop: 'static',
keyboard: false
});
// focus password input
$passwordDecrypt.focus();
// then re-focus it, when modal causes it to loose focus again
setTimeout(function () {
$passwordDecrypt.focus();
}, 500);
return;
}
@ -2283,13 +2370,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
$passwordForm = $('#passwordform');
$passwordModal = $('#passwordmodal');
// bind events
// focus password input when it is shown
$passwordModal.on('shown.bs.Model', function () {
$passwordDecrypt.focus();
});
// handle Model password submission
// bind events - handle Model password submission
$passwordForm.submit(submitPasswordModal);
};
@ -3523,7 +3604,6 @@ jQuery.PrivateBin = (function($, RawDeflate) {
if (fadeOut === true) {
setTimeout(function () {
$comment.removeClass('highlight');
}, 300);
}
};
@ -3649,7 +3729,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
*/
function changeBurnAfterReading()
{
if ($burnAfterReading.is(':checked')) {
if (me.getBurnAfterReading()) {
$openDiscussionOption.addClass('buttondisabled');
$openDiscussion.prop('checked', false);
@ -3669,7 +3749,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
*/
function changeOpenDiscussion()
{
if ($openDiscussion.is(':checked')) {
if (me.getOpenDiscussion()) {
$burnAfterReadingOption.addClass('buttondisabled');
$burnAfterReading.prop('checked', false);
@ -3771,6 +3851,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
{
document.cookie = 'lang=' + $(event.target).data('lang') + ';secure';
UiHelper.reloadHome();
event.preventDefault();
}
/**
@ -3884,7 +3965,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
}
emailBody += I18n._('Link:');
emailBody += EOL;
emailBody += `${window.location.href}`;
emailBody += $('#pasteurl').attr('href'); // might have been shortened
return emailBody;
}
@ -3926,10 +4007,6 @@ jQuery.PrivateBin = (function($, RawDeflate) {
const $emailconfirmmodal = $('#emailconfirmmodal');
if ($emailconfirmmodal.length > 0) {
if (expirationDate !== null) {
I18n._(
$emailconfirmmodal.find('#emailconfirm-display'),
'Recipient may become aware of your timezone, convert time to UTC?'
);
const $emailconfirmTimezoneCurrent = $emailconfirmmodal.find('#emailconfirm-timezone-current');
const $emailconfirmTimezoneUtc = $emailconfirmmodal.find('#emailconfirm-timezone-utc');
$emailconfirmTimezoneCurrent.off('click.sendEmailCurrentTimezone');
@ -4319,7 +4396,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
*/
me.getBurnAfterReading = function()
{
return $burnAfterReading.is(':checked');
return $burnAfterReading.prop('checked');
};
/**
@ -4331,7 +4408,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
*/
me.getOpenDiscussion = function()
{
return $openDiscussion.is(':checked');
return $openDiscussion.prop('checked');
};
/**
@ -4784,7 +4861,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
// show notification
const baseUri = Helper.baseUri() + '?',
url = baseUri + data.id + '#' + CryptTool.base58encode(data.encryptionKey),
url = baseUri + data.id + (TopNav.getBurnAfterReading() ? loadConfirmPrefix : '#') + CryptTool.base58encode(data.encryptionKey),
deleteUrl = baseUri + 'pasteid=' + data.id + '&deletetoken=' + data.deletetoken;
PasteStatus.createPasteNotification(url, deleteUrl);
@ -5203,7 +5280,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
Alert.hideMessages();
Alert.showLoading('Decrypting paste…', 'cloud-download');
if (typeof paste === 'undefined') {
if (typeof paste === 'undefined' || paste.type === 'click') {
// get cipher data and wait until it is available
Model.getPasteData(me.run);
return;
@ -5310,7 +5387,10 @@ jQuery.PrivateBin = (function($, RawDeflate) {
AttachmentViewer.removeAttachmentData();
Alert.hideLoading();
history.pushState({type: 'create'}, document.title, Helper.baseUri());
// only push new state if we are coming from a different one
if (Helper.baseUri() != window.location) {
history.pushState({type: 'create'}, document.title, Helper.baseUri());
}
// clear discussion
DiscussionViewer.prepareNewDiscussion();
@ -5336,6 +5416,12 @@ jQuery.PrivateBin = (function($, RawDeflate) {
}
}
// check if we should request loading confirmation
if(window.location.hash.startsWith(loadConfirmPrefix)) {
Prompt.requestLoadConfirmation();
return;
}
// show proper elements on screen
PasteDecrypter.run();
};

File diff suppressed because one or more lines are too long

2
js/purify-3.0.8.js Normal file

File diff suppressed because one or more lines are too long

View File

@ -96,36 +96,34 @@ describe('Helper', function () {
jsc.property(
'replaces URLs with anchors',
'string',
jsc.elements(['http', 'https', 'ftp']),
jsc.nearray(common.jscA2zString()),
jsc.array(common.jscQueryString()),
common.jscUrl(),
jsc.array(common.jscHashString()),
'string',
function (prefix, schema, address, query, fragment, postfix) {
query = query.join('');
fragment = fragment.join('');
function (prefix, url, fragment, postfix) {
prefix = prefix.replace(/\r|\f/g, '\n').replace(/\u0000/g, '').replace(/\u000b/g, '');
postfix = ' ' + postfix.replace(/\r/g, '\n').replace(/\u0000/g, '');
let url = schema + '://' + address.join('') + '/?' + query + '#' + fragment,
url.fragment = fragment.join('');
let urlString = common.urlToString(url),
clean = jsdom();
$('body').html('<div id="foo"></div>');
let e = $('#foo');
// special cases: When the query string and fragment imply the beginning of an HTML entity, eg. &#0 or &#x
if (
query.slice(-1) === '&' &&
(parseInt(fragment.substring(0, 1), 10) >= 0 || fragment.charAt(0) === 'x' )
)
{
url = schema + '://' + address.join('') + '/?' + query.substring(0, query.length - 1);
url.query[-1] === '&' &&
(parseInt(url.fragment.charAt(0), 10) >= 0 || url.fragment.charAt(0) === 'x')
) {
url.query.pop();
urlString = common.urlToString(url);
postfix = '';
}
e.text(prefix + url + postfix);
e.text(prefix + urlString + postfix);
$.PrivateBin.Helper.urls2links(e);
let result = e.html();
clean();
url = $('<div />').text(url).html();
return $('<div />').text(prefix).html() + '<a href="' + url + '" target="_blank" rel="nofollow noopener noreferrer">' + url + '</a>' + $('<div />').text(postfix).html() === result;
urlString = $('<div />').text(urlString).html();
const expected = $('<div />').text(prefix).html() + '<a href="' + urlString + '" target="_blank" rel="nofollow noopener noreferrer">' + urlString + '</a>' + $('<div />').text(postfix).html();
return $('<div />').text(prefix).html() + '<a href="' + urlString + '" target="_blank" rel="nofollow noopener noreferrer">' + urlString + '</a>' + $('<div />').text(postfix).html() === result;
}
);
jsc.property(
@ -261,16 +259,16 @@ describe('Helper', function () {
this.timeout(30000);
jsc.property(
'returns the URL without query & fragment',
jsc.elements(['http', 'https']),
jsc.nearray(common.jscA2zString()),
jsc.array(common.jscA2zString()),
jsc.array(common.jscQueryString()),
'string',
function (schema, address, path, query, fragment) {
common.jscSchemas(false),
common.jscUrl(),
function (schema, url) {
url.schema = schema;
const fullUrl = common.urlToString(url);
delete(url.query);
delete(url.fragment);
$.PrivateBin.Helper.reset();
var path = path.join('') + (path.length > 0 ? '/' : ''),
expected = schema + '://' + address.join('') + '/' + path,
clean = jsdom('', {url: expected + '?' + query.join('') + '#' + fragment}),
const expected = common.urlToString(url),
clean = jsdom('', {url: fullUrl}),
result = $.PrivateBin.Helper.baseUri();
clean();
return expected === result;

View File

@ -193,10 +193,11 @@ describe('I18n', function () {
// mock
clean = jsdom('', {cookie: ['lang=' + language]});
$.PrivateBin.I18n.reset(language, require('../../i18n/' + language + '.json'));
var result = $.PrivateBin.I18n.translate('en'),
alias = $.PrivateBin.I18n._('en');
var loadedLang = $.PrivateBin.I18n.getLanguage(),
result = $.PrivateBin.I18n.translate('Never'),
alias = $.PrivateBin.I18n._('Never');
clean();
return language === result && language === alias;
return language === loadedLang && result === alias;
}
);
@ -216,13 +217,12 @@ describe('I18n', function () {
$.PrivateBin.I18n.reset('en');
$.PrivateBin.I18n.loadTranslations();
var result = $.PrivateBin.I18n.translate('en'),
alias = $.PrivateBin.I18n._('en');
var result = $.PrivateBin.I18n.translate('Never'),
alias = $.PrivateBin.I18n._('Never');
clean();
return 'en' === result && 'en' === alias;
return 'Never' === result && 'Never' === alias;
}
);
});
});

View File

@ -80,23 +80,22 @@ describe('Model', function () {
jsc.property(
'returns the query string without separator, if any',
jsc.nearray(common.jscA2zString()),
jsc.nearray(common.jscA2zString()),
common.jscUrl(true, false),
jsc.tuple(new Array(16).fill(common.jscHexString)),
jsc.array(common.jscQueryString()),
jsc.array(common.jscQueryString()),
'string',
function (schema, address, pasteId, queryStart, queryEnd, fragment) {
var pasteIdString = pasteId.join(''),
queryStartString = queryStart.join('') + (queryStart.length > 0 ? '&' : ''),
queryEndString = (queryEnd.length > 0 ? '&' : '') + queryEnd.join(''),
queryString = queryStartString + pasteIdString + queryEndString,
clean = jsdom('', {
url: schema.join('') + '://' + address.join('') +
'/?' + queryString + '#' + fragment
});
global.URL = require('jsdom-url').URL;
var result = $.PrivateBin.Model.getPasteId();
function (url, pasteId, queryStart, queryEnd) {
if (queryStart.length > 0) {
queryStart.push('&');
}
if (queryEnd.length > 0) {
queryEnd.unshift('&');
}
url.query = queryStart.concat(pasteId, queryEnd);
const pasteIdString = pasteId.join(''),
clean = jsdom('', {url: common.urlToString(url)});
global.URL = require('jsdom-url').URL;
const result = $.PrivateBin.Model.getPasteId();
$.PrivateBin.Model.reset();
clean();
return pasteIdString === result;
@ -104,14 +103,9 @@ describe('Model', function () {
);
jsc.property(
'throws exception on empty query string',
jsc.nearray(common.jscA2zString()),
jsc.nearray(common.jscA2zString()),
'string',
function (schema, address, fragment) {
var clean = jsdom('', {
url: schema.join('') + '://' + address.join('') +
'/#' + fragment
}),
common.jscUrl(true, false),
function (url) {
let clean = jsdom('', {url: common.urlToString(url)}),
result = false;
global.URL = require('jsdom-url').URL;
try {
@ -135,35 +129,24 @@ describe('Model', function () {
jsc.property(
'returns the fragment of a v1 URL',
jsc.nearray(common.jscA2zString()),
jsc.nearray(common.jscA2zString()),
jsc.array(common.jscQueryString()),
'nestring',
function (schema, address, query, fragment) {
const fragmentString = common.btoa(fragment.padStart(32, '\u0000'));
let clean = jsdom('', {
url: schema.join('') + '://' + address.join('') +
'/?' + query.join('') + '#' + fragmentString
}),
common.jscUrl(),
function (url) {
url.fragment = common.btoa(url.fragment.padStart(32, '\u0000'));
const clean = jsdom('', {url: common.urlToString(url)}),
result = $.PrivateBin.Model.getPasteKey();
$.PrivateBin.Model.reset();
clean();
return fragmentString === result;
return url.fragment === result;
}
);
jsc.property(
'returns the v1 fragment stripped of trailing query parts',
jsc.nearray(common.jscA2zString()),
jsc.nearray(common.jscA2zString()),
jsc.array(common.jscQueryString()),
'nestring',
common.jscUrl(),
jsc.array(common.jscHashString()),
function (schema, address, query, fragment, trail) {
const fragmentString = common.btoa(fragment.padStart(32, '\u0000'));
let clean = jsdom('', {
url: schema.join('') + '://' + address.join('') + '/?' +
query.join('') + '#' + fragmentString + '&' + trail.join('')
}),
function (url, trail) {
const fragmentString = common.btoa(url.fragment.padStart(32, '\u0000'));
url.fragment = fragmentString + '&' + trail.join('');
const clean = jsdom('', {url: common.urlToString(url)}),
result = $.PrivateBin.Model.getPasteKey();
$.PrivateBin.Model.reset();
clean();
@ -172,18 +155,12 @@ describe('Model', function () {
);
jsc.property(
'returns the fragment of a v2 URL',
jsc.nearray(common.jscA2zString()),
jsc.nearray(common.jscA2zString()),
jsc.array(common.jscQueryString()),
'nestring',
function (schema, address, query, fragment) {
common.jscUrl(),
function (url) {
// base58 strips leading NULL bytes, so the string is padded with these if not found
fragment = fragment.padStart(32, '\u0000');
let fragmentString = $.PrivateBin.CryptTool.base58encode(fragment),
clean = jsdom('', {
url: schema.join('') + '://' + address.join('') +
'/?' + query.join('') + '#' + fragmentString
}),
const fragment = url.fragment.padStart(32, '\u0000');
url.fragment = $.PrivateBin.CryptTool.base58encode(fragment);
const clean = jsdom('', {url: common.urlToString(url)}),
result = $.PrivateBin.Model.getPasteKey();
$.PrivateBin.Model.reset();
clean();
@ -192,19 +169,13 @@ describe('Model', function () {
);
jsc.property(
'returns the v2 fragment stripped of trailing query parts',
jsc.nearray(common.jscA2zString()),
jsc.nearray(common.jscA2zString()),
jsc.array(common.jscQueryString()),
'nestring',
common.jscUrl(),
jsc.array(common.jscHashString()),
function (schema, address, query, fragment, trail) {
function (url, trail) {
// base58 strips leading NULL bytes, so the string is padded with these if not found
fragment = fragment.padStart(32, '\u0000');
let fragmentString = $.PrivateBin.CryptTool.base58encode(fragment),
clean = jsdom('', {
url: schema.join('') + '://' + address.join('') + '/?' +
query.join('') + '#' + fragmentString + '&' + trail.join('')
}),
const fragment = url.fragment.padStart(32, '\u0000');
url.fragment = $.PrivateBin.CryptTool.base58encode(fragment) + '&' + trail.join('');
const clean = jsdom('', {url: common.urlToString(url)}),
result = $.PrivateBin.Model.getPasteKey();
$.PrivateBin.Model.reset();
clean();
@ -213,14 +184,9 @@ describe('Model', function () {
);
jsc.property(
'throws exception on empty fragment of the URL',
jsc.nearray(common.jscA2zString()),
jsc.nearray(common.jscA2zString()),
jsc.array(common.jscQueryString()),
function (schema, address, query) {
var clean = jsdom('', {
url: schema.join('') + '://' + address.join('') +
'/?' + query.join('')
}),
common.jscUrl(false),
function (url) {
let clean = jsdom('', {url: common.urlToString(url)}),
result = false;
try {
$.PrivateBin.Model.getPasteKey();

View File

@ -1,32 +1,39 @@
'use strict';
var common = require('../common');
function urlStrings(schema, longUrl, shortUrl) {
longUrl.schema = schema;
shortUrl.schema = schema;
let longUrlString = common.urlToString(longUrl),
shortUrlString = common.urlToString(shortUrl);
// ensure the two random URLs actually are sorted as expected
if (longUrlString.length <= shortUrlString.length) {
if (longUrlString.length === shortUrlString.length) {
longUrl.address.unshift('a');
longUrlString = common.urlToString(longUrl);
} else {
[longUrlString, shortUrlString] = [shortUrlString, longUrlString];
}
}
return [longUrlString, shortUrlString];
}
describe('PasteStatus', function () {
describe('createPasteNotification', function () {
this.timeout(30000);
jsc.property(
'creates a notification after a successfull paste upload',
common.jscSchemas(),
jsc.nearray(common.jscA2zString()),
jsc.array(common.jscQueryString()),
'string',
common.jscSchemas(),
jsc.nearray(common.jscA2zString()),
jsc.array(common.jscQueryString()),
function (
schema1, address1, query1, fragment1,
schema2, address2, query2
) {
var expected1 = schema1 + '://' + address1.join('') + '/?' +
encodeURI(query1.join('').replace(/^&+|&+$/gm,'') + '#' + fragment1),
expected2 = schema2 + '://' + address2.join('') + '/?' +
encodeURI(query2.join('').replace(/^&+|&+$/gm,'')),
common.jscUrl(),
common.jscUrl(false),
function (url1, url2) {
const expected1 = common.urlToString(url1).replace(/&(gt|lt)$/, '&$1a'),
expected2 = common.urlToString(url2).replace(/&(gt|lt)$/, '&$1a'),
clean = jsdom();
$('body').html('<div><div id="deletelink"></div><div id="pastelink"></div></div>');
$.PrivateBin.PasteStatus.init();
$.PrivateBin.PasteStatus.createPasteNotification(expected1, expected2);
var result1 = $('#pasteurl')[0].href,
const result1 = $('#pasteurl')[0].href,
result2 = $('#deletelink a')[0].href;
clean();
return result1 === expected1 && result2 === expected2;
@ -34,6 +41,138 @@ describe('PasteStatus', function () {
);
});
describe('extractUrl', function () {
this.timeout(30000);
jsc.property(
'extracts and updates IDN URLs found in given response',
common.jscSchemas(false),
'nestring',
common.jscUrl(),
function (schema, domain, url) {
domain = domain.replace(/\P{Letter}|[\u00AA-\u00BA]/gu, '').toLowerCase();
if (domain.length === 0) {
domain = 'a';
}
url.schema = schema;
url.address.unshift('.');
url.address = domain.split('').concat(url.address);
const urlString = common.urlToString(url),
expected = urlString.substring((schema + '://' + domain).length),
clean = jsdom();
$('body').html('<div><div id="pastelink"></div></div>');
$.PrivateBin.PasteStatus.init();
$.PrivateBin.PasteStatus.createPasteNotification('', '');
$.PrivateBin.PasteStatus.extractUrl(urlString);
const result = $('#pasteurl')[0].href;
clean();
return result.endsWith(expected) && (
result.startsWith(schema + '://xn--') ||
result.startsWith(schema + '://' + domain)
);
}
);
// YOURLS API samples from: https://yourls.org/readme.html#API;apireturn
jsc.property(
'extracts and updates URLs found in YOURLS API JSON response',
common.jscSchemas(false),
common.jscUrl(),
common.jscUrl(false),
function (schema, longUrl, shortUrl) {
const [longUrlString, shortUrlString] = urlStrings(schema, longUrl, shortUrl),
yourlsResponse = {
url: {
keyword: longUrl.address.join(''),
url: longUrlString,
title: "example title",
date: "2014-10-24 16:01:39",
ip: "127.0.0.1"
},
status: "success",
message: longUrlString + " added to database",
title: "example title",
shorturl: shortUrlString,
statusCode: 200
},
clean = jsdom();
$('body').html('<div><div id="pastelink"></div></div>');
$.PrivateBin.PasteStatus.init();
$.PrivateBin.PasteStatus.createPasteNotification('', '');
$.PrivateBin.PasteStatus.extractUrl(JSON.stringify(yourlsResponse, undefined, 4));
const result = $('#pasteurl')[0].href;
clean();
return result === shortUrlString;
}
);
jsc.property(
'extracts and updates URLs found in YOURLS API XML response',
common.jscSchemas(false),
common.jscUrl(),
common.jscUrl(false),
function (schema, longUrl, shortUrl) {
const [longUrlString, shortUrlString] = urlStrings(schema, longUrl, shortUrl),
yourlsResponse = '<result>\n' +
' <keyword>' + longUrl.address.join('') + '</keyword>\n' +
' <shorturl>' + shortUrlString + '</shorturl>\n' +
' <longurl>' + longUrlString + '</longurl>\n' +
' <message>success</message>\n' +
' <statusCode>200</statusCode>\n' +
'</result>',
clean = jsdom();
$('body').html('<div><div id="pastelink"></div></div>');
$.PrivateBin.PasteStatus.init();
$.PrivateBin.PasteStatus.createPasteNotification('', '');
$.PrivateBin.PasteStatus.extractUrl(yourlsResponse);
const result = $('#pasteurl')[0].href;
clean();
return result === shortUrlString;
}
);
jsc.property(
'extracts and updates URLs found in YOURLS proxy HTML response',
common.jscSchemas(false),
common.jscUrl(),
common.jscUrl(false),
function (schema, longUrl, shortUrl) {
const [longUrlString, shortUrlString] = urlStrings(schema, longUrl, shortUrl),
yourlsResponse = '<!DOCTYPE html>\n' +
'<html lang="en">\n' +
'\t<head>\n' +
'\t\t<meta charset="utf-8" />\n' +
'\t\t<meta http-equiv="Content-Security-Policy" content="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">\n' +
'\t\t<meta name="robots" content="noindex" />\n' +
'\t\t<meta name="google" content="notranslate">\n' +
'\t\t<title>PrivateBin</title>\n' +
'\t</head>\n' +
'\t<body>\n' +
'\t\t<p>Your paste is <a id="pasteurl" href="' + shortUrlString + '">' + shortUrlString + '</a> <span id="copyhint">(Hit [Ctrl]+[c] to copy)</span></p>\n' +
'\t</body>\n' +
'</html>',
clean = jsdom();
$('body').html('<div><div id="pastelink"></div></div>');
$.PrivateBin.PasteStatus.init();
$.PrivateBin.PasteStatus.createPasteNotification('', '');
$.PrivateBin.PasteStatus.extractUrl(yourlsResponse);
const result = $('#pasteurl')[0].href;
clean();
return result === shortUrlString;
}
);
});
describe('showRemainingTime', function () {
this.timeout(30000);
@ -41,18 +180,9 @@ describe('PasteStatus', function () {
'shows burn after reading message or remaining time v1',
'bool',
'nat',
jsc.nearray(common.jscA2zString()),
jsc.nearray(common.jscA2zString()),
jsc.nearray(common.jscQueryString()),
'string',
function (
burnafterreading, remainingTime,
schema, address, query, fragment
) {
var clean = jsdom('', {
url: schema.join('') + '://' + address.join('') +
'/?' + query.join('') + '#' + fragment
}),
common.jscUrl(),
function (burnafterreading, remainingTime, url) {
let clean = jsdom('', {url: common.urlToString(url)}),
result;
$('body').html('<div id="remainingtime" class="hidden"></div>');
$.PrivateBin.PasteStatus.init();
@ -79,18 +209,9 @@ describe('PasteStatus', function () {
'shows burn after reading message or remaining time v2',
'bool',
'nat',
jsc.nearray(common.jscA2zString()),
jsc.nearray(common.jscA2zString()),
jsc.nearray(common.jscQueryString()),
'string',
function (
burnafterreading, remainingTime,
schema, address, query, fragment
) {
var clean = jsdom('', {
url: schema.join('') + '://' + address.join('') +
'/?' + query.join('') + '#' + fragment
}),
common.jscUrl(),
function (burnafterreading, remainingTime, url) {
let clean = jsdom('', {url: common.urlToString(url)}),
result;
$('body').html('<div id="remainingtime" class="hidden"></div>');
$.PrivateBin.PasteStatus.init();

View File

@ -77,7 +77,7 @@ describe('TopNav', function () {
'<li id="attach" class="hidden">Attach a file</li><li>' +
'<a id="formatter" href="#" class="hidden">Format</a>' +
'</li><li><button id="sendbutton" type="button" ' +
'class="hidden">Send</button></li></ul></div></nav>'
'class="hidden">Create</button></li></ul></div></nav>'
);
$.PrivateBin.TopNav.init();
results.push(

View File

@ -13,10 +13,9 @@ describe('UiHelper', function () {
jsc.property(
'redirects to home, when the state is null',
common.jscSchemas(),
jsc.nearray(common.jscA2zString()),
function (schema, address) {
var expected = schema + '://' + address.join('') + '/',
common.jscUrl(false, false),
function (url) {
const expected = common.urlToString(url),
clean = jsdom('', {url: expected});
// make window.location.href writable
@ -34,13 +33,11 @@ describe('UiHelper', function () {
jsc.property(
'does not redirect to home, when a new paste is created',
common.jscSchemas(),
jsc.nearray(common.jscA2zString()),
jsc.array(common.jscQueryString()),
common.jscUrl(false),
jsc.nearray(common.jscBase64String()),
function (schema, address, query, fragment) {
var expected = schema + '://' + address.join('') + '/?' +
query.join('') + '#' + fragment.join(''),
function (url, fragment) {
url.fragment = fragment.join('');
const expected = common.urlToString(url),
clean = jsdom('', {url: expected});
// make window.location.href writable
@ -67,15 +64,12 @@ describe('UiHelper', function () {
jsc.property(
'redirects to home',
common.jscSchemas(),
jsc.nearray(common.jscA2zString()),
jsc.array(common.jscQueryString()),
jsc.nearray(common.jscBase64String()),
function (schema, address, query, fragment) {
var expected = schema + '://' + address.join('') + '/',
clean = jsdom('', {
url: expected + '?' + query.join('') + '#' + fragment.join('')
});
common.jscUrl(),
function (url) {
const clean = jsdom('', {url: common.urlToString(url)});
delete(url.query);
delete(url.fragment);
const expected = common.urlToString(url);
// make window.location.href writable
Object.defineProperty(window.location, 'href', {

View File

@ -25,10 +25,10 @@
};
let buff;
if (typeof fetch === 'undefined') {
buff = fs.readFileSync('zlib-1.2.13.wasm');
if (typeof fs === 'object') {
buff = fs.readFileSync('zlib-1.3.1.wasm');
} else {
const resp = await fetch('js/zlib-1.2.13.wasm');
const resp = await fetch('js/zlib-1.3.1.wasm');
buff = await resp.arrayBuffer();
}
const module = await WebAssembly.compile(buff);

View File

@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.5.0
* @version 1.7.1
*/
namespace PrivateBin;
@ -53,6 +53,7 @@ class Configuration
'languagedefault' => '',
'urlshortener' => '',
'qrcode' => true,
'email' => true,
'icon' => 'identicon',
'cspheader' => 'default-src \'none\'; base-uri \'self\'; form-action \'none\'; manifest-src \'self\'; connect-src * blob:; script-src \'self\' \'unsafe-eval\'; style-src \'self\'; font-src \'self\'; frame-ancestors \'none\'; img-src \'self\' data: blob:; media-src blob:; object-src blob:; sandbox allow-same-origin allow-scripts allow-forms allow-popups allow-modals allow-downloads',
'zerobincompatibility' => false,

View File

@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.5.0
* @version 1.7.1
*/
namespace PrivateBin;
@ -28,14 +28,14 @@ class Controller
*
* @const string
*/
const VERSION = '1.5.0';
const VERSION = '1.7.1';
/**
* minimal required PHP version
*
* @const string
*/
const MIN_PHP_VERSION = '5.6.0';
const MIN_PHP_VERSION = '7.3.0';
/**
* show the same error message if the paste expired or does not exist
@ -111,10 +111,12 @@ class Controller
public function __construct()
{
if (version_compare(PHP_VERSION, self::MIN_PHP_VERSION) < 0) {
throw new Exception(I18n::_('%s requires php %s or above to work. Sorry.', I18n::_('PrivateBin'), self::MIN_PHP_VERSION), 1);
error_log(I18n::_('%s requires php %s or above to work. Sorry.', I18n::_('PrivateBin'), self::MIN_PHP_VERSION));
return;
}
if (strlen(PATH) < 0 && substr(PATH, -1) !== DIRECTORY_SEPARATOR) {
throw new Exception(I18n::_('%s requires the PATH to end in a "%s". Please update the PATH in your index.php.', I18n::_('PrivateBin'), DIRECTORY_SEPARATOR), 5);
error_log(I18n::_('%s requires the PATH to end in a "%s". Please update the PATH in your index.php.', I18n::_('PrivateBin'), DIRECTORY_SEPARATOR));
return;
}
// load config from ini file, initialize required classes
@ -141,6 +143,8 @@ class Controller
break;
}
$this->_setCacheHeaders();
// output JSON or HTML
if ($this->_request->isJsonApiCall()) {
header('Content-type: ' . Request::MIME_JSON);
@ -176,6 +180,22 @@ class Controller
}
}
/**
* Turn off browser caching
*
* @access private
*/
private function _setCacheHeaders()
{
// set headers to disable caching
$time = gmdate('D, d M Y H:i:s \G\M\T');
header('Cache-Control: no-store, no-cache, no-transform, must-revalidate');
header('Pragma: no-cache');
header('Expires: ' . $time);
header('Last-Modified: ' . $time);
header('Vary: Accept');
}
/**
* Store new paste or comment
*
@ -250,7 +270,14 @@ class Controller
}
// The user posts a standard paste.
else {
$this->_model->purge();
try {
$this->_model->purge();
} catch (Exception $e) {
error_log('Error purging pastes: ' . $e->getMessage() . PHP_EOL .
'Use the administration scripts statistics to find ' .
'damaged paste IDs and either delete them or restore them ' .
'from backup.');
}
$paste = $this->_model->getPaste();
try {
$paste->setData($data);
@ -334,13 +361,6 @@ class Controller
*/
private function _view()
{
// set headers to disable caching
$time = gmdate('D, d M Y H:i:s \G\M\T');
header('Cache-Control: no-store, no-cache, no-transform, must-revalidate');
header('Pragma: no-cache');
header('Expires: ' . $time);
header('Last-Modified: ' . $time);
header('Vary: Accept');
header('Content-Security-Policy: ' . $this->_conf->getKey('cspheader'));
header('Cross-Origin-Resource-Policy: same-origin');
header('Cross-Origin-Embedder-Policy: require-corp');
@ -411,6 +431,7 @@ class Controller
$page->assign('EXPIREDEFAULT', $this->_conf->getKey('default', 'expire'));
$page->assign('URLSHORTENER', $this->_conf->getKey('urlshortener'));
$page->assign('QRCODE', $this->_conf->getKey('qrcode'));
$page->assign('EMAIL', $this->_conf->getKey('email'));
$page->assign('HTTPWARNING', $this->_conf->getKey('httpwarning'));
$page->assign('HTTPSLINK', 'https://' . $this->_request->getHost() . $this->_request->getRequestUri());
$page->assign('COMPRESSION', $this->_conf->getKey('compression'));
@ -425,10 +446,13 @@ class Controller
*/
private function _jsonld($type)
{
if (
$type !== 'paste' && $type !== 'comment' &&
$type !== 'pastemeta' && $type !== 'commentmeta'
) {
if (!in_array($type, array(
'comment',
'commentmeta',
'paste',
'pastemeta',
'types',
))) {
$type = '';
}
$content = '{}';
@ -440,6 +464,13 @@ class Controller
file_get_contents($file)
);
}
if ($type === 'types') {
$content = str_replace(
implode('", "', array_keys($this->_conf->getDefaults()['expire_options'])),
implode('", "', array_keys($this->_conf->getSection('expire_options'))),
$content
);
}
header('Content-type: application/ld+json');
header('Access-Control-Allow-Origin: *');

View File

@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.5.0
* @version 1.7.1
*/
namespace PrivateBin\Data;

View File

@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.5.0
* @version 1.7.1
*/
namespace PrivateBin\Data;
@ -55,7 +55,6 @@ class Database extends AbstractData
* @access public
* @param array $options
* @throws Exception
* @return
*/
public function __construct(array $options)
{

View File

@ -7,12 +7,13 @@
* @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.5.0
* @version 1.7.1
*/
namespace PrivateBin\Data;
use Exception;
use GlobIterator;
use PrivateBin\Json;
/**
@ -65,7 +66,6 @@ class Filesystem extends AbstractData
*
* @access public
* @param array $options
* @return
*/
public function __construct(array $options)
{
@ -228,7 +228,12 @@ class Filesystem extends AbstractData
$comment['parentid'] = $items[2];
// Store in array
$key = $this->getOpenSlot($comments, (int) $comment['meta']['created']);
$key = $this->getOpenSlot(
$comments,
(int) array_key_exists('created', $comment['meta']) ?
$comment['meta']['created'] : // v2 comments
$comment['meta']['postdate'] // v1 comments
);
$comments[$key] = $comment;
}
}
@ -358,12 +363,12 @@ class Filesystem extends AbstractData
{
$pastes = array();
$count = 0;
$opened = 0;
$limit = $batchsize * 10; // try at most 10 times $batchsize pastes before giving up
$time = time();
foreach ($this->_getPasteIterator() as $file) {
if ($file->isDir()) {
continue;
}
$pasteid = $file->getBasename('.php');
$files = $this->getAllPastes();
shuffle($files);
foreach ($files as $pasteid) {
if ($this->exists($pasteid)) {
$data = $this->read($pasteid);
if (
@ -371,11 +376,13 @@ class Filesystem extends AbstractData
$data['meta']['expire_date'] < $time
) {
$pastes[] = $pasteid;
++$count;
if ($count >= $batchsize) {
if (++$count >= $batchsize) {
break;
}
}
if (++$opened >= $limit) {
break;
}
}
}
return $pastes;
@ -387,7 +394,7 @@ class Filesystem extends AbstractData
public function getAllPastes()
{
$pastes = array();
foreach ($this->_getPasteIterator() as $file) {
foreach (new GlobIterator($this->_path . self::PASTE_FILE_PATTERN) as $file) {
if ($file->isFile()) {
$pastes[] = $file->getBasename('.php');
}
@ -431,20 +438,6 @@ class Filesystem extends AbstractData
'.discussion' . DIRECTORY_SEPARATOR;
}
/**
* Get an iterator matching paste files.
*
* Note that creating the iterator issues the glob() call, so we can't pre-
* generate this object before files that should get matched exist.
*
* @access private
* @return \GlobIterator
*/
private function _getPasteIterator()
{
return new \GlobIterator($this->_path . self::PASTE_FILE_PATTERN);
}
/**
* store the data
*

View File

@ -47,7 +47,6 @@ class GoogleCloudStorage extends AbstractData
*
* @access public
* @param array $options
* @return
*/
public function __construct(array $options)
{

View File

@ -4,7 +4,7 @@
*
* an S3 compatible data backend for PrivateBin with CEPH/RadosGW in mind
* see https://docs.ceph.com/en/latest/radosgw/s3/php/
* based on lib/Data/GoogleCloudStorage.php from PrivateBin version 1.5.0
* based on lib/Data/GoogleCloudStorage.php from PrivateBin version 1.7.1
*
* @link https://github.com/PrivateBin/PrivateBin
* @copyright 2022 Felix J. Ogris (https://ogris.de/)
@ -78,35 +78,36 @@ class S3Storage extends AbstractData
*
* @access public
* @param array $options
* @return
*/
public function __construct(array $options)
{
$this->_options['credentials'] = array();
if (is_array($options)) {
// AWS SDK will try to load credentials from environment if credentials are not passed via configuration
// ref: https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html#default-credential-chain
if (isset($options['accesskey']) && isset($options['secretkey'])) {
$this->_options['credentials'] = array();
if (is_array($options) && array_key_exists('region', $options)) {
$this->_options['region'] = $options['region'];
}
if (is_array($options) && array_key_exists('version', $options)) {
$this->_options['version'] = $options['version'];
}
if (is_array($options) && array_key_exists('endpoint', $options)) {
$this->_options['endpoint'] = $options['endpoint'];
}
if (is_array($options) && array_key_exists('accesskey', $options)) {
$this->_options['credentials']['key'] = $options['accesskey'];
}
if (is_array($options) && array_key_exists('secretkey', $options)) {
$this->_options['credentials']['secret'] = $options['secretkey'];
}
if (is_array($options) && array_key_exists('use_path_style_endpoint', $options)) {
$this->_options['use_path_style_endpoint'] = filter_var($options['use_path_style_endpoint'], FILTER_VALIDATE_BOOLEAN);
}
if (is_array($options) && array_key_exists('bucket', $options)) {
$this->_bucket = $options['bucket'];
}
if (is_array($options) && array_key_exists('prefix', $options)) {
$this->_prefix = $options['prefix'];
$this->_options['credentials']['key'] = $options['accesskey'];
$this->_options['credentials']['secret'] = $options['secretkey'];
}
if (array_key_exists('region', $options)) {
$this->_options['region'] = $options['region'];
}
if (array_key_exists('version', $options)) {
$this->_options['version'] = $options['version'];
}
if (array_key_exists('endpoint', $options)) {
$this->_options['endpoint'] = $options['endpoint'];
}
if (array_key_exists('use_path_style_endpoint', $options)) {
$this->_options['use_path_style_endpoint'] = filter_var($options['use_path_style_endpoint'], FILTER_VALIDATE_BOOLEAN);
}
if (array_key_exists('bucket', $options)) {
$this->_bucket = $options['bucket'];
}
if (array_key_exists('prefix', $options)) {
$this->_prefix = $options['prefix'];
}
}
$this->_client = new S3Client($this->_options);

View File

@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.5.0
* @version 1.7.1
*/
namespace PrivateBin;
@ -66,6 +66,6 @@ class Filter
$size = $size / 1024;
++$i;
}
return number_format($size, ($i ? 2 : 0), '.', ' ') . ' ' . I18n::_($iec[$i]);
return number_format($size, $i ? 2 : 0, '.', ' ') . ' ' . I18n::_($iec[$i]);
}
}

View File

@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.5.0
* @version 1.7.1
*/
namespace PrivateBin;

View File

@ -7,11 +7,14 @@
* @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.5.0
* @version 1.7.1
*/
namespace PrivateBin;
use AppendIterator;
use GlobIterator;
/**
* I18n
*
@ -78,11 +81,11 @@ class I18n
*
* @access public
* @static
* @param string $messageId
* @param string|array $messageId
* @param mixed $args one or multiple parameters injected into placeholders
* @return string
*/
public static function _($messageId)
public static function _($messageId, ...$args)
{
return forward_static_call_array('PrivateBin\I18n::translate', func_get_args());
}
@ -92,16 +95,16 @@ class I18n
*
* @access public
* @static
* @param string $messageId
* @param string|array $messageId
* @param mixed $args one or multiple parameters injected into placeholders
* @return string
*/
public static function translate($messageId)
public static function translate($messageId, ...$args)
{
if (empty($messageId)) {
return $messageId;
}
if (count(self::$_translations) === 0) {
if (empty(self::$_translations)) {
self::loadTranslations();
}
$messages = $messageId;
@ -111,7 +114,7 @@ class I18n
if (!array_key_exists($messageId, self::$_translations)) {
self::$_translations[$messageId] = $messages;
}
$args = func_get_args();
array_unshift($args, $messageId);
if (is_array(self::$_translations[$messageId])) {
$number = (int) $args[1];
$key = self::_getPluralForm($number);
@ -127,11 +130,9 @@ class I18n
}
// encode any non-integer arguments and the message ID, if it doesn't contain a link
$argsCount = count($args);
if ($argsCount > 1) {
for ($i = 0; $i < $argsCount; ++$i) {
if (($i > 0 && !is_int($args[$i])) || strpos($args[0], '<a') === false) {
$args[$i] = self::encode($args[$i]);
}
for ($i = 0; $i < $argsCount; ++$i) {
if ($i > 0 ? !is_int($args[$i]) : strpos($args[0], '<a') === false) {
$args[$i] = self::encode($args[$i]);
}
}
return call_user_func_array('sprintf', $args);
@ -193,10 +194,14 @@ class I18n
public static function getAvailableLanguages()
{
if (count(self::$_availableLanguages) == 0) {
$i18n = dir(self::_getPath());
while (false !== ($file = $i18n->read())) {
if (preg_match('/^([a-z]{2,3}).json$/', $file, $match) === 1) {
self::$_availableLanguages[] = $match[1];
self::$_availableLanguages[] = 'en'; // en.json is not part of the release archive
$languageIterator = new AppendIterator();
$languageIterator->append(new GlobIterator(self::_getPath('??.json')));
$languageIterator->append(new GlobIterator(self::_getPath('???.json'))); // for jbo
foreach ($languageIterator as $file) {
$language = $file->getBasename('.json');
if ($language != 'en') {
self::$_availableLanguages[] = $language;
}
}
}
@ -272,6 +277,18 @@ class I18n
return array_intersect_key(self::$_languageLabels, array_flip($languages));
}
/**
* determines if the current language is written right-to-left (RTL)
*
* @access public
* @static
* @return bool
*/
public static function isRtl()
{
return in_array(self::$_language, array('ar', 'he'));
}
/**
* set the default language
*
@ -296,10 +313,10 @@ class I18n
*/
protected static function _getPath($file = '')
{
if (strlen(self::$_path) == 0) {
if (empty(self::$_path)) {
self::$_path = PUBLIC_PATH . DIRECTORY_SEPARATOR . 'i18n';
}
return self::$_path . (strlen($file) ? DIRECTORY_SEPARATOR . $file : '');
return self::$_path . (empty($file) ? '' : DIRECTORY_SEPARATOR . $file);
}
/**
@ -315,6 +332,8 @@ class I18n
protected static function _getPluralForm($n)
{
switch (self::$_language) {
case 'ar':
return $n === 0 ? 0 : ($n === 1 ? 1 : ($n === 2 ? 2 : ($n % 100 >= 3 && $n % 100 <= 10 ? 3 : ($n % 100 >= 11 ? 4 : 5))));
case 'cs':
case 'sk':
return $n === 1 ? 0 : ($n >= 2 && $n <= 4 ? 1 : 2);
@ -327,6 +346,7 @@ class I18n
case 'he':
return $n === 1 ? 0 : ($n === 2 ? 1 : (($n < 0 || $n > 10) && ($n % 10 === 0) ? 2 : 3));
case 'id':
case 'ja':
case 'jbo':
case 'th':
return 0;
@ -334,13 +354,15 @@ class I18n
return $n % 10 === 1 && $n % 100 !== 11 ? 0 : (($n % 10 >= 2 && $n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);
case 'pl':
return $n === 1 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);
case 'ro':
return $n === 1 ? 0 : (($n === 0 || ($n % 100 > 0 && $n % 100 < 20)) ? 1 : 2);
case 'ru':
case 'uk':
return $n % 10 === 1 && $n % 100 != 11 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);
case 'sl':
return $n % 100 === 1 ? 1 : ($n % 100 === 2 ? 2 : ($n % 100 === 3 || $n % 100 === 4 ? 3 : 0));
// bg, ca, de, el, en, es, et, fi, hu, it, nl, no, pt
default:
// bg, ca, de, el, en, es, et, fi, hu, it, nl, no, pt
return $n !== 1 ? 1 : 0;
}
}

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