586 Commits

Author SHA1 Message Date
El RIDO
55176309a7 remove unsafe-eval from CSP 2021-06-20 08:44:25 +02:00
El RIDO
a4a32f6b9e switch to streaming WASM loading, fixes #814 2021-06-20 08:43:44 +02:00
El RIDO
5f2daa5cd6 Merge branch 'persistence-into-data' 2021-06-20 08:17:41 +02:00
El RIDO
1fd998f325 address Scrutinizer issues 2021-06-16 05:57:26 +02:00
El RIDO
9c09018e6e address Scrutinizer issues 2021-06-16 05:50:41 +02:00
El RIDO
be164bb6a9 apply StyleCI recommendation 2021-06-16 05:43:18 +02:00
El RIDO
fd08d991fe log errors storing persistance 2021-06-16 05:32:45 +02:00
El RIDO
3d9ba10fcb more consistent AbstractData implementation 2021-06-16 05:19:45 +02:00
El RIDO
ae1e4e3edb clarify use of getDeleteToken() method in unit test 2021-06-16 04:39:24 +02:00
El RIDO
af54e70359 apply StyleCI recommendation 2021-06-14 06:48:46 +02:00
El RIDO
3327645fd4 updated doc blocks, comments, fixed indentations, moved some constant strings 2021-06-14 06:44:30 +02:00
El RIDO
b72994f2e0 Merge pull request #813 from binxio/persistence-into-data
removed json encoding from get/setValue
2021-06-14 05:58:40 +02:00
Mark van Holsteijn
b4c75b541b removed json encoding from get/setValue 2021-06-13 21:16:30 +02:00
El RIDO
9357f122b7 address Scrutinizer issues 2021-06-13 12:49:59 +02:00
El RIDO
d0248d55d3 address Scrutinizer issues 2021-06-13 12:43:18 +02:00
El RIDO
078c5785dd fix unit tests on php < 7.3 2021-06-13 12:40:06 +02:00
El RIDO
68b097087d apply StyleCI recommendation 2021-06-13 11:16:29 +02:00
El RIDO
fa4fe2852d address Scrutinizer issues 2021-06-13 11:12:19 +02:00
El RIDO
bbcf57de0e address Scrutinizer issues 2021-06-13 11:08:38 +02:00
El RIDO
f04043a399 address Scrutinizer issues 2021-06-13 11:02:53 +02:00
El RIDO
1f2dddd9d8 address Codacy issues 2021-06-13 10:53:01 +02:00
El RIDO
93135e0abf improving code coverage 2021-06-13 10:44:26 +02:00
El RIDO
e294145a2b ip-lib doesn't except on the matches interfaces 2021-06-13 08:26:05 +02:00
El RIDO
cc6fb1c0c3 Merge pull request #812 from binxio/persistence-into-data
improved implementation
2021-06-11 05:06:30 +02:00
Mark van Holsteijn
1b88eef356 improved implementation of GoogleStorageBucket 2021-06-10 21:39:15 +02:00
El RIDO
5af069b4f0 Merge pull request #810 from binxio/persistence-into-data
added purgeValues function
2021-06-10 08:22:10 +02:00
Mark van Holsteijn
1232717334 added purgeValues to GCS 2021-06-09 22:27:34 +02:00
El RIDO
7b2f0ff302 apply StyleCI recommendation 2021-06-09 19:16:22 +02:00
El RIDO
a203e6322b implementing key/value store of Persistance in Database storage 2021-06-09 07:47:40 +02:00
El RIDO
7901ec74a7 folding Persistance\ServerSalt into Data\Filesystem 2021-06-08 22:01:29 +02:00
El RIDO
b5a6ce323e folding Persistance\TrafficLimiter into Data\Filesystem 2021-06-08 07:49:22 +02:00
El RIDO
3429d293d3 remove configurable dir for traffic & purge limiters 2021-06-08 06:37:27 +02:00
El RIDO
ae486d651b folding Persistance\PurgeLimiter into Data\Filesystem 2021-06-07 21:53:42 +02:00
El RIDO
f46221e7c3 Merge pull request #809 from binxio/persistence-into-data
simplest implementation of kv support on gcs
2021-06-07 12:36:01 +02:00
Mark van Holsteijn
55efc858b5 simplest implementation of kv support on gcs 2021-06-07 09:11:24 +02:00
El RIDO
7bdcc2ae15 conclude scaffolding of AbstractData key/value storage, missing implementation 2021-06-07 07:02:47 +02:00
El RIDO
1a7d0799c0 scaffolding interface for AbstractData key/value storage, folding Persistance\DataStore into Data\Filesystem 2021-06-07 06:53:15 +02:00
El RIDO
de8f40ac1a kudos @StyleCI 2021-06-06 19:35:31 +02:00
El RIDO
c758eca0a4 removed automatic .ini configuration file migration, closes #808 2021-06-06 17:53:08 +02:00
El RIDO
9beb176874 these don't belong in a release 2021-06-06 17:52:10 +02:00
El RIDO
9b19a88bb9 Merge branch 'crowdin-translation' 2021-06-05 10:58:01 +02:00
El RIDO
d699c41e26 Merge branch 'master' into crowdin-translation 2021-06-05 10:57:47 +02:00
El RIDO
2bc54caa07 fix never matched condition, kudos @ShiftLeftSecurity, found via #807 2021-06-05 10:33:01 +02:00
El RIDO
a2ffbafa13 ensure npm's package.json version gets incremented 2021-06-05 09:43:01 +02:00
El RIDO
197c4a34e8 fix snyk 2021-06-05 08:25:19 +02:00
El RIDO
7a3a306ddc fix snyk 2021-06-05 08:22:50 +02:00
El RIDO
cbdcaf4c30 fix snyk 2021-06-05 08:14:04 +02:00
El RIDO
f635881bd4 Merge branch 'snyk' 2021-06-05 08:10:29 +02:00
El RIDO
371dca1986 ensure the GCS library and dependencies get included in the scan 2021-06-05 08:10:12 +02:00
El RIDO
7311e9ce12 Merge branch 'master' into snyk 2021-06-05 08:06:48 +02:00
El RIDO
abb2b90e9b make StyleCI happy 2021-06-05 05:52:13 +02:00
El RIDO
edb8e5e078 handle edge cases with file locking: file needs to exist before it can be locked, fixes #803 2021-06-05 05:48:17 +02:00
El RIDO
ffe48092fe suppress error_log output of GoogleCloudStorage class in unit testing 2021-06-05 05:38:05 +02:00
rugk
8bc97517fb Add Snyk security scan for PHP
After I found https://github.com/PrivateBin/docker-nginx-fpm-alpine/pull/44 I saw they also support PHP, so let's do it here (one level before container packaging), too.
Also it complements the CodeQL analysis, which only covers the JS part.

I added the API token to the PrivateBIn org now.
2021-06-04 23:43:01 +02:00
PrivateBin Translator Bot
3df6b62d22 New translations en.json (Catalan) 2021-06-03 03:00:55 +02:00
El RIDO
93138cbbae we already test this via the regular unit tests 2021-05-30 09:26:13 +02:00
El RIDO
fc5e380ccc fix composer test on PHP 8 2021-05-30 09:18:56 +02:00
El RIDO
33587d54e4 fix composer test on PHP 8 2021-05-30 09:17:23 +02:00
El RIDO
d355bb87e3 documenting changes 2021-05-30 08:11:45 +02:00
El RIDO
52b9b257c3 Merge branch 'binxio-issue-794/add-gcs-support' 2021-05-30 08:04:42 +02:00
El RIDO
b939b64778 Merge branch 'issue-794/add-gcs-support' of https://github.com/binxio/PrivateBin into binxio-issue-794/add-gcs-support 2021-05-30 07:57:58 +02:00
PrivateBin Translator Bot
de4bada695 New translations en.json (Catalan) 2021-05-29 04:56:21 +02:00
PrivateBin Translator Bot
5c5ae967a8 New translations en.json (Catalan) 2021-05-29 03:56:04 +02:00
Mark van Holsteijn
342270d6dd added Google Cloud Storage support 2021-05-28 22:39:50 +02:00
El RIDO
dae093bbfa import latest scrutinizer configuration from web backend 2021-05-24 11:40:34 +02:00
El RIDO
7de12d64d5 be more precise 2021-05-22 11:35:53 +02:00
El RIDO
b6460616ba address Scrutinizer issues 2021-05-22 11:30:17 +02:00
El RIDO
7a1de52e05 Merge branch 'rodehoed-api-ip-exempt' 2021-05-22 11:03:40 +02:00
El RIDO
91c8f9f23c use namespaces 2021-05-22 11:02:54 +02:00
El RIDO
84771d7167 documenting changes 2021-05-22 11:01:16 +02:00
El RIDO
3dd01b1f70 testing IP exemption, handle corner cases found in testing 2021-05-22 10:59:47 +02:00
El RIDO
89f6f0051d imported mlocati/ip-lib version 1.14.0 2021-05-22 09:21:01 +02:00
El RIDO
194b27e685 Merge branch 'api-ip-exempt' of https://github.com/rodehoed/PrivateBin into rodehoed-api-ip-exempt 2021-05-22 08:39:53 +02:00
El RIDO
e32e3979a8 Merge branch 'crowdin-translation' 2021-05-22 08:39:01 +02:00
rodehoed
af5a14afc3 Optimized the canPass() functions 2021-05-19 09:01:45 +02:00
rodehoed
5812a6bb68 Optimized the canPass() functions 2021-05-19 08:47:35 +02:00
PrivateBin Translator Bot
f339c0b1c0 New translations en.json (Indonesian) 2021-05-09 14:11:14 +02:00
Rodehoed
502bb5fa15 Put the ip-matching function in a private function 2021-05-06 12:18:44 +02:00
Rodehoed
89bdc92451 Put the ip-matching function in a private function 2021-05-06 12:13:03 +02:00
LinQhost Managed hosting
63d6816c7c Merge branch 'api-ip-exempt' of https://github.com/rodehoed/PrivateBin into api-ip-exempt 2021-05-05 08:43:32 +02:00
PrivateBin Translator Bot
e572e9c79c New translations en.json (Turkish) 2021-05-04 20:48:34 +02:00
PrivateBin Translator Bot
2b0ebdb6c7 New translations en.json (Turkish) 2021-05-04 19:43:08 +02:00
El RIDO
3a06d5a745 Merge branch 'crowdin-translation' 2021-05-04 18:20:21 +02:00
PrivateBin Translator Bot
12aa325494 New translations en.json (Russian) 2021-05-04 13:39:44 +02:00
rodehoed
a806a6455e QA 2021-05-04 11:20:24 +02:00
rodehoed
4296b43832 QA 2021-05-04 11:19:34 +02:00
rodehoed
c3ad4a4b4d QA 2021-05-04 11:18:06 +02:00
rodehoed
805eb288d9 QA 2021-05-04 11:14:11 +02:00
rodehoed
b21efd8336 Code quality 2021-05-04 11:01:46 +02:00
LinQhost Managed hosting
7d82c82fd9 Make it possible to exempt ips from the rate-limiter 2021-05-04 10:29:25 +02:00
PrivateBin Translator Bot
3f92d4c038 New translations en.json (Indonesian) 2021-05-04 01:30:38 +02:00
PrivateBin Translator Bot
377d7d565b New translations en.json (Indonesian) 2021-05-04 00:29:57 +02:00
PrivateBin Translator Bot
e6def62581 New translations en.json (Chinese Simplified) 2021-05-03 17:39:47 +02:00
PrivateBin Translator Bot
17c1284ccf New translations en.json (Chinese Simplified) 2021-05-03 16:32:06 +02:00
PrivateBin Translator Bot
0a9cd05453 New translations en.json (Estonian) 2021-04-28 13:52:52 +02:00
El RIDO
2b8534d49e Merge branch 'crowdin-translation' 2021-04-22 19:30:33 +02:00
El RIDO
472bf520d8 Merge branch 'master' into crowdin-translation 2021-04-22 19:30:13 +02:00
PrivateBin Translator Bot
4d3a2ae946 New translations en.json (Chinese Simplified) 2021-04-22 03:46:58 +02:00
PrivateBin Translator Bot
4c329be95f New translations en.json (Norwegian) 2021-04-20 18:54:09 +02:00
PrivateBin Translator Bot
b47b8cf050 New translations en.json (Russian) 2021-04-20 12:05:08 +02:00
PrivateBin Translator Bot
1b8351fef9 New translations en.json (Italian) 2021-04-18 22:00:38 +02:00
PrivateBin Translator Bot
d0c6ab224f New translations en.json (German) 2021-04-18 22:00:37 +02:00
PrivateBin Translator Bot
53e23b7422 New translations en.json (Spanish) 2021-04-18 22:00:36 +02:00
PrivateBin Translator Bot
010f9db274 New translations en.json (French) 2021-04-18 22:00:35 +02:00
El RIDO
c2c0980c57 Merge branch 'formAction' 2021-04-18 21:06:24 +02:00
El RIDO
fcb6422663 re-adding CSP directive sandbox allow-forms, it is needed for the password input form to work on the JS side 2021-04-18 21:05:32 +02:00
PrivateBin Translator Bot
993abd746e New translations en.json (Estonian) 2021-04-18 21:04:28 +02:00
PrivateBin Translator Bot
30228cc33c New translations en.json (French) 2021-04-18 21:04:27 +02:00
PrivateBin Translator Bot
14ff704b28 New translations en.json (Spanish) 2021-04-18 21:04:26 +02:00
PrivateBin Translator Bot
cd1b0e0a50 New translations en.json (Arabic) 2021-04-18 21:04:25 +02:00
PrivateBin Translator Bot
4a73afa057 New translations en.json (Bulgarian) 2021-04-18 21:04:24 +02:00
PrivateBin Translator Bot
63d20330b4 New translations en.json (Czech) 2021-04-18 21:04:23 +02:00
PrivateBin Translator Bot
982a4f957c New translations en.json (German) 2021-04-18 21:04:22 +02:00
PrivateBin Translator Bot
67fd327df4 New translations en.json (Greek) 2021-04-18 21:04:21 +02:00
PrivateBin Translator Bot
db0db4ebff New translations en.json (Hebrew) 2021-04-18 21:04:20 +02:00
PrivateBin Translator Bot
4514f1f3a4 New translations en.json (Hungarian) 2021-04-18 21:04:19 +02:00
PrivateBin Translator Bot
926fab30e9 New translations en.json (Italian) 2021-04-18 21:04:18 +02:00
PrivateBin Translator Bot
492cdc9926 New translations en.json (Japanese) 2021-04-18 21:04:17 +02:00
PrivateBin Translator Bot
6b5e7c1b49 New translations en.json (Kurdish) 2021-04-18 21:04:15 +02:00
PrivateBin Translator Bot
2bc7e8e38f New translations en.json (Catalan) 2021-04-18 21:04:14 +02:00
PrivateBin Translator Bot
48916d5df7 New translations en.json (Lithuanian) 2021-04-18 21:04:13 +02:00
PrivateBin Translator Bot
0887f567ab New translations en.json (Norwegian) 2021-04-18 21:04:12 +02:00
PrivateBin Translator Bot
3e4def2069 New translations en.json (Polish) 2021-04-18 21:04:11 +02:00
PrivateBin Translator Bot
39867d8151 New translations en.json (Portuguese) 2021-04-18 21:04:10 +02:00
PrivateBin Translator Bot
c7a86ebd5c New translations en.json (Russian) 2021-04-18 21:04:09 +02:00
PrivateBin Translator Bot
56d993ca82 New translations en.json (Slovenian) 2021-04-18 21:04:08 +02:00
PrivateBin Translator Bot
45b3ec4ac6 New translations en.json (Swedish) 2021-04-18 21:04:07 +02:00
PrivateBin Translator Bot
9bd04c55c9 New translations en.json (Turkish) 2021-04-18 21:04:06 +02:00
PrivateBin Translator Bot
dd4633ff8f New translations en.json (Ukrainian) 2021-04-18 21:04:05 +02:00
PrivateBin Translator Bot
c0207d00a2 New translations en.json (Chinese Simplified) 2021-04-18 21:04:04 +02:00
PrivateBin Translator Bot
bd83415c82 New translations en.json (Hindi) 2021-04-18 21:04:02 +02:00
PrivateBin Translator Bot
478f806e9c New translations en.json (Latin) 2021-04-18 21:04:01 +02:00
PrivateBin Translator Bot
db402baa14 New translations en.json (Occitan) 2021-04-18 21:04:00 +02:00
PrivateBin Translator Bot
dac5bd1d93 New translations en.json (Dutch) 2021-04-18 21:03:59 +02:00
PrivateBin Translator Bot
4b2f2920a2 New translations en.json (Indonesian) 2021-04-18 21:03:57 +02:00
El RIDO
83620d7eb5 Merge branch 'master' into formAction 2021-04-18 20:59:17 +02:00
El RIDO
de4abad748 Merge branch 'download-feature' 2021-04-18 20:55:59 +02:00
rugk
3ca01024fd feat: disallow form submission alltogether
Following the tests and HTTP Observatory, I think we can disable forms altogether.

Fixes https://github.com/PrivateBin/PrivateBin/issues/778
2021-04-18 14:16:39 +02:00
rugk
5809a7cfa7 feat: add form-action CSP restriction
This follows a suggestion from HTTP Observatory:
> Restricts where <form> contents may be submitted by using form-action 'none', form-action 'self', or specific URIs

Fixes #778
2021-04-18 14:14:46 +02:00
El RIDO
0e78534e48 re-label "Download" button to "Save paste" 2021-04-18 09:07:57 +02:00
PrivateBin Translator Bot
b68ae363ec New translations en.json (Indonesian) 2021-04-18 01:03:48 +02:00
El RIDO
3181cfe58a translate download button, add it to page template 2021-04-17 09:15:00 +02:00
El RIDO
bc11452259 make filename unique per paste ID 2021-04-17 09:08:11 +02:00
El RIDO
853a4f386f fix indentation 2021-04-17 08:51:25 +02:00
El RIDO
9683c591bb document change 2021-04-17 08:48:12 +02:00
El RIDO
47029fb04e Merge branch 'master' into download-feature 2021-04-17 08:47:14 +02:00
El RIDO
735a77b783 Merge branch 'floc' 2021-04-17 08:39:50 +02:00
El RIDO
5f4200c721 document change 2021-04-17 08:39:35 +02:00
El RIDO
9b893f09d7 Merge branch 'master' into floc 2021-04-17 08:35:21 +02:00
El RIDO
3b9b6c948f Merge branch 'cspBaseUrl' 2021-04-17 08:20:32 +02:00
El RIDO
7b7a32c0a7 apply StyleCI recommendation 2021-04-17 08:20:08 +02:00
rugk
fd7d05e862 Add base URL as default CSP restriction
This follows an [HTTP Observatory recommendation](https://observatory.mozilla.org/analyze/privatebin.net):
> Restricts use of the <base> tag by using base-uri 'none', base-uri 'self', or specific origins.

Given we don't use that anywhere, this safe should be safe. (not tested practically though)
2021-04-16 22:04:28 +02:00
El RIDO
8232dce395 Merge branch 'cookie-secure-flag' 2021-04-16 20:51:11 +02:00
El RIDO
6f3bb25b09 disable Google FloC 2021-04-16 20:25:50 +02:00
El RIDO
1dc8b24665 transmit cookie only over HTTPS, fixes #472 2021-04-16 20:15:12 +02:00
Christian Pierre MOMON
ed66351337 Added download feature (#5318). 2021-04-16 19:29:03 +02:00
El RIDO
9e6eb50ced adding new security headers, fixes #765 2021-04-16 19:19:11 +02:00
El RIDO
d727837324 Merge branch 'crowdin-translation' 2021-04-16 18:27:45 +02:00
El RIDO
175d14224e set plurals for and credit Estonian translation 2021-04-16 18:27:12 +02:00
El RIDO
51f1f67fe8 Merge branch 'master' into crowdin-translation 2021-04-16 18:00:42 +02:00
PrivateBin Translator Bot
ab250d8686 New translations en.json (Lithuanian) 2021-04-10 16:52:48 +02:00
PrivateBin Translator Bot
1ff8637c23 New translations en.json (Lithuanian) 2021-04-10 15:45:21 +02:00
PrivateBin Translator Bot
727166e945 New translations en.json (Estonian) 2021-04-08 23:05:35 +02:00
PrivateBin Translator Bot
e50f3eb311 New translations en.json (Estonian) 2021-04-08 22:00:09 +02:00
PrivateBin Translator Bot
f5fa37b5f2 New translations en.json (Estonian) 2021-04-08 20:55:45 +02:00
PrivateBin Translator Bot
587822838a New translations en.json (Chinese Simplified) 2021-04-07 09:18:03 +02:00
PrivateBin Translator Bot
553417194c New translations en.json (Estonian) 2021-04-06 20:07:13 +02:00
El RIDO
8a08a2167b fix display of indonesian label in drop-down 2021-04-06 06:27:12 +02:00
El RIDO
d65bf02d78 upgraded kjua 2021-04-05 17:33:07 +02:00
El RIDO
30c8d97517 update PHP dependencies 2021-04-05 17:11:51 +02:00
El RIDO
65d8f896c7 fix make coverage-php 2021-04-05 17:05:46 +02:00
El RIDO
458ebcb321 incrementing version 2021-04-05 17:05:14 +02:00
El RIDO
ec022b2db9 documenting fix for #682 2021-04-05 13:51:23 +02:00
El RIDO
a369202c51 add missing expiration reset 2021-04-05 13:47:37 +02:00
El RIDO
77ee40909f record defaults during initialization, fixes #682 2021-04-05 13:24:53 +02:00
El RIDO
5fd829aa09 adding unit tests for TopNav.resetInput(), triggering bug described in #682 2021-04-05 12:50:23 +02:00
El RIDO
8864523173 Merge pull request #766 from PrivateBin/codacy
Let's try Codacy code scanning again
2021-04-05 12:21:14 +02:00
El RIDO
44cc70ee35 Merge pull request #764 from FozzieHi/patch-1
Remove mention of HPKP in the README.
2021-04-05 12:15:31 +02:00
rugk
cdc970a434 Let's try Codacy code scanning again
It should now be included into GitHub's security tab.

Fixes https://github.com/PrivateBin/PrivateBin/issues/741
2021-04-04 13:29:41 +02:00
George
2ca479786c Remove mention of HPKP in the README.
HPKP has been removed by all major browsers and according to Can I use it is only supported by browsers that have last received an update over a year ago - https://caniuse.com/?search=HPKP.
2021-04-04 12:05:48 +01:00
El RIDO
7ca33019d2 translate new message 2021-04-04 11:43:27 +02:00
El RIDO
99358bbffc translate new message, kudos @Cellophile in #715 2021-04-04 11:41:14 +02:00
El RIDO
df126f89d6 add missing translation, fixes #715 2021-04-04 11:39:46 +02:00
El RIDO
a227443cb6 add missing indonesian language 2021-04-04 11:38:50 +02:00
El RIDO
3780db627d update changelog 2021-04-03 08:28:36 +02:00
El RIDO
a40f3b2950 update DOMpurify to version 2.2.7 2021-04-03 07:04:59 +02:00
El RIDO
2e10bdbd22 update DOMpurify to version 2.2.7 2021-04-02 09:09:47 +02:00
El RIDO
4fcf7f31a1 Merge branch 'crowdin-translation' 2021-04-02 09:00:50 +02:00
El RIDO
da0896fe42 set plurals for and credit Catalan translation 2021-04-02 09:00:27 +02:00
PrivateBin Translator Bot
52d65abce7 New translations en.json (Catalan) 2021-03-27 14:30:25 +01:00
PrivateBin Translator Bot
f3fee65ba9 New translations en.json (Catalan) 2021-03-27 10:00:26 +01:00
PrivateBin Translator Bot
4a5f08074b New translations en.json (Indonesian) 2021-03-27 03:21:45 +01:00
El RIDO
5a9bcea3a9 set plurals for and credit Indonesian translation 2021-03-09 05:54:06 +01:00
PrivateBin Translator Bot
f71e62c07e New translations en.json (Indonesian) 2021-03-09 05:45:44 +01:00
hogren
b55a0456af Avoid the use of <i> markup in a translation. 2021-03-09 05:23:10 +01:00
El RIDO
066aa77ba1 Merge branch 'master' into crowdin-translation 2021-03-09 05:16:41 +01:00
El RIDO
b610368f12 Merge branch 'hogren-translation_i_markup3' 2021-03-07 20:04:03 +01:00
El RIDO
e6e985d92d apply StyleCI 2021-03-07 19:56:19 +01:00
hogren
42e609e66f Avoid the use of <i> markup in a translation. 2021-03-06 14:12:59 +01:00
PrivateBin Translator Bot
16b7e8f8af New translations en.json (Indonesian) 2021-02-12 22:58:37 +01:00
PrivateBin Translator Bot
c24cc8859c New translations en.json (Indonesian) 2021-02-12 22:02:53 +01:00
PrivateBin Translator Bot
b2e65035d0 New translations en.json (Indonesian) 2021-02-05 04:47:58 +01:00
El RIDO
7006598d87 Merge pull request #742 from PrivateBin/codeql
Create codeql-analysis.yml
2021-01-26 19:09:19 +01:00
rugk
156155663d Create codeql-analysis.yml
Only supports JS for now.

I've removed the build step, because welł… our JS is already "built".
2021-01-26 16:37:53 +01:00
El RIDO
b38ebc503e plural rules and documenting newly added languages 2021-01-07 21:16:03 +01:00
El RIDO
ad4184dbe3 Merge pull request #712 from PrivateBin/crowdin-translation
New Crowdin updates
2021-01-07 20:37:46 +01:00
El RIDO
ec0236bd01 Merge pull request #729 from e1mo/feature/ansible-role
Add link to PrivateBin ansible role
2021-01-05 19:28:21 +01:00
El RIDO
c87c6c80af Merge pull request #733 from techboyg5/revert-731-patch-1
Improve INSTALL.md
2021-01-05 19:21:43 +01:00
El RIDO
73e44e1aa8 workaround 2021-01-05 19:19:05 +01:00
El RIDO
2d6d0252cf github switched to ubuntu 20.04 and it seems to default on php 8, which our current composer setup doesn't support 2021-01-05 19:16:22 +01:00
techboyg5
913d37a663 Update INSTALL.md 2021-01-05 09:39:51 -06:00
techboyg5
3248ee99e9 Update INSTALL.md 2021-01-05 09:39:15 -06:00
techboyg5
8f069a52d2 Sorry 2021-01-05 06:43:00 -06:00
techboyg5
e5f69cb497 Add PostgreSQL 2021-01-04 15:51:30 -06:00
techboyg5
5b736084e2 Update INSTALL.md 2021-01-04 14:57:25 -06:00
techboyg5
f6850a90e4 Spelling 2021-01-04 14:55:36 -06:00
techboyg5
e02816b1a4 Database 2021-01-04 14:52:44 -06:00
techboyg5
ca1cc52823 Revert "Add zlib extension to requirements" 2021-01-04 14:49:13 -06:00
El RIDO
1ddbcf79ac Merge pull request #731 from Takios/patch-1
Add zlib extension to requirements
2021-01-04 21:10:14 +01:00
El RIDO
b79c9aa960 Merge pull request #732 from techboyg5/patch-1
Minimum PHP version is 5.6
2021-01-04 21:07:30 +01:00
techboyg5
dd60cc9c29 Minimum PHP version is 5.6 2021-01-04 11:29:05 -06:00
Takios
f30fc8b601 Add zlib extension to requirements 2021-01-03 23:36:07 +01:00
Moritz 'e1mo' Fromm
ed7daac55a Apply suggestions from review
Co-authored-by: rugk <rugk+git@posteo.de>
2020-12-13 15:05:47 +01:00
Moritz 'e1mo' Fromm
556bbccb69 Add link to PrivateBin ansible role
This role simply deploys PrivateBin on your servers, it's functionality
is quite limited and currently does not support further hardening
techniques[^0]. But however, I think it is beneficial for quite a lot of
people.

[^0]: https://todo.sr.ht/~e1mo/ansible-role-privatebin/1
2020-12-13 14:44:23 +01:00
PrivateBin Translator Bot
b19c8d8403 New translations en.json (Lithuanian) 2020-12-12 14:18:14 +01:00
PrivateBin Translator Bot
84805c7e46 New translations en.json (Lithuanian) 2020-12-12 13:21:49 +01:00
PrivateBin Translator Bot
6b112c6b28 New translations en.json (Lithuanian) 2020-12-11 22:37:41 +01:00
PrivateBin Translator Bot
61b57ed519 New translations en.json (Lithuanian) 2020-12-11 21:29:31 +01:00
PrivateBin Translator Bot
a50124a7ab New translations en.json (Hebrew) 2020-12-03 13:25:52 +01:00
El RIDO
639bab1b0d Merge pull request #723 from techboyg5/patch-1
Language dropdown menu to the right
2020-12-03 12:14:49 +01:00
PrivateBin Translator Bot
32353a70aa New translations en.json (Lithuanian) 2020-11-28 20:26:53 +01:00
PrivateBin Translator Bot
cb9048116e New translations en.json (Lithuanian) 2020-11-28 19:27:52 +01:00
PrivateBin Translator Bot
bf33f2928b New translations en.json (Lithuanian) 2020-11-28 18:27:13 +01:00
PrivateBin Translator Bot
100f85f7b6 New translations en.json (Lithuanian) 2020-11-26 06:27:42 +01:00
techboyg5
283561e34f Language dropdown menu to the right 2020-11-22 15:13:43 -06:00
El RIDO
19c77f929c Merge pull request #720 from goodboy-dy/patch-1
Create zh.json
2020-11-15 21:01:25 +01:00
dy
1da05948c7 Create zh.json
修改了一些语言不习惯的地方
2020-11-14 20:18:36 +08:00
PrivateBin Translator Bot
7381ddb5dc New translations en.json (Hebrew) 2020-10-14 07:28:01 +02:00
El RIDO
c7bff204f9 Merge branch 'patch-1' of https://github.com/Men770/PrivateBin into men770-patch 2020-10-14 07:16:45 +02:00
El RIDO
be90629bd7 Merge pull request #710 from PrivateBin/crowdin-translation
New Crowdin updates
2020-10-14 07:14:59 +02:00
PrivateBin Translator Bot
0949658545 New translations en.json (Norwegian) 2020-10-14 07:08:06 +02:00
Men770
300bd61c2e Update he.json 2020-10-13 09:22:05 +03:00
El RIDO
0989c8c355 Merge branch 'cryptomilk-master-info' 2020-10-13 07:28:55 +02:00
El RIDO
bb6a44ce7a remove double translation, avoid unsupported double quotes in INI file 2020-10-13 07:28:35 +02:00
El RIDO
f12986a277 Merge branch 'master-info' of https://github.com/cryptomilk/PrivateBin into cryptomilk-master-info 2020-10-13 06:46:26 +02:00
Andreas Schneider
eb32ea1419 Make it possible to change the info text
This makes it possible to change the last part of the info text and
replace it with something individual. E.g pointing to the cmdline
client.

Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
2020-10-11 17:04:08 +02:00
El RIDO
48cf1d581e Merge pull request #705 from PrivateBin/crowdin-translation
New Crowdin updates
2020-10-11 11:36:45 +02:00
PrivateBin Translator Bot
7a2592ba50 New translations en.json (Occitan) 2020-10-11 11:31:19 +02:00
PrivateBin Translator Bot
7dc965d707 New translations en.json (Occitan) 2020-10-10 18:20:55 +02:00
El RIDO
5d796fa306 Merge pull request #704 from PrivateBin/crowdin-translation
New Crowdin updates
2020-10-10 11:20:12 +02:00
PrivateBin Translator Bot
bea9119ec6 New translations en.json (Ukrainian) 2020-10-10 11:00:41 +02:00
PrivateBin Translator Bot
999ded510a New translations en.json (Greek) 2020-10-10 11:00:40 +02:00
PrivateBin Translator Bot
8d9819ef22 New translations en.json (Japanese) 2020-10-10 11:00:38 +02:00
PrivateBin Translator Bot
14709591c5 New translations en.json (Kurdish) 2020-10-10 11:00:36 +02:00
PrivateBin Translator Bot
6a49219a62 New translations en.json (Swedish) 2020-10-10 11:00:34 +02:00
PrivateBin Translator Bot
b31dad8687 New translations en.json (Turkish) 2020-10-10 11:00:33 +02:00
PrivateBin Translator Bot
97f953f5e8 New translations en.json (Hindi) 2020-10-10 11:00:31 +02:00
PrivateBin Translator Bot
e43a96b069 New translations en.json (Arabic) 2020-10-10 11:00:29 +02:00
PrivateBin Translator Bot
9557b26094 New translations en.json (Latin) 2020-10-10 11:00:28 +02:00
PrivateBin Translator Bot
089770e5ca New translations en.json (Hungarian) 2020-10-10 11:00:26 +02:00
PrivateBin Translator Bot
18992f00c2 New translations en.json (Portuguese) 2020-10-10 11:00:25 +02:00
PrivateBin Translator Bot
54b87351e1 New translations en.json (Dutch) 2020-10-10 11:00:23 +02:00
PrivateBin Translator Bot
7be40cdf90 New translations en.json (Occitan) 2020-10-10 11:00:21 +02:00
PrivateBin Translator Bot
766fc071fe New translations en.json (Polish) 2020-10-10 11:00:19 +02:00
PrivateBin Translator Bot
69cd0e776b New translations en.json (Slovenian) 2020-10-10 11:00:17 +02:00
PrivateBin Translator Bot
b450dd1d49 New translations en.json (Norwegian) 2020-10-10 11:00:16 +02:00
PrivateBin Translator Bot
f416529ebf New translations en.json (Italian) 2020-10-10 11:00:14 +02:00
PrivateBin Translator Bot
788290f55c New translations en.json (Hungarian) 2020-10-10 10:00:50 +02:00
PrivateBin Translator Bot
410997bd47 New translations en.json (Hebrew) 2020-10-10 10:00:49 +02:00
PrivateBin Translator Bot
4f731c3b55 New translations en.json (Chinese Simplified) 2020-10-09 18:53:54 +02:00
PrivateBin Translator Bot
fd88f045e8 New translations en.json (Russian) 2020-10-09 15:50:16 +02:00
PrivateBin Translator Bot
728842d1d0 New translations en.json (Occitan) 2020-10-09 12:01:20 +02:00
PrivateBin Translator Bot
6a468b0809 New translations en.json (Chinese Simplified) 2020-10-09 08:15:46 +02:00
PrivateBin Translator Bot
243d04c2db New translations en.json (Czech) 2020-10-09 08:15:44 +02:00
PrivateBin Translator Bot
587f5ef9a7 New translations en.json (Spanish) 2020-10-09 08:15:42 +02:00
PrivateBin Translator Bot
366a8a5279 New translations en.json (German) 2020-10-09 08:15:40 +02:00
PrivateBin Translator Bot
aea485b8df New translations en.json (French) 2020-10-09 08:15:39 +02:00
PrivateBin Translator Bot
67a59def91 New translations en.json (Bulgarian) 2020-10-09 07:06:27 +02:00
El RIDO
a8b080de6e Merge pull request #703 from PrivateBin/crowdin-translation
New Crowdin updates
2020-10-08 19:09:09 +02:00
PrivateBin Translator Bot
46ea5b196b New translations en.json (Ukrainian) 2020-10-08 18:53:43 +02:00
PrivateBin Translator Bot
ae00d3117a New translations en.json (Italian) 2020-10-08 18:53:42 +02:00
PrivateBin Translator Bot
3adf8dc5d7 New translations en.json (Arabic) 2020-10-08 18:53:40 +02:00
PrivateBin Translator Bot
e1ed668cc0 New translations en.json (Greek) 2020-10-08 18:53:38 +02:00
PrivateBin Translator Bot
8923436c46 New translations en.json (Hebrew) 2020-10-08 18:53:37 +02:00
PrivateBin Translator Bot
a304049b7a New translations en.json (Japanese) 2020-10-08 18:53:35 +02:00
PrivateBin Translator Bot
c4e4237e8a New translations en.json (Kurdish) 2020-10-08 18:53:34 +02:00
PrivateBin Translator Bot
2192f69f7e New translations en.json (Swedish) 2020-10-08 18:53:32 +02:00
PrivateBin Translator Bot
5a9858de21 New translations en.json (Turkish) 2020-10-08 18:53:30 +02:00
PrivateBin Translator Bot
4d9a25a7d9 New translations en.json (Hindi) 2020-10-08 18:53:29 +02:00
PrivateBin Translator Bot
1017b0746c New translations en.json (Latin) 2020-10-08 18:53:27 +02:00
PrivateBin Translator Bot
46b1afd430 New translations en.json (German) 2020-10-08 18:53:26 +02:00
PrivateBin Translator Bot
885adbaead New translations en.json (Norwegian) 2020-10-08 18:53:24 +02:00
PrivateBin Translator Bot
3a68788611 New translations en.json (Spanish) 2020-10-08 18:53:23 +02:00
PrivateBin Translator Bot
6945115be6 New translations en.json (Portuguese) 2020-10-08 18:53:21 +02:00
PrivateBin Translator Bot
7c9f22350d New translations en.json (Czech) 2020-10-08 18:53:20 +02:00
PrivateBin Translator Bot
bedc8b35dc New translations en.json (Dutch) 2020-10-08 18:53:18 +02:00
PrivateBin Translator Bot
92669b3d37 New translations en.json (Russian) 2020-10-08 18:53:16 +02:00
PrivateBin Translator Bot
8ebc91ce31 New translations en.json (Chinese Simplified) 2020-10-08 18:53:15 +02:00
PrivateBin Translator Bot
63d5181602 New translations en.json (Occitan) 2020-10-08 18:53:13 +02:00
PrivateBin Translator Bot
74e902729c New translations en.json (Bulgarian) 2020-10-08 18:53:11 +02:00
PrivateBin Translator Bot
dc90d91d7c New translations en.json (Polish) 2020-10-08 18:53:09 +02:00
PrivateBin Translator Bot
1ddc7a7634 New translations en.json (Slovenian) 2020-10-08 18:53:07 +02:00
PrivateBin Translator Bot
bf5995ef74 New translations en.json (Hungarian) 2020-10-08 18:53:06 +02:00
PrivateBin Translator Bot
f18300c600 New translations en.json (French) 2020-10-08 18:53:04 +02:00
El RIDO
2b9a61d234 Merge pull request #700 from PrivateBin/crowdin-translation
New Crowdin updates
2020-10-08 18:47:18 +02:00
El RIDO
ad10970385 Merge pull request #701 from r4sas/i18n-update
[i18n] Update en strings
2020-10-08 18:42:17 +02:00
PrivateBin Translator Bot
b49d272d0c New translations en.json (Russian) 2020-10-07 13:23:35 +02:00
R4SAS
d8e9ffb7a2 [i18n] Update en strings
Add plurals for `Please wait %d seconds between each post` and fix translable strings in `This document will expire in` message (add dot at end).
2020-10-07 14:16:09 +03:00
PrivateBin Translator Bot
913d2f1f01 New translations en.json (Russian) 2020-10-07 12:25:23 +02:00
PrivateBin Translator Bot
7faba38844 New translations en.json (Occitan) 2020-10-06 22:00:18 +02:00
PrivateBin Translator Bot
0db182edcf New translations en.json (Hungarian) 2020-10-06 15:59:33 +02:00
PrivateBin Translator Bot
83c3c5ce12 New translations en.json (Hungarian) 2020-10-06 13:57:50 +02:00
PrivateBin Translator Bot
a373f94c93 New translations en.json (Russian) 2020-10-06 07:35:04 +02:00
PrivateBin Translator Bot
ef21d85fd6 New translations en.json (Dutch) 2020-10-06 07:35:03 +02:00
PrivateBin Translator Bot
287170b26a New translations en.json (Hebrew) 2020-10-06 06:34:53 +02:00
PrivateBin Translator Bot
5457196f72 New translations en.json (Portuguese) 2020-10-06 05:12:20 +02:00
PrivateBin Translator Bot
d7452b6538 New translations en.json (Portuguese) 2020-10-06 04:09:47 +02:00
PrivateBin Translator Bot
996c3b87e1 New translations en.json (Spanish) 2020-10-05 21:18:26 +02:00
PrivateBin Translator Bot
98c7974853 New translations en.json (Hebrew) 2020-10-05 21:18:24 +02:00
PrivateBin Translator Bot
c71b049124 New translations en.json (Spanish) 2020-10-05 20:18:40 +02:00
PrivateBin Translator Bot
e34e6428b6 New translations en.json (Hungarian) 2020-10-05 16:34:44 +02:00
PrivateBin Translator Bot
2708f4e9a8 New translations en.json (Norwegian) 2020-10-05 16:34:42 +02:00
PrivateBin Translator Bot
428374d432 New translations en.json (Hungarian) 2020-10-05 15:38:10 +02:00
El RIDO
343738299c Merge pull request #699 from PrivateBin/crowdin-translation
New Crowdin updates
2020-10-05 12:50:33 +02:00
PrivateBin Translator Bot
3a58fa902b New translations en.json (Norwegian) 2020-10-05 00:26:31 +02:00
PrivateBin Translator Bot
bd8dd77ce3 New translations en.json (Norwegian) 2020-10-04 23:21:47 +02:00
PrivateBin Translator Bot
96fc118507 New translations en.json (Italian) 2020-10-04 20:01:42 +02:00
PrivateBin Translator Bot
dd120b2209 New translations en.json (Latin) 2020-10-04 19:01:35 +02:00
PrivateBin Translator Bot
f819784eea New translations en.json (Hindi) 2020-10-04 19:01:33 +02:00
PrivateBin Translator Bot
91541ddb91 New translations en.json (Turkish) 2020-10-04 19:01:32 +02:00
PrivateBin Translator Bot
b1ffe38518 New translations en.json (Swedish) 2020-10-04 19:01:31 +02:00
PrivateBin Translator Bot
5b3702ac5f New translations en.json (Kurdish) 2020-10-04 19:01:29 +02:00
PrivateBin Translator Bot
2f0bfd1432 New translations en.json (Japanese) 2020-10-04 19:01:28 +02:00
PrivateBin Translator Bot
e0eeed00d9 New translations en.json (Hebrew) 2020-10-04 19:01:27 +02:00
PrivateBin Translator Bot
530dbf4a51 New translations en.json (Greek) 2020-10-04 19:01:25 +02:00
PrivateBin Translator Bot
5a8747e2f9 New translations en.json (Arabic) 2020-10-04 19:01:24 +02:00
El RIDO
f0fa288c75 Merge pull request #697 from PrivateBin/crowdin-translation
New Crowdin updates
2020-10-04 18:17:25 +02:00
PrivateBin Translator Bot
e25243ed8a New translations en.json (Italian) 2020-10-04 18:05:54 +02:00
PrivateBin Translator Bot
7060c0795c New translations en.json (German) 2020-10-04 18:05:53 +02:00
PrivateBin Translator Bot
14e070e44a New translations en.json (French) 2020-10-04 18:05:51 +02:00
El RIDO
02278c73ce Merge branch 'i18n' 2020-10-04 14:23:41 +02:00
El RIDO
2575656831 Merge branch 'master' into i18n 2020-10-04 14:23:25 +02:00
El RIDO
5ec72f1d89 address false positive jsverify RngState 080d2f5b13a86e97c4 2020-10-04 14:08:27 +02:00
El RIDO
2e4595c1ec New translations en.json (Occitan) 2020-10-04 13:52:45 +02:00
El RIDO
291fdb306d New translations en.json (Chinese Simplified) 2020-10-04 13:52:43 +02:00
El RIDO
0d492805b3 New translations en.json (Ukrainian) 2020-10-04 13:52:41 +02:00
El RIDO
ba10c80ab1 New translations en.json (Slovenian) 2020-10-04 13:52:40 +02:00
El RIDO
d89601d505 New translations en.json (Russian) 2020-10-04 13:52:38 +02:00
El RIDO
cc11ef6d7a New translations en.json (Portuguese) 2020-10-04 13:52:37 +02:00
El RIDO
a2e9a94b58 New translations en.json (Polish) 2020-10-04 13:52:35 +02:00
El RIDO
8b7ae28830 New translations en.json (Norwegian) 2020-10-04 13:52:33 +02:00
El RIDO
c0567dd005 New translations en.json (Dutch) 2020-10-04 13:52:31 +02:00
El RIDO
7becdd26f1 New translations en.json (Italian) 2020-10-04 13:52:30 +02:00
El RIDO
8962c86d29 New translations en.json (Hungarian) 2020-10-04 13:52:28 +02:00
El RIDO
d4e440c1a2 New translations en.json (German) 2020-10-04 13:52:26 +02:00
El RIDO
6546210da8 New translations en.json (Czech) 2020-10-04 13:52:25 +02:00
El RIDO
5d418be054 New translations en.json (Bulgarian) 2020-10-04 13:52:23 +02:00
El RIDO
f2fb92eedc New translations en.json (Spanish) 2020-10-04 13:52:21 +02:00
El RIDO
f4c7807181 New translations en.json (French) 2020-10-04 13:52:20 +02:00
El RIDO
4a04915269 New translations en.json (Occitan) 2020-10-04 13:48:08 +02:00
El RIDO
a518b7c2ca New translations en.json (Chinese Simplified) 2020-10-04 13:48:06 +02:00
El RIDO
48faf7b2f0 New translations en.json (Ukrainian) 2020-10-04 13:48:04 +02:00
El RIDO
350cc21f42 New translations en.json (Slovenian) 2020-10-04 13:48:03 +02:00
El RIDO
ccbb24fdf1 New translations en.json (Russian) 2020-10-04 13:48:01 +02:00
El RIDO
8bbf568d43 New translations en.json (Portuguese) 2020-10-04 13:48:00 +02:00
El RIDO
6b2801f7de New translations en.json (Polish) 2020-10-04 13:47:58 +02:00
El RIDO
50881ff172 New translations en.json (Norwegian) 2020-10-04 13:47:57 +02:00
El RIDO
4e4c36a6c4 New translations en.json (Dutch) 2020-10-04 13:47:55 +02:00
El RIDO
1d36fa2c21 New translations en.json (Italian) 2020-10-04 13:47:53 +02:00
El RIDO
21435d0111 New translations en.json (Hungarian) 2020-10-04 13:47:52 +02:00
El RIDO
669430aa10 New translations en.json (German) 2020-10-04 13:47:50 +02:00
El RIDO
566f8f1b1d New translations en.json (Czech) 2020-10-04 13:47:49 +02:00
El RIDO
9365f88a31 New translations en.json (Bulgarian) 2020-10-04 13:47:48 +02:00
El RIDO
40172b8500 New translations en.json (Spanish) 2020-10-04 13:47:46 +02:00
El RIDO
ea53546799 New translations en.json (French) 2020-10-04 13:47:45 +02:00
El RIDO
91062a28e3 Merge branch 'master' of github.com:PrivateBin/PrivateBin 2020-10-04 13:45:00 +02:00
El RIDO
9b35a4da70 add all possible plural forms to English template for Crowdin translation - will need to expand this, if we gain support for a language with more then 3 plural forms 2020-10-04 13:44:41 +02:00
El RIDO
5d379e6534 apply jq formatting to all translations for reduced noise during Crowdin translations 2020-10-04 13:32:49 +02:00
El RIDO
13b5c66e6d Update Crowdin configuration file 2020-10-04 12:41:27 +02:00
El RIDO
3668f1e3f4 attempt to accomodate Crowdin by providing a single source translation file that is not actually used or loaded by our code 2020-10-04 12:39:35 +02:00
El RIDO
417b17f86d didn't figure out which StyleCI change suddenly requires this, so just apply the patch to stop it nagging about it 2020-10-04 12:16:42 +02:00
El RIDO
3ef741b27b Update Crowdin configuration file 2020-10-04 10:41:00 +02:00
El RIDO
565063d839 Update Crowdin configuration file 2020-10-04 10:29:13 +02:00
El RIDO
646a2348db Merge pull request #691 from Ahuahuachi/master
Update spanish translation
2020-10-04 10:16:08 +02:00
Alfredo Altamirano
7f1d03df55 Update spanish translation 2020-10-03 17:37:22 -05:00
El RIDO
397442913b Update Crowdin configuration file 2020-10-01 21:01:39 +02:00
El RIDO
f9ed831092 Update Crowdin configuration file 2020-10-01 20:09:22 +02:00
El RIDO
633ec4b199 Merge branch 'master' of github.com:PrivateBin/PrivateBin 2020-08-30 08:35:07 +02:00
El RIDO
1614342248 update DOMpurify to version 2.0.14 2020-08-30 08:34:38 +02:00
El RIDO
298cbebca3 Merge pull request #671 from SuperSandro2000/patch-1
Fix grammar
2020-07-23 09:35:09 +02:00
Sandro
9f7b60a402 Fix grammar 2020-07-22 10:40:14 +02:00
El RIDO
b30f3a9b58 Merge pull request #669 from imtms/master
Update zh.json
2020-07-17 20:39:55 +02:00
TMs
7637d69e1b Update zh.json 2020-07-17 14:34:25 +08:00
El RIDO
33bcce593a Merge pull request #666 from r4sas/i18n-ru
i18n: update russian translation
2020-07-05 20:06:36 +02:00
r4sas
3cd346c7de i18n: fix typos in ru
Signed-off-by: r4sas <r4sas@i2pmail.org>
2020-07-04 11:22:02 +00:00
r4sas
cbd3c75dd2 i18n: update russian translation
Signed-off-by: r4sas <r4sas@i2pmail.org>
2020-07-04 10:57:16 +00:00
El RIDO
9f7db595a7 Merge branch 'ZerooCool-master' 2020-07-03 21:01:01 +02:00
El RIDO
4204e4b8b7 make StyleCI happy and change unit test to use a string 2020-07-03 21:00:42 +02:00
ZerooCool
e61c44ef46 Make Opengraph really functional
Make Opengraph really functional

Change : #664 for #651
2020-07-01 19:47:12 +02:00
ZerooCool
13c2f8d968 Make Opengraph really functional
3 URLs of images used on social networks are passed in absolute URL.

Note that I did not pass all the images in absolute URLs, but, it could be consistent to do so, but, if the images work, maybe a relative call is more efficient?

Remove the version of PrivateBin, at the end of each image. This apparently prevents the opengraph from working, and, so I deleted on all of the images, to remain consistent at this level. This will make fewer requests, and, anyway, the images are not intended to change with each version.
2020-06-30 22:42:12 +02:00
El RIDO
0673c1cde1 fix display of empty files #663 2020-06-30 20:10:56 +02:00
El RIDO
e35a26c916 Merge branch 'ZerooCool-master' 2020-06-22 20:42:19 +02:00
ZerooCool
b555f679f6 Up fr.json
"Encrypted note on PrivateBin":
    "Message chiffré sur PrivateBin",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.":
    "Visiter ce lien pour voir la note. Donner l'URL à une autre personne lui permet également d'accéder à la note."
2020-06-22 19:08:00 +02:00
El RIDO
45a0535640 adding new flag to sandbox policy, introduced and required by Chrome 83 - fixes #634 2020-06-11 18:29:32 +02:00
El RIDO
cb0faf690c DOMpurify strips line tabulation characters (\u000b), adresses jsverifyRngState 8f6fbd749c3852ea01 2020-06-07 07:58:07 +02:00
El RIDO
8fcc321eb6 adjust unit tests to new link format 2020-06-07 07:47:28 +02:00
El RIDO
5450a431cf Merge branch 'Haocen-625-bugfixes' 2020-06-07 07:38:59 +02:00
Haocen Xu
f1d4792d3e Update SRI 2020-06-02 09:06:12 -04:00
Haocen Xu
65011019b7 Fix urls2links unit test 2020-06-02 09:03:33 -04:00
El RIDO
dfed1a4b45 switching webcrypto library to native node crypto implementation (requires node>=10) 2020-06-01 08:07:25 +02:00
unknown
9b138fd5fd Update SRI 2020-06-01 02:35:06 +08:00
unknown
903ea5ea68 Open all links in new window 2020-06-01 02:33:22 +08:00
El RIDO
7794915172 expose permission exceptions to the API 2020-05-31 16:33:25 +02:00
El RIDO
df408c1e82 remove code climate dependency, since I couldn't get it to work on github actions 2020-05-31 16:11:24 +02:00
El RIDO
fbefe47806 avoid the buggy windows environment 2020-05-31 15:53:57 +02:00
El RIDO
bd7ecb9c55 develop doesn't install curl extension by default 2020-05-31 15:43:59 +02:00
El RIDO
2a04ee385d develop doesn't install DOM extension by default 2020-05-31 15:41:30 +02:00
El RIDO
3268464ada might only be fixed in development branch 2020-05-31 15:36:13 +02:00
El RIDO
09a2c5c3b9 attempting to fix windows unit tests 2020-05-31 15:30:30 +02:00
El RIDO
51a867bc20 removing outdated configurations and fix path of phpunit 2020-05-31 15:24:10 +02:00
El RIDO
a1bac9b6e1 remove composer lock, to avoid installing incompatible dependencies 2020-05-31 15:10:30 +02:00
El RIDO
268730e07b remove unmaintained and incompatible codacy module 2020-05-31 15:07:17 +02:00
El RIDO
120ba0b8ca avoid packaged phpunit version that is incompatible with older PHP releases 2020-05-31 14:45:25 +02:00
El RIDO
bd26972a73 actually run tests and set proper working directories 2020-05-31 14:42:11 +02:00
El RIDO
7cef87e856 migrating TravisCI tests to GitHub actions 2020-05-31 14:36:09 +02:00
Haocen Xu
420f0d6634 Update SRI 2020-05-30 06:22:35 -04:00
Haocen Xu
dd98af0775 Avoid recreation of existing pasteurl element when calling URL shortener 2020-05-30 06:07:47 -04:00
Haocen Xu
5f0011b0f6 Sanitize output from Helper.urls2links 2020-05-30 06:05:20 -04:00
Haocen Xu
25a39148a8 Change order of execution to detect delete token properly 2020-05-30 06:00:17 -04:00
Haocen Xu
e298c3d10c Reload page when back button in browser pressed, avoid reading burn
after read paste from cache
2020-05-30 05:57:27 -04:00
Haocen Xu
afcece17dd Fix broken Helper.durationToSeconds, as it doesn't handle weeks 2020-05-30 05:55:41 -04:00
Haocen Xu
74551f58d7 Avoid DOMPurify mess with forward slash in expirationDateString 2020-05-30 05:52:15 -04:00
Haocen Xu
4984194c33 Avoid dropzone appearing when it should not by fixing
TopNav.isAttachmentReadonly logic
2020-05-30 05:48:15 -04:00
Haocen Xu
d6b06269a4 Fix Editor.hide typo 2020-05-30 05:47:33 -04:00
Haocen Xu
7eb96eb3cb Avoid handling clipboard data item if it is not file type 2020-05-30 05:39:46 -04:00
Haocen Xu
bb9a5772bc Add resource: to script-src cspheader to allowed rendering of pdf in
Firefox
2020-05-30 05:37:35 -04:00
El RIDO
e59ef24d35 Merge pull request #618 from idarlund/patch-6
Update no.json
2020-05-04 19:18:30 +02:00
Idar Lund
8c6c10cd0f Update no.json 2020-05-04 10:34:52 +02:00
El RIDO
958d55a8be Merge pull request #615 from Mejans/patch-1
i18n update Occitan language
2020-04-26 13:12:00 +02:00
Mejans
57766496e4 Update oc.json 2020-04-25 12:37:24 +02:00
El RIDO
75fc6b0c8c Merge branch 'resetOnNew' 2020-04-24 07:05:05 +02:00
rugk
38a1726e22 Regenerate SRI 2020-04-23 12:07:38 +02:00
rugk
d3ba7eeb13 Reset checkboxes on new paste 2020-04-23 12:07:08 +02:00
rugk
5ece4d2632 Reset attachment when clicking new paste 2020-04-23 11:25:24 +02:00
El RIDO
fc1be18cbe Makefile should not become part of the release 2020-04-08 17:53:56 +02:00
El RIDO
878f13a643 adding an example to opt-out of the privatebin directory 2020-04-08 05:35:38 +02:00
El RIDO
b5ab38e657 adding a Makefile to simplify release related tasks as well as unit testing 2020-04-02 07:47:29 +02:00
rugk
fb66e2392b Merge branch 'metadatafix' 2020-03-27 13:52:13 +01:00
El RIDO
7e77b94158 revert the revert caused by the merge of master 2020-03-23 18:58:26 +01:00
El RIDO
2f9f6d90dd Merge branch 'master' into metadatafix 2020-03-23 18:48:48 +01:00
El RIDO
c63dc3df7b increase timeout for nyc JS code coverage generator 2020-03-22 06:56:18 +01:00
El RIDO
9914c37683 incrementing version 2020-03-22 06:44:04 +01:00
El RIDO
1439bb291f allow pasting password on paste with attachment - big kudos @rugk for finding it! - fixes #565, fixes #595 2020-03-21 16:53:55 +01:00
El RIDO
0907ee90e3 documenting change 2020-03-21 16:07:11 +01:00
El RIDO
7abfe56910 Merge branch 'preview-encoding' 2020-03-21 15:59:25 +01:00
rugk
0cc0830421 Handle review comments
Add translation strings
and remove/adjust wrong tags
2020-03-10 09:05:44 +01:00
El RIDO
71c76adac4 addressing false positive jsverify rngState 077c06da821594b3fe 2020-03-06 23:00:48 +01:00
rugk
7cb830e22f It includes a change in the RegEx for URLs because that was broken when a
& character later followed at any time after a link (even after a newline).
(with a negative lookahead)

Test with https://regex101.com/r/i7bZ73/1

Now the RegEx does not check for _all_ chars after a link, but just for the
one following the link.
(So the lookahead is not * anymore. I guess thsi behaviour was
the expectation when it has been implemented.)
2020-03-06 22:37:12 +01:00
El RIDO
c334d2d00d Merge branch 'master' into preview-encoding 2020-03-06 22:23:40 +01:00
El RIDO
c11dc8e17e reverting Helper.urls2links() method to old style, applied to element instead of string, allows inserting plain text as text node 2020-03-06 22:18:38 +01:00
El RIDO
8a6dcf910a Revert "in Helper.urls2links(), encode HTML entities, find and insert links, partially decoding only the href property of it"
This reverts commit 5340f417e0.
2020-03-06 20:57:15 +01:00
El RIDO
33bb0c6bd6 trying to recreate former StyleCI behaviour in changed preset 2020-03-06 20:50:19 +01:00
El RIDO
0564c0e62e fixing 'The provided fixer 'method_argument_space' cannot be disabled unless it was already enabled by your preset.' 2020-03-06 20:46:51 +01:00
rugk
b52e78d173 Add OpenGraph and Twitter cards
Just useless templates/defaults without any content.

Fixes https://github.com/PrivateBin/PrivateBin/issues/139
2020-03-04 15:10:31 +01:00
El RIDO
f05e5c2e29 documenting change 2020-03-01 16:14:19 +01:00
El RIDO
879a2a9255 tweaking German translation for email strings 2020-03-01 08:55:24 +01:00
El RIDO
f391773c65 generalize date string handling, replacing hardcoded lookups, fixes #586 2020-03-01 08:54:48 +01:00
El RIDO
5340f417e0 in Helper.urls2links(), encode HTML entities, find and insert links, partially decoding only the href property of it 2020-02-29 09:37:54 +01:00
El RIDO
d2e9e47b67 refactor switch into nested if/else, to improve readability - no functional change 2020-02-29 08:45:56 +01:00
El RIDO
b0800060c2 fix change log 2020-02-16 13:33:48 +01:00
El RIDO
15f66870d1 Merge branch 'php7.4-ci' 2020-02-16 13:27:16 +01:00
El RIDO
afd82ac34d Merge branch 'master' into php7.4-ci 2020-02-16 13:23:11 +01:00
El RIDO
adece1d784 incrementing version 2020-02-16 11:15:51 +01:00
El RIDO
e74d786a68 update change log 2020-02-16 07:23:20 +01:00
El RIDO
f190317d95 remove obsolete sudo key 2020-02-05 19:35:46 +01:00
El RIDO
5d54006c9e update minimum required PHP version to 5.6 and replace slowEquals() with native hash_equals() function 2020-02-05 19:30:14 +01:00
El RIDO
2870023e9c updating composer requirements und identicon library 2020-02-05 19:17:22 +01:00
El RIDO
df7a06315f drop php 5.5 tests, allowing us to use current ubuntu bionic based environment and adding php 7.4 incl. GD library 2020-02-05 19:15:43 +01:00
El RIDO
12c83a13c7 addressing false positive jsverify rngState 85f362db8950cea741 2020-02-05 19:06:45 +01:00
El RIDO
aa377038a0 fixing DOMpurify 2.0.8 SRI after removing map line in file (which causes unnecessary requests to missing files in the browser) 2020-02-05 19:05:37 +01:00
El RIDO
7038fd5712 Revert "add 7.4 to travis CI tests"
This reverts commit 81194f6bd6.

Found that the trusty based php 7.4 in TravisCI doesn't include the GD module, that we need, plus there is an issue with the Filter::slowEquals() function that only remains for php 5.5 support that doesn't yet contain hash_compare().
2020-02-05 18:52:53 +01:00
El RIDO
81194f6bd6 add 7.4 to travis CI tests 2020-02-05 16:50:08 +01:00
El RIDO
bab95cce1b addressing false positive jsverify rngState 8bf7605ea139db4c28 2020-02-04 18:58:24 +01:00
El RIDO
00438ec1ab upgrade DOMpurify to 2.0.8 2020-02-04 18:43:35 +01:00
El RIDO
87423abd7c Fix ARIA for Editor/preview tabs. 2020-02-04 18:29:14 +01:00
El RIDO
347e7e03e1 Merge pull request #582 from RoiArthurB/patch-1
Update fr.json
2020-02-04 11:24:59 +01:00
Arthur Brugiere
6e08d8a497 Update fr.json
Fix missing translate + invalid translations
2020-02-04 14:54:47 +07:00
El RIDO
3fdd42487a fix FAQ links, tweaking the subtext display, add link to modern browser FAQ, fixes #577 2020-02-02 07:35:33 +01:00
El RIDO
2cbb8bf3ca in translation, allow links to be inserted unencoded into href attribute, simplfy sanitation by allowing only <a> tags in DOMpurify for plain text and comments and avoid DOMpurify removing magnet links, fixes #579 2020-02-02 07:08:38 +01:00
El RIDO
3996f82404 relax encoding of slashes just for plaintext display, so links can be detected 2020-02-01 16:30:41 +01:00
El RIDO
d7fd6667fd Merge branch 'displayEncoding2' 2020-02-01 16:16:05 +01:00
El RIDO
21ca30af3c apply StyleCI recommendation 2020-02-01 09:39:14 +01:00
El RIDO
1b206e8495 ensuring consistent use of php side encoding, testing all encoding cases, correctly report the language in the <html> tag 2020-02-01 09:15:14 +01:00
El RIDO
cc0920fc09 add HTML entity encoding to PHP translation logic, remove exception to allow <br/> tags in DOMpurify by eliminating the single case that made use of it 2020-02-01 08:46:59 +01:00
El RIDO
428ea2f34e adding test that expects parameters of php translation to get HTML entities to get encoded 2020-02-01 08:09:30 +01:00
El RIDO
f940f17bba Merge branch 'displayEncoding' 2020-02-01 07:53:32 +01:00
El RIDO
91003d6597 Merge remote-tracking branch 'origin/master' into displayEncoding 2020-02-01 07:52:48 +01:00
El RIDO
9a4018bffe jsverify rngState 8270695ec83abf412d was a false positive, due to incorrect test logic 2020-02-01 07:40:14 +01:00
El RIDO
8a6415ef5f fixing jsverify rngStates 0220439df7ec68a15b, 015c81b7afd06e4293 & 041e3d57692b08fc4a 2020-01-31 22:42:42 +01:00
El RIDO
b674c187a0 Merge pull request #578 from imtms/master
Update Chinese translation.
2020-01-31 21:34:34 +01:00
R4SAS
665192e27e Merge pull request #580 from mkromar/footer-link-fix-sl
Fixed info link in page footer of sl translation.
2020-01-31 19:02:31 +00:00
mkromar
b4256a986a Fixed info link in page footer of sl translation. 2020-01-31 19:47:24 +00:00
TMs
13b30608cb Update Chinese translation. 2020-01-31 12:36:02 +08:00
El RIDO
a86dd35ac3 Merge pull request #574 from PrivateBin/rugk-php-runner
Test PHP Composer runner of GitHub
2020-01-29 13:06:40 +01:00
rugk
19d0cace13 Merge branch 'readmeupdate' 2020-01-27 21:13:47 +01:00
rugk
d0589e77d4 Feature FAQ link in Readme & remove legacy things
* remove old ZeroBin 0.19 guide, this is so old already, few people will benefit from a direct link in the Readme. It stays in the wiki for those, who need it.
* add direct link to the FAQ - it's one of our best documentation/sources, so it's a shame it is not featured more prominently 😉
2020-01-27 15:28:40 +01:00
rugk
271c954f9a Test PHP Composer runner of GitHub
GitHub has these new CI/CD features, so let's test whether this makes sense.

I guess this PHP thing just installs the project via composer… 🤔
2020-01-26 23:25:24 +01:00
Erion
3f8cf1792d Switch to single quotes. 2020-01-26 18:08:59 +01:00
Erion
f6899785a9 Fix ARIA for Editor/preview tabs. 2020-01-25 18:47:18 +01:00
El RIDO
2d11d7b29e re-applying sprintf simplification and rephrased jsdoc block 2020-01-25 09:16:14 +01:00
El RIDO
29efc14aa7 Revert "implement simplified translation logic, forcing the use of safe application via jQuery element"
This reverts commit 62365880b4. The unit tests showed that the text2string function completely undid the XSS fix, so it was always unsafe to use it. Also the logic simplifications were smaller then expected.
2020-01-25 09:07:29 +01:00
El RIDO
62365880b4 implement simplified translation logic, forcing the use of safe application via jQuery element 2020-01-25 09:07:06 +01:00
El RIDO
aa3f1206b2 rewriting translations to pass jQuery element where easily possible 2020-01-25 08:13:36 +01:00
El RIDO
b160e5d1f8 Merge branch 'tupaschoal-translate-pt' 2020-01-22 20:15:20 +01:00
Tulio Leao
56ad0273e4 Update pt translation 2020-01-21 22:47:17 -03:00
El RIDO
83c29165ad Merge branch 'ensag-dev-master' 2020-01-21 19:02:05 +01:00
ensag-dev
39ee46caee Update for e-mail function 2020-01-21 08:11:16 +00:00
ensag-dev
774fea9230 Small corrections 2020-01-21 08:05:17 +00:00
El RIDO
1d8b0d6189 Merge branch 'rylebrun-mail_fr_translation' 2020-01-20 19:39:13 +01:00
El RIDO
72e96c7147 german translation of send to mail messages 2020-01-20 19:38:52 +01:00
El RIDO
1ae4f4f0fc updating all languages with missing translation, addresses failing unit test in previous commit 2020-01-20 19:24:28 +01:00
rylebrun
28c387074f Add mail fr translation for buttons 2020-01-20 12:11:03 +01:00
rylebrun
3993b47e06 Add mail fr translation 2020-01-20 12:03:11 +01:00
El RIDO
42130e0468 prevent potentially non-encoded string from getting returned 2020-01-18 10:53:58 +01:00
El RIDO
685c354d0e several changes:
- added tests for all 4 cases: output to string or into element vs first param contains link or not
- cleaned up logic - skip HTML entity encoding only if we can ensure insertion to text node / when output to string, we always encode
- DOMpurify sanitizes gopher, ws & wss links, which we previosly had tested for
2020-01-18 10:44:35 +01:00
El RIDO
fa9d3037ba fixing logic & indentation 2020-01-18 07:44:32 +01:00
El RIDO
7b87dc3ca9 cleanup revert 2020-01-18 07:36:43 +01:00
El RIDO
0d08edbe55 Revert "getting rid of htmlEntities (except for tests)" a0740ff79f 2020-01-18 07:30:01 +01:00
El RIDO
cec5cb41d7 Partial revert "Do not double-encode HTML in i18n", only revert the removal of required encoding logic - still has to be moved
This reverts commit 01414e43ca.
2020-01-18 07:20:05 +01:00
El RIDO
76eff6a87a Revert "[TEST] Try to disallow vulnerable cases" to remove accidentally committed file and statement that breaks the tests
This reverts commit ebc2d649c4.
2020-01-18 07:12:03 +01:00
El RIDO
fd4492f229 ensuring that both critical branches get tested 2020-01-18 07:09:56 +01:00
El RIDO
5daba16333 Merge branch 'ensag-dev-master' 2020-01-16 05:28:17 +01:00
rugk
eb549d70d1 Invert conatainsLink logic 2020-01-15 17:52:51 +01:00
ensag-dev
9f6c02276a Update Occitan translation 2020-01-14 16:24:53 +01:00
rugk
ebc2d649c4 [TEST] Try to disallow vulnerable cases 2020-01-13 19:56:15 +01:00
rugk
01414e43ca Do not double-encode HTML in i18n
This issue got introduced in 4bf7f86 due to double

Fixes https://github.com/PrivateBin/PrivateBin/issues/557
Fixes https://github.com/PrivateBin/PrivateBin/issues/558

Also _inverted_ the logic/variable name for containsNoLinks to
the more logical one "containsLinks" to avoid too many negations.

Also verified that the attachment name is stil properly displayed
when you clone a paste.
2020-01-13 19:17:30 +01:00
El RIDO
9aac073a49 clarifying for #525 that none is a string, as PHP might evaluate it to NULL instead 2020-01-09 05:42:42 +01:00
El RIDO
599264e167 partially address #556 - now comments can only be added after successfull decryption 2020-01-08 19:48:42 +01:00
El RIDO
ed590ee557 incrementing version 2020-01-08 19:31:06 +01:00
El RIDO
d73f8468d8 documenting changes for 1.2.2 2020-01-08 19:23:33 +01:00
El RIDO
ef8943d838 upgrading base-x library to 3.0.7 2020-01-07 20:11:12 +01:00
El RIDO
2fd649db14 upgrading showdown to released 1.9.1 version 2020-01-07 19:58:05 +01:00
El RIDO
11a7ac4e2b address new fixer in StyleCI causing false positives in templates 2020-01-07 19:39:22 +01:00
El RIDO
a9bf667f8e address error, displayed when paste has attachment, but configuration has them disabled 2020-01-04 13:33:03 +01:00
El RIDO
4bf7f863dc more general solution addressing #554, kudos @rugk for the suggestions 2020-01-04 13:14:53 +01:00
El RIDO
8d0ac336d2 addressing jsverifyRngState 8b8f0d4ec2a67139b5, fixes HTML injection via filename, closes #554 2019-12-25 09:14:32 +01:00
El RIDO
ddaee6486d Merge branch 'm1cr0man-master' 2019-12-25 08:16:33 +01:00
El RIDO
3485922366 documenting change 2019-12-25 08:16:17 +01:00
El RIDO
0efe6f7a8e simplify logic, fullfills the unit test 2019-12-25 08:11:25 +01:00
El RIDO
07a6e3094d adding unit tests for the new confi file env variable 2019-12-25 07:58:14 +01:00
Lucas Savva
7d9ec9509b Handle previously renamed CONFIG_PATH gracefully 2019-12-24 19:12:08 +00:00
Lucas Savva
d5d13fa831 Add logic to rename insecure CONFIG_PATH 2019-12-24 18:51:47 +00:00
Lucas Savva
13fb849973 Add CONFIG_PATH notes to INSTALL.md 2019-12-20 14:28:43 +00:00
Lucas Savva
b5c86e290f squashme: fix code style issue 2019-12-20 10:42:59 +00:00
Lucas Savva
6b0468ebff Add support for a CONFIG_PATH variable 2019-12-19 23:06:32 +00:00
El RIDO
825f6884be updating German translations 2019-12-07 08:26:51 +01:00
El RIDO
ee9e340de0 Merge branch 'qianmengnet-master' 2019-12-07 08:22:44 +01:00
El RIDO
2cbb86cefc adding missing translation IDs, kudos @qianmengnet for finding these 2019-12-07 08:22:29 +01:00
El RIDO
3923817f2b formatting of JSON, unicode tilde 2019-12-07 08:18:13 +01:00
Alex Lee
b00d8e4ad8 Update zh.json 2019-12-05 08:34:42 +08:00
Alex Lee
aa75e596c8 Update zh.json 2019-12-04 12:20:23 +08:00
El RIDO
787daccb78 Merge branch 'Haocen-543' 2019-11-29 19:12:36 +01:00
Haocen Xu
87cf61c39b Update SRI 2019-11-21 17:49:21 -05:00
Haocen Xu
853fd906cb Fix unnecessary closure capture 2019-11-21 17:43:10 -05:00
El RIDO
af8d963fd2 updating DOMpurify library, fixes #523 2019-11-02 17:31:45 +01:00
El RIDO
0ed238a775 Merge branch 'AndriiZ-master' 2019-11-02 17:21:22 +01:00
El RIDO
8cf0c86ebb simplify case statement, update documentation 2019-11-02 17:18:22 +01:00
El RIDO
b23fd48d49 Merge branch 'master' of https://github.com/AndriiZ/PrivateBin into AndriiZ-master 2019-11-02 17:11:05 +01:00
El RIDO
ffe26a8841 Merge branch 'Haocen-398' 2019-11-02 17:04:19 +01:00
El RIDO
0b6139fb42 updating change log and optimizing png 2019-11-02 17:03:40 +01:00
Haocen Xu
7d7ff34d83 Update SRI 2019-10-31 15:07:24 -04:00
Haocen Xu
e079f6c830 Implement Email button 2019-10-31 15:07:13 -04:00
Haocen Xu
63fdd2eba3 Fix missing semi colon 2019-10-30 14:04:10 -04:00
El RIDO
759113f453 Merge branch 'Haocen-527' 2019-10-26 06:04:39 +02:00
El RIDO
7255cd29a7 documenting change 2019-10-26 06:04:21 +02:00
El RIDO
13afa7fe21 Merge branch '527' of https://github.com/Haocen/PrivateBin-Contribute into Haocen-527 2019-10-26 06:01:39 +02:00
El RIDO
00a9e36c59 incrementing version 2019-10-26 06:01:24 +02:00
Haocen Xu
6fc4303acc Update SRI 2019-10-25 13:09:07 -04:00
Haocen Xu
56222d6cfb Bugfix when password is disabled in config no new paste can be
created
2019-10-25 13:05:09 -04:00
Andriy Zhuk
65b7077756 Added plural rules for ukrainian 2019-10-18 12:31:40 +03:00
Andriy Zhuk
03138bcde5 Fixed ... with … 2019-10-18 12:27:40 +03:00
Andriy Zhuk
7e9e3155a8 Fixed few typos 2019-10-17 17:20:00 +03:00
Andriy Zhuk
2b3b47c59d Removed line 2019-10-17 16:03:37 +03:00
Andriy Zhuk
8fc85bc39c Added line 2019-10-17 15:33:12 +03:00
Andriy Zhuk
92571512bf Added ukrainian localization 2019-10-17 15:24:33 +03:00
El RIDO
d3153b5e38 trying to fix travis on PHP 5 by removing composer.lock that depends on imcompatible phpunit version 2019-09-22 22:04:17 +02:00
146 changed files with 12481 additions and 4590 deletions

4
.gitattributes vendored
View File

@@ -16,9 +16,13 @@ js/test/ export-ignore
.jshintrc export-ignore .jshintrc export-ignore
.nsprc export-ignore .nsprc export-ignore
.php_cs export-ignore .php_cs export-ignore
.scrutinizer.yml export-ignore
.styleci.yml export-ignore .styleci.yml export-ignore
.travis.yml export-ignore .travis.yml export-ignore
codacy-analysis.yml export-ignore
crowdin.yml export-ignore
composer.json export-ignore composer.json export-ignore
composer.lock export-ignore composer.lock export-ignore
BADGES.md export-ignore BADGES.md export-ignore
CODE_OF_CONDUCT.md export-ignore CODE_OF_CONDUCT.md export-ignore
Makefile export-ignore

49
.github/workflows/codeql-analysis.yml vendored Normal file
View File

@@ -0,0 +1,49 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# Currently can only check JS.
#
name: "CodeQL"
on:
push:
branches: [ master ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master ]
schedule:
- cron: '28 22 * * 5'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: [ 'javascript' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

29
.github/workflows/snyk-scan.yml vendored Normal file
View File

@@ -0,0 +1,29 @@
# This is a basic workflow to help you get started with Actions
name: Snyk scan
on:
# Triggers the workflow on push or pull request events but only for the master branch
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
# https://github.com/snyk/actions/tree/master/php
snyk-php:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Install Google Cloud Storage
run: composer require --no-update google/cloud-storage && composer update --no-dev
- name: Run Snyk to check for vulnerabilities
uses: snyk/actions/php@master
continue-on-error: true # To make sure that SARIF upload gets called
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --sarif-file-output=snyk.sarif
- name: Upload result to GitHub Code Scanning
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: snyk.sarif

54
.github/workflows/tests.yml vendored Normal file
View File

@@ -0,0 +1,54 @@
name: Tests
on: [push]
jobs:
Composer:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- 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']
name: PHP ${{ matrix.php-versions }} unit tests on ${{ matrix.operating-system }}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
extensions: gd, sqlite3
- name: Remove composer lock
run: rm composer.lock
- name: Setup PHPunit
run: composer install -n
- name: Install Google Cloud Storage
run: composer require google/cloud-storage
- name: Run unit tests
run: ../vendor/bin/phpunit --no-coverage
working-directory: tst
Mocha:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup Node
uses: actions/setup-node@v1
with:
node-version: '12'
- name: Setup Mocha
run: npm install -g mocha
- name: Setup Node modules
run: npm install
working-directory: js
- name: Run unit tests
run: mocha
working-directory: js

4
.gitignore vendored
View File

@@ -6,7 +6,7 @@ cfg/*
!cfg/.htaccess !cfg/.htaccess
# Ignore data/ # Ignore data/
data/ /data/
# Ignore PhpDoc # Ignore PhpDoc
doc/* doc/*
@@ -36,3 +36,5 @@ tst/ConfigurationCombinationsTest.php
.project .project
.externalToolBuilders .externalToolBuilders
.c9 .c9
/.idea/
*.iml

36
.scrutinizer.yml Normal file
View File

@@ -0,0 +1,36 @@
checks:
php: true
javascript: true
filter:
paths:
- "css/privatebin.css"
- "css/bootstrap/privatebin.css"
- "js/privatebin.js"
- "lib/*.php"
- "index.php"
coding_style:
php:
spaces:
around_operators:
additive: false
concatenation: true
build:
environment:
php:
version: '7.2'
tests:
override:
-
command: 'composer require google/cloud-storage && cd tst && ../vendor/bin/phpunit'
coverage:
file: 'tst/log/coverage-clover.xml'
format: 'clover'
nodes:
tests: true
analysis:
tests:
override:
-
command: phpcs-run
use_website_config: true
- php-scrutinizer-run

View File

@@ -17,8 +17,9 @@ disabled:
- concat_without_spaces - concat_without_spaces
- declare_equal_normalize - declare_equal_normalize
- heredoc_to_nowdoc - heredoc_to_nowdoc
- method_argument_space - method_argument_space_strict
- new_with_braces - new_with_braces
- no_alternative_syntax
- phpdoc_align - phpdoc_align
- phpdoc_no_access - phpdoc_no_access
- phpdoc_separation - phpdoc_separation

View File

@@ -1,37 +0,0 @@
language: php
sudo: false
# only needed for PHP 5.5 support as of 2019-07
dist: trusty
php:
- '5.5'
- '5.6'
- '7.0'
- '7.1'
- '7.2'
- '7.3'
# as this is a php project, node.js (for JS unit testing) isn't installed
install:
- if [ ! -d "$HOME/.nvm" ]; then mkdir -p $HOME/.nvm && curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | NVM_METHOD=script bash; fi
- source ~/.nvm/nvm.sh && nvm install --lts
before_script:
- composer install -n
- npm install -g mocha
- cd js && npm install
script:
- mocha
- cd ../tst && ../vendor/bin/phpunit
after_script:
- ../vendor/bin/test-reporter --coverage-report log/coverage-clover.xml
- cd .. && vendor/bin/codacycoverage clover tst/log/coverage-clover.xml
cache:
directories:
- $HOME/.composer/cache/files
- $HOME/.composer/cache/vcs
- $HOME/.nvm
- $HOME/.npm
- js/node_modules

View File

@@ -1,6 +1,61 @@
# PrivateBin version history # PrivateBin version history
* **1.4 (not yet released)** * **1.4 (not yet released)**
* ADDED: Translation for Estonian
* 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)
* CHANGED: Language selection cookie only transmitted over HTTPS (#472)
* CHANGED: Upgrading libraries to: random_compat 2.0.20
* 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)
* **1.3.5 (2021-04-05)**
* ADDED: Translation 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, 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)** * **1.3.1 (2019-09-22)**
* ADDED: Translation for Bulgarian (#455) * ADDED: Translation for Bulgarian (#455)
* CHANGED: Improved mobile UI - obscured send button and hard to click shortener button (#477) * CHANGED: Improved mobile UI - obscured send button and hard to click shortener button (#477)

View File

@@ -13,7 +13,7 @@ Sébastien Sauvage - original idea and main developer
* Alexey Gladkov - syntax highlighting * Alexey Gladkov - syntax highlighting
* Greg Knaddison - robots.txt * Greg Knaddison - robots.txt
* MrKooky - HTML5 markup, CSS cleanup * MrKooky - HTML5 markup, CSS cleanup
* Simon Rupf - WebCrypto, unit tests, current docker containers, MVC, configuration, i18n * Simon Rupf - WebCrypto, unit tests, containers images, database backend, MVC, configuration, i18n
* Hexalyse - Password protection * Hexalyse - Password protection
* Viktor Stanchev - File upload support * Viktor Stanchev - File upload support
* azlux - Tab character input support * azlux - Tab character input support
@@ -26,6 +26,9 @@ Sébastien Sauvage - original idea and main developer
* thororm - Display of video, audio & PDF, drag & drop, preview of attachments * thororm - Display of video, audio & PDF, drag & drop, preview of attachments
* Harald Leithner - base58 encoding of key * Harald Leithner - base58 encoding of key
* Haocen - lots of bugfixes and UI improvements * Haocen - lots of bugfixes and UI improvements
* Lucas Savva - configurable config file location, NixOS packaging
* rodehoed - option to exempt ips from the rate-limiter
* Mark van Holsteijn - Google Cloud Storage backend
## Translations ## Translations
* Hexalyse - French * Hexalyse - French
@@ -43,4 +46,10 @@ Sébastien Sauvage - original idea and main developer
* Michael van Schaik - Dutch * Michael van Schaik - Dutch
* Péter Tabajdi - Hungarian * Péter Tabajdi - Hungarian
* info-path - Czech * info-path - Czech
* BigWax - Bulgarian * BigWax - Bulgarian
* AndriiZ - Ukrainian
* Yaron Shahrabani - Hebrew
* Moo - Lithuanian
* whenwesober - Indonesian
* retiolus - Catalan
* sarnane - Estonian

View File

@@ -9,21 +9,21 @@ options](#configuration) to adjust as you see fit.
**NOTE:** See [our FAQ](https://github.com/PrivateBin/PrivateBin/wiki/FAQ#how-can-i-securely-clonedownload-your-project) for information how to securely download the PrivateBin release files. **NOTE:** See [our FAQ](https://github.com/PrivateBin/PrivateBin/wiki/FAQ#how-can-i-securely-clonedownload-your-project) for information how to securely download the PrivateBin release files.
**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)).
### Minimal requirements ### Minimal requirements
- PHP version 5.5 or above - PHP version 7.0 or above
- _one_ of the following sources of cryptographically safe randomness is required: - Or PHP version 5.6 AND _one_ of the following sources of cryptographically safe randomness:
- PHP 7 or higher - [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)
- [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`
- open_basedir access to `/dev/urandom` - mcrypt extension (mcrypt needs to be able to access `/dev/urandom`. This means if `open_basedir` is set, it must include this file.)
- mcrypt extension - com_dotnet extension
- com_dotnet extension
Mcrypt needs to be able to access `/dev/urandom`. This means if `open_basedir` is set, it must include this file.
- GD extension - GD extension
- some disk space or (optionally) a database supported by [PDO](https://secure.php.net/manual/book.pdo.php) - zlib extension
- some disk space or (optionally) a database supported by [PDO](https://php.net/manual/book.pdo.php)
- ability to create files and folders in the installation directory and the PATH defined in index.php - ability to create files and folders in the installation directory and the PATH defined in index.php
- A web browser with javascript support - A web browser with JavaScript support
## Hardening and security ## Hardening and security
@@ -43,17 +43,38 @@ process (see also
> >
> The full path of PrivateBin on your webserver is: > The full path of PrivateBin on your webserver is:
> /home/example.com/htdocs/paste > /home/example.com/htdocs/paste
> >
> When setting the path like this: > When setting the path like this:
> define('PATH', '../../secret/privatebin/'); > define('PATH', '../../secret/privatebin/');
> >
> PrivateBin will look for your includes / data here: > PrivateBin will look for your includes / data here:
> /home/example.com/secret/privatebin > /home/example.com/secret/privatebin
### Changing the config path only
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 instance, you can set the
`CONFIG_PATH` environment variable to the absolute path to 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.
Note that your PHP process will need read access to the config wherever it may be.
> #### CONFIG_PATH example
> Setting the value in an Apache Vhost:
> SetEnv CONFIG_PATH /var/lib/privatebin/conf.php
>
> In a php-fpm pool config:
> env[CONFIG_PATH] = /var/lib/privatebin/conf.php
>
> In the index.php, near the top:
> putenv('CONFIG_PATH=/var/lib/privatebin/conf.php');
### Transport security ### Transport security
When setting up PrivateBin, also set up HTTPS, if you haven't already. Without HTTPS When setting up PrivateBin, also set up HTTPS, if you haven't already. Without HTTPS
PrivateBin is not secure, as the javascript files could be manipulated during transmission. PrivateBin is not secure, as the JavaScript files could be manipulated during transmission.
For more information on this, see our [FAQ entry on HTTPS setup](https://github.com/PrivateBin/PrivateBin/wiki/FAQ#how-should-i-setup-https). For more information on this, see our [FAQ entry on HTTPS setup](https://github.com/PrivateBin/PrivateBin/wiki/FAQ#how-should-i-setup-https).
### File-level permissions ### File-level permissions
@@ -66,8 +87,9 @@ See [this FAQ item](https://github.com/PrivateBin/PrivateBin/wiki/FAQ#what-are-t
In the file `cfg/conf.php` you can configure PrivateBin. A `cfg/conf.sample.php` In the file `cfg/conf.php` you can configure PrivateBin. A `cfg/conf.sample.php`
is provided containing all options and default values. You can copy it to is provided containing all options and default values. You can copy it to
`cfg/conf.php` and adapt it as needed. The config file is divided into multiple `cfg/conf.php` and adapt it as needed. Alternatively you can copy it anywhere and
sections, which are enclosed in square brackets. set the `CONFIG_PATH` environment variable (see above notes). The config file is
divided into multiple sections, which are enclosed in square brackets.
In the `[main]` section you can enable or disable the discussion feature, set In the `[main]` section you can enable or disable the discussion feature, set
the limit of stored pastes and comments in bytes. The `[traffic]` section lets the limit of stored pastes and comments in bytes. The `[traffic]` section lets
@@ -165,7 +187,24 @@ CREATE INDEX parent ON prefix_comment(pasteid);
CREATE TABLE prefix_config ( CREATE TABLE prefix_config (
id CHAR(16) NOT NULL, value TEXT, PRIMARY KEY (id) id CHAR(16) NOT NULL, value TEXT, PRIMARY KEY (id)
); );
INSERT INTO prefix_config VALUES('VERSION', '1.3.1'); INSERT INTO prefix_config VALUES('VERSION', '1.3.5');
``` ```
In **PostgreSQL**, the data, attachment, nickname and vizhash columns needs to be TEXT and not BLOB or MEDIUMBLOB. In **PostgreSQL**, the data, attachment, nickname and vizhash columns needs to
be TEXT and not BLOB or MEDIUMBLOB.
### 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 PASTEBIN_GCS_BUCKET.
The default prefix for pastes stored in the bucket is `pastes`. To change the
prefix, specify the option `prefix`.
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`.

56
Makefile Normal file
View File

@@ -0,0 +1,56 @@
.PHONY: all coverage coverage-js coverage-php doc doc-js doc-php increment sign test test-js test-php help
CURRENT_VERSION = 1.3.5
VERSION ?= 1.3.6
VERSION_FILES = index.php cfg/ *.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")
all: coverage doc ## Equivalent to running `make coverage doc`.
composer: ## Update composer dependencies (only production ones, optimize the autoloader)
composer update --no-dev --optimize-autoloader
coverage: coverage-js coverage-php ## Run all unit tests and generate code coverage reports.
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
doc: doc-js doc-php ## Generate all code documentation.
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/
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`; \
do \
sed -i "s/$(REGEX_CURRENT_VERSION)/$(REGEX_VERSION)/g" $$F; \
done
git add $(VERSION_FILES)
git commit -m "incrementing version"
sign: ## Sign a release.
git tag $(VERSION)
git push --tags
signrelease.sh
test: test-js test-php ## Run all unit tests.
test-js: ## Run JS unit tests.
cd js && mocha
test-php: ## Run PHP unit tests.
cd tst && phpunit --no-coverage
help: ## Displays these usage instructions.
@echo "Usage: make <target(s)>"
@echo
@echo "Specify one or multiple of the following targets and they will be processed in the given order:"
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "%-16s%s\n", $$1, $$2}' $(MAKEFILE_LIST)

View File

@@ -1,6 +1,6 @@
# [![PrivateBin](https://cdn.rawgit.com/PrivateBin/assets/master/images/preview/logoSmall.png)](https://privatebin.info/) # [![PrivateBin](https://cdn.rawgit.com/PrivateBin/assets/master/images/preview/logoSmall.png)](https://privatebin.info/)
*Current version: 1.3.1* *Current version: 1.3.5*
**PrivateBin** is a minimalist, open source online [pastebin](https://en.wikipedia.org/wiki/Pastebin) **PrivateBin** is a minimalist, open source online [pastebin](https://en.wikipedia.org/wiki/Pastebin)
where the server has zero knowledge of pasted data. where the server has zero knowledge of pasted data.
@@ -37,9 +37,7 @@ without losing any data.
Otherwise you would also have to trust your internet provider, and any country Otherwise you would also have to trust your internet provider, and any country
the traffic passes through. the traffic passes through.
Additionally the instance should be secured by Additionally the instance should be secured by
[HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) and [HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security). It can use traditional certificate authorities and/or use
ideally by [HPKP](https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning) using a
certificate. It can use traditional certificate authorities and/or use
[DNSSEC](https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions) [DNSSEC](https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions)
protected protected
[DANE](https://en.wikipedia.org/wiki/DNS-based_Authentication_of_Named_Entities) [DANE](https://en.wikipedia.org/wiki/DNS-based_Authentication_of_Named_Entities)
@@ -95,9 +93,9 @@ file](https://github.com/PrivateBin/PrivateBin/wiki/Configuration):
## Further resources ## Further resources
* [Installation guide](https://github.com/PrivateBin/PrivateBin/blob/master/INSTALL.md#installation) * [FAQ](https://github.com/PrivateBin/PrivateBin/wiki/FAQ)
* [Upgrading from ZeroBin 0.19 Alpha](https://github.com/PrivateBin/PrivateBin/wiki/Upgrading-from-ZeroBin-0.19-Alpha) * [Installation guide](https://github.com/PrivateBin/PrivateBin/blob/master/INSTALL.md#installation)
* [Configuration guide](https://github.com/PrivateBin/PrivateBin/wiki/Configuration) * [Configuration guide](https://github.com/PrivateBin/PrivateBin/wiki/Configuration)

View File

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

View File

@@ -7,6 +7,10 @@
; (optional) set a project name to be displayed on the website ; (optional) set a project name to be displayed on the website
; name = "PrivateBin" ; name = "PrivateBin"
; The full URL, with the domain name and directories that point to the PrivateBin files
; This URL is essential to allow Opengraph images to be displayed on social networks
; basepath = ""
; enable or disable the discussion feature, defaults to true ; enable or disable the discussion feature, defaults to true
discussion = true discussion = true
@@ -35,6 +39,10 @@ sizelimit = 10485760
; template to include, default is "bootstrap" (tpl/bootstrap.php) ; template to include, default is "bootstrap" (tpl/bootstrap.php)
template = "bootstrap" template = "bootstrap"
; (optional) info text to display
; use single, instead of double quotes for HTML attributes
;info = "More information on the <a href='https://privatebin.info/'>project page</a>."
; (optional) notice to display ; (optional) notice to display
; notice = "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service." ; notice = "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service."
@@ -60,8 +68,8 @@ languageselection = false
; a different user when the same username was used in a comment. It might be ; a different user when the same username was used in a comment. It might be
; used to get the IP of a non anonymous comment poster if the server salt is ; used to get the IP of a non anonymous comment poster if the server salt is
; leaked and a SHA256 HMAC rainbow table is generated for all (relevant) IPs. ; leaked and a SHA256 HMAC rainbow table is generated for all (relevant) IPs.
; Can be set to one these values: none / vizhash / identicon (default). ; Can be set to one these values: "none" / "vizhash" / "identicon" (default).
; icon = none ; icon = "none"
; Content Security Policy headers allow a website to restrict what sources are ; Content Security Policy headers allow a website to restrict what sources are
; allowed to be accessed in its context. You need to change this if you added ; allowed to be accessed in its context. You need to change this if you added
@@ -79,7 +87,7 @@ languageselection = false
; async functions and display an error if not and for Chrome to enable ; async functions and display an error if not and for Chrome to enable
; webassembly support (used for zlib compression). You can remove it if Chrome ; webassembly support (used for zlib compression). You can remove it if Chrome
; doesn't need to be supported and old browsers don't need to be warned. ; doesn't need to be supported and old browsers don't need to be warned.
; cspheader = "default-src 'none'; manifest-src 'self'; connect-src * blob:; script-src 'self' 'unsafe-eval'; style-src 'self'; font-src 'self'; img-src 'self' data: blob:; media-src blob:; object-src blob:; sandbox allow-same-origin allow-scripts allow-forms allow-popups allow-modals" ; cspheader = "default-src 'none'; base-uri 'self'; form-action 'none'; manifest-src 'self'; connect-src * blob:; script-src 'self' resource:; style-src 'self'; font-src 'self'; img-src 'self' data: blob:; media-src blob:; object-src blob:; sandbox allow-same-origin allow-scripts allow-forms allow-popups allow-modals allow-downloads"
; stay compatible with PrivateBin Alpha 0.19, less secure ; stay compatible with PrivateBin Alpha 0.19, less secure
; if enabled will use base64.js version 1.7 instead of 2.1.9 and sha1 instead of ; if enabled will use base64.js version 1.7 instead of 2.1.9 and sha1 instead of
@@ -95,8 +103,8 @@ languageselection = false
; Pick compression algorithm or disable it. Only applies to pastes/comments ; Pick compression algorithm or disable it. Only applies to pastes/comments
; created after changing the setting. ; created after changing the setting.
; Can be set to one these values: none / zlib (default). ; Can be set to one these values: "none" / "zlib" (default).
; compression = zlib ; compression = "zlib"
[expire] [expire]
; expire value that is selected per default ; expire value that is selected per default
@@ -127,13 +135,14 @@ markdown = "Markdown"
; Set this to 0 to disable rate limiting. ; Set this to 0 to disable rate limiting.
limit = 10 limit = 10
; Set ips (v4|v6) which should be exempted for the rate-limit. CIDR also supported. Needed to be comma separated.
; Unset for enabling and invalid values will be ignored
; eg: exemptedIp = '1.2.3.4,10.10.10/24'
; (optional) if your website runs behind a reverse proxy or load balancer, ; (optional) if your website runs behind a reverse proxy or load balancer,
; set the HTTP header containing the visitors IP address, i.e. X_FORWARDED_FOR ; set the HTTP header containing the visitors IP address, i.e. X_FORWARDED_FOR
; header = "X_FORWARDED_FOR" ; header = "X_FORWARDED_FOR"
; directory to store the traffic limits in
dir = PATH "data"
[purge] [purge]
; minimum time limit between two purgings of expired pastes, it is only ; minimum time limit between two purgings of expired pastes, it is only
; triggered when pastes are created ; triggered when pastes are created
@@ -145,9 +154,6 @@ limit = 300
; site ; site
batchsize = 10 batchsize = 10
; directory to store the purge limit in
dir = PATH "data"
[model] [model]
; name of data model class to load and directory for storage ; name of data model class to load and directory for storage
; the default model "Filesystem" stores everything in the filesystem ; the default model "Filesystem" stores everything in the filesystem
@@ -155,6 +161,13 @@ class = Filesystem
[model_options] [model_options]
dir = PATH "data" dir = PATH "data"
[model]
; example of a Google Cloud Storage configuration
;class = GoogleCloudStorage
;[model_options]
;bucket = "my-private-bin"
;prefix = "pastes"
;[model] ;[model]
; example of DB configuration for MySQL ; example of DB configuration for MySQL
;class = Database ;class = Database

49
codacy-analysis.yml Normal file
View File

@@ -0,0 +1,49 @@
# This workflow checks out code, performs a Codacy security scan
# and integrates the results with the
# GitHub Advanced Security code scanning feature. For more information on
# the Codacy security scan action usage and parameters, see
# https://github.com/codacy/codacy-analysis-cli-action.
# For more information on Codacy Analysis CLI in general, see
# https://github.com/codacy/codacy-analysis-cli.
name: Codacy Security Scan
on:
push:
branches: [ master ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master ]
schedule:
- cron: '45 16 * * 1'
jobs:
codacy-security-scan:
name: Codacy Security Scan
runs-on: ubuntu-latest
steps:
# Checkout the repository to the GitHub Actions runner
- name: Checkout code
uses: actions/checkout@v2
# Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis
- name: Run Codacy Analysis CLI
uses: codacy/codacy-analysis-cli-action@1.1.0
with:
# Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository
# You can also omit the token and run the tools that support default configurations
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
verbose: true
output: results.sarif
format: sarif
# Adjust severity of non-security issues
gh-code-scanning-compat: true
# Force 0 exit code to allow SARIF file generation
# This will handover control about PR rejection to the GitHub side
max-allowed-issues: 2147483647
# Upload the SARIF file generated in the previous step
- name: Upload SARIF results file
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: results.sarif

View File

@@ -24,13 +24,15 @@
"docs" : "https://privatebin.info/codedoc/" "docs" : "https://privatebin.info/codedoc/"
}, },
"require" : { "require" : {
"php" : "^5.5.0 || ^7.0", "php" : "^5.6.0 || ^7.0 || ^8.0",
"paragonie/random_compat" : "2.0.18", "paragonie/random_compat" : "2.0.20",
"yzalis/identicon" : "1.2.0" "yzalis/identicon" : "2.0.0",
"mlocati/ip-lib" : "1.14.0"
},
"suggest" : {
"google/cloud-storage" : "1.23.1"
}, },
"require-dev" : { "require-dev" : {
"codacy/coverage" : "dev-master",
"codeclimate/php-test-reporter" : "dev-master",
"phpunit/phpunit" : "^4.6 || ^5.0" "phpunit/phpunit" : "^4.6 || ^5.0"
}, },
"autoload" : { "autoload" : {

1511
composer.lock generated

File diff suppressed because it is too large Load Diff

3
crowdin.yml Normal file
View File

@@ -0,0 +1,3 @@
files:
- source: /i18n/en.json
translation: /i18n/%two_letters_code%.json

View File

@@ -6,7 +6,7 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
body { body {
@@ -180,3 +180,28 @@ li.L0, li.L1, li.L2, li.L3, li.L5, li.L6, li.L7, li.L8 {
padding-right: 4ch; padding-right: 4ch;
} }
} }
.modal-dialog {
margin: auto !important;
}
/* makeup for the original margin on modal-dialog */
@media (min-width: 768px) {
.modal-content {
margin: 30px 0;
}
}
.modal-content {
margin: 10px;
}
.modal-body {
display: flex;
justify-content: center;
align-items: center;
}
.modal .modal-content button {
margin: 0.5em 0;
}

View File

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

View File

@@ -6,7 +6,7 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
/* CSS Reset from YUI 3.4.1 (build 4118) - Copyright 2011 Yahoo! Inc. All rights reserved. /* CSS Reset from YUI 3.4.1 (build 4118) - Copyright 2011 Yahoo! Inc. All rights reserved.
@@ -249,6 +249,10 @@ button img {
padding: 1px 0 1px 0; padding: 1px 0 1px 0;
} }
#downloadtextbutton img {
padding: 1px 0 1px 0;
}
#remainingtime, #password { #remainingtime, #password {
color: #94a3b4; color: #94a3b4;
display: inline; display: inline;

189
i18n/ar.json Normal file
View File

@@ -0,0 +1,189 @@
{
"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.",
"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)"
],
"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",
"%d seconds": [
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
],
"%d minutes": [
"%d minute (singular)",
"%d minutes (1st plural)",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
],
"%d hours": [
"%d hour (singular)",
"%d hours (1st plural)",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
],
"%d days": [
"%d day (singular)",
"%d days (1st plural)",
"%d days (2nd plural)",
"%d days (3rd plural)"
],
"%d weeks": [
"%d week (singular)",
"%d weeks (1st plural)",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
],
"%d months": [
"%d month (singular)",
"%d months (1st plural)",
"%d months (2nd plural)",
"%d months (3rd plural)"
],
"%d years": [
"%d year (singular)",
"%d years (1st plural)",
"%d years (2nd plural)",
"%d years (3rd plural)"
],
"Never": "Never",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.",
"This document will expire in %d seconds.": [
"This document will expire in %d second. (singular)",
"This document will expire in %d seconds. (1st plural)",
"This document will expire in %d seconds. (2nd plural)",
"This document will expire in %d seconds. (3rd plural)"
],
"This document will expire in %d 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 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 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 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)"
],
"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 PrivateBin": "Encrypted note on PrivateBin",
"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"
}

View File

@@ -1,125 +1,144 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://privatebin.info/\">project page</a>.": "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s е изчистен и изцяло достъпен като отворен код, онлайн \"paste\" услуга, където сървъра не знае подадената информация. Тя се шифрова/дешифрова %sвъв браузъра%s използвайки 256 битов AES алгоритъм.",
"%s е изчистен и изцяло достъпен като отворен код, онлайн \"paste\" услуга, където сървъра не знае подадената информация. Тя се шифрова/дешифрова <i>във браузъра</i> използвайки 256 битов AES алгоритъм. Повече информация може да намерите на <a href=\"https://privatebin.info/\">страницата на проекта (Английски)</a>", "More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Повече информация може да намерите на <a href=\"https://privatebin.info/\">страницата на проекта (Английски)</a>.",
"Because ignorance is bliss": "Because ignorance is bliss": "Невежеството е блаженство",
"Невежеството е блаженство",
"en": "bg", "en": "bg",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.": "Информацията не съществува, срокът и е изтекъл или е била изтрита.",
"Информацията не съществува, срокът и е изтекъл или е била изтрита.", "%s requires php %s or above to work. Sorry.": "%s има нужда от PHP %s или по-нова, за да работи. Съжалявам.",
"%s requires php %s or above to work. Sorry.": "%s requires configuration section [%s] to be present in configuration file.": "%s задължава отдела от настройките [%s] да съществува във файла със настройките.",
"%s има нужда от PHP %s или по-нова, за да работи. Съжалявам.", "Please wait %d seconds between each post.": [
"%s requires configuration section [%s] to be present in configuration file.": "Моля изчакайте една секунда между всяка публикация.",
"%s задължава отдела от настройките [%s] да съществува във файла със настройките.",
"Please wait %d seconds between each post.":
"Моля изчакайте %d секунди между всяка публикация.", "Моля изчакайте %d секунди между всяка публикация.",
"Paste is limited to %s of encrypted data.": "Моля изчакайте %d секунди между всяка публикация.",
"Съдържанието е ограничено до %s криптирана информация.", "Моля изчакайте %d секунди между всяка публикация."
"Invalid data.": ],
"Невалидна информация.", "Paste is limited to %s of encrypted data.": "Съдържанието е ограничено до %s криптирана информация.",
"You are unlucky. Try again.": "Invalid data.": "Невалидна информация.",
"Нямаш късмет. Пробвай отново.", "You are unlucky. Try again.": "Нямаш късмет. Пробвай отново.",
"Error saving comment. Sorry.": "Error saving comment. Sorry.": "Грешка в запазването на коментара. Съжалявам.",
"Грешка в запазването на коментара. Съжалявам.", "Error saving paste. Sorry.": "Грешка в записването на информацията. Съжалявам.",
"Error saving paste. Sorry.": "Invalid paste ID.": "Невалиден идентификационен код.",
"Грешка в записването на информацията. Съжалявам.", "Paste is not of burn-after-reading type.": "Информацията не е от тип \"унищожаване след преглед\".",
"Invalid paste ID.": "Wrong deletion token. Paste was not deleted.": "Невалиден код за изтриване. Информацията Ви не беше изтрита.",
"Невалиден идентификационен код.", "Paste was properly deleted.": "Информацията Ви е изтрита.",
"Paste is not of burn-after-reading type.": "JavaScript is required for %s to work. Sorry for the inconvenience.": "Услугата %s се нуждае от JavaScript, за да работи. Съжаляваме за неудобството.",
"Информацията не е от тип \"унищожаване след преглед\".", "%s requires a modern browser to work.": "%s се нуждае от съвременен браузър за да работи.",
"Wrong deletion token. Paste was not deleted.": "New": "Създаване",
"Невалиден код за изтриване. Информацията Ви не беше изтрита.", "Send": "Изпрати",
"Paste was properly deleted.": "Clone": "Дублирай",
"Информацията Ви е изтрита.", "Raw text": "Чист текст",
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.": "Expires": "Изтича",
"Услугата %s се нуждае от JavaScript, за да работи.<br />Съжаляваме за неудобството.", "Burn after reading": "Унищожи след преглед",
"%s requires a modern browser to work.": "Open discussion": "Отворена дискусия",
"%s се нуждае от съвременен браузър за да работи.", "Password (recommended)": "Парола (препоръчва се)",
"New": "Discussion": "Коментари",
"Създаване", "Toggle navigation": "Включи или Изключи навигацията",
"Send": "%d seconds": [
"Изпрати", "%d секунди",
"Clone": "%d секунда",
"Дублирай", "%d секунда",
"Raw text": "%d секунда"
"Чист текст", ],
"Expires": "%d minutes": [
"Изтича", "%d минути",
"Burn after reading": "%d минута",
"Унищожи след преглед", "%d минута",
"Open discussion": "%d минута"
"Отворена дискусия", ],
"Password (recommended)": "%d hours": [
"Парола (препоръчва се)", "%d часа",
"Discussion": "%d час",
"Коментари", "%d час",
"Toggle navigation": "%d час"
"Включи или Изключи навигацията", ],
"%d seconds": ["%d секунди", "%d секунда"], "%d days": [
"%d minutes": ["%d минути", "%d минута"], "%d дни",
"%d hours": ["%d часа", "%d час"], "%d ден",
"%d days": ["%d дни", "%d ден"], "%d ден",
"%d weeks": ["%d седмици", "%d седмица"], "%d ден"
"%d months": ["%d месеци", "%d месец"], ],
"%d years": ["%d години", "%d година"], "%d weeks": [
"Never": "%d седмици",
"Никога", "%d седмица",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "%d седмица",
"Забележка: Това е пробна услуга: Информацията може да бъде изтрита по всяко време. Котета ще измрат ако злоупотребиш с услугата.", "%d седмица"
"This document will expire in %d seconds.": ],
["Този документ изтича след една секунда.", "Този документ изтича след %d секунди."], "%d months": [
"This document will expire in %d minutes.": "%d месеци",
["Този документ изтича след една минута.", "Този документ изтича след %d минути."], "%d месец",
"This document will expire in %d hours.": "%d месец",
["Този документ изтича след един час.", "Този документ изтича след %d часа."], "%d месец"
"This document will expire in %d days.": ],
["Този документ изтича след един ден.", "Този документ изтича след %d дни."], "%d years": [
"This document will expire in %d months.": "%d години",
["Този документ изтича след една година.", "Този документ изтича след %d години."], "%d година",
"Please enter the password for this paste:": "%d година",
"Моля въведете паролата за това съдържание:", "%d година"
"Could not decrypt data (Wrong key?)": ],
"Информацията не можеше да се дешифрова (Грешен ключ?)", "Never": "Никога",
"Could not delete the paste, it was not stored in burn after reading mode.": "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.": [
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "Този документ изтича след една секунда.",
"САМО ЗА ВАШИТЕ ОЧИ. Не затваряйте прозореца, понеже тази информация няма да може да бъде показана отново.", "Този документ изтича след %d секунди.",
"Could not decrypt comment; Wrong key?": "Този документ изтича след %d секунди.",
"Дешифроването на коментара беше неуспешно. Грешен ключ?", "Този документ изтича след %d секунди."
"Reply": ],
"Отговор", "This document will expire in %d minutes.": [
"Anonymous": "Този документ изтича след една минута.",
"Безименен", "Този документ изтича след %d минути.",
"Avatar generated from IP address": "Този документ изтича след %d минути.",
"Аватар (на базата на IP адреса Ви)", "Този документ изтича след %d минути."
"Add comment": ],
"Добави коментар", "This document will expire in %d hours.": [
"Optional nickname…": "Този документ изтича след един час.",
"Избирателен псевдоним", "Този документ изтича след %d часа.",
"Post comment": "Този документ изтича след %d часа.",
"Публикувай коментара", "Този документ изтича след %d часа."
"Sending comment…": ],
"Изпращане на коментара Ви…", "This document will expire in %d days.": [
"Comment posted.": "Този документ изтича след един ден.",
"Коментара Ви е публикуван.", "Този документ изтича след %d дни.",
"Could not refresh display: %s": "Този документ изтича след %d дни.",
"Презареждането на екрана беше неуспешно: %s", "Този документ изтича след %d дни."
"unknown status": ],
"Неизвестно състояние", "This document will expire in %d months.": [
"server error or not responding": "Този документ изтича след една година.",
"Грешка в сървъра или не отговаря", "Този документ изтича след %d години.",
"Could not post comment: %s": "Този документ изтича след %d години.",
"Публикуването на коментара Ви беше неуспешно: %s", "Този документ изтича след %d години."
"Sending paste…": ],
"Изпращане на информацията Ви…", "Please enter the password for this paste:": "Моля въведете паролата за това съдържание:",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Could not decrypt data (Wrong key?)": "Информацията не можеше да се дешифрова (Грешен ключ?)",
"Вашата връзка е <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Натиснете [Ctrl]+[c] за да копирате)</span>", "Could not delete the paste, it was not stored in burn after reading mode.": "Изтриването на информацията беше неуспешно. Тя не е от тип \"унищожаване след преглед\".",
"Delete data": "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "САМО ЗА ВАШИТЕ ОЧИ. Не затваряйте прозореца, понеже тази информация няма да може да бъде показана отново.",
"Изтриване на информацията", "Could not decrypt comment; Wrong key?": "Дешифроването на коментара беше неуспешно. Грешен ключ?",
"Could not create paste: %s": "Reply": "Отговор",
"Създаването на връзката ви беше неуспешно: %s", "Anonymous": "Безименен",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "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?)": "Дешифроването на информацията беше неуспешно: Ключа за декриптиране липсва във връзката (Да не сте използвали услуга за пренасочване или скъсяване на връзката, което би изрязало части от нея?)",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB",
"PiB": "PiB",
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Format", "Format": "Format",
"Plain Text": "Чист текст", "Plain Text": "Чист текст",
"Source Code": "Изходен код", "Source Code": "Изходен код",
@@ -131,34 +150,40 @@
"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.": "PATH трябва да е във края на \"%s\" за да може %s да работи правилно. Моля обновете PATH във вашият index.php .",
"PATH трябва да е във края на \"%s\" за да може %s да работи правилно. Моля обновете PATH във вашият index.php .", "Decrypt": "Дешифровай",
"Decrypt": "Enter password": "Въведи паролата",
"Дешифровай",
"Enter password":
"Въведи паролата",
"Loading…": "Зареждане…", "Loading…": "Зареждане…",
"Decrypting paste…": "Дешифроване на информацията…", "Decrypting paste…": "Дешифроване на информацията…",
"Preparing new paste…": "Приготвяне на връзката Ви…", "Preparing new paste…": "Приготвяне на връзката Ви…",
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "Във случай, че това съобщение не изчезне след време, моля прегледайте <a href=\"%s\">този FAQ (Английски)</a>, за информация, която би ви помогнала.",
"Във случай, че това съобщение не изчезне след време, моля прегледайте <a href=\"%s\">този FAQ (Английски)</a>, за информация, която би ви помогнала.",
"+++ no paste text +++": "+++ няма текстово съдържание +++", "+++ no paste text +++": "+++ няма текстово съдържание +++",
"Could not get paste data: %s": "Could not get paste data: %s": "Взимането на информацията беше неуспешно: %s",
"Взимането на информацията беше неуспешно: %s",
"QR code": "QR код", "QR code": "QR код",
"This website is using an insecure HTTP connection! Please use it only for testing.": "This website is using an insecure HTTP connection! Please use it only for testing.": "Този сайт използва несигурна HTTP връзка. Моля използвайте само за проби.",
"Този сайт използва несигурна HTTP връзка. Моля използвайте само за проби.", "For more information <a href=\"%s\">see this FAQ entry</a>.": "<a href=\"%s\">Вижте тази страница</a> за повече информация.",
"For more information <a href=\"%s\">see this FAQ entry</a>.": "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>.",
"<a href=\"%s\">Вижте тази страница</a> за повече информация.", "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "waiting on user to provide a password": "waiting on user to provide a password",
"Браузъра ви може да се нуждае от HTTPS връзка за да използва WebCrypto API. Пробвай <a href=\"%s\">да минеш на HTTPS</a>.", "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.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Retry": "Retry",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones." "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 PrivateBin": "Encrypted note on PrivateBin",
"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"
} }

189
i18n/ca.json Normal file
View File

@@ -0,0 +1,189 @@
{
"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 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. (singular)",
"Espereu %d segons entre cada entrada. (1r plural)",
"Espereu %d segons entre cada entrada. (2n plural)",
"Please wait %d seconds between each post. (3er plural)"
],
"Paste is limited to %s of encrypted data.": "L'enganxat està limitat a %s de dades encriptades.",
"Invalid data.": "Dades no vàlides.",
"You are unlucky. Try again.": "Mala sort. Torna-ho a provar.",
"Error saving comment. Sorry.": "S'ha produït un error en desar el comentari. Ho sento.",
"Error saving paste. Sorry.": "S'ha produït un error en desar l'enganxat. Ho sento.",
"Invalid paste ID.": "Identificador d'enganxament no vàlid.",
"Paste is not of burn-after-reading type.": "Paste is not of burn-after-reading type.",
"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.": "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",
"Clone": "Clona",
"Raw text": "Text sense processar",
"Expires": "Caducitat",
"Burn after reading": "Esborra després de ser llegit",
"Open discussion": "Discussió oberta",
"Password (recommended)": "Contrasenya (recomanat)",
"Discussion": "Discussió",
"Toggle navigation": "Alternar navegació",
"%d seconds": [
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
],
"%d minutes": [
"%d minute (singular)",
"%d minutes (1st plural)",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
],
"%d hours": [
"%d hour (singular)",
"%d hours (1st plural)",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
],
"%d days": [
"%d day (singular)",
"%d days (1st plural)",
"%d days (2nd plural)",
"%d days (3rd plural)"
],
"%d weeks": [
"%d week (singular)",
"%d weeks (1st plural)",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
],
"%d months": [
"%d month (singular)",
"%d months (1st plural)",
"%d months (2nd plural)",
"%d months (3rd plural)"
],
"%d years": [
"%d year (singular)",
"%d years (1st plural)",
"%d years (2nd plural)",
"%d years (3rd plural)"
],
"Never": "Never",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.",
"This document will expire in %d seconds.": [
"This document will expire in %d second. (singular)",
"This document will expire in %d seconds. (1st plural)",
"This document will expire in %d seconds. (2nd plural)",
"This document will expire in %d seconds. (3rd plural)"
],
"This document will expire in %d 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 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 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 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)"
],
"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 PrivateBin": "Encrypted note on PrivateBin",
"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"
}

View File

@@ -1,125 +1,144 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://privatebin.info/\">project page</a>.": "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s je minimalistický open source 'pastebin' server, který neanalyzuje vložená data. Data jsou šifrována %sv prohlížeči%s pomocí 256 bitů AES.",
"%s je minimalistický open source 'pastebin' server, který neanalyzuje vložená data. Data jsou šifrována <i>v prohlížeči</i> pomocí 256 bitů AES. Více informací na <a href=\"https://privatebin.info/\">stránce projetu</a>.", "More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Více informací na <a href=\"https://privatebin.info/\">stránce projetu</a>.",
"Because ignorance is bliss": "Because ignorance is bliss": "Protože nevědomost je sladká",
"Protože nevědomost je sladká",
"en": "cs", "en": "cs",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.": "Vložený text neexistuje, expiroval nebo byl odstraněn.",
"Vložený text neexistuje, expiroval nebo byl odstraněn.", "%s requires php %s or above to work. Sorry.": "%s vyžaduje php %s nebo vyšší. Lituji.",
"%s requires php %s or above to work. Sorry.": "%s requires configuration section [%s] to be present in configuration file.": "%s requires configuration section [%s] to be present in configuration file.",
"%s vyžaduje php %s nebo vyšší. Lituji.", "Please wait %d seconds between each post.": [
"%s requires configuration section [%s] to be present in configuration file.":
"%s requires configuration section [%s] to be present in configuration file.",
"Please wait %d seconds between each post.":
"Počet sekund do dalšího příspěvku: %d.", "Počet sekund do dalšího příspěvku: %d.",
"Paste is limited to %s of encrypted data.": "Počet sekund do dalšího příspěvku: %d.",
"Příspěvek je limitován na %s šífrovaných dat", "Počet sekund do dalšího příspěvku: %d.",
"Invalid data.": "Počet sekund do dalšího příspěvku: %d."
"Chybná data.", ],
"You are unlucky. Try again.": "Paste is limited to %s of encrypted data.": "Příspěvek je limitován na %s šífrovaných dat",
"Lituji, zkuste to znovu.", "Invalid data.": "Chybná data.",
"Error saving comment. Sorry.": "You are unlucky. Try again.": "Lituji, zkuste to znovu.",
"Chyba při ukládání komentáře.", "Error saving comment. Sorry.": "Chyba při ukládání komentáře.",
"Error saving paste. Sorry.": "Error saving paste. Sorry.": "Chyba při ukládání příspěvku.",
"Chyba při ukládání příspěvku.", "Invalid paste ID.": "Chybně vložené ID.",
"Invalid paste ID.": "Paste is not of burn-after-reading type.": "Paste is not of burn-after-reading type.",
"Chybně vložené ID.", "Wrong deletion token. Paste was not deleted.": "Wrong deletion token. Paste was not deleted.",
"Paste is not of burn-after-reading type.": "Paste was properly deleted.": "Paste was properly deleted.",
"Paste is not of burn-after-reading type.", "JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript is required for %s to work. Sorry for the inconvenience.",
"Wrong deletion token. Paste was not deleted.": "%s requires a modern browser to work.": "%%s requires a modern browser to work.",
"Wrong deletion token. Paste was not deleted.", "New": "Nový",
"Paste was properly deleted.": "Send": "Odeslat",
"Paste was properly deleted.", "Clone": "Klonovat",
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.": "Raw text": "Pouze Text",
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.", "Expires": "Expirace",
"%s requires a modern browser to work.": "Burn after reading": "Po přečtení smazat",
"%%s requires a modern browser to work.", "Open discussion": "Povolit komentáře",
"New": "Password (recommended)": "Heslo (doporučeno)",
"Nový", "Discussion": "Komentáře",
"Send": "Toggle navigation": "Toggle navigation",
"Odeslat", "%d seconds": [
"Clone": "%d sekuda",
"Klonovat", "%d sekundy",
"Raw text": "%d sekund",
"Pouze Text", "%d seconds (3rd plural)"
"Expires": ],
"Expirace", "%d minutes": [
"Burn after reading": "%d minuta",
"Po přečtení smazat", "%d minuty",
"Open discussion": "%d minut",
"Povolit komentáře", "%d minutes (3rd plural)"
"Password (recommended)": ],
"Heslo (doporučeno)", "%d hours": [
"Discussion": "%d hodin",
"Komentáře", "%d hodiny",
"Toggle navigation": "%d hodin",
"Toggle navigation", "%d hours (3rd plural)"
"%d seconds": ["%d sekuda", "%d sekundy", "%d sekund"], ],
"%d minutes": ["%d minuta", "%d minuty", "%d minut"], "%d days": [
"%d hours": ["%d hodin", "%d hodiny", "%d hodin"], "%d den",
"%d days": ["%d den", "%d dny", "%d dní"], "%d dny",
"%d weeks": ["%d týden", "%d týdeny", "%d týdnů"], "%d dní",
"%d months": ["%d měsíc", "%d měsíce", "%d měsíců"], "%d days (3rd plural)"
"%d years": ["%d rok", "%d roky", "%d roků"], ],
"Never": "%d weeks": [
"Nikdy", "%d týden",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "%d týdeny",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.", "%d týdnů",
"This document will expire in %d seconds.": "%d weeks (3rd plural)"
["Tento dokument expiruje za %d sekundu.", "Tento dokument expiruje za %d sekundy.", "Tento dokument expiruje za %d sekund."], ],
"This document will expire in %d minutes.": "%d months": [
["Tento dokument expiruje za %d minutu.", "Tento dokument expiruje za %d minuty.", "Tento dokument expiruje za %d minut."], "%d měsíc",
"This document will expire in %d hours.": "%d měsíce",
["Tento dokument expiruje za %d hodinu.", "Tento dokument expiruje za %d hodiny.", "Tento dokument expiruje za %d hodin."], "%d měsíců",
"This document will expire in %d days.": "%d months (3rd plural)"
["Tento dokument expiruje za %d den.", "Tento dokument expiruje za %d dny.", "Tento dokument expiruje za %d dny."], ],
"This document will expire in %d months.": "%d years": [
["Tento dokument expiruje za %d měsíc.", "Tento dokument expiruje za %d měsíce.", "Tento dokument expiruje za %d měsíců."], "%d rok",
"Please enter the password for this paste:": "%d roky",
"Zadejte prosím heslo:", "%d roků",
"Could not decrypt data (Wrong key?)": "%d years (3rd plural)"
"Could not decrypt data (Wrong key?)", ],
"Could not delete the paste, it was not stored in burn after reading mode.": "Never": "Nikdy",
"Could not delete the paste, it was not stored in burn after reading mode.", "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.",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "This document will expire in %d seconds.": [
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.", "Tento dokument expiruje za %d sekundu.",
"Could not decrypt comment; Wrong key?": "Tento dokument expiruje za %d sekundy.",
"Could not decrypt comment; Wrong key?", "Tento dokument expiruje za %d sekund.",
"Reply": "Tento dokument expiruje za %d sekund."
"Reply", ],
"Anonymous": "This document will expire in %d minutes.": [
"Anonym", "Tento dokument expiruje za %d minutu.",
"Avatar generated from IP address": "Tento dokument expiruje za %d minuty.",
"Avatar generated from IP address", "Tento dokument expiruje za %d minut.",
"Add comment": "Tento dokument expiruje za %d minut."
"Přidat komentář", ],
"Optional nickname…": "This document will expire in %d hours.": [
"Volitelný nickname…", "Tento dokument expiruje za %d hodinu.",
"Post comment": "Tento dokument expiruje za %d hodiny.",
"Odeslat komentář", "Tento dokument expiruje za %d hodin.",
"Sending comment…": "Tento dokument expiruje za %d hodin."
"Odesílání komentáře…", ],
"Comment posted.": "This document will expire in %d days.": [
"Komentář odeslán.", "Tento dokument expiruje za %d den.",
"Could not refresh display: %s": "Tento dokument expiruje za %d dny.",
"Could not refresh display: %s", "Tento dokument expiruje za %d dny.",
"unknown status": "Tento dokument expiruje za %d dny."
"neznámý stav", ],
"server error or not responding": "This document will expire in %d months.": [
"Chyba na serveru nebo server neodpovídá", "Tento dokument expiruje za %d měsíc.",
"Could not post comment: %s": "Tento dokument expiruje za %d měsíce.",
"Nelze odeslat komentář: %s", "Tento dokument expiruje za %d měsíců.",
"Sending paste…": "Tento dokument expiruje za %d měsíců."
"Odesílání příspěvku…", ],
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Please enter the password for this paste:": "Zadejte prosím heslo:",
"Váš link je <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Stiskněte [Ctrl]+[c] pro zkopírování)</span>", "Could not decrypt data (Wrong key?)": "Could not decrypt data (Wrong key?)",
"Delete data": "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.",
"Odstranit data", "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 create paste: %s": "Could not decrypt comment; Wrong key?": "Could not decrypt comment; Wrong key?",
"Nelze vytvořit příspěvek: %s", "Reply": "Reply",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Anonymous": "Anonym",
"Nepodařilo se dešifrovat příspěvek: V adrese chybí dešifrovací klíč (Možnou příčinou může být URL shortener?)", "Avatar generated from IP address": "Avatar generated from IP address",
"Add comment": "Přidat komentář",
"Optional nickname…": "Volitelný nickname…",
"Post comment": "Odeslat komentář",
"Sending comment…": "Odesílání komentáře…",
"Comment posted.": "Komentář odeslán.",
"Could not refresh display: %s": "Could not refresh display: %s",
"unknown status": "neznámý stav",
"server error or not responding": "Chyba na serveru nebo server neodpovídá",
"Could not post comment: %s": "Nelze odeslat komentář: %s",
"Sending paste…": "Odesílání příspěvku…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Váš link je <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Stiskněte [Ctrl]+[c] pro zkopírování)</span>",
"Delete data": "Odstranit data",
"Could not create paste: %s": "Nelze vytvořit příspěvek: %s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nepodařilo se dešifrovat příspěvek: V adrese chybí dešifrovací klíč (Možnou příčinou může být URL shortener?)",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB",
"PiB": "PiB",
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Formát", "Format": "Formát",
"Plain Text": "Prostý Text", "Plain Text": "Prostý Text",
"Source Code": "Zdrojový kód", "Source Code": "Zdrojový kód",
@@ -131,34 +150,40 @@
"alternatively drag & drop a file or paste an image from the clipboard": "alternatively drag & drop a file or paste an image from the clipboard", "alternatively drag & drop a file or paste an image from the clipboard": "alternatively drag & drop a file or paste an image from the clipboard",
"File too large, to display a preview. Please download the attachment.": "Soubor je příliš velký pro zobrazení náhledu. Stáhněte si přílohu.", "File too large, to display a preview. Please download the attachment.": "Soubor je příliš velký pro zobrazení náhledu. Stáhněte si přílohu.",
"Remove attachment": "Odstranit přílohu", "Remove attachment": "Odstranit přílohu",
"Your browser does not support uploading encrypted files. Please use a newer browser.": "Your browser does not support uploading encrypted files. Please use a newer browser.": "Váš prohlížeč nepodporuje nahrávání šifrovaných souborů. Použijte modernější verzi prohlížeče.",
"Váš prohlížeč nepodporuje nahrávání šifrovaných souborů. Použijte modernější verzi prohlížeče.",
"Invalid attachment.": "Chybná příloha.", "Invalid attachment.": "Chybná příloha.",
"Options": "Volby", "Options": "Volby",
"Shorten URL": "Shorten URL", "Shorten URL": "Shorten URL",
"Editor": "Editor", "Editor": "Editor",
"Preview": "Náhled", "Preview": "Náhled",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.", "Decrypt": "Decrypt",
"Decrypt": "Enter password": "Zadejte heslo",
"Decrypt",
"Enter password":
"Zadejte heslo",
"Loading…": "Loading…", "Loading…": "Loading…",
"Decrypting paste…": "Decrypting paste…", "Decrypting paste…": "Decrypting paste…",
"Preparing new paste…": "Preparing new paste…", "Preparing new paste…": "Preparing new paste…",
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.",
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.",
"+++ no paste text +++": "+++ žádný vložený text +++", "+++ no paste text +++": "+++ žádný vložený text +++",
"Could not get paste data: %s": "Could not get paste data: %s": "Could not get paste data: %s",
"Could not get paste data: %s",
"QR code": "QR code", "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.": "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>.",
"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>.",
"For more information <a href=\"%s\">see this FAQ entry</a>.", "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "waiting on user to provide a password": "waiting on user to provide a password",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.", "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.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Retry": "Retry",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones." "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 PrivateBin": "Encrypted note on PrivateBin",
"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"
} }

View File

@@ -1,125 +1,144 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://privatebin.info/\">project page</a>.": "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s 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.",
"%s ist ein minimalistischer, quelloffener \"Pastebin\"-artiger Dienst, bei dem der Server keinerlei Kenntnis der Inhalte hat. Die Daten werden <i>im Browser</i> mit 256 Bit AES ver- und entschlüsselt. Weitere Informationen sind auf der <a href=\"https://privatebin.info/\">Projektseite</a> zu finden.", "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": "Because ignorance is bliss": "Unwissenheit ist ein Segen",
"Unwissenheit ist ein Segen",
"en": "de", "en": "de",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.": "Diesen Text gibt es nicht, er ist abgelaufen oder wurde gelöscht.",
"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 php %s or above to work. Sorry.": "%s requires configuration section [%s] to be present in configuration file.": "%s benötigt den Konfigurationsabschnitt [%s] in der Konfigurationsdatei um zu funktionieren.",
"%s benötigt PHP %s oder höher, um zu funktionieren. Sorry.", "Please wait %d seconds between each post.": [
"%s requires configuration section [%s] to be present in configuration file.": "Bitte warte eine Sekunde zwischen dem Absenden zweier Beiträge.",
"%s benötigt den Konfigurationsabschnitt [%s] in der Konfigurationsdatei um zu funktionieren.", "Bitte warte %d Sekunden zwischen dem Absenden zweier Beiträge.",
"Please wait %d seconds between each post.": "Bitte warte %d Sekunden zwischen dem Absenden zweier Beiträge.",
"Bitte warte %d Sekunden zwischen dem Absenden.", "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.", "Paste is limited to %s of encrypted data.": "Texte sind auf %s verschlüsselte Datenmenge beschränkt.",
"Invalid data.": "Invalid data.": "Ungültige Daten.",
"Ungültige Daten.", "You are unlucky. Try again.": "Du hast Pech. Versuchs nochmal.",
"You are unlucky. Try again.": "Error saving comment. Sorry.": "Fehler beim Speichern des Kommentars. Sorry.",
"Du hast Pech. Versuchs nochmal.", "Error saving paste. Sorry.": "Fehler beim Speichern des Textes. Sorry.",
"Error saving comment. Sorry.": "Invalid paste ID.": "Ungültige Text-ID.",
"Fehler beim Speichern des Kommentars. Sorry.", "Paste is not of burn-after-reading type.": "Text ist kein \"Einmal\"-Typ.",
"Error saving paste. Sorry.": "Wrong deletion token. Paste was not deleted.": "Falscher Lösch-Code. Text wurde nicht gelöscht.",
"Fehler beim Speichern des Textes. Sorry.", "Paste was properly deleted.": "Text wurde erfolgreich gelöscht.",
"Invalid paste ID.": "JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript ist eine Voraussetzung, um %s zu nutzen. Bitte entschuldige die Unannehmlichkeiten.",
"Ungültige Text-ID.", "%s requires a modern browser to work.": "%s setzt einen modernen Browser voraus, um funktionieren zu können.",
"Paste is not of burn-after-reading type.": "New": "Neu",
"Text ist kein \"Einmal\"-Typ.", "Send": "Senden",
"Wrong deletion token. Paste was not deleted.": "Clone": "Klonen",
"Falscher Lösch-Code. Text wurde nicht gelöscht.", "Raw text": "Reiner Text",
"Paste was properly deleted.": "Expires": "Ablaufzeit",
"Text wurde erfolgreich gelöscht.", "Burn after reading": "Nach dem Lesen löschen",
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.": "Open discussion": "Kommentare aktivieren",
"JavaScript ist eine Voraussetzung, um %s zu nutzen.<br />Bitte entschuldige die Unannehmlichkeiten.", "Password (recommended)": "Passwort (empfohlen)",
"%s requires a modern browser to work.": "Discussion": "Kommentare",
"%s setzt einen modernen Browser voraus, um funktionieren zu können.", "Toggle navigation": "Navigation umschalten",
"New": "%d seconds": [
"Neu", "%d Sekunde",
"Send": "%d Sekunden",
"Senden", "%d seconds (2nd plural)",
"Clone": "%d seconds (3rd plural)"
"Klonen", ],
"Raw text": "%d minutes": [
"Reiner Text", "%d Minute",
"Expires": "%d Minuten",
"Ablaufzeit", "%d minutes (2nd plural)",
"Burn after reading": "%d minutes (3rd plural)"
"Nach dem Lesen löschen", ],
"Open discussion": "%d hours": [
"Kommentare aktivieren", "%d Stunde",
"Password (recommended)": "%d Stunden",
"Passwort (empfohlen)", "%d hours (2nd plural)",
"Discussion": "%d hours (3rd plural)"
"Kommentare", ],
"Toggle navigation": "%d days": [
"Navigation umschalten", "%d Tag",
"%d seconds": ["%d Sekunde", "%d Sekunden"], "%d Tage",
"%d minutes": ["%d Minute", "%d Minuten"], "%d days (2nd plural)",
"%d hours": ["%d Stunde", "%d Stunden"], "%d days (3rd plural)"
"%d days": ["%d Tag", "%d Tage"], ],
"%d weeks": ["%d Woche", "%d Wochen"], "%d weeks": [
"%d months": ["%d Monat", "%d Monate"], "%d Woche",
"%d years": ["%d Jahr", "%d Jahre"], "%d Wochen",
"Never": "%d weeks (2nd plural)",
"Nie", "%d weeks (3rd plural)"
"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.", "%d months": [
"This document will expire in %d seconds.": "%d Monat",
["Dieses Dokument läuft in einer Sekunde ab.", "Dieses Dokument läuft in %d Sekunden ab."], "%d Monate",
"This document will expire in %d minutes.": "%d months (2nd plural)",
["Dieses Dokument läuft in einer Minute ab.", "Dieses Dokument läuft in %d Minuten ab."], "%d months (3rd plural)"
"This document will expire in %d hours.": ],
["Dieses Dokument läuft in einer Stunde ab.", "Dieses Dokument läuft in %d Stunden ab."], "%d years": [
"This document will expire in %d days.": "%d Jahr",
["Dieses Dokument läuft in einem Tag ab.", "Dieses Dokument läuft in %d Tagen ab."], "%d Jahre",
"This document will expire in %d months.": "%d years (2nd plural)",
["Dieses Dokument läuft in einem Monat ab.", "Dieses Dokument läuft in %d Monaten ab."], "%d years (3rd plural)"
"Please enter the password for this paste:": ],
"Bitte gib das Passwort für diesen Text ein:", "Never": "Nie",
"Could not decrypt data (Wrong key?)": "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.",
"Konnte Daten nicht entschlüsseln (Falscher Schlüssel?)", "This document will expire in %d seconds.": [
"Could not delete the paste, it was not stored in burn after reading mode.": "Dieses Dokument läuft in einer Sekunde ab.",
"Konnte das Paste nicht löschen, es wurde nicht im Einmal-Modus gespeichert.", "Dieses Dokument läuft in %d Sekunden ab.",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "Dieses Dokument läuft in %d Sekunden ab.",
"DIESER TEXT IST NUR FÜR DICH GEDACHT. Schließe das Fenster nicht, diese Nachricht kann nur einmal geöffnet werden.", "Dieses Dokument läuft in %d Sekunden ab."
"Could not decrypt comment; Wrong key?": ],
"Konnte Kommentar nicht entschlüsseln; Falscher Schlüssel?", "This document will expire in %d minutes.": [
"Reply": "Dieses Dokument läuft in einer Minute ab.",
"Antworten", "Dieses Dokument läuft in %d Minuten ab.",
"Anonymous": "Dieses Dokument läuft in %d Minuten ab.",
"Anonym", "Dieses Dokument läuft in %d Minuten ab."
"Avatar generated from IP address": ],
"Avatar (generiert aus der IP-Adresse)", "This document will expire in %d hours.": [
"Add comment": "Dieses Dokument läuft in einer Stunde ab.",
"Kommentar hinzufügen", "Dieses Dokument läuft in %d Stunden ab.",
"Optional nickname…": "This document will expire in %d hours (2nd plural)",
"Optionales Pseudonym…", "This document will expire in %d hours (3rd plural)"
"Post comment": ],
"Kommentar absenden", "This document will expire in %d days.": [
"Sending comment…": "Dieses Dokument läuft in einem Tag ab.",
"Sende Kommentar…", "Dieses Dokument läuft in %d Tagen ab.",
"Comment posted.": "Dieses Dokument läuft in %d Tagen ab.",
"Kommentar gesendet.", "Dieses Dokument läuft in %d Tagen ab."
"Could not refresh display: %s": ],
"Ansicht konnte nicht aktualisiert werden: %s", "This document will expire in %d months.": [
"unknown status": "Dieses Dokument läuft in einem Monat ab.",
"Unbekannter Grund", "Dieses Dokument läuft in %d Monaten ab.",
"server error or not responding": "Dieses Dokument läuft in %d Monaten ab.",
"Fehler auf dem Server oder keine Antwort vom Server", "Dieses Dokument läuft in %d Monaten ab."
"Could not post comment: %s": ],
"Konnte Kommentar nicht senden: %s", "Please enter the password for this paste:": "Bitte gib das Passwort für diesen Text ein:",
"Sending paste…": "Could not decrypt data (Wrong key?)": "Konnte Daten nicht entschlüsseln (Falscher Schlüssel?)",
"Sende Paste…", "Could not delete the paste, it was not stored in burn after reading mode.": "Konnte das Paste nicht löschen, es wurde nicht im Einmal-Modus gespeichert.",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "DIESER TEXT IST NUR FÜR DICH GEDACHT. Schließe das Fenster nicht, diese Nachricht kann nur einmal geöffnet werden.",
"Dein Text ist unter <a id=\"pasteurl\" href=\"%s\">%s</a> zu finden <span id=\"copyhint\">(Drücke [Strg]+[c] um den Link zu kopieren)</span>", "Could not decrypt comment; Wrong key?": "Konnte Kommentar nicht entschlüsseln; Falscher Schlüssel?",
"Delete data": "Reply": "Antworten",
"Lösche Daten", "Anonymous": "Anonym",
"Could not create paste: %s": "Avatar generated from IP address": "Avatar (generiert aus der IP-Adresse)",
"Text konnte nicht erstellt werden: %s", "Add comment": "Kommentar hinzufügen",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Optional nickname…": "Optionales Pseudonym…",
"Konnte Paste nicht entschlüsseln: Der Schlüssel fehlt in der Adresse (Hast du eine Umleitung oder einen URL-Verkürzer benutzt, der Teile der Adresse entfernt?)", "Post comment": "Kommentar absenden",
"Sending comment…": "Sende Kommentar…",
"Comment posted.": "Kommentar gesendet.",
"Could not refresh display: %s": "Ansicht konnte nicht aktualisiert werden: %s",
"unknown status": "Unbekannter Grund",
"server error or not responding": "Fehler auf dem Server oder keine Antwort vom Server",
"Could not post comment: %s": "Konnte Kommentar nicht senden: %s",
"Sending paste…": "Sende Paste…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Dein Text ist unter <a id=\"pasteurl\" href=\"%s\">%s</a> zu finden <span id=\"copyhint\">(Drücke [Strg]+[c] um den Link zu kopieren)</span>",
"Delete data": "Lösche Daten",
"Could not create paste: %s": "Text konnte nicht erstellt werden: %s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Konnte Paste nicht entschlüsseln: Der Schlüssel fehlt in der Adresse (Hast du eine Umleitung oder einen URL-Verkürzer benutzt, der Teile der Adresse entfernt?)",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB",
"PiB": "PiB",
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Format", "Format": "Format",
"Plain Text": "Nur Text", "Plain Text": "Nur Text",
"Source Code": "Quellcode", "Source Code": "Quellcode",
@@ -128,37 +147,43 @@
"Cloned: '%s'": "Geklont: '%s'", "Cloned: '%s'": "Geklont: '%s'",
"The cloned file '%s' was attached to this paste.": "Die geklonte Datei '%s' wurde angehängt.", "The cloned file '%s' was attached to this paste.": "Die geklonte Datei '%s' wurde angehängt.",
"Attach a file": "Datei anhängen", "Attach a file": "Datei anhängen",
"alternatively drag & drop a file or paste an image from the clipboard": "Alternativ Drag & Drop einer Datei oder einfügen eines Bildes aus der Zwischenablage", "alternatively drag & drop a file or paste an image from the clipboard": "Eine Datei kann auch durch ziehen und loslassen ausgewählt oder ein Bild aus der Zwischenablage einfügt werden.",
"File too large, to display a preview. Please download the attachment.": "Datei zu groß, um als Vorschau angezeigt zu werden. Bitte Anhang herunterladen.", "File too large, to display a preview. Please download the attachment.": "Datei zu groß, um als Vorschau angezeigt zu werden. Bitte Anhang herunterladen.",
"Remove attachment": "Anhang entfernen", "Remove attachment": "Anhang entfernen",
"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.": "Dein Browser unterstützt das hochladen von verschlüsselten Dateien nicht. Bitte verwende einen neueren Browser.",
"Dein Browser unterstützt das hochladen von verschlüsselten Dateien nicht. Bitte verwende einen neueren Browser.",
"Invalid attachment.": "Ungültiger Datei-Anhang.", "Invalid attachment.": "Ungültiger Datei-Anhang.",
"Options": "Optionen", "Options": "Optionen",
"Shorten URL": "URL verkürzen", "Shorten URL": "URL verkürzen",
"Editor": "Bearbeiten", "Editor": "Bearbeiten",
"Preview": "Vorschau", "Preview": "Vorschau",
"%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.": "Der PATH muss bei %s mit einem \"%s\" enden. Bitte passe Deinen PATH in Deiner index.php an.",
"Der PATH muss bei %s mit einem \"%s\" enden. Bitte passe Deinen PATH in Deiner index.php an.", "Decrypt": "Entschlüsseln",
"Decrypt": "Enter password": "Passwort eingeben",
"Entschlüsseln",
"Enter password":
"Passwort eingeben",
"Loading…": "Lädt…", "Loading…": "Lädt…",
"Decrypting paste…": "Entschlüssle Text…", "Decrypting paste…": "Entschlüssle Text…",
"Preparing new paste…": "Bereite neuen Text vor…", "Preparing new paste…": "Bereite neuen Text vor…",
"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>.": "Wenn diese Nachricht nicht mehr verschwindet, schau bitte in <a href=\"%s\">die FAQ</a> (Englisch), um zu sehen, wie der Fehler behoben werden kann.",
"Wenn diese Nachricht nicht mehr verschwindet, schau bitte in <a href=\"%s\">die FAQ</a> (englisch), um zu sehen, wie der Fehler behoben werden kann.",
"+++ no paste text +++": "+++ kein Paste-Text +++", "+++ no paste text +++": "+++ kein Paste-Text +++",
"Could not get paste data: %s": "Could not get paste data: %s": "Text konnte nicht geladen werden: %s",
"Text konnte nicht geladen werden: %s",
"QR code": "QR code", "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.": "Diese Webseite verwendet eine unsichere HTTP Verbindung! Bitte benutze sie nur zum Testen.",
"Diese Webseite verwendet eine unsichere HTTP Verbindung! Bitte benutze sie nur zum Testen.", "For more information <a href=\"%s\">see this FAQ entry</a>.": "<a href=\"%s\">Besuche diesen FAQ Eintrag</a> für weitere Informationen dazu.",
"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>.": "Dein Browser benötigt möglicherweise eine HTTPS Verbindung um das WebCrypto API nutzen zu können. Versuche <a href=\"%s\">auf HTTPS zu wechseln</a>.",
"<a href=\"%s\">Besuche diesen FAQ Eintrag</a> für weitere Informationen dazu.", "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Dein Browser unterstützt WebAssembly nicht, welches für zlib Komprimierung benötigt wird. Du kannst unkomprimierte Dokumente erzeugen, aber keine komprimierten lesen.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "waiting on user to provide a password": "warte auf Passworteingabe durch Benutzer",
"Dein Browser benötigt möglicherweise eine HTTPS Verbindung um das WebCrypto API nutzen zu können. Versuche <a href=\"%s\">auf HTTPS zu wechseln</a>.", "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Konnte Daten nicht entschlüsseln. Hast Du das falsche Passwort eingegeben? Wiederhole den Vorgang mit dem oben stehenden Knopf.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Retry": "Wiederholen",
"Dein Browser unterstützt WebAssembly nicht, welches für zlib Komprimierung benötigt wird. Du kannst unkomprimierte Dokumente erzeugen, aber keine komprimierten lesen." "Showing raw text…": "Rohtext wird angezeigt…",
"Notice:": "Hinweis:",
"This link will expire after %s.": "Diese Verknüpfung wird in %s ablaufen.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "Diese Verknüpfung kann nur einmal geöffnet werden, verwende nicht den Zurück- oder Neu-laden-Knopf Deines Browsers.",
"Link:": "Verknüpfung:",
"Recipient may become aware of your timezone, convert time to UTC?": "Der Empfänger könnte Deine Zeitzone erfahren, möchtest Du die Zeit in UTC umwandeln?",
"Use Current Timezone": "Aktuelle Zeitzone verwenden",
"Convert To UTC": "In UTC umwandeln",
"Close": "Schliessen",
"Encrypted note on PrivateBin": "Verschlüsselte Notiz auf PrivateBin",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Besuche diese Verknüpfung um das Dokument zu sehen. Wird die URL an eine andere Person gegeben, so kann diese Person ebenfalls auf dieses Dokument zugreifen.",
"URL shortener may expose your decrypt key in URL.": "Der URL-Verkürzer kann den Schlüssel in der URL enthüllen.",
"Save paste": "Text speichern"
} }

189
i18n/el.json Normal file
View File

@@ -0,0 +1,189 @@
{
"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": "el",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.",
"%s requires php %s or above to work. Sorry.": "%s requires php %s or above to work. Sorry.",
"%s requires configuration section [%s] to be present in configuration file.": "%s requires configuration section [%s] to be present in configuration file.",
"Please wait %d seconds between each post.": [
"Please wait %d second between each post. (singular)",
"Please wait %d seconds between each post. (1st plural)",
"Please wait %d seconds between each post. (2nd plural)",
"Please wait %d seconds between each post. (3rd plural)"
],
"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",
"%d seconds": [
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
],
"%d minutes": [
"%d minute (singular)",
"%d minutes (1st plural)",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
],
"%d hours": [
"%d hour (singular)",
"%d hours (1st plural)",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
],
"%d days": [
"%d day (singular)",
"%d days (1st plural)",
"%d days (2nd plural)",
"%d days (3rd plural)"
],
"%d weeks": [
"%d week (singular)",
"%d weeks (1st plural)",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
],
"%d months": [
"%d month (singular)",
"%d months (1st plural)",
"%d months (2nd plural)",
"%d months (3rd plural)"
],
"%d years": [
"%d year (singular)",
"%d years (1st plural)",
"%d years (2nd plural)",
"%d years (3rd plural)"
],
"Never": "Never",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.",
"This document will expire in %d seconds.": [
"This document will expire in %d second. (singular)",
"This document will expire in %d seconds. (1st plural)",
"This document will expire in %d seconds. (2nd plural)",
"This document will expire in %d seconds. (3rd plural)"
],
"This document will expire in %d 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 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 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 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)"
],
"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 PrivateBin": "Encrypted note on PrivateBin",
"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"
}

189
i18n/en.json Normal file
View File

@@ -0,0 +1,189 @@
{
"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": "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.",
"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)"
],
"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",
"%d seconds": [
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
],
"%d minutes": [
"%d minute (singular)",
"%d minutes (1st plural)",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
],
"%d hours": [
"%d hour (singular)",
"%d hours (1st plural)",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
],
"%d days": [
"%d day (singular)",
"%d days (1st plural)",
"%d days (2nd plural)",
"%d days (3rd plural)"
],
"%d weeks": [
"%d week (singular)",
"%d weeks (1st plural)",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
],
"%d months": [
"%d month (singular)",
"%d months (1st plural)",
"%d months (2nd plural)",
"%d months (3rd plural)"
],
"%d years": [
"%d year (singular)",
"%d years (1st plural)",
"%d years (2nd plural)",
"%d years (3rd plural)"
],
"Never": "Never",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.",
"This document will expire in %d seconds.": [
"This document will expire in %d second. (singular)",
"This document will expire in %d seconds. (1st plural)",
"This document will expire in %d seconds. (2nd plural)",
"This document will expire in %d seconds. (3rd plural)"
],
"This document will expire in %d 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 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 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 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)"
],
"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 PrivateBin": "Encrypted note on PrivateBin",
"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"
}

View File

@@ -1,125 +1,144 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://privatebin.info/\">project page</a>.": "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s 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.",
"%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 <i>en el navegador</i> usando 256 bits AES. Más información en la <a href=\"https://privatebin.info/\">página del proyecto</a>.", "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": "Because ignorance is bliss": "Porque la ignorancia es dicha",
"Porque la ignorancia es dicha",
"en": "es", "en": "es",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.": "El \"paste\" no existe, ha caducado o ha sido eliminado.",
"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 php %s or above to work. Sorry.": "%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.",
"%s requiere php %s o superior para funcionar. Lo siento.", "Please wait %d seconds between each post.": [
"%s requires configuration section [%s] to be present in configuration file.": "Por favor espere %d segundo entre cada publicación.",
"%s requiere que la sección de configuración [%s] esté presente en el archivo de configuración.",
"Please wait %d seconds between each post.":
"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.": "Por favor espere %d segundos entre cada publicación.",
"El \"paste\" está limitado a %s de datos cifrados.", "Por favor espere %d segundos entre cada publicación."
"Invalid data.": ],
"Datos inválidos.", "Paste is limited to %s of encrypted data.": "El \"paste\" está limitado a %s de datos cifrados.",
"You are unlucky. Try again.": "Invalid data.": "Datos inválidos.",
"Tienes mala suerte. Inténtalo de nuevo", "You are unlucky. Try again.": "Tienes mala suerte. Inténtalo de nuevo",
"Error saving comment. Sorry.": "Error saving comment. Sorry.": "Error al guardar el comentario. Lo siento.",
"Error al guardar el comentario. Lo siento.", "Error saving paste. Sorry.": "Error al guardar el \"paste\". Lo siento",
"Error saving paste. Sorry.": "Invalid paste ID.": "ID del \"paste\" inválido.",
"Error al guardar el \"paste\". Lo siento", "Paste is not of burn-after-reading type.": "El \"paste\" no es del tipo \"destruir despues de leer\".",
"Invalid paste ID.": "Wrong deletion token. Paste was not deleted.": "Token de eliminación erróneo. El \"paste\" no fue eliminado.",
"ID del \"paste\" inválido.", "Paste was properly deleted.": "El \"paste\" se ha eliminado correctamente.",
"Paste is not of burn-after-reading type.": "JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript es necesario para que %s funcione. Sentimos los inconvenientes ocasionados.",
"El \"paste\" no es del tipo \"destruir despues de leer\".", "%s requires a modern browser to work.": "%s requiere un navegador moderno para funcionar.",
"Wrong deletion token. Paste was not deleted.": "New": "Nuevo",
"Token de eliminación erróneo. El \"paste\" no fue eliminado.", "Send": "Enviar",
"Paste was properly deleted.": "Clone": "Clonar",
"El \"paste\" se ha eliminado correctamente.", "Raw text": "Texto sin formato",
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.": "Expires": "Caducar en",
"JavaScript es necesario para que %s funcione.<br />Sentimos los inconvenientes ocasionados.", "Burn after reading": "Destruir después de leer",
"%s requires a modern browser to work.": "Open discussion": "Discusión abierta",
"%s requiere un navegador moderno para funcionar.", "Password (recommended)": "Contraseña (recomendado)",
"New": "Discussion": "Discusión",
"Nuevo", "Toggle navigation": "Cambiar navegación",
"Send": "%d seconds": [
"Enviar", "%d segundo",
"Clone": "%d segundos",
"Clonar", "%d segundos",
"Raw text": "%d segundos"
"Texto sin formato", ],
"Expires": "%d minutes": [
"Caducar en", "%d minuto",
"Burn after reading": "%d minutos",
"Destruir después de leer", "%d minutos",
"Open discussion": "%d minutos"
"Discusión abierta", ],
"Password (recommended)": "%d hours": [
"Contraseña (recomendado)", "%d hora",
"Discussion": "%d horas",
"Discusión", "%d horas",
"Toggle navigation": "%d horas"
"Cambiar navegación", ],
"%d seconds": ["%d segundo", "%d segundos"], "%d days": [
"%d minutes": ["%d minuto", "%d minutos"], "%d día",
"%d hours": ["%d hora", "%d horas"], "%d días",
"%d days": ["%d día", "%d días"], "%d días",
"%d weeks": ["%d semana", "%d semanas"], "%d días"
"%d months": ["%d mes", "%d meses"], ],
"%d years": ["%d año", "%d años"], "%d weeks": [
"Never": "%d semana",
"Nunca", "%d semanas",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "%d semanas",
"Nota: Este es un servicio de prueba. Los datos pueden ser eliminados en cualquier momento. Morirán gatitos si abusas de este servicio.", "%d semanas"
"This document will expire in %d seconds.": ],
["Este documento caducará en un segundo.", "Este documento caducará en %d segundos."], "%d months": [
"This document will expire in %d minutes.": "%d mes",
["Este documento caducará en un minuto.", "Este documento caducará en %d minutos."], "%d meses",
"This document will expire in %d hours.": "%d minutos",
["Este documento caducará en una hora.", "Este documento caducará en %d horas."], "%d meses"
"This document will expire in %d days.": ],
["Este documento caducará en un día.", "Este documento caducará en %d días."], "%d years": [
"This document will expire in %d months.": "%d año",
["Este documento caducará en un mes.", "Este documento caducará en %d meses."], "%d años",
"Please enter the password for this paste:": "%d años",
"Por favor ingrese la contraseña para este \"paste\":", "%d años"
"Could not decrypt data (Wrong key?)": ],
"No fue posible descifrar los datos (¿Clave errónea?)", "Never": "Nunca",
"Could not delete the paste, it was not stored in burn after reading mode.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Nota: Este es un servicio de prueba. Los datos pueden ser eliminados en cualquier momento. Morirán gatitos si abusas de este servicio.",
"No fue posible eliminar el documento, no fue guardado en modo \"destruir despues de leer\".", "This document will expire in %d seconds.": [
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "Este documento caducará en un segundo.",
"SÓLO PARA TUS OJOS. No cierres esta ventana, este mensaje no se puede volver a mostrar.", "Este documento caducará en %d segundos.",
"Could not decrypt comment; Wrong key?": "Este documento caducará en %d segundos",
"No se pudo descifrar el comentario; ¿Llave incorrecta?", "Este documento caducará en %d segundos"
"Reply": ],
"Responder", "This document will expire in %d minutes.": [
"Anonymous": "Este documento caducará en un minuto.",
"Anónimo", "Este documento caducará en %d minutos.",
"Avatar generated from IP address": "Este documento caducará en %d minutos",
"Avatar generado a partir de la dirección IP", "Este documento caducará en %d minutos"
"Add comment": ],
"Añadir comentario", "This document will expire in %d hours.": [
"Optional nickname…": "Este documento caducará en una hora.",
"Seudónimo opcional…", "Este documento caducará en %d horas.",
"Post comment": "Este documento caducará en %d horas",
"Publicar comentario", "Este documento caducará en %d horas"
"Sending comment…": ],
"Enviando comentario…", "This document will expire in %d days.": [
"Comment posted.": "Este documento caducará en un día.",
"Comentario publicado.", "Este documento caducará en %d días.",
"Could not refresh display: %s": "Este documento caducará en %d días",
"No se pudo actualizar la vista: %s", "Este documento caducará en %d días"
"unknown status": ],
"Estado desconocido", "This document will expire in %d months.": [
"server error or not responding": "Este documento caducará en un mes.",
"Error del servidor o el servidor no responde", "Este documento caducará en %d meses.",
"Could not post comment: %s": "Este documento caducará en %d meses",
"No fue posible publicar comentario: %s", "Este documento caducará en %d meses"
"Sending paste…": ],
"Enviando \"paste\"", "Please enter the password for this paste:": "Por favor ingrese la contraseña para este \"paste\":",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Could not decrypt data (Wrong key?)": "No fue posible descifrar los datos (¿Clave errónea?)",
"Su texto está en <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Presione [Ctrl]+[c] para copiar)</span>", "Could not delete the paste, it was not stored in burn after reading mode.": "No fue posible eliminar el documento, no fue guardado en modo \"destruir despues de leer\".",
"Delete data": "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "SÓLO PARA TUS OJOS. No cierres esta ventana, este mensaje no se puede volver a mostrar.",
"Eliminar datos", "Could not decrypt comment; Wrong key?": "No se pudo descifrar el comentario; ¿Llave incorrecta?",
"Could not create paste: %s": "Reply": "Responder",
"No fue posible crear el archivo: %s", "Anonymous": "Anónimo",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Avatar generated from IP address": "Avatar generado a partir de la dirección IP",
"No es posible descifrar el documento: Falta la clave de descifrado en la URL (¿Utilizó un redirector o un acortador de URL que quite parte de la URL?)", "Add comment": "Añadir comentario",
"Optional nickname…": "Seudónimo opcional…",
"Post comment": "Publicar comentario",
"Sending comment…": "Enviando comentario…",
"Comment posted.": "Comentario publicado.",
"Could not refresh display: %s": "No se pudo actualizar la vista: %s",
"unknown status": "Estado desconocido",
"server error or not responding": "Error del servidor o el servidor no responde",
"Could not post comment: %s": "No fue posible publicar comentario: %s",
"Sending paste…": "Enviando \"paste\"…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Su texto está en <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Presione [Ctrl]+[c] para copiar)</span>",
"Delete data": "Eliminar datos",
"Could not create paste: %s": "No fue posible crear el archivo: %s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "No es posible descifrar el documento: Falta la clave de descifrado en la URL (¿Utilizó un redirector o un acortador de URL que quite parte de la URL?)",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB",
"PiB": "PiB",
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Formato", "Format": "Formato",
"Plain Text": "Texto sin formato", "Plain Text": "Texto sin formato",
"Source Code": "Código fuente", "Source Code": "Código fuente",
@@ -128,37 +147,43 @@
"Cloned: '%s'": "Clonado: '%s'.", "Cloned: '%s'": "Clonado: '%s'.",
"The cloned file '%s' was attached to this paste.": "El archivo clonado '%s' ha sido adjuntado a este texto.", "The cloned file '%s' was attached to this paste.": "El archivo clonado '%s' ha sido adjuntado a este texto.",
"Attach a file": "Adjuntar archivo", "Attach a file": "Adjuntar archivo",
"alternatively drag & drop a file or paste an image from the clipboard": "alternatively drag & drop a file or paste an image from the clipboard", "alternatively drag & drop a file or paste an image from the clipboard": "alternativamente, arrastre y suelte un archivo o pegue una imagen desde el portapapeles",
"File too large, to display a preview. Please download the attachment.": "File too large, to display a preview. Please download the attachment.", "File too large, to display a preview. Please download the attachment.": "Archivo demasiado grande para mostrar una vista previa. Por favor, descargue el archivo adjunto.",
"Remove attachment": "Remover adjunto", "Remove attachment": "Remover adjunto",
"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.": "Tu navegador no admite la carga de archivos cifrados. Utilice un navegador más reciente.",
"Tu navegador no admite la carga de archivos cifrados. Utilice un navegador más reciente.",
"Invalid attachment.": "Adjunto inválido.", "Invalid attachment.": "Adjunto inválido.",
"Options": "Opciones", "Options": "Opciones",
"Shorten URL": "Acortar URL", "Shorten URL": "Acortar URL",
"Editor": "Editor", "Editor": "Editor",
"Preview": "Previsualización", "Preview": "Previsualización",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requiere que el PATH termine en \"%s\". Por favor, actualice el PATH en su index.php.",
"%s requiere que el PATH termine en \"%s\". Por favor, actualice el PATH en su index.php.", "Decrypt": "Descifrar",
"Decrypt": "Enter password": "Ingrese contraseña",
"Descifrar",
"Enter password":
"Ingrese contraseña",
"Loading…": "Cargando…", "Loading…": "Cargando…",
"Decrypting paste…": "Descifrando \"paste\"…", "Decrypting paste…": "Descifrando \"paste\"…",
"Preparing new paste…": "Preparando \"paste\" nuevo…", "Preparing new paste…": "Preparando \"paste\" nuevo…",
"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>.": "En caso de que este mensaje nunca desaparezca por favor revise <a href=\"%s\">este FAQ para obtener información para solucionar problemas</a>.",
"En caso de que este mensaje nunca desaparezca por favor revise <a href=\"%s\">este FAQ para obtener información para solucionar problemas</a>.",
"+++ no paste text +++": "+++ \"paste\" sin texto +++", "+++ no paste text +++": "+++ \"paste\" sin texto +++",
"Could not get paste data: %s": "Could not get paste data: %s": "No se pudieron obtener los datos: %s",
"No se pudieron obtener los datos: %s",
"QR code": "Código QR", "QR code": "Código QR",
"This website is using an insecure HTTP connection! Please use it only for testing.": "This website is using an insecure HTTP connection! Please use it only for testing.": "¡Este sitio está usando una conexión HTTP insegura! Por favor úselo solo para pruebas.",
"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>.": "Para más información <a href=\"%s\">consulte esta entrada de las preguntas frecuentes</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>.": "Su navegador puede requerir una conexión HTTPS para soportar la API de WebCrypto. Intente <a href=\"%s\">cambiar a HTTPS</a>.",
"For more information <a href=\"%s\">see this FAQ entry</a>.", "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Su navegador no es compatible con WebAssembly, que se utiliza para la compresión zlib. Puede crear documentos sin comprimir, pero no puede leer los comprimidos.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "waiting on user to provide a password": "esperando que el usuario proporcione una contraseña",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.", "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "No se pudieron descifrar los datos. ¿Ingresó una contraseña incorrecta? Vuelva a intentarlo con el botón de la parte superior.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Retry": "Reintentar",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones." "Showing raw text…": "Mostrando texto sin formato…",
"Notice:": "Aviso:",
"This link will expire after %s.": "Este enlace expirará después de %s.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "Solo se puede acceder a este enlace una vez, no use el botón Atrás o Actualizar en su navegador.",
"Link:": "Enlace:",
"Recipient may become aware of your timezone, convert time to UTC?": "El destinatario puede descubrir su zona horaria, ¿convertir la hora a UTC?",
"Use Current Timezone": "Usar Zona Horaria Actual",
"Convert To UTC": "Convertir A UTC",
"Close": "Cerrar",
"Encrypted note on PrivateBin": "Nota cifrada en PrivateBin",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visite este enlace para ver la nota. Dar la URL a cualquier persona también les permite acceder a la nota.",
"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\""
} }

189
i18n/et.json Normal file
View File

@@ -0,0 +1,189 @@
{
"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 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.",
"Please wait %d seconds between each post.": [
"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."
],
"Paste is limited to %s of encrypted data.": "Kleepe limiit on %s krüpteeritud andmeid.",
"Invalid data.": "Valed andmed.",
"You are unlucky. Try again.": "Sul ei vea. Proovi uuesti.",
"Error saving comment. Sorry.": "Viga kommentaari salvestamisel. Vabandame.",
"Error saving paste. Sorry.": "Viga kleepe salvestamisel. Vabandame.",
"Invalid paste ID.": "Vale kleepe ID.",
"Paste is not of burn-after-reading type.": "Kleebe ei ole põleta-pärast-lugemist tüüpi.",
"Wrong deletion token. Paste was not deleted.": "Vale kustutamiskood. Kleebet ei kustutatud.",
"Paste was properly deleted.": "Kleebe kustutati korralikult.",
"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",
"Clone": "Klooni",
"Raw text": "Lähtetekst",
"Expires": "Aegub",
"Burn after reading": "Põleta pärast lugemist",
"Open discussion": "Avatud arutelu",
"Password (recommended)": "Parool (soovitatav)",
"Discussion": "Arutelu",
"Toggle navigation": "Näita menüüd",
"%d seconds": [
"%d sekund",
"%d sekundit",
"%d sekundit",
"%d sekundit"
],
"%d minutes": [
"%d minut",
"%d minutit",
"%d minutit",
"%d minutit"
],
"%d hours": [
"%d tund",
"%d tundi",
"%d tundi",
"%d tundi"
],
"%d days": [
"%d päev",
"%d päeva",
"%d päeva",
"%d päeva"
],
"%d weeks": [
"%d nädal",
"%d nädalat",
"%d nädalat",
"%d nädalat"
],
"%d months": [
"%d kuu",
"%d kuud",
"%d kuud",
"%d kuud"
],
"%d years": [
"%d aasta",
"%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."
],
"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."
],
"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."
],
"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."
],
"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."
],
"Please enter the password for this paste:": "Palun sisesta selle kleepe parool:",
"Could not decrypt data (Wrong key?)": "Ei suutnud andmeid dekrüpteerida (Vale võti?)",
"Could not delete the paste, it was not stored in burn after reading mode.": "Ei suutnud kleebet kustutada, seda ei salvestatud põleta pärast lugemist režiimis.",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "AINULT SINU SILMADELE. Ära sulge seda akent, seda sõnumit ei saa enam kuvada.",
"Could not decrypt comment; Wrong key?": "Ei suutnud kommentaari dekrüpteerida; Vale võti?",
"Reply": "Vasta",
"Anonymous": "Anonüümne",
"Avatar generated from IP address": "Avatar genereeritud IP aadressi põhjal",
"Add comment": "Lisa kommentaar",
"Optional nickname…": "Valikuline hüüdnimi…",
"Post comment": "Postita kommentaar",
"Sending comment…": "Kommentaari saatmine…",
"Comment posted.": "Kommentaar postitatud.",
"Could not refresh display: %s": "Ei suutnud kuva värskendada: %s",
"unknown status": "tundmatu staatus",
"server error or not responding": "serveri viga või ei vasta",
"Could not post comment: %s": "Ei suutnud kommentaari postitada: %s",
"Sending paste…": "Kleepe saatmine…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Sinu kleebe on <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Kopeerimiseks vajuta [Ctrl]+[c])</span>",
"Delete data": "Kustuta andmed",
"Could not create paste: %s": "Ei suutnud kleebet luua: %s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Ei suutnud kleebet dekrüpteerida: Dekrüpteerimisvõti on URL-ist puudu (Kas kasutasid ümbersuunajat või URL-i lühendajat, mis eemaldab osa URL-ist?)",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB",
"PiB": "PiB",
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Formaat",
"Plain Text": "Lihttekst",
"Source Code": "Lähtekood",
"Markdown": "Markdown",
"Download attachment": "Laadi manus alla",
"Cloned: '%s'": "Kloonitud: '%s'",
"The cloned file '%s' was attached to this paste.": "Kloonitud fail '%s' manustati sellele kleepele.",
"Attach a file": "Manusta fail",
"alternatively drag & drop a file or paste an image from the clipboard": "teise võimalusena lohista fail või kleebi pilt lõikelaualt",
"File too large, to display a preview. Please download the attachment.": "Fail on eelvaate kuvamiseks liiga suur. Palun laadi manus alla.",
"Remove attachment": "Eemalda manus",
"Your browser does not support uploading encrypted files. Please use a newer browser.": "Sinu brauser ei toeta krüpteeritud failide üleslaadimist. Palun kasuta uuemat brauserit.",
"Invalid attachment.": "Sobimatu manus.",
"Options": "Valikud",
"Shorten URL": "Lühenda URL",
"Editor": "Toimetaja",
"Preview": "Eelvaade",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s vajab, et PATH lõppeks järgmisega: \"%s\". Palun uuenda PATH-i oma index.php failis.",
"Decrypt": "Dekrüpteeri",
"Enter password": "Sisesta parool",
"Loading…": "Laadimine…",
"Decrypting paste…": "Kleepe dekrüpteerimine…",
"Preparing new paste…": "Uue kleepe ettevalmistamine…",
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "Kui see sõnum ei kao, palun vaata <a href=\"%s\">seda KKK-d, et saada tõrkeotsinguks teavet.</a>.",
"+++ no paste text +++": "+++ kleepe tekst puudub +++",
"Could not get paste data: %s": "Ei suutnud saada kleepe andmeid: %s",
"QR code": "QR kood",
"This website is using an insecure HTTP connection! Please use it only for testing.": "See veebisait kasutab ebaturvalist HTTP ühendust! Palun kasuta seda ainult katsetamiseks.",
"For more information <a href=\"%s\">see this FAQ entry</a>.": "Lisateabe saamiseks <a href=\"%s\">vaata seda KKK sissekannet</a>.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Sinu brauser võib vajada HTTPS ühendust, et toetada WebCrypto API-d. Proovi <a href=\"%s\">üle minna HTTPS-ile</a>.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Sinu brauser ei toeta WebAssembly't, mida kasutatakse zlib tihendamiseks. Sa saad luua tihendamata dokumente, kuid ei saa lugeda tihendatuid.",
"waiting on user to provide a password": "ootan parooli sisestamist kasutajalt",
"Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Ei suutnud andmeid dekrüpteerida. Kas sisestasid vale parooli? Proovi uuesti üleval asuva nupuga.",
"Retry": "Proovi uuesti",
"Showing raw text…": "Lähteteksti näitamine…",
"Notice:": "Teade:",
"This link will expire after %s.": "See link aegub: %s.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "Sellele lingile saab vaid üks kord ligi pääseda, ära kasuta tagasi või värskenda nuppe sinu brauseris.",
"Link:": "Link:",
"Recipient may become aware of your timezone, convert time to UTC?": "Saaja võib saada teada sinu ajavööndi, kas teisendada aeg UTC-ks?",
"Use Current Timezone": "Kasuta praegust ajavööndit",
"Convert To UTC": "Teisenda UTC-ks",
"Close": "Sulge",
"Encrypted note on PrivateBin": "Krüpteeritud kiri PrivateBin-is",
"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"
}

View File

@@ -1,125 +1,135 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://privatebin.info/\">project page</a>.": "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s 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.",
"%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 <i>dans le navigateur</i> par un chiffrement AES 256 bits. Plus d'informations sur <a href=\"https://privatebin.info/\">la page du projet</a>.", "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": "Because ignorance is bliss": "Parce que l'ignorance c'est le bonheur",
"Parce que l'ignorance c'est le bonheur",
"en": "fr", "en": "fr",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.": "Le paste n'existe pas, a expiré, ou a été supprimé.",
"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 php %s or above to work. Sorry.": "%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.",
"Désolé, %s nécessite php %s ou supérieur pour fonctionner.", "Please wait %d seconds between each post.": [
"%s requires configuration section [%s] to be present in configuration file.": "Merci d'attendre %d seconde entre chaque publication.",
"%s a besoin de la section de configuration [%s] dans le fichier de configuration pour fonctionner.",
"Please wait %d seconds between each post.":
"Merci d'attendre %d secondes entre chaque publication.", "Merci d'attendre %d secondes entre chaque publication.",
"Paste is limited to %s of encrypted data.": "Merci d'attendre %d secondes entre chaque publication.",
"Le paste est limité à %s de données chiffrées.", "Merci d'attendre %d secondes entre chaque publication."
"Invalid data.": ],
"Données invalides.", "Paste is limited to %s of encrypted data.": "Le paste est limité à %s de données chiffrées.",
"You are unlucky. Try again.": "Invalid data.": "Données invalides.",
"Pas de chance. Essayez encore.", "You are unlucky. Try again.": "Pas de chance. Essayez encore.",
"Error saving comment. Sorry.": "Error saving comment. Sorry.": "Erreur lors de la sauvegarde du commentaire.",
"Erreur lors de la sauvegarde du commentaire.", "Error saving paste. Sorry.": "Erreur lors de la sauvegarde du paste. Désolé.",
"Error saving paste. Sorry.": "Invalid paste ID.": "ID du paste invalide.",
"Erreur lors de la sauvegarde du paste. Désolé.", "Paste is not of burn-after-reading type.": "Le paste n'est pas de type \"Effacer après lecture\".",
"Invalid paste ID.": "Wrong deletion token. Paste was not deleted.": "Jeton de suppression incorrect. Le paste n'a pas été supprimé.",
"ID du paste invalide.", "Paste was properly deleted.": "Le paste a été correctement supprimé.",
"Paste is not of burn-after-reading type.": "JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript est requis pour faire fonctionner %s. Désolé pour cet inconvénient.",
"Le paste n'est pas de type \"Effacer après lecture\".", "%s requires a modern browser to work.": "%s nécessite un navigateur moderne pour fonctionner.",
"Wrong deletion token. Paste was not deleted.": "New": "Nouveau",
"Jeton de suppression incorrect. Le paste n'a pas été supprimé.", "Send": "Envoyer",
"Paste was properly deleted.": "Clone": "Cloner",
"Le paste a été correctement supprimé.", "Raw text": "Texte brut",
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.": "Expires": "Expire",
"JavaScript est requis pour faire fonctionner %s. <br />Désolé pour cet inconvénient.", "Burn after reading": "Effacer après lecture",
"%s requires a modern browser to work.": "Open discussion": "Autoriser la discussion",
"%s nécessite un navigateur moderne pour fonctionner.", "Password (recommended)": "Mot de passe (recommandé)",
"New": "Discussion": "Discussion",
"Nouveau", "Toggle navigation": "Basculer la navigation",
"Send": "%d seconds": [
"Envoyer", "%d seconde",
"Clone": "%d secondes",
"Cloner", "%d seconds (2nd plural)",
"Raw text": "%d seconds (3rd plural)"
"Texte brut", ],
"Expires": "%d minutes": [
"Expire", "%d minute",
"Burn after reading": "%d minutes",
"Effacer après lecture", "%d minutes (2nd plural)",
"Open discussion": "%d minutes (3rd plural)"
"Autoriser la discussion", ],
"Password (recommended)": "%d hours": [
"Mot de passe (recommandé)", "%d heure",
"Discussion": "%d heures",
"Discussion", "%d hours (2nd plural)",
"Toggle navigation": "%d hours (3rd plural)"
"Basculer la navigation", ],
"%d seconds": ["%d seconde", "%d secondes"], "%d days": [
"%d minutes": ["%d minute", "%d minutes"], "%d jour",
"%d hours": ["%d heure", "%d heures"], "%d jours",
"%d days": ["%d jour", "%d jours"], "%d days (2nd plural)",
"%d weeks": ["%d semaine", "%d semaines"], "%d days (3rd plural)"
"%d months": ["%d mois", "%d mois"], ],
"%d years": ["%d an", "%d ans"], "%d weeks": [
"Never": "%d semaine",
"Jamais", "%d semaines",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "%d weeks (2nd plural)",
"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.", "%d weeks (3rd plural)"
"This document will expire in %d seconds.": ],
["Ce document expirera dans %d seconde.", "Ce document expirera dans %d secondes."], "%d months": [
"This document will expire in %d minutes.": "%d mois",
["Ce document expirera dans %d minute.", "Ce document expirera dans %d minutes."], "%d mois",
"This document will expire in %d hours.": "%d months (2nd plural)",
["Ce document expirera dans %d heure.", "Ce document expirera dans %d heures."], "%d months (3rd plural)"
"This document will expire in %d days.": ],
["Ce document expirera dans %d jour.", "Ce document expirera dans %d jours."], "%d years": [
"This document will expire in %d months.": "%d an",
["Ce document expirera dans %d mois.", "Ce document expirera dans %d mois."], "%d ans",
"Please enter the password for this paste:": "%d years (2nd plural)",
"Entrez le mot de passe pour ce paste:", "%d years (3rd plural)"
"Could not decrypt data (Wrong key?)": ],
"Impossible de déchiffrer les données (mauvaise clé ?)", "Never": "Jamais",
"Could not delete the paste, it was not stored in burn after reading mode.": "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.",
"Impossible de supprimer le paste, car il n'a pas été stocké en mode \"Effacer après lecture\".", "This document will expire in %d seconds.": [
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "Ce document expirera dans %d seconde.",
"POUR VOS YEUX UNIQUEMENT. Ne fermez pas cette fenêtre, ce paste ne pourra plus être affiché.", "Ce document expirera dans %d secondes.",
"Could not decrypt comment; Wrong key?": "This document will expire in %d seconds (2nd plural)",
"Impossible de déchiffrer le commentaire; mauvaise clé ?", "This document will expire in %d seconds (3rd plural)"
"Reply": ],
"Répondre", "This document will expire in %d minutes.": [
"Anonymous": "Ce document expirera dans %d minute.",
"Anonyme", "Ce document expirera dans %d minutes.",
"Avatar generated from IP address": "Ce document expirera dans %d minutes.",
"Avatar généré à partir de l'adresse IP", "Ce document expirera dans %d minutes."
"Add comment": ],
"Ajouter un commentaire", "This document will expire in %d hours.": [
"Optional nickname…": "Ce document expirera dans %d heure.",
"Pseudonyme optionnel…", "Ce document expirera dans %d heures.",
"Post comment": "Ce document expirera dans %d heures.",
"Poster le commentaire", "Ce document expirera dans %d heures."
"Sending comment…": ],
"Envoi du commentaire…", "This document will expire in %d days.": [
"Comment posted.": "Ce document expirera dans %d jour.",
"Commentaire posté.", "Ce document expirera dans %d jours.",
"Could not refresh display: %s": "Ce document expirera dans %d jours.",
"Impossible de rafraichir l'affichage : %s", "Ce document expirera dans %d jours."
"unknown status": ],
"Statut inconnu", "This document will expire in %d months.": [
"server error or not responding": "Ce document expirera dans %d mois.",
"Le serveur ne répond pas ou a rencontré une erreur", "Ce document expirera dans %d mois.",
"Could not post comment: %s": "Ce document expirera dans %d mois.",
"Impossible de poster le commentaire : %s", "Ce document expirera dans %d mois."
"Sending paste…": ],
"Envoi du paste", "Please enter the password for this paste:": "Entrez le mot de passe pour ce paste:",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Could not decrypt data (Wrong key?)": "Impossible de déchiffrer les données (mauvaise clé ?)",
"Votre paste est disponible à l'adresse <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Appuyez sur [Ctrl]+[c] pour copier)</span>", "Could not delete the paste, it was not stored in burn after reading mode.": "Impossible de supprimer le paste, car il n'a pas été stocké en mode \"Effacer après lecture\".",
"Delete data": "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "POUR VOS YEUX UNIQUEMENT. Ne fermez pas cette fenêtre, ce paste ne pourra plus être affiché.",
"Supprimer les données du paste", "Could not decrypt comment; Wrong key?": "Impossible de déchiffrer le commentaire; mauvaise clé ?",
"Could not create paste: %s": "Reply": "Répondre",
"Impossible de créer le paste : %s", "Anonymous": "Anonyme",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Avatar generated from IP address": "Avatar généré à partir de l'adresse IP",
"Impossible de déchiffrer le paste : Clé de déchiffrement manquante dans l'URL (Avez-vous utilisé un redirecteur ou un site de réduction d'URL qui supprime une partie de l'URL ?)", "Add comment": "Ajouter un commentaire",
"Optional nickname…": "Pseudonyme optionnel…",
"Post comment": "Poster le commentaire",
"Sending comment…": "Envoi du commentaire…",
"Comment posted.": "Commentaire posté.",
"Could not refresh display: %s": "Impossible de rafraichir l'affichage : %s",
"unknown status": "Statut inconnu",
"server error or not responding": "Le serveur ne répond pas ou a rencontré une erreur",
"Could not post comment: %s": "Impossible de poster le commentaire : %s",
"Sending paste…": "Envoi du paste…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Votre paste est disponible à l'adresse <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Appuyez sur [Ctrl]+[c] pour copier)</span>",
"Delete data": "Supprimer les données du paste",
"Could not create paste: %s": "Impossible de créer le paste : %s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Impossible de déchiffrer le paste : Clé de déchiffrement manquante dans l'URL (Avez-vous utilisé un redirecteur ou un site de réduction d'URL qui supprime une partie de l'URL ?)",
"B": "o", "B": "o",
"KiB": "Kio", "KiB": "Kio",
"MiB": "Mio", "MiB": "Mio",
@@ -136,38 +146,44 @@
"Download attachment": "Télécharger la pièce jointe", "Download attachment": "Télécharger la pièce jointe",
"Cloned: '%s'": "Cloner '%s'", "Cloned: '%s'": "Cloner '%s'",
"The cloned file '%s' was attached to this paste.": "Le fichier cloné '%s' a été attaché à ce paste.", "The cloned file '%s' was attached to this paste.": "Le fichier cloné '%s' a été attaché à ce paste.",
"Attach a file": "Attacher un fichier ", "Attach a file": "Attacher un fichier",
"alternatively drag & drop a file or paste an image from the clipboard": "alternativement, glisser & déposer un fichier ou coller une image à partir du presse-papiers", "alternatively drag & drop a file or paste an image from the clipboard": "au choix, glisser & déposer un fichier ou coller une image à partir du presse-papiers",
"File too large, to display a preview. Please download the attachment.": "Fichier trop volumineux, pour afficher un aperçu. Veuillez télécharger la pièce jointe.", "File too large, to display a preview. Please download the attachment.": "Fichier trop volumineux, pour afficher un aperçu. Veuillez télécharger la pièce jointe.",
"Remove attachment": "Enlever l'attachement", "Remove attachment": "Enlever la pièce jointe",
"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.": "Votre navigateur ne supporte pas l'envoi de fichiers chiffrés. Merci d'utiliser un navigateur plus récent.",
"Votre navigateur ne supporte pas l'envoi de fichiers chiffrés. Merci d'utiliser un navigateur plus récent.", "Invalid attachment.": "Pièce jointe invalide.",
"Invalid attachment.": "Attachement invalide.",
"Options": "Options", "Options": "Options",
"Shorten URL": "Raccourcir URL", "Shorten URL": "Raccourcir URL",
"Editor": "Éditer", "Editor": "Éditer",
"Preview": "Prévisualiser", "Preview": "Prévisualiser",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requiert que le PATH se termine dans un \"%s\". Veuillez mettre à jour le PATH dans votre index.php.",
"%s requiert que le PATH se termine dans un \"%s\". Veuillez mettre à jour le PATH dans votre index.php.", "Decrypt": "Déchiffrer",
"Decrypt": "Enter password": "Entrez le mot de passe",
"Déchiffrer",
"Enter password":
"Entrez le mot de passe",
"Loading…": "Chargement…", "Loading…": "Chargement…",
"Decrypting paste…": "Déchiffrement du paste…", "Decrypting paste…": "Déchiffrement du paste…",
"Preparing new paste…": "Préparation du paste…", "Preparing new paste…": "Préparation du 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>.": "Si ce message ne disparaîssait pas, jetez un oeil à <a href=\"%s\">cette FAQ pour des idées de résolution</a> (en Anglais).",
"Si ce message ne disparaîssait pas, jetez un oeil à <a href=\"%s\">cette FAQ pour des idées de résolution</a> (en Anglais).", "+++ no paste text +++": "+++ pas de texte copié +++",
"+++ no paste text +++": "+++ pas de paste-text +++", "Could not get paste data: %s": "Impossible d'obtenir les données du paste: %s",
"Could not get paste data: %s":
"Impossible d'obtenir les données du paste: %s",
"QR code": "QR code", "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.": "Ce site web utilise une connexion HTTP non sécurisée ! Veuillez lutiliser uniquement pour des tests.",
"Ce site web utilise une connexion HTTP non sécurisée ! Veuillez lutiliser uniquement pour des tests.", "For more information <a href=\"%s\">see this FAQ entry</a>.": "Pour plus d'informations <a href=\"%s\">consultez cette rubrique de la FAQ</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>.": "Votre navigateur peut nécessiter une connexion HTTPS pour prendre en charge lAPI WebCrypto. Essayez <a href=\"%s\">de passer en HTTPS</a>.",
"Pour plus d'informations <a href=\"%s\">consultez cette rubrique de la FAQ</a>.", "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Votre navigateur ne prend pas en charge WebAssembly, utilisé pour la compression zlib. Vous pouvez créer des documents non compressés, mais vous ne pouvez pas lire les documents compressés.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "waiting on user to provide a password": "en attendant que l'utilisateur fournisse un mot de passe",
"Votre navigateur peut nécessiter une connexion HTTPS pour prendre en charge lAPI WebCrypto. Essayez <a href=\"%s\">de passer en HTTPS</a>.", "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Impossible de décrypter les données. Vous avez saisi un mot de passe incorrect ? Réessayez avec le bouton en haut.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Retry": "Réessayer",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones." "Showing raw text…": "Affichage du texte brut…",
"Notice:": "Avertissement:",
"This link will expire after %s.": "Ce lien expire après le %s.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "Vous ne pouvez accéder à ce lien qu'une seule fois, n'utilisez pas le bouton précédent ou rafraîchir de votre navigateur.",
"Link:": "Lien:",
"Recipient may become aware of your timezone, convert time to UTC?": "Le destinataire peut connaître votre fuseau horaire, convertir l'heure au format UTC?",
"Use Current Timezone": "Conserver l'actuel",
"Convert To UTC": "Convertir en UTC",
"Close": "Fermer",
"Encrypted note on PrivateBin": "Message chiffré sur PrivateBin",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visiter ce lien pour voir la note. Donner l'URL à une autre personne lui permet également d'accéder à la note.",
"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"
} }

189
i18n/he.json Normal file
View File

@@ -0,0 +1,189 @@
{
"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": "כיוון שבורות היא ברכה",
"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] יהיה קיים בקובץ ההגדרות.",
"Please wait %d seconds between each post.": [
"נא להמתין שנייה אחת בין פרסום לפרסום.",
"נא להמתין %d שניות בין פרסום לפרסום.",
"נא להמתין %d שניות בין פרסום לפרסום.",
"נא להמתין %d שניות בין פרסום לפרסום."
],
"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": "חדש",
"Send": "שליחה",
"Clone": "שכפול",
"Raw text": "טקסט גולמי",
"Expires": "Expires",
"Burn after reading": "קוראים-שורפים",
"Open discussion": "פתיחת דיון",
"Password (recommended)": "ססמה (מומלץ)",
"Discussion": "דיון",
"Toggle navigation": "החלפת מצב ניווט",
"%d seconds": [
"שנייה אחת",
"%d שניות",
"%d שניות (צורת ריבוי 2)",
"%d שניות"
],
"%d minutes": [
"דקה אחת",
"%d דקות",
"%d דקות",
"%d דקות"
],
"%d hours": [
"שעה אחת",
"%d hours (1st plural)",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
],
"%d days": [
"יום אחד",
"%d ימים",
"%d ימים",
"%d ימים"
],
"%d weeks": [
"שבוע אחד",
"%d שבועות",
"%d שבועות",
"%d שבועות"
],
"%d months": [
"חודש אחד",
"%d חודשים",
"%d חודשים",
"%d חודשים"
],
"%d years": [
"שנה אחת",
"%d שנים",
"%d שנים",
"%d שנים"
],
"Never": "לעולם לא",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "הערה: זהו שירות בדקה: המידע לא ישמר.",
"This document will expire in %d seconds.": [
"This document will expire in %d second. (singular)",
"This document will expire in %d seconds. (1st plural)",
"This document will expire in %d seconds. (2nd plural)",
"This document will expire in %d seconds. (3rd plural)"
],
"This document will expire in %d 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 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 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 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)"
],
"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?)": "לא ניתן לפענח הדבקה: מפתח הפענוח חסר בכתובת (השתמשת במערכת הפנייה או מקצר כתובות שחותכים חלק מהכתובת?)",
"B": "ב׳",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB",
"PiB": "PiB",
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "פורמט",
"Plain Text": "טקסט פשוט",
"Source Code": "קוד מקור",
"Markdown": "Markdown",
"Download attachment": "הורדת קובץ מצורף",
"Cloned: '%s'": "שוכפל: '%s'",
"The cloned file '%s' was attached to this paste.": "The cloned file '%s' was attached to this paste.",
"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.": "קובץ מצורף שגוי.",
"Options": "אפשרויות",
"Shorten URL": "קיצור כתובת",
"Editor": "עורך",
"Preview": "תצוגה מקדימה",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.",
"Decrypt": "פענוח",
"Enter password": "נא למלא ססמה",
"Loading…": "בטעינה…",
"Decrypting paste…": "ההדבקה מפוענחת…",
"Preparing new paste…": "ההדבקה החדשה בהכנות…",
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.",
"+++ 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 כדי לתמוך ב־API של WebCrypto. כדי לנסות <a href=\"%s\">לעבור ל־HTTPS</a>.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "הדפדפן שלך לא תומך ב־WebAssembly שמשמש לדחיסת zlib. אפשר ליצור מסמכים בלתי מוצפנים אך אין אפשרות לקרוא מסמכים מוצפנים.",
"waiting on user to provide a password": "בהמתנה למילוי הססמה מצד המשתמש",
"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 PrivateBin": "הערה מוצפנת ב־PrivateBin",
"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"
}

189
i18n/hi.json Normal file
View File

@@ -0,0 +1,189 @@
{
"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": "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.",
"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)"
],
"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",
"%d seconds": [
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
],
"%d minutes": [
"%d minute (singular)",
"%d minutes (1st plural)",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
],
"%d hours": [
"%d hour (singular)",
"%d hours (1st plural)",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
],
"%d days": [
"%d day (singular)",
"%d days (1st plural)",
"%d days (2nd plural)",
"%d days (3rd plural)"
],
"%d weeks": [
"%d week (singular)",
"%d weeks (1st plural)",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
],
"%d months": [
"%d month (singular)",
"%d months (1st plural)",
"%d months (2nd plural)",
"%d months (3rd plural)"
],
"%d years": [
"%d year (singular)",
"%d years (1st plural)",
"%d years (2nd plural)",
"%d years (3rd plural)"
],
"Never": "Never",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.",
"This document will expire in %d seconds.": [
"This document will expire in %d second. (singular)",
"This document will expire in %d seconds. (1st plural)",
"This document will expire in %d seconds. (2nd plural)",
"This document will expire in %d seconds. (3rd plural)"
],
"This document will expire in %d 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 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 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 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)"
],
"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 PrivateBin": "Encrypted note on PrivateBin",
"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"
}

View File

@@ -1,125 +1,144 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://privatebin.info/\">project page</a>.": "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "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.",
"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 <i>böngésződ</i> segítségével titkosítja és oldja fel 256 bit hosszú titkosítási kulcsú AES-t használva. További információt a <a href=\"https://privatebin.info/\">projekt oldalán</a> találsz.", "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": "Because ignorance is bliss": "A titok egyfajta hatalom.",
"A titok egyfajta hatalom.",
"en": "hu", "en": "hu",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.": "A bejegyzés nem létezik, lejárt vagy törölve lett.",
"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 php %s or above to work. Sorry.": "%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.",
"Bocs, de a %s működéséhez %s vagy ezt meghaladó verziójú php-s környezet szükséges.", "Please wait %d seconds between each post.": [
"%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.",
"Paste is limited to %s of encrypted data.": "Kérlek várj %d másodpercet két beküldés között.",
"A bejegyzés maximális hossza: %s", "Kérlek várj %d másodpercet két beküldés között.",
"Invalid data.": "Kérlek várj %d másodpercet két beküldés között."
"Érvénytelen adat.", ],
"You are unlucky. Try again.": "Paste is limited to %s of encrypted data.": "A bejegyzés maximális hossza: %s",
"Peched volt, próbáld újra.", "Invalid data.": "Érvénytelen adat.",
"Error saving comment. Sorry.": "You are unlucky. Try again.": "Peched volt, próbáld újra.",
"Nem sikerült menteni a hozzászólást. Bocs.", "Error saving comment. Sorry.": "Nem sikerült menteni a hozzászólást. Bocs.",
"Error saving paste. Sorry.": "Error saving paste. Sorry.": "Nem sikerült menteni a bejegyzést. Bocs.",
"Nem sikerült menteni a bejegyzést. Bocs.", "Invalid paste ID.": "Érvénytelen bejegyzésazonosító.",
"Invalid paste ID.": "Paste is not of burn-after-reading type.": "A bejegyzés nem semmisül meg azonnal olvasás után.",
"Érvénytelen bejegyzés azonosító.", "Wrong deletion token. Paste was not deleted.": "Hibás törlési azonosító. A bejegyzés nem lett törölve.",
"Paste is not of burn-after-reading type.": "Paste was properly deleted.": "A bejegyzés sikeresen törölve.",
"A bejegyzés nem semmisül meg azonnal olvasás után.", "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.",
"Wrong deletion token. Paste was not deleted.": "%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.",
"Hibás törlési azonosító. A bejegyzés nem lett törölve.", "New": "Új",
"Paste was properly deleted.": "Send": "Beküldöm!",
"A bejegyzés sikeresen törölve.", "Clone": "Másol",
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.": "Raw text": "A nyers szöveg",
"JavaScript szükséges a %s működéséhez. Elnézést a fennakadásért.", "Expires": "Lejárati idő",
"%s requires a modern browser to work.": "Burn after reading": "Törlés az első olvasás után",
"A %s működéséhez a jelenleginél újabb böngészőre van szükség.", "Open discussion": "Hozzászólások engedélyezése",
"New": "Password (recommended)": "Jelszó (ajánlott)",
"Új", "Discussion": "Hozzászólások",
"Send": "Toggle navigation": "Navigáció",
"Beküldöm!", "%d seconds": [
"Clone": "%d másodperc",
"Másol", "%d másodperc",
"Raw text": "%d seconds (2nd plural)",
"A nyers szöveg", "%d seconds (3rd plural)"
"Expires": ],
"Lejárati idő", "%d minutes": [
"Burn after reading": "%d perc",
"Törlés az első olvasás után", "%d perc",
"Open discussion": "%d minutes (2nd plural)",
"Hozzászólások engedélyezése", "%d minutes (3rd plural)"
"Password (recommended)": ],
"Jelszó (ajánlott)", "%d hours": [
"Discussion": "%d óra",
"Hozzászólások", "%d óra",
"Toggle navigation": "%d hours (2nd plural)",
"Navigáció", "%d hours (3rd plural)"
"%d seconds": ["%d másodperc", "%d másodperc"], ],
"%d minutes": ["%d perc", "%d perc"], "%d days": [
"%d hours": ["%d óra", "%d óra"], "%d nap",
"%d days": ["%d nap", "%d nap"], "%d nap",
"%d weeks": ["%d hét", "%d hét"], "%d days (2nd plural)",
"%d months": ["%d hónap", "%d hónap"], "%d days (3rd plural)"
"%d years": ["%d év", "%d év"], ],
"Never": "%d weeks": [
"Soha", "%d hét",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "%d hét",
"Megjegyzés: ez egy teszt szolgáltatás, az adatok bármikor törlődhetnek. Ha visszaélsz vele, kiscicák bánhatják! :)", "%d weeks (2nd plural)",
"This document will expire in %d seconds.": "%d weeks (3rd plural)"
["Ez a bejegyzés %d másodperc után megsemmisül.", "Ez a bejegyzés %d másodperc múlva megsemmisül."], ],
"This document will expire in %d minutes.": "%d months": [
["Ez a bejegyzés %d perc után megsemmisül.", "Ez a bejegyzés %d perc múlva megsemmisül."], "%d hónap",
"This document will expire in %d hours.": "%d hónap",
["Ez a bejegyzés %d óra után megsemmisül.", "Ez a bejegyzés %d óra múlva megsemmisül."], "%d months (2nd plural)",
"This document will expire in %d days.": "%d months (3rd plural)"
["Ez a bejegyzés %d nap után megsemmisül.", "Ez a bejegyzés %d nap múlva megsemmisül."], ],
"This document will expire in %d months.": "%d years": [
["Ez a bejegyzés %d hónap múlva megsemmisül.", "Ez a bejegyzés %d hónap múlva megsemmisül."], "%d év",
"Please enter the password for this paste:": "%d év",
"Add meg a szükséges jelszót a bejegyzés megtekintéséhez:", "%d years (2nd plural)",
"Could not decrypt data (Wrong key?)": "%d years (3rd plural)"
"Nem tudtuk dekódolni az adatot. Talán rossz kulcsot adtál meg?", ],
"Could not delete the paste, it was not stored in burn after reading mode.": "Never": "Soha",
"Nem tudtuk törölni a bejegyzést, mivel az olvasás után egyből megsemmisült. Így nem is volt tárolva.", "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! :)",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "This document will expire in %d seconds.": [
"EZT A BEJEGYZÉST CSAK TE LÁTHATOD!!! Ne csukd be ezt az ablakot, mivel nem tudod újra megnézni. Az ugyanis az első olvasás után rögtön megsemmisül.", "Ez a bejegyzés %d másodperc múlva megsemmisül.",
"Could not decrypt comment; Wrong key?": "Ez a bejegyzés %d másodperc múlva megsemmisül.",
"Nem tudtuk dekódolni a hozzászólást. Talán rossz kulcsot adtál meg?", "Ez a bejegyzés %d másodperc múlva megsemmisül.",
"Reply": "Ez a bejegyzés %d másodperc múlva megsemmisül."
"Válasz", ],
"Anonymous": "This document will expire in %d minutes.": [
"Anonymous", "Ez a bejegyzés %d perc múlva megsemmisül.",
"Avatar generated from IP address": "Ez a bejegyzés %d perc múlva megsemmisül.",
"Avatar (az IP cím alapján generáljuk)", "Ez a bejegyzés %d perc múlva megsemmisül.",
"Add comment": "Ez a bejegyzés %d perc múlva megsemmisül."
"Hozzászólok", ],
"Optional nickname…": "This document will expire in %d hours.": [
"Becenév (már ha meg akarod adni)", "Ez a bejegyzés %d óra múlva megsemmisül.",
"Post comment": "Ez a bejegyzés %d óra múlva megsemmisül.",
"Beküld", "Ez a bejegyzés %d óra múlva megsemmisül.",
"Sending comment…": "Ez a bejegyzés %d óra múlva megsemmisül."
"Beküldés alatt...", ],
"Comment posted.": "This document will expire in %d days.": [
"A hozzászólás beküldve.", "Ez a bejegyzés %d nap múlva megsemmisül.",
"Could not refresh display: %s": "Ez a bejegyzés %d nap múlva megsemmisül.",
"Nem tudtuk frissíteni: %s", "Ez a bejegyzés %d nap múlva megsemmisül.",
"unknown status": "Ez a bejegyzés %d nap múlva megsemmisül."
"Ismeretlen státusz.", ],
"server error or not responding": "This document will expire in %d months.": [
"A szerveren hiba lépett fel vagy nem válaszol.", "Ez a bejegyzés %d hónap múlva megsemmisül.",
"Could not post comment: %s": "Ez a bejegyzés %d hónap múlva megsemmisül.",
"Nem tudtuk beküldeni a hozzászólást: %s", "Ez a bejegyzés %d hónap múlva megsemmisül.",
"Sending paste…": "Ez a bejegyzés %d hónap múlva megsemmisül."
"Bejegyzés elküldése...", ],
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Please enter the password for this paste:": "Add meg a szükséges jelszót a bejegyzés megtekintéséhez:",
"A bejegyzésed a <a id=\"pasteurl\" href=\"%s\">%s</a> címen elérhető. <span id=\"copyhint\"> [Ctrl]+[c]-vel tudod vágólapra másolni.</span>", "Could not decrypt data (Wrong key?)": "Nem tudtuk visszfejteni az adatot. Talán rossz kulcsot adtál meg?",
"Delete data": "Could not delete the paste, it was not stored in burn after reading mode.": "Nem tudtuk törölni a bejegyzést, mivel az olvasás után egyből megsemmisült. Így nem is volt tárolva.",
"Adat törlése", "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "EZT A BEJEGYZÉST CSAK TE LÁTHATOD!!! Ne csukd be ezt az ablakot, mivel nem tudod újra megnézni. Az ugyanis az első olvasás után rögtön megsemmisül.",
"Could not create paste: %s": "Could not decrypt comment; Wrong key?": "Nem tudtuk visszafejteni a hozzászólást. Talán rossz kulcsot adtál meg?",
"Nem tudtuk létrehozni a bejegyzést: %s", "Reply": "Válasz",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Anonymous": "Névtelen",
"Nem tudjuk dekódolni a bejegyzést: a dekódoláshoz szükséges kulcs hiányzik a címből. Talán URL rövidítőt használtál ami kivágta azt belőle?", "Avatar generated from IP address": "Avatar (az IP cím alapján generáljuk)",
"Add comment": "Hozzászólok",
"Optional nickname…": "Becenév (már ha meg akarod adni)",
"Post comment": "Beküld",
"Sending comment…": "Beküldés alatt...",
"Comment posted.": "A hozzászólás beküldve.",
"Could not refresh display: %s": "Nem tudtuk frissíteni: %s",
"unknown status": "Ismeretlen státusz.",
"server error or not responding": "A szerveren hiba lépett fel vagy nem válaszol.",
"Could not post comment: %s": "Nem tudtuk beküldeni a hozzászólást: %s",
"Sending paste…": "Bejegyzés elküldése...",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "A bejegyzésed a <a id=\"pasteurl\" href=\"%s\">%s</a> címen elérhető. <span id=\"copyhint\"> [Ctrl]+[c]-vel tudod vágólapra másolni.</span>",
"Delete data": "Adat törlése",
"Could not create paste: %s": "Nem tudtuk létrehozni a bejegyzést: %s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nem tudjuk visszafejteni a bejegyzést: a dekódoláshoz szükséges kulcs hiányzik a címből. Talán URL rövidítőt használtál ami kivágta azt belőle?",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB",
"PiB": "PiB",
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Formátum", "Format": "Formátum",
"Plain Text": "Egyszerű szöveg", "Plain Text": "Egyszerű szöveg",
"Source Code": "Forráskód", "Source Code": "Forráskód",
@@ -131,34 +150,40 @@
"alternatively drag & drop a file or paste an image from the clipboard": "vagy húzz ide egy fájlt, netán illessz be egy képet a vágólapról.", "alternatively drag & drop a file or paste an image from the clipboard": "vagy húzz ide egy fájlt, netán illessz be egy képet a vágólapról.",
"File too large, to display a preview. Please download the attachment.": "A fájl túl nagy ahhoz, hogy előnézete legyen. Töltsd le, hogy megtekinthesd.", "File too large, to display a preview. Please download the attachment.": "A fájl túl nagy ahhoz, hogy előnézete legyen. Töltsd le, hogy megtekinthesd.",
"Remove attachment": "Csatolmány eltávolítása", "Remove attachment": "Csatolmány eltávolítása",
"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.": "A böngésződ nem támogatja titkosított fájlok feltöltését. Használj újabbat.",
"A böngésződ nem támogatja titkosított fájlok feltöltését. Használj újabbat.",
"Invalid attachment.": "Érvénytelen csatolmány.", "Invalid attachment.": "Érvénytelen csatolmány.",
"Options": "Opciók", "Options": "Opciók",
"Shorten URL": "URL rövidítés", "Shorten URL": "URL rövidítés",
"Editor": "Szerkesztő felület", "Editor": "Szerkesztő felület",
"Preview": "Előnézet", "Preview": "Előnézet",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s számára szükséges, hogy a PATH itt végződjön: \"%s\". Kérlek frissítsd a PATH értékét az index.php fájlban.",
"%s számára szükséges, hogy a PATH itt végződjön: \"%s\". Kérlek frissítsd a PATH értékét az index.php fájlban.", "Decrypt": "Visszafejtés",
"Decrypt": "Enter password": "Jelszó",
"Dekódolás",
"Enter password":
"Jelszó",
"Loading…": "Folyamatban...", "Loading…": "Folyamatban...",
"Decrypting paste…": "Bejegyzés dekódolása...", "Decrypting paste…": "Bejegyzés visszafejtése...",
"Preparing new paste…": "Új bejegyzés előkészítése...", "Preparing new paste…": "Új bejegyzés előkészítése...",
"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>.": "Abban az esetben, ha ez az üzenet mindig látható lenne, látogass el a <a href=\"%s\">Gyakran Ismételt Kérdések szekcióba a megoldásához</a>.",
"Abban az esetben, ha ez az üzenet mindig látható lenne, látogass el a <a href=\"%s\">Gyakran Ismételt Kérdések szekcióba a megoldásához</a>.",
"+++ no paste text +++": "+++ nincs beillesztett szöveg +++", "+++ no paste text +++": "+++ nincs beillesztett szöveg +++",
"Could not get paste data: %s": "Could not get paste data: %s": "Az adat megszerzése nem sikerült: %s",
"Could not get paste data: %s", "QR code": "QR kód",
"QR code": "QR code", "This website is using an insecure HTTP connection! Please use it only for testing.": "Ez a weboldal nem biztonságos HTTP kapcsolatot használ! Emiatt csak teszt célokra ajánljuk.",
"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>.": "További információ <a href=\"%s\">ebben a GyIK bejegyzésben</a> található (angolul).",
"This website is using an insecure HTTP connection! Please use it only for testing.", "Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "A WebCrypto API használatához a böngésződ számára esetleg HTTPS kapcsolat szükséges. Ezért próbálj meg <a href=\"%s\">HTTPS-re váltani</a>.",
"For more information <a href=\"%s\">see this FAQ entry</a>.": "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "A böngésződ nem támogatja a WebAssemblyt, ami a zlib tömörítéshez kell. Létre tudsz hozni tömörítetlen dokumentumokat, de tömörítetteket nem tudsz olvasni.",
"For more information <a href=\"%s\">see this FAQ entry</a>.", "waiting on user to provide a password": "Várakozás a felhasználóra jelszó megadása okán",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Nem lehetett visszafejteni az adatot. Rossz jelszót ütöttél be? Ismételd meg a fent található gombbal.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.", "Retry": "Újrapróbálkozás",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Showing raw text…": "Nyers szöveg mutatása…",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones." "Notice:": "Megjegyzés:",
"This link will expire after %s.": "Ez a hivatkozás %s múlva megsemmisül.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "Ez a hivatkozás csak egyszeri alkalommal érhető el, ne használd a böngésződ \"Visszalépés\" vagy \"Újratöltés\" gombját.",
"Link:": "Hivatkozás:",
"Recipient may become aware of your timezone, convert time to UTC?": "A címzett esetleg megtudhatja az időzónádat, átalakítsuk azt UTC-re?",
"Use Current Timezone": "Az aktuális időzóna használata",
"Convert To UTC": "Átalakítás UTC időzónára",
"Close": "Bezárás",
"Encrypted note on PrivateBin": "Titkosított jegyzet a PrivateBinen",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Látogasd meg ezt a hivatkozást a bejegyzés megtekintéséhez. Ha mások számára is megadod ezt a linket, azzal hozzáférnek ők is.",
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
"Save paste": "Save paste"
} }

189
i18n/id.json Normal file
View File

@@ -0,0 +1,189 @@
{
"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 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."
],
"Paste is limited to %s of encrypted data.": "Paste dibatasi sampai %s dari data yang dienskripsi.",
"Invalid data.": "Data tidak valid.",
"You are unlucky. Try again.": "Anda belum beruntung. Coba kembali ya Kaka.",
"Error saving comment. Sorry.": "Terjadi kesalahan saat menyimpan komentar. Maaf ya Kaka.",
"Error saving paste. Sorry.": "Terjadi kesalahan saat menyimpan paste. Maaf ya Kaka.",
"Invalid paste ID.": "ID paste tidak valid.",
"Paste is not of burn-after-reading type.": "Paste bukan tipe hapus-setelah-membaca.",
"Wrong deletion token. Paste was not deleted.": "Token penghapusan salah. Paste belum terhapus.",
"Paste was properly deleted.": "Paste telah dihapus dengan benar.",
"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",
"Clone": "Klon",
"Raw text": "Teks mentah",
"Expires": "Kadaluarsa",
"Burn after reading": "Hapus setelah membaca",
"Open discussion": "Diskusi terbuka",
"Password (recommended)": "Kata Sandi (direkomendasikan)",
"Discussion": "Diskusi",
"Toggle navigation": "Alihkan navigasi",
"%d seconds": [
"%d detik",
"%d detik",
"%d detik",
"%d detik"
],
"%d minutes": [
"%d menit",
"%d menit",
"%d menit",
"%d menit"
],
"%d hours": [
"%d jam",
"%d jam",
"%d jam",
"%d jam"
],
"%d days": [
"%d hari",
"%d hari",
"%d hari",
"%d hari"
],
"%d weeks": [
"%d minggu",
"%d minggu",
"%d minggu",
"%d minggu"
],
"%d months": [
"%d bulan",
"%d bulan",
"%d bulan",
"%d bulan"
],
"%d years": [
"%d tahun",
"%d tahun",
"%d tahun",
"%d tahun"
],
"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."
],
"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."
],
"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."
],
"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."
],
"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."
],
"Please enter the password for this paste:": "Silahkan masukkan kata sandi untuk paste ini:",
"Could not decrypt data (Wrong key?)": "Tidak dapat mendekrip data (Salah kunci?)",
"Could not delete the paste, it was not stored in burn after reading mode.": "Tidak dapat menghapus paste, ini dikarenakan data tidak tersimpan dalam mode hapus setelah membaca.",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "HANYA UNTUK ANDA SAJA. Jangan tutup kolom jendela ini, pesan ini tidak akan dapat ditampilkan lagi.",
"Could not decrypt comment; Wrong key?": "Tidak dapat mendekrip komentar; Salah kunci?",
"Reply": "Balas",
"Anonymous": "Tanpa Nama",
"Avatar generated from IP address": "Avatar dihasilkan dari alamat IP",
"Add comment": "Tambah komentar",
"Optional nickname…": "Nama julukan tambahan…",
"Post comment": "Posting komentar",
"Sending comment…": "Mengirim komentar…",
"Comment posted.": "Komentar telah diposting.",
"Could not refresh display: %s": "Tidak dapat menyegarkan tampilan: %s",
"unknown status": "status tidak diketahui",
"server error or not responding": "kesalahan server atau server tidak merespon",
"Could not post comment: %s": "Tidak dapat memposting komentar: %s",
"Sending paste…": "Mengirim paste…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Paste Anda adalah <a id=\"pasteurl\" href=\"%s\">%s</a><span id=\"copyhint\">(Tekan [Ctrl]+[c] untuk menyalin)</span>",
"Delete data": "Hapus data",
"Could not create paste: %s": "Tidak dapat membuat paste: %s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Tidak dapat mendekripsi paste: Kunci dekripsi tidak ada di URL (Apakah Anda menggunakan redirector atau penyingkat URL yang menghapus bagian dari URL?)",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB",
"PiB": "PiB",
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Format",
"Plain Text": "Teks Biasa",
"Source Code": "Kode Sumber",
"Markdown": "Markdown",
"Download attachment": "Unduh lampiran",
"Cloned: '%s'": "Diklon: '%s'",
"The cloned file '%s' was attached to this paste.": "Berkas yang di-klon '%s' telah dilampirkan pada paste ini.",
"Attach a file": "Lampirkan sebuah berkas",
"alternatively drag & drop a file or paste an image from the clipboard": "sebagai alternatif, seret & jatuhkan berkas atau tempel sebuah gambar dari papan klip",
"File too large, to display a preview. Please download the attachment.": "File terlalu besar untuk menampilkan pratinjau. Silakan unduh lampirannya.",
"Remove attachment": "Hapus lampiran",
"Your browser does not support uploading encrypted files. Please use a newer browser.": "Browser Anda tidak mendukung pengunggahan file terenkripsi. Harap gunakan browser yang lebih baru.",
"Invalid attachment.": "Lampiran tidak valid.",
"Options": "Pilihan",
"Shorten URL": "Pendekkan alamat URL",
"Editor": "Penyunting",
"Preview": "Pratinjau",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s memerlukan PATH berakhir dalam sebuah \"%s\". Silahkan perbarui PATH dalam index.php Anda.",
"Decrypt": "Dekrip",
"Enter password": "Masukkan kata sandi",
"Loading…": "Memuat…",
"Decrypting paste…": "Men-dekrip paste…",
"Preparing new paste…": "Menyiapkan paste baru…",
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "Jika pesan ini tidak pernah menghilang, silahkan kunjungi dan lihat pada <a href=\"%s\">FAQ ini untuk informasi bagaimana menyelesaikan masalah tersebut</a>.",
"+++ no paste text +++": "+++ tidak ada teks paste +++",
"Could not get paste data: %s": "Tidak dapat mengambil/menampilkan data paste: %s",
"QR code": "Kode QR",
"This website is using an insecure HTTP connection! Please use it only for testing.": "Situs web ini menggunakan koneksi HTTP yang tidak aman! Silahkan gunakan hanya untuk pengujian.",
"For more information <a href=\"%s\">see this FAQ entry</a>.": "Untuk informasi lebih lanjut, <a href=\"%s\"> lihat entri FAQ ini </a>.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Browser Anda mungkin memerlukan koneksi HTTPS untuk mendukung API Webcrypto. Coba <a href=\"%s\"> beralih ke HTTPS </a>.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Browser Anda tidak mendukung Webassembly, yang digunakan untuk kompresi zlib. Anda dapat membuat dokumen yang tidak terkompresi, tetapi tidak akan dapat membaca berkas yang terkompresi.",
"waiting on user to provide a password": "menunggu pengguna untuk menyediakan kata sandi",
"Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Tidak dapat mendekrip data. Apakah Anda memasukkan kata sandi yang salah? Silahkan coba lagi dengan tombol di bagian atas.",
"Retry": "Coba lagi",
"Showing raw text…": "Menampilkan teks mentah…",
"Notice:": "Pengumuman:",
"This link will expire after %s.": "Tautan ini akan kadaluarsa setelah %s.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "Tautan ini hanya dapat diakses satu kali, jangan gunakan tombol Kembali atau tombol Segarkan di browser Anda.",
"Link:": "Tautan:",
"Recipient may become aware of your timezone, convert time to UTC?": "Penerima dapat mengetahui zona waktu Anda, ubah waktu menjadi UTC?",
"Use Current Timezone": "Gunakan Zonawaktu Saat Ini",
"Convert To UTC": "Konversi Ke UTC",
"Close": "Tutup",
"Encrypted note on PrivateBin": "Catatan ter-ekrip di PrivateBin",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Kunjungi tautan ini untuk melihat catatan. Memberikan alamat URL pada siapapun juga, akan mengizinkan mereka untuk mengakses catatan, so pasti gitu loh Kaka.",
"URL shortener may expose your decrypt key in URL.": "Pemendek URL mungkin akan menampakkan kunci dekrip Anda dalam URL.",
"Save paste": "Simpan paste"
}

View File

@@ -1,125 +1,144 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://privatebin.info/\">project page</a>.": "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s è 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.",
"%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 <i>nel Browser</i> con algoritmo AES a 256 Bit. Per ulteriori informazioni, vedi <a href=\"https://privatebin.info/\">Sito del progetto</a>.", "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": "Because ignorance is bliss": "Perché l'ignoranza è una benedizione (Because ignorance is bliss)",
"Perché l'ignoranza è una benedizione (Because ignorance is bliss)",
"en": "it", "en": "it",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.": "Questo messaggio non esiste, è scaduto o è stato cancellato.",
"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 php %s or above to work. Sorry.": "%s requires configuration section [%s] to be present in configuration file.": "%s richiede la presenza della sezione [%s] nei file di configurazione.",
"%s richiede php %s o superiore per funzionare. Ci spiace.", "Please wait %d seconds between each post.": [
"%s requires configuration section [%s] to be present in configuration file.": "Attendi per favore un secondo prima di ciascun invio.",
"%s richiede la presenza della sezione [%s] nei file di configurazione.",
"Please wait %d seconds between each post.":
"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.": "Attendi per favore %d secondi prima di ciascun invio.",
"La dimensione del messaggio è limitata a %s di dati cifrati.", "Attendi per favore %d secondi prima di ciascun invio."
"Invalid data.": ],
"Dati non validi.", "Paste is limited to %s of encrypted data.": "La dimensione del messaggio è limitata a %s di dati cifrati.",
"You are unlucky. Try again.": "Invalid data.": "Dati non validi.",
"Ritenta, sarai più fortunato.", "You are unlucky. Try again.": "Ritenta, sarai più fortunato.",
"Error saving comment. Sorry.": "Error saving comment. Sorry.": "Errore durante il salvataggio del commento.",
"Errore durante il salvataggio del commento.", "Error saving paste. Sorry.": "Errore durante il salvataggio del messaggio.",
"Error saving paste. Sorry.": "Invalid paste ID.": "ID-Messaggio non valido.",
"Errore durante il salvataggio del messaggio.", "Paste is not of burn-after-reading type.": "Il messaggio non è di tipo Distruggi-dopo-lettura.",
"Invalid paste ID.": "Wrong deletion token. Paste was not deleted.": "Codice cancellazione errato. Il messaggio NON è stato cancellato.",
"ID-Messaggio non valido.", "Paste was properly deleted.": "Il messaggio è stato correttamente cancellato.",
"Paste is not of burn-after-reading type.": "JavaScript is required for %s to work. Sorry for the inconvenience.": "%s funziona solo con JavaScript attivo. Ci dispiace per l'inconveniente.",
"Il messaggio non è di tipo Distruggi-dopo-lettura.", "%s requires a modern browser to work.": "%s richiede un browser moderno e aggiornato per funzionare.",
"Wrong deletion token. Paste was not deleted.": "New": "Nuovo",
"Codice cancellazione errato. Il messaggio NON è stato cancellato.", "Send": "Invia",
"Paste was properly deleted.": "Clone": "Clona",
"Il messaggio è stato correttamente cancellato.", "Raw text": "Testo Raw",
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.": "Expires": "Scade",
"%s funziona solo con JavaScript attivo.<br />Ci dispiace per l'inconveniente.", "Burn after reading": "Distruggi dopo lettura",
"%s requires a modern browser to work.": "Open discussion": "Apri discussione",
"%s richiede un browser moderno e aggiornato per funzionare.", "Password (recommended)": "Password (raccomandato)",
"New": "Discussion": "Discussione",
"Nuovo", "Toggle navigation": "Scambia Navigazione",
"Send": "%d seconds": [
"Invia", "%d secondo",
"Clone": "%d secondi",
"Clona", "%d seconds (2nd plural)",
"Raw text": "%d seconds (3rd plural)"
"Testo Raw", ],
"Expires": "%d minutes": [
"Scade", "%d minuto",
"Burn after reading": "%d minuti",
"Distruggi dopo lettura", "%d minutes (2nd plural)",
"Open discussion": "%d minutes (3rd plural)"
"Apri discussione", ],
"Password (recommended)": "%d hours": [
"Password (raccomandato)", "%d ora",
"Discussion": "%d ore",
"Discussione", "%d hours (2nd plural)",
"Toggle navigation": "%d hours (3rd plural)"
"Scambia Navigazione", ],
"%d seconds": ["%d secondo", "%d secondi"], "%d days": [
"%d minutes": ["%d minuto", "%d minuti"], "%d giorno",
"%d hours": ["%d ora", "%d ore"], "%d giorni",
"%d days": ["%d giorno", "%d giorni"], "%d days (2nd plural)",
"%d weeks": ["%d settimana", "%d settimane"], "%d days (3rd plural)"
"%d months": ["%d mese", "%d mesi"], ],
"%d years": ["%d anno", "%d anni"], "%d weeks": [
"Never": "%d settimana",
"Mai", "%d settimane",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "%d weeks (2nd plural)",
"Nota: questo è un servizio di prova, i messaggi salvati possono essere cancellati in qualsiasi momento. Moriranno dei gattini se abuserai di questo servizio.", "%d weeks (3rd plural)"
"This document will expire in %d seconds.": ],
["Questo documento scadrà tra un secondo.", "Questo documento scadrà in %d secondi."], "%d months": [
"This document will expire in %d minutes.": "%d mese",
["Questo documento scadrà tra un minuto.", "Questo documento scadrà in %d minuti."], "%d mesi",
"This document will expire in %d hours.": "%d months (2nd plural)",
["Questo documento scadrà tra un'ora.", "Questo documento scadrà in %d ore."], "%d months (3rd plural)"
"This document will expire in %d days.": ],
["Questo documento scadrà tra un giorno.", "Questo documento scadrà in %d giorni."], "%d years": [
"This document will expire in %d months.": "%d anno",
["Questo documento scadrà tra un mese.", "Questo documento scadrà in %d mesi."], "%d anni",
"Please enter the password for this paste:": "%d years (2nd plural)",
"Inserisci la password per questo messaggio:", "%d years (3rd plural)"
"Could not decrypt data (Wrong key?)": ],
"Non riesco a decifrari i dati (Chiave errata?)", "Never": "Mai",
"Could not delete the paste, it was not stored in burn after reading mode.": "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.",
"Non riesco a cancellare il messaggio, non è stato salvato in modalità Distruggi-dopo-lettora.", "This document will expire in %d seconds.": [
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "Questo documento scadrà tra un secondo.",
"FOR YOUR EYES ONLY. Non chiudere questa finestra, il messaggio non può essere visualizzato una seconda volta.", "Questo documento scadrà in %d secondi.",
"Could not decrypt comment; Wrong key?": "Questo documento scadrà in %d secondi.",
"Non riesco a decifrare il commento (Chiave errata?)", "Questo documento scadrà in %d secondi."
"Reply": ],
"Rispondi", "This document will expire in %d minutes.": [
"Anonymous": "Questo documento scadrà tra un minuto.",
"Anonimo", "Questo documento scadrà in %d minuti.",
"Avatar generated from IP address": "Questo documento scadrà in %d minuti.",
"Avatar generato dall'indirizzo IP)", "Questo documento scadrà in %d minuti."
"Add comment": ],
"Aggiungi un commento", "This document will expire in %d hours.": [
"Optional nickname…": "Questo documento scadrà tra un'ora.",
"Nickname opzionale…", "Questo documento scadrà in %d ore.",
"Post comment": "Questo documento scadrà in %d ore.",
"Invia commento", "Questo documento scadrà in %d ore."
"Sending comment…": ],
"Commento in fase di invio…", "This document will expire in %d days.": [
"Comment posted.": "Questo documento scadrà tra un giorno.",
"Commento inviato.", "Questo documento scadrà in %d giorni.",
"Could not refresh display: %s": "Questo documento scadrà in %d giorni.",
"Non riesco ad aggiornare il display: %s", "Questo documento scadrà in %d giorni."
"unknown status": ],
"stato sconosciuto", "This document will expire in %d months.": [
"server error or not responding": "Questo documento scadrà tra un mese.",
"errore o mancata risposta dal server", "Questo documento scadrà in %d mesi.",
"Could not post comment: %s": "Questo documento scadrà in %d mesi.",
"Impossibile inviare il commento: %s", "Questo documento scadrà in %d mesi."
"Sending paste…": ],
"Messaggio in fase di invio", "Please enter the password for this paste:": "Inserisci la password per questo messaggio:",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Could not decrypt data (Wrong key?)": "Non riesco a decifrare i dati (chiave sbagliata?)",
"Il tuo messaggio è qui: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Premi [Ctrl]+[c] (Windows) o [Cmd]+[c] (Mac) per copiare il link)</span>", "Could not delete the paste, it was not stored in burn after reading mode.": "Non riesco a cancellare il messaggio, non è stato salvato in modalità Distruggi-dopo-lettora.",
"Delete data": "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "FOR YOUR EYES ONLY. Non chiudere questa finestra, il messaggio non può essere visualizzato una seconda volta.",
"Cancella i dati", "Could not decrypt comment; Wrong key?": "Non riesco a decifrare il commento (Chiave sbagliata?)",
"Could not create paste: %s": "Reply": "Rispondi",
"Non riesco a creare il messaggio: %s", "Anonymous": "Anonimo",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Avatar generated from IP address": "Avatar generato dall'indirizzo IP",
"Non riesco a decifrare il messaggio: manca la chiave di decifrazione nell'URL (La chiave è parte integrante dell'URL. Per caso hai usato un Redirector o un altro servizio che ha rimosso una parte dell'URL?)", "Add comment": "Aggiungi un commento",
"Optional nickname…": "Nickname opzionale…",
"Post comment": "Invia commento",
"Sending comment…": "Commento in fase di invio…",
"Comment posted.": "Commento inviato.",
"Could not refresh display: %s": "Non riesco ad aggiornare il display: %s",
"unknown status": "stato sconosciuto",
"server error or not responding": "errore o mancata risposta dal server",
"Could not post comment: %s": "Impossibile inviare il commento: %s",
"Sending paste…": "Messaggio in fase di invio…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Il tuo messaggio è qui: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Premi [Ctrl]+[c] (Windows) o [Cmd]+[c] (Mac) per copiare il link)</span>",
"Delete data": "Cancella i dati",
"Could not create paste: %s": "Non riesco a creare il messaggio: %s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Non riesco a decifrare il messaggio: manca la chiave di decifrazione nell'URL (La chiave è parte integrante dell'URL. Per caso hai usato un Redirector o un altro servizio che ha rimosso una parte dell'URL?)",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB",
"PiB": "PiB",
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Formato", "Format": "Formato",
"Plain Text": "Solo Testo", "Plain Text": "Solo Testo",
"Source Code": "Codice Sorgente", "Source Code": "Codice Sorgente",
@@ -128,37 +147,43 @@
"Cloned: '%s'": "Clonato: '%s'", "Cloned: '%s'": "Clonato: '%s'",
"The cloned file '%s' was attached to this paste.": "Il file clonato '%s' era allegato a questo messaggio.", "The cloned file '%s' was attached to this paste.": "Il file clonato '%s' era allegato a questo messaggio.",
"Attach a file": "Allega un file", "Attach a file": "Allega un file",
"alternatively drag & drop a file or paste an image from the clipboard": "alternatively drag & drop a file or paste an image from the clipboard", "alternatively drag & drop a file or paste an image from the clipboard": "in alternativa trascina e rilascia un file o incolla un'immagine dagli appunti",
"File too large, to display a preview. Please download the attachment.": "File too large, to display a preview. Please download the attachment.", "File too large, to display a preview. Please download the attachment.": "File troppo grande, per visualizzare un'anteprima. Sei pregato di scaricare l'allegato.",
"Remove attachment": "Rimuovi allegato", "Remove attachment": "Rimuovi allegato",
"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.": "Il tuo browser non supporta l'invio di file cifrati. Utilizza un browser più recente.",
"Il tuo browser non supporta l'invio di file cifrati. Utilizza un browser più recente.",
"Invalid attachment.": "Allegato non valido.", "Invalid attachment.": "Allegato non valido.",
"Options": "Opzioni", "Options": "Opzioni",
"Shorten URL": "Accorcia URL", "Shorten URL": "Accorcia URL",
"Editor": "Editor", "Editor": "Editor",
"Preview": "Preview", "Preview": "Anteprima",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s necessita che PATH termini con \"%s\". Aggiorna la variabile PATH nel tuo index.php.",
"%s necessita che PATH termini con \"%s\". Aggiorna la variabile PATH nel tuo index.php.", "Decrypt": "Decifra",
"Decrypt": "Enter password": "Inserisci la password",
"Decifra",
"Enter password":
"Inserisci la password",
"Loading…": "Carico…", "Loading…": "Carico…",
"Decrypting paste…": "Decifro il messaggio…", "Decrypting paste…": "Decifro il messaggio…",
"Preparing new paste…": "Preparo il nuovo messaggio…", "Preparing new paste…": "Preparo il nuovo messaggio…",
"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>.": "Nel caso questo messaggio non scompaia, controlla questa <a href=\"%s\">FAQ</a> per trovare informazioni su come risolvere il problema (in Inglese).",
"Nel caso questo messaggio non scompaia, controlla questa <a href=\"%s\">FAQ</a> per trovare informazioni su come risolvere il problema (in Inglese).",
"+++ no paste text +++": "+++ nessun testo nel messaggio +++", "+++ no paste text +++": "+++ nessun testo nel messaggio +++",
"Could not get paste data: %s": "Could not get paste data: %s": "Impossibile ottenere i dati di incolla: %s",
"Could not get paste data: %s",
"QR code": "QR code", "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.": "Questo sito web sta usando una connessione HTTP non sicura! Si prega di usarlo solo per il test.",
"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>.": "Per ulteriori informazioni <a href=\"%s\">vedi questa voce della FAQ</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>.": "Il tuo browser potrebbe richiedere una connessione HTTPS per supportare l'API WebCrypto. Prova <a href=\"%s\">a passare a HTTPS</a>.",
"For more information <a href=\"%s\">see this FAQ entry</a>.", "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Il tuo browser non supporta WebAssembly, utilizzato per la compressione di zlib. Puoi creare documenti non compressi, ma non è possibile leggere quelli compressi.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "waiting on user to provide a password": "in attesa sull'utente di fornire una password",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.", "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Impossibile decrittografare i dati. Hai inserito una password errata? Riprova con il pulsante in alto.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Retry": "Riprova",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones." "Showing raw text…": "Mostrando il testo grezzo…",
"Notice:": "Avviso:",
"This link will expire after %s.": "Questo collegamento scadrà dopo %s.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "Questo collegamento è accessibile una sola volta, non usare il pulsante indietro o aggiorna nel tuo browser.",
"Link:": "Link:",
"Recipient may become aware of your timezone, convert time to UTC?": "Il destinatario può essere a conoscenza del tuo fuso orario, convertire l'orario in UTC?",
"Use Current Timezone": "Usa Fuso Orario Corrente",
"Convert To UTC": "Converti a UTC",
"Close": "Chiudi",
"Encrypted note on PrivateBin": "Nota crittografata su PrivateBin",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visita questo collegamento per vedere la nota. Dare l'URL a chiunque consente anche a loro di accedere alla nota.",
"URL shortener may expose your decrypt key in URL.": "URL shortener può esporre la tua chiave decrittografata nell'URL.",
"Save paste": "Salva il messagio"
} }

189
i18n/ja.json Normal file
View File

@@ -0,0 +1,189 @@
{
"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.",
"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)"
],
"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",
"%d seconds": [
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
],
"%d minutes": [
"%d minute (singular)",
"%d minutes (1st plural)",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
],
"%d hours": [
"%d hour (singular)",
"%d hours (1st plural)",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
],
"%d days": [
"%d day (singular)",
"%d days (1st plural)",
"%d days (2nd plural)",
"%d days (3rd plural)"
],
"%d weeks": [
"%d week (singular)",
"%d weeks (1st plural)",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
],
"%d months": [
"%d month (singular)",
"%d months (1st plural)",
"%d months (2nd plural)",
"%d months (3rd plural)"
],
"%d years": [
"%d year (singular)",
"%d years (1st plural)",
"%d years (2nd plural)",
"%d years (3rd plural)"
],
"Never": "Never",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.",
"This document will expire in %d seconds.": [
"This document will expire in %d second. (singular)",
"This document will expire in %d seconds. (1st plural)",
"This document will expire in %d seconds. (2nd plural)",
"This document will expire in %d seconds. (3rd plural)"
],
"This document will expire in %d 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 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 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 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)"
],
"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 PrivateBin": "Encrypted note on PrivateBin",
"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"
}

189
i18n/ku.json Normal file
View File

@@ -0,0 +1,189 @@
{
"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": "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.",
"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)"
],
"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",
"%d seconds": [
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
],
"%d minutes": [
"%d minute (singular)",
"%d minutes (1st plural)",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
],
"%d hours": [
"%d hour (singular)",
"%d hours (1st plural)",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
],
"%d days": [
"%d day (singular)",
"%d days (1st plural)",
"%d days (2nd plural)",
"%d days (3rd plural)"
],
"%d weeks": [
"%d week (singular)",
"%d weeks (1st plural)",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
],
"%d months": [
"%d month (singular)",
"%d months (1st plural)",
"%d months (2nd plural)",
"%d months (3rd plural)"
],
"%d years": [
"%d year (singular)",
"%d years (1st plural)",
"%d years (2nd plural)",
"%d years (3rd plural)"
],
"Never": "Never",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.",
"This document will expire in %d seconds.": [
"This document will expire in %d second. (singular)",
"This document will expire in %d seconds. (1st plural)",
"This document will expire in %d seconds. (2nd plural)",
"This document will expire in %d seconds. (3rd plural)"
],
"This document will expire in %d 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 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 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 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)"
],
"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 PrivateBin": "Encrypted note on PrivateBin",
"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"
}

189
i18n/la.json Normal file
View File

@@ -0,0 +1,189 @@
{
"PrivateBin": "PrivatumVinariam",
"%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.",
"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)"
],
"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",
"%d seconds": [
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
],
"%d minutes": [
"%d minute (singular)",
"%d minutes (1st plural)",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
],
"%d hours": [
"%d hour (singular)",
"%d hours (1st plural)",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
],
"%d days": [
"%d day (singular)",
"%d days (1st plural)",
"%d days (2nd plural)",
"%d days (3rd plural)"
],
"%d weeks": [
"%d week (singular)",
"%d weeks (1st plural)",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
],
"%d months": [
"%d month (singular)",
"%d months (1st plural)",
"%d months (2nd plural)",
"%d months (3rd plural)"
],
"%d years": [
"%d year (singular)",
"%d years (1st plural)",
"%d years (2nd plural)",
"%d years (3rd plural)"
],
"Never": "Never",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.",
"This document will expire in %d seconds.": [
"This document will expire in %d second. (singular)",
"This document will expire in %d seconds. (1st plural)",
"This document will expire in %d seconds. (2nd plural)",
"This document will expire in %d seconds. (3rd plural)"
],
"This document will expire in %d 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 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 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 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)"
],
"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 PrivateBin": "Encrypted note on PrivateBin",
"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"
}

View File

@@ -63,6 +63,7 @@
"ho": ["Hiri Motu", "Hiri Motu"], "ho": ["Hiri Motu", "Hiri Motu"],
"hu": ["magyar", "Hungarian"], "hu": ["magyar", "Hungarian"],
"ia": ["Interlingua", "Interlingua"], "ia": ["Interlingua", "Interlingua"],
"id": ["bahasa Indonesia","Indonesian"],
"ie": ["Interlingue", "Interlingue"], "ie": ["Interlingue", "Interlingue"],
"ga": ["Gaeilge", "Irish"], "ga": ["Gaeilge", "Irish"],
"ig": ["Asụsụ Igbo", "Igbo"], "ig": ["Asụsụ Igbo", "Igbo"],

189
i18n/lt.json Normal file
View File

@@ -0,0 +1,189 @@
{
"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 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žių.",
"Tarp kiekvieno įrašo palaukite %d sekundę."
],
"Paste is limited to %s of encrypted data.": "Įdėjimas yra apribotas iki %s šifruotų duomenų.",
"Invalid data.": "Neteisingi duomenys.",
"You are unlucky. Try again.": "Jums nesiseka. Bandykite dar kartą.",
"Error saving comment. Sorry.": "Klaida įrašant komentarą. Apgailestaujame.",
"Error saving paste. Sorry.": "Klaida įrašant įdėjimą. Apgailestaujame.",
"Invalid paste ID.": "Neteisingas įdėjimo ID.",
"Paste is not of burn-after-reading type.": "Įdėjimo tipas nėra „Perskaičius sudeginti“.",
"Wrong deletion token. Paste was not deleted.": "Neteisingas ištrynimo prieigos raktas. Įdėjimas nebuvo ištrintas.",
"Paste was properly deleted.": "Įdėjimas buvo tinkamai ištrintas.",
"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",
"Clone": "Dubliuoti",
"Raw text": "Neapdorotas tekstas",
"Expires": "Baigs galioti po",
"Burn after reading": "Perskaičius sudeginti",
"Open discussion": "Atvira diskusija",
"Password (recommended)": "Slaptažodis (rekomenduojama)",
"Discussion": "Diskusija",
"Toggle navigation": "Perjungti naršymą",
"%d seconds": [
"%d sekundės",
"%d sekundžių",
"%d sekundžių",
"%d sekundės"
],
"%d minutes": [
"%d minutės",
"%d minučių",
"%d minučių",
"%d minutės"
],
"%d hours": [
"%d valandos",
"%d valandų",
"%d valandų",
"%d valandos"
],
"%d days": [
"%d dienos",
"%d dienų",
"%d dienų",
"%d dienos"
],
"%d weeks": [
"%d savaitės",
"%d savaičių",
"%d savaičių",
"%d savaitės"
],
"%d months": [
"%d mėnesio",
"%d mėnesių",
"%d mėnesių",
"%d mėnesio"
],
"%d years": [
"%d metų",
"%d metų",
"%d metų",
"%d metų"
],
"Never": "Niekada",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Pastaba: Tai yra bandomoji paslauga. Duomenys bet kuriuo metu gali būti ištrinti. Kačiukai mirs, jei piktnaudžiausite šia paslauga.",
"This document will expire in %d seconds.": [
"Š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."
],
"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."
],
"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."
],
"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."
],
"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."
],
"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?)",
"Could not delete the paste, it was not stored in burn after reading mode.": "Nepavyko ištrinti įdėjimo, jis nebuvo saugomas „Perskaičius sudeginti“ veiksenoje.",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "SKIRTA TIK JŪSŲ AKIMS. Neužverkite šio lango, šis pranešimas negalės būti rodomas dar kartą.",
"Could not decrypt comment; Wrong key?": "Nepavyko iššifruoti komentaro; Neteisingas raktas?",
"Reply": "Atsakyti",
"Anonymous": "Anonimas",
"Avatar generated from IP address": "Avataras sukurtas iš IP adreso",
"Add comment": "Pridėti komentarą",
"Optional nickname…": "Nebūtinas slapyvardis…",
"Post comment": "Skelbti komentarą",
"Sending comment…": "Siunčiamas komentaras…",
"Comment posted.": "Komentaras paskelbtas.",
"Could not refresh display: %s": "Nepavyko įkelti rodinio iš naujo: %s",
"unknown status": "nežinoma būsena",
"server error or not responding": "serverio klaida arba jis neatsako",
"Could not post comment: %s": "Nepavyko paskelbti komentaro: %s",
"Sending paste…": "Siunčiamas įdėjimas…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Jūsų įdėjimas yra <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Paspauskite [Vald]+[c] norėdami nukopijuoti)</span>",
"Delete data": "Ištrinti duomenis",
"Could not create paste: %s": "Nepavyko sukurti įdėjimo: %s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nepavyksta iššifruoti įdėjimo: URL adrese trūksta iššifravimo rakto (Ar naudojote peradresavimo ar URL trumpinimo įrankį, kuris pašalina URL dalį?)",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB",
"PiB": "PiB",
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Formatas",
"Plain Text": "Grynasis tekstas",
"Source Code": "Pirminis kodas",
"Markdown": "„Markdown“",
"Download attachment": "Atsisiųsti priedą",
"Cloned: '%s'": "Dubliuota: „%s“",
"The cloned file '%s' was attached to this paste.": "Dubliuotas failas „%s“ buvo pridėtas į šį įdėjimą.",
"Attach a file": "Pridėti failą",
"alternatively drag & drop a file or paste an image from the clipboard": "arba kitaip - tempkite failą arba įdėkite paveikslą iš iškarpinės",
"File too large, to display a preview. Please download the attachment.": "Failas per didelis, kad būtų rodoma peržiūra. Atsisiųskite priedą.",
"Remove attachment": "Šalinti priedą",
"Your browser does not support uploading encrypted files. Please use a newer browser.": "Jūsų naršyklė nepalaiko šifruotų failų įkėlimo. Naudokite naujesnę naršyklę.",
"Invalid attachment.": "Neteisingas priedas.",
"Options": "Parinktys",
"Shorten URL": "Sutrumpinti URL",
"Editor": "Redaktorius",
"Preview": "Peržiūra",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s reikalauja, kad PATH baigtųsi „%s“. Atnaujinkite PATH savo index.php.",
"Decrypt": "Iššifruoti",
"Enter password": "Įveskite slaptažodį",
"Loading…": "Įkeliama…",
"Decrypting paste…": "Iššifruojamas įdėjimas…",
"Preparing new paste…": "Ruošiamas naujas įdėjimas…",
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "Jeigu šis pranešimas niekada nedingsta, pasižiūrėkite <a href=\"%s\">šį DUK skyrių, kuriame yra informacija apie nesklandumų šalinimą</a>.",
"+++ no paste text +++": "+++ nėra įdėjimo teksto +++",
"Could not get paste data: %s": "Nepavyko gauti įdėjimo duomenų: %s",
"QR code": "QR kodas",
"This website is using an insecure HTTP connection! Please use it only for testing.": "Ši internetinė svetainė naudoja nesaugų HTTP ryšį! Naudokite ją tik bandymams.",
"For more information <a href=\"%s\">see this FAQ entry</a>.": "Išsamesnei informacijai, <a href=\"%s\">žiūrėkite šį DUK įrašą</a>.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Jūsų naršyklei gali prireikti HTTPS ryšio, kad palaikytų „WebCrypto“ API. Pabandykite <a href=\"%s\">persijungti į HTTPS</a>.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Jūsų naršyklė nepalaiko „WebAssembly“, kuri naudojama zlib glaudinimui. Jūs galite kurti neglaudintus dokumentus, tačiau negalite skaityti glaudintų dokumentų.",
"waiting on user to provide a password": "laukiama, kol naudotojas pateiks slaptažodį",
"Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Nepavyko iššifruoti duomenų. Ar įvedėte teisingą slaptažodį? Bandykite iš naujo pasinaudodami mygtuku viršuje.",
"Retry": "Bandyti dar kartą",
"Showing raw text…": "Rodomas neapdorotas tekstas…",
"Notice:": "Pranešimas:",
"This link will expire after %s.": "Ši nuoroda nustos galioti po %s.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "Ši nuoroda gali būti atverta tik vieną kartą, nenaudokite savo naršyklėje mygtuko „Grįžti“ ar „Įkelti iš naujo“.",
"Link:": "Nuoroda:",
"Recipient may become aware of your timezone, convert time to UTC?": "Gavėjas gali sužinoti jūsų laiko juostą, konvertuoti laiką į suderintąjį pasaulinį laiką (UTC)?",
"Use Current Timezone": "Naudoti esamą laiko juostą",
"Convert To UTC": "Konvertuoti į UTC",
"Close": "Užverti",
"Encrypted note on PrivateBin": "Šifruoti užrašai ties PrivateBin",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Norėdami matyti užrašus, aplankykite šį tinklalapį. Pasidalinus šiuo URL adresu su kitais žmonėmis, jiems taip pat bus leidžiama prieiga prie šių užrašų.",
"URL shortener may expose your decrypt key in URL.": "URL trumpinimo įrankis gali atskleisti URL adrese jūsų iššifravimo raktą.",
"Save paste": "Save paste"
}

View File

@@ -1,125 +1,144 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://privatebin.info/\">project page</a>.": "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s 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 een minimalistische, open source online pastebin waarbij de server geen kennis heeft van de geplakte gegevens. Gegevens worden gecodeerd/gedecodeerd <i> in de browser </i> met behulp van 256 bits AES. Meer informatie is te vinden op de <a href=\"https://privatebin.info/\">projectpagina</a>.", "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": "Because ignorance is bliss": "Onwetendheid is een zegen",
"Onwetendheid is een zegen",
"en": "nl", "en": "nl",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.": "Geplakte tekst bestaat niet, is verlopen of verwijderd.",
"Geplakte tekst 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 php %s or above to work. Sorry.": "%s requires configuration section [%s] to be present in configuration file.": "%s vereist dat de configuratiesectie [%s] aanwezig is in het configuratiebestand",
"%s vereist PHP %s of hoger om te kunnen werken. Sorry", "Please wait %d seconds between each post.": [
"%s requires configuration section [%s] to be present in configuration file.": "Alstublieft %d second wachten tussen elk bericht.",
"%s vereist dat de configuratiesectie [%s] aanwezig is in het configuratiebestand", "Alstublieft %d seconden wachten tussen elk bericht.",
"Please wait %d seconds between each post.": "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", "Paste is limited to %s of encrypted data.": "Geplakte tekst is beperkt tot %s aan versleutelde gegevens",
"Invalid data.": "Invalid data.": "Ongeldige gegevens",
"Ongeldige gegevens", "You are unlucky. Try again.": "Helaas. Probeer het nog eens",
"You are unlucky. Try again.": "Error saving comment. Sorry.": "Fout bij het opslaan van het commentaar. Sorry",
"Helaas. Probeer het nog eens", "Error saving paste. Sorry.": "Fout bij het opslaan van de geplakte tekst. Sorry.",
"Error saving comment. Sorry.": "Invalid paste ID.": "Ongeldige ID.",
"Fout bij het opslaan van het commentaar. Sorry", "Paste is not of burn-after-reading type.": "Geplakte tekst is geen 'vernietig na lezen' type",
"Error saving paste. Sorry.": "Wrong deletion token. Paste was not deleted.": "Foutieve verwijdercode. Geplakte tekst is niet verwijderd.",
"Fout bij het opslaan van de geplakte tekst. Sorry.", "Paste was properly deleted.": "Geplakte tekst is correct verwijderd.",
"Invalid paste ID.": "JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript vereist om %s te laten werken. Sorry voor het ongemak.",
"Ongeldige ID.", "%s requires a modern browser to work.": "%s vereist een moderne browser om te kunnen werken ",
"Paste is not of burn-after-reading type.": "New": "Nieuw",
"Geplakte tekst is geen 'vernietig na lezen' type", "Send": "Verzenden",
"Wrong deletion token. Paste was not deleted.": "Clone": "Clonen",
"Foutieve verwijdercode. Geplakte tekst is niet verwijderd.", "Raw text": "Onbewerkte tekst",
"Paste was properly deleted.": "Expires": "Verloopt",
"Geplakte tekst is correct verwijderd.", "Burn after reading": "Vernietig na lezen",
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.": "Open discussion": "Open discussie",
"JavaScript vereist om %s te laten werken.<br />Sorry voor het ongemak.", "Password (recommended)": "Wachtwoord (aanbevolen)",
"%s requires a modern browser to work.": "Discussion": "Discussie",
"%s vereist een moderne browser om te kunnen werken ", "Toggle navigation": "Navigatie openen/sluiten",
"New": "%d seconds": [
"Nieuw", "%d second",
"Send": "%d seconden",
"Verzenden", "%d seconds (2nd plural)",
"Clone": "%d seconds (3rd plural)"
"Clonen", ],
"Raw text": "%d minutes": [
"Onbewerkte tekst", "%d minuut",
"Expires": "%d minuten",
"Verloopt", "%d minutes (2nd plural)",
"Burn after reading": "%d minutes (3rd plural)"
"Vernietig na lezen", ],
"Open discussion": "%d hours": [
"Open discussie", "%d uur",
"Password (recommended)": "%d uren",
"Wachtwoord (aanbevolen)", "%d hours (2nd plural)",
"Discussion": "%d hours (3rd plural)"
"Discussie", ],
"Toggle navigation": "%d days": [
"Navigatie openen/sluiten", "%d dag",
"%d seconds": ["%d second", "%d seconden"], "%d dagen",
"%d minutes": ["%d minuut", "%d minuten"], "%d days (2nd plural)",
"%d hours": ["%d uur"], "%d days (3rd plural)"
"%d days": ["%d dag", "%d dagen"], ],
"%d weeks": ["%d week", "%d weken"], "%d weeks": [
"%d months": ["%d maand", "%d maanden"], "%d week",
"%d years": ["%d jaar"], "%d weken",
"Never": "%d weeks (2nd plural)",
"Nooit", "%d weeks (3rd plural)"
"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.", "%d months": [
"This document will expire in %d seconds.": "%d maand",
["Dit document verloopt over %d second.", "Dit document verloopt over %d seconden."], "%d maanden",
"This document will expire in %d minutes.": "%d months (2nd plural)",
["Dit document verloopt over %d minuut.", "Dit document verloopt over %d minuten"], "%d months (3rd plural)"
"This document will expire in %d hours.": ],
["Dit document verloopt over %d uur."], "%d years": [
"This document will expire in %d days.": "%d jaar",
["Dit document verloopt over %d dag.", "Dit document verloopt over %d dagen."], "%d jaaren",
"This document will expire in %d months.": "%d years (2nd plural)",
["Dit document verloopt over %d maand.", "Dit document verloopt over %d maanden."], "%d years (3rd plural)"
"Please enter the password for this paste:": ],
"Voer het wachtwoord in voor deze geplakte tekst:", "Never": "Nooit",
"Could not decrypt data (Wrong key?)": "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.",
"Kon de gegevens niet decoderen (verkeerde sleutel?)", "This document will expire in %d seconds.": [
"Could not delete the paste, it was not stored in burn after reading mode.": "Dit document verloopt over %d second.",
"Verwijderen van de geplakte tekst niet mogelijk, deze werd niet opgeslagen in 'vernietig na lezen' modus.", "Dit document verloopt over %d seconden.",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "Dit document verloopt over %d seconden.",
"FOR YOUR EYES ONLY. Sluit dit venster niet, dit bericht kan niet opnieuw worden weergegeven.", "Dit document verloopt over %d seconden."
"Could not decrypt comment; Wrong key?": ],
"Kon het commentaar niet decoderen; Verkeerde sleutel?", "This document will expire in %d minutes.": [
"Reply": "Dit document verloopt over %d minuut.",
"Beantwoorden", "Dit document verloopt over %d minuten.",
"Anonymous": "Dit document verloopt over %d minuten.",
"Anoniem", "Dit document verloopt over %d minuten."
"Avatar generated from IP address": ],
"Anonieme avatar (van het IP adres)", "This document will expire in %d hours.": [
"Add comment": "Dit document verloopt over %d uur.",
"Commentaar toevoegen", "Dit document verloopt over %d uren.",
"Optional nickname…": "Dit document verloopt over %d uren.",
"Optionele bijnaam…", "Dit document verloopt over %d uren."
"Post comment": ],
"Plaats een commentaar", "This document will expire in %d days.": [
"Sending comment…": "Dit document verloopt over %d dag.",
"Commentaar verzenden", "Dit document verloopt over %d dagen.",
"Comment posted.": "Dit document verloopt over %d dagen.",
"Commentaar geplaatst.", "Dit document verloopt over %d dagen."
"Could not refresh display: %s": ],
"Kon de weergave niet vernieuwen: %s", "This document will expire in %d months.": [
"unknown status": "Dit document verloopt over %d maand.",
"Onbekende status", "Dit document verloopt over %d maanden.",
"server error or not responding": "Dit document verloopt over %d maanden.",
"Serverfout of server reageert niet", "Dit document verloopt over %d maanden."
"Could not post comment: %s": ],
"Kon het commentaar niet plaatsen: %s", "Please enter the password for this paste:": "Voer het wachtwoord in voor deze geplakte tekst:",
"Sending paste…": "Could not decrypt data (Wrong key?)": "Kon de gegevens niet decoderen (verkeerde sleutel?)",
"Geplakte tekst verzenden…", "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.",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "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.",
"Uw geplakte tekst is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Druk [Ctrl]+[c] om te kopiëren)</span>", "Could not decrypt comment; Wrong key?": "Kon het commentaar niet decoderen; Verkeerde sleutel?",
"Delete data": "Reply": "Beantwoorden",
"Gegevens wissen", "Anonymous": "Anoniem",
"Could not create paste: %s": "Avatar generated from IP address": "Anonieme avatar (van het IP adres)",
"Kon de geplakte tekst niet aanmaken: %s", "Add comment": "Commentaar toevoegen",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Optional nickname…": "Optionele bijnaam…",
"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?)", "Post comment": "Plaats een commentaar",
"Sending comment…": "Commentaar verzenden…",
"Comment posted.": "Commentaar geplaatst.",
"Could not refresh display: %s": "Kon de weergave niet vernieuwen: %s",
"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>",
"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?)",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB",
"PiB": "PiB",
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Formaat", "Format": "Formaat",
"Plain Text": "Platte tekst", "Plain Text": "Platte tekst",
"Source Code": "Broncode", "Source Code": "Broncode",
@@ -129,36 +148,42 @@
"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 geplakte tekst.",
"Attach a file": "Een bestand toevoegen", "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", "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", "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", "Remove attachment": "Bijlage verwijderen",
"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.": "Uw browser biedt geen ondersteuning voor het uploaden van gecodeerde bestanden. Gebruik alstublieft een nieuwere browser",
"Uw browser biedt geen ondersteuning voor het uploaden van gecodeerde bestanden. Gebruik alstublieft een nieuwere browser",
"Invalid attachment.": "Ongeldige bijlage", "Invalid attachment.": "Ongeldige bijlage",
"Options": "Opties", "Options": "Opties",
"Shorten URL": "URL verkorten", "Shorten URL": "URL verkorten",
"Editor": "Editor", "Editor": "Editor",
"Preview": "Preview", "Preview": "Preview",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s vereist dat het PATH eindigt in een '%s'. Aub het PATH updaten in uw index.php.",
"%s vereist dat het PATH eindigt in een '%s'. Aub het PATH updaten in uw index.php.", "Decrypt": "Decoderen",
"Decrypt": "Enter password": "Voer het wachtwoord in",
"Decoderen",
"Enter password":
"Voer het wachtwoord in",
"Loading…": "Laden…", "Loading…": "Laden…",
"Decrypting paste…": "Geplakte tekst decoderen…", "Decrypting paste…": "Geplakte tekst decoderen…",
"Preparing new paste…": "Nieuwe geplakte tekst voorbereiden…", "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 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>.",
"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 +++", "+++ no paste text +++": "+++ geen geplakte tekst +++",
"Could not get paste data: %s": "Could not get paste data: %s": "Could not get paste data: %s",
"Could not get paste data: %s",
"QR code": "QR code", "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.": "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>.",
"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>.",
"For more information <a href=\"%s\">see this FAQ entry</a>.", "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "waiting on user to provide a password": "waiting on user to provide a password",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.", "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.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Retry": "Retry",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones." "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 PrivateBin": "Encrypted note on PrivateBin",
"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"
} }

View File

@@ -1,164 +1,189 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://privatebin.info/\">project page</a>.": "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s 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.",
"%s er en minimalistisk, åpen kildekode, elektronisk tilgjengelig pastebin hvor serveren ikke har kunnskap om dataene som limes inn. Dataene krypteres/dekrypteres <i>i nettleseren</i> ved hjelp av 256 bits AES. Mer informasjon om prosjektet på <a href=\"https://privatebin.info/\">prosjektsiden</a>.", "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": "Because ignorance is bliss": "Fordi uvitenhet er lykke",
"Fordi uvitenhet er lykke",
"en": "no", "en": "no",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.": "Innlegget eksisterer ikke, er utløpt eller har blitt slettet.",
"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 php %s or above to work. Sorry.": "%s requires configuration section [%s] to be present in configuration file.": "%s krever konfigurasjonsdel [%s] å være til stede i konfigurasjonsfilen .",
"Beklager, %s krever php %s eller nyere for å kjøre.", "Please wait %d seconds between each post.": [
"%s requires configuration section [%s] to be present in configuration file.": "Vennligst vent %d sekund mellom hvert innlegg.",
"%s krever konfigurasjonsdel [%s] å være til stede i konfigurasjonsfilen .",
"Please wait %d seconds between each post.":
"Vennligst vent %d sekunder mellom hvert innlegg.", "Vennligst vent %d sekunder mellom hvert innlegg.",
"Paste is limited to %s of encrypted data.": "Vennligst vent %d sekunder mellom hvert innlegg.",
"Innlegg er begrenset til %s av kryptert data.", "Vennligst vent %d sekunder mellom hvert innlegg."
"Invalid data.": ],
"Ugyldige data.", "Paste is limited to %s of encrypted data.": "Innlegg er begrenset til %s av kryptert data.",
"You are unlucky. Try again.": "Invalid data.": "Ugyldige data.",
"Du er uheldig. Prøv igjen.", "You are unlucky. Try again.": "Du er uheldig. Prøv igjen.",
"Error saving comment. Sorry.": "Error saving comment. Sorry.": "Beklager, det oppstod en feil ved lagring kommentar.",
"Beklager, det oppstod en feil ved lagring kommentar.", "Error saving paste. Sorry.": "Beklager, det oppstod en feil ved lagring innlegg.",
"Error saving paste. Sorry.": "Invalid paste ID.": "Feil innlegg ID.",
"Beklager, det oppstod en feil ved lagring innlegg.", "Paste is not of burn-after-reading type.": "Innlegg er ikke av typen slett etter lesing.",
"Invalid paste ID.": "Wrong deletion token. Paste was not deleted.": "Feil slettingsnøkkel. Innlegg ble ikke fjernet.",
"Feil innlegg ID.", "Paste was properly deleted.": "Innlegget er slettet.",
"Paste is not of burn-after-reading type.": "JavaScript is required for %s to work. Sorry for the inconvenience.": "Javascript kreves for at %s skal fungere. Beklager.",
"Innlegg er ikke av typen slett etter lesing.", "%s requires a modern browser to work.": "%s krever en moderne nettleser for å fungere.",
"Wrong deletion token. Paste was not deleted.": "New": "Ny",
"Feil slettingsnøkkel. Innlegg ble ikke fjernet.", "Send": "Send",
"Paste was properly deleted.": "Clone": "Kopier",
"Innlegget er slettet.", "Raw text": "Ren tekst",
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.": "Expires": "Utgår",
"Javascript kreves for at %s skal fungere<br />Beklager.", "Burn after reading": "Slett etter lesing",
"%s requires a modern browser to work.": "Open discussion": "Åpen diskusjon",
"%s krever en moderne nettleser for å fungere.", "Password (recommended)": "Passord (anbefalt)",
"New": "Discussion": "Diskusjon",
"Ny", "Toggle navigation": "Veksle navigasjon",
"Send": "%d seconds": [
"Send", "%d sekund",
"Clone": "%d sekunder",
"Kopier", "%d sekunder",
"Raw text": "%d sekunder"
"Ren tekst", ],
"Expires": "%d minutes": [
"Utgår", "%d minutt",
"Burn after reading": "%d minutter",
"Slett etter lesing", "%d minutter",
"Open discussion": "%d minutter"
"Åpen diskusjon", ],
"Password (recommended)": "%d hours": [
"Passord (anbefalt)", "%d time",
"Discussion": "%d timer",
"Diskusjon", "%d timer",
"Toggle navigation": "%d timer"
"Veksle navigasjon", ],
"%d seconds": ["%d sekund", "%d sekunder"], "%d days": [
"%d minutes": ["%d minutt", "%d minutter"], "%d dag",
"%d hours": ["%d time", "%d timer"], "%d dager",
"%d days": ["%d dag", "%d dager"], "%d dager",
"%d weeks": ["%d uke", "%d uker"], "%d dager"
"%d months": ["%d måned", "%d måneder"], ],
"%d years": ["%d år", "%d år"], "%d weeks": [
"Never": "%d uke",
"Aldri", "%d uker",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "%d uker",
"Merk: Dette er en test tjeneste: Data kan slettes når som helst. Kattunger vil dø hvis du misbruker denne tjenesten.", "%d uker"
"This document will expire in %d seconds.": ],
["Dette dokumentet vil utløpe om %d sekund.", "Dette dokumentet vil utløpe om %d sekunder."], "%d months": [
"This document will expire in %d minutes.": "%d måned",
["Dette dokumentet vil utløpe om %d minutt.", "Dette dokumentet vil utløpe om %d minutter."], "%d måneder",
"This document will expire in %d hours.": "%d måneder",
["Dette dokumentet vil utløpe om %d time.", "Dette dokumentet vil utløpe om %d timer."], "%d måneder"
"This document will expire in %d days.": ],
["Dette dokumentet vil utløpe om %d dag.", "Dette dokumentet vil utløpe om %d dager."], "%d years": [
"This document will expire in %d months.": "%d år",
["Dette dokumentet vil utløpe om %d måned.", "Dette dokumentet vil utløpe om %d måneder."], "%d år",
"Please enter the password for this paste:": "%d år",
"Vennligst skriv inn passordet for dette innlegget:", "%d år"
"Could not decrypt data (Wrong key?)": ],
"Kunne ikke dekryptere data (Feil nøkkel?)", "Never": "Aldri",
"Could not delete the paste, it was not stored in burn after reading mode.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Merk: Dette er en test tjeneste: Data kan slettes når som helst. Kattunger vil dø hvis du misbruker denne tjenesten.",
"Kan ikke slette innlegget, det ble ikke lagret som 'slett etter les' type.", "This document will expire in %d seconds.": [
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "Dette dokumentet vil utløpe om %d sekund.",
"KUN FOR DINE ØYNE. Ikke lukk dette vinduet, denne meldingen kan ikke bli vist igjen.", "Dette dokumentet vil utløpe om %d sekunder.",
"Could not decrypt comment; Wrong key?": "Dette dokumentet vil utløpe om %d sekunder.",
"Kan ikke dekryptere kommentar; Feil nøkkel?", "Dette dokumentet vil utløpe om %d sekunder."
"Reply": ],
"Svar", "This document will expire in %d minutes.": [
"Anonymous": "Dette dokumentet vil utløpe om %d minutt.",
"Anonym", "Dette dokumentet vil utløpe om %d minutter.",
"Avatar generated from IP address": "Dette dokumentet vil utløpe om %d minutter.",
"Anonym avatar generert med data fra IP adressen)", "Dette dokumentet vil utløpe om %d minutter."
"Add comment": ],
"Legg til kommentar", "This document will expire in %d hours.": [
"Optional nickname": "Dette dokumentet vil utløpe om %d time.",
"Valgfritt kallenavn…", "Dette dokumentet vil utløpe om %d timer.",
"Post comment": "Dette dokumentet vil utløpe om %d timer.",
"Send kommentar", "Dette dokumentet vil utløpe om %d timer."
"Sending comment…": ],
"Sender Kommentar…", "This document will expire in %d days.": [
"Comment posted.": "Dette dokumentet vil utløpe om %d dag.",
"Kommentar sendt.", "Dette dokumentet vil utløpe om %d dager.",
"Could not refresh display: %s": "Dette dokumentet vil utløpe om %d dager.",
"Kunne ikke oppdatere bildet: %s", "Dette dokumentet vil utløpe om %d dager."
"unknown status": ],
"ukjent status", "This document will expire in %d months.": [
"server error or not responding": "Dette dokumentet vil utløpe om %d måned.",
"tjener feilet eller svarer ikke", "Dette dokumentet vil utløpe om %d måneder.",
"Could not post comment: %s": "Dette dokumentet vil utløpe om %d måneder.",
"Kunne ikke sende kommentar: %s", "Dette dokumentet vil utløpe om %d måneder."
"Sending paste…": ],
"Sender innlegg", "Please enter the password for this paste:": "Vennligst skriv inn passordet for dette innlegget:",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Could not decrypt data (Wrong key?)": "Kunne ikke dekryptere data (Feil nøkkel?)",
"Ditt innlegg er <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Trykk [Ctrl]+[c] for å kopiere)</span>", "Could not delete the paste, it was not stored in burn after reading mode.": "Kan ikke slette innlegget, det ble ikke lagret som 'slett etter les' type.",
"Delete data": "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "KUN FOR DINE ØYNE. Ikke lukk dette vinduet, denne meldingen kan ikke bli vist igjen.",
"Slett data", "Could not decrypt comment; Wrong key?": "Kan ikke dekryptere kommentar; Feil nøkkel?",
"Could not create paste: %s": "Reply": "Svar",
"Kunne ikke opprette innlegg: %s", "Anonymous": "Anonym",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Avatar generated from IP address": "Anonym avatar generert med data fra IP adressen)",
"Kan ikke dekryptere innlegg: Dekrypteringsnøkkelen mangler i adressen (Har du bruket en redirector eller en URL forkorter som fjerner en del av addressen?)", "Add comment": "Legg til kommentar",
"Optional nickname…": "Valgfritt kallenavn…",
"Post comment": "Send kommentar",
"Sending comment…": "Sender Kommentar…",
"Comment posted.": "Kommentar sendt.",
"Could not refresh display: %s": "Kunne ikke oppdatere bildet: %s",
"unknown status": "ukjent status",
"server error or not responding": "tjener feilet eller svarer ikke",
"Could not post comment: %s": "Kunne ikke sende kommentar: %s",
"Sending paste…": "Sender innlegg…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Ditt innlegg er <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Trykk [Ctrl]+[c] for å kopiere)</span>",
"Delete data": "Slett data",
"Could not create paste: %s": "Kunne ikke opprette innlegg: %s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Kan ikke dekryptere innlegg: Dekrypteringsnøkkelen mangler i adressen (Har du bruket en redirector eller en URL forkorter som fjerner en del av addressen?)",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB",
"PiB": "PiB",
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Format", "Format": "Format",
"Plain Text": "Ren Tekst", "Plain Text": "Ren Tekst",
"Source Code": "Kildekode", "Source Code": "Kildekode",
"Markdown": "Oppmerket", "Markdown": "Oppmerket",
"Download attachment": "Last ned vedlegg", "Download attachment": "Last ned vedlegg",
"Cloned: '%s'": "Kopiert: '%s'", "Cloned: '%s'": "Kopiert: '%s'",
"The cloned file '%s' was attached to this paste.": "The cloned file '%s' was attached to this paste.", "The cloned file '%s' was attached to this paste.": "Den klonede filen '%s' var koblet til denne innlimingen.",
"Attach a file": "Legg til fil", "Attach a file": "Legg til fil",
"alternatively drag & drop a file or paste an image from the clipboard": "alternatively drag & drop a file or paste an image from the clipboard", "alternatively drag & drop a file or paste an image from the clipboard": "alternativt dra og slipp en fil, eller lim inn et bilde fra utklippstavlen",
"File too large, to display a preview. Please download the attachment.": "File too large, to display a preview. Please download the attachment.", "File too large, to display a preview. Please download the attachment.": "Filen er for stor, for å vise en forhåndsvisning. Last ned vedlegget.",
"Remove attachment": "Slett vedlegg", "Remove attachment": "Slett vedlegg",
"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.": "Nettleseren din støtter ikke å laste opp krypterte filer. Vennligst bruk en nyere nettleser.",
"Nettleseren din støtter ikke å laste opp krypterte filer. Vennligst bruk en nyere nettleser.",
"Invalid attachment.": "Ugyldig vedlegg.", "Invalid attachment.": "Ugyldig vedlegg.",
"Options": "Alternativer", "Options": "Alternativer",
"Shorten URL": "Adresse forkorter", "Shorten URL": "Adresse forkorter",
"Editor": "Rediger", "Editor": "Rediger",
"Preview": "Forhåndsvis", "Preview": "Forhåndsvis",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s krever at PATH ender på \"%s\". Vennligst oppdater PATH i index.php.",
"%s krever at PATH ender på \"%s\". Vennligst oppdater PATH i index.php.", "Decrypt": "Dekrypter",
"Decrypt": "Enter password": "Skriv inn passord",
"Dekrypter",
"Enter password":
"Skriv inn passord",
"Loading…": "Laster…", "Loading…": "Laster…",
"Decrypting paste…": "Dekrypterer innlegg…", "Decrypting paste…": "Dekrypterer innlegg…",
"Preparing new paste…": "Klargjør nytt innlegg…", "Preparing new paste…": "Klargjør nytt innlegg…",
"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>.": "Hvis denne meldingen ikke forsvinner kan du ta en titt på siden med <a href=\"%s\">ofte stilte spørsmål</a> for informasjon om feilsøking.",
"Hvis denne meldingen ikke forsvinner kan du ta en titt på siden med <a href=\"%s\">ofte stilte spørsmål</a> for informasjon om feilsøking.",
"+++ no paste text +++": "+++ ingen innleggstekst +++", "+++ no paste text +++": "+++ ingen innleggstekst +++",
"Could not get paste data: %s": "Could not get paste data: %s": "Kunne ikke hente utklippsdata: %s",
"Kunne ikke hente utklippsdata: %s",
"QR code": "QR kode", "QR code": "QR kode",
"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.": "Denne websiden bruker usikker HTTP tilkobling! Bruk den kun for testing.",
"Denne websiden bruker usikker HTTP tilkobling! Bruk den kun for testing.", "For more information <a href=\"%s\">see this FAQ entry</a>.": "For mer informasjon <a href=\"%s\">se ofte stilte spørsmål</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>.": "Din nettleser har behov for HTTPS tilkobling for å støtte WebCrypto biblioteket. Prøv å <a href=\"%s\">bytt til HTTPS</a>.",
"For mer informasjon <a href=\"%s\">se ofte stilte spørsmål</a>.", "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Nettleseren din støtter ikke WebAssembly som brukes for zlib komprimering. Du kan lage ukomprimerte dokumenter, men du kan ikke lese komprimerte.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "waiting on user to provide a password": "venter på at bruker skal skrive passord",
"Din nettleser har behov for HTTPS tilkobling for å støtte WebCrypto biblioteket. Prøv å <a href=\"%s\">bytt til HTTPS</a>.", "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Kunne ikke dekryptere data. Har du tastet riktig pssord? Prøv igjen med knappen på toppen.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Retry": "Prøv igjen",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones." "Showing raw text…": "Viser rå-tekst…",
"Notice:": "Notat:",
"This link will expire after %s.": "Denne lenken vil bli inaktiv etter %s.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "Denne addressen kan kun bli besøkt en gang, ikke trykk på tilbake eller oppdater knappene i nettleseren.",
"Link:": "Lenke:",
"Recipient may become aware of your timezone, convert time to UTC?": "Mottaker kan bli kjent med din tidssone, ønsker du å konvertere til UTC?",
"Use Current Timezone": "Bruk gjeldende tidssone",
"Convert To UTC": "Konverter til UTC",
"Close": "Steng",
"Encrypted note on PrivateBin": "Kryptert notat på PrivateBin",
"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"
} }

View File

@@ -1,125 +1,135 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://privatebin.info/\">project page</a>.": "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s 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.",
"%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 <i>dins lo navigator</i> per un chiframent AES 256 bits. Mai informacions sus <a href=\"https://privatebin.info/\">la pagina del projècte</a>.", "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": "Because ignorance is bliss": "Perque lo bonaür es lignorància",
"Perque lo bonaür es lignorància",
"en": "oc", "en": "oc",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.": "Lo tèxte existís pas, a expirat, o es estat suprimit.",
"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 php %s or above to work. Sorry.": "%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.",
"O planhèm, %s necessita php %s o superior per foncionar.", "Please wait %d seconds between each post.": [
"%s requires configuration section [%s] to be present in configuration file.": "Mercés d'esperar %d segonda entre cada publicacion.",
"%s fa besonh de la seccion de configuracion [%s] dins lo fichièr de configuracion per foncionar.",
"Please wait %d seconds between each post.":
"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.": "Mercés d'esperar %d segondas entre cada publicacion.",
"Lo tèxte es limitat a %s de donadas chifradas.", "Mercés d'esperar %d segondas entre cada publicacion."
"Invalid data.": ],
"Donadas invalidas.", "Paste is limited to %s of encrypted data.": "Lo tèxte es limitat a %s de donadas chifradas.",
"You are unlucky. Try again.": "Invalid data.": "Donadas invalidas.",
"Pas cap de fortuna. Tornatz ensajar.", "You are unlucky. Try again.": "Pas cap de fortuna. Tornatz ensajar.",
"Error saving comment. Sorry.": "Error saving comment. Sorry.": "Error al moment de salvagardar lo comentari. O planhèm.",
"Error al moment de salvagardar lo comentari. O planhèm.", "Error saving paste. Sorry.": "Error al moment de salvagardar lo tèxte. O planhèm.",
"Error saving paste. Sorry.": "Invalid paste ID.": "ID del tèxte invalid.",
"Error al moment de salvagardar lo tèxte. O planhèm.", "Paste is not of burn-after-reading type.": "Lo tèxte es pas del tipe «Escafar aprèp lectura».",
"Invalid paste ID.": "Wrong deletion token. Paste was not deleted.": "Geton de supression incorrècte. Lo tèxte es pas estat suprimit.",
"ID del tèxte invalid.", "Paste was properly deleted.": "Lo tèxte es estat corrèctament suprimit.",
"Paste is not of burn-after-reading type.": "JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript es requesit per far foncionar %s. O planhèm per linconvenient.",
"Lo tèxte es pas del tip \"Escafar aprèp lectura\".", "%s requires a modern browser to work.": "%s requerís un navigator modèrn per foncionar.",
"Wrong deletion token. Paste was not deleted.": "New": "Nòu",
"Geton de supression incorrècte. Lo tèxte es pas estat suprimit.", "Send": "Mandar",
"Paste was properly deleted.": "Clone": "Clonar",
"Lo tèxte es estat corrèctament suprimit.", "Raw text": "Tèxte brut",
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.": "Expires": "Expira",
"JavaScript es requesit per far foncionar %s. <br />O planhèm per linconvenient.", "Burn after reading": "Escafar aprèp lectura",
"%s requires a modern browser to work.": "Open discussion": "Autorizar la discussion",
"%s necessita un navigator modèrn per foncionar.", "Password (recommended)": "Senhal (recomandat)",
"New": "Discussion": "Discussion",
"Nòu", "Toggle navigation": "Virar la navigacion",
"Send": "%d seconds": [
"Mandar", "%d segonda",
"Clone": "%d segondas",
"Clonar", "%d seconds (2nd plural)",
"Raw text": "%d seconds (3rd plural)"
"Tèxte brut", ],
"Expires": "%d minutes": [
"Expira", "%d minuta",
"Burn after reading": "%d minutas",
"Escafar aprèp lectura", "%d minutes (2nd plural)",
"Open discussion": "%d minutes (3rd plural)"
"Autorizar la discussion", ],
"Password (recommended)": "%d hours": [
"Senhal (recomandat)", "%d ora",
"Discussion": "%d oras",
"Discussion", "%d hours (2nd plural)",
"Toggle navigation": "%d hours (3rd plural)"
"Virar la navigacion", ],
"%d seconds": ["%d segonda", "%d segondas"], "%d days": [
"%d minutes": ["%d minuta", "%d minutas"], "%d jorn",
"%d hours": ["%d ora", "%d oras"], "%d jorns",
"%d days": ["%d jorn", "%d jorns"], "%d days (2nd plural)",
"%d weeks": ["%d setmana", "%d setmanas"], "%d days (3rd plural)"
"%d months": ["%d mes", "%d meses"], ],
"%d years": ["%d an", "%d ans"], "%d weeks": [
"Never": "%d setmana",
"Jamai", "%d setmanas",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "%d weeks (2nd plural)",
"Nota:Aquò es un servici despròva:las donadas pòdon èsser suprimidas a cada moment. De catons moriràn sabusatz daqueste servici.", "%d weeks (3rd plural)"
"This document will expire in %d seconds.": ],
["Ce document expirera dans %d seconde.", "Aqueste document expirarà dins %d segondas."], "%d months": [
"This document will expire in %d minutes.": "%d mes",
["Ce document expirera dans %d minute.", "Aqueste document expirarà dins %d minutas."], "%d meses",
"This document will expire in %d hours.": "%d months (2nd plural)",
["Ce document expirera dans %d heure.", "Aqueste document expirarà dins %d oras."], "%d months (3rd plural)"
"This document will expire in %d days.": ],
["Ce document expirera dans %d jour.", "Aqueste document expirarà dins %d jorns."], "%d years": [
"This document will expire in %d months.": "%d an",
["Ce document expirera dans %d mois.", "Aqueste document expirarà dins %d meses."], "%d ans",
"Please enter the password for this paste:": "%d years (2nd plural)",
"Picatz lo senhal per aqueste tèxte:", "%d years (3rd plural)"
"Could not decrypt data (Wrong key?)": ],
"Impossible de deschifrar las donadas (marrida clau?)", "Never": "Jamai",
"Could not delete the paste, it was not stored in burn after reading mode.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Nota:Aquò es un servici despròva:las donadas pòdon èsser suprimidas a cada moment. De catons moriràn sabusatz daqueste servici.",
"Impossible de suprimir lo tèxte, perque es pas estat gardat en mòde \"Escafar aprèp lectura\".", "This document will expire in %d seconds.": [
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "Ce document expirera dans %d seconde.",
"PER VÒSTRES UÈLHS SOLAMENT. Tampetz pas aquesta fenèstra, aqueste tèxte poirà pas mai èsser afichat.", "Aqueste document expirarà dins %d segondas.",
"Could not decrypt comment; Wrong key?": "Aqueste document expirarà dins %d segondas.",
"Impossible de deschifrar lo comentari ; marrida clau?", "Aqueste document expirarà dins %d segondas."
"Reply": ],
"Respondre", "This document will expire in %d minutes.": [
"Anonymous": "Ce document expirera dans %d minute.",
"Anonime", "Aqueste document expirarà dins %d minutas.",
"Avatar generated from IP address": "Aqueste document expirarà dins %d minutas.",
"Avatar anonime (Vizhash de ladreça IP)", "Aqueste document expirarà dins %d minutas."
"Add comment": ],
"Apondre un comentari", "This document will expire in %d hours.": [
"Optional nickname…": "Ce document expirera dans %d heure.",
"Escais opcional…", "Aqueste document expirarà dins %d oras.",
"Post comment": "Aqueste document expirarà dins %d oras.",
"Mandar lo comentari", "Aqueste document expirarà dins %d oras."
"Sending comment…": ],
"Mandadís del comentari…", "This document will expire in %d days.": [
"Comment posted.": "Ce document expirera dans %d jour.",
"Comentari mandat.", "Aqueste document expirarà dins %d jorns.",
"Could not refresh display: %s": "Aqueste document expirarà dins %d jorns.",
"Impossible dactualizar lafichatge:%s", "Aqueste document expirarà dins %d jorns."
"unknown status": ],
"Estatut desconegut", "This document will expire in %d months.": [
"server error or not responding": "Ce document expirera dans %d mois.",
"Lo servidor respond pas o a rescontrat una error", "Aqueste document expirarà dins %d meses.",
"Could not post comment: %s": "Aqueste document expirarà dins %d meses.",
"Impossible de mandar lo comentari:%s", "Aqueste document expirarà dins %d meses."
"Sending paste…": ],
"Mandadís del tèxte", "Please enter the password for this paste:": "Picatz lo senhal per aqueste tèxte:",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Could not decrypt data (Wrong key?)": "Impossible de deschifrar las donadas (marrida clau?)",
"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>", "Could not delete the paste, it was not stored in burn after reading mode.": "Impossible de suprimir lo tèxte, perque es pas estat gardat en mòde \"Escafar aprèp lectura\".",
"Delete data": "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "PER VÒSTRES UÈLHS SOLAMENT. Tampetz pas aquesta fenèstra, aqueste tèxte poirà pas mai èsser afichat.",
"Supprimir las donadas del tèxte", "Could not decrypt comment; Wrong key?": "Impossible de deschifrar lo comentari ; marrida clau?",
"Could not create paste: %s": "Reply": "Respondre",
"Impossible de crear lo tèxte:%s", "Anonymous": "Anonime",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Avatar generated from IP address": "Avatar anonime (Vizhash de ladreça IP)",
"Impossible de deschifrar lo tèxte:clau de deschiframent absenta de lURL (Avètz utilizat un redirector o un site de reduccion dURL que suprimís una partida de lURL?)", "Add comment": "Apondre un comentari",
"Optional nickname…": "Escais opcional…",
"Post comment": "Mandar lo comentari",
"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",
"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>",
"Delete data": "Supprimir las donadas del tèxte",
"Could not create paste: %s": "Impossible de crear lo tèxte:%s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Impossible de deschifrar lo tèxte:clau de deschiframent absenta de lURL (Avètz utilizat un redirector o un site de reduccion dURL que suprimís una partida de lURL?)",
"B": "o", "B": "o",
"KiB": "Kio", "KiB": "Kio",
"MiB": "Mio", "MiB": "Mio",
@@ -140,34 +150,40 @@
"alternatively drag & drop a file or paste an image from the clipboard": "autrament lisatz lo fichièr o pegatz limatge del quichapapièrs", "alternatively drag & drop a file or paste an image from the clipboard": "autrament lisatz lo fichièr o pegatz limatge del quichapapièrs",
"File too large, to display a preview. Please download the attachment.": "Fichièr tròp pesuc per mostrar un apercebut. Telecargatz la pèca junta.", "File too large, to display a preview. Please download the attachment.": "Fichièr tròp pesuc per mostrar un apercebut. Telecargatz la pèca junta.",
"Remove attachment": "Levar la pèça junta", "Remove attachment": "Levar la pèça junta",
"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.": "Vòstre navigator es pas compatible amb lo mandadís de fichièrs chifrats. Mercés demplegar un navigator mai recent.",
"Vòstre navigator es pas compatible amb lo mandadís de fichièrs chifrats. Mercés demplegar un navigator mai recent.",
"Invalid attachment.": "Pèça junta invalida.", "Invalid attachment.": "Pèça junta invalida.",
"Options": "Opcions", "Options": "Opcions",
"Shorten URL": "Acorchir lURL", "Shorten URL": "Acorchir lURL",
"Editor": "Editar", "Editor": "Editar",
"Preview": "Previsualizar", "Preview": "Previsualizar",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s demanda que lo PATH termine en \"%s\". Mercés de metre a jorn lo PATH dins vòstre index.php.",
"%s demanda que lo PATH termine en \"%s\". Mercés de metre a jorn lo PATH dins vòstre index.php.", "Decrypt": "Deschifrar",
"Decrypt": "Enter password": "Picatz lo senhal",
"Deschifrar",
"Enter password":
"Picatz lo senhal",
"Loading…": "Cargament…", "Loading…": "Cargament…",
"Decrypting paste…": "Deschirament del tèxte…", "Decrypting paste…": "Deschirament del tèxte…",
"Preparing new paste…": "Preparacion…", "Preparing new paste…": "Preparacion…",
"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>.": "Se per cas aqueste messatge quite pas de safichar mercés de gaitar <a href=\"%s\">aquesta FAQ per las solucions</a> (en anglés).",
"Se per cas aqueste messatge quite pas de safichar mercés de gaitar <a href=\"%s\">aquesta FAQ per las solucions</a> (en anglés).",
"+++ no paste text +++": "+++ cap de tèxte pegat +++", "+++ no paste text +++": "+++ cap de tèxte pegat +++",
"Could not get paste data: %s": "Could not get paste data: %s": "Recuperacion impossibla de las donadas copiadas: %s",
"Recuperacion impossibla de las donadas copiadas: %s",
"QR code": "Còdi QR", "QR code": "Còdi QR",
"This website is using an insecure HTTP connection! Please use it only for testing.": "This website is using an insecure HTTP connection! Please use it only for testing.": "Aqueste site utiliza una connexion HTTP pas segura ! Mercés de lutilizar pas que per densages.",
"Aqueste site utiliza una connexion HTTP pas segura ! Mercés de lutilizar pas que per densages.", "For more information <a href=\"%s\">see this FAQ entry</a>.": "Per mai dinformacions <a href=\"%s\">vejatz aqueste article de FAQ</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>.": "Se pòt que vòstre navigator faga besonh duna connexion HTTPS per èsser compatible amb lAPI WebCrypto. Ensajatz de <a href=\"%s\">passar al HTTPS</a>.",
"Per mai dinformacions <a href=\"%s\">vejatz aqueste article de FAQ</a>.", "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Vòstre navigator es pas compatible amb WebAssembly, utilizat per la compression zlib. Podètz crear de documents pas compressat, mas ne podètz pas legir de compressats.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "waiting on user to provide a password": "en espèra que lutilizaire fornisca un senhal",
"Se pòt que vòstre navigator faga besonh duna connexion HTTPS per èsser compatible amb lAPI WebCrypto. Ensajatz de <a href=\"%s\">passar al HTTPS</a>.", "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Deschiframent de las donadas impossible. Avètz picat un marrit senhal? Tornatz ensajar amb lo boton ennaut.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Retry": "Tornar ensajar",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones." "Showing raw text…": "Afichatge del tèxte brut…",
"Notice:": "Avertiment:",
"This link will expire after %s.": "Aqueste ligam expirarà aprèp %s.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "Òm pòt pas quaccedir a aqueste ligam quun còp, utilizetz pas lo boton precedent o actualizar del navigator.",
"Link:": "Ligam:",
"Recipient may become aware of your timezone, convert time to UTC?": "Lo destinatari pòt savisar de vòstre fus orari, convertir en UTC?",
"Use Current Timezone": "Utilizar lactual",
"Convert To UTC": "Convertir en UTC",
"Close": "Tampar",
"Encrypted note on PrivateBin": "Nòtas chifradas sus PrivateBin",
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visitatz aqueste ligam per veire la nòta. Fornir lo ligam a qualquun mai li permet tanben daccedir a la nòta.",
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
"Save paste": "Save paste"
} }

View File

@@ -1,125 +1,144 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://privatebin.info/\">project page</a>.": "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s 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.",
"%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 <i>w przeglądarce</i> z użyciem 256-bitowego klucza AES. Więcej informacji na <a href=\"https://privatebin.info/\">stronie projektu</a>.", "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": "Because ignorance is bliss": "Ponieważ ignorancja jest cnotą",
"Ponieważ ignorancja jest cnotą",
"en": "pl", "en": "pl",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.": "Wklejka nie istnieje, wygasła albo została usunięta.",
"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 php %s or above to work. Sorry.": "%s requires configuration section [%s] to be present in configuration file.": "%s wymaga obecności sekcji [%s] w pliku konfiguracyjnym.",
"%s wymaga PHP w wersji %s lub nowszej. Przykro mi.", "Please wait %d seconds between each post.": [
"%s requires configuration section [%s] to be present in configuration file.": "Poczekaj %d sekundę pomiędzy każdą wklejką.",
"%s wymaga obecności sekcji [%s] w pliku konfiguracyjnym.",
"Please wait %d seconds between each post.":
"Poczekaj %d sekund pomiędzy każdą wklejką.", "Poczekaj %d sekund pomiędzy każdą wklejką.",
"Paste is limited to %s of encrypted data.": "Poczekaj %d sekund pomiędzy każdą wklejką.",
"Wklejka jest limitowana do %s zaszyfrowanych danych.", "Poczekaj %d sekund pomiędzy każdą wklejką."
"Invalid data.": ],
"Nieprawidłowe dane.", "Paste is limited to %s of encrypted data.": "Wklejka jest limitowana do %s zaszyfrowanych danych.",
"You are unlucky. Try again.": "Invalid data.": "Nieprawidłowe dane.",
"Miałeś pecha. Spróbuj ponownie.", "You are unlucky. Try again.": "Miałeś pecha. Spróbuj ponownie.",
"Error saving comment. Sorry.": "Error saving comment. Sorry.": "Błąd przy zapisywaniu komentarza, sorry.",
"Błąd przy zapisywaniu komentarza, sorry.", "Error saving paste. Sorry.": "Błąd przy zapisywaniu wklejki, sorry.",
"Error saving paste. Sorry.": "Invalid paste ID.": "Nieprawidłowe ID wklejki.",
"Błąd przy zapisywaniu wklejki, sorry.", "Paste is not of burn-after-reading type.": "Ta wklejka nie ulega autodestrukcji po przeczytaniu.",
"Invalid paste ID.": "Wrong deletion token. Paste was not deleted.": "Nieprawidłowy token usuwania. Wklejka nie została usunięta.",
"Nieprawidłowe ID wklejki.", "Paste was properly deleted.": "Wklejka usunięta poprawnie.",
"Paste is not of burn-after-reading type.": "JavaScript is required for %s to work. Sorry for the inconvenience.": "Do działania %sa jest wymagany JavaScript. Przepraszamy za tę niedogodność.",
"Ta wklejka nie ulega autodestrukcji po przeczytaniu.", "%s requires a modern browser to work.": "%s wymaga do działania nowoczesnej przeglądarki.",
"Wrong deletion token. Paste was not deleted.": "New": "Nowa",
"Nieprawidłowy token usuwania. Wklejka nie została usunięta.", "Send": "Wyślij",
"Paste was properly deleted.": "Clone": "Sklonuj",
"Wklejka usunięta poprawnie.", "Raw text": "Czysty tekst",
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.": "Expires": "Wygasa za",
"Do działania %sa jest wymagany JavaScript. Przepraszamy za tę niedogodność.", "Burn after reading": "Zniszcz po przeczytaniu",
"%s requires a modern browser to work.": "Open discussion": "Otwarta dyskusja",
"%s wymaga do działania nowoczesnej przeglądarki.", "Password (recommended)": "Hasło (zalecane)",
"New": "Discussion": "Dyskusja",
"Nowa", "Toggle navigation": "Przełącz nawigację",
"Send": "%d seconds": [
"Wyślij", "%d second",
"Clone": "%d second",
"Sklonuj", "%d second",
"Raw text": "%d second"
"Czysty tekst", ],
"Expires": "%d minutes": [
"Wygasa za", "%d minut",
"Burn after reading": "%d minut",
"Zniszcz po przeczytaniu", "%d minut",
"Open discussion": "%d minut"
"Otwarta dyskusja", ],
"Password (recommended)": "%d hours": [
"Hasło (zalecane)", "%d godzina",
"Discussion": "%d godzina",
"Dyskusja", "%d godzinę",
"Toggle navigation": "%d godzinę"
"Przełącz nawigację", ],
"%d seconds": ["%d second", "%d second", "%d second"], "%d days": [
"%d minutes": ["%d minut", "%d minut", "%d minut"], "%d dzień",
"%d hours": ["%d godzina", "%d godzina", "%d godzinę"], "%d dzień",
"%d days": ["%d dzień", "%d dzień", "%d dzień"], "%d dzień",
"%d weeks": ["%d tydzień", "%d tydzień", "%d tydzień"], "%d dzień"
"%d months": ["%d miesiąc", "%d miesiąc", "%d miesiąc"], ],
"%d years": ["%d rok", "%d rok", "%d rok"], "%d weeks": [
"Never": "%d tydzień",
"nigdy", "%d tydzień",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "%d tydzień",
"Notka: To jest usługa testowa. Dane mogą zostać usunięte w dowolnym momencie. Kociątka umrą, jeśli nadużyjesz tej usługi.", "%d tydzień"
"This document will expire in %d seconds.": ],
["Ten dokument wygaśnie za %d sekundę.", "Ten dokument wygaśnie za %d sekund."], "%d months": [
"This document will expire in %d minutes.": "%d miesiąc",
["Ten dokument wygaśnie za %d minutę.", "Ten dokument wygaśnie za %d minut."], "%d miesiąc",
"This document will expire in %d hours.": "%d miesiąc",
["Ten dokument wygaśnie za godzinę.", "Ten dokument wygaśnie za %d godzin."], "%d miesiąc"
"This document will expire in %d days.": ],
["Ten dokument wygaśnie za %d dzień.", "Ten dokument wygaśnie za %d dni."], "%d years": [
"This document will expire in %d months.": "%d rok",
["Ten dokument wygaśnie za miesiąc.", "Ten dokument wygaśnie za %d miesięcy."], "%d rok",
"Please enter the password for this paste:": "%d rok",
"Wpisz hasło dla tej wklejki:", "%d rok"
"Could not decrypt data (Wrong key?)": ],
"Nie udało się odszyfrować danych (zły klucz?)", "Never": "nigdy",
"Could not delete the paste, it was not stored in burn after reading mode.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Notka: To jest usługa testowa. Dane mogą zostać usunięte w dowolnym momencie. Kociątka umrą, jeśli nadużyjesz tej usługi.",
"Nie udało się usunąć wklejki, nie została zapisana w trybie zniszczenia po przeczytaniu.", "This document will expire in %d seconds.": [
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "Ten dokument wygaśnie za %d sekundę.",
"TYLKO DO TWOJEGO WGLĄDU. Nie zamykaj tego okna, ta wiadomość nie będzie mogła być wyświetlona ponownie.", "Ten dokument wygaśnie za %d sekund.",
"Could not decrypt comment; Wrong key?": "Ten dokument wygaśnie za %d sekund.",
"Nie udało się odszyfrować komentarza; zły klucz?", "Ten dokument wygaśnie za %d sekund."
"Reply": ],
"Odpowiedz", "This document will expire in %d minutes.": [
"Anonymous": "Ten dokument wygaśnie za %d minutę.",
"Anonim", "Ten dokument wygaśnie za %d minut.",
"Avatar generated from IP address": "Ten dokument wygaśnie za %d minut.",
"Anonimowy avatar (Vizhash z adresu IP)", "Ten dokument wygaśnie za %d minut."
"Add comment": ],
"Dodaj komentarz", "This document will expire in %d hours.": [
"Optional nickname…": "Ten dokument wygaśnie za godzinę.",
"Opcjonalny nick…", "Ten dokument wygaśnie za %d godzin.",
"Post comment": "Ten dokument wygaśnie za %d godzin.",
"Wyślij komentarz", "Ten dokument wygaśnie za %d godzin."
"Sending comment…": ],
"Wysyłanie komentarza…", "This document will expire in %d days.": [
"Comment posted.": "Ten dokument wygaśnie za %d dzień.",
"Wysłano komentarz.", "Ten dokument wygaśnie za %d dni.",
"Could not refresh display: %s": "Ten dokument wygaśnie za %d dni.",
"Nie można odświeżyć widoku: %s", "Ten dokument wygaśnie za %d dni."
"unknown status": ],
"nieznany status", "This document will expire in %d months.": [
"server error or not responding": "Ten dokument wygaśnie za miesiąc.",
"błąd serwera lub brak odpowiedzi", "Ten dokument wygaśnie za %d miesięcy.",
"Could not post comment: %s": "Ten dokument wygaśnie za %d miesięcy.",
"Nie udało się wysłać komentarza: %s", "Ten dokument wygaśnie za %d miesięcy."
"Sending paste…": ],
"Wysyłanie wklejki", "Please enter the password for this paste:": "Wpisz hasło dla tej wklejki:",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Could not decrypt data (Wrong key?)": "Nie udało się odszyfrować danych (zły klucz?)",
"Twoja wklejka to <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(wciśnij [Ctrl]+[c] aby skopiować)</span>", "Could not delete the paste, it was not stored in burn after reading mode.": "Nie udało się usunąć wklejki, nie została zapisana w trybie zniszczenia po przeczytaniu.",
"Delete data": "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "TYLKO DO TWOJEGO WGLĄDU. Nie zamykaj tego okna, ta wiadomość nie będzie mogła być wyświetlona ponownie.",
"Skasuj dane", "Could not decrypt comment; Wrong key?": "Nie udało się odszyfrować komentarza; zły klucz?",
"Could not create paste: %s": "Reply": "Odpowiedz",
"Nie udało się utworzyć wklejki: %s", "Anonymous": "Anonim",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Avatar generated from IP address": "Anonimowy avatar (Vizhash z adresu IP)",
"Nie udało się odszyfrować wklejki - brak klucza deszyfrującego w adresie (użyłeś skracacza linków, który ucina część adresu?)", "Add comment": "Dodaj komentarz",
"Optional nickname…": "Opcjonalny nick…",
"Post comment": "Wyślij komentarz",
"Sending comment…": "Wysyłanie komentarza…",
"Comment posted.": "Wysłano komentarz.",
"Could not refresh display: %s": "Nie można odświeżyć widoku: %s",
"unknown status": "nieznany status",
"server error or not responding": "błąd serwera lub brak odpowiedzi",
"Could not post comment: %s": "Nie udało się wysłać komentarza: %s",
"Sending paste…": "Wysyłanie wklejki…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Twoja wklejka to <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(wciśnij [Ctrl]+[c] aby skopiować)</span>",
"Delete data": "Skasuj dane",
"Could not create paste: %s": "Nie udało się utworzyć wklejki: %s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nie udało się odszyfrować wklejki - brak klucza deszyfrującego w adresie (użyłeś skracacza linków, który ucina część adresu?)",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB",
"PiB": "PiB",
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Format", "Format": "Format",
"Plain Text": "Czysty tekst", "Plain Text": "Czysty tekst",
"Source Code": "Kod źródłowy", "Source Code": "Kod źródłowy",
@@ -131,34 +150,40 @@
"alternatively drag & drop a file or paste an image from the clipboard": "Alternatywnie przeciągnij i upuść plik albo wklej obraz ze schowka", "alternatively drag & drop a file or paste an image from the clipboard": "Alternatywnie przeciągnij i upuść plik albo wklej obraz ze schowka",
"File too large, to display a preview. Please download the attachment.": "Plik zbyt duży aby wyświetlić podgląd. Proszę pobrać załącznik.", "File too large, to display a preview. Please download the attachment.": "Plik zbyt duży aby wyświetlić podgląd. Proszę pobrać załącznik.",
"Remove attachment": "Usuń załącznik", "Remove attachment": "Usuń załącznik",
"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.": "Twoja przeglądarka nie wspiera wysyłania zaszyfrowanych plików. Użyj nowszej przeglądarki.",
"Twoja przeglądarka nie wspiera wysyłania zaszyfrowanych plików. Użyj nowszej przeglądarki.",
"Invalid attachment.": "Nieprawidłowy załącznik.", "Invalid attachment.": "Nieprawidłowy załącznik.",
"Options": "Opcje", "Options": "Opcje",
"Shorten URL": "Skróć adres URL", "Shorten URL": "Skróć adres URL",
"Editor": "Edytować", "Editor": "Edytować",
"Preview": "Podgląd", "Preview": "Podgląd",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.", "Decrypt": "Odszyfruj",
"Decrypt": "Enter password": "Wpisz hasło",
"Odszyfruj",
"Enter password":
"Wpisz hasło",
"Loading…": "Wczytywanie…", "Loading…": "Wczytywanie…",
"Decrypting paste…": "Odszyfrowywanie wklejki…", "Decrypting paste…": "Odszyfrowywanie wklejki…",
"Preparing new paste…": "Przygotowywanie nowej wklejki…", "Preparing new paste…": "Przygotowywanie nowej wklejki…",
"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>.": "W przypadku gdy ten komunikat nigdy nie znika, proszę spójrz na <a href=\"%s\">to FAQ aby rozwiązać problem</a> (po angielsku).",
"W przypadku gdy ten komunikat nigdy nie znika, proszę spójrz na <a href=\"%s\">to FAQ aby rozwiązać problem</a> (po angielsku).",
"+++ no paste text +++": "+++ brak wklejonego tekstu +++", "+++ no paste text +++": "+++ brak wklejonego tekstu +++",
"Could not get paste data: %s": "Could not get paste data: %s": "Nie można było pobrać danych wklejki: %s",
"Nie można było pobrać danych wklejki: %s",
"QR code": "Kod QR", "QR code": "Kod QR",
"This website is using an insecure HTTP connection! Please use it only for testing.": "This website is using an insecure HTTP connection! Please use it only for testing.": "This website is using an insecure HTTP connection! Please use it only for testing.",
"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>.",
"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>.",
"For more information <a href=\"%s\">see this FAQ entry</a>.", "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "waiting on user to provide a password": "waiting on user to provide a password",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.", "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.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Retry": "Retry",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones." "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 PrivateBin": "Encrypted note on PrivateBin",
"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"
} }

View File

@@ -1,125 +1,144 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://privatebin.info/\">project page</a>.": "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s é 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.",
"%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 <i>no navegador</i> usando 256 bits AES. Mais informações na <a href=\"https://privatebin.info/\">página do projeto</a>.", "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": "Because ignorance is bliss": "Porque a ignorância é uma benção",
"Porque a ignorância é uma benção",
"en": "pt", "en": "pt",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.": "A cópia não existe, expirou ou já foi excluída.",
"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 php %s or above to work. Sorry.": "%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.",
"%s requer php %s ou superior para funcionar. Desculpa.", "Please wait %d seconds between each post.": [
"%s requires configuration section [%s] to be present in configuration file.": "Por favor espere %d segundo entre cada publicação.",
"%s requer que a seção de configuração [% s] esteja no arquivo de configuração.",
"Please wait %d seconds between each post.":
"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.": "Por favor espere %d segundos entre cada publicação.",
"A cópia está limitada a %s de dados cifrados.", "Por favor espere %d segundos entre cada publicação."
"Invalid data.": ],
"Dados inválidos.", "Paste is limited to %s of encrypted data.": "A cópia está limitada a %s de dados cifrados.",
"You are unlucky. Try again.": "Invalid data.": "Dados inválidos.",
"Você é azarado. Tente novamente", "You are unlucky. Try again.": "Você é azarado. Tente novamente",
"Error saving comment. Sorry.": "Error saving comment. Sorry.": "Erro ao salvar comentário. Desculpa.",
"Erro ao salvar comentário. Desculpa.", "Error saving paste. Sorry.": "Erro ao salvar cópia. Desculpa.",
"Error saving paste. Sorry.": "Invalid paste ID.": "ID de cópia inválido.",
"Erro ao salvar cópia. Desculpa.", "Paste is not of burn-after-reading type.": "Cópia não é do tipo \"queime após ler\".",
"Invalid paste ID.": "Wrong deletion token. Paste was not deleted.": "Token de remoção inválido. A cópia não foi excluída.",
"ID de cópia inválido.", "Paste was properly deleted.": "A cópia foi devidamente excluída.",
"Paste is not of burn-after-reading type.": "JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript é necessário para que %s funcione. Pedimos desculpas pela inconveniência.",
"Cópia não é do tipo \"queime após ler\".", "%s requires a modern browser to work.": "%s requer um navegador moderno para funcionar.",
"Wrong deletion token. Paste was not deleted.": "New": "Novo",
"Token de remoção inválido. A cópia não foi excluída.", "Send": "Enviar",
"Paste was properly deleted.": "Clone": "Clonar",
"A cópia foi devidamente excluída.", "Raw text": "Texto sem formato",
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.": "Expires": "Expirar em",
"JavaScript é necessário para que %s funcione.<br />Pedimos desculpas pela inconveniência.", "Burn after reading": "Queime após ler",
"%s requires a modern browser to work.": "Open discussion": "Discussão aberta",
"%s requer um navegador moderno para funcionar.", "Password (recommended)": "Senha (recomendada)",
"New": "Discussion": "Discussão",
"Novo", "Toggle navigation": "Mudar navegação",
"Send": "%d seconds": [
"Enviar", "%d segundo",
"Clone": "%d segundos",
"Clonar", "%d segundos",
"Raw text": "%d segundos"
"Texto sem formato", ],
"Expires": "%d minutes": [
"Expirar em", "%d minuto",
"Burn after reading": "%d minutos",
"Queime após ler", "%d minutos",
"Open discussion": "%d minutos"
"Discussão aberta", ],
"Password (recommended)": "%d hours": [
"Senha (recomendada)", "%d hora",
"Discussion": "%d horas",
"Discussão", "%d horas (2° plural)",
"Toggle navigation": "%d horas"
"Mudar navegação", ],
"%d seconds": ["%d segundo", "%d segundos"], "%d days": [
"%d minutes": ["%d minuto", "%d minutos"], "%d dia",
"%d hours": ["%d hora", "%d horas"], "%d dias",
"%d days": ["%d dia", "%d dias"], "%d dias",
"%d weeks": ["%d semana", "%d semanas"], "%d dias"
"%d months": ["%d mês", "%d meses"], ],
"%d years": ["%d ano", "%d anos"], "%d weeks": [
"Never": "%d semana",
"Nunca", "%d semanas",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "%d semanas",
"Nota: Este é um serviço de teste. Dados podem ser perdidos a qualquer momento. Gatinhos morrerão se você abusar desse serviço.", "%d semanas"
"This document will expire in %d seconds.": ],
["Este documento irá expirar em um segundo.", "Este documento irá expirar em %d segundos."], "%d months": [
"This document will expire in %d minutes.": "%d mês",
["Este documento irá expirar em um minuto.", "Este documento irá expirar em %d minutos."], "%d meses",
"This document will expire in %d hours.": "%d meses",
["Este documento irá expirar em uma hora.", "Este documento irá expirar em %d horas."], "%d meses"
"This document will expire in %d days.": ],
["Este documento irá expirar em um dia.", "Este documento irá expirar em %d dias."], "%d years": [
"This document will expire in %d months.": "%d ano",
["Este documento irá expirar em um mês.", "Este documento irá expirar em %d meses."], "%d anos",
"Please enter the password for this paste:": "%d anos",
"Por favor, digite a senha para essa cópia:", "%d anos"
"Could not decrypt data (Wrong key?)": ],
"Não foi possível decifrar os dados (Chave errada?)", "Never": "Nunca",
"Could not delete the paste, it was not stored in burn after reading mode.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Nota: Este é um serviço de teste. Dados podem ser perdidos a qualquer momento. Gatinhos morrerão se você abusar desse serviço.",
"Não foi possível excluir a cópia, ela não foi salva no modo de \"queime após ler\".", "This document will expire in %d seconds.": [
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "Este documento irá expirar em um segundo.",
"APENAS PARA SEUS OLHOS. Não feche essa janela, essa mensagem não pode ser exibida novamente.", "Este documento irá expirar em %d segundos.",
"Could not decrypt comment; Wrong key?": "Este documento irá expirar em %d segundos.",
"Não foi possível decifrar o comentário; Chave errada?", "Este documento irá expirar em %d segundos."
"Reply": ],
"Responder", "This document will expire in %d minutes.": [
"Anonymous": "Este documento irá expirar em um minuto.",
"Anônimo", "Este documento irá expirar em %d minutos.",
"Avatar generated from IP address": "Este documento irá expirar em %d minutos.",
"Avatar gerado à partir do endereço IP", "Este documento irá expirar em %d minutos."
"Add comment": ],
"Adicionar comentário", "This document will expire in %d hours.": [
"Optional nickname…": "Este documento irá expirar em uma hora.",
"Apelido opcional…", "Este documento irá expirar em %d horas.",
"Post comment": "Este documento irá expirar em %d horas.",
"Publicar comentário", "Este documento irá expirar em %d horas."
"Sending comment…": ],
"Enviando comentário…", "This document will expire in %d days.": [
"Comment posted.": "Este documento irá expirar em um dia.",
"Comentário publicado.", "Este documento irá expirar em %d dias.",
"Could not refresh display: %s": "Este documento irá expirar em %d dias.",
"Não foi possível atualizar a tela: %s", "Este documento irá expirar em %d dias."
"unknown status": ],
"Estado desconhecido", "This document will expire in %d months.": [
"server error or not responding": "Este documento irá expirar em um mês.",
"Servidor em erro ou não responsivo", "Este documento irá expirar em %d meses.",
"Could not post comment: %s": "Este documento irá expirar em %d meses.",
"Não foi possível publicar o comentário: %s", "Este documento irá expirar em %d meses."
"Sending paste…": ],
"Enviando cópia", "Please enter the password for this paste:": "Por favor, digite a senha para essa cópia:",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Could not decrypt data (Wrong key?)": "Não foi possível decifrar os dados (Chave errada?)",
"Sua cópia é <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Pressione [Ctrl]+[c] para copiar)</span>", "Could not delete the paste, it was not stored in burn after reading mode.": "Não foi possível excluir a cópia, ela não foi salva no modo de \"queime após ler\".",
"Delete data": "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "APENAS PARA SEUS OLHOS. Não feche essa janela, essa mensagem não pode ser exibida novamente.",
"Excluir dados", "Could not decrypt comment; Wrong key?": "Não foi possível decifrar o comentário; Chave errada?",
"Could not create paste: %s": "Reply": "Responder",
"Não foi possível criar cópia: %s", "Anonymous": "Anônimo",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Avatar generated from IP address": "Avatar gerado à partir do endereço IP",
"Não foi possível decifrar a cópia: chave de decriptografia ausente na URL (Você utilizou um redirecionador ou encurtador de URL que removeu parte dela?)", "Add comment": "Adicionar comentário",
"Optional nickname…": "Apelido opcional…",
"Post comment": "Publicar comentário",
"Sending comment…": "Enviando comentário…",
"Comment posted.": "Comentário publicado.",
"Could not refresh display: %s": "Não foi possível atualizar a tela: %s",
"unknown status": "Estado desconhecido",
"server error or not responding": "Servidor em erro ou não responsivo",
"Could not post comment: %s": "Não foi possível publicar o comentário: %s",
"Sending paste…": "Enviando cópia…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Sua cópia é <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Pressione [Ctrl]+[c] para copiar)</span>",
"Delete data": "Excluir dados",
"Could not create paste: %s": "Não foi possível criar cópia: %s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Não foi possível decifrar a cópia: chave de decriptografia ausente na URL (Você utilizou um redirecionador ou encurtador de URL que removeu parte dela?)",
"B": "B",
"KiB": "KiB",
"MiB": "MiB",
"GiB": "GiB",
"TiB": "TiB",
"PiB": "PiB",
"EiB": "EiB",
"ZiB": "ZiB",
"YiB": "YiB",
"Format": "Formato", "Format": "Formato",
"Plain Text": "Texto sem formato", "Plain Text": "Texto sem formato",
"Source Code": "Código fonte", "Source Code": "Código fonte",
@@ -128,37 +147,43 @@
"Cloned: '%s'": "Clonado: '%s'", "Cloned: '%s'": "Clonado: '%s'",
"The cloned file '%s' was attached to this paste.": "O arquivo clonado '%s' foi anexado a essa cópia.", "The cloned file '%s' was attached to this paste.": "O arquivo clonado '%s' foi anexado a essa cópia.",
"Attach a file": "Anexar um arquivo", "Attach a file": "Anexar um arquivo",
"alternatively drag & drop a file or paste an image from the clipboard": "alternatively drag & drop a file or paste an image from the clipboard", "alternatively drag & drop a file or paste an image from the clipboard": "alternativamente, arraste e solte um arquivo ou cole uma imagem da área de transferência",
"File too large, to display a preview. Please download the attachment.": "File too large, to display a preview. Please download the attachment.", "File too large, to display a preview. Please download the attachment.": "Arquivo muito grande para exibir uma prévia. Por favor, faça o download do anexo.",
"Remove attachment": "Remover anexo", "Remove attachment": "Remover anexo",
"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.": "Seu navegador não permite subir arquivos cifrados. Por favor, utilize um navegador mais recente.",
"Seu navegador não permite subir arquivos cifrados. Por favor, utilize um navegador mais recente.",
"Invalid attachment.": "Anexo inválido.", "Invalid attachment.": "Anexo inválido.",
"Options": "Opções", "Options": "Opções",
"Shorten URL": "Encurtar URL", "Shorten URL": "Encurtar URL",
"Editor": "Editor", "Editor": "Editor",
"Preview": "Visualizar", "Preview": "Visualizar",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requer que o PATH termine em \"%s\". Por favor, atualize o PATH em seu index.php.",
"%s requer que o PATH termine em \"%s\". Por favor, atualize o PATH em seu index.php.", "Decrypt": "Decifrar",
"Decrypt": "Enter password": "Digite a senha",
"Decifrar",
"Enter password":
"Digite a senha",
"Loading…": "Carregando…", "Loading…": "Carregando…",
"Decrypting paste…": "Decifrando cópia…", "Decrypting paste…": "Decifrando cópia…",
"Preparing new paste…": "Preparando nova cópia…", "Preparing new paste…": "Preparando nova cópia…",
"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>.": "Caso essa mensagem nunca desapareça, por favor veja <a href=\"%s\">este FAQ para saber como resolver os problemas</a>.",
"Caso essa mensagem nunca desapareça, por favor veja <a href=\"%s\">este FAQ para saber como resolver os problemas</a>.",
"+++ no paste text +++": "+++ sem texto de cópia +++", "+++ no paste text +++": "+++ sem texto de cópia +++",
"Could not get paste data: %s": "Could not get paste data: %s": "Não foi possível obter dados de cópia: %s",
"Could not get paste data: %s", "QR code": "Código QR",
"QR code": "QR code", "This website is using an insecure HTTP connection! Please use it only for testing.": "Esse site usa uma conexão HTTP insegura! Use-o apenas para testes.",
"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>.": "Para mais informações <a href=\"%s\">veja esse item do FAQ</a>.",
"This website is using an insecure HTTP connection! Please use it only for testing.", "Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Seu navegador pode exigir uma conexão HTTPS para dar suporte à API WebCrypto. Tente <a href=\"%s\">mudar para HTTPS</a>.",
"For more information <a href=\"%s\">see this FAQ entry</a>.": "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Seu navagador não suporta WebAssembly, usado para compressão zlib. Você pode criar documentos não compactados, mas não pode lê-los.",
"For more information <a href=\"%s\">see this FAQ entry</a>.", "waiting on user to provide a password": "esperando que o usuário digite uma senha",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Não foi possível decifrar os dados. Você digitou a senha corretamente? Tente novamente com o botão ao topo.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.", "Retry": "Tentar Novamente",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Showing raw text…": "Mostrando texto bruto…",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones." "Notice:": "Aviso:",
"This link will expire after %s.": "Esse link vai expirar após %s.",
"This link can only be accessed once, do not use back or refresh button in your browser.": "Esse link só pode ser acessado uma vez, não utilize o botão de voltar ou atualizar do seu navegador.",
"Link:": "Link:",
"Recipient may become aware of your timezone, convert time to UTC?": "O recipiente pode ter ciência de seu fuso horário, converter hora para UTC?",
"Use Current Timezone": "Usar Fuso Horário Atual",
"Convert To UTC": "Converter para UTC",
"Close": "Fechar",
"Encrypted note on PrivateBin": "Nota criptografada no PrivateBin",
"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"
} }

View File

@@ -1,125 +1,135 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://privatebin.info/\">project page</a>.": "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s это минималистичный Open Source проект для создания заметок, где сервер не знает ничего о сохраняемых данных. Данные шифруются/расшифровываются %sв браузере%s с использованием 256 битного шифрования AES.",
"%s это минималистичный Open Source проект для создания заметок, где сервер не знает ничего о сохраняемых данных. Данные шифруются/расшифровываются <i>в браузере</i> с использованием 256 битного шифрования AES. Подробнее можно узнать на <a href=\"https://privatebin.info/\">сайте проекта</a>.", "More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Подробнее можно узнать на <a href=\"https://privatebin.info/\">сайте проекта</a>.",
"Because ignorance is bliss": "Because ignorance is bliss": "Потому что неведение - благо",
"Потому что неведение - благо",
"en": "ru", "en": "ru",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.": "Запись не существует, просрочена или была удалена.",
"Запись не существует, просрочена или была удалена.", "%s requires php %s or above to work. Sorry.": "Для работы %s требуется php %s или выше. Извините.",
"%s requires php %s or above to work. Sorry.": "%s requires configuration section [%s] to be present in configuration file.": "%s необходимо наличие секции [%s] в конфигурационном файле.",
"Для работы %s требуется php %s или выше. Извините.", "Please wait %d seconds between each post.": [
"%s requires configuration section [%s] to be present in configuration file.": "Пожалуйста, ожидайте %d секунду между каждыми записями.",
"%s необходимо наличие секции [%s] в конфигурационном файле.", "Пожалуйста, ожидайте %d секунды между каждыми записями.",
"Please wait %d seconds between each post.": "Пожалуйста, ожидайте %d секунд между каждыми записями.",
["Пожалуйста, ожидайте %d секунду между каждыми записями.", "Пожалуйста, ожидайте %d секунды между каждыми записями.", "Пожалуйста, ожидайте %d секунд между каждыми записями."], "Пожалуйста, ожидайте %d секунд между каждыми записями."
"Paste is limited to %s of encrypted data.": ],
"Размер записи ограничен %s зашифрованных данных.", "Paste is limited to %s of encrypted data.": "Размер записи ограничен %s зашифрованных данных.",
"Invalid data.": "Invalid data.": "Неверные данные.",
"Неверные данные.", "You are unlucky. Try again.": "Вам не повезло. Попробуйте еще раз.",
"You are unlucky. Try again.": "Error saving comment. Sorry.": "Ошибка при сохранении комментария. Извините.",
"Вам не повезло. Попробуйте еще раз.", "Error saving paste. Sorry.": "Ошибка при сохранении записи. Извините.",
"Error saving comment. Sorry.": "Invalid paste ID.": "Неверный ID записи.",
"Ошибка при сохранении комментария. Извините.", "Paste is not of burn-after-reading type.": "Тип записи не \"Удалить после прочтения\".",
"Error saving paste. Sorry.": "Wrong deletion token. Paste was not deleted.": "Неверный ключ удаления записи. Запись не удалена.",
"Ошибка при сохранении записи. Извините.", "Paste was properly deleted.": "Запись была успешно удалена.",
"Invalid paste ID.": "JavaScript is required for %s to work. Sorry for the inconvenience.": "Для работы %s требуется включенный JavaScript. Приносим извинения за неудобства.",
"Неверный ID записи.", "%s requires a modern browser to work.": "Для работы %s требуется более современный браузер.",
"Paste is not of burn-after-reading type.": "New": "Новая запись",
"Тип записи не \"Удалить после прочтения\".", "Send": "Отправить",
"Wrong deletion token. Paste was not deleted.": "Clone": "Дублировать",
"Неверный ключ удаления записи. Запись не удалена.", "Raw text": "Исходный текст",
"Paste was properly deleted.": "Expires": "Удалить через",
"Запись была успешно удалена.", "Burn after reading": "Удалить после прочтения",
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.": "Open discussion": "Открыть обсуждение",
"Для работы %s требуется включенный JavaScript.<br />Приносим извинения за неудобства.", "Password (recommended)": "Пароль (рекомендуется)",
"%s requires a modern browser to work.": "Discussion": "Обсуждение",
"Для работы %s требуется более современный браузер.", "Toggle navigation": "Переключить навигацию",
"New": "%d seconds": [
"Новая запись", "%d секунду",
"Send": "%d секунды",
"Отправить", "%d секунд",
"Clone": "%d секунд"
"Дублировать", ],
"Raw text": "%d minutes": [
"Исходный текст", "%d минуту",
"Expires": "%d минуты",
"Удалить через", "%d минут",
"Burn after reading": "%d минут"
"Удалить после прочтения", ],
"Open discussion": "%d hours": [
"Открыть обсуждение", "%d час",
"Password (recommended)": "%d часа",
"Пароль (рекомендуется)", "%d часов",
"Discussion": "%d часов"
"Обсуждение", ],
"Toggle navigation": "%d days": [
"Переключить навигацию", "%d день",
"%d seconds": ["%d секунду", "%d секунды", "%d секунд"], "%d дня",
"%d minutes": ["%d минуту", "%d минуты", "%d минут"], "%d дней",
"%d hours": ["%d час", "%d часа", "%d часов"], "%d дней"
"%d days": ["%d день", "%d дня", "%d дней"], ],
"%d weeks": ["%d неделю", "%d недели", "%d недель"], "%d weeks": [
"%d months": ["%d месяц", "%d месяца", "%d месяцев"], "%d неделю",
"%d years": ["%d год", "%d года", "%d лет"], "%d недели",
"Never": "%d недель",
"Никогда", "%d недель"
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": ],
"Примечание: Этот сервис тестовый: Данные могут быть удалены в любое время. Котята умрут, если вы будете злоупотреблять серсисом.", "%d months": [
"This document will expire in %d seconds.": "%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 years": [
"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:": ],
"Пожалуйста, введите пароль от записи:", "Never": "Никогда",
"Could not decrypt data (Wrong key?)": "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.": [
"Could not delete the paste, it was not stored in burn after reading mode.": "Документ будет удален через %d секунду.",
"Невозможно удалить запись, она не была сохранена в режиме удаления после прочтения.", "Документ будет удален через %d секунды.",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "Документ будет удален через %d секунд.",
"ТОЛЬКО ДЛЯ ВАШИХ ГЛАЗ. Не закрывайте это окно, это сообщение не может быть показано снова.", "Документ будет удален через %d секунд."
"Could not decrypt comment; Wrong key?": ],
"Невозможно расшифровать комментарий; Неверный ключ?", "This document will expire in %d minutes.": [
"Reply": "Документ будет удален через %d минуту.",
"Ответить", "Документ будет удален через %d минуты.",
"Anonymous": "Документ будет удален через %d минут.",
"Аноним", "Документ будет удален через %d минут."
"Avatar generated from IP address": ],
"Аватар, сгенерированный из IP-адреса", "This document will expire in %d hours.": [
"Add comment": "Документ будет удален через %d час.",
"Добавить комментарий", "Документ будет удален через %d часа.",
"Optional nickname…": "Документ будет удален через %d часов.",
"Опциональный никнейм…", "Документ будет удален через %d часов."
"Post comment": ],
"Отправить комментарий", "This document will expire in %d days.": [
"Sending comment…": "Документ будет удален через %d день.",
"Отправка комментария…", "Документ будет удален через %d дня.",
"Comment posted.": "Документ будет удален через %d дней.",
"Комментарий опубликован.", "Документ будет удален через %d дней."
"Could not refresh display: %s": ],
"Не удалось обновить отображение: %s", "This document will expire in %d months.": [
"unknown status": "Документ будет удален через %d месяц.",
"неизвестная причина", "Документ будет удален через %d месяца.",
"server error or not responding": "Документ будет удален через %d месяцев.",
"ошибка сервера или нет ответа", "Документ будет удален через %d месяцев."
"Could not post comment: %s": ],
"Не удалось опубликовать комментарий: %s", "Please enter the password for this paste:": "Пожалуйста, введите пароль от записи:",
"Sending paste…": "Could not decrypt data (Wrong key?)": "Невозможно расшифровать данные (Неверный ключ?)",
"Отправка записи…", "Could not delete the paste, it was not stored in burn after reading mode.": "Невозможно удалить запись, она не была сохранена в режиме удаления после прочтения.",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "ТОЛЬКО ДЛЯ ВАШИХ ГЛАЗ. Не закрывайте это окно, это сообщение не может быть показано снова.",
"Ссылка на запись <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Нажмите [Ctrl]+[c], чтобы скопировать ссылку)</span>", "Could not decrypt comment; Wrong key?": "Невозможно расшифровать комментарий; Неверный ключ?",
"Delete data": "Reply": "Ответить",
"Удалить запись", "Anonymous": "Аноним",
"Could not create paste: %s": "Avatar generated from IP address": "Аватар, сгенерированный из IP-адреса",
"Не удалось опубликовать запись: %s", "Add comment": "Добавить комментарий",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "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?)": "Невозможно расшифровать запись: Ключ расшифровки отсутствует в ссылке (Может быть, вы используете сокращатель ссылок, который удаляет часть ссылки?)",
"B": "байт", "B": "байт",
"KiB": "Кбайт", "KiB": "Кбайт",
"MiB": "Мбайт", "MiB": "Мбайт",
@@ -135,40 +145,45 @@
"Markdown": "Язык разметки", "Markdown": "Язык разметки",
"Download attachment": "Скачать прикрепленный файл", "Download attachment": "Скачать прикрепленный файл",
"Cloned: '%s'": "Дублировано: '%s'", "Cloned: '%s'": "Дублировано: '%s'",
"The cloned file '%s' was attached to this paste.": "The cloned file '%s' was attached to this paste.": "Дубликат файла '%s' был прикреплен к этой записи.",
"Дубликат файла '%s' был прикреплен к этой записи.",
"Attach a file": "Прикрепить файл", "Attach a file": "Прикрепить файл",
"alternatively drag & drop a file or paste an image from the clipboard": "так же можно перенести файл в окно браузера или вставить изображение из буфера", "alternatively drag & drop a file or paste an image from the clipboard": "так же можно перенести файл в окно браузера или вставить изображение из буфера",
"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.": "Переменная PATH необходима %s в конце \"%s\". Пожалуйста, обновите переменную PATH в вашем index.php.",
"Переменная PATH необходима %s в конце \"%s\". Пожалуйста, обновите переменную PATH в вашем index.php.", "Decrypt": "Расшифровать",
"Decrypt": "Enter password": "Введите пароль",
"Расшифровать",
"Enter password":
"Введите пароль",
"Loading…": "Загрузка…", "Loading…": "Загрузка…",
"Decrypting paste…": "Расшифровка записи…", "Decrypting paste…": "Расшифровка записи…",
"Preparing new paste…": "Подготовка новой записи…", "Preparing new paste…": "Подготовка новой записи…",
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "Если данное сообщение не исчезает длительное время, посмотрите <a href=\"%s\">этот FAQ с информацией о возможном решении проблемы (на английском)</a>.",
"Если данное сообщение не исчезает длительное время, посмотрите <a href=\"%s\">этот FAQ с информацией о возможном решении проблемы (на английском)</a>.",
"+++ no paste text +++": "+++ в записи нет текста +++", "+++ no paste text +++": "+++ в записи нет текста +++",
"Could not get paste data: %s": "Could not get paste data: %s": "Не удалось получить данные записи: %s",
"Не удалось получить данные записи: %s",
"QR code": "QR код", "QR code": "QR код",
"This website is using an insecure HTTP connection! Please use it only for testing.": "This website is using an insecure HTTP connection! Please use it only for testing.": "Данный сайт использует незащищенное HTTP подключение! Пожалуйста используйте его только для тестирования.",
"Данный сайт использует незащищенное HTTP подключение! Пожалуйста используйте его только для тестирования.", "For more information <a href=\"%s\">see this FAQ entry</a>.": "Для продробностей <a href=\"%s\">прочтите информацию в FAQ</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>.": "Ваш браузер требует использования HTTPS подключения для поддержки WebCrypto API. Попробуйте <a href=\"%s\">переключиться на HTTPS</a>.",
"Для продробностей <a href=\"%s\">прочтите информацию в FAQ</a>.", "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Ваш браузер не поддерживает WebAssembly используемый для сжатия с помощью zlib. Вы можете создавать новые записи без сжатия, но не сможете открыть записи с сжатием.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "waiting on user to provide a password": "ожидаем ввода пароля пользователем",
"Ваш браузер требует использования HTTPS подключения для поддержки WebCrypto API. Попробуйте <a href=\"%s\">переключиться на HTTPS</a>.", "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Не удалось расшифровать данные. Может быть вы ввели не верный пароль? Попробуйте снова с помощью кнопки вверху.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Retry": "Повторить",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones." "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 PrivateBin": "Зашифрованная запись на PrivateBin",
"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.": "Сервис сокращения ссылок может получить ваш ключ расшифровки из ссылки.",
"Save paste": "Сохранить запись"
} }

View File

@@ -1,125 +1,135 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://privatebin.info/\">project page</a>.": "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s 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.",
"%s je minimalističen, odprtokodni spletni 'pastebin', kjer server ne ve ničesar o prilepljenih podatkih. Podatki so zakodirani/odkodirani <i>v brskalniku</i> z uporabo 256 bitnega AES. Več informacij na < href=\"https://privatebin.info/\">spletni strani projekta.</a>.", "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": "Because ignorance is bliss": "Ker kar ne veš ne boli.",
"Ker kar ne veš ne boli.",
"en": "sl", "en": "sl",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.": "Prilepek ne obstaja, mu je potekla življenjska doba, ali pa je izbrisan.",
"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 php %s or above to work. Sorry.": "%s requires configuration section [%s] to be present in configuration file.": "%s potrebuje sekcijo konfiguracij [%s] v konfiguracijski datoteki.",
"Oprosti, %s za delovanje potrebuje vsaj php %s.", "Please wait %d seconds between each post.": [
"%s requires configuration section [%s] to be present in configuration file.": "Prosim počakaj vsaj %d sekundo pred vsako naslednjo objavo.",
"%s potrebuje sekcijo konfiguracij [%s] v konfiguracijski datoteki.", "Prosim počakaj vsaj %d sekundi pred vsako naslednjo objavo.",
"Please wait %d seconds between each post.": "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."
"Paste is limited to %s of encrypted data.": ],
"Velikost prilepka je omejena na %s zakodiranih podatkov.", "Paste is limited to %s of encrypted data.": "Velikost prilepka je omejena na %s zakodiranih podatkov.",
"Invalid data.": "Invalid data.": "Neveljavni podatki.",
"Neveljavni podatki.", "You are unlucky. Try again.": "Nimaš sreče, poskusi ponovno.",
"You are unlucky. Try again.": "Error saving comment. Sorry.": "Nekaj je šlo narobe pri shranjevanju komentarja. Oprosti.",
"Nimaš sreče, poskusi ponovno.", "Error saving paste. Sorry.": "Nekaj je šlo narobe pri shranjevanju prilepka. Oprosti.",
"Error saving comment. Sorry.": "Invalid paste ID.": "Napačen ID prilepka.",
"Nekaj je šlo narobe pri shranjevanju komentarja. Oprosti.", "Paste is not of burn-after-reading type.": "Prilepek ni tipa zažgi-po-branju.",
"Error saving paste. Sorry.": "Wrong deletion token. Paste was not deleted.": "Napačen token za izbris. Prilepek ni bil izbrisan..",
"Nekaj je šlo narobe pri shranjevanju prilepka. Oprosti.", "Paste was properly deleted.": "Prilepek je uspešno izbrisan.",
"Invalid paste ID.": "JavaScript is required for %s to work. Sorry for the inconvenience.": "Da %s deluje, moraš vklopiti JavaScript. Oprosti za povročene nevšečnosti.",
"Napačen ID prilepka.", "%s requires a modern browser to work.": "%s za svoje delovanje potrebuje moderen brskalnik.",
"Paste is not of burn-after-reading type.": "New": "Nov prilepek",
"Prilepek ni tipa zažgi-po-branju.", "Send": "Pošlji",
"Wrong deletion token. Paste was not deleted.": "Clone": "Kloniraj",
"Napačen token za izbris. Prilepek ni bil izbrisan..", "Raw text": "Surov tekst",
"Paste was properly deleted.": "Expires": "Poteče",
"Prilepek je uspešno izbrisan.", "Burn after reading": "Zažgi (pobriši) po branju",
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.": "Open discussion": "Dovoli razpravo",
"Da %s deluje, moraš vklopiti JavaScript.<br />Oprosti za povročene nevšečnosti.", "Password (recommended)": "Geslo (priporočeno)",
"%s requires a modern browser to work.": "Discussion": "Razprava",
"%s za svoje delovanje potrebuje moderen brskalnik.", "Toggle navigation": "Preklopi navigacijo",
"New": "%d seconds": [
"Nov prilepek", "%d sekunda",
"Send": "%d sekundi",
"Pošlji", "%d sekunde",
"Clone": "%d sekund"
"Kloniraj", ],
"Raw text": "%d minutes": [
"Surov tekst", "%d minuta",
"Expires": "%d minuti",
"Poteče", "%d minute",
"Burn after reading": "%d minut"
"Zažgi (pobriši) po branju", ],
"Open discussion": "%d hours": [
"Dovoli razpravo", "%d ura",
"Password (recommended)": "%d uri",
"Geslo (priporočeno)", "%d ure",
"Discussion": "%d ur"
"Razprava", ],
"Toggle navigation": "%d days": [
"Preklopi navigacijo", "%d dan",
"%d seconds": ["%d sekunda", "%d sekundi", "%d sekunde", "%d sekund"], "%d dneva",
"%d minutes": ["%d minuta", "%d minuti", "%d minute", "%d minut"], "%d dnevi",
"%d hours": ["%d ura", "%d uri", "%d ure", "%d ur"], "%d dni"
"%d days": ["%d dan", "%d dneva", "%d dnevi", "%d dni"], ],
"%d weeks": ["%d teden", "%d tedna", "%d tedni", "%d tednov"], "%d weeks": [
"%d months": ["%d mesec", "%d meseca", "%d meseci", "%d mesecev"], "%d teden",
"%d years": ["%d leto", "%d leti", "%d leta", "%d let"], "%d tedna",
"Never": "%d tedni",
"Nikoli", "%d tednov"
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": ],
"Ne pozabi: To je testna storitev: Podatki so lahko kadarkoli pobrisani. Mucki bodo umrli, če boš zlorabljala to storitev.", "%d months": [
"This document will expire in %d seconds.": "%d mesec",
["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."], "%d meseca",
"This document will expire in %d minutes.": "%d meseci",
["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."], "%d mesecev"
"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."], "%d years": [
"This document will expire in %d days.": "%d leto",
["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."], "%d leti",
"This document will expire in %d months.": "%d leta",
["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."], "%d let"
"Please enter the password for this paste:": ],
"Prosim vnesi geslo tega prilepka:", "Never": "Nikoli",
"Could not decrypt data (Wrong key?)": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Ne pozabi: To je testna storitev: Podatki so lahko kadarkoli pobrisani. Mucki bodo umrli, če boš zlorabljala to storitev.",
"Nemogoče odkodirati podakte (Imaš napačen ključ?)", "This document will expire in %d seconds.": [
"Could not delete the paste, it was not stored in burn after reading mode.": "Ta dokument bo potekel čez %d sekundo.",
"Prilepek je nemogoče izbrisati, ni bil shranjen v načinu \"zažgi po branju\".", "Ta dokument bo potekel čez %d sekundi.",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "Ta dokument bo potekel čez %d sekunde.",
"SAMO ZA TVOJE OČI. Ne zapri tega okna (zavihka), to sporočilo ne bo prikazano nikoli več.", "Ta dokument bo potekel čez %d sekund."
"Could not decrypt comment; Wrong key?": ],
"Ne morem odkodirati komentarja: Imaš napačen ključ?", "This document will expire in %d minutes.": [
"Reply": "Ta dokument bo potekel čez %d minuto.",
"Odgovori", "Ta dokument bo potekel čez %d minuti.",
"Anonymous": "Ta dokument bo potekel čez %d minute.",
"Aninomno", "Ta dokument bo potekel čez %d minut."
"Avatar generated from IP address": ],
"Anonimen avatar (Vizhash IP naslova)", "This document will expire in %d hours.": [
"Add comment": "Ta dokument bo potekel čez %d uro.",
"Dodaj komentar", "Ta dokument bo potekel čez %d uri.",
"Optional nickname…": "Ta dokument bo potekel čez %d ure.",
"Uporabniško ime (lahko izpustiš)", "Ta dokument bo potekel čez %d ur."
"Post comment": ],
"Objavi komentar", "This document will expire in %d days.": [
"Sending comment…": "Ta dokument bo potekel čez %d dan.",
"Pošiljam komentar …", "Ta dokument bo potekel čez %d dni.",
"Comment posted.": "Ta dokument bo potekel čez %d dni.",
"Komentar poslan.", "Ta dokument bo potekel čez %d dni."
"Could not refresh display: %s": ],
"Ne morem osvežiti zaslona : %s", "This document will expire in %d months.": [
"unknown status": "Ta dokument bo potekel čez %d mesec.",
"neznan status", "Ta dokument bo potekel čez %d meseca.",
"server error or not responding": "Ta dokument bo potekel čez %d mesece.",
"napaka na strežniku, ali pa se strežnik ne odziva", "Ta dokument bo potekel čez %d mesecev."
"Could not post comment: %s": ],
"Komentarja ni bilo mogoče objaviti : %s", "Please enter the password for this paste:": "Prosim vnesi geslo tega prilepka:",
"Sending paste…": "Could not decrypt data (Wrong key?)": "Nemogoče odkodirati podakte (Imaš napačen ključ?)",
"Pošiljam prilepek…", "Could not delete the paste, it was not stored in burn after reading mode.": "Prilepek je nemogoče izbrisati, ni bil shranjen v načinu \"zažgi po branju\".",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "SAMO ZA TVOJE OČI. Ne zapri tega okna (zavihka), to sporočilo ne bo prikazano nikoli več.",
"Tvoj prilepek je dostopen na naslovu: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Pritisni [Ctrl]+[c] ali [Cmd] + [c] in skopiraj)</span>", "Could not decrypt comment; Wrong key?": "Ne morem odkodirati komentarja: Imaš napačen ključ?",
"Delete data": "Reply": "Odgovori",
"Izbriši podatke", "Anonymous": "Aninomno",
"Could not create paste: %s": "Avatar generated from IP address": "Anonimen avatar (Vizhash IP naslova)",
"Ne morem ustvariti prilepka: %s", "Add comment": "Dodaj komentar",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Optional nickname…": "Uporabniško ime (lahko izpustiš)",
"Ne morem odkodirati prilepka: V URL-ju manjka ključ (A si uporabil krajšalnik URL-jev, ki odstrani del URL-ja?)", "Post comment": "Objavi komentar",
"Sending comment…": "Pošiljam komentar …",
"Comment posted.": "Komentar poslan.",
"Could not refresh display: %s": "Ne morem osvežiti zaslona : %s",
"unknown status": "neznan status",
"server error or not responding": "napaka na strežniku, ali pa se strežnik ne odziva",
"Could not post comment: %s": "Komentarja ni bilo mogoče objaviti : %s",
"Sending paste…": "Pošiljam prilepek…",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Tvoj prilepek je dostopen na naslovu: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Pritisni [Ctrl]+[c] ali [Cmd] + [c] in skopiraj)</span>",
"Delete data": "Izbriši podatke",
"Could not create paste: %s": "Ne morem ustvariti prilepka: %s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Ne morem odkodirati prilepka: V URL-ju manjka ključ (A si uporabil krajšalnik URL-jev, ki odstrani del URL-ja?)",
"B": "o", "B": "o",
"KiB": "KB", "KiB": "KB",
"MiB": "MB", "MiB": "MB",
@@ -140,34 +150,40 @@
"alternatively drag & drop a file or paste an image from the clipboard": "alternatively drag & drop a file or paste an image from the clipboard", "alternatively drag & drop a file or paste an image from the clipboard": "alternatively drag & drop a file or paste an image from the clipboard",
"File too large, to display a preview. Please download the attachment.": "File too large, to display a preview. Please download the attachment.", "File too large, to display a preview. Please download the attachment.": "File too large, to display a preview. Please download the attachment.",
"Remove attachment": "Odstrani priponko", "Remove attachment": "Odstrani priponko",
"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.": "Tvoj brskalnik ne omogoča nalaganje zakodiranih datotek. Prosim uporabi novejši brskalnik.",
"Tvoj brskalnik ne omogoča nalaganje zakodiranih datotek. Prosim uporabi novejši brskalnik.",
"Invalid attachment.": "Neveljavna priponka.", "Invalid attachment.": "Neveljavna priponka.",
"Options": "Možnosti", "Options": "Možnosti",
"Shorten URL": "Skrajšajte URL", "Shorten URL": "Skrajšajte URL",
"Editor": "Uredi", "Editor": "Uredi",
"Preview": "Predogled", "Preview": "Predogled",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.", "Decrypt": "Decrypt",
"Decrypt": "Enter password": "Prosim vnesi geslo",
"Decrypt",
"Enter password":
"Prosim vnesi geslo",
"Loading…": "Loading…", "Loading…": "Loading…",
"Decrypting paste…": "Decrypting paste…", "Decrypting paste…": "Decrypting paste…",
"Preparing new paste…": "Preparing new paste…", "Preparing new paste…": "Preparing new paste…",
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a> (in English).",
"In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a> (in English).",
"+++ no paste text +++": "+++ no paste text +++", "+++ no paste text +++": "+++ no paste text +++",
"Could not get paste data: %s": "Could not get paste data: %s": "Could not get paste data: %s",
"Could not get paste data: %s",
"QR code": "QR code", "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.": "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>.",
"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>.",
"For more information <a href=\"%s\">see this FAQ entry</a>.", "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "waiting on user to provide a password": "waiting on user to provide a password",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.", "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.",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Retry": "Retry",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones." "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 PrivateBin": "Encrypted note on PrivateBin",
"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"
} }

189
i18n/sv.json Normal file
View File

@@ -0,0 +1,189 @@
{
"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": "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.",
"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)"
],
"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",
"%d seconds": [
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
],
"%d minutes": [
"%d minute (singular)",
"%d minutes (1st plural)",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
],
"%d hours": [
"%d hour (singular)",
"%d hours (1st plural)",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
],
"%d days": [
"%d day (singular)",
"%d days (1st plural)",
"%d days (2nd plural)",
"%d days (3rd plural)"
],
"%d weeks": [
"%d week (singular)",
"%d weeks (1st plural)",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
],
"%d months": [
"%d month (singular)",
"%d months (1st plural)",
"%d months (2nd plural)",
"%d months (3rd plural)"
],
"%d years": [
"%d year (singular)",
"%d years (1st plural)",
"%d years (2nd plural)",
"%d years (3rd plural)"
],
"Never": "Never",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.",
"This document will expire in %d seconds.": [
"This document will expire in %d second. (singular)",
"This document will expire in %d seconds. (1st plural)",
"This document will expire in %d seconds. (2nd plural)",
"This document will expire in %d seconds. (3rd plural)"
],
"This document will expire in %d 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 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 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 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)"
],
"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 PrivateBin": "Encrypted note on PrivateBin",
"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"
}

189
i18n/tr.json Normal file
View File

@@ -0,0 +1,189 @@
{
"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>.": "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 requires php %s or above to work. Sorry.",
"%s requires configuration section [%s] to be present in configuration file.": "%s requires configuration section [%s] to be present in configuration file.",
"Please wait %d seconds between each post.": [
"Please wait %d second between each post. (singular)",
"Please wait %d seconds between each post. (1st plural)",
"Please wait %d seconds between each post. (2nd plural)",
"Please wait %d seconds between each post. (3rd plural)"
],
"Paste is limited to %s of encrypted data.": "Paste is limited to %s of encrypted data.",
"Invalid data.": "Geçersiz veri.",
"You are unlucky. Try again.": "Lütfen tekrar deneyiniz.",
"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": "Yeni",
"Send": "Gönder",
"Clone": "Clone",
"Raw text": "Raw text",
"Expires": "Expires",
"Burn after reading": "Burn after reading",
"Open discussion": "Open discussion",
"Password (recommended)": "Password (recommended)",
"Discussion": "Discussion",
"Toggle navigation": "Toggle navigation",
"%d seconds": [
"%d second (singular)",
"%d seconds (1st plural)",
"%d seconds (2nd plural)",
"%d seconds (3rd plural)"
],
"%d minutes": [
"%d minute (singular)",
"%d minutes (1st plural)",
"%d minutes (2nd plural)",
"%d minutes (3rd plural)"
],
"%d hours": [
"%d hour (singular)",
"%d hours (1st plural)",
"%d hours (2nd plural)",
"%d hours (3rd plural)"
],
"%d days": [
"%d day (singular)",
"%d days (1st plural)",
"%d days (2nd plural)",
"%d days (3rd plural)"
],
"%d weeks": [
"%d hafta (tekil)",
"%d haftalar (çoğul)",
"%d weeks (2nd plural)",
"%d weeks (3rd plural)"
],
"%d months": [
"%d month (singular)",
"%d months (1st plural)",
"%d months (2nd plural)",
"%d months (3rd plural)"
],
"%d years": [
"%d year (singular)",
"%d years (1st plural)",
"%d years (2nd plural)",
"%d years (3rd plural)"
],
"Never": "Never",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.",
"This document will expire in %d seconds.": [
"This document will expire in %d second. (singular)",
"This document will expire in %d seconds. (1st plural)",
"This document will expire in %d seconds. (2nd plural)",
"This document will expire in %d seconds. (3rd plural)"
],
"This document will expire in %d 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 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 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 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)"
],
"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 PrivateBin": "Encrypted note on PrivateBin",
"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"
}

189
i18n/uk.json Normal file
View File

@@ -0,0 +1,189 @@
{
"PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s це мінімалістичний Open Source проєкт для створення нотаток, де сервер не знає нічого про дані, що зберігаються. Дані шифруються/розшифровуються %sу переглядачі%s з використанням 256-бітного шифрувания AES.",
"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] в конфігураційному файлі.",
"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)"
],
"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": "Новий допис",
"Send": "Відправити",
"Clone": "Дублювати",
"Raw text": "Початковий текст",
"Expires": "Вилучити через",
"Burn after reading": "Знищити після прочитання",
"Open discussion": "Відкрити обговорення",
"Password (recommended)": "Пароль (рекомендується)",
"Discussion": "Обговорення",
"Toggle navigation": "Перемкнути навігацію",
"%d seconds": [
"%d секунду",
"%d секунди",
"%d секунд",
"%d секунд"
],
"%d minutes": [
"%d хвилину",
"%d хвилини",
"%d хвилин",
"%d хвилин"
],
"%d hours": [
"%d годину",
"%d години",
"%d годин",
"%d годин"
],
"%d days": [
"%d день",
"%d дні",
"%d днів",
"%d днів"
],
"%d weeks": [
"%d тиждень",
"%d тижні",
"%d тижнів",
"%d тижнів"
],
"%d months": [
"%d місяць",
"%d місяці",
"%d місяців",
"%d місяців"
],
"%d years": [
"%d рік",
"%d роки",
"%d років",
"%d років"
],
"Never": "Ніколи",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Примітка: Це тестовий сервіс: Дані можуть бути вилучені в будь який момент. Кошенята помруть, якщо ви будете зловживати сервісом.",
"This document will expire in %d seconds.": [
"Документ буде вилучений через %d секунду.",
"Документ буде вилучений через %d секунди.",
"Документ буде вилучений через %d секунд.",
"Документ буде вилучений через %d секунд."
],
"This document will expire in %d minutes.": [
"Документ буде вилучений через %d хвилину.",
"Документ буде вилучений через %d хвилини.",
"Документ буде вилучений через %d хвилин.",
"Документ буде вилучений через %d хвилин."
],
"This document will expire in %d hours.": [
"Документ буде вилучений через %d годину.",
"Документ буде вилучений через %d години.",
"Документ буде вилучений через %d годин.",
"Документ буде вилучений через %d годин."
],
"This document will expire in %d days.": [
"Документ буде вилучений через %d день.",
"Документ буде вилучений через %d дні.",
"Документ буде вилучений через %d днів.",
"Документ буде вилучений через %d днів."
],
"This document will expire in %d months.": [
"Документ буде вилучений через %d місяць.",
"Документ буде вилучений через %d місяці.",
"Документ буде вилучений через %d місяців.",
"Документ буде вилучений через %d місяців."
],
"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?)": "Неможливо розшифрувати запис: Ключ дешифрування відсутній в посиланні (Можливо, ви використовуєте скорочувач посилань, що видаляє частину посилання?)",
"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": "Коротке посилання",
"Editor": "Редактор",
"Preview": "Передогляд",
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "Змінна PATH необхідна %s в конці \"%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\">цей 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>.": "Ваш переглядач вимагає підключення 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": "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 PrivateBin": "Encrypted note on PrivateBin",
"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"
}

View File

@@ -1,164 +1,189 @@
{ {
"PrivateBin": "PrivateBin", "PrivateBin": "PrivateBin",
"%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://privatebin.info/\">project page</a>.": "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s 是一个极简、开源、对粘贴内容毫不知情的在线粘贴板,数据%s在浏览器内%s进行 AES-256 加密和解密。",
"%s是一个极简、开源、对粘贴内容毫不知情的在线粘贴板数据<i>在浏览器内</i>进行AES-256加密。更多信息请查看<a href=\"https://privatebin.info/\">项目主页</a>。", "More information on the <a href=\"https://privatebin.info/\">project page</a>.": "更多信息请查看<a href=\"https://privatebin.info/\">项目主页</a>。",
"Because ignorance is bliss": "Because ignorance is bliss": "因为无知是福",
"因为无知是福",
"en": "zh", "en": "zh",
"Paste does not exist, has expired or has been deleted.": "Paste does not exist, has expired or has been deleted.": "粘贴内容不存在、已过期或已被删除。",
"粘贴内容不存在,已过期或已被删除。", "%s requires php %s or above to work. Sorry.": "抱歉,%s 需要 PHP %s 及以上版本才能运行。",
"%s requires php %s or above to work. Sorry.": "%s requires configuration section [%s] to be present in configuration file.": "%s 需要设置配置文件中的 [%s] 部分。",
"%s需要PHP %s及以上版本来工作抱歉。", "Please wait %d seconds between each post.": [
"%s requires configuration section [%s] to be present in configuration file.":
"%s需要设置配置文件中 [%s] 部分。",
"Please wait %d seconds between each post.":
"每 %d 秒只能粘贴一次。", "每 %d 秒只能粘贴一次。",
"Paste is limited to %s of encrypted data.": "每 %d 秒只能粘贴一次。",
"粘贴受限于 %s 加密数据。", "每 %d 秒只能粘贴一次。",
"Invalid data.": "每 %d 秒只能粘贴一次。"
"无效的数据。", ],
"You are unlucky. Try again.": "Paste is limited to %s of encrypted data.": "对于加密数据,上限为 %s。",
"请再试一次。", "Invalid data.": "无效的数据。",
"Error saving comment. Sorry.": "You are unlucky. Try again.": "请再试一次。",
"保存评论时出现错误,抱歉。", "Error saving comment. Sorry.": "保存评论时出现错误,抱歉。",
"Error saving paste. Sorry.": "Error saving paste. Sorry.": "保存粘贴内容时出现错误,抱歉。",
"保存粘贴内容时出现错误,抱歉。", "Invalid paste ID.": "无效的 ID。",
"Invalid paste ID.": "Paste is not of burn-after-reading type.": "粘贴内容不是阅后即焚类型。",
"无效的ID。", "Wrong deletion token. Paste was not deleted.": "错误的删除token粘贴内容没有被删除。",
"Paste is not of burn-after-reading type.": "Paste was properly deleted.": "粘贴内容已被正确删除。",
"粘贴内容不是阅后即焚类型。", "JavaScript is required for %s to work. Sorry for the inconvenience.": "%s 需要 JavaScript 来进行加解密。 给你带来的不便敬请谅解。",
"Wrong deletion token. Paste was not deleted.": "%s requires a modern browser to work.": "%s 需要在现代浏览器上工作。",
"错误的删除token粘贴内容没有被删除。", "New": "新建",
"Paste was properly deleted.": "Send": "送出",
"粘贴内容已被正确删除。", "Clone": "复制",
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.": "Raw text": "纯文本",
"%s需要JavaScript来进行加解密。<br />给你带来的不便敬请谅解。", "Expires": "有效期",
"%s requires a modern browser to work.": "Burn after reading": "阅后即焚",
"%s需要在现代浏览器上工作。", "Open discussion": "开放讨论",
"New": "Password (recommended)": "密码(推荐)",
"新建", "Discussion": "讨论",
"Send": "Toggle navigation": "切换导航栏",
"送出", "%d seconds": [
"Clone": "%d 秒",
"复制", "%d 秒",
"Raw text": "%d 秒",
"纯文本", "%d 秒"
"Expires": ],
"有效期", "%d minutes": [
"Burn after reading": "%d 分钟",
"阅后即焚", "%d 分钟",
"Open discussion": "%d 秒",
"开放讨论", "%d 秒"
"Password (recommended)": ],
"密码(推荐)", "%d hours": [
"Discussion": "%d 小时",
"讨论", "%d 小时",
"Toggle navigation": "%d 小时",
"切换导航栏", "%d 小时"
"%d seconds": ["%d 秒", "%d 秒"], ],
"%d minutes": ["%d 分钟", "%d 分钟"], "%d days": [
"%d hours": ["%d 小时", "%d 小时"], "%d 天",
"%d days": ["%d 天", "%d 天"], "%d 天",
"%d weeks": ["%d 周", "%d 周"], "%d 天",
"%d months": ["%d 个月", "%d 个月"], "%d 天"
"%d years": ["%d 年", "%d 年"], ],
"Never": "%d weeks": [
"永不过期", "%d 周",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "%d 周",
"注意:这是一个测试服务,数据随时可能被删除。如果你滥用这个服务的话,小猫咪会死的。", "%d 周",
"This document will expire in %d seconds.": "%d 周"
["这份文档将在一秒后过期。", "这份文档将在 %d 秒后过期"], ],
"This document will expire in %d minutes.": "%d months": [
["这份文档将在一分钟后过期。", "这份文档将在 %d 分钟后过期。"], "%d 个月",
"This document will expire in %d hours.": "%d 个月",
["这份文档将在一小时后过期。", "这份文档将在 %d 小时后过期。"], "%d 个月",
"This document will expire in %d days.": "%d 个月"
["这份文档将在一天后过期。", "这份文档将在 %d 天后过期。"], ],
"This document will expire in %d months.": "%d years": [
["这份文档将在一个月后过期。", "这份文档将在 %d 个月后过期。"], "%d 年",
"Please enter the password for this paste:": "%d 年",
"请输入这份粘贴内容的密码:", "%d 年",
"Could not decrypt data (Wrong key?)": "%d 年"
"无法解密数据(密钥错误?)", ],
"Could not delete the paste, it was not stored in burn after reading mode.": "Never": "永不过期",
"无法删除此粘贴内容,它没有以阅后即焚模式保存。", "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "注意:这是一个测试服务,数据随时可能被删除。如果你滥用这个服务的话,小猫咪会死的。",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "This document will expire in %d seconds.": [
"看!仔!细!了!不要关闭窗口,否则你再也见不到这条消息了。", "这份文档将在一秒后过期。",
"Could not decrypt comment; Wrong key?": "这份文档将在 %d 秒后过期。",
"无法解密评论; 密钥错误?", "这份文档将在 %d 秒后过期。",
"Reply": "这份文档将在 %d 秒后过期。"
"回复", ],
"Anonymous": "This document will expire in %d minutes.": [
"匿名", "这份文档将在一分钟后过期。",
"Avatar generated from IP address": "这份文档将在 %d 分钟后过期。",
"由IP生成的头像", "这份文档将在 %d 分钟后过期。",
"Add comment": "这份文档将在 %d 分钟后过期。"
"添加评论", ],
"Optional nickname…": "This document will expire in %d hours.": [
"可选昵称…", "这份文档将在一小时后过期。",
"Post comment": "这份文档将在 %d 小时后过期。",
"评论", "这份文档将在 %d 小时后过期。",
"Sending comment…": "这份文档将在 %d 小时后过期。"
"评论发送中…", ],
"Comment posted.": "This document will expire in %d days.": [
"评论已发送。", "这份文档将在一天后过期。",
"Could not refresh display: %s": "这份文档将在 %d 天后过期。",
"无法刷新显示:%s", "这份文档将在 %d 天后过期。",
"unknown status": "这份文档将在 %d 天后过期。"
"未知状态", ],
"server error or not responding": "This document will expire in %d months.": [
"服务器错误或无回应", "这份文档将在一个月后过期。",
"Could not post comment: %s": "这份文档将在 %d 个月后过期。",
"无法发送评论: %s", "这份文档将在 %d 个月后过期。",
"Sending paste…": "这份文档将在 %d 个月后过期。"
"粘贴内容提交中…", ],
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Please enter the password for this paste:": "请输入这份粘贴内容的密码:",
"您粘贴内容的链接是<a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(按下 [Ctrl]+[c] 以复制)</span>", "Could not decrypt data (Wrong key?)": "无法解密数据(密钥错误?)",
"Delete data": "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 create paste: %s": "Could not decrypt comment; Wrong key?": "无法解密评论;密钥错误?",
"无法创建粘贴:%s", "Reply": "回复",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Anonymous": "匿名",
"无法解密粘贴URL中缺失解密密钥是否使用了重定向或者短链接导致密钥丢失", "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中缺失解密密钥是否使用了重定向或者短链接导致密钥丢失",
"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", "Markdown": "Markdown",
"Download attachment": "下载附件", "Download attachment": "下载附件",
"Cloned: '%s'": "副本: '%s'", "Cloned: '%s'": "副本:“%s",
"The cloned file '%s' was attached to this paste.": "副本 '%s' 已附加到此粘贴内容。", "The cloned file '%s' was attached to this paste.": "副本“%s”已附加到此粘贴内容。",
"Attach a file": "添加一个附件", "Attach a file": "添加一个附件",
"alternatively drag & drop a file or paste an image from the clipboard": "拖放文件或从剪贴板粘贴图片", "alternatively drag & drop a file or paste an image from the clipboard": "拖放文件或从剪贴板粘贴图片",
"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.": "%s 的 PATH 变量必须结束于“%s”。 请修改你的 index.php 中的 PATH 变量。",
"%s 的 PATH 变量必须结束于 \"%s\"。 请修改你的 index.php 中的 PATH 变量。", "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>.": "如果此消息一直存在,请参考 <a href=\"%s\">这里的 FAQ英文版</a>排除故障。",
"如果这个消息一直存在,请参考 <a href=\"%s\">这里的 FAQ (英文版)</a>进行故障排除。", "+++ no paste text +++": "+++ 无粘贴内容 +++",
"+++ no paste text +++": "+++ 没有粘贴内容 +++", "Could not get paste data: %s": "无法获取粘贴数据:%s",
"Could not get paste data: %s":
"无法获取粘贴数据:%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.": "该网站使用了不安全的 HTTP 连接!请仅将其用于测试。",
"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>.": "有关更多信息,请参阅<a href=\"%s\">此常见问题解答</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>.": "您的浏览器可能需要 HTTPS 连接才能支持 WebCrypto API。 尝试<a href=\"%s\">切换到 HTTPS</a>",
"For more information <a href=\"%s\">see this FAQ entry</a>.", "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "您的浏览器不支持用于 zlib 压缩的 WebAssembly。 您可以创建未压缩的文档,但不能读取压缩的文档。",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "waiting on user to provide a password": "请输入密码",
"Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.", "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "无法解密数据。您是否输入了错误的密码?按顶部的按钮重试。",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Retry": "重试",
"Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones." "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 PrivateBin": "PrivateBin 上的加密笔记",
"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": "保存内容"
} }

BIN
img/icon_email.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

View File

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

View File

@@ -1,151 +0,0 @@
// base-x encoding / decoding
// based on https://github.com/cryptocoinjs/base-x 3.0.5
// modification: removed Buffer dependency and node.modules entry
// Copyright (c) 2018 base-x contributors
// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)
// Distributed under the MIT software license, see the accompanying
// file LICENSE or http://www.opensource.org/licenses/mit-license.php.
(function(){
'use strict';
this.baseX = function base (ALPHABET) {
if (ALPHABET.length >= 255) throw new TypeError('Alphabet too long')
const BASE_MAP = new Uint8Array(256)
BASE_MAP.fill(255)
for (let i = 0; i < ALPHABET.length; i++) {
const x = ALPHABET.charAt(i)
const xc = x.charCodeAt(0)
if (BASE_MAP[xc] !== 255) throw new TypeError(x + ' is ambiguous')
BASE_MAP[xc] = i
}
const BASE = ALPHABET.length
const LEADER = ALPHABET.charAt(0)
const FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up
const iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up
function encode (source) {
if (source.length === 0) return ''
// Skip & count leading zeroes.
let zeroes = 0
let length = 0
let pbegin = 0
const pend = source.length
while (pbegin !== pend && source[pbegin] === 0) {
pbegin++
zeroes++
}
// Allocate enough space in big-endian base58 representation.
const size = ((pend - pbegin) * iFACTOR + 1) >>> 0
const b58 = new Uint8Array(size)
// Process the bytes.
while (pbegin !== pend) {
let carry = source[pbegin]
// Apply "b58 = b58 * 256 + ch".
let i = 0
for (let it = size - 1; (carry !== 0 || i < length) && (it !== -1); it--, i++) {
carry += (256 * b58[it]) >>> 0
b58[it] = (carry % BASE) >>> 0
carry = (carry / BASE) >>> 0
}
if (carry !== 0) throw new Error('Non-zero carry')
length = i
pbegin++
}
// Skip leading zeroes in base58 result.
let it = size - length
while (it !== size && b58[it] === 0) {
it++
}
// Translate the result into a string.
let str = LEADER.repeat(zeroes)
for (; it < size; ++it) str += ALPHABET.charAt(b58[it])
return str
}
function decodeUnsafe (source) {
if (typeof source !== 'string') throw new TypeError('Expected String')
if (source.length === 0) return ''
let psz = 0
// Skip leading spaces.
if (source[psz] === ' ') return
// Skip and count leading '1's.
let zeroes = 0
let length = 0
while (source[psz] === LEADER) {
zeroes++
psz++
}
// Allocate enough space in big-endian base256 representation.
const size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.
const b256 = new Uint8Array(size)
// Process the characters.
while (source[psz]) {
// Decode character
let carry = BASE_MAP[source.charCodeAt(psz)]
// Invalid character
if (carry === 255) return
let i = 0
for (let it = size - 1; (carry !== 0 || i < length) && (it !== -1); it--, i++) {
carry += (BASE * b256[it]) >>> 0
b256[it] = (carry % 256) >>> 0
carry = (carry / 256) >>> 0
}
if (carry !== 0) throw new Error('Non-zero carry')
length = i
psz++
}
// Skip trailing spaces.
if (source[psz] === ' ') return
// Skip leading zeroes in b256.
let it = size - length
while (it !== size && b256[it] === 0) {
it++
}
var vch = [];
let j = zeroes
while (it !== size) {
vch[j++] = b256[it++]
}
return vch
}
function decode (string) {
const buffer = decodeUnsafe(string)
if (buffer) return buffer
throw new Error('Non-base' + BASE + ' character')
}
return {
encode: encode,
decodeUnsafe: decodeUnsafe,
decode: decode
}
}
}).call(this);

120
js/base-x-3.0.7.js Normal file
View File

@@ -0,0 +1,120 @@
'use strict';
// base-x encoding / decoding
// based on https://github.com/cryptocoinjs/base-x 3.0.7
// modification: removed Buffer dependency and node.modules entry
// Copyright (c) 2018 base-x contributors
// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)
// Distributed under the MIT software license, see the accompanying
// file LICENSE or http://www.opensource.org/licenses/mit-license.php.
(function(){
this.baseX = function base (ALPHABET) {
if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }
var BASE_MAP = new Uint8Array(256)
BASE_MAP.fill(255)
for (var i = 0; i < ALPHABET.length; i++) {
var x = ALPHABET.charAt(i)
var xc = x.charCodeAt(0)
if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }
BASE_MAP[xc] = i
}
var BASE = ALPHABET.length
var LEADER = ALPHABET.charAt(0)
var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up
var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up
function encode (source) {
if (source.length === 0) { return '' }
// Skip & count leading zeroes.
var zeroes = 0
var length = 0
var pbegin = 0
var pend = source.length
while (pbegin !== pend && source[pbegin] === 0) {
pbegin++
zeroes++
}
// Allocate enough space in big-endian base58 representation.
var size = ((pend - pbegin) * iFACTOR + 1) >>> 0
var b58 = new Uint8Array(size)
// Process the bytes.
while (pbegin !== pend) {
var carry = source[pbegin]
// Apply "b58 = b58 * 256 + ch".
var i = 0
for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {
carry += (256 * b58[it1]) >>> 0
b58[it1] = (carry % BASE) >>> 0
carry = (carry / BASE) >>> 0
}
if (carry !== 0) { throw new Error('Non-zero carry') }
length = i
pbegin++
}
// Skip leading zeroes in base58 result.
var it2 = size - length
while (it2 !== size && b58[it2] === 0) {
it2++
}
// Translate the result into a string.
var str = LEADER.repeat(zeroes)
for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }
return str
}
function decodeUnsafe (source) {
if (typeof source !== 'string') { throw new TypeError('Expected String') }
if (source.length === 0) { return '' }
var psz = 0
// Skip leading spaces.
if (source[psz] === ' ') { return }
// Skip and count leading '1's.
var zeroes = 0
var length = 0
while (source[psz] === LEADER) {
zeroes++
psz++
}
// Allocate enough space in big-endian base256 representation.
var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.
var b256 = new Uint8Array(size)
// Process the characters.
while (source[psz]) {
// Decode character
var carry = BASE_MAP[source.charCodeAt(psz)]
// Invalid character
if (carry === 255) { return }
var i = 0
for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {
carry += (BASE * b256[it3]) >>> 0
b256[it3] = (carry % 256) >>> 0
carry = (carry / 256) >>> 0
}
if (carry !== 0) { throw new Error('Non-zero carry') }
length = i
psz++
}
// Skip trailing spaces.
if (source[psz] === ' ') { return }
// Skip leading zeroes in b256.
var it4 = size - length
while (it4 !== size && b256[it4] === 0) {
it4++
}
var vch = []
var j = zeroes
while (it4 !== size) {
vch[j++] = b256[it4++]
}
return vch
}
function decode (string) {
var buffer = decodeUnsafe(string)
if (buffer) { return buffer }
throw new Error('Non-base' + BASE + ' character')
}
return {
encode: encode,
decodeUnsafe: decodeUnsafe,
decode: decode
}
}
}).call(this);

View File

@@ -7,7 +7,7 @@ global.jsdom = require('jsdom-global');
global.cleanup = global.jsdom(); global.cleanup = global.jsdom();
global.URL = require('jsdom-url').URL; global.URL = require('jsdom-url').URL;
global.fs = require('fs'); global.fs = require('fs');
global.WebCrypto = require('node-webcrypto-ossl'); global.WebCrypto = require('@peculiar/webcrypto').Crypto;
// application libraries to test // application libraries to test
global.$ = global.jQuery = require('./jquery-3.4.1'); global.$ = global.jQuery = require('./jquery-3.4.1');
@@ -17,8 +17,8 @@ require('./prettify');
global.prettyPrint = window.PR.prettyPrint; global.prettyPrint = window.PR.prettyPrint;
global.prettyPrintOne = window.PR.prettyPrintOne; global.prettyPrintOne = window.PR.prettyPrintOne;
global.showdown = require('./showdown-1.9.1'); global.showdown = require('./showdown-1.9.1');
global.DOMPurify = require('./purify-2.0.1'); global.DOMPurify = require('./purify-2.2.7');
global.baseX = require('./base-x-3.0.5.1').baseX; global.baseX = require('./base-x-3.0.7').baseX;
global.Legacy = require('./legacy').Legacy; global.Legacy = require('./legacy').Legacy;
require('./bootstrap-3.3.7'); require('./bootstrap-3.3.7');
require('./privatebin'); require('./privatebin');
@@ -36,25 +36,10 @@ var a2zString = ['a','b','c','d','e','f','g','h','i','j','k','l','m',
return c.toUpperCase(); return c.toUpperCase();
}) })
), ),
schemas = ['ftp','gopher','http','https','ws','wss'], schemas = ['ftp','http','https'],
supportedLanguages = ['de', 'es', 'fr', 'it', 'no', 'pl', 'pt', 'oc', 'ru', 'sl', 'zh'], supportedLanguages = ['de', 'es', 'fr', 'it', 'no', 'pl', 'pt', 'oc', 'ru', 'sl', 'zh'],
mimeTypes = ['image/png', 'application/octet-stream'], mimeTypes = ['image/png', 'application/octet-stream'],
formats = ['plaintext', 'markdown', 'syntaxhighlighting'], formats = ['plaintext', 'markdown', 'syntaxhighlighting'],
/**
* character to HTML entity lookup table
*
* @see {@link https://github.com/janl/mustache.js/blob/master/mustache.js#L60}
*/
entityMap = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#39;',
'/': '&#x2F;',
'`': '&#x60;',
'=': '&#x3D;'
},
mimeFile = fs.createReadStream('/etc/mime.types'), mimeFile = fs.createReadStream('/etc/mime.types'),
mimeLine = ''; mimeLine = '';
@@ -97,22 +82,6 @@ function parseMime(line) {
exports.atob = atob; exports.atob = atob;
exports.btoa = btoa; exports.btoa = btoa;
/**
* convert all applicable characters to HTML entities
*
* @see {@link https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#RULE_.231_-_HTML_Escape_Before_Inserting_Untrusted_Data_into_HTML_Element_Content}
* @name htmlEntities
* @function
* @param {string} str
* @return {string} escaped HTML
*/
exports.htmlEntities = function(str) {
return String(str).replace(
/[&<>"'`=\/]/g, function(s) {
return entityMap[s];
});
};
// provides random lowercase characters from a to z // provides random lowercase characters from a to z
exports.jscA2zString = function() { exports.jscA2zString = function() {
return jsc.elements(a2zString); return jsc.elements(a2zString);

File diff suppressed because one or more lines are too long

2
js/kjua-0.9.0.js Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
{ {
"name": "privatebin", "name": "privatebin",
"version": "1.3.0", "version": "1.3.5",
"description": "PrivateBin is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted in the browser using 256 bit AES in Galois Counter mode (GCM).", "description": "PrivateBin is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted in the browser using 256 bit AES in Galois Counter mode (GCM).",
"main": "privatebin.js", "main": "privatebin.js",
"directories": { "directories": {
@@ -12,7 +12,7 @@
"jsdom-global": "^2.1.1", "jsdom-global": "^2.1.1",
"jsdom-url": "^2.2.1", "jsdom-url": "^2.2.1",
"jsverify": "^0.8.3", "jsverify": "^0.8.3",
"node-webcrypto-ossl": "^1.0.37" "@peculiar/webcrypto": "^1.1.1"
}, },
"scripts": { "scripts": {
"test": "mocha" "test": "mocha"

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

2
js/purify-2.2.7.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -67,10 +67,6 @@ describe('Alert', function () {
}); });
describe('showWarning', function () { describe('showWarning', function () {
before(function () {
cleanup();
});
jsc.property( jsc.property(
'shows a warning message (basic)', 'shows a warning message (basic)',
jsc.array(common.jscAlnumString()), jsc.array(common.jscAlnumString()),
@@ -136,10 +132,6 @@ describe('Alert', function () {
}); });
describe('showError', function () { describe('showError', function () {
before(function () {
cleanup();
});
jsc.property( jsc.property(
'shows an error message (basic)', 'shows an error message (basic)',
jsc.array(common.jscAlnumString()), jsc.array(common.jscAlnumString()),
@@ -205,10 +197,6 @@ describe('Alert', function () {
}); });
describe('showRemaining', function () { describe('showRemaining', function () {
before(function () {
cleanup();
});
jsc.property( jsc.property(
'shows remaining time (basic)', 'shows remaining time (basic)',
jsc.array(common.jscAlnumString()), jsc.array(common.jscAlnumString()),
@@ -254,10 +242,6 @@ describe('Alert', function () {
}); });
describe('showLoading', function () { describe('showLoading', function () {
before(function () {
cleanup();
});
jsc.property( jsc.property(
'shows a loading message (basic)', 'shows a loading message (basic)',
jsc.array(common.jscAlnumString()), jsc.array(common.jscAlnumString()),
@@ -310,10 +294,6 @@ describe('Alert', function () {
}); });
describe('hideLoading', function () { describe('hideLoading', function () {
before(function () {
cleanup();
});
it( it(
'hides the loading message', 'hides the loading message',
function() { function() {
@@ -335,10 +315,6 @@ describe('Alert', function () {
}); });
describe('hideMessages', function () { describe('hideMessages', function () {
before(function () {
cleanup();
});
it( it(
'hides all messages', 'hides all messages',
function() { function() {
@@ -361,10 +337,6 @@ describe('Alert', function () {
}); });
describe('setCustomHandler', function () { describe('setCustomHandler', function () {
before(function () {
cleanup();
});
jsc.property( jsc.property(
'calls a given handler function', 'calls a given handler function',
'nat 3', 'nat 3',

View File

@@ -4,9 +4,6 @@ var common = require('../common');
describe('AttachmentViewer', function () { describe('AttachmentViewer', function () {
describe('setAttachment, showAttachment, removeAttachment, hideAttachment, hideAttachmentPreview, hasAttachment, getAttachment & moveAttachmentTo', function () { describe('setAttachment, showAttachment, removeAttachment, hideAttachment, hideAttachmentPreview, hasAttachment, getAttachment & moveAttachmentTo', function () {
this.timeout(30000); this.timeout(30000);
before(function () {
cleanup();
});
jsc.property( jsc.property(
'displays & hides data as requested', 'displays & hides data as requested',
@@ -16,7 +13,7 @@ describe('AttachmentViewer', function () {
'string', 'string',
'string', 'string',
function (mimeType, rawdata, filename, prefix, postfix) { function (mimeType, rawdata, filename, prefix, postfix) {
var clean = jsdom(), let clean = jsdom(),
data = 'data:' + mimeType + ';base64,' + btoa(rawdata), data = 'data:' + mimeType + ';base64,' + btoa(rawdata),
previewSupported = ( previewSupported = (
mimeType.substring(0, 6) === 'image/' || mimeType.substring(0, 6) === 'image/' ||
@@ -24,8 +21,9 @@ describe('AttachmentViewer', function () {
mimeType.substring(0, 6) === 'video/' || mimeType.substring(0, 6) === 'video/' ||
mimeType.match(/\/pdf/i) mimeType.match(/\/pdf/i)
), ),
results = []; results = [],
prefix = prefix.replace(/%(s|d)/g, '%%'); result = '';
prefix = prefix.replace(/%(s|d)/g, '%%');
postfix = postfix.replace(/%(s|d)/g, '%%'); postfix = postfix.replace(/%(s|d)/g, '%%');
$('body').html( $('body').html(
'<div id="attachment" role="alert" class="hidden alert ' + '<div id="attachment" role="alert" class="hidden alert ' +
@@ -57,7 +55,7 @@ describe('AttachmentViewer', function () {
} }
// beyond this point we will get the blob URL instead of the data // beyond this point we will get the blob URL instead of the data
data = window.URL.createObjectURL(data); data = window.URL.createObjectURL(data);
var attachment = $.PrivateBin.AttachmentViewer.getAttachment(); const attachment = $.PrivateBin.AttachmentViewer.getAttachment();
results.push( results.push(
$.PrivateBin.AttachmentViewer.hasAttachment() && $.PrivateBin.AttachmentViewer.hasAttachment() &&
$('#attachment').hasClass('hidden') && $('#attachment').hasClass('hidden') &&
@@ -84,13 +82,24 @@ describe('AttachmentViewer', function () {
!$('#attachment').hasClass('hidden') && !$('#attachment').hasClass('hidden') &&
(previewSupported ? !$('#attachmentPreview').hasClass('hidden') : $('#attachmentPreview').hasClass('hidden')) (previewSupported ? !$('#attachmentPreview').hasClass('hidden') : $('#attachmentPreview').hasClass('hidden'))
); );
var element = $('<div></div>'); let element = $('<div>');
$.PrivateBin.AttachmentViewer.moveAttachmentTo(element, prefix + '%s' + postfix); $.PrivateBin.AttachmentViewer.moveAttachmentTo(element, prefix + '%s' + postfix);
// messageIDs with links get a relaxed treatment
if (prefix.indexOf('<a') === -1 && postfix.indexOf('<a') === -1) {
result = $('<textarea>').text((prefix + filename + postfix)).text();
} else {
result = DOMPurify.sanitize(
prefix + $.PrivateBin.Helper.htmlEntities(filename) + postfix, {
ALLOWED_TAGS: ['a', 'i', 'span'],
ALLOWED_ATTR: ['href', 'id']
}
);
}
if (filename.length) { if (filename.length) {
results.push( results.push(
element.children()[0].href === data && element.children()[0].href === data &&
element.children()[0].getAttribute('download') === filename && element.children()[0].getAttribute('download') === filename &&
element.children()[0].text === prefix + filename + postfix element.children()[0].text === result
); );
} else { } else {
results.push(element.children()[0].href === data); results.push(element.children()[0].href === data);

View File

@@ -5,9 +5,6 @@ var common = require('../common');
describe('Check', function () { describe('Check', function () {
describe('init', function () { describe('init', function () {
this.timeout(30000); this.timeout(30000);
before(function () {
cleanup();
});
it('returns false and shows error, if a bot UA is detected', function () { it('returns false and shows error, if a bot UA is detected', function () {
jsc.assert(jsc.forall( jsc.assert(jsc.forall(

View File

@@ -4,9 +4,6 @@ var common = require('../common');
describe('DiscussionViewer', function () { describe('DiscussionViewer', function () {
describe('handleNotification, prepareNewDiscussion, addComment, finishDiscussion, getReplyMessage, getReplyNickname, getReplyCommentId & highlightComment', function () { describe('handleNotification, prepareNewDiscussion, addComment, finishDiscussion, getReplyMessage, getReplyNickname, getReplyCommentId & highlightComment', function () {
this.timeout(30000); this.timeout(30000);
before(function () {
cleanup();
});
jsc.property( jsc.property(
'displays & hides comments as requested', 'displays & hides comments as requested',

View File

@@ -4,9 +4,6 @@ require('../common');
describe('Editor', function () { describe('Editor', function () {
describe('show, hide, getText, setText & isPreview', function () { describe('show, hide, getText, setText & isPreview', function () {
this.timeout(30000); this.timeout(30000);
before(function () {
cleanup();
});
jsc.property( jsc.property(
'returns text fed into the textarea, handles editor tabs', 'returns text fed into the textarea, handles editor tabs',

View File

@@ -3,10 +3,6 @@ var common = require('../common');
describe('Helper', function () { describe('Helper', function () {
describe('secondsToHuman', function () { describe('secondsToHuman', function () {
after(function () {
cleanup();
});
jsc.property('returns an array with a number and a word', 'integer', function (number) { jsc.property('returns an array with a number and a word', 'integer', function (number) {
var result = $.PrivateBin.Helper.secondsToHuman(number); var result = $.PrivateBin.Helper.secondsToHuman(number);
return Array.isArray(result) && return Array.isArray(result) &&
@@ -57,11 +53,11 @@ describe('Helper', function () {
'nearray string', 'nearray string',
function (ids, contents) { function (ids, contents) {
var html = '', var html = '',
result = true; result = true,
clean = jsdom(html);
ids.forEach(function(item, i) { ids.forEach(function(item, i) {
html += '<div id="' + item.join('') + '">' + common.htmlEntities(contents[i] || contents[0]) + '</div>'; html += '<div id="' + item.join('') + '">' + $.PrivateBin.Helper.htmlEntities(contents[i] || contents[0]) + '</div>';
}); });
var clean = jsdom(html);
// TODO: As per https://github.com/tmpvar/jsdom/issues/321 there is no getSelection in jsdom, yet. // TODO: As per https://github.com/tmpvar/jsdom/issues/321 there is no getSelection in jsdom, yet.
// Once there is one, uncomment the block below to actually check the result. // Once there is one, uncomment the block below to actually check the result.
/* /*
@@ -77,15 +73,24 @@ describe('Helper', function () {
}); });
describe('urls2links', function () { describe('urls2links', function () {
after(function () { this.timeout(30000);
cleanup(); before(function () {
cleanup = jsdom();
}); });
jsc.property( jsc.property(
'ignores non-URL content', 'ignores non-URL content',
'string', 'string',
function (content) { function (content) {
return content === $.PrivateBin.Helper.urls2links(content); content = content.replace(/\r|\f/g, '\n').replace(/\u0000/g, '').replace(/\u000b/g, '');
let clean = jsdom();
$('body').html('<div id="foo"></div>');
let e = $('#foo');
e.text(content);
$.PrivateBin.Helper.urls2links(e);
let result = e.text();
clean();
return content === result;
} }
); );
jsc.property( jsc.property(
@@ -97,11 +102,14 @@ describe('Helper', function () {
jsc.array(common.jscHashString()), jsc.array(common.jscHashString()),
'string', 'string',
function (prefix, schema, address, query, fragment, postfix) { function (prefix, schema, address, query, fragment, postfix) {
var query = query.join(''), query = query.join('');
fragment = fragment.join(''), fragment = fragment.join('');
url = schema + '://' + address.join('') + '/?' + query + '#' + fragment, prefix = prefix.replace(/\r|\f/g, '\n').replace(/\u0000/g, '').replace(/\u000b/g, '');
prefix = common.htmlEntities(prefix), postfix = ' ' + postfix.replace(/\r/g, '\n').replace(/\u0000/g, '');
postfix = ' ' + common.htmlEntities(postfix); let url = schema + '://' + address.join('') + '/?' + query + '#' + fragment,
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 // special cases: When the query string and fragment imply the beginning of an HTML entity, eg. &#0 or &#x
if ( if (
@@ -112,8 +120,12 @@ describe('Helper', function () {
url = schema + '://' + address.join('') + '/?' + query.substring(0, query.length - 1); url = schema + '://' + address.join('') + '/?' + query.substring(0, query.length - 1);
postfix = ''; postfix = '';
} }
e.text(prefix + url + postfix);
return prefix + '<a href="' + url + '" rel="nofollow">' + url + '</a>' + postfix === $.PrivateBin.Helper.urls2links(prefix + url + 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;
} }
); );
jsc.property( jsc.property(
@@ -122,19 +134,23 @@ describe('Helper', function () {
jsc.array(common.jscQueryString()), jsc.array(common.jscQueryString()),
'string', 'string',
function (prefix, query, postfix) { function (prefix, query, postfix) {
var url = 'magnet:?' + query.join('').replace(/^&+|&+$/gm,''), prefix = prefix.replace(/\r|\f/g, '\n').replace(/\u0000/g, '').replace(/\u000b/g, '');
prefix = common.htmlEntities(prefix), postfix = ' ' + postfix.replace(/\r/g, '\n').replace(/\u0000/g, '');
postfix = common.htmlEntities(postfix); let url = 'magnet:?' + query.join('').replace(/^&+|&+$/gm,''),
return prefix + '<a href="' + url + '" rel="nofollow">' + url + '</a> ' + postfix === $.PrivateBin.Helper.urls2links(prefix + url + ' ' + postfix); clean = jsdom();
$('body').html('<div id="foo"></div>');
let e = $('#foo');
e.text(prefix + url + 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;
} }
); );
}); });
describe('sprintf', function () { describe('sprintf', function () {
after(function () {
cleanup();
});
jsc.property( jsc.property(
'replaces %s in strings with first given parameter', 'replaces %s in strings with first given parameter',
'string', 'string',
@@ -211,7 +227,7 @@ describe('Helper', function () {
describe('getCookie', function () { describe('getCookie', function () {
this.timeout(30000); this.timeout(30000);
after(function () { before(function () {
cleanup(); cleanup();
}); });
@@ -263,16 +279,16 @@ describe('Helper', function () {
}); });
describe('htmlEntities', function () { describe('htmlEntities', function () {
after(function () { before(function () {
cleanup(); cleanup = jsdom();
}); });
jsc.property( jsc.property(
'removes all HTML entities from any given string', 'removes all HTML entities from any given string',
'string', 'string',
function (string) { function (string) {
var result = common.htmlEntities(string); var result = $.PrivateBin.Helper.htmlEntities(string);
return !(/[<>"'`=\/]/.test(result)) && !(string.indexOf('&') > -1 && !(/&amp;/.test(result))); return !(/[<>]/.test(result)) && !(string.indexOf('&') > -1 && !(/&amp;/.test(result)));
} }
); );
}); });

View File

@@ -3,6 +3,7 @@ var common = require('../common');
describe('I18n', function () { describe('I18n', function () {
describe('translate', function () { describe('translate', function () {
this.timeout(30000);
before(function () { before(function () {
$.PrivateBin.I18n.reset(); $.PrivateBin.I18n.reset();
}); });
@@ -32,13 +33,41 @@ describe('I18n', function () {
var fakeAlias = $.PrivateBin.I18n._(fake); var fakeAlias = $.PrivateBin.I18n._(fake);
$.PrivateBin.I18n.reset(); $.PrivateBin.I18n.reset();
if (messageId.indexOf('<a') === -1) {
messageId = $.PrivateBin.Helper.htmlEntities(messageId);
} else {
messageId = DOMPurify.sanitize(
messageId, {
ALLOWED_TAGS: ['a', 'i', 'span'],
ALLOWED_ATTR: ['href', 'id']
}
);
}
return messageId === result && messageId === alias && return messageId === result && messageId === alias &&
messageId === pluralResult && messageId === pluralAlias && messageId === pluralResult && messageId === pluralAlias &&
messageId === fakeResult && messageId === fakeAlias; messageId === fakeResult && messageId === fakeAlias;
} }
); );
jsc.property( jsc.property(
'replaces %s in strings with first given parameter', 'replaces %s in strings with first given parameter, encoding all, when no link is in the messageID',
'string',
'(small nearray) string',
'string',
function (prefix, params, postfix) {
prefix = prefix.replace(/%(s|d)/g, '%%').replace(/<a/g, '');
params[0] = params[0].replace(/%(s|d)/g, '%%');
postfix = postfix.replace(/%(s|d)/g, '%%').replace(/<a/g, '');
const translation = $.PrivateBin.Helper.htmlEntities(prefix + params[0] + postfix);
params.unshift(prefix + '%s' + postfix);
const result = $.PrivateBin.I18n.translate.apply(this, params);
$.PrivateBin.I18n.reset();
const alias = $.PrivateBin.I18n._.apply(this, params);
$.PrivateBin.I18n.reset();
return translation === result && translation === alias;
}
);
jsc.property(
'replaces %s in strings with first given parameter, encoding params only, when a link is part of the messageID',
'string', 'string',
'(small nearray) string', '(small nearray) string',
'string', 'string',
@@ -46,15 +75,83 @@ describe('I18n', function () {
prefix = prefix.replace(/%(s|d)/g, '%%'); prefix = prefix.replace(/%(s|d)/g, '%%');
params[0] = params[0].replace(/%(s|d)/g, '%%'); params[0] = params[0].replace(/%(s|d)/g, '%%');
postfix = postfix.replace(/%(s|d)/g, '%%'); postfix = postfix.replace(/%(s|d)/g, '%%');
var translation = prefix + params[0] + postfix; const translation = DOMPurify.sanitize(
params.unshift(prefix + '%s' + postfix); prefix + '<a href="' + params[0] + '"></a>' + postfix, {
var result = $.PrivateBin.I18n.translate.apply(this, params); ALLOWED_TAGS: ['a', 'i', 'span'],
ALLOWED_ATTR: ['href', 'id']
}
);
params.unshift(prefix + '<a href="%s"></a>' + postfix);
const result = $.PrivateBin.I18n.translate.apply(this, params);
$.PrivateBin.I18n.reset(); $.PrivateBin.I18n.reset();
var alias = $.PrivateBin.I18n._.apply(this, params); const alias = $.PrivateBin.I18n._.apply(this, params);
$.PrivateBin.I18n.reset(); $.PrivateBin.I18n.reset();
return translation === result && translation === alias; return translation === result && translation === alias;
} }
); );
jsc.property(
'replaces %s in strings with first given parameter into an element, encoding all, when no link is in the messageID',
'string',
'(small nearray) string',
'string',
function (prefix, params, postfix) {
prefix = prefix.replace(/%(s|d)/g, '%%').replace(/<a/g, '');
params[0] = params[0].replace(/%(s|d)/g, '%%');
postfix = postfix.replace(/%(s|d)/g, '%%').replace(/<a/g, '');
const translation = $('<textarea>').text((prefix + params[0] + postfix)).text();
let args = Array.prototype.slice.call(params);
args.unshift(prefix + '%s' + postfix);
let clean = jsdom();
$('body').html('<div id="i18n"></div>');
args.unshift($('#i18n'));
$.PrivateBin.I18n.translate.apply(this, args);
const result = $('#i18n').text();
$.PrivateBin.I18n.reset();
clean();
clean = jsdom();
$('body').html('<div id="i18n"></div>');
args[0] = $('#i18n');
$.PrivateBin.I18n._.apply(this, args);
const alias = $('#i18n').text();
$.PrivateBin.I18n.reset();
clean();
return translation === result && translation === alias;
}
);
jsc.property(
'replaces %s in strings with first given parameter into an element, encoding params only, when a link is part of the messageID inserted',
'string',
'(small nearray) string',
'string',
function (prefix, params, postfix) {
prefix = prefix.replace(/%(s|d)/g, '%%').trim();
params[0] = params[0].replace(/%(s|d)/g, '%%').trim();
postfix = postfix.replace(/%(s|d)/g, '%%').trim();
const translation = DOMPurify.sanitize(
prefix + '<a href="' + params[0] + '"></a>' + postfix, {
ALLOWED_TAGS: ['a', 'i', 'span'],
ALLOWED_ATTR: ['href', 'id']
}
);
let args = Array.prototype.slice.call(params);
args.unshift(prefix + '<a href="%s"></a>' + postfix);
let clean = jsdom();
$('body').html('<div id="i18n"></div>');
args.unshift($('#i18n'));
$.PrivateBin.I18n.translate.apply(this, args);
const result = $('#i18n').html();
$.PrivateBin.I18n.reset();
clean();
clean = jsdom();
$('body').html('<div id="i18n"></div>');
args[0] = $('#i18n');
$.PrivateBin.I18n._.apply(this, args);
const alias = $('#i18n').html();
$.PrivateBin.I18n.reset();
clean();
return translation === result && translation === alias;
}
);
}); });
describe('getPluralForm', function () { describe('getPluralForm', function () {

View File

@@ -5,18 +5,18 @@ describe('Model', function () {
describe('getExpirationDefault', function () { describe('getExpirationDefault', function () {
before(function () { before(function () {
$.PrivateBin.Model.reset(); $.PrivateBin.Model.reset();
cleanup(); cleanup = jsdom();
}); });
jsc.property( jsc.property(
'returns the contents of the element with id "pasteExpiration"', 'returns the contents of the element with id "pasteExpiration"',
'array asciinestring', 'nearray asciinestring',
'string', 'string',
'small nat', 'small nat',
function (keys, value, key) { function (keys, value, key) {
keys = keys.map(common.htmlEntities); keys = keys.map($.PrivateBin.Helper.htmlEntities);
value = common.htmlEntities(value); value = $.PrivateBin.Helper.htmlEntities(value);
var content = keys.length > key ? keys[key] : (keys.length > 0 ? keys[0] : 'null'), var content = keys.length > key ? keys[key] : keys[0],
contents = '<select id="pasteExpiration" name="pasteExpiration">'; contents = '<select id="pasteExpiration" name="pasteExpiration">';
keys.forEach(function(item) { keys.forEach(function(item) {
contents += '<option value="' + item + '"'; contents += '<option value="' + item + '"';
@@ -27,7 +27,7 @@ describe('Model', function () {
}); });
contents += '</select>'; contents += '</select>';
$('body').html(contents); $('body').html(contents);
var result = common.htmlEntities( var result = $.PrivateBin.Helper.htmlEntities(
$.PrivateBin.Model.getExpirationDefault() $.PrivateBin.Model.getExpirationDefault()
); );
$.PrivateBin.Model.reset(); $.PrivateBin.Model.reset();
@@ -39,18 +39,20 @@ describe('Model', function () {
describe('getFormatDefault', function () { describe('getFormatDefault', function () {
before(function () { before(function () {
$.PrivateBin.Model.reset(); $.PrivateBin.Model.reset();
});
after(function () {
cleanup(); cleanup();
}); });
jsc.property( jsc.property(
'returns the contents of the element with id "pasteFormatter"', 'returns the contents of the element with id "pasteFormatter"',
'array asciinestring', 'nearray asciinestring',
'string', 'string',
'small nat', 'small nat',
function (keys, value, key) { function (keys, value, key) {
keys = keys.map(common.htmlEntities); keys = keys.map($.PrivateBin.Helper.htmlEntities);
value = common.htmlEntities(value); value = $.PrivateBin.Helper.htmlEntities(value);
var content = keys.length > key ? keys[key] : (keys.length > 0 ? keys[0] : 'null'), var content = keys.length > key ? keys[key] : keys[0],
contents = '<select id="pasteFormatter" name="pasteFormatter">'; contents = '<select id="pasteFormatter" name="pasteFormatter">';
keys.forEach(function(item) { keys.forEach(function(item) {
contents += '<option value="' + item + '"'; contents += '<option value="' + item + '"';
@@ -61,7 +63,7 @@ describe('Model', function () {
}); });
contents += '</select>'; contents += '</select>';
$('body').html(contents); $('body').html(contents);
var result = common.htmlEntities( var result = $.PrivateBin.Helper.htmlEntities(
$.PrivateBin.Model.getFormatDefault() $.PrivateBin.Model.getFormatDefault()
); );
$.PrivateBin.Model.reset(); $.PrivateBin.Model.reset();
@@ -74,7 +76,6 @@ describe('Model', function () {
this.timeout(30000); this.timeout(30000);
beforeEach(function () { beforeEach(function () {
$.PrivateBin.Model.reset(); $.PrivateBin.Model.reset();
cleanup();
}); });
jsc.property( jsc.property(
@@ -130,7 +131,6 @@ describe('Model', function () {
this.timeout(30000); this.timeout(30000);
beforeEach(function () { beforeEach(function () {
$.PrivateBin.Model.reset(); $.PrivateBin.Model.reset();
cleanup();
}); });
jsc.property( jsc.property(
@@ -238,7 +238,6 @@ describe('Model', function () {
describe('getTemplate', function () { describe('getTemplate', function () {
beforeEach(function () { beforeEach(function () {
$.PrivateBin.Model.reset(); $.PrivateBin.Model.reset();
cleanup();
}); });
jsc.property( jsc.property(

View File

@@ -36,9 +36,6 @@ describe('PasteStatus', function () {
describe('showRemainingTime', function () { describe('showRemainingTime', function () {
this.timeout(30000); this.timeout(30000);
before(function () {
cleanup();
});
jsc.property( jsc.property(
'shows burn after reading message or remaining time v1', 'shows burn after reading message or remaining time v1',
@@ -121,10 +118,6 @@ describe('PasteStatus', function () {
}); });
describe('hideMessages', function () { describe('hideMessages', function () {
before(function () {
cleanup();
});
it( it(
'hides all messages', 'hides all messages',
function() { function() {

View File

@@ -4,9 +4,6 @@ var common = require('../common');
describe('PasteViewer', function () { describe('PasteViewer', function () {
describe('run, hide, getText, setText, getFormat, setFormat & isPrettyPrinted', function () { describe('run, hide, getText, setText, getFormat, setFormat & isPrettyPrinted', function () {
this.timeout(30000); this.timeout(30000);
before(function () {
cleanup();
});
jsc.property( jsc.property(
'displays text according to format', 'displays text according to format',

View File

@@ -6,10 +6,6 @@ describe('Prompt', function () {
// in nodejs -> replace the prompt in the "page" template with a modal // in nodejs -> replace the prompt in the "page" template with a modal
describe('requestPassword & getPassword', function () { describe('requestPassword & getPassword', function () {
this.timeout(30000); this.timeout(30000);
before(function () {
$.PrivateBin.Model.reset();
cleanup();
});
jsc.property( jsc.property(
'returns the password fed into the dialog', 'returns the password fed into the dialog',
@@ -26,6 +22,7 @@ describe('Prompt', function () {
'password"></div><button type="submit">Decrypt</button>' + 'password"></div><button type="submit">Decrypt</button>' +
'</form></div></div></div></div>' '</form></div></div></div></div>'
); );
$.PrivateBin.Model.reset();
$.PrivateBin.Model.init(); $.PrivateBin.Model.init();
$.PrivateBin.Prompt.init(); $.PrivateBin.Prompt.init();
$.PrivateBin.Prompt.requestPassword(); $.PrivateBin.Prompt.requestPassword();

View File

@@ -317,6 +317,131 @@ describe('TopNav', function () {
); );
}); });
describe('resetInput', function () {
before(function () {
cleanup();
});
it(
'reset inputs to defaults (options off)',
function () {
var results = [];
$('body').html(
'<nav><div id="navbar"><ul><li id="burnafterreadingoption" ' +
'class="hidden"><label><input type="checkbox" ' +
'id="burnafterreading" name="burnafterreading" /> ' +
'Burn after reading</label></li><li id="opendiscussionoption" ' +
'class="hidden"><label><input type="checkbox" ' +
'id="opendiscussion" name="opendiscussion" /> ' +
'Open discussion</label></li></ul></div></nav>'
);
$.PrivateBin.TopNav.init();
results.push(
!$.PrivateBin.TopNav.getBurnAfterReading()
);
results.push(
!$.PrivateBin.TopNav.getOpenDiscussion()
);
$('#burnafterreading').attr('checked', 'checked');
$('#opendiscussion').attr('checked', 'checked');
results.push(
$.PrivateBin.TopNav.getBurnAfterReading()
);
results.push(
$.PrivateBin.TopNav.getOpenDiscussion()
);
$.PrivateBin.TopNav.resetInput();
results.push(
!$.PrivateBin.TopNav.getBurnAfterReading()
);
results.push(
!$.PrivateBin.TopNav.getOpenDiscussion()
);
cleanup();
assert.ok(results.every(element => element));
}
);
it(
'reset inputs to defaults (burnafterreading on)',
function () {
var results = [];
$('body').html(
'<nav><div id="navbar"><ul><li id="burnafterreadingoption" ' +
'class="hidden"><label><input type="checkbox" ' +
'id="burnafterreading" name="burnafterreading" checked="checked" /> ' +
'Burn after reading</label></li><li id="opendiscussionoption" ' +
'class="hidden"><label><input type="checkbox" ' +
'id="opendiscussion" name="opendiscussion" checked="checked" /> ' +
'Open discussion</label></li></ul></div></nav>'
);
$.PrivateBin.TopNav.init();
results.push(
$.PrivateBin.TopNav.getBurnAfterReading()
);
results.push(
!$.PrivateBin.TopNav.getOpenDiscussion()
);
$('#burnafterreading').removeAttr('checked');
results.push(
!$.PrivateBin.TopNav.getBurnAfterReading()
);
results.push(
!$.PrivateBin.TopNav.getOpenDiscussion()
);
$.PrivateBin.TopNav.resetInput();
results.push(
$.PrivateBin.TopNav.getBurnAfterReading()
);
results.push(
!$.PrivateBin.TopNav.getOpenDiscussion()
);
cleanup();
assert.ok(results.every(element => element));
}
);
it(
'reset inputs to defaults (opendiscussion on)',
function () {
var results = [];
$('body').html(
'<nav><div id="navbar"><ul><li id="burnafterreadingoption" ' +
'class="hidden"><label><input type="checkbox" ' +
'id="burnafterreading" name="burnafterreading" /> ' +
'Burn after reading</label></li><li id="opendiscussionoption" ' +
'class="hidden"><label><input type="checkbox" ' +
'id="opendiscussion" name="opendiscussion" checked="checked" /> ' +
'Open discussion</label></li></ul></div></nav>'
);
$.PrivateBin.TopNav.init();
results.push(
!$.PrivateBin.TopNav.getBurnAfterReading()
);
results.push(
$.PrivateBin.TopNav.getOpenDiscussion()
);
$('#opendiscussion').removeAttr('checked');
$('#burnafterreading').prop('checked', true);
results.push(
$.PrivateBin.TopNav.getBurnAfterReading()
);
results.push(
!$.PrivateBin.TopNav.getOpenDiscussion()
);
$.PrivateBin.TopNav.resetInput();
results.push(
!$.PrivateBin.TopNav.getBurnAfterReading()
);
results.push(
$.PrivateBin.TopNav.getOpenDiscussion()
);
cleanup();
assert.ok(results.every(element => element));
}
);
});
describe('getExpiration', function () { describe('getExpiration', function () {
before(function () { before(function () {
cleanup(); cleanup();
@@ -326,7 +451,7 @@ describe('TopNav', function () {
'returns the currently selected expiration date', 'returns the currently selected expiration date',
function () { function () {
$.PrivateBin.TopNav.init(); $.PrivateBin.TopNav.init();
assert.ok($.PrivateBin.TopNav.getExpiration() === '1week'); assert.ok($.PrivateBin.TopNav.getExpiration() === null);
} }
); );
}); });

View File

@@ -1,6 +1,6 @@
'use strict'; 'use strict';
(function() { (function () {
let ret; let ret;
async function initialize() { async function initialize() {
@@ -23,16 +23,7 @@
_abort: errno => { console.error(`Error: ${errno}`) }, _abort: errno => { console.error(`Error: ${errno}`) },
_grow: () => { }, _grow: () => { },
}; };
const ins = await WebAssembly.instantiateStreaming(fetch('js/zlib-1.2.11.wasm'), { env });
let buff;
if (typeof fetch === 'undefined') {
buff = fs.readFileSync('zlib-1.2.11.wasm');
} else {
const resp = await fetch('js/zlib-1.2.11.wasm');
buff = await resp.arrayBuffer();
}
const module = await WebAssembly.compile(buff);
const ins = await WebAssembly.instantiate(module, { env });
const srcPtr = ins.exports._malloc(CHUNK_SIZE); const srcPtr = ins.exports._malloc(CHUNK_SIZE);
const dstPtr = ins.exports._malloc(CHUNK_SIZE); const dstPtr = ins.exports._malloc(CHUNK_SIZE);
@@ -116,28 +107,28 @@
} }
ret = { ret = {
inflate(rawDeflateBuffer) { inflate(rawDeflateBuffer) {
const rawInf = new RawInf(); const rawInf = new RawInf();
for (let offset = 0; offset < rawDeflateBuffer.length; offset += CHUNK_SIZE) { for (let offset = 0; offset < rawDeflateBuffer.length; offset += CHUNK_SIZE) {
const end = Math.min(offset + CHUNK_SIZE, rawDeflateBuffer.length); const end = Math.min(offset + CHUNK_SIZE, rawDeflateBuffer.length);
const chunk = rawDeflateBuffer.subarray(offset, end); const chunk = rawDeflateBuffer.subarray(offset, end);
rawInf.inflate(chunk); rawInf.inflate(chunk);
} }
const ret = rawInf.getBuffer(); const ret = rawInf.getBuffer();
rawInf.destroy(); rawInf.destroy();
return ret; return ret;
}, },
deflate(rawInflateBuffer) { deflate(rawInflateBuffer) {
const rawDef = new RawDef(); const rawDef = new RawDef();
for (let offset = 0; offset < rawInflateBuffer.length; offset += CHUNK_SIZE) { for (let offset = 0; offset < rawInflateBuffer.length; offset += CHUNK_SIZE) {
const end = Math.min(offset + CHUNK_SIZE, rawInflateBuffer.length); const end = Math.min(offset + CHUNK_SIZE, rawInflateBuffer.length);
const chunk = rawInflateBuffer.subarray(offset, end); const chunk = rawInflateBuffer.subarray(offset, end);
rawDef.deflate(chunk, rawInflateBuffer.length <= offset + CHUNK_SIZE); rawDef.deflate(chunk, rawInflateBuffer.length <= offset + CHUNK_SIZE);
} }
const ret = rawDef.getBuffer(); const ret = rawDef.getBuffer();
rawDef.destroy(); rawDef.destroy();
return ret; return ret;
}, },
} }
return ret; return ret;

View File

@@ -7,14 +7,13 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
namespace PrivateBin; namespace PrivateBin;
use Exception; use Exception;
use PDO; use PDO;
use PrivateBin\Persistence\DataStore;
/** /**
* Configuration * Configuration
@@ -38,6 +37,7 @@ class Configuration
private static $_defaults = array( private static $_defaults = array(
'main' => array( 'main' => array(
'name' => 'PrivateBin', 'name' => 'PrivateBin',
'basepath' => '',
'discussion' => true, 'discussion' => true,
'opendiscussion' => false, 'opendiscussion' => false,
'password' => true, 'password' => true,
@@ -47,13 +47,14 @@ class Configuration
'syntaxhighlightingtheme' => null, 'syntaxhighlightingtheme' => null,
'sizelimit' => 10485760, 'sizelimit' => 10485760,
'template' => 'bootstrap', 'template' => 'bootstrap',
'info' => 'More information on the <a href=\'https://privatebin.info/\'>project page</a>.',
'notice' => '', 'notice' => '',
'languageselection' => false, 'languageselection' => false,
'languagedefault' => '', 'languagedefault' => '',
'urlshortener' => '', 'urlshortener' => '',
'qrcode' => true, 'qrcode' => true,
'icon' => 'identicon', 'icon' => 'identicon',
'cspheader' => 'default-src \'none\'; manifest-src \'self\'; connect-src * blob:; script-src \'self\' \'unsafe-eval\'; style-src \'self\'; font-src \'self\'; img-src \'self\' data: blob:; media-src blob:; object-src blob:; sandbox allow-same-origin allow-scripts allow-forms allow-popups allow-modals', 'cspheader' => 'default-src \'none\'; base-uri \'self\'; form-action \'none\'; manifest-src \'self\'; connect-src * blob:; script-src \'self\' resource:; style-src \'self\'; font-src \'self\'; img-src \'self\' data: blob:; media-src blob:; object-src blob:; sandbox allow-same-origin allow-scripts allow-forms allow-popups allow-modals allow-downloads',
'zerobincompatibility' => false, 'zerobincompatibility' => false,
'httpwarning' => true, 'httpwarning' => true,
'compression' => 'zlib', 'compression' => 'zlib',
@@ -77,14 +78,13 @@ class Configuration
'markdown' => 'Markdown', 'markdown' => 'Markdown',
), ),
'traffic' => array( 'traffic' => array(
'limit' => 10, 'limit' => 10,
'header' => null, 'header' => null,
'dir' => 'data', 'exemptedIp' => null,
), ),
'purge' => array( 'purge' => array(
'limit' => 300, 'limit' => 300,
'batchsize' => 10, 'batchsize' => 10,
'dir' => 'data',
), ),
'model' => array( 'model' => array(
'class' => 'Filesystem', 'class' => 'Filesystem',
@@ -102,19 +102,8 @@ class Configuration
public function __construct() public function __construct()
{ {
$config = array(); $config = array();
$configFile = PATH . 'cfg' . DIRECTORY_SEPARATOR . 'conf.php'; $basePath = (getenv('CONFIG_PATH') !== false ? getenv('CONFIG_PATH') : PATH . 'cfg') . DIRECTORY_SEPARATOR;
$configIni = PATH . 'cfg' . DIRECTORY_SEPARATOR . 'conf.ini'; $configFile = $basePath . 'conf.php';
// rename INI files to avoid configuration leakage
if (is_readable($configIni)) {
DataStore::prependRename($configIni, $configFile, ';');
// cleanup sample, too
$configIniSample = $configIni . '.sample';
if (is_readable($configIniSample)) {
DataStore::prependRename($configIniSample, PATH . 'cfg' . DIRECTORY_SEPARATOR . 'conf.sample.php', ';');
}
}
if (is_readable($configFile)) { if (is_readable($configFile)) {
$config = parse_ini_file($configFile, true); $config = parse_ini_file($configFile, true);
@@ -149,6 +138,16 @@ class Configuration
'pwd' => null, 'pwd' => null,
'opt' => array(PDO::ATTR_PERSISTENT => true), 'opt' => array(PDO::ATTR_PERSISTENT => true),
); );
} elseif (
$section == 'model_options' && in_array(
$this->_configuration['model']['class'],
array('GoogleCloudStorage')
)
) {
$values = array(
'bucket' => getenv('PRIVATEBIN_GCS_BUCKET') ? getenv('PRIVATEBIN_GCS_BUCKET') : null,
'prefix' => 'pastes',
);
} }
// "*_options" sections don't require all defaults to be set // "*_options" sections don't require all defaults to be set

View File

@@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
namespace PrivateBin; namespace PrivateBin;
@@ -28,14 +28,14 @@ class Controller
* *
* @const string * @const string
*/ */
const VERSION = '1.3.1'; const VERSION = '1.3.5';
/** /**
* minimal required PHP version * minimal required PHP version
* *
* @const string * @const string
*/ */
const MIN_PHP_VERSION = '5.5.0'; const MIN_PHP_VERSION = '5.6.0';
/** /**
* show the same error message if the paste expired or does not exist * show the same error message if the paste expired or does not exist
@@ -162,7 +162,6 @@ class Controller
$this->_model = new Model($this->_conf); $this->_model = new Model($this->_conf);
$this->_request = new Request; $this->_request = new Request;
$this->_urlBase = $this->_request->getRequestUri(); $this->_urlBase = $this->_request->getRequestUri();
ServerSalt::setPath($this->_conf->getKey('dir', 'traffic'));
// set default language // set default language
$lang = $this->_conf->getKey('languagedefault'); $lang = $this->_conf->getKey('languagedefault');
@@ -170,7 +169,7 @@ class Controller
// force default language, if language selection is disabled and a default is set // force default language, if language selection is disabled and a default is set
if (!$this->_conf->getKey('languageselection') && strlen($lang) == 2) { if (!$this->_conf->getKey('languageselection') && strlen($lang) == 2) {
$_COOKIE['lang'] = $lang; $_COOKIE['lang'] = $lang;
setcookie('lang', $lang); setcookie('lang', $lang, 0, '', '', true);
} }
} }
@@ -197,7 +196,9 @@ class Controller
private function _create() private function _create()
{ {
// Ensure last paste from visitors IP address was more than configured amount of seconds ago. // Ensure last paste from visitors IP address was more than configured amount of seconds ago.
ServerSalt::setStore($this->_model->getStore());
TrafficLimiter::setConfiguration($this->_conf); TrafficLimiter::setConfiguration($this->_conf);
TrafficLimiter::setStore($this->_model->getStore());
if (!TrafficLimiter::canPass()) { if (!TrafficLimiter::canPass()) {
$this->_return_message( $this->_return_message(
1, I18n::_( 1, I18n::_(
@@ -276,9 +277,7 @@ class Controller
// accessing this method ensures that the paste would be // accessing this method ensures that the paste would be
// deleted if it has already expired // deleted if it has already expired
$paste->get(); $paste->get();
if ( if (hash_equals($paste->getDeleteToken(), $deletetoken)) {
Filter::slowEquals($deletetoken, $paste->getDeleteToken())
) {
// Paste exists and deletion token is valid: Delete the paste. // Paste exists and deletion token is valid: Delete the paste.
$paste->delete(); $paste->delete();
$this->_status = 'Paste was properly deleted.'; $this->_status = 'Paste was properly deleted.';
@@ -343,10 +342,14 @@ class Controller
header('Last-Modified: ' . $time); header('Last-Modified: ' . $time);
header('Vary: Accept'); header('Vary: Accept');
header('Content-Security-Policy: ' . $this->_conf->getKey('cspheader')); header('Content-Security-Policy: ' . $this->_conf->getKey('cspheader'));
header('Cross-Origin-Resource-Policy: same-origin');
header('Cross-Origin-Embedder-Policy: require-corp');
header('Cross-Origin-Opener-Policy: same-origin');
header('Permissions-Policy: interest-cohort=()');
header('Referrer-Policy: no-referrer'); header('Referrer-Policy: no-referrer');
header('X-Xss-Protection: 1; mode=block');
header('X-Frame-Options: DENY');
header('X-Content-Type-Options: nosniff'); header('X-Content-Type-Options: nosniff');
header('X-Frame-Options: deny');
header('X-XSS-Protection: 1; mode=block');
// label all the expiration options // label all the expiration options
$expire = array(); $expire = array();
@@ -361,11 +364,12 @@ class Controller
$languageselection = ''; $languageselection = '';
if ($this->_conf->getKey('languageselection')) { if ($this->_conf->getKey('languageselection')) {
$languageselection = I18n::getLanguage(); $languageselection = I18n::getLanguage();
setcookie('lang', $languageselection); setcookie('lang', $languageselection, 0, '', '', true);
} }
$page = new View; $page = new View;
$page->assign('NAME', $this->_conf->getKey('name')); $page->assign('NAME', $this->_conf->getKey('name'));
$page->assign('BASEPATH', I18n::_($this->_conf->getKey('basepath')));
$page->assign('ERROR', I18n::_($this->_error)); $page->assign('ERROR', I18n::_($this->_error));
$page->assign('STATUS', I18n::_($this->_status)); $page->assign('STATUS', I18n::_($this->_status));
$page->assign('VERSION', self::VERSION); $page->assign('VERSION', self::VERSION);
@@ -376,6 +380,7 @@ class Controller
$page->assign('SYNTAXHIGHLIGHTINGTHEME', $this->_conf->getKey('syntaxhighlightingtheme')); $page->assign('SYNTAXHIGHLIGHTINGTHEME', $this->_conf->getKey('syntaxhighlightingtheme'));
$page->assign('FORMATTER', $formatters); $page->assign('FORMATTER', $formatters);
$page->assign('FORMATTERDEFAULT', $this->_conf->getKey('defaultformatter')); $page->assign('FORMATTERDEFAULT', $this->_conf->getKey('defaultformatter'));
$page->assign('INFO', I18n::_(str_replace("'", '"', $this->_conf->getKey('info'))));
$page->assign('NOTICE', I18n::_($this->_conf->getKey('notice'))); $page->assign('NOTICE', I18n::_($this->_conf->getKey('notice')));
$page->assign('BURNAFTERREADINGSELECTED', $this->_conf->getKey('burnafterreadingselected')); $page->assign('BURNAFTERREADINGSELECTED', $this->_conf->getKey('burnafterreadingselected'));
$page->assign('PASSWORD', $this->_conf->getKey('password')); $page->assign('PASSWORD', $this->_conf->getKey('password'));

View File

@@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
namespace PrivateBin\Data; namespace PrivateBin\Data;
@@ -15,12 +15,12 @@ namespace PrivateBin\Data;
/** /**
* AbstractData * AbstractData
* *
* Abstract model for PrivateBin data access, implemented as a singleton. * Abstract model for data access, implemented as a singleton.
*/ */
abstract class AbstractData abstract class AbstractData
{ {
/** /**
* singleton instance * Singleton instance
* *
* @access protected * @access protected
* @static * @static
@@ -29,9 +29,18 @@ abstract class AbstractData
protected static $_instance = null; protected static $_instance = null;
/** /**
* enforce singleton, disable constructor * cache for the traffic limiter
* *
* Instantiate using {@link getInstance()}, privatebin is a singleton object. * @access private
* @static
* @var array
*/
protected static $_last_cache = array();
/**
* Enforce singleton, disable constructor
*
* Instantiate using {@link getInstance()}, this object implements the singleton pattern.
* *
* @access protected * @access protected
*/ */
@@ -40,9 +49,9 @@ abstract class AbstractData
} }
/** /**
* enforce singleton, disable cloning * Enforce singleton, disable cloning
* *
* Instantiate using {@link getInstance()}, privatebin is a singleton object. * Instantiate using {@link getInstance()}, this object implements the singleton pattern.
* *
* @access private * @access private
*/ */
@@ -51,7 +60,7 @@ abstract class AbstractData
} }
/** /**
* get instance of singleton * Get instance of singleton
* *
* @access public * @access public
* @static * @static
@@ -130,6 +139,46 @@ abstract class AbstractData
*/ */
abstract public function existsComment($pasteid, $parentid, $commentid); abstract public function existsComment($pasteid, $parentid, $commentid);
/**
* Purge outdated entries.
*
* @access public
* @param string $namespace
* @param int $time
* @return void
*/
public function purgeValues($namespace, $time)
{
if ($namespace === 'traffic_limiter') {
foreach (self::$_last_cache as $key => $last_submission) {
if ($last_submission <= $time) {
unset(self::$_last_cache[$key]);
}
}
}
}
/**
* Save a value.
*
* @access public
* @param string $value
* @param string $namespace
* @param string $key
* @return bool
*/
abstract public function setValue($value, $namespace, $key = '');
/**
* Load a value.
*
* @access public
* @param string $namespace
* @param string $key
* @return string
*/
abstract public function getValue($namespace, $key = '');
/** /**
* Returns up to batch size number of paste ids that have expired * Returns up to batch size number of paste ids that have expired
* *

View File

@@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
namespace PrivateBin\Data; namespace PrivateBin\Data;
@@ -198,21 +198,25 @@ class Database extends AbstractData
$opendiscussion = $paste['adata'][2]; $opendiscussion = $paste['adata'][2];
$burnafterreading = $paste['adata'][3]; $burnafterreading = $paste['adata'][3];
} }
return self::_exec( try {
'INSERT INTO ' . self::_sanitizeIdentifier('paste') . return self::_exec(
' VALUES(?,?,?,?,?,?,?,?,?)', 'INSERT INTO ' . self::_sanitizeIdentifier('paste') .
array( ' VALUES(?,?,?,?,?,?,?,?,?)',
$pasteid, array(
$isVersion1 ? $paste['data'] : Json::encode($paste), $pasteid,
$created, $isVersion1 ? $paste['data'] : Json::encode($paste),
$expire_date, $created,
(int) $opendiscussion, $expire_date,
(int) $burnafterreading, (int) $opendiscussion,
Json::encode($meta), (int) $burnafterreading,
$attachment, Json::encode($meta),
$attachmentname, $attachment,
) $attachmentname,
); )
);
} catch (Exception $e) {
return false;
}
} }
/** /**
@@ -229,11 +233,14 @@ class Database extends AbstractData
} }
self::$_cache[$pasteid] = false; self::$_cache[$pasteid] = false;
$paste = self::_select( try {
'SELECT * FROM ' . self::_sanitizeIdentifier('paste') . $paste = self::_select(
' WHERE dataid = ?', array($pasteid), true 'SELECT * FROM ' . self::_sanitizeIdentifier('paste') .
); ' WHERE dataid = ?', array($pasteid), true
);
} catch (Exception $e) {
$paste = false;
}
if ($paste === false) { if ($paste === false) {
return false; return false;
} }
@@ -348,19 +355,23 @@ class Database extends AbstractData
$meta[$key] = null; $meta[$key] = null;
} }
} }
return self::_exec( try {
'INSERT INTO ' . self::_sanitizeIdentifier('comment') . return self::_exec(
' VALUES(?,?,?,?,?,?,?)', 'INSERT INTO ' . self::_sanitizeIdentifier('comment') .
array( ' VALUES(?,?,?,?,?,?,?)',
$commentid, array(
$pasteid, $commentid,
$parentid, $pasteid,
$data, $parentid,
$meta['nickname'], $data,
$meta[$iconKey], $meta['nickname'],
$meta[$createdKey], $meta[$iconKey],
) $meta[$createdKey],
); )
);
} catch (Exception $e) {
return false;
}
} }
/** /**
@@ -416,13 +427,85 @@ class Database extends AbstractData
*/ */
public function existsComment($pasteid, $parentid, $commentid) public function existsComment($pasteid, $parentid, $commentid)
{ {
return (bool) self::_select( try {
'SELECT dataid FROM ' . self::_sanitizeIdentifier('comment') . return (bool) self::_select(
' WHERE pasteid = ? AND parentid = ? AND dataid = ?', 'SELECT dataid FROM ' . self::_sanitizeIdentifier('comment') .
array($pasteid, $parentid, $commentid), true ' WHERE pasteid = ? AND parentid = ? AND dataid = ?',
array($pasteid, $parentid, $commentid), true
);
} catch (Exception $e) {
return false;
}
}
/**
* Save a value.
*
* @access public
* @param string $value
* @param string $namespace
* @param string $key
* @return bool
*/
public function setValue($value, $namespace, $key = '')
{
if ($namespace === 'traffic_limiter') {
self::$_last_cache[$key] = $value;
try {
$value = Json::encode(self::$_last_cache);
} catch (Exception $e) {
return false;
}
}
return self::_exec(
'UPDATE ' . self::_sanitizeIdentifier('config') .
' SET value = ? WHERE id = ?',
array($value, strtoupper($namespace))
); );
} }
/**
* Load a value.
*
* @access public
* @param string $namespace
* @param string $key
* @return string
*/
public function getValue($namespace, $key = '')
{
$configKey = strtoupper($namespace);
$value = $this->_getConfig($configKey);
if ($value === '') {
// initialize the row, so that setValue can rely on UPDATE queries
self::_exec(
'INSERT INTO ' . self::_sanitizeIdentifier('config') .
' VALUES(?,?)',
array($configKey, '')
);
// migrate filesystem based salt into database
$file = 'data' . DIRECTORY_SEPARATOR . 'salt.php';
if ($namespace === 'salt' && is_readable($file)) {
$value = Filesystem::getInstance(array('dir' => 'data'))->getValue('salt');
$this->setValue($value, 'salt');
@unlink($file);
return $value;
}
}
if ($value && $namespace === 'traffic_limiter') {
try {
self::$_last_cache = Json::decode($value);
} catch (Exception $e) {
self::$_last_cache = array();
}
if (array_key_exists($key, self::$_last_cache)) {
return self::$_last_cache[$key];
}
}
return (string) $value;
}
/** /**
* Returns up to batch size number of paste ids that have expired * Returns up to batch size number of paste ids that have expired
* *
@@ -563,16 +646,19 @@ class Database extends AbstractData
* @access private * @access private
* @static * @static
* @param string $key * @param string $key
* @throws PDOException
* @return string * @return string
*/ */
private static function _getConfig($key) private static function _getConfig($key)
{ {
$row = self::_select( try {
'SELECT value FROM ' . self::_sanitizeIdentifier('config') . $row = self::_select(
' WHERE id = ?', array($key), true 'SELECT value FROM ' . self::_sanitizeIdentifier('config') .
); ' WHERE id = ?', array($key), true
return $row['value']; );
} catch (PDOException $e) {
return '';
}
return $row ? $row['value'] : '';
} }
/** /**
@@ -770,7 +856,7 @@ class Database extends AbstractData
" MODIFY COLUMN data $attachmentType;" " MODIFY COLUMN data $attachmentType;"
); );
} }
// no break, continue with updates for 1.3.1 and later // no break, continue with updates for all newer versions
default: default:
self::_exec( self::_exec(
'UPDATE ' . self::_sanitizeIdentifier('config') . 'UPDATE ' . self::_sanitizeIdentifier('config') .

View File

@@ -7,12 +7,13 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
namespace PrivateBin\Data; namespace PrivateBin\Data;
use PrivateBin\Persistence\DataStore; use Exception;
use PrivateBin\Json;
/** /**
* Filesystem * Filesystem
@@ -21,6 +22,29 @@ use PrivateBin\Persistence\DataStore;
*/ */
class Filesystem extends AbstractData class Filesystem extends AbstractData
{ {
/**
* first line in paste or comment files, to protect their contents from browsing exposed data directories
*
* @const string
*/
const PROTECTION_LINE = '<?php http_response_code(403); /*';
/**
* line in generated .htaccess files, to protect exposed directories from being browsable on apache web servers
*
* @const string
*/
const HTACCESS_LINE = 'Require all denied';
/**
* path in which to persist something
*
* @access private
* @static
* @var string
*/
private static $_path = 'data';
/** /**
* get instance of singleton * get instance of singleton
* *
@@ -40,7 +64,7 @@ class Filesystem extends AbstractData
is_array($options) && is_array($options) &&
array_key_exists('dir', $options) array_key_exists('dir', $options)
) { ) {
DataStore::setPath($options['dir']); self::$_path = $options['dir'];
} }
return self::$_instance; return self::$_instance;
} }
@@ -63,7 +87,7 @@ class Filesystem extends AbstractData
if (!is_dir($storagedir)) { if (!is_dir($storagedir)) {
mkdir($storagedir, 0700, true); mkdir($storagedir, 0700, true);
} }
return DataStore::store($file, $paste); return self::_store($file, $paste);
} }
/** /**
@@ -75,12 +99,13 @@ class Filesystem extends AbstractData
*/ */
public function read($pasteid) public function read($pasteid)
{ {
if (!$this->exists($pasteid)) { if (
!$this->exists($pasteid) ||
!$paste = self::_get(self::_dataid2path($pasteid) . $pasteid . '.php')
) {
return false; return false;
} }
return self::upgradePreV1Format( return self::upgradePreV1Format($paste);
DataStore::get(self::_dataid2path($pasteid) . $pasteid . '.php')
);
} }
/** /**
@@ -127,7 +152,7 @@ class Filesystem extends AbstractData
$pastePath = $basePath . '.php'; $pastePath = $basePath . '.php';
// convert to PHP protected files if needed // convert to PHP protected files if needed
if (is_readable($basePath)) { if (is_readable($basePath)) {
DataStore::prependRename($basePath, $pastePath); self::_prependRename($basePath, $pastePath);
// convert comments, too // convert comments, too
$discdir = self::_dataid2discussionpath($pasteid); $discdir = self::_dataid2discussionpath($pasteid);
@@ -136,7 +161,7 @@ class Filesystem extends AbstractData
while (false !== ($filename = $dir->read())) { while (false !== ($filename = $dir->read())) {
if (substr($filename, -4) !== '.php' && strlen($filename) >= 16) { if (substr($filename, -4) !== '.php' && strlen($filename) >= 16) {
$commentFilename = $discdir . $filename . '.php'; $commentFilename = $discdir . $filename . '.php';
DataStore::prependRename($discdir . $filename, $commentFilename); self::_prependRename($discdir . $filename, $commentFilename);
} }
} }
$dir->close(); $dir->close();
@@ -165,7 +190,7 @@ class Filesystem extends AbstractData
if (!is_dir($storagedir)) { if (!is_dir($storagedir)) {
mkdir($storagedir, 0700, true); mkdir($storagedir, 0700, true);
} }
return DataStore::store($file, $comment); return self::_store($file, $comment);
} }
/** /**
@@ -187,7 +212,7 @@ class Filesystem extends AbstractData
// - commentid is the comment identifier itself. // - commentid is the comment identifier itself.
// - parentid is the comment this comment replies to (It can be pasteid) // - parentid is the comment this comment replies to (It can be pasteid)
if (is_file($discdir . $filename)) { if (is_file($discdir . $filename)) {
$comment = DataStore::get($discdir . $filename); $comment = self::_get($discdir . $filename);
$items = explode('.', $filename); $items = explode('.', $filename);
// Add some meta information not contained in file. // Add some meta information not contained in file.
$comment['id'] = $items[1]; $comment['id'] = $items[1];
@@ -223,6 +248,97 @@ class Filesystem extends AbstractData
); );
} }
/**
* Save a value.
*
* @access public
* @param string $value
* @param string $namespace
* @param string $key
* @return bool
*/
public function setValue($value, $namespace, $key = '')
{
switch ($namespace) {
case 'purge_limiter':
return self::_storeString(
self::$_path . DIRECTORY_SEPARATOR . 'purge_limiter.php',
'<?php' . PHP_EOL . '$GLOBALS[\'purge_limiter\'] = ' . $value . ';'
);
case 'salt':
return self::_storeString(
self::$_path . DIRECTORY_SEPARATOR . 'salt.php',
'<?php # |' . $value . '|'
);
case 'traffic_limiter':
self::$_last_cache[$key] = $value;
return self::_storeString(
self::$_path . DIRECTORY_SEPARATOR . 'traffic_limiter.php',
'<?php' . PHP_EOL . '$GLOBALS[\'traffic_limiter\'] = ' . var_export(self::$_last_cache, true) . ';'
);
}
return false;
}
/**
* Load a value.
*
* @access public
* @param string $namespace
* @param string $key
* @return string
*/
public function getValue($namespace, $key = '')
{
switch ($namespace) {
case 'purge_limiter':
$file = self::$_path . DIRECTORY_SEPARATOR . 'purge_limiter.php';
if (is_readable($file)) {
require $file;
return $GLOBALS['purge_limiter'];
}
break;
case 'salt':
$file = self::$_path . DIRECTORY_SEPARATOR . 'salt.php';
if (is_readable($file)) {
$items = explode('|', file_get_contents($file));
if (is_array($items) && count($items) == 3) {
return $items[1];
}
}
break;
case 'traffic_limiter':
$file = self::$_path . DIRECTORY_SEPARATOR . 'traffic_limiter.php';
if (is_readable($file)) {
require $file;
self::$_last_cache = $GLOBALS['traffic_limiter'];
if (array_key_exists($key, self::$_last_cache)) {
return self::$_last_cache[$key];
}
}
break;
}
return '';
}
/**
* get the data
*
* @access public
* @static
* @param string $filename
* @return array|false $data
*/
private static function _get($filename)
{
return Json::decode(
substr(
file_get_contents($filename),
strlen(self::PROTECTION_LINE . PHP_EOL)
)
);
}
/** /**
* Returns up to batch size number of paste ids that have expired * Returns up to batch size number of paste ids that have expired
* *
@@ -233,9 +349,8 @@ class Filesystem extends AbstractData
protected function _getExpiredPastes($batchsize) protected function _getExpiredPastes($batchsize)
{ {
$pastes = array(); $pastes = array();
$mainpath = DataStore::getPath();
$firstLevel = array_filter( $firstLevel = array_filter(
scandir($mainpath), scandir(self::$_path),
'self::_isFirstLevelDir' 'self::_isFirstLevelDir'
); );
if (count($firstLevel) > 0) { if (count($firstLevel) > 0) {
@@ -243,7 +358,7 @@ class Filesystem extends AbstractData
for ($i = 0, $max = $batchsize * 10; $i < $max; ++$i) { for ($i = 0, $max = $batchsize * 10; $i < $max; ++$i) {
$firstKey = array_rand($firstLevel); $firstKey = array_rand($firstLevel);
$secondLevel = array_filter( $secondLevel = array_filter(
scandir($mainpath . DIRECTORY_SEPARATOR . $firstLevel[$firstKey]), scandir(self::$_path . DIRECTORY_SEPARATOR . $firstLevel[$firstKey]),
'self::_isSecondLevelDir' 'self::_isSecondLevelDir'
); );
@@ -254,7 +369,7 @@ class Filesystem extends AbstractData
} }
$secondKey = array_rand($secondLevel); $secondKey = array_rand($secondLevel);
$path = $mainpath . DIRECTORY_SEPARATOR . $path = self::$_path . DIRECTORY_SEPARATOR .
$firstLevel[$firstKey] . DIRECTORY_SEPARATOR . $firstLevel[$firstKey] . DIRECTORY_SEPARATOR .
$secondLevel[$secondKey]; $secondLevel[$secondKey];
if (!is_dir($path)) { if (!is_dir($path)) {
@@ -314,10 +429,9 @@ class Filesystem extends AbstractData
*/ */
private static function _dataid2path($dataid) private static function _dataid2path($dataid)
{ {
return DataStore::getPath( return self::$_path . DIRECTORY_SEPARATOR .
substr($dataid, 0, 2) . DIRECTORY_SEPARATOR . substr($dataid, 0, 2) . DIRECTORY_SEPARATOR .
substr($dataid, 2, 2) . DIRECTORY_SEPARATOR substr($dataid, 2, 2) . DIRECTORY_SEPARATOR;
);
} }
/** /**
@@ -347,7 +461,7 @@ class Filesystem extends AbstractData
private static function _isFirstLevelDir($element) private static function _isFirstLevelDir($element)
{ {
return self::_isSecondLevelDir($element) && return self::_isSecondLevelDir($element) &&
is_dir(DataStore::getPath($element)); is_dir(self::$_path . DIRECTORY_SEPARATOR . $element);
} }
/** /**
@@ -362,4 +476,97 @@ class Filesystem extends AbstractData
{ {
return (bool) preg_match('/^[a-f0-9]{2}$/', $element); return (bool) preg_match('/^[a-f0-9]{2}$/', $element);
} }
/**
* store the data
*
* @access public
* @static
* @param string $filename
* @param array $data
* @return bool
*/
private static function _store($filename, array $data)
{
try {
return self::_storeString(
$filename,
self::PROTECTION_LINE . PHP_EOL . Json::encode($data)
);
} catch (Exception $e) {
return false;
}
}
/**
* store a string
*
* @access public
* @static
* @param string $filename
* @param string $data
* @return bool
*/
private static function _storeString($filename, $data)
{
// Create storage directory if it does not exist.
if (!is_dir(self::$_path)) {
if (!@mkdir(self::$_path, 0700)) {
return false;
}
}
$file = self::$_path . DIRECTORY_SEPARATOR . '.htaccess';
if (!is_file($file)) {
$writtenBytes = 0;
if ($fileCreated = @touch($file)) {
$writtenBytes = @file_put_contents(
$file,
self::HTACCESS_LINE . PHP_EOL,
LOCK_EX
);
}
if (
$fileCreated === false ||
$writtenBytes === false ||
$writtenBytes < strlen(self::HTACCESS_LINE . PHP_EOL)
) {
return false;
}
}
$fileCreated = true;
$writtenBytes = 0;
if (!is_file($filename)) {
$fileCreated = @touch($filename);
}
if ($fileCreated) {
$writtenBytes = @file_put_contents($filename, $data, LOCK_EX);
}
if ($fileCreated === false || $writtenBytes === false || $writtenBytes < strlen($data)) {
return false;
}
@chmod($filename, 0640); // protect file from access by other users on the host
return true;
}
/**
* rename a file, prepending the protection line at the beginning
*
* @access public
* @static
* @param string $srcFile
* @param string $destFile
* @return void
*/
private static function _prependRename($srcFile, $destFile)
{
// don't overwrite already converted file
if (!is_readable($destFile)) {
$handle = fopen($srcFile, 'r', false, stream_context_create());
file_put_contents($destFile, self::PROTECTION_LINE . PHP_EOL);
file_put_contents($destFile, $handle, FILE_APPEND);
fclose($handle);
}
unlink($srcFile);
}
} }

View File

@@ -0,0 +1,346 @@
<?php
namespace PrivateBin\Data;
use Exception;
use Google\Cloud\Core\Exception\NotFoundException;
use Google\Cloud\Storage\Bucket;
use Google\Cloud\Storage\StorageClient;
use PrivateBin\Json;
class GoogleCloudStorage extends AbstractData
{
/**
* GCS client
*
* @access private
* @static
* @var StorageClient
*/
private static $_client = null;
/**
* GCS bucket
*
* @access private
* @static
* @var Bucket
*/
private static $_bucket = null;
/**
* object prefix
*
* @access private
* @static
* @var string
*/
private static $_prefix = 'pastes';
/**
* returns a Google Cloud Storage data backend.
*
* @access public
* @static
* @param array $options
* @return GoogleCloudStorage
*/
public static function getInstance(array $options)
{
// if needed initialize the singleton
if (!(self::$_instance instanceof self)) {
self::$_instance = new self;
}
$bucket = null;
if (getenv('PRIVATEBIN_GCS_BUCKET')) {
$bucket = getenv('PRIVATEBIN_GCS_BUCKET');
}
if (is_array($options) && array_key_exists('bucket', $options)) {
$bucket = $options['bucket'];
}
if (is_array($options) && array_key_exists('prefix', $options)) {
self::$_prefix = $options['prefix'];
}
if (empty(self::$_client)) {
self::$_client = class_exists('StorageClientStub', false) ?
new \StorageClientStub(array()) :
new StorageClient(array('suppressKeyFileNotice' => true));
}
self::$_bucket = self::$_client->bucket($bucket);
return self::$_instance;
}
/**
* returns the google storage object key for $pasteid in self::$_bucket.
*
* @access private
* @param $pasteid string to get the key for
* @return string
*/
private function _getKey($pasteid)
{
if (self::$_prefix != '') {
return self::$_prefix . '/' . $pasteid;
}
return $pasteid;
}
/**
* Uploads the payload in the self::$_bucket under the specified key.
* The entire payload is stored as a JSON document. The metadata is replicated
* as the GCS object's metadata except for the fields attachment, attachmentname
* and salt.
*
* @param $key string to store the payload under
* @param $payload array to store
* @return bool true if successful, otherwise false.
*/
private function _upload($key, $payload)
{
$metadata = array_key_exists('meta', $payload) ? $payload['meta'] : array();
unset($metadata['attachment'], $metadata['attachmentname'], $metadata['salt']);
foreach ($metadata as $k => $v) {
$metadata[$k] = strval($v);
}
try {
self::$_bucket->upload(Json::encode($payload), array(
'name' => $key,
'chunkSize' => 262144,
'predefinedAcl' => 'private',
'metadata' => array(
'content-type' => 'application/json',
'metadata' => $metadata,
),
));
} catch (Exception $e) {
error_log('failed to upload ' . $key . ' to ' . self::$_bucket->name() . ', ' .
trim(preg_replace('/\s\s+/', ' ', $e->getMessage())));
return false;
}
return true;
}
/**
* @inheritDoc
*/
public function create($pasteid, array $paste)
{
if ($this->exists($pasteid)) {
return false;
}
return $this->_upload($this->_getKey($pasteid), $paste);
}
/**
* @inheritDoc
*/
public function read($pasteid)
{
try {
$o = self::$_bucket->object($this->_getKey($pasteid));
$data = $o->downloadAsString();
return Json::decode($data);
} catch (NotFoundException $e) {
return false;
} catch (Exception $e) {
error_log('failed to read ' . $pasteid . ' from ' . self::$_bucket->name() . ', ' .
trim(preg_replace('/\s\s+/', ' ', $e->getMessage())));
return false;
}
}
/**
* @inheritDoc
*/
public function delete($pasteid)
{
$name = $this->_getKey($pasteid);
try {
foreach (self::$_bucket->objects(array('prefix' => $name . '/discussion/')) as $comment) {
try {
self::$_bucket->object($comment->name())->delete();
} catch (NotFoundException $e) {
// ignore if already deleted.
}
}
} catch (NotFoundException $e) {
// there are no discussions associated with the paste
}
try {
self::$_bucket->object($name)->delete();
} catch (NotFoundException $e) {
// ignore if already deleted
}
}
/**
* @inheritDoc
*/
public function exists($pasteid)
{
$o = self::$_bucket->object($this->_getKey($pasteid));
return $o->exists();
}
/**
* @inheritDoc
*/
public function createComment($pasteid, $parentid, $commentid, array $comment)
{
if ($this->existsComment($pasteid, $parentid, $commentid)) {
return false;
}
$key = $this->_getKey($pasteid) . '/discussion/' . $parentid . '/' . $commentid;
return $this->_upload($key, $comment);
}
/**
* @inheritDoc
*/
public function readComments($pasteid)
{
$comments = array();
$prefix = $this->_getKey($pasteid) . '/discussion/';
try {
foreach (self::$_bucket->objects(array('prefix' => $prefix)) as $key) {
$comment = JSON::decode(self::$_bucket->object($key->name())->downloadAsString());
$comment['id'] = basename($key->name());
$slot = $this->getOpenSlot($comments, (int) $comment['meta']['created']);
$comments[$slot] = $comment;
}
} catch (NotFoundException $e) {
// no comments found
}
return $comments;
}
/**
* @inheritDoc
*/
public function existsComment($pasteid, $parentid, $commentid)
{
$name = $this->_getKey($pasteid) . '/discussion/' . $parentid . '/' . $commentid;
$o = self::$_bucket->object($name);
return $o->exists();
}
/**
* @inheritDoc
*/
public function purgeValues($namespace, $time)
{
$path = 'config/' . $namespace;
try {
foreach (self::$_bucket->objects(array('prefix' => $path)) as $object) {
$name = $object->name();
if (strlen($name) > strlen($path) && substr($name, strlen($path), 1) !== '/') {
continue;
}
$info = $object->info();
if (key_exists('metadata', $info) && key_exists('value', $info['metadata'])) {
$value = $info['metadata']['value'];
if (is_numeric($value) && intval($value) < $time) {
try {
$object->delete();
} catch (NotFoundException $e) {
// deleted by another instance.
}
}
}
}
} catch (NotFoundException $e) {
// no objects in the bucket yet
}
}
/**
* For GoogleCloudStorage, the value will also be stored in the metadata for the
* namespaces traffic_limiter and purge_limiter.
* @inheritDoc
*/
public function setValue($value, $namespace, $key = '')
{
if ($key === '') {
$key = 'config/' . $namespace;
} else {
$key = 'config/' . $namespace . '/' . $key;
}
$metadata = array('namespace' => $namespace);
if ($namespace != 'salt') {
$metadata['value'] = strval($value);
}
try {
self::$_bucket->upload($value, array(
'name' => $key,
'chunkSize' => 262144,
'predefinedAcl' => 'private',
'metadata' => array(
'content-type' => 'application/json',
'metadata' => $metadata,
),
));
} catch (Exception $e) {
error_log('failed to set key ' . $key . ' to ' . self::$_bucket->name() . ', ' .
trim(preg_replace('/\s\s+/', ' ', $e->getMessage())));
return false;
}
return true;
}
/**
* @inheritDoc
*/
public function getValue($namespace, $key = '')
{
if ($key === '') {
$key = 'config/' . $namespace;
} else {
$key = 'config/' . $namespace . '/' . $key;
}
try {
$o = self::$_bucket->object($key);
return $o->downloadAsString();
} catch (NotFoundException $e) {
return '';
}
}
/**
* @inheritDoc
*/
protected function _getExpiredPastes($batchsize)
{
$expired = array();
$now = time();
$prefix = self::$_prefix;
if ($prefix != '') {
$prefix .= '/';
}
try {
foreach (self::$_bucket->objects(array('prefix' => $prefix)) as $object) {
$metadata = $object->info()['metadata'];
if ($metadata != null && array_key_exists('expire_date', $metadata)) {
$expire_at = intval($metadata['expire_date']);
if ($expire_at != 0 && $expire_at < $now) {
array_push($expired, basename($object->name()));
}
}
if (count($expired) > $batchsize) {
break;
}
}
} catch (NotFoundException $e) {
// no objects in the bucket yet
}
return $expired;
}
}

View File

@@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
namespace PrivateBin; namespace PrivateBin;
@@ -68,23 +68,4 @@ class Filter
} }
return number_format($size, ($i ? 2 : 0), '.', ' ') . ' ' . I18n::_($iec[$i]); return number_format($size, ($i ? 2 : 0), '.', ' ') . ' ' . I18n::_($iec[$i]);
} }
/**
* fixed time string comparison operation to prevent timing attacks
* https://crackstation.net/hashing-security.htm?=rd#slowequals
*
* @access public
* @static
* @param string $a
* @param string $b
* @return bool
*/
public static function slowEquals($a, $b)
{
$diff = strlen($a) ^ strlen($b);
for ($i = 0; $i < strlen($a) && $i < strlen($b); ++$i) {
$diff |= ord($a[$i]) ^ ord($b[$i]);
}
return $diff === 0;
}
} }

View File

@@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
namespace PrivateBin; namespace PrivateBin;
@@ -52,6 +52,11 @@ class FormatV2
} }
} }
// Make sure adata is an array.
if (!is_array($message['adata'])) {
return false;
}
$cipherParams = $isComment ? $message['adata'] : $message['adata'][0]; $cipherParams = $isComment ? $message['adata'] : $message['adata'][0];
// Make sure some fields are base64 data: // Make sure some fields are base64 data:

View File

@@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
namespace PrivateBin; namespace PrivateBin;
@@ -125,9 +125,31 @@ class I18n
} else { } else {
$args[0] = self::$_translations[$messageId]; $args[0] = self::$_translations[$messageId];
} }
// 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]);
}
}
}
return call_user_func_array('sprintf', $args); return call_user_func_array('sprintf', $args);
} }
/**
* encode HTML entities for output into an HTML5 document
*
* @access public
* @static
* @param string $string
* @return string
*/
public static function encode($string)
{
return htmlspecialchars($string, ENT_QUOTES | ENT_HTML5 | ENT_DISALLOWED, 'UTF-8', false);
}
/** /**
* loads translations * loads translations
* *
@@ -177,7 +199,6 @@ class I18n
self::$_availableLanguages[] = $match[1]; self::$_availableLanguages[] = $match[1];
} }
} }
self::$_availableLanguages[] = 'en';
} }
return self::$_availableLanguages; return self::$_availableLanguages;
} }
@@ -284,7 +305,7 @@ class I18n
/** /**
* determines the plural form to use based on current language and given number * determines the plural form to use based on current language and given number
* *
* From: http://localization-guide.readthedocs.org/en/latest/l10n/pluralforms.html * From: https://localization-guide.readthedocs.org/en/latest/l10n/pluralforms.html
* *
* @access protected * @access protected
* @static * @static
@@ -300,13 +321,20 @@ class I18n
case 'oc': case 'oc':
case 'zh': case 'zh':
return $n > 1 ? 1 : 0; return $n > 1 ? 1 : 0;
case 'he':
return $n === 1 ? 0 : ($n === 2 ? 1 : (($n < 0 || $n > 10) && ($n % 10 === 0) ? 2 : 3));
case 'id':
return 0;
case 'lt':
return $n % 10 === 1 && $n % 100 !== 11 ? 0 : (($n % 10 >= 2 && $n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);
case 'pl': case 'pl':
return $n == 1 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2); return $n == 1 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);
case 'ru': 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); return $n % 10 == 1 && $n % 100 != 11 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);
case 'sl': case 'sl':
return $n % 100 == 1 ? 1 : ($n % 100 == 2 ? 2 : ($n % 100 == 3 || $n % 100 == 4 ? 3 : 0)); return $n % 100 == 1 ? 1 : ($n % 100 == 2 ? 2 : ($n % 100 == 3 || $n % 100 == 4 ? 3 : 0));
// bg, de, en, es, hu, it, nl, no, pt // bg, ca, de, en, es, et, hu, it, nl, no, pt
default: default:
return $n != 1 ? 1 : 0; return $n != 1 ? 1 : 0;
} }

View File

@@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
namespace PrivateBin; namespace PrivateBin;
@@ -44,13 +44,13 @@ class Json
* @static * @static
* @param string $input * @param string $input
* @throws Exception * @throws Exception
* @return array * @return mixed
*/ */
public static function decode($input) public static function decode($input)
{ {
$array = json_decode($input, true); $output = json_decode($input, true);
self::_detectError(); self::_detectError();
return $array; return $output;
} }
/** /**

View File

@@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
namespace PrivateBin; namespace PrivateBin;
@@ -54,7 +54,7 @@ class Model
*/ */
public function getPaste($pasteId = null) public function getPaste($pasteId = null)
{ {
$paste = new Paste($this->_conf, $this->_getStore()); $paste = new Paste($this->_conf, $this->getStore());
if ($pasteId !== null) { if ($pasteId !== null) {
$paste->setId($pasteId); $paste->setId($pasteId);
} }
@@ -67,8 +67,9 @@ class Model
public function purge() public function purge()
{ {
PurgeLimiter::setConfiguration($this->_conf); PurgeLimiter::setConfiguration($this->_conf);
PurgeLimiter::setStore($this->getStore());
if (PurgeLimiter::canPurge()) { if (PurgeLimiter::canPurge()) {
$this->_getStore()->purge($this->_conf->getKey('batchsize', 'purge')); $this->getStore()->purge($this->_conf->getKey('batchsize', 'purge'));
} }
} }
@@ -77,7 +78,7 @@ class Model
* *
* @return Data\AbstractData * @return Data\AbstractData
*/ */
private function _getStore() public function getStore()
{ {
if ($this->_store === null) { if ($this->_store === null) {
$this->_store = forward_static_call( $this->_store = forward_static_call(

View File

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

View File

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

View File

@@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
namespace PrivateBin\Model; namespace PrivateBin\Model;
@@ -93,7 +93,7 @@ class Paste extends AbstractModel
} }
$this->_data['meta']['created'] = time(); $this->_data['meta']['created'] = time();
$this->_data['meta']['salt'] = serversalt::generate(); $this->_data['meta']['salt'] = ServerSalt::generate();
// store paste // store paste
if ( if (

View File

@@ -7,12 +7,12 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
namespace PrivateBin\Persistence; namespace PrivateBin\Persistence;
use Exception; use PrivateBin\Data\AbstractData;
/** /**
* AbstractPersistence * AbstractPersistence
@@ -22,104 +22,23 @@ use Exception;
abstract class AbstractPersistence abstract class AbstractPersistence
{ {
/** /**
* path in which to persist something * data storage to use to persist something
* *
* @access private * @access private
* @static * @static
* @var string * @var AbstractData
*/ */
private static $_path = 'data'; protected static $_store;
/** /**
* set the path * set the path
* *
* @access public * @access public
* @static * @static
* @param string $path * @param AbstractData $store
*/ */
public static function setPath($path) public static function setStore(AbstractData $store)
{ {
self::$_path = $path; self::$_store = $store;
}
/**
* get the path
*
* @access public
* @static
* @param string $filename
* @return string
*/
public static function getPath($filename = null)
{
if (strlen($filename)) {
return self::$_path . DIRECTORY_SEPARATOR . $filename;
} else {
return self::$_path;
}
}
/**
* checks if the file exists
*
* @access protected
* @static
* @param string $filename
* @return bool
*/
protected static function _exists($filename)
{
self::_initialize();
return is_file(self::$_path . DIRECTORY_SEPARATOR . $filename);
}
/**
* prepares path for storage
*
* @access protected
* @static
* @throws Exception
*/
protected static function _initialize()
{
// Create storage directory if it does not exist.
if (!is_dir(self::$_path)) {
if (!@mkdir(self::$_path, 0700)) {
throw new Exception('unable to create directory ' . self::$_path, 10);
}
}
$file = self::$_path . DIRECTORY_SEPARATOR . '.htaccess';
if (!is_file($file)) {
$writtenBytes = @file_put_contents(
$file,
'Require all denied' . PHP_EOL,
LOCK_EX
);
if ($writtenBytes === false || $writtenBytes < 19) {
throw new Exception('unable to write to file ' . $file, 11);
}
}
}
/**
* store the data
*
* @access protected
* @static
* @param string $filename
* @param string $data
* @throws Exception
* @return string
*/
protected static function _store($filename, $data)
{
self::_initialize();
$file = self::$_path . DIRECTORY_SEPARATOR . $filename;
$writtenBytes = @file_put_contents($file, $data, LOCK_EX);
if ($writtenBytes === false || $writtenBytes < strlen($data)) {
throw new Exception('unable to write to file ' . $file, 13);
}
@chmod($file, 0640); // protect file access
return $file;
} }
} }

View File

@@ -1,97 +0,0 @@
<?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.1
*/
namespace PrivateBin\Persistence;
use Exception;
use PrivateBin\Json;
/**
* DataStore
*
* Handles data storage for Data\Filesystem.
*/
class DataStore extends AbstractPersistence
{
/**
* first line in file, to protect its contents
*
* @const string
*/
const PROTECTION_LINE = '<?php http_response_code(403); /*';
/**
* store the data
*
* @access public
* @static
* @param string $filename
* @param array $data
* @return bool
*/
public static function store($filename, $data)
{
$path = self::getPath();
if (strpos($filename, $path) === 0) {
$filename = substr($filename, strlen($path));
}
try {
self::_store(
$filename,
self::PROTECTION_LINE . PHP_EOL . Json::encode($data)
);
return true;
} catch (Exception $e) {
return false;
}
}
/**
* get the data
*
* @access public
* @static
* @param string $filename
* @return array|false $data
*/
public static function get($filename)
{
return Json::decode(
substr(
file_get_contents($filename),
strlen(self::PROTECTION_LINE . PHP_EOL)
)
);
}
/**
* rename a file, prepending the protection line at the beginning
*
* @access public
* @static
* @param string $srcFile
* @param string $destFile
* @param string $prefix (optional)
* @return void
*/
public static function prependRename($srcFile, $destFile, $prefix = '')
{
// don't overwrite already converted file
if (!is_readable($destFile)) {
$handle = fopen($srcFile, 'r', false, stream_context_create());
file_put_contents($destFile, $prefix . self::PROTECTION_LINE . PHP_EOL);
file_put_contents($destFile, $handle, FILE_APPEND);
fclose($handle);
}
unlink($srcFile);
}
}

View File

@@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
namespace PrivateBin\Persistence; namespace PrivateBin\Persistence;
@@ -52,7 +52,6 @@ class PurgeLimiter extends AbstractPersistence
public static function setConfiguration(Configuration $conf) public static function setConfiguration(Configuration $conf)
{ {
self::setLimit($conf->getKey('limit', 'purge')); self::setLimit($conf->getKey('limit', 'purge'));
self::setPath($conf->getKey('dir', 'purge'));
} }
/** /**
@@ -60,7 +59,6 @@ class PurgeLimiter extends AbstractPersistence
* *
* @access public * @access public
* @static * @static
* @throws \Exception
* @return bool * @return bool
*/ */
public static function canPurge() public static function canPurge()
@@ -71,17 +69,14 @@ class PurgeLimiter extends AbstractPersistence
} }
$now = time(); $now = time();
$file = 'purge_limiter.php'; $pl = (int) self::$_store->getValue('purge_limiter');
if (self::_exists($file)) { if ($pl + self::$_limit >= $now) {
require self::getPath($file); return false;
$pl = $GLOBALS['purge_limiter'];
if ($pl + self::$_limit >= $now) {
return false;
}
} }
$hasStored = self::$_store->setValue((string) $now, 'purge_limiter');
$content = '<?php' . PHP_EOL . '$GLOBALS[\'purge_limiter\'] = ' . $now . ';'; if (!$hasStored) {
self::_store($file, $content); error_log('failed to store the purge limiter, skipping purge cycle to avoid getting stuck in a purge loop');
return true; }
return $hasStored;
} }
} }

View File

@@ -7,12 +7,12 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
namespace PrivateBin\Persistence; namespace PrivateBin\Persistence;
use Exception; use PrivateBin\Data\AbstractData;
/** /**
* ServerSalt * ServerSalt
@@ -26,15 +26,6 @@ use Exception;
*/ */
class ServerSalt extends AbstractPersistence class ServerSalt extends AbstractPersistence
{ {
/**
* file where salt is saved to
*
* @access private
* @static
* @var string
*/
private static $_file = 'salt.php';
/** /**
* generated salt * generated salt
* *
@@ -53,8 +44,7 @@ class ServerSalt extends AbstractPersistence
*/ */
public static function generate() public static function generate()
{ {
$randomSalt = bin2hex(random_bytes(256)); return bin2hex(random_bytes(256));
return $randomSalt;
} }
/** /**
@@ -62,7 +52,6 @@ class ServerSalt extends AbstractPersistence
* *
* @access public * @access public
* @static * @static
* @throws Exception
* @return string * @return string
*/ */
public static function get() public static function get()
@@ -71,20 +60,14 @@ class ServerSalt extends AbstractPersistence
return self::$_salt; return self::$_salt;
} }
if (self::_exists(self::$_file)) { $salt = self::$_store->getValue('salt');
if (is_readable(self::getPath(self::$_file))) { if ($salt) {
$items = explode('|', file_get_contents(self::getPath(self::$_file))); self::$_salt = $salt;
}
if (!isset($items) || !is_array($items) || count($items) != 3) {
throw new Exception('unable to read file ' . self::getPath(self::$_file), 20);
}
self::$_salt = $items[1];
} else { } else {
self::$_salt = self::generate(); self::$_salt = self::generate();
self::_store( if (!self::$_store->setValue(self::$_salt, 'salt')) {
self::$_file, error_log('failed to store the server salt, delete tokens, traffic limiter and user icons won\'t work');
'<?php # |' . self::$_salt . '|' }
);
} }
return self::$_salt; return self::$_salt;
} }
@@ -94,11 +77,11 @@ class ServerSalt extends AbstractPersistence
* *
* @access public * @access public
* @static * @static
* @param string $path * @param AbstractData $store
*/ */
public static function setPath($path) public static function setStore(AbstractData $store)
{ {
self::$_salt = ''; self::$_salt = '';
parent::setPath($path); parent::setStore($store);
} }
} }

View File

@@ -1,4 +1,5 @@
<?php <?php
/** /**
* PrivateBin * PrivateBin
* *
@@ -7,11 +8,12 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
namespace PrivateBin\Persistence; namespace PrivateBin\Persistence;
use IPLib\Factory;
use PrivateBin\Configuration; use PrivateBin\Configuration;
/** /**
@@ -30,6 +32,15 @@ class TrafficLimiter extends AbstractPersistence
*/ */
private static $_limit = 10; private static $_limit = 10;
/**
* listed ips are exempted from limits, defaults to null
*
* @access private
* @static
* @var string|null
*/
private static $_exemptedIp = null;
/** /**
* key to fetch IP address * key to fetch IP address
* *
@@ -51,6 +62,18 @@ class TrafficLimiter extends AbstractPersistence
self::$_limit = $limit; self::$_limit = $limit;
} }
/**
* set a list of ip(ranges) as string
*
* @access public
* @static
* @param string $exemptedIps
*/
public static function setExemptedIp($exemptedIp)
{
self::$_exemptedIp = $exemptedIp;
}
/** /**
* set configuration options of the traffic limiter * set configuration options of the traffic limiter
* *
@@ -61,7 +84,8 @@ class TrafficLimiter extends AbstractPersistence
public static function setConfiguration(Configuration $conf) public static function setConfiguration(Configuration $conf)
{ {
self::setLimit($conf->getKey('limit', 'traffic')); self::setLimit($conf->getKey('limit', 'traffic'));
self::setPath($conf->getKey('dir', 'traffic')); self::setExemptedIp($conf->getKey('exemptedIp', 'traffic'));
if (($option = $conf->getKey('header', 'traffic')) !== null) { if (($option = $conf->getKey('header', 'traffic')) !== null) {
$httpHeader = 'HTTP_' . $option; $httpHeader = 'HTTP_' . $option;
if (array_key_exists($httpHeader, $_SERVER) && !empty($_SERVER[$httpHeader])) { if (array_key_exists($httpHeader, $_SERVER) && !empty($_SERVER[$httpHeader])) {
@@ -83,6 +107,34 @@ class TrafficLimiter extends AbstractPersistence
return hash_hmac($algo, $_SERVER[self::$_ipKey], ServerSalt::get()); return hash_hmac($algo, $_SERVER[self::$_ipKey], ServerSalt::get());
} }
/**
* Validate $_ipKey against configured ipranges. If matched we will ignore the ip
*
* @access private
* @static
* @param string $ipRange
* @return bool
*/
private static function matchIp($ipRange = null)
{
if (is_string($ipRange)) {
$ipRange = trim($ipRange);
}
$address = Factory::addressFromString($_SERVER[self::$_ipKey]);
$range = Factory::rangeFromString($ipRange);
// address could not be parsed, we might not be in IP space and try a string comparison instead
if (is_null($address)) {
return $_SERVER[self::$_ipKey] === $ipRange;
}
// range could not be parsed, possibly an invalid ip range given in config
if (is_null($range)) {
return false;
}
return $address->matches($range);
}
/** /**
* traffic limiter * traffic limiter
* *
@@ -90,7 +142,6 @@ class TrafficLimiter extends AbstractPersistence
* *
* @access public * @access public
* @static * @static
* @throws \Exception
* @return bool * @return bool
*/ */
public static function canPass() public static function canPass()
@@ -100,35 +151,30 @@ class TrafficLimiter extends AbstractPersistence
return true; return true;
} }
$file = 'traffic_limiter.php'; // Check if $_ipKey is exempted from ratelimiting
if (self::_exists($file)) { if (!is_null(self::$_exemptedIp)) {
require self::getPath($file); $exIp_array = explode(',', self::$_exemptedIp);
$tl = $GLOBALS['traffic_limiter']; foreach ($exIp_array as $ipRange) {
} else { if (self::matchIp($ipRange) === true) {
$tl = array(); return true;
} }
// purge file of expired hashes to keep it small
$now = time();
foreach ($tl as $key => $time) {
if ($time + self::$_limit < $now) {
unset($tl[$key]);
} }
} }
// this hash is used as an array key, hence a shorter algo is used // this hash is used as an array key, hence a shorter algo is used
$hash = self::getHash('sha256'); $hash = self::getHash('sha256');
if (array_key_exists($hash, $tl) && ($tl[$hash] + self::$_limit >= $now)) { $now = time();
$tl = (int) self::$_store->getValue('traffic_limiter', $hash);
self::$_store->purgeValues('traffic_limiter', $now - self::$_limit);
if ($tl > 0 && ($tl + self::$_limit >= $now)) {
$result = false; $result = false;
} else { } else {
$tl[$hash] = time(); $tl = time();
$result = true; $result = true;
}
if (!self::$_store->setValue((string) $tl, 'traffic_limiter', $hash)) {
error_log('failed to store the traffic limiter, it probably contains outdated information');
} }
self::_store(
$file,
'<?php' . PHP_EOL .
'$GLOBALS[\'traffic_limiter\'] = ' . var_export($tl, true) . ';'
);
return $result; return $result;
} }
} }

View File

@@ -7,7 +7,7 @@
* @link https://github.com/PrivateBin/PrivateBin * @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.3.1 * @version 1.3.5
*/ */
namespace PrivateBin; namespace PrivateBin;
@@ -108,7 +108,9 @@ class Request
case 'DELETE': case 'DELETE':
case 'PUT': case 'PUT':
case 'POST': case 'POST':
$this->_params = Json::decode( // it might be a creation or a deletion, the latter is detected below
$this->_operation = 'create';
$this->_params = Json::decode(
file_get_contents(self::$_inputStream) file_get_contents(self::$_inputStream)
); );
break; break;
@@ -125,15 +127,10 @@ class Request
} }
// prepare operation, depending on current parameters // prepare operation, depending on current parameters
if ( if (array_key_exists('pasteid', $this->_params) && !empty($this->_params['pasteid'])) {
array_key_exists('ct', $this->_params) &&
!empty($this->_params['ct'])
) {
$this->_operation = 'create';
} elseif (array_key_exists('pasteid', $this->_params) && !empty($this->_params['pasteid'])) {
if (array_key_exists('deletetoken', $this->_params) && !empty($this->_params['deletetoken'])) { if (array_key_exists('deletetoken', $this->_params) && !empty($this->_params['deletetoken'])) {
$this->_operation = 'delete'; $this->_operation = 'delete';
} else { } elseif ($this->_operation != 'create') {
$this->_operation = 'read'; $this->_operation = 'read';
} }
} elseif (array_key_exists('jsonld', $this->_params) && !empty($this->_params['jsonld'])) { } elseif (array_key_exists('jsonld', $this->_params) && !empty($this->_params['jsonld'])) {
@@ -172,7 +169,7 @@ class Request
$data['meta'] = $meta; $data['meta'] = $meta;
} }
foreach ($required_keys as $key) { foreach ($required_keys as $key) {
$data[$key] = $this->getParam($key); $data[$key] = $this->getParam($key, $key == 'v' ? 1 : '');
} }
// forcing a cast to int or float // forcing a cast to int or float
$data['v'] = $data['v'] + 0; $data['v'] = $data['v'] + 0;
@@ -288,7 +285,7 @@ class Request
} }
krsort($mediaTypes); krsort($mediaTypes);
foreach ($mediaTypes as $acceptedQuality => $acceptedValues) { foreach ($mediaTypes as $acceptedQuality => $acceptedValues) {
if ($acceptedQuality === 0.0) { if ($acceptedQuality === '0.0') {
continue; continue;
} }
foreach ($acceptedValues as $acceptedValue) { foreach ($acceptedValues as $acceptedValue) {

View File

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

View File

@@ -8,7 +8,7 @@
* @link http://sebsauvage.net/wiki/doku.php?id=php:vizhash_gd * @link http://sebsauvage.net/wiki/doku.php?id=php:vizhash_gd
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 0.0.5 beta PrivateBin 1.3.1 * @version 0.0.5 beta PrivateBin 1.3.5
*/ */
namespace PrivateBin; namespace PrivateBin;

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