Compare commits
139 Commits
Author | SHA1 | Date |
---|---|---|
El RIDO | 74ac3350a3 | |
PrivateBin Translator Bot | 5a52f71bb7 | |
El RIDO | f0794e3c0b | |
El RIDO | db287a10fe | |
Aaron Sherber | 7a4c6c010f | |
Aaron Sherber | 7c9cc7754f | |
El RIDO | 6eb5fdcc06 | |
El RIDO | e1e0e8399c | |
El RIDO | 89a5d07b94 | |
El RIDO | 5f00587d71 | |
El RIDO | 53d2d3334d | |
Aaron Sherber | fd7d9f4715 | |
Aaron Sherber | 8abf6ae9cb | |
El RIDO | a62f4babbf | |
El RIDO | d52b8af0f5 | |
dependabot[bot] | 6474c374e2 | |
PrivateBin Translator Bot | b15571ae4a | |
El RIDO | c162f04384 | |
Florian | 6999ed3f4b | |
El RIDO | 03e7f6a9a7 | |
PrivateBin Translator Bot | a1095d0d21 | |
El RIDO | 7576459135 | |
rugk | cb117d6797 | |
El RIDO | 244703babb | |
PrivateBin Translator Bot | b00085f30f | |
PrivateBin Translator Bot | fc1b1ae0ca | |
PrivateBin Translator Bot | 45e335eca6 | |
PrivateBin Translator Bot | f03bccd31e | |
PrivateBin Translator Bot | 04da6db079 | |
PrivateBin Translator Bot | 580a034189 | |
PrivateBin Translator Bot | 6c5a500fcd | |
PrivateBin Translator Bot | da4ad06758 | |
PrivateBin Translator Bot | 2f394a4714 | |
PrivateBin Translator Bot | 39949cea34 | |
PrivateBin Translator Bot | a9d287874b | |
PrivateBin Translator Bot | 2381e30dc4 | |
PrivateBin Translator Bot | 0255f72ae0 | |
PrivateBin Translator Bot | 900200c35f | |
PrivateBin Translator Bot | 860b4b183e | |
PrivateBin Translator Bot | e585aeacda | |
PrivateBin Translator Bot | a4820618dd | |
PrivateBin Translator Bot | d957d344d1 | |
PrivateBin Translator Bot | c9c99f7535 | |
PrivateBin Translator Bot | 516a4c7d13 | |
PrivateBin Translator Bot | 2ccc90798f | |
PrivateBin Translator Bot | 647ddebb5c | |
PrivateBin Translator Bot | f40f3dd3a5 | |
PrivateBin Translator Bot | ce4f3a1b09 | |
PrivateBin Translator Bot | 888b3cb49c | |
PrivateBin Translator Bot | 6e0bc8bceb | |
PrivateBin Translator Bot | 43d396efd9 | |
PrivateBin Translator Bot | 3b6ebfdf02 | |
PrivateBin Translator Bot | f3df151a8c | |
PrivateBin Translator Bot | e4329b623d | |
PrivateBin Translator Bot | e18ec99aa9 | |
PrivateBin Translator Bot | 6d2d19c38c | |
PrivateBin Translator Bot | 532f85c6b7 | |
PrivateBin Translator Bot | 0dc7b1f6fc | |
PrivateBin Translator Bot | f0cc0e878a | |
PrivateBin Translator Bot | 2f775c218c | |
PrivateBin Translator Bot | 98b3d0e2ae | |
PrivateBin Translator Bot | 7ba642c0ad | |
PrivateBin Translator Bot | 63b63354d7 | |
PrivateBin Translator Bot | 569b47ee62 | |
PrivateBin Translator Bot | 050917f035 | |
PrivateBin Translator Bot | eff7eb5e23 | |
PrivateBin Translator Bot | 326feb1808 | |
PrivateBin Translator Bot | 3ed954fef4 | |
PrivateBin Translator Bot | ebe997bd02 | |
PrivateBin Translator Bot | a90a874d82 | |
PrivateBin Translator Bot | dd49b8e694 | |
PrivateBin Translator Bot | fec82754bb | |
PrivateBin Translator Bot | 24bd804d38 | |
PrivateBin Translator Bot | d0d77325de | |
PrivateBin Translator Bot | a8b4bf84c4 | |
PrivateBin Translator Bot | a398b1ff59 | |
PrivateBin Translator Bot | 3e2fc24e11 | |
PrivateBin Translator Bot | e6acab38d8 | |
PrivateBin Translator Bot | bcd899b3c4 | |
PrivateBin Translator Bot | 196e5046ac | |
PrivateBin Translator Bot | 64a209483a | |
PrivateBin Translator Bot | a5725d503e | |
PrivateBin Translator Bot | 14a73ddc61 | |
PrivateBin Translator Bot | 1503fb8aa7 | |
PrivateBin Translator Bot | 5291e381c8 | |
PrivateBin Translator Bot | a412a85ad0 | |
PrivateBin Translator Bot | 64e533ba8c | |
PrivateBin Translator Bot | 57a03839fa | |
PrivateBin Translator Bot | 7d8f57ffe8 | |
PrivateBin Translator Bot | a14151b85c | |
PrivateBin Translator Bot | 76affbc63b | |
El RIDO | 253e078263 | |
PrivateBin Translator Bot | 8b66612622 | |
PrivateBin Translator Bot | bfddc388b9 | |
PrivateBin Translator Bot | a68d81b10b | |
PrivateBin Translator Bot | c37ca3f495 | |
PrivateBin Translator Bot | 4048e2f45d | |
PrivateBin Translator Bot | 024bbc246e | |
PrivateBin Translator Bot | 25318facd7 | |
PrivateBin Translator Bot | 1e9c5cb812 | |
PrivateBin Translator Bot | cab26c619b | |
PrivateBin Translator Bot | cabfa18a35 | |
PrivateBin Translator Bot | 629faeea8d | |
PrivateBin Translator Bot | 0a9770ae51 | |
PrivateBin Translator Bot | 5c76cc9203 | |
PrivateBin Translator Bot | 7710a6066c | |
PrivateBin Translator Bot | 94f0808996 | |
PrivateBin Translator Bot | 494623eec7 | |
PrivateBin Translator Bot | 7174be4dfb | |
PrivateBin Translator Bot | af72f0694d | |
PrivateBin Translator Bot | 126d08933a | |
PrivateBin Translator Bot | 5ec102a75c | |
PrivateBin Translator Bot | cd33a4824b | |
PrivateBin Translator Bot | 966d0f5d64 | |
PrivateBin Translator Bot | 37c57e5815 | |
PrivateBin Translator Bot | 5854770286 | |
PrivateBin Translator Bot | 40df875334 | |
PrivateBin Translator Bot | 120fe77e1e | |
PrivateBin Translator Bot | 5bf7c04e04 | |
PrivateBin Translator Bot | 9f623b4130 | |
PrivateBin Translator Bot | 41b20da78b | |
PrivateBin Translator Bot | 3547e67cc6 | |
PrivateBin Translator Bot | 4eb55be55e | |
PrivateBin Translator Bot | c3d143f9ba | |
PrivateBin Translator Bot | 7467c7998c | |
PrivateBin Translator Bot | 979dc58575 | |
PrivateBin Translator Bot | 41a3748656 | |
El RIDO | c5704b445a | |
El RIDO | c172cde994 | |
El RIDO | 7d070fe3a4 | |
PrivateBin Translator Bot | 28a05abfc5 | |
PrivateBin Translator Bot | 456e62f29b | |
El RIDO | 63b2526ee7 | |
El RIDO | dd8aa4f8fb | |
El RIDO | 6dddf808c6 | |
El RIDO | eb59f3a4f3 | |
El RIDO | aad975a721 | |
El RIDO | 5c29619fee | |
J. Fernando LAGRANGE | f797311650 |
|
@ -26,8 +26,6 @@ js/test/ export-ignore
|
|||
.vscode export-ignore
|
||||
codacy-analysis.yml export-ignore
|
||||
crowdin.yml export-ignore
|
||||
composer.json export-ignore
|
||||
composer.lock export-ignore
|
||||
BADGES.md export-ignore
|
||||
CODE_OF_CONDUCT.md export-ignore
|
||||
Makefile export-ignore
|
||||
|
|
17
CHANGELOG.md
17
CHANGELOG.md
|
@ -1,14 +1,23 @@
|
|||
# PrivateBin version history
|
||||
|
||||
## 1.7.2 (not yet released)
|
||||
* ADDED: Allow use of `shortenviayourls` in query parameters (#1267)
|
||||
* CHANGED: "Send" button now labeled "Create" (#946)
|
||||
* FIXED: Add cache control headers also to API calls (#1263)
|
||||
* FIXED: Shortened paste URL does not appear in email (#606)
|
||||
|
||||
## 1.7.1 (2024-02-11)
|
||||
* FIXED: zlib 1.3.1 wasm file reference
|
||||
|
||||
## 1.7.0 (2024-02-11)
|
||||
* ADDED: Translations for Romanian
|
||||
* ADDED: Detect and report on damaged pastes (#1218)
|
||||
* CHANGED: Ask for confirmation, before loading burn after reading pastes #1237
|
||||
* CHANGED: Ask for confirmation, before loading burn after reading pastes (#1237)
|
||||
* CHANGED: Focus on password input in modal dialog
|
||||
* CHANGED: Upgrading libraries to: DOMpurify 3.0.8 & zlib 1.3.1
|
||||
* FIXED: Support more types of valid URLs for shorteners, incl. IDN ones (#1224)
|
||||
* FIXED: Email timezone buttons overlapping in some languages #1039
|
||||
* FIXED: Changing language mangles URL #1191
|
||||
* FIXED: Email timezone buttons overlapping in some languages (#1039)
|
||||
* FIXED: Changing language mangles URL (#1191)
|
||||
* FIXED: Needless reload when visiting default URL
|
||||
|
||||
## 1.6.2 (2023-12-15)
|
||||
|
@ -21,7 +30,7 @@
|
|||
|
||||
## 1.6.0 (2023-09-11)
|
||||
* ADDED: Translations for Japanese & Arabic
|
||||
* ADDED: Configuration option to disable Email button (#1164)
|
||||
* ADDED: Configuration option to disable email button (#1164)
|
||||
* CHANGED: Minimum required PHP version is 7.3, due to upgrading PHPunit (#707)
|
||||
* CHANGED: Removed PHP 5 polyfill for random_bytes()
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
* Felix J. Ogris - S3 Storage backend, script for data backend migrations, dropped singleton behaviour of data backends
|
||||
* Mounir Idrassi & J. Mozdzen - secure YOURLS integration
|
||||
* Felipe Nakandakari - enabled AWS SDK to use default credential provider chain in the S3 Storage backend
|
||||
* Aaron Sherber - cache control headers for API calls & use of `shortenviayourls` in query parameters
|
||||
|
||||
## Translations
|
||||
* Hexalyse - French
|
||||
|
|
6
Makefile
6
Makefile
|
@ -1,7 +1,7 @@
|
|||
.PHONY: all coverage coverage-js coverage-php doc doc-js doc-php increment sign test test-js test-php help
|
||||
|
||||
CURRENT_VERSION = 1.7.0
|
||||
VERSION ?= 1.7.1
|
||||
CURRENT_VERSION = 1.7.1
|
||||
VERSION ?= 1.7.2
|
||||
VERSION_FILES = index.php bin/ cfg/ *.md doc/Installation.md css/ i18n/ img/ js/package.json js/privatebin.js lib/ Makefile tpl/ tst/
|
||||
REGEX_CURRENT_VERSION := $(shell echo $(CURRENT_VERSION) | sed "s/\./\\\./g")
|
||||
REGEX_VERSION := $(shell echo $(VERSION) | sed "s/\./\\\./g")
|
||||
|
@ -17,7 +17,7 @@ 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 && XDEBUG_MODE=coverage phpunit 2> /dev/null
|
||||
cd tst/log/php-coverage-report && sed -i "s#$(CURDIR)/##g" *.html */*.html
|
||||
|
||||
doc: doc-js doc-php ## Generate all code documentation.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# [![PrivateBin](https://cdn.rawgit.com/PrivateBin/assets/master/images/preview/logoSmall.png)](https://privatebin.info/)
|
||||
|
||||
*Current version: 1.7.0*
|
||||
*Current version: 1.7.1*
|
||||
|
||||
**PrivateBin** is a minimalist, open source online
|
||||
[pastebin](https://en.wikipedia.org/wiki/Pastebin)
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 1.7.0 | :heavy_check_mark: |
|
||||
| < 1.7.0 | :x: |
|
||||
| 1.7.1 | :heavy_check_mark: |
|
||||
| < 1.7.1 | :x: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin;
|
||||
|
|
|
@ -254,8 +254,8 @@ dir = PATH "data"
|
|||
; Only use this if you allow short URL creation without credentials.
|
||||
; - Alternatively, using the parameters in this section ("signature" and
|
||||
; "apiurl"), "urlshortener" needs to point to the base URL of your PrivateBin
|
||||
; instance with "shortenviayourls?link=" appended. For example:
|
||||
; urlshortener = "${basepath}shortenviayourls?link="
|
||||
; instance with "?shortenviayourls&link=" appended. For example:
|
||||
; urlshortener = "${basepath}?shortenviayourls&link="
|
||||
; This URL will in turn call YOURLS on the server side, using the URL from
|
||||
; "apiurl" and the "access signature" from the "signature" parameters below.
|
||||
|
||||
|
|
|
@ -24,10 +24,10 @@
|
|||
"docs" : "https://privatebin.info/codedoc/"
|
||||
},
|
||||
"require" : {
|
||||
"php" : "^7.3 || ^8.0",
|
||||
"yzalis/identicon" : "2.0.0",
|
||||
"mlocati/ip-lib" : "1.18.0",
|
||||
"jdenticon/jdenticon": "1.0.2"
|
||||
"php": "^7.3 || ^8.0",
|
||||
"jdenticon/jdenticon": "1.0.2",
|
||||
"mlocati/ip-lib": "1.18.0",
|
||||
"yzalis/identicon": "2.0.0"
|
||||
},
|
||||
"suggest" : {
|
||||
"google/cloud-storage" : "1.32.0",
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "96f9b3968855bf9f45813d12568f1cac",
|
||||
"content-hash": "b76c0c25f93dc79c4525cb3c86e5af99",
|
||||
"packages": [
|
||||
{
|
||||
"name": "jdenticon/jdenticon",
|
||||
|
@ -802,16 +802,16 @@
|
|||
},
|
||||
{
|
||||
"name": "phpunit/phpunit",
|
||||
"version": "9.6.16",
|
||||
"version": "9.6.17",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||
"reference": "3767b2c56ce02d01e3491046f33466a1ae60a37f"
|
||||
"reference": "1a156980d78a6666721b7e8e8502fe210b587fcd"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3767b2c56ce02d01e3491046f33466a1ae60a37f",
|
||||
"reference": "3767b2c56ce02d01e3491046f33466a1ae60a37f",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1a156980d78a6666721b7e8e8502fe210b587fcd",
|
||||
"reference": "1a156980d78a6666721b7e8e8502fe210b587fcd",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -885,7 +885,7 @@
|
|||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.16"
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.17"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -901,7 +901,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-01-19T07:03:14+00:00"
|
||||
"time": "2024-02-23T13:14:51+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/cli-parser",
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
body {
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
/* When there is no script at all other */
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
/* CSS Reset from YUI 3.4.1 (build 4118) - Copyright 2011 Yahoo! Inc. All rights reserved.
|
||||
|
|
|
@ -201,7 +201,7 @@ CREATE INDEX parent ON prefix_comment(pasteid);
|
|||
CREATE TABLE prefix_config (
|
||||
id CHAR(16) NOT NULL, value TEXT, PRIMARY KEY (id)
|
||||
);
|
||||
INSERT INTO prefix_config VALUES('VERSION', '1.7.0');
|
||||
INSERT INTO prefix_config VALUES('VERSION', '1.7.1');
|
||||
```
|
||||
|
||||
In **PostgreSQL**, the `data`, `attachment`, `nickname` and `vizhash` columns
|
||||
|
@ -228,7 +228,12 @@ 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 first have to install the SDK from the installation
|
||||
directory of PrivateBin: `composer require google/cloud-storage`
|
||||
directory of PrivateBin:
|
||||
|
||||
```console
|
||||
composer require --no-update google/cloud-storage
|
||||
composer update --no-dev --optimize-autoloader
|
||||
```
|
||||
|
||||
You have to create a GCS bucket and specify the name as the model option `bucket`.
|
||||
Alternatively, you can set the name through the environment variable `PRIVATEBIN_GCS_BUCKET`.
|
||||
|
@ -246,7 +251,12 @@ the AWS SDK for PHP, but can also talk to a Rados gateway as part of a Ceph
|
|||
cluster.
|
||||
|
||||
To use this backend, you first have to install the SDK from the installation
|
||||
directory of PrivateBin: `composer require aws/aws-sdk-php`
|
||||
directory of PrivateBin:
|
||||
|
||||
```console
|
||||
composer require --no-update aws/aws-sdk-php
|
||||
composer update --no-dev --optimize-autoloader
|
||||
```
|
||||
|
||||
You have to create an S3 bucket on the Ceph cluster before using the S3 backend.
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ Primary key fingerprint: 28CA 7C96 4938 EA5C 1481 D42A E11B 7950 E9E1 83DB
|
|||
|
||||
For a more step-by-step guide in detail [see this FAQ](https://github.com/PrivateBin/PrivateBin/wiki/FAQ#how-can-i-securely-clonedownload-your-project).
|
||||
|
||||
SLSA verification can be performed using the [SLSA verifier](https://github.com/slsa-framework/slsa-verifier#verification-of-slsa-provenance).
|
||||
SLSA verification can be performed using the [SLSA verifier](https://github.com/slsa-framework/slsa-verifier?tab=readme-ov-file#verification-for-github-builders).
|
||||
|
||||
## Release process
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "جافاسكرِبت (JavaScript) مطلوب %s للعمل. نأسف للإزعاج.",
|
||||
"%s requires a modern browser to work.": "%s يتطلب متصفحًا حديثًا للعمل.",
|
||||
"New": "جديد",
|
||||
"Send": "إرسال",
|
||||
"Create": "أنشِئ",
|
||||
"Clone": "استنساخ",
|
||||
"Raw text": "نص خام",
|
||||
"Expires": "تنتهي",
|
||||
|
@ -215,6 +215,6 @@
|
|||
"Trying to shorten a URL that isn't pointing at our instance.": "محاولة تقصير عنوان URL لا يشير إلى خادمنا.",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "خطأ في الاتصال بـ YOURLS. ربما تكون هناك مشكلة في التضبيط، مثل \"apiurl\" أو \"التوقيع\" الخاطئ أو المفقود.",
|
||||
"Error parsing YOURLS response.": "خطأ في تحليل استجابة YOURLS.",
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
|
||||
"Yes, load it": "Yes, load it"
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "لا يمكن عرض اللصق احرقه بعد قراءته إلا مرة واحدة عند تحميله. هل تريد فتحه الآن؟",
|
||||
"Yes, load it": "نعم، حمله"
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Услугата %s се нуждае от JavaScript, за да работи. Съжаляваме за неудобството.",
|
||||
"%s requires a modern browser to work.": "%s се нуждае от съвременен браузър за да работи.",
|
||||
"New": "Създаване",
|
||||
"Send": "Изпрати",
|
||||
"Create": "Създай",
|
||||
"Clone": "Дублирай",
|
||||
"Raw text": "Чист текст",
|
||||
"Expires": "Изтича",
|
||||
|
@ -199,10 +199,10 @@
|
|||
"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": "Нов опит",
|
||||
"Showing raw text…": "Showing raw text…",
|
||||
"Notice:": "Notice:",
|
||||
"Notice:": "Известие:",
|
||||
"This link will expire after %s.": "This link will expire after %s.",
|
||||
"This link can only be accessed once, do not use back or refresh button in your browser.": "This link can only be accessed once, do not use back or refresh button in your browser.",
|
||||
"Link:": "Link:",
|
||||
"Link:": "Връзка:",
|
||||
"Recipient may become aware of your timezone, convert time to UTC?": "Recipient may become aware of your timezone, convert time to UTC?",
|
||||
"Use Current Timezone": "Use Current Timezone",
|
||||
"Convert To UTC": "Convert To UTC",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Cal JavaScript perquè %s funcioni. Em sap greu les molèsties.",
|
||||
"%s requires a modern browser to work.": "%s requereix un navegador modern per funcionar.",
|
||||
"New": "Nou",
|
||||
"Send": "Enviar",
|
||||
"Create": "Crear",
|
||||
"Clone": "Clona",
|
||||
"Raw text": "Text sense processar",
|
||||
"Expires": "Caducitat",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript hè richiestu per fà funziunà %s. Scusate per stu penseru.",
|
||||
"%s requires a modern browser to work.": "%s richiede un navigatore mudernu per funziunà.",
|
||||
"New": "Novu",
|
||||
"Send": "Mandà",
|
||||
"Create": "Creà",
|
||||
"Clone": "Duppione",
|
||||
"Raw text": "Testu grossu",
|
||||
"Expires": "Scadenza",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Pro fungování %s je vyžadován JavaScript. Omlouváme se za nepříjemnosti.",
|
||||
"%s requires a modern browser to work.": "%%s requires a modern browser to work.",
|
||||
"New": "Nový",
|
||||
"Send": "Odeslat",
|
||||
"Create": "Vytvořit",
|
||||
"Clone": "Klonovat",
|
||||
"Raw text": "Pouze Text",
|
||||
"Expires": "Expirace",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript ist eine Voraussetzung, um %s zu nutzen. Bitte entschuldige die Unannehmlichkeiten.",
|
||||
"%s requires a modern browser to work.": "%s setzt einen modernen Browser voraus, um funktionieren zu können.",
|
||||
"New": "Neu",
|
||||
"Send": "Senden",
|
||||
"Create": "Erstellen",
|
||||
"Clone": "Klonen",
|
||||
"Raw text": "Reiner Text",
|
||||
"Expires": "Ablaufzeit",
|
||||
|
@ -215,6 +215,6 @@
|
|||
"Trying to shorten a URL that isn't pointing at our instance.": "Versuch eine URL zu verkürzen, die nicht auf unsere Instanz zeigt.",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Fehler beim Aufruf von YOURLS. Wahrscheinlich ein Konfigurationsproblem, wie eine falsche oder fehlende \"apiurl\" oder \"signature\".",
|
||||
"Error parsing YOURLS response.": "Fehler beim Verarbeiten der YOURLS-Antwort.",
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Texte des \"Einmal\"-Typs können nach dem Herunterladen nur einmal angezeigt werden. Möchtest Du ihn jetzt öffnen?",
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Texte des \"Einmal\"-Typs können nach dem Öffnen nur einmal angezeigt werden. Möchtest Du ihn jetzt öffnen?",
|
||||
"Yes, load it": "Ja, jetzt öffnen"
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Η JavaScript είναι απαραίτητη για να λειτουργήσει το %s. Συγγνώμη για την ταλαιπωρία.",
|
||||
"%s requires a modern browser to work.": "%s απαιτεί σύγχρονο φυλλομετρητή (browser) για να λειτουργήσει.",
|
||||
"New": "Νέο",
|
||||
"Send": "Αποστολή",
|
||||
"Create": "Δημιουργία",
|
||||
"Clone": "Κλωνοποίηση",
|
||||
"Raw text": "Κείμενο",
|
||||
"Expires": "Λήγει",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript is required for %s to work. Sorry for the inconvenience.",
|
||||
"%s requires a modern browser to work.": "%s requires a modern browser to work.",
|
||||
"New": "New",
|
||||
"Send": "Send",
|
||||
"Create": "Create",
|
||||
"Clone": "Clone",
|
||||
"Raw text": "Raw text",
|
||||
"Expires": "Expires",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript es necesario para que %s funcione. Sentimos los inconvenientes ocasionados.",
|
||||
"%s requires a modern browser to work.": "%s requiere un navegador moderno para funcionar.",
|
||||
"New": "Nuevo",
|
||||
"Send": "Enviar",
|
||||
"Create": "Crear",
|
||||
"Clone": "Clonar",
|
||||
"Raw text": "Texto sin formato",
|
||||
"Expires": "Caducar en",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript on vajalik %s'i töötamiseks. Vabandame ebamugavuste pärast.",
|
||||
"%s requires a modern browser to work.": "%s vajab töötamiseks kaasaegset brauserit.",
|
||||
"New": "Uus",
|
||||
"Send": "Saada",
|
||||
"Create": "Loo",
|
||||
"Clone": "Klooni",
|
||||
"Raw text": "Lähtetekst",
|
||||
"Expires": "Aegub",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "%s vaatii JavaScriptiä toimiakseen. Anteeksi haitasta.",
|
||||
"%s requires a modern browser to work.": "%s vaatii modernin selaimen toimiakseen.",
|
||||
"New": "Uusi",
|
||||
"Send": "Lähetä",
|
||||
"Create": "Luo",
|
||||
"Clone": "Kloonaa",
|
||||
"Raw text": "Raaka teksti",
|
||||
"Expires": "Vanhenee",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript est requis pour faire fonctionner %s. Désolé pour cet inconvénient.",
|
||||
"%s requires a modern browser to work.": "%s nécessite un navigateur moderne pour fonctionner.",
|
||||
"New": "Nouveau",
|
||||
"Send": "Envoyer",
|
||||
"Create": "Créer",
|
||||
"Clone": "Cloner",
|
||||
"Raw text": "Texte brut",
|
||||
"Expires": "Expire",
|
||||
|
@ -215,6 +215,6 @@
|
|||
"Trying to shorten a URL that isn't pointing at our instance.": "Essayer de raccourcir une URL qui ne pointe pas vers notre instance.",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Erreur lors de l'appel de YOURLS. Peut-être un problème de configuration, comme \"apiurl\" ou \"signature\" manquant.",
|
||||
"Error parsing YOURLS response.": "Erreur d'analyse de la réponse YOURLS.",
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Effacer après la lecture des paste ne peut être affiché qu'une seule fois lors du chargement. Voulez-vous l'ouvrir maintenant ?",
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Les pastes de type \"Effacer après la lecture\" ne peuvent être affichés qu'une seule fois. Voulez-vous l'ouvrir maintenant ?",
|
||||
"Yes, load it": "Oui, chargez-le"
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "צריך JavaScript כדי לאפשר ל־%s לפעול. סליחה על חוסר הנוחות.",
|
||||
"%s requires a modern browser to work.": "%s דורש דפדפן מודרני כדי לפעול.",
|
||||
"New": "חדש",
|
||||
"Send": "שליחה",
|
||||
"Create": "צור",
|
||||
"Clone": "שכפול",
|
||||
"Raw text": "טקסט גולמי",
|
||||
"Expires": "Expires",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript is required for %s to work. Sorry for the inconvenience.",
|
||||
"%s requires a modern browser to work.": "%s requires a modern browser to work.",
|
||||
"New": "New",
|
||||
"Send": "Send",
|
||||
"Create": "Create",
|
||||
"Clone": "Clone",
|
||||
"Raw text": "Raw text",
|
||||
"Expires": "Expires",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript szükséges a %s működéséhez. Elnézést a fennakadásért.",
|
||||
"%s requires a modern browser to work.": "A %s működéséhez a jelenleginél újabb böngészőre van szükség.",
|
||||
"New": "Új",
|
||||
"Send": "Beküldöm!",
|
||||
"Create": "Létrehozás",
|
||||
"Clone": "Másol",
|
||||
"Raw text": "A nyers szöveg",
|
||||
"Expires": "Lejárati idő",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript diperlukan agar %s bekerja. Maaf untuk ketidaknyamanannya.",
|
||||
"%s requires a modern browser to work.": "%s memerlukan sebuah browser modern untuk bekerja.",
|
||||
"New": "Baru",
|
||||
"Send": "Kirim",
|
||||
"Create": "Buat baru",
|
||||
"Clone": "Klon",
|
||||
"Raw text": "Teks mentah",
|
||||
"Expires": "Kadaluarsa",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "%s funziona solo con JavaScript attivo. Ci dispiace per l'inconveniente.",
|
||||
"%s requires a modern browser to work.": "%s richiede un browser moderno e aggiornato per funzionare.",
|
||||
"New": "Nuovo",
|
||||
"Send": "Invia",
|
||||
"Create": "Crea",
|
||||
"Clone": "Clona",
|
||||
"Raw text": "Testo Raw",
|
||||
"Expires": "Scade",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "%s の動作にはJavaScriptが必要です。ご迷惑をおかけして申し訳ありません。",
|
||||
"%s requires a modern browser to work.": "%s の動作には最近のブラウザが必要です。",
|
||||
"New": "新規",
|
||||
"Send": "送信",
|
||||
"Create": "作成",
|
||||
"Clone": "複製",
|
||||
"Raw text": "未加工テキスト",
|
||||
"Expires": "有効期限",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript is required for %s to work. Sorry for the inconvenience.",
|
||||
"%s requires a modern browser to work.": "%s requires a modern browser to work.",
|
||||
"New": "cnino",
|
||||
"Send": "benji",
|
||||
"Create": "benji",
|
||||
"Clone": "fukpi",
|
||||
"Raw text": "vlapoi nalselrucyzu'e",
|
||||
"Expires": "vimcu",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript is required for %s to work. Sorry for the inconvenience.",
|
||||
"%s requires a modern browser to work.": "%s requires a modern browser to work.",
|
||||
"New": "New",
|
||||
"Send": "Send",
|
||||
"Create": "Create",
|
||||
"Clone": "Clone",
|
||||
"Raw text": "Raw text",
|
||||
"Expires": "Expires",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript is required for %s to work. Sorry for the inconvenience.",
|
||||
"%s requires a modern browser to work.": "%s requires a modern browser to work.",
|
||||
"New": "New",
|
||||
"Send": "Send",
|
||||
"Create": "Create",
|
||||
"Clone": "Clone",
|
||||
"Raw text": "Raw text",
|
||||
"Expires": "Expires",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "%s darbui reikalinga JavaScript. Atsiprašome už nepatogumus.",
|
||||
"%s requires a modern browser to work.": "%s savo darbui reikalauja šiuolaikinės naršyklės.",
|
||||
"New": "Naujas",
|
||||
"Send": "Siųsti",
|
||||
"Create": "Kurti",
|
||||
"Clone": "Dubliuoti",
|
||||
"Raw text": "Neapdorotas tekstas",
|
||||
"Expires": "Baigs galioti po",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript vereist om %s te laten werken. Sorry voor het ongemak.",
|
||||
"%s requires a modern browser to work.": "%s vereist een moderne browser om te kunnen werken.",
|
||||
"New": "Nieuw",
|
||||
"Send": "Verzenden",
|
||||
"Create": "Maak",
|
||||
"Clone": "Klonen",
|
||||
"Raw text": "Onbewerkte tekst",
|
||||
"Expires": "Verloopt",
|
||||
|
@ -180,7 +180,7 @@
|
|||
"Options": "Opties",
|
||||
"Shorten URL": "URL verkorten",
|
||||
"Editor": "Editor",
|
||||
"Preview": "Preview",
|
||||
"Preview": "Voorbeeld",
|
||||
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s vereist dat PATH eindigt in een '%s'. a.u.b. PATH updaten in je index.php.",
|
||||
"Decrypt": "Decoderen",
|
||||
"Enter password": "Voer het wachtwoord in",
|
||||
|
@ -215,6 +215,6 @@
|
|||
"Trying to shorten a URL that isn't pointing at our instance.": "Proberen om een URL te verkorten dat niet naar ons systeem wijst.",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Foutmelding ophalen YOURLS. Waarschijnlijk een configuratiefout, zoals een verkeerde of missende \"apiurl\" of \"signature\".",
|
||||
"Error parsing YOURLS response.": "Foutmelding bij parsen van YOURLS respons.",
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
|
||||
"Yes, load it": "Yes, load it"
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Brand na het lezen van de plagen kan slechts eenmaal worden weergegeven wanneer deze worden geladen. Wilt u het nu openen?",
|
||||
"Yes, load it": "Ja, laad het"
|
||||
}
|
||||
|
|
14
i18n/no.json
14
i18n/no.json
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Javascript kreves for at %s skal fungere. Beklager.",
|
||||
"%s requires a modern browser to work.": "%s krever en moderne nettleser for å fungere.",
|
||||
"New": "Ny",
|
||||
"Send": "Send",
|
||||
"Create": "Opprette",
|
||||
"Clone": "Kopier",
|
||||
"Raw text": "Ren tekst",
|
||||
"Expires": "Utgår",
|
||||
|
@ -211,10 +211,10 @@
|
|||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Besøk denne lenken for å se notatet. Hvis lenken deles med andre, vil de også kunne se notatet.",
|
||||
"URL shortener may expose your decrypt key in URL.": "URL forkorter kan avsløre dekrypteringsnøkkelen.",
|
||||
"Save paste": "Lagre utklipp",
|
||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
|
||||
"Yes, load it": "Yes, load it"
|
||||
"Your IP is not authorized to create pastes.": "Din IP er ikke autorisert til å opprette advarsler.",
|
||||
"Trying to shorten a URL that isn't pointing at our instance.": "Prøver å forkorte en URL som ikke peker i vår instans.",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Feil ved å ringe YOURLS. Sannsynligvis et konfigurasjonsproblem, som feil eller mangler, \"apiurl\" eller \"signatur\".",
|
||||
"Error parsing YOURLS response.": "Feil ved analyse av YOURLS svar.",
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Brenne etter lesing av pasta kan kun vises når den lastes inn. Vil du åpne den nå?",
|
||||
"Yes, load it": "Ja, last den"
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript es requesit per far foncionar %s. O planhèm per l’inconvenient.",
|
||||
"%s requires a modern browser to work.": "%s requerís un navigator modèrn per foncionar.",
|
||||
"New": "Nòu",
|
||||
"Send": "Mandar",
|
||||
"Create": "Mandar",
|
||||
"Clone": "Clonar",
|
||||
"Raw text": "Tèxte brut",
|
||||
"Expires": "Expira",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Do działania %sa jest wymagany JavaScript. Przepraszamy za tę niedogodność.",
|
||||
"%s requires a modern browser to work.": "%s wymaga do działania nowoczesnej przeglądarki.",
|
||||
"New": "Nowa",
|
||||
"Send": "Wyślij",
|
||||
"Create": "Stwórz",
|
||||
"Clone": "Sklonuj",
|
||||
"Raw text": "Czysty tekst",
|
||||
"Expires": "Wygasa za",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript é necessário para que %s funcione. Pedimos desculpas pela inconveniência.",
|
||||
"%s requires a modern browser to work.": "%s requer um navegador moderno para funcionar.",
|
||||
"New": "Novo",
|
||||
"Send": "Enviar",
|
||||
"Create": "Criar",
|
||||
"Clone": "Clonar",
|
||||
"Raw text": "Texto sem formato",
|
||||
"Expires": "Expirar em",
|
||||
|
|
90
i18n/ro.json
90
i18n/ro.json
|
@ -10,9 +10,9 @@
|
|||
"Vă rugăm să așteptați %d secundă între fiecare postare",
|
||||
"Vă rugăm să așteptați %d secunde între fiecare postare",
|
||||
"Vă rugăm să așteptați %d de secunde între fiecare postare",
|
||||
"Please wait %d seconds between each post. (3rd plural)",
|
||||
"Please wait %d seconds between each post. (4th plural)",
|
||||
"Please wait %d seconds between each post. (5th plural)"
|
||||
"Vă rugăm să așteptați %d de secunde între fiecare postare",
|
||||
"Vă rugăm să așteptați %d de secunde între fiecare postare",
|
||||
"Vă rugăm să așteptați %d de secunde între fiecare postare"
|
||||
],
|
||||
"Paste is limited to %s of encrypted data.": "Paste-ul este limitat la %s de date criptate.",
|
||||
"Invalid data.": "Date invalide.",
|
||||
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript este necesar pentru ca %s să funcționeze. Ne cerem scuze pentru neplăceri.",
|
||||
"%s requires a modern browser to work.": "%s necesită un browser modern pentru a funcționa.",
|
||||
"New": "Nou",
|
||||
"Send": "Trimiteți",
|
||||
"Create": "Creează",
|
||||
"Clone": "Clonați",
|
||||
"Raw text": "Text brut",
|
||||
"Expires": "Expiră",
|
||||
|
@ -39,57 +39,57 @@
|
|||
"%d secundă",
|
||||
"%d secunde",
|
||||
"%d de secunde",
|
||||
"%d seconds (3rd plural)",
|
||||
"%d seconds (4th plural)",
|
||||
"%d seconds (5th plural)"
|
||||
"%d de secunde",
|
||||
"%d de secunde",
|
||||
"%d de secunde"
|
||||
],
|
||||
"%d minutes": [
|
||||
"%d minut",
|
||||
"%d minute",
|
||||
"%d de minute",
|
||||
"%d minutes (3rd plural)",
|
||||
"%d minutes (4th plural)",
|
||||
"%d minutes (5th plural)"
|
||||
"%d de secunde",
|
||||
"%d de secunde",
|
||||
"%d de secunde"
|
||||
],
|
||||
"%d hours": [
|
||||
"%d oră",
|
||||
"%d ore",
|
||||
"%d de ore",
|
||||
"%d hours (3rd plural)",
|
||||
"%d hours (4th plural)",
|
||||
"%d hours (5th plural)"
|
||||
"%d de ore",
|
||||
"%d de ore",
|
||||
"%d de ore"
|
||||
],
|
||||
"%d days": [
|
||||
"%d zi",
|
||||
"%d zile",
|
||||
"%d de zile",
|
||||
"%d days (3rd plural)",
|
||||
"%d days (4th plural)",
|
||||
"%d days (5th plural)"
|
||||
"%d de zile",
|
||||
"%d de zile",
|
||||
"%d de zile"
|
||||
],
|
||||
"%d weeks": [
|
||||
"%d week (singular)",
|
||||
"%d săptămână",
|
||||
"%d săptămână",
|
||||
"%d săptămâni",
|
||||
"%d de săptămâni",
|
||||
"%d weeks (4th plural)",
|
||||
"%d weeks (5th plural)"
|
||||
"%d de săptămâni",
|
||||
"%d de săptămâni"
|
||||
],
|
||||
"%d months": [
|
||||
"%d lună",
|
||||
"%d luni",
|
||||
"%d de luni",
|
||||
"%d months (3rd plural)",
|
||||
"%d months (4th plural)",
|
||||
"%d months (5th plural)"
|
||||
"%d de luni",
|
||||
"%d de luni",
|
||||
"%d de luni"
|
||||
],
|
||||
"%d years": [
|
||||
"%d an",
|
||||
"%d ani",
|
||||
"%d de ani",
|
||||
"%d years (3rd plural)",
|
||||
"%d years (4th plural)",
|
||||
"%d years (5th plural)"
|
||||
"%d de ani",
|
||||
"%d de ani",
|
||||
"%d de ani"
|
||||
],
|
||||
"Never": "Niciodată",
|
||||
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Notă: Acesta este un serviciu de test: Datele ar putea fi șterse oricând. Vor muri niște pisicuțe dacă abuzați acest serviciu.",
|
||||
|
@ -97,41 +97,41 @@
|
|||
"Acest document va expira în %d secundă.",
|
||||
"Acest document va expira în %d secunde.",
|
||||
"Acest document va expira în %d de secunde.",
|
||||
"This document will expire in %d seconds. (3rd plural)",
|
||||
"This document will expire in %d seconds. (4th plural)",
|
||||
"This document will expire in %d seconds. (5th plural)"
|
||||
"Acest document va expira în %d de secunde.",
|
||||
"Acest document va expira în %d de secunde.",
|
||||
"Acest document va expira în %d de secunde."
|
||||
],
|
||||
"This document will expire in %d minutes.": [
|
||||
"This document will expire in %d minute. (singular)",
|
||||
"This document will expire in %d minutes. (1st plural)",
|
||||
"This document will expire in %d minutes. (2nd plural)",
|
||||
"This document will expire in %d minutes. (3rd plural)",
|
||||
"This document will expire in %d minutes. (4th plural)",
|
||||
"This document will expire in %d minutes. (5th plural)"
|
||||
"Acest document va expira în %d minut.",
|
||||
"Acest document va expira în %d minute.",
|
||||
"Acest document va expira în %d de minute.",
|
||||
"Acest document va expira în %d de minute.",
|
||||
"Acest document va expira în %d de minute.",
|
||||
"Acest document va expira în %d de minute."
|
||||
],
|
||||
"This document will expire in %d hours.": [
|
||||
"Acest document va expira în %d oră.",
|
||||
"Acest document va expira în %d ore.",
|
||||
"Acest document va expira în %d de ore.",
|
||||
"This document will expire in %d hours. (3rd plural)",
|
||||
"This document will expire in %d hours. (4th plural)",
|
||||
"This document will expire in %d hours. (5th plural)"
|
||||
"Acest document va expira în %d de ore.",
|
||||
"Acest document va expira în %d de ore.",
|
||||
"Acest document va expira în %d de ore."
|
||||
],
|
||||
"This document will expire in %d days.": [
|
||||
"Acest document va expira în %d zi.",
|
||||
"Acest document va expira în %d zile.",
|
||||
"Acest document va expira în %d de zile.",
|
||||
"This document will expire in %d days. (3rd plural)",
|
||||
"This document will expire in %d days. (4th plural)",
|
||||
"This document will expire in %d days. (5th plural)"
|
||||
"Acest document va expira în %d de zile.",
|
||||
"Acest document va expira în %d de zile.",
|
||||
"Acest document va expira în %d de zile."
|
||||
],
|
||||
"This document will expire in %d months.": [
|
||||
"Acest document va expira în %d lună.",
|
||||
"Acest document va expira în %d luni.",
|
||||
"Acest document va expira în %d de luni.",
|
||||
"This document will expire in %d months. (3rd plural)",
|
||||
"This document will expire in %d months. (4th plural)",
|
||||
"This document will expire in %d months. (5th plural)"
|
||||
"Acest document va expira în %d de luni.",
|
||||
"Acest document va expira în %d de luni.",
|
||||
"Acest document va expira în %d de luni."
|
||||
],
|
||||
"Please enter the password for this paste:": "Va rugăm să introduceți parola pentru acest paste:",
|
||||
"Could not decrypt data (Wrong key?)": "Nu s-au putut decripta datele (Cheie gresită?)",
|
||||
|
@ -215,6 +215,6 @@
|
|||
"Trying to shorten a URL that isn't pointing at our instance.": "Încercarea de a scurta un URL care nu direcționează spre instanța noastră.",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Eroare la apelarea YOURLS. Probabil o problemă de configurare, cum ar fi \"apiurl\" sau \"signature\" greșite sau lipsă.",
|
||||
"Error parsing YOURLS response.": "Eroare la analizarea răspunsului YOURLS.",
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
|
||||
"Yes, load it": "Yes, load it"
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Paste-urile care se șterg după citire pot fi afișate numai o dată după încărcare. Doriți să o deschideți acum?",
|
||||
"Yes, load it": "Da, deschide-o"
|
||||
}
|
||||
|
|
12
i18n/ru.json
12
i18n/ru.json
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Для работы %s требуется включенный JavaScript. Приносим извинения за неудобства.",
|
||||
"%s requires a modern browser to work.": "Для работы %s требуется более современный браузер.",
|
||||
"New": "Новая запись",
|
||||
"Send": "Отправить",
|
||||
"Create": "Создать",
|
||||
"Clone": "Дублировать",
|
||||
"Raw text": "Исходный текст",
|
||||
"Expires": "Удалить через",
|
||||
|
@ -212,9 +212,9 @@
|
|||
"URL shortener may expose your decrypt key in URL.": "Сервис сокращения ссылок может получить ваш ключ расшифровки из ссылки.",
|
||||
"Save paste": "Сохранить запись",
|
||||
"Your IP is not authorized to create pastes.": "Вашему IP адресу не разрешено создавать записи.",
|
||||
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
|
||||
"Yes, load it": "Yes, load it"
|
||||
"Trying to shorten a URL that isn't pointing at our instance.": "Попытка сократить URL, который указывает не на наш сервер.",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Ошибка обращения к YOURLS. Возможно в конфигурации допущена ошибка, например неверный или отсутствующий параметр \"apiurl\" или \"signature\".",
|
||||
"Error parsing YOURLS response.": "Ошибка разбора ответа от YOURLS.",
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Записи, удаляемые после прочтения, могут быть отображены после загрузки только один раз. Вы хотите открыть её сейчас?",
|
||||
"Yes, load it": "Да, загрузить"
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Na fungovanie %s je potrebný JavaScript. Ospravedlňujeme sa za nepríjemnosti.",
|
||||
"%s requires a modern browser to work.": "%s vyžaduje na fungovanie moderný prehliadač.",
|
||||
"New": "Nový",
|
||||
"Send": "Odoslať",
|
||||
"Create": "Vytvoriť",
|
||||
"Clone": "Klonovať",
|
||||
"Raw text": "Surový text",
|
||||
"Expires": "Expirácia",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Da %s deluje, moraš vklopiti JavaScript. Oprosti za povročene nevšečnosti.",
|
||||
"%s requires a modern browser to work.": "%s za svoje delovanje potrebuje moderen brskalnik.",
|
||||
"New": "Nov prilepek",
|
||||
"Send": "Pošlji",
|
||||
"Create": "Ustvari",
|
||||
"Clone": "Kloniraj",
|
||||
"Raw text": "Surov tekst",
|
||||
"Expires": "Poteče",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript is required for %s to work. Sorry for the inconvenience.",
|
||||
"%s requires a modern browser to work.": "%s requires a modern browser to work.",
|
||||
"New": "New",
|
||||
"Send": "Send",
|
||||
"Create": "Skapa",
|
||||
"Clone": "Clone",
|
||||
"Raw text": "Raw text",
|
||||
"Expires": "Expires",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "จำเป็นต้องใช้ JavaScript เพื่อให้ %s สามารถทำงานได้ ขออภัยในความไม่สะดวก",
|
||||
"%s requires a modern browser to work.": "%s ต้องใช้เบราว์เซอร์สมัยใหม่ถึงจะสามารถใช้งานได้",
|
||||
"New": "ใหม่",
|
||||
"Send": "ส่ง",
|
||||
"Create": "สร้าง",
|
||||
"Clone": "โคลน",
|
||||
"Raw text": "ข้อความล้วน",
|
||||
"Expires": "หมดอายุ",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript %s 'in çalışması için gereklidir. Rahatsızlıktan dolayı özür dileriz.",
|
||||
"%s requires a modern browser to work.": "%s çalışmak için çağdaş bir tarayıcı gerektirir.",
|
||||
"New": "Yeni",
|
||||
"Send": "Gönder",
|
||||
"Create": "Oluştur",
|
||||
"Clone": "Kopyala",
|
||||
"Raw text": "Açık yazı",
|
||||
"Expires": "Süre Sonu",
|
||||
|
|
12
i18n/uk.json
12
i18n/uk.json
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "Для роботи %s потрібен увімкнутий JavaScript. Вибачте.",
|
||||
"%s requires a modern browser to work.": "Для роботи %s потрібен більш сучасний переглядач.",
|
||||
"New": "Новий допис",
|
||||
"Send": "Відправити",
|
||||
"Create": "Створити",
|
||||
"Clone": "Дублювати",
|
||||
"Raw text": "Початковий текст",
|
||||
"Expires": "Вилучити через",
|
||||
|
@ -212,9 +212,9 @@
|
|||
"URL shortener may expose your decrypt key in URL.": "Сервіс скорочення посилань може викрити ваш ключ дешифрування з URL.",
|
||||
"Save paste": "Зберегти вставку",
|
||||
"Your IP is not authorized to create pastes.": "Вашому IP не дозволено створювати вставки.",
|
||||
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||
"Error parsing YOURLS response.": "Error parsing YOURLS response.",
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
|
||||
"Yes, load it": "Yes, load it"
|
||||
"Trying to shorten a URL that isn't pointing at our instance.": "Спроба скоротити URL, який не вказує на наш екземпляр.",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Помилка виклику YOURLS. Ймовірно проблема з конфігурацією, наприклад \"apiurl\" чи \"signature\".",
|
||||
"Error parsing YOURLS response.": "Помилка розбору відповіді YOURLS.",
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Спалити після вставки читання можна вивести лише один раз під час завантаження. Відкрити його зараз?",
|
||||
"Yes, load it": "Так, завантажити"
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"JavaScript is required for %s to work. Sorry for the inconvenience.": "%s 需要 JavaScript 来进行加解密。 给你带来的不便敬请谅解。",
|
||||
"%s requires a modern browser to work.": "%s 需要在现代浏览器上工作。",
|
||||
"New": "新建",
|
||||
"Send": "送出",
|
||||
"Create": "创建",
|
||||
"Clone": "复制",
|
||||
"Raw text": "纯文本",
|
||||
"Expires": "有效期",
|
||||
|
@ -215,6 +215,6 @@
|
|||
"Trying to shorten a URL that isn't pointing at our instance.": "尝试缩短一个不指向我们实例的URL。",
|
||||
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "调用 YOURLS 时出错。可能是配置问题,例如“apiurl”或“signature”错误或缺失。",
|
||||
"Error parsing YOURLS response.": "解析 YOURLS 响应时出错。",
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
|
||||
"Yes, load it": "Yes, load it"
|
||||
"Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "读取粘贴后只能在加载时显示一次。您想现在打开吗?",
|
||||
"Yes, load it": "是的,加载它"
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
// change this, if your php files and data is outside of your webservers document root
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "privatebin",
|
||||
"version": "1.7.0",
|
||||
"version": "1.7.1",
|
||||
"description": "PrivateBin is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted in the browser using 256 bit AES in Galois Counter mode (GCM).",
|
||||
"main": "privatebin.js",
|
||||
"directories": {
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
* @see {@link https://github.com/PrivateBin/PrivateBin}
|
||||
* @copyright 2012 Sébastien SAUVAGE ({@link http://sebsauvage.net})
|
||||
* @license {@link https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License}
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
* @name PrivateBin
|
||||
* @namespace
|
||||
*/
|
||||
|
@ -3965,7 +3965,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
|
|||
}
|
||||
emailBody += I18n._('Link:');
|
||||
emailBody += EOL;
|
||||
emailBody += `${window.location.href}`;
|
||||
emailBody += $('#pasteurl').attr('href'); // might have been shortened
|
||||
return emailBody;
|
||||
}
|
||||
|
||||
|
|
|
@ -77,7 +77,7 @@ describe('TopNav', function () {
|
|||
'<li id="attach" class="hidden">Attach a file</li><li>' +
|
||||
'<a id="formatter" href="#" class="hidden">Format</a>' +
|
||||
'</li><li><button id="sendbutton" type="button" ' +
|
||||
'class="hidden">Send</button></li></ul></div></nav>'
|
||||
'class="hidden">Create</button></li></ul></div></nav>'
|
||||
);
|
||||
$.PrivateBin.TopNav.init();
|
||||
results.push(
|
||||
|
|
|
@ -26,9 +26,9 @@
|
|||
|
||||
let buff;
|
||||
if (typeof fs === 'object') {
|
||||
buff = fs.readFileSync('zlib-1.3.wasm');
|
||||
buff = fs.readFileSync('zlib-1.3.1.wasm');
|
||||
} else {
|
||||
const resp = await fetch('js/zlib-1.3.wasm');
|
||||
const resp = await fetch('js/zlib-1.3.1.wasm');
|
||||
buff = await resp.arrayBuffer();
|
||||
}
|
||||
const module = await WebAssembly.compile(buff);
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin;
|
||||
|
@ -28,7 +28,7 @@ class Controller
|
|||
*
|
||||
* @const string
|
||||
*/
|
||||
const VERSION = '1.7.0';
|
||||
const VERSION = '1.7.1';
|
||||
|
||||
/**
|
||||
* minimal required PHP version
|
||||
|
@ -143,6 +143,8 @@ class Controller
|
|||
break;
|
||||
}
|
||||
|
||||
$this->_setCacheHeaders();
|
||||
|
||||
// output JSON or HTML
|
||||
if ($this->_request->isJsonApiCall()) {
|
||||
header('Content-type: ' . Request::MIME_JSON);
|
||||
|
@ -178,6 +180,22 @@ class Controller
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Turn off browser caching
|
||||
*
|
||||
* @access private
|
||||
*/
|
||||
private function _setCacheHeaders()
|
||||
{
|
||||
// set headers to disable caching
|
||||
$time = gmdate('D, d M Y H:i:s \G\M\T');
|
||||
header('Cache-Control: no-store, no-cache, no-transform, must-revalidate');
|
||||
header('Pragma: no-cache');
|
||||
header('Expires: ' . $time);
|
||||
header('Last-Modified: ' . $time);
|
||||
header('Vary: Accept');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store new paste or comment
|
||||
*
|
||||
|
@ -343,13 +361,6 @@ class Controller
|
|||
*/
|
||||
private function _view()
|
||||
{
|
||||
// set headers to disable caching
|
||||
$time = gmdate('D, d M Y H:i:s \G\M\T');
|
||||
header('Cache-Control: no-store, no-cache, no-transform, must-revalidate');
|
||||
header('Pragma: no-cache');
|
||||
header('Expires: ' . $time);
|
||||
header('Last-Modified: ' . $time);
|
||||
header('Vary: Accept');
|
||||
header('Content-Security-Policy: ' . $this->_conf->getKey('cspheader'));
|
||||
header('Cross-Origin-Resource-Policy: same-origin');
|
||||
header('Cross-Origin-Embedder-Policy: require-corp');
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin\Data;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin\Data;
|
||||
|
@ -55,7 +55,6 @@ class Database extends AbstractData
|
|||
* @access public
|
||||
* @param array $options
|
||||
* @throws Exception
|
||||
* @return
|
||||
*/
|
||||
public function __construct(array $options)
|
||||
{
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin\Data;
|
||||
|
@ -66,7 +66,6 @@ class Filesystem extends AbstractData
|
|||
*
|
||||
* @access public
|
||||
* @param array $options
|
||||
* @return
|
||||
*/
|
||||
public function __construct(array $options)
|
||||
{
|
||||
|
|
|
@ -47,7 +47,6 @@ class GoogleCloudStorage extends AbstractData
|
|||
*
|
||||
* @access public
|
||||
* @param array $options
|
||||
* @return
|
||||
*/
|
||||
public function __construct(array $options)
|
||||
{
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* an S3 compatible data backend for PrivateBin with CEPH/RadosGW in mind
|
||||
* see https://docs.ceph.com/en/latest/radosgw/s3/php/
|
||||
* based on lib/Data/GoogleCloudStorage.php from PrivateBin version 1.7.0
|
||||
* based on lib/Data/GoogleCloudStorage.php from PrivateBin version 1.7.1
|
||||
*
|
||||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2022 Felix J. Ogris (https://ogris.de/)
|
||||
|
@ -78,7 +78,6 @@ class S3Storage extends AbstractData
|
|||
*
|
||||
* @access public
|
||||
* @param array $options
|
||||
* @return
|
||||
*/
|
||||
public function __construct(array $options)
|
||||
{
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin;
|
||||
|
|
22
lib/I18n.php
22
lib/I18n.php
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin;
|
||||
|
@ -81,11 +81,11 @@ class I18n
|
|||
*
|
||||
* @access public
|
||||
* @static
|
||||
* @param string $messageId
|
||||
* @param string|array $messageId
|
||||
* @param mixed $args one or multiple parameters injected into placeholders
|
||||
* @return string
|
||||
*/
|
||||
public static function _($messageId)
|
||||
public static function _($messageId, ...$args)
|
||||
{
|
||||
return forward_static_call_array('PrivateBin\I18n::translate', func_get_args());
|
||||
}
|
||||
|
@ -95,16 +95,16 @@ class I18n
|
|||
*
|
||||
* @access public
|
||||
* @static
|
||||
* @param string $messageId
|
||||
* @param string|array $messageId
|
||||
* @param mixed $args one or multiple parameters injected into placeholders
|
||||
* @return string
|
||||
*/
|
||||
public static function translate($messageId)
|
||||
public static function translate($messageId, ...$args)
|
||||
{
|
||||
if (empty($messageId)) {
|
||||
return $messageId;
|
||||
}
|
||||
if (count(self::$_translations) === 0) {
|
||||
if (empty(self::$_translations)) {
|
||||
self::loadTranslations();
|
||||
}
|
||||
$messages = $messageId;
|
||||
|
@ -114,7 +114,7 @@ class I18n
|
|||
if (!array_key_exists($messageId, self::$_translations)) {
|
||||
self::$_translations[$messageId] = $messages;
|
||||
}
|
||||
$args = func_get_args();
|
||||
array_unshift($args, $messageId);
|
||||
if (is_array(self::$_translations[$messageId])) {
|
||||
$number = (int) $args[1];
|
||||
$key = self::_getPluralForm($number);
|
||||
|
@ -130,11 +130,9 @@ class I18n
|
|||
}
|
||||
// encode any non-integer arguments and the message ID, if it doesn't contain a link
|
||||
$argsCount = count($args);
|
||||
if ($argsCount > 1) {
|
||||
for ($i = 0; $i < $argsCount; ++$i) {
|
||||
if (($i > 0 && !is_int($args[$i])) || strpos($args[0], '<a') === false) {
|
||||
$args[$i] = self::encode($args[$i]);
|
||||
}
|
||||
for ($i = 0; $i < $argsCount; ++$i) {
|
||||
if ($i > 0 ? !is_int($args[$i]) : strpos($args[0], '<a') === false) {
|
||||
$args[$i] = self::encode($args[$i]);
|
||||
}
|
||||
}
|
||||
return call_user_func_array('sprintf', $args);
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin\Model;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin\Model;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin\Model;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin\Persistence;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin\Persistence;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin\Persistence;
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin\Persistence;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin;
|
||||
|
@ -143,7 +143,7 @@ class Request
|
|||
} elseif (array_key_exists('jsonld', $this->_params) && !empty($this->_params['jsonld'])) {
|
||||
$this->_operation = 'jsonld';
|
||||
} elseif (array_key_exists('link', $this->_params) && !empty($this->_params['link'])) {
|
||||
if (strpos($this->getRequestUri(), '/shortenviayourls') !== false) {
|
||||
if (strpos($this->getRequestUri(), '/shortenviayourls') !== false || array_key_exists('shortenviayourls', $this->_params)) {
|
||||
$this->_operation = 'yourlsproxy';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin;
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
* @link https://sebsauvage.net/wiki/doku.php?id=php:vizhash_gd
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 0.0.5 beta PrivateBin 1.7.0
|
||||
* @version 0.0.5 beta PrivateBin 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @link https://github.com/PrivateBin/PrivateBin
|
||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||
* @version 1.7.0
|
||||
* @version 1.7.1
|
||||
*/
|
||||
|
||||
namespace PrivateBin;
|
||||
|
|
|
@ -55,7 +55,7 @@ if ($ZEROBINCOMPATIBILITY) :
|
|||
<?php
|
||||
endif;
|
||||
?>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/zlib-1.3.1.js" integrity="sha512-VL3lLnt8EexTr22ze4a4HfVghpgY48c/Lhf4CcQa8bgYaIRRPjV1nP7EA8RiciGoXXQ1IeiU7tjrclPeVEfxOQ==" crossorigin="anonymous"></script>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/zlib-1.3.1.js" integrity="sha512-Z90oppVx/mn0DG2k9airjFVQuliELlXLeT3SRiO6MLiUSbhGlAq+UFwmYbG4i9mwW87dkG8fgJPapGwnUq7Osg==" crossorigin="anonymous"></script>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/base-x-4.0.0.js" integrity="sha512-nNPg5IGCwwrveZ8cA/yMGr5HiRS5Ps2H+s0J/mKTPjCPWUgFGGw7M5nqdnPD3VsRwCVysUh3Y8OWjeSKGkEQJQ==" crossorigin="anonymous"></script>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/rawinflate-0.3.js" integrity="sha512-g8uelGgJW9A/Z1tB6Izxab++oj5kdD7B4qC7DHwZkB6DGMXKyzx7v5mvap2HXueI2IIn08YlRYM56jwWdm2ucQ==" crossorigin="anonymous"></script>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/bootstrap-3.4.1.js" integrity="sha512-oBTprMeNEKCnqfuqKd6sbvFzmFQtlXS3e0C/RGFV0hD6QzhHV+ODfaQbAlmY6/q0ubbwlAM/nCJjkrgA3waLzg==" crossorigin="anonymous"></script>
|
||||
|
@ -73,7 +73,7 @@ endif;
|
|||
?>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/purify-3.0.8.js" integrity="sha512-wWBDKh5wYGtJ1Df+PPZIn59jHVBnJ4/Yb2W/pVnzaXab8cmlZnHVx+FEBGu5JX39s3P2Qlt+aNQou0XnjW86hg==" crossorigin="anonymous"></script>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/legacy.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-LYos+qXHIRqFf5ZPNphvtTB0cgzHUizu2wwcOwcwz/VIpRv9lpcBgPYz4uq6jx0INwCAj6Fbnl5HoKiLufS2jg==" crossorigin="anonymous"></script>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-w5YHEFVx8IcurkgsVsaRFwO+0u9HDNrwAE+BUS3mnFQLjJ6Ti3hzQdguL1exCG3rY85drvHcGSj/FJWmHFxudA==" crossorigin="anonymous"></script>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-B5PWlo7wh39YRHm8rkP5KUyJkoBgL1/TY7ldx6d041+L20/0QLuCN3V2FUK0BpvOUl1CRb7IHbnS80HFMoGFrg==" crossorigin="anonymous"></script>
|
||||
<!-- icon -->
|
||||
<link rel="apple-touch-icon" href="<?php echo I18n::encode($BASEPATH); ?>img/apple-touch-icon.png" sizes="180x180" />
|
||||
<link rel="icon" type="image/png" href="img/favicon-32x32.png" sizes="32x32" />
|
||||
|
@ -209,7 +209,7 @@ endif;
|
|||
if ($isPage) :
|
||||
?>
|
||||
<button id="sendbutton" type="button" class="hidden btn btn-<?php echo $isDark ? 'warning' : 'primary'; ?> navbar-btn">
|
||||
<span class="glyphicon glyphicon-upload" aria-hidden="true"></span> <?php echo I18n::_('Send'), PHP_EOL;
|
||||
<span class="glyphicon glyphicon-upload" aria-hidden="true"></span> <?php echo I18n::_('Create'), PHP_EOL;
|
||||
else :
|
||||
?>
|
||||
<button id="newbutton" type="button" class="hidden btn btn-<?php echo $isDark ? 'warning' : 'default'; ?> navbar-btn">
|
||||
|
@ -561,7 +561,7 @@ if ($isPage) :
|
|||
else :
|
||||
?>
|
||||
<button id="sendbutton" type="button" class="hidden btn btn-<?php echo $isDark ? 'warning' : 'primary'; ?>">
|
||||
<span class="glyphicon glyphicon-upload" aria-hidden="true"></span> <?php echo I18n::_('Send'), PHP_EOL;
|
||||
<span class="glyphicon glyphicon-upload" aria-hidden="true"></span> <?php echo I18n::_('Create'), PHP_EOL;
|
||||
endif;
|
||||
?>
|
||||
</button>
|
||||
|
|
|
@ -34,7 +34,7 @@ if ($ZEROBINCOMPATIBILITY):
|
|||
<?php
|
||||
endif;
|
||||
?>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/zlib-1.3.1.js" integrity="sha512-VL3lLnt8EexTr22ze4a4HfVghpgY48c/Lhf4CcQa8bgYaIRRPjV1nP7EA8RiciGoXXQ1IeiU7tjrclPeVEfxOQ==" crossorigin="anonymous"></script>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/zlib-1.3.1.js" integrity="sha512-Z90oppVx/mn0DG2k9airjFVQuliELlXLeT3SRiO6MLiUSbhGlAq+UFwmYbG4i9mwW87dkG8fgJPapGwnUq7Osg==" crossorigin="anonymous"></script>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/base-x-4.0.0.js" integrity="sha512-nNPg5IGCwwrveZ8cA/yMGr5HiRS5Ps2H+s0J/mKTPjCPWUgFGGw7M5nqdnPD3VsRwCVysUh3Y8OWjeSKGkEQJQ==" crossorigin="anonymous"></script>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/rawinflate-0.3.js" integrity="sha512-g8uelGgJW9A/Z1tB6Izxab++oj5kdD7B4qC7DHwZkB6DGMXKyzx7v5mvap2HXueI2IIn08YlRYM56jwWdm2ucQ==" crossorigin="anonymous"></script>
|
||||
<?php
|
||||
|
@ -51,7 +51,7 @@ endif;
|
|||
?>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/purify-3.0.8.js" integrity="sha512-wWBDKh5wYGtJ1Df+PPZIn59jHVBnJ4/Yb2W/pVnzaXab8cmlZnHVx+FEBGu5JX39s3P2Qlt+aNQou0XnjW86hg==" crossorigin="anonymous"></script>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/legacy.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-LYos+qXHIRqFf5ZPNphvtTB0cgzHUizu2wwcOwcwz/VIpRv9lpcBgPYz4uq6jx0INwCAj6Fbnl5HoKiLufS2jg==" crossorigin="anonymous"></script>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-w5YHEFVx8IcurkgsVsaRFwO+0u9HDNrwAE+BUS3mnFQLjJ6Ti3hzQdguL1exCG3rY85drvHcGSj/FJWmHFxudA==" crossorigin="anonymous"></script>
|
||||
<script type="text/javascript" data-cfasync="false" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-B5PWlo7wh39YRHm8rkP5KUyJkoBgL1/TY7ldx6d041+L20/0QLuCN3V2FUK0BpvOUl1CRb7IHbnS80HFMoGFrg==" crossorigin="anonymous"></script>
|
||||
<!-- icon -->
|
||||
<link rel="apple-touch-icon" href="img/apple-touch-icon.png?<?php echo rawurlencode($VERSION); ?>" sizes="180x180" />
|
||||
<link rel="icon" type="image/png" href="img/favicon-32x32.png?<?php echo rawurlencode($VERSION); ?>" sizes="32x32" />
|
||||
|
@ -125,7 +125,7 @@ endif;
|
|||
<div id="toolbar">
|
||||
<button id="newbutton" class="reloadlink hidden"><img src="img/icon_new.png" width="11" height="15" alt="" /><?php echo I18n::_('New'); ?></button>
|
||||
<button id="retrybutton" class="reloadlink hidden"><?php echo I18n::_('Retry'), PHP_EOL; ?></button>
|
||||
<button id="sendbutton" class="hidden"><img src="img/icon_send.png" width="18" height="15" alt="" /><?php echo I18n::_('Send'); ?></button>
|
||||
<button id="sendbutton" class="hidden"><img src="img/icon_send.png" width="18" height="15" alt="" /><?php echo I18n::_('Create'); ?></button>
|
||||
<button id="clonebutton" class="hidden"><img src="img/icon_clone.png" width="15" height="17" alt="" /><?php echo I18n::_('Clone'); ?></button>
|
||||
<button id="rawtextbutton" class="hidden"><img src="img/icon_raw.png" width="15" height="15" alt="" /><?php echo I18n::_('Raw text'); ?></button>
|
||||
<button id="downloadtextbutton" class="hidden"><?php echo I18n::_('Save paste'), PHP_EOL; ?></button>
|
||||
|
|
|
@ -285,26 +285,39 @@ class JsonApiTest extends TestCase
|
|||
|
||||
/**
|
||||
* @runInSeparateProcess
|
||||
* @dataProvider baseUriProvider
|
||||
*/
|
||||
public function testShortenViaYourls()
|
||||
public function testShortenViaYourls($baseUri)
|
||||
{
|
||||
$mock_yourls_service = $this->_path . DIRECTORY_SEPARATOR . 'yourls.json';
|
||||
$options = parse_ini_file(CONF, true);
|
||||
$options['main']['basepath'] = 'https://example.com/path'; // missing slash gets added by Configuration constructor
|
||||
$options['main']['urlshortener'] = 'https://example.com/path/shortenviayourls?link=';
|
||||
$options['main']['urlshortener'] = 'https://example.com' . $baseUri . 'link=';
|
||||
$options['yourls']['apiurl'] = $mock_yourls_service;
|
||||
Helper::createIniFile(CONF, $options);
|
||||
|
||||
// the real service answer is more complex, but we only look for the shorturl & statusCode
|
||||
file_put_contents($mock_yourls_service, '{"shorturl":"https:\/\/example.com\/1","statusCode":200}');
|
||||
|
||||
$_SERVER['REQUEST_URI'] = '/path/shortenviayourls?link=https%3A%2F%2Fexample.com%2Fpath%2F%3Ffoo%23bar';
|
||||
$_SERVER['REQUEST_URI'] = $baseUri . 'link=https%3A%2F%2Fexample.com%2Fpath%2F%3Ffoo%23bar';
|
||||
$_GET['link'] = 'https://example.com/path/?foo#bar';
|
||||
if (strpos($baseUri, '?shortenviayourls') !== false) {
|
||||
$_GET['shortenviayourls'] = null;
|
||||
}
|
||||
ob_start();
|
||||
new Controller;
|
||||
$content = ob_get_contents();
|
||||
ob_end_clean();
|
||||
$this->assertStringContainsString('id="pasteurl" href="https://example.com/1"', $content, 'outputs shortened URL correctly');
|
||||
$this->assertStringContainsString('id="pasteurl" href="https://example.com/1"', $content, "'{$baseUri}' outputs shortened URL correctly");
|
||||
}
|
||||
|
||||
public function baseUriProvider()
|
||||
{
|
||||
return array(
|
||||
array('/path/shortenviayourls?'),
|
||||
array('/path/index.php/shortenviayourls?'),
|
||||
array('/path?shortenviayourls&'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue