diff --git a/.gitignore b/.gitignore
index 0d18ab0bd..e70f651f5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,12 +1,11 @@
favicon.*
-.htconfig.php
-.htpreconfig.php
+/.htconfig.php
+/.htpreconfig.php
\#*
*.log
*.out
*.version*
home.html
-
*~
robots.txt
@@ -74,3 +73,6 @@ venv/
#ignore filesystem storage default path
/storage
+
+#Ignore log folder
+/log
diff --git a/.travis.yml b/.travis.yml
index c66457325..e2aa84f5c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -19,6 +19,11 @@ before_script:
- cp config/local-sample.config.php config/local.config.php
- mysql -e 'CREATE DATABASE IF NOT EXISTS test;'
- mysql -utravis test < database.sql
- - echo "extension=redis.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
- - echo "extension=memcached.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
+ - pecl channel-update pecl.php.net
+ - pecl config-set preferred_state beta
+ - if [[ $TRAVIS_PHP_VERSION != "7.1" ]]; then echo yes | pecl upgrade apcu; fi
+ - if [[ $TRAVIS_PHP_VERSION != "7.1" ]]; then phpenv config-add .travis/apcu.ini; fi
+ - phpenv config-add .travis/redis.ini
+ - phpenv config-add .travis/memcached.ini
+
after_success: bash <(curl -s https://codecov.io/bash)
diff --git a/.travis/apcu.ini b/.travis/apcu.ini
new file mode 100644
index 000000000..92598662c
--- /dev/null
+++ b/.travis/apcu.ini
@@ -0,0 +1,4 @@
+extension="apcu.so"
+
+apc.enabled = 1
+apc.enable_cli = 1
\ No newline at end of file
diff --git a/.travis/memcached.ini b/.travis/memcached.ini
new file mode 100644
index 000000000..c9a2ff0c9
--- /dev/null
+++ b/.travis/memcached.ini
@@ -0,0 +1 @@
+extension="memcached.so"
\ No newline at end of file
diff --git a/.travis/redis.ini b/.travis/redis.ini
new file mode 100644
index 000000000..ab995b837
--- /dev/null
+++ b/.travis/redis.ini
@@ -0,0 +1 @@
+extension="redis.so"
\ No newline at end of file
diff --git a/CHANGELOG b/CHANGELOG
index 127f7e68e..1fa98ee87 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,7 +1,78 @@
+Version 2019.06 (2019-06-23)
+ Friendica Core:
+ Update to the tranlation (CS, DE, EN-GB, EN-US, ET, FR, IT, PL, PT-BR, SV) [translation teams]
+ Update to the documentation [nupplaphil, realkinetix, MrPetovan]
+ Update to the themes (frio, vier) [BinkaDroid, MrPetovan, tobiasd]
+ Enhancements to the API [annando, MrPetovan]
+ Enhancements to the way reshares are handled [annando]
+ Enhancements to the redis configuration [nupplaphil]
+ Enhancements to the federation stats display in the admin panel [tobiasd]
+ Enhancements to the processing of changed storage engine [MrPetovan]
+ Enhancements to ActivityPub support [annando, MrPetovan]
+ Enhancements to code security [MrPetovan]
+ Enhancements to delivery counter [annando]
+ Fixed the notification order [JeroenED]
+ Fixed the timezone of Friendica logs [nupplaphil]
+ Fixed tag completion painfully slow [AlfredSK]
+ Fixed a regression in notifications [MrPetovan, annando]
+ Fixed an issue with smilies and code blocks [MrPetovan]
+ Fixed an AP issue with unavailable local profiles [MrPetovan]
+ Fixed an issue with the File to Folder feature [MrPetovan]
+ Fixed an issue with the legacy storage engine [fabrixxm]
+ Fixed an issue with the theme and addon path items [MrPetovan]
+ Fixed an issue occuring when the BasePath was not set [tobiasd]
+ Fixed an issue with additionally opened Sessions [MrPetovan]
+ Fixed an issue with legacy loglevel mapping [nupplaphil]
+ Fixed contact suggestions [annando]
+ Fixed an issue with frio hovercard [nupplaphil]
+ Fixed event interaction federation [annando]
+ Fixed remote image permission [deantownsley]
+ General Code cleaning and restructuring [annando, nupplaphil, tobiasd]
+ Added frio color scheme sharing [JeroenED]
+ Added syslog and stream Logger [nupplaphil]
+ Added storage move cronjob [MrPetovan]
+ Added collapsible panel for connector permission fields [MrPetovan]
+ Added rule-based router [MrPetovan]
+ Added Estonian translation [Rain Hawk]
+ Added APCu caching [nupplaphil]
+ Added BlockServer command to the Friendica console [nupplaphil]
+ Added reshare count [annando]
+ Added rule-based router [MrPetovan, nupplaphil]
+ Added themed error pages with mascot [MrPetovan, lostinlight]
+ Added contact relationship filter [MrPetovan]
+ Removed the old queue mechanism (deferred workers are now used) [annando]
+ Removed BasePath and Hostname settings from the admin panel [nupplaphil]
+ Remove support for defunct F-Droid Friendica app [MrPetovan]
+
+ Friendica Addons:
+ Update to the tranlation (ET, SV, ZH_CN) [translation teams]
+ botdetection:
+ Added a new addon for preventing access by bots [nupplaphil, annando]
+ buffer:
+ Traces of Google+ were removed [annando]
+ curweather:
+ Fixed a problem with the display of the correct temperature unit [tobiasd]
+ fromgplus:
+ Deprecated the addon as Google+ was closed [tobiasd]
+ fortunate:
+ Deprecated addon for incompatibility with latest Friendica version [MrPetovan]
+ phpmailer:
+ Added a new addon to use external SMTP for email [M-arcus, kecalcze, MrPetovan]
+ pledgie:
+ Deprecated addon as service was discontinued [M-arcus]
+ xmpp:
+ Marked addon as unsupported because of various incompatibilities with themes [MrPetovan]
+
+ Closed Issues:
+ 1012, 2209, 2528, 3309, 3717, 3816, 3869, 4453, 4999, 5011, 5047, 5276, 5850, 5983, 6303, 6319, 6379, 6410, 6477,
+ 6478, 6720, 6799, 6813, 6819, 6861, 6864, 6879, 6903, 6916, 6917, 6918, 6921, 6927, 6929, 6936, 6938, 6941, 6943,
+ 6947, 6948, 6950, 6952, 6983, 6999, 7023, 7036, 7047, 7106, 7112, 7119, 7128, 7130, 7131, 7141, 7142, 7150, 7171,
+ 7183, 7196, 7209, 7223, 7226, 7240, 7241, 7249, 7264, 7269, 7271, 7275, 7300, 7303
+
Version 2019.04 (2019-04-28)
Friendica Core:
Fixed a privacy problem with postings accessed by feed [MrPetovan]
-
+
Version 2019.03 (2019-03-22)
Friendica Core:
Update to the translation (CS, DE, EN-GB, EN-US, ES, FR, IT, PL, SV, ZH-CN) [translation teams]
diff --git a/CREDITS.txt b/CREDITS.txt
index 3b3e6ad30..c47a8a623 100644
--- a/CREDITS.txt
+++ b/CREDITS.txt
@@ -1,3 +1,5 @@
+
+
23n
Abinoam P. Marques Jr.
Abraham Pérez Hernández
@@ -26,6 +28,7 @@ Andy Hee
Angristan
Anthronaut
Arian - Cazare Muncitori
+Asher Pen
Athalbert
aweiher
axelt
@@ -37,6 +40,8 @@ Beluga
Ben
Ben Roberts
ben-utzer
+BinkaDroid
+Bjoessi
bufalo1973
Calango Jr
Carlos Solís
@@ -107,6 +112,7 @@ Jens Tautenhahn
jensp
Jeroen De Meerleer
jeroenpraat
+JOduMonT
Johannes Schwab
John Brazil
Jonatan Nyberg
@@ -175,6 +181,7 @@ R C
Rabuzarus
Radek
Rafael Garau
+Rain Hawk
Rainulf Pineda
Ralf Thees
Ralph
@@ -183,6 +190,7 @@ rcmaniac
rebeka-catalina
repat
Ricardo Pereira
+Rik 4
RJ Madsen
Roland Häder
Rui Andrada
@@ -207,6 +215,7 @@ Steffen K9
StefOfficiel
Sveinn í Felli
Sven Anders
+Sylke Vicious
Sylvain Lagacé
szymon.filip
Sérgio Lima
@@ -225,6 +234,7 @@ tomacat
tomamplius
tomtom84
Tony Baldwin
+Torbjörn Andersson
TORminator
trebor
tschlotfeldt
@@ -234,6 +244,7 @@ U-SOUND\mike
ufic
Ulf Rompe
Unknown
+Valvin
Vasudev Kamath
Vasya Novikov
Vinzenz Vietzke
diff --git a/INSTALL.md b/INSTALL.md
index b6107e006..50e86e24c 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -29,7 +29,7 @@ is self-signed).
## 1. Requirements
- Apache with mod-rewrite enabled and "Options All" so you can use a local .htaccess file
-- PHP 5.6.1+ (PHP 7.1+ recommended for performance and official support).
+- PHP 7+ (PHP 7.1+ recommended for performance and official support).
- PHP *command line* with `register_argc_argv = true` in php.ini
- curl, gd (with at least jpeg support), mysql, mbstring, xml, zip and openssl extensions
- Some form of email server or email gateway such that PHP mail() works
diff --git a/README.md b/README.md
index 20d6b0ef5..d849a4395 100644
--- a/README.md
+++ b/README.md
@@ -16,26 +16,26 @@ Join today and [get your Friendica profile!](https://dir.friendica.social/server
### Friendica Screenshots
-| ![Frio theme in mobile browser](/images/screenshots/friendica-frio-mobile-profle-1.png?raw=true "Frio theme in mobile browser") ![Frio theme in mobile browser](/images/screenshots/friendica-frio-mobile-profle-2.png?raw=true "Frio theme in mobile browser")
+| ![Frio theme in mobile browser](images/screenshots/friendica-frio-mobile-profle-1.png?raw=true "Frio theme in mobile browser") ![Frio theme in mobile browser](images/screenshots/friendica-frio-mobile-profle-2.png?raw=true "Frio theme in mobile browser")
|:--:|
|*Frio theme, mobile browser. Timeline and composer view.*|
-|![Frio theme in desktop browser](/images/screenshots/friendica-frio-green-profle-1.png?raw=true "Frio theme in desktop browser")
+|![Frio theme in desktop browser](images/screenshots/friendica-frio-green-profle-1.png?raw=true "Frio theme in desktop browser")
|*Frio theme, desktop browser. Timeline view, contact info popped up, control menu open.*|
-|![Frio theme in desktop browser](/images/screenshots/friendica-frio-green-profle-2.png?raw=true "Frio theme in desktop browser")
+|![Frio theme in desktop browser](images/screenshots/friendica-frio-green-profle-2.png?raw=true "Frio theme in desktop browser")
|*Frio theme, desktop browser. Menu open for controlling individual posts.*|
-|![Frio theme in desktop browser](/images/screenshots/friendica-frio-red-profle-3.png?raw=true "Frio theme in desktop browser")
+|![Frio theme in desktop browser](images/screenshots/friendica-frio-red-profle-3.png?raw=true "Frio theme in desktop browser")
|*Frio theme, desktop browser. Profile view, notification menu open.*|
-|![Frio theme in desktop browser](/images/screenshots/friendica-frio-red-profle-2.png?raw=true "Frio theme in desktop browser")
+|![Frio theme in desktop browser](images/screenshots/friendica-frio-red-profle-2.png?raw=true "Frio theme in desktop browser")
|*Number of new posts, in total and by group.*|
-|![Frio theme in desktop browser](/images/screenshots/friendica-frio-red-profle-1.png?raw=true "Frio theme in desktop browser")
+|![Frio theme in desktop browser](images/screenshots/friendica-frio-red-profle-1.png?raw=true "Frio theme in desktop browser")
|*Calender with popup of event.*|
-|![Frio theme default colour in standard browser on tablet](/images/screenshots/friendica-frio-default-profile-1.png?raw=true "Frio theme default colour in standard browser on tablet")
+|![Frio theme default colour in standard browser on tablet](images/screenshots/friendica-frio-default-profile-1.png?raw=true "Frio theme default colour in standard browser on tablet")
|*Notifications menu and private messages counter, standard browser on tablet.*|
-|![Frio theme in desktop browser](/images/screenshots/friendica-frio-brown-profile-2.png?raw=true "Frio theme in desktop browser")
+|![Frio theme in desktop browser](images/screenshots/friendica-frio-brown-profile-2.png?raw=true "Frio theme in desktop browser")
|*Number of visible contacts, standard browser.*|
-|![Frio theme in desktop browser](/images/screenshots/friendica-frio-brown-profile-1.png?raw=true "Frio theme in desktop browser")
+|![Frio theme in desktop browser](images/screenshots/friendica-frio-brown-profile-1.png?raw=true "Frio theme in desktop browser")
|*Network posts chronologically ordered, standard browser.*|
-|![Vier theme in desktop browser](/images/screenshots/friendica-vier-profile.png?raw=true "Vier theme in desktop browser")
+|![Vier theme in desktop browser](images/screenshots/friendica-vier-profile.png?raw=true "Vier theme in desktop browser")
|*Vier theme, desktop browser. Public timeline view.*|
-|![Vier theme in desktop browser](/images/screenshots/friendica-vier-community.png?raw=true "Vier theme in desktop browser")
+|![Vier theme in desktop browser](images/screenshots/friendica-vier-community.png?raw=true "Vier theme in desktop browser")
|*Vier theme, desktop browser. Community post displayed.*|
diff --git a/VERSION b/VERSION
index 3365fe156..4eda9a567 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2019.04
+2019.06
diff --git a/bin/daemon.php b/bin/daemon.php
index 298cfa253..047bf71be 100755
--- a/bin/daemon.php
+++ b/bin/daemon.php
@@ -144,9 +144,7 @@ if (!$foreground) {
file_put_contents($pidfile, $pid);
// We lose the database connection upon forking
- /// @todo refactoring during https://github.com/friendica/friendica/issues/6720
- $basePath = \Friendica\Util\BasePath::create(dirname(__DIR__), $_SERVER);
- Factory\DBFactory::init($basePath, $a->getConfigCache(), $a->getProfiler(), $_SERVER);
+ Factory\DBFactory::init($a->getConfigCache(), $a->getProfiler(), $_SERVER);
}
Config::set('system', 'worker_daemon_mode', true);
diff --git a/bin/worker.php b/bin/worker.php
index c7174d81e..2b5915f47 100755
--- a/bin/worker.php
+++ b/bin/worker.php
@@ -33,7 +33,7 @@ require dirname(__DIR__) . '/vendor/autoload.php';
$a = Factory\DependencyFactory::setUp('worker', dirname(__DIR__));
// Check the database structure and possibly fixes it
-Update::check($a->getBasePath(), true);
+Update::check($a->getBasePath(), true, $a->getMode());
// Quit when in maintenance
if (!$a->getMode()->has(App\Mode::MAINTENANCEDISABLED)) {
diff --git a/boot.php b/boot.php
index 95ea6579a..4ade9eb14 100644
--- a/boot.php
+++ b/boot.php
@@ -31,7 +31,7 @@ use Friendica\Util\DateTimeFormat;
define('FRIENDICA_PLATFORM', 'Friendica');
define('FRIENDICA_CODENAME', 'Dalmatian Bellflower');
-define('FRIENDICA_VERSION', '2019.04');
+define('FRIENDICA_VERSION', '2019.06');
define('DFRN_PROTOCOL_VERSION', '2.23');
define('NEW_UPDATE_ROUTINE_VERSION', 1170);
@@ -82,17 +82,6 @@ define('MAX_IMAGE_LENGTH', -1);
*/
define('DEFAULT_DB_ENGINE', 'InnoDB');
-/**
- * @name SSL Policy
- *
- * SSL redirection policies
- * @{
- */
-define('SSL_POLICY_NONE', 0);
-define('SSL_POLICY_FULL', 1);
-define('SSL_POLICY_SELFSIGN', 2);
-/* @}*/
-
/** @deprecated since version 2019.03, please use \Friendica\Module\Register::CLOSED instead */
define('REGISTER_CLOSED', \Friendica\Module\Register::CLOSED);
/** @deprecated since version 2019.03, please use \Friendica\Module\Register::APPROVE instead */
@@ -204,6 +193,7 @@ define('NAMESPACE_ZOT', 'http://purl.org/zot');
define('NAMESPACE_DFRN', 'http://purl.org/macgirvin/dfrn/1.0');
define('NAMESPACE_THREAD', 'http://purl.org/syndication/thread/1.0');
define('NAMESPACE_TOMB', 'http://purl.org/atompub/tombstones/1.0');
+define('NAMESPACE_ACTIVITY2', 'https://www.w3.org/ns/activitystreams#');
define('NAMESPACE_ACTIVITY', 'http://activitystrea.ms/spec/1.0/');
define('NAMESPACE_ACTIVITY_SCHEMA', 'http://activitystrea.ms/schema/1.0/');
define('NAMESPACE_MEDIA', 'http://purl.org/syndication/atommedia');
@@ -246,6 +236,7 @@ define('ACTIVITY_FAVORITE', NAMESPACE_ACTIVITY_SCHEMA . 'favorite');
define('ACTIVITY_UNFAVORITE', NAMESPACE_ACTIVITY_SCHEMA . 'unfavorite');
define('ACTIVITY_SHARE', NAMESPACE_ACTIVITY_SCHEMA . 'share');
define('ACTIVITY_DELETE', NAMESPACE_ACTIVITY_SCHEMA . 'delete');
+define('ACTIVITY2_ANNOUNCE', NAMESPACE_ACTIVITY2 . 'Announce');
define('ACTIVITY_POKE', NAMESPACE_ZOT . '/activity/poke');
@@ -543,39 +534,6 @@ function is_site_admin()
return local_user() && $admin_email && in_array(defaults($a->user, 'email', ''), $adminlist);
}
-/**
- * @brief Returns querystring as string from a mapped array.
- *
- * @param array $params mapped array with query parameters
- * @param string $name of parameter, default null
- *
- * @return string
- */
-function build_querystring($params, $name = null)
-{
- $ret = "";
- foreach ($params as $key => $val) {
- if (is_array($val)) {
- /// @TODO maybe not compare against null, use is_null()
- if ($name == null) {
- $ret .= build_querystring($val, $key);
- } else {
- $ret .= build_querystring($val, $name . "[$key]");
- }
- } else {
- $val = urlencode($val);
- /// @TODO maybe not compare against null, use is_null()
- if ($name != null) {
- /// @TODO two string concated, can be merged to one
- $ret .= $name . "[$key]" . "=$val&";
- } else {
- $ret .= "$key=$val&";
- }
- }
- }
- return $ret;
-}
-
function explode_querystring($query)
{
$arg_st = strpos($query, '?');
diff --git a/composer.json b/composer.json
index 765ec23a2..aac5c10bc 100644
--- a/composer.json
+++ b/composer.json
@@ -13,7 +13,7 @@
"issues": "https://github.com/friendica/friendica/issues"
},
"require": {
- "php": ">=5.6.1",
+ "php": ">=7.0",
"ext-ctype": "*",
"ext-curl": "*",
"ext-dom": "*",
@@ -27,6 +27,7 @@
"ext-simplexml": "*",
"ext-xml": "*",
"asika/simple-console": "^1.0",
+ "bacon/bacon-qr-code": "^1.0",
"divineomega/password_exposed": "^2.4",
"ezyang/htmlpurifier": "~4.7.0",
"friendica/json-ld": "^1.0",
@@ -35,14 +36,18 @@
"michelf/php-markdown": "^1.7",
"mobiledetect/mobiledetectlib": "2.8.*",
"monolog/monolog": "^1.24",
- "paragonie/random_compat": "^2.0",
+ "nikic/fast-route": "^1.3",
+ "paragonie/hidden-string": "^1.0",
"pear/text_languagedetect": "1.*",
+ "pragmarx/google2fa": "^5.0",
+ "pragmarx/recovery": "^0.1.0",
"psr/container": "^1.0",
"seld/cli-prompt": "^1.0",
"smarty/smarty": "^3.1",
"fxp/composer-asset-plugin": "~1.3",
"bower-asset/base64": "^1.0",
"bower-asset/chart-js": "^2.7",
+ "bower-asset/dompurify": "^1.0",
"bower-asset/perfect-scrollbar": "^0.6",
"bower-asset/vue": "^2.5",
"npm-asset/jquery": "^2.0",
@@ -52,7 +57,8 @@
"npm-asset/moment": "^2.20.1",
"npm-asset/fullcalendar": "^3.0.1",
"npm-asset/cropperjs": "1.2.2",
- "npm-asset/imagesloaded": "4.1.4"
+ "npm-asset/imagesloaded": "4.1.4",
+ "pear/console_table": "^1.3"
},
"repositories": [
{
diff --git a/composer.lock b/composer.lock
index ff38c8105..af51b6dfe 100644
--- a/composer.lock
+++ b/composer.lock
@@ -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": "8897c1f6912cc9b889534a8c59deead1",
+ "content-hash": "eb985236d64ed0b0fe1fc2e4ac6616e2",
"packages": [
{
"name": "asika/simple-console",
@@ -39,6 +39,52 @@
"description": "One file console framework to help you write build scripts.",
"time": "2018-03-08T12:05:40+00:00"
},
+ {
+ "name": "bacon/bacon-qr-code",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Bacon/BaconQrCode.git",
+ "reference": "5a91b62b9d37cee635bbf8d553f4546057250bee"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/5a91b62b9d37cee635bbf8d553f4546057250bee",
+ "reference": "5a91b62b9d37cee635bbf8d553f4546057250bee",
+ "shasum": ""
+ },
+ "require": {
+ "ext-iconv": "*",
+ "php": "^5.4|^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8"
+ },
+ "suggest": {
+ "ext-gd": "to generate QR code images"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "BaconQrCode": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Ben Scholzen 'DASPRiD'",
+ "email": "mail@dasprids.de",
+ "homepage": "http://www.dasprids.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "BaconQrCode is a QR code generator for PHP.",
+ "homepage": "https://github.com/Bacon/BaconQrCode",
+ "time": "2017-10-17T09:59:25+00:00"
+ },
{
"name": "bower-asset/Chart-js",
"version": "v2.7.2",
@@ -102,6 +148,51 @@
"description": "Base64 encoding and decoding",
"time": "2017-03-25T21:16:21+00:00"
},
+ {
+ "name": "bower-asset/dompurify",
+ "version": "1.0.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cure53/DOMPurify.git",
+ "reference": "b537cab466329b1b077e0e5e3c14edad2b7142f7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cure53/DOMPurify/zipball/b537cab466329b1b077e0e5e3c14edad2b7142f7",
+ "reference": "b537cab466329b1b077e0e5e3c14edad2b7142f7",
+ "shasum": ""
+ },
+ "type": "bower-asset-library",
+ "extra": {
+ "bower-asset-main": "src/purify.js",
+ "bower-asset-ignore": [
+ "**/.*",
+ "demos",
+ "scripts",
+ "test",
+ "website"
+ ]
+ },
+ "license": [
+ "MPL-2.0",
+ "Apache-2.0"
+ ],
+ "description": "A DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG",
+ "keywords": [
+ "cross site scripting",
+ "dom",
+ "filter",
+ "html",
+ "mathml",
+ "sanitize",
+ "sanitizer",
+ "secure",
+ "security",
+ "svg",
+ "xss"
+ ],
+ "time": "2019-02-19T13:27:01+00:00"
+ },
{
"name": "bower-asset/perfect-scrollbar",
"version": "0.6.16",
@@ -887,6 +978,52 @@
],
"time": "2018-11-05T09:00:11+00:00"
},
+ {
+ "name": "nikic/fast-route",
+ "version": "v1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/FastRoute.git",
+ "reference": "181d480e08d9476e61381e04a71b34dc0432e812"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812",
+ "reference": "181d480e08d9476e61381e04a71b34dc0432e812",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35|~5.7"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "FastRoute\\": "src/"
+ },
+ "files": [
+ "src/functions.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov",
+ "email": "nikic@php.net"
+ }
+ ],
+ "description": "Fast request router for PHP",
+ "keywords": [
+ "router",
+ "routing"
+ ],
+ "time": "2018-02-13T20:26:39+00:00"
+ },
{
"name": "npm-asset/cropperjs",
"version": "1.2.2",
@@ -1586,25 +1723,24 @@
},
{
"name": "paragonie/constant_time_encoding",
- "version": "v1.0.4",
+ "version": "v2.2.3",
"source": {
"type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git",
- "reference": "2132f0f293d856026d7d11bd81b9f4a23a1dc1f6"
+ "reference": "55af0dc01992b4d0da7f6372e2eac097bbbaffdb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/2132f0f293d856026d7d11bd81b9f4a23a1dc1f6",
- "reference": "2132f0f293d856026d7d11bd81b9f4a23a1dc1f6",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/55af0dc01992b4d0da7f6372e2eac097bbbaffdb",
+ "reference": "55af0dc01992b4d0da7f6372e2eac097bbbaffdb",
"shasum": ""
},
"require": {
- "php": "^5.3|^7"
+ "php": "^7"
},
"require-dev": {
- "paragonie/random_compat": "^1.4|^2",
- "phpunit/phpunit": "4.*|5.*",
- "vimeo/psalm": "^0.3|^1"
+ "phpunit/phpunit": "^6|^7",
+ "vimeo/psalm": "^1|^2"
},
"type": "library",
"autoload": {
@@ -1645,37 +1781,82 @@
"hex2bin",
"rfc4648"
],
- "time": "2018-04-30T17:57:16+00:00"
+ "time": "2019-01-03T20:26:31+00:00"
},
{
- "name": "paragonie/random_compat",
- "version": "v2.0.17",
+ "name": "paragonie/hidden-string",
+ "version": "v1.0.0",
"source": {
"type": "git",
- "url": "https://github.com/paragonie/random_compat.git",
- "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d"
+ "url": "https://github.com/paragonie/hidden-string.git",
+ "reference": "0bbb00be0e33b8e1d48fa79ea35cd42d3091a936"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/random_compat/zipball/29af24f25bab834fcbb38ad2a69fa93b867e070d",
- "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d",
+ "url": "https://api.github.com/repos/paragonie/hidden-string/zipball/0bbb00be0e33b8e1d48fa79ea35cd42d3091a936",
+ "reference": "0bbb00be0e33b8e1d48fa79ea35cd42d3091a936",
"shasum": ""
},
"require": {
- "php": ">=5.2.0"
+ "paragonie/constant_time_encoding": "^2",
+ "paragonie/sodium_compat": "^1.6",
+ "php": "^7"
},
"require-dev": {
- "phpunit/phpunit": "4.*|5.*"
+ "phpunit/phpunit": "^6|^7",
+ "vimeo/psalm": "^1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "ParagonIE\\HiddenString\\": "./src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MPL-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "info@paragonie.com",
+ "homepage": "https://paragonie.com"
+ }
+ ],
+ "description": "Encapsulate strings in an object to hide them from stack traces",
+ "homepage": "https://github.com/paragonie/hidden-string",
+ "keywords": [
+ "hidden",
+ "stack trace",
+ "string"
+ ],
+ "time": "2018-05-07T20:28:06+00:00"
+ },
+ {
+ "name": "paragonie/random_compat",
+ "version": "v9.99.99",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/random_compat.git",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*|5.*",
+ "vimeo/psalm": "^1"
},
"suggest": {
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
},
"type": "library",
- "autoload": {
- "files": [
- "lib/random.php"
- ]
- },
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
@@ -1694,7 +1875,7 @@
"pseudorandom",
"random"
],
- "time": "2018-07-04T16:31:37+00:00"
+ "time": "2018-07-02T15:55:56+00:00"
},
{
"name": "paragonie/sodium_compat",
@@ -1778,6 +1959,61 @@
],
"time": "2018-09-22T03:59:58+00:00"
},
+ {
+ "name": "pear/console_table",
+ "version": "v1.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/pear/Console_Table.git",
+ "reference": "1930c11897ca61fd24b95f2f785e99e0f36dcdea"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/pear/Console_Table/zipball/1930c11897ca61fd24b95f2f785e99e0f36dcdea",
+ "reference": "1930c11897ca61fd24b95f2f785e99e0f36dcdea",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2.0"
+ },
+ "suggest": {
+ "pear/Console_Color2": ">=0.1.2"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "Table.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jan Schneider",
+ "homepage": "http://pear.php.net/user/yunosh"
+ },
+ {
+ "name": "Tal Peer",
+ "homepage": "http://pear.php.net/user/tal"
+ },
+ {
+ "name": "Xavier Noguer",
+ "homepage": "http://pear.php.net/user/xnoguer"
+ },
+ {
+ "name": "Richard Heyes",
+ "homepage": "http://pear.php.net/user/richard"
+ }
+ ],
+ "description": "Library that makes it easy to build console style tables.",
+ "homepage": "http://pear.php.net/package/Console_Table/",
+ "keywords": [
+ "console"
+ ],
+ "time": "2018-01-25T20:47:17+00:00"
+ },
{
"name": "pear/text_languagedetect",
"version": "v1.0.0",
@@ -1822,6 +2058,189 @@
"homepage": "http://pear.php.net/package/Text_LanguageDetect",
"time": "2017-03-02T16:14:08+00:00"
},
+ {
+ "name": "pragmarx/google2fa",
+ "version": "v5.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/antonioribeiro/google2fa.git",
+ "reference": "17c969c82f427dd916afe4be50bafc6299aef1b4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/17c969c82f427dd916afe4be50bafc6299aef1b4",
+ "reference": "17c969c82f427dd916afe4be50bafc6299aef1b4",
+ "shasum": ""
+ },
+ "require": {
+ "paragonie/constant_time_encoding": "~1.0|~2.0",
+ "paragonie/random_compat": ">=1",
+ "php": ">=5.4",
+ "symfony/polyfill-php56": "~1.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4|~5|~6"
+ },
+ "type": "library",
+ "extra": {
+ "component": "package",
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PragmaRX\\Google2FA\\": "src/",
+ "PragmaRX\\Google2FA\\Tests\\": "tests/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Antonio Carlos Ribeiro",
+ "email": "acr@antoniocarlosribeiro.com",
+ "role": "Creator & Designer"
+ }
+ ],
+ "description": "A One Time Password Authentication package, compatible with Google Authenticator.",
+ "keywords": [
+ "2fa",
+ "Authentication",
+ "Two Factor Authentication",
+ "google2fa"
+ ],
+ "time": "2019-03-19T22:44:16+00:00"
+ },
+ {
+ "name": "pragmarx/random",
+ "version": "v0.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/antonioribeiro/random.git",
+ "reference": "daf08a189c5d2d40d1a827db46364d3a741a51b7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/antonioribeiro/random/zipball/daf08a189c5d2d40d1a827db46364d3a741a51b7",
+ "reference": "daf08a189c5d2d40d1a827db46364d3a741a51b7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "fzaninotto/faker": "~1.7",
+ "phpunit/phpunit": "~6.4",
+ "pragmarx/trivia": "~0.1",
+ "squizlabs/php_codesniffer": "^2.3"
+ },
+ "suggest": {
+ "fzaninotto/faker": "Allows you to get dozens of randomized types",
+ "pragmarx/trivia": "For the trivia database"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PragmaRX\\Random\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Antonio Carlos Ribeiro",
+ "email": "acr@antoniocarlosribeiro.com",
+ "homepage": "https://antoniocarlosribeiro.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "Create random chars, numbers, strings",
+ "homepage": "https://github.com/antonioribeiro/random",
+ "keywords": [
+ "Randomize",
+ "faker",
+ "pragmarx",
+ "random",
+ "random number",
+ "random pattern",
+ "random string"
+ ],
+ "time": "2017-11-21T05:26:22+00:00"
+ },
+ {
+ "name": "pragmarx/recovery",
+ "version": "v0.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/antonioribeiro/recovery.git",
+ "reference": "e16573a1ae5345cc3b100eec6d0296a1a15a90fe"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/antonioribeiro/recovery/zipball/e16573a1ae5345cc3b100eec6d0296a1a15a90fe",
+ "reference": "e16573a1ae5345cc3b100eec6d0296a1a15a90fe",
+ "shasum": ""
+ },
+ "require": {
+ "php": "~7.0",
+ "pragmarx/random": "~0.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": ">=5.4.3",
+ "squizlabs/php_codesniffer": "^2.3",
+ "tightenco/collect": "^5"
+ },
+ "suggest": {
+ "tightenco/collect": "Allows to generate recovery codes as collections"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PragmaRX\\Recovery\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Antonio Carlos Ribeiro",
+ "email": "acr@antoniocarlosribeiro.com",
+ "homepage": "https://antoniocarlosribeiro.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "Create recovery codes for two factor auth",
+ "homepage": "https://github.com/antonioribeiro/recovery",
+ "keywords": [
+ "2fa",
+ "account recovery",
+ "auth",
+ "backup codes",
+ "google2fa",
+ "pragmarx",
+ "recovery",
+ "recovery codes",
+ "two factor auth"
+ ],
+ "time": "2017-09-19T16:58:00+00:00"
+ },
{
"name": "psr/cache",
"version": "1.0.1",
@@ -2114,9 +2533,159 @@
"templating"
],
"time": "2018-09-12T20:54:16+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php56",
+ "version": "v1.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php56.git",
+ "reference": "f4dddbc5c3471e1b700a147a20ae17cdb72dbe42"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/f4dddbc5c3471e1b700a147a20ae17cdb72dbe42",
+ "reference": "f4dddbc5c3471e1b700a147a20ae17cdb72dbe42",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "symfony/polyfill-util": "~1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.11-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php56\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2019-02-06T07:57:58+00:00"
+ },
+ {
+ "name": "symfony/polyfill-util",
+ "version": "v1.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-util.git",
+ "reference": "b46c6cae28a3106735323f00a0c38eccf2328897"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/b46c6cae28a3106735323f00a0c38eccf2328897",
+ "reference": "b46c6cae28a3106735323f00a0c38eccf2328897",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.11-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Util\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony utilities for portability of PHP codes",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compat",
+ "compatibility",
+ "polyfill",
+ "shim"
+ ],
+ "time": "2019-02-08T14:16:39+00:00"
}
],
"packages-dev": [
+ {
+ "name": "dasprid/enum",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/DASPRiD/Enum.git",
+ "reference": "631ef6e638e9494b0310837fa531bedd908fc22b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/631ef6e638e9494b0310837fa531bedd908fc22b",
+ "reference": "631ef6e638e9494b0310837fa531bedd908fc22b",
+ "shasum": ""
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.4",
+ "squizlabs/php_codesniffer": "^3.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "DASPRiD\\Enum\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Ben Scholzen 'DASPRiD'",
+ "email": "mail@dasprids.de",
+ "homepage": "https://dasprids.de/"
+ }
+ ],
+ "description": "PHP 7.1 enum implementation",
+ "keywords": [
+ "enum",
+ "map"
+ ],
+ "time": "2017-10-25T22:45:27+00:00"
+ },
{
"name": "doctrine/instantiator",
"version": "1.0.5",
@@ -2272,12 +2841,12 @@
"version": "v1.6.5",
"source": {
"type": "git",
- "url": "https://github.com/mikey179/vfsStream.git",
+ "url": "https://github.com/bovigo/vfsStream.git",
"reference": "d5fec95f541d4d71c4823bb5e30cf9b9e5b96145"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mikey179/vfsStream/zipball/d5fec95f541d4d71c4823bb5e30cf9b9e5b96145",
+ "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/d5fec95f541d4d71c4823bb5e30cf9b9e5b96145",
"reference": "d5fec95f541d4d71c4823bb5e30cf9b9e5b96145",
"shasum": ""
},
@@ -3180,7 +3749,7 @@
}
],
"description": "Provides the functionality to compare PHP values for equality",
- "homepage": "http://www.github.com/sebastianbergmann/comparator",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
"keywords": [
"comparator",
"compare",
@@ -3282,7 +3851,7 @@
}
],
"description": "Provides functionality to handle HHVM/PHP environments",
- "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "homepage": "https://github.com/sebastianbergmann/environment",
"keywords": [
"Xdebug",
"environment",
@@ -3350,7 +3919,7 @@
}
],
"description": "Provides the functionality to export PHP variables for visualization",
- "homepage": "http://www.github.com/sebastianbergmann/exporter",
+ "homepage": "https://github.com/sebastianbergmann/exporter",
"keywords": [
"export",
"exporter"
@@ -3402,7 +3971,7 @@
}
],
"description": "Snapshotting of global state",
- "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "homepage": "https://github.com/sebastianbergmann/global-state",
"keywords": [
"global state"
],
@@ -3504,7 +4073,7 @@
}
],
"description": "Provides functionality to recursively process PHP variables",
- "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "homepage": "https://github.com/sebastianbergmann/recursion-context",
"time": "2016-11-19T07:33:16+00:00"
},
{
@@ -3768,7 +4337,7 @@
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
- "php": ">=5.6.1",
+ "php": ">=7.0",
"ext-ctype": "*",
"ext-curl": "*",
"ext-dom": "*",
diff --git a/config/dbstructure.config.php b/config/dbstructure.config.php
old mode 100644
new mode 100755
index f03132add..57e437837
--- a/config/dbstructure.config.php
+++ b/config/dbstructure.config.php
@@ -34,10 +34,22 @@
use Friendica\Database\DBA;
if (!defined('DB_UPDATE_VERSION')) {
- define('DB_UPDATE_VERSION', 1304);
+ define('DB_UPDATE_VERSION', 1313);
}
return [
+ "2fa_recovery_codes" => [
+ "comment" => "Two-factor authentication recovery codes",
+ "fields" => [
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "primary" => "1", "relation" => ["user" => "uid"], "comment" => "User ID"],
+ "code" => ["type" => "varchar(50)", "not null" => "1", "primary" => "1", "comment" => "Recovery code string"],
+ "generated" => ["type" => "datetime", "not null" => "1", "comment" => "Datetime the code was generated"],
+ "used" => ["type" => "datetime", "comment" => "Datetime the code was used"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["uid", "code"]
+ ]
+ ],
"addon" => [
"comment" => "registered addons",
"fields" => [
@@ -74,6 +86,7 @@ return [
"alias" => ["type" => "varchar(255)", "comment" => ""],
"pubkey" => ["type" => "text", "comment" => ""],
"baseurl" => ["type" => "varchar(255)", "comment" => "baseurl of the ap contact"],
+ "generator" => ["type" => "varchar(255)", "comment" => "Name of the contact's system"],
"updated" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""]
],
"indexes" => [
@@ -180,14 +193,16 @@ return [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
"created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "updated" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => "Date of last contact update"],
"self" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 if the contact is the user him/her self"],
"remote_self" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"rel" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "The kind of the relation between the user and the contact"],
"duplex" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "Network protocol of the contact"],
+ "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "Network of the contact"],
+ "protocol" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "Protocol of the contact"],
"name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Name that this contact is known by"],
"nick" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Nick- and user name of the contact"],
- "location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "location" => ["type" => "varchar(255)", "default" => "", "comment" => ""],
"about" => ["type" => "text", "comment" => ""],
"keywords" => ["type" => "text", "comment" => "public keywords (interests) of the contact"],
"gender" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
@@ -226,7 +241,8 @@ return [
"term-date" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
"last-item" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "date of the last post"],
"priority" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "blocked" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => ""],
+ "blocked" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => "Node-wide block status"],
+ "block_reason" => ["type" => "text", "comment" => "Node-wide block reason"],
"readonly" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "posts of the contact are readonly"],
"writable" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"forum" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "contact is a forum"],
@@ -529,6 +545,21 @@ return [
"hook_file_function" => ["UNIQUE", "hook", "file", "function"],
]
],
+ "inbox-status" => [
+ "comment" => "Status of ActivityPub inboxes",
+ "fields" => [
+ "url" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "URL of the inbox"],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Creation date of this entry"],
+ "success" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of the last successful delivery"],
+ "failure" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of the last failed delivery"],
+ "previous" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Previous delivery date"],
+ "archive" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Is the inbox archived?"],
+ "shared" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Is it a shared inbox?"]
+ ],
+ "indexes" => [
+ "PRIMARY" => ["url"]
+ ]
+ ],
"intro" => [
"comment" => "",
"fields" => [
@@ -1103,26 +1134,6 @@ return [
"next_try" => ["next_try"],
]
],
- "queue" => [
- "comment" => "Queue for messages that couldn't be delivered",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Message receiver"],
- "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "Receiver's network"],
- "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Unique GUID of the message"],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date, when the message was created"],
- "last" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of last trial"],
- "next" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Next retrial date"],
- "retrial" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => "Retrial counter"],
- "content" => ["type" => "mediumtext", "comment" => ""],
- "batch" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "last" => ["last"],
- "next" => ["next"],
- ]
- ],
"register" => [
"comment" => "registrations requiring admin approval",
"fields" => [
@@ -1195,6 +1206,7 @@ return [
],
"indexes" => [
"PRIMARY" => ["tid"],
+ "term_type" => ["term(64)", "type"],
"oid_otype_type_term" => ["oid", "otype", "type", "term(32)"],
"uid_otype_type_term_global_created" => ["uid", "otype", "type", "term(32)", "global", "created"],
"uid_otype_type_url" => ["uid", "otype", "type", "url(64)"],
diff --git a/config/defaults.config.php b/config/defaults.config.php
index a6f90f319..b4471af25 100644
--- a/config/defaults.config.php
+++ b/config/defaults.config.php
@@ -72,6 +72,10 @@ return [
// Deny public access to the local user directory.
'block_local_dir' => false,
+ // cron_interval (Integer)
+ // Minimal period in minutes between two calls of the "Cron" worker job.
+ 'cron_interval' => 5,
+
// cache_driver (database|memcache|memcached|redis)
// Whether to use Memcache or Memcached or Redis to store temporary cache.
'cache_driver' => 'database',
@@ -214,6 +218,10 @@ return [
// If activated, all hashtags will point to the local server.
'local_tags' => false,
+ // logger_config (String)
+ // Sets the logging adapter of Friendica globally (monolog, syslog, stream)
+ 'logger_config' => 'stream',
+
// max_batch_queue (Integer)
// Maximum number of batched queue items for a single contact before subsequent messages are discarded.
'max_batch_queue' => 1000,
@@ -335,6 +343,14 @@ return [
// Port number of the redis daemon.
'redis_port' => 6379,
+ // redis_db (Integer)
+ // The sub-database of redis (0 - 15 possible sub-databases)
+ 'redis_db' => 0,
+
+ // redis_password (String)
+ // The authentication password for the redis database
+ 'redis_password' => null,
+
// session_handler (database|cache|native)
// Whether to use Cache to store session data or to use PHP native session storage.
'session_handler' => 'database',
@@ -373,11 +389,6 @@ return [
// Maximum number of posts that a user can send per month with the API. 0 to disable monthly throttling.
'throttle_limit_month' => 0,
- // urlpath (String)
- // If you are using a subdirectory of your domain you will need to put the relative path (from the root of your domain) here.
- // For instance if your URL is 'http://example.com/directory/subdirectory', set urlpath to 'directory/subdirectory'.
- 'urlpath' => '',
-
// username_min_length (Integer)
// The minimum character length a username can be.
// This length is check once the username has been trimmed and multiple spaces have been collapsed into one.
diff --git a/config/settings.config.php b/config/settings.config.php
index 31e8dbe5b..bf8b62f15 100644
--- a/config/settings.config.php
+++ b/config/settings.config.php
@@ -74,7 +74,7 @@ return [
// logfile (String)
// The logfile for storing logs.
// Can be a full path or a relative path to the Friendica home directory
- 'logfile' => 'friendica.log',
+ 'logfile' => 'log/friendica.log',
// loglevel (String)
// The loglevel for all logs.
diff --git a/database.sql b/database.sql
index 10a428fff..dde37cd37 100644
--- a/database.sql
+++ b/database.sql
@@ -1,6 +1,6 @@
-- ------------------------------------------
--- Friendica 2019.03-dev (The Tazmans Flax-lily)
--- DB_UPDATE_VERSION 1300
+-- Friendica 2019.06-dev (Dalmatian Bellflower)
+-- DB_UPDATE_VERSION 1311
-- ------------------------------------------
@@ -40,6 +40,7 @@ CREATE TABLE IF NOT EXISTS `apcontact` (
`alias` varchar(255) COMMENT '',
`pubkey` text COMMENT '',
`baseurl` varchar(255) COMMENT 'baseurl of the ap contact',
+ `generator` varchar(255) COMMENT 'Name of the contact\'s system',
`updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
PRIMARY KEY(`url`),
INDEX `addr` (`addr`(32)),
@@ -138,14 +139,16 @@ CREATE TABLE IF NOT EXISTS `contact` (
`id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'Owner User id',
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
+ `updated` datetime DEFAULT '0001-01-01 00:00:00' COMMENT 'Date of last contact update',
`self` boolean NOT NULL DEFAULT '0' COMMENT '1 if the contact is the user him/her self',
`remote_self` boolean NOT NULL DEFAULT '0' COMMENT '',
`rel` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'The kind of the relation between the user and the contact',
`duplex` boolean NOT NULL DEFAULT '0' COMMENT '',
- `network` char(4) NOT NULL DEFAULT '' COMMENT 'Network protocol of the contact',
+ `network` char(4) NOT NULL DEFAULT '' COMMENT 'Network of the contact',
+ `protocol` char(4) NOT NULL DEFAULT '' COMMENT 'Protocol of the contact',
`name` varchar(255) NOT NULL DEFAULT '' COMMENT 'Name that this contact is known by',
`nick` varchar(255) NOT NULL DEFAULT '' COMMENT 'Nick- and user name of the contact',
- `location` varchar(255) NOT NULL DEFAULT '' COMMENT '',
+ `location` varchar(255) DEFAULT '' COMMENT '',
`about` text COMMENT '',
`keywords` text COMMENT 'public keywords (interests) of the contact',
`gender` varchar(32) NOT NULL DEFAULT '' COMMENT '',
@@ -470,6 +473,20 @@ CREATE TABLE IF NOT EXISTS `hook` (
UNIQUE INDEX `hook_file_function` (`hook`,`file`,`function`)
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='addon hook registry';
+--
+-- TABLE inbox-status
+--
+CREATE TABLE IF NOT EXISTS `inbox-status` (
+ `url` varbinary(255) NOT NULL COMMENT 'URL of the inbox',
+ `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Creation date of this entry',
+ `success` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date of the last successful delivery',
+ `failure` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date of the last failed delivery',
+ `previous` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Previous delivery date',
+ `archive` boolean NOT NULL DEFAULT '0' COMMENT 'Is the inbox archived?',
+ `shared` boolean NOT NULL DEFAULT '0' COMMENT 'Is it a shared inbox?',
+ PRIMARY KEY(`url`)
+) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Status of ActivityPub inboxes';
+
--
-- TABLE intro
--
@@ -879,7 +896,7 @@ CREATE TABLE IF NOT EXISTS `photo` (
`deny_gid` mediumtext COMMENT 'Access Control - list of denied groups',
`backend-class` tinytext COMMENT 'Storage backend class',
`backend-ref` text COMMENT 'Storage backend data reference',
- `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'edited timestamp',
+ `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
PRIMARY KEY(`id`),
INDEX `contactid` (`contact-id`),
INDEX `uid_contactid` (`uid`,`contact-id`),
@@ -1013,25 +1030,6 @@ CREATE TABLE IF NOT EXISTS `push_subscriber` (
INDEX `next_try` (`next_try`)
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Used for OStatus: Contains feed subscribers';
---
--- TABLE queue
---
-CREATE TABLE IF NOT EXISTS `queue` (
- `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
- `cid` int unsigned NOT NULL DEFAULT 0 COMMENT 'Message receiver',
- `network` char(4) NOT NULL DEFAULT '' COMMENT 'Receiver\'s network',
- `guid` varchar(255) NOT NULL DEFAULT '' COMMENT 'Unique GUID of the message',
- `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date, when the message was created',
- `last` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date of last trial',
- `next` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Next retrial date',
- `retrial` tinyint NOT NULL DEFAULT 0 COMMENT 'Retrial counter',
- `content` mediumtext COMMENT '',
- `batch` boolean NOT NULL DEFAULT '0' COMMENT '',
- PRIMARY KEY(`id`),
- INDEX `last` (`last`),
- INDEX `next` (`next`)
-) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Queue for messages that couldn\'t be delivered';
-
--
-- TABLE register
--
@@ -1099,6 +1097,7 @@ CREATE TABLE IF NOT EXISTS `term` (
`global` boolean NOT NULL DEFAULT '0' COMMENT '',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id',
PRIMARY KEY(`tid`),
+ INDEX `term_type` (`term`(64),`type`),
INDEX `oid_otype_type_term` (`oid`,`otype`,`type`,`term`(32)),
INDEX `uid_otype_type_term_global_created` (`uid`,`otype`,`type`,`term`(32),`global`,`created`),
INDEX `uid_otype_type_url` (`uid`,`otype`,`type`,`url`(64)),
@@ -1270,13 +1269,12 @@ CREATE TABLE IF NOT EXISTS `workerqueue` (
`retrial` tinyint NOT NULL DEFAULT 0 COMMENT 'Retrial counter',
`done` boolean NOT NULL DEFAULT '0' COMMENT 'Marked 1 when the task was done - will be deleted later',
PRIMARY KEY(`id`),
- INDEX `pid` (`pid`),
- INDEX `parameter` (`parameter`(64)),
- INDEX `priority_created_next_try` (`priority`,`created`,`next_try`),
- INDEX `done_priority_executed_next_try` (`done`,`priority`,`executed`,`next_try`),
- INDEX `done_executed_next_try` (`done`,`executed`,`next_try`),
+ INDEX `done_parameter` (`done`,`parameter`(64)),
+ INDEX `done_executed` (`done`,`executed`),
+ INDEX `done_priority_created` (`done`,`priority`,`created`),
INDEX `done_priority_next_try` (`done`,`priority`,`next_try`),
- INDEX `done_next_try` (`done`,`next_try`)
+ INDEX `done_pid_next_try` (`done`,`pid`,`next_try`),
+ INDEX `done_pid_priority_created` (`done`,`pid`,`priority`,`created`)
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Background tasks queue entries';
--
diff --git a/doc/Addons.md b/doc/Addons.md
index 29cf22bfe..47d16085a 100644
--- a/doc/Addons.md
+++ b/doc/Addons.md
@@ -7,48 +7,65 @@ Please see the sample addon 'randplace' for a working example of using some of t
Addons work by intercepting event hooks - which must be registered.
Modules work by intercepting specific page requests (by URL path).
-Addon names cannot contain spaces or other punctuation and are used as filenames and function names.
-You may supply a "friendly" name within the comment block.
-Each addon must contain both an install and an uninstall function based on the addon name.
-For instance "addon1name_install()".
-These two functions take no arguments and are usually responsible for registering (and unregistering) event hooks that your addon will require.
-The install and uninstall functions will also be called (i.e. re-installed) if the addon changes after installation.
+## Naming
+
+Addon names are used in file paths and functions names, and as such:
+- Can't contain spaces or punctuation.
+- Can't start with a number.
+
+## Metadata
+
+You can provide human-readable information about your addon in the first multi-line comment of your addon file.
+
+Here's the structure:
+
+```php
+/**
+ * Name: {Human-readable name}
+ * Description: {Short description}
+ * Version: 1.0
+ * Author: {Author1 Name}
+ * Author: {Author2 Name} <{Author profile link}>
+ * Maintainer: {Maintainer1 Name}
+ * Maintainer: {Maintainer2 Name} <{Maintainer profile link}>
+ * Status: {Unsupported|Arbitrary status}
+ */
+```
+
+You can also provide a longer documentation in a `README` or `README.md` file.
+The latter will be converted from Markdown to HTML in the addon detail page.
+
+## Install/Uninstall
+
+If your addon uses hooks, they have to be registered in a ` ';
- $o .= L10n::t('This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s.',
- '' . FRIENDICA_VERSION . '', System::baseUrl(), '' . DB_UPDATE_VERSION . '',
- '' . Config::get("system", "post_update_version") . '');
- $o .= ' ';
- $o .= L10n::t('Please visit Friendi.ca to learn more about the Friendica project.') . PHP_EOL;
- $o .= ' ';
- $o .= L10n::t('Bug reports and issues: please visit') . ' ' . ''.L10n::t('the bugtracker at github').'';
- $o .= ' ';
- $o .= L10n::t('Suggestions, praise, etc. - please email "info" at "friendi - dot - ca');
- $o .= ' ' . L10n::t('Installed addons/apps:') . ' ' . L10n::t('No installed addons/apps') . ' '.L10n::t('Read about the Terms of Service of this node.', System::baseurl()).' ' . L10n::t('On this server the following remote servers are blocked.') . ' ' . L10n::t('Friendica provides this service for sharing events with other networks and friends in unknown timezones.') . ' ' . L10n::t('UTC time: %s', $t) . ' ' . L10n::t('Current timezone: %s', $_REQUEST['timezone']) . ' ' . L10n::t('Converted localtime: %s', $a->data['mod-localtime']) . '
+
-* how to [upload](help/FAQ#upload) files
-
-Those icons can change with themes. Some examples:
+These icons can change depending on the theme. Some examples:
-
-
+Darkbubble:
+ Vier:
+
+
+
+
Smoothly:
- (inkl. smoothly, testbubble)
+
-Frost:
-
Vier:
-
- (inkl. dispy)
-
', 'https://dev.mysql.com/doc/refman/5.7/en/converting-tables-to-innodb.html');
- }
- // Check if github.com/friendica/master/VERSION is higher then
- // the local version of Friendica. Check is opt-in, source may be master or devel branch
- if (Config::get('system', 'check_new_version_url', 'none') != 'none') {
- $gitversion = Config::get('system', 'git_friendica_version');
- if (version_compare(FRIENDICA_VERSION, $gitversion) < 0) {
- $warningtext[] = L10n::t('There is a new version of Friendica available for download. Your current version is %1$s, upstream version is %2$s', FRIENDICA_VERSION, $gitversion);
- $showwarning = true;
- }
- }
-
- if (Config::get('system', 'dbupdate', DBStructure::UPDATE_NOT_CHECKED) == DBStructure::UPDATE_NOT_CHECKED) {
- DBStructure::update($a->getBasePath(), false, true);
- }
- if (Config::get('system', 'dbupdate') == DBStructure::UPDATE_FAILED) {
- $showwarning = true;
- $warningtext[] = L10n::t('The database update failed. Please run "php bin/console.php dbstructure update" from the command line and have a look at the errors that might appear.');
- }
-
- $last_worker_call = Config::get('system', 'last_worker_execution', false);
- if (!$last_worker_call) {
- $showwarning = true;
- $warningtext[] = L10n::t('The worker was never executed. Please check your database structure!');
- } elseif ((strtotime(DateTimeFormat::utcNow()) - strtotime($last_worker_call)) > 60 * 60) {
- $showwarning = true;
- $warningtext[] = L10n::t('The last worker execution was on %s UTC. This is older than one hour. Please check your crontab settings.', $last_worker_call);
- }
-
- // Legacy config file warning
- if (file_exists('.htconfig.php')) {
- $showwarning = true;
- $warningtext[] = L10n::t('Friendica\'s configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from .htconfig.php
. See the Config help page for help with the transition.', $a->getBaseURL() . '/help/Config');
- }
- if (file_exists('config/local.ini.php')) {
- $showwarning = true;
- $warningtext[] = L10n::t('Friendica\'s configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition.', $a->getBaseURL() . '/help/Config');
- }
-
- // Check server vitality
- if (!admin_page_server_vital()) {
- $showwarning = true;
- $well_known = $a->getBaseURL() . '/.well-known/host-meta';
- $warningtext[] = L10n::t('%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help.',
- $well_known, $well_known, $a->getBaseURL() . '/help/Install');
- }
-
- $r = q("SELECT `page-flags`, COUNT(`uid`) AS `count` FROM `user` GROUP BY `page-flags`");
- $accounts = [
- [L10n::t('Normal Account'), 0],
- [L10n::t('Automatic Follower Account'), 0],
- [L10n::t('Public Forum Account'), 0],
- [L10n::t('Automatic Friend Account'), 0],
- [L10n::t('Blog Account'), 0],
- [L10n::t('Private Forum Account'), 0]
- ];
-
- $users = 0;
- foreach ($r as $u) {
- $accounts[$u['page-flags']][1] = $u['count'];
- $users += $u['count'];
- }
-
- Logger::log('accounts: ' . print_r($accounts, true), Logger::DATA);
-
- $pending = Register::getPendingCount();
-
- $queue = DBA::count('queue', []);
-
- $deferred = DBA::count('workerqueue', ["`executed` <= ? AND NOT `done` AND `next_try` > ?",
- DBA::NULL_DATETIME, DateTimeFormat::utcNow()]);
-
- $workerqueue = DBA::count('workerqueue', ["`executed` <= ? AND NOT `done` AND `next_try` < ?",
- DBA::NULL_DATETIME, DateTimeFormat::utcNow()]);
-
- // We can do better, but this is a quick queue status
-
- $queues = ['label' => L10n::t('Message queues'), 'queue' => $queue, 'deferred' => $deferred, 'workerq' => $workerqueue];
-
-
- $r = q("SHOW variables LIKE 'max_allowed_packet'");
- $max_allowed_packet = (($r) ? $r[0]['Value'] : 0);
-
- $server_settings = ['label' => L10n::t('Server Settings'),
- 'php' => ['upload_max_filesize' => ini_get('upload_max_filesize'),
- 'post_max_size' => ini_get('post_max_size'),
- 'memory_limit' => ini_get('memory_limit')],
- 'mysql' => ['max_allowed_packet' => $max_allowed_packet]];
-
- $t = Renderer::getMarkupTemplate('admin/summary.tpl');
- return Renderer::replaceMacros($t, [
- '$title' => L10n::t('Administration'),
- '$page' => L10n::t('Summary'),
- '$queues' => $queues,
- '$users' => [L10n::t('Registered users'), $users],
- '$accounts' => $accounts,
- '$pending' => [L10n::t('Pending registrations'), $pending],
- '$version' => [L10n::t('Version'), FRIENDICA_VERSION],
- '$baseurl' => System::baseUrl(),
- '$platform' => FRIENDICA_PLATFORM,
- '$codename' => FRIENDICA_CODENAME,
- '$build' => Config::get('system', 'build'),
- '$addons' => [L10n::t('Active addons'), Addon::getEnabledList()],
- '$serversettings' => $server_settings,
- '$showwarning' => $showwarning,
- '$warningtext' => $warningtext
- ]);
-}
-
-/**
- * @brief Process send data from Admin Site Page
- *
- * @param App $a
- * @throws \Friendica\Network\HTTPException\InternalServerErrorException
- */
-function admin_page_site_post(App $a)
-{
- BaseModule::checkFormSecurityTokenRedirectOnError('/admin/site', 'admin_site');
-
- if (!empty($_POST['republish_directory'])) {
- Worker::add(PRIORITY_LOW, 'Directory');
- return;
- }
-
- if (empty($_POST['page_site'])) {
- return;
- }
-
- // relocate
- if (!empty($_POST['relocate']) && !empty($_POST['relocate_url']) && $_POST['relocate_url'] != "") {
- $new_url = $_POST['relocate_url'];
- $new_url = rtrim($new_url, "/");
-
- $parsed = @parse_url($new_url);
- if (!is_array($parsed) || empty($parsed['host']) || empty($parsed['scheme'])) {
- notice(L10n::t("Can not parse base url. Must have at least "; var_dump($lang_choices); die("
");
-
- /* Register policy */
- $register_choices = [
- Module\Register::CLOSED => L10n::t("Closed"),
- Module\Register::APPROVE => L10n::t("Requires approval"),
- Module\Register::OPEN => L10n::t("Open")
- ];
-
- $ssl_choices = [
- SSL_POLICY_NONE => L10n::t("No SSL policy, links will track page SSL state"),
- SSL_POLICY_FULL => L10n::t("Force all links to use SSL"),
- SSL_POLICY_SELFSIGN => L10n::t("Self-signed certificate, use SSL for local links only \x28discouraged\x29")
- ];
-
- $check_git_version_choices = [
- "none" => L10n::t("Don't check"),
- "master" => L10n::t("check the stable version"),
- "develop" => L10n::t("check the development version")
- ];
-
- if (empty(Config::get('config', 'hostname'))) {
- Config::set('config', 'hostname', $a->getHostName());
- }
- $diaspora_able = ($a->getURLPath() == "");
-
- $optimize_max_tablesize = Config::get('system', 'optimize_max_tablesize', -1);
-
- if ($optimize_max_tablesize <= 0) {
- $optimize_max_tablesize = -1;
- }
-
- /* storage backend */
- $storage_backends = StorageManager::listBackends();
- /**
- * @var $storage_current_backend \Friendica\Model\Storage\IStorage
- */
- $storage_current_backend = StorageManager::getBackend();
-
- $storage_backends_choices = [
- '' => L10n::t('Database (legacy)')
- ];
- foreach($storage_backends as $name=>$class) {
- $storage_backends_choices[$class] = $name;
- }
- unset($storage_backends);
-
- // build storage config form,
- $storage_form_prefix=preg_replace('|[^a-zA-Z0-9]|' ,'', $storage_current_backend);
-
- $storage_form = [];
- if (!is_null($storage_current_backend) && $storage_current_backend != "") {
- foreach ($storage_current_backend::getOptions() as $name => $info) {
- $type = $info[0];
- $info[0] = $storage_form_prefix . '_' . $name;
- $info['type'] = $type;
- $info['field'] = 'field_' . $type . '.tpl';
- $storage_form[$name] = $info;
- }
- }
-
-
- $t = Renderer::getMarkupTemplate('admin/site.tpl');
- return Renderer::replaceMacros($t, [
- '$title' => L10n::t('Administration'),
- '$page' => L10n::t('Site'),
- '$submit' => L10n::t('Save Settings'),
- '$republish' => L10n::t('Republish users to directory'),
- '$registration' => L10n::t('Registration'),
- '$upload' => L10n::t('File upload'),
- '$corporate' => L10n::t('Policies'),
- '$advanced' => L10n::t('Advanced'),
- '$portable_contacts' => L10n::t('Auto Discovered Contact Directory'),
- '$performance' => L10n::t('Performance'),
- '$worker_title' => L10n::t('Worker'),
- '$relay_title' => L10n::t('Message Relay'),
- '$relocate' => L10n::t('Relocate Instance'),
- '$relocate_warning' => L10n::t('Warning! Advanced function. Could make this server unreachable.'),
- '$baseurl' => System::baseUrl(true),
-
- // name, label, value, help string, extra data...
- '$sitename' => ['sitename', L10n::t("Site name"), Config::get('config', 'sitename'), ''],
- '$hostname' => ['hostname', L10n::t("Host name"), Config::get('config', 'hostname'), ""],
- '$sender_email' => ['sender_email', L10n::t("Sender Email"), Config::get('config', 'sender_email'), L10n::t("The email address your server shall use to send notification emails from."), "", "", "email"],
- '$banner' => ['banner', L10n::t("Banner/Logo"), $banner, ""],
- '$shortcut_icon' => ['shortcut_icon', L10n::t("Shortcut icon"), Config::get('system', 'shortcut_icon'), L10n::t("Link to an icon that will be used for browsers.")],
- '$touch_icon' => ['touch_icon', L10n::t("Touch icon"), Config::get('system', 'touch_icon'), L10n::t("Link to an icon that will be used for tablets and mobiles.")],
- '$additional_info' => ['additional_info', L10n::t('Additional Info'), $additional_info, L10n::t('For public servers: you can add additional information here that will be listed at %s/servers.', get_server())],
- '$language' => ['language', L10n::t("System language"), Config::get('system', 'language'), "", $lang_choices],
- '$theme' => ['theme', L10n::t("System theme"), Config::get('system', 'theme'), L10n::t("Default system theme - may be over-ridden by user profiles - change theme settings"), $theme_choices],
- '$theme_mobile' => ['theme_mobile', L10n::t("Mobile system theme"), Config::get('system', 'mobile-theme', '---'), L10n::t("Theme for mobile devices"), $theme_choices_mobile],
- '$ssl_policy' => ['ssl_policy', L10n::t("SSL link policy"), (string)intval(Config::get('system', 'ssl_policy')), L10n::t("Determines whether generated links should be forced to use SSL"), $ssl_choices],
- '$force_ssl' => ['force_ssl', L10n::t("Force SSL"), Config::get('system', 'force_ssl'), L10n::t("Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops.")],
- '$hide_help' => ['hide_help', L10n::t("Hide help entry from navigation menu"), Config::get('system', 'hide_help'), L10n::t("Hides the menu entry for the Help pages from the navigation menu. You can still access it calling /help directly.")],
- '$singleuser' => ['singleuser', L10n::t("Single user instance"), Config::get('system', 'singleuser', '---'), L10n::t("Make this instance multi-user or single-user for the named user"), $user_names],
-
- '$storagebackend' => ['storagebackend', L10n::t("File storage backend"), $storage_current_backend, L10n::t('The backend used to store uploaded data. If you change the storage backend, you can manually move the existing files. If you do not do so, the files uploaded before the change will still be available at the old backend. Please see the settings documentation for more information about the choices and the moving procedure.'), $storage_backends_choices],
- '$storageform' => $storage_form,
- '$maximagesize' => ['maximagesize', L10n::t("Maximum image size"), Config::get('system', 'maximagesize'), L10n::t("Maximum size in bytes of uploaded images. Default is 0, which means no limits.")],
- '$maximagelength' => ['maximagelength', L10n::t("Maximum image length"), Config::get('system', 'max_image_length'), L10n::t("Maximum length in pixels of the longest side of uploaded images. Default is -1, which means no limits.")],
- '$jpegimagequality' => ['jpegimagequality', L10n::t("JPEG image quality"), Config::get('system', 'jpeg_quality'), L10n::t("Uploaded JPEGS will be saved at this quality setting [0-100]. Default is 100, which is full quality.")],
-
- '$register_policy' => ['register_policy', L10n::t("Register policy"), Config::get('config', 'register_policy'), "", $register_choices],
- '$daily_registrations' => ['max_daily_registrations', L10n::t("Maximum Daily Registrations"), Config::get('system', 'max_daily_registrations'), L10n::t("If registration is permitted above, this sets the maximum number of new user registrations to accept per day. If register is set to closed, this setting has no effect.")],
- '$register_text' => ['register_text', L10n::t("Register text"), Config::get('config', 'register_text'), L10n::t("Will be displayed prominently on the registration page. You can use BBCode here.")],
- '$forbidden_nicknames' => ['forbidden_nicknames', L10n::t('Forbidden Nicknames'), Config::get('system', 'forbidden_nicknames'), L10n::t('Comma separated list of nicknames that are forbidden from registration. Preset is a list of role names according RFC 2142.')],
- '$abandon_days' => ['abandon_days', L10n::t('Accounts abandoned after x days'), Config::get('system', 'account_abandon_days'), L10n::t('Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit.')],
- '$allowed_sites' => ['allowed_sites', L10n::t("Allowed friend domains"), Config::get('system', 'allowed_sites'), L10n::t("Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains")],
- '$allowed_email' => ['allowed_email', L10n::t("Allowed email domains"), Config::get('system', 'allowed_email'), L10n::t("Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains")],
- '$no_oembed_rich_content' => ['no_oembed_rich_content', L10n::t("No OEmbed rich content"), Config::get('system', 'no_oembed_rich_content'), L10n::t("Don't show the rich content \x28e.g. embedded PDF\x29, except from the domains listed below.")],
- '$allowed_oembed' => ['allowed_oembed', L10n::t("Allowed OEmbed domains"), Config::get('system', 'allowed_oembed'), L10n::t("Comma separated list of domains which oembed content is allowed to be displayed. Wildcards are accepted.")],
- '$block_public' => ['block_public', L10n::t("Block public"), Config::get('system', 'block_public'), L10n::t("Check to block public access to all otherwise public personal pages on this site unless you are currently logged in.")],
- '$force_publish' => ['publish_all', L10n::t("Force publish"), Config::get('system', 'publish_all'), L10n::t("Check to force all profiles on this site to be listed in the site directory.") . '' . L10n::t('Enabling this may violate privacy laws like the GDPR') . ''],
- '$global_directory' => ['directory', L10n::t("Global directory URL"), Config::get('system', 'directory', 'https://dir.friendica.social'), L10n::t("URL to the global directory. If this is not set, the global directory is completely unavailable to the application.")],
- '$newuser_private' => ['newuser_private', L10n::t("Private posts by default for new users"), Config::get('system', 'newuser_private'), L10n::t("Set default post permissions for all new members to the default privacy group rather than public.")],
- '$enotify_no_content' => ['enotify_no_content', L10n::t("Don't include post content in email notifications"), Config::get('system', 'enotify_no_content'), L10n::t("Don't include the content of a post/comment/private message/etc. in the email notifications that are sent out from this site, as a privacy measure.")],
- '$private_addons' => ['private_addons', L10n::t("Disallow public access to addons listed in the apps menu."), Config::get('config', 'private_addons'), L10n::t("Checking this box will restrict addons listed in the apps menu to members only.")],
- '$disable_embedded' => ['disable_embedded', L10n::t("Don't embed private images in posts"), Config::get('system', 'disable_embedded'), L10n::t("Don't replace locally-hosted private photos in posts with an embedded copy of the image. This means that contacts who receive posts containing private photos will have to authenticate and load each image, which may take a while.")],
- '$explicit_content' => ['explicit_content', L10n::t('Explicit Content'), Config::get('system', 'explicit_content', false), L10n::t('Set this to announce that your node is used mostly for explicit content that might not be suited for minors. This information will be published in the node information and might be used, e.g. by the global directory, to filter your node from listings of nodes to join. Additionally a note about this will be shown at the user registration page.')],
- '$allow_users_remote_self'=> ['allow_users_remote_self', L10n::t('Allow Users to set remote_self'), Config::get('system', 'allow_users_remote_self'), L10n::t('With checking this, every user is allowed to mark every contact as a remote_self in the repair contact dialog. Setting this flag on a contact causes mirroring every posting of that contact in the users stream.')],
- '$no_multi_reg' => ['no_multi_reg', L10n::t("Block multiple registrations"), Config::get('system', 'block_extended_register'), L10n::t("Disallow users to register additional accounts for use as pages.")],
- '$no_openid' => ['no_openid', L10n::t("Disable OpenID"), Config::get('system', 'no_openid'), L10n::t("Disable OpenID support for registration and logins.")],
- '$no_regfullname' => ['no_regfullname', L10n::t("No Fullname check"), Config::get('system', 'no_regfullname'), L10n::t("Allow users to register without a space between the first name and the last name in their full name.")],
- '$community_page_style' => ['community_page_style', L10n::t("Community pages for visitors"), Config::get('system', 'community_page_style'), L10n::t("Which community pages should be available for visitors. Local users always see both pages."), $community_page_style_choices],
- '$max_author_posts_community_page' => ['max_author_posts_community_page', L10n::t("Posts per user on community page"), Config::get('system', 'max_author_posts_community_page'), L10n::t("The maximum number of posts per user on the community page. \x28Not valid for 'Global Community'\x29")],
- '$ostatus_disabled' => ['ostatus_disabled', L10n::t("Disable OStatus support"), Config::get('system', 'ostatus_disabled'), L10n::t("Disable built-in OStatus (StatusNet, GNU Social etc.) compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed.")],
- '$ostatus_full_threads' => ['ostatus_full_threads', L10n::t("Only import OStatus/ActivityPub threads from our contacts"), Config::get('system', 'ostatus_full_threads'), L10n::t("Normally we import every content from our OStatus and ActivityPub contacts. With this option we only store threads that are started by a contact that is known on our system.")],
- '$ostatus_not_able' => L10n::t("OStatus support can only be enabled if threading is enabled."),
- '$diaspora_able' => $diaspora_able,
- '$diaspora_not_able' => L10n::t("Diaspora support can't be enabled because Friendica was installed into a sub directory."),
- '$diaspora_enabled' => ['diaspora_enabled', L10n::t("Enable Diaspora support"), Config::get('system', 'diaspora_enabled', $diaspora_able), L10n::t("Provide built-in Diaspora network compatibility.")],
- '$dfrn_only' => ['dfrn_only', L10n::t('Only allow Friendica contacts'), Config::get('system', 'dfrn_only'), L10n::t("All contacts must use Friendica protocols. All other built-in communication protocols disabled.")],
- '$verifyssl' => ['verifyssl', L10n::t("Verify SSL"), Config::get('system', 'verifyssl'), L10n::t("If you wish, you can turn on strict certificate checking. This will mean you cannot connect \x28at all\x29 to self-signed SSL sites.")],
- '$proxyuser' => ['proxyuser', L10n::t("Proxy user"), Config::get('system', 'proxyuser'), ""],
- '$proxy' => ['proxy', L10n::t("Proxy URL"), Config::get('system', 'proxy'), ""],
- '$timeout' => ['timeout', L10n::t("Network timeout"), Config::get('system', 'curl_timeout', 60), L10n::t("Value is in seconds. Set to 0 for unlimited \x28not recommended\x29.")],
- '$maxloadavg' => ['maxloadavg', L10n::t("Maximum Load Average"), Config::get('system', 'maxloadavg', 20), L10n::t("Maximum system load before delivery and poll processes are deferred - default %d.", 20)],
- '$maxloadavg_frontend' => ['maxloadavg_frontend', L10n::t("Maximum Load Average \x28Frontend\x29"), Config::get('system', 'maxloadavg_frontend', 50), L10n::t("Maximum system load before the frontend quits service - default 50.")],
- '$min_memory' => ['min_memory', L10n::t("Minimal Memory"), Config::get('system', 'min_memory', 0), L10n::t("Minimal free memory in MB for the worker. Needs access to /proc/meminfo - default 0 \x28deactivated\x29.")],
- '$optimize_max_tablesize' => ['optimize_max_tablesize', L10n::t("Maximum table size for optimization"), $optimize_max_tablesize, L10n::t("Maximum table size \x28in MB\x29 for the automatic optimization. Enter -1 to disable it.")],
- '$optimize_fragmentation' => ['optimize_fragmentation', L10n::t("Minimum level of fragmentation"), Config::get('system', 'optimize_fragmentation', 30), L10n::t("Minimum fragmenation level to start the automatic optimization - default value is 30%.")],
-
- '$poco_completion' => ['poco_completion', L10n::t("Periodical check of global contacts"), Config::get('system', 'poco_completion'), L10n::t("If enabled, the global contacts are checked periodically for missing or outdated data and the vitality of the contacts and servers.")],
- '$poco_requery_days' => ['poco_requery_days', L10n::t("Days between requery"), Config::get('system', 'poco_requery_days'), L10n::t("Number of days after which a server is requeried for his contacts.")],
- '$poco_discovery' => ['poco_discovery', L10n::t("Discover contacts from other servers"), (string)intval(Config::get('system', 'poco_discovery')), L10n::t("Periodically query other servers for contacts. You can choose between 'users': the users on the remote system, 'Global Contacts': active contacts that are known on the system. The fallback is meant for Redmatrix servers and older friendica servers, where global contacts weren't available. The fallback increases the server load, so the recommended setting is 'Users, Global Contacts'."), $poco_discovery_choices],
- '$poco_discovery_since' => ['poco_discovery_since', L10n::t("Timeframe for fetching global contacts"), (string)intval(Config::get('system', 'poco_discovery_since')), L10n::t("When the discovery is activated, this value defines the timeframe for the activity of the global contacts that are fetched from other servers."), $poco_discovery_since_choices],
- '$poco_local_search' => ['poco_local_search', L10n::t("Search the local directory"), Config::get('system', 'poco_local_search'), L10n::t("Search the local directory instead of the global directory. When searching locally, every search will be executed on the global directory in the background. This improves the search results when the search is repeated.")],
-
- '$nodeinfo' => ['nodeinfo', L10n::t("Publish server information"), Config::get('system', 'nodeinfo'), L10n::t("If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See the-federation.info for details.")],
-
- '$check_new_version_url' => ['check_new_version_url', L10n::t("Check upstream version"), Config::get('system', 'check_new_version_url'), L10n::t("Enables checking for new Friendica versions at github. If there is a new version, you will be informed in the admin panel overview."), $check_git_version_choices],
- '$suppress_tags' => ['suppress_tags', L10n::t("Suppress Tags"), Config::get('system', 'suppress_tags'), L10n::t("Suppress showing a list of hashtags at the end of the posting.")],
- '$dbclean' => ['dbclean', L10n::t("Clean database"), Config::get('system', 'dbclean', false), L10n::t("Remove old remote items, orphaned database records and old content from some other helper tables.")],
- '$dbclean_expire_days' => ['dbclean_expire_days', L10n::t("Lifespan of remote items"), Config::get('system', 'dbclean-expire-days', 0), L10n::t("When the database cleanup is enabled, this defines the days after which remote items will be deleted. Own items, and marked or filed items are always kept. 0 disables this behaviour.")],
- '$dbclean_unclaimed' => ['dbclean_unclaimed', L10n::t("Lifespan of unclaimed items"), Config::get('system', 'dbclean-expire-unclaimed', 90), L10n::t("When the database cleanup is enabled, this defines the days after which unclaimed remote items (mostly content from the relay) will be deleted. Default value is 90 days. Defaults to the general lifespan value of remote items if set to 0.")],
- '$dbclean_expire_conv' => ['dbclean_expire_conv', L10n::t("Lifespan of raw conversation data"), Config::get('system', 'dbclean_expire_conversation', 90), L10n::t("The conversation data is used for ActivityPub and OStatus, as well as for debug purposes. It should be safe to remove it after 14 days, default is 90 days.")],
- '$itemcache' => ['itemcache', L10n::t("Path to item cache"), Config::get('system', 'itemcache'), L10n::t("The item caches buffers generated bbcode and external images.")],
- '$itemcache_duration' => ['itemcache_duration', L10n::t("Cache duration in seconds"), Config::get('system', 'itemcache_duration'), L10n::t("How long should the cache files be hold? Default value is 86400 seconds \x28One day\x29. To disable the item cache, set the value to -1.")],
- '$max_comments' => ['max_comments', L10n::t("Maximum numbers of comments per post"), Config::get('system', 'max_comments'), L10n::t("How much comments should be shown for each post? Default value is 100.")],
- '$temppath' => ['temppath', L10n::t("Temp path"), Config::get('system', 'temppath'), L10n::t("If you have a restricted system where the webserver can't access the system temp path, enter another path here.")],
- '$basepath' => ['basepath', L10n::t("Base path to installation"), Config::get('system', 'basepath'), L10n::t("If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot.")],
- '$proxy_disabled' => ['proxy_disabled', L10n::t("Disable picture proxy"), Config::get('system', 'proxy_disabled'), L10n::t("The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwidth.")],
- '$only_tag_search' => ['only_tag_search', L10n::t("Only search in tags"), Config::get('system', 'only_tag_search'), L10n::t("On large systems the text search can slow down the system extremely.")],
-
- '$relocate_url' => ['relocate_url', L10n::t("New base url"), System::baseUrl(), L10n::t("Change base url for this server. Sends relocate message to all Friendica and Diaspora* contacts of all users.")],
-
- '$rino' => ['rino', L10n::t("RINO Encryption"), intval(Config::get('system', 'rino_encrypt')), L10n::t("Encryption layer between nodes."), [0 => L10n::t("Disabled"), 1 => L10n::t("Enabled")]],
-
- '$worker_queues' => ['worker_queues', L10n::t("Maximum number of parallel workers"), Config::get('system', 'worker_queues'), L10n::t("On shared hosters set this to %d. On larger systems, values of %d are great. Default value is %d.", 5, 20, 10)],
- '$worker_dont_fork' => ['worker_dont_fork', L10n::t("Don't use 'proc_open' with the worker"), Config::get('system', 'worker_dont_fork'), L10n::t("Enable this if your system doesn't allow the use of 'proc_open'. This can happen on shared hosters. If this is enabled you should increase the frequency of worker calls in your crontab.")],
- '$worker_fastlane' => ['worker_fastlane', L10n::t("Enable fastlane"), Config::get('system', 'worker_fastlane'), L10n::t("When enabed, the fastlane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority.")],
- '$worker_frontend' => ['worker_frontend', L10n::t('Enable frontend worker'), Config::get('system', 'frontend_worker'), L10n::t('When enabled the Worker process is triggered when backend access is performed \x28e.g. messages being delivered\x29. On smaller sites you might want to call %s/worker on a regular basis via an external cron job. You should only enable this option if you cannot utilize cron/scheduled jobs on your server.', System::baseUrl())],
-
- '$relay_subscribe' => ['relay_subscribe', L10n::t("Subscribe to relay"), Config::get('system', 'relay_subscribe'), L10n::t("Enables the receiving of public posts from the relay. They will be included in the search, subscribed tags and on the global community page.")],
- '$relay_server' => ['relay_server', L10n::t("Relay server"), Config::get('system', 'relay_server', 'https://relay.diasp.org'), L10n::t("Address of the relay server where public posts should be send to. For example https://relay.diasp.org")],
- '$relay_directly' => ['relay_directly', L10n::t("Direct relay transfer"), Config::get('system', 'relay_directly'), L10n::t("Enables the direct transfer to other servers without using the relay servers")],
- '$relay_scope' => ['relay_scope', L10n::t("Relay scope"), Config::get('system', 'relay_scope'), L10n::t("Can be 'all' or 'tags'. 'all' means that every public post should be received. 'tags' means that only posts with selected tags should be received."), ['' => L10n::t('Disabled'), 'all' => L10n::t('all'), 'tags' => L10n::t('tags')]],
- '$relay_server_tags' => ['relay_server_tags', L10n::t("Server tags"), Config::get('system', 'relay_server_tags'), L10n::t("Comma separated list of tags for the 'tags' subscription.")],
- '$relay_user_tags' => ['relay_user_tags', L10n::t("Allow user tags"), Config::get('system', 'relay_user_tags', true), L10n::t("If enabled, the tags from the saved searches will used for the 'tags' subscription in addition to the 'relay_server_tags'.")],
-
- '$form_security_token' => BaseModule::getFormSecurityToken("admin_site"),
- '$relocate_button' => L10n::t('Start Relocation'),
- ]);
-}
-
-/**
- * @brief Generates admin panel subpage for DB syncronization
- *
- * This page checks if the database of friendica is in sync with the specs.
- * Should this not be the case, it attemps to sync the structure and notifies
- * the admin if the automatic process was failing.
- *
- * The returned string holds the HTML code of the page.
- *
- * @param App $a
- * @return string
- * @throws \Friendica\Network\HTTPException\InternalServerErrorException
- */
-function admin_page_dbsync(App $a)
-{
- $o = '';
-
- if ($a->argc > 3 && intval($a->argv[3]) && $a->argv[2] === 'mark') {
- Config::set('database', 'update_' . intval($a->argv[3]), 'success');
- $curr = Config::get('system', 'build');
- if (intval($curr) == intval($a->argv[3])) {
- Config::set('system', 'build', intval($curr) + 1);
- }
- info(L10n::t('Update has been marked successful') . EOL);
- $a->internalRedirect('admin/dbsync');
- }
-
- if (($a->argc > 2) && (intval($a->argv[2]) || ($a->argv[2] === 'check'))) {
- $retval = DBStructure::update($a->getBasePath(), false, true);
- if ($retval === '') {
- $o .= L10n::t("Database structure update %s was successfully applied.", DB_UPDATE_VERSION) . "
";
- Config::set('database', 'last_successful_update', DB_UPDATE_VERSION);
- Config::set('database', 'last_successful_update_time', time());
- } else {
- $o .= L10n::t("Executing of database structure update %s failed with error: %s", DB_UPDATE_VERSION, $retval) . "
";
- }
- if ($a->argv[2] === 'check') {
- return $o;
- }
- }
-
- if ($a->argc > 2 && intval($a->argv[2])) {
- require_once 'update.php';
-
- $func = 'update_' . intval($a->argv[2]);
-
- if (function_exists($func)) {
- $retval = $func();
-
- if ($retval === Update::FAILED) {
- $o .= L10n::t("Executing %s failed with error: %s", $func, $retval);
- } elseif ($retval === Update::SUCCESS) {
- $o .= L10n::t('Update %s was successfully applied.', $func);
- Config::set('database', $func, 'success');
- } else {
- $o .= L10n::t('Update %s did not return a status. Unknown if it succeeded.', $func);
- }
- } else {
- $o .= L10n::t('There was no additional update function %s that needed to be called.', $func) . "
";
- Config::set('database', $func, 'success');
- }
-
- return $o;
- }
-
- $failed = [];
- $r = q("SELECT `k`, `v` FROM `config` WHERE `cat` = 'database' ");
-
- if (DBA::isResult($r)) {
- foreach ($r as $rr) {
- $upd = intval(substr($rr['k'], 7));
- if ($upd < 1139 || $rr['v'] === 'success') {
- continue;
- }
- $failed[] = $upd;
- }
- }
-
- if (!count($failed)) {
- $o = Renderer::replaceMacros(Renderer::getMarkupTemplate('structure_check.tpl'), [
- '$base' => System::baseUrl(true),
- '$banner' => L10n::t('No failed updates.'),
- '$check' => L10n::t('Check database structure'),
- ]);
- } else {
- $o = Renderer::replaceMacros(Renderer::getMarkupTemplate('failed_updates.tpl'), [
- '$base' => System::baseUrl(true),
- '$banner' => L10n::t('Failed Updates'),
- '$desc' => L10n::t('This does not include updates prior to 1139, which did not return a status.'),
- '$mark' => L10n::t("Mark success \x28if update was manually applied\x29"),
- '$apply' => L10n::t('Attempt to execute this update step automatically'),
- '$failed' => $failed
- ]);
- }
-
- return $o;
-}
-
-/**
- * @brief Process data send by Users admin page
- *
- * @param App $a
- * @throws \Friendica\Network\HTTPException\InternalServerErrorException
- */
-function admin_page_users_post(App $a)
-{
- $pending = defaults($_POST, 'pending' , []);
- $users = defaults($_POST, 'user' , []);
- $nu_name = defaults($_POST, 'new_user_name' , '');
- $nu_nickname = defaults($_POST, 'new_user_nickname', '');
- $nu_email = defaults($_POST, 'new_user_email' , '');
- $nu_language = Config::get('system', 'language');
-
- BaseModule::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users');
-
- if (!($nu_name === "") && !($nu_email === "") && !($nu_nickname === "")) {
- try {
- $result = User::create([
- 'username' => $nu_name,
- 'email' => $nu_email,
- 'nickname' => $nu_nickname,
- 'verified' => 1,
- 'language' => $nu_language
- ]);
- } catch (Exception $ex) {
- notice($ex->getMessage());
- return;
- }
-
- $user = $result['user'];
- $preamble = Strings::deindent(L10n::t('
- Dear %1$s,
- the administrator of %2$s has set up an account for you.'));
- $body = Strings::deindent(L10n::t('
- The login details are as follows:
-
- Site Location: %1$s
- Login Name: %2$s
- Password: %3$s
-
- You may change your password from your account "Settings" page after logging
- in.
-
- Please take a few moments to review the other account settings on that page.
-
- You may also wish to add some basic information to your default profile
- ' . "\x28" . 'on the "Profiles" page' . "\x29" . ' so that other people can easily find you.
-
- We recommend setting your full name, adding a profile photo,
- adding some profile "keywords" ' . "\x28" . 'very useful in making new friends' . "\x29" . ' - and
- perhaps what country you live in; if you do not wish to be more specific
- than that.
-
- We fully respect your right to privacy, and none of these items are necessary.
- If you are new and do not know anybody here, they may help
- you to make some new and interesting friends.
-
- If you ever want to delete your account, you can do so at %1$s/removeme
-
- Thank you and welcome to %4$s.'));
-
- $preamble = sprintf($preamble, $user['username'], Config::get('config', 'sitename'));
- $body = sprintf($body, System::baseUrl(), $user['nickname'], $result['password'], Config::get('config', 'sitename'));
-
- notification([
- 'type' => SYSTEM_EMAIL,
- 'language' => $user['language'],
- 'to_name' => $user['username'],
- 'to_email' => $user['email'],
- 'uid' => $user['uid'],
- 'subject' => L10n::t('Registration details for %s', Config::get('config', 'sitename')),
- 'preamble' => $preamble,
- 'body' => $body]);
- }
-
- if (!empty($_POST['page_users_block'])) {
- foreach ($users as $uid) {
- q("UPDATE `user` SET `blocked` = 1-`blocked` WHERE `uid` = %s", intval($uid)
- );
- }
- notice(L10n::tt("%s user blocked/unblocked", "%s users blocked/unblocked", count($users)));
- }
- if (!empty($_POST['page_users_delete'])) {
- foreach ($users as $uid) {
- if (local_user() != $uid) {
- User::remove($uid);
- } else {
- notice(L10n::t('You can\'t remove yourself'));
- }
- }
- notice(L10n::tt("%s user deleted", "%s users deleted", count($users)));
- }
-
- if (!empty($_POST['page_users_approve'])) {
- require_once "mod/regmod.php";
- foreach ($pending as $hash) {
- user_allow($hash);
- }
- }
- if (!empty($_POST['page_users_deny'])) {
- require_once "mod/regmod.php";
- foreach ($pending as $hash) {
- user_deny($hash);
- }
- }
- $a->internalRedirect('admin/users');
- return; // NOTREACHED
-}
-
-/**
- * @brief Admin panel subpage for User management
- *
- * This function generates the admin panel page for user management of the
- * node. It offers functionality to add/block/delete users and offers some
- * statistics about the userbase.
- *
- * The returned string holds the HTML code of the page.
- *
- * @param App $a
- * @return string
- * @throws \Friendica\Network\HTTPException\InternalServerErrorException
- */
-function admin_page_users(App $a)
-{
- if ($a->argc > 2) {
- $uid = $a->argv[3];
- $user = DBA::selectFirst('user', ['username', 'blocked'], ['uid' => $uid]);
- if (!DBA::isResult($user)) {
- notice('User not found' . EOL);
- $a->internalRedirect('admin/users');
- return ''; // NOTREACHED
- }
- switch ($a->argv[2]) {
- case "delete":
- if (local_user() != $uid) {
- BaseModule::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users', 't');
- // delete user
- User::remove($uid);
-
- notice(L10n::t("User '%s' deleted", $user['username']));
- } else {
- notice(L10n::t('You can\'t remove yourself'));
- }
- break;
- case "block":
- BaseModule::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users', 't');
- q("UPDATE `user` SET `blocked` = %d WHERE `uid` = %s",
- intval(1 - $user['blocked']),
- intval($uid)
- );
- notice(sprintf(($user['blocked'] ? L10n::t("User '%s' unblocked") : L10n::t("User '%s' blocked")), $user['username']) . EOL);
- break;
- }
- $a->internalRedirect('admin/users');
- return ''; // NOTREACHED
- }
-
- /* get pending */
- $pending = Register::getPending();
-
- $pager = new Pager($a->query_string, 100);
-
- /* ordering */
- $valid_orders = [
- 'contact.name',
- 'user.email',
- 'user.register_date',
- 'user.login_date',
- 'lastitem_date',
- 'user.page-flags'
- ];
-
- $order = "contact.name";
- $order_direction = "+";
- if (!empty($_GET['o'])) {
- $new_order = $_GET['o'];
- if ($new_order[0] === "-") {
- $order_direction = "-";
- $new_order = substr($new_order, 1);
- }
-
- if (in_array($new_order, $valid_orders)) {
- $order = $new_order;
- }
- }
- $sql_order = "`" . str_replace('.', '`.`', $order) . "`";
- $sql_order_direction = ($order_direction === "+") ? "ASC" : "DESC";
-
- $users = q("SELECT `user`.*, `contact`.`name`, `contact`.`url`, `contact`.`micro`, `user`.`account_expired`, `contact`.`last-item` AS `lastitem_date`
- FROM `user`
- INNER JOIN `contact` ON `contact`.`uid` = `user`.`uid` AND `contact`.`self`
- WHERE `user`.`verified`
- ORDER BY $sql_order $sql_order_direction LIMIT %d, %d", $pager->getStart(), $pager->getItemsPerPage()
- );
-
- $adminlist = explode(",", str_replace(" ", "", Config::get('config', 'admin_email')));
- $_setup_users = function ($e) use ($adminlist) {
- $page_types = [
- User::PAGE_FLAGS_NORMAL => L10n::t('Normal Account Page'),
- User::PAGE_FLAGS_SOAPBOX => L10n::t('Soapbox Page'),
- User::PAGE_FLAGS_COMMUNITY => L10n::t('Public Forum'),
- User::PAGE_FLAGS_FREELOVE => L10n::t('Automatic Friend Page'),
- User::PAGE_FLAGS_PRVGROUP => L10n::t('Private Forum')
- ];
- $account_types = [
- User::ACCOUNT_TYPE_PERSON => L10n::t('Personal Page'),
- User::ACCOUNT_TYPE_ORGANISATION => L10n::t('Organisation Page'),
- User::ACCOUNT_TYPE_NEWS => L10n::t('News Page'),
- User::ACCOUNT_TYPE_COMMUNITY => L10n::t('Community Forum'),
- User::ACCOUNT_TYPE_RELAY => L10n::t('Relay'),
- ];
-
- $e['page_flags_raw'] = $e['page-flags'];
- $e['page-flags'] = $page_types[$e['page-flags']];
-
- $e['account_type_raw'] = ($e['page_flags_raw'] == 0) ? $e['account-type'] : -1;
- $e['account-type'] = ($e['page_flags_raw'] == 0) ? $account_types[$e['account-type']] : "";
-
- $e['register_date'] = Temporal::getRelativeDate($e['register_date']);
- $e['login_date'] = Temporal::getRelativeDate($e['login_date']);
- $e['lastitem_date'] = Temporal::getRelativeDate($e['lastitem_date']);
- $e['is_admin'] = in_array($e['email'], $adminlist);
- $e['is_deletable'] = (intval($e['uid']) != local_user());
- $e['deleted'] = ($e['account_removed'] ? Temporal::getRelativeDate($e['account_expires_on']) : False);
-
- return $e;
- };
-
- $users = array_map($_setup_users, $users);
-
-
- // Get rid of dashes in key names, Smarty3 can't handle them
- // and extracting deleted users
-
- $tmp_users = [];
- $deleted = [];
-
- while (count($users)) {
- $new_user = [];
- foreach (array_pop($users) as $k => $v) {
- $k = str_replace('-', '_', $k);
- $new_user[$k] = $v;
- }
- if ($new_user['deleted']) {
- array_push($deleted, $new_user);
- } else {
- array_push($tmp_users, $new_user);
- }
- }
- //Reversing the two array, and moving $tmp_users to $users
- array_reverse($deleted);
- while (count($tmp_users)) {
- array_push($users, array_pop($tmp_users));
- }
-
- $th_users = array_map(null, [L10n::t('Name'), L10n::t('Email'), L10n::t('Register date'), L10n::t('Last login'), L10n::t('Last item'), L10n::t('Type')], $valid_orders);
-
- $t = Renderer::getMarkupTemplate('admin/users.tpl');
- $o = Renderer::replaceMacros($t, [
- // strings //
- '$title' => L10n::t('Administration'),
- '$page' => L10n::t('Users'),
- '$submit' => L10n::t('Add User'),
- '$select_all' => L10n::t('select all'),
- '$h_pending' => L10n::t('User registrations waiting for confirm'),
- '$h_deleted' => L10n::t('User waiting for permanent deletion'),
- '$th_pending' => [L10n::t('Request date'), L10n::t('Name'), L10n::t('Email')],
- '$no_pending' => L10n::t('No registrations.'),
- '$pendingnotetext' => L10n::t('Note from the user'),
- '$approve' => L10n::t('Approve'),
- '$deny' => L10n::t('Deny'),
- '$delete' => L10n::t('Delete'),
- '$block' => L10n::t('Block'),
- '$blocked' => L10n::t('User blocked'),
- '$unblock' => L10n::t('Unblock'),
- '$siteadmin' => L10n::t('Site admin'),
- '$accountexpired' => L10n::t('Account expired'),
-
- '$h_users' => L10n::t('Users'),
- '$h_newuser' => L10n::t('New User'),
- '$th_deleted' => [L10n::t('Name'), L10n::t('Email'), L10n::t('Register date'), L10n::t('Last login'), L10n::t('Last item'), L10n::t('Permanent deletion')],
- '$th_users' => $th_users,
- '$order_users' => $order,
- '$order_direction_users' => $order_direction,
-
- '$confirm_delete_multi' => L10n::t('Selected users will be deleted!\n\nEverything these users had posted on this site will be permanently deleted!\n\nAre you sure?'),
- '$confirm_delete' => L10n::t('The user {0} will be deleted!\n\nEverything this user has posted on this site will be permanently deleted!\n\nAre you sure?'),
-
- '$form_security_token' => BaseModule::getFormSecurityToken("admin_users"),
-
- // values //
- '$baseurl' => $a->getBaseURL(true),
-
- '$pending' => $pending,
- 'deleted' => $deleted,
- '$users' => $users,
- '$newusername' => ['new_user_name', L10n::t("Name"), '', L10n::t("Name of the new user.")],
- '$newusernickname' => ['new_user_nickname', L10n::t("Nickname"), '', L10n::t("Nickname of the new user.")],
- '$newuseremail' => ['new_user_email', L10n::t("Email"), '', L10n::t("Email address of the new user."), '', '', 'email'],
- ]);
- $o .= $pager->renderFull(DBA::count('user'));
- return $o;
-}
-
-/**
- * @brief Addons admin page
- *
- * This function generates the admin panel page for managing addons on the
- * friendica node. If an addon name is given a single page showing the details
- * for this addon is generated. If no name is given, a list of available
- * addons is shown.
- *
- * The template used for displaying the list of addons and the details of the
- * addon are the same as used for the templates.
- *
- * The returned string returned hulds the HTML code of the page.
- *
- * @param App $a
- * @param array $addons_admin A list of admin addon names
- * @return string
- * @throws \Friendica\Network\HTTPException\InternalServerErrorException
- */
-function admin_page_addons(App $a, array $addons_admin)
-{
- /*
- * Single addon
- */
- if ($a->argc == 3) {
- $addon = $a->argv[2];
- if (!is_file("addon/$addon/$addon.php")) {
- notice(L10n::t("Item not found."));
- return '';
- }
-
- if (defaults($_GET, 'a', '') == "t") {
- BaseModule::checkFormSecurityTokenRedirectOnError('/admin/addons', 'admin_themes', 't');
-
- // Toggle addon status
- if (Addon::isEnabled($addon)) {
- Addon::uninstall($addon);
- info(L10n::t("Addon %s disabled.", $addon));
- } else {
- Addon::install($addon);
- info(L10n::t("Addon %s enabled.", $addon));
- }
-
- Addon::saveEnabledList();
- $a->internalRedirect('admin/addons');
- return ''; // NOTREACHED
- }
-
- // display addon details
- if (Addon::isEnabled($addon)) {
- $status = "on";
- $action = L10n::t("Disable");
- } else {
- $status = "off";
- $action = L10n::t("Enable");
- }
-
- $readme = null;
- if (is_file("addon/$addon/README.md")) {
- $readme = Markdown::convert(file_get_contents("addon/$addon/README.md"), false);
- } elseif (is_file("addon/$addon/README")) {
- $readme = "" . file_get_contents("addon/$addon/README") . "
";
- }
-
- $admin_form = "";
- if (in_array($addon, $addons_admin)) {
- require_once "addon/$addon/$addon.php";
- $func = $addon . '_addon_admin';
- $func($a, $admin_form);
- }
-
- $t = Renderer::getMarkupTemplate('admin/addon_details.tpl');
-
- return Renderer::replaceMacros($t, [
- '$title' => L10n::t('Administration'),
- '$page' => L10n::t('Addons'),
- '$toggle' => L10n::t('Toggle'),
- '$settings' => L10n::t('Settings'),
- '$baseurl' => $a->getBaseURL(true),
-
- '$addon' => $addon,
- '$status' => $status,
- '$action' => $action,
- '$info' => Addon::getInfo($addon),
- '$str_author' => L10n::t('Author: '),
- '$str_maintainer' => L10n::t('Maintainer: '),
-
- '$admin_form' => $admin_form,
- '$function' => 'addons',
- '$screenshot' => '',
- '$readme' => $readme,
-
- '$form_security_token' => BaseModule::getFormSecurityToken("admin_themes"),
- ]);
- }
-
- /*
- * List addons
- */
- if (!empty($_GET['a']) && $_GET['a'] == "r") {
- BaseModule::checkFormSecurityTokenRedirectOnError($a->getBaseURL() . '/admin/addons', 'admin_themes', 't');
- Addon::reload();
- info("Addons reloaded");
- $a->internalRedirect('admin/addons');
- }
-
- $addons = [];
- $files = glob("addon/*/");
- if (is_array($files)) {
- foreach ($files as $file) {
- if (is_dir($file)) {
- list($tmp, $id) = array_map("trim", explode("/", $file));
- $info = Addon::getInfo($id);
- $show_addon = true;
-
- // If the addon is unsupported, then only show it, when it is enabled
- if ((strtolower($info["status"]) == "unsupported") && !Addon::isEnabled($id)) {
- $show_addon = false;
- }
-
- // Override the above szenario, when the admin really wants to see outdated stuff
- if (Config::get("system", "show_unsupported_addons")) {
- $show_addon = true;
- }
-
- if ($show_addon) {
- $addons[] = [$id, (Addon::isEnabled($id) ? "on" : "off"), $info];
- }
- }
- }
- }
-
- $t = Renderer::getMarkupTemplate('admin/addons.tpl');
- return Renderer::replaceMacros($t, [
- '$title' => L10n::t('Administration'),
- '$page' => L10n::t('Addons'),
- '$submit' => L10n::t('Save Settings'),
- '$reload' => L10n::t('Reload active addons'),
- '$baseurl' => System::baseUrl(true),
- '$function' => 'addons',
- '$addons' => $addons,
- '$pcount' => count($addons),
- '$noplugshint' => L10n::t('There are currently no addons available on your node. You can find the official addon repository at %1$s and might find other interesting addons in the open addon registry at %2$s', 'https://github.com/friendica/friendica-addons', 'http://addons.friendi.ca'),
- '$form_security_token' => BaseModule::getFormSecurityToken("admin_themes"),
- ]);
-}
-
-/**
- * @param array $themes
- * @param string $th
- * @param int $result
- */
-function toggle_theme(&$themes, $th, &$result)
-{
- $count = count($themes);
- for ($x = 0; $x < $count; $x++) {
- if ($themes[$x]['name'] === $th) {
- if ($themes[$x]['allowed']) {
- $themes[$x]['allowed'] = 0;
- $result = 0;
- } else {
- $themes[$x]['allowed'] = 1;
- $result = 1;
- }
- }
- }
-}
-
-/**
- * @param array $themes
- * @param string $th
- * @return int
- */
-function theme_status($themes, $th)
-{
- $count = count($themes);
- for ($x = 0; $x < $count; $x++) {
- if ($themes[$x]['name'] === $th) {
- if ($themes[$x]['allowed']) {
- return 1;
- } else {
- return 0;
- }
- }
- }
- return 0;
-}
-
-/**
- * @param array $themes
- * @return string
- */
-function rebuild_theme_table($themes)
-{
- $o = '';
- if (count($themes)) {
- foreach ($themes as $th) {
- if ($th['allowed']) {
- if (strlen($o)) {
- $o .= ',';
- }
- $o .= $th['name'];
- }
- }
- }
- return $o;
-}
-
-/**
- * @brief Themes admin page
- *
- * This function generates the admin panel page to control the themes available
- * on the friendica node. If the name of a theme is given as parameter a page
- * with the details for the theme is shown. Otherwise a list of available
- * themes is generated.
- *
- * The template used for displaying the list of themes and the details of the
- * themes are the same as used for the addons.
- *
- * The returned string contains the HTML code of the admin panel page.
- *
- * @param App $a
- * @return string
- * @throws \Friendica\Network\HTTPException\InternalServerErrorException
- */
-function admin_page_themes(App $a)
-{
- $allowed_themes_str = Config::get('system', 'allowed_themes');
- $allowed_themes_raw = explode(',', $allowed_themes_str);
- $allowed_themes = [];
- if (count($allowed_themes_raw)) {
- foreach ($allowed_themes_raw as $x) {
- if (strlen(trim($x))) {
- $allowed_themes[] = trim($x);
- }
- }
- }
-
- $themes = [];
- $files = glob('view/theme/*');
- if (is_array($files)) {
- foreach ($files as $file) {
- $f = basename($file);
-
- // Is there a style file?
- $theme_files = glob('view/theme/' . $f . '/style.*');
-
- // If not then quit
- if (count($theme_files) == 0) {
- continue;
- }
-
- $is_experimental = intval(file_exists($file . '/experimental'));
- $is_supported = 1 - (intval(file_exists($file . '/unsupported')));
- $is_allowed = intval(in_array($f, $allowed_themes));
-
- if ($is_allowed || $is_supported || Config::get("system", "show_unsupported_themes")) {
- $themes[] = ['name' => $f, 'experimental' => $is_experimental, 'supported' => $is_supported, 'allowed' => $is_allowed];
- }
- }
- }
-
- if (!count($themes)) {
- notice(L10n::t('No themes found.'));
- return '';
- }
-
- /*
- * Single theme
- */
-
- if ($a->argc == 3) {
- $theme = $a->argv[2];
- if (!is_dir("view/theme/$theme")) {
- notice(L10n::t("Item not found."));
- return '';
- }
-
- if (!empty($_GET['a']) && $_GET['a'] == "t") {
- BaseModule::checkFormSecurityTokenRedirectOnError('/admin/themes', 'admin_themes', 't');
-
- // Toggle theme status
-
- toggle_theme($themes, $theme, $result);
- $s = rebuild_theme_table($themes);
- if ($result) {
- Theme::install($theme);
- info(sprintf('Theme %s enabled.', $theme));
- } else {
- Theme::uninstall($theme);
- info(sprintf('Theme %s disabled.', $theme));
- }
-
- Config::set('system', 'allowed_themes', $s);
- $a->internalRedirect('admin/themes');
- return ''; // NOTREACHED
- }
-
- // display theme details
- if (theme_status($themes, $theme)) {
- $status = "on";
- $action = L10n::t("Disable");
- } else {
- $status = "off";
- $action = L10n::t("Enable");
- }
-
- $readme = null;
-
- if (is_file("view/theme/$theme/README.md")) {
- $readme = Markdown::convert(file_get_contents("view/theme/$theme/README.md"), false);
- } elseif (is_file("view/theme/$theme/README")) {
- $readme = "" . file_get_contents("view/theme/$theme/README") . "
";
- }
-
- $admin_form = '';
- if (is_file("view/theme/$theme/config.php")) {
- require_once "view/theme/$theme/config.php";
-
- if (function_exists('theme_admin')) {
- $admin_form = theme_admin($a);
- }
- }
-
- $screenshot = [Theme::getScreenshot($theme), L10n::t('Screenshot')];
- if (!stristr($screenshot[0], $theme)) {
- $screenshot = null;
- }
-
- $t = Renderer::getMarkupTemplate('admin/addon_details.tpl');
- return Renderer::replaceMacros($t, [
- '$title' => L10n::t('Administration'),
- '$page' => L10n::t('Themes'),
- '$toggle' => L10n::t('Toggle'),
- '$settings' => L10n::t('Settings'),
- '$baseurl' => System::baseUrl(true),
- '$addon' => $theme . (!empty($_GET['mode']) ? '?mode=' . $_GET['mode'] : ''),
- '$status' => $status,
- '$action' => $action,
- '$info' => Theme::getInfo($theme),
- '$function' => 'themes',
- '$admin_form' => $admin_form,
- '$str_author' => L10n::t('Author: '),
- '$str_maintainer' => L10n::t('Maintainer: '),
- '$screenshot' => $screenshot,
- '$readme' => $readme,
-
- '$form_security_token' => BaseModule::getFormSecurityToken("admin_themes"),
- ]);
- }
-
- // reload active themes
- if (!empty($_GET['a']) && $_GET['a'] == "r") {
- BaseModule::checkFormSecurityTokenRedirectOnError(System::baseUrl() . '/admin/themes', 'admin_themes', 't');
- foreach ($themes as $th) {
- if ($th['allowed']) {
- Theme::uninstall($th['name']);
- Theme::install($th['name']);
- }
- }
- info("Themes reloaded");
- $a->internalRedirect('admin/themes');
- }
-
- /*
- * List themes
- */
-
- $addons = [];
- foreach ($themes as $th) {
- $addons[] = [$th['name'], (($th['allowed']) ? "on" : "off"), Theme::getInfo($th['name'])];
- }
-
- $t = Renderer::getMarkupTemplate('admin/addons.tpl');
- return Renderer::replaceMacros($t, [
- '$title' => L10n::t('Administration'),
- '$page' => L10n::t('Themes'),
- '$submit' => L10n::t('Save Settings'),
- '$reload' => L10n::t('Reload active themes'),
- '$baseurl' => System::baseUrl(true),
- '$function' => 'themes',
- '$addons' => $addons,
- '$pcount' => count($themes),
- '$noplugshint' => L10n::t('No themes found on the system. They should be placed in %1$s', '/view/themes
'),
- '$experimental' => L10n::t('[Experimental]'),
- '$unsupported' => L10n::t('[Unsupported]'),
- '$form_security_token' => BaseModule::getFormSecurityToken("admin_themes"),
- ]);
-}
-
-/**
- * @brief Prosesses data send by Logs admin page
- *
- * @param App $a
- * @throws \Friendica\Network\HTTPException\InternalServerErrorException
- */
-function admin_page_logs_post(App $a)
-{
- if (!empty($_POST['page_logs'])) {
- BaseModule::checkFormSecurityTokenRedirectOnError('/admin/logs', 'admin_logs');
-
- $logfile = (!empty($_POST['logfile']) ? Strings::escapeTags(trim($_POST['logfile'])) : '');
- $debugging = !empty($_POST['debugging']);
- $loglevel = defaults($_POST, 'loglevel', LogLevel::ERROR);
-
- Config::set('system', 'logfile', $logfile);
- Config::set('system', 'debugging', $debugging);
- Config::set('system', 'loglevel', $loglevel);
- }
-
- info(L10n::t("Log settings updated."));
- $a->internalRedirect('admin/logs');
- return; // NOTREACHED
-}
-
-/**
- * @brief Generates admin panel subpage for configuration of the logs
- *
- * This function take the view/templates/admin_logs.tpl file and generates a
- * page where admin can configure the logging of friendica.
- *
- * Displaying the log is separated from the log config as the logfile can get
- * big depending on the settings and changing settings regarding the logs can
- * thus waste bandwidth.
- *
- * The string returned contains the content of the template file with replaced
- * macros.
- *
- * @param App $a
- * @return string
- * @throws \Friendica\Network\HTTPException\InternalServerErrorException
- */
-function admin_page_logs(App $a)
-{
- $log_choices = [
- LogLevel::ERROR => 'Error',
- LogLevel::WARNING => 'Warning',
- LogLevel::NOTICE => 'Notice',
- LogLevel::INFO => 'Info',
- LogLevel::DEBUG => 'Debug',
- ];
-
- if (ini_get('log_errors')) {
- $phplogenabled = L10n::t('PHP log currently enabled.');
- } else {
- $phplogenabled = L10n::t('PHP log currently disabled.');
- }
-
- $t = Renderer::getMarkupTemplate('admin/logs.tpl');
-
- return Renderer::replaceMacros($t, [
- '$title' => L10n::t('Administration'),
- '$page' => L10n::t('Logs'),
- '$submit' => L10n::t('Save Settings'),
- '$clear' => L10n::t('Clear'),
- '$baseurl' => System::baseUrl(true),
- '$logname' => Config::get('system', 'logfile'),
- // name, label, value, help string, extra data...
- '$debugging' => ['debugging', L10n::t("Enable Debugging"), Config::get('system', 'debugging'), ""],
- '$logfile' => ['logfile', L10n::t("Log file"), Config::get('system', 'logfile'), L10n::t("Must be writable by web server. Relative to your Friendica top-level directory.")],
- '$loglevel' => ['loglevel', L10n::t("Log level"), Config::get('system', 'loglevel'), "", $log_choices],
- '$form_security_token' => BaseModule::getFormSecurityToken("admin_logs"),
- '$phpheader' => L10n::t("PHP logging"),
- '$phphint' => L10n::t("To temporarily enable logging of PHP errors and warnings you can prepend the following to the index.php file of your installation. The filename set in the 'error_log' line is relative to the friendica top-level directory and must be writeable by the web server. The option '1' for 'log_errors' and 'display_errors' is to enable these options, set to '0' to disable them."),
- '$phplogcode' => "error_reporting(E_ERROR | E_WARNING | E_PARSE);\nini_set('error_log','php.out');\nini_set('log_errors','1');\nini_set('display_errors', '1');",
- '$phplogenabled' => $phplogenabled,
- ]);
-}
-
-/**
- * @brief Generates admin panel subpage to view the Friendica log
- *
- * This function loads the template view/templates/admin_viewlogs.tpl to
- * display the systemlog content. The filename for the systemlog of friendica
- * is relative to the base directory and taken from the config entry 'logfile'
- * in the 'system' category.
- *
- * Displaying the log is separated from the log config as the logfile can get
- * big depending on the settings and changing settings regarding the logs can
- * thus waste bandwidth.
- *
- * The string returned contains the content of the template file with replaced
- * macros.
- *
- * @param App $a
- * @return string
- * @throws \Friendica\Network\HTTPException\InternalServerErrorException
- */
-function admin_page_viewlogs(App $a)
-{
- $t = Renderer::getMarkupTemplate('admin/viewlogs.tpl');
- $f = Config::get('system', 'logfile');
- $data = '';
-
- if (!file_exists($f)) {
- $data = L10n::t('Error trying to open %1$s log file.\r\n
Check to see if file %1$s exist and is readable.', $f);
- } else {
- $fp = fopen($f, 'r');
- if (!$fp) {
- $data = L10n::t('Couldn\'t open %1$s log file.\r\n
Check to see if file %1$s is readable.', $f);
- } else {
- $fstat = fstat($fp);
- $size = $fstat['size'];
- if ($size != 0) {
- if ($size > 5000000 || $size < 0) {
- $size = 5000000;
- }
- $seek = fseek($fp, 0 - $size, SEEK_END);
- if ($seek === 0) {
- $data = Strings::escapeHtml(fread($fp, $size));
- while (!feof($fp)) {
- $data .= Strings::escapeHtml(fread($fp, 4096));
- }
- }
- }
- fclose($fp);
- }
- }
- return Renderer::replaceMacros($t, [
- '$title' => L10n::t('Administration'),
- '$page' => L10n::t('View Logs'),
- '$data' => $data,
- '$logname' => Config::get('system', 'logfile')
- ]);
-}
-
-/**
- * @brief Prosesses data send by the features admin page
- *
- * @param App $a
- * @throws \Friendica\Network\HTTPException\InternalServerErrorException
- */
-function admin_page_features_post(App $a)
-{
- BaseModule::checkFormSecurityTokenRedirectOnError('/admin/features', 'admin_manage_features');
-
- Logger::log('postvars: ' . print_r($_POST, true), Logger::DATA);
-
- $features = Feature::get(false);
-
- foreach ($features as $fname => $fdata) {
- foreach (array_slice($fdata, 1) as $f) {
- $feature = $f[0];
- $feature_state = 'feature_' . $feature;
- $featurelock = 'featurelock_' . $feature;
-
- if (!empty($_POST[$feature_state])) {
- $val = intval($_POST[$feature_state]);
- } else {
- $val = 0;
- }
- Config::set('feature', $feature, $val);
-
- if (!empty($_POST[$featurelock])) {
- Config::set('feature_lock', $feature, $val);
- } else {
- Config::delete('feature_lock', $feature);
- }
- }
- }
-
- $a->internalRedirect('admin/features');
- return; // NOTREACHED
-}
-
-/**
- * @brief Subpage for global additional feature management
- *
- * This functin generates the subpage 'Manage Additional Features'
- * for the admin panel. At this page the admin can set preferences
- * for the user settings of the 'additional features'. If needed this
- * preferences can be locked through the admin.
- *
- * The returned string contains the HTML code of the subpage 'Manage
- * Additional Features'
- *
- * @param App $a
- * @return string
- * @throws \Friendica\Network\HTTPException\InternalServerErrorException
- */
-function admin_page_features(App $a)
-{
- if (($a->argc > 1) && ($a->getArgumentValue(1) === 'features')) {
- $arr = [];
- $features = Feature::get(false);
-
- foreach ($features as $fname => $fdata) {
- $arr[$fname] = [];
- $arr[$fname][0] = $fdata[0];
- foreach (array_slice($fdata, 1) as $f) {
- $set = Config::get('feature', $f[0], $f[3]);
- $arr[$fname][1][] = [
- ['feature_' . $f[0], $f[1], $set, $f[2], [L10n::t('Off'), L10n::t('On')]],
- ['featurelock_' . $f[0], L10n::t('Lock feature %s', $f[1]), (($f[4] !== false) ? "1" : ''), '', [L10n::t('Off'), L10n::t('On')]]
- ];
- }
- }
-
- $tpl = Renderer::getMarkupTemplate('admin/settings_features.tpl');
- $o = Renderer::replaceMacros($tpl, [
- '$form_security_token' => BaseModule::getFormSecurityToken("admin_manage_features"),
- '$title' => L10n::t('Manage Additional Features'),
- '$features' => $arr,
- '$submit' => L10n::t('Save Settings'),
- ]);
-
- return $o;
- }
-}
-
-function admin_page_server_vital()
-{
- // Fetch the host-meta to check if this really is a vital server
- return Network::curl(System::baseUrl() . '/.well-known/host-meta')->isSuccess();
-}
diff --git a/mod/allfriends.php b/mod/allfriends.php
deleted file mode 100644
index ce648cc25..000000000
--- a/mod/allfriends.php
+++ /dev/null
@@ -1,106 +0,0 @@
-argc > 1) {
- $cid = intval($a->argv[1]);
- }
-
- if (!$cid) {
- return;
- }
-
- $uid = $a->user['uid'];
-
- $contact = DBA::selectFirst('contact', ['name', 'url', 'photo', 'uid', 'id'], ['id' => $cid, 'uid' => local_user()]);
-
- if (!DBA::isResult($contact)) {
- return;
- }
-
- $a->page['aside'] = "";
- Model\Profile::load($a, "", 0, Model\Contact::getDetailsByURL($contact["url"]));
-
- $total = Model\GContact::countAllFriends(local_user(), $cid);
-
- $pager = new Pager($a->query_string);
-
- $r = Model\GContact::allFriends(local_user(), $cid, $pager->getStart(), $pager->getItemsPerPage());
- if (!DBA::isResult($r)) {
- $o .= L10n::t('No friends to display.');
- return $o;
- }
-
- $id = 0;
-
- $entries = [];
- foreach ($r as $rr) {
- //get further details of the contact
- $contact_details = Model\Contact::getDetailsByURL($rr['url'], $uid, $rr);
-
- $connlnk = '';
- // $rr[cid] is only available for common contacts. So if the contact is a common one, use contact_photo_menu to generate the photo_menu
- // If the contact is not common to the user, Connect/Follow' will be added to the photo menu
- if ($rr['cid']) {
- $rr['id'] = $rr['cid'];
- $photo_menu = Model\Contact::photoMenu($rr);
- } else {
- $connlnk = System::baseUrl() . '/follow/?url=' . $rr['url'];
- $photo_menu = [
- 'profile' => [L10n::t("View Profile"), Model\Contact::magicLink($rr['url'])],
- 'follow' => [L10n::t("Connect/Follow"), $connlnk]
- ];
- }
-
- $entry = [
- 'url' => Model\Contact::magicLink($rr['url']),
- 'itemurl' => defaults($contact_details, 'addr', $rr['url']),
- 'name' => $contact_details['name'],
- 'thumb' => ProxyUtils::proxifyUrl($contact_details['thumb'], false, ProxyUtils::SIZE_THUMB),
- 'img_hover' => $contact_details['name'],
- 'details' => $contact_details['location'],
- 'tags' => $contact_details['keywords'],
- 'about' => $contact_details['about'],
- 'account_type' => Model\Contact::getAccountType($contact_details),
- 'network' => ContactSelector::networkToName($contact_details['network'], $contact_details['url']),
- 'photo_menu' => $photo_menu,
- 'conntxt' => L10n::t('Connect'),
- 'connlnk' => $connlnk,
- 'id' => ++$id,
- ];
- $entries[] = $entry;
- }
-
- $tab_str = Module\Contact::getTabsHTML($a, $contact, 4);
-
- $tpl = Renderer::getMarkupTemplate('viewcontact_template.tpl');
- $o .= Renderer::replaceMacros($tpl, [
- '$tab_str' => $tab_str,
- '$contacts' => $entries,
- '$paginate' => $pager->renderFull($total),
- ]);
-
- return $o;
-}
diff --git a/mod/amcd.php b/mod/amcd.php
deleted file mode 100644
index ca5aa07aa..000000000
--- a/mod/amcd.php
+++ /dev/null
@@ -1,49 +0,0 @@
- $title,
- '$apps' => $apps,
- ]);
-}
diff --git a/mod/babel.php b/mod/babel.php
deleted file mode 100644
index 51bbf7c8a..000000000
--- a/mod/babel.php
+++ /dev/null
@@ -1,168 +0,0 @@
-', $s);
-}
-
-function babel_content()
-{
- $results = [];
- if (!empty($_REQUEST['text'])) {
- switch (defaults($_REQUEST, 'type', 'bbcode')) {
- case 'bbcode':
- $bbcode = trim($_REQUEST['text']);
- $results[] = [
- 'title' => L10n::t('Source input'),
- 'content' => visible_whitespace($bbcode)
- ];
-
- $plain = Text\BBCode::toPlaintext($bbcode, false);
- $results[] = [
- 'title' => L10n::t('BBCode::toPlaintext'),
- 'content' => visible_whitespace($plain)
- ];
-
- $html = Text\BBCode::convert($bbcode);
- $results[] = [
- 'title' => L10n::t('BBCode::convert (raw HTML)'),
- 'content' => visible_whitespace(htmlspecialchars($html))
- ];
-
- $results[] = [
- 'title' => L10n::t('BBCode::convert'),
- 'content' => $html
- ];
-
- $bbcode2 = Text\HTML::toBBCode($html);
- $results[] = [
- 'title' => L10n::t('BBCode::convert => HTML::toBBCode'),
- 'content' => visible_whitespace($bbcode2)
- ];
-
- $markdown = Text\BBCode::toMarkdown($bbcode);
- $results[] = [
- 'title' => L10n::t('BBCode::toMarkdown'),
- 'content' => visible_whitespace($markdown)
- ];
-
- $html2 = Text\Markdown::convert($markdown);
- $results[] = [
- 'title' => L10n::t('BBCode::toMarkdown => Markdown::convert'),
- 'content' => $html2
- ];
-
- $bbcode3 = Text\Markdown::toBBCode($markdown);
- $results[] = [
- 'title' => L10n::t('BBCode::toMarkdown => Markdown::toBBCode'),
- 'content' => visible_whitespace($bbcode3)
- ];
-
- $bbcode4 = Text\HTML::toBBCode($html2);
- $results[] = [
- 'title' => L10n::t('BBCode::toMarkdown => Markdown::convert => HTML::toBBCode'),
- 'content' => visible_whitespace($bbcode4)
- ];
-
- $item = [
- 'body' => $bbcode,
- 'tag' => '',
- ];
-
- \Friendica\Model\Item::setHashtags($item);
- $results[] = [
- 'title' => L10n::t('Item Body'),
- 'content' => visible_whitespace($item['body'])
- ];
- $results[] = [
- 'title' => L10n::t('Item Tags'),
- 'content' => $item['tag']
- ];
- break;
- case 'markdown':
- $markdown = trim($_REQUEST['text']);
- $results[] = [
- 'title' => L10n::t('Source input (Diaspora format)'),
- 'content' => '' . $markdown . '
'
- ];
-
- $html = Text\Markdown::convert($markdown);
- $results[] = [
- 'title' => L10n::t('Markdown::convert (raw HTML)'),
- 'content' => visible_whitespace(htmlspecialchars($html))
- ];
-
- $results[] = [
- 'title' => L10n::t('Markdown::convert'),
- 'content' => $html
- ];
-
- $bbcode = Text\Markdown::toBBCode($markdown);
- $results[] = [
- 'title' => L10n::t('Markdown::toBBCode'),
- 'content' => '' . $bbcode . '
'
- ];
- break;
- case 'html' :
- $html = trim($_REQUEST['text']);
- $results[] = [
- 'title' => L10n::t('Raw HTML input'),
- 'content' => htmlspecialchars($html)
- ];
-
- $results[] = [
- 'title' => L10n::t('HTML Input'),
- 'content' => $html
- ];
-
- $bbcode = Text\HTML::toBBCode($html);
- $results[] = [
- 'title' => L10n::t('HTML::toBBCode'),
- 'content' => visible_whitespace($bbcode)
- ];
-
- $html2 = Text\BBCode::convert($bbcode);
- $results[] = [
- 'title' => L10n::t('HTML::toBBCode => BBCode::convert'),
- 'content' => $html2
- ];
-
- $results[] = [
- 'title' => L10n::t('HTML::toBBCode => BBCode::convert (raw HTML)'),
- 'content' => htmlspecialchars($html2)
- ];
-
- $markdown = Text\HTML::toMarkdown($html);
- $results[] = [
- 'title' => L10n::t('HTML::toMarkdown'),
- 'content' => visible_whitespace($markdown)
- ];
-
- $text = Text\HTML::toPlaintext($html);
- $results[] = [
- 'title' => L10n::t('HTML::toPlaintext'),
- 'content' => '' . $text . '
'
- ];
- }
- }
-
- $tpl = Renderer::getMarkupTemplate('babel.tpl');
- $o = Renderer::replaceMacros($tpl, [
- '$text' => ['text', L10n::t('Source text'), defaults($_REQUEST, 'text', ''), ''],
- '$type_bbcode' => ['type', L10n::t('BBCode'), 'bbcode', '', defaults($_REQUEST, 'type', 'bbcode') == 'bbcode'],
- '$type_markdown' => ['type', L10n::t('Markdown'), 'markdown', '', defaults($_REQUEST, 'type', 'bbcode') == 'markdown'],
- '$type_html' => ['type', L10n::t('HTML'), 'html', '', defaults($_REQUEST, 'type', 'bbcode') == 'html'],
- '$results' => $results
- ]);
-
- return $o;
-}
diff --git a/mod/bookmarklet.php b/mod/bookmarklet.php
deleted file mode 100644
index 1c4d191c4..000000000
--- a/mod/bookmarklet.php
+++ /dev/null
@@ -1,59 +0,0 @@
-' . L10n::t('Login') . '';
- $o .= Login::form($a->query_string, intval(Config::get('config', 'register_policy')) === \Friendica\Module\Register::CLOSED ? false : true);
- return $o;
- }
-
- $referer = Strings::normaliseLink(defaults($_SERVER, 'HTTP_REFERER', ''));
- $page = Strings::normaliseLink(System::baseUrl() . "/bookmarklet");
-
- if (!strstr($referer, $page)) {
- if (empty($_REQUEST["url"])) {
- System::httpExit(400, ["title" => L10n::t('Bad Request')]);
- }
-
- $content = add_page_info($_REQUEST["url"]);
-
- $x = [
- 'is_owner' => true,
- 'allow_location' => $a->user['allow_location'],
- 'default_location' => $a->user['default-location'],
- 'nickname' => $a->user['nickname'],
- 'lockstate' => ((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid'])))) ? 'lock' : 'unlock'),
- 'default_perms' => ACL::getDefaultUserPermissions($a->user),
- 'acl' => ACL::getFullSelectorHTML($a->user, true),
- 'bang' => '',
- 'visitor' => 'block',
- 'profile_uid' => local_user(),
- 'title' => trim(defaults($_REQUEST, 'title', ''), "*"),
- 'content' => $content
- ];
- $o = status_editor($a, $x, 0, false);
- $o .= "";
- } else {
- $o = '' . L10n::t('The post was created') . '
';
- $o .= "";
- }
-
- return $o;
-}
diff --git a/mod/cal.php b/mod/cal.php
index 5baffec8a..0a2a02e53 100644
--- a/mod/cal.php
+++ b/mod/cal.php
@@ -31,11 +31,11 @@ function cal_init(App $a)
}
if (Config::get('system', 'block_public') && !local_user() && !remote_user()) {
- System::httpExit(403, ['title' => L10n::t('Access denied.')]);
+ throw new \Friendica\Network\HTTPException\ForbiddenException(L10n::t('Access denied.'));
}
if ($a->argc < 2) {
- System::httpExit(403, ['title' => L10n::t('Access denied.')]);
+ throw new \Friendica\Network\HTTPException\ForbiddenException(L10n::t('Access denied.'));
}
Nav::setSelected('events');
@@ -43,7 +43,7 @@ function cal_init(App $a)
$nick = $a->argv[1];
$user = DBA::selectFirst('user', [], ['nickname' => $nick, 'blocked' => false]);
if (!DBA::isResult($user)) {
- System::httpExit(404, ['title' => L10n::t('Page not found.')]);
+ throw new \Friendica\Network\HTTPException\NotFoundException();
}
$a->data['user'] = $user;
@@ -59,7 +59,7 @@ function cal_init(App $a)
$account_type = Contact::getAccountType($profile);
- $tpl = Renderer::getMarkupTemplate("vcard-widget.tpl");
+ $tpl = Renderer::getMarkupTemplate("widget/vcard.tpl");
$vcard_widget = Renderer::replaceMacros($tpl, [
'$name' => $profile['name'],
@@ -90,7 +90,6 @@ function cal_content(App $a)
$htpl = Renderer::getMarkupTemplate('event_head.tpl');
$a->page['htmlhead'] .= Renderer::replaceMacros($htpl, [
- '$baseurl' => System::baseUrl(),
'$module_url' => '/cal/' . $a->data['user']['nickname'],
'$modparams' => 2,
'$i18n' => $i18n,
@@ -148,7 +147,7 @@ function cal_content(App $a)
$sql_extra = " AND `event`.`cid` = 0 " . $sql_perms;
// get the tab navigation bar
- $tabs = Profile::getTabs($a, false, $a->data['user']['nickname']);
+ $tabs = Profile::getTabs($a, 'cal', false, $a->data['user']['nickname']);
// The view mode part is similiar to /mod/events.php
if ($mode == 'view') {
@@ -268,7 +267,6 @@ function cal_content(App $a)
}
$o = Renderer::replaceMacros($tpl, [
- '$baseurl' => System::baseUrl(),
'$tabs' => $tabs,
'$title' => L10n::t('Events'),
'$view' => L10n::t('View'),
diff --git a/mod/common.php b/mod/common.php
index 6b6090e19..a2821921c 100644
--- a/mod/common.php
+++ b/mod/common.php
@@ -47,7 +47,7 @@ function common_content(App $a)
$contact = DBA::selectFirst('contact', ['name', 'url', 'photo', 'uid', 'id'], ['self' => true, 'uid' => $uid]);
if (DBA::isResult($contact)) {
- $vcard_widget = Renderer::replaceMacros(Renderer::getMarkupTemplate("vcard-widget.tpl"), [
+ $vcard_widget = Renderer::replaceMacros(Renderer::getMarkupTemplate("widget/vcard.tpl"), [
'$name' => $contact['name'],
'$photo' => $contact['photo'],
'url' => 'contact/' . $cid
diff --git a/mod/credits.php b/mod/credits.php
deleted file mode 100644
index 3d71c54b3..000000000
--- a/mod/credits.php
+++ /dev/null
@@ -1,23 +0,0 @@
- L10n::t('Credits'),
- '$thanks' => L10n::t('Friendica is a community project, that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!'),
- '$names' => $names,
- ]);
-}
diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php
index 770c7070b..9f9684e09 100644
--- a/mod/dfrn_confirm.php
+++ b/mod/dfrn_confirm.php
@@ -28,8 +28,6 @@ use Friendica\Model\Contact;
use Friendica\Model\Group;
use Friendica\Model\User;
use Friendica\Network\Probe;
-use Friendica\Protocol\Diaspora;
-use Friendica\Protocol\ActivityPub;
use Friendica\Util\Crypto;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Network;
@@ -136,163 +134,153 @@ function dfrn_confirm_post(App $a, $handsfree = null)
$site_pubkey = $contact['site-pubkey'];
$dfrn_confirm = $contact['confirm'];
$aes_allow = $contact['aes_allow'];
+ $protocol = $contact['network'];
- $network = ((strlen($contact['issued-id'])) ? Protocol::DFRN : Protocol::OSTATUS);
+ /*
+ * Generate a key pair for all further communications with this person.
+ * We have a keypair for every contact, and a site key for unknown people.
+ * This provides a means to carry on relationships with other people if
+ * any single key is compromised. It is a robust key. We're much more
+ * worried about key leakage than anybody cracking it.
+ */
+ $res = Crypto::newKeypair(4096);
- if ($contact['network']) {
- $network = $contact['network'];
+ $private_key = $res['prvkey'];
+ $public_key = $res['pubkey'];
+
+ // Save the private key. Send them the public key.
+ $fields = ['prvkey' => $private_key, 'protocol' => Protocol::DFRN];
+ DBA::update('contact', $fields, ['id' => $contact_id]);
+
+ $params = [];
+
+ /*
+ * Per the DFRN protocol, we will verify both ends by encrypting the dfrn_id with our
+ * site private key (person on the other end can decrypt it with our site public key).
+ * Then encrypt our profile URL with the other person's site public key. They can decrypt
+ * it with their site private key. If the decryption on the other end fails for either
+ * item, it indicates tampering or key failure on at least one site and we will not be
+ * able to provide a secure communication pathway.
+ *
+ * If other site is willing to accept full encryption, (aes_allow is 1 AND we have php5.3
+ * or later) then we encrypt the personal public key we send them using AES-256-CBC and a
+ * random key which is encrypted with their site public key.
+ */
+
+ $src_aes_key = openssl_random_pseudo_bytes(64);
+
+ $result = '';
+ openssl_private_encrypt($dfrn_id, $result, $user['prvkey']);
+
+ $params['dfrn_id'] = bin2hex($result);
+ $params['public_key'] = $public_key;
+
+ $my_url = System::baseUrl() . '/profile/' . $user['nickname'];
+
+ openssl_public_encrypt($my_url, $params['source_url'], $site_pubkey);
+ $params['source_url'] = bin2hex($params['source_url']);
+
+ if ($aes_allow && function_exists('openssl_encrypt')) {
+ openssl_public_encrypt($src_aes_key, $params['aes_key'], $site_pubkey);
+ $params['aes_key'] = bin2hex($params['aes_key']);
+ $params['public_key'] = bin2hex(openssl_encrypt($public_key, 'AES-256-CBC', $src_aes_key));
}
- if ($network === Protocol::DFRN) {
- /*
- * Generate a key pair for all further communications with this person.
- * We have a keypair for every contact, and a site key for unknown people.
- * This provides a means to carry on relationships with other people if
- * any single key is compromised. It is a robust key. We're much more
- * worried about key leakage than anybody cracking it.
- */
- $res = Crypto::newKeypair(4096);
+ $params['dfrn_version'] = DFRN_PROTOCOL_VERSION;
+ if ($duplex == 1) {
+ $params['duplex'] = 1;
+ }
- $private_key = $res['prvkey'];
- $public_key = $res['pubkey'];
+ if ($user['page-flags'] == User::PAGE_FLAGS_COMMUNITY) {
+ $params['page'] = 1;
+ }
- // Save the private key. Send them the public key.
- q("UPDATE `contact` SET `prvkey` = '%s' WHERE `id` = %d AND `uid` = %d",
- DBA::escape($private_key),
- intval($contact_id),
- intval($uid)
- );
+ if ($user['page-flags'] == User::PAGE_FLAGS_PRVGROUP) {
+ $params['page'] = 2;
+ }
- $params = [];
+ Logger::log('Confirm: posting data to ' . $dfrn_confirm . ': ' . print_r($params, true), Logger::DATA);
- /*
- * Per the DFRN protocol, we will verify both ends by encrypting the dfrn_id with our
- * site private key (person on the other end can decrypt it with our site public key).
- * Then encrypt our profile URL with the other person's site public key. They can decrypt
- * it with their site private key. If the decryption on the other end fails for either
- * item, it indicates tampering or key failure on at least one site and we will not be
- * able to provide a secure communication pathway.
- *
- * If other site is willing to accept full encryption, (aes_allow is 1 AND we have php5.3
- * or later) then we encrypt the personal public key we send them using AES-256-CBC and a
- * random key which is encrypted with their site public key.
- */
+ /*
+ *
+ * POST all this stuff to the other site.
+ * Temporarily raise the network timeout to 120 seconds because the default 60
+ * doesn't always give the other side quite enough time to decrypt everything.
+ *
+ */
- $src_aes_key = openssl_random_pseudo_bytes(64);
+ $res = Network::post($dfrn_confirm, $params, [], 120)->getBody();
- $result = '';
- openssl_private_encrypt($dfrn_id, $result, $user['prvkey']);
+ Logger::log(' Confirm: received data: ' . $res, Logger::DATA);
- $params['dfrn_id'] = bin2hex($result);
- $params['public_key'] = $public_key;
+ // Now figure out what they responded. Try to be robust if the remote site is
+ // having difficulty and throwing up errors of some kind.
- $my_url = System::baseUrl() . '/profile/' . $user['nickname'];
+ $leading_junk = substr($res, 0, strpos($res, 'status;
+ $message = XML::unescape($xml->message); // human readable text of what may have gone wrong.
+ switch ($status) {
+ case 0:
+ info(L10n::t("Confirmation completed successfully.") . EOL);
+ break;
+ case 1:
+ // birthday paradox - generate new dfrn-id and fall through.
+ $new_dfrn_id = Strings::getRandomHex();
+ q("UPDATE contact SET `issued-id` = '%s' WHERE `id` = %d AND `uid` = %d",
+ DBA::escape($new_dfrn_id),
+ intval($contact_id),
+ intval($uid)
+ );
+
+ case 2:
+ notice(L10n::t("Temporary failure. Please wait and try again.") . EOL);
+ break;
+ case 3:
+ notice(L10n::t("Introduction failed or was revoked.") . EOL);
+ break;
+ }
+
+ if (strlen($message)) {
+ notice(L10n::t('Remote site reported: ') . $message . EOL);
+ }
+
+ if (($status == 0) && $intro_id) {
+ $intro = DBA::selectFirst('intro', ['note'], ['id' => $intro_id]);
+ if (DBA::isResult($intro)) {
+ DBA::update('contact', ['reason' => $intro['note']], ['id' => $contact_id]);
}
- $params['dfrn_version'] = DFRN_PROTOCOL_VERSION;
- if ($duplex == 1) {
- $params['duplex'] = 1;
- }
+ // Success. Delete the notification.
+ DBA::delete('intro', ['id' => $intro_id]);
+ }
- if ($user['page-flags'] == User::PAGE_FLAGS_COMMUNITY) {
- $params['page'] = 1;
- }
-
- if ($user['page-flags'] == User::PAGE_FLAGS_PRVGROUP) {
- $params['page'] = 2;
- }
-
- Logger::log('Confirm: posting data to ' . $dfrn_confirm . ': ' . print_r($params, true), Logger::DATA);
-
- /*
- *
- * POST all this stuff to the other site.
- * Temporarily raise the network timeout to 120 seconds because the default 60
- * doesn't always give the other side quite enough time to decrypt everything.
- *
- */
-
- $res = Network::post($dfrn_confirm, $params, null, $redirects, 120)->getBody();
-
- Logger::log(' Confirm: received data: ' . $res, Logger::DATA);
-
- // Now figure out what they responded. Try to be robust if the remote site is
- // having difficulty and throwing up errors of some kind.
-
- $leading_junk = substr($res, 0, strpos($res, 'status;
- $message = XML::unescape($xml->message); // human readable text of what may have gone wrong.
- switch ($status) {
- case 0:
- info(L10n::t("Confirmation completed successfully.") . EOL);
- break;
- case 1:
- // birthday paradox - generate new dfrn-id and fall through.
- $new_dfrn_id = Strings::getRandomHex();
- q("UPDATE contact SET `issued-id` = '%s' WHERE `id` = %d AND `uid` = %d",
- DBA::escape($new_dfrn_id),
- intval($contact_id),
- intval($uid)
- );
-
- case 2:
- notice(L10n::t("Temporary failure. Please wait and try again.") . EOL);
- break;
- case 3:
- notice(L10n::t("Introduction failed or was revoked.") . EOL);
- break;
- }
-
- if (strlen($message)) {
- notice(L10n::t('Remote site reported: ') . $message . EOL);
- }
-
- if (($status == 0) && $intro_id) {
- $intro = DBA::selectFirst('intro', ['note'], ['id' => $intro_id]);
- if (DBA::isResult($intro)) {
- DBA::update('contact', ['reason' => $intro['note']], ['id' => $contact_id]);
- }
-
- // Success. Delete the notification.
- DBA::delete('intro', ['id' => $intro_id]);
- }
-
- if ($status != 0) {
- return;
- }
+ if ($status != 0) {
+ return;
}
/*
@@ -306,101 +294,39 @@ function dfrn_confirm_post(App $a, $handsfree = null)
Logger::log('dfrn_confirm: confirm - imported photos');
- if ($network === Protocol::DFRN) {
- $new_relation = Contact::FOLLOWER;
+ $new_relation = Contact::FOLLOWER;
- if (($relation == Contact::SHARING) || ($duplex)) {
- $new_relation = Contact::FRIEND;
- }
-
- if (($relation == Contact::SHARING) && ($duplex)) {
- $duplex = 0;
- }
-
- $r = q("UPDATE `contact` SET `rel` = %d,
- `name-date` = '%s',
- `uri-date` = '%s',
- `blocked` = 0,
- `pending` = 0,
- `duplex` = %d,
- `hidden` = %d,
- `network` = '%s' WHERE `id` = %d
- ",
- intval($new_relation),
- DBA::escape(DateTimeFormat::utcNow()),
- DBA::escape(DateTimeFormat::utcNow()),
- intval($duplex),
- intval($hidden),
- DBA::escape(Protocol::DFRN),
- intval($contact_id)
- );
- } else {
- if ($network == Protocol::ACTIVITYPUB) {
- ActivityPub\Transmitter::sendContactAccept($contact['url'], $contact['hub-verify'], $uid);
- // Setting "pending" to true on a bidirectional contact request could create a problem when it isn't accepted on the other side
- // Then we have got a situation where - although one direction is accepted - the contact still appears as pending.
- // Possibly we need two different "pending" fields, one for incoming, one for outgoing?
- // This has to be thought over, but for now this here is a better solution.
- // $pending = $duplex;
- $pending = false;
- } else {
- $pending = false;
- }
-
- // $network !== Protocol::DFRN
- $network = defaults($contact, 'network', Protocol::OSTATUS);
-
- $arr = Probe::uri($contact['url'], $network);
-
- $notify = defaults($contact, 'notify' , $arr['notify']);
- $poll = defaults($contact, 'poll' , $arr['poll']);
-
- $addr = $arr['addr'];
-
- $new_relation = $contact['rel'];
- $writable = $contact['writable'];
-
- if (in_array($network, [Protocol::DIASPORA, Protocol::ACTIVITYPUB])) {
- if ($duplex) {
- $new_relation = Contact::FRIEND;
- } else {
- $new_relation = Contact::FOLLOWER;
- }
-
- if ($new_relation != Contact::FOLLOWER) {
- $writable = 1;
- }
- }
-
- DBA::delete('intro', ['id' => $intro_id]);
-
- $fields = ['name-date' => DateTimeFormat::utcNow(),
- 'uri-date' => DateTimeFormat::utcNow(), 'addr' => $addr,
- 'notify' => $notify, 'poll' => $poll, 'blocked' => false,
- 'pending' => $pending, 'network' => $network,
- 'writable' => $writable, 'hidden' => $hidden, 'rel' => $new_relation];
- DBA::update('contact', $fields, ['id' => $contact_id]);
+ if (($relation == Contact::SHARING) || ($duplex)) {
+ $new_relation = Contact::FRIEND;
}
- if (!DBA::isResult($r)) {
- notice(L10n::t('Unable to set contact photo.') . EOL);
+ if (($relation == Contact::SHARING) && ($duplex)) {
+ $duplex = 0;
}
+ $r = q("UPDATE `contact` SET `rel` = %d,
+ `name-date` = '%s',
+ `uri-date` = '%s',
+ `blocked` = 0,
+ `pending` = 0,
+ `duplex` = %d,
+ `hidden` = %d,
+ `network` = '%s' WHERE `id` = %d
+ ",
+ intval($new_relation),
+ DBA::escape(DateTimeFormat::utcNow()),
+ DBA::escape(DateTimeFormat::utcNow()),
+ intval($duplex),
+ intval($hidden),
+ DBA::escape(Protocol::DFRN),
+ intval($contact_id)
+ );
+
// reload contact info
$contact = DBA::selectFirst('contact', [], ['id' => $contact_id]);
- if ((isset($new_relation) && $new_relation == Contact::FRIEND)) {
- if (DBA::isResult($contact) && ($contact['network'] === Protocol::DIASPORA)) {
- $ret = Diaspora::sendShare($user, $contact);
- Logger::log('share returns: ' . $ret);
- }
- }
Group::addMember(User::getDefaultGroup($uid, $contact["network"]), $contact['id']);
- if ($network == Protocol::ACTIVITYPUB && $duplex) {
- ActivityPub\Transmitter::sendActivity('Follow', $contact['url'], $uid);
- }
-
// Let's send our user to the contact editor in case they want to
// do anything special with this new friend.
if ($handsfree === null) {
diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php
index 745411a8e..e75d975a8 100644
--- a/mod/dfrn_notify.php
+++ b/mod/dfrn_notify.php
@@ -29,7 +29,7 @@ function dfrn_notify_post(App $a) {
$user = DBA::selectFirst('user', [], ['nickname' => $nick, 'account_expired' => false, 'account_removed' => false]);
if (!DBA::isResult($user)) {
- System::httpExit(500);
+ throw new \Friendica\Network\HTTPException\InternalServerErrorException();
}
dfrn_dispatch_private($user, $postdata);
} elseif (!dfrn_dispatch_public($postdata)) {
@@ -190,13 +190,13 @@ function dfrn_dispatch_public($postdata)
}
// Fetch the corresponding public contact
- $contact = Contact::getDetailsByAddr($msg['author'], 0);
- if (!$contact) {
+ $contact_id = Contact::getIdForURL($msg['author']);
+ if (empty($contact_id)) {
Logger::log('Contact not found for address ' . $msg['author']);
System::xmlExit(3, 'Contact ' . $msg['author'] . ' not found');
}
- $importer = DFRN::getImporter($contact['id']);
+ $importer = DFRN::getImporter($contact_id);
// This should never fail
if (empty($importer)) {
diff --git a/mod/dfrn_poll.php b/mod/dfrn_poll.php
index 5b72c0bf9..6c849cb80 100644
--- a/mod/dfrn_poll.php
+++ b/mod/dfrn_poll.php
@@ -50,7 +50,7 @@ function dfrn_poll_init(App $a)
if (($dfrn_id === '') && empty($_POST['dfrn_id'])) {
if (Config::get('system', 'block_public') && !local_user() && !remote_user()) {
- System::httpExit(403);
+ throw new \Friendica\Network\HTTPException\ForbiddenException();
}
$user = '';
@@ -59,7 +59,7 @@ function dfrn_poll_init(App $a)
DBA::escape($a->argv[1])
);
if (!$r) {
- System::httpExit(404);
+ throw new \Friendica\Network\HTTPException\NotFoundException();
}
$hidewall = ($r[0]['hidewall'] && !local_user());
@@ -483,7 +483,7 @@ function dfrn_poll_content(App $a)
// heluecht: I don't know why we don't fail immediately when the user or contact hadn't been found.
// Since it doesn't make sense to continue from this point on, we now fail here. This should be safe.
if (!DBA::isResult($r)) {
- System::httpExit(404, ["title" => L10n::t('Page not found.')]);
+ throw new \Friendica\Network\HTTPException\NotFoundException();
}
// URL reply
diff --git a/mod/dfrn_request.php b/mod/dfrn_request.php
index 780e0afee..19879c21b 100644
--- a/mod/dfrn_request.php
+++ b/mod/dfrn_request.php
@@ -476,7 +476,7 @@ function dfrn_request_post(App $a)
function dfrn_request_content(App $a)
{
- if (($a->argc != 2) || (!count($a->profile))) {
+ if ($a->argc != 2 || empty($a->profile)) {
return "";
}
diff --git a/mod/directory.php b/mod/directory.php
deleted file mode 100644
index 256c9bbbd..000000000
--- a/mod/directory.php
+++ /dev/null
@@ -1,230 +0,0 @@
-page['aside'] .= Widget::findPeople();
- $a->page['aside'] .= Widget::follow();
- } else {
- unset($_SESSION['theme']);
- unset($_SESSION['mobile-theme']);
- }
-}
-
-function directory_post(App $a)
-{
- if (!empty($_POST['search'])) {
- $a->data['search'] = $_POST['search'];
- }
-}
-
-function directory_content(App $a)
-{
- if ((Config::get('system', 'block_public') && !local_user() && !remote_user())
- || (Config::get('system', 'block_local_dir') && !local_user() && !remote_user())
- ) {
- notice(L10n::t('Public access denied.') . EOL);
- return;
- }
-
- $o = '';
- $entries = [];
-
- Nav::setSelected('directory');
-
- if (!empty($a->data['search'])) {
- $search = Strings::escapeTags(trim($a->data['search']));
- } else {
- $search = (!empty($_GET['search']) ? Strings::escapeTags(trim(rawurldecode($_GET['search']))) : '');
- }
-
- $gdirpath = '';
- $dirurl = Config::get('system', 'directory');
- if (strlen($dirurl)) {
- $gdirpath = Profile::zrl($dirurl, true);
- }
-
- if ($search) {
- $search = DBA::escape($search);
-
- $sql_extra = " AND ((`profile`.`name` LIKE '%$search%') OR
- (`user`.`nickname` LIKE '%$search%') OR
- (`profile`.`pdesc` LIKE '%$search%') OR
- (`profile`.`locality` LIKE '%$search%') OR
- (`profile`.`region` LIKE '%$search%') OR
- (`profile`.`country-name` LIKE '%$search%') OR
- (`profile`.`gender` LIKE '%$search%') OR
- (`profile`.`marital` LIKE '%$search%') OR
- (`profile`.`sexual` LIKE '%$search%') OR
- (`profile`.`about` LIKE '%$search%') OR
- (`profile`.`romance` LIKE '%$search%') OR
- (`profile`.`work` LIKE '%$search%') OR
- (`profile`.`education` LIKE '%$search%') OR
- (`profile`.`pub_keywords` LIKE '%$search%') OR
- (`profile`.`prv_keywords` LIKE '%$search%'))";
- } else {
- $sql_extra = '';
- }
-
- $publish = (Config::get('system', 'publish_all') ? '' : " AND `publish` = 1 " );
-
-
- $total = 0;
- $cnt = DBA::fetchFirst("SELECT COUNT(*) AS `total` FROM `profile`
- LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid`
- WHERE `is-default` $publish AND NOT `user`.`blocked` AND NOT `user`.`account_removed` $sql_extra");
- if (DBA::isResult($cnt)) {
- $total = $cnt['total'];
- }
- $pager = new Pager($a->query_string, 60);
-
- $order = " ORDER BY `name` ASC ";
-
- $limit = $pager->getStart()."," . $pager->getItemsPerPage();
-
- $r = DBA::p("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` , `user`.`page-flags`,
- `contact`.`addr`, `contact`.`url` AS `profile_url` FROM `profile`
- LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid`
- LEFT JOIN `contact` ON `contact`.`uid` = `user`.`uid`
- WHERE `is-default` $publish AND NOT `user`.`blocked` AND NOT `user`.`account_removed` AND `contact`.`self`
- $sql_extra $order LIMIT $limit"
- );
- if (DBA::isResult($r)) {
- if (in_array('small', $a->argv)) {
- $photo = 'thumb';
- } else {
- $photo = 'photo';
- }
-
- while ($rr = DBA::fetch($r)) {
- $entries[] = format_directory_entry($rr, $photo);
- }
- DBA::close($r);
- } else {
- info(L10n::t("No entries \x28some entries may be hidden\x29.") . EOL);
- }
-
- $tpl = Renderer::getMarkupTemplate('directory_header.tpl');
-
- $o .= Renderer::replaceMacros($tpl, [
- '$search' => $search,
- '$globaldir' => L10n::t('Global Directory'),
- '$gdirpath' => $gdirpath,
- '$desc' => L10n::t('Find on this site'),
- '$contacts' => $entries,
- '$finding' => L10n::t('Results for:'),
- '$findterm' => (strlen($search) ? $search : ""),
- '$title' => L10n::t('Site Directory'),
- '$search_mod' => 'directory',
- '$submit' => L10n::t('Find'),
- '$paginate' => $pager->renderFull($total),
- ]);
-
- return $o;
-}
-
-/**
- * Format contact/profile/user data from the database into an usable
- * array for displaying directory entries.
- *
- * @param array $arr The directory entry from the database.
- * @param string $photo_size Avatar size (thumb, photo or micro).
- *
- * @return array
- */
-function format_directory_entry(array $arr, $photo_size = 'photo')
-{
- $itemurl = (($arr['addr'] != "") ? $arr['addr'] : $arr['profile_url']);
-
- $profile_link = $arr['profile_url'];
-
- $pdesc = (($arr['pdesc']) ? $arr['pdesc'] . '
' : '');
-
- $details = '';
- if (strlen($arr['locality'])) {
- $details .= $arr['locality'];
- }
- if (strlen($arr['region'])) {
- if (strlen($arr['locality'])) {
- $details .= ', ';
- }
- $details .= $arr['region'];
- }
- if (strlen($arr['country-name'])) {
- if (strlen($details)) {
- $details .= ', ';
- }
- $details .= $arr['country-name'];
- }
-
- $profile = $arr;
-
- if (!empty($profile['address'])
- || !empty($profile['locality'])
- || !empty($profile['region'])
- || !empty($profile['postal-code'])
- || !empty($profile['country-name'])
- ) {
- $location = L10n::t('Location:');
- } else {
- $location = '';
- }
-
- $gender = (!empty($profile['gender']) ? L10n::t('Gender:') : false);
- $marital = (!empty($profile['marital']) ? L10n::t('Status:') : false);
- $homepage = (!empty($profile['homepage']) ? L10n::t('Homepage:') : false);
- $about = (!empty($profile['about']) ? L10n::t('About:') : false);
-
- $location_e = $location;
-
- $photo_menu = [
- 'profile' => [L10n::t("View Profile"), Contact::magicLink($profile_link)]
- ];
-
- $entry = [
- 'id' => $arr['id'],
- 'url' => Contact::magicLInk($profile_link),
- 'itemurl' => $itemurl,
- 'thumb' => ProxyUtils::proxifyUrl($arr[$photo_size], false, ProxyUtils::SIZE_THUMB),
- 'img_hover' => $arr['name'],
- 'name' => $arr['name'],
- 'details' => $details,
- 'account_type' => Contact::getAccountType($arr),
- 'profile' => $profile,
- 'location' => $location_e,
- 'tags' => $arr['pub_keywords'],
- 'gender' => $gender,
- 'pdesc' => $pdesc,
- 'marital' => $marital,
- 'homepage' => $homepage,
- 'about' => $about,
- 'photo_menu' => $photo_menu,
-
- ];
-
- $hook = ['contact' => $arr, 'entry' => $entry];
-
- Hook::callAll('directory_item', $hook);
-
- unset($profile);
- unset($location);
-
- return $hook['entry'];
-}
diff --git a/mod/dirfind.php b/mod/dirfind.php
deleted file mode 100644
index a5b77312f..000000000
--- a/mod/dirfind.php
+++ /dev/null
@@ -1,265 +0,0 @@
-page['aside'])) {
- $a->page['aside'] = '';
- }
-
- $a->page['aside'] .= Widget::findPeople();
-
- $a->page['aside'] .= Widget::follow();
-}
-
-function dirfind_content(App $a, $prefix = "") {
-
- $community = false;
- $discover_user = false;
-
- $local = Config::get('system','poco_local_search');
-
- $search = $prefix.Strings::escapeTags(trim(defaults($_REQUEST, 'search', '')));
-
- $header = '';
-
- if (strpos($search,'@') === 0) {
- $search = substr($search,1);
- $header = L10n::t('People Search - %s', $search);
- if ((filter_var($search, FILTER_VALIDATE_EMAIL) && Network::isEmailDomainValid($search)) ||
- (substr(Strings::normaliseLink($search), 0, 7) == "http://")) {
- $user_data = Probe::uri($search);
- $discover_user = (in_array($user_data["network"], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::OSTATUS, Protocol::DIASPORA]));
- }
- }
-
- if (strpos($search,'!') === 0) {
- $search = substr($search,1);
- $community = true;
- $header = L10n::t('Forum Search - %s', $search);
- }
-
- $o = '';
-
- if ($search) {
- $pager = new Pager($a->query_string);
-
- if ($discover_user) {
- $j = new stdClass();
- $j->total = 1;
- $j->items_page = 1;
- $j->page = $pager->getPage();
-
- $objresult = new stdClass();
- $objresult->cid = 0;
- $objresult->name = $user_data["name"];
- $objresult->addr = $user_data["addr"];
- $objresult->url = $user_data["url"];
- $objresult->photo = $user_data["photo"];
- $objresult->tags = "";
- $objresult->network = $user_data["network"];
-
- $contact = Model\Contact::getDetailsByURL($user_data["url"], local_user());
- $objresult->cid = $contact["cid"];
- $objresult->pcid = $contact["zid"];
-
- $j->results[] = $objresult;
-
- // Add the contact to the global contacts if it isn't already in our system
- if (($contact["cid"] == 0) && ($contact["zid"] == 0) && ($contact["gid"] == 0)) {
- Model\GContact::update($user_data);
- }
- } elseif ($local) {
- if ($community) {
- $extra_sql = " AND `community`";
- } else {
- $extra_sql = "";
- }
-
- $pager->setItemsPerPage(80);
-
- if (Config::get('system','diaspora_enabled')) {
- $diaspora = Protocol::DIASPORA;
- } else {
- $diaspora = Protocol::DFRN;
- }
-
- if (!Config::get('system','ostatus_disabled')) {
- $ostatus = Protocol::OSTATUS;
- } else {
- $ostatus = Protocol::DFRN;
- }
-
- $search2 = "%".$search."%";
-
- /// @TODO These 2 SELECTs are not checked on validity with DBA::isResult()
- $count = q("SELECT count(*) AS `total` FROM `gcontact`
- WHERE NOT `hide` AND `network` IN ('%s', '%s', '%s', '%s') AND
- ((`last_contact` >= `last_failure`) OR (`updated` >= `last_failure`)) AND
- (`url` LIKE '%s' OR `name` LIKE '%s' OR `location` LIKE '%s' OR
- `addr` LIKE '%s' OR `about` LIKE '%s' OR `keywords` LIKE '%s') $extra_sql",
- DBA::escape(Protocol::ACTIVITYPUB), DBA::escape(Protocol::DFRN), DBA::escape($ostatus), DBA::escape($diaspora),
- DBA::escape(Strings::escapeHtml($search2)), DBA::escape(Strings::escapeHtml($search2)), DBA::escape(Strings::escapeHtml($search2)),
- DBA::escape(Strings::escapeHtml($search2)), DBA::escape(Strings::escapeHtml($search2)), DBA::escape(Strings::escapeHtml($search2)));
-
- $results = q("SELECT `nurl`
- FROM `gcontact`
- WHERE NOT `hide` AND `network` IN ('%s', '%s', '%s', '%s') AND
- ((`last_contact` >= `last_failure`) OR (`updated` >= `last_failure`)) AND
- (`url` LIKE '%s' OR `name` LIKE '%s' OR `location` LIKE '%s' OR
- `addr` LIKE '%s' OR `about` LIKE '%s' OR `keywords` LIKE '%s') $extra_sql
- GROUP BY `nurl`
- ORDER BY `updated` DESC LIMIT %d, %d",
- DBA::escape(Protocol::ACTIVITYPUB), DBA::escape(Protocol::DFRN), DBA::escape($ostatus), DBA::escape($diaspora),
- DBA::escape(Strings::escapeHtml($search2)), DBA::escape(Strings::escapeHtml($search2)), DBA::escape(Strings::escapeHtml($search2)),
- DBA::escape(Strings::escapeHtml($search2)), DBA::escape(Strings::escapeHtml($search2)), DBA::escape(Strings::escapeHtml($search2)),
- $pager->getStart(), $pager->getItemsPerPage());
- $j = new stdClass();
- $j->total = $count[0]["total"];
- $j->items_page = $pager->getItemsPerPage();
- $j->page = $pager->getPage();
- foreach ($results AS $result) {
- if (PortableContact::alternateOStatusUrl($result["nurl"])) {
- continue;
- }
-
- $urlparts = parse_url($result["nurl"]);
-
- // Ignore results that look strange.
- // For historic reasons the gcontact table does contain some garbage.
- if (!empty($urlparts['query']) || !empty($urlparts['fragment'])) {
- continue;
- }
-
- $result = Model\Contact::getDetailsByURL($result["nurl"], local_user());
-
- if ($result["name"] == "") {
- $result["name"] = end(explode("/", $urlparts["path"]));
- }
-
- $objresult = new stdClass();
- $objresult->cid = $result["cid"];
- $objresult->pcid = $result["zid"];
- $objresult->name = $result["name"];
- $objresult->addr = $result["addr"];
- $objresult->url = $result["url"];
- $objresult->photo = $result["photo"];
- $objresult->tags = $result["keywords"];
- $objresult->network = $result["network"];
-
- $j->results[] = $objresult;
- }
-
- // Add found profiles from the global directory to the local directory
- Worker::add(PRIORITY_LOW, 'DiscoverPoCo', "dirsearch", urlencode($search));
- } elseif (strlen(Config::get('system','directory'))) {
- $p = (($pager->getPage() != 1) ? '&p=' . $pager->getPage() : '');
-
- $x = Network::fetchUrl(get_server() . '/lsearch?f=' . $p . '&search=' . urlencode($search));
-
- $j = json_decode($x);
- $pager->setItemsPerPage($j->items_page);
- }
-
- if (!empty($j->results)) {
- $id = 0;
-
- $entries = [];
- foreach ($j->results as $jj) {
-
- $alt_text = "";
-
- $contact_details = Model\Contact::getDetailsByURL($jj->url, local_user());
-
- $itemurl = (($contact_details["addr"] != "") ? $contact_details["addr"] : $jj->url);
-
- // If We already know this contact then don't show the "connect" button
- if ($jj->cid > 0) {
- $connlnk = "";
- $conntxt = "";
- $contact = DBA::selectFirst('contact', [], ['id' => $jj->cid]);
- if (DBA::isResult($contact)) {
- $photo_menu = Model\Contact::photoMenu($contact);
- $details = Module\Contact::getContactTemplateVars($contact);
- $alt_text = $details['alt_text'];
- } else {
- $photo_menu = [];
- }
- } else {
- $connlnk = System::baseUrl().'/follow/?url='.(!empty($jj->connect) ? $jj->connect : $jj->url);
- $conntxt = L10n::t('Connect');
-
- $contact = DBA::selectFirst('contact', [], ['id' => $jj->pcid]);
- if (DBA::isResult($contact)) {
- $photo_menu = Model\Contact::photoMenu($contact);
- } else {
- $photo_menu = [];
- }
-
- $photo_menu['profile'] = [L10n::t("View Profile"), Model\Contact::magicLink($jj->url)];
- $photo_menu['follow'] = [L10n::t("Connect/Follow"), $connlnk];
- }
-
- $jj->photo = str_replace("http:///photo/", get_server()."/photo/", $jj->photo);
-
- $entry = [
- 'alt_text' => $alt_text,
- 'url' => Model\Contact::magicLink($jj->url),
- 'itemurl' => $itemurl,
- 'name' => $jj->name,
- 'thumb' => ProxyUtils::proxifyUrl($jj->photo, false, ProxyUtils::SIZE_THUMB),
- 'img_hover' => $jj->tags,
- 'conntxt' => $conntxt,
- 'connlnk' => $connlnk,
- 'photo_menu' => $photo_menu,
- 'details' => $contact_details['location'],
- 'tags' => $contact_details['keywords'],
- 'about' => $contact_details['about'],
- 'account_type' => Model\Contact::getAccountType($contact_details),
- 'network' => ContactSelector::networkToName($jj->network, $jj->url),
- 'id' => ++$id,
- ];
- $entries[] = $entry;
- }
-
- $tpl = Renderer::getMarkupTemplate('viewcontact_template.tpl');
- $o .= Renderer::replaceMacros($tpl,[
- 'title' => $header,
- '$contacts' => $entries,
- '$paginate' => $pager->renderFull($j->total),
- ]);
- } else {
- info(L10n::t('No matches') . EOL);
- }
-
- }
-
- return $o;
-}
diff --git a/mod/display.php b/mod/display.php
index acc2a5b09..54d479259 100644
--- a/mod/display.php
+++ b/mod/display.php
@@ -20,6 +20,7 @@ use Friendica\Model\Group;
use Friendica\Model\Item;
use Friendica\Model\Profile;
use Friendica\Module\Objects;
+use Friendica\Network\HTTPException;
use Friendica\Protocol\ActivityPub;
use Friendica\Protocol\DFRN;
use Friendica\Util\Strings;
@@ -76,7 +77,11 @@ function display_init(App $a)
}
if (!DBA::isResult($item)) {
- System::httpExit(404);
+ return;
+ }
+
+ if ($a->argc >= 3 && $nick == 'feed-item') {
+ displayShowFeed($item['id'], $a->argc > 3 && $a->argv[3] == 'conversation.atom');
}
if ($a->argc >= 3 && $nick == 'feed-item') {
@@ -185,23 +190,13 @@ function display_fetchauthor($a, $item)
$profiledata["photo"] = System::removedBaseUrl($profiledata["photo"]);
- if (local_user()) {
- if (in_array($profiledata["network"], [Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS])) {
- $profiledata["remoteconnect"] = System::baseUrl()."/follow?url=".urlencode($profiledata["url"]);
- }
- } elseif ($profiledata["network"] == Protocol::DFRN) {
- $connect = str_replace("/profile/", "/dfrn_request/", $profiledata["url"]);
- $profiledata["remoteconnect"] = $connect;
- }
-
- return($profiledata);
+ return $profiledata;
}
function display_content(App $a, $update = false, $update_uid = 0)
{
if (Config::get('system','block_public') && !local_user() && !remote_user()) {
- notice(L10n::t('Public access denied.') . EOL);
- return;
+ throw new HTTPException\ForbiddenException(L10n::t('Public access denied.'));
}
$o = '';
@@ -254,7 +249,7 @@ function display_content(App $a, $update = false, $update_uid = 0)
}
if (!$item_id) {
- System::httpExit(404);
+ throw new HTTPException\NotFoundException(L10n::t('The requested item doesn\'t exist or has been deleted.'));
}
// We are displaying an "alternate" link if that post was public. See issue 2864
@@ -303,8 +298,7 @@ function display_content(App $a, $update = false, $update_uid = 0)
$is_owner = (local_user() && (in_array($a->profile['profile_uid'], [local_user(), 0])) ? true : false);
if (!empty($a->profile['hidewall']) && !$is_owner && !$is_remote_contact) {
- notice(L10n::t('Access to this profile has been restricted.') . EOL);
- return;
+ throw new HTTPException\ForbiddenException(L10n::t('Access to this profile has been restricted.'));
}
// We need the editor here to be able to reshare an item.
@@ -340,7 +334,7 @@ function display_content(App $a, $update = false, $update_uid = 0)
$item = Item::selectFirstForUser(local_user(), $fields, $condition);
if (!DBA::isResult($item)) {
- System::httpExit(404);
+ throw new HTTPException\NotFoundException(L10n::t('The requested item doesn\'t exist or has been deleted.'));
}
$item['uri'] = $item['parent-uri'];
@@ -415,7 +409,7 @@ function displayShowFeed($item_id, $conversation)
{
$xml = DFRN::itemFeed($item_id, $conversation);
if ($xml == '') {
- System::httpExit(500);
+ throw new HTTPException\InternalServerErrorException(L10n::t('The feed for this item is unavailable.'));
}
header("Content-type: application/atom+xml");
echo $xml;
diff --git a/mod/editpost.php b/mod/editpost.php
index c1c0d16d7..e14baffa2 100644
--- a/mod/editpost.php
+++ b/mod/editpost.php
@@ -8,7 +8,6 @@ use Friendica\Content\Feature;
use Friendica\Core\Hook;
use Friendica\Core\L10n;
use Friendica\Core\Renderer;
-use Friendica\Core\System;
use Friendica\Model\FileTag;
use Friendica\Model\Item;
use Friendica\Database\DBA;
@@ -48,7 +47,6 @@ function editpost_content(App $a)
$tpl = Renderer::getMarkupTemplate('jot-header.tpl');
$a->page['htmlhead'] .= Renderer::replaceMacros($tpl, [
- '$baseurl' => System::baseUrl(),
'$ispublic' => ' ', // L10n::t('Visible to everybody'),
'$geotag' => $geotag,
'$nickname' => $a->user['nickname']
@@ -91,7 +89,6 @@ function editpost_content(App $a)
'$posttype' => $item['post-type'],
'$content' => undo_post_tagging($item['body']),
'$post_id' => $post_id,
- '$baseurl' => System::baseUrl(),
'$defloc' => $a->user['default-location'],
'$visitor' => 'none',
'$pvisit' => 'none',
diff --git a/mod/events.php b/mod/events.php
index 008cf643c..86cec9a7d 100644
--- a/mod/events.php
+++ b/mod/events.php
@@ -21,6 +21,7 @@ use Friendica\Module\Login;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Strings;
use Friendica\Util\Temporal;
+use Friendica\Worker\Delivery;
function events_init(App $a)
{
@@ -195,7 +196,7 @@ function events_post(App $a)
$item_id = Event::store($datarray);
if (!$cid) {
- Worker::add(PRIORITY_HIGH, "Notifier", "event", $item_id);
+ Worker::add(PRIORITY_HIGH, "Notifier", Delivery::POST, $item_id);
}
$a->internalRedirect('events');
@@ -237,7 +238,6 @@ function events_content(App $a)
$htpl = Renderer::getMarkupTemplate('event_head.tpl');
$a->page['htmlhead'] .= Renderer::replaceMacros($htpl, [
- '$baseurl' => System::baseUrl(),
'$module_url' => '/events',
'$modparams' => 1,
'$i18n' => $i18n,
@@ -247,7 +247,7 @@ function events_content(App $a)
$tabs = '';
// tabs
if ($a->theme_events_in_profile) {
- $tabs = Profile::getTabs($a, true);
+ $tabs = Profile::getTabs($a, 'events', true);
}
$mode = 'view';
@@ -379,7 +379,6 @@ function events_content(App $a)
}
$o = Renderer::replaceMacros($tpl, [
- '$baseurl' => System::baseUrl(),
'$tabs' => $tabs,
'$title' => L10n::t('Events'),
'$view' => L10n::t('View'),
diff --git a/mod/fbrowser.php b/mod/fbrowser.php
index 559896acb..f2bccb085 100644
--- a/mod/fbrowser.php
+++ b/mod/fbrowser.php
@@ -11,6 +11,7 @@ use Friendica\Core\Renderer;
use Friendica\Core\System;
use Friendica\Database\DBA;
use Friendica\Object\Image;
+use Friendica\Util\Strings;
/**
* @param App $a
@@ -27,6 +28,12 @@ function fbrowser_content(App $a)
exit();
}
+ // Needed to match the correct template in a module that uses a different theme than the user/site/default
+ $theme = Strings::sanitizeFilePathItem(defaults($_GET, 'theme', null));
+ if ($theme && is_file("view/theme/$theme/config.php")) {
+ $a->setCurrentTheme($theme);
+ }
+
$template_file = "filebrowser.tpl";
$o = '';
@@ -97,7 +104,6 @@ function fbrowser_content(App $a)
$o = Renderer::replaceMacros($tpl, [
'$type' => 'image',
- '$baseurl' => System::baseUrl(),
'$path' => $path,
'$folders' => $albums,
'$files' => $files,
@@ -127,7 +133,6 @@ function fbrowser_content(App $a)
$tpl = Renderer::getMarkupTemplate($template_file);
$o = Renderer::replaceMacros($tpl, [
'$type' => 'file',
- '$baseurl' => System::baseUrl(),
'$path' => [ [ "", L10n::t("Files")] ],
'$folders' => false,
'$files' => $files,
diff --git a/mod/feedtest.php b/mod/feedtest.php
deleted file mode 100644
index cffc1f345..000000000
--- a/mod/feedtest.php
+++ /dev/null
@@ -1,50 +0,0 @@
- local_user()]);
-
- $contact_id = Contact::getIdForURL($url, local_user(), true);
-
- $contact = DBA::selectFirst('contact', [], ['id' => $contact_id]);
-
- $xml = Network::fetchUrl($contact['poll']);
-
- $dummy = null;
- $import_result = Feed::import($xml, $importer, $contact, $dummy, true);
-
- $result = [
- 'input' => $xml,
- 'output' => var_export($import_result, true),
- ];
- }
-
- $tpl = Renderer::getMarkupTemplate('feedtest.tpl');
- $o = Renderer::replaceMacros($tpl, [
- '$url' => ['url', L10n::t('Source URL'), defaults($_REQUEST, 'url', ''), ''],
- '$result' => $result
- ]);
-
- return $o;
-}
diff --git a/mod/fetch.php b/mod/fetch.php
deleted file mode 100644
index 3e9c4e662..000000000
--- a/mod/fetch.php
+++ /dev/null
@@ -1,62 +0,0 @@
-argc != 3) || (!in_array($a->argv[1], ["post", "status_message", "reshare"]))) {
- System::httpExit(404);
- }
-
- $guid = $a->argv[2];
-
- // Fetch the item
- $fields = ['uid', 'title', 'body', 'guid', 'contact-id', 'private', 'created', 'app', 'location', 'coord', 'network',
- 'event-id', 'resource-id', 'author-link', 'author-avatar', 'author-name', 'plink', 'owner-link', 'attach'];
- $condition = ['wall' => true, 'private' => false, 'guid' => $guid, 'network' => [Protocol::DFRN, Protocol::DIASPORA]];
- $item = Item::selectFirst($fields, $condition);
- if (!DBA::isResult($item)) {
- $condition = ['guid' => $guid, 'network' => [Protocol::DFRN, Protocol::DIASPORA]];
- $item = Item::selectFirst(['author-link'], $condition);
- if (DBA::isResult($item)) {
- $parts = parse_url($item["author-link"]);
- $host = $parts["scheme"]."://".$parts["host"];
-
- if (Strings::normaliseLink($host) != Strings::normaliseLink(System::baseUrl())) {
- $location = $host."/fetch/".$a->argv[1]."/".urlencode($guid);
-
- header("HTTP/1.1 301 Moved Permanently");
- header("Location:".$location);
- exit();
- }
- }
-
- System::httpExit(404);
- }
-
- // Fetch some data from the author (We could combine both queries - but I think this is more readable)
- $user = User::getOwnerDataById($item["uid"]);
- if (!$user) {
- System::httpExit(404);
- }
-
- $status = Diaspora::buildStatus($item, $user);
- $xml = Diaspora::buildPostXml($status["type"], $status["message"]);
-
- // Send the envelope
- header("Content-Type: application/magic-envelope+xml; charset=utf-8");
- echo Diaspora::buildMagicEnvelope($xml, $user);
-
- exit();
-}
diff --git a/mod/filer.php b/mod/filer.php
deleted file mode 100644
index 0d9afe638..000000000
--- a/mod/filer.php
+++ /dev/null
@@ -1,42 +0,0 @@
-argc > 1) ? intval($a->argv[1]) : 0);
-
- Logger::log('filer: tag ' . $term . ' item ' . $item_id);
-
- if ($item_id && strlen($term)) {
- // file item
- FileTag::saveFile(local_user(), $item_id, $term);
- } else {
- // return filer dialog
- $filetags = PConfig::get(local_user(), 'system', 'filetags');
- $filetags = FileTag::fileToList($filetags, 'file');
- $filetags = explode(",", $filetags);
-
- $tpl = Renderer::getMarkupTemplate("filer_dialog.tpl");
- $o = Renderer::replaceMacros($tpl, [
- '$field' => ['term', L10n::t("Save to Folder:"), '', '', $filetags, L10n::t('- select -')],
- '$submit' => L10n::t('Save'),
- ]);
-
- echo $o;
- }
- exit();
-}
diff --git a/mod/filerm.php b/mod/filerm.php
deleted file mode 100644
index 9013dd62b..000000000
--- a/mod/filerm.php
+++ /dev/null
@@ -1,40 +0,0 @@
-argc > 1) ? intval($a->argv[1]) : 0);
-
- Logger::log('filerm: tag ' . $term . ' item ' . $item_id . ' category ' . ($category ? 'true' : 'false'));
-
- if ($item_id && strlen($term)) {
- if (FileTag::unsaveFile(local_user(), $item_id, $term, $category)) {
- info('Item removed');
- }
- }
- else {
- info('Item was not deleted');
- }
-
- $a->internalRedirect('/network?f=&file=' . rawurlencode($term));
- exit();
-}
diff --git a/mod/follow.php b/mod/follow.php
index ba4ff35f1..8a00e0559 100644
--- a/mod/follow.php
+++ b/mod/follow.php
@@ -17,7 +17,7 @@ use Friendica\Util\Strings;
function follow_post(App $a)
{
if (!local_user()) {
- System::httpExit(403, ['title' => L10n::t('Access denied.')]);
+ throw new \Friendica\Network\HTTPException\ForbiddenException(L10n::t('Access denied.'));
}
if (isset($_REQUEST['cancel'])) {
@@ -91,32 +91,34 @@ function follow_content(App $a)
$ret = Probe::uri($url);
- if (($ret['network'] == Protocol::DIASPORA) && !Config::get('system', 'diaspora_enabled')) {
+ $protocol = Contact::getProtocol($ret['url'], $ret['network']);
+
+ if (($protocol == Protocol::DIASPORA) && !Config::get('system', 'diaspora_enabled')) {
notice(L10n::t("Diaspora support isn't enabled. Contact can't be added."));
$submit = '';
//$a->internalRedirect($_SESSION['return_path']);
// NOTREACHED
}
- if (($ret['network'] == Protocol::OSTATUS) && Config::get('system', 'ostatus_disabled')) {
+ if (($protocol == Protocol::OSTATUS) && Config::get('system', 'ostatus_disabled')) {
notice(L10n::t("OStatus support is disabled. Contact can't be added."));
$submit = '';
//$a->internalRedirect($_SESSION['return_path']);
// NOTREACHED
}
- if ($ret['network'] == Protocol::PHANTOM) {
+ if ($protocol == Protocol::PHANTOM) {
notice(L10n::t("The network type couldn't be detected. Contact can't be added."));
$submit = '';
//$a->internalRedirect($_SESSION['return_path']);
// NOTREACHED
}
- if ($ret['network'] == Protocol::MAIL) {
+ if ($protocol == Protocol::MAIL) {
$ret['url'] = $ret['addr'];
}
- if (($ret['network'] === Protocol::DFRN) && !DBA::isResult($r)) {
+ if (($protocol === Protocol::DFRN) && !DBA::isResult($r)) {
$request = $ret['request'];
$tpl = Renderer::getMarkupTemplate('dfrn_request.tpl');
} else {
@@ -147,7 +149,7 @@ function follow_content(App $a)
$gcontact_id = $r[0]['id'];
}
- if ($ret['network'] === Protocol::DIASPORA) {
+ if ($protocol === Protocol::DIASPORA) {
$r[0]['location'] = '';
$r[0]['about'] = '';
}
diff --git a/mod/friendica.php b/mod/friendica.php
deleted file mode 100644
index 4942e4c8f..000000000
--- a/mod/friendica.php
+++ /dev/null
@@ -1,141 +0,0 @@
-argv[1]) && ($a->argv[1] == "json")) {
- $register_policies = [
- Register::CLOSED => 'REGISTER_CLOSED',
- Register::APPROVE => 'REGISTER_APPROVE',
- Register::OPEN => 'REGISTER_OPEN'
- ];
-
- $register_policy_int = intval(Config::get('config', 'register_policy'));
- if ($register_policy_int !== Register::CLOSED && Config::get('config', 'invitation_only')) {
- $register_policy = 'REGISTER_INVITATION';
- } else {
- $register_policy = $register_policies[$register_policy_int];
- }
-
- $condition = [];
- $admin = false;
- if (!empty(Config::get('config', 'admin_nickname'))) {
- $condition['nickname'] = Config::get('config', 'admin_nickname');
- }
- if (!empty(Config::get('config', 'admin_email'))) {
- $adminlist = explode(",", str_replace(" ", "", Config::get('config', 'admin_email')));
- $condition['email'] = $adminlist[0];
- $administrator = DBA::selectFirst('user', ['username', 'nickname'], $condition);
- if (DBA::isResult($administrator)) {
- $admin = [
- 'name' => $administrator['username'],
- 'profile'=> System::baseUrl() . '/profile/' . $administrator['nickname'],
- ];
- }
- }
-
- $visible_addons = Addon::getVisibleList();
-
- Config::load('feature_lock');
- $locked_features = [];
- $featureLock = Config::get('config', 'feature_lock');
- if (isset($featureLock)) {
- foreach ($featureLock as $k => $v) {
- if ($k === 'config_loaded') {
- continue;
- }
-
- $locked_features[$k] = intval($v);
- }
- }
-
- $data = [
- 'version' => FRIENDICA_VERSION,
- 'url' => System::baseUrl(),
- 'addons' => $visible_addons,
- 'locked_features' => $locked_features,
- 'explicit_content' => (int)Config::get('system', 'explicit_content', false),
- 'language' => Config::get('system','language'),
- 'register_policy' => $register_policy,
- 'admin' => $admin,
- 'site_name' => Config::get('config', 'sitename'),
- 'platform' => FRIENDICA_PLATFORM,
- 'info' => Config::get('config', 'info'),
- 'no_scrape_url' => System::baseUrl().'/noscrape'
- ];
-
- header('Content-type: application/json; charset=utf-8');
- echo json_encode($data);
- exit();
- }
-}
-
-function friendica_content(App $a)
-{
- $o = 'Friendica
' . PHP_EOL;
- $o .= ' ' . PHP_EOL;
- foreach ($blocklist as $b) {
- $o .= '' . L10n::t('Blocked domain') . ' ' . L10n::t('Reason for the block') . ' ' . PHP_EOL;
- }
- $o .= '' . $b['domain'] .' ' . $b['reason'] . ' TOC
";
- $lastlevel = 1;
- $idnum = [0, 0, 0, 0, 0, 0, 0];
- foreach ($lines as &$line) {
- if (substr($line, 0, 2) == "
";
- }
-
- $idnum[$level] ++;
- $id = implode("_", array_slice($idnum, 1, $level));
- $href = System::baseUrl() . "/help/{$filename}#{$id}";
- $toc .= "
";
- }
-
- $html = implode("\n", $lines);
-
- $a->page['aside'] = ' ';
- }
-
- return $html;
-}
diff --git a/mod/home.php b/mod/home.php
deleted file mode 100644
index 9f1810120..000000000
--- a/mod/home.php
+++ /dev/null
@@ -1,64 +0,0 @@
-user['nickname'])) {
- $a->internalRedirect('network');
- }
-
- if (strlen(Config::get('system','singleuser'))) {
- $a->internalRedirect('profile/' . Config::get('system','singleuser'));
- }
-
-}}
-
-if(! function_exists('home_content')) {
-function home_content(App $a) {
-
- if (!empty($_SESSION['theme'])) {
- unset($_SESSION['theme']);
- }
- if (!empty($_SESSION['mobile-theme'])) {
- unset($_SESSION['mobile-theme']);
- }
-
- $customhome = false;
- $defaultheader = '' . (Config::get('config', 'sitename') ? L10n::t('Welcome to %s', Config::get('config', 'sitename')) : '') . '
';
-
- $homefilepath = $a->getBasePath() . "/home.html";
- $cssfilepath = $a->getBasePath() . "/home.css";
- if (file_exists($homefilepath)) {
- $customhome = $homefilepath;
- if (file_exists($cssfilepath)) {
- $a->page['htmlhead'] .= '';
- }
- }
-
- $login = Login::form($a->query_string, intval(Config::get('config', 'register_policy')) === \Friendica\Module\Register::CLOSED ? 0 : 1);
-
- $content = '';
- Hook::callAll("home_content",$content);
-
-
- $tpl = Renderer::getMarkupTemplate('home.tpl');
- return Renderer::replaceMacros($tpl, [
- '$defaultheader' => $defaultheader,
- '$customhome' => $customhome,
- '$login' => $login,
- '$content' => $content
- ]);
-}}
diff --git a/mod/hostxrd.php b/mod/hostxrd.php
deleted file mode 100644
index 93a9d833c..000000000
--- a/mod/hostxrd.php
+++ /dev/null
@@ -1,34 +0,0 @@
- $a->getHostName(),
- '$zroot' => System::baseUrl(),
- '$domain' => System::baseUrl(),
- '$bigkey' => Salmon::salmonKey(Config::get('system', 'site_pubkey'))]
- );
-
- exit();
-}
diff --git a/mod/hovercard.php b/mod/hovercard.php
index 603c617ca..ca3991963 100644
--- a/mod/hovercard.php
+++ b/mod/hovercard.php
@@ -31,7 +31,7 @@ function hovercard_content()
// Get out if the system doesn't have public access allowed
if (intval(Config::get('system', 'block_public'))) {
- System::httpExit(401);
+ throw new \Friendica\Network\HTTPException\ForbiddenException();
}
// Return the raw content of the template. We use this to make templates usable for js functions.
diff --git a/mod/invite.php b/mod/invite.php
deleted file mode 100644
index e8901d071..000000000
--- a/mod/invite.php
+++ /dev/null
@@ -1,158 +0,0 @@
- $max_invites) {
- notice(L10n::t('Total invitation limit exceeded.') . EOL);
- return;
- }
-
-
- $recipients = !empty($_POST['recipients']) ? explode("\n", $_POST['recipients']) : [];
- $message = !empty($_POST['message']) ? Strings::escapeTags(trim($_POST['message'])) : '';
-
- $total = 0;
- $invitation_only = false;
- $invites_remaining = null;
-
- if (Config::get('system', 'invitation_only')) {
- $invitation_only = true;
- $invites_remaining = PConfig::get(local_user(), 'system', 'invites_remaining');
- if ((! $invites_remaining) && (! is_site_admin())) {
- return;
- }
- }
-
- foreach ($recipients as $recipient) {
- $recipient = trim($recipient);
-
- if (!filter_var($recipient, FILTER_VALIDATE_EMAIL)) {
- notice(L10n::t('%s : Not a valid email address.', $recipient) . EOL);
- continue;
- }
-
- if ($invitation_only && ($invites_remaining || is_site_admin())) {
- $code = Friendica\Model\Register::createForInvitation();
- $nmessage = str_replace('$invite_code', $code, $message);
-
- if (! is_site_admin()) {
- $invites_remaining --;
- if ($invites_remaining >= 0) {
- PConfig::set(local_user(), 'system', 'invites_remaining', $invites_remaining);
- } else {
- return;
- }
- }
- } else {
- $nmessage = $message;
- }
-
- $additional_headers = 'From: ' . $a->user['email'] . "\n"
- . 'Sender: ' . $a->getSenderEmailAddress() . "\n"
- . 'Content-type: text/plain; charset=UTF-8' . "\n"
- . 'Content-transfer-encoding: 8bit';
-
- $res = mail(
- $recipient,
- Email::encodeHeader(L10n::t('Please join us on Friendica'), 'UTF-8'),
- $nmessage,
- $additional_headers);
-
- if ($res) {
- $total ++;
- $current_invites ++;
- PConfig::set(local_user(), 'system', 'sent_invites', $current_invites);
- if ($current_invites > $max_invites) {
- notice(L10n::t('Invitation limit exceeded. Please contact your site administrator.') . EOL);
- return;
- }
- } else {
- notice(L10n::t('%s : Message delivery failed.', $recipient) . EOL);
- }
-
- }
- notice(L10n::tt("%d message sent.", "%d messages sent.", $total) . EOL);
- return;
-}
-
-function invite_content(App $a) {
-
- if (! local_user()) {
- notice(L10n::t('Permission denied.') . EOL);
- return;
- }
-
- $tpl = Renderer::getMarkupTemplate('invite.tpl');
- $invonly = false;
-
- if (Config::get('system', 'invitation_only')) {
- $invonly = true;
- $x = PConfig::get(local_user(), 'system', 'invites_remaining');
- if ((! $x) && (! is_site_admin())) {
- notice(L10n::t('You have no more invitations available') . EOL);
- return '';
- }
- }
-
- $dirloc = Config::get('system', 'directory');
- if (strlen($dirloc)) {
- if (intval(Config::get('config', 'register_policy')) === Register::CLOSED) {
- $linktxt = L10n::t('Visit %s for a list of public sites that you can join. Friendica members on other sites can all connect with each other, as well as with members of many other social networks.', $dirloc . '/servers');
- } else {
- $linktxt = L10n::t('To accept this invitation, please visit and register at %s or any other public Friendica website.', System::baseUrl())
- . "\r\n" . "\r\n" . L10n::t('Friendica sites all inter-connect to create a huge privacy-enhanced social web that is owned and controlled by its members. They can also connect with many traditional social networks. See %s for a list of alternate Friendica sites you can join.', $dirloc . '/servers');
- }
- } else { // there is no global directory URL defined
- if (intval(Config::get('config', 'register_policy')) === Register::CLOSED) {
- $o = L10n::t('Our apologies. This system is not currently configured to connect with other public sites or invite members.');
- return $o;
- } else {
- $linktxt = L10n::t('To accept this invitation, please visit and register at %s.', System::baseUrl()
- . "\r\n" . "\r\n" . L10n::t('Friendica sites all inter-connect to create a huge privacy-enhanced social web that is owned and controlled by its members. They can also connect with many traditional social networks.'));
- }
- }
-
- $o = Renderer::replaceMacros($tpl, [
- '$form_security_token' => BaseModule::getFormSecurityToken("send_invite"),
- '$title' => L10n::t('Send invitations'),
- '$recipients' => ['recipients', L10n::t('Enter email addresses, one per line:')],
- '$message' => ['message', L10n::t('Your message:'),L10n::t('You are cordially invited to join me and other close friends on Friendica - and help us to create a better social web.') . "\r\n" . "\r\n"
- . $linktxt
- . "\r\n" . "\r\n" . (($invonly) ? L10n::t('You will need to supply this invitation code: $invite_code') . "\r\n" . "\r\n" : '') .L10n::t('Once you have registered, please connect with me via my profile page at:')
- . "\r\n" . "\r\n" . System::baseUrl() . '/profile/' . $a->user['nickname']
- . "\r\n" . "\r\n" . L10n::t('For more information about the Friendica project and why we feel it is important, please visit http://friendi.ca') . "\r\n" . "\r\n"],
- '$submit' => L10n::t('Submit')
- ]);
-
- return $o;
-}
diff --git a/mod/item.php b/mod/item.php
index b126c4825..20dc9dfda 100644
--- a/mod/item.php
+++ b/mod/item.php
@@ -27,12 +27,12 @@ use Friendica\Core\Protocol;
use Friendica\Core\System;
use Friendica\Core\Worker;
use Friendica\Database\DBA;
+use Friendica\Model\Attach;
use Friendica\Model\Contact;
use Friendica\Model\Conversation;
use Friendica\Model\FileTag;
use Friendica\Model\Item;
use Friendica\Model\Photo;
-use Friendica\Model\Attach;
use Friendica\Model\Term;
use Friendica\Protocol\Diaspora;
use Friendica\Protocol\Email;
@@ -40,6 +40,7 @@ use Friendica\Util\DateTimeFormat;
use Friendica\Util\Emailer;
use Friendica\Util\Security;
use Friendica\Util\Strings;
+use Friendica\Worker\Delivery;
require_once 'include/items.php';
@@ -327,10 +328,9 @@ function item_post(App $a) {
}
}
- if (!empty($categories))
- {
+ if (!empty($categories)) {
// get the "fileas" tags for this post
- $filedas = FileTag::fileToList($categories, 'file');
+ $filedas = FileTag::fileToArray($categories);
}
// save old and new categories, so we can determine what needs to be deleted from pconfig
@@ -338,10 +338,9 @@ function item_post(App $a) {
$categories = FileTag::listToFile(trim(defaults($_REQUEST, 'category', '')), 'category');
$categories_new = $categories;
- if (!empty($filedas))
- {
+ if (!empty($filedas) && is_array($filedas)) {
// append the fileas stuff to the new categories list
- $categories .= FileTag::listToFile($filedas, 'file');
+ $categories .= FileTag::arrayToFile($filedas);
}
// get contact info for poster
@@ -605,8 +604,6 @@ function item_post(App $a) {
$origin = $_REQUEST['origin'];
}
- $notify_type = ($toplevel_item_id ? 'comment-new' : 'wall-new');
-
$uri = ($message_id ? $message_id : Item::newURI($api_source ? $profile_uid : $uid, $guid));
// Fallback so that we alway have a parent uri
@@ -871,7 +868,7 @@ function item_post(App $a) {
// When we are doing some forum posting via ! we have to start the notifier manually.
// These kind of posts don't initiate the notifier call in the item class.
if ($only_to_forum) {
- Worker::add(PRIORITY_HIGH, "Notifier", $notify_type, $post_id);
+ Worker::add(PRIORITY_HIGH, "Notifier", Delivery::POST, $post_id);
}
Logger::log('post_complete');
diff --git a/mod/like.php b/mod/like.php
deleted file mode 100644
index 7fc7b2b42..000000000
--- a/mod/like.php
+++ /dev/null
@@ -1,48 +0,0 @@
-argc > 1) ? Strings::escapeTags(trim($a->argv[1])) : 0);
-
- $r = Item::performLike($item_id, $verb);
- if (!$r) {
- return;
- }
-
- // See if we've been passed a return path to redirect to
- $return_path = defaults($_REQUEST, 'return', '');
-
- like_content_return($a, $return_path);
- exit();
-}
-
-
-// Decide how to return. If we were called with a 'return' argument,
-// then redirect back to the calling page. If not, just quietly end
-
-function like_content_return(App $a, $return_path) {
- if ($return_path) {
- $rand = '_=' . time();
- if (strpos($return_path, '?')) {
- $rand = "&$rand";
- } else {
- $rand = "?$rand";
- }
-
- $a->internalRedirect($return_path . $rand);
- }
-}
diff --git a/mod/localtime.php b/mod/localtime.php
deleted file mode 100644
index f68c3fba5..000000000
--- a/mod/localtime.php
+++ /dev/null
@@ -1,59 +0,0 @@
-data['mod-localtime'] = DateTimeFormat::convert($t, $_POST['timezone'], 'UTC', $bd_format);
- }
-}
-
-function localtime_content(App $a)
-{
- $t = $_REQUEST['time'];
- if (! $t) {
- $t = 'now';
- }
-
- $o = '' . L10n::t('Time Conversion') . '
';
-
- $o .= '' . L10n::t('Welcome to Friendica') . '
';
- $o .= '' . L10n::t('New Member Checklist') . '
';
- $o .= '' . L10n::t('Getting Started') . '
';
- $o .= '';
- $o .= '
';
- $o .= '
' . L10n::t('On your Quick Start page - find a brief introduction to your profile and network tabs, make some new connections, and find some groups to join.') . '' . L10n::t('Settings') . '
';
- $o .= '';
- $o .= '
';
- $o .= '
' . L10n::t('On your Settings page - change your initial password. Also make a note of your Identity Address. This looks just like an email address - and will be useful in making friends on the free social web.') . '' . L10n::t('Profile') . '
';
- $o .= '';
- $o .= '
';
- $o .= '
' . L10n::t('Upload a profile photo if you have not done so already. Studies have shown that people with real photos of themselves are ten times more likely to make friends than people who do not.') . '
' . L10n::t('Edit your default profile to your liking. Review the settings for hiding your list of friends and hiding the profile from unknown visitors.') . '
' . L10n::t('Set some public keywords for your default profile which describe your interests. We may be able to find other people with similar interests and suggest friendships.') . '' . L10n::t('Connecting') . '
';
- $o .= '';
-
- $mail_disabled = ((function_exists('imap_open') && (!Config::get('system', 'imap_disabled'))) ? 0 : 1);
-
- if (!$mail_disabled) {
- $o .= '
';
- $o .= '
' . L10n::t('Enter your email access information on your Connector Settings page if you wish to import and interact with friends or mailing lists from your email INBOX') . '
' . L10n::t('Your Contacts page is your gateway to managing friendships and connecting with friends on other networks. Typically you enter their address or site URL in the Add New Contact dialog.') . '
' . L10n::t('The Directory page lets you find other people in this network or other federated sites. Look for a Connect or Follow link on their profile page. Provide your own Identity Address if requested.') . '
' . L10n::t("On the side panel of the Contacts page are several tools to find new friends. We can match people by interest, look up people by name or interest, and provide suggestions based on network relationships. On a brand new site, friend suggestions will usually begin to be populated within 24 hours.") . '' . L10n::t('Groups') . '
';
- $o .= '';
- $o .= '
';
- $o .= '
' . L10n::t('Once you have made some friends, organize them into private conversation groups from the sidebar of your Contacts page and then you can interact with each group privately on your Network page.') . '
' . L10n::t("Friendica respects your privacy. By default, your posts will only show up to people you've added as friends. For more information, see the help section from the link above.") . '' . L10n::t('Getting Help') . '
';
- $o .= '';
- $o .= '
';
- $o .= '
' . L10n::t('Our help pages may be consulted for detail on other program features and resources.') . '' . L10n::t('Personal Notes') . '
';
diff --git a/mod/notice.php b/mod/notice.php
deleted file mode 100644
index 1a584000c..000000000
--- a/mod/notice.php
+++ /dev/null
@@ -1,24 +0,0 @@
- friendica items permanent-url compatibility
- */
-
-use Friendica\App;
-use Friendica\Core\L10n;
-use Friendica\Database\DBA;
-
-function notice_init(App $a)
-{
- $id = $a->argv[1];
- $r = q("SELECT `user`.`nickname` FROM `user` LEFT JOIN `item` ON `item`.`uid` = `user`.`uid` WHERE `item`.`id` = %d", intval($id));
- if (DBA::isResult($r)) {
- $nick = $r[0]['nickname'];
- $a->internalRedirect('display/' . $nick . '/' . $id);
- } else {
- $a->error = 404;
- notice(L10n::t('Item not found.') . EOL);
- }
-
- return;
-}
diff --git a/mod/notifications.php b/mod/notifications.php
index 909b297eb..8bc9a76c3 100644
--- a/mod/notifications.php
+++ b/mod/notifications.php
@@ -121,6 +121,9 @@ function notifications_content(App $a)
} elseif (($a->argc > 1) && ($a->argv[1] == 'home')) {
$notif_header = L10n::t('Home Notifications');
$notifs = $nm->homeNotifs($show, $startrec, $perpage);
+ // fallback - redirect to main page
+ } else {
+ $a->internalRedirect('notifications');
}
// Set the pager
@@ -223,6 +226,14 @@ function notifications_content(App $a)
'$as_fan' => (($notif['network'] == Protocol::DIASPORA) ? L10n::t('Sharer') : L10n::t('Subscriber'))
]);
+ $contact = DBA::selectFirst('contact', ['network', 'protocol'], ['id' => $notif['contact_id']]);
+
+ if (($contact['network'] != Protocol::DFRN) || ($contact['protocol'] == Protocol::ACTIVITYPUB)) {
+ $action = 'follow_confirm';
+ } else {
+ $action = 'dfrn_confirm';
+ }
+
$header = $notif['name'];
if ($notif['addr'] != '') {
@@ -270,6 +281,7 @@ function notifications_content(App $a)
'$note' => $notif['note'],
'$ignore' => L10n::t('Ignore'),
'$discard' => $discard,
+ '$action' => $action,
]);
break;
}
diff --git a/mod/notify.php b/mod/notify.php
deleted file mode 100644
index 870358178..000000000
--- a/mod/notify.php
+++ /dev/null
@@ -1,90 +0,0 @@
-argc > 2 && $a->argv[1] === 'view' && intval($a->argv[2])) {
- $note = $nm->getByID($a->argv[2]);
- if ($note) {
- $nm->setSeen($note);
-
- // The friendica client has problems with the GUID. this is some workaround
- if ($a->isFriendicaApp()) {
- require_once("include/items.php");
- $urldata = parse_url($note['link']);
- $guid = basename($urldata["path"]);
- $itemdata = Item::getIdAndNickByGuid($guid, local_user());
- if ($itemdata["id"] != 0) {
- $note['link'] = System::baseUrl().'/display/'.$itemdata["nick"].'/'.$itemdata["id"];
- }
- }
-
- System::externalRedirect($note['link']);
- }
-
- $a->internalRedirect();
- }
-
- if ($a->argc > 2 && $a->argv[1] === 'mark' && $a->argv[2] === 'all') {
- $r = $nm->setAllSeen();
- $j = json_encode(['result' => ($r) ? 'success' : 'fail']);
- echo $j;
- exit();
- }
-}
-
-function notify_content(App $a)
-{
- if (! local_user()) {
- return Login::form();
- }
-
- $notif_content = '';
-
- $nm = new NotificationsManager();
-
- $notif_tpl = Renderer::getMarkupTemplate('notifications.tpl');
-
- $not_tpl = Renderer::getMarkupTemplate('notify.tpl');
-
- $r = $nm->getAll(['seen'=>0]);
- if (DBA::isResult($r) > 0) {
- foreach ($r as $it) {
- $notif_content .= Renderer::replaceMacros($not_tpl, [
- '$item_link' => System::baseUrl(true).'/notify/view/'. $it['id'],
- '$item_image' => $it['photo'],
- '$item_text' => strip_tags(BBCode::convert($it['msg'])),
- '$item_when' => Temporal::getRelativeDate($it['date'])
- ]);
- }
- } else {
- $notif_content .= L10n::t('No more system notifications.');
- }
-
- $o = Renderer::replaceMacros($notif_tpl, [
- '$notif_header' => L10n::t('System Notifications'),
- '$tabs' => false, // $tabs,
- '$notif_content' => $notif_content,
- ]);
-
- return $o;
-}
diff --git a/mod/openid.php b/mod/openid.php
index 7300c686b..def34ff08 100644
--- a/mod/openid.php
+++ b/mod/openid.php
@@ -4,10 +4,10 @@
*/
use Friendica\App;
-use Friendica\Core\Authentication;
use Friendica\Core\Config;
use Friendica\Core\L10n;
use Friendica\Core\Logger;
+use Friendica\Core\Session;
use Friendica\Database\DBA;
use Friendica\Util\Strings;
@@ -52,7 +52,7 @@ function openid_content(App $a) {
unset($_SESSION['openid']);
- Authentication::setAuthenticatedSessionForUser($r[0],true,true);
+ Session::setAuthenticatedForUser($a, $r[0],true,true);
// just in case there was no return url set
// and we fell through
diff --git a/mod/opensearch.php b/mod/opensearch.php
deleted file mode 100644
index 2057f0b5d..000000000
--- a/mod/opensearch.php
+++ /dev/null
@@ -1,21 +0,0 @@
- System::baseUrl(),
- '$nodename' => $a->getHostName(),
- ]);
-
- echo $o;
-
- exit();
-}
diff --git a/mod/parse_url.php b/mod/parse_url.php
index 3b2522ab1..6b393932e 100644
--- a/mod/parse_url.php
+++ b/mod/parse_url.php
@@ -9,12 +9,14 @@
*
* @see ParseUrl::getSiteinfo() for more information about scraping embeddable content
*/
+
use Friendica\App;
use Friendica\Core\Hook;
use Friendica\Core\Logger;
use Friendica\Core\System;
use Friendica\Util\Network;
use Friendica\Util\ParseUrl;
+use Friendica\Util\Strings;
function parse_url_content(App $a)
{
@@ -25,10 +27,14 @@ function parse_url_content(App $a)
$br = "\n";
- if (!empty($_GET['binurl'])) {
+ if (!empty($_GET['binurl']) && Strings::isHex($_GET['binurl'])) {
$url = trim(hex2bin($_GET['binurl']));
- } else {
+ } elseif (!empty($_GET['url'])) {
$url = trim($_GET['url']);
+ // fallback in case no url is valid
+ } else {
+ Logger::info('No url given');
+ exit();
}
if (!empty($_GET['title'])) {
@@ -64,9 +70,8 @@ function parse_url_content(App $a)
// Check if the URL is an image, video or audio file. If so format
// the URL with the corresponding BBCode media tag
- $redirects = 0;
// Fetch the header of the URL
- $curlResponse = Network::curl($url, false, $redirects, ['novalidate' => true, 'nobody' => true]);
+ $curlResponse = Network::curl($url, false, ['novalidate' => true, 'nobody' => true]);
if ($curlResponse->isSuccess()) {
// Convert the header fields into an array
diff --git a/mod/photos.php b/mod/photos.php
index 137e0adb5..b904abe31 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -29,8 +29,8 @@ use Friendica\Util\Crypto;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Map;
use Friendica\Util\Security;
-use Friendica\Util\Temporal;
use Friendica\Util\Strings;
+use Friendica\Util\Temporal;
use Friendica\Util\XML;
function photos_init(App $a) {
@@ -47,23 +47,21 @@ function photos_init(App $a) {
if ($a->argc > 1) {
$nick = $a->argv[1];
- $user = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `blocked` = 0 LIMIT 1",
- DBA::escape($nick)
- );
+ $user = DBA::selectFirst('user', [], ['nickname' => $nick, 'blocked' => false]);
if (!DBA::isResult($user)) {
return;
}
- $a->data['user'] = $user[0];
- $a->profile_uid = $user[0]['uid'];
+ $a->data['user'] = $user;
+ $a->profile_uid = $user['uid'];
$is_owner = (local_user() && (local_user() == $a->profile_uid));
$profile = Profile::getByNickname($nick, $a->profile_uid);
$account_type = Contact::getAccountType($profile);
- $tpl = Renderer::getMarkupTemplate("vcard-widget.tpl");
+ $tpl = Renderer::getMarkupTemplate("widget/vcard.tpl");
$vcard_widget = Renderer::replaceMacros($tpl, [
'$name' => $profile['name'],
@@ -115,7 +113,6 @@ function photos_init(App $a) {
'$title' => L10n::t('Photo Albums'),
'$recent' => L10n::t('Recent Photos'),
'$albums' => $ret['albums'],
- '$baseurl' => System::baseUrl(),
'$upload' => [L10n::t('Upload New Photos'), 'photos/' . $a->data['user']['nickname'] . '/upload'],
'$can_post' => $can_post
]);
@@ -170,12 +167,7 @@ function photos_post(App $a)
}
if ($contact_id > 0) {
- $r = q("SELECT `uid` FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `id` = %d AND `uid` = %d LIMIT 1",
- intval($contact_id),
- intval($page_owner_uid)
- );
-
- if (DBA::isResult($r)) {
+ if (DBA::exists('contact', ['id' => $contact_id, 'uid' => $page_owner_uid, 'blocked' => false, 'pending' => false])) {
$can_post = true;
$visitor = $contact_id;
}
@@ -196,6 +188,9 @@ function photos_post(App $a)
}
if ($a->argc > 3 && $a->argv[2] === 'album') {
+ if (!Strings::isHex($a->argv[3])) {
+ $a->internalRedirect('photos/' . $a->data['user']['nickname'] . '/album');
+ }
$album = hex2bin($a->argv[3]);
if ($album === L10n::t('Profile Photos') || $album === 'Contact Photos' || $album === L10n::t('Contact Photos')) {
@@ -235,36 +230,12 @@ function photos_post(App $a)
}
/*
- * DELETE photo album and all its photos
+ * DELETE all photos filed in a given album
*/
-
- if ($_POST['dropalbum'] == L10n::t('Delete Album')) {
- // Check if we should do HTML-based delete confirmation
- if (!empty($_REQUEST['confirm'])) {
- $drop_url = $a->query_string;
-
- $extra_inputs = [
- ['name' => 'albumname', 'value' => $_POST['albumname']],
- ];
-
- $a->page['content'] = Renderer::replaceMacros(Renderer::getMarkupTemplate('confirm.tpl'), [
- '$method' => 'post',
- '$message' => L10n::t('Do you really want to delete this photo album and all its photos?'),
- '$extra_inputs' => $extra_inputs,
- '$confirm' => L10n::t('Delete Album'),
- '$confirm_url' => $drop_url,
- '$confirm_name' => 'dropalbum', // Needed so that confirmation will bring us back into this if statement
- '$cancel' => L10n::t('Cancel'),
- ]);
-
- $a->error = 1; // Set $a->error so the other module functions don't execute
- return;
- }
-
+ if (!empty($_POST['dropalbum'])) {
$res = [];
// get the list of photos we are about to delete
-
if ($visitor) {
$r = q("SELECT distinct(`resource-id`) as `rid` FROM `photo` WHERE `contact-id` = %d AND `uid` = %d AND `album` = '%s'",
intval($visitor),
@@ -282,77 +253,57 @@ function photos_post(App $a)
foreach ($r as $rr) {
$res[] = $rr['rid'];
}
+
+ // remove the associated photos
+ Photo::delete(['resource-id' => $res, 'uid' => $page_owner_uid]);
+
+ // find and delete the corresponding item with all the comments and likes/dislikes
+ Item::deleteForUser(['resource-id' => $res, 'uid' => $page_owner_uid], $page_owner_uid);
+
+ // Update the photo albums cache
+ Photo::clearAlbumCache($page_owner_uid);
+ notice(L10n::t('Album successfully deleted'));
} else {
- $a->internalRedirect($_SESSION['photo_return']);
- return; // NOTREACHED
+ notice(L10n::t('Album was empty.'));
+ }
+ }
+
+ $a->internalRedirect('photos/' . $a->argv[1]);
+ }
+
+ if ($a->argc > 3 && $a->argv[2] === 'image') {
+ // Check if the user has responded to a delete confirmation query for a single photo
+ if (!empty($_POST['canceled'])) {
+ $a->internalRedirect('photos/' . $a->argv[1] . '/image/' . $a->argv[3]);
+ }
+
+ if (!empty($_POST['delete'])) {
+ // same as above but remove single photo
+ if ($visitor) {
+ $condition = ['contact-id' => $visitor, 'uid' => $page_owner_uid, 'resource-id' => $a->argv[3]];
+
+ } else {
+ $condition = ['uid' => local_user(), 'resource-id' => $a->argv[3]];
}
- // remove the associated photos
- Photo::delete(['resource-id' => $res, 'uid' => $page_owner_uid]);
+ $photo = DBA::selectFirst('photo', ['resource-id'], $condition);
- // find and delete the corresponding item with all the comments and likes/dislikes
- Item::deleteForUser(['resource-id' => $res, 'uid' => $page_owner_uid], $page_owner_uid);
+ if (DBA::isResult($photo)) {
+ Photo::delete(['uid' => $page_owner_uid, 'resource-id' => $photo['resource-id']]);
- // Update the photo albums cache
- Photo::clearAlbumCache($page_owner_uid);
+ Item::deleteForUser(['resource-id' => $photo['resource-id'], 'uid' => $page_owner_uid], $page_owner_uid);
+
+ // Update the photo albums cache
+ Photo::clearAlbumCache($page_owner_uid);
+ notice('Successfully deleted the photo.');
+ } else {
+ notice('Failed to delete the photo.');
+ $a->internalRedirect('photos/' . $a->argv[1] . '/image/' . $a->argv[3]);
+ }
+
+ $a->internalRedirect('photos/' . $a->argv[1]);
+ return; // NOTREACHED
}
-
- $a->internalRedirect('photos/' . $a->data['user']['nickname']);
- return; // NOTREACHED
- }
-
-
- // Check if the user has responded to a delete confirmation query for a single photo
- if ($a->argc > 2 && !empty($_REQUEST['canceled'])) {
- $a->internalRedirect($_SESSION['photo_return']);
- }
-
- if ($a->argc > 2 && defaults($_POST, 'delete', '') === L10n::t('Delete Photo')) {
-
- // same as above but remove single photo
-
- // Check if we should do HTML-based delete confirmation
- if (!empty($_REQUEST['confirm'])) {
- $drop_url = $a->query_string;
-
- $a->page['content'] = Renderer::replaceMacros(Renderer::getMarkupTemplate('confirm.tpl'), [
- '$method' => 'post',
- '$message' => L10n::t('Do you really want to delete this photo?'),
- '$extra_inputs' => [],
- '$confirm' => L10n::t('Delete Photo'),
- '$confirm_url' => $drop_url,
- '$confirm_name' => 'delete', // Needed so that confirmation will bring us back into this if statement
- '$cancel' => L10n::t('Cancel'),
- ]);
-
- $a->error = 1; // Set $a->error so the other module functions don't execute
- return;
- }
-
- if ($visitor) {
- $r = q("SELECT `id`, `resource-id` FROM `photo` WHERE `contact-id` = %d AND `uid` = %d AND `resource-id` = '%s' LIMIT 1",
- intval($visitor),
- intval($page_owner_uid),
- DBA::escape($a->argv[2])
- );
- } else {
- $r = q("SELECT `id`, `resource-id` FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s' LIMIT 1",
- intval(local_user()),
- DBA::escape($a->argv[2])
- );
- }
-
- if (DBA::isResult($r)) {
- Photo::delete(['uid' => $page_owner_uid, 'resource-id' => $r[0]['resource-id']]);
-
- Item::deleteForUser(['resource-id' => $r[0]['resource-id'], 'uid' => $page_owner_uid], $page_owner_uid);
-
- // Update the photo albums cache
- Photo::clearAlbumCache($page_owner_uid);
- }
-
- $a->internalRedirect('photos/' . $a->data['user']['nickname']);
- return; // NOTREACHED
}
if ($a->argc > 2 && (!empty($_POST['desc']) || !empty($_POST['newtag']) || isset($_POST['albname']))) {
@@ -367,7 +318,7 @@ function photos_post(App $a)
$str_group_deny = !empty($_POST['group_deny']) ? perms2str($_POST['group_deny']) : '';
$str_contact_deny = !empty($_POST['contact_deny']) ? perms2str($_POST['contact_deny']) : '';
- $resource_id = $a->argv[2];
+ $resource_id = $a->argv[3];
if (!strlen($albname)) {
$albname = DateTimeFormat::localNow('Y');
@@ -470,10 +421,11 @@ function photos_post(App $a)
if ($item_id) {
$item = Item::selectFirst(['tag', 'inform'], ['id' => $item_id, 'uid' => $page_owner_uid]);
- }
- if (DBA::isResult($item)) {
- $old_tag = $item['tag'];
- $old_inform = $item['inform'];
+
+ if (DBA::isResult($item)) {
+ $old_tag = $item['tag'];
+ $old_inform = $item['inform'];
+ }
}
if (strlen($rawtags)) {
@@ -493,6 +445,7 @@ function photos_post(App $a)
foreach ($tags as $tag) {
if (strpos($tag, '@') === 0) {
$profile = '';
+ $contact = null;
$name = substr($tag,1);
if ((strpos($name, '@')) || (strpos($name, 'http://'))) {
@@ -527,34 +480,26 @@ function photos_post(App $a)
}
if ($tagcid) {
- $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
- intval($tagcid),
- intval($page_owner_uid)
- );
+ $contact = DBA::selectFirst('contact', [], ['id' => $tagcid, 'uid' => $page_owner_uid]);
} else {
$newname = str_replace('_',' ',$name);
//select someone from this user's contacts by name
- $r = q("SELECT * FROM `contact` WHERE `name` = '%s' AND `uid` = %d LIMIT 1",
- DBA::escape($newname),
- intval($page_owner_uid)
- );
-
- if (!DBA::isResult($r)) {
+ $contact = DBA::selectFirst('contact', [], ['name' => $newname, 'uid' => $page_owner_uid]);
+ if (!DBA::isResult($contact)) {
//select someone by attag or nick and the name passed in
- $r = q("SELECT * FROM `contact` WHERE `attag` = '%s' OR `nick` = '%s' AND `uid` = %d ORDER BY `attag` DESC LIMIT 1",
- DBA::escape($name),
- DBA::escape($name),
- intval($page_owner_uid)
+ $contact = DBA::selectFirst('contact', [],
+ ['(`attag` = ? OR `nick` = ?) AND `uid` = ?', $name, $name, $page_owner_uid],
+ ['order' => ['attag' => true]]
);
}
}
- if (DBA::isResult($r)) {
- $newname = $r[0]['name'];
- $profile = $r[0]['url'];
+ if (DBA::isResult($contact)) {
+ $newname = $contact['name'];
+ $profile = $contact['url'];
- $notify = 'cid:' . $r[0]['id'];
+ $notify = 'cid:' . $contact['id'];
if (strlen($inform)) {
$inform .= ',';
}
@@ -563,8 +508,8 @@ function photos_post(App $a)
}
if ($profile) {
- if (substr($notify, 0, 4) === 'cid:') {
- $taginfo[] = [$newname, $profile, $notify, $r[0], '@[url=' . str_replace(',','%2c',$profile) . ']' . $newname . '[/url]'];
+ if (!empty($contact)) {
+ $taginfo[] = [$newname, $profile, $notify, $contact, '@[url=' . str_replace(',', '%2c', $profile) . ']' . $newname . '[/url]'];
} else {
$taginfo[] = [$newname, $profile, $notify, null, $str_tags .= '@[url=' . $profile . ']' . $newname . '[/url]'];
}
@@ -583,13 +528,13 @@ function photos_post(App $a)
}
}
- $newtag = $old_tag;
+ $newtag = $old_tag ?? '';
if (strlen($newtag) && strlen($str_tags)) {
$newtag .= ',';
}
$newtag .= $str_tags;
- $newinform = $old_inform;
+ $newinform = $old_inform ?? '';
if (strlen($newinform) && strlen($inform)) {
$newinform .= ',';
}
@@ -794,7 +739,7 @@ function photos_post(App $a)
@unlink($src);
$foo = 0;
Hook::callAll('photo_post_end',$foo);
- exit();
+ return;
}
$exif = $image->orient($src);
@@ -820,7 +765,7 @@ function photos_post(App $a)
if (!$r) {
Logger::log('mod/photos.php: photos_post(): image store failed', Logger::DEBUG);
notice(L10n::t('Image upload failed.') . EOL);
- exit();
+ return;
}
if ($width > 640 || $height > 640) {
@@ -896,8 +841,10 @@ function photos_content(App $a)
// photos/name/upload/xxxxx (xxxxx is album name)
// photos/name/album/xxxxx
// photos/name/album/xxxxx/edit
+ // photos/name/album/xxxxx/drop
// photos/name/image/xxxxx
// photos/name/image/xxxxx/edit
+ // photos/name/image/xxxxx/drop
if (Config::get('system', 'block_public') && !local_user() && !remote_user()) {
notice(L10n::t('Public access denied.') . EOL);
@@ -936,7 +883,8 @@ function photos_content(App $a)
$contact = null;
$remote_contact = false;
$contact_id = 0;
- $edit = false;
+ $edit = '';
+ $drop = '';
$owner_uid = $a->data['user']['uid'];
@@ -954,15 +902,12 @@ function photos_content(App $a)
}
}
}
- if ($contact_id) {
- $r = q("SELECT `uid` FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `id` = %d AND `uid` = %d LIMIT 1",
- intval($contact_id),
- intval($owner_uid)
- );
- if (DBA::isResult($r)) {
+ if ($contact_id) {
+ $contact = DBA::selectFirst('contact', [], ['id' => $contact_id, 'uid' => $owner_uid, 'blocked' => false, 'pending' => false]);
+
+ if (DBA::isResult($contact)) {
$can_post = true;
- $contact = $r[0];
$remote_contact = true;
$visitor = $contact_id;
}
@@ -983,16 +928,13 @@ function photos_content(App $a)
}
}
}
+
if ($contact_id) {
$groups = Group::getIdsByContactId($contact_id);
- $r = q("SELECT * FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `id` = %d AND `uid` = %d LIMIT 1",
- intval($contact_id),
- intval($owner_uid)
- );
- if (DBA::isResult($r)) {
- $contact = $r[0];
- $remote_contact = true;
- }
+
+ $contact = DBA::selectFirst('contact', [], ['id' => $contact_id, 'uid' => $owner_uid, 'blocked' => false, 'pending' => false]);
+
+ $remote_contact = DBA::isResult($contact);
}
}
@@ -1012,7 +954,7 @@ function photos_content(App $a)
// tabs
$is_owner = (local_user() && (local_user() == $owner_uid));
- $o .= Profile::getTabs($a, $is_owner, $a->data['user']['nickname']);
+ $o .= Profile::getTabs($a, 'photos', $is_owner, $a->data['user']['nickname']);
// Display upload form
if ($datatype === 'upload') {
@@ -1021,7 +963,7 @@ function photos_content(App $a)
return;
}
- $selname = $datum ? hex2bin($datum) : '';
+ $selname = Strings::isHex($datum) ? hex2bin($datum) : '';
$albumselect = '';
@@ -1088,6 +1030,10 @@ function photos_content(App $a)
// Display a single photo album
if ($datatype === 'album') {
+ // if $datum is not a valid hex, redirect to the default page
+ if (!Strings::isHex($datum)) {
+ $a->internalRedirect('photos/' . $a->data['user']['nickname']. '/album');
+ }
$album = hex2bin($datum);
$total = 0;
@@ -1121,6 +1067,24 @@ function photos_content(App $a)
$pager->getItemsPerPage()
);
+ if ($cmd === 'drop') {
+ $drop_url = $a->query_string;
+
+ $extra_inputs = [
+ ['name' => 'albumname', 'value' => $_POST['albumname']],
+ ];
+
+ return Renderer::replaceMacros(Renderer::getMarkupTemplate('confirm.tpl'), [
+ '$method' => 'post',
+ '$message' => L10n::t('Do you really want to delete this photo album and all its photos?'),
+ '$extra_inputs' => $extra_inputs,
+ '$confirm' => L10n::t('Delete Album'),
+ '$confirm_url' => $drop_url,
+ '$confirm_name' => 'dropalbum',
+ '$cancel' => L10n::t('Cancel'),
+ ]);
+ }
+
// edit album name
if ($cmd === 'edit') {
if (($album !== L10n::t('Profile Photos')) && ($album !== 'Contact Photos') && ($album !== L10n::t('Contact Photos'))) {
@@ -1142,6 +1106,7 @@ function photos_content(App $a)
} else {
if (($album !== L10n::t('Profile Photos')) && ($album !== 'Contact Photos') && ($album !== L10n::t('Contact Photos')) && $can_post) {
$edit = [L10n::t('Edit Album'), 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album) . '/edit'];
+ $drop = [L10n::t('Drop Album'), 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album) . '/drop'];
}
}
@@ -1187,6 +1152,7 @@ function photos_content(App $a)
'$upload' => [L10n::t('Upload New Photos'), 'photos/' . $a->data['user']['nickname'] . '/upload/' . bin2hex($album)],
'$order' => $order,
'$edit' => $edit,
+ '$drop' => $drop,
'$paginate' => $pager->renderFull($total),
]);
@@ -1204,12 +1170,7 @@ function photos_content(App $a)
);
if (!DBA::isResult($ph)) {
- $ph = q("SELECT `id` FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s'
- LIMIT 1",
- intval($owner_uid),
- DBA::escape($datum)
- );
- if (DBA::isResult($ph)) {
+ if (DBA::exists('photo', ['resource-id' => $datum, 'uid' => $owner_uid])) {
notice(L10n::t('Permission denied. Access to this item may be restricted.'));
} else {
notice(L10n::t('Photo not available') . EOL);
@@ -1217,6 +1178,20 @@ function photos_content(App $a)
return;
}
+ if ($cmd === 'drop') {
+ $drop_url = $a->query_string;
+
+ return Renderer::replaceMacros(Renderer::getMarkupTemplate('confirm.tpl'), [
+ '$method' => 'post',
+ '$message' => L10n::t('Do you really want to delete this photo?'),
+ '$extra_inputs' => [],
+ '$confirm' => L10n::t('Delete Photo'),
+ '$confirm_url' => $drop_url,
+ '$confirm_name' => 'delete',
+ '$cancel' => L10n::t('Cancel'),
+ ]);
+ }
+
$prevlink = '';
$nextlink = '';
@@ -1225,7 +1200,7 @@ function photos_content(App $a)
* The query leads to a really intense used index.
* By now we hide it if someone wants to.
*/
- if (!Config::get('system', 'no_count', false)) {
+ if ($cmd === 'view' && !Config::get('system', 'no_count', false)) {
$order_field = defaults($_GET, 'order', '');
if ($order_field === 'posted') {
@@ -1256,12 +1231,26 @@ function photos_content(App $a)
break;
}
}
- $edit_suffix = ((($cmd === 'edit') && $can_post) ? '/edit' : '');
+
if (!is_null($prv)) {
- $prevlink = 'photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] . $edit_suffix . ($order_field === 'posted' ? '?f=&order=posted' : '');
+ $prevlink = 'photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] . ($order_field === 'posted' ? '?f=&order=posted' : '');
}
if (!is_null($nxt)) {
- $nextlink = 'photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] . $edit_suffix . ($order_field === 'posted' ? '?f=&order=posted' : '');
+ $nextlink = 'photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] . ($order_field === 'posted' ? '?f=&order=posted' : '');
+ }
+
+ $tpl = Renderer::getMarkupTemplate('photo_edit_head.tpl');
+ $a->page['htmlhead'] .= Renderer::replaceMacros($tpl,[
+ '$prevlink' => $prevlink,
+ '$nextlink' => $nextlink
+ ]);
+
+ if ($prevlink) {
+ $prevlink = [$prevlink, ''];
+ }
+
+ if ($nextlink) {
+ $nextlink = [$nextlink, ''];
}
}
}
@@ -1283,33 +1272,23 @@ function photos_content(App $a)
$album_link = 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($ph[0]['album']);
$tools = null;
- $lock = null;
if ($can_post && ($ph[0]['uid'] == $owner_uid)) {
- $tools = [
- 'edit' => ['photos/' . $a->data['user']['nickname'] . '/image/' . $datum . (($cmd === 'edit') ? '' : '/edit'), (($cmd === 'edit') ? L10n::t('View photo') : L10n::t('Edit photo'))],
- 'profile'=>['profile_photo/use/'.$ph[0]['resource-id'], L10n::t('Use as profile photo')],
- ];
+ $tools = [];
+ if ($cmd === 'edit') {
+ $tools['view'] = ['photos/' . $a->data['user']['nickname'] . '/image/' . $datum, L10n::t('View photo')];
+ } else {
+ $tools['edit'] = ['photos/' . $a->data['user']['nickname'] . '/image/' . $datum . '/edit', L10n::t('Edit photo')];
+ $tools['delete'] = ['photos/' . $a->data['user']['nickname'] . '/image/' . $datum . '/drop', L10n::t('Delete photo')];
+ $tools['profile'] = ['profile_photo/use/'.$ph[0]['resource-id'], L10n::t('Use as profile photo')];
+ }
- // lock
- $lock = ((($ph[0]['uid'] == local_user()) && (strlen($ph[0]['allow_cid']) || strlen($ph[0]['allow_gid'])
- || strlen($ph[0]['deny_cid']) || strlen($ph[0]['deny_gid'])))
- ? L10n::t('Private Message')
- : Null);
-
-
- }
-
- if ($cmd === 'edit') {
- $tpl = Renderer::getMarkupTemplate('photo_edit_head.tpl');
- $a->page['htmlhead'] .= Renderer::replaceMacros($tpl,[
- '$prevlink' => $prevlink,
- '$nextlink' => $nextlink
- ]);
- }
-
- if ($prevlink) {
- $prevlink = [$prevlink, ''];
+ if (
+ $ph[0]['uid'] == local_user()
+ && (strlen($ph[0]['allow_cid']) || strlen($ph[0]['allow_gid']) || strlen($ph[0]['deny_cid']) || strlen($ph[0]['deny_gid']))
+ ) {
+ $tools['lock'] = L10n::t('Private Photo');
+ }
}
$photo = [
@@ -1322,11 +1301,6 @@ function photos_content(App $a)
'filename' => $hires['filename'],
];
- if ($nextlink) {
- $nextlink = [$nextlink, ''];
- }
-
-
// Do we have an item for this photo?
// FIXME! - replace following code to display the conversation with our normal
@@ -1431,7 +1405,7 @@ function photos_content(App $a)
$tpl = Renderer::getMarkupTemplate('photo_item.tpl');
$return_path = $a->cmd;
- if ($can_post || Security::canWriteToUserWall($owner_uid)) {
+ if ($cmd === 'view' && ($can_post || Security::canWriteToUserWall($owner_uid))) {
$like_tpl = Renderer::getMarkupTemplate('like_noshare.tpl');
$likebuttons = Renderer::replaceMacros($like_tpl, [
'$id' => $link_item['id'],
@@ -1510,7 +1484,7 @@ function photos_content(App $a)
continue;
}
- $profile_url = Contact::MagicLinkById($item['author-id']);
+ $profile_url = Contact::magicLinkbyId($item['author-id']);
if (strpos($profile_url, 'redir/') === 0) {
$sparkle = ' sparkle';
} else {
@@ -1537,7 +1511,7 @@ function photos_content(App $a)
'$title' => $title_e,
'$body' => $body_e,
'$ago' => Temporal::getRelativeDate($item['created']),
- '$indent' => (($item['parent'] != $item['item_id']) ? ' comment' : ''),
+ '$indent' => (($item['parent'] != $item['id']) ? ' comment' : ''),
'$drop' => $drop,
'$comment' => $comment
]);
@@ -1546,7 +1520,7 @@ function photos_content(App $a)
$comments .= Renderer::replaceMacros($cmnt_tpl, [
'$return_path' => '',
'$jsreload' => $return_path,
- '$id' => $item['item_id'],
+ '$id' => $item['id'],
'$parent' => $item['parent'],
'$profile_uid' => $owner_uid,
'$mylink' => $contact['url'],
@@ -1574,7 +1548,6 @@ function photos_content(App $a)
'$id' => $ph[0]['id'],
'$album' => [$album_link, $ph[0]['album']],
'$tools' => $tools,
- '$lock' => $lock,
'$photo' => $photo,
'$prevlink' => $prevlink,
'$nextlink' => $nextlink,
diff --git a/mod/phpinfo.php b/mod/phpinfo.php
deleted file mode 100644
index 3228d250b..000000000
--- a/mod/phpinfo.php
+++ /dev/null
@@ -1,14 +0,0 @@
-isFriendicaApp() || !$regularnotifications) {
- $notif['message'] = str_replace("{0}", $notif['name'], $notif['message']);
- }
-
$contact = Contact::getDetailsByURL($notif['url']);
if (isset($contact['micro'])) {
$notif['photo'] = ProxyUtils::proxifyUrl($contact['micro'], false, ProxyUtils::SIZE_MICRO);
diff --git a/mod/poco.php b/mod/poco.php
index 064e0e9a8..c288f6b63 100644
--- a/mod/poco.php
+++ b/mod/poco.php
@@ -22,7 +22,7 @@ function poco_init(App $a) {
$system_mode = false;
if (intval(Config::get('system', 'block_public')) || (Config::get('system', 'block_local_dir'))) {
- System::httpExit(401);
+ throw new \Friendica\Network\HTTPException\ForbiddenException();
}
if ($a->argc > 1) {
@@ -31,7 +31,7 @@ function poco_init(App $a) {
if (empty($nickname)) {
$c = q("SELECT * FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1");
if (!DBA::isResult($c)) {
- System::httpExit(401);
+ throw new \Friendica\Network\HTTPException\ForbiddenException();
}
$system_mode = true;
}
@@ -73,7 +73,7 @@ function poco_init(App $a) {
DBA::escape($nickname)
);
if (! DBA::isResult($users) || $users[0]['hidewall'] || $users[0]['hide-friends']) {
- System::httpExit(404);
+ throw new \Friendica\Network\HTTPException\NotFoundException();
}
$user = $users[0];
@@ -371,8 +371,9 @@ function poco_init(App $a) {
$ret['entry'][] = [];
}
} else {
- System::httpExit(500);
+ throw new \Friendica\Network\HTTPException\InternalServerErrorException();
}
+
Logger::log("End of poco", Logger::DEBUG);
if ($format === 'xml') {
@@ -385,6 +386,6 @@ function poco_init(App $a) {
echo json_encode($ret);
exit();
} else {
- System::httpExit(500);
+ throw new \Friendica\Network\HTTPException\InternalServerErrorException();
}
}
diff --git a/mod/poke.php b/mod/poke.php
index b8a1ba7bf..e8ddf86cd 100644
--- a/mod/poke.php
+++ b/mod/poke.php
@@ -154,15 +154,11 @@ function poke_content(App $a)
$name = $contact['name'];
$id = $contact['id'];
- $base = System::baseUrl();
-
$head_tpl = Renderer::getMarkupTemplate('poke_head.tpl');
$a->page['htmlhead'] .= Renderer::replaceMacros($head_tpl,[
'$baseurl' => System::baseUrl(true),
- '$base' => $base
]);
-
$parent = (!empty($_GET['parent']) ? intval($_GET['parent']) : '0');
diff --git a/mod/pretheme.php b/mod/pretheme.php
deleted file mode 100644
index 14d1f2b9e..000000000
--- a/mod/pretheme.php
+++ /dev/null
@@ -1,25 +0,0 @@
- Theme::getScreenshot($theme), 'desc' => $desc, 'version' => $version, 'credits' => $credits]);
- }
-
- exit();
-}
diff --git a/mod/probe.php b/mod/probe.php
deleted file mode 100644
index e120ce172..000000000
--- a/mod/probe.php
+++ /dev/null
@@ -1,37 +0,0 @@
- L10n::t("Public access denied."),
- "description" => L10n::t("Only logged in users are permitted to perform a probing.")]);
- exit();
- }
-
- $o = 'Probe Diagnostic
';
-
- $o .= '';
-
- $o .= '
';
-
- if (!empty($_GET['addr'])) {
- $addr = trim($_GET['addr']);
- $res = Probe::uri($addr, "", 0, false);
- $o .= '';
- $o .= str_replace("\n", '
';
- }
- $o .= '
', print_r($res, true));
- $o .= '
';
- }
- $s .= '
Use an application on a mobile device to get two-factor authentication codes when prompted on login.
'), + '$has_secret' => $has_secret, + '$verified' => $verified, + + '$auth_app_label' => L10n::t('Authenticator app'), + '$app_status' => $has_secret ? $verified ? L10n::t('Configured') : L10n::t('Not Configured') : L10n::t('Disabled'), + '$not_configured_message' => L10n::t('You haven\'t finished configuring your authenticator app.
'), + '$configured_message' => L10n::t('Your authenticator app is correctly configured.
'), + + '$recovery_codes_title' => L10n::t('Recovery codes'), + '$recovery_codes_remaining' => L10n::t('Remaining valid codes'), + '$recovery_codes_count' => TwoFactorRecoveryCode::countValidForUser(local_user()), + '$recovery_codes_message' => L10n::t('These one-use codes can replace an authenticator app code in case you have lost access to it.
'), + + '$action_title' => L10n::t('Actions'), + '$password' => ['password', L10n::t('Current password:'), '', L10n::t('You need to provide your current password to change two-factor authentication settings.'), 'required', 'autofocus'], + '$enable_label' => L10n::t('Enable two-factor authentication'), + '$disable_label' => L10n::t('Disable two-factor authentication'), + '$recovery_codes_label' => L10n::t('Show recovery codes'), + '$configure_label' => L10n::t('Finish app configuration'), + ]); + } +} diff --git a/src/Module/Settings/TwoFactor/Recovery.php b/src/Module/Settings/TwoFactor/Recovery.php new file mode 100644 index 000000000..a2d08cda8 --- /dev/null +++ b/src/Module/Settings/TwoFactor/Recovery.php @@ -0,0 +1,86 @@ +internalRedirect('settings/2fa'); + } + + if (!self::checkFormSecurityToken('settings_2fa_password', 't')) { + notice(L10n::t('Please enter your password to access this page.')); + self::getApp()->internalRedirect('settings/2fa'); + } + } + + public static function post() + { + if (!local_user()) { + return; + } + + if (!empty($_POST['action'])) { + self::checkFormSecurityTokenRedirectOnError('settings/2fa/recovery', 'settings_2fa_recovery'); + + if ($_POST['action'] == 'regenerate') { + TwoFactorRecoveryCode::regenerateForUser(local_user()); + notice(L10n::t('New recovery codes successfully generated.')); + self::getApp()->internalRedirect('settings/2fa/recovery?t=' . self::getFormSecurityToken('settings_2fa_password')); + } + } + } + + public static function content() + { + if (!local_user()) { + return Login::form('settings/2fa/recovery'); + } + + parent::content(); + + if (!TwoFactorRecoveryCode::countValidForUser(local_user())) { + TwoFactorRecoveryCode::generateForUser(local_user()); + } + + $recoveryCodes = TwoFactorRecoveryCode::getListForUser(local_user()); + + $verified = PConfig::get(local_user(), '2fa', 'verified'); + + return Renderer::replaceMacros(Renderer::getMarkupTemplate('settings/twofactor/recovery.tpl'), [ + '$form_security_token' => self::getFormSecurityToken('settings_2fa_recovery'), + '$password_security_token' => self::getFormSecurityToken('settings_2fa_password'), + + '$title' => L10n::t('Two-factor recovery codes'), + '$help_label' => L10n::t('Help'), + '$message' => L10n::t('Recovery codes can be used to access your account in the event you lose access to your device and cannot receive two-factor authentication codes.
Put these in a safe spot! If you lose your device and don’t have the recovery codes you will lose access to your account.
'), + '$recovery_codes' => $recoveryCodes, + '$regenerate_message' => L10n::t('When you generate new recovery codes, you must copy the new codes. Your old codes won’t work anymore.'), + '$regenerate_label' => L10n::t('Generate new recovery codes'), + '$verified' => $verified, + '$verify_label' => L10n::t('Next: Verification'), + ]); + } +} diff --git a/src/Module/Settings/TwoFactor/Verify.php b/src/Module/Settings/TwoFactor/Verify.php new file mode 100644 index 000000000..caed464ec --- /dev/null +++ b/src/Module/Settings/TwoFactor/Verify.php @@ -0,0 +1,130 @@ +internalRedirect('settings/2fa'); + } + + if (!self::checkFormSecurityToken('settings_2fa_password', 't')) { + notice(L10n::t('Please enter your password to access this page.')); + self::getApp()->internalRedirect('settings/2fa'); + } + } + + public static function post() + { + if (!local_user()) { + return; + } + + if (defaults($_POST, 'action', null) == 'verify') { + self::checkFormSecurityTokenRedirectOnError('settings/2fa/verify', 'settings_2fa_verify'); + + $google2fa = new Google2FA(); + + $valid = $google2fa->verifyKey(PConfig::get(local_user(), '2fa', 'secret'), defaults($_POST, 'verify_code', '')); + + if ($valid) { + PConfig::set(local_user(), '2fa', 'verified', true); + Session::set('2fa', true); + + notice(L10n::t('Two-factor authentication successfully activated.')); + + self::getApp()->internalRedirect('settings/2fa'); + } else { + notice(L10n::t('Invalid code, please retry.')); + } + } + } + + public static function content() + { + if (!local_user()) { + return Login::form('settings/2fa/verify'); + } + + parent::content(); + + $company = 'Friendica'; + $holder = Session::get('my_address'); + $secret = PConfig::get(local_user(), '2fa', 'secret'); + + $otpauthUrl = (new Google2FA())->getQRCodeUrl($company, $holder, $secret); + + $renderer = (new \BaconQrCode\Renderer\Image\Svg()) + ->setHeight(256) + ->setWidth(256); + + $writer = new Writer($renderer); + + $qrcode_image = str_replace('', '', $writer->writeString($otpauthUrl)); + + $shortOtpauthUrl = explode('?', $otpauthUrl)[0]; + + $manual_message = L10n::t('Or you can submit the authentication settings manually:
+Please scan this QR Code with your authenticator app and submit the provided code.
'), + '$qrcode_image' => $qrcode_image, + '$qrcode_url_message' => L10n::t('Or you can open the following URL in your mobile devicde:
', $otpauthUrl, $shortOtpauthUrl), + '$manual_message' => $manual_message, + '$company' => $company, + '$holder' => $holder, + '$secret' => $secret, + + '$verify_code' => ['verify_code', L10n::t('Please enter a code from your authentication app'), '', '', 'required', 'autofocus placeholder="000000"'], + '$verify_label' => L10n::t('Verify code and enable two-factor authentication'), + ]); + } +} diff --git a/src/Module/Smilies.php b/src/Module/Smilies.php new file mode 100644 index 000000000..422f37d3e --- /dev/null +++ b/src/Module/Smilies.php @@ -0,0 +1,40 @@ +argv[1]) && ($app->argv[1] === "json")) { + $smilies = Content\Smilies::getList(); + $results = []; + for ($i = 0; $i < count($smilies['texts']); $i++) { + $results[] = ['text' => $smilies['texts'][$i], 'icon' => $smilies['icons'][$i]]; + } + System::jsonExit($results); + } + } + + public static function content() + { + $smilies = Content\Smilies::getList(); + $count = count(defaults($smilies, 'texts', [])); + + $tpl = Renderer::getMarkupTemplate('smilies.tpl'); + return Renderer::replaceMacros($tpl, [ + '$count' => $count, + '$smilies' => $smilies, + ]); + } +} diff --git a/src/Module/Special/HTTPException.php b/src/Module/Special/HTTPException.php new file mode 100644 index 000000000..6446ec38c --- /dev/null +++ b/src/Module/Special/HTTPException.php @@ -0,0 +1,91 @@ + ..., '$description' => ...] + */ + private static function getVars(\Friendica\Network\HTTPException $e) + { + $message = $e->getMessage(); + + $titles = [ + 200 => 'OK', + 400 => L10n::t('Bad Request'), + 401 => L10n::t('Unauthorized'), + 403 => L10n::t('Forbidden'), + 404 => L10n::t('Not Found'), + 500 => L10n::t('Internal Server Error'), + 503 => L10n::t('Service Unavailable'), + ]; + $title = defaults($titles, $e->getCode(), 'Error ' . $e->getCode()); + + if (empty($message)) { + // Explanations are taken from https://en.wikipedia.org/wiki/List_of_HTTP_status_codes + $explanation = [ + 400 => L10n::t('The server cannot or will not process the request due to an apparent client error.'), + 401 => L10n::t('Authentication is required and has failed or has not yet been provided.'), + 403 => L10n::t('The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource, or may need an account.'), + 404 => L10n::t('The requested resource could not be found but may be available in the future.'), + 500 => L10n::t('An unexpected condition was encountered and no more specific message is suitable.'), + 503 => L10n::t('The server is currently unavailable (because it is overloaded or down for maintenance). Please try again later.'), + ]; + + $message = defaults($explanation, $e->getCode(), ''); + } + + return ['$title' => $title, '$message' => $message, '$back' => L10n::t('Go back')]; + } + + /** + * Displays a bare message page with no theming at all. + * + * @param \Friendica\Network\HTTPException $e + * @throws \Exception + */ + public static function rawContent(\Friendica\Network\HTTPException $e) + { + $content = ''; + + if ($e->getCode() >= 400) { + $tpl = Renderer::getMarkupTemplate('http_status.tpl'); + $content = Renderer::replaceMacros($tpl, self::getVars($e)); + } + + System::httpExit($e->getCode(), $e->httpdesc, $content); + } + + /** + * Returns a content string that can be integrated in the current theme. + * + * @param \Friendica\Network\HTTPException $e + * @return string + * @throws \Exception + */ + public static function content(\Friendica\Network\HTTPException $e) + { + header($_SERVER["SERVER_PROTOCOL"] . ' ' . $e->getCode() . ' ' . $e->httpdesc); + + $tpl = Renderer::getMarkupTemplate('exception.tpl'); + + return Renderer::replaceMacros($tpl, self::getVars($e)); + } +} diff --git a/src/Module/Starred.php b/src/Module/Starred.php new file mode 100644 index 000000000..df7da4099 --- /dev/null +++ b/src/Module/Starred.php @@ -0,0 +1,60 @@ +argc > 1) { + $itemId = intval($a->argv[1]); + } + + if (!$itemId) { + exit(); + } + + $item = Item::selectFirstForUser(local_user(), ['starred'], ['uid' => local_user(), 'id' => $itemId]); + if (empty($item)) { + exit(); + } + + if (!intval($item['starred'])) { + $starred = 1; + } + + Item::update(['starred' => $starred], ['id' => $itemId]); + + // See if we've been passed a return path to redirect to + $returnPath = defaults($_REQUEST, 'return', ''); + if ($returnPath) { + $rand = '_=' . time(); + if (strpos($returnPath, '?')) { + $rand = "&$rand"; + } else { + $rand = "?$rand"; + } + + $a->internalRedirect($returnPath . $rand); + } + + // the json doesn't really matter, it will either be 0 or 1 + echo json_encode($starred); + exit(); + } +} diff --git a/src/Module/Statistics.php b/src/Module/Statistics.php new file mode 100644 index 000000000..3e64828e7 --- /dev/null +++ b/src/Module/Statistics.php @@ -0,0 +1,60 @@ +getConfig(); + + if (!$config->get("system", "nodeinfo")) { + throw new \Friendica\Network\HTTPException\NotFoundException(); + } + } + + public static function rawContent() + { + $config = self::getApp()->getConfig(); + $logger = self::getApp()->getLogger(); + + $registration_open = + intval($config->get('config', 'register_policy')) !== Register::CLOSED + && !$config->get('config', 'invitation_only'); + + /// @todo mark the "service" addons and load them dynamically here + $services = [ + 'appnet' => Addon::isEnabled('appnet'), + 'buffer' => Addon::isEnabled('buffer'), + 'dreamwidth' => Addon::isEnabled('dreamwidth'), + 'gnusocial' => Addon::isEnabled('gnusocial'), + 'libertree' => Addon::isEnabled('libertree'), + 'livejournal' => Addon::isEnabled('livejournal'), + 'pumpio' => Addon::isEnabled('pumpio'), + 'twitter' => Addon::isEnabled('twitter'), + 'tumblr' => Addon::isEnabled('tumblr'), + 'wordpress' => Addon::isEnabled('wordpress'), + ]; + + $statistics = array_merge([ + 'name' => $config->get('config', 'sitename'), + 'network' => FRIENDICA_PLATFORM, + 'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION, + 'registrations_open' => $registration_open, + 'total_users' => $config->get('nodeinfo', 'total_users'), + 'active_users_halfyear' => $config->get('nodeinfo', 'active_users_halfyear'), + 'active_users_monthly' => $config->get('nodeinfo', 'active_users_monthly'), + 'local_posts' => $config->get('nodeinfo', 'local_posts'), + 'services' => $services, + ], $services); + + header("Content-Type: application/json"); + echo json_encode($statistics, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + $logger->debug("statistics.", ['statistics' => $statistics]); + exit(); + } +} diff --git a/src/Module/Theme.php b/src/Module/Theme.php new file mode 100644 index 000000000..0540267af --- /dev/null +++ b/src/Module/Theme.php @@ -0,0 +1,32 @@ +argc == 4) { + $theme = $a->argv[2]; + $theme = Strings::sanitizeFilePathItem($theme); + + // set the path for later use in the theme styles + $THEMEPATH = "view/theme/$theme"; + if (file_exists("view/theme/$theme/style.php")) { + require_once("view/theme/$theme/style.php"); + } + } + + exit(); + } +} diff --git a/src/Module/ThemeDetails.php b/src/Module/ThemeDetails.php new file mode 100644 index 000000000..7b53d1cfd --- /dev/null +++ b/src/Module/ThemeDetails.php @@ -0,0 +1,33 @@ + Theme::getScreenshot($theme), + 'desc' => $description, + 'version' => $version, + 'credits' => $credits, + ]); + } + exit(); + } +} diff --git a/src/Module/ToggleMobile.php b/src/Module/ToggleMobile.php new file mode 100644 index 000000000..9788c0b5d --- /dev/null +++ b/src/Module/ToggleMobile.php @@ -0,0 +1,30 @@ +redirect($address); + } +} diff --git a/src/Module/TwoFactor/Recovery.php b/src/Module/TwoFactor/Recovery.php new file mode 100644 index 000000000..4952d220b --- /dev/null +++ b/src/Module/TwoFactor/Recovery.php @@ -0,0 +1,72 @@ +user, true, true); + } else { + notice(L10n::t('Invalid code, please retry.')); + } + } + } + + public static function content() + { + if (!local_user()) { + self::getApp()->internalRedirect(); + } + + // Already authenticated with 2FA token + if (Session::get('2fa')) { + self::getApp()->internalRedirect(); + } + + return Renderer::replaceMacros(Renderer::getMarkupTemplate('twofactor/recovery.tpl'), [ + '$form_security_token' => self::getFormSecurityToken('twofactor_recovery'), + + '$title' => L10n::t('Two-factor recovery'), + '$message' => L10n::t('You can enter one of your one-time recovery codes in case you lost access to your mobile device.
'), + '$recovery_message' => L10n::t('Don’t have your phone? Enter a two-factor recovery code', '2fa/recovery'), + '$recovery_code' => ['recovery_code', L10n::t('Please enter a recovery code'), '', '', '', 'placeholder="000000-000000"'], + '$recovery_label' => L10n::t('Submit recovery code and complete login'), + ]); + } +} diff --git a/src/Module/TwoFactor/Verify.php b/src/Module/TwoFactor/Verify.php new file mode 100644 index 000000000..abe6077c6 --- /dev/null +++ b/src/Module/TwoFactor/Verify.php @@ -0,0 +1,67 @@ +verifyKey(PConfig::get(local_user(), '2fa', 'secret'), $code); + + // The same code can't be used twice even if it's valid + if ($valid && Session::get('2fa') !== $code) { + Session::set('2fa', $code); + + // Resume normal login workflow + Session::setAuthenticatedForUser($a, $a->user, true, true); + } else { + notice(L10n::t('Invalid code, please retry.')); + } + } + } + + public static function content() + { + if (!local_user()) { + self::getApp()->internalRedirect(); + } + + // Already authenticated with 2FA token + if (Session::get('2fa')) { + self::getApp()->internalRedirect(); + } + + return Renderer::replaceMacros(Renderer::getMarkupTemplate('twofactor/verify.tpl'), [ + '$form_security_token' => self::getFormSecurityToken('twofactor_verify'), + + '$title' => L10n::t('Two-factor authentication'), + '$message' => L10n::t('Open the two-factor authentication app on your device to get an authentication code and verify your identity.
'), + '$recovery_message' => L10n::t('Don’t have your phone? Enter a two-factor recovery code', '2fa/recovery'), + '$verify_code' => ['verify_code', L10n::t('Please enter a code from your authentication app'), '', '', 'required', 'autofocus placeholder="000000"'], + '$verify_label' => L10n::t('Verify code and complete login'), + ]); + } +} diff --git a/src/Module/Welcome.php b/src/Module/Welcome.php new file mode 100644 index 000000000..9e1eace9b --- /dev/null +++ b/src/Module/Welcome.php @@ -0,0 +1,69 @@ +getConfig(); + + $mail_disabled = ((function_exists('imap_open') && + (!$config->get('system', 'imap_disabled')))); + $newuser_private = $config->get('system', 'newuser_private'); + + $tpl = Renderer::getMarkupTemplate('welcome.tpl'); + + return Renderer::replaceMacros($tpl, [ + '$welcome' => L10n::t('Welcome to Friendica'), + '$checklist' => L10n::t('New Member Checklist'), + '$description' => L10n::t('We would like to offer some tips and links to help make your experience enjoyable. Click any item to visit the relevant page. A link to this page will be visible from your home page for two weeks after your initial registration and then will quietly disappear.'), + + '$started' => L10n::t('Getting Started'), + '$quickstart_link' => L10n::t('Friendica Walk-Through'), + '$quickstart_txt' => L10n::t('On your Quick Start page - find a brief introduction to your profile and network tabs, make some new connections, and find some groups to join.'), + + '$settings' => L10n::t('Settings'), + '$settings_link' => L10n::t('Go to Your Settings'), + '$settings_txt' => L10n::t('On your Settings page - change your initial password. Also make a note of your Identity Address. This looks just like an email address - and will be useful in making friends on the free social web.'), + '$settings_other' => L10n::t('Review the other settings, particularly the privacy settings. An unpublished directory listing is like having an unlisted phone number. In general, you should probably publish your listing - unless all of your friends and potential friends know exactly how to find you.'), + + '$profile' => L10n::t('Profile'), + '$profile_photo_link' => L10n::t('Upload Profile Photo'), + '$profile_photo_txt' => L10n::t('Upload a profile photo if you have not done so already. Studies have shown that people with real photos of themselves are ten times more likely to make friends than people who do not.'), + '$profiles_link' => L10n::t('Edit Your Profile'), + '$profiles_txt' => L10n::t('Edit your default profile to your liking. Review the settings for hiding your list of friends and hiding the profile from unknown visitors.'), + '$profiles_keywords_link' => L10n::t('Profile Keywords'), + '$profiles_keywords_txt' => L10n::t('Set some public keywords for your default profile which describe your interests. We may be able to find other people with similar interests and suggest friendships.'), + + '$connecting' => L10n::t('Connecting'), + '$mail_disabled' => $mail_disabled, + '$import_mail_link' => L10n::t('Importing Emails'), + '$import_mail_txt' => L10n::t('Enter your email access information on your Connector Settings page if you wish to import and interact with friends or mailing lists from your email INBOX'), + '$contact_link' => L10n::t('Go to Your Contacts Page'), + '$contact_txt' => L10n::t('Your Contacts page is your gateway to managing friendships and connecting with friends on other networks. Typically you enter their address or site URL in the Add New Contact dialog.'), + '$directory_link' => L10n::t('Go to Your Site\'s Directory'), + '$directory_txt' => L10n::t('The Directory page lets you find other people in this network or other federated sites. Look for a Connect or Follow link on their profile page. Provide your own Identity Address if requested.'), + '$finding_link' => L10n::t('Finding New People'), + '$finding_txt' => L10n::t('On the side panel of the Contacts page are several tools to find new friends. We can match people by interest, look up people by name or interest, and provide suggestions based on network relationships. On a brand new site, friend suggestions will usually begin to be populated within 24 hours.'), + + '$groups' => L10n::t('Groups'), + '$group_contact_link' => L10n::t('Group Your Contacts'), + '$group_contact_txt' => L10n::t('Once you have made some friends, organize them into private conversation groups from the sidebar of your Contacts page and then you can interact with each group privately on your Network page.'), + '$newuser_private' => $newuser_private, + '$private_link' => L10n::t('Why Aren\'t My Posts Public?'), + '$private_txt' => L10n::t('Friendica respects your privacy. By default, your posts will only show up to people you\'ve added as friends. For more information, see the help section from the link above.'), + + '$help' => L10n::t('Getting Help'), + '$help_link' => L10n::t('Go to the Help Section'), + '$help_txt' => L10n::t('Our help pages may be consulted for detail on other program features and resources.'), + ]); + } +} diff --git a/src/Module/WellKnown/HostMeta.php b/src/Module/WellKnown/HostMeta.php new file mode 100644 index 000000000..fd04467f7 --- /dev/null +++ b/src/Module/WellKnown/HostMeta.php @@ -0,0 +1,40 @@ +getConfig(); + + header('Content-type: text/xml'); + + if (!$config->get('system', 'site_pubkey', false)) { + $res = Crypto::newKeypair(1024); + + $config->set('system', 'site_prvkey', $res['prvkey']); + $config->set('system', 'site_pubkey', $res['pubkey']); + } + + $tpl = Renderer::getMarkupTemplate('xrd_host.tpl'); + echo Renderer::replaceMacros($tpl, [ + '$zhost' => $app->getHostName(), + '$zroot' => $app->getBaseURL(), + '$domain' => $app->getBaseURL(), + '$bigkey' => Salmon::salmonKey($config->get('system', 'site_pubkey')) + ]); + + exit(); + } +} diff --git a/src/Module/WellKnown/XSocialRelay.php b/src/Module/WellKnown/XSocialRelay.php new file mode 100644 index 000000000..a1bbeb78a --- /dev/null +++ b/src/Module/WellKnown/XSocialRelay.php @@ -0,0 +1,64 @@ +getConfig(); + + $subscribe = $config->get('system', 'relay_subscribe', false); + + if ($subscribe) { + $scope = $config->get('system', 'relay_scope', SR_SCOPE_ALL); + } else { + $scope = SR_SCOPE_NONE; + } + + $systemTags = []; + $userTags = []; + + if ($scope == SR_SCOPE_TAGS) { + $server_tags = $config->get('system', 'relay_server_tags'); + $tagitems = explode(',', $server_tags); + + /// @todo Check if it was better to use "strtolower" on the tags + foreach ($tagitems AS $tag) { + $systemTags[] = trim($tag, '# '); + } + + if ($config->get('system', 'relay_user_tags')) { + $userTags = Search::getUserTags(); + } + } + + $tagList = array_unique(array_merge($systemTags, $userTags)); + + $relay = [ + 'subscribe' => $subscribe, + 'scope' => $scope, + 'tags' => $tagList, + 'protocols' => [ + 'diaspora' => [ + 'receive' => $app->getBaseURL() . '/receive/public' + ], + 'dfrn' => [ + 'receive' => $app->getBaseURL() . '/dfrn_notify' + ] + ] + ]; + + header('Content-type: application/json; charset=utf-8'); + echo json_encode($relay, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + exit; + } +} diff --git a/src/Module/Xrd.php b/src/Module/Xrd.php new file mode 100644 index 000000000..ae020d355 --- /dev/null +++ b/src/Module/Xrd.php @@ -0,0 +1,199 @@ +argv[0] == 'xrd') { + if (empty($_GET['uri'])) { + return; + } + + $uri = urldecode(Strings::escapeTags(trim($_GET['uri']))); + if (defaults($_SERVER, 'HTTP_ACCEPT', '') == 'application/jrd+json') { + $mode = 'json'; + } else { + $mode = 'xml'; + } + } else { + if (empty($_GET['resource'])) { + return; + } + + $uri = urldecode(Strings::escapeTags(trim($_GET['resource']))); + if (defaults($_SERVER, 'HTTP_ACCEPT', '') == 'application/xrd+xml') { + $mode = 'xml'; + } else { + $mode = 'json'; + } + } + + if (substr($uri, 0, 4) === 'http') { + $name = ltrim(basename($uri), '~'); + } else { + $local = str_replace('acct:', '', $uri); + if (substr($local, 0, 2) == '//') { + $local = substr($local, 2); + } + + $name = substr($local, 0, strpos($local, '@')); + } + + $user = User::getByNickname($name); + + if (empty($user)) { + throw new \Friendica\Network\HTTPException\NotFoundException(); + } + + $owner = User::getOwnerDataById($user['uid']); + + $alias = str_replace('/profile/', '/~', $owner['url']); + + $avatar = Photo::selectFirst(['type'], ['uid' => $owner['uid'], 'profile' => true]); + + if (!DBA::isResult($avatar)) { + $avatar = ['type' => 'image/jpeg']; + } + + if ($mode == 'xml') { + self::printXML($alias, $app->getBaseURL(), $user, $owner, $avatar); + } else { + self::printJSON($alias, $app->getBaseURL(), $owner, $avatar); + } + } + + private static function printJSON($alias, $baseURL, $owner, $avatar) + { + $salmon_key = Salmon::salmonKey($owner['spubkey']); + + header('Access-Control-Allow-Origin: *'); + header('Content-type: application/json; charset=utf-8'); + + $json = [ + 'subject' => 'acct:' . $owner['addr'], + 'aliases' => [ + $alias, + $owner['url'], + ], + 'links' => [ + [ + 'rel' => NAMESPACE_DFRN, + 'href' => $owner['url'], + ], + [ + 'rel' => NAMESPACE_FEED, + 'type' => 'application/atom+xml', + 'href' => $owner['poll'], + ], + [ + 'rel' => 'http://webfinger.net/rel/profile-page', + 'type' => 'text/html', + 'href' => $owner['url'], + ], + [ + 'rel' => 'self', + 'type' => 'application/activity+json', + 'href' => $owner['url'], + ], + [ + 'rel' => 'http://microformats.org/profile/hcard', + 'type' => 'text/html', + 'href' => $baseURL . '/hcard/' . $owner['nickname'], + ], + [ + 'rel' => NAMESPACE_POCO, + 'href' => $owner['poco'], + ], + [ + 'rel' => 'http://webfinger.net/rel/avatar', + 'type' => $avatar['type'], + 'href' => $owner['photo'], + ], + [ + 'rel' => 'http://joindiaspora.com/seed_location', + 'type' => 'text/html', + 'href' => $baseURL, + ], + [ + 'rel' => 'salmon', + 'href' => $baseURL . '/salmon/' . $owner['nickname'], + ], + [ + 'rel' => 'http://salmon-protocol.org/ns/salmon-replies', + 'href' => $baseURL . '/salmon/' . $owner['nickname'], + ], + [ + 'rel' => 'http://salmon-protocol.org/ns/salmon-mention', + 'href' => $baseURL . '/salmon/' . $owner['nickname'] . '/mention', + ], + [ + 'rel' => 'http://ostatus.org/schema/1.0/subscribe', + 'template' => $baseURL . '/follow?url={uri}', + ], + [ + 'rel' => 'magic-public-key', + 'href' => 'data:application/magic-public-key,' . $salmon_key, + ], + [ + 'rel' => 'http://purl.org/openwebauth/v1', + 'type' => 'application/x-zot+json', + 'href' => $baseURL . '/owa', + ], + ], + ]; + + echo json_encode($json); + exit(); + } + + private static function printXML($alias, $baseURL, $user, $owner, $avatar) + { + $salmon_key = Salmon::salmonKey($owner['spubkey']); + + header('Access-Control-Allow-Origin: *'); + header('Content-type: text/xml'); + + $tpl = Renderer::getMarkupTemplate('xrd_person.tpl'); + + $o = Renderer::replaceMacros($tpl, [ + '$nick' => $owner['nickname'], + '$accturi' => 'acct:' . $owner['addr'], + '$alias' => $alias, + '$profile_url' => $owner['url'], + '$hcard_url' => $baseURL . '/hcard/' . $owner['nickname'], + '$atom' => $owner['poll'], + '$poco_url' => $owner['poco'], + '$photo' => $owner['photo'], + '$type' => $avatar['type'], + '$salmon' => $baseURL . '/salmon/' . $owner['nickname'], + '$salmen' => $baseURL . '/salmon/' . $owner['nickname'] . '/mention', + '$subscribe' => $baseURL . '/follow?url={uri}', + '$openwebauth' => $baseURL . '/owa', + '$modexp' => 'data:application/magic-public-key,' . $salmon_key + ]); + + $arr = ['user' => $user, 'xml' => $o]; + Hook::callAll('personal_xrd', $arr); + + echo $arr['xml']; + exit(); + } +} diff --git a/src/Network/HTTPException.php b/src/Network/HTTPException.php index b9bad457d..89c447b71 100644 --- a/src/Network/HTTPException.php +++ b/src/Network/HTTPException.php @@ -3,7 +3,7 @@ /** * Throwable exceptions to return HTTP status code * - * This list of Exception has be extracted from + * This list of Exception has been extracted from * here http://racksburg.com/choosing-an-http-status-code/ */ @@ -11,17 +11,17 @@ namespace Friendica\Network; use Exception; -class HTTPException extends Exception +abstract class HTTPException extends Exception { - var $httpcode = 200; - var $httpdesc = ""; + public $httpdesc = ''; - public function __construct($message = '', $code = 0, Exception $previous = null) + public function __construct($message = '', Exception $previous = null) { - if ($this->httpdesc == '') { + parent::__construct($message, $this->code, $previous); + + if (empty($this->httpdesc)) { $classname = str_replace('Exception', '', str_replace('Friendica\Network\HTTPException\\', '', get_class($this))); $this->httpdesc = preg_replace("|([a-z])([A-Z])|",'$1 $2', $classname); } - parent::__construct($message, $code, $previous); } } diff --git a/src/Network/HTTPException/ServiceUnavaiableException.php b/src/Network/HTTPException/AcceptedException.php similarity index 54% rename from src/Network/HTTPException/ServiceUnavaiableException.php rename to src/Network/HTTPException/AcceptedException.php index 9270bc450..b8c843ec5 100644 --- a/src/Network/HTTPException/ServiceUnavaiableException.php +++ b/src/Network/HTTPException/AcceptedException.php @@ -4,7 +4,7 @@ namespace Friendica\Network\HTTPException; use Friendica\Network\HTTPException; -class ServiceUnavaiableException extends HTTPException +class AcceptedException extends HTTPException { - var $httpcode = 503; + protected $code = 202; } diff --git a/src/Network/HTTPException/BadGatewayException.php b/src/Network/HTTPException/BadGatewayException.php index 6fc80c909..c23d7e5a3 100644 --- a/src/Network/HTTPException/BadGatewayException.php +++ b/src/Network/HTTPException/BadGatewayException.php @@ -6,5 +6,5 @@ use Friendica\Network\HTTPException; class BadGatewayException extends HTTPException { - var $httpcode = 502; + protected $code = 502; } diff --git a/src/Network/HTTPException/BadRequestException.php b/src/Network/HTTPException/BadRequestException.php index dd1dc191b..9f25c61a8 100644 --- a/src/Network/HTTPException/BadRequestException.php +++ b/src/Network/HTTPException/BadRequestException.php @@ -6,5 +6,5 @@ use Friendica\Network\HTTPException; class BadRequestException extends HTTPException { - var $httpcode = 400; + protected $code = 400; } diff --git a/src/Network/HTTPException/ConflictException.php b/src/Network/HTTPException/ConflictException.php index 1d5053c4b..5d63922c9 100644 --- a/src/Network/HTTPException/ConflictException.php +++ b/src/Network/HTTPException/ConflictException.php @@ -6,5 +6,5 @@ use Friendica\Network\HTTPException; class ConflictException extends HTTPException { - var $httpcode = 409; + protected $code = 409; } diff --git a/src/Network/HTTPException/ExpectationFailedException.php b/src/Network/HTTPException/ExpectationFailedException.php index fe932a9f0..7c928f34f 100644 --- a/src/Network/HTTPException/ExpectationFailedException.php +++ b/src/Network/HTTPException/ExpectationFailedException.php @@ -6,5 +6,5 @@ use Friendica\Network\HTTPException; class ExpectationFailedException extends HTTPException { - var $httpcode = 417; + protected $code = 417; } diff --git a/src/Network/HTTPException/ForbiddenException.php b/src/Network/HTTPException/ForbiddenException.php index 66a063e13..f83fe524b 100644 --- a/src/Network/HTTPException/ForbiddenException.php +++ b/src/Network/HTTPException/ForbiddenException.php @@ -6,5 +6,5 @@ use Friendica\Network\HTTPException; class ForbiddenException extends HTTPException { - var $httpcode = 403; -} \ No newline at end of file + protected $code = 403; +} diff --git a/src/Network/HTTPException/GatewayTimeoutException.php b/src/Network/HTTPException/GatewayTimeoutException.php index bcd98080e..2e5164850 100644 --- a/src/Network/HTTPException/GatewayTimeoutException.php +++ b/src/Network/HTTPException/GatewayTimeoutException.php @@ -6,5 +6,5 @@ use Friendica\Network\HTTPException; class GatewayTimeoutException extends HTTPException { - var $httpcode = 504; + protected $code = 504; } diff --git a/src/Network/HTTPException/GoneException.php b/src/Network/HTTPException/GoneException.php index 42e19e89d..0f665206f 100644 --- a/src/Network/HTTPException/GoneException.php +++ b/src/Network/HTTPException/GoneException.php @@ -6,5 +6,5 @@ use Friendica\Network\HTTPException; class GoneException extends HTTPException { - var $httpcode = 410; + protected $code = 410; } diff --git a/src/Network/HTTPException/ImATeapotException.php b/src/Network/HTTPException/ImATeapotException.php index f4eea4077..89a28bebd 100644 --- a/src/Network/HTTPException/ImATeapotException.php +++ b/src/Network/HTTPException/ImATeapotException.php @@ -6,6 +6,6 @@ use Friendica\Network\HTTPException; class ImATeapotException extends HTTPException { - var $httpcode = 418; + protected $code = 418; var $httpdesc = "I'm A Teapot"; } diff --git a/src/Network/HTTPException/InternalServerErrorException.php b/src/Network/HTTPException/InternalServerErrorException.php index c049ef25b..dca1894fb 100644 --- a/src/Network/HTTPException/InternalServerErrorException.php +++ b/src/Network/HTTPException/InternalServerErrorException.php @@ -6,5 +6,5 @@ use Friendica\Network\HTTPException; class InternalServerErrorException extends HTTPException { - var $httpcode = 500; + protected $code = 500; } diff --git a/src/Network/HTTPException/LenghtRequiredException.php b/src/Network/HTTPException/LenghtRequiredException.php index 1f2f0f16b..071cac73d 100644 --- a/src/Network/HTTPException/LenghtRequiredException.php +++ b/src/Network/HTTPException/LenghtRequiredException.php @@ -6,5 +6,5 @@ use Friendica\Network\HTTPException; class LenghtRequiredException extends HTTPException { - var $httpcode = 411; + protected $code = 411; } diff --git a/src/Network/HTTPException/MethodNotAllowedException.php b/src/Network/HTTPException/MethodNotAllowedException.php index 82fd3e786..128b9dc06 100644 --- a/src/Network/HTTPException/MethodNotAllowedException.php +++ b/src/Network/HTTPException/MethodNotAllowedException.php @@ -6,5 +6,5 @@ use Friendica\Network\HTTPException; class MethodNotAllowedException extends HTTPException { - var $httpcode = 405; + protected $code = 405; } diff --git a/src/Network/HTTPException/NoContentException.php b/src/Network/HTTPException/NoContentException.php new file mode 100644 index 000000000..7bd60fbbc --- /dev/null +++ b/src/Network/HTTPException/NoContentException.php @@ -0,0 +1,10 @@ + $xrd_timeout, 'accept_content' => 'application/xrd+xml']); + $curlResult = Network::curl($ssl_url, false, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']); if ($curlResult->isSuccess()) { $xml = $curlResult->getBody(); $xrd = XML::parseString($xml, false); @@ -122,7 +121,7 @@ class Probe } if (!is_object($xrd)) { - $curlResult = Network::curl($url, false, $redirects, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']); + $curlResult = Network::curl($url, false, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']); if ($curlResult->isTimeout()) { Logger::log("Probing timeout for " . $url, Logger::DEBUG); self::$istimeout = true; @@ -199,7 +198,7 @@ class Probe $links = self::lrdd($webbie); Logger::log('webfingerDfrn: '.$webbie.':'.print_r($links, true), Logger::DATA); - if (count($links)) { + if (!empty($links) && is_array($links)) { foreach ($links as $link) { if ($link['@attributes']['rel'] === NAMESPACE_DFRN) { $profile_link = $link['@attributes']['href']; @@ -510,30 +509,6 @@ class Probe return $data; } - /** - * @brief Switch the scheme of an url between http and https - * - * @param string $url URL - * - * @return string switched URL - */ - private static function switchScheme($url) - { - $parts = parse_url($url); - - if (!isset($parts['scheme'])) { - return $url; - } - - if ($parts['scheme'] == 'http') { - $url = str_replace('http://', 'https://', $url); - } elseif ($parts['scheme'] == 'https') { - $url = str_replace('https://', 'http://', $url); - } - - return $url; - } - /** * @brief Checks if a profile url should be OStatus but only provides partial information * @@ -566,7 +541,7 @@ class Probe return $webfinger; } - $url = self::switchScheme($webfinger['subject']); + $url = Network::switchScheme($webfinger['subject']); $path = str_replace('{uri}', urlencode($url), $lrdd); $webfinger2 = self::webfinger($path, $type); @@ -762,9 +737,8 @@ class Probe private static function webfinger($url, $type) { $xrd_timeout = Config::get('system', 'xrd_timeout', 20); - $redirects = 0; - $curlResult = Network::curl($url, false, $redirects, ['timeout' => $xrd_timeout, 'accept_content' => $type]); + $curlResult = Network::curl($url, false, ['timeout' => $xrd_timeout, 'accept_content' => $type]); if ($curlResult->isTimeout()) { self::$istimeout = true; return false; diff --git a/src/Object/Image.php b/src/Object/Image.php index 66be78ad4..803aa08b3 100644 --- a/src/Object/Image.php +++ b/src/Object/Image.php @@ -6,14 +6,10 @@ namespace Friendica\Object; use Exception; -use Friendica\App; use Friendica\Core\Cache; use Friendica\Core\Config; -use Friendica\Core\L10n; use Friendica\Core\Logger; use Friendica\Core\System; -use Friendica\Database\DBA; -use Friendica\Model\Photo; use Friendica\Util\Network; use Imagick; use ImagickPixel; @@ -785,7 +781,7 @@ class Image $data = Cache::get($url); if (is_null($data) || !$data || !is_array($data)) { - $img_str = Network::fetchUrl($url, true, $redirects, 4); + $img_str = Network::fetchUrl($url, true, 4); if (!$img_str) { return false; @@ -872,168 +868,4 @@ class Image } return ["width" => $dest_width, "height" => $dest_height]; } - - /** - * @brief This function is used by the fromgplus addon - * @param App $a App - * @param integer $uid user id - * @param string $imagedata optional, default empty - * @param string $url optional, default empty - * @return array - * @throws \Friendica\Network\HTTPException\InternalServerErrorException - * @throws \ImagickException - */ - public static function storePhoto(App $a, $uid, $imagedata = "", $url = "") - { - $r = q( - "SELECT `user`.`nickname`, `user`.`page-flags`, `contact`.`id` FROM `user` INNER JOIN `contact` on `user`.`uid` = `contact`.`uid` - WHERE `user`.`uid` = %d AND `user`.`blocked` = 0 AND `contact`.`self` = 1 LIMIT 1", - intval($uid) - ); - - if (!DBA::isResult($r)) { - Logger::log("Can't detect user data for uid ".$uid, Logger::DEBUG); - return([]); - } - - $page_owner_nick = $r[0]['nickname']; - - /// @TODO - /// $default_cid = $r[0]['id']; - /// $community_page = (($r[0]['page-flags'] == User::PAGE_FLAGS_COMMUNITY) ? true : false); - - if ((strlen($imagedata) == 0) && ($url == "")) { - Logger::log("No image data and no url provided", Logger::DEBUG); - return([]); - } elseif (strlen($imagedata) == 0) { - Logger::log("Uploading picture from ".$url, Logger::DEBUG); - - $stamp1 = microtime(true); - $imagedata = @file_get_contents($url); - $a->getProfiler()->saveTimestamp($stamp1, "file", System::callstack()); - } - - $maximagesize = Config::get('system', 'maximagesize'); - - if (($maximagesize) && (strlen($imagedata) > $maximagesize)) { - Logger::log("Image exceeds size limit of ".$maximagesize, Logger::DEBUG); - return([]); - } - - $tempfile = tempnam(get_temppath(), "cache"); - - $stamp1 = microtime(true); - file_put_contents($tempfile, $imagedata); - $a->getProfiler()->saveTimestamp($stamp1, "file", System::callstack()); - - $data = getimagesize($tempfile); - - if (!isset($data["mime"])) { - unlink($tempfile); - Logger::log("File is no picture", Logger::DEBUG); - return([]); - } - - $Image = new Image($imagedata, $data["mime"]); - - if (!$Image->isValid()) { - unlink($tempfile); - Logger::log("Picture is no valid picture", Logger::DEBUG); - return([]); - } - - $Image->orient($tempfile); - unlink($tempfile); - - $max_length = Config::get('system', 'max_image_length'); - if (! $max_length) { - $max_length = MAX_IMAGE_LENGTH; - } - - if ($max_length > 0) { - $Image->scaleDown($max_length); - } - - $width = $Image->getWidth(); - $height = $Image->getHeight(); - - $hash = Photo::newResource(); - - // Pictures are always public by now - //$defperm = '<'.$default_cid.'>'; - $defperm = ""; - $visitor = 0; - - $r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, L10n::t('Wall Photos'), 0, 0, $defperm); - - if (!$r) { - Logger::log("Picture couldn't be stored", Logger::DEBUG); - return([]); - } - - $image = ["page" => System::baseUrl().'/photos/'.$page_owner_nick.'/image/'.$hash, - "full" => System::baseUrl()."/photo/{$hash}-0.".$Image->getExt()]; - - if ($width > 800 || $height > 800) { - $image["large"] = System::baseUrl()."/photo/{$hash}-0.".$Image->getExt(); - } - - if ($width > 640 || $height > 640) { - $Image->scaleDown(640); - $r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, L10n::t('Wall Photos'), 1, 0, $defperm); - if ($r) { - $image["medium"] = System::baseUrl()."/photo/{$hash}-1.".$Image->getExt(); - } - } - - if ($width > 320 || $height > 320) { - $Image->scaleDown(320); - $r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, L10n::t('Wall Photos'), 2, 0, $defperm); - if ($r) { - $image["small"] = System::baseUrl()."/photo/{$hash}-2.".$Image->getExt(); - } - } - - if ($width > 160 && $height > 160) { - $x = 0; - $y = 0; - - $min = $Image->getWidth(); - if ($min > 160) { - $x = ($min - 160) / 2; - } - - if ($Image->getHeight() < $min) { - $min = $Image->getHeight(); - if ($min > 160) { - $y = ($min - 160) / 2; - } - } - - $min = 160; - $Image->crop(160, $x, $y, $min, $min); - - $r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, L10n::t('Wall Photos'), 3, 0, $defperm); - if ($r) { - $image["thumb"] = System::baseUrl()."/photo/{$hash}-3.".$Image->getExt(); - } - } - - // Set the full image as preview image. This will be overwritten, if the picture is larger than 640. - $image["preview"] = $image["full"]; - - // Deactivated, since that would result in a cropped preview, if the picture wasn't larger than 320 - //if (isset($image["thumb"])) - // $image["preview"] = $image["thumb"]; - - // Unsure, if this should be activated or deactivated - //if (isset($image["small"])) - // $image["preview"] = $image["small"]; - - if (isset($image["medium"])) { - $image["preview"] = $image["medium"]; - } - - return($image); - } } diff --git a/src/Object/Post.php b/src/Object/Post.php index 2890c87ec..a8577dd8b 100644 --- a/src/Object/Post.php +++ b/src/Object/Post.php @@ -238,7 +238,7 @@ class Post extends BaseObject $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_dummy($locate)); // process action responses - e.g. like/dislike/attend/agree/whatever - $response_verbs = ['like', 'dislike']; + $response_verbs = ['like', 'dislike', 'announce']; $isevent = false; $attend = []; diff --git a/src/Object/README.md b/src/Object/README.md new file mode 100644 index 000000000..155bc5d0c --- /dev/null +++ b/src/Object/README.md @@ -0,0 +1,5 @@ +## Friendica\Object + +The namespace Object contains dynamic classes which are **not** directly interacting with the datastore. + +They are used to implement business logic for a particular object (i.e. an Image). \ No newline at end of file diff --git a/src/Object/Search/ContactResult.php b/src/Object/Search/ContactResult.php new file mode 100644 index 000000000..ccfb5f4cf --- /dev/null +++ b/src/Object/Search/ContactResult.php @@ -0,0 +1,147 @@ +cid; + } + + /** + * @return int + */ + public function getPCid() + { + return $this->pCid; + } + + /** + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * @return string + */ + public function getAddr() + { + return $this->addr; + } + + /** + * @return string + */ + public function getItem() + { + return $this->item; + } + + /** + * @return string + */ + public function getUrl() + { + return $this->url; + } + + /** + * @return string + */ + public function getPhoto() + { + return $this->photo; + } + + /** + * @return string + */ + public function getTags() + { + return $this->tags; + } + + /** + * @return string + */ + public function getNetwork() + { + return $this->network; + } + + /** + * @param string $name + * @param string $addr + * @param string $item + * @param string $url + * @param string $photo + * @param string $network + * @param int $cid + * @param int $pCid + * @param string $tags + */ + public function __construct($name, $addr, $item, $url, $photo, $network, $cid = 0, $pCid = 0, $tags = '') + { + $this->name = $name; + $this->addr = $addr; + $this->item = $item; + $this->url = $url; + $this->photo = $photo; + $this->network = $network; + + $this->cid = $cid; + $this->pCid = $pCid; + $this->tags = $tags; + } +} diff --git a/src/Object/Search/IResult.php b/src/Object/Search/IResult.php new file mode 100644 index 000000000..64fb71c85 --- /dev/null +++ b/src/Object/Search/IResult.php @@ -0,0 +1,11 @@ +page; + } + + /** + * @return int + */ + public function getTotal() + { + return $this->total; + } + + /** + * @return int + */ + public function getItemsPage() + { + return $this->itemsPage; + } + + /** + * @return IResult[] + */ + public function getResults() + { + return $this->results; + } + + /** + * @param int $page + * @param int $total + * @param int $itemsPage + * @param IResult[] $results + */ + public function __construct($page = 0, $total = 0, $itemsPage = 0, array $results = []) + { + $this->page = $page; + $this->total = $total; + $this->itemsPage = $itemsPage; + + $this->results = $results; + } + + /** + * Adds a result to the result list + * + * @param IResult $result + */ + public function addResult(IResult $result) + { + $this->results[] = $result; + } +} diff --git a/src/Protocol/ActivityPub.php b/src/Protocol/ActivityPub.php index bf8fed94c..8caf7ac64 100644 --- a/src/Protocol/ActivityPub.php +++ b/src/Protocol/ActivityPub.php @@ -44,8 +44,10 @@ class ActivityPub ['vcard' => 'http://www.w3.org/2006/vcard/ns#', 'dfrn' => 'http://purl.org/macgirvin/dfrn/1.0/', 'diaspora' => 'https://diasporafoundation.org/ns/', + 'litepub' => 'http://litepub.social/ns#', 'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers', - 'sensitive' => 'as:sensitive', 'Hashtag' => 'as:Hashtag']]; + 'sensitive' => 'as:sensitive', 'Hashtag' => 'as:Hashtag', + 'directMessage' => 'litepub:directMessage']]; const ACCOUNT_TYPES = ['Person', 'Organization', 'Service', 'Group', 'Application']; /** * Checks if the web request is done for the AP protocol @@ -72,7 +74,7 @@ class ActivityPub return HTTPSignature::fetch($url, $uid); } - $curlResult = Network::curl($url, false, $redirects, ['accept_content' => 'application/activity+json, application/ld+json']); + $curlResult = Network::curl($url, false, ['accept_content' => 'application/activity+json, application/ld+json']); if (!$curlResult->isSuccess() || empty($curlResult->getBody())) { return false; } @@ -89,14 +91,15 @@ class ActivityPub /** * Fetches a profile from the given url into an array that is compatible to Probe::uri * - * @param string $url profile url + * @param string $url profile url + * @param boolean $update Update the profile * @return array * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function probeProfile($url) + public static function probeProfile($url, $update = true) { - $apcontact = APContact::getByURL($url, true); + $apcontact = APContact::getByURL($url, $update); if (empty($apcontact)) { return false; } diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index 475ccfc0b..41aed2fe3 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -5,6 +5,7 @@ namespace Friendica\Protocol\ActivityPub; use Friendica\Database\DBA; +use Friendica\Content\Text\BBCode; use Friendica\Content\Text\HTML; use Friendica\Core\Config; use Friendica\Core\Logger; @@ -15,6 +16,7 @@ use Friendica\Model\Item; use Friendica\Model\Event; use Friendica\Model\Term; use Friendica\Model\User; +use Friendica\Model\Mail; use Friendica\Protocol\ActivityPub; use Friendica\Util\DateTimeFormat; use Friendica\Util\JsonLD; @@ -62,10 +64,9 @@ class Processor * * @param array $tags * @param boolean $sensitive - * @param array $implicit_mentions List of profile URLs to skip * @return string with tags */ - private static function constructTagString(array $tags, $sensitive) + private static function constructTagString(array $tags = null, $sensitive = false) { if (empty($tags)) { return ''; @@ -90,12 +91,13 @@ class Processor /** * Add attachment data to the item array * - * @param array $attachments - * @param array $item + * @param array $attachments + * @param array $item + * @param boolean $no_images * * @return array array */ - private static function constructAttachList($attachments, $item) + private static function constructAttachList($attachments, $item, $no_images) { if (empty($attachments)) { return $item; @@ -104,6 +106,10 @@ class Processor foreach ($attachments as $attach) { $filetype = strtolower(substr($attach['mediaType'], 0, strpos($attach['mediaType'], '/'))); if ($filetype == 'image') { + if ($no_images) { + continue; + } + $item['body'] .= "\n[img]" . $attach['url'] . '[/img]'; } else { if (!empty($item["attach"])) { @@ -136,7 +142,7 @@ class Processor } $item['changed'] = DateTimeFormat::utcNow(); - $item['edited'] = $activity['updated']; + $item['edited'] = DateTimeFormat::utc($activity['updated']); $item = self::processContent($activity, $item); if (empty($item)) { @@ -167,7 +173,7 @@ class Processor $item['object-type'] = ACTIVITY_OBJ_COMMENT; } - if (($activity['id'] != $activity['reply-to-id']) && !Item::exists(['uri' => $activity['reply-to-id']])) { + if (empty($activity['directmessage']) && ($activity['id'] != $activity['reply-to-id']) && !Item::exists(['uri' => $activity['reply-to-id']])) { Logger::log('Parent ' . $activity['reply-to-id'] . ' not found. Try to refetch it.'); self::fetchMissingActivity($activity['reply-to-id'], $activity); } @@ -192,6 +198,43 @@ class Processor Item::delete(['uri' => $activity['object_id'], 'owner-id' => $owner]); } + /** + * Prepare the item array for an activity + * + * @param array $activity Activity array + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws \ImagickException + */ + public static function addTag($activity) + { + if (empty($activity['object_content']) || empty($activity['object_id'])) { + return; + } + + foreach ($activity['receiver'] as $receiver) { + $item = Item::selectFirst(['id', 'tag', 'origin', 'author-link'], ['uri' => $activity['target_id'], 'uid' => $receiver]); + if (!DBA::isResult($item)) { + // We don't fetch missing content for this purpose + continue; + } + + if (($item['author-link'] != $activity['actor']) && !$item['origin']) { + Logger::info('Not origin, not from the author, skipping update', ['id' => $item['id'], 'author' => $item['author-link'], 'actor' => $activity['actor']]); + continue; + } + + // To-Do: + // - Check if "blocktag" is set + // - Check if actor is a contact + + if (!stristr($item['tag'], trim($activity['object_content']))) { + $tag = $item['tag'] . (strlen($item['tag']) ? ',' : '') . '#[url=' . $activity['object_id'] . ']'. $activity['object_content'] . '[/url]'; + Item::update(['tag' => $tag], ['id' => $item['id']]); + Logger::info('Tagged item', ['id' => $item['id'], 'tag' => $activity['object_content'], 'uri' => $activity['target_id'], 'actor' => $activity['actor']]); + } + } + } + /** * Prepare the item array for an activity * @@ -270,7 +313,7 @@ class Processor $content = self::convertMentions($content); - if (($item['thr-parent'] != $item['uri']) && ($item['gravity'] == GRAVITY_COMMENT)) { + if (empty($activity['directmessage']) && ($item['thr-parent'] != $item['uri']) && ($item['gravity'] == GRAVITY_COMMENT)) { $item_private = !in_array(0, $activity['item_receiver']); $parent = Item::selectFirst(['id', 'private', 'author-link', 'alias'], ['uri' => $item['thr-parent']]); if (!DBA::isResult($parent)) { @@ -318,8 +361,7 @@ class Processor private static function postItem($activity, $item) { /// @todo What to do with $activity['context']? - - if (($item['gravity'] != GRAVITY_PARENT) && !Item::exists(['uri' => $item['thr-parent']])) { + if (empty($activity['directmessage']) && ($item['gravity'] != GRAVITY_PARENT) && !Item::exists(['uri' => $item['thr-parent']])) { Logger::info('Parent not found, message will be discarded.', ['thr-parent' => $item['thr-parent']]); return; } @@ -328,20 +370,23 @@ class Processor $item['private'] = !in_array(0, $activity['receiver']); $item['author-link'] = $activity['author']; $item['author-id'] = Contact::getIdForURL($activity['author'], 0, true); + $item['owner-link'] = $activity['actor']; + $item['owner-id'] = Contact::getIdForURL($activity['actor'], 0, true); - if (empty($activity['thread-completion'])) { - $item['owner-link'] = $activity['actor']; - $item['owner-id'] = Contact::getIdForURL($activity['actor'], 0, true); - } else { - Logger::info('Ignoring actor because of thread completion.'); + if (!empty($activity['thread-completion'])) { + // Store the original actor in the "causer" fields to enable the check for ignored or blocked contacts + $item['causer-link'] = $item['owner-link']; + $item['causer-id'] = $item['owner-id']; + + Logger::info('Ignoring actor because of thread completion.', ['actor' => $item['owner-link']]); $item['owner-link'] = $item['author-link']; $item['owner-id'] = $item['author-id']; } $item['uri'] = $activity['id']; - $item['created'] = $activity['published']; - $item['edited'] = $activity['updated']; + $item['created'] = DateTimeFormat::utc($activity['published']); + $item['edited'] = DateTimeFormat::utc($activity['updated']); $item['guid'] = $activity['diaspora:guid']; $item = self::processContent($activity, $item); @@ -351,7 +396,7 @@ class Processor $item['plink'] = defaults($activity, 'alternate-url', $item['uri']); - $item = self::constructAttachList($activity['attachments'], $item); + $item = self::constructAttachList($activity['attachments'], $item, !empty($activity['source'])); $stored = false; @@ -363,6 +408,11 @@ class Processor $item['contact-id'] = Contact::getIdForURL($activity['author'], 0, true); } + if (!empty($activity['directmessage'])) { + self::postMail($activity, $item); + continue; + } + if ($activity['object_type'] == 'as:Event') { self::createEvent($activity, $item); } @@ -390,6 +440,69 @@ class Processor } } + /** + * Creates an mail post + * + * @param array $activity Activity data + * @param array $item item array + * @return int|bool New mail table row id or false on error + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + */ + private static function postMail($activity, $item) + { + if (($item['gravity'] != GRAVITY_PARENT) && !DBA::exists('mail', ['uri' => $item['thr-parent'], 'uid' => $item['uid']])) { + Logger::info('Parent not found, mail will be discarded.', ['uid' => $item['uid'], 'uri' => $item['thr-parent']]); + return false; + } + + Logger::info('Direct Message', $item); + + $msg = []; + $msg['uid'] = $item['uid']; + + $msg['contact-id'] = $item['contact-id']; + + $contact = Contact::getById($item['contact-id'], ['name', 'url', 'photo']); + $msg['from-name'] = $contact['name']; + $msg['from-url'] = $contact['url']; + $msg['from-photo'] = $contact['photo']; + + $msg['uri'] = $item['uri']; + $msg['created'] = $item['created']; + + $parent = DBA::selectFirst('mail', ['parent-uri', 'title'], ['uri' => $item['thr-parent']]); + if (DBA::isResult($parent)) { + $msg['parent-uri'] = $parent['parent-uri']; + $msg['title'] = $parent['title']; + } else { + $msg['parent-uri'] = $item['thr-parent']; + + if (!empty($item['title'])) { + $msg['title'] = $item['title']; + } elseif (!empty($item['content-warning'])) { + $msg['title'] = $item['content-warning']; + } else { + // Trying to generate a title out of the body + $title = $item['body']; + + while (preg_match('#^(@\[url=([^\]]+)].*?\[\/url]\s)(.*)#is', $title, $matches)) { + $title = $matches[3]; + } + + $title = trim(HTML::toPlaintext(BBCode::convert($title, false, 2, true), 0)); + + if (strlen($title) > 20) { + $title = substr($title, 0, 20) . '...'; + } + + $msg['title'] = $title; + } + } + $msg['body'] = $item['body']; + + return Mail::insert($msg); + } + /** * Fetches missing posts * @@ -454,26 +567,32 @@ class Processor $cid = Contact::getIdForURL($activity['actor'], $uid); if (!empty($cid)) { self::switchContact($cid); - DBA::update('contact', ['hub-verify' => $activity['id']], ['id' => $cid]); + DBA::update('contact', ['hub-verify' => $activity['id'], 'protocol' => Protocol::ACTIVITYPUB], ['id' => $cid]); $contact = DBA::selectFirst('contact', [], ['id' => $cid, 'network' => Protocol::NATIVE_SUPPORT]); } else { - $contact = false; + $contact = []; } $item = ['author-id' => Contact::getIdForURL($activity['actor']), 'author-link' => $activity['actor']]; + $note = Strings::escapeTags(trim(defaults($activity, 'content', ''))); + // Ensure that the contact has got the right network type self::switchContact($item['author-id']); - Contact::addRelationship($owner, $contact, $item); + $result = Contact::addRelationship($owner, $contact, $item, false, $note); + if ($result === true) { + ActivityPub\Transmitter::sendContactAccept($item['author-link'], $item['author-id'], $owner['uid']); + } + $cid = Contact::getIdForURL($activity['actor'], $uid); if (empty($cid)) { return; } if (empty($contact)) { - DBA::update('contact', ['hub-verify' => $activity['id']], ['id' => $cid]); + DBA::update('contact', ['hub-verify' => $activity['id'], 'protocol' => Protocol::ACTIVITYPUB], ['id' => $cid]); } Logger::log('Follow user ' . $uid . ' from contact ' . $cid . ' with id ' . $activity['id']); @@ -578,7 +697,7 @@ class Processor self::switchContact($cid); - if (DBA::exists('contact', ['id' => $cid, 'rel' => Contact::SHARING, 'pending' => true])) { + if (DBA::exists('contact', ['id' => $cid, 'rel' => Contact::SHARING])) { Contact::remove($cid); Logger::log('Rejected contact request from contact ' . $cid . ' for user ' . $uid . ' - contact had been removed.', Logger::DEBUG); } else { @@ -653,7 +772,7 @@ class Processor private static function switchContact($cid) { $contact = DBA::selectFirst('contact', ['network'], ['id' => $cid, 'network' => Protocol::NATIVE_SUPPORT]); - if (!DBA::isResult($contact) || ($contact['network'] == Protocol::ACTIVITYPUB)) { + if (!DBA::isResult($contact) || in_array($contact['network'], [Protocol::ACTIVITYPUB, Protocol::DFRN])) { return; } diff --git a/src/Protocol/ActivityPub/Receiver.php b/src/Protocol/ActivityPub/Receiver.php index 5ee81302f..1d425600d 100644 --- a/src/Protocol/ActivityPub/Receiver.php +++ b/src/Protocol/ActivityPub/Receiver.php @@ -77,7 +77,7 @@ class Receiver $ldactivity = JsonLD::compact($activity); - $actor = JsonLD::fetchElement($ldactivity, 'as:actor'); + $actor = JsonLD::fetchElement($ldactivity, 'as:actor', '@id'); Logger::info('Message for user ' . $uid . ' is from actor ' . $actor); @@ -165,7 +165,7 @@ class Receiver */ private static function prepareObjectData($activity, $uid, &$trust_source) { - $actor = JsonLD::fetchElement($activity, 'as:actor'); + $actor = JsonLD::fetchElement($activity, 'as:actor', '@id'); if (empty($actor)) { Logger::log('Empty actor', Logger::DEBUG); return []; @@ -188,12 +188,17 @@ class Receiver Logger::log('Receivers: ' . $uid . ' - ' . json_encode($receivers), Logger::DEBUG); - $object_id = JsonLD::fetchElement($activity, 'as:object'); + $object_id = JsonLD::fetchElement($activity, 'as:object', '@id'); if (empty($object_id)) { Logger::log('No object found', Logger::DEBUG); return []; } + if (!is_string($object_id)) { + Logger::info('Invalid object id', ['object' => $object_id]); + return []; + } + $object_type = self::fetchObjectType($activity, $object_id, $uid); // Fetch the content only on activities where this matters @@ -206,22 +211,37 @@ class Receiver Logger::log("Object data couldn't be processed", Logger::DEBUG); return []; } + $object_data['object_id'] = $object_id; + + // Test if it is an answer to a mail + if (DBA::exists('mail', ['uri' => $object_data['reply-to-id']])) { + $object_data['directmessage'] = true; + } else { + $object_data['directmessage'] = JsonLD::fetchElement($activity, 'litepub:directMessage'); + } + // We had been able to retrieve the object data - so we can trust the source $trust_source = true; - } elseif (in_array($type, ['as:Like', 'as:Dislike']) || - (($type == 'as:Follow') && in_array($object_type, self::CONTENT_TYPES))) { + } elseif (in_array($type, array_merge(self::ACTIVITY_TYPES, ['as:Follow'])) && in_array($object_type, self::CONTENT_TYPES)) { // Create a mostly empty array out of the activity data (instead of the object). // This way we later don't have to check for the existence of ech individual array element. $object_data = self::processObject($activity); $object_data['name'] = $type; - $object_data['author'] = JsonLD::fetchElement($activity, 'as:actor'); + $object_data['author'] = JsonLD::fetchElement($activity, 'as:actor', '@id'); $object_data['object_id'] = $object_id; $object_data['object_type'] = ''; // Since we don't fetch the object, we don't know the type + } elseif (in_array($type, ['as:Add'])) { + $object_data = []; + $object_data['id'] = JsonLD::fetchElement($activity, '@id'); + $object_data['target_id'] = JsonLD::fetchElement($activity, 'as:target', '@id'); + $object_data['object_id'] = JsonLD::fetchElement($activity, 'as:object', '@id'); + $object_data['object_type'] = JsonLD::fetchElement($activity['as:object'], '@type'); + $object_data['object_content'] = JsonLD::fetchElement($activity['as:object'], 'as:content', '@type'); } else { $object_data = []; $object_data['id'] = JsonLD::fetchElement($activity, '@id'); - $object_data['object_id'] = JsonLD::fetchElement($activity, 'as:object'); - $object_data['object_actor'] = JsonLD::fetchElement($activity['as:object'], 'as:actor'); + $object_data['object_id'] = JsonLD::fetchElement($activity, 'as:object', '@id'); + $object_data['object_actor'] = JsonLD::fetchElement($activity['as:object'], 'as:actor', '@id'); $object_data['object_object'] = JsonLD::fetchElement($activity['as:object'], 'as:object'); $object_data['object_type'] = JsonLD::fetchElement($activity['as:object'], '@type'); @@ -307,12 +327,12 @@ class Receiver return; } - if (!JsonLD::fetchElement($activity, 'as:object')) { + if (!JsonLD::fetchElement($activity, 'as:object', '@id')) { Logger::log('Empty object', Logger::DEBUG); return; } - if (!JsonLD::fetchElement($activity, 'as:actor')) { + if (!JsonLD::fetchElement($activity, 'as:actor', '@id')) { Logger::log('Empty actor', Logger::DEBUG); return; @@ -320,8 +340,8 @@ class Receiver // Don't trust the source if "actor" differs from "attributedTo". The content could be forged. if ($trust_source && ($type == 'as:Create') && is_array($activity['as:object'])) { - $actor = JsonLD::fetchElement($activity, 'as:actor'); - $attributed_to = JsonLD::fetchElement($activity['as:object'], 'as:attributedTo'); + $actor = JsonLD::fetchElement($activity, 'as:actor', '@id'); + $attributed_to = JsonLD::fetchElement($activity['as:object'], 'as:attributedTo', '@id'); $trust_source = ($actor == $attributed_to); if (!$trust_source) { Logger::log('Not trusting actor: ' . $actor . '. It differs from attributedTo: ' . $attributed_to, Logger::DEBUG); @@ -352,12 +372,40 @@ class Receiver switch ($type) { case 'as:Create': - case 'as:Announce': if (in_array($object_data['object_type'], self::CONTENT_TYPES)) { ActivityPub\Processor::createItem($object_data); } break; + case 'as:Add': + if ($object_data['object_type'] == 'as:tag') { + ActivityPub\Processor::addTag($object_data); + } + break; + + case 'as:Announce': + if (in_array($object_data['object_type'], self::CONTENT_TYPES)) { + $profile = APContact::getByURL($object_data['actor']); + if ($profile['type'] == 'Person') { + // Reshared posts from persons appear as summary at the bottom + // If this isn't set, then a single reshare appears on top. This is used for groups. + $object_data['thread-completion'] = true; + } + ActivityPub\Processor::createItem($object_data); + + // Add the bottom reshare information only for persons + if ($profile['type'] == 'Person') { + $announce_object_data = self::processObject($activity); + $announce_object_data['name'] = $type; + $announce_object_data['author'] = JsonLD::fetchElement($activity, 'as:actor', '@id'); + $announce_object_data['object_id'] = $object_data['object_id']; + $announce_object_data['object_type'] = $object_data['object_type']; + + ActivityPub\Processor::createActivity($announce_object_data, ACTIVITY2_ANNOUNCE); + } + } + break; + case 'as:Like': if (in_array($object_data['object_type'], self::CONTENT_TYPES)) { ActivityPub\Processor::createActivity($object_data, ACTIVITY_LIKE); @@ -451,7 +499,7 @@ class Receiver $receivers = []; // When it is an answer, we inherite the receivers from the parent - $replyto = JsonLD::fetchElement($activity, 'as:inReplyTo'); + $replyto = JsonLD::fetchElement($activity, 'as:inReplyTo', '@id'); if (!empty($replyto)) { $parents = Item::select(['uid'], ['uri' => $replyto]); while ($parent = Item::fetch($parents)) { @@ -470,7 +518,7 @@ class Receiver } foreach (['as:to', 'as:cc', 'as:bto', 'as:bcc'] as $element) { - $receiver_list = JsonLD::fetchElementArray($activity, $element); + $receiver_list = JsonLD::fetchElementArray($activity, $element, '@id'); if (empty($receiver_list)) { continue; } @@ -675,10 +723,11 @@ class Receiver } if (!empty($activity['diaspora:guid']) && empty($object_data['diaspora:guid'])) { - $object_data['diaspora:guid'] = JsonLD::fetchElement($activity, 'diaspora:guid'); + $object_data['diaspora:guid'] = JsonLD::fetchElement($activity, 'diaspora:guid', '@value'); } $object_data['service'] = JsonLD::fetchElement($activity, 'as:instrument', 'as:name', '@type', 'as:Service'); + $object_data['service'] = JsonLD::fetchElement($object_data, 'service', '@value'); return $object_data; } @@ -691,11 +740,11 @@ class Receiver * @param boolean $trust_source Do we trust the provided object? * @param integer $uid User ID for the signature that we use to fetch data * - * @return array with trusted and valid object data + * @return array|false with trusted and valid object data * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function fetchObject($object_id, $object = [], $trust_source = false, $uid = 0) + private static function fetchObject(string $object_id, array $object = [], bool $trust_source = false, int $uid = 0) { // By fetching the type we check if the object is complete. $type = JsonLD::fetchElement($object, '@type'); @@ -733,14 +782,15 @@ class Receiver } if ($type == 'as:Announce') { - $object_id = JsonLD::fetchElement($object, 'object'); - if (empty($object_id)) { + $object_id = JsonLD::fetchElement($object, 'object', '@id'); + if (empty($object_id) || !is_string($object_id)) { return false; } return self::fetchObject($object_id, [], false, $uid); } Logger::log('Unhandled object type: ' . $type, Logger::DEBUG); + return false; } /** @@ -764,8 +814,8 @@ class Receiver } $element = ['type' => str_replace('as:', '', JsonLD::fetchElement($tag, '@type')), - 'href' => JsonLD::fetchElement($tag, 'as:href'), - 'name' => JsonLD::fetchElement($tag, 'as:name')]; + 'href' => JsonLD::fetchElement($tag, 'as:href', '@id'), + 'name' => JsonLD::fetchElement($tag, 'as:name', '@value')]; if (empty($element['type'])) { continue; @@ -795,8 +845,8 @@ class Receiver continue; } - $url = JsonLD::fetchElement($emoji['as:icon'], 'as:url'); - $element = ['name' => JsonLD::fetchElement($emoji, 'as:name'), + $url = JsonLD::fetchElement($emoji['as:icon'], 'as:url', '@id'); + $element = ['name' => JsonLD::fetchElement($emoji, 'as:name', '@value'), 'href' => $url]; $emojilist[] = $element; @@ -825,9 +875,9 @@ class Receiver } $attachlist[] = ['type' => str_replace('as:', '', JsonLD::fetchElement($attachment, '@type')), - 'mediaType' => JsonLD::fetchElement($attachment, 'as:mediaType'), - 'name' => JsonLD::fetchElement($attachment, 'as:name'), - 'url' => JsonLD::fetchElement($attachment, 'as:url')]; + 'mediaType' => JsonLD::fetchElement($attachment, 'as:mediaType', '@value'), + 'name' => JsonLD::fetchElement($attachment, 'as:name', '@value'), + 'url' => JsonLD::fetchElement($attachment, 'as:url', '@id')]; } return $attachlist; } @@ -849,7 +899,7 @@ class Receiver $object_data = []; $object_data['object_type'] = JsonLD::fetchElement($object, '@type'); $object_data['id'] = JsonLD::fetchElement($object, '@id'); - $object_data['reply-to-id'] = JsonLD::fetchElement($object, 'as:inReplyTo'); + $object_data['reply-to-id'] = JsonLD::fetchElement($object, 'as:inReplyTo', '@id'); // An empty "id" field is translated to "./" by the compactor, so we have to check for this content if (empty($object_data['reply-to-id']) || ($object_data['reply-to-id'] == './')) { @@ -867,25 +917,27 @@ class Receiver $object_data['published'] = $object_data['updated']; } - $actor = JsonLD::fetchElement($object, 'as:attributedTo'); + $actor = JsonLD::fetchElement($object, 'as:attributedTo', '@id'); if (empty($actor)) { - $actor = JsonLD::fetchElement($object, 'as:actor'); + $actor = JsonLD::fetchElement($object, 'as:actor', '@id'); } - $object_data['diaspora:guid'] = JsonLD::fetchElement($object, 'diaspora:guid'); - $object_data['diaspora:comment'] = JsonLD::fetchElement($object, 'diaspora:comment'); - $object_data['diaspora:like'] = JsonLD::fetchElement($object, 'diaspora:like'); + $object_data['diaspora:guid'] = JsonLD::fetchElement($object, 'diaspora:guid', '@value'); + $object_data['diaspora:comment'] = JsonLD::fetchElement($object, 'diaspora:comment', '@value'); + $object_data['diaspora:like'] = JsonLD::fetchElement($object, 'diaspora:like', '@value'); $object_data['actor'] = $object_data['author'] = $actor; - $object_data['context'] = JsonLD::fetchElement($object, 'as:context'); - $object_data['conversation'] = JsonLD::fetchElement($object, 'ostatus:conversation'); + $object_data['context'] = JsonLD::fetchElement($object, 'as:context', '@id'); + $object_data['conversation'] = JsonLD::fetchElement($object, 'ostatus:conversation', '@id'); $object_data['sensitive'] = JsonLD::fetchElement($object, 'as:sensitive'); - $object_data['name'] = JsonLD::fetchElement($object, 'as:name'); - $object_data['summary'] = JsonLD::fetchElement($object, 'as:summary'); - $object_data['content'] = JsonLD::fetchElement($object, 'as:content'); + $object_data['name'] = JsonLD::fetchElement($object, 'as:name', '@value'); + $object_data['summary'] = JsonLD::fetchElement($object, 'as:summary', '@value'); + $object_data['content'] = JsonLD::fetchElement($object, 'as:content', '@value'); $object_data['source'] = JsonLD::fetchElement($object, 'as:source', 'as:content', 'as:mediaType', 'text/bbcode'); + $object_data['source'] = JsonLD::fetchElement($object_data, 'source', '@value'); $object_data['start-time'] = JsonLD::fetchElement($object, 'as:startTime', '@value'); $object_data['end-time'] = JsonLD::fetchElement($object, 'as:endTime', '@value'); $object_data['location'] = JsonLD::fetchElement($object, 'as:location', 'as:name', '@type', 'as:Place'); + $object_data['location'] = JsonLD::fetchElement($object_data, 'location', '@value'); $object_data['latitude'] = JsonLD::fetchElement($object, 'as:location', 'as:latitude', '@type', 'as:Place'); $object_data['latitude'] = JsonLD::fetchElement($object_data, 'latitude', '@value'); $object_data['longitude'] = JsonLD::fetchElement($object, 'as:location', 'as:longitude', '@type', 'as:Place'); @@ -894,14 +946,15 @@ class Receiver $object_data['tags'] = self::processTags(JsonLD::fetchElementArray($object, 'as:tag')); $object_data['emojis'] = self::processEmojis(JsonLD::fetchElementArray($object, 'as:tag', 'toot:Emoji')); $object_data['generator'] = JsonLD::fetchElement($object, 'as:generator', 'as:name', '@type', 'as:Application'); - $object_data['alternate-url'] = JsonLD::fetchElement($object, 'as:url'); + $object_data['generator'] = JsonLD::fetchElement($object_data, 'generator', '@value'); + $object_data['alternate-url'] = JsonLD::fetchElement($object, 'as:url', '@id'); // Special treatment for Hubzilla links if (is_array($object_data['alternate-url'])) { - $object_data['alternate-url'] = JsonLD::fetchElement($object_data['alternate-url'], 'as:href'); + $object_data['alternate-url'] = JsonLD::fetchElement($object_data['alternate-url'], 'as:href', '@id'); if (!is_string($object_data['alternate-url'])) { - $object_data['alternate-url'] = JsonLD::fetchElement($object['as:url'], 'as:href'); + $object_data['alternate-url'] = JsonLD::fetchElement($object['as:url'], 'as:href', '@id'); } } diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index ce23e6db2..a3b8b679e 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -21,6 +21,7 @@ use Friendica\Model\User; use Friendica\Util\DateTimeFormat; use Friendica\Content\Text\BBCode; use Friendica\Content\Text\Plaintext; +use Friendica\Util\XML; use Friendica\Util\JsonLD; use Friendica\Util\LDSignature; use Friendica\Model\Profile; @@ -187,6 +188,18 @@ class Transmitter return $data; } + /** + * Return the service array containing information the used software and it's url + * + * @return array with service data + */ + private static function getService() + { + return ['type' => 'Service', + 'name' => FRIENDICA_PLATFORM . " '" . FRIENDICA_CODENAME . "' " . FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION, + 'url' => BaseObject::getApp()->getBaseURL()]; + } + /** * Return the ActivityPub profile of the given user * @@ -216,11 +229,6 @@ class Transmitter return []; } - // On old installations and never changed contacts this might not be filled - if (empty($contact['avatar'])) { - $contact['avatar'] = $contact['photo']; - } - $data = ['@context' => ActivityPub::CONTEXT]; $data['id'] = $contact['url']; $data['diaspora:guid'] = $user['guid']; @@ -241,12 +249,31 @@ class Transmitter 'publicKeyPem' => $user['pubkey']]; $data['endpoints'] = ['sharedInbox' => System::baseUrl() . '/inbox']; $data['icon'] = ['type' => 'Image', - 'url' => $contact['avatar']]; + 'url' => $contact['photo']]; + + $data['generator'] = self::getService(); // tags: https://kitty.town/@inmysocks/100656097926961126.json return $data; } + /** + * @param string $username + * @return array + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + */ + public static function getDeletedUser($username) + { + return [ + '@context' => ActivityPub::CONTEXT, + 'id' => System::baseUrl() . '/profile/' . $username, + 'type' => 'Tombstone', + 'published' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), + 'updated' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), + 'deleted' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), + ]; + } + /** * Returns an array with permissions of a given item array * @@ -364,16 +391,24 @@ class Transmitter foreach ($terms as $term) { $cid = Contact::getIdForURL($term['url'], $item['uid']); if (!empty($cid) && in_array($cid, $receiver_list)) { - $contact = DBA::selectFirst('contact', ['url'], ['id' => $cid, 'network' => $networks]); - if (DBA::isResult($contact) && !empty($profile = APContact::getByURL($contact['url'], false))) { + $contact = DBA::selectFirst('contact', ['url', 'network', 'protocol'], ['id' => $cid]); + if (!DBA::isResult($contact) || (!in_array($contact['network'], $networks) && ($contact['protocol'] != Protocol::ACTIVITYPUB))) { + continue; + } + + if (!empty($profile = APContact::getByURL($contact['url'], false))) { $data['to'][] = $profile['url']; } } } foreach ($receiver_list as $receiver) { - $contact = DBA::selectFirst('contact', ['url', 'hidden'], ['id' => $receiver, 'network' => $networks]); - if (DBA::isResult($contact) && !empty($profile = APContact::getByURL($contact['url'], false))) { + $contact = DBA::selectFirst('contact', ['url', 'hidden', 'network', 'protocol'], ['id' => $receiver]); + if (!DBA::isResult($contact) || (!in_array($contact['network'], $networks) && ($contact['protocol'] != Protocol::ACTIVITYPUB))) { + continue; + } + + if (!empty($profile = APContact::getByURL($contact['url'], false))) { if ($contact['hidden'] || $always_bcc) { $data['bcc'][] = $profile['url']; } else { @@ -383,46 +418,48 @@ class Transmitter } } - $parents = Item::select(['id', 'author-link', 'owner-link', 'gravity', 'uri'], ['parent' => $item['parent']]); - while ($parent = Item::fetch($parents)) { - if ($parent['gravity'] == GRAVITY_PARENT) { - $profile = APContact::getByURL($parent['owner-link'], false); - if (!empty($profile)) { - if ($item['gravity'] != GRAVITY_PARENT) { - // Comments to forums are directed to the forum - // But comments to forums aren't directed to the followers collection - if ($profile['type'] == 'Group') { - $data['to'][] = $profile['url']; + if (!empty($item['parent'])) { + $parents = Item::select(['id', 'author-link', 'owner-link', 'gravity', 'uri'], ['parent' => $item['parent']]); + while ($parent = Item::fetch($parents)) { + if ($parent['gravity'] == GRAVITY_PARENT) { + $profile = APContact::getByURL($parent['owner-link'], false); + if (!empty($profile)) { + if ($item['gravity'] != GRAVITY_PARENT) { + // Comments to forums are directed to the forum + // But comments to forums aren't directed to the followers collection + if ($profile['type'] == 'Group') { + $data['to'][] = $profile['url']; + } else { + $data['cc'][] = $profile['url']; + if (!$item['private'] && !empty($actor_profile['followers'])) { + $data['cc'][] = $actor_profile['followers']; + } + } } else { - $data['cc'][] = $profile['url']; - if (!$item['private']) { + // Public thread parent post always are directed to the followers + if (!$item['private'] && !$forum_mode) { $data['cc'][] = $actor_profile['followers']; } } + } + } + + // Don't include data from future posts + if ($parent['id'] >= $last_id) { + continue; + } + + $profile = APContact::getByURL($parent['author-link'], false); + if (!empty($profile)) { + if (($profile['type'] == 'Group') || ($parent['uri'] == $item['thr-parent'])) { + $data['to'][] = $profile['url']; } else { - // Public thread parent post always are directed to the followes - if (!$item['private'] && !$forum_mode) { - $data['cc'][] = $actor_profile['followers']; - } + $data['cc'][] = $profile['url']; } } } - - // Don't include data from future posts - if ($parent['id'] >= $last_id) { - continue; - } - - $profile = APContact::getByURL($parent['author-link'], false); - if (!empty($profile)) { - if (($profile['type'] == 'Group') || ($parent['uri'] == $item['thr-parent'])) { - $data['to'][] = $profile['url']; - } else { - $data['cc'][] = $profile['url']; - } - } + DBA::close($parents); } - DBA::close($parents); $data['to'] = array_unique($data['to']); $data['cc'] = array_unique($data['cc']); @@ -465,6 +502,18 @@ class Transmitter return $receivers; } + /** + * Check if an inbox is archived + * + * @param string $url Inbox url + * + * @return boolean "true" if inbox is archived + */ + private static function archivedInbox($url) + { + return DBA::exists('inbox-status', ['url' => $url, 'archive' => true]); + } + /** * Fetches a list of inboxes of followers of a given user * @@ -487,14 +536,18 @@ class Transmitter $networks = [Protocol::ACTIVITYPUB, Protocol::OSTATUS]; } - $condition = ['uid' => $uid, 'network' => $networks, 'archive' => false, 'pending' => false]; + $condition = ['uid' => $uid, 'archive' => false, 'pending' => false]; if (!empty($uid)) { $condition['rel'] = [Contact::FOLLOWER, Contact::FRIEND]; } - $contacts = DBA::select('contact', ['url'], $condition); + $contacts = DBA::select('contact', ['url', 'network', 'protocol'], $condition); while ($contact = DBA::fetch($contacts)) { + if (!in_array($contact['network'], $networks) && ($contact['protocol'] != Protocol::ACTIVITYPUB)) { + continue; + } + if (Network::isUrlBlocked($contact['url'])) { continue; } @@ -506,7 +559,9 @@ class Transmitter } else { $target = $profile['sharedinbox']; } - $inboxes[$target] = $target; + if (!self::archivedInbox($target)) { + $inboxes[$target] = $target; + } } } DBA::close($contacts); @@ -563,7 +618,9 @@ class Transmitter } else { $target = $profile['sharedinbox']; } - $inboxes[$target] = $target; + if (!self::archivedInbox($target)) { + $inboxes[$target] = $target; + } } } } @@ -572,6 +629,106 @@ class Transmitter return $inboxes; } + /** + * Creates an array in the structure of the item table for a given mail id + * + * @param integer $mail_id + * + * @return array + * @throws \Exception + */ + public static function ItemArrayFromMail($mail_id) + { + $mail = DBA::selectFirst('mail', [], ['id' => $mail_id]); + + $reply = DBA::selectFirst('mail', ['uri'], ['parent-uri' => $mail['parent-uri'], 'reply' => false]); + + // Making the post more compatible for Mastodon by: + // - Making it a note and not an article (no title) + // - Moving the title into the "summary" field that is used as a "content warning" + $mail['body'] = '[abstract]' . $mail['title'] . "[/abstract]\n" . $mail['body']; + $mail['title'] = ''; + + $mail['author-link'] = $mail['owner-link'] = $mail['from-url']; + $mail['allow_cid'] = '<'.$mail['contact-id'].'>'; + $mail['allow_gid'] = ''; + $mail['deny_cid'] = ''; + $mail['deny_gid'] = ''; + $mail['private'] = true; + $mail['deleted'] = false; + $mail['edited'] = $mail['created']; + $mail['plink'] = $mail['uri']; + $mail['thr-parent'] = $reply['uri']; + $mail['gravity'] = ($mail['reply'] ? GRAVITY_COMMENT: GRAVITY_PARENT); + + $mail['event-type'] = ''; + $mail['attach'] = ''; + + $mail['parent'] = 0; + + return $mail; + } + + /** + * Creates an activity array for a given mail id + * + * @param integer $mail_id + * @param boolean $object_mode Is the activity item is used inside another object? + * + * @return array of activity + * @throws \Exception + */ + public static function createActivityFromMail($mail_id, $object_mode = false) + { + $mail = self::ItemArrayFromMail($mail_id); + $object = self::createNote($mail); + + $object['to'] = $object['cc']; + unset($object['cc']); + + $object['tag'] = [['type' => 'Mention', 'href' => $object['to'][0], 'name' => 'test']]; + + if (!$object_mode) { + $data = ['@context' => ActivityPub::CONTEXT]; + } else { + $data = []; + } + + $data['id'] = $mail['uri'] . '#Create'; + $data['type'] = 'Create'; + $data['actor'] = $mail['author-link']; + $data['published'] = DateTimeFormat::utc($mail['created'] . '+00:00', DateTimeFormat::ATOM); + $data['instrument'] = self::getService(); + $data = array_merge($data, self::createPermissionBlockForItem($mail, true)); + + if (empty($data['to']) && !empty($data['cc'])) { + $data['to'] = $data['cc']; + } + + if (empty($data['to']) && !empty($data['bcc'])) { + $data['to'] = $data['bcc']; + } + + unset($data['cc']); + unset($data['bcc']); + + $object['to'] = $data['to']; + unset($object['cc']); + unset($object['bcc']); + + $data['directMessage'] = true; + + $data['object'] = $object; + + $owner = User::getOwnerDataById($mail['uid']); + + if (!$object_mode && !empty($owner)) { + return LDSignature::sign($data, $owner); + } else { + return $data; + } + } + /** * Returns the activity type of a given item * @@ -611,6 +768,8 @@ class Transmitter $type = 'TentativeAccept'; } elseif ($item['verb'] == ACTIVITY_FOLLOW) { $type = 'Follow'; + } elseif ($item['verb'] == ACTIVITY_TAG) { + $type = 'Add'; } else { $type = ''; } @@ -676,7 +835,7 @@ class Transmitter $condition = ['item-uri' => $item['uri'], 'protocol' => Conversation::PARCEL_ACTIVITYPUB]; $conversation = DBA::selectFirst('conversation', ['source'], $condition); if (DBA::isResult($conversation)) { - $data = json_decode($conversation['source']); + $data = json_decode($conversation['source'], true); if (!empty($data)) { return $data; } @@ -708,12 +867,14 @@ class Transmitter $data['published'] = DateTimeFormat::utc($item['created'] . '+00:00', DateTimeFormat::ATOM); - $data['instrument'] = ['type' => 'Service', 'name' => BaseObject::getApp()->getUserAgent()]; + $data['instrument'] = self::getService(); $data = array_merge($data, self::createPermissionBlockForItem($item, false)); if (in_array($data['type'], ['Create', 'Update', 'Delete'])) { $data['object'] = self::createNote($item); + } elseif ($data['type'] == 'Add') { + $data = self::createAddTag($item, $data); } elseif ($data['type'] == 'Announce') { $data = self::createAnnounce($item, $data); } elseif ($data['type'] == 'Follow') { @@ -975,7 +1136,7 @@ class Transmitter { $event = []; $event['name'] = $item['event-summary']; - $event['content'] = BBCode::convert($item['event-desc'], false, 7); + $event['content'] = BBCode::convert($item['event-desc'], false, 9); $event['startTime'] = DateTimeFormat::utc($item['event-start'] . '+00:00', DateTimeFormat::ATOM); if (!$item['event-nofinish']) { @@ -1065,7 +1226,7 @@ class Transmitter $regexp = "/[@!]\[url\=([^\[\]]*)\].*?\[\/url\]/ism"; $body = preg_replace_callback($regexp, ['self', 'mentionCallback'], $body); - $data['content'] = BBCode::convert($body, false, 7); + $data['content'] = BBCode::convert($body, false, 9); } $data['source'] = ['content' => $item['body'], 'mediaType' => "text/bbcode"]; @@ -1090,6 +1251,30 @@ class Transmitter return $data; } + /** + * Creates an an "add tag" entry + * + * @param array $item + * @param array $data activity data + * + * @return array with activity data for adding tags + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws \ImagickException + */ + private static function createAddTag($item, $data) + { + $object = XML::parseString($item['object'], false); + $target = XML::parseString($item["target"], false); + + $data['diaspora:guid'] = $item['guid']; + $data['actor'] = $item['author-link']; + $data['target'] = (string)$target->id; + $data['summary'] = BBCode::toPlaintext($item['body']); + $data['object'] = ['id' => (string)$object->id, 'type' => 'tag', 'name' => (string)$object->title, 'content' => (string)$object->content]; + + return $data; + } + /** * Creates an announce object entry * @@ -1166,7 +1351,7 @@ class Transmitter 'actor' => $owner['url'], 'object' => $suggestion['url'], 'content' => $suggestion['note'], - 'instrument' => ['type' => 'Service', 'name' => BaseObject::getApp()->getUserAgent()], + 'instrument' => self::getService(), 'to' => [ActivityPub::PUBLIC_COLLECTION], 'cc' => []]; @@ -1195,7 +1380,7 @@ class Transmitter 'actor' => $owner['url'], 'object' => $owner['url'], 'published' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), - 'instrument' => ['type' => 'Service', 'name' => BaseObject::getApp()->getUserAgent()], + 'instrument' => self::getService(), 'to' => [ActivityPub::PUBLIC_COLLECTION], 'cc' => []]; @@ -1234,7 +1419,7 @@ class Transmitter 'actor' => $owner['url'], 'object' => $owner['url'], 'published' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), - 'instrument' => ['type' => 'Service', 'name' => BaseObject::getApp()->getUserAgent()], + 'instrument' => self::getService(), 'to' => [ActivityPub::PUBLIC_COLLECTION], 'cc' => []]; @@ -1265,7 +1450,7 @@ class Transmitter 'actor' => $owner['url'], 'object' => self::getProfile($uid), 'published' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), - 'instrument' => ['type' => 'Service', 'name' => BaseObject::getApp()->getUserAgent()], + 'instrument' => self::getService(), 'to' => [$profile['followers']], 'cc' => []]; @@ -1289,6 +1474,10 @@ class Transmitter public static function sendActivity($activity, $target, $uid, $id = '') { $profile = APContact::getByURL($target); + if (empty($profile['inbox'])) { + Logger::warning('No inbox found for target', ['target' => $target, 'profile' => $profile]); + return; + } $owner = User::getOwnerDataById($uid); @@ -1301,7 +1490,7 @@ class Transmitter 'type' => $activity, 'actor' => $owner['url'], 'object' => $profile['url'], - 'instrument' => ['type' => 'Service', 'name' => BaseObject::getApp()->getUserAgent()], + 'instrument' => self::getService(), 'to' => [$profile['url']]]; Logger::log('Sending activity ' . $activity . ' to ' . $target . ' for user ' . $uid, Logger::DEBUG); @@ -1325,6 +1514,10 @@ class Transmitter public static function sendFollowObject($object, $target, $uid = 0) { $profile = APContact::getByURL($target); + if (empty($profile['inbox'])) { + Logger::warning('No inbox found for target', ['target' => $target, 'profile' => $profile]); + return; + } if (empty($uid)) { // Fetch the list of administrators @@ -1350,7 +1543,7 @@ class Transmitter 'type' => 'Follow', 'actor' => $owner['url'], 'object' => $object, - 'instrument' => ['type' => 'Service', 'name' => BaseObject::getApp()->getUserAgent()], + 'instrument' => self::getService(), 'to' => [$profile['url']]]; Logger::log('Sending follow ' . $object . ' to ' . $target . ' for user ' . $uid, Logger::DEBUG); @@ -1371,19 +1564,26 @@ class Transmitter public static function sendContactAccept($target, $id, $uid) { $profile = APContact::getByURL($target); + if (empty($profile['inbox'])) { + Logger::warning('No inbox found for target', ['target' => $target, 'profile' => $profile]); + return; + } $owner = User::getOwnerDataById($uid); $data = ['@context' => ActivityPub::CONTEXT, 'id' => System::baseUrl() . '/activity/' . System::createGUID(), 'type' => 'Accept', 'actor' => $owner['url'], - 'object' => ['id' => $id, 'type' => 'Follow', + 'object' => [ + 'id' => (string)$id, + 'type' => 'Follow', 'actor' => $profile['url'], - 'object' => $owner['url']], - 'instrument' => ['type' => 'Service', 'name' => BaseObject::getApp()->getUserAgent()], + 'object' => $owner['url'] + ], + 'instrument' => self::getService(), 'to' => [$profile['url']]]; - Logger::log('Sending accept to ' . $target . ' for user ' . $uid . ' with id ' . $id, Logger::DEBUG); + Logger::debug('Sending accept to ' . $target . ' for user ' . $uid . ' with id ' . $id); $signed = LDSignature::sign($data, $owner); HTTPSignature::transmit($signed, $profile['inbox'], $uid); @@ -1401,19 +1601,26 @@ class Transmitter public static function sendContactReject($target, $id, $uid) { $profile = APContact::getByURL($target); + if (empty($profile['inbox'])) { + Logger::warning('No inbox found for target', ['target' => $target, 'profile' => $profile]); + return; + } $owner = User::getOwnerDataById($uid); $data = ['@context' => ActivityPub::CONTEXT, 'id' => System::baseUrl() . '/activity/' . System::createGUID(), 'type' => 'Reject', 'actor' => $owner['url'], - 'object' => ['id' => $id, 'type' => 'Follow', + 'object' => [ + 'id' => (string)$id, + 'type' => 'Follow', 'actor' => $profile['url'], - 'object' => $owner['url']], - 'instrument' => ['type' => 'Service', 'name' => BaseObject::getApp()->getUserAgent()], + 'object' => $owner['url'] + ], + 'instrument' => self::getService(), 'to' => [$profile['url']]]; - Logger::log('Sending reject to ' . $target . ' for user ' . $uid . ' with id ' . $id, Logger::DEBUG); + Logger::debug('Sending reject to ' . $target . ' for user ' . $uid . ' with id ' . $id); $signed = LDSignature::sign($data, $owner); HTTPSignature::transmit($signed, $profile['inbox'], $uid); @@ -1431,6 +1638,10 @@ class Transmitter public static function sendContactUndo($target, $cid, $uid) { $profile = APContact::getByURL($target); + if (empty($profile['inbox'])) { + Logger::warning('No inbox found for target', ['target' => $target, 'profile' => $profile]); + return; + } $object_id = self::activityIDFromContact($cid); if (empty($object_id)) { @@ -1447,7 +1658,7 @@ class Transmitter 'object' => ['id' => $object_id, 'type' => 'Follow', 'actor' => $owner['url'], 'object' => $profile['url']], - 'instrument' => ['type' => 'Service', 'name' => BaseObject::getApp()->getUserAgent()], + 'instrument' => self::getService(), 'to' => [$profile['url']]]; Logger::log('Sending undo to ' . $target . ' for user ' . $uid . ' with id ' . $id, Logger::DEBUG); diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index 843380181..91ca2545d 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -25,10 +25,12 @@ use Friendica\Model\Conversation; use Friendica\Model\Event; use Friendica\Model\GContact; use Friendica\Model\Item; +use Friendica\Model\Mail; use Friendica\Model\PermissionSet; use Friendica\Model\Profile; use Friendica\Model\User; use Friendica\Object\Image; +use Friendica\Util\BaseURL; use Friendica\Util\Crypto; use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; @@ -358,7 +360,7 @@ class DFRN $ret = Item::select(Item::DELIVER_FIELDLIST, $condition); $items = Item::inArray($ret); if (!DBA::isResult($items)) { - exit(); + return ''; } $item = $items[0]; @@ -366,7 +368,7 @@ class DFRN if ($item['uid'] != 0) { $owner = User::getOwnerDataById($item['uid']); if (!$owner) { - exit(); + return ''; } } else { $owner = ['uid' => 0, 'nick' => 'feed-item']; @@ -399,7 +401,7 @@ class DFRN } } } else { - $root = self::entry($doc, $type, $item, $owner, true, 0, true); + self::entry($doc, $type, $item, $owner, true, 0, true); } $atom = trim($doc->saveXML()); @@ -986,7 +988,7 @@ class DFRN } // Add conversation data. This is used for OStatus - $conversation_href = System::baseUrl()."/display/".$owner["nick"]."/".$item["parent"]; + $conversation_href = System::baseUrl()."/display/".$item["parent-guid"]; $conversation_uri = $conversation_href; if (isset($parent_item)) { @@ -1208,13 +1210,13 @@ class DFRN $ssl_val = intval(Config::get('system', 'ssl_policy')); switch ($ssl_val) { - case SSL_POLICY_FULL: + case BaseURL::SSL_POLICY_FULL: $ssl_policy = 'full'; break; - case SSL_POLICY_SELFSIGN: + case BaseURL::SSL_POLICY_SELFSIGN: $ssl_policy = 'self'; break; - case SSL_POLICY_NONE: + case BaseURL::SSL_POLICY_NONE: default: $ssl_policy = 'none'; break; @@ -1227,7 +1229,6 @@ class DFRN $curlResult = Network::curl($url); if ($curlResult->isTimeout()) { - Contact::markForArchival($contact); return -2; // timed out } @@ -1235,29 +1236,24 @@ class DFRN $curl_stat = $curlResult->getReturnCode(); if (empty($curl_stat)) { - Contact::markForArchival($contact); return -3; // timed out } Logger::log('dfrn_deliver: ' . $xml, Logger::DATA); if (empty($xml)) { - Contact::markForArchival($contact); return 3; } if (strpos($xml, 'status) != 0) || !strlen($res->challenge) || !strlen($res->dfrn_id)) { - Contact::markForArchival($contact); - if (empty($res->status)) { $status = 3; } else { @@ -1313,7 +1309,6 @@ class DFRN if ($final_dfrn_id != $orig_id) { Logger::log('dfrn_deliver: wrong dfrn_id.'); // did not decode properly - cannot trust this site - Contact::markForArchival($contact); return 3; } @@ -1349,7 +1344,6 @@ class DFRN default: Logger::log("rino: invalid requested version '$rino_remote_version'"); - Contact::markForArchival($contact); return -8; } @@ -1389,26 +1383,22 @@ class DFRN $curl_stat = $postResult->getReturnCode(); if (empty($curl_stat) || empty($xml)) { - Contact::markForArchival($contact); return -9; // timed out } if (($curl_stat == 503) && stristr($postResult->getHeader(), 'retry-after')) { - Contact::markForArchival($contact); return -10; } if (strpos($xml, 'status)) { - Contact::markForArchival($contact); return -11; } @@ -1421,10 +1411,6 @@ class DFRN Logger::log('Delivery returned status '.$res->status.' - '.$res->message, Logger::DEBUG); } - if (($res->status >= 200) && ($res->status <= 299)) { - Contact::unmarkForArchival($contact); - } - return intval($res->status); } @@ -1452,7 +1438,6 @@ class DFRN if (empty($contact['addr'])) { Logger::log('Unable to find contact handle for ' . $contact['id'] . ' - ' . $contact['url']); - Contact::markForArchival($contact); return -21; } } @@ -1460,7 +1445,6 @@ class DFRN $fcontact = Diaspora::personByHandle($contact['addr']); if (empty($fcontact)) { Logger::log('Unable to find contact details for ' . $contact['id'] . ' - ' . $contact['addr']); - Contact::markForArchival($contact); return -22; } $pubkey = $fcontact['pubkey']; @@ -1489,26 +1473,22 @@ class DFRN $curl_stat = $postResult->getReturnCode(); if (empty($curl_stat) || empty($xml)) { Logger::log('Empty answer from ' . $contact['id'] . ' - ' . $dest_url); - Contact::markForArchival($contact); return -9; // timed out } if (($curl_stat == 503) && (stristr($postResult->getHeader(), 'retry-after'))) { - Contact::markForArchival($contact); return -10; } if (strpos($xml, 'status)) { - Contact::markForArchival($contact); return -23; } @@ -1516,10 +1496,6 @@ class DFRN Logger::log('Transmit to ' . $dest_url . ' returned status '.$res->status.' - '.$res->message, Logger::DEBUG); } - if (($res->status >= 200) && ($res->status <= 299)) { - Contact::unmarkForArchival($contact); - } - return intval($res->status); } @@ -1864,7 +1840,6 @@ class DFRN { Logger::log("Processing mails"); - /// @TODO Rewrite this to one statement $msg = []; $msg["uid"] = $importer["importer_uid"]; $msg["from-name"] = $xpath->query("dfrn:sender/dfrn:name/text()", $mail)->item(0)->nodeValue; @@ -1876,34 +1851,8 @@ class DFRN $msg["created"] = DateTimeFormat::utc($xpath->query("dfrn:sentdate/text()", $mail)->item(0)->nodeValue); $msg["title"] = $xpath->query("dfrn:subject/text()", $mail)->item(0)->nodeValue; $msg["body"] = $xpath->query("dfrn:content/text()", $mail)->item(0)->nodeValue; - $msg["seen"] = 0; - $msg["replied"] = 0; - DBA::insert('mail', $msg); - - $msg["id"] = DBA::lastInsertId(); - - // send notifications. - /// @TODO Arange this mess - $notif_params = [ - "type" => NOTIFY_MAIL, - "notify_flags" => $importer["notify-flags"], - "language" => $importer["language"], - "to_name" => $importer["username"], - "to_email" => $importer["email"], - "uid" => $importer["importer_uid"], - "item" => $msg, - "parent" => $msg["parent-uri"], - "source_name" => $msg["from-name"], - "source_link" => $importer["url"], - "source_photo" => $importer["thumb"], - "verb" => ACTIVITY_POST, - "otype" => "mail" - ]; - - notification($notif_params); - - Logger::log("Mail is processed, notification was sent."); + Mail::insert($msg); } /** @@ -1918,17 +1867,17 @@ class DFRN */ private static function processSuggestion($xpath, $suggestion, $importer) { - Logger::log("Processing suggestions"); + Logger::log('Processing suggestions'); /// @TODO Rewrite this to one statement $suggest = []; - $suggest["uid"] = $importer["importer_uid"]; - $suggest["cid"] = $importer["id"]; - $suggest["url"] = $xpath->query("dfrn:url/text()", $suggestion)->item(0)->nodeValue; - $suggest["name"] = $xpath->query("dfrn:name/text()", $suggestion)->item(0)->nodeValue; - $suggest["photo"] = $xpath->query("dfrn:photo/text()", $suggestion)->item(0)->nodeValue; - $suggest["request"] = $xpath->query("dfrn:request/text()", $suggestion)->item(0)->nodeValue; - $suggest["body"] = $xpath->query("dfrn:note/text()", $suggestion)->item(0)->nodeValue; + $suggest['uid'] = $importer['importer_uid']; + $suggest['cid'] = $importer['id']; + $suggest['url'] = $xpath->query('dfrn:url/text()', $suggestion)->item(0)->nodeValue; + $suggest['name'] = $xpath->query('dfrn:name/text()', $suggestion)->item(0)->nodeValue; + $suggest['photo'] = $xpath->query('dfrn:photo/text()', $suggestion)->item(0)->nodeValue; + $suggest['request'] = $xpath->query('dfrn:request/text()', $suggestion)->item(0)->nodeValue; + $suggest['body'] = $xpath->query('dfrn:note/text()', $suggestion)->item(0)->nodeValue; // Does our member already have a friend matching this description? @@ -1939,22 +1888,19 @@ class DFRN * * @see https://github.com/friendica/friendica/pull/3254#discussion_r107315246 */ - $condition = ['name' => $suggest["name"], 'nurl' => Strings::normaliseLink($suggest["url"]), - 'uid' => $suggest["uid"]]; + $condition = ['nurl' => Strings::normaliseLink($suggest['url']), 'uid' => $suggest['uid']]; if (DBA::exists('contact', $condition)) { return false; } - // Do we already have an fcontact record for this person? $fid = 0; - $condition = ['url' => $suggest["url"], 'name' => $suggest["name"], 'request' => $suggest["request"]]; - $fcontact = DBA::selectFirst('fcontact', ['id'], $condition); + $fcontact = DBA::selectFirst('fcontact', ['id'], ['url' => $suggest['url']]); if (DBA::isResult($fcontact)) { - $fid = $fcontact["id"]; + $fid = $fcontact['id']; // OK, we do. Do we already have an introduction for this person? - if (DBA::exists('intro', ['uid' => $suggest["uid"], 'fid' => $fid])) { + if (DBA::exists('intro', ['uid' => $suggest['uid'], 'fid' => $fid])) { /* * The valid result means the friend we're about to send a friend * suggestion already has them in their contact, which means no further @@ -1965,58 +1911,44 @@ class DFRN return false; } } - if (!$fid) { - $r = q( - "INSERT INTO `fcontact` (`name`,`url`,`photo`,`request`) VALUES ('%s', '%s', '%s', '%s')", - DBA::escape($suggest["name"]), - DBA::escape($suggest["url"]), - DBA::escape($suggest["photo"]), - DBA::escape($suggest["request"]) - ); - $fid = $r[0]["id"]; - } - $condition = ['url' => $suggest["url"], 'name' => $suggest["name"], 'request' => $suggest["request"]]; - $fcontact = DBA::selectFirst('fcontact', ['id'], $condition); + if (!$fid) { + $fields = ['name' => $suggest['name'], 'url' => $suggest['url'], + 'photo' => $suggest['photo'], 'request' => $suggest['request']]; + DBA::insert('fcontact', $fields); + $fid = DBA::lastInsertId(); + } /* * If no record in fcontact is found, below INSERT statement will not * link an introduction to it. */ - if (!DBA::isResult($fcontact)) { + if (empty($fid)) { // Database record did not get created. Quietly give up. exit(); } $hash = Strings::getRandomHex(); - q( - "INSERT INTO `intro` (`uid`, `fid`, `contact-id`, `note`, `hash`, `datetime`, `blocked`) - VALUES(%d, %d, %d, '%s', '%s', '%s', %d)", - intval($suggest["uid"]), - intval($fid), - intval($suggest["cid"]), - DBA::escape($suggest["body"]), - DBA::escape($hash), - DBA::escape(DateTimeFormat::utcNow()), - intval(0) - ); + $fields = ['uid' => $suggest['uid'], 'fid' => $fid, 'contact-id' => $suggest['cid'], + 'note' => $suggest['body'], 'hash' => $hash, 'datetime' => DateTimeFormat::utcNow(), 'blocked' => false]; + DBA::insert('intro', $fields); notification( [ - "type" => NOTIFY_SUGGEST, - "notify_flags" => $importer["notify-flags"], - "language" => $importer["language"], - "to_name" => $importer["username"], - "to_email" => $importer["email"], - "uid" => $importer["importer_uid"], - "item" => $suggest, - "link" => System::baseUrl()."/notifications/intros", - "source_name" => $importer["name"], - "source_link" => $importer["url"], - "source_photo" => $importer["photo"], - "verb" => ACTIVITY_REQ_FRIEND, - "otype" => "intro"] + 'type' => NOTIFY_SUGGEST, + 'notify_flags' => $importer['notify-flags'], + 'language' => $importer['language'], + 'to_name' => $importer['username'], + 'to_email' => $importer['email'], + 'uid' => $importer['importer_uid'], + 'item' => $suggest, + 'link' => System::baseUrl().'/notifications/intros', + 'source_name' => $importer['name'], + 'source_link' => $importer['url'], + 'source_photo' => $importer['photo'], + 'verb' => ACTIVITY_REQ_FRIEND, + 'otype' => 'intro'] ); return true; @@ -2211,14 +2143,13 @@ class DFRN /** * @brief Send a "poke" * - * @param array $item the new item record + * @param array $item The new item record * @param array $importer Record of the importer user mixed with contact of the content - * @param int $posted_id The record number of item record that was just posted * @return void * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @todo set proper type-hints (array?) */ - private static function doPoke($item, $importer, $posted_id) + private static function doPoke(array $item, array $importer) { $verb = urldecode(substr($item["verb"], strpos($item["verb"], "#")+1)); if (!$verb) { @@ -2243,8 +2174,6 @@ class DFRN if ($Blink && Strings::compareLink($Blink, System::baseUrl() . "/profile/" . $importer["nickname"])) { $author = DBA::selectFirst('contact', ['name', 'thumb', 'url'], ['id' => $item['author-id']]); - $item['id'] = $posted_id; - $parent = Item::selectFirst(['id'], ['uri' => $item['parent-uri'], 'uid' => $importer["importer_uid"]]); $item["parent"] = $parent['id']; @@ -2258,7 +2187,7 @@ class DFRN "to_email" => $importer["email"], "uid" => $importer["importer_uid"], "item" => $item, - "link" => System::baseUrl()."/display/".urlencode(Item::getGuidById($posted_id)), + "link" => System::baseUrl()."/display/".urlencode($item['guid']), "source_name" => $author["name"], "source_link" => $author["url"], "source_photo" => $author["thumb"], @@ -2287,18 +2216,16 @@ class DFRN { Logger::log("Process verb ".$item["verb"]." and object-type ".$item["object-type"]." for entrytype ".$entrytype, Logger::DEBUG); - if (($entrytype == DFRN::TOP_LEVEL)) { + if (($entrytype == DFRN::TOP_LEVEL) && !empty($importer['id'])) { // The filling of the the "contact" variable is done for legcy reasons // The functions below are partly used by ostatus.php as well - where we have this variable - $r = q("SELECT * FROM `contact` WHERE `id` = %d", intval($importer["id"])); - $contact = $r[0]; - $nickname = $contact["nick"]; + $contact = Contact::select([], ['id' => $importer['id']]); // Big question: Do we need these functions? They were part of the "consume_feed" function. // This function once was responsible for DFRN and OStatus. if (activity_match($item["verb"], ACTIVITY_FOLLOW)) { Logger::log("New follower"); - Contact::addRelationship($importer, $contact, $item, $nickname); + Contact::addRelationship($importer, $contact, $item); return false; } if (activity_match($item["verb"], ACTIVITY_UNFOLLOW)) { @@ -2308,7 +2235,7 @@ class DFRN } if (activity_match($item["verb"], ACTIVITY_REQ_FRIEND)) { Logger::log("New friend request"); - Contact::addRelationship($importer, $contact, $item, $nickname, true); + Contact::addRelationship($importer, $contact, $item, true); return false; } if (activity_match($item["verb"], ACTIVITY_UNFRIEND)) { @@ -2753,7 +2680,8 @@ class DFRN } if (stristr($item["verb"], ACTIVITY_POKE)) { - self::doPoke($item, $importer, $posted_id); + $item['id'] = $posted_id; + self::doPoke($item, $importer); } } } @@ -2971,7 +2899,12 @@ class DFRN { // prevent looping if (!empty($_REQUEST['redir'])) { - return; + Logger::log('autoRedir might be looping because redirect has been redirected', Logger::DEBUG); + // looping prevention also appears to sometimes prevent authentication for images + // because browser may have multiple connections open and load an image on a connection + // whose session wasn't updated when a previous redirect authenticated + // Leaving commented in case looping reappears + //return; } if ((! $contact_nick) || ($contact_nick === $a->user['nickname'])) { @@ -2995,6 +2928,9 @@ class DFRN $baseurl = substr($baseurl, $domain_st + 3); $nurl = Strings::normaliseLink($baseurl); + $r = User::getByNickname($contact_nick, ["uid"]); + $contact_uid = $r["uid"]; + /// @todo Why is there a query for "url" *and* "nurl"? Especially this normalising is strange. $r = q("SELECT `id` FROM `contact` WHERE `uid` = (SELECT `uid` FROM `user` WHERE `nickname` = '%s' LIMIT 1) AND `nick` = '%s' AND NOT `self` AND (`url` LIKE '%%%s%%' OR `nurl` LIKE '%%%s%%') AND NOT `blocked` AND NOT `pending` LIMIT 1", @@ -3003,9 +2939,19 @@ class DFRN DBA::escape($baseurl), DBA::escape($nurl) ); - if ((! DBA::isResult($r)) || $r[0]['id'] == remote_user()) { + if ((! DBA::isResult($r))) { return; } + // test if redirect authentication already succeeded + // Note that "contact" in the sense used in the $contact_nick argument to this function + // and the sense in the $remote[]["cid"] in the session are opposite. + // In the session variable the user currently fetching is the contact + // while $contact_nick is the nick of tho user who owns the stuff being fetched. + foreach (\Friendica\Core\Session::get('remote', []) as $visitor) { + if ($visitor['uid'] == $contact_uid && $visitor['cid'] == $r[0]['id']) { + return; + } + } $r = q("SELECT * FROM contact WHERE nick = '%s' AND network = '%s' AND uid = %d AND url LIKE '%%%s%%' LIMIT 1", diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 12f411538..f7d94256e 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -27,8 +27,8 @@ use Friendica\Model\Conversation; use Friendica\Model\GContact; use Friendica\Model\Group; use Friendica\Model\Item; +use Friendica\Model\Mail; use Friendica\Model\Profile; -use Friendica\Model\Queue; use Friendica\Model\User; use Friendica\Network\Probe; use Friendica\Util\Crypto; @@ -37,6 +37,7 @@ use Friendica\Util\Map; use Friendica\Util\Network; use Friendica\Util\Strings; use Friendica\Util\XML; +use Friendica\Worker\Delivery; use SimpleXMLElement; /** @@ -144,7 +145,7 @@ class Diaspora */ private static function getRelayContact($server_url) { - $fields = ['batch', 'id', 'name', 'network', 'archive', 'blocked']; + $fields = ['batch', 'id', 'name', 'network', 'protocol', 'archive', 'blocked']; // Fetch the relay contact $condition = ['uid' => 0, 'nurl' => Strings::normaliseLink($server_url), @@ -212,7 +213,7 @@ class Diaspora */ public static function participantsForThread($thread, array $contacts) { - $r = DBA::p("SELECT `contact`.`batch`, `contact`.`id`, `contact`.`name`, `contact`.`network`, + $r = DBA::p("SELECT `contact`.`batch`, `contact`.`id`, `contact`.`name`, `contact`.`network`, `contact`.`protocol`, `fcontact`.`batch` AS `fbatch`, `fcontact`.`network` AS `fnetwork` FROM `participation` INNER JOIN `contact` ON `contact`.`id` = `participation`.`cid` INNER JOIN `fcontact` ON `fcontact`.`id` = `participation`.`fid` @@ -224,6 +225,10 @@ class Diaspora } unset($contact['fnetwork']); + if (empty($contact['protocol'])) { + $contact['protocol'] = $contact['network']; + } + if (empty($contact['batch']) && !empty($contact['fbatch'])) { $contact['batch'] = $contact['fbatch']; } @@ -401,7 +406,7 @@ class Diaspora if ($no_exit) { return false; } else { - System::httpExit(400); + throw new \Friendica\Network\HTTPException\BadRequestException(); } } @@ -420,7 +425,7 @@ class Diaspora if ($no_exit) { return false; } else { - System::httpExit(400); + throw new \Friendica\Network\HTTPException\BadRequestException(); } } @@ -446,7 +451,7 @@ class Diaspora if ($no_exit) { return false; } else { - System::httpExit(400); + throw new \Friendica\Network\HTTPException\BadRequestException(); } } @@ -456,7 +461,7 @@ class Diaspora if ($no_exit) { return false; } else { - System::httpExit(400); + throw new \Friendica\Network\HTTPException\BadRequestException(); } } @@ -466,7 +471,7 @@ class Diaspora if ($no_exit) { return false; } else { - System::httpExit(400); + throw new \Friendica\Network\HTTPException\BadRequestException(); } } @@ -551,7 +556,7 @@ class Diaspora if (!$base) { Logger::log('unable to locate salmon data in xml'); - System::httpExit(400); + throw new \Friendica\Network\HTTPException\BadRequestException(); } @@ -589,7 +594,7 @@ class Diaspora if (!$author_link) { Logger::log('Could not retrieve author URI.'); - System::httpExit(400); + throw new \Friendica\Network\HTTPException\BadRequestException(); } // Once we have the author URI, go to the web and try to find their public key // (first this will look it up locally if it is in the fcontact cache) @@ -600,14 +605,14 @@ class Diaspora if (!$key) { Logger::log('Could not retrieve author key.'); - System::httpExit(400); + throw new \Friendica\Network\HTTPException\BadRequestException(); } $verify = Crypto::rsaVerify($signed_data, $signature, $key); if (!$verify) { Logger::log('Message did not verify. Discarding.'); - System::httpExit(400); + throw new \Friendica\Network\HTTPException\BadRequestException(); } Logger::log('Message verified.'); @@ -1842,14 +1847,7 @@ class Diaspora $person = self::personByHandle($msg_author); - DBA::lock('mail'); - - if (DBA::exists('mail', ['guid' => $msg_guid, 'uid' => $importer["uid"]])) { - Logger::log("duplicate message already delivered.", Logger::DEBUG); - return false; - } - - DBA::insert('mail', [ + return Mail::insert([ 'uid' => $importer['uid'], 'guid' => $msg_guid, 'convid' => $conversation['id'], @@ -1859,36 +1857,10 @@ class Diaspora 'contact-id' => $contact['id'], 'title' => $subject, 'body' => $body, - 'seen' => 0, - 'reply' => 0, 'uri' => $message_uri, 'parent-uri' => $author . ':' . $guid, 'created' => $msg_created_at ]); - - $message_id = DBA::lastInsertId(); - - DBA::unlock(); - - DBA::update('conv', ['updated' => DateTimeFormat::utcNow()], ['id' => $conversation["id"]]); - - notification([ - "type" => NOTIFY_MAIL, - "notify_flags" => $importer["notify-flags"], - "language" => $importer["language"], - "to_name" => $importer["username"], - "to_email" => $importer["email"], - "uid" => $importer["uid"], - "item" => ["id" => $message_id, "title" => $subject, "subject" => $subject, "body" => $body], - "parent" => $conversation["id"], - "source_name" => $person["name"], - "source_link" => $person["url"], - "source_photo" => $person["photo"], - "verb" => ACTIVITY_POST, - "otype" => "mail" - ]); - - return true; } /** @@ -2106,14 +2078,7 @@ class Diaspora $body = self::replacePeopleGuid($body, $person["url"]); - DBA::lock('mail'); - - if (DBA::exists('mail', ['guid' => $guid, 'uid' => $importer["uid"]])) { - Logger::log("duplicate message already delivered.", Logger::DEBUG); - return false; - } - - DBA::insert('mail', [ + return Mail::insert([ 'uid' => $importer['uid'], 'guid' => $guid, 'convid' => $conversation['id'], @@ -2123,36 +2088,11 @@ class Diaspora 'contact-id' => $contact['id'], 'title' => $conversation['subject'], 'body' => $body, - 'seen' => 0, 'reply' => 1, 'uri' => $message_uri, 'parent-uri' => $author.":".$conversation['guid'], 'created' => $created_at ]); - - $message_id = DBA::lastInsertId(); - - DBA::unlock(); - - DBA::update('conv', ['updated' => DateTimeFormat::utcNow()], ['id' => $conversation["id"]]); - - notification([ - "type" => NOTIFY_MAIL, - "notify_flags" => $importer["notify-flags"], - "language" => $importer["language"], - "to_name" => $importer["username"], - "to_email" => $importer["email"], - "uid" => $importer["uid"], - "item" => ["id" => $message_id, "title" => $conversation["subject"], "subject" => $conversation["subject"], "body" => $body], - "parent" => $conversation["id"], - "source_name" => $person["name"], - "source_link" => $person["url"], - "source_photo" => $person["photo"], - "verb" => ACTIVITY_POST, - "otype" => "mail" - ]); - - return true; } /** @@ -2208,13 +2148,9 @@ class Diaspora if ($comment['id'] == $comment['parent']) { continue; } - if ($comment['verb'] == ACTIVITY_POST) { - $cmd = $comment['self'] ? 'comment-new' : 'comment-import'; - } else { - $cmd = $comment['self'] ? 'like' : 'comment-import'; - } - Logger::log("Send ".$cmd." for item ".$comment['id']." to contact ".$contact_id, Logger::DEBUG); - Worker::add(PRIORITY_HIGH, 'Delivery', $cmd, $comment['id'], $contact_id); + + Logger::info('Deliver participation', ['item' => $comment['id'], 'contact' => $contact_id]); + Worker::add(PRIORITY_HIGH, 'Delivery', Delivery::POST, $comment['id'], $contact_id); } DBA::close($comments); @@ -2628,6 +2564,54 @@ class Diaspora return false; } + /** + * @brief Stores a reshare activity + * + * @param array $item Array of reshare post + * @param integer $parent_message_id Id of the parent post + * @param string $guid GUID string of reshare action + * @param string $author Author handle + */ + private static function addReshareActivity($item, $parent_message_id, $guid, $author) + { + $parent = Item::selectFirst(['uri', 'guid'], ['id' => $parent_message_id]); + + $datarray = []; + + $datarray['uid'] = $item['uid']; + $datarray['contact-id'] = $item['contact-id']; + $datarray['network'] = $item['network']; + + $datarray['author-link'] = $item['author-link']; + $datarray['author-id'] = $item['author-id']; + + $datarray['owner-link'] = $datarray['author-link']; + $datarray['owner-id'] = $datarray['author-id']; + + $datarray['guid'] = $parent['guid'] . '-' . $guid; + $datarray['uri'] = self::getUriFromGuid($author, $datarray['guid']); + $datarray['parent-uri'] = $parent['uri']; + + $datarray['verb'] = $datarray['body'] = ACTIVITY2_ANNOUNCE; + $datarray['gravity'] = GRAVITY_ACTIVITY; + $datarray['object-type'] = ACTIVITY_OBJ_NOTE; + + $datarray['protocol'] = $item['protocol']; + + $datarray['plink'] = self::plink($author, $datarray['guid']); + $datarray['private'] = $item['private']; + $datarray['changed'] = $datarray['created'] = $datarray['edited'] = $item['created']; + + $message_id = Item::insert($datarray); + + if ($message_id) { + Logger::info('Stored reshare activity.', ['guid' => $guid, 'id' => $message_id]); + if ($datarray['uid'] == 0) { + Item::distribute($message_id); + } + } + } + /** * @brief Processes a reshare message * @@ -2711,6 +2695,11 @@ class Diaspora self::sendParticipation($contact, $datarray); + $root_message_id = self::messageExists($importer["uid"], $root_guid); + if ($root_message_id) { + self::addReshareActivity($datarray, $root_message_id, $guid, $author); + } + if ($message_id) { Logger::log("Stored reshare ".$datarray["guid"]." with message id ".$message_id, Logger::DEBUG); if ($datarray['uid'] == 0) { @@ -3117,15 +3106,13 @@ class Diaspora * @param array $contact Target of the communication * @param string $envelope The message that is to be transmitted * @param bool $public_batch Is it a public post? - * @param bool $queue_run Is the transmission called from the queue? * @param string $guid message guid * - * @param bool $no_queue * @return int Result of the transmission * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function transmit(array $owner, array $contact, $envelope, $public_batch, $queue_run = false, $guid = "", $no_queue = false) + private static function transmit(array $owner, array $contact, $envelope, $public_batch, $guid = "") { $enabled = intval(Config::get("system", "diaspora_enabled")); if (!$enabled) { @@ -3152,36 +3139,18 @@ class Diaspora Logger::log("transmit: ".$logid."-".$guid." ".$dest_url); - if (!$queue_run && Queue::wasDelayed($contact["id"])) { - $return_code = 0; - } else { - if (!intval(Config::get("system", "diaspora_test"))) { - $content_type = (($public_batch) ? "application/magic-envelope+xml" : "application/json"); + if (!intval(Config::get("system", "diaspora_test"))) { + $content_type = (($public_batch) ? "application/magic-envelope+xml" : "application/json"); - $postResult = Network::post($dest_url."/", $envelope, ["Content-Type: ".$content_type]); - $return_code = $postResult->getReturnCode(); - } else { - Logger::log("test_mode"); - return 200; - } + $postResult = Network::post($dest_url."/", $envelope, ["Content-Type: ".$content_type]); + $return_code = $postResult->getReturnCode(); + } else { + Logger::log("test_mode"); + return 200; } Logger::log("transmit: ".$logid."-".$guid." to ".$dest_url." returns: ".$return_code); - if (!$return_code || (($return_code == 503) && (stristr($postResult->getHeader(), "retry-after")))) { - if (!$no_queue && !empty($contact['contact-type']) && ($contact['contact-type'] != Contact::TYPE_RELAY)) { - Logger::log("queue message"); - // queue message for redelivery - Queue::add($contact["id"], Protocol::DIASPORA, $envelope, $public_batch, $guid); - } - - // The message could not be delivered. We mark the contact as "dead" - Contact::markForArchival($contact); - } elseif (($return_code >= 200) && ($return_code <= 299)) { - // We successfully delivered a message, the contact is alive - Contact::unmarkForArchival($contact); - } - return $return_code ? $return_code : -1; } @@ -3210,13 +3179,12 @@ class Diaspora * @param array $message The message data * @param bool $public_batch Is it a public post? * @param string $guid message guid - * @param bool $spool Should the transmission be spooled or transmitted? * * @return int Result of the transmission * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function buildAndTransmit(array $owner, array $contact, $type, $message, $public_batch = false, $guid = "", $spool = false) + private static function buildAndTransmit(array $owner, array $contact, $type, $message, $public_batch = false, $guid = "") { $msg = self::buildPostXml($type, $message); @@ -3230,12 +3198,7 @@ class Diaspora $envelope = self::buildMessage($msg, $owner, $contact, $owner['uprvkey'], $contact['pubkey'], $public_batch); - if ($spool) { - Queue::add($contact['id'], Protocol::DIASPORA, $envelope, $public_batch, $guid); - return true; - } else { - $return_code = self::transmit($owner, $contact, $envelope, $public_batch, false, $guid); - } + $return_code = self::transmit($owner, $contact, $envelope, $public_batch, $guid); Logger::log("guid: ".$guid." result ".$return_code, Logger::DEBUG); @@ -3580,6 +3543,7 @@ class Diaspora $public = ($item["private"] ? "false" : "true"); $created = DateTimeFormat::utc($item["created"], DateTimeFormat::ATOM); + $edited = DateTimeFormat::utc($item["edited"] ?? $item["created"], DateTimeFormat::ATOM); // Detect a share element and do a reshare if (!$item['private'] && ($ret = self::isReshare($item["body"]))) { @@ -3634,6 +3598,7 @@ class Diaspora $message = ["author" => $myaddr, "guid" => $item["guid"], "created_at" => $created, + "edited_at" => $edited, "public" => $public, "text" => $body, "provider_display_name" => $item["app"], @@ -3812,11 +3777,13 @@ class Diaspora $text = html_entity_decode(BBCode::toMarkdown($body)); $created = DateTimeFormat::utc($item["created"], DateTimeFormat::ATOM); + $edited = DateTimeFormat::utc($item["edited"], DateTimeFormat::ATOM); $comment = [ "author" => self::myHandle($owner), "guid" => $item["guid"], "created_at" => $created, + "edited_at" => $edited, "parent_guid" => $toplevel_item["guid"], "text" => $text, "author_signature" => "" @@ -3852,7 +3819,7 @@ class Diaspora } elseif (in_array($item["verb"], [ACTIVITY_LIKE, ACTIVITY_DISLIKE])) { $message = self::constructLike($item, $owner); $type = "like"; - } elseif (!in_array($item["verb"], [ACTIVITY_FOLLOW])) { + } elseif (!in_array($item["verb"], [ACTIVITY_FOLLOW, ACTIVITY_TAG])) { $message = self::constructComment($item, $owner); $type = "comment"; } @@ -4229,9 +4196,10 @@ class Diaspora $message = self::createProfileData($uid); + // @ToDo Split this into single worker jobs foreach ($recips as $recip) { Logger::log("Send updated profile data for user ".$uid." to contact ".$recip["id"], Logger::DEBUG); - self::buildAndTransmit($owner, $recip, "profile", $message, false, "", false); + self::buildAndTransmit($owner, $recip, "profile", $message); } } diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php index dec5c4c80..9fa0ff43a 100644 --- a/src/Protocol/OStatus.php +++ b/src/Protocol/OStatus.php @@ -417,13 +417,6 @@ class OStatus $author = self::fetchAuthor($xpath, $entry, $importer, $contact, $stored); } - $value = XML::getFirstNodeValue($xpath, 'atom:author/poco:preferredUsername/text()', $entry); - if ($value != "") { - $nickname = $value; - } else { - $nickname = $author["author-name"]; - } - $item = array_merge($header, $author); $item["uri"] = XML::getFirstNodeValue($xpath, 'atom:id/text()', $entry); @@ -463,7 +456,7 @@ class OStatus } if ($item["verb"] == ACTIVITY_FOLLOW) { - Contact::addRelationship($importer, $contact, $item, $nickname); + Contact::addRelationship($importer, $contact, $item); continue; } @@ -745,7 +738,7 @@ class OStatus self::$conv_list[$conversation] = true; - $curlResult = Network::curl($conversation, false, $redirects, ['accept_content' => 'application/atom+xml, text/html']); + $curlResult = Network::curl($conversation, false, ['accept_content' => 'application/atom+xml, text/html']); if (!$curlResult->isSuccess()) { return; @@ -938,7 +931,7 @@ class OStatus } $stored = false; - $curlResult = Network::curl($related, false, $redirects, ['accept_content' => 'application/atom+xml, text/html']); + $curlResult = Network::curl($related, false, ['accept_content' => 'application/atom+xml, text/html']); if (!$curlResult->isSuccess()) { return; @@ -1515,7 +1508,7 @@ class OStatus $author->appendChild($urls); } - XML::addElement($doc, $author, "followers", "", ["url" => System::baseUrl()."/viewcontacts/".$owner["nick"]]); + XML::addElement($doc, $author, "followers", "", ["url" => System::baseUrl() . "/profile/" . $owner["nick"] . "/contacts/followers"]); XML::addElement($doc, $author, "statusnet:profile_info", "", ["local_id" => $owner["uid"]]); if ($profile["publish"]) { diff --git a/src/Protocol/PortableContact.php b/src/Protocol/PortableContact.php index b9c1533e6..def8f1b62 100644 --- a/src/Protocol/PortableContact.php +++ b/src/Protocol/PortableContact.php @@ -665,7 +665,7 @@ class PortableContact $nodeinfo2_url = ''; foreach ($nodeinfo['links'] as $link) { - if (!is_array($link) || empty($link['rel'])) { + if (!is_array($link) || empty($link['rel']) || empty($link['href'])) { Logger::log('Invalid nodeinfo format for ' . $server_url, Logger::DEBUG); continue; } @@ -749,7 +749,7 @@ class PortableContact $friendica = false; $gnusocial = false; - if (is_array($nodeinfo['protocols']['inbound'])) { + if (!empty($nodeinfo['protocols']['inbound']) && is_array($nodeinfo['protocols']['inbound'])) { foreach ($nodeinfo['protocols']['inbound'] as $inbound) { if ($inbound == 'diaspora') { $diaspora = true; @@ -1004,7 +1004,7 @@ class PortableContact $server_url = str_replace("http://", "https://", $server_url); // We set the timeout to 20 seconds since this operation should be done in no time if the server was vital - $curlResult = Network::curl($server_url."/.well-known/host-meta", false, $redirects, ['timeout' => 20]); + $curlResult = Network::curl($server_url."/.well-known/host-meta", false, ['timeout' => 20]); // Quit if there is a timeout. // But we want to make sure to only quit if we are mostly sure that this server url fits. @@ -1021,7 +1021,7 @@ class PortableContact $server_url = str_replace("https://", "http://", $server_url); // We set the timeout to 20 seconds since this operation should be done in no time if the server was vital - $curlResult = Network::curl($server_url."/.well-known/host-meta", false, $redirects, ['timeout' => 20]); + $curlResult = Network::curl($server_url."/.well-known/host-meta", false, ['timeout' => 20]); // Quit if there is a timeout if ($curlResult->isTimeout()) { @@ -1624,7 +1624,7 @@ class PortableContact if (!empty($accesstoken)) { $api = 'https://instances.social/api/1.0/instances/list?count=0'; $header = ['Authorization: Bearer '.$accesstoken]; - $curlResult = Network::curl($api, false, $redirects, ['headers' => $header]); + $curlResult = Network::curl($api, false, ['headers' => $header]); if ($curlResult->isSuccess()) { $servers = json_decode($curlResult->getBody(), true); diff --git a/src/Util/BasePath.php b/src/Util/BasePath.php index a2849831e..f29c2e864 100644 --- a/src/Util/BasePath.php +++ b/src/Util/BasePath.php @@ -17,17 +17,23 @@ class BasePath * * @throws \Exception if directory isn't usable */ - public static function create($basePath, $server = []) + public static function create($basePath, array $server = []) { - if (!$basePath && !empty($server['DOCUMENT_ROOT'])) { + if ((!$basePath || !is_dir($basePath)) && !empty($server['DOCUMENT_ROOT'])) { $basePath = $server['DOCUMENT_ROOT']; } - if (!$basePath && !empty($server['PWD'])) { + if ((!$basePath || !is_dir($basePath)) && !empty($server['PWD'])) { $basePath = $server['PWD']; } - return self::getRealPath($basePath); + $basePath = self::getRealPath($basePath); + + if (!is_dir($basePath)) { + throw new \Exception(sprintf('\'%s\' is not a valid basepath', $basePath)); + } + + return $basePath; } /** diff --git a/src/Util/BaseURL.php b/src/Util/BaseURL.php new file mode 100644 index 000000000..be34de30e --- /dev/null +++ b/src/Util/BaseURL.php @@ -0,0 +1,382 @@ +hostname; + } + + /** + * Returns the current scheme of this call + * @return string + */ + public function getScheme() + { + return $this->scheme; + } + + /** + * Returns the SSL policy of this node + * @return int + */ + public function getSSLPolicy() + { + return $this->sslPolicy; + } + + /** + * Returns the sub-path of this URL + * @return string + */ + public function getUrlPath() + { + return $this->urlPath; + } + + /** + * Returns the full URL of this call + * + * Note: $ssl parameter value doesn't directly correlate with the resulting protocol + * + * @param bool $ssl True, if ssl should get used + * + * @return string + */ + public function get($ssl = false) + { + if ($this->sslPolicy === self::SSL_POLICY_SELFSIGN && $ssl) { + return Network::switchScheme($this->url); + } + + return $this->url; + } + + /** + * Save current parts of the base Url + * + * @param string? $hostname + * @param int? $sslPolicy + * @param string? $urlPath + * + * @return bool true, if successful + */ + public function save($hostname = null, $sslPolicy = null, $urlPath = null) + { + $currHostname = $this->hostname; + $currSSLPolicy = $this->sslPolicy; + $currURLPath = $this->urlPath; + + if (!empty($hostname) && $hostname !== $this->hostname) { + if ($this->config->set('config', 'hostname', $hostname)) { + $this->hostname = $hostname; + } else { + return false; + } + } + + if (isset($sslPolicy) && $sslPolicy !== $this->sslPolicy) { + if ($this->config->set('system', 'ssl_policy', $sslPolicy)) { + $this->sslPolicy = $sslPolicy; + } else { + $this->hostname = $currHostname; + $this->config->set('config', 'hostname', $this->hostname); + return false; + } + } + + if (isset($urlPath) && $urlPath !== $this->urlPath) { + if ($this->config->set('system', 'urlpath', $urlPath)) { + $this->urlPath = $urlPath; + } else { + $this->hostname = $currHostname; + $this->sslPolicy = $currSSLPolicy; + $this->config->set('config', 'hostname', $this->hostname); + $this->config->set('system', 'ssl_policy', $this->sslPolicy); + return false; + } + } + + $this->determineBaseUrl(); + if (!$this->config->set('system', 'url', $this->url)) { + $this->hostname = $currHostname; + $this->sslPolicy = $currSSLPolicy; + $this->urlPath = $currURLPath; + $this->determineBaseUrl(); + + $this->config->set('config', 'hostname', $this->hostname); + $this->config->set('system', 'ssl_policy', $this->sslPolicy); + $this->config->set('system', 'urlpath', $this->urlPath); + return false; + } + + return true; + } + + /** + * Save the current url as base URL + * + * @param $url + * + * @return bool true, if the save was successful + */ + public function saveByURL($url) + { + $parsed = @parse_url($url); + + if (empty($parsed)) { + return false; + } + + $hostname = $parsed['host']; + if (!empty($hostname) && !empty($parsed['port'])) { + $hostname .= ':' . $parsed['port']; + } + + $urlPath = null; + if (!empty($parsed['path'])) { + $urlPath = trim($parsed['path'], '\\/'); + } + + $sslPolicy = null; + if (!empty($parsed['scheme'])) { + if ($parsed['scheme'] == 'https') { + $sslPolicy = BaseURL::SSL_POLICY_FULL; + } + } + + return $this->save($hostname, $sslPolicy, $urlPath); + } + + /** + * Checks, if a redirect to the HTTPS site would be necessary + * + * @return bool + */ + public function checkRedirectHttps() + { + return $this->config->get('system', 'force_ssl') + && ($this->getScheme() == "http") + && intval($this->getSSLPolicy()) == BaseURL::SSL_POLICY_FULL + && strpos($this->get(), 'https://') === 0 + && !empty($this->server['REQUEST_METHOD']) + && $this->server['REQUEST_METHOD'] === 'GET'; + } + + /** + * @param Configuration $config The Friendica configuration + * @param array $server The $_SERVER array + */ + public function __construct(Configuration $config, array $server) + { + $this->config = $config; + $this->server = $server; + + $this->determineSchema(); + $this->checkConfig(); + } + + /** + * Check the current config during loading + */ + public function checkConfig() + { + $this->hostname = $this->config->get('config', 'hostname'); + $this->urlPath = $this->config->get('system', 'urlpath'); + $this->sslPolicy = $this->config->get('system', 'ssl_policy'); + $this->url = $this->config->get('system', 'url'); + + if (empty($this->hostname)) { + $this->determineHostname(); + + if (!empty($this->hostname)) { + $this->config->set('config', 'hostname', $this->hostname); + } + } + + if (!isset($this->urlPath)) { + $this->determineURLPath(); + $this->config->set('system', 'urlpath', $this->urlPath); + } + + if (!isset($this->sslPolicy)) { + if ($this->scheme == 'https') { + $this->sslPolicy = self::SSL_POLICY_FULL; + } else { + $this->sslPolicy = self::DEFAULT_SSL_SCHEME; + } + $this->config->set('system', 'ssl_policy', $this->sslPolicy); + } + + if (empty($this->url)) { + $this->determineBaseUrl(); + + if (!empty($this->url)) { + $this->config->set('system', 'url', $this->url); + } + } + } + + /** + * Determines the hostname of this node if not set already + */ + private function determineHostname() + { + $this->hostname = ''; + + if (!empty($this->server['SERVER_NAME'])) { + $this->hostname = $this->server['SERVER_NAME']; + + if (!empty($this->server['SERVER_PORT']) && $this->server['SERVER_PORT'] != 80 && $this->server['SERVER_PORT'] != 443) { + $this->hostname .= ':' . $this->server['SERVER_PORT']; + } + } + } + + /** + * Figure out if we are running at the top of a domain or in a sub-directory + */ + private function determineURLPath() + { + $this->urlPath = ''; + + /* + * The automatic path detection in this function is currently deactivated, + * see issue https://github.com/friendica/friendica/issues/6679 + * + * The problem is that the function seems to be confused with some url. + * These then confuses the detection which changes the url path. + */ + + /* Relative script path to the web server root + * Not all of those $_SERVER properties can be present, so we do by inverse priority order + */ + $relative_script_path = ''; + $relative_script_path = defaults($this->server, 'REDIRECT_URL', $relative_script_path); + $relative_script_path = defaults($this->server, 'REDIRECT_URI', $relative_script_path); + $relative_script_path = defaults($this->server, 'REDIRECT_SCRIPT_URL', $relative_script_path); + $relative_script_path = defaults($this->server, 'SCRIPT_URL', $relative_script_path); + $relative_script_path = defaults($this->server, 'REQUEST_URI', $relative_script_path); + + /* $relative_script_path gives /relative/path/to/friendica/module/parameter + * QUERY_STRING gives pagename=module/parameter + * + * To get /relative/path/to/friendica we perform dirname() for as many levels as there are slashes in the QUERY_STRING + */ + if (!empty($relative_script_path)) { + // Module + if (!empty($this->server['QUERY_STRING'])) { + $this->urlPath = trim(rdirname($relative_script_path, substr_count(trim($this->server['QUERY_STRING'], '/'), '/') + 1), '/'); + } else { + // Root page + $this->urlPath = trim($relative_script_path, '/'); + } + } + } + + /** + * Determine the full URL based on all parts + */ + private function determineBaseUrl() + { + $scheme = 'http'; + + if ($this->sslPolicy == self::SSL_POLICY_FULL) { + $scheme = 'https'; + } + + $this->url = $scheme . '://' . $this->hostname . (!empty($this->urlPath) ? '/' . $this->urlPath : '' ); + } + + /** + * Determine the scheme of the current used link + */ + private function determineSchema() + { + $this->scheme = 'http'; + + if (!empty($this->server['HTTPS']) || + !empty($this->server['HTTP_FORWARDED']) && preg_match('/proto=https/', $this->server['HTTP_FORWARDED']) || + !empty($this->server['HTTP_X_FORWARDED_PROTO']) && $this->server['HTTP_X_FORWARDED_PROTO'] == 'https' || + !empty($this->server['HTTP_X_FORWARDED_SSL']) && $this->server['HTTP_X_FORWARDED_SSL'] == 'on' || + !empty($this->server['FRONT_END_HTTPS']) && $this->server['FRONT_END_HTTPS'] == 'on' || + !empty($this->server['SERVER_PORT']) && (intval($this->server['SERVER_PORT']) == 443) // XXX: reasonable assumption, but isn't this hardcoding too much? + ) { + $this->scheme = 'https'; + } + } +} diff --git a/src/Core/Config/Cache/ConfigCacheLoader.php b/src/Util/Config/ConfigFileLoader.php similarity index 75% rename from src/Core/Config/Cache/ConfigCacheLoader.php rename to src/Util/Config/ConfigFileLoader.php index 55f18681c..3d4f31a9d 100644 --- a/src/Core/Config/Cache/ConfigCacheLoader.php +++ b/src/Util/Config/ConfigFileLoader.php @@ -1,41 +1,44 @@ baseDir = $baseDir; - $this->configDir = $baseDir . DIRECTORY_SEPARATOR . self::SUBDIRECTORY; + parent::__construct($baseDir); + $this->appMode = $mode; } /** - * Load the configuration files + * Load the configuration files into an configuration cache * * First loads the default value for all the configuration keys, then the legacy configuration files, then the * expected local.config.php + * + * @param IConfigCache $config The config cache to load to + * @param bool $raw Setup the raw config format + * + * @throws \Exception */ - public function loadConfigFiles(ConfigCache $config) + public function setupCache(IConfigCache $config, $raw = false) { $config->load($this->loadCoreConfig('defaults')); $config->load($this->loadCoreConfig('settings')); @@ -44,23 +47,29 @@ class ConfigCacheLoader $config->load($this->loadLegacyConfig('htconfig'), true); $config->load($this->loadCoreConfig('local'), true); + + // In case of install mode, add the found basepath (because there isn't a basepath set yet + if (!$raw && ($this->appMode->isInstall() || empty($config->get('system', 'basepath')))) { + // Setting at least the basepath we know + $config->set('system', 'basepath', $this->baseDir); + } } /** * Tries to load the specified core-configuration and returns the config array. * - * @param string $name The name of the configuration + * @param string $name The name of the configuration (default is empty, which means 'local') * * @return array The config array (empty if no config found) * * @throws \Exception if the configuration file isn't readable */ - public function loadCoreConfig($name) + public function loadCoreConfig($name = '') { - if (file_exists($this->configDir . DIRECTORY_SEPARATOR . $name . '.config.php')) { - return $this->loadConfigFile($this->configDir . DIRECTORY_SEPARATOR . $name . '.config.php'); - } elseif (file_exists($this->configDir . DIRECTORY_SEPARATOR . $name . '.ini.php')) { - return $this->loadINIConfigFile($this->configDir . DIRECTORY_SEPARATOR . $name . '.ini.php'); + if (!empty($this->getConfigFullName($name))) { + return $this->loadConfigFile($this->getConfigFullName($name)); + } elseif (!empty($this->getIniFullName($name))) { + return $this->loadINIConfigFile($this->getIniFullName($name)); } else { return []; } @@ -93,22 +102,19 @@ class ConfigCacheLoader /** * Tries to load the legacy config files (.htconfig.php, .htpreconfig.php) and returns the config array. * - * @param string $name The name of the config file + * @param string $name The name of the config file (default is empty, which means .htconfig.php) * * @return array The configuration array (empty if no config found) * * @deprecated since version 2018.09 */ - private function loadLegacyConfig($name) + private function loadLegacyConfig($name = '') { - $filePath = $this->baseDir . DIRECTORY_SEPARATOR . '.' . $name . '.php'; - $config = []; - - if (file_exists($filePath)) { + if (!empty($this->getHtConfigFullName($name))) { $a = new \stdClass(); $a->config = []; - include $filePath; + include $this->getHtConfigFullName($name); $htConfigCategories = array_keys($a->config); diff --git a/src/Util/Config/ConfigFileManager.php b/src/Util/Config/ConfigFileManager.php new file mode 100644 index 000000000..729e59d74 --- /dev/null +++ b/src/Util/Config/ConfigFileManager.php @@ -0,0 +1,90 @@ +baseDir = $baseDir; + $this->configDir = $baseDir . DIRECTORY_SEPARATOR . self::SUBDIRECTORY; + } + + /** + * Gets the full name (including the path) for a *.config.php (default is local.config.php) + * + * @param string $name The config name (default is empty, which means local.config.php) + * + * @return string The full name or empty if not found + */ + protected function getConfigFullName($name = '') + { + $name = !empty($name) ? $name : self::CONFIG_LOCAL; + + $fullName = $this->configDir . DIRECTORY_SEPARATOR . $name . '.config.php'; + return file_exists($fullName) ? $fullName : ''; + } + + /** + * Gets the full name (including the path) for a *.ini.php (default is local.ini.php) + * + * @param string $name The config name (default is empty, which means local.ini.php) + * + * @return string The full name or empty if not found + */ + protected function getIniFullName($name = '') + { + $name = !empty($name) ? $name : self::CONFIG_INI; + + $fullName = $this->configDir . DIRECTORY_SEPARATOR . $name . '.ini.php'; + return file_exists($fullName) ? $fullName : ''; + } + + /** + * Gets the full name (including the path) for a .*.php (default is .htconfig.php) + * + * @param string $name The config name (default is empty, which means .htconfig.php) + * + * @return string The full name or empty if not found + */ + protected function getHtConfigFullName($name = '') + { + $name = !empty($name) ? $name : self::CONFIG_HTCONFIG; + + $fullName = $this->baseDir . DIRECTORY_SEPARATOR . '.' . $name . '.php'; + return file_exists($fullName) ? $fullName : ''; + } +} diff --git a/src/Util/Emailer.php b/src/Util/Emailer.php index 6a19e8e45..4310046c2 100644 --- a/src/Util/Emailer.php +++ b/src/Util/Emailer.php @@ -32,10 +32,16 @@ class Emailer * @return bool * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function send($params) + public static function send(array $params) { + $params['sent'] = false; + Hook::callAll('emailer_send_prepare', $params); + if ($params['sent']) { + return true; + } + $email_textonly = false; if (!empty($params['uid'])) { $email_textonly = PConfig::get($params['uid'], "system", "email_textonly"); @@ -87,11 +93,16 @@ class Emailer 'subject' => $messageSubject, 'body' => $multipartMessageBody, 'headers' => $messageHeader, - 'parameters' => $sendmail_params + 'parameters' => $sendmail_params, + 'sent' => false, ]; Hook::callAll("emailer_send", $hookdata); + if ($hookdata['sent']) { + return true; + } + $res = mail( $hookdata['to'], $hookdata['subject'], diff --git a/src/Util/HTTPSignature.php b/src/Util/HTTPSignature.php index d5e1732c0..8a058c3b5 100644 --- a/src/Util/HTTPSignature.php +++ b/src/Util/HTTPSignature.php @@ -5,6 +5,7 @@ */ namespace Friendica\Util; +use Friendica\Database\DBA; use Friendica\Core\Config; use Friendica\Core\Logger; use Friendica\Model\User; @@ -314,7 +315,66 @@ class HTTPSignature Logger::log('Transmit to ' . $target . ' returned ' . $return_code, Logger::DEBUG); - return ($return_code >= 200) && ($return_code <= 299); + $success = ($return_code >= 200) && ($return_code <= 299); + + self::setInboxStatus($target, $success); + + return $success; + } + + /** + * @brief Set the delivery status for a given inbox + * + * @param string $url The URL of the inbox + * @param boolean $success Transmission status + */ + static private function setInboxStatus($url, $success) + { + $now = DateTimeFormat::utcNow(); + + $status = DBA::selectFirst('inbox-status', [], ['url' => $url]); + if (!DBA::isResult($status)) { + DBA::insert('inbox-status', ['url' => $url, 'created' => $now]); + $status = DBA::selectFirst('inbox-status', [], ['url' => $url]); + } + + if ($success) { + $fields = ['success' => $now]; + } else { + $fields = ['failure' => $now]; + } + + if ($status['failure'] > DBA::NULL_DATETIME) { + $new_previous_stamp = strtotime($status['failure']); + $old_previous_stamp = strtotime($status['previous']); + + // Only set "previous" with at least one day difference. + // We use this to assure to not accidentally archive too soon. + if (($new_previous_stamp - $old_previous_stamp) >= 86400) { + $fields['previous'] = $status['failure']; + } + } + + if (!$success) { + if ($status['success'] <= DBA::NULL_DATETIME) { + $stamp1 = strtotime($status['created']); + } else { + $stamp1 = strtotime($status['success']); + } + + $stamp2 = strtotime($now); + $previous_stamp = strtotime($status['previous']); + + // Archive the inbox when there had been failures for five days. + // Additionally ensure that at least one previous attempt has to be in between. + if ((($stamp2 - $stamp1) >= 86400 * 5) && ($previous_stamp > $stamp1)) { + $fields['archive'] = true; + } + } else { + $fields['archive'] = false; + } + + DBA::update('inbox-status', $fields, ['url' => $url]); } /** @@ -395,7 +455,7 @@ class HTTPSignature $curl_opts = $opts; $curl_opts['header'] = $headers; - $curlResult = Network::curl($request, false, $redirects, $curl_opts); + $curlResult = Network::curl($request, false, $curl_opts); $return_code = $curlResult->getReturnCode(); Logger::log('Fetched for user ' . $uid . ' from ' . $request . ' returned ' . $return_code, Logger::DEBUG); diff --git a/src/Util/Introspection.php b/src/Util/Introspection.php new file mode 100644 index 000000000..6eec70954 --- /dev/null +++ b/src/Util/Introspection.php @@ -0,0 +1,88 @@ +skipClassesPartials = $skipClassesPartials; + $this->skipStackFramesCount = $skipStackFramesCount; + } + + /** + * Adds new classes to get skipped + * @param array $classNames + */ + public function addClasses(array $classNames) + { + $this->skipClassesPartials = array_merge($this->skipClassesPartials, $classNames); + } + + /** + * Returns the introspection record of the current call + * + * @return array + */ + public function getRecord() + { + $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); + + $i = 1; + + while ($this->isTraceClassOrSkippedFunction($trace, $i)) { + $i++; + } + + $i += $this->skipStackFramesCount; + + return [ + 'file' => isset($trace[$i - 1]['file']) ? basename($trace[$i - 1]['file']) : null, + 'line' => isset($trace[$i - 1]['line']) ? $trace[$i - 1]['line'] : null, + 'function' => isset($trace[$i]['function']) ? $trace[$i]['function'] : null, + ]; + } + + /** + * Checks if the current trace class or function has to be skipped + * + * @param array $trace The current trace array + * @param int $index The index of the current hierarchy level + * + * @return bool True if the class or function should get skipped, otherwise false + */ + private function isTraceClassOrSkippedFunction(array $trace, $index) + { + if (!isset($trace[$index])) { + return false; + } + + if (isset($trace[$index]['class'])) { + foreach ($this->skipClassesPartials as $part) { + if (strpos($trace[$index]['class'], $part) !== false) { + return true; + } + } + } elseif (in_array($trace[$index]['function'], $this->skipFunctions)) { + return true; + } + + return false; + } +} diff --git a/src/Util/JsonLD.php b/src/Util/JsonLD.php index 9b0012fe3..926fa1437 100644 --- a/src/Util/JsonLD.php +++ b/src/Util/JsonLD.php @@ -68,9 +68,16 @@ class JsonLD } catch (Exception $e) { $normalized = false; - Logger::error('normalise error'); - // Sooner or later we should log some details as well - but currently this leads to memory issues - // Logger::log('normalise error:' . substr(print_r($e, true), 0, 10000), Logger::DEBUG); + $messages = []; + $currentException = $e; + do { + $messages[] = $currentException->getMessage(); + } while($currentException = $currentException->getPrevious()); + + Logger::warning('JsonLD normalize error'); + Logger::notice('JsonLD normalize error', ['messages' => $messages]); + Logger::info('JsonLD normalize error', ['trace' => $e->getTraceAsString()]); + Logger::debug('JsonLD normalize error', ['jsonobj' => $jsonobj]); } return $normalized; @@ -96,9 +103,15 @@ class JsonLD 'diaspora' => (object)['@id' => 'https://diasporafoundation.org/ns/', '@type' => '@id'], 'ostatus' => (object)['@id' => 'http://ostatus.org#', '@type' => '@id'], 'dc' => (object)['@id' => 'http://purl.org/dc/terms/', '@type' => '@id'], - 'toot' => (object)['@id' => 'http://joinmastodon.org/ns#', '@type' => '@id']]; + 'toot' => (object)['@id' => 'http://joinmastodon.org/ns#', '@type' => '@id'], + 'litepub' => (object)['@id' => 'http://litepub.social/ns#', '@type' => '@id']]; - // Workaround for Nextcloud Social + // Preparation for adding possibly missing content to the context + if (!empty($json['@context']) && is_string($json['@context'])) { + $json['@context'] = [$json['@context']]; + } + + // Workaround for servers with missing context // See issue https://github.com/nextcloud/social/issues/330 if (!empty($json['@context']) && is_array($json['@context'])) { $json['@context'][] = 'https://w3id.org/security/v1'; @@ -160,7 +173,7 @@ class JsonLD foreach ($array[$element] as $entry) { if (!is_array($entry)) { $elements[] = $entry; - } elseif (!empty($entry[$key])) { + } elseif (isset($entry[$key])) { $elements[] = $entry[$key]; } elseif (!empty($entry) || !is_array($entry)) { $elements[] = $entry; diff --git a/src/Util/Logger/AbstractLogger.php b/src/Util/Logger/AbstractLogger.php new file mode 100644 index 000000000..576f4bfb4 --- /dev/null +++ b/src/Util/Logger/AbstractLogger.php @@ -0,0 +1,158 @@ +channel = $channel; + $this->introspection = $introspection; + $this->logUid = Strings::getRandomHex(6); + } + + /** + * Simple interpolation of PSR-3 compliant replacements ( variables between '{' and '}' ) + * @see https://www.php-fig.org/psr/psr-3/#12-message + * + * @param string $message + * @param array $context + * + * @return string the interpolated message + */ + protected function psrInterpolate($message, array $context = array()) + { + $replace = []; + foreach ($context as $key => $value) { + // check that the value can be casted to string + if (!is_array($value) && (!is_object($value) || method_exists($value, '__toString'))) { + $replace['{' . $key . '}'] = $value; + } elseif (is_array($value)) { + $replace['{' . $key . '}'] = @json_encode($value); + } + } + + return strtr($message, $replace); + } + + /** + * {@inheritdoc} + */ + public function emergency($message, array $context = array()) + { + $this->addEntry(LogLevel::EMERGENCY, (string) $message, $context); + } + + /** + * {@inheritdoc} + */ + public function alert($message, array $context = array()) + { + $this->addEntry(LogLevel::ALERT, (string) $message, $context); + } + + /** + * {@inheritdoc} + */ + public function critical($message, array $context = array()) + { + $this->addEntry(LogLevel::CRITICAL, (string) $message, $context); + } + + /** + * {@inheritdoc} + */ + public function error($message, array $context = array()) + { + $this->addEntry(LogLevel::ERROR, (string) $message, $context); + } + + /** + * {@inheritdoc} + */ + public function warning($message, array $context = array()) + { + $this->addEntry(LogLevel::WARNING, (string) $message, $context); + } + + /** + * {@inheritdoc} + */ + public function notice($message, array $context = array()) + { + $this->addEntry(LogLevel::NOTICE, (string) $message, $context); + } + + /** + * {@inheritdoc} + */ + public function info($message, array $context = array()) + { + $this->addEntry(LogLevel::INFO, (string) $message, $context); + } + + /** + * {@inheritdoc} + */ + public function debug($message, array $context = array()) + { + $this->addEntry(LogLevel::DEBUG, (string) $message, $context); + } + + /** + * {@inheritdoc} + */ + public function log($level, $message, array $context = array()) + { + $this->addEntry($level, (string) $message, $context); + } +} diff --git a/src/Util/Logger/FriendicaIntrospectionProcessor.php b/src/Util/Logger/FriendicaIntrospectionProcessor.php deleted file mode 100644 index aa3933a21..000000000 --- a/src/Util/Logger/FriendicaIntrospectionProcessor.php +++ /dev/null @@ -1,94 +0,0 @@ -level = Logger::toMonologLevel($level); - $this->skipClassesPartials = array_merge(array('Monolog\\'), $skipClassesPartials); - $this->skipStackFramesCount = $skipStackFramesCount; - } - - public function __invoke(array $record) - { - // return if the level is not high enough - if ($record['level'] < $this->level) { - return $record; - } - - $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); - - $i = 1; - - while ($this->isTraceClassOrSkippedFunction($trace, $i)) { - $i++; - } - - $i += $this->skipStackFramesCount; - - // we should have the call source now - $record['extra'] = array_merge( - $record['extra'], - [ - 'file' => isset($trace[$i - 1]['file']) ? basename($trace[$i - 1]['file']) : null, - 'line' => isset($trace[$i - 1]['line']) ? $trace[$i - 1]['line'] : null, - 'function' => isset($trace[$i]['function']) ? $trace[$i]['function'] : null, - ] - ); - - return $record; - } - - /** - * Checks if the current trace class or function has to be skipped - * - * @param array $trace The current trace array - * @param int $index The index of the current hierarchy level - * @return bool True if the class or function should get skipped, otherwise false - */ - private function isTraceClassOrSkippedFunction(array $trace, $index) - { - if (!isset($trace[$index])) { - return false; - } - - if (isset($trace[$index]['class'])) { - foreach ($this->skipClassesPartials as $part) { - if (strpos($trace[$index]['class'], $part) !== false) { - return true; - } - } - } elseif (in_array($trace[$index]['function'], $this->skipFunctions)) { - return true; - } - - return false; - } -} diff --git a/src/Util/Logger/FriendicaDevelopHandler.php b/src/Util/Logger/Monolog/DevelopHandler.php similarity index 93% rename from src/Util/Logger/FriendicaDevelopHandler.php rename to src/Util/Logger/Monolog/DevelopHandler.php index 908d7052c..07a839345 100644 --- a/src/Util/Logger/FriendicaDevelopHandler.php +++ b/src/Util/Logger/Monolog/DevelopHandler.php @@ -1,6 +1,6 @@ level = Logger::toMonologLevel($level); + $introspection->addClasses(array('Monolog\\')); + $this->introspection = $introspection; + } + + public function __invoke(array $record) + { + // return if the level is not high enough + if ($record['level'] < $this->level) { + return $record; + } + // we should have the call source now + $record['extra'] = array_merge( + $record['extra'], + $this->introspection->getRecord() + ); + + return $record; + } +} diff --git a/src/Util/Logger/ProfilerLogger.php b/src/Util/Logger/ProfilerLogger.php new file mode 100644 index 000000000..fdb7c52b2 --- /dev/null +++ b/src/Util/Logger/ProfilerLogger.php @@ -0,0 +1,127 @@ +logger = $logger; + $this->profiler = $profiler; + } + + /** + * {@inheritdoc} + */ + public function emergency($message, array $context = array()) + { + $stamp1 = microtime(true); + $this->logger->emergency($message, $context); + $this->profiler->saveTimestamp($stamp1, 'file', System::callstack()); + } + + /** + * {@inheritdoc} + */ + public function alert($message, array $context = array()) + { + $stamp1 = microtime(true); + $this->logger->alert($message, $context); + $this->profiler->saveTimestamp($stamp1, 'file', System::callstack()); + } + + /** + * {@inheritdoc} + */ + public function critical($message, array $context = array()) + { + $stamp1 = microtime(true); + $this->logger->critical($message, $context); + $this->profiler->saveTimestamp($stamp1, 'file', System::callstack()); + } + + /** + * {@inheritdoc} + */ + public function error($message, array $context = array()) + { + $stamp1 = microtime(true); + $this->logger->error($message, $context); + $this->profiler->saveTimestamp($stamp1, 'file', System::callstack()); + } + + /** + * {@inheritdoc} + */ + public function warning($message, array $context = array()) + { + $stamp1 = microtime(true); + $this->logger->warning($message, $context); + $this->profiler->saveTimestamp($stamp1, 'file', System::callstack()); + } + + /** + * {@inheritdoc} + */ + public function notice($message, array $context = array()) + { + $stamp1 = microtime(true); + $this->logger->notice($message, $context); + $this->profiler->saveTimestamp($stamp1, 'file', System::callstack()); + } + + /** + * {@inheritdoc} + */ + public function info($message, array $context = array()) + { + $stamp1 = microtime(true); + $this->logger->info($message, $context); + $this->profiler->saveTimestamp($stamp1, 'file', System::callstack()); + } + + /** + * {@inheritdoc} + */ + public function debug($message, array $context = array()) + { + $stamp1 = microtime(true); + $this->logger->debug($message, $context); + $this->profiler->saveTimestamp($stamp1, 'file', System::callstack()); + } + + /** + * {@inheritdoc} + */ + public function log($level, $message, array $context = array()) + { + $stamp1 = microtime(true); + $this->logger->log($level, $message, $context); + $this->profiler->saveTimestamp($stamp1, 'file', System::callstack()); + } +} diff --git a/src/Util/Logger/README.md b/src/Util/Logger/README.md new file mode 100644 index 000000000..449403194 --- /dev/null +++ b/src/Util/Logger/README.md @@ -0,0 +1,27 @@ +## Friendica\Util\Logger + +This namespace contains the different implementations of a Logger. + +### Configuration guideline + +The following settings are possible for `logger_config`: +- `monolog`: A Logging framework with lots of additions (see [Monolog](https://github.com/Seldaek/monolog/)). There are just Friendica additions inside the Monolog directory +- [`stream`](StreamLogger.php): A small logger for files or streams +- [`syslog`](SyslogLogger.php): Prints the logging output into the syslog + +[`VoidLogger`](VoidLogger.php) is a fallback logger without any function if no debugging is enabled. + +[`ProfilerLogger`](ProfilerLogger.php) is a wrapper around an existing logger in case profiling is enabled for Friendica. +Every log call will be saved to the `Profiler` with a timestamp. + +### Implementation guideline + +Each logging implementation should pe capable of printing at least the following information: +- An unique ID for each Request/Call +- The process ID (PID) +- A timestamp of the logging entry +- The critically of the log entry +- A log message +- A context of the log message (f.e which user) + +If possible, a Logger should extend [`AbstractLogger`](AbstractLogger.php), because it contains additional, Friendica specific business logic for each logging call. diff --git a/src/Util/Logger/StreamLogger.php b/src/Util/Logger/StreamLogger.php new file mode 100644 index 000000000..303146106 --- /dev/null +++ b/src/Util/Logger/StreamLogger.php @@ -0,0 +1,197 @@ + 0, + LogLevel::ALERT => 1, + LogLevel::CRITICAL => 2, + LogLevel::ERROR => 3, + LogLevel::WARNING => 4, + LogLevel::NOTICE => 5, + LogLevel::INFO => 6, + LogLevel::DEBUG => 7, + ]; + + /** + * {@inheritdoc} + * @param string|resource $stream The stream to write with this logger (either a file or a stream, i.e. stdout) + * @param string $level The minimum loglevel at which this logger will be triggered + * + * @throws \Exception + */ + public function __construct($channel, $stream, Introspection $introspection, $level = LogLevel::DEBUG) + { + parent::__construct($channel, $introspection); + + if (is_resource($stream)) { + $this->stream = $stream; + } elseif (is_string($stream)) { + $this->url = $stream; + } else { + throw new \InvalidArgumentException('A stream must either be a resource or a string.'); + } + + $this->pid = getmypid(); + if (array_key_exists($level, $this->levelToInt)) { + $this->logLevel = $this->levelToInt[$level]; + } else { + throw new \InvalidArgumentException(sprintf('The level "%s" is not valid.', $level)); + } + } + + public function close() + { + if ($this->url && is_resource($this->stream)) { + fclose($this->stream); + } + + $this->stream = null; + } + + /** + * Adds a new entry to the log + * + * @param int $level + * @param string $message + * @param array $context + * + * @return void + */ + protected function addEntry($level, $message, $context = []) + { + if (!array_key_exists($level, $this->levelToInt)) { + throw new \InvalidArgumentException(sprintf('The level "%s" is not valid.', $level)); + } + + $logLevel = $this->levelToInt[$level]; + + if ($logLevel > $this->logLevel) { + return; + } + + $this->checkStream(); + + $formattedLog = $this->formatLog($level, $message, $context); + fwrite($this->stream, $formattedLog); + } + + /** + * Formats a log record for the syslog output + * + * @param int $level The loglevel/priority + * @param string $message The message + * @param array $context The context of this call + * + * @return string the formatted syslog output + */ + private function formatLog($level, $message, $context = []) + { + $record = $this->introspection->getRecord(); + $record = array_merge($record, ['uid' => $this->logUid, 'process_id' => $this->pid]); + $logMessage = ''; + + $logMessage .= DateTimeFormat::utcNow() . ' '; + $logMessage .= $this->channel . ' '; + $logMessage .= '[' . strtoupper($level) . ']: '; + $logMessage .= $this->psrInterpolate($message, $context) . ' '; + $logMessage .= @json_encode($context) . ' - '; + $logMessage .= @json_encode($record); + $logMessage .= PHP_EOL; + + return $logMessage; + } + + private function checkStream() + { + if (is_resource($this->stream)) { + return; + } + + if (empty($this->url)) { + throw new \LogicException('Missing stream URL.'); + } + + $this->createDir(); + set_error_handler([$this, 'customErrorHandler']); + $this->stream = fopen($this->url, 'ab'); + restore_error_handler(); + + if (!is_resource($this->stream)) { + $this->stream = null; + + throw new \UnexpectedValueException(sprintf('The stream or file "%s" could not be opened: ' . $this->errorMessage, $this->url)); + } + } + + private function createDir() + { + $dirname = null; + $pos = strpos($this->url, '://'); + if (!$pos) { + $dirname = dirname($this->url); + } + + if (substr($this->url, 0, 7) === 'file://') { + $dirname = dirname(substr($this->url, 7)); + } + + if (isset($dirname) && !is_dir($dirname)) { + set_error_handler([$this, 'customErrorHandler']); + $status = mkdir($dirname, 0777, true); + restore_error_handler(); + + if (!$status && !is_dir($dirname)) { + throw new \UnexpectedValueException(sprintf('Directory "%s" cannot get created: ' . $this->errorMessage, $dirname)); + } + } + } + + private function customErrorHandler($code, $msg) + { + $this->errorMessage = preg_replace('{^(fopen|mkdir)\(.*?\): }', '', $msg); + } +} diff --git a/src/Util/Logger/SyslogLogger.php b/src/Util/Logger/SyslogLogger.php new file mode 100644 index 000000000..83c3fc3ce --- /dev/null +++ b/src/Util/Logger/SyslogLogger.php @@ -0,0 +1,206 @@ + LOG_DEBUG, + LogLevel::INFO => LOG_INFO, + LogLevel::NOTICE => LOG_NOTICE, + LogLevel::WARNING => LOG_WARNING, + LogLevel::ERROR => LOG_ERR, + LogLevel::CRITICAL => LOG_CRIT, + LogLevel::ALERT => LOG_ALERT, + LogLevel::EMERGENCY => LOG_EMERG, + ]; + + /** + * Translates log priorities to string outputs + * @var array + */ + private $logToString = [ + LOG_DEBUG => 'DEBUG', + LOG_INFO => 'INFO', + LOG_NOTICE => 'NOTICE', + LOG_WARNING => 'WARNING', + LOG_ERR => 'ERROR', + LOG_CRIT => 'CRITICAL', + LOG_ALERT => 'ALERT', + LOG_EMERG => 'EMERGENCY' + ]; + + /** + * Indicates what logging options will be used when generating a log message + * @see http://php.net/manual/en/function.openlog.php#refsect1-function.openlog-parameters + * + * @var int + */ + private $logOpts; + + /** + * Used to specify what type of program is logging the message + * @see http://php.net/manual/en/function.openlog.php#refsect1-function.openlog-parameters + * + * @var int + */ + private $logFacility; + + /** + * The minimum loglevel at which this logger will be triggered + * @var int + */ + private $logLevel; + + /** + * A error message of the current operation + * @var string + */ + private $errorMessage; + + /** + * {@inheritdoc} + * @param string $level The minimum loglevel at which this logger will be triggered + * @param int $logOpts Indicates what logging options will be used when generating a log message + * @param int $logFacility Used to specify what type of program is logging the message + * + * @throws \Exception + */ + public function __construct($channel, Introspection $introspection, $level = LogLevel::NOTICE, $logOpts = LOG_PID, $logFacility = LOG_USER) + { + parent::__construct($channel, $introspection); + $this->logOpts = $logOpts; + $this->logFacility = $logFacility; + $this->logLevel = $this->mapLevelToPriority($level); + $this->introspection->addClasses(array(self::class)); + } + + /** + * Adds a new entry to the syslog + * + * @param int $level + * @param string $message + * @param array $context + * + * @throws InternalServerErrorException if the syslog isn't available + */ + protected function addEntry($level, $message, $context = []) + { + $logLevel = $this->mapLevelToPriority($level); + + if ($logLevel > $this->logLevel) { + return; + } + + $formattedLog = $this->formatLog($logLevel, $message, $context); + $this->write($logLevel, $formattedLog); + } + + /** + * Maps the LogLevel (@see LogLevel ) to a SysLog priority (@see http://php.net/manual/en/function.syslog.php#refsect1-function.syslog-parameters ) + * + * @param string $level A LogLevel + * + * @return int The SysLog priority + * + * @throws \Psr\Log\InvalidArgumentException If the loglevel isn't valid + */ + public function mapLevelToPriority($level) + { + if (!array_key_exists($level, $this->logLevels)) { + throw new \InvalidArgumentException(sprintf('The level "%s" is not valid.', $level)); + } + + return $this->logLevels[$level]; + } + + /** + * Closes the Syslog + */ + public function close() + { + closelog(); + } + + /** + * Writes a message to the syslog + * @see http://php.net/manual/en/function.syslog.php#refsect1-function.syslog-parameters + * + * @param int $priority The Priority + * @param string $message The message of the log + * + * @throws InternalServerErrorException if syslog cannot be used + */ + private function write($priority, $message) + { + set_error_handler([$this, 'customErrorHandler']); + $opened = openlog(self::IDENT, $this->logOpts, $this->logFacility); + restore_error_handler(); + + if (!$opened) { + throw new \UnexpectedValueException(sprintf('Can\'t open syslog for ident "%s" and facility "%s": ' . $this->errorMessage, $this->channel, $this->logFacility)); + } + + $this->syslogWrapper($priority, $message); + } + + /** + * Formats a log record for the syslog output + * + * @param int $level The loglevel/priority + * @param string $message The message + * @param array $context The context of this call + * + * @return string the formatted syslog output + */ + private function formatLog($level, $message, $context = []) + { + $record = $this->introspection->getRecord(); + $record = array_merge($record, ['uid' => $this->logUid]); + $logMessage = ''; + + $logMessage .= $this->channel . ' '; + $logMessage .= '[' . $this->logToString[$level] . ']: '; + $logMessage .= $this->psrInterpolate($message, $context) . ' '; + $logMessage .= @json_encode($context) . ' - '; + $logMessage .= @json_encode($record); + + return $logMessage; + } + + private function customErrorHandler($code, $msg) + { + $this->errorMessage = preg_replace('{^(fopen|mkdir)\(.*?\): }', '', $msg); + } + + /** + * A syslog wrapper to make syslog functionality testable + * + * @param int $level The syslog priority + * @param string $entry The message to send to the syslog function + */ + protected function syslogWrapper($level, $entry) + { + set_error_handler([$this, 'customErrorHandler']); + $written = syslog($level, $entry); + restore_error_handler(); + + if (!$written) { + throw new \UnexpectedValueException(sprintf('Can\'t write into syslog for ident "%s" and facility "%s": ' . $this->errorMessage, $this->channel, $this->logFacility)); + } + } +} diff --git a/src/Util/Logger/VoidLogger.php b/src/Util/Logger/VoidLogger.php new file mode 100644 index 000000000..16cd10da0 --- /dev/null +++ b/src/Util/Logger/VoidLogger.php @@ -0,0 +1,140 @@ +getBody(); } @@ -48,26 +48,27 @@ class Network * * @brief Curl wrapper with array of return values. * @param string $url URL to fetch - * @param boolean $binary default false + * @param bool $binary default false * TRUE if asked to return binary results (file download) - * @param integer $redirects The recursion counter for internal use - default 0 - * @param integer $timeout Timeout in seconds, default system config value or 60 seconds + * @param int $timeout Timeout in seconds, default system config value or 60 seconds * @param string $accept_content supply Accept: header with 'accept_content' as the value * @param string $cookiejar Path to cookie jar file + * @param int $redirects The recursion counter for internal use - default 0 * * @return CurlResult With all relevant information, 'body' contains the actual fetched content. * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function fetchUrlFull($url, $binary = false, &$redirects = 0, $timeout = 0, $accept_content = null, $cookiejar = '') + public static function fetchUrlFull(string $url, bool $binary = false, int $timeout = 0, string $accept_content = '', string $cookiejar = '', int &$redirects = 0) { return self::curl( $url, $binary, - $redirects, - ['timeout'=>$timeout, - 'accept_content'=>$accept_content, - 'cookiejar'=>$cookiejar - ] + [ + 'timeout' => $timeout, + 'accept_content' => $accept_content, + 'cookiejar' => $cookiejar + ], + $redirects ); } @@ -75,9 +76,8 @@ class Network * @brief fetches an URL. * * @param string $url URL to fetch - * @param boolean $binary default false + * @param bool $binary default false * TRUE if asked to return binary results (file download) - * @param int $redirects The recursion counter for internal use - default 0 * @param array $opts (optional parameters) assoziative array with: * 'accept_content' => supply Accept: header with 'accept_content' as the value * 'timeout' => int Timeout in seconds, default system config value or 60 seconds @@ -86,11 +86,12 @@ class Network * 'nobody' => only return the header * 'cookiejar' => path to cookie jar file * 'header' => header array + * @param int $redirects The recursion counter for internal use - default 0 * * @return CurlResult * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function curl($url, $binary = false, &$redirects = 0, $opts = []) + public static function curl(string $url, bool $binary = false, array $opts = [], int &$redirects = 0) { $stamp1 = microtime(true); @@ -227,7 +228,7 @@ class Network $redirects++; Logger::log('curl: redirect ' . $url . ' to ' . $curlResponse->getRedirectUrl()); @curl_close($ch); - return self::curl($curlResponse->getRedirectUrl(), $binary, $redirects, $opts); + return self::curl($curlResponse->getRedirectUrl(), $binary, $opts, $redirects); } @curl_close($ch); @@ -242,14 +243,14 @@ class Network * * @param string $url URL to post * @param mixed $params array of POST variables - * @param string $headers HTTP headers - * @param integer $redirects Recursion counter for internal use - default = 0 - * @param integer $timeout The timeout in seconds, default system config value or 60 seconds + * @param array $headers HTTP headers + * @param int $redirects Recursion counter for internal use - default = 0 + * @param int $timeout The timeout in seconds, default system config value or 60 seconds * * @return CurlResult The content * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function post($url, $params, $headers = null, &$redirects = 0, $timeout = 0) + public static function post(string $url, $params, array $headers = [], int $timeout = 0, int &$redirects = 0) { $stamp1 = microtime(true); @@ -285,7 +286,7 @@ class Network } if (defined('LIGHTTPD')) { - if (!is_array($headers)) { + if (empty($headers)) { $headers = ['Expect:']; } else { if (!in_array('Expect:', $headers)) { @@ -294,7 +295,7 @@ class Network } } - if ($headers) { + if (!empty($headers)) { curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); } @@ -351,7 +352,7 @@ class Network * @return string|boolean The actual working URL, false else * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function isUrlValid($url) + public static function isUrlValid(string $url) { if (Config::get('system', 'disable_url_validation')) { return $url; @@ -381,9 +382,8 @@ class Network * * @param string $addr The email address * @return boolean True if it's a valid email address, false if it's not - * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function isEmailDomainValid($addr) + public static function isEmailDomainValid(string $addr) { if (Config::get('system', 'disable_email_validation')) { return true; @@ -413,9 +413,8 @@ class Network * * @param string $url URL which get tested * @return boolean True if url is allowed otherwise return false - * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function isUrlAllowed($url) + public static function isUrlAllowed(string $url) { $h = @parse_url($url); @@ -460,7 +459,7 @@ class Network * * @return boolean */ - public static function isUrlBlocked($url) + public static function isUrlBlocked(string $url) { $host = @parse_url($url, PHP_URL_HOST); if (!$host) { @@ -491,7 +490,7 @@ class Network * or if allowed list is not configured * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function isEmailDomainAllowed($email) + public static function isEmailDomainAllowed(string $email) { $domain = strtolower(substr($email, strpos($email, '@') + 1)); if (!$domain) { @@ -516,7 +515,7 @@ class Network * @param array $domain_list * @return boolean */ - public static function isDomainAllowed($domain, array $domain_list) + public static function isDomainAllowed(string $domain, array $domain_list) { $found = false; @@ -531,7 +530,7 @@ class Network return $found; } - public static function lookupAvatarByEmail($email) + public static function lookupAvatarByEmail(string $email) { $avatar['size'] = 300; $avatar['email'] = $email; @@ -554,7 +553,7 @@ class Network * @param string $url Any user-submitted URL that may contain tracking params * @return string The same URL stripped of tracking parameters */ - public static function stripTrackingQueryParams($url) + public static function stripTrackingQueryParams(string $url) { $urldata = parse_url($url); if (!empty($urldata["query"])) { @@ -613,7 +612,7 @@ class Network * @return string A canonical URL * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function finalUrl($url, $depth = 1, $fetchbody = false) + public static function finalUrl(string $url, int $depth = 1, bool $fetchbody = false) { $a = \get_app(); @@ -724,7 +723,7 @@ class Network * @param string $url2 * @return string The matching part */ - public static function getUrlMatch($url1, $url2) + public static function getUrlMatch(string $url1, string $url2) { if (($url1 == "") || ($url2 == "")) { return ""; @@ -812,7 +811,7 @@ class Network * * @return string The glued URL */ - public static function unparseURL($parsed) + public static function unparseURL(array $parsed) { $get = function ($key) use ($parsed) { return isset($parsed[$key]) ? $parsed[$key] : null; @@ -835,4 +834,28 @@ class Network (strlen($query) ? "?".$query : '') . (strlen($fragment) ? "#".$fragment : ''); } + + + /** + * Switch the scheme of an url between http and https + * + * @param string $url URL + * + * @return string switched URL + */ + public static function switchScheme(string $url) + { + $scheme = parse_url($url, PHP_URL_SCHEME); + if (empty($scheme)) { + return $url; + } + + if ($scheme === 'http') { + $url = str_replace('http://', 'https://', $url); + } elseif ($scheme === 'https') { + $url = str_replace('https://', 'http://', $url); + } + + return $url; + } } diff --git a/src/Util/Security.php b/src/Util/Security.php index d1e668e0d..1c934d6fe 100644 --- a/src/Util/Security.php +++ b/src/Util/Security.php @@ -120,9 +120,18 @@ class Security extends BaseObject */ if (!$remote_verified) { - if (DBA::exists('contact', ['id' => $remote_user, 'uid' => $owner_id, 'blocked' => false])) { + $cid = 0; + + foreach (\Friendica\Core\Session::get('remote', []) as $visitor) { + if ($visitor['uid'] == $owner_id) { + $cid = $visitor['cid']; + break; + } + } + + if ($cid && DBA::exists('contact', ['id' => $cid, 'uid' => $owner_id, 'blocked' => false])) { $remote_verified = true; - $groups = Group::getIdsByContactId($remote_user); + $groups = Group::getIdsByContactId($cid); } } @@ -140,9 +149,9 @@ class Security extends BaseObject AND ( allow_cid REGEXP '<%d>' OR allow_gid REGEXP '%s' OR ( allow_cid = '' AND allow_gid = '') ) ) ", - intval($remote_user), + intval($cid), DBA::escape($gs), - intval($remote_user), + intval($cid), DBA::escape($gs) ); } diff --git a/src/Util/Strings.php b/src/Util/Strings.php index d6583b9c6..88dd1d39f 100644 --- a/src/Util/Strings.php +++ b/src/Util/Strings.php @@ -31,6 +31,18 @@ class Strings return $return; } + /** + * Checks, if the given string is a valid hexadecimal code + * + * @param string $hexCode + * + * @return bool + */ + public static function isHex($hexCode) + { + return !empty($hexCode) ? @preg_match("/^[a-f0-9]{2,}$/i", $hexCode) && !(strlen($hexCode) & 1) : false; + } + /** * @brief This is our primary input filter. * @@ -355,24 +367,40 @@ class Strings */ public static function autoLinkRegEx() { - return '@(?xi) + return '@ (??«»“”‘’.] # Domain can\'t start with a . - [^/\s`!()\[\]{};:\'",<>?«»“”‘’]+ # Domain can\'t end with a . + [^/\s\xA0`!()\[\]{};:\'",<>?«»“”‘’.] # Domain can\'t start with a . + [^/\s\xA0`!()\[\]{};:\'",<>?«»“”‘’]+ # Domain can\'t end with a . \. - [^/\s`!()\[\]{};:\'".,<>?«»“”‘’]+/? # Followed by a slash + [^/\s\xA0`!()\[\]{};:\'".,<>?«»“”‘’]+/? # Followed by a slash ) (?: # One or more: - [^\s()<>]+ # Run of non-space, non-()<> + [^\s\xA0()<>]+ # Run of non-space, non-()<> | # or - \(([^\s()<>]+|(\([^\s()<>]+\)))*\) # balanced parens, up to 2 levels + \(([^\s\xA0()<>]+|(\([^\s()<>]+\)))*\) # balanced parens, up to 2 levels | # or - [^\s`!()\[\]{};:\'".,<>?«»“”‘’] # not a space or one of these punct chars + [^\s\xA0`!()\[\]{};:\'".,<>?«»“”‘’] # not a space or one of these punct chars )* -)@'; +)@xiu'; + } + + /** + * Ensures a single path item doesn't contain any path-traversing characters + * + * @see https://stackoverflow.com/a/46097713 + * @param string $pathItem + * @return string + */ + public static function sanitizeFilePathItem($pathItem) + { + $pathItem = str_replace('/', '_', $pathItem); + $pathItem = str_replace('\\', '_', $pathItem); + $pathItem = str_replace(DIRECTORY_SEPARATOR, '_', $pathItem); // In case it does not equal the standard values + + return $pathItem; } } diff --git a/src/Util/XML.php b/src/Util/XML.php index 4dd6d84ec..476ecb4b0 100644 --- a/src/Util/XML.php +++ b/src/Util/XML.php @@ -4,8 +4,8 @@ */ namespace Friendica\Util; -use Friendica\Core\Logger; use DOMXPath; +use Friendica\Core\Logger; use Friendica\Core\System; use SimpleXMLElement; @@ -465,12 +465,13 @@ class XML /** * escape text ($str) for XML transport + * * @param string $str * @return string Escaped text. */ public static function escape($str) { - $buffer = htmlspecialchars($str, ENT_QUOTES, "UTF-8"); + $buffer = htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); $buffer = trim($buffer); return $buffer; @@ -478,6 +479,7 @@ class XML /** * undo an escape + * * @param string $s xml escaped text * @return string unescaped text */ @@ -489,16 +491,18 @@ class XML /** * apply escape() to all values of array $val, recursively + * * @param array $val - * @return array + * @return array|string */ public static function arrayEscape($val) { if (is_bool($val)) { - return $val?"true":"false"; + return $val ? 'true' : 'false'; } elseif (is_array($val)) { return array_map('XML::arrayEscape', $val); } + return self::escape((string) $val); } } diff --git a/src/Worker/APDelivery.php b/src/Worker/APDelivery.php index 2048b97d0..fcd4a7672 100644 --- a/src/Worker/APDelivery.php +++ b/src/Worker/APDelivery.php @@ -30,9 +30,16 @@ class APDelivery extends BaseObject $success = true; if ($cmd == Delivery::MAIL) { + $data = ActivityPub\Transmitter::createActivityFromMail($target_id); + if (!empty($data)) { + $success = HTTPSignature::transmit($data, $inbox, $uid); + } } elseif ($cmd == Delivery::SUGGESTION) { $success = ActivityPub\Transmitter::sendContactSuggestion($uid, $inbox, $target_id); } elseif ($cmd == Delivery::RELOCATION) { + // @todo Implementation pending + } elseif ($cmd == Delivery::POKE) { + // Implementation not planned } elseif ($cmd == Delivery::REMOVAL) { $success = ActivityPub\Transmitter::sendProfileDeletion($uid, $inbox); } elseif ($cmd == Delivery::PROFILEUPDATE) { @@ -41,7 +48,7 @@ class APDelivery extends BaseObject $data = ActivityPub\Transmitter::createCachedActivityFromItem($target_id); if (!empty($data)) { $success = HTTPSignature::transmit($data, $inbox, $uid); - if ($success && in_array($cmd, [Delivery::POST, Delivery::COMMENT])) { + if ($success && in_array($cmd, [Delivery::POST])) { ItemDeliveryData::incrementQueueDone($target_id); } } diff --git a/src/Worker/Cron.php b/src/Worker/Cron.php index 4e49dede8..f7377a6e7 100644 --- a/src/Worker/Cron.php +++ b/src/Worker/Cron.php @@ -30,9 +30,6 @@ class Cron $last = Config::get('system', 'last_cron'); $poll_interval = intval(Config::get('system', 'cron_interval')); - if (! $poll_interval) { - $poll_interval = 10; - } if ($last) { $next = $last + ($poll_interval * 60); @@ -47,9 +44,6 @@ class Cron // Fork the cron jobs in separate parts to avoid problems when one of them is crashing Hook::fork($a->queue['priority'], "cron"); - // run queue delivery process in the background - Worker::add(PRIORITY_NEGLIGIBLE, "Queue"); - // run the process to discover global contacts in the background Worker::add(PRIORITY_LOW, "DiscoverPoCo"); @@ -183,9 +177,10 @@ class Cron FROM `user` STRAIGHT_JOIN `contact` ON `contact`.`uid` = `user`.`uid` AND `contact`.`poll` != '' - AND `contact`.`network` IN ('%s', '%s', '%s', '%s', '%s') $sql_extra + AND `contact`.`network` IN ('%s', '%s', '%s', '%s', '%s', '%s') $sql_extra AND NOT `contact`.`self` AND NOT `contact`.`blocked` WHERE NOT `user`.`account_expired` AND NOT `user`.`account_removed` $abandon_sql", + DBA::escape(Protocol::ACTIVITYPUB), DBA::escape(Protocol::DFRN), DBA::escape(Protocol::OSTATUS), DBA::escape(Protocol::DIASPORA), @@ -219,8 +214,8 @@ class Cron $contact['priority'] = (!is_null($poll_interval) ? intval($poll_interval) : 3); } - // Check Diaspora contacts or followers once a week - if (($contact["network"] == Protocol::DIASPORA) || ($contact["rel"] == Contact::FOLLOWER)) { + // Check ActivityPub and Diaspora contacts or followers once a week + if (in_array($contact["network"], [Protocol::ACTIVITYPUB, Protocol::DIASPORA]) || ($contact["rel"] == Contact::FOLLOWER)) { $contact['priority'] = 4; } diff --git a/src/Worker/CronJobs.php b/src/Worker/CronJobs.php index 5ebe91cf4..3a2c330fe 100644 --- a/src/Worker/CronJobs.php +++ b/src/Worker/CronJobs.php @@ -10,18 +10,20 @@ use Friendica\Core\Cache; use Friendica\Core\Config; use Friendica\Core\Logger; use Friendica\Core\Protocol; +use Friendica\Core\StorageManager; +use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\Database\PostUpdate; use Friendica\Model\Contact; use Friendica\Model\GContact; +use Friendica\Model\Nodeinfo; use Friendica\Model\Photo; use Friendica\Model\User; use Friendica\Network\Probe; use Friendica\Protocol\PortableContact; +use Friendica\Util\Network; use Friendica\Util\Proxy as ProxyUtils; -require_once 'mod/nodeinfo.php'; - class CronJobs { public static function execute($command = '') @@ -41,7 +43,14 @@ class CronJobs break; case 'nodeinfo': - nodeinfo_cron(); + Logger::info('cron_start'); + Nodeinfo::update(); + // Now trying to register + $url = 'http://the-federation.info/register/' . $a->getHostName(); + Logger::debug('Check registering url', ['url' => $url]); + $ret = Network::fetchUrl($url); + Logger::debug('Check registering answer', ['answer' => $ret]); + Logger::info('cron_end'); break; case 'expire_and_remove_users': @@ -68,8 +77,12 @@ class CronJobs self::repairDatabase(); break; + case 'move_storage': + self::moveStorage(); + break; + default: - Logger::log("Xronjob " . $command . " is unknown.", Logger::DEBUG); + Logger::log("Cronjob " . $command . " is unknown.", Logger::DEBUG); } return; @@ -289,4 +302,20 @@ class CronJobs /// - remove children when parent got lost /// - set contact-id in item when not present } + + /** + * Moves up to 5000 attachments and photos to the current storage system. + * Self-replicates if legacy items have been found and moved. + * + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + */ + private static function moveStorage() + { + $current = StorageManager::getBackend(); + $moved = StorageManager::move($current); + + if ($moved) { + Worker::add(PRIORITY_LOW, "CronJobs", "move_storage"); + } + } } diff --git a/src/Worker/DBUpdate.php b/src/Worker/DBUpdate.php index 05bace146..001df25a8 100644 --- a/src/Worker/DBUpdate.php +++ b/src/Worker/DBUpdate.php @@ -6,12 +6,16 @@ namespace Friendica\Worker; use Friendica\BaseObject; +use Friendica\Core\Config; use Friendica\Core\Update; class DBUpdate extends BaseObject { public static function execute() { - Update::run(self::getApp()->getBasePath()); + // Just in case the last update wasn't failed + if (Config::get('system', 'update', Update::SUCCESS, true) != Update::FAILED) { + Update::run(self::getApp()->getBasePath()); + } } } diff --git a/src/Worker/Delivery.php b/src/Worker/Delivery.php index 917a83ccb..97a096851 100644 --- a/src/Worker/Delivery.php +++ b/src/Worker/Delivery.php @@ -17,6 +17,7 @@ use Friendica\Protocol\Diaspora; use Friendica\Protocol\Email; use Friendica\Util\Strings; use Friendica\Util\Network; +use Friendica\Core\Worker; class Delivery extends BaseObject { @@ -25,7 +26,8 @@ class Delivery extends BaseObject const RELOCATION = 'relocate'; const DELETION = 'drop'; const POST = 'wall-new'; - const COMMENT = 'comment-new'; + const POKE = 'poke'; + const UPLINK = 'uplink'; const REMOVAL = 'removeme'; const PROFILEUPDATE = 'profileupdate'; @@ -177,18 +179,10 @@ class Delivery extends BaseObject case Protocol::DFRN: self::deliverDFRN($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup); - - if (in_array($cmd, [Delivery::POST, Delivery::COMMENT])) { - Model\ItemDeliveryData::incrementQueueDone($target_id); - } break; case Protocol::DIASPORA: self::deliverDiaspora($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup); - - if (in_array($cmd, [Delivery::POST, Delivery::COMMENT])) { - Model\ItemDeliveryData::incrementQueueDone($target_id); - } break; case Protocol::OSTATUS: @@ -290,6 +284,11 @@ class Delivery extends BaseObject } DFRN::import($atom, $target_importer); + + if (in_array($cmd, [Delivery::POST, Delivery::POKE])) { + Model\ItemDeliveryData::incrementQueueDone($target_item['id']); + } + return; } @@ -318,23 +317,21 @@ class Delivery extends BaseObject $deliver_status = DFRN::deliver($owner, $contact, $atom, false, true); } - Logger::log('Delivery to ' . $contact['url'] . ' with guid ' . defaults($target_item, 'guid', $target_item['id']) . ' returns ' . $deliver_status); - - if ($deliver_status < 0) { - Logger::log('Delivery failed: queuing message ' . defaults($target_item, 'guid', $target_item['id'])); - Model\Queue::add($contact['id'], Protocol::DFRN, $atom, false, $target_item['guid']); - } + Logger::info('DFRN Delivery', ['cmd' => $cmd, 'url' => $contact['url'], 'guid' => defaults($target_item, 'guid', $target_item['id']), 'return' => $deliver_status]); if (($deliver_status >= 200) && ($deliver_status <= 299)) { // We successfully delivered a message, the contact is alive Model\Contact::unmarkForArchival($contact); + + if (in_array($cmd, [Delivery::POST, Delivery::POKE])) { + Model\ItemDeliveryData::incrementQueueDone($target_item['id']); + } } else { // The message could not be delivered. We mark the contact as "dead" Model\Contact::markForArchival($contact); - // Transmit via Diaspora when all other methods (legacy DFRN and new one) are failing. - // This is a fallback for systems that don't know the new methods. - self::deliverDiaspora($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup); + Logger::info('Delivery failed: defer message', ['id' => defaults($target_item, 'guid', $target_item['id'])]); + Worker::defer(); } } @@ -379,32 +376,49 @@ class Delivery extends BaseObject if (!$contact['pubkey'] && !$public_message) { return; } + if ($cmd == self::RELOCATION) { - Diaspora::sendAccountMigration($owner, $contact, $owner['uid']); - return; + $deliver_status = Diaspora::sendAccountMigration($owner, $contact, $owner['uid']); } elseif ($target_item['deleted'] && (($target_item['uri'] === $target_item['parent-uri']) || $followup)) { // top-level retraction Logger::log('diaspora retract: ' . $loc); - Diaspora::sendRetraction($target_item, $owner, $contact, $public_message); - return; + $deliver_status = Diaspora::sendRetraction($target_item, $owner, $contact, $public_message); } elseif ($followup) { // send comments and likes to owner to relay Logger::log('diaspora followup: ' . $loc); - Diaspora::sendFollowup($target_item, $owner, $contact, $public_message); - return; + $deliver_status = Diaspora::sendFollowup($target_item, $owner, $contact, $public_message); } elseif ($target_item['uri'] !== $target_item['parent-uri']) { // we are the relay - send comments, likes and relayable_retractions to our conversants Logger::log('diaspora relay: ' . $loc); - Diaspora::sendRelay($target_item, $owner, $contact, $public_message); - return; + $deliver_status = Diaspora::sendRelay($target_item, $owner, $contact, $public_message); } elseif ($top_level && !$walltowall) { // currently no workable solution for sending walltowall Logger::log('diaspora status: ' . $loc); - Diaspora::sendStatus($target_item, $owner, $contact, $public_message); + $deliver_status = Diaspora::sendStatus($target_item, $owner, $contact, $public_message); + } else { + Logger::log('Unknown mode ' . $cmd . ' for ' . $loc); return; } - Logger::log('Unknown mode ' . $cmd . ' for ' . $loc); + if (($deliver_status >= 200) && ($deliver_status <= 299)) { + // We successfully delivered a message, the contact is alive + Model\Contact::unmarkForArchival($contact); + + if (in_array($cmd, [Delivery::POST, Delivery::POKE])) { + Model\ItemDeliveryData::incrementQueueDone($target_item['id']); + } + } else { + // The message could not be delivered. We mark the contact as "dead" + Model\Contact::markForArchival($contact); + + if (empty($contact['contact-type']) || ($contact['contact-type'] != Model\Contact::TYPE_RELAY)) { + Logger::info('Delivery failed: defer message', ['id' => defaults($target_item, 'guid', $target_item['id'])]); + // defer message for redelivery + Worker::defer(); + } elseif (in_array($cmd, [Delivery::POST, Delivery::POKE])) { + Model\ItemDeliveryData::incrementQueueDone($target_item['id']); + } + } } /** @@ -429,7 +443,7 @@ class Delivery extends BaseObject return; } - if (!in_array($cmd, [self::POST, self::COMMENT])) { + if (!in_array($cmd, [self::POST, self::POKE])) { return; } diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index baae33f7e..36c6e92a0 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -32,23 +32,7 @@ require_once 'include/items.php'; * * Worker::add(PRIORITY_HIGH, "Notifier", COMMAND, ITEM_ID); * - * where COMMAND is one of the following: - * - * activity (in diaspora.php, dfrn_confirm.php, profiles.php) - * comment-import (in diaspora.php, items.php) - * comment-new (in item.php) - * drop (in diaspora.php, items.php, photos.php) - * edit_post (in item.php) - * event (in events.php) - * like (in like.php, poke.php) - * mail (in message.php) - * suggest (in fsuggest.php) - * tag (in photos.php, poke.php, tagger.php) - * tgroup (in items.php) - * wall-new (in photos.php, item.php) - * removeme (in Contact.php) - * relocate (in uimport.php) - * + * where COMMAND is one of the constants that are defined in Worker/Delivery.php * and ITEM_ID is the id of the item in the database that needs to be sent to others. */ @@ -76,6 +60,14 @@ class Notifier } $uid = $message['uid']; $recipients[] = $message['contact-id']; + + $mail = ActivityPub\Transmitter::ItemArrayFromMail($target_id); + $inboxes = ActivityPub\Transmitter::fetchTargetInboxes($mail, $uid, true); + foreach ($inboxes as $inbox) { + Logger::info('Delivery via ActivityPub', ['cmd' => $cmd, 'id' => $target_id, 'inbox' => $inbox]); + Worker::add(['priority' => PRIORITY_HIGH, 'created' => $a->queue['created'], 'dont_fork' => true], + 'APDelivery', $cmd, $target_id, $inbox, $uid); + } } elseif ($cmd == Delivery::SUGGESTION) { $suggest = DBA::selectFirst('fsuggest', ['uid', 'cid'], ['id' => $target_id]); if (!DBA::isResult($suggest)) { @@ -89,7 +81,7 @@ class Notifier $uid = $target_id; $condition = ['uid' => $target_id, 'self' => false, 'network' => [Protocol::DFRN, Protocol::DIASPORA]]; - $delivery_contacts_stmt = DBA::select('contact', ['id', 'url', 'network', 'batch'], $condition); + $delivery_contacts_stmt = DBA::select('contact', ['id', 'url', 'network', 'protocol', 'batch'], $condition); } else { // find ancestors $condition = ['id' => $target_id, 'visible' => true, 'moderated' => false]; @@ -191,7 +183,7 @@ class Notifier } - if (($cmd === 'uplink') && (intval($parent['forum_mode']) == 1) && !$top_level) { + if (($cmd === Delivery::UPLINK) && (intval($parent['forum_mode']) == 1) && !$top_level) { $relay_to_owner = true; } @@ -279,8 +271,8 @@ class Notifier // if our parent is a public forum (forum_mode == 1), uplink to the origional author causing // a delivery fork. private groups (forum_mode == 2) do not uplink - if ((intval($parent['forum_mode']) == 1) && !$top_level && ($cmd !== 'uplink')) { - Worker::add($a->queue['priority'], 'Notifier', 'uplink', $target_id); + if ((intval($parent['forum_mode']) == 1) && !$top_level && ($cmd !== Delivery::UPLINK)) { + Worker::add($a->queue['priority'], 'Notifier', Delivery::UPLINK, $target_id); } foreach ($items as $item) { @@ -374,7 +366,7 @@ class Notifier if (!empty($networks)) { $condition['network'] = $networks; } - $delivery_contacts_stmt = DBA::select('contact', ['id', 'url', 'network', 'batch'], $condition); + $delivery_contacts_stmt = DBA::select('contact', ['id', 'url', 'network', 'protocol', 'batch'], $condition); } $conversants = []; @@ -388,10 +380,11 @@ class Notifier $relay_list_stmt = DBA::p( "SELECT - `batch`, - ANY_VALUE(`id`) AS `id`, - ANY_VALUE(`name`) AS `name`, - ANY_VALUE(`network`) AS `network` + `batch`, + ANY_VALUE(`id`) AS `id`, + ANY_VALUE(`name`) AS `name`, + ANY_VALUE(`network`) AS `network`, + ANY_VALUE(`protocol`) AS `protocol` FROM `contact` WHERE `network` = ? AND `batch` != '' @@ -421,7 +414,7 @@ class Notifier $condition = ['network' => Protocol::DFRN, 'uid' => $owner['uid'], 'blocked' => false, 'pending' => false, 'archive' => false, 'rel' => [Contact::FOLLOWER, Contact::FRIEND]]; - $r2 = DBA::toArray(DBA::select('contact', ['id', 'url', 'name', 'network'], $condition)); + $r2 = DBA::toArray(DBA::select('contact', ['id', 'url', 'name', 'network', 'protocol'], $condition)); $r = array_merge($r2, $relay_list); @@ -432,6 +425,12 @@ class Notifier continue; } + if (in_array($rr['network'], [Protocol::DFRN, Protocol::DIASPORA]) && ($rr['protocol'] == Protocol::ACTIVITYPUB) && + !in_array($cmd, [Delivery::SUGGESTION, Delivery::REMOVAL, Delivery::RELOCATION, Delivery::POKE])) { + Logger::info('Contact is Friendica AP, so skipping delivery via legacy DFRN', ['url' => $rr['url']]); + continue; + } + if (Config::get('debug', 'total_ap_delivery') && !empty($rr['url']) && ($rr['network'] == Protocol::DFRN) && !empty(APContact::getByURL($rr['url'], false))) { Logger::log('Skipping contact ' . $rr['url'] . ' since it will be delivered via AP', Logger::DEBUG); continue; @@ -466,6 +465,12 @@ class Notifier continue; } + if (in_array($contact['network'], [Protocol::DFRN, Protocol::DIASPORA]) && ($contact['protocol'] == Protocol::ACTIVITYPUB) && + !in_array($cmd, [Delivery::SUGGESTION, Delivery::REMOVAL, Delivery::RELOCATION, Delivery::POKE])) { + Logger::info('Contact is Friendica AP, so skipping delivery via legacy DFRN', ['url' => $contact['url']]); + continue; + } + if (Config::get('debug', 'total_ap_delivery') && ($contact['network'] == Protocol::DFRN) && !empty(APContact::getByURL($contact['url'], false))) { Logger::log('Skipping contact ' . $contact['url'] . ' since it will be delivered via AP', Logger::DEBUG); continue; @@ -524,13 +529,19 @@ class Notifier if (!empty($target_item)) { Logger::log('Calling hooks for ' . $cmd . ' ' . $target_id, Logger::DEBUG); - if (in_array($cmd, [Delivery::POST, Delivery::COMMENT])) { - ItemDeliveryData::update($target_item['id'], ['queue_count' => $delivery_queue_count]); - } - Hook::fork($a->queue['priority'], 'notifier_normal', $target_item); Hook::callAll('notifier_end', $target_item); + + // Workaround for pure connector posts + if ($delivery_queue_count == 0) { + ItemDeliveryData::incrementQueueDone($target_item['id']); + $delivery_queue_count = 1; + } + + if (in_array($cmd, [Delivery::POST, Delivery::POKE])) { + ItemDeliveryData::update($target_item['id'], ['queue_count' => $delivery_queue_count]); + } } return; @@ -550,7 +561,7 @@ class Notifier */ private static function isRemovalActivity($cmd, $owner, $network) { - return ($cmd == Delivery::DELETION) && $owner['account_removed'] && in_array($contact['network'], [Protocol::ACTIVITYPUB, Protocol::DIASPORA]); + return ($cmd == Delivery::DELETION) && $owner['account_removed'] && in_array($network, [Protocol::ACTIVITYPUB, Protocol::DIASPORA]); } /** @@ -580,7 +591,7 @@ class Notifier $inboxes = ActivityPub\Transmitter::fetchTargetInboxesforUser(0); foreach ($inboxes as $inbox) { - Logger::log('Account removal for user ' . $self_user_id . ' to ' . $inbox .' via ActivityPub', Logger::DEBUG); + Logger::info('Account removal via ActivityPub', ['uid' => $self_user_id, 'inbox' => $inbox]); Worker::add(['priority' => PRIORITY_NEGLIGIBLE, 'created' => $created, 'dont_fork' => true], 'APDelivery', Delivery::REMOVAL, '', $inbox, $self_user_id); } @@ -629,7 +640,7 @@ class Notifier ActivityPub\Transmitter::createCachedActivityFromItem($target_item['id'], true); foreach ($inboxes as $inbox) { - Logger::log('Deliver ' . $target_item['id'] .' to ' . $inbox .' via ActivityPub', Logger::DEBUG); + Logger::info('Delivery via ActivityPub', ['cmd' => $cmd, 'id' => $target_item['id'], 'inbox' => $inbox]); Worker::add(['priority' => $priority, 'created' => $created, 'dont_fork' => true], 'APDelivery', $cmd, $target_item['id'], $inbox, $uid); diff --git a/src/Worker/OnePoll.php b/src/Worker/OnePoll.php index 8523ce2e0..a605ee92e 100644 --- a/src/Worker/OnePoll.php +++ b/src/Worker/OnePoll.php @@ -48,20 +48,27 @@ class OnePoll return; } + if (($contact['network'] == Protocol::DFRN) && !Contact::isLegacyDFRNContact($contact)) { + $protocol = Protocol::ACTIVITYPUB; + } else { + $protocol = $contact['network']; + } + $importer_uid = $contact['uid']; // Possibly switch the remote contact to AP - if ($contact['network'] === Protocol::OSTATUS) { + if ($protocol === Protocol::OSTATUS) { ActivityPub\Receiver::switchContact($contact['id'], $importer_uid, $contact['url']); $contact = DBA::selectFirst('contact', [], ['id' => $contact_id]); } + $updated = DateTimeFormat::utcNow(); + // These three networks can be able to speak AP, so we are trying to fetch AP profile data here - if (in_array($contact['network'], [Protocol::ACTIVITYPUB, Protocol::DIASPORA, Protocol::DFRN])) { + if (in_array($protocol, [Protocol::ACTIVITYPUB, Protocol::DIASPORA, Protocol::DFRN])) { $apcontact = APContact::getByURL($contact['url'], true); - $updated = DateTimeFormat::utcNow(); - if (($contact['network'] === Protocol::ACTIVITYPUB) && empty($apcontact)) { + if (($protocol === Protocol::ACTIVITYPUB) && empty($apcontact)) { self::updateContact($contact, ['last-update' => $updated, 'failure_update' => $updated]); Contact::markForArchival($contact); Logger::log('Contact archived'); @@ -74,9 +81,8 @@ class OnePoll } // Diaspora users, archived users and followers are only checked if they still exist. - if (($contact['network'] != Protocol::ACTIVITYPUB) && ($contact['archive'] || ($contact["network"] == Protocol::DIASPORA) || ($contact["rel"] == Contact::FOLLOWER))) { + if (($protocol != Protocol::ACTIVITYPUB) && ($contact['archive'] || ($contact["network"] == Protocol::DIASPORA) || ($contact["rel"] == Contact::FOLLOWER))) { $last_updated = PortableContact::lastUpdated($contact["url"], true); - $updated = DateTimeFormat::utcNow(); if ($last_updated) { Logger::log('Contact '.$contact['id'].' had last update on '.$last_updated, Logger::DEBUG); @@ -98,10 +104,9 @@ class OnePoll } // Update the contact entry - if (in_array($contact['network'], [Protocol::ACTIVITYPUB, Protocol::OSTATUS, Protocol::DIASPORA, Protocol::DFRN])) { - $updated = DateTimeFormat::utcNow(); + if (in_array($protocol, [Protocol::ACTIVITYPUB, Protocol::OSTATUS, Protocol::DIASPORA, Protocol::DFRN])) { // Currently we can't check every AP implementation, so we don't do it at all - if (($contact['network'] != Protocol::ACTIVITYPUB) && !PortableContact::reachable($contact['url'])) { + if (($protocol != Protocol::ACTIVITYPUB) && !PortableContact::reachable($contact['url'])) { Logger::log("Skipping probably dead contact ".$contact['url']); // set the last-update so we don't keep polling @@ -140,25 +145,25 @@ class OnePoll Logger::log("Don't poll follower"); // set the last-update so we don't keep polling - DBA::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]); + DBA::update('contact', ['last-update' => $updated], ['id' => $contact['id']]); return; } // Don't poll if polling is deactivated (But we poll feeds and mails anyway) - if (!in_array($contact['network'], [Protocol::FEED, Protocol::MAIL]) && Config::get('system', 'disable_polling')) { + if (!in_array($protocol, [Protocol::FEED, Protocol::MAIL]) && Config::get('system', 'disable_polling')) { Logger::log('Polling is disabled'); // set the last-update so we don't keep polling - DBA::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]); + DBA::update('contact', ['last-update' => $updated], ['id' => $contact['id']]); return; } // We don't poll AP contacts by now - if ($contact['network'] === Protocol::ACTIVITYPUB) { + if ($protocol === Protocol::ACTIVITYPUB) { Logger::log("Don't poll AP contact"); // set the last-update so we don't keep polling - DBA::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]); + DBA::update('contact', ['last-update' => $updated], ['id' => $contact['id']]); return; } @@ -166,7 +171,7 @@ class OnePoll Logger::log('Ignore public contacts'); // set the last-update so we don't keep polling - DBA::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]); + DBA::update('contact', ['last-update' => $updated], ['id' => $contact['id']]); return; } @@ -178,7 +183,7 @@ class OnePoll Logger::log('No self contact for user '.$importer_uid); // set the last-update so we don't keep polling - DBA::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]); + DBA::update('contact', ['last-update' => $updated], ['id' => $contact['id']]); return; } @@ -203,9 +208,9 @@ class OnePoll : DateTimeFormat::utc($contact['last-update'], DateTimeFormat::ATOM) ); - Logger::log("poll: ({$contact['network']}-{$contact['id']}) IMPORTER: {$importer['name']}, CONTACT: {$contact['name']}"); + Logger::log("poll: ({$protocol}-{$contact['id']}) IMPORTER: {$importer['name']}, CONTACT: {$contact['name']}"); - if ($contact['network'] === Protocol::DFRN) { + if ($protocol === Protocol::DFRN) { $idtosend = $orig_id = (($contact['dfrn-id']) ? $contact['dfrn-id'] : $contact['issued-id']); if (intval($contact['duplex']) && $contact['dfrn-id']) { $idtosend = '0:' . $orig_id; @@ -233,7 +238,7 @@ class OnePoll if (!$curlResult->isSuccess() && ($curlResult->getErrorNumber() == CURLE_OPERATION_TIMEDOUT)) { // set the last-update so we don't keep polling - self::updateContact($contact, ['last-update' => DateTimeFormat::utcNow()]); + self::updateContact($contact, ['last-update' => $updated]); Contact::markForArchival($contact); Logger::log('Contact archived'); return; @@ -251,7 +256,7 @@ class OnePoll Logger::log("$url appears to be dead - marking for death "); // set the last-update so we don't keep polling - $fields = ['last-update' => DateTimeFormat::utcNow(), 'failure_update' => DateTimeFormat::utcNow()]; + $fields = ['last-update' => $updated, 'failure_update' => $updated]; self::updateContact($contact, $fields); Contact::markForArchival($contact); return; @@ -260,7 +265,7 @@ class OnePoll if (!strstr($handshake_xml, '<')) { Logger::log('response from ' . $url . ' did not contain XML.'); - $fields = ['last-update' => DateTimeFormat::utcNow(), 'failure_update' => DateTimeFormat::utcNow()]; + $fields = ['last-update' => $updated, 'failure_update' => $updated]; self::updateContact($contact, $fields); Contact::markForArchival($contact); return; @@ -274,7 +279,7 @@ class OnePoll Logger::log("$url replied status 1 - marking for death "); // set the last-update so we don't keep polling - $fields = ['last-update' => DateTimeFormat::utcNow(), 'failure_update' => DateTimeFormat::utcNow()]; + $fields = ['last-update' => $updated, 'failure_update' => $updated]; self::updateContact($contact, $fields); Contact::markForArchival($contact); } elseif ($contact['term-date'] > DBA::NULL_DATETIME) { @@ -283,7 +288,7 @@ class OnePoll if ((intval($res->status) != 0) || !strlen($res->challenge) || !strlen($res->dfrn_id)) { // set the last-update so we don't keep polling - DBA::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]); + DBA::update('contact', ['last-update' => $updated], ['id' => $contact['id']]); Logger::log('Contact status is ' . $res->status); return; } @@ -326,7 +331,7 @@ class OnePoll Logger::log('ID did not decode: ' . $contact['id'] . ' orig: ' . $orig_id . ' final: ' . $final_dfrn_id); // set the last-update so we don't keep polling - DBA::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]); + DBA::update('contact', ['last-update' => $updated], ['id' => $contact['id']]); Contact::markForArchival($contact); return; } @@ -337,9 +342,9 @@ class OnePoll $xml = Network::post($contact['poll'], $postvars)->getBody(); - } elseif (($contact['network'] === Protocol::OSTATUS) - || ($contact['network'] === Protocol::DIASPORA) - || ($contact['network'] === Protocol::FEED)) { + } elseif (($protocol === Protocol::OSTATUS) + || ($protocol === Protocol::DIASPORA) + || ($protocol === Protocol::FEED)) { // Upgrading DB fields from an older Friendica version // Will only do this once per notify-enabled OStatus contact @@ -348,7 +353,7 @@ class OnePoll $stat_writeable = ((($contact['notify']) && ($contact['rel'] == Contact::FOLLOWER || $contact['rel'] == Contact::FRIEND)) ? 1 : 0); // Contacts from OStatus are always writable - if ($contact['network'] === Protocol::OSTATUS) { + if ($protocol === Protocol::OSTATUS) { $stat_writeable = 1; } @@ -360,18 +365,18 @@ class OnePoll // Are we allowed to import from this person? if ($contact['rel'] == Contact::FOLLOWER || $contact['blocked']) { // set the last-update so we don't keep polling - DBA::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]); + DBA::update('contact', ['last-update' => $updated], ['id' => $contact['id']]); Logger::log('Contact is blocked or only a follower'); return; } $cookiejar = tempnam(get_temppath(), 'cookiejar-onepoll-'); - $curlResult = Network::curl($contact['poll'], false, $redirects, ['cookiejar' => $cookiejar]); + $curlResult = Network::curl($contact['poll'], false, ['cookiejar' => $cookiejar]); unlink($cookiejar); if ($curlResult->isTimeout()) { // set the last-update so we don't keep polling - self::updateContact($contact, ['last-update' => DateTimeFormat::utcNow()]); + self::updateContact($contact, ['last-update' => $updated]); Contact::markForArchival($contact); Logger::log('Contact archived'); return; @@ -379,13 +384,13 @@ class OnePoll $xml = $curlResult->getBody(); - } elseif ($contact['network'] === Protocol::MAIL) { + } elseif ($protocol === Protocol::MAIL) { Logger::log("Mail: Fetching for ".$contact['addr'], Logger::DEBUG); $mail_disabled = ((function_exists('imap_open') && !Config::get('system', 'imap_disabled')) ? 0 : 1); if ($mail_disabled) { // set the last-update so we don't keep polling - self::updateContact($contact, ['last-update' => DateTimeFormat::utcNow()]); + self::updateContact($contact, ['last-update' => $updated]); Contact::markForArchival($contact); Logger::log('Contact archived'); return; @@ -406,7 +411,7 @@ class OnePoll unset($password); Logger::log("Mail: Connect to " . $mailconf['user']); if ($mbox) { - $fields = ['last_check' => DateTimeFormat::utcNow()]; + $fields = ['last_check' => $updated]; DBA::update('mailacct', $fields, ['id' => $mailconf['id']]); Logger::log("Mail: Connected to " . $mailconf['user']); } else { @@ -448,7 +453,7 @@ class OnePoll // Only delete when mails aren't automatically moved or deleted if (($mailconf['action'] != 1) && ($mailconf['action'] != 3)) if ($meta->deleted && ! $item['deleted']) { - $fields = ['deleted' => true, 'changed' => DateTimeFormat::utcNow()]; + $fields = ['deleted' => true, 'changed' => $updated]; Item::update($fields, ['id' => $item['id']]); } @@ -579,7 +584,7 @@ class OnePoll if ($datarray['parent-uri'] === $datarray['uri']) { $datarray['private'] = 1; } - if (($contact['network'] === Protocol::MAIL) && !PConfig::get($importer_uid, 'system', 'allow_public_email_replies')) { + if (($protocol === Protocol::MAIL) && !PConfig::get($importer_uid, 'system', 'allow_public_email_replies')) { $datarray['private'] = 1; $datarray['allow_cid'] = '<' . $contact['id'] . '>'; } @@ -622,7 +627,7 @@ class OnePoll if (!strstr($xml, '<')) { Logger::log('post_handshake: response from ' . $url . ' did not contain XML.'); - $fields = ['last-update' => DateTimeFormat::utcNow(), 'failure_update' => DateTimeFormat::utcNow()]; + $fields = ['last-update' => $updated, 'failure_update' => $updated]; self::updateContact($contact, $fields); Contact::markForArchival($contact); return; @@ -634,16 +639,16 @@ class OnePoll consume_feed($xml, $importer, $contact, $hub); // do it a second time for DFRN so that any children find their parents. - if ($contact['network'] === Protocol::DFRN) { + if ($protocol === Protocol::DFRN) { consume_feed($xml, $importer, $contact, $hub); } $hubmode = 'subscribe'; - if ($contact['network'] === Protocol::DFRN || $contact['blocked']) { + if ($protocol === Protocol::DFRN || $contact['blocked']) { $hubmode = 'unsubscribe'; } - if (($contact['network'] === Protocol::OSTATUS || $contact['network'] == Protocol::FEED) && (! $contact['hub-verify'])) { + if (($protocol === Protocol::OSTATUS || $protocol == Protocol::FEED) && (! $contact['hub-verify'])) { $hub_update = true; } @@ -651,9 +656,9 @@ class OnePoll $hub_update = true; } - Logger::log("Contact ".$contact['id']." returned hub: ".$hub." Network: ".$contact['network']." Relation: ".$contact['rel']." Update: ".$hub_update); + Logger::log("Contact ".$contact['id']." returned hub: ".$hub." Network: ".$protocol." Relation: ".$contact['rel']." Update: ".$hub_update); - if (strlen($hub) && $hub_update && (($contact['rel'] != Contact::FOLLOWER) || $contact['network'] == Protocol::FEED)) { + if (strlen($hub) && $hub_update && (($contact['rel'] != Contact::FOLLOWER) || $protocol == Protocol::FEED)) { Logger::log('hub ' . $hubmode . ' : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']); $hubs = explode(',', $hub); @@ -670,19 +675,15 @@ class OnePoll } } - $updated = DateTimeFormat::utcNow(); - self::updateContact($contact, ['last-update' => $updated, 'success_update' => $updated]); DBA::update('gcontact', ['last_contact' => $updated], ['nurl' => $contact['nurl']]); Contact::unmarkForArchival($contact); } elseif (in_array($contact["network"], [Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, Protocol::FEED])) { - $updated = DateTimeFormat::utcNow(); - self::updateContact($contact, ['last-update' => $updated, 'failure_update' => $updated]); DBA::update('gcontact', ['last_failure' => $updated], ['nurl' => $contact['nurl']]); Contact::markForArchival($contact); } else { - self::updateContact($contact, ['last-update' => DateTimeFormat::utcNow()]); + self::updateContact($contact, ['last-update' => $updated]); } Logger::log('End'); diff --git a/src/Worker/Queue.php b/src/Worker/Queue.php deleted file mode 100644 index 48e962f03..000000000 --- a/src/Worker/Queue.php +++ /dev/null @@ -1,164 +0,0 @@ - PRIORITY_LOW, 'dont_fork' => true], "Queue", (int) $q_item['id']); - } - } - Logger::log('filling queue jobs - end'); - return; - } - - - // delivering - $q_item = DBA::selectFirst('queue', [], ['id' => $queue_id]); - if (!DBA::isResult($q_item)) { - return; - } - - $contact = DBA::selectFirst('contact', [], ['id' => $q_item['cid']]); - if (!DBA::isResult($contact)) { - QueueModel::removeItem($q_item['id']); - return; - } - - if (empty($contact['notify']) || $contact['archive']) { - QueueModel::removeItem($q_item['id']); - return; - } - - $dead = Cache::get($cachekey_deadguy . $contact['notify']); - - if (!is_null($dead) && $dead && !$no_dead_check) { - Logger::log('queue: skipping known dead url: ' . $contact['notify']); - QueueModel::updateTime($q_item['id']); - return; - } - - if (!$no_dead_check) { - $server = PortableContact::detectServer($contact['url']); - - if ($server != "") { - $vital = Cache::get($cachekey_server . $server); - - if (is_null($vital)) { - Logger::log("Check server " . $server . " (" . $contact["network"] . ")"); - - $vital = PortableContact::checkServer($server, $contact["network"], true); - Cache::set($cachekey_server . $server, $vital, Cache::MINUTE); - } - - if (!is_null($vital) && !$vital) { - Logger::log('queue: skipping dead server: ' . $server); - QueueModel::updateTime($q_item['id']); - return; - } - } - } - - $user = DBA::selectFirst('user', [], ['uid' => $contact['uid']]); - if (!DBA::isResult($user)) { - QueueModel::removeItem($q_item['id']); - return; - } - - $data = $q_item['content']; - $public = $q_item['batch']; - $owner = User::getOwnerDataById($user['uid']); - - $deliver_status = 0; - - switch ($contact['network']) { - case Protocol::DFRN: - Logger::log('queue: dfrndelivery: item ' . $q_item['id'] . ' for ' . $contact['name'] . ' <' . $contact['url'] . '>'); - $deliver_status = DFRN::deliver($owner, $contact, $data); - - if (($deliver_status >= 200) && ($deliver_status <= 299)) { - QueueModel::removeItem($q_item['id']); - } else { - QueueModel::updateTime($q_item['id']); - Cache::set($cachekey_deadguy . $contact['notify'], true, Cache::MINUTE); - } - break; - - case Protocol::OSTATUS: - Logger::log('queue: slapdelivery: item ' . $q_item['id'] . ' for ' . $contact['name'] . ' <' . $contact['url'] . '>'); - $deliver_status = Salmon::slapper($owner, $contact['notify'], $data); - - if ($deliver_status == -1) { - QueueModel::updateTime($q_item['id']); - Cache::set($cachekey_deadguy . $contact['notify'], true, Cache::MINUTE); - } else { - QueueModel::removeItem($q_item['id']); - } - break; - - case Protocol::DIASPORA: - Logger::log('queue: diaspora_delivery: item ' . $q_item['id'] . ' for ' . $contact['name'] . ' <' . $contact['url'] . '>'); - $deliver_status = Diaspora::transmit($owner, $contact, $data, $public, true, 'Queue:' . $q_item['id'], true); - - if ((($deliver_status >= 200) && ($deliver_status <= 299)) || - ($contact['contact-type'] == Contact::TYPE_RELAY)) { - QueueModel::removeItem($q_item['id']); - } else { - QueueModel::updateTime($q_item['id']); - Cache::set($cachekey_deadguy . $contact['notify'], true, Cache::MINUTE); - } - break; - - default: - $params = ['owner' => $owner, 'contact' => $contact, 'queue' => $q_item, 'result' => false]; - Hook::callAll('queue_deliver', $params); - - if ($params['result']) { - QueueModel::removeItem($q_item['id']); - } else { - QueueModel::updateTime($q_item['id']); - } - break; - } - Logger::log('Deliver status ' . (int)$deliver_status . ' for item ' . $q_item['id'] . ' to ' . $contact['name'] . ' <' . $contact['url'] . '>'); - - return; - } -} diff --git a/src/Worker/README.md b/src/Worker/README.md new file mode 100644 index 000000000..fc937b33b --- /dev/null +++ b/src/Worker/README.md @@ -0,0 +1,6 @@ +## Friendica\Worker + +The Worker namespace contains all asynchronous workers of Friendica. +The all have to implement the function `public static function execute()`. + +They are all executed by the [`Worker`](https://github.com/friendica/friendica/blob/develop/src/Core/Worker.php). \ No newline at end of file diff --git a/src/Worker/UpdateContact.php b/src/Worker/UpdateContact.php new file mode 100644 index 000000000..ae3b06b50 --- /dev/null +++ b/src/Worker/UpdateContact.php @@ -0,0 +1,28 @@ + DateTimeFormat::utcNow()], ['id' => $contact_id]); + } + + Logger::info('Updated from probe', ['id' => $contact_id, 'success' => $success]); + } +} diff --git a/tests/DatabaseTest.php b/tests/DatabaseTest.php index 3ff4c6fe1..b3418c20f 100644 --- a/tests/DatabaseTest.php +++ b/tests/DatabaseTest.php @@ -5,10 +5,12 @@ namespace Friendica\Test; -use Friendica\Core\Config\Cache; +use Friendica\App; use Friendica\Database\DBA; use Friendica\Factory; use Friendica\Util\BasePath; +use Friendica\Util\Config\ConfigFileLoader; +use Friendica\Util\Logger\VoidLogger; use Friendica\Util\Profiler; use PHPUnit\DbUnit\DataSet\YamlDataSet; use PHPUnit\DbUnit\TestCaseTrait; @@ -41,15 +43,16 @@ abstract class DatabaseTest extends MockedTest } $basePath = BasePath::create(dirname(__DIR__)); - $configLoader = new Cache\ConfigCacheLoader($basePath); + $mode = new App\Mode($basePath); + $configLoader = new ConfigFileLoader($basePath, $mode); $config = Factory\ConfigFactory::createCache($configLoader); $profiler = \Mockery::mock(Profiler::class); DBA::connect( - $basePath, $config, $profiler, + new VoidLogger(), getenv('MYSQL_HOST'), getenv('MYSQL_USERNAME'), getenv('MYSQL_PASSWORD'), diff --git a/tests/Util/AppMockTrait.php b/tests/Util/AppMockTrait.php index 817570dd5..03e808547 100644 --- a/tests/Util/AppMockTrait.php +++ b/tests/Util/AppMockTrait.php @@ -30,14 +30,21 @@ trait AppMockTrait */ protected $profilerMock; + /** + * @var MockInterface|App\Mode The mocked App mode + */ + protected $mode; + /** * Mock the App * * @param vfsStreamDirectory $root The root directory + * @param bool $raw If true, no config mocking will be done */ - public function mockApp($root) + public function mockApp(vfsStreamDirectory $root, $raw = false) { $this->configMock = \Mockery::mock(Config\Cache\IConfigCache::class); + $this->mode = \Mockery::mock(App\Mode::class); $configAdapterMock = \Mockery::mock(Config\Adapter\IConfigAdapter::class); // Disable the adapter $configAdapterMock->shouldReceive('isConnected')->andReturn(false); @@ -52,6 +59,40 @@ trait AppMockTrait ->shouldReceive('getBasePath') ->andReturn($root->url()); + $this->app + ->shouldReceive('getMode') + ->andReturn($this->mode); + + $this->profilerMock = \Mockery::mock(Profiler::class); + $this->profilerMock->shouldReceive('saveTimestamp'); + + $this->app + ->shouldReceive('getConfigCache') + ->andReturn($this->configMock); + $this->app + ->shouldReceive('getConfig') + ->andReturn($config); + $this->app + ->shouldReceive('getTemplateEngine') + ->andReturn(new FriendicaSmartyEngine()); + $this->app + ->shouldReceive('getCurrentTheme') + ->andReturn('Smarty3'); + $this->app + ->shouldReceive('getProfiler') + ->andReturn($this->profilerMock); + $this->app + ->shouldReceive('getBaseUrl') + ->andReturnUsing(function () { + return $this->configMock->get('system', 'url'); + }); + + BaseObject::setApp($this->app); + + if ($raw) { + return; + } + $this->configMock ->shouldReceive('has') ->andReturn(true); @@ -79,26 +120,5 @@ trait AppMockTrait ->shouldReceive('get') ->with('system', 'theme') ->andReturn('system_theme'); - - $this->profilerMock = \Mockery::mock(Profiler::class); - $this->profilerMock->shouldReceive('saveTimestamp'); - - $this->app - ->shouldReceive('getConfigCache') - ->andReturn($this->configMock); - $this->app - ->shouldReceive('getTemplateEngine') - ->andReturn(new FriendicaSmartyEngine()); - $this->app - ->shouldReceive('getCurrentTheme') - ->andReturn('Smarty3'); - $this->app - ->shouldReceive('getBaseUrl') - ->andReturn('http://friendica.local'); - $this->app - ->shouldReceive('getProfiler') - ->andReturn($this->profilerMock); - - BaseObject::setApp($this->app); } } diff --git a/tests/Util/RendererMockTrait.php b/tests/Util/RendererMockTrait.php index f4e05f39b..57fd9dc44 100644 --- a/tests/Util/RendererMockTrait.php +++ b/tests/Util/RendererMockTrait.php @@ -15,9 +15,9 @@ trait RendererMockTrait /** * Mocking the method 'Renderer::getMarkupTemplate()' * - * @param string $templateName The name of the template which should get - * @param string $return the return value of the mock (should be defined to have it later for followUp use) - * @param null|int $times How often the method will get used + * @param string $templateName The name of the template which should get + * @param string $return the return value of the mock (should be defined to have it later for followUp use) + * @param null|int $times How often the method will get used */ public function mockGetMarkupTemplate($templateName, $return = '', $times = null) { @@ -35,17 +35,21 @@ trait RendererMockTrait /** * Mocking the method 'Renderer::replaceMacros()' * - * @param string $template The template to use (normally, it is the mock result of 'mockGetMarkupTemplate()' - * @param array $args The arguments to pass to the macro - * @param string $return the return value of the mock - * @param null|int $times How often the method will get used + * @param string $template The template to use (normally, it is the mock result of 'mockGetMarkupTemplate()' + * @param array|\Closure|null $args The arguments to pass to the macro + * @param string $return the return value of the mock + * @param null|int $times How often the method will get used */ - public function mockReplaceMacros($template, $args = [], $return = '', $times = null) + public function mockReplaceMacros($template, $args = null, $return = '', $times = null) { if (!isset($this->rendererMock)) { $this->rendererMock = \Mockery::mock('alias:' . Renderer::class); } + if (!isset($args)) { + $args = []; + } + $this->rendererMock ->shouldReceive('replaceMacros') ->with($template, $args) diff --git a/tests/Util/VFSTrait.php b/tests/Util/VFSTrait.php index 320d989cc..e9b7dfc50 100644 --- a/tests/Util/VFSTrait.php +++ b/tests/Util/VFSTrait.php @@ -25,7 +25,7 @@ trait VFSTrait ]; // create a virtual directory and copy all needed files and folders to it - $this->root = vfsStream::setup('friendica', null, $structure); + $this->root = vfsStream::setup('friendica', 0777, $structure); $this->setConfigFile('defaults.config.php'); $this->setConfigFile('settings.config.php'); diff --git a/tests/datasets/api.yml b/tests/datasets/api.yml index e4ef31219..a28ae21ee 100644 --- a/tests/datasets/api.yml +++ b/tests/datasets/api.yml @@ -15,7 +15,7 @@ config: k: url v: http://localhost - - cat: system + cat: config k: hostname v: localhost - diff --git a/tests/datasets/config/.htconfig.test.php b/tests/datasets/config/.htconfig.php similarity index 95% rename from tests/datasets/config/.htconfig.test.php rename to tests/datasets/config/.htconfig.php index 193142c49..04e3e9cc9 100644 --- a/tests/datasets/config/.htconfig.test.php +++ b/tests/datasets/config/.htconfig.php @@ -33,7 +33,7 @@ $a->config['sitename'] = "Friendica My Network"; // must precisely match the email address of the person logged in. $a->config['register_policy'] = REGISTER_OPEN; $a->config['register_text'] = 'A register text'; -$a->config['admin_email'] = 'admin@friendica.local'; +$a->config['admin_email'] = 'admin@test.it'; $a->config['admin_nickname'] = 'Friendly admin'; // Maximum size of an imported message, 0 is unlimited @@ -52,7 +52,7 @@ $a->config['system']['huburl'] = '[internal]'; $a->config['system']['allowed_themes'] = 'quattro,vier,duepuntozero'; // default system theme -$a->config['system']['theme'] = 'duepuntozero'; +$a->config['system']['theme'] = 'frio'; // By default allow pseudonyms $a->config['system']['no_regfullname'] = true; diff --git a/tests/datasets/config/local.config.php b/tests/datasets/config/local.config.php index 8a392909f..f28e1f2e8 100644 --- a/tests/datasets/config/local.config.php +++ b/tests/datasets/config/local.config.php @@ -23,5 +23,6 @@ return [ 'system' => [ 'default_timezone' => 'UTC', 'language' => 'en', + 'theme' => 'frio', ], ]; diff --git a/tests/datasets/config/local.ini.php b/tests/datasets/config/local.ini.php index 1fea0b028..a9e462d13 100644 --- a/tests/datasets/config/local.ini.php +++ b/tests/datasets/config/local.ini.php @@ -11,6 +11,9 @@ username = testuser password = testpw database = testdb +[system] +theme = frio + [config] admin_email = admin@test.it INI; diff --git a/tests/include/ApiTest.php b/tests/include/ApiTest.php index 2f8becc18..6f1172666 100644 --- a/tests/include/ApiTest.php +++ b/tests/include/ApiTest.php @@ -7,13 +7,14 @@ namespace Friendica\Test; use Friendica\App; use Friendica\Core\Config; -use Friendica\Core\Config\Cache; use Friendica\Core\PConfig; use Friendica\Core\Protocol; use Friendica\Core\System; use Friendica\Factory; use Friendica\Network\HTTPException; use Friendica\Util\BasePath; +use Friendica\Util\BaseURL; +use Friendica\Util\Config\ConfigFileLoader; use Monolog\Handler\TestHandler; require_once __DIR__ . '/../../include/api.php'; @@ -31,20 +32,35 @@ class ApiTest extends DatabaseTest */ protected $logOutput; + /** @var App */ + protected $app; + + /** @var array */ + protected $selfUser; + /** @var array */ + protected $friendUser; + /** @var array */ + protected $otherUser; + + protected $wrongUserId; + /** * Create variables used by tests. */ public function setUp() { $basePath = BasePath::create(dirname(__DIR__) . '/../'); - $configLoader = new Cache\ConfigCacheLoader($basePath); + $mode = new App\Mode($basePath); + $router = new App\Router(); + $configLoader = new ConfigFileLoader($basePath, $mode); $configCache = Factory\ConfigFactory::createCache($configLoader); $profiler = Factory\ProfilerFactory::create($configCache); - Factory\DBFactory::init($basePath, $configCache, $profiler, $_SERVER); + Factory\DBFactory::init($configCache, $profiler, $_SERVER); $config = Factory\ConfigFactory::createConfig($configCache); Factory\ConfigFactory::createPConfig($configCache); - $logger = Factory\LoggerFactory::create('test', $config); - $this->app = new App($basePath, $config, $logger, $profiler, false); + $logger = Factory\LoggerFactory::create('test', $config, $profiler); + $baseUrl = new BaseURL($config, $_SERVER); + $this->app = new App($config, $mode, $router, $baseUrl, $logger, $profiler, false); parent::setUp(); @@ -594,8 +610,8 @@ class ApiTest extends DatabaseTest public function testApiErrorWithJson() { $this->assertEquals( - '{"status":{"error":"error_message","code":"200 Friendica\\\\Network\\\\HTTP","request":""}}', - api_error('json', new HTTPException('error_message')) + '{"status":{"error":"error_message","code":"200 OK","request":""}}', + api_error('json', new HTTPException\OKException('error_message')) ); } @@ -612,10 +628,10 @@ class ApiTest extends DatabaseTest 'xmlns:friendica="http://friendi.ca/schema/api/1/" '. 'xmlns:georss="http://www.georss.org/georss">'."\n". '200 Friendica\Network\HTTP
'."\n".
+ ' 200 OK
'."\n".
' 200 Friendica\Network\HTTP
'."\n".
+ ' 200 OK
'."\n".
' 200 Friendica\Network\HTTP
'."\n".
+ ' 200 OK
'."\n".
' /
',
+ 'smilies' => ['texts' => [], 'icons' => []],
+ 'expected' => '/
',
+ ],
+ 'bug-6933-2' => [
+ 'data' => 'code
',
+ 'smilies' => ['texts' => [], 'icons' => []],
+ 'expected' => 'code
',
+ ],
+ ];
+ }
+
+ /**
+ * Test replace smilies in different texts
+ * @dataProvider dataLinks
+ *
+ * @param string $text Test string
+ * @param array $smilies List of smilies to replace
+ * @param string $expected Expected result
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+ */
+ public function testReplaceFromArray($text, $smilies, $expected)
+ {
+ $output = Smilies::replaceFromArray($text, $smilies);
+ $this->assertEquals($expected, $output);
+ }
+}
diff --git a/tests/src/Content/Text/BBCodeTest.php b/tests/src/Content/Text/BBCodeTest.php
index 7fd39927f..3efb40893 100644
--- a/tests/src/Content/Text/BBCodeTest.php
+++ b/tests/src/Content/Text/BBCodeTest.php
@@ -1,130 +1,188 @@
-setUpVfsDir();
- $this->mockApp($this->root);
- $this->app->videowidth = 425;
- $this->app->videoheight = 350;
- $this->configMock->shouldReceive('get')
- ->with('system', 'remove_multiplicated_lines')
- ->andReturn(false);
- $this->configMock->shouldReceive('get')
- ->with('system', 'no_oembed')
- ->andReturn(false);
- $this->configMock->shouldReceive('get')
- ->with('system', 'allowed_link_protocols')
- ->andReturn(null);
- $this->configMock->shouldReceive('get')
- ->with('system', 'itemcache_duration')
- ->andReturn(-1);
- $this->mockL10nT();
- }
-
- public function dataLinks()
- {
- return [
- /** @see https://github.com/friendica/friendica/issues/2487 */
- 'bug-2487-1' => [
- 'data' => 'https://de.wikipedia.org/wiki/Juha_Sipilä',
- 'assertHTML' => true,
- ],
- 'bug-2487-2' => [
- 'data' => 'https://de.wikipedia.org/wiki/Dnepr_(Motorradmarke)',
- 'assertHTML' => true,
- ],
- 'bug-2487-3' => [
- 'data' => 'https://friendica.wäckerlin.ch/friendica',
- 'assertHTML' => true,
- ],
- 'bug-2487-4' => [
- 'data' => 'https://mastodon.social/@morevnaproject',
- 'assertHTML' => true,
- ],
- /** @see https://github.com/friendica/friendica/issues/5795 */
- 'bug-5795' => [
- 'data' => 'https://social.nasqueron.org/@liw/100798039015010628',
- 'assertHTML' => true,
- ],
- /** @see https://github.com/friendica/friendica/issues/6095 */
- 'bug-6095' => [
- 'data' => 'https://en.wikipedia.org/wiki/Solid_(web_decentralization_project)',
- 'assertHTML' => true,
- ],
- 'no-protocol' => [
- 'data' => 'example.com/path',
- 'assertHTML' => false
- ],
- 'wrong-protocol' => [
- 'data' => 'ftp://example.com',
- 'assertHTML' => false
- ],
- 'wrong-domain-without-path' => [
- 'data' => 'http://example',
- 'assertHTML' => false
- ],
- 'wrong-domain-with-path' => [
- 'data' => 'http://example/path',
- 'assertHTML' => false
- ],
- 'bug-6857-domain-start' => [
- 'data' => "http://\nexample.com",
- 'assertHTML' => false
- ],
- 'bug-6857-domain-end' => [
- 'data' => "http://example\n.com",
- 'assertHTML' => false
- ],
- 'bug-6857-tld' => [
- 'data' => "http://example.\ncom",
- 'assertHTML' => false
- ],
- 'bug-6857-end' => [
- 'data' => "http://example.com\ntest",
- 'assertHTML' => false
- ],
- 'bug-6901' => [
- 'data' => "http://example.com."
-"htconfig.php
. See the Config help page for help "
-"with the transition."
-msgstr ""
-
-#: mod/admin.php:943
-#, php-format
-msgid ""
-"Friendica's configuration now is stored in config/local.config.php, please "
-"copy config/local-sample.config.php and move your config from config/"
-"local.ini.php
. See the Config help page for help "
-"with the transition."
-msgstr ""
-
-#: mod/admin.php:950
-#, php-format
-msgid ""
-"%s is not reachable on your system. This is a severe "
-"configuration issue that prevents server to server communication. See the installation page for help."
-msgstr ""
-
-#: mod/admin.php:956
-msgid "Normal Account"
-msgstr ""
-
-#: mod/admin.php:957
-msgid "Automatic Follower Account"
-msgstr ""
-
-#: mod/admin.php:958
-msgid "Public Forum Account"
-msgstr ""
-
-#: mod/admin.php:959
-msgid "Automatic Friend Account"
-msgstr ""
-
-#: mod/admin.php:960
-msgid "Blog Account"
-msgstr ""
-
-#: mod/admin.php:961
-msgid "Private Forum Account"
-msgstr ""
-
-#: mod/admin.php:984
-msgid "Message queues"
-msgstr ""
-
-#: mod/admin.php:990
-msgid "Server Settings"
-msgstr ""
-
-#: mod/admin.php:999
-msgid "Summary"
-msgstr ""
-
-#: mod/admin.php:1001
-msgid "Registered users"
-msgstr ""
-
-#: mod/admin.php:1003
-msgid "Pending registrations"
-msgstr ""
-
-#: mod/admin.php:1004
-msgid "Version"
-msgstr ""
-
-#: mod/admin.php:1009
-msgid "Active addons"
-msgstr ""
-
-#: mod/admin.php:1042
-msgid "Can not parse base url. Must have at least ."
+"htconfig.php
. See the Config help page for help "
+"with the transition."
+msgstr ""
+
+#: src/Module/Admin/Summary.php:67
+#, php-format
+msgid ""
+"Friendica's configuration now is stored in config/local.config.php, please "
+"copy config/local-sample.config.php and move your config from config/"
+"local.ini.php
. See the Config help page for help "
+"with the transition."
+msgstr ""
+
+#: src/Module/Admin/Summary.php:73
+#, php-format
+msgid ""
+"%s is not reachable on your system. This is a severe "
+"configuration issue that prevents server to server communication. See the installation page for help."
+msgstr ""
+
+#: src/Module/Admin/Summary.php:106
+#, php-format
+msgid ""
+"Friendica's system.basepath was updated from '%s' to '%s'. Please remove the "
+"system.basepath from your db to avoid differences."
+msgstr ""
+
+#: src/Module/Admin/Summary.php:114
+#, php-format
+msgid ""
+"Friendica's current system.basepath '%s' is wrong and the config file '%s' "
+"isn't used."
+msgstr ""
+
+#: src/Module/Admin/Summary.php:122
+#, php-format
+msgid ""
+"Friendica's current system.basepath '%s' is not equal to the config file "
+"'%s'. Please fix your configuration."
+msgstr ""
+
+#: src/Module/Admin/Summary.php:129
+msgid "Normal Account"
+msgstr ""
+
+#: src/Module/Admin/Summary.php:130
+msgid "Automatic Follower Account"
+msgstr ""
+
+#: src/Module/Admin/Summary.php:131
+msgid "Public Forum Account"
+msgstr ""
+
+#: src/Module/Admin/Summary.php:132
+msgid "Automatic Friend Account"
+msgstr ""
+
+#: src/Module/Admin/Summary.php:133
+msgid "Blog Account"
+msgstr ""
+
+#: src/Module/Admin/Summary.php:134
+msgid "Private Forum Account"
+msgstr ""
+
+#: src/Module/Admin/Summary.php:158
+msgid "Message queues"
+msgstr ""
+
+#: src/Module/Admin/Summary.php:164
+msgid "Server Settings"
+msgstr ""
+
+#: src/Module/Admin/Summary.php:178
+msgid "Summary"
+msgstr ""
+
+#: src/Module/Admin/Summary.php:180
+msgid "Registered users"
+msgstr ""
+
+#: src/Module/Admin/Summary.php:182
+msgid "Pending registrations"
+msgstr ""
+
+#: src/Module/Admin/Summary.php:183
+msgid "Version"
+msgstr ""
+
+#: src/Module/Admin/Summary.php:187
+msgid "Active addons"
+msgstr ""
+
+#: src/Module/Admin/Themes/Details.php:32 src/Module/Admin/Themes/Embed.php:46
+msgid "Theme settings updated."
+msgstr ""
+
+#: src/Module/Admin/Themes/Details.php:71 src/Module/Admin/Themes/Index.php:47
+#, php-format
+msgid "Theme %s disabled."
+msgstr ""
+
+#: src/Module/Admin/Themes/Details.php:73 src/Module/Admin/Themes/Index.php:49
+#, php-format
+msgid "Theme %s successfully enabled."
+msgstr ""
+
+#: src/Module/Admin/Themes/Details.php:75 src/Module/Admin/Themes/Index.php:51
+#, php-format
+msgid "Theme %s failed to install."
+msgstr ""
+
+#: src/Module/Admin/Themes/Details.php:97
+msgid "Screenshot"
+msgstr ""
+
+#: src/Module/Admin/Themes/Details.php:105 src/Module/Admin/Themes/Index.php:94
+#: src/Module/BaseAdminModule.php:83
+msgid "Themes"
+msgstr ""
+
+#: src/Module/Admin/Themes/Embed.php:67
+msgid "Unknown theme."
+msgstr ""
+
+#: src/Module/Admin/Themes/Index.php:96
+msgid "Reload active themes"
+msgstr ""
+
+#: src/Module/Admin/Themes/Index.php:101
+#, php-format
+msgid "No themes found on the system. They should be placed in %1$s"
+msgstr ""
+
+#: src/Module/Admin/Themes/Index.php:102
+msgid "[Experimental]"
+msgstr ""
+
+#: src/Module/Admin/Themes/Index.php:103
+msgid "[Unsupported]"
+msgstr ""
+
+#: src/Module/Admin/Tos.php:30
+msgid "The Terms of Service settings have been updated."
+msgstr ""
+
+#: src/Module/Admin/Tos.php:44
+msgid "Display Terms of Service"
+msgstr ""
+
+#: src/Module/Admin/Tos.php:44
+msgid ""
+"Enable the Terms of Service page. If this is enabled a link to the terms "
+"will be added to the registration form and the general information page."
+msgstr ""
+
+#: src/Module/Admin/Tos.php:45
+msgid "Display Privacy Statement"
+msgstr ""
+
+#: src/Module/Admin/Tos.php:45
+#, php-format
+msgid ""
+"Show some informations regarding the needed information to operate the node "
+"according e.g. to EU-GDPR."
+msgstr ""
+
+#: src/Module/Admin/Tos.php:46
+msgid "Privacy Statement Preview"
+msgstr ""
+
+#: src/Module/Admin/Tos.php:48
+msgid "The Terms of Service"
+msgstr ""
+
+#: src/Module/Admin/Tos.php:48
+msgid ""
+"Enter the Terms of Service for your node here. You can use BBCode. Headers "
+"of sections should be [h2] and below."
+msgstr ""
+
+#: src/Module/Admin/Users.php:48
+#, php-format
+msgid ""
+"\n"
+"\t\t\tDear %1$s,\n"
+"\t\t\t\tthe administrator of %2$s has set up an account for you."
+msgstr ""
+
+#: src/Module/Admin/Users.php:51
+#, php-format
+msgid ""
+"\n"
+"\t\t\tThe login details are as follows:\n"
+"\n"
+"\t\t\tSite Location:\t%1$s\n"
+"\t\t\tLogin Name:\t\t%2$s\n"
+"\t\t\tPassword:\t\t%3$s\n"
+"\n"
+"\t\t\tYou may change your password from your account \"Settings\" page after "
+"logging\n"
+"\t\t\tin.\n"
+"\n"
+"\t\t\tPlease take a few moments to review the other account settings on that "
+"page.\n"
+"\n"
+"\t\t\tYou may also wish to add some basic information to your default "
+"profile\n"
+"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n"
+"\n"
+"\t\t\tWe recommend setting your full name, adding a profile photo,\n"
+"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - "
+"and\n"
+"\t\t\tperhaps what country you live in; if you do not wish to be more "
+"specific\n"
+"\t\t\tthan that.\n"
+"\n"
+"\t\t\tWe fully respect your right to privacy, and none of these items are "
+"necessary.\n"
+"\t\t\tIf you are new and do not know anybody here, they may help\n"
+"\t\t\tyou to make some new and interesting friends.\n"
+"\n"
+"\t\t\tIf you ever want to delete your account, you can do so at %1$s/"
+"removeme\n"
+"\n"
+"\t\t\tThank you and welcome to %4$s."
+msgstr ""
+
+#: src/Module/Admin/Users.php:96
+#, php-format
+msgid "%s user blocked"
+msgid_plural "%s users blocked"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/Module/Admin/Users.php:102
+#, php-format
+msgid "%s user unblocked"
+msgid_plural "%s users unblocked"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/Module/Admin/Users.php:110 src/Module/Admin/Users.php:160
+msgid "You can't remove yourself"
+msgstr ""
+
+#: src/Module/Admin/Users.php:114
+#, php-format
+msgid "%s user deleted"
+msgid_plural "%s users deleted"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/Module/Admin/Users.php:158
+#, php-format
+msgid "User \"%s\" deleted"
+msgstr ""
+
+#: src/Module/Admin/Users.php:167
+#, php-format
+msgid "User \"%s\" blocked"
+msgstr ""
+
+#: src/Module/Admin/Users.php:173
+#, php-format
+msgid "User \"%s\" unblocked"
+msgstr ""
+
+#: src/Module/Admin/Users.php:226
+msgid "Private Forum"
+msgstr ""
+
+#: src/Module/Admin/Users.php:233
+msgid "Relay"
+msgstr ""
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Register date"
+msgstr ""
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Last login"
+msgstr ""
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Last item"
+msgstr ""
+
+#: src/Module/Admin/Users.php:272
+msgid "Type"
+msgstr ""
+
+#: src/Module/Admin/Users.php:279
+msgid "Add User"
+msgstr ""
+
+#: src/Module/Admin/Users.php:281
+msgid "User registrations waiting for confirm"
+msgstr ""
+
+#: src/Module/Admin/Users.php:282
+msgid "User waiting for permanent deletion"
+msgstr ""
+
+#: src/Module/Admin/Users.php:283
+msgid "Request date"
+msgstr ""
+
+#: src/Module/Admin/Users.php:284
+msgid "No registrations."
+msgstr ""
+
+#: src/Module/Admin/Users.php:285
+msgid "Note from the user"
+msgstr ""
+
+#: src/Module/Admin/Users.php:287
+msgid "Deny"
+msgstr ""
+
+#: src/Module/Admin/Users.php:290
+msgid "User blocked"
+msgstr ""
+
+#: src/Module/Admin/Users.php:292
+msgid "Site admin"
+msgstr ""
+
+#: src/Module/Admin/Users.php:293
+msgid "Account expired"
+msgstr ""
+
+#: src/Module/Admin/Users.php:296
+msgid "New User"
+msgstr ""
+
+#: src/Module/Admin/Users.php:297
+msgid "Permanent deletion"
+msgstr ""
+
+#: src/Module/Admin/Users.php:302
+msgid ""
+"Selected users will be deleted!\\n\\nEverything these users had posted on "
+"this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr ""
+
+#: src/Module/Admin/Users.php:303
+msgid ""
+"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
+"site will be permanently deleted!\\n\\nAre you sure?"
+msgstr ""
+
+#: src/Module/Admin/Users.php:313
+msgid "Name of the new user."
+msgstr ""
+
+#: src/Module/Admin/Users.php:314
+msgid "Nickname"
+msgstr ""
+
+#: src/Module/Admin/Users.php:314
+msgid "Nickname of the new user."
+msgstr ""
+
+#: src/Module/Admin/Users.php:315
+msgid "Email address of the new user."
+msgstr ""
+
+#: src/Module/AllFriends.php:55
+msgid "No friends to display."
+msgstr ""
+
+#: src/Module/Apps.php:29
+msgid "No installed applications."
+msgstr ""
+
+#: src/Module/Apps.php:34
+msgid "Applications"
+msgstr ""
+
#: src/Module/Attach.php:36 src/Module/Attach.php:48
msgid "Item was not found."
msgstr ""
-#: src/Module/Contact.php:166
+#: src/Module/BaseAdminModule.php:62
+msgid ""
+"Submanaged account can't access the administation pages. Please log back in "
+"as the master account."
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:76
+msgid "Overview"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:79
+msgid "Configuration"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:87
+msgid "Database"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:88
+msgid "DB updates"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:89
+msgid "Inspect Deferred Workers"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:90
+msgid "Inspect worker Queue"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:92
+msgid "Tools"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:93
+msgid "Contact Blocklist"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:101
+msgid "Diagnostics"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:102
+msgid "PHP Info"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:103
+msgid "probe address"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:104
+msgid "check webfinger"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:105
+msgid "Item Source"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:106
+msgid "Babel"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:115
+msgid "Addon Features"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:116
+msgid "User registrations waiting for confirmation"
+msgstr ""
+
+#: src/Module/BaseSearchModule.php:52
+#, php-format
+msgid "People Search - %s"
+msgstr ""
+
+#: src/Module/BaseSearchModule.php:59
+#, php-format
+msgid "Forum Search - %s"
+msgstr ""
+
+#: src/Module/Bookmarklet.php:35
+msgid "This page is missing a url parameter."
+msgstr ""
+
+#: src/Module/Bookmarklet.php:57
+msgid "The post was created"
+msgstr ""
+
+#: src/Module/Contact.php:72
#, php-format
msgid "%d contact edited."
msgid_plural "%d contacts edited."
msgstr[0] ""
msgstr[1] ""
-#: src/Module/Contact.php:191 src/Module/Contact.php:374
+#: src/Module/Contact.php:99
msgid "Could not access contact record."
msgstr ""
-#: src/Module/Contact.php:201
+#: src/Module/Contact.php:109
msgid "Could not locate selected profile."
msgstr ""
-#: src/Module/Contact.php:233
+#: src/Module/Contact.php:141
msgid "Contact updated."
msgstr ""
-#: src/Module/Contact.php:395
+#: src/Module/Contact.php:372
+msgid "Contact not found"
+msgstr ""
+
+#: src/Module/Contact.php:391
msgid "Contact has been blocked"
msgstr ""
-#: src/Module/Contact.php:395
+#: src/Module/Contact.php:391
msgid "Contact has been unblocked"
msgstr ""
-#: src/Module/Contact.php:405
+#: src/Module/Contact.php:401
msgid "Contact has been ignored"
msgstr ""
-#: src/Module/Contact.php:405
+#: src/Module/Contact.php:401
msgid "Contact has been unignored"
msgstr ""
-#: src/Module/Contact.php:415
+#: src/Module/Contact.php:411
msgid "Contact has been archived"
msgstr ""
-#: src/Module/Contact.php:415
+#: src/Module/Contact.php:411
msgid "Contact has been unarchived"
msgstr ""
-#: src/Module/Contact.php:439
+#: src/Module/Contact.php:435
msgid "Drop contact"
msgstr ""
-#: src/Module/Contact.php:442 src/Module/Contact.php:820
+#: src/Module/Contact.php:438 src/Module/Contact.php:817
msgid "Do you really want to delete this contact?"
msgstr ""
-#: src/Module/Contact.php:456
+#: src/Module/Contact.php:452
msgid "Contact has been removed."
msgstr ""
-#: src/Module/Contact.php:486
+#: src/Module/Contact.php:482
#, php-format
msgid "You are mutual friends with %s"
msgstr ""
-#: src/Module/Contact.php:491
+#: src/Module/Contact.php:487
#, php-format
msgid "You are sharing with %s"
msgstr ""
-#: src/Module/Contact.php:496
+#: src/Module/Contact.php:492
#, php-format
msgid "%s is sharing with you"
msgstr ""
-#: src/Module/Contact.php:520
+#: src/Module/Contact.php:516
msgid "Private communications are not available for this contact."
msgstr ""
-#: src/Module/Contact.php:522
+#: src/Module/Contact.php:518
msgid "Never"
msgstr ""
-#: src/Module/Contact.php:525
+#: src/Module/Contact.php:521
msgid "(Update was successful)"
msgstr ""
-#: src/Module/Contact.php:525
+#: src/Module/Contact.php:521
msgid "(Update was not successful)"
msgstr ""
-#: src/Module/Contact.php:527 src/Module/Contact.php:1058
+#: src/Module/Contact.php:523 src/Module/Contact.php:1055
msgid "Suggest friends"
msgstr ""
-#: src/Module/Contact.php:531
+#: src/Module/Contact.php:527
#, php-format
msgid "Network type: %s"
msgstr ""
-#: src/Module/Contact.php:536
+#: src/Module/Contact.php:532
msgid "Communications lost with this contact!"
msgstr ""
-#: src/Module/Contact.php:542
+#: src/Module/Contact.php:538
msgid "Fetch further information for feeds"
msgstr ""
-#: src/Module/Contact.php:544
+#: src/Module/Contact.php:540
msgid ""
"Fetch information like preview pictures, title and teaser from the feed "
"item. You can activate this if the feed doesn't contain much text. Keywords "
"are taken from the meta header in the feed item and are posted as hash tags."
msgstr ""
-#: src/Module/Contact.php:547
+#: src/Module/Contact.php:543
msgid "Fetch information"
msgstr ""
-#: src/Module/Contact.php:548
+#: src/Module/Contact.php:544
msgid "Fetch keywords"
msgstr ""
-#: src/Module/Contact.php:549
+#: src/Module/Contact.php:545
msgid "Fetch information and keywords"
msgstr ""
-#: src/Module/Contact.php:581
+#: src/Module/Contact.php:577
msgid "Profile Visibility"
msgstr ""
-#: src/Module/Contact.php:582
+#: src/Module/Contact.php:578
msgid "Contact Information / Notes"
msgstr ""
-#: src/Module/Contact.php:583
+#: src/Module/Contact.php:579
msgid "Contact Settings"
msgstr ""
-#: src/Module/Contact.php:592
+#: src/Module/Contact.php:588
msgid "Contact"
msgstr ""
-#: src/Module/Contact.php:596
+#: src/Module/Contact.php:592
#, php-format
msgid ""
"Please choose the profile you would like to display to %s when viewing your "
"profile securely."
msgstr ""
-#: src/Module/Contact.php:598
+#: src/Module/Contact.php:594
msgid "Their personal note"
msgstr ""
-#: src/Module/Contact.php:600
+#: src/Module/Contact.php:596
msgid "Edit contact notes"
msgstr ""
-#: src/Module/Contact.php:604
+#: src/Module/Contact.php:599 src/Module/Contact.php:1021
+#: src/Module/Profile/Contacts.php:93
+#, php-format
+msgid "Visit %s's profile [%s]"
+msgstr ""
+
+#: src/Module/Contact.php:600
msgid "Block/Unblock contact"
msgstr ""
-#: src/Module/Contact.php:605
+#: src/Module/Contact.php:601
msgid "Ignore contact"
msgstr ""
-#: src/Module/Contact.php:606
+#: src/Module/Contact.php:602
msgid "Repair URL settings"
msgstr ""
-#: src/Module/Contact.php:607
+#: src/Module/Contact.php:603
msgid "View conversations"
msgstr ""
-#: src/Module/Contact.php:612
+#: src/Module/Contact.php:608
msgid "Last update:"
msgstr ""
-#: src/Module/Contact.php:614
+#: src/Module/Contact.php:610
msgid "Update public posts"
msgstr ""
-#: src/Module/Contact.php:616 src/Module/Contact.php:1068
+#: src/Module/Contact.php:612 src/Module/Contact.php:1065
msgid "Update now"
msgstr ""
-#: src/Module/Contact.php:622 src/Module/Contact.php:825
-#: src/Module/Contact.php:1085
+#: src/Module/Contact.php:618 src/Module/Contact.php:822
+#: src/Module/Contact.php:1082
msgid "Unignore"
msgstr ""
-#: src/Module/Contact.php:626
+#: src/Module/Contact.php:622
msgid "Currently blocked"
msgstr ""
-#: src/Module/Contact.php:627
+#: src/Module/Contact.php:623
msgid "Currently ignored"
msgstr ""
-#: src/Module/Contact.php:628
+#: src/Module/Contact.php:624
msgid "Currently archived"
msgstr ""
-#: src/Module/Contact.php:629
+#: src/Module/Contact.php:625
msgid "Awaiting connection acknowledge"
msgstr ""
-#: src/Module/Contact.php:630
+#: src/Module/Contact.php:626
msgid ""
"Replies/likes to your public posts may still be visible"
msgstr ""
-#: src/Module/Contact.php:631
+#: src/Module/Contact.php:627
msgid "Notification for new posts"
msgstr ""
-#: src/Module/Contact.php:631
+#: src/Module/Contact.php:627
msgid "Send a notification of every new post of this contact"
msgstr ""
-#: src/Module/Contact.php:633
+#: src/Module/Contact.php:629
msgid "Blacklisted keywords"
msgstr ""
-#: src/Module/Contact.php:633
+#: src/Module/Contact.php:629
msgid ""
"Comma separated list of keywords that should not be converted to hashtags, "
"when \"Fetch information and keywords\" is selected"
msgstr ""
-#: src/Module/Contact.php:650
+#: src/Module/Contact.php:646 src/Module/Settings/TwoFactor/Index.php:100
msgid "Actions"
msgstr ""
-#: src/Module/Contact.php:696
-msgid "Suggestions"
-msgstr ""
-
-#: src/Module/Contact.php:699
-msgid "Suggest potential friends"
-msgstr ""
-
-#: src/Module/Contact.php:707
+#: src/Module/Contact.php:691
msgid "Show all contacts"
msgstr ""
-#: src/Module/Contact.php:712
-msgid "Unblocked"
-msgstr ""
-
-#: src/Module/Contact.php:715
-msgid "Only show unblocked contacts"
-msgstr ""
-
-#: src/Module/Contact.php:720
+#: src/Module/Contact.php:696 src/Module/Contact.php:798
msgid "Blocked"
msgstr ""
-#: src/Module/Contact.php:723
+#: src/Module/Contact.php:699
msgid "Only show blocked contacts"
msgstr ""
-#: src/Module/Contact.php:728
+#: src/Module/Contact.php:704 src/Module/Contact.php:800
msgid "Ignored"
msgstr ""
-#: src/Module/Contact.php:731
+#: src/Module/Contact.php:707
msgid "Only show ignored contacts"
msgstr ""
-#: src/Module/Contact.php:736
+#: src/Module/Contact.php:712 src/Module/Contact.php:801
msgid "Archived"
msgstr ""
-#: src/Module/Contact.php:739
+#: src/Module/Contact.php:715
msgid "Only show archived contacts"
msgstr ""
-#: src/Module/Contact.php:744
+#: src/Module/Contact.php:720 src/Module/Contact.php:799
msgid "Hidden"
msgstr ""
-#: src/Module/Contact.php:747
+#: src/Module/Contact.php:723
msgid "Only show hidden contacts"
msgstr ""
-#: src/Module/Contact.php:755
+#: src/Module/Contact.php:731
msgid "Organize your contact groups"
msgstr ""
-#: src/Module/Contact.php:815
+#: src/Module/Contact.php:812
msgid "Search your contacts"
msgstr ""
-#: src/Module/Contact.php:826 src/Module/Contact.php:1094
+#: src/Module/Contact.php:823 src/Module/Contact.php:1091
msgid "Archive"
msgstr ""
-#: src/Module/Contact.php:826 src/Module/Contact.php:1094
+#: src/Module/Contact.php:823 src/Module/Contact.php:1091
msgid "Unarchive"
msgstr ""
-#: src/Module/Contact.php:829
+#: src/Module/Contact.php:826
msgid "Batch Actions"
msgstr ""
-#: src/Module/Contact.php:856
+#: src/Module/Contact.php:853
msgid "Conversations started by this contact"
msgstr ""
-#: src/Module/Contact.php:861
+#: src/Module/Contact.php:858
msgid "Posts and Comments"
msgstr ""
-#: src/Module/Contact.php:884
+#: src/Module/Contact.php:881
msgid "View all contacts"
msgstr ""
-#: src/Module/Contact.php:895
+#: src/Module/Contact.php:892
msgid "View all common friends"
msgstr ""
-#: src/Module/Contact.php:905
+#: src/Module/Contact.php:902
msgid "Advanced Contact Settings"
msgstr ""
-#: src/Module/Contact.php:991
+#: src/Module/Contact.php:988
msgid "Mutual Friendship"
msgstr ""
-#: src/Module/Contact.php:996
+#: src/Module/Contact.php:993
msgid "is a fan of yours"
msgstr ""
-#: src/Module/Contact.php:1001
+#: src/Module/Contact.php:998
msgid "you are a fan of"
msgstr ""
-#: src/Module/Contact.php:1025
+#: src/Module/Contact.php:1022
msgid "Edit contact"
msgstr ""
-#: src/Module/Contact.php:1079
+#: src/Module/Contact.php:1076
msgid "Toggle Blocked status"
msgstr ""
-#: src/Module/Contact.php:1087
+#: src/Module/Contact.php:1084
msgid "Toggle Ignored status"
msgstr ""
-#: src/Module/Contact.php:1096
+#: src/Module/Contact.php:1093
msgid "Toggle Archive status"
msgstr ""
-#: src/Module/Contact.php:1104
+#: src/Module/Contact.php:1101
msgid "Delete contact"
msgstr ""
-#: src/Module/Install.php:118
+#: src/Module/Credits.php:25
+msgid "Credits"
+msgstr ""
+
+#: src/Module/Credits.php:26
+msgid ""
+"Friendica is a community project, that would not be possible without the "
+"help of many people. Here is a list of those who have contributed to the "
+"code or the translation of Friendica. Thank you all!"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:32
+msgid "Source input"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:38
+msgid "BBCode::toPlaintext"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:44
+msgid "BBCode::convert (raw HTML)"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:49
+msgid "BBCode::convert"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:55
+msgid "BBCode::convert => HTML::toBBCode"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:61
+msgid "BBCode::toMarkdown"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:67
+msgid "BBCode::toMarkdown => Markdown::convert"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:73
+msgid "BBCode::toMarkdown => Markdown::toBBCode"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:79
+msgid "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:90
+msgid "Item Body"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:94
+msgid "Item Tags"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:101
+msgid "Source input (Diaspora format)"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:107
+msgid "Markdown::convert (raw HTML)"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:112
+msgid "Markdown::convert"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:118
+msgid "Markdown::toBBCode"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:125
+msgid "Raw HTML input"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:130
+msgid "HTML Input"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:136
+msgid "HTML::toBBCode"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:142
+msgid "HTML::toBBCode => BBCode::convert"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:147
+msgid "HTML::toBBCode => BBCode::convert (raw HTML)"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:153
+msgid "HTML::toMarkdown"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:159
+msgid "HTML::toPlaintext"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:167
+msgid "Source text"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:168
+msgid "BBCode"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:169
+msgid "Markdown"
+msgstr ""
+
+#: src/Module/Debug/Babel.php:170
+msgid "HTML"
+msgstr ""
+
+#: src/Module/Debug/Feed.php:20 src/Module/Filer/SaveTag.php:20
+msgid "You must be logged in to use this module"
+msgstr ""
+
+#: src/Module/Debug/Feed.php:49
+msgid "Source URL"
+msgstr ""
+
+#: src/Module/Debug/Localtime.php:30
+msgid "Time Conversion"
+msgstr ""
+
+#: src/Module/Debug/Localtime.php:31
+msgid ""
+"Friendica provides this service for sharing events with other networks and "
+"friends in unknown timezones."
+msgstr ""
+
+#: src/Module/Debug/Localtime.php:32
+#, php-format
+msgid "UTC time: %s"
+msgstr ""
+
+#: src/Module/Debug/Localtime.php:35
+#, php-format
+msgid "Current timezone: %s"
+msgstr ""
+
+#: src/Module/Debug/Localtime.php:39
+#, php-format
+msgid "Converted localtime: %s"
+msgstr ""
+
+#: src/Module/Debug/Localtime.php:43
+msgid "Please select your timezone:"
+msgstr ""
+
+#: src/Module/Debug/Probe.php:19 src/Module/Debug/WebFinger.php:18
+msgid "Only logged in users are permitted to perform a probing."
+msgstr ""
+
+#: src/Module/Debug/Probe.php:35
+msgid "Lookup address"
+msgstr ""
+
+#: src/Module/Directory.php:66
+msgid "No entries (some entries may be hidden)."
+msgstr ""
+
+#: src/Module/Directory.php:85
+msgid "Find on this site"
+msgstr ""
+
+#: src/Module/Directory.php:87
+msgid "Results for:"
+msgstr ""
+
+#: src/Module/Directory.php:89
+msgid "Site Directory"
+msgstr ""
+
+#: src/Module/Filer/SaveTag.php:39
+#, php-format
+msgid "Filetag %s saved to item"
+msgstr ""
+
+#: src/Module/Filer/SaveTag.php:48
+msgid "- select -"
+msgstr ""
+
+#: src/Module/FollowConfirm.php:37
+msgid "No given contact."
+msgstr ""
+
+#: src/Module/Friendica.php:40
+msgid "Installed addons/apps:"
+msgstr ""
+
+#: src/Module/Friendica.php:45
+msgid "No installed addons/apps"
+msgstr ""
+
+#: src/Module/Friendica.php:50
+#, php-format
+msgid "Read about the Terms of Service of this node."
+msgstr ""
+
+#: src/Module/Friendica.php:57
+msgid "On this server the following remote servers are blocked."
+msgstr ""
+
+#: src/Module/Friendica.php:75
+#, php-format
+msgid ""
+"This is Friendica, version %s that is running at the web location %s. The "
+"database version is %s, the post update version is %s."
+msgstr ""
+
+#: src/Module/Friendica.php:80
+msgid ""
+"Please visit Friendi.ca to learn more "
+"about the Friendica project."
+msgstr ""
+
+#: src/Module/Friendica.php:81
+msgid "Bug reports and issues: please visit"
+msgstr ""
+
+#: src/Module/Friendica.php:81
+msgid "the bugtracker at github"
+msgstr ""
+
+#: src/Module/Friendica.php:82
+msgid ""
+"Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca"
+msgstr ""
+
+#: src/Module/Group.php:42
+msgid "Group created."
+msgstr ""
+
+#: src/Module/Group.php:48
+msgid "Could not create group."
+msgstr ""
+
+#: src/Module/Group.php:59 src/Module/Group.php:207 src/Module/Group.php:233
+msgid "Group not found."
+msgstr ""
+
+#: src/Module/Group.php:65
+msgid "Group name changed."
+msgstr ""
+
+#: src/Module/Group.php:87
+msgid "Unknown group."
+msgstr ""
+
+#: src/Module/Group.php:96
+msgid "Contact is unavailable."
+msgstr ""
+
+#: src/Module/Group.php:100
+msgid "Contact is deleted."
+msgstr ""
+
+#: src/Module/Group.php:106
+msgid "Contact is blocked, unable to add it to a group."
+msgstr ""
+
+#: src/Module/Group.php:110
+msgid "Unable to add the contact to the group."
+msgstr ""
+
+#: src/Module/Group.php:112
+msgid "Contact successfully added to group."
+msgstr ""
+
+#: src/Module/Group.php:116
+msgid "Unable to remove the contact from the group."
+msgstr ""
+
+#: src/Module/Group.php:118
+msgid "Contact successfully removed from group."
+msgstr ""
+
+#: src/Module/Group.php:121
+msgid "Unknown group command."
+msgstr ""
+
+#: src/Module/Group.php:124
+msgid "Bad request."
+msgstr ""
+
+#: src/Module/Group.php:163
+msgid "Save Group"
+msgstr ""
+
+#: src/Module/Group.php:164
+msgid "Filter"
+msgstr ""
+
+#: src/Module/Group.php:170
+msgid "Create a group of contacts/friends."
+msgstr ""
+
+#: src/Module/Group.php:212
+msgid "Group removed."
+msgstr ""
+
+#: src/Module/Group.php:214
+msgid "Unable to remove group."
+msgstr ""
+
+#: src/Module/Group.php:265
+msgid "Delete Group"
+msgstr ""
+
+#: src/Module/Group.php:275
+msgid "Edit Group Name"
+msgstr ""
+
+#: src/Module/Group.php:285
+msgid "Members"
+msgstr ""
+
+#: src/Module/Group.php:301
+msgid "Remove contact from group"
+msgstr ""
+
+#: src/Module/Group.php:335
+msgid "Add contact to group"
+msgstr ""
+
+#: src/Module/Help.php:43
+msgid "Help:"
+msgstr ""
+
+#: src/Module/Home.php:42
+#, php-format
+msgid "Welcome to %s"
+msgstr ""
+
+#: src/Module/Install.php:158
msgid "Friendica Communications Server - Setup"
msgstr ""
-#: src/Module/Install.php:129
+#: src/Module/Install.php:169
msgid "System check"
msgstr ""
-#: src/Module/Install.php:134
+#: src/Module/Install.php:174
msgid "Check again"
msgstr ""
-#: src/Module/Install.php:151
+#: src/Module/Install.php:189
+msgid "Base settings"
+msgstr ""
+
+#: src/Module/Install.php:196
+msgid "Host name"
+msgstr ""
+
+#: src/Module/Install.php:198
+msgid ""
+"Overwrite this field in case the determinated hostname isn't right, "
+"otherweise leave it as is."
+msgstr ""
+
+#: src/Module/Install.php:201
+msgid "Base path to installation"
+msgstr ""
+
+#: src/Module/Install.php:203
+msgid ""
+"If the system cannot detect the correct path to your installation, enter the "
+"correct path here. This setting should only be set if you are using a "
+"restricted system and symbolic links to your webroot."
+msgstr ""
+
+#: src/Module/Install.php:206
+msgid "Sub path of the URL"
+msgstr ""
+
+#: src/Module/Install.php:208
+msgid ""
+"Overwrite this field in case the sub path determination isn't right, "
+"otherwise leave it as is. Leaving this field blank means the installation is "
+"at the base URL without sub path."
+msgstr ""
+
+#: src/Module/Install.php:219
msgid "Database connection"
msgstr ""
-#: src/Module/Install.php:152
+#: src/Module/Install.php:220
msgid ""
"In order to install Friendica we need to know how to connect to your "
"database."
msgstr ""
-#: src/Module/Install.php:153
+#: src/Module/Install.php:221
msgid ""
"Please contact your hosting provider or site administrator if you have "
"questions about these settings."
msgstr ""
-#: src/Module/Install.php:154
+#: src/Module/Install.php:222
msgid ""
"The database you specify below should already exist. If it does not, please "
"create it before continuing."
msgstr ""
-#: src/Module/Install.php:157
+#: src/Module/Install.php:229
msgid "Database Server Name"
msgstr ""
-#: src/Module/Install.php:162
+#: src/Module/Install.php:234
msgid "Database Login Name"
msgstr ""
-#: src/Module/Install.php:168
+#: src/Module/Install.php:240
msgid "Database Login Password"
msgstr ""
-#: src/Module/Install.php:170
+#: src/Module/Install.php:242
msgid "For security reasons the password must not be empty"
msgstr ""
-#: src/Module/Install.php:173
+#: src/Module/Install.php:245
msgid "Database Name"
msgstr ""
-#: src/Module/Install.php:178 src/Module/Install.php:214
+#: src/Module/Install.php:249 src/Module/Install.php:278
+msgid "Please select a default timezone for your website"
+msgstr ""
+
+#: src/Module/Install.php:263
+msgid "Site settings"
+msgstr ""
+
+#: src/Module/Install.php:273
msgid "Site administrator email address"
msgstr ""
-#: src/Module/Install.php:180 src/Module/Install.php:214
+#: src/Module/Install.php:275
msgid ""
"Your account email address must match this in order to use the web admin "
"panel."
msgstr ""
-#: src/Module/Install.php:184 src/Module/Install.php:215
-msgid "Please select a default timezone for your website"
-msgstr ""
-
-#: src/Module/Install.php:208
-msgid "Site settings"
-msgstr ""
-
-#: src/Module/Install.php:217
+#: src/Module/Install.php:282
msgid "System Language:"
msgstr ""
-#: src/Module/Install.php:219
+#: src/Module/Install.php:284
msgid ""
"Set the default language for your Friendica installation interface and to "
"send emails."
msgstr ""
-#: src/Module/Install.php:231
+#: src/Module/Install.php:296
msgid "Your Friendica site database has been installed."
msgstr ""
-#: src/Module/Install.php:239
+#: src/Module/Install.php:304
msgid "Installation finished"
msgstr ""
-#: src/Module/Install.php:261
+#: src/Module/Install.php:326
msgid "Use an application on a mobile device to get two-factor authentication " +"codes when prompted on login.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:90 +msgid "Authenticator app" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:91 +msgid "Configured" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:91 +msgid "Not Configured" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:92 +msgid "You haven't finished configuring your authenticator app.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:93 +msgid "Your authenticator app is correctly configured.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:95 +msgid "Recovery codes" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:96 +msgid "Remaining valid codes" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:98 +msgid "" +"These one-use codes can replace an authenticator app code in case you " +"have lost access to it.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:101 +msgid "Current password:" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:101 +msgid "" +"You need to provide your current password to change two-factor " +"authentication settings." +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:102 +msgid "Enable two-factor authentication" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:103 +msgid "Disable two-factor authentication" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:104 +msgid "Show recovery codes" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:105 +msgid "Finish app configuration" +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:34 +#: src/Module/Settings/TwoFactor/Verify.php:41 +msgid "Please enter your password to access this page." +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:50 +msgid "New recovery codes successfully generated." +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:76 +msgid "Two-factor recovery codes" +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:78 +msgid "" +"Recovery codes can be used to access your account in the event you lose " +"access to your device and cannot receive two-factor authentication codes." +"p>
Put these in a safe spot! If you lose your device and " +"don’t have the recovery codes you will lose access to your account.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:80 +msgid "" +"When you generate new recovery codes, you must copy the new codes. Your old " +"codes won’t work anymore." +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:81 +msgid "Generate new recovery codes" +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:83 +msgid "Next: Verification" +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:63 +msgid "Two-factor authentication successfully activated." +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:67 +#: src/Module/TwoFactor/Recovery.php:46 src/Module/TwoFactor/Verify.php:41 +msgid "Invalid code, please retry." +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:96 +#, php-format +msgid "" +"Or you can submit the authentication settings manually:
\n" +"Please scan this QR Code with your authenticator app and submit the " +"provided code.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:120 +#, php-format +msgid "" +"Or you can open the following URL in your mobile devicde:
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:126 +#: src/Module/TwoFactor/Verify.php:63 +msgid "Please enter a code from your authentication app" +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:127 +msgid "Verify code and enable two-factor authentication" +msgstr "" + +#: src/Module/Special/HTTPException.php:32 +msgid "Bad Request" +msgstr "" + +#: src/Module/Special/HTTPException.php:33 +msgid "Unauthorized" +msgstr "" + +#: src/Module/Special/HTTPException.php:34 +msgid "Forbidden" +msgstr "" + +#: src/Module/Special/HTTPException.php:35 +msgid "Not Found" +msgstr "" + +#: src/Module/Special/HTTPException.php:36 +msgid "Internal Server Error" +msgstr "" + +#: src/Module/Special/HTTPException.php:37 +msgid "Service Unavailable" +msgstr "" + +#: src/Module/Special/HTTPException.php:44 +msgid "" +"The server cannot or will not process the request due to an apparent client " +"error." +msgstr "" + +#: src/Module/Special/HTTPException.php:45 +msgid "Authentication is required and has failed or has not yet been provided." +msgstr "" + +#: src/Module/Special/HTTPException.php:46 +msgid "" +"The request was valid, but the server is refusing action. The user might not " +"have the necessary permissions for a resource, or may need an account." +msgstr "" + +#: src/Module/Special/HTTPException.php:47 +msgid "" +"The requested resource could not be found but may be available in the future." +msgstr "" + +#: src/Module/Special/HTTPException.php:48 +msgid "" +"An unexpected condition was encountered and no more specific message is " +"suitable." +msgstr "" + +#: src/Module/Special/HTTPException.php:49 +msgid "" +"The server is currently unavailable (because it is overloaded or down for " +"maintenance). Please try again later." +msgstr "" + +#: src/Module/Special/HTTPException.php:55 +msgid "Go back" +msgstr "" + #: src/Module/Tos.php:35 src/Module/Tos.php:77 msgid "" "At the time of registration, and for providing communications between the " @@ -9479,10 +9753,218 @@ msgstr "" msgid "Privacy Statement" msgstr "" +#: src/Module/TwoFactor/Recovery.php:41 +#, php-format +msgid "Remaining recovery codes: %d" +msgstr "" + +#: src/Module/TwoFactor/Recovery.php:65 +msgid "Two-factor recovery" +msgstr "" + +#: src/Module/TwoFactor/Recovery.php:66 +msgid "" +"You can enter one of your one-time recovery codes in case you lost access " +"to your mobile device.
" +msgstr "" + +#: src/Module/TwoFactor/Recovery.php:67 src/Module/TwoFactor/Verify.php:62 +#, php-format +msgid "" +"Don’t have your phone? Enter a two-factor recovery code" +msgstr "" + +#: src/Module/TwoFactor/Recovery.php:68 +msgid "Please enter a recovery code" +msgstr "" + +#: src/Module/TwoFactor/Recovery.php:69 +msgid "Submit recovery code and complete login" +msgstr "" + +#: src/Module/TwoFactor/Verify.php:61 +msgid "" +"Open the two-factor authentication app on your device to get an " +"authentication code and verify your identity.
" +msgstr "" + +#: src/Module/TwoFactor/Verify.php:64 +msgid "Verify code and complete login" +msgstr "" + +#: src/Module/Welcome.php:25 +msgid "Welcome to Friendica" +msgstr "" + +#: src/Module/Welcome.php:26 +msgid "New Member Checklist" +msgstr "" + +#: src/Module/Welcome.php:27 +msgid "" +"We would like to offer some tips and links to help make your experience " +"enjoyable. Click any item to visit the relevant page. A link to this page " +"will be visible from your home page for two weeks after your initial " +"registration and then will quietly disappear." +msgstr "" + +#: src/Module/Welcome.php:29 +msgid "Getting Started" +msgstr "" + +#: src/Module/Welcome.php:30 +msgid "Friendica Walk-Through" +msgstr "" + +#: src/Module/Welcome.php:31 +msgid "" +"On your Quick Start page - find a brief introduction to your " +"profile and network tabs, make some new connections, and find some groups to " +"join." +msgstr "" + +#: src/Module/Welcome.php:34 +msgid "Go to Your Settings" +msgstr "" + +#: src/Module/Welcome.php:35 +msgid "" +"On your Settings page - change your initial password. Also make a " +"note of your Identity Address. This looks just like an email address - and " +"will be useful in making friends on the free social web." +msgstr "" + +#: src/Module/Welcome.php:36 +msgid "" +"Review the other settings, particularly the privacy settings. An unpublished " +"directory listing is like having an unlisted phone number. In general, you " +"should probably publish your listing - unless all of your friends and " +"potential friends know exactly how to find you." +msgstr "" + +#: src/Module/Welcome.php:40 +msgid "" +"Upload a profile photo if you have not done so already. Studies have shown " +"that people with real photos of themselves are ten times more likely to make " +"friends than people who do not." +msgstr "" + +#: src/Module/Welcome.php:41 +msgid "Edit Your Profile" +msgstr "" + +#: src/Module/Welcome.php:42 +msgid "" +"Edit your default profile to your liking. Review the " +"settings for hiding your list of friends and hiding the profile from unknown " +"visitors." +msgstr "" + +#: src/Module/Welcome.php:43 +msgid "Profile Keywords" +msgstr "" + +#: src/Module/Welcome.php:44 +msgid "" +"Set some public keywords for your default profile which describe your " +"interests. We may be able to find other people with similar interests and " +"suggest friendships." +msgstr "" + +#: src/Module/Welcome.php:46 +msgid "Connecting" +msgstr "" + +#: src/Module/Welcome.php:48 +msgid "Importing Emails" +msgstr "" + +#: src/Module/Welcome.php:49 +msgid "" +"Enter your email access information on your Connector Settings page if you " +"wish to import and interact with friends or mailing lists from your email " +"INBOX" +msgstr "" + +#: src/Module/Welcome.php:50 +msgid "Go to Your Contacts Page" +msgstr "" + +#: src/Module/Welcome.php:51 +msgid "" +"Your Contacts page is your gateway to managing friendships and connecting " +"with friends on other networks. Typically you enter their address or site " +"URL in the Add New Contact dialog." +msgstr "" + +#: src/Module/Welcome.php:52 +msgid "Go to Your Site's Directory" +msgstr "" + +#: src/Module/Welcome.php:53 +msgid "" +"The Directory page lets you find other people in this network or other " +"federated sites. Look for a Connect or Follow link on " +"their profile page. Provide your own Identity Address if requested." +msgstr "" + +#: src/Module/Welcome.php:54 +msgid "Finding New People" +msgstr "" + +#: src/Module/Welcome.php:55 +msgid "" +"On the side panel of the Contacts page are several tools to find new " +"friends. We can match people by interest, look up people by name or " +"interest, and provide suggestions based on network relationships. On a brand " +"new site, friend suggestions will usually begin to be populated within 24 " +"hours." +msgstr "" + +#: src/Module/Welcome.php:58 +msgid "Group Your Contacts" +msgstr "" + +#: src/Module/Welcome.php:59 +msgid "" +"Once you have made some friends, organize them into private conversation " +"groups from the sidebar of your Contacts page and then you can interact with " +"each group privately on your Network page." +msgstr "" + +#: src/Module/Welcome.php:61 +msgid "Why Aren't My Posts Public?" +msgstr "" + +#: src/Module/Welcome.php:62 +msgid "" +"Friendica respects your privacy. By default, your posts will only show up to " +"people you've added as friends. For more information, see the help section " +"from the link above." +msgstr "" + +#: src/Module/Welcome.php:64 +msgid "Getting Help" +msgstr "" + +#: src/Module/Welcome.php:65 +msgid "Go to the Help Section" +msgstr "" + +#: src/Module/Welcome.php:66 +msgid "" +"Our help pages may be consulted for detail on other program " +"features and resources." +msgstr "" + #: src/Object/Post.php:137 msgid "This entry was edited" msgstr "" +#: src/Object/Post.php:157 +msgid "Private Message" +msgstr "" + #: src/Object/Post.php:199 msgid "Delete locally" msgstr "" @@ -9559,85 +10041,85 @@ msgstr "" msgid "share" msgstr "" -#: src/Object/Post.php:383 +#: src/Object/Post.php:384 msgid "to" msgstr "" -#: src/Object/Post.php:384 +#: src/Object/Post.php:385 msgid "via" msgstr "" -#: src/Object/Post.php:385 +#: src/Object/Post.php:386 msgid "Wall-to-Wall" msgstr "" -#: src/Object/Post.php:386 +#: src/Object/Post.php:387 msgid "via Wall-To-Wall:" msgstr "" -#: src/Object/Post.php:419 +#: src/Object/Post.php:420 #, php-format msgid "Reply to %s" msgstr "" -#: src/Object/Post.php:434 +#: src/Object/Post.php:435 msgid "Notifier task is pending" msgstr "" -#: src/Object/Post.php:435 +#: src/Object/Post.php:436 msgid "Delivery to remote servers is pending" msgstr "" -#: src/Object/Post.php:436 +#: src/Object/Post.php:437 msgid "Delivery to remote servers is underway" msgstr "" -#: src/Object/Post.php:437 +#: src/Object/Post.php:438 msgid "Delivery to remote servers is mostly done" msgstr "" -#: src/Object/Post.php:438 +#: src/Object/Post.php:439 msgid "Delivery to remote servers is done" msgstr "" -#: src/Object/Post.php:458 +#: src/Object/Post.php:459 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "" msgstr[1] "" -#: src/Object/Post.php:459 +#: src/Object/Post.php:460 msgid "Show more" msgstr "" -#: src/Object/Post.php:460 +#: src/Object/Post.php:461 msgid "Show fewer" msgstr "" -#: src/Protocol/Diaspora.php:2496 +#: src/Protocol/Diaspora.php:2438 msgid "Sharing notification from Diaspora network" msgstr "" -#: src/Protocol/Diaspora.php:3613 +#: src/Protocol/Diaspora.php:3599 msgid "Attachments:" msgstr "" -#: src/Protocol/OStatus.php:1866 +#: src/Protocol/OStatus.php:1856 #, php-format msgid "%s is now following %s." msgstr "" -#: src/Protocol/OStatus.php:1867 +#: src/Protocol/OStatus.php:1857 msgid "following" msgstr "" -#: src/Protocol/OStatus.php:1870 +#: src/Protocol/OStatus.php:1860 #, php-format msgid "%s stopped following %s." msgstr "" -#: src/Protocol/OStatus.php:1871 +#: src/Protocol/OStatus.php:1861 msgid "stopped following" msgstr "" @@ -9707,16 +10189,16 @@ msgstr "" msgid "%1$d %2$s ago" msgstr "" -#: src/Worker/Delivery.php:453 +#: src/Worker/Delivery.php:450 msgid "(no subject)" msgstr "" -#: update.php:217 +#: update.php:218 #, php-format msgid "%s: Updating author-id and owner-id in item and thread table. " msgstr "" -#: update.php:272 +#: update.php:273 #, php-format msgid "%s: Updating post-type." msgstr "" @@ -9745,63 +10227,73 @@ msgstr "" msgid "slackr" msgstr "" -#: view/theme/duepuntozero/config.php:75 +#: view/theme/duepuntozero/config.php:74 msgid "Variations" msgstr "" -#: view/theme/frio/config.php:103 +#: view/theme/frio/config.php:105 msgid "Custom" msgstr "" -#: view/theme/frio/config.php:115 +#: view/theme/frio/config.php:117 msgid "Note" msgstr "" -#: view/theme/frio/config.php:115 +#: view/theme/frio/config.php:117 msgid "Check image permissions if all users are allowed to see the image" msgstr "" -#: view/theme/frio/config.php:122 +#: view/theme/frio/config.php:123 msgid "Select color scheme" msgstr "" -#: view/theme/frio/config.php:123 -msgid "Navigation bar background color" +#: view/theme/frio/config.php:124 +msgid "Copy or paste schemestring" msgstr "" #: view/theme/frio/config.php:124 -msgid "Navigation bar icon color " +msgid "" +"You can copy this string to share your theme with others. Pasting here " +"applies the schemestring" msgstr "" #: view/theme/frio/config.php:125 -msgid "Link color" +msgid "Navigation bar background color" msgstr "" #: view/theme/frio/config.php:126 -msgid "Set the background color" +msgid "Navigation bar icon color " msgstr "" #: view/theme/frio/config.php:127 -msgid "Content background opacity" +msgid "Link color" msgstr "" #: view/theme/frio/config.php:128 -msgid "Set the background image" +msgid "Set the background color" msgstr "" #: view/theme/frio/config.php:129 +msgid "Content background opacity" +msgstr "" + +#: view/theme/frio/config.php:130 +msgid "Set the background image" +msgstr "" + +#: view/theme/frio/config.php:131 msgid "Background image style" msgstr "" -#: view/theme/frio/config.php:134 +#: view/theme/frio/config.php:136 msgid "Login page background image" msgstr "" -#: view/theme/frio/config.php:138 +#: view/theme/frio/config.php:140 msgid "Login page background color" msgstr "" -#: view/theme/frio/config.php:138 +#: view/theme/frio/config.php:140 msgid "Leave background image and color empty for theme defaults" msgstr "" @@ -9849,27 +10341,27 @@ msgstr "" msgid "Visitor" msgstr "" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Alignment" msgstr "" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Left" msgstr "" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Center" msgstr "" -#: view/theme/quattro/config.php:78 +#: view/theme/quattro/config.php:77 msgid "Color scheme" msgstr "" -#: view/theme/quattro/config.php:79 +#: view/theme/quattro/config.php:78 msgid "Posts font size" msgstr "" -#: view/theme/quattro/config.php:80 +#: view/theme/quattro/config.php:79 msgid "Textareas font size" msgstr "" @@ -9877,31 +10369,31 @@ msgstr "" msgid "Comma separated list of helper forums" msgstr "" -#: view/theme/vier/config.php:123 +#: view/theme/vier/config.php:122 msgid "Set style" msgstr "" -#: view/theme/vier/config.php:124 +#: view/theme/vier/config.php:123 msgid "Community Pages" msgstr "" -#: view/theme/vier/config.php:125 view/theme/vier/theme.php:151 +#: view/theme/vier/config.php:124 view/theme/vier/theme.php:151 msgid "Community Profiles" msgstr "" -#: view/theme/vier/config.php:126 +#: view/theme/vier/config.php:125 msgid "Help or @NewHere ?" msgstr "" -#: view/theme/vier/config.php:127 view/theme/vier/theme.php:373 +#: view/theme/vier/config.php:126 view/theme/vier/theme.php:373 msgid "Connect Services" msgstr "" -#: view/theme/vier/config.php:128 +#: view/theme/vier/config.php:127 msgid "Find Friends" msgstr "" -#: view/theme/vier/config.php:129 view/theme/vier/theme.php:181 +#: view/theme/vier/config.php:128 view/theme/vier/theme.php:181 msgid "Last users" msgstr "" diff --git a/view/lang/cs/messages.po b/view/lang/cs/messages.po index 2b78631ec..505d242b8 100644 --- a/view/lang/cs/messages.po +++ b/view/lang/cs/messages.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-02-15 09:33-0500\n" -"PO-Revision-Date: 2019-03-15 20:08+0000\n" +"POT-Creation-Date: 2019-05-15 08:55-0400\n" +"PO-Revision-Date: 2019-05-17 14:06+0000\n" "Last-Translator: Aditoo\n" "Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" @@ -22,7 +22,7 @@ msgstr "" "Language: cs\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: include/api.php:1179 +#: include/api.php:1116 #, php-format msgid "Daily posting limit of %d post reached. The post was rejected." msgid_plural "Daily posting limit of %d posts reached. The post was rejected." @@ -31,7 +31,7 @@ msgstr[1] "Byl dosažen denní limit %d příspěvků. Příspěvek byl odmítnu msgstr[2] "Byl dosažen denní limit %d příspěvku. Příspěvek byl odmítnut." msgstr[3] "Byl dosažen denní limit %d příspěvků. Příspěvek byl odmítnut." -#: include/api.php:1193 +#: include/api.php:1130 #, php-format msgid "Weekly posting limit of %d post reached. The post was rejected." msgid_plural "" @@ -41,33 +41,33 @@ msgstr[1] "Byl dosažen týdenní limit %d příspěvků. Příspěvek byl odmí msgstr[2] "Byl dosažen týdenní limit %d příspěvku. Příspěvek byl odmítnut." msgstr[3] "Byl dosažen týdenní limit %d příspěvků. Příspěvek byl odmítnut." -#: include/api.php:1207 +#: include/api.php:1144 #, php-format msgid "Monthly posting limit of %d post reached. The post was rejected." msgstr "Byl dosažen měsíční limit %d příspěvků. Příspěvek byl odmítnut." -#: include/api.php:4578 mod/photos.php:93 mod/photos.php:201 -#: mod/photos.php:695 mod/photos.php:1126 mod/photos.php:1143 -#: mod/photos.php:1636 mod/profile_photo.php:85 mod/profile_photo.php:94 +#: include/api.php:4511 mod/photos.php:91 mod/photos.php:193 +#: mod/photos.php:636 mod/photos.php:1082 mod/photos.php:1099 +#: mod/photos.php:1601 mod/profile_photo.php:85 mod/profile_photo.php:94 #: mod/profile_photo.php:103 mod/profile_photo.php:217 -#: mod/profile_photo.php:305 mod/profile_photo.php:315 src/Model/User.php:736 -#: src/Model/User.php:744 src/Model/User.php:752 +#: mod/profile_photo.php:305 mod/profile_photo.php:315 src/Model/User.php:763 +#: src/Model/User.php:771 src/Model/User.php:779 msgid "Profile Photos" msgstr "Profilové fotky" #: include/conversation.php:160 include/conversation.php:297 -#: src/Model/Item.php:3283 +#: src/Model/Item.php:3253 msgid "event" msgstr "událost" #: include/conversation.php:163 include/conversation.php:173 #: include/conversation.php:300 include/conversation.php:309 -#: mod/subthread.php:88 mod/tagger.php:70 +#: mod/subthread.php:88 mod/tagger.php:68 msgid "status" msgstr "stav" #: include/conversation.php:168 include/conversation.php:305 -#: mod/subthread.php:88 mod/tagger.php:70 src/Model/Item.php:3285 +#: mod/subthread.php:88 mod/tagger.php:68 src/Model/Item.php:3255 msgid "photo" msgstr "fotka" @@ -106,7 +106,7 @@ msgstr "%1$s se nyní přátelí s uživatelem %2$s" msgid "%1$s poked %2$s" msgstr "%1$s šťouchnul/a uživatele %2$s" -#: include/conversation.php:319 mod/tagger.php:108 +#: include/conversation.php:319 mod/tagger.php:101 #, php-format msgid "%1$s tagged %2$s's %3$s with %4$s" msgstr "%1$s označil/a %3$s uživatele %2$s štítkem %4$s" @@ -120,16 +120,16 @@ msgstr "příspěvek/položka" msgid "%1$s marked %2$s's %3$s as favorite" msgstr "%1$s označil/a %3$s uživatele %2$s jako oblíbené" -#: include/conversation.php:568 mod/photos.php:1467 mod/profiles.php:352 +#: include/conversation.php:568 mod/photos.php:1433 mod/profiles.php:352 msgid "Likes" msgstr "Libí se" -#: include/conversation.php:568 mod/photos.php:1467 mod/profiles.php:355 +#: include/conversation.php:569 mod/photos.php:1433 mod/profiles.php:355 msgid "Dislikes" msgstr "Nelibí se" -#: include/conversation.php:569 include/conversation.php:1505 -#: mod/photos.php:1468 +#: include/conversation.php:570 include/conversation.php:1564 +#: mod/photos.php:1434 msgid "Attending" msgid_plural "Attending" msgstr[0] "Účastní se" @@ -137,346 +137,375 @@ msgstr[1] "Účastní se" msgstr[2] "Účastní se" msgstr[3] "Účastní se" -#: include/conversation.php:569 mod/photos.php:1468 +#: include/conversation.php:571 mod/photos.php:1434 msgid "Not attending" msgstr "Neúčastní se" -#: include/conversation.php:569 mod/photos.php:1468 +#: include/conversation.php:572 mod/photos.php:1434 msgid "Might attend" msgstr "Mohl/a by se zúčastnit" -#: include/conversation.php:649 mod/photos.php:1524 src/Object/Post.php:207 +#: include/conversation.php:573 +msgid "Reshares" +msgstr "Znovusdílení" + +#: include/conversation.php:653 mod/photos.php:1490 src/Object/Post.php:208 msgid "Select" msgstr "Vybrat" -#: include/conversation.php:650 mod/admin.php:2072 mod/photos.php:1525 -#: mod/settings.php:726 src/Module/Contact.php:827 src/Module/Contact.php:1102 +#: include/conversation.php:654 mod/photos.php:1491 mod/settings.php:735 +#: src/Module/Admin/Users.php:288 src/Module/Contact.php:830 +#: src/Module/Contact.php:1105 msgid "Delete" msgstr "Odstranit" -#: include/conversation.php:684 src/Object/Post.php:380 -#: src/Object/Post.php:381 +#: include/conversation.php:679 src/Object/Post.php:382 +#: src/Object/Post.php:383 #, php-format msgid "View %s's profile @ %s" msgstr "Zobrazit profil uživatele %s na %s" -#: include/conversation.php:696 src/Object/Post.php:368 +#: include/conversation.php:692 src/Object/Post.php:370 msgid "Categories:" msgstr "Kategorie:" -#: include/conversation.php:697 src/Object/Post.php:369 +#: include/conversation.php:693 src/Object/Post.php:371 msgid "Filed under:" msgstr "Vyplněn pod:" -#: include/conversation.php:704 src/Object/Post.php:394 +#: include/conversation.php:700 src/Object/Post.php:396 #, php-format msgid "%s from %s" msgstr "%s z %s" -#: include/conversation.php:719 +#: include/conversation.php:715 msgid "View in context" msgstr "Zobrazit v kontextu" -#: include/conversation.php:721 include/conversation.php:1171 -#: mod/editpost.php:88 mod/message.php:260 mod/message.php:442 -#: mod/photos.php:1440 mod/wallmessage.php:141 src/Object/Post.php:421 +#: include/conversation.php:717 include/conversation.php:1230 +#: mod/editpost.php:86 mod/message.php:260 mod/message.php:442 +#: mod/photos.php:1406 mod/wallmessage.php:141 src/Object/Post.php:423 msgid "Please wait" msgstr "Čekejte prosím" -#: include/conversation.php:785 +#: include/conversation.php:781 msgid "remove" msgstr "odstranit" -#: include/conversation.php:789 +#: include/conversation.php:785 msgid "Delete Selected Items" msgstr "Smazat vybrané položky" -#: include/conversation.php:893 view/theme/frio/theme.php:358 +#: include/conversation.php:940 view/theme/frio/theme.php:358 msgid "Follow Thread" msgstr "Sledovat vlákno" -#: include/conversation.php:894 src/Model/Contact.php:1049 +#: include/conversation.php:941 src/Model/Contact.php:1111 msgid "View Status" msgstr "Zobrazit stav" -#: include/conversation.php:895 include/conversation.php:911 -#: mod/allfriends.php:72 mod/directory.php:167 mod/dirfind.php:226 -#: mod/match.php:87 mod/suggest.php:87 src/Model/Contact.php:989 -#: src/Model/Contact.php:1042 src/Model/Contact.php:1050 +#: include/conversation.php:942 include/conversation.php:960 +#: mod/dirfind.php:226 mod/match.php:87 mod/suggest.php:87 +#: src/Model/Contact.php:1051 src/Model/Contact.php:1104 +#: src/Model/Contact.php:1112 src/Module/AllFriends.php:74 +#: src/Module/Directory.php:155 msgid "View Profile" msgstr "Zobrazit profil" -#: include/conversation.php:896 src/Model/Contact.php:1051 +#: include/conversation.php:943 src/Model/Contact.php:1113 msgid "View Photos" msgstr "Zobrazit fotky" -#: include/conversation.php:897 src/Model/Contact.php:1043 -#: src/Model/Contact.php:1052 +#: include/conversation.php:944 src/Model/Contact.php:1105 +#: src/Model/Contact.php:1114 msgid "Network Posts" msgstr "Síťové příspěvky" -#: include/conversation.php:898 src/Model/Contact.php:1044 -#: src/Model/Contact.php:1053 +#: include/conversation.php:945 src/Model/Contact.php:1106 +#: src/Model/Contact.php:1115 msgid "View Contact" msgstr "Zobrazit kontakt" -#: include/conversation.php:899 src/Model/Contact.php:1055 +#: include/conversation.php:946 src/Model/Contact.php:1117 msgid "Send PM" msgstr "Poslat soukromou zprávu" -#: include/conversation.php:903 src/Model/Contact.php:1056 +#: include/conversation.php:947 src/Module/Admin/Blocklist/Contact.php:66 +#: src/Module/Admin/Users.php:289 src/Module/Contact.php:624 +#: src/Module/Contact.php:827 src/Module/Contact.php:1080 +msgid "Block" +msgstr "Blokovat" + +#: include/conversation.php:948 mod/notifications.php:60 +#: mod/notifications.php:186 mod/notifications.php:279 +#: src/Module/Contact.php:625 src/Module/Contact.php:828 +#: src/Module/Contact.php:1088 +msgid "Ignore" +msgstr "Ignorovat" + +#: include/conversation.php:952 src/Model/Contact.php:1118 msgid "Poke" msgstr "Šťouchnout" -#: include/conversation.php:908 mod/allfriends.php:73 mod/dirfind.php:227 -#: mod/follow.php:147 mod/match.php:88 mod/suggest.php:88 -#: src/Content/Widget.php:63 src/Model/Contact.php:1045 -#: src/Module/Contact.php:574 view/theme/vier/theme.php:201 +#: include/conversation.php:957 mod/dirfind.php:227 mod/follow.php:158 +#: mod/match.php:88 mod/suggest.php:88 src/Content/Widget.php:63 +#: src/Model/Contact.php:1107 src/Module/AllFriends.php:75 +#: src/Module/Contact.php:577 view/theme/vier/theme.php:201 msgid "Connect/Follow" msgstr "Spojit se/sledovat" -#: include/conversation.php:1030 +#: include/conversation.php:1082 #, php-format msgid "%s likes this." msgstr "Uživateli %s se tohle líbí." -#: include/conversation.php:1033 +#: include/conversation.php:1085 #, php-format msgid "%s doesn't like this." msgstr "Uživateli %s se tohle nelíbí." -#: include/conversation.php:1036 +#: include/conversation.php:1088 #, php-format msgid "%s attends." msgstr "%s se účastní." -#: include/conversation.php:1039 +#: include/conversation.php:1091 #, php-format msgid "%s doesn't attend." msgstr "%s se neúčastní." -#: include/conversation.php:1042 +#: include/conversation.php:1094 #, php-format msgid "%s attends maybe." msgstr "%s se možná účastní." -#: include/conversation.php:1050 +#: include/conversation.php:1097 include/conversation.php:1140 +#, php-format +msgid "%s reshared this." +msgstr "%s tohle znovusdílel/a." + +#: include/conversation.php:1105 msgid "and" msgstr "a" -#: include/conversation.php:1056 +#: include/conversation.php:1111 #, php-format msgid "and %d other people" msgstr "a dalších %d lidí" -#: include/conversation.php:1064 +#: include/conversation.php:1119 #, php-format msgid "%2$d people like this" msgstr "%2$d lidem se tohle líbí" -#: include/conversation.php:1065 +#: include/conversation.php:1120 #, php-format msgid "%s like this." msgstr "Uživatelům %s se tohle líbí." -#: include/conversation.php:1068 +#: include/conversation.php:1123 #, php-format msgid "%2$d people don't like this" msgstr "%2$d lidem se tohle nelíbí" -#: include/conversation.php:1069 +#: include/conversation.php:1124 #, php-format msgid "%s don't like this." msgstr "Uživatelům %s se tohle nelíbí." -#: include/conversation.php:1072 +#: include/conversation.php:1127 #, php-format msgid "%2$d people attend" msgstr "%2$d lidí se účastní" -#: include/conversation.php:1073 +#: include/conversation.php:1128 #, php-format msgid "%s attend." msgstr "%s se účastní." -#: include/conversation.php:1076 +#: include/conversation.php:1131 #, php-format msgid "%2$d people don't attend" msgstr "%2$d lidí se neúčastní" -#: include/conversation.php:1077 +#: include/conversation.php:1132 #, php-format msgid "%s don't attend." msgstr "%s se neúčastní" -#: include/conversation.php:1080 +#: include/conversation.php:1135 #, php-format msgid "%2$d people attend maybe" msgstr "%2$d lidí se možná účastní" -#: include/conversation.php:1081 +#: include/conversation.php:1136 #, php-format msgid "%s attend maybe." msgstr "%s se možná účastní" -#: include/conversation.php:1110 +#: include/conversation.php:1139 +#, php-format +msgid "%2$d people reshared this" +msgstr "%2$d lidí tohle znovusdílelo" + +#: include/conversation.php:1169 msgid "Visible to everybody" msgstr "Viditelné pro všechny" -#: include/conversation.php:1111 src/Object/Post.php:883 +#: include/conversation.php:1170 src/Object/Post.php:886 msgid "Please enter a image/video/audio/webpage URL:" msgstr "Prosím zadejte URL obrázku/videa/audia/webové stránky:" -#: include/conversation.php:1112 +#: include/conversation.php:1171 msgid "Tag term:" msgstr "Štítek:" -#: include/conversation.php:1113 mod/filer.php:35 +#: include/conversation.php:1172 src/Module/Filer/SaveTag.php:49 msgid "Save to Folder:" msgstr "Uložit do složky:" -#: include/conversation.php:1114 +#: include/conversation.php:1173 msgid "Where are you right now?" msgstr "Kde právě jste?" -#: include/conversation.php:1115 +#: include/conversation.php:1174 msgid "Delete item(s)?" msgstr "Smazat položku(y)?" -#: include/conversation.php:1147 +#: include/conversation.php:1206 msgid "New Post" msgstr "Nový příspěvek" -#: include/conversation.php:1150 +#: include/conversation.php:1209 msgid "Share" msgstr "Sdílet" -#: include/conversation.php:1151 mod/editpost.php:74 mod/message.php:258 +#: include/conversation.php:1210 mod/editpost.php:72 mod/message.php:258 #: mod/message.php:439 mod/wallmessage.php:139 msgid "Upload photo" msgstr "Nahrát fotku" -#: include/conversation.php:1152 mod/editpost.php:75 +#: include/conversation.php:1211 mod/editpost.php:73 msgid "upload photo" msgstr "nahrát fotku" -#: include/conversation.php:1153 mod/editpost.php:76 +#: include/conversation.php:1212 mod/editpost.php:74 msgid "Attach file" msgstr "Přiložit soubor" -#: include/conversation.php:1154 mod/editpost.php:77 +#: include/conversation.php:1213 mod/editpost.php:75 msgid "attach file" msgstr "přiložit soubor" -#: include/conversation.php:1155 src/Object/Post.php:875 +#: include/conversation.php:1214 src/Object/Post.php:878 msgid "Bold" msgstr "Tučné" -#: include/conversation.php:1156 src/Object/Post.php:876 +#: include/conversation.php:1215 src/Object/Post.php:879 msgid "Italic" msgstr "Kurziva" -#: include/conversation.php:1157 src/Object/Post.php:877 +#: include/conversation.php:1216 src/Object/Post.php:880 msgid "Underline" msgstr "Podtržené" -#: include/conversation.php:1158 src/Object/Post.php:878 +#: include/conversation.php:1217 src/Object/Post.php:881 msgid "Quote" msgstr "Citace" -#: include/conversation.php:1159 src/Object/Post.php:879 +#: include/conversation.php:1218 src/Object/Post.php:882 msgid "Code" msgstr "Kód" -#: include/conversation.php:1160 src/Object/Post.php:880 +#: include/conversation.php:1219 src/Object/Post.php:883 msgid "Image" msgstr "Obrázek" -#: include/conversation.php:1161 src/Object/Post.php:881 +#: include/conversation.php:1220 src/Object/Post.php:884 msgid "Link" msgstr "Odkaz" -#: include/conversation.php:1162 src/Object/Post.php:882 +#: include/conversation.php:1221 src/Object/Post.php:885 msgid "Link or Media" msgstr "Odkaz nebo média" -#: include/conversation.php:1163 mod/editpost.php:84 +#: include/conversation.php:1222 mod/editpost.php:82 msgid "Set your location" msgstr "Nastavit vaši polohu" -#: include/conversation.php:1164 mod/editpost.php:85 +#: include/conversation.php:1223 mod/editpost.php:83 msgid "set location" msgstr "nastavit polohu" -#: include/conversation.php:1165 mod/editpost.php:86 +#: include/conversation.php:1224 mod/editpost.php:84 msgid "Clear browser location" msgstr "Vymazat polohu v prohlížeči" -#: include/conversation.php:1166 mod/editpost.php:87 +#: include/conversation.php:1225 mod/editpost.php:85 msgid "clear location" msgstr "vymazat polohu" -#: include/conversation.php:1168 mod/editpost.php:102 +#: include/conversation.php:1227 mod/editpost.php:99 msgid "Set title" msgstr "Nastavit nadpis" -#: include/conversation.php:1170 mod/editpost.php:104 +#: include/conversation.php:1229 mod/editpost.php:101 msgid "Categories (comma-separated list)" msgstr "Kategorie (seznam, oddělujte čárkou)" -#: include/conversation.php:1172 mod/editpost.php:89 +#: include/conversation.php:1231 mod/editpost.php:87 msgid "Permission settings" msgstr "Nastavení oprávnění" -#: include/conversation.php:1173 mod/editpost.php:119 +#: include/conversation.php:1232 mod/editpost.php:116 msgid "permissions" msgstr "oprávnění" -#: include/conversation.php:1182 mod/editpost.php:99 +#: include/conversation.php:1241 mod/editpost.php:96 msgid "Public post" msgstr "Veřejný příspěvek" -#: include/conversation.php:1186 mod/editpost.php:110 mod/events.php:551 -#: mod/photos.php:1458 mod/photos.php:1497 mod/photos.php:1557 -#: src/Object/Post.php:884 +#: include/conversation.php:1245 mod/editpost.php:107 mod/events.php:549 +#: mod/photos.php:1424 mod/photos.php:1463 mod/photos.php:1523 +#: src/Object/Post.php:887 msgid "Preview" msgstr "Náhled" -#: include/conversation.php:1190 include/items.php:396 -#: mod/dfrn_request.php:650 mod/editpost.php:113 mod/fbrowser.php:104 -#: mod/fbrowser.php:134 mod/follow.php:161 mod/message.php:153 -#: mod/photos.php:257 mod/photos.php:325 mod/settings.php:666 -#: mod/settings.php:692 mod/suggest.php:44 mod/tagrm.php:20 mod/tagrm.php:115 -#: mod/unfollow.php:132 mod/videos.php:105 src/Module/Contact.php:447 +#: include/conversation.php:1249 include/items.php:397 +#: mod/dfrn_request.php:650 mod/editpost.php:110 mod/fbrowser.php:110 +#: mod/fbrowser.php:139 mod/follow.php:172 mod/message.php:153 +#: mod/photos.php:1076 mod/photos.php:1183 mod/settings.php:675 +#: mod/settings.php:701 mod/suggest.php:76 mod/tagrm.php:20 mod/tagrm.php:115 +#: mod/unfollow.php:132 src/Module/Contact.php:450 msgid "Cancel" msgstr "Zrušit" -#: include/conversation.php:1195 +#: include/conversation.php:1254 msgid "Post to Groups" msgstr "Zveřejnit ve skupinách" -#: include/conversation.php:1196 +#: include/conversation.php:1255 msgid "Post to Contacts" msgstr "Zveřejnit v kontaktech" -#: include/conversation.php:1197 +#: include/conversation.php:1256 msgid "Private post" msgstr "Soukromý příspěvek" -#: include/conversation.php:1202 mod/editpost.php:117 -#: src/Model/Profile.php:370 +#: include/conversation.php:1261 mod/editpost.php:114 +#: src/Model/Profile.php:366 msgid "Message" msgstr "Zpráva" -#: include/conversation.php:1203 mod/editpost.php:118 +#: include/conversation.php:1262 mod/editpost.php:115 msgid "Browser" msgstr "Prohlížeč" -#: include/conversation.php:1475 +#: include/conversation.php:1534 msgid "View all" msgstr "Zobrazit vše" -#: include/conversation.php:1499 +#: include/conversation.php:1558 msgid "Like" msgid_plural "Likes" msgstr[0] "Líbí se" @@ -484,7 +513,7 @@ msgstr[1] "Líbí se" msgstr[2] "Líbí se" msgstr[3] "Líbí se" -#: include/conversation.php:1502 +#: include/conversation.php:1561 msgid "Dislike" msgid_plural "Dislikes" msgstr[0] "Nelíbí se" @@ -492,7 +521,7 @@ msgstr[1] "Nelíbí se" msgstr[2] "Nelíbí se" msgstr[3] "Nelíbí se" -#: include/conversation.php:1508 +#: include/conversation.php:1567 msgid "Not Attending" msgid_plural "Not Attending" msgstr[0] "Neúčastní se" @@ -500,7 +529,7 @@ msgstr[1] "Neúčastní se" msgstr[2] "Neúčastní se" msgstr[3] "Neúčastní se" -#: include/conversation.php:1511 src/Content/ContactSelector.php:167 +#: include/conversation.php:1570 src/Content/ContactSelector.php:167 msgid "Undecided" msgid_plural "Undecided" msgstr[0] "Nerozhodnut" @@ -823,2056 +852,58 @@ msgstr "Celé jméno:\t\t%s\nAdresa stránky:\t\t%s\nPřihlašovací jméno:\t%s msgid "Please visit %s to approve or reject the request." msgstr "Prosím navštivte %s k odsouhlasení nebo k zamítnutí požadavku." -#: include/items.php:353 mod/admin.php:302 mod/admin.php:2131 -#: mod/admin.php:2378 mod/notice.php:20 mod/viewsrc.php:22 +#: include/items.php:354 mod/notice.php:19 +#: src/Module/Admin/Themes/Details.php:53 src/Module/Admin/Themes/Index.php:41 +#: src/Module/ItemBody.php:27 src/Module/ItemBody.php:40 msgid "Item not found." msgstr "Položka nenalezena." -#: include/items.php:391 +#: include/items.php:392 msgid "Do you really want to delete this item?" msgstr "Opravdu chcete smazat tuto položku?" -#: include/items.php:393 mod/api.php:109 mod/dfrn_request.php:640 -#: mod/follow.php:150 mod/message.php:150 mod/profiles.php:526 -#: mod/profiles.php:529 mod/profiles.php:551 mod/settings.php:1085 -#: mod/settings.php:1091 mod/settings.php:1098 mod/settings.php:1102 -#: mod/settings.php:1106 mod/settings.php:1110 mod/settings.php:1114 -#: mod/settings.php:1118 mod/settings.php:1138 mod/settings.php:1139 -#: mod/settings.php:1140 mod/settings.php:1141 mod/settings.php:1142 -#: mod/suggest.php:41 src/Module/Contact.php:444 src/Module/Register.php:97 +#: include/items.php:394 mod/api.php:109 mod/dfrn_request.php:640 +#: mod/follow.php:161 mod/message.php:150 mod/profiles.php:526 +#: mod/profiles.php:529 mod/profiles.php:551 mod/settings.php:1084 +#: mod/settings.php:1090 mod/settings.php:1097 mod/settings.php:1101 +#: mod/settings.php:1105 mod/settings.php:1109 mod/settings.php:1113 +#: mod/settings.php:1117 mod/settings.php:1137 mod/settings.php:1138 +#: mod/settings.php:1139 mod/settings.php:1140 mod/settings.php:1141 +#: mod/suggest.php:73 src/Module/Contact.php:447 src/Module/Register.php:97 msgid "Yes" msgstr "Ano" -#: include/items.php:443 mod/allfriends.php:22 mod/api.php:34 mod/api.php:39 -#: mod/cal.php:303 mod/common.php:27 mod/crepair.php:90 mod/delegate.php:30 -#: mod/delegate.php:48 mod/delegate.php:59 mod/dfrn_confirm.php:66 -#: mod/dirfind.php:29 mod/editpost.php:22 mod/events.php:207 mod/follow.php:57 -#: mod/follow.php:121 mod/fsuggest.php:77 mod/group.php:28 mod/invite.php:23 -#: mod/invite.php:111 mod/item.php:167 mod/manage.php:129 mod/message.php:56 -#: mod/message.php:101 mod/network.php:35 mod/nogroup.php:18 mod/notes.php:27 -#: mod/notifications.php:70 mod/ostatus_subscribe.php:18 mod/photos.php:186 -#: mod/photos.php:1020 mod/poke.php:141 mod/profiles.php:182 +#: include/items.php:444 mod/api.php:34 mod/api.php:39 mod/cal.php:301 +#: mod/common.php:27 mod/crepair.php:90 mod/delegate.php:30 +#: mod/delegate.php:48 mod/delegate.php:59 mod/dfrn_confirm.php:64 +#: mod/dirfind.php:29 mod/editpost.php:21 mod/events.php:207 mod/follow.php:57 +#: mod/follow.php:132 mod/fsuggest.php:77 mod/item.php:169 mod/manage.php:130 +#: mod/message.php:56 mod/message.php:101 mod/network.php:36 mod/notes.php:27 +#: mod/notifications.php:70 mod/ostatus_subscribe.php:18 mod/photos.php:178 +#: mod/photos.php:958 mod/poke.php:141 mod/profiles.php:182 #: mod/profiles.php:499 mod/profile_photo.php:32 mod/profile_photo.php:177 #: mod/profile_photo.php:204 mod/regmod.php:89 mod/repair_ostatus.php:16 -#: mod/settings.php:48 mod/settings.php:154 mod/settings.php:655 -#: mod/suggest.php:62 mod/uimport.php:17 mod/unfollow.php:22 +#: mod/settings.php:50 mod/settings.php:163 mod/settings.php:664 +#: mod/suggest.php:39 mod/uimport.php:17 mod/unfollow.php:22 #: mod/unfollow.php:77 mod/unfollow.php:109 mod/viewcontacts.php:56 #: mod/wallmessage.php:19 mod/wallmessage.php:43 mod/wallmessage.php:82 #: mod/wallmessage.php:106 mod/wall_attach.php:76 mod/wall_attach.php:79 -#: mod/wall_upload.php:107 mod/wall_upload.php:110 src/App.php:1480 -#: src/Module/Attach.php:42 src/Module/Contact.php:360 -#: src/Module/Register.php:193 +#: mod/wall_upload.php:107 mod/wall_upload.php:110 src/Module/Attach.php:42 +#: src/Module/Contact.php:362 src/Module/FollowConfirm.php:27 +#: src/Module/Group.php:31 src/Module/Group.php:77 src/Module/Invite.php:22 +#: src/Module/Invite.php:110 src/Module/Register.php:192 msgid "Permission denied." msgstr "Přístup odmítnut." -#: include/items.php:514 src/Content/Feature.php:99 +#: include/items.php:515 src/Content/Feature.php:99 msgid "Archives" msgstr "Archivy" -#: include/items.php:520 src/Content/ForumManager.php:135 +#: include/items.php:521 src/Content/ForumManager.php:135 #: src/Content/Widget.php:329 view/theme/vier/theme.php:255 msgid "show more" msgstr "zobrazit více" -#: mod/admin.php:122 -msgid "Theme settings updated." -msgstr "Nastavení motivu bylo aktualizováno." - -#: mod/admin.php:196 src/Content/Nav.php:231 -msgid "Information" -msgstr "Informace" - -#: mod/admin.php:197 -msgid "Overview" -msgstr "Přehled" - -#: mod/admin.php:198 mod/admin.php:779 -msgid "Federation Statistics" -msgstr "Statistiky Federation" - -#: mod/admin.php:199 -msgid "Configuration" -msgstr "Konfigurace" - -#: mod/admin.php:200 mod/admin.php:1581 -msgid "Site" -msgstr "Web" - -#: mod/admin.php:201 mod/admin.php:1482 mod/admin.php:2062 mod/admin.php:2079 -msgid "Users" -msgstr "Uživatelé" - -#: mod/admin.php:202 mod/admin.php:2179 mod/admin.php:2239 mod/settings.php:99 -msgid "Addons" -msgstr "Doplňky" - -#: mod/admin.php:203 mod/admin.php:2436 mod/admin.php:2480 -msgid "Themes" -msgstr "Motivy" - -#: mod/admin.php:204 mod/settings.php:77 -msgid "Additional features" -msgstr "Dodatečné vlastnosti" - -#: mod/admin.php:205 mod/admin.php:329 src/Content/Nav.php:234 -#: src/Module/Register.php:144 src/Module/Tos.php:73 -msgid "Terms of Service" -msgstr "Podmínky používání" - -#: mod/admin.php:206 -msgid "Database" -msgstr "Databáze" - -#: mod/admin.php:207 -msgid "DB updates" -msgstr "Aktualizace databáze" - -#: mod/admin.php:208 mod/admin.php:823 -msgid "Inspect Queue" -msgstr "Prozkoumat frontu" - -#: mod/admin.php:209 -msgid "Inspect Deferred Workers" -msgstr "Prozkoumat odložené pracovníky" - -#: mod/admin.php:210 -msgid "Inspect worker Queue" -msgstr "Prozkoumat frontu pro pracovníka" - -#: mod/admin.php:211 -msgid "Tools" -msgstr "Nástroje" - -#: mod/admin.php:212 -msgid "Contact Blocklist" -msgstr "Blokované kontakty" - -#: mod/admin.php:213 mod/admin.php:395 -msgid "Server Blocklist" -msgstr "Blokované servery" - -#: mod/admin.php:214 mod/admin.php:558 -msgid "Delete Item" -msgstr "Smazat položku" - -#: mod/admin.php:215 mod/admin.php:216 mod/admin.php:2556 -msgid "Logs" -msgstr "Záznamy" - -#: mod/admin.php:217 mod/admin.php:2624 -msgid "View Logs" -msgstr "Zobrazit záznamy" - -#: mod/admin.php:219 -msgid "Diagnostics" -msgstr "Diagnostika" - -#: mod/admin.php:220 -msgid "PHP Info" -msgstr "Info o PHP" - -#: mod/admin.php:221 -msgid "probe address" -msgstr "vyzkoušet adresu" - -#: mod/admin.php:222 -msgid "check webfinger" -msgstr "vyzkoušet webfinger" - -#: mod/admin.php:242 src/Content/Nav.php:274 -msgid "Admin" -msgstr "Administrátor" - -#: mod/admin.php:243 -msgid "Addon Features" -msgstr "Vlastnosti doplňků" - -#: mod/admin.php:244 -msgid "User registrations waiting for confirmation" -msgstr "Registrace uživatelů čekající na potvrzení" - -#: mod/admin.php:328 mod/admin.php:394 mod/admin.php:514 mod/admin.php:557 -#: mod/admin.php:778 mod/admin.php:822 mod/admin.php:875 mod/admin.php:998 -#: mod/admin.php:1580 mod/admin.php:2061 mod/admin.php:2178 mod/admin.php:2238 -#: mod/admin.php:2435 mod/admin.php:2479 mod/admin.php:2555 mod/admin.php:2623 -msgid "Administration" -msgstr "Administrace" - -#: mod/admin.php:330 -msgid "Display Terms of Service" -msgstr "Zobrazit Podmínky používání" - -#: mod/admin.php:330 -msgid "" -"Enable the Terms of Service page. If this is enabled a link to the terms " -"will be added to the registration form and the general information page." -msgstr "Povolí stránku Podmínky používání. Pokud je toto povoleno, bude na formulář pro registrací a stránku s obecnými informacemi přidán odkaz k podmínkám." - -#: mod/admin.php:331 -msgid "Display Privacy Statement" -msgstr "Zobrazit Prohlášení o soukromí" - -#: mod/admin.php:331 -#, php-format -msgid "" -"Show some informations regarding the needed information to operate the node " -"according e.g. to EU-GDPR." -msgstr "Ukázat některé informace ohledně potřebných informací k provozování serveru podle například Obecného nařízení o ochraně osobních údajů EU (GDPR)" - -#: mod/admin.php:332 -msgid "Privacy Statement Preview" -msgstr "Náhled Prohlášení o soukromí" - -#: mod/admin.php:334 -msgid "The Terms of Service" -msgstr "Podmínky používání" - -#: mod/admin.php:334 -msgid "" -"Enter the Terms of Service for your node here. You can use BBCode. Headers " -"of sections should be [h2] and below." -msgstr "Zde zadejte podmínky používání vašeho serveru. Můžete používat BBCode. Záhlaví sekcí by měly být označeny [h2] a níže." - -#: mod/admin.php:336 mod/admin.php:1582 mod/admin.php:2240 mod/admin.php:2481 -#: mod/admin.php:2557 mod/admin.php:2707 mod/delegate.php:175 -#: mod/settings.php:665 mod/settings.php:772 mod/settings.php:860 -#: mod/settings.php:949 mod/settings.php:1174 -msgid "Save Settings" -msgstr "Uložit nastavení" - -#: mod/admin.php:386 mod/admin.php:404 mod/dfrn_request.php:346 -#: mod/friendica.php:131 src/Model/Contact.php:1719 -msgid "Blocked domain" -msgstr "Zablokovaná doména" - -#: mod/admin.php:386 -msgid "The blocked domain" -msgstr "Zablokovaná doména" - -#: mod/admin.php:387 mod/admin.php:405 mod/friendica.php:131 -msgid "Reason for the block" -msgstr "Důvody pro zablokování" - -#: mod/admin.php:387 mod/admin.php:400 -msgid "The reason why you blocked this domain." -msgstr "Důvod, proč jste doménu zablokoval/a" - -#: mod/admin.php:388 -msgid "Delete domain" -msgstr "Smazat doménu" - -#: mod/admin.php:388 -msgid "Check to delete this entry from the blocklist" -msgstr "Zaškrtnutím odstraníte tuto položku z blokovacího seznamu" - -#: mod/admin.php:396 -msgid "" -"This page can be used to define a black list of servers from the federated " -"network that are not allowed to interact with your node. For all entered " -"domains you should also give a reason why you have blocked the remote " -"server." -msgstr "Tato stránka může být použita k definici „černé listiny“ serverů z federované sítě, kterým není dovoleno interagovat s vaším serverem. Měl/a byste také pro všechny zadané domény uvést důvod, proč jste vzdálený server zablokoval/a." - -#: mod/admin.php:397 -msgid "" -"The list of blocked servers will be made publically available on the " -"/friendica page so that your users and people investigating communication " -"problems can find the reason easily." -msgstr "Seznam zablokovaných serverů bude zveřejněn na stránce /friendica, takže vaši uživatelé a lidé vyšetřující probém s komunikací mohou důvod najít snadno." - -#: mod/admin.php:398 -msgid "Add new entry to block list" -msgstr "Přidat na blokovací seznam novou položku" - -#: mod/admin.php:399 -msgid "Server Domain" -msgstr "Serverová doména" - -#: mod/admin.php:399 -msgid "" -"The domain of the new server to add to the block list. Do not include the " -"protocol." -msgstr "Doména serveru, který má být přidán na blokovací seznam. Vynechejte protokol („http://“)." - -#: mod/admin.php:400 -msgid "Block reason" -msgstr "Důvod zablokování" - -#: mod/admin.php:401 -msgid "Add Entry" -msgstr "Přidat položku" - -#: mod/admin.php:402 -msgid "Save changes to the blocklist" -msgstr "Uložit změny do blokovacího seznamu" - -#: mod/admin.php:403 -msgid "Current Entries in the Blocklist" -msgstr "Aktuální položky v bokovacím seznamu" - -#: mod/admin.php:406 -msgid "Delete entry from blocklist" -msgstr "Odstranit položku z blokovacího seznamu" - -#: mod/admin.php:409 -msgid "Delete entry from blocklist?" -msgstr "Odstranit položku z blokovacího seznamu?" - -#: mod/admin.php:436 -msgid "Server added to blocklist." -msgstr "Server přidán do blokovacího seznamu" - -#: mod/admin.php:452 -msgid "Site blocklist updated." -msgstr "Blokovací seznam stránky aktualizován" - -#: mod/admin.php:477 src/Core/Console/GlobalCommunityBlock.php:68 -msgid "The contact has been blocked from the node" -msgstr "Kontakt byl na serveru zablokován" - -#: mod/admin.php:479 src/Core/Console/GlobalCommunityBlock.php:65 -#, php-format -msgid "Could not find any contact entry for this URL (%s)" -msgstr "Nelze nalézt žádnou položku v kontaktech pro tuto URL adresu (%s)" - -#: mod/admin.php:486 -#, php-format -msgid "%s contact unblocked" -msgid_plural "%s contacts unblocked" -msgstr[0] "%s kontakt odblokován" -msgstr[1] "%s kontakty odblokovány" -msgstr[2] "%s kontaktu odblokováno" -msgstr[3] "%s kontaktů odblokováno" - -#: mod/admin.php:515 -msgid "Remote Contact Blocklist" -msgstr "Blokované vzdálené kontakty" - -#: mod/admin.php:516 -msgid "" -"This page allows you to prevent any message from a remote contact to reach " -"your node." -msgstr "Tato stránka vám umožňuje zabránit jakýmkoliv zprávám ze vzdáleného kontaktu, aby se k vašemu serveru dostaly." - -#: mod/admin.php:517 -msgid "Block Remote Contact" -msgstr "Zablokovat vzdálený kontakt" - -#: mod/admin.php:518 mod/admin.php:2064 -msgid "select all" -msgstr "Vybrat vše" - -#: mod/admin.php:519 -msgid "select none" -msgstr "nevybrat žádný" - -#: mod/admin.php:520 mod/admin.php:2073 src/Module/Contact.php:621 -#: src/Module/Contact.php:824 src/Module/Contact.php:1077 -msgid "Block" -msgstr "Blokovat" - -#: mod/admin.php:521 mod/admin.php:2075 src/Module/Contact.php:621 -#: src/Module/Contact.php:824 src/Module/Contact.php:1077 -msgid "Unblock" -msgstr "Odblokovat" - -#: mod/admin.php:522 -msgid "No remote contact is blocked from this node." -msgstr "Žádný vzdálený kontakt není na tomto serveru zablokován." - -#: mod/admin.php:524 -msgid "Blocked Remote Contacts" -msgstr "Zablokované vzdálené kontakty" - -#: mod/admin.php:525 -msgid "Block New Remote Contact" -msgstr "Zablokovat nový vzdálený kontakt" - -#: mod/admin.php:526 -msgid "Photo" -msgstr "Fotka" - -#: mod/admin.php:526 mod/admin.php:2056 mod/admin.php:2067 mod/admin.php:2081 -#: mod/admin.php:2097 mod/crepair.php:159 mod/settings.php:667 -#: mod/settings.php:693 -msgid "Name" -msgstr "Jméno" - -#: mod/admin.php:526 mod/profiles.php:382 -msgid "Address" -msgstr "Adresa" - -#: mod/admin.php:526 mod/admin.php:536 mod/follow.php:166 -#: mod/notifications.php:179 mod/notifications.php:263 mod/unfollow.php:137 -#: src/Module/Contact.php:639 -msgid "Profile URL" -msgstr "URL profilu" - -#: mod/admin.php:534 -#, php-format -msgid "%s total blocked contact" -msgid_plural "%s total blocked contacts" -msgstr[0] "Celkem %s zablokovaný kontakt" -msgstr[1] "Celkem %s zablokované kontakty" -msgstr[2] "Celkem %s zablokovaného kontaktu" -msgstr[3] "Celkem %s zablokovaných kontaktů" - -#: mod/admin.php:536 -msgid "URL of the remote contact to block." -msgstr "Adresa URL vzdáleného kontaktu k zablokování." - -#: mod/admin.php:559 -msgid "Delete this Item" -msgstr "Smazat tuto položku" - -#: mod/admin.php:560 -msgid "" -"On this page you can delete an item from your node. If the item is a top " -"level posting, the entire thread will be deleted." -msgstr "Na této stránce můžete smazat položku z vašeho serveru. Pokud je položkou příspěvek nejvyššího stupně, bude smazáno celé vlákno." - -#: mod/admin.php:561 -msgid "" -"You need to know the GUID of the item. You can find it e.g. by looking at " -"the display URL. The last part of http://example.com/display/123456 is the " -"GUID, here 123456." -msgstr "Budete muset znát číslo GUID položky. Můžete jej najít např. v adrese URL. Poslední část adresy http://priklad.cz/display/123456 je GUID, v tomto případě 123456" - -#: mod/admin.php:562 -msgid "GUID" -msgstr "GUID" - -#: mod/admin.php:562 -msgid "The GUID of the item you want to delete." -msgstr "Číslo GUID položky, kterou chcete smazat" - -#: mod/admin.php:597 -msgid "Item marked for deletion." -msgstr "Položka označená ke smazání" - -#: mod/admin.php:669 -msgid "unknown" -msgstr "neznámé" - -#: mod/admin.php:772 -msgid "" -"This page offers you some numbers to the known part of the federated social " -"network your Friendica node is part of. These numbers are not complete but " -"only reflect the part of the network your node is aware of." -msgstr "Tato stránka vám nabízí pár čísel pro známou část federované sociální sítě, které je váš server Friendica součástí. Tato čísla nejsou kompletní, ale pouze odrážejí část sítě, které si je Váš server vědom." - -#: mod/admin.php:773 -msgid "" -"The Auto Discovered Contact Directory feature is not enabled, it " -"will improve the data displayed here." -msgstr "Funkce Adresář automaticky objevených kontaktů není zapnuta, zlepší zde zobrazená data." - -#: mod/admin.php:785 -#, php-format -msgid "" -"Currently this node is aware of %d nodes with %d registered users from the " -"following platforms:" -msgstr "Aktuálně si je tento server vědom %d serverů s %d registrovanými uživateli z těchto platforem:" - -#: mod/admin.php:825 mod/admin.php:878 -msgid "ID" -msgstr "Identifikátor" - -#: mod/admin.php:826 -msgid "Recipient Name" -msgstr "Jméno příjemce" - -#: mod/admin.php:827 -msgid "Recipient Profile" -msgstr "Profil příjemce" - -#: mod/admin.php:828 src/Content/Nav.php:239 -#: src/Core/NotificationsManager.php:182 view/theme/frio/theme.php:269 -msgid "Network" -msgstr "Síť" - -#: mod/admin.php:829 mod/admin.php:880 -msgid "Created" -msgstr "Vytvořeno" - -#: mod/admin.php:830 -msgid "Last Tried" -msgstr "Naposled vyzkoušeno" - -#: mod/admin.php:831 -msgid "" -"This page lists the content of the queue for outgoing postings. These are " -"postings the initial delivery failed for. They will be resend later and " -"eventually deleted if the delivery fails permanently." -msgstr "Na této stránce najdete obsah fronty odchozích příspěvků. Toto jsou příspěvky, u kterých počáteční doručení selhalo. Budou znovu poslány později, a pokud doručení selže trvale, budou nakonec smazány." - -#: mod/admin.php:854 -msgid "Inspect Deferred Worker Queue" -msgstr "Prozkoumat frontu odložených pracovníků" - -#: mod/admin.php:855 -msgid "" -"This page lists the deferred worker jobs. This are jobs that couldn't be " -"executed at the first time." -msgstr "Na této stránce jsou vypsány odložené úlohy pracovníků. To jsou úlohy, které nemohly být napoprvé provedeny." - -#: mod/admin.php:858 -msgid "Inspect Worker Queue" -msgstr "Prozkoumat frontu pro pracovníka" - -#: mod/admin.php:859 -msgid "" -"This page lists the currently queued worker jobs. These jobs are handled by " -"the worker cronjob you've set up during install." -msgstr "Na této stránce jsou vypsány aktuálně čekající úlohy pro pracovníka . Tyto úlohy vykonává úloha cron pracovníka, kterou jste nastavil/a při instalaci." - -#: mod/admin.php:879 -msgid "Job Parameters" -msgstr "Parametry úlohy" - -#: mod/admin.php:881 -msgid "Priority" -msgstr "Priorita" - -#: mod/admin.php:907 -#, php-format -msgid "" -"Your DB still runs with MyISAM tables. You should change the engine type to " -"InnoDB. As Friendica will use InnoDB only features in the future, you should" -" change this! See here for a guide that may be helpful " -"converting the table engines. You may also use the command php " -"bin/console.php dbstructure toinnodb of your Friendica installation for" -" an automatic conversion..htconfig.php
. See the Config help page for "
-"help with the transition."
-msgstr "Konfigurace Friendica je nyní uložena v souboru config/local.config.php, prosím zkopírujte soubor config/local-sample.config.php a přesuňte svou konfiguraci ze souboru .htconfig.php
. Pro pomoc při přechodu navštivte stránku Config v sekci nápovědy."
-
-#: mod/admin.php:943
-#, php-format
-msgid ""
-"Friendica's configuration now is stored in config/local.config.php, please "
-"copy config/local-sample.config.php and move your config from "
-"config/local.ini.php
. See the Config help "
-"page for help with the transition."
-msgstr "Konfigurace Friendica je nyní uložena v souboru config/local.config.php, prosím zkopírujte soubor config/local-sample.config.php a přesuňte svou konfiguraci ze souboru local.config.php
. Pro pomoc při přechodu navštivte stránku Config v sekci nápovědy."
-
-#: mod/admin.php:950
-#, php-format
-msgid ""
-"%s is not reachable on your system. This is a severe "
-"configuration issue that prevents server to server communication. See the installation page for help."
-msgstr "%s není na Vašem systému dosažitelné. Tohle je závažná chyba konfigurace, která brání komunikaci mezi servery. Pro pomoc navštivte stránku instalace."
-
-#: mod/admin.php:956
-msgid "Normal Account"
-msgstr "Normální účet"
-
-#: mod/admin.php:957
-msgid "Automatic Follower Account"
-msgstr "Účet s automatickými sledujícími"
-
-#: mod/admin.php:958
-msgid "Public Forum Account"
-msgstr "Účet veřejného fóra"
-
-#: mod/admin.php:959
-msgid "Automatic Friend Account"
-msgstr "Účet s automatickými přáteli"
-
-#: mod/admin.php:960
-msgid "Blog Account"
-msgstr "Blogovací účet"
-
-#: mod/admin.php:961
-msgid "Private Forum Account"
-msgstr "Účet soukromého fóra"
-
-#: mod/admin.php:984
-msgid "Message queues"
-msgstr "Fronty zpráv"
-
-#: mod/admin.php:990
-msgid "Server Settings"
-msgstr "Nastavení serveru"
-
-#: mod/admin.php:999
-msgid "Summary"
-msgstr "Shrnutí"
-
-#: mod/admin.php:1001
-msgid "Registered users"
-msgstr "Registrovaní uživatelé"
-
-#: mod/admin.php:1003
-msgid "Pending registrations"
-msgstr "Čekající registrace"
-
-#: mod/admin.php:1004
-msgid "Version"
-msgstr "Verze"
-
-#: mod/admin.php:1009
-msgid "Active addons"
-msgstr "Aktivní doplňky"
-
-#: mod/admin.php:1042
-msgid "Can not parse base url. Must have at least .htconfig.php
. See the Config help page for "
+"help with the transition."
+msgstr "Konfigurace Friendica je nyní uložena v souboru config/local.config.php, prosím zkopírujte soubor config/local-sample.config.php a přesuňte svou konfiguraci ze souboru .htconfig.php
. Pro pomoc při přechodu navštivte stránku Config v sekci nápovědy."
+
+#: src/Module/Admin/Summary.php:67
+#, php-format
+msgid ""
+"Friendica's configuration now is stored in config/local.config.php, please "
+"copy config/local-sample.config.php and move your config from "
+"config/local.ini.php
. See the Config help "
+"page for help with the transition."
+msgstr "Konfigurace Friendica je nyní uložena v souboru config/local.config.php, prosím zkopírujte soubor config/local-sample.config.php a přesuňte svou konfiguraci ze souboru local.config.php
. Pro pomoc při přechodu navštivte stránku Config v sekci nápovědy."
+
+#: src/Module/Admin/Summary.php:73
+#, php-format
+msgid ""
+"%s is not reachable on your system. This is a severe "
+"configuration issue that prevents server to server communication. See the installation page for help."
+msgstr "%s není na Vašem systému dosažitelné. Tohle je závažná chyba konfigurace, která brání komunikaci mezi servery. Pro pomoc navštivte stránku instalace."
+
+#: src/Module/Admin/Summary.php:89
+#, php-format
+msgid ""
+"Friendica's system.basepath was updated from '%s' to '%s'. Please remove the"
+" system.basepath from your db to avoid differences."
+msgstr "system.basepath Friendica bylo aktualizováno z „%s“ na „%s“. Pro vyhnutí se rozdílům prosím odstraňte z vaší databáze system.basepath."
+
+#: src/Module/Admin/Summary.php:97
+#, php-format
+msgid ""
+"Friendica's current system.basepath '%s' is wrong and the config file '%s' "
+"isn't used."
+msgstr "Aktuální system.basepath Friendica „%s“ je špatné a konfigurační soubor „%s“ se nepoužívá."
+
+#: src/Module/Admin/Summary.php:105
+#, php-format
+msgid ""
+"Friendica's current system.basepath '%s' is not equal to the config file "
+"'%s'. Please fix your configuration."
+msgstr "Aktuální system.basepath „%s“ není rovno konfguračnímu souboru „%s“. Prosím opravte si svou konfiguraci."
+
+#: src/Module/Admin/Summary.php:112
+msgid "Normal Account"
+msgstr "Normální účet"
+
+#: src/Module/Admin/Summary.php:113
+msgid "Automatic Follower Account"
+msgstr "Účet s automatickými sledujícími"
+
+#: src/Module/Admin/Summary.php:114
+msgid "Public Forum Account"
+msgstr "Účet veřejného fóra"
+
+#: src/Module/Admin/Summary.php:115
+msgid "Automatic Friend Account"
+msgstr "Účet s automatickými přáteli"
+
+#: src/Module/Admin/Summary.php:116
+msgid "Blog Account"
+msgstr "Blogovací účet"
+
+#: src/Module/Admin/Summary.php:117
+msgid "Private Forum Account"
+msgstr "Účet soukromého fóra"
+
+#: src/Module/Admin/Summary.php:141
+msgid "Message queues"
+msgstr "Fronty zpráv"
+
+#: src/Module/Admin/Summary.php:147
+msgid "Server Settings"
+msgstr "Nastavení serveru"
+
+#: src/Module/Admin/Summary.php:161
+msgid "Summary"
+msgstr "Shrnutí"
+
+#: src/Module/Admin/Summary.php:163
+msgid "Registered users"
+msgstr "Registrovaní uživatelé"
+
+#: src/Module/Admin/Summary.php:165
+msgid "Pending registrations"
+msgstr "Čekající registrace"
+
+#: src/Module/Admin/Summary.php:166
+msgid "Version"
+msgstr "Verze"
+
+#: src/Module/Admin/Summary.php:170
+msgid "Active addons"
+msgstr "Aktivní doplňky"
+
+#: src/Module/Admin/Themes/Details.php:32 src/Module/Admin/Themes/Embed.php:46
+msgid "Theme settings updated."
+msgstr "Nastavení motivu bylo aktualizováno."
+
+#: src/Module/Admin/Themes/Details.php:71 src/Module/Admin/Themes/Index.php:47
+#, php-format
+msgid "Theme %s disabled."
+msgstr "Motiv %s zakázán."
+
+#: src/Module/Admin/Themes/Details.php:73 src/Module/Admin/Themes/Index.php:49
+#, php-format
+msgid "Theme %s successfully enabled."
+msgstr "Motiv %s úspěšně povolen."
+
+#: src/Module/Admin/Themes/Details.php:75 src/Module/Admin/Themes/Index.php:51
+#, php-format
+msgid "Theme %s failed to install."
+msgstr "Instalace motivu %s selhala."
+
+#: src/Module/Admin/Themes/Details.php:97
+msgid "Screenshot"
+msgstr "Snímek obrazovky"
+
+#: src/Module/Admin/Themes/Details.php:105
+#: src/Module/Admin/Themes/Index.php:94 src/Module/BaseAdminModule.php:83
+msgid "Themes"
+msgstr "Motivy"
+
+#: src/Module/Admin/Themes/Embed.php:67
+msgid "Unknown theme."
+msgstr "Neznámý motiv."
+
+#: src/Module/Admin/Themes/Index.php:96
+msgid "Reload active themes"
+msgstr "Znovu načíst aktivní motivy"
+
+#: src/Module/Admin/Themes/Index.php:101
+#, php-format
+msgid "No themes found on the system. They should be placed in %1$s"
+msgstr "V systému nebyly nalezeny žádné motivy. Měly by být uloženy v %1$s"
+
+#: src/Module/Admin/Themes/Index.php:102
+msgid "[Experimental]"
+msgstr "[Experimentální]"
+
+#: src/Module/Admin/Themes/Index.php:103
+msgid "[Unsupported]"
+msgstr "[Nepodporováno]"
+
+#: src/Module/Admin/Tos.php:30
+msgid "The Terms of Service settings have been updated."
+msgstr "Nastavení Podmínek používání byla aktualizována."
+
+#: src/Module/Admin/Tos.php:44
+msgid "Display Terms of Service"
+msgstr "Zobrazit Podmínky používání"
+
+#: src/Module/Admin/Tos.php:44
+msgid ""
+"Enable the Terms of Service page. If this is enabled a link to the terms "
+"will be added to the registration form and the general information page."
+msgstr "Povolí stránku Podmínky používání. Pokud je toto povoleno, bude na formulář pro registrací a stránku s obecnými informacemi přidán odkaz k podmínkám."
+
+#: src/Module/Admin/Tos.php:45
+msgid "Display Privacy Statement"
+msgstr "Zobrazit Prohlášení o soukromí"
+
+#: src/Module/Admin/Tos.php:45
+#, php-format
+msgid ""
+"Show some informations regarding the needed information to operate the node "
+"according e.g. to EU-GDPR."
+msgstr "Ukázat některé informace ohledně potřebných informací k provozování serveru podle například Obecného nařízení o ochraně osobních údajů EU (GDPR)"
+
+#: src/Module/Admin/Tos.php:46
+msgid "Privacy Statement Preview"
+msgstr "Náhled Prohlášení o soukromí"
+
+#: src/Module/Admin/Tos.php:48
+msgid "The Terms of Service"
+msgstr "Podmínky používání"
+
+#: src/Module/Admin/Tos.php:48
+msgid ""
+"Enter the Terms of Service for your node here. You can use BBCode. Headers "
+"of sections should be [h2] and below."
+msgstr "Zde zadejte podmínky používání vašeho serveru. Můžete používat BBCode. Záhlaví sekcí by měly být označeny [h2] a níže."
+
+#: src/Module/Admin/Users.php:48
+#, php-format
+msgid ""
+"\n"
+"\t\t\tDear %1$s,\n"
+"\t\t\t\tthe administrator of %2$s has set up an account for you."
+msgstr "\n\t\t\tVážený/á %1$s,\n\t\t\t\tadministrátor %2$s pro Vás vytvořil uživatelský účet."
+
+#: src/Module/Admin/Users.php:51
+#, php-format
+msgid ""
+"\n"
+"\t\t\tThe login details are as follows:\n"
+"\n"
+"\t\t\tSite Location:\t%1$s\n"
+"\t\t\tLogin Name:\t\t%2$s\n"
+"\t\t\tPassword:\t\t%3$s\n"
+"\n"
+"\t\t\tYou may change your password from your account \"Settings\" page after logging\n"
+"\t\t\tin.\n"
+"\n"
+"\t\t\tPlease take a few moments to review the other account settings on that page.\n"
+"\n"
+"\t\t\tYou may also wish to add some basic information to your default profile\n"
+"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n"
+"\n"
+"\t\t\tWe recommend setting your full name, adding a profile photo,\n"
+"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n"
+"\t\t\tperhaps what country you live in; if you do not wish to be more specific\n"
+"\t\t\tthan that.\n"
+"\n"
+"\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n"
+"\t\t\tIf you are new and do not know anybody here, they may help\n"
+"\t\t\tyou to make some new and interesting friends.\n"
+"\n"
+"\t\t\tIf you ever want to delete your account, you can do so at %1$s/removeme\n"
+"\n"
+"\t\t\tThank you and welcome to %4$s."
+msgstr "\n\t\t\tZde jsou vaše přihlašovací detaily:\n\n\t\t\tAdresa stránky:\t\t%1$s\n\t\t\tPřihlašovací jméno:\t%2$s\n\t\t\tHeslo:\t\t\t%3$s\n\n\t\t\tSvé heslo si po přihlášení můžete změnit na stránce „Nastavení“ vašeho\n\t\t\túčtu.\n\n\t\t\tProsím, prohlédněte si na chvilku ostatní nastavení účtu na této stránce.\n\n\t\t\tMožná byste si také přál/a přidat pár základních informací na svůj výchozí\n\t\t\tprofil (na stránce „Profily“) aby vás další lidé mohli snadno najít.\n\t\t\tDoporučujeme nastavit si Vaše celé jméno, přidat profilovou fotku,\n\t\t\tpřidat pár „klíčových slov“ k profilu (velmi užitečné při získávání nových\n\t\t\tpřátel) - a možná v jaké zemi žijete; pokud nechcete být konkrétnější.\n\n\t\t\tZcela respektujeme vaše právo na soukromí a žádnou z těchto položek\n\t\t\tnení potřeba vyplňovat. Pokud jste zde nový/á a nikoho zde neznáte, mohou vám\n\t\t\tpomoci si získat nové a zajímavé přátele.\n\t\t\tPokud byste si někdy přál/a smazat účet, můžete tak učinit na stránce\n\t\t\t%1$s/removeme.\n\n\t\t\tDěkujeme vám a vítáme vás na %4$s."
+
+#: src/Module/Admin/Users.php:96
+#, php-format
+msgid "%s user blocked"
+msgid_plural "%s users blocked"
+msgstr[0] "%s uživatel blokován"
+msgstr[1] "%s uživatelé blokování"
+msgstr[2] "%s uživatele blokováno"
+msgstr[3] "%s uživatelů blokováno"
+
+#: src/Module/Admin/Users.php:102
+#, php-format
+msgid "%s user unblocked"
+msgid_plural "%s users unblocked"
+msgstr[0] "%s uživatel odblokován"
+msgstr[1] "%s uživatelé odblokováni"
+msgstr[2] "%s uživatele odblokováno"
+msgstr[3] "%s uživatelů odblokováno"
+
+#: src/Module/Admin/Users.php:110 src/Module/Admin/Users.php:160
+msgid "You can't remove yourself"
+msgstr "Nemůžete odstranit sebe sama"
+
+#: src/Module/Admin/Users.php:114
+#, php-format
+msgid "%s user deleted"
+msgid_plural "%s users deleted"
+msgstr[0] "%s uživatel smazán"
+msgstr[1] "%s uživatelů smazáno"
+msgstr[2] "%s uživatele smazáno"
+msgstr[3] "%s uživatelů smazáno"
+
+#: src/Module/Admin/Users.php:158
+#, php-format
+msgid "User \"%s\" deleted"
+msgstr "Uživatel „%s“ smazán"
+
+#: src/Module/Admin/Users.php:167
+#, php-format
+msgid "User \"%s\" blocked"
+msgstr "Uživatel „%s“ zablokován"
+
+#: src/Module/Admin/Users.php:173
+#, php-format
+msgid "User \"%s\" unblocked"
+msgstr "Uživatel „%s“ odblokován"
+
+#: src/Module/Admin/Users.php:226
+msgid "Private Forum"
+msgstr "Soukromé fórum"
+
+#: src/Module/Admin/Users.php:233
+msgid "Relay"
+msgstr "Přeposílací server"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Register date"
+msgstr "Datum registrace"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Last login"
+msgstr "Datum posledního přihlášení"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Last item"
+msgstr "Poslední položka"
+
+#: src/Module/Admin/Users.php:272
+msgid "Type"
+msgstr "Typ"
+
+#: src/Module/Admin/Users.php:279
+msgid "Add User"
+msgstr "Přidat uživatele"
+
+#: src/Module/Admin/Users.php:281
+msgid "User registrations waiting for confirm"
+msgstr "Registrace uživatelů čekající na potvrzení"
+
+#: src/Module/Admin/Users.php:282
+msgid "User waiting for permanent deletion"
+msgstr "Uživatel čekající na trvalé smazání"
+
+#: src/Module/Admin/Users.php:283
+msgid "Request date"
+msgstr "Datum požadavku"
+
+#: src/Module/Admin/Users.php:284
+msgid "No registrations."
+msgstr "Žádné registrace."
+
+#: src/Module/Admin/Users.php:285
+msgid "Note from the user"
+msgstr "Poznámka od uživatele"
+
+#: src/Module/Admin/Users.php:287
+msgid "Deny"
+msgstr "Odmítnout"
+
+#: src/Module/Admin/Users.php:290
+msgid "User blocked"
+msgstr "Uživatel zablokován"
+
+#: src/Module/Admin/Users.php:292
+msgid "Site admin"
+msgstr "Administrátor webu"
+
+#: src/Module/Admin/Users.php:293
+msgid "Account expired"
+msgstr "Účtu vypršela platnost"
+
+#: src/Module/Admin/Users.php:296
+msgid "New User"
+msgstr "Nový uživatel"
+
+#: src/Module/Admin/Users.php:297
+msgid "Permanent deletion"
+msgstr "Trvalé smazání"
+
+#: src/Module/Admin/Users.php:302
+msgid ""
+"Selected users will be deleted!\\n\\nEverything these users had posted on "
+"this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr "Vybraní uživatelé budou smazáni!\\n\\n Vše, co tito uživatelé na těchto stránkách vytvořili, bude trvale odstraněno!\\n\\nOpravdu chcete pokračovat?"
+
+#: src/Module/Admin/Users.php:303
+msgid ""
+"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
+"site will be permanently deleted!\\n\\nAre you sure?"
+msgstr "Uživatel {0} bude smazán!\\n\\n Vše, co tento uživatel na těchto stránkách vytvořil, bude trvale odstraněno!\\n\\n Opravdu chcete pokračovat?"
+
+#: src/Module/Admin/Users.php:313
+msgid "Name of the new user."
+msgstr "Jméno nového uživatele."
+
+#: src/Module/Admin/Users.php:314
+msgid "Nickname"
+msgstr "Přezdívka"
+
+#: src/Module/Admin/Users.php:314
+msgid "Nickname of the new user."
+msgstr "Přezdívka nového uživatele."
+
+#: src/Module/Admin/Users.php:315
+msgid "Email address of the new user."
+msgstr "Emailová adresa nového uživatele."
+
+#: src/Module/AllFriends.php:55
+msgid "No friends to display."
+msgstr "Žádní přátelé k zobrazení"
+
+#: src/Module/Apps.php:29
+msgid "No installed applications."
+msgstr "Žádné nainstalované aplikace."
+
+#: src/Module/Apps.php:34
+msgid "Applications"
+msgstr "Aplikace"
+
#: src/Module/Attach.php:36 src/Module/Attach.php:48
msgid "Item was not found."
msgstr "Položka nebyla nalezena."
+#: src/Module/Babel.php:31
+msgid "Source input"
+msgstr "Zdrojový vstup"
+
+#: src/Module/Babel.php:37
+msgid "BBCode::toPlaintext"
+msgstr "BBCode::toPlaintext"
+
+#: src/Module/Babel.php:43
+msgid "BBCode::convert (raw HTML)"
+msgstr "BBCode::convert (hrubé HTML)"
+
+#: src/Module/Babel.php:48
+msgid "BBCode::convert"
+msgstr "BBCode::convert"
+
+#: src/Module/Babel.php:54
+msgid "BBCode::convert => HTML::toBBCode"
+msgstr "BBCode::convert => HTML::toBBCode"
+
+#: src/Module/Babel.php:60
+msgid "BBCode::toMarkdown"
+msgstr "BBCode::toMarkdown"
+
+#: src/Module/Babel.php:66
+msgid "BBCode::toMarkdown => Markdown::convert"
+msgstr "BBCode::toMarkdown => Markdown::convert"
+
+#: src/Module/Babel.php:72
+msgid "BBCode::toMarkdown => Markdown::toBBCode"
+msgstr "BBCode::toMarkdown => Markdown::toBBCode"
+
+#: src/Module/Babel.php:78
+msgid "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"
+msgstr "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"
+
+#: src/Module/Babel.php:89
+msgid "Item Body"
+msgstr "Tělo položky"
+
+#: src/Module/Babel.php:93
+msgid "Item Tags"
+msgstr "Štítky položky"
+
+#: src/Module/Babel.php:100
+msgid "Source input (Diaspora format)"
+msgstr "Zdrojový vstup (formát Diaspora)"
+
+#: src/Module/Babel.php:106
+msgid "Markdown::convert (raw HTML)"
+msgstr "Markdown::convert (hrubé HTML)"
+
+#: src/Module/Babel.php:111
+msgid "Markdown::convert"
+msgstr "Markdown::convert"
+
+#: src/Module/Babel.php:117
+msgid "Markdown::toBBCode"
+msgstr "Markdown::toBBCode"
+
+#: src/Module/Babel.php:124
+msgid "Raw HTML input"
+msgstr "Hrubý HTML vstup"
+
+#: src/Module/Babel.php:129
+msgid "HTML Input"
+msgstr "HTML vstup"
+
+#: src/Module/Babel.php:135
+msgid "HTML::toBBCode"
+msgstr "HTML::toBBCode"
+
+#: src/Module/Babel.php:141
+msgid "HTML::toBBCode => BBCode::convert"
+msgstr "HTML::toBBCode => BBCode::convert"
+
+#: src/Module/Babel.php:146
+msgid "HTML::toBBCode => BBCode::convert (raw HTML)"
+msgstr "HTML::toBBCode => BBCode::convert (hrubé HTML)"
+
+#: src/Module/Babel.php:152
+msgid "HTML::toMarkdown"
+msgstr "HTML::toMarkdown"
+
+#: src/Module/Babel.php:158
+msgid "HTML::toPlaintext"
+msgstr "HTML::toPlaintext"
+
+#: src/Module/Babel.php:166
+msgid "Source text"
+msgstr "Zdrojový text"
+
+#: src/Module/Babel.php:167
+msgid "BBCode"
+msgstr "BBCode"
+
+#: src/Module/Babel.php:168
+msgid "Markdown"
+msgstr "Markdown"
+
+#: src/Module/Babel.php:169
+msgid "HTML"
+msgstr "HTML"
+
+#: src/Module/BaseAdminModule.php:76
+msgid "Overview"
+msgstr "Přehled"
+
+#: src/Module/BaseAdminModule.php:79
+msgid "Configuration"
+msgstr "Konfigurace"
+
+#: src/Module/BaseAdminModule.php:87
+msgid "Database"
+msgstr "Databáze"
+
+#: src/Module/BaseAdminModule.php:88
+msgid "DB updates"
+msgstr "Aktualizace databáze"
+
+#: src/Module/BaseAdminModule.php:89
+msgid "Inspect Deferred Workers"
+msgstr "Prozkoumat odložené pracovníky"
+
+#: src/Module/BaseAdminModule.php:90
+msgid "Inspect worker Queue"
+msgstr "Prozkoumat frontu pro pracovníka"
+
+#: src/Module/BaseAdminModule.php:92
+msgid "Tools"
+msgstr "Nástroje"
+
+#: src/Module/BaseAdminModule.php:93
+msgid "Contact Blocklist"
+msgstr "Blokované kontakty"
+
+#: src/Module/BaseAdminModule.php:101
+msgid "Diagnostics"
+msgstr "Diagnostika"
+
+#: src/Module/BaseAdminModule.php:102
+msgid "PHP Info"
+msgstr "Info o PHP"
+
+#: src/Module/BaseAdminModule.php:103
+msgid "probe address"
+msgstr "vyzkoušet adresu"
+
+#: src/Module/BaseAdminModule.php:104
+msgid "check webfinger"
+msgstr "vyzkoušet webfinger"
+
+#: src/Module/BaseAdminModule.php:105
+msgid "Item Source"
+msgstr "Zdroj položky"
+
+#: src/Module/BaseAdminModule.php:106
+msgid "Babel"
+msgstr "Babel"
+
+#: src/Module/BaseAdminModule.php:115
+msgid "Addon Features"
+msgstr "Vlastnosti doplňků"
+
+#: src/Module/BaseAdminModule.php:116
+msgid "User registrations waiting for confirmation"
+msgstr "Registrace uživatelů čekající na potvrzení"
+
+#: src/Module/Bookmarklet.php:35
+msgid "This page is missing a url parameter."
+msgstr "Této stránce chybí parametr url."
+
+#: src/Module/Bookmarklet.php:57
+msgid "The post was created"
+msgstr "Příspěvek byl vytvořen"
+
#: src/Module/Contact.php:166
#, php-format
msgid "%d contact edited."
@@ -8866,453 +8651,688 @@ msgstr[1] "%d kontakty upraveny"
msgstr[2] "%d kontaktu upraveno"
msgstr[3] "%d kontaktů upraveno"
-#: src/Module/Contact.php:191 src/Module/Contact.php:374
+#: src/Module/Contact.php:193 src/Module/Contact.php:377
msgid "Could not access contact record."
msgstr "Nelze získat přístup k záznamu kontaktu."
-#: src/Module/Contact.php:201
+#: src/Module/Contact.php:203
msgid "Could not locate selected profile."
msgstr "Nelze nalézt vybraný profil."
-#: src/Module/Contact.php:233
+#: src/Module/Contact.php:235
msgid "Contact updated."
msgstr "Kontakt aktualizován."
-#: src/Module/Contact.php:395
+#: src/Module/Contact.php:398
msgid "Contact has been blocked"
msgstr "Kontakt byl zablokován"
-#: src/Module/Contact.php:395
+#: src/Module/Contact.php:398
msgid "Contact has been unblocked"
msgstr "Kontakt byl odblokován"
-#: src/Module/Contact.php:405
+#: src/Module/Contact.php:408
msgid "Contact has been ignored"
msgstr "Kontakt bude ignorován"
-#: src/Module/Contact.php:405
+#: src/Module/Contact.php:408
msgid "Contact has been unignored"
msgstr "Kontakt přestal být ignorován"
-#: src/Module/Contact.php:415
+#: src/Module/Contact.php:418
msgid "Contact has been archived"
msgstr "Kontakt byl archivován"
-#: src/Module/Contact.php:415
+#: src/Module/Contact.php:418
msgid "Contact has been unarchived"
msgstr "Kontakt byl vrácen z archivu."
-#: src/Module/Contact.php:439
+#: src/Module/Contact.php:442
msgid "Drop contact"
msgstr "Zrušit kontakt"
-#: src/Module/Contact.php:442 src/Module/Contact.php:820
+#: src/Module/Contact.php:445 src/Module/Contact.php:823
msgid "Do you really want to delete this contact?"
msgstr "Opravdu chcete smazat tento kontakt?"
-#: src/Module/Contact.php:456
+#: src/Module/Contact.php:459
msgid "Contact has been removed."
msgstr "Kontakt byl odstraněn."
-#: src/Module/Contact.php:486
+#: src/Module/Contact.php:489
#, php-format
msgid "You are mutual friends with %s"
msgstr "Jste vzájemní přátelé s uživatelem %s"
-#: src/Module/Contact.php:491
+#: src/Module/Contact.php:494
#, php-format
msgid "You are sharing with %s"
msgstr "Sdílíte s uživatelem %s"
-#: src/Module/Contact.php:496
+#: src/Module/Contact.php:499
#, php-format
msgid "%s is sharing with you"
msgstr "%s s vámi sdílí"
-#: src/Module/Contact.php:520
+#: src/Module/Contact.php:523
msgid "Private communications are not available for this contact."
msgstr "Soukromá komunikace není dostupná pro tento kontakt."
-#: src/Module/Contact.php:522
+#: src/Module/Contact.php:525
msgid "Never"
msgstr "Nikdy"
-#: src/Module/Contact.php:525
+#: src/Module/Contact.php:528
msgid "(Update was successful)"
msgstr "(Aktualizace byla úspěšná)"
-#: src/Module/Contact.php:525
+#: src/Module/Contact.php:528
msgid "(Update was not successful)"
msgstr "(Aktualizace nebyla úspěšná)"
-#: src/Module/Contact.php:527 src/Module/Contact.php:1058
+#: src/Module/Contact.php:530 src/Module/Contact.php:1061
msgid "Suggest friends"
msgstr "Navrhnout přátele"
-#: src/Module/Contact.php:531
+#: src/Module/Contact.php:534
#, php-format
msgid "Network type: %s"
msgstr "Typ sítě: %s"
-#: src/Module/Contact.php:536
+#: src/Module/Contact.php:539
msgid "Communications lost with this contact!"
msgstr "Komunikace s tímto kontaktem byla ztracena!"
-#: src/Module/Contact.php:542
+#: src/Module/Contact.php:545
msgid "Fetch further information for feeds"
msgstr "Načíst další informace pro kanál"
-#: src/Module/Contact.php:544
+#: src/Module/Contact.php:547
msgid ""
"Fetch information like preview pictures, title and teaser from the feed "
"item. You can activate this if the feed doesn't contain much text. Keywords "
"are taken from the meta header in the feed item and are posted as hash tags."
msgstr "Načíst informace jako obrázky náhledu, nadpis a popisek z položky kanálu. Toto můžete aktivovat, pokud kanál neobsahuje moc textu. Klíčová slova jsou vzata z hlavičky meta v položce kanálu a jsou zveřejněna jako hashtagy."
-#: src/Module/Contact.php:547
+#: src/Module/Contact.php:550
msgid "Fetch information"
msgstr "Načíst informace"
-#: src/Module/Contact.php:548
+#: src/Module/Contact.php:551
msgid "Fetch keywords"
msgstr "Načíst klíčová slova"
-#: src/Module/Contact.php:549
+#: src/Module/Contact.php:552
msgid "Fetch information and keywords"
msgstr "Načíst informace a klíčová slova"
-#: src/Module/Contact.php:581
+#: src/Module/Contact.php:584
msgid "Profile Visibility"
msgstr "Viditelnost profilu"
-#: src/Module/Contact.php:582
+#: src/Module/Contact.php:585
msgid "Contact Information / Notes"
msgstr "Kontaktní informace / poznámky"
-#: src/Module/Contact.php:583
+#: src/Module/Contact.php:586
msgid "Contact Settings"
msgstr "Nastavení kontaktů"
-#: src/Module/Contact.php:592
+#: src/Module/Contact.php:595
msgid "Contact"
msgstr "Kontakt"
-#: src/Module/Contact.php:596
+#: src/Module/Contact.php:599
#, php-format
msgid ""
"Please choose the profile you would like to display to %s when viewing your "
"profile securely."
msgstr "Vyberte prosím profil, který chcete zobrazit %s při zabezpečeném prohlížení vašeho profilu."
-#: src/Module/Contact.php:598
+#: src/Module/Contact.php:601
msgid "Their personal note"
msgstr "Jejich osobní poznámka"
-#: src/Module/Contact.php:600
+#: src/Module/Contact.php:603
msgid "Edit contact notes"
msgstr "Upravit poznámky kontaktu"
-#: src/Module/Contact.php:604
+#: src/Module/Contact.php:607
msgid "Block/Unblock contact"
msgstr "Blokovat / Odblokovat kontakt"
-#: src/Module/Contact.php:605
+#: src/Module/Contact.php:608
msgid "Ignore contact"
msgstr "Ignorovat kontakt"
-#: src/Module/Contact.php:606
+#: src/Module/Contact.php:609
msgid "Repair URL settings"
msgstr "Opravit nastavení adresy URL "
-#: src/Module/Contact.php:607
+#: src/Module/Contact.php:610
msgid "View conversations"
msgstr "Zobrazit konverzace"
-#: src/Module/Contact.php:612
+#: src/Module/Contact.php:615
msgid "Last update:"
msgstr "Poslední aktualizace:"
-#: src/Module/Contact.php:614
+#: src/Module/Contact.php:617
msgid "Update public posts"
msgstr "Aktualizovat veřejné příspěvky"
-#: src/Module/Contact.php:616 src/Module/Contact.php:1068
+#: src/Module/Contact.php:619 src/Module/Contact.php:1071
msgid "Update now"
msgstr "Aktualizovat"
-#: src/Module/Contact.php:622 src/Module/Contact.php:825
-#: src/Module/Contact.php:1085
+#: src/Module/Contact.php:625 src/Module/Contact.php:828
+#: src/Module/Contact.php:1088
msgid "Unignore"
msgstr "Přestat ignorovat"
-#: src/Module/Contact.php:626
+#: src/Module/Contact.php:629
msgid "Currently blocked"
msgstr "V současnosti zablokováno"
-#: src/Module/Contact.php:627
+#: src/Module/Contact.php:630
msgid "Currently ignored"
msgstr "V současnosti ignorováno"
-#: src/Module/Contact.php:628
+#: src/Module/Contact.php:631
msgid "Currently archived"
msgstr "Aktuálně archivován"
-#: src/Module/Contact.php:629
+#: src/Module/Contact.php:632
msgid "Awaiting connection acknowledge"
msgstr "Čekám na potrvzení spojení"
-#: src/Module/Contact.php:630
+#: src/Module/Contact.php:633
msgid ""
"Replies/likes to your public posts may still be visible"
msgstr "Odpovědi/oblíbení na vaše veřejné příspěvky mohou být stále viditelné"
-#: src/Module/Contact.php:631
+#: src/Module/Contact.php:634
msgid "Notification for new posts"
msgstr "Oznámení o nových příspěvcích"
-#: src/Module/Contact.php:631
+#: src/Module/Contact.php:634
msgid "Send a notification of every new post of this contact"
msgstr "Posílat oznámení o každém novém příspěvku tohoto kontaktu"
-#: src/Module/Contact.php:633
+#: src/Module/Contact.php:636
msgid "Blacklisted keywords"
msgstr "Zakázaná klíčová slova"
-#: src/Module/Contact.php:633
+#: src/Module/Contact.php:636
msgid ""
"Comma separated list of keywords that should not be converted to hashtags, "
"when \"Fetch information and keywords\" is selected"
msgstr "Seznam klíčových slov, které by neměly být převáděna na hashtagy, když je zvoleno „Načíst informace a klíčová slova“. Oddělujte čárkami"
-#: src/Module/Contact.php:650
+#: src/Module/Contact.php:653 src/Module/Settings/TwoFactor/Index.php:100
msgid "Actions"
msgstr "Akce"
-#: src/Module/Contact.php:696
+#: src/Module/Contact.php:700
msgid "Suggestions"
msgstr "Návrhy"
-#: src/Module/Contact.php:699
+#: src/Module/Contact.php:703
msgid "Suggest potential friends"
msgstr "Navrhnout potenciální přátele"
-#: src/Module/Contact.php:707
+#: src/Module/Contact.php:708 src/Module/Group.php:287
+msgid "All Contacts"
+msgstr "Všechny kontakty"
+
+#: src/Module/Contact.php:711
msgid "Show all contacts"
msgstr "Zobrazit všechny kontakty"
-#: src/Module/Contact.php:712
+#: src/Module/Contact.php:716
msgid "Unblocked"
msgstr "Neblokované"
-#: src/Module/Contact.php:715
+#: src/Module/Contact.php:719
msgid "Only show unblocked contacts"
msgstr "Zobrazit pouze neblokované kontakty"
-#: src/Module/Contact.php:720
+#: src/Module/Contact.php:724
msgid "Blocked"
msgstr "Blokované"
-#: src/Module/Contact.php:723
+#: src/Module/Contact.php:727
msgid "Only show blocked contacts"
msgstr "Zobrazit pouze blokované kontakty"
-#: src/Module/Contact.php:728
+#: src/Module/Contact.php:732
msgid "Ignored"
msgstr "Ignorované"
-#: src/Module/Contact.php:731
+#: src/Module/Contact.php:735
msgid "Only show ignored contacts"
msgstr "Zobrazit pouze ignorované kontakty"
-#: src/Module/Contact.php:736
+#: src/Module/Contact.php:740
msgid "Archived"
msgstr "Archivované"
-#: src/Module/Contact.php:739
+#: src/Module/Contact.php:743
msgid "Only show archived contacts"
msgstr "Zobrazit pouze archivované kontakty"
-#: src/Module/Contact.php:744
+#: src/Module/Contact.php:748
msgid "Hidden"
msgstr "Skryté"
-#: src/Module/Contact.php:747
+#: src/Module/Contact.php:751
msgid "Only show hidden contacts"
msgstr "Zobrazit pouze skryté kontakty"
-#: src/Module/Contact.php:755
+#: src/Module/Contact.php:759
msgid "Organize your contact groups"
msgstr "Organizovat vaše skupiny kontaktů"
-#: src/Module/Contact.php:815
+#: src/Module/Contact.php:818
msgid "Search your contacts"
msgstr "Prohledat vaše kontakty"
-#: src/Module/Contact.php:826 src/Module/Contact.php:1094
+#: src/Module/Contact.php:829 src/Module/Contact.php:1097
msgid "Archive"
msgstr "Archivovat"
-#: src/Module/Contact.php:826 src/Module/Contact.php:1094
+#: src/Module/Contact.php:829 src/Module/Contact.php:1097
msgid "Unarchive"
msgstr "Vrátit z archivu"
-#: src/Module/Contact.php:829
+#: src/Module/Contact.php:832
msgid "Batch Actions"
msgstr "Souhrnné akce"
-#: src/Module/Contact.php:856
+#: src/Module/Contact.php:859
msgid "Conversations started by this contact"
msgstr "Konverzace, které tento kontakt začal"
-#: src/Module/Contact.php:861
+#: src/Module/Contact.php:864
msgid "Posts and Comments"
msgstr "Příspěvky a komentáře"
-#: src/Module/Contact.php:884
+#: src/Module/Contact.php:887
msgid "View all contacts"
msgstr "Zobrazit všechny kontakty"
-#: src/Module/Contact.php:895
+#: src/Module/Contact.php:898
msgid "View all common friends"
msgstr "Zobrazit všechny společné přátele"
-#: src/Module/Contact.php:905
+#: src/Module/Contact.php:908
msgid "Advanced Contact Settings"
msgstr "Pokročilé nastavení kontaktu"
-#: src/Module/Contact.php:991
+#: src/Module/Contact.php:994
msgid "Mutual Friendship"
msgstr "Vzájemné přátelství"
-#: src/Module/Contact.php:996
+#: src/Module/Contact.php:999
msgid "is a fan of yours"
msgstr "je váš fanoušek"
-#: src/Module/Contact.php:1001
+#: src/Module/Contact.php:1004
msgid "you are a fan of"
msgstr "jste fanouškem"
-#: src/Module/Contact.php:1025
+#: src/Module/Contact.php:1028
msgid "Edit contact"
msgstr "Upravit kontakt"
-#: src/Module/Contact.php:1079
+#: src/Module/Contact.php:1082
msgid "Toggle Blocked status"
msgstr "Přepínat stav Blokováno"
-#: src/Module/Contact.php:1087
+#: src/Module/Contact.php:1090
msgid "Toggle Ignored status"
msgstr "Přepínat stav Ignorováno"
-#: src/Module/Contact.php:1096
+#: src/Module/Contact.php:1099
msgid "Toggle Archive status"
msgstr "Přepínat stav Archivováno"
-#: src/Module/Contact.php:1104
+#: src/Module/Contact.php:1107
msgid "Delete contact"
msgstr "Odstranit kontakt"
-#: src/Module/Install.php:118
+#: src/Module/Credits.php:25
+msgid "Credits"
+msgstr "Poděkování"
+
+#: src/Module/Credits.php:26
+msgid ""
+"Friendica is a community project, that would not be possible without the "
+"help of many people. Here is a list of those who have contributed to the "
+"code or the translation of Friendica. Thank you all!"
+msgstr "Friendica je komunitní projekt, který by nebyl možný bez pomoci mnoha lidí. Zde je seznam těch, kteří přispěli ke kódu nebo k překladu Friendica. Děkujeme všem!"
+
+#: src/Module/Directory.php:66
+msgid "No entries (some entries may be hidden)."
+msgstr "Žádné záznamy (některé položky mohou být skryty)."
+
+#: src/Module/Directory.php:85
+msgid "Find on this site"
+msgstr "Najít na tomto webu"
+
+#: src/Module/Directory.php:87
+msgid "Results for:"
+msgstr "Výsledky pro:"
+
+#: src/Module/Directory.php:89
+msgid "Site Directory"
+msgstr "Adresář serveru"
+
+#: src/Module/Feedtest.php:20 src/Module/Filer/SaveTag.php:20
+msgid "You must be logged in to use this module"
+msgstr "Pro používání tohoto modulu musíte být přihlášen/a"
+
+#: src/Module/Feedtest.php:49
+msgid "Source URL"
+msgstr "Zdrojová adresa URL"
+
+#: src/Module/Filer/SaveTag.php:39
+#, php-format
+msgid "Filetag %s saved to item"
+msgstr "Filetag %s uložen k předmětu"
+
+#: src/Module/Filer/SaveTag.php:49
+msgid "- select -"
+msgstr "- vyberte -"
+
+#: src/Module/FollowConfirm.php:37
+msgid "No given contact."
+msgstr "Žádný daný kontakt."
+
+#: src/Module/Friendica.php:40
+msgid "Installed addons/apps:"
+msgstr "Nainstalované doplňky/aplikace:"
+
+#: src/Module/Friendica.php:45
+msgid "No installed addons/apps"
+msgstr "Žádne nainstalované doplňky/aplikace"
+
+#: src/Module/Friendica.php:50
+#, php-format
+msgid "Read about the Terms of Service of this node."
+msgstr "Přečtěte si o Podmínkách používání tohoto serveru."
+
+#: src/Module/Friendica.php:57
+msgid "On this server the following remote servers are blocked."
+msgstr "Na tomto serveru jsou zablokovány následující vzdálené servery."
+
+#: src/Module/Friendica.php:75
+#, php-format
+msgid ""
+"This is Friendica, version %s that is running at the web location %s. The "
+"database version is %s, the post update version is %s."
+msgstr "Tohle je Friendica, verze %s, běžící na webové adrese %s. Verze databáze je %s, verze post update je %s."
+
+#: src/Module/Friendica.php:80
+msgid ""
+"Please visit Friendi.ca to learn more "
+"about the Friendica project."
+msgstr "Pro více informací o projektu Friendica, prosím, navštivte stránku Friendi.ca"
+
+#: src/Module/Friendica.php:81
+msgid "Bug reports and issues: please visit"
+msgstr "Pro hlášení chyb a námětů na změny prosím navštivte"
+
+#: src/Module/Friendica.php:81
+msgid "the bugtracker at github"
+msgstr "sledování chyb na GitHubu"
+
+#: src/Module/Friendica.php:82
+msgid "Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca"
+msgstr "Návrhy, pochvaly atd. prosím posílejte na adresu „info“ zavináč „friendi“-tečka-„ca“"
+
+#: src/Module/Group.php:42
+msgid "Group created."
+msgstr "Skupina vytvořena."
+
+#: src/Module/Group.php:48
+msgid "Could not create group."
+msgstr "Nelze vytvořit skupinu."
+
+#: src/Module/Group.php:59 src/Module/Group.php:207 src/Module/Group.php:233
+msgid "Group not found."
+msgstr "Skupina nenalezena."
+
+#: src/Module/Group.php:65
+msgid "Group name changed."
+msgstr "Název skupiny byl změněn."
+
+#: src/Module/Group.php:87
+msgid "Unknown group."
+msgstr "Neznámá skupina."
+
+#: src/Module/Group.php:96
+msgid "Contact is unavailable."
+msgstr "Kontakt je nedostupný."
+
+#: src/Module/Group.php:100
+msgid "Contact is deleted."
+msgstr "Knotakt je smazán."
+
+#: src/Module/Group.php:106
+msgid "Contact is blocked, unable to add it to a group."
+msgstr "Kontakt je blokován, nelze jej přidat ke skupině."
+
+#: src/Module/Group.php:110
+msgid "Unable to add the contact to the group."
+msgstr "Nelze přidat kontakt ke skupině."
+
+#: src/Module/Group.php:112
+msgid "Contact successfully added to group."
+msgstr "Kontakt úspěšně přidán ke skupině."
+
+#: src/Module/Group.php:116
+msgid "Unable to remove the contact from the group."
+msgstr "Nelze odstranit kontakt ze skupiny."
+
+#: src/Module/Group.php:118
+msgid "Contact successfully removed from group."
+msgstr "Kontakt úspěšně odstraněn ze skupiny."
+
+#: src/Module/Group.php:121
+msgid "Unknown group command."
+msgstr "Neznámý skupinový příkaz."
+
+#: src/Module/Group.php:124
+msgid "Bad request."
+msgstr "Špatný požadavek."
+
+#: src/Module/Group.php:163
+msgid "Save Group"
+msgstr "Uložit skupinu"
+
+#: src/Module/Group.php:164
+msgid "Filter"
+msgstr "Filtr"
+
+#: src/Module/Group.php:170
+msgid "Create a group of contacts/friends."
+msgstr "Vytvořit skupinu kontaktů/přátel."
+
+#: src/Module/Group.php:212
+msgid "Group removed."
+msgstr "Skupina odstraněna. "
+
+#: src/Module/Group.php:214
+msgid "Unable to remove group."
+msgstr "Nelze odstranit skupinu."
+
+#: src/Module/Group.php:265
+msgid "Delete Group"
+msgstr "Odstranit skupinu"
+
+#: src/Module/Group.php:275
+msgid "Edit Group Name"
+msgstr "Upravit název skupiny"
+
+#: src/Module/Group.php:285
+msgid "Members"
+msgstr "Členové"
+
+#: src/Module/Group.php:301
+msgid "Remove contact from group"
+msgstr "Odebrat kontakt ze skupiny"
+
+#: src/Module/Group.php:335
+msgid "Add contact to group"
+msgstr "Přidat kontakt ke skupině"
+
+#: src/Module/Help.php:43
+msgid "Help:"
+msgstr "Nápověda:"
+
+#: src/Module/Home.php:42
+#, php-format
+msgid "Welcome to %s"
+msgstr "Vítejte na %s"
+
+#: src/Module/Install.php:158
msgid "Friendica Communications Server - Setup"
msgstr "Komunikační server Friendica - Nastavení"
-#: src/Module/Install.php:129
+#: src/Module/Install.php:169
msgid "System check"
msgstr "Zkouška systému"
-#: src/Module/Install.php:134
+#: src/Module/Install.php:174
msgid "Check again"
msgstr "Vyzkoušet znovu"
-#: src/Module/Install.php:151
+#: src/Module/Install.php:189
+msgid "Base settings"
+msgstr "Základní nastavení"
+
+#: src/Module/Install.php:196
+msgid "Host name"
+msgstr "Jméno hostitele (host name)"
+
+#: src/Module/Install.php:198
+msgid ""
+"Overwrite this field in case the determinated hostname isn't right, "
+"otherweise leave it as is."
+msgstr "Toto pole přepište, pokud určený název hostitele není správný, jinak to nechte tak, jak to je."
+
+#: src/Module/Install.php:201
+msgid "Base path to installation"
+msgstr "Základní cesta k instalaci"
+
+#: src/Module/Install.php:203
+msgid ""
+"If the system cannot detect the correct path to your installation, enter the"
+" correct path here. This setting should only be set if you are using a "
+"restricted system and symbolic links to your webroot."
+msgstr "Pokud systém nemůže detekovat správnou cestu k Vaší instalaci, zde zadejte jinou cestu. Toto nastavení by mělo být nastaveno pouze, pokud používáte omezený systém a symbolické odkazy ke kořenové složce webu."
+
+#: src/Module/Install.php:206
+msgid "Sub path of the URL"
+msgstr "Podcesta URL"
+
+#: src/Module/Install.php:208
+msgid ""
+"Overwrite this field in case the sub path determination isn't right, "
+"otherwise leave it as is. Leaving this field blank means the installation is"
+" at the base URL without sub path."
+msgstr "Toto pole přepište, pokud určení podcesty není správné, jinak to nechte tak, jak to je. Pokud tohle necháte prázdné, znamená to, že se instalace nachází v základním URL bez podcesty."
+
+#: src/Module/Install.php:219
msgid "Database connection"
msgstr "Databázové spojení"
-#: src/Module/Install.php:152
+#: src/Module/Install.php:220
msgid ""
"In order to install Friendica we need to know how to connect to your "
"database."
msgstr "Pro instalaci Friendica potřebujeme znát připojení k vaší databázi."
-#: src/Module/Install.php:153
+#: src/Module/Install.php:221
msgid ""
"Please contact your hosting provider or site administrator if you have "
"questions about these settings."
msgstr "Pokud máte otázky k následujícím nastavením, obraťte se na svého poskytovatele hostingu nebo administrátora serveru."
-#: src/Module/Install.php:154
+#: src/Module/Install.php:222
msgid ""
"The database you specify below should already exist. If it does not, please "
"create it before continuing."
msgstr "Databáze, kterou uvedete níže, by již měla existovat. Pokud to tak není, prosíme, vytvořte ji před pokračováním."
-#: src/Module/Install.php:157
+#: src/Module/Install.php:229
msgid "Database Server Name"
msgstr "Jméno databázového serveru"
-#: src/Module/Install.php:162
+#: src/Module/Install.php:234
msgid "Database Login Name"
msgstr "Přihlašovací jméno k databázi"
-#: src/Module/Install.php:168
+#: src/Module/Install.php:240
msgid "Database Login Password"
msgstr "Heslo k databázovému účtu "
-#: src/Module/Install.php:170
+#: src/Module/Install.php:242
msgid "For security reasons the password must not be empty"
msgstr "Z bezpečnostních důvodů nesmí být heslo prázdné."
-#: src/Module/Install.php:173
+#: src/Module/Install.php:245
msgid "Database Name"
msgstr "Jméno databáze"
-#: src/Module/Install.php:178 src/Module/Install.php:214
+#: src/Module/Install.php:249 src/Module/Install.php:278
+msgid "Please select a default timezone for your website"
+msgstr "Prosím, vyberte výchozí časové pásmo pro váš server"
+
+#: src/Module/Install.php:263
+msgid "Site settings"
+msgstr "Nastavení webu"
+
+#: src/Module/Install.php:273
msgid "Site administrator email address"
msgstr "E-mailová adresa administrátora webu"
-#: src/Module/Install.php:180 src/Module/Install.php:214
+#: src/Module/Install.php:275
msgid ""
"Your account email address must match this in order to use the web admin "
"panel."
msgstr "Vaše e-mailová adresa účtu se musí s touto shodovat, aby bylo možné využívat administrační panel ve webovém rozhraní."
-#: src/Module/Install.php:184 src/Module/Install.php:215
-msgid "Please select a default timezone for your website"
-msgstr "Prosím, vyberte výchozí časové pásmo pro váš server"
-
-#: src/Module/Install.php:208
-msgid "Site settings"
-msgstr "Nastavení webu"
-
-#: src/Module/Install.php:217
+#: src/Module/Install.php:282
msgid "System Language:"
msgstr "Systémový jazyk"
-#: src/Module/Install.php:219
+#: src/Module/Install.php:284
msgid ""
"Set the default language for your Friendica installation interface and to "
"send emails."
msgstr "Nastavte si výchozí jazyk pro vaše instalační rozhraní Friendica a pro odesílání e-mailů."
-#: src/Module/Install.php:231
+#: src/Module/Install.php:296
msgid "Your Friendica site database has been installed."
msgstr "Databáze vašeho serveru Friendica byla nainstalována."
-#: src/Module/Install.php:239
+#: src/Module/Install.php:304
msgid "Installation finished"
msgstr "Instalace dokončena"
-#: src/Module/Install.php:261
+#: src/Module/Install.php:326
msgid "Use an application on a mobile device to get two-factor authentication " +"codes when prompted on login.
" +msgstr "Pomocí aplikace na mobilním zařízení získejte při přihlášení kódy pro dvoufázové ověřování.
" + +#: src/Module/Settings/TwoFactor/Index.php:90 +msgid "Authenticator app" +msgstr "Autentizační aplikace" + +#: src/Module/Settings/TwoFactor/Index.php:91 +msgid "Configured" +msgstr "Nakonfigurováno" + +#: src/Module/Settings/TwoFactor/Index.php:91 +msgid "Not Configured" +msgstr "Nenakonfigurováno" + +#: src/Module/Settings/TwoFactor/Index.php:92 +msgid "You haven't finished configuring your authenticator app.
" +msgstr "Nedokončil/a jste konfiguraci vaší autentizační aplikace.
" + +#: src/Module/Settings/TwoFactor/Index.php:93 +msgid "Your authenticator app is correctly configured.
" +msgstr "Vaše autentizační aplikace je správně nakonfigurována.
" + +#: src/Module/Settings/TwoFactor/Index.php:95 +msgid "Recovery codes" +msgstr "Záložní kódy" + +#: src/Module/Settings/TwoFactor/Index.php:96 +msgid "Remaining valid codes" +msgstr "Zbývající platné kódy" + +#: src/Module/Settings/TwoFactor/Index.php:98 +msgid "" +"These one-use codes can replace an authenticator app code in case you " +"have lost access to it.
" +msgstr "Tyto jednorázové kódy mohou nahradit kód autentizační aplikace, pokud k ní ztratíte přístup.
" + +#: src/Module/Settings/TwoFactor/Index.php:101 +msgid "Current password:" +msgstr "Aktuální heslo:" + +#: src/Module/Settings/TwoFactor/Index.php:101 +msgid "" +"You need to provide your current password to change two-factor " +"authentication settings." +msgstr "Pro změnu nastavení dvoufázového ověřování musíte poskytnout vaše aktuální heslo." + +#: src/Module/Settings/TwoFactor/Index.php:102 +msgid "Enable two-factor authentication" +msgstr "Povolit dvoufázové ověřování" + +#: src/Module/Settings/TwoFactor/Index.php:103 +msgid "Disable two-factor authentication" +msgstr "Zakázat dvoufázové ověřování" + +#: src/Module/Settings/TwoFactor/Index.php:104 +msgid "Show recovery codes" +msgstr "Zobrazit záložní kódy" + +#: src/Module/Settings/TwoFactor/Index.php:105 +msgid "Finish app configuration" +msgstr "Dokončit konfiguraci aplikace" + +#: src/Module/Settings/TwoFactor/Recovery.php:34 +#: src/Module/Settings/TwoFactor/Verify.php:41 +msgid "Please enter your password to access this page." +msgstr "Pro přístup k této stránce prosím zadejte své heslo." + +#: src/Module/Settings/TwoFactor/Recovery.php:50 +msgid "New recovery codes successfully generated." +msgstr "Nové záložní kódy byly úspěšně vygenerovány." + +#: src/Module/Settings/TwoFactor/Recovery.php:76 +msgid "Two-factor recovery codes" +msgstr "Dvoufázové záložní kódy" + +#: src/Module/Settings/TwoFactor/Recovery.php:78 +msgid "" +"Recovery codes can be used to access your account in the event you lose " +"access to your device and cannot receive two-factor authentication " +"codes.
Put these in a safe spot! If you lose your " +"device and don’t have the recovery codes you will lose access to your " +"account.
" +msgstr "Záložní kódy mohou být použity pro přístup k vašemu účtu, pokud ztratíte přístup k vašemu zařízení a nemůžete obdržet dvoufázové autentizační kódy.
Uložte je na bezpečné místo! Pokud zratíte vaše zařízení a nemáte Záložní kódy, ztratíte přístup ke svému účtu.
" + +#: src/Module/Settings/TwoFactor/Recovery.php:80 +msgid "" +"When you generate new recovery codes, you must copy the new codes. Your old " +"codes won’t work anymore." +msgstr "Když vygenerujete nové záložní kódy, musíte si zkopírovat nové kódy. Vaše staré kódy již nebudou fungovat." + +#: src/Module/Settings/TwoFactor/Recovery.php:81 +msgid "Generate new recovery codes" +msgstr "Vygenerovat nové záložní kódy" + +#: src/Module/Settings/TwoFactor/Recovery.php:83 +msgid "Next: Verification" +msgstr "Další: Ověření" + +#: src/Module/Settings/TwoFactor/Verify.php:63 +msgid "Two-factor authentication successfully activated." +msgstr "Dvoufázové ověření úspěšně aktivováno." + +#: src/Module/Settings/TwoFactor/Verify.php:67 +#: src/Module/TwoFactor/Recovery.php:46 src/Module/TwoFactor/Verify.php:41 +msgid "Invalid code, please retry." +msgstr "Neplatný kód, prosím zkuste to znovu." + +#: src/Module/Settings/TwoFactor/Verify.php:96 +#, php-format +msgid "" +"Or you can submit the authentication settings manually:
\n" +"Nebo můžete zadat autentizační nastavení manuálně:
\nPlease scan this QR Code with your authenticator app and submit the " +"provided code.
" +msgstr "Prosím naskenujte tento QR kód vaší autentizační aplikací a zadejte poskytnutý kód.
" + +#: src/Module/Settings/TwoFactor/Verify.php:120 +#, php-format +msgid "" +"Or you can open the following URL in your mobile devicde:
" +msgstr "Nebo můžete otevřít na vašem mobilním zařízení následující URL:
" + +#: src/Module/Settings/TwoFactor/Verify.php:126 +#: src/Module/TwoFactor/Verify.php:63 +msgid "Please enter a code from your authentication app" +msgstr "Prosím zadejte kód z vaší autentizační aplikace" + +#: src/Module/Settings/TwoFactor/Verify.php:127 +msgid "Verify code and enable two-factor authentication" +msgstr "Ověřit kód a povolit dvoufázové ověřování" + +#: src/Module/Special/HTTPException.php:32 +msgid "Bad Request" +msgstr "Špatný požadavek" + +#: src/Module/Special/HTTPException.php:33 +msgid "Unauthorized" +msgstr "Neautorizováno" + +#: src/Module/Special/HTTPException.php:34 +msgid "Forbidden" +msgstr "Zakázáno" + +#: src/Module/Special/HTTPException.php:35 +msgid "Not Found" +msgstr "Nenalezeno" + +#: src/Module/Special/HTTPException.php:36 +msgid "Internal Server Error" +msgstr "Vnitřní chyba serveru" + +#: src/Module/Special/HTTPException.php:37 +msgid "Service Unavailable" +msgstr "Služba nedostupná" + +#: src/Module/Special/HTTPException.php:44 +msgid "" +"The server cannot or will not process the request due to an apparent client " +"error." +msgstr "Server nemůže nebo nechce zpracovat požadavek kvůli patrné chybě na straně klienta." + +#: src/Module/Special/HTTPException.php:45 +msgid "" +"Authentication is required and has failed or has not yet been provided." +msgstr "Je vyžadována autentikace, která neuspěla nebo ještě nebyla poskytnuta." + +#: src/Module/Special/HTTPException.php:46 +msgid "" +"The request was valid, but the server is refusing action. The user might not" +" have the necessary permissions for a resource, or may need an account." +msgstr "Požadavek byl platný, ale server odmítá akci. Uživatel možná nemá nezbytná oprávnění pro zdroj, nebo potřebuje účet.." + +#: src/Module/Special/HTTPException.php:47 +msgid "" +"The requested resource could not be found but may be available in the " +"future." +msgstr "Požadovaný zdroj nemohl být nalezen, ale může být dostupný v budoucnu." + +#: src/Module/Special/HTTPException.php:48 +msgid "" +"An unexpected condition was encountered and no more specific message is " +"suitable." +msgstr "Došlo k neočekávané chybě a není vhodná žádná specifičtější zpráva." + +#: src/Module/Special/HTTPException.php:49 +msgid "" +"The server is currently unavailable (because it is overloaded or down for " +"maintenance). Please try again later." +msgstr "Server je aktuálně nedostupný (protože je přetížen nebo probíhá údržba). Prosím zkuste to znovu později." + +#: src/Module/Special/HTTPException.php:55 +msgid "Go back" +msgstr "Přejít zpět" + #: src/Module/Tos.php:35 src/Module/Tos.php:77 msgid "" "At the time of registration, and for providing communications between the " @@ -9512,128 +9896,170 @@ msgstr "Přihlášený uživatel si kdykoliv může exportovat svoje data účtu msgid "Privacy Statement" msgstr "Prohlášení o soukromí" -#: src/Object/Post.php:136 +#: src/Module/TwoFactor/Recovery.php:41 +#, php-format +msgid "Remaining recovery codes: %d" +msgstr "Zbývající záložní kódy: %d" + +#: src/Module/TwoFactor/Recovery.php:65 +msgid "Two-factor recovery" +msgstr "Dvoufázové záložní kódy" + +#: src/Module/TwoFactor/Recovery.php:66 +msgid "" +"You can enter one of your one-time recovery codes in case you lost access" +" to your mobile device.
" +msgstr "Pokud jste ztratil/a přístup k vašemu mobilnímu zařízení , můžete zadat jeden z vašich jednorázových záložních kódů.
" + +#: src/Module/TwoFactor/Recovery.php:67 src/Module/TwoFactor/Verify.php:62 +#, php-format +msgid "Don’t have your phone? Enter a two-factor recovery code" +msgstr "Nemáte svůj mobil? Zadejte dvoufázový záložní kód" + +#: src/Module/TwoFactor/Recovery.php:68 +msgid "Please enter a recovery code" +msgstr "Prosím zadejte záložní kód" + +#: src/Module/TwoFactor/Recovery.php:69 +msgid "Submit recovery code and complete login" +msgstr "Odeslat záložní kód a dokončit přihlášení" + +#: src/Module/TwoFactor/Verify.php:61 +msgid "" +"Open the two-factor authentication app on your device to get an " +"authentication code and verify your identity.
" +msgstr "Otevřete na vašem zařízení aplikaci pro dvoufázové ověřování, získejte autentizační kód a ověřte svou identitu.
" + +#: src/Module/TwoFactor/Verify.php:64 +msgid "Verify code and complete login" +msgstr "Ověřit kód a dokončit přihlášení" + +#: src/Object/Post.php:137 msgid "This entry was edited" msgstr "Tato položka byla upravena" -#: src/Object/Post.php:198 +#: src/Object/Post.php:157 +msgid "Private Message" +msgstr "Soukromá zpráva" + +#: src/Object/Post.php:199 msgid "Delete locally" msgstr "Smazat lokálně" -#: src/Object/Post.php:201 +#: src/Object/Post.php:202 msgid "Delete globally" msgstr "Smazat globálně" -#: src/Object/Post.php:201 +#: src/Object/Post.php:202 msgid "Remove locally" msgstr "Odstranit lokálně" -#: src/Object/Post.php:215 +#: src/Object/Post.php:216 msgid "save to folder" msgstr "uložit do složky" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I will attend" msgstr "zúčastním se" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I will not attend" msgstr "nezúčastním se" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I might attend" msgstr "mohl bych se zúčastnit" -#: src/Object/Post.php:278 +#: src/Object/Post.php:279 msgid "ignore thread" msgstr "ignorovat vlákno" -#: src/Object/Post.php:279 +#: src/Object/Post.php:280 msgid "unignore thread" msgstr "přestat ignorovat vlákno" -#: src/Object/Post.php:280 +#: src/Object/Post.php:281 msgid "toggle ignore status" msgstr "přepínat stav ignorování" -#: src/Object/Post.php:291 +#: src/Object/Post.php:292 msgid "add star" msgstr "přidat hvězdu" -#: src/Object/Post.php:292 +#: src/Object/Post.php:293 msgid "remove star" msgstr "odebrat hvězdu" -#: src/Object/Post.php:293 +#: src/Object/Post.php:294 msgid "toggle star status" msgstr "přepínat hvězdu" -#: src/Object/Post.php:296 +#: src/Object/Post.php:297 msgid "starred" msgstr "s hvězdou" -#: src/Object/Post.php:300 +#: src/Object/Post.php:301 msgid "add tag" msgstr "přidat štítek" -#: src/Object/Post.php:311 +#: src/Object/Post.php:312 msgid "like" msgstr "líbí se mi" -#: src/Object/Post.php:312 +#: src/Object/Post.php:313 msgid "dislike" msgstr "nelíbí se mi" -#: src/Object/Post.php:315 +#: src/Object/Post.php:316 msgid "Share this" msgstr "Sdílet toto" -#: src/Object/Post.php:315 +#: src/Object/Post.php:316 msgid "share" msgstr "sdílet" -#: src/Object/Post.php:382 +#: src/Object/Post.php:384 msgid "to" msgstr "na" -#: src/Object/Post.php:383 +#: src/Object/Post.php:385 msgid "via" msgstr "přes" -#: src/Object/Post.php:384 +#: src/Object/Post.php:386 msgid "Wall-to-Wall" msgstr "Ze zdi na zeď" -#: src/Object/Post.php:385 +#: src/Object/Post.php:387 msgid "via Wall-To-Wall:" msgstr "ze zdi na zeď" -#: src/Object/Post.php:418 +#: src/Object/Post.php:420 #, php-format msgid "Reply to %s" msgstr "Odpovědět uživateli %s" -#: src/Object/Post.php:433 +#: src/Object/Post.php:435 msgid "Notifier task is pending" msgstr "Úloha pro notifiera čeká" -#: src/Object/Post.php:434 +#: src/Object/Post.php:436 msgid "Delivery to remote servers is pending" msgstr "Doručení vzdáleným serverům čeká" -#: src/Object/Post.php:435 +#: src/Object/Post.php:437 msgid "Delivery to remote servers is underway" msgstr "Doručení vzdáleným serverům je v plném proudu" -#: src/Object/Post.php:436 +#: src/Object/Post.php:438 msgid "Delivery to remote servers is mostly done" msgstr "Doručení vzdáleným serverům je téměř hotovo" -#: src/Object/Post.php:437 +#: src/Object/Post.php:439 msgid "Delivery to remote servers is done" msgstr "Doručení vzdáleným serverům je hotovo" -#: src/Object/Post.php:457 +#: src/Object/Post.php:459 #, php-format msgid "%d comment" msgid_plural "%d comments" @@ -9642,37 +10068,37 @@ msgstr[1] "%d komentáře" msgstr[2] "%d komentáře" msgstr[3] "%d komentářů" -#: src/Object/Post.php:458 +#: src/Object/Post.php:460 msgid "Show more" msgstr "Zobrazit více" -#: src/Object/Post.php:459 +#: src/Object/Post.php:461 msgid "Show fewer" msgstr "Zobrazit méně" -#: src/Protocol/Diaspora.php:2496 +#: src/Protocol/Diaspora.php:2438 msgid "Sharing notification from Diaspora network" msgstr "Oznámení o sdílení ze sítě Diaspora" -#: src/Protocol/Diaspora.php:3613 +#: src/Protocol/Diaspora.php:3598 msgid "Attachments:" msgstr "Přílohy:" -#: src/Protocol/OStatus.php:1866 +#: src/Protocol/OStatus.php:1863 #, php-format msgid "%s is now following %s." msgstr "%s nyní sleduje %s." -#: src/Protocol/OStatus.php:1867 +#: src/Protocol/OStatus.php:1864 msgid "following" msgstr "sleduje" -#: src/Protocol/OStatus.php:1870 +#: src/Protocol/OStatus.php:1867 #, php-format msgid "%s stopped following %s." msgstr "%s přestal/a sledovat uživatele %s." -#: src/Protocol/OStatus.php:1871 +#: src/Protocol/OStatus.php:1868 msgid "stopped following" msgstr "přestal/a sledovat" @@ -9742,16 +10168,16 @@ msgstr "za %1$d %2$s" msgid "%1$d %2$s ago" msgstr "před %1$d %2$s" -#: src/Worker/Delivery.php:453 +#: src/Worker/Delivery.php:450 msgid "(no subject)" msgstr "(bez předmětu)" -#: update.php:217 +#: update.php:218 #, php-format msgid "%s: Updating author-id and owner-id in item and thread table. " msgstr "%s: Aktualizuji author-id a owner-id v tabulce položek a vláken." -#: update.php:272 +#: update.php:273 #, php-format msgid "%s: Updating post-type." msgstr "%s: Aktualizuji post-type." @@ -9780,63 +10206,73 @@ msgstr "comix" msgid "slackr" msgstr "slackr" -#: view/theme/duepuntozero/config.php:75 +#: view/theme/duepuntozero/config.php:74 msgid "Variations" msgstr "Variace" -#: view/theme/frio/config.php:103 +#: view/theme/frio/config.php:105 msgid "Custom" msgstr "Vlastní" -#: view/theme/frio/config.php:115 +#: view/theme/frio/config.php:117 msgid "Note" msgstr "Poznámka" -#: view/theme/frio/config.php:115 +#: view/theme/frio/config.php:117 msgid "Check image permissions if all users are allowed to see the image" msgstr "Zkontrolujte povolení u obrázku, jestli mají všichni uživatelé povolení obrázek vidět" -#: view/theme/frio/config.php:122 +#: view/theme/frio/config.php:123 msgid "Select color scheme" msgstr "Vybrat barevné schéma" -#: view/theme/frio/config.php:123 +#: view/theme/frio/config.php:124 +msgid "Copy or paste schemestring" +msgstr "Kopírovat a vložit řetězec schématu" + +#: view/theme/frio/config.php:124 +msgid "" +"You can copy this string to share your theme with others. Pasting here " +"applies the schemestring" +msgstr "Tento řetězec můžete zkopírovat a sdílet tak svůj motiv s jinými lidmi. Vložením sem aplikujete řetězec schématu" + +#: view/theme/frio/config.php:125 msgid "Navigation bar background color" msgstr "Barva pozadí navigační lišty" -#: view/theme/frio/config.php:124 +#: view/theme/frio/config.php:126 msgid "Navigation bar icon color " msgstr "Barva ikon navigační lišty" -#: view/theme/frio/config.php:125 +#: view/theme/frio/config.php:127 msgid "Link color" msgstr "Barva odkazů" -#: view/theme/frio/config.php:126 +#: view/theme/frio/config.php:128 msgid "Set the background color" msgstr "Nastavit barvu pozadí" -#: view/theme/frio/config.php:127 +#: view/theme/frio/config.php:129 msgid "Content background opacity" msgstr "Průhlednost pozadí obsahu" -#: view/theme/frio/config.php:128 +#: view/theme/frio/config.php:130 msgid "Set the background image" msgstr "Nastavit obrázek na pozadí" -#: view/theme/frio/config.php:129 +#: view/theme/frio/config.php:131 msgid "Background image style" msgstr "Styl obrázku na pozadí" -#: view/theme/frio/config.php:134 +#: view/theme/frio/config.php:136 msgid "Login page background image" msgstr "Obrázek na pozadí přihlašovací stránky" -#: view/theme/frio/config.php:138 +#: view/theme/frio/config.php:140 msgid "Login page background color" msgstr "Barva pozadí přihlašovací stránky" -#: view/theme/frio/config.php:138 +#: view/theme/frio/config.php:140 msgid "Leave background image and color empty for theme defaults" msgstr "Nechejte obrázek a barvu pozadí prázdnou pro výchozí nastavení motivů" @@ -9884,27 +10320,27 @@ msgstr "Host" msgid "Visitor" msgstr "Návštěvník" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Alignment" msgstr "Zarovnání" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Left" msgstr "Vlevo" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Center" msgstr "Uprostřed" -#: view/theme/quattro/config.php:78 +#: view/theme/quattro/config.php:77 msgid "Color scheme" msgstr "Barevné schéma" -#: view/theme/quattro/config.php:79 +#: view/theme/quattro/config.php:78 msgid "Posts font size" msgstr "Velikost písma u příspěvků" -#: view/theme/quattro/config.php:80 +#: view/theme/quattro/config.php:79 msgid "Textareas font size" msgstr "Velikost písma textů" @@ -9912,31 +10348,31 @@ msgstr "Velikost písma textů" msgid "Comma separated list of helper forums" msgstr "Seznam fór s pomocníky, oddělených čárkami" -#: view/theme/vier/config.php:123 +#: view/theme/vier/config.php:122 msgid "Set style" msgstr "Nastavit styl" -#: view/theme/vier/config.php:124 +#: view/theme/vier/config.php:123 msgid "Community Pages" msgstr "Komunitní stránky" -#: view/theme/vier/config.php:125 view/theme/vier/theme.php:151 +#: view/theme/vier/config.php:124 view/theme/vier/theme.php:151 msgid "Community Profiles" msgstr "Komunitní profily" -#: view/theme/vier/config.php:126 +#: view/theme/vier/config.php:125 msgid "Help or @NewHere ?" msgstr "Pomoc nebo @ProNováčky ?" -#: view/theme/vier/config.php:127 view/theme/vier/theme.php:373 +#: view/theme/vier/config.php:126 view/theme/vier/theme.php:373 msgid "Connect Services" msgstr "Připojit služby" -#: view/theme/vier/config.php:128 +#: view/theme/vier/config.php:127 msgid "Find Friends" msgstr "Najít přátele" -#: view/theme/vier/config.php:129 view/theme/vier/theme.php:181 +#: view/theme/vier/config.php:128 view/theme/vier/theme.php:181 msgid "Last users" msgstr "Poslední uživatelé" diff --git a/view/lang/cs/strings.php b/view/lang/cs/strings.php index 128993a40..1bcaf4305 100644 --- a/view/lang/cs/strings.php +++ b/view/lang/cs/strings.php @@ -43,6 +43,7 @@ $a->strings["Attending"] = [ ]; $a->strings["Not attending"] = "Neúčastní se"; $a->strings["Might attend"] = "Mohl/a by se zúčastnit"; +$a->strings["Reshares"] = "Znovusdílení"; $a->strings["Select"] = "Vybrat"; $a->strings["Delete"] = "Odstranit"; $a->strings["View %s's profile @ %s"] = "Zobrazit profil uživatele %s na %s"; @@ -60,6 +61,8 @@ $a->strings["View Photos"] = "Zobrazit fotky"; $a->strings["Network Posts"] = "Síťové příspěvky"; $a->strings["View Contact"] = "Zobrazit kontakt"; $a->strings["Send PM"] = "Poslat soukromou zprávu"; +$a->strings["Block"] = "Blokovat"; +$a->strings["Ignore"] = "Ignorovat"; $a->strings["Poke"] = "Šťouchnout"; $a->strings["Connect/Follow"] = "Spojit se/sledovat"; $a->strings["%s likes this."] = "Uživateli %s se tohle líbí."; @@ -67,6 +70,7 @@ $a->strings["%s doesn't like this."] = "Uživateli %s se tohle nelíbí."; $a->strings["%s attends."] = "%s se účastní."; $a->strings["%s doesn't attend."] = "%s se neúčastní."; $a->strings["%s attends maybe."] = "%s se možná účastní."; +$a->strings["%s reshared this."] = "%s tohle znovusdílel/a."; $a->strings["and"] = "a"; $a->strings["and %d other people"] = "a dalších %d lidí"; $a->strings["%2\$d people like this"] = "%2\$d lidem se tohle líbí"; @@ -79,6 +83,7 @@ $a->strings["%2\$d people don't attend"] = "%2\ $a->strings["%s don't attend."] = "%s se neúčastní"; $a->strings["%2\$d people attend maybe"] = "%2\$d lidí se možná účastní"; $a->strings["%s attend maybe."] = "%s se možná účastní"; +$a->strings["%2\$d people reshared this"] = "%2\$d lidí tohle znovusdílelo"; $a->strings["Visible to everybody"] = "Viditelné pro všechny"; $a->strings["Please enter a image/video/audio/webpage URL:"] = "Prosím zadejte URL obrázku/videa/audia/webové stránky:"; $a->strings["Tag term:"] = "Štítek:"; @@ -209,482 +214,12 @@ $a->strings["Yes"] = "Ano"; $a->strings["Permission denied."] = "Přístup odmítnut."; $a->strings["Archives"] = "Archivy"; $a->strings["show more"] = "zobrazit více"; -$a->strings["Theme settings updated."] = "Nastavení motivu bylo aktualizováno."; -$a->strings["Information"] = "Informace"; -$a->strings["Overview"] = "Přehled"; -$a->strings["Federation Statistics"] = "Statistiky Federation"; -$a->strings["Configuration"] = "Konfigurace"; -$a->strings["Site"] = "Web"; -$a->strings["Users"] = "Uživatelé"; -$a->strings["Addons"] = "Doplňky"; -$a->strings["Themes"] = "Motivy"; -$a->strings["Additional features"] = "Dodatečné vlastnosti"; -$a->strings["Terms of Service"] = "Podmínky používání"; -$a->strings["Database"] = "Databáze"; -$a->strings["DB updates"] = "Aktualizace databáze"; -$a->strings["Inspect Queue"] = "Prozkoumat frontu"; -$a->strings["Inspect Deferred Workers"] = "Prozkoumat odložené pracovníky"; -$a->strings["Inspect worker Queue"] = "Prozkoumat frontu pro pracovníka"; -$a->strings["Tools"] = "Nástroje"; -$a->strings["Contact Blocklist"] = "Blokované kontakty"; -$a->strings["Server Blocklist"] = "Blokované servery"; -$a->strings["Delete Item"] = "Smazat položku"; -$a->strings["Logs"] = "Záznamy"; -$a->strings["View Logs"] = "Zobrazit záznamy"; -$a->strings["Diagnostics"] = "Diagnostika"; -$a->strings["PHP Info"] = "Info o PHP"; -$a->strings["probe address"] = "vyzkoušet adresu"; -$a->strings["check webfinger"] = "vyzkoušet webfinger"; -$a->strings["Admin"] = "Administrátor"; -$a->strings["Addon Features"] = "Vlastnosti doplňků"; -$a->strings["User registrations waiting for confirmation"] = "Registrace uživatelů čekající na potvrzení"; -$a->strings["Administration"] = "Administrace"; -$a->strings["Display Terms of Service"] = "Zobrazit Podmínky používání"; -$a->strings["Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page."] = "Povolí stránku Podmínky používání. Pokud je toto povoleno, bude na formulář pro registrací a stránku s obecnými informacemi přidán odkaz k podmínkám."; -$a->strings["Display Privacy Statement"] = "Zobrazit Prohlášení o soukromí"; -$a->strings["Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR."] = "Ukázat některé informace ohledně potřebných informací k provozování serveru podle například Obecného nařízení o ochraně osobních údajů EU (GDPR)"; -$a->strings["Privacy Statement Preview"] = "Náhled Prohlášení o soukromí"; -$a->strings["The Terms of Service"] = "Podmínky používání"; -$a->strings["Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below."] = "Zde zadejte podmínky používání vašeho serveru. Můžete používat BBCode. Záhlaví sekcí by měly být označeny [h2] a níže."; -$a->strings["Save Settings"] = "Uložit nastavení"; -$a->strings["Blocked domain"] = "Zablokovaná doména"; -$a->strings["The blocked domain"] = "Zablokovaná doména"; -$a->strings["Reason for the block"] = "Důvody pro zablokování"; -$a->strings["The reason why you blocked this domain."] = "Důvod, proč jste doménu zablokoval/a"; -$a->strings["Delete domain"] = "Smazat doménu"; -$a->strings["Check to delete this entry from the blocklist"] = "Zaškrtnutím odstraníte tuto položku z blokovacího seznamu"; -$a->strings["This page can be used to define a black list of servers from the federated network that are not allowed to interact with your node. For all entered domains you should also give a reason why you have blocked the remote server."] = "Tato stránka může být použita k definici „černé listiny“ serverů z federované sítě, kterým není dovoleno interagovat s vaším serverem. Měl/a byste také pro všechny zadané domény uvést důvod, proč jste vzdálený server zablokoval/a."; -$a->strings["The list of blocked servers will be made publically available on the /friendica page so that your users and people investigating communication problems can find the reason easily."] = "Seznam zablokovaných serverů bude zveřejněn na stránce /friendica, takže vaši uživatelé a lidé vyšetřující probém s komunikací mohou důvod najít snadno."; -$a->strings["Add new entry to block list"] = "Přidat na blokovací seznam novou položku"; -$a->strings["Server Domain"] = "Serverová doména"; -$a->strings["The domain of the new server to add to the block list. Do not include the protocol."] = "Doména serveru, který má být přidán na blokovací seznam. Vynechejte protokol („http://“)."; -$a->strings["Block reason"] = "Důvod zablokování"; -$a->strings["Add Entry"] = "Přidat položku"; -$a->strings["Save changes to the blocklist"] = "Uložit změny do blokovacího seznamu"; -$a->strings["Current Entries in the Blocklist"] = "Aktuální položky v bokovacím seznamu"; -$a->strings["Delete entry from blocklist"] = "Odstranit položku z blokovacího seznamu"; -$a->strings["Delete entry from blocklist?"] = "Odstranit položku z blokovacího seznamu?"; -$a->strings["Server added to blocklist."] = "Server přidán do blokovacího seznamu"; -$a->strings["Site blocklist updated."] = "Blokovací seznam stránky aktualizován"; -$a->strings["The contact has been blocked from the node"] = "Kontakt byl na serveru zablokován"; -$a->strings["Could not find any contact entry for this URL (%s)"] = "Nelze nalézt žádnou položku v kontaktech pro tuto URL adresu (%s)"; -$a->strings["%s contact unblocked"] = [ - 0 => "%s kontakt odblokován", - 1 => "%s kontakty odblokovány", - 2 => "%s kontaktu odblokováno", - 3 => "%s kontaktů odblokováno", -]; -$a->strings["Remote Contact Blocklist"] = "Blokované vzdálené kontakty"; -$a->strings["This page allows you to prevent any message from a remote contact to reach your node."] = "Tato stránka vám umožňuje zabránit jakýmkoliv zprávám ze vzdáleného kontaktu, aby se k vašemu serveru dostaly."; -$a->strings["Block Remote Contact"] = "Zablokovat vzdálený kontakt"; -$a->strings["select all"] = "Vybrat vše"; -$a->strings["select none"] = "nevybrat žádný"; -$a->strings["Block"] = "Blokovat"; -$a->strings["Unblock"] = "Odblokovat"; -$a->strings["No remote contact is blocked from this node."] = "Žádný vzdálený kontakt není na tomto serveru zablokován."; -$a->strings["Blocked Remote Contacts"] = "Zablokované vzdálené kontakty"; -$a->strings["Block New Remote Contact"] = "Zablokovat nový vzdálený kontakt"; -$a->strings["Photo"] = "Fotka"; -$a->strings["Name"] = "Jméno"; -$a->strings["Address"] = "Adresa"; -$a->strings["Profile URL"] = "URL profilu"; -$a->strings["%s total blocked contact"] = [ - 0 => "Celkem %s zablokovaný kontakt", - 1 => "Celkem %s zablokované kontakty", - 2 => "Celkem %s zablokovaného kontaktu", - 3 => "Celkem %s zablokovaných kontaktů", -]; -$a->strings["URL of the remote contact to block."] = "Adresa URL vzdáleného kontaktu k zablokování."; -$a->strings["Delete this Item"] = "Smazat tuto položku"; -$a->strings["On this page you can delete an item from your node. If the item is a top level posting, the entire thread will be deleted."] = "Na této stránce můžete smazat položku z vašeho serveru. Pokud je položkou příspěvek nejvyššího stupně, bude smazáno celé vlákno."; -$a->strings["You need to know the GUID of the item. You can find it e.g. by looking at the display URL. The last part of http://example.com/display/123456 is the GUID, here 123456."] = "Budete muset znát číslo GUID položky. Můžete jej najít např. v adrese URL. Poslední část adresy http://priklad.cz/display/123456 je GUID, v tomto případě 123456"; -$a->strings["GUID"] = "GUID"; -$a->strings["The GUID of the item you want to delete."] = "Číslo GUID položky, kterou chcete smazat"; -$a->strings["Item marked for deletion."] = "Položka označená ke smazání"; -$a->strings["unknown"] = "neznámé"; -$a->strings["This page offers you some numbers to the known part of the federated social network your Friendica node is part of. These numbers are not complete but only reflect the part of the network your node is aware of."] = "Tato stránka vám nabízí pár čísel pro známou část federované sociální sítě, které je váš server Friendica součástí. Tato čísla nejsou kompletní, ale pouze odrážejí část sítě, které si je Váš server vědom."; -$a->strings["The Auto Discovered Contact Directory feature is not enabled, it will improve the data displayed here."] = "Funkce Adresář automaticky objevených kontaktů není zapnuta, zlepší zde zobrazená data."; -$a->strings["Currently this node is aware of %d nodes with %d registered users from the following platforms:"] = "Aktuálně si je tento server vědom %d serverů s %d registrovanými uživateli z těchto platforem:"; -$a->strings["ID"] = "Identifikátor"; -$a->strings["Recipient Name"] = "Jméno příjemce"; -$a->strings["Recipient Profile"] = "Profil příjemce"; -$a->strings["Network"] = "Síť"; -$a->strings["Created"] = "Vytvořeno"; -$a->strings["Last Tried"] = "Naposled vyzkoušeno"; -$a->strings["This page lists the content of the queue for outgoing postings. These are postings the initial delivery failed for. They will be resend later and eventually deleted if the delivery fails permanently."] = "Na této stránce najdete obsah fronty odchozích příspěvků. Toto jsou příspěvky, u kterých počáteční doručení selhalo. Budou znovu poslány později, a pokud doručení selže trvale, budou nakonec smazány."; -$a->strings["Inspect Deferred Worker Queue"] = "Prozkoumat frontu odložených pracovníků"; -$a->strings["This page lists the deferred worker jobs. This are jobs that couldn't be executed at the first time."] = "Na této stránce jsou vypsány odložené úlohy pracovníků. To jsou úlohy, které nemohly být napoprvé provedeny."; -$a->strings["Inspect Worker Queue"] = "Prozkoumat frontu pro pracovníka"; -$a->strings["This page lists the currently queued worker jobs. These jobs are handled by the worker cronjob you've set up during install."] = "Na této stránce jsou vypsány aktuálně čekající úlohy pro pracovníka . Tyto úlohy vykonává úloha cron pracovníka, kterou jste nastavil/a při instalaci."; -$a->strings["Job Parameters"] = "Parametry úlohy"; -$a->strings["Priority"] = "Priorita"; -$a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion..htconfig.php
. See the Config help page for help with the transition."] = "Konfigurace Friendica je nyní uložena v souboru config/local.config.php, prosím zkopírujte soubor config/local-sample.config.php a přesuňte svou konfiguraci ze souboru .htconfig.php
. Pro pomoc při přechodu navštivte stránku Config v sekci nápovědy.";
-$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."] = "Konfigurace Friendica je nyní uložena v souboru config/local.config.php, prosím zkopírujte soubor config/local-sample.config.php a přesuňte svou konfiguraci ze souboru local.config.php
. Pro pomoc při přechodu navštivte stránku Config v sekci nápovědy.";
-$a->strings["%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."] = "%s není na Vašem systému dosažitelné. Tohle je závažná chyba konfigurace, která brání komunikaci mezi servery. Pro pomoc navštivte stránku instalace.";
-$a->strings["Normal Account"] = "Normální účet";
-$a->strings["Automatic Follower Account"] = "Účet s automatickými sledujícími";
-$a->strings["Public Forum Account"] = "Účet veřejného fóra";
-$a->strings["Automatic Friend Account"] = "Účet s automatickými přáteli";
-$a->strings["Blog Account"] = "Blogovací účet";
-$a->strings["Private Forum Account"] = "Účet soukromého fóra";
-$a->strings["Message queues"] = "Fronty zpráv";
-$a->strings["Server Settings"] = "Nastavení serveru";
-$a->strings["Summary"] = "Shrnutí";
-$a->strings["Registered users"] = "Registrovaní uživatelé";
-$a->strings["Pending registrations"] = "Čekající registrace";
-$a->strings["Version"] = "Verze";
-$a->strings["Active addons"] = "Aktivní doplňky";
-$a->strings["Can not parse base url. Must have at least .htconfig.php
. See the Config help page for help with the transition."] = "Konfigurace Friendica je nyní uložena v souboru config/local.config.php, prosím zkopírujte soubor config/local-sample.config.php a přesuňte svou konfiguraci ze souboru .htconfig.php
. Pro pomoc při přechodu navštivte stránku Config v sekci nápovědy.";
+$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."] = "Konfigurace Friendica je nyní uložena v souboru config/local.config.php, prosím zkopírujte soubor config/local-sample.config.php a přesuňte svou konfiguraci ze souboru local.config.php
. Pro pomoc při přechodu navštivte stránku Config v sekci nápovědy.";
+$a->strings["%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."] = "%s není na Vašem systému dosažitelné. Tohle je závažná chyba konfigurace, která brání komunikaci mezi servery. Pro pomoc navštivte stránku instalace.";
+$a->strings["Friendica's system.basepath was updated from '%s' to '%s'. Please remove the system.basepath from your db to avoid differences."] = "system.basepath Friendica bylo aktualizováno z „%s“ na „%s“. Pro vyhnutí se rozdílům prosím odstraňte z vaší databáze system.basepath.";
+$a->strings["Friendica's current system.basepath '%s' is wrong and the config file '%s' isn't used."] = "Aktuální system.basepath Friendica „%s“ je špatné a konfigurační soubor „%s“ se nepoužívá.";
+$a->strings["Friendica's current system.basepath '%s' is not equal to the config file '%s'. Please fix your configuration."] = "Aktuální system.basepath „%s“ není rovno konfguračnímu souboru „%s“. Prosím opravte si svou konfiguraci.";
+$a->strings["Normal Account"] = "Normální účet";
+$a->strings["Automatic Follower Account"] = "Účet s automatickými sledujícími";
+$a->strings["Public Forum Account"] = "Účet veřejného fóra";
+$a->strings["Automatic Friend Account"] = "Účet s automatickými přáteli";
+$a->strings["Blog Account"] = "Blogovací účet";
+$a->strings["Private Forum Account"] = "Účet soukromého fóra";
+$a->strings["Message queues"] = "Fronty zpráv";
+$a->strings["Server Settings"] = "Nastavení serveru";
+$a->strings["Summary"] = "Shrnutí";
+$a->strings["Registered users"] = "Registrovaní uživatelé";
+$a->strings["Pending registrations"] = "Čekající registrace";
+$a->strings["Version"] = "Verze";
+$a->strings["Active addons"] = "Aktivní doplňky";
+$a->strings["Theme settings updated."] = "Nastavení motivu bylo aktualizováno.";
+$a->strings["Theme %s disabled."] = "Motiv %s zakázán.";
+$a->strings["Theme %s successfully enabled."] = "Motiv %s úspěšně povolen.";
+$a->strings["Theme %s failed to install."] = "Instalace motivu %s selhala.";
+$a->strings["Screenshot"] = "Snímek obrazovky";
+$a->strings["Themes"] = "Motivy";
+$a->strings["Unknown theme."] = "Neznámý motiv.";
+$a->strings["Reload active themes"] = "Znovu načíst aktivní motivy";
+$a->strings["No themes found on the system. They should be placed in %1\$s"] = "V systému nebyly nalezeny žádné motivy. Měly by být uloženy v %1\$s";
+$a->strings["[Experimental]"] = "[Experimentální]";
+$a->strings["[Unsupported]"] = "[Nepodporováno]";
+$a->strings["The Terms of Service settings have been updated."] = "Nastavení Podmínek používání byla aktualizována.";
+$a->strings["Display Terms of Service"] = "Zobrazit Podmínky používání";
+$a->strings["Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page."] = "Povolí stránku Podmínky používání. Pokud je toto povoleno, bude na formulář pro registrací a stránku s obecnými informacemi přidán odkaz k podmínkám.";
+$a->strings["Display Privacy Statement"] = "Zobrazit Prohlášení o soukromí";
+$a->strings["Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR."] = "Ukázat některé informace ohledně potřebných informací k provozování serveru podle například Obecného nařízení o ochraně osobních údajů EU (GDPR)";
+$a->strings["Privacy Statement Preview"] = "Náhled Prohlášení o soukromí";
+$a->strings["The Terms of Service"] = "Podmínky používání";
+$a->strings["Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below."] = "Zde zadejte podmínky používání vašeho serveru. Můžete používat BBCode. Záhlaví sekcí by měly být označeny [h2] a níže.";
+$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tthe administrator of %2\$s has set up an account for you."] = "\n\t\t\tVážený/á %1\$s,\n\t\t\t\tadministrátor %2\$s pro Vás vytvořil uživatelský účet.";
+$a->strings["\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tIf you ever want to delete your account, you can do so at %1\$s/removeme\n\n\t\t\tThank you and welcome to %4\$s."] = "\n\t\t\tZde jsou vaše přihlašovací detaily:\n\n\t\t\tAdresa stránky:\t\t%1\$s\n\t\t\tPřihlašovací jméno:\t%2\$s\n\t\t\tHeslo:\t\t\t%3\$s\n\n\t\t\tSvé heslo si po přihlášení můžete změnit na stránce „Nastavení“ vašeho\n\t\t\túčtu.\n\n\t\t\tProsím, prohlédněte si na chvilku ostatní nastavení účtu na této stránce.\n\n\t\t\tMožná byste si také přál/a přidat pár základních informací na svůj výchozí\n\t\t\tprofil (na stránce „Profily“) aby vás další lidé mohli snadno najít.\n\t\t\tDoporučujeme nastavit si Vaše celé jméno, přidat profilovou fotku,\n\t\t\tpřidat pár „klíčových slov“ k profilu (velmi užitečné při získávání nových\n\t\t\tpřátel) - a možná v jaké zemi žijete; pokud nechcete být konkrétnější.\n\n\t\t\tZcela respektujeme vaše právo na soukromí a žádnou z těchto položek\n\t\t\tnení potřeba vyplňovat. Pokud jste zde nový/á a nikoho zde neznáte, mohou vám\n\t\t\tpomoci si získat nové a zajímavé přátele.\n\t\t\tPokud byste si někdy přál/a smazat účet, můžete tak učinit na stránce\n\t\t\t%1\$s/removeme.\n\n\t\t\tDěkujeme vám a vítáme vás na %4\$s.";
+$a->strings["%s user blocked"] = [
+ 0 => "%s uživatel blokován",
+ 1 => "%s uživatelé blokování",
+ 2 => "%s uživatele blokováno",
+ 3 => "%s uživatelů blokováno",
+];
+$a->strings["%s user unblocked"] = [
+ 0 => "%s uživatel odblokován",
+ 1 => "%s uživatelé odblokováni",
+ 2 => "%s uživatele odblokováno",
+ 3 => "%s uživatelů odblokováno",
+];
+$a->strings["You can't remove yourself"] = "Nemůžete odstranit sebe sama";
+$a->strings["%s user deleted"] = [
+ 0 => "%s uživatel smazán",
+ 1 => "%s uživatelů smazáno",
+ 2 => "%s uživatele smazáno",
+ 3 => "%s uživatelů smazáno",
+];
+$a->strings["User \"%s\" deleted"] = "Uživatel „%s“ smazán";
+$a->strings["User \"%s\" blocked"] = "Uživatel „%s“ zablokován";
+$a->strings["User \"%s\" unblocked"] = "Uživatel „%s“ odblokován";
+$a->strings["Private Forum"] = "Soukromé fórum";
+$a->strings["Relay"] = "Přeposílací server";
+$a->strings["Register date"] = "Datum registrace";
+$a->strings["Last login"] = "Datum posledního přihlášení";
+$a->strings["Last item"] = "Poslední položka";
+$a->strings["Type"] = "Typ";
+$a->strings["Add User"] = "Přidat uživatele";
+$a->strings["User registrations waiting for confirm"] = "Registrace uživatelů čekající na potvrzení";
+$a->strings["User waiting for permanent deletion"] = "Uživatel čekající na trvalé smazání";
+$a->strings["Request date"] = "Datum požadavku";
+$a->strings["No registrations."] = "Žádné registrace.";
+$a->strings["Note from the user"] = "Poznámka od uživatele";
+$a->strings["Deny"] = "Odmítnout";
+$a->strings["User blocked"] = "Uživatel zablokován";
+$a->strings["Site admin"] = "Administrátor webu";
+$a->strings["Account expired"] = "Účtu vypršela platnost";
+$a->strings["New User"] = "Nový uživatel";
+$a->strings["Permanent deletion"] = "Trvalé smazání";
+$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Vybraní uživatelé budou smazáni!\\n\\n Vše, co tito uživatelé na těchto stránkách vytvořili, bude trvale odstraněno!\\n\\nOpravdu chcete pokračovat?";
+$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Uživatel {0} bude smazán!\\n\\n Vše, co tento uživatel na těchto stránkách vytvořil, bude trvale odstraněno!\\n\\n Opravdu chcete pokračovat?";
+$a->strings["Name of the new user."] = "Jméno nového uživatele.";
+$a->strings["Nickname"] = "Přezdívka";
+$a->strings["Nickname of the new user."] = "Přezdívka nového uživatele.";
+$a->strings["Email address of the new user."] = "Emailová adresa nového uživatele.";
+$a->strings["No friends to display."] = "Žádní přátelé k zobrazení";
+$a->strings["No installed applications."] = "Žádné nainstalované aplikace.";
+$a->strings["Applications"] = "Aplikace";
$a->strings["Item was not found."] = "Položka nebyla nalezena.";
+$a->strings["Source input"] = "Zdrojový vstup";
+$a->strings["BBCode::toPlaintext"] = "BBCode::toPlaintext";
+$a->strings["BBCode::convert (raw HTML)"] = "BBCode::convert (hrubé HTML)";
+$a->strings["BBCode::convert"] = "BBCode::convert";
+$a->strings["BBCode::convert => HTML::toBBCode"] = "BBCode::convert => HTML::toBBCode";
+$a->strings["BBCode::toMarkdown"] = "BBCode::toMarkdown";
+$a->strings["BBCode::toMarkdown => Markdown::convert"] = "BBCode::toMarkdown => Markdown::convert";
+$a->strings["BBCode::toMarkdown => Markdown::toBBCode"] = "BBCode::toMarkdown => Markdown::toBBCode";
+$a->strings["BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"] = "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode";
+$a->strings["Item Body"] = "Tělo položky";
+$a->strings["Item Tags"] = "Štítky položky";
+$a->strings["Source input (Diaspora format)"] = "Zdrojový vstup (formát Diaspora)";
+$a->strings["Markdown::convert (raw HTML)"] = "Markdown::convert (hrubé HTML)";
+$a->strings["Markdown::convert"] = "Markdown::convert";
+$a->strings["Markdown::toBBCode"] = "Markdown::toBBCode";
+$a->strings["Raw HTML input"] = "Hrubý HTML vstup";
+$a->strings["HTML Input"] = "HTML vstup";
+$a->strings["HTML::toBBCode"] = "HTML::toBBCode";
+$a->strings["HTML::toBBCode => BBCode::convert"] = "HTML::toBBCode => BBCode::convert";
+$a->strings["HTML::toBBCode => BBCode::convert (raw HTML)"] = "HTML::toBBCode => BBCode::convert (hrubé HTML)";
+$a->strings["HTML::toMarkdown"] = "HTML::toMarkdown";
+$a->strings["HTML::toPlaintext"] = "HTML::toPlaintext";
+$a->strings["Source text"] = "Zdrojový text";
+$a->strings["BBCode"] = "BBCode";
+$a->strings["Markdown"] = "Markdown";
+$a->strings["HTML"] = "HTML";
+$a->strings["Overview"] = "Přehled";
+$a->strings["Configuration"] = "Konfigurace";
+$a->strings["Database"] = "Databáze";
+$a->strings["DB updates"] = "Aktualizace databáze";
+$a->strings["Inspect Deferred Workers"] = "Prozkoumat odložené pracovníky";
+$a->strings["Inspect worker Queue"] = "Prozkoumat frontu pro pracovníka";
+$a->strings["Tools"] = "Nástroje";
+$a->strings["Contact Blocklist"] = "Blokované kontakty";
+$a->strings["Diagnostics"] = "Diagnostika";
+$a->strings["PHP Info"] = "Info o PHP";
+$a->strings["probe address"] = "vyzkoušet adresu";
+$a->strings["check webfinger"] = "vyzkoušet webfinger";
+$a->strings["Item Source"] = "Zdroj položky";
+$a->strings["Babel"] = "Babel";
+$a->strings["Addon Features"] = "Vlastnosti doplňků";
+$a->strings["User registrations waiting for confirmation"] = "Registrace uživatelů čekající na potvrzení";
+$a->strings["This page is missing a url parameter."] = "Této stránce chybí parametr url.";
+$a->strings["The post was created"] = "Příspěvek byl vytvořen";
$a->strings["%d contact edited."] = [
0 => "%d kontakt upraven",
1 => "%d kontakty upraveny",
@@ -2101,6 +2043,7 @@ $a->strings["Comma separated list of keywords that should not be converted to ha
$a->strings["Actions"] = "Akce";
$a->strings["Suggestions"] = "Návrhy";
$a->strings["Suggest potential friends"] = "Navrhnout potenciální přátele";
+$a->strings["All Contacts"] = "Všechny kontakty";
$a->strings["Show all contacts"] = "Zobrazit všechny kontakty";
$a->strings["Unblocked"] = "Neblokované";
$a->strings["Only show unblocked contacts"] = "Zobrazit pouze neblokované kontakty";
@@ -2130,9 +2073,62 @@ $a->strings["Toggle Blocked status"] = "Přepínat stav Blokováno";
$a->strings["Toggle Ignored status"] = "Přepínat stav Ignorováno";
$a->strings["Toggle Archive status"] = "Přepínat stav Archivováno";
$a->strings["Delete contact"] = "Odstranit kontakt";
+$a->strings["Credits"] = "Poděkování";
+$a->strings["Friendica is a community project, that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!"] = "Friendica je komunitní projekt, který by nebyl možný bez pomoci mnoha lidí. Zde je seznam těch, kteří přispěli ke kódu nebo k překladu Friendica. Děkujeme všem!";
+$a->strings["No entries (some entries may be hidden)."] = "Žádné záznamy (některé položky mohou být skryty).";
+$a->strings["Find on this site"] = "Najít na tomto webu";
+$a->strings["Results for:"] = "Výsledky pro:";
+$a->strings["Site Directory"] = "Adresář serveru";
+$a->strings["You must be logged in to use this module"] = "Pro používání tohoto modulu musíte být přihlášen/a";
+$a->strings["Source URL"] = "Zdrojová adresa URL";
+$a->strings["Filetag %s saved to item"] = "Filetag %s uložen k předmětu";
+$a->strings["- select -"] = "- vyberte -";
+$a->strings["No given contact."] = "Žádný daný kontakt.";
+$a->strings["Installed addons/apps:"] = "Nainstalované doplňky/aplikace:";
+$a->strings["No installed addons/apps"] = "Žádne nainstalované doplňky/aplikace";
+$a->strings["Read about the Terms of Service of this node."] = "Přečtěte si o Podmínkách používání tohoto serveru.";
+$a->strings["On this server the following remote servers are blocked."] = "Na tomto serveru jsou zablokovány následující vzdálené servery.";
+$a->strings["This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s."] = "Tohle je Friendica, verze %s, běžící na webové adrese %s. Verze databáze je %s, verze post update je %s.";
+$a->strings["Please visit Friendi.ca to learn more about the Friendica project."] = "Pro více informací o projektu Friendica, prosím, navštivte stránku Friendi.ca";
+$a->strings["Bug reports and issues: please visit"] = "Pro hlášení chyb a námětů na změny prosím navštivte";
+$a->strings["the bugtracker at github"] = "sledování chyb na GitHubu";
+$a->strings["Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca"] = "Návrhy, pochvaly atd. prosím posílejte na adresu „info“ zavináč „friendi“-tečka-„ca“";
+$a->strings["Group created."] = "Skupina vytvořena.";
+$a->strings["Could not create group."] = "Nelze vytvořit skupinu.";
+$a->strings["Group not found."] = "Skupina nenalezena.";
+$a->strings["Group name changed."] = "Název skupiny byl změněn.";
+$a->strings["Unknown group."] = "Neznámá skupina.";
+$a->strings["Contact is unavailable."] = "Kontakt je nedostupný.";
+$a->strings["Contact is deleted."] = "Knotakt je smazán.";
+$a->strings["Contact is blocked, unable to add it to a group."] = "Kontakt je blokován, nelze jej přidat ke skupině.";
+$a->strings["Unable to add the contact to the group."] = "Nelze přidat kontakt ke skupině.";
+$a->strings["Contact successfully added to group."] = "Kontakt úspěšně přidán ke skupině.";
+$a->strings["Unable to remove the contact from the group."] = "Nelze odstranit kontakt ze skupiny.";
+$a->strings["Contact successfully removed from group."] = "Kontakt úspěšně odstraněn ze skupiny.";
+$a->strings["Unknown group command."] = "Neznámý skupinový příkaz.";
+$a->strings["Bad request."] = "Špatný požadavek.";
+$a->strings["Save Group"] = "Uložit skupinu";
+$a->strings["Filter"] = "Filtr";
+$a->strings["Create a group of contacts/friends."] = "Vytvořit skupinu kontaktů/přátel.";
+$a->strings["Group removed."] = "Skupina odstraněna. ";
+$a->strings["Unable to remove group."] = "Nelze odstranit skupinu.";
+$a->strings["Delete Group"] = "Odstranit skupinu";
+$a->strings["Edit Group Name"] = "Upravit název skupiny";
+$a->strings["Members"] = "Členové";
+$a->strings["Remove contact from group"] = "Odebrat kontakt ze skupiny";
+$a->strings["Add contact to group"] = "Přidat kontakt ke skupině";
+$a->strings["Help:"] = "Nápověda:";
+$a->strings["Welcome to %s"] = "Vítejte na %s";
$a->strings["Friendica Communications Server - Setup"] = "Komunikační server Friendica - Nastavení";
$a->strings["System check"] = "Zkouška systému";
$a->strings["Check again"] = "Vyzkoušet znovu";
+$a->strings["Base settings"] = "Základní nastavení";
+$a->strings["Host name"] = "Jméno hostitele (host name)";
+$a->strings["Overwrite this field in case the determinated hostname isn't right, otherweise leave it as is."] = "Toto pole přepište, pokud určený název hostitele není správný, jinak to nechte tak, jak to je.";
+$a->strings["Base path to installation"] = "Základní cesta k instalaci";
+$a->strings["If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."] = "Pokud systém nemůže detekovat správnou cestu k Vaší instalaci, zde zadejte jinou cestu. Toto nastavení by mělo být nastaveno pouze, pokud používáte omezený systém a symbolické odkazy ke kořenové složce webu.";
+$a->strings["Sub path of the URL"] = "Podcesta URL";
+$a->strings["Overwrite this field in case the sub path determination isn't right, otherwise leave it as is. Leaving this field blank means the installation is at the base URL without sub path."] = "Toto pole přepište, pokud určení podcesty není správné, jinak to nechte tak, jak to je. Pokud tohle necháte prázdné, znamená to, že se instalace nachází v základním URL bez podcesty.";
$a->strings["Database connection"] = "Databázové spojení";
$a->strings["In order to install Friendica we need to know how to connect to your database."] = "Pro instalaci Friendica potřebujeme znát připojení k vaší databázi.";
$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Pokud máte otázky k následujícím nastavením, obraťte se na svého poskytovatele hostingu nebo administrátora serveru.";
@@ -2142,10 +2138,10 @@ $a->strings["Database Login Name"] = "Přihlašovací jméno k databázi";
$a->strings["Database Login Password"] = "Heslo k databázovému účtu ";
$a->strings["For security reasons the password must not be empty"] = "Z bezpečnostních důvodů nesmí být heslo prázdné.";
$a->strings["Database Name"] = "Jméno databáze";
-$a->strings["Site administrator email address"] = "E-mailová adresa administrátora webu";
-$a->strings["Your account email address must match this in order to use the web admin panel."] = "Vaše e-mailová adresa účtu se musí s touto shodovat, aby bylo možné využívat administrační panel ve webovém rozhraní.";
$a->strings["Please select a default timezone for your website"] = "Prosím, vyberte výchozí časové pásmo pro váš server";
$a->strings["Site settings"] = "Nastavení webu";
+$a->strings["Site administrator email address"] = "E-mailová adresa administrátora webu";
+$a->strings["Your account email address must match this in order to use the web admin panel."] = "Vaše e-mailová adresa účtu se musí s touto shodovat, aby bylo možné využívat administrační panel ve webovém rozhraní.";
$a->strings["System Language:"] = "Systémový jazyk";
$a->strings["Set the default language for your Friendica installation interface and to send emails."] = "Nastavte si výchozí jazyk pro vaše instalační rozhraní Friendica a pro odesílání e-mailů.";
$a->strings["Your Friendica site database has been installed."] = "Databáze vašeho serveru Friendica byla nainstalována.";
@@ -2153,7 +2149,36 @@ $a->strings["Installation finished"] = "Instalace dokončena";
$a->strings["Use an application on a mobile device to get two-factor authentication codes when prompted on login.
"] = "Pomocí aplikace na mobilním zařízení získejte při přihlášení kódy pro dvoufázové ověřování.
"; +$a->strings["Authenticator app"] = "Autentizační aplikace"; +$a->strings["Configured"] = "Nakonfigurováno"; +$a->strings["Not Configured"] = "Nenakonfigurováno"; +$a->strings["You haven't finished configuring your authenticator app.
"] = "Nedokončil/a jste konfiguraci vaší autentizační aplikace.
"; +$a->strings["Your authenticator app is correctly configured.
"] = "Vaše autentizační aplikace je správně nakonfigurována.
"; +$a->strings["Recovery codes"] = "Záložní kódy"; +$a->strings["Remaining valid codes"] = "Zbývající platné kódy"; +$a->strings["These one-use codes can replace an authenticator app code in case you have lost access to it.
"] = "Tyto jednorázové kódy mohou nahradit kód autentizační aplikace, pokud k ní ztratíte přístup.
"; +$a->strings["Current password:"] = "Aktuální heslo:"; +$a->strings["You need to provide your current password to change two-factor authentication settings."] = "Pro změnu nastavení dvoufázového ověřování musíte poskytnout vaše aktuální heslo."; +$a->strings["Enable two-factor authentication"] = "Povolit dvoufázové ověřování"; +$a->strings["Disable two-factor authentication"] = "Zakázat dvoufázové ověřování"; +$a->strings["Show recovery codes"] = "Zobrazit záložní kódy"; +$a->strings["Finish app configuration"] = "Dokončit konfiguraci aplikace"; +$a->strings["Please enter your password to access this page."] = "Pro přístup k této stránce prosím zadejte své heslo."; +$a->strings["New recovery codes successfully generated."] = "Nové záložní kódy byly úspěšně vygenerovány."; +$a->strings["Two-factor recovery codes"] = "Dvoufázové záložní kódy"; +$a->strings["Recovery codes can be used to access your account in the event you lose access to your device and cannot receive two-factor authentication codes.
Put these in a safe spot! If you lose your device and don’t have the recovery codes you will lose access to your account.
"] = "Záložní kódy mohou být použity pro přístup k vašemu účtu, pokud ztratíte přístup k vašemu zařízení a nemůžete obdržet dvoufázové autentizační kódy.
Uložte je na bezpečné místo! Pokud zratíte vaše zařízení a nemáte Záložní kódy, ztratíte přístup ke svému účtu.
"; +$a->strings["When you generate new recovery codes, you must copy the new codes. Your old codes won’t work anymore."] = "Když vygenerujete nové záložní kódy, musíte si zkopírovat nové kódy. Vaše staré kódy již nebudou fungovat."; +$a->strings["Generate new recovery codes"] = "Vygenerovat nové záložní kódy"; +$a->strings["Next: Verification"] = "Další: Ověření"; +$a->strings["Two-factor authentication successfully activated."] = "Dvoufázové ověření úspěšně aktivováno."; +$a->strings["Invalid code, please retry."] = "Neplatný kód, prosím zkuste to znovu."; +$a->strings["Or you can submit the authentication settings manually:
\nNebo můžete zadat autentizační nastavení manuálně:
\nPlease scan this QR Code with your authenticator app and submit the provided code.
"] = "Prosím naskenujte tento QR kód vaší autentizační aplikací a zadejte poskytnutý kód.
"; +$a->strings["Or you can open the following URL in your mobile devicde:
"] = "Nebo můžete otevřít na vašem mobilním zařízení následující URL:
"; +$a->strings["Please enter a code from your authentication app"] = "Prosím zadejte kód z vaší autentizační aplikace"; +$a->strings["Verify code and enable two-factor authentication"] = "Ověřit kód a povolit dvoufázové ověřování"; +$a->strings["Bad Request"] = "Špatný požadavek"; +$a->strings["Unauthorized"] = "Neautorizováno"; +$a->strings["Forbidden"] = "Zakázáno"; +$a->strings["Not Found"] = "Nenalezeno"; +$a->strings["Internal Server Error"] = "Vnitřní chyba serveru"; +$a->strings["Service Unavailable"] = "Služba nedostupná"; +$a->strings["The server cannot or will not process the request due to an apparent client error."] = "Server nemůže nebo nechce zpracovat požadavek kvůli patrné chybě na straně klienta."; +$a->strings["Authentication is required and has failed or has not yet been provided."] = "Je vyžadována autentikace, která neuspěla nebo ještě nebyla poskytnuta."; +$a->strings["The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource, or may need an account."] = "Požadavek byl platný, ale server odmítá akci. Uživatel možná nemá nezbytná oprávnění pro zdroj, nebo potřebuje účet.."; +$a->strings["The requested resource could not be found but may be available in the future."] = "Požadovaný zdroj nemohl být nalezen, ale může být dostupný v budoucnu."; +$a->strings["An unexpected condition was encountered and no more specific message is suitable."] = "Došlo k neočekávané chybě a není vhodná žádná specifičtější zpráva."; +$a->strings["The server is currently unavailable (because it is overloaded or down for maintenance). Please try again later."] = "Server je aktuálně nedostupný (protože je přetížen nebo probíhá údržba). Prosím zkuste to znovu později."; +$a->strings["Go back"] = "Přejít zpět"; $a->strings["At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node's user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication."] = "Ve chvíli registrace, a pro poskytování komunikace mezi uživatelským účtem a jeho kontakty, musí uživatel poskytnout zobrazované jméno (pseudonym), uživatelské jméno (přezdívku) a funkční e-mailovou adresu. Jména budou dostupná na profilové stránce účtu pro kteréhokoliv návštěvníka, i kdyby ostatní detaily nebyly zobrazeny. E-mailová adresa bude použita pouze pro zasílání oznámení o interakcích, nebude ale viditelně zobrazována. Zápis účtu do adresáře účtů serveru nebo globálního adresáře účtů je nepovinný a může být ovládán v nastavení uživatele, není potřebný pro komunikaci."; $a->strings["This data is required for communication and is passed on to the nodes of the communication partners and is stored there. Users can enter additional private data that may be transmitted to the communication partners accounts."] = "Tato data jsou vyžadována ke komunikaci a jsou předávána serverům komunikačních partnerů a jsou tam ukládána. Uživatelé mohou zadávat dodatečná soukromá data, která mohou být odeslána na účty komunikačních partnerů."; $a->strings["At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1\$s/removeme. The deletion of the account will be permanent. Deletion of the data will also be requested from the nodes of the communication partners."] = "Přihlášený uživatel si kdykoliv může exportovat svoje data účtu z nastavení účtu. Pokud by chtěl uživatel svůj účet smazat, může tak učinit na stránce %1\$s/removeme. Smazání účtu bude trvalé. Na serverech komunikačních partnerů bude zároveň vyžádáno smazání dat."; $a->strings["Privacy Statement"] = "Prohlášení o soukromí"; +$a->strings["Remaining recovery codes: %d"] = "Zbývající záložní kódy: %d"; +$a->strings["Two-factor recovery"] = "Dvoufázové záložní kódy"; +$a->strings["You can enter one of your one-time recovery codes in case you lost access to your mobile device.
"] = "Pokud jste ztratil/a přístup k vašemu mobilnímu zařízení , můžete zadat jeden z vašich jednorázových záložních kódů.
"; +$a->strings["Don’t have your phone? Enter a two-factor recovery code"] = "Nemáte svůj mobil? Zadejte dvoufázový záložní kód"; +$a->strings["Please enter a recovery code"] = "Prosím zadejte záložní kód"; +$a->strings["Submit recovery code and complete login"] = "Odeslat záložní kód a dokončit přihlášení"; +$a->strings["Open the two-factor authentication app on your device to get an authentication code and verify your identity.
"] = "Otevřete na vašem zařízení aplikaci pro dvoufázové ověřování, získejte autentizační kód a ověřte svou identitu.
"; +$a->strings["Verify code and complete login"] = "Ověřit kód a dokončit přihlášení"; $a->strings["This entry was edited"] = "Tato položka byla upravena"; +$a->strings["Private Message"] = "Soukromá zpráva"; $a->strings["Delete locally"] = "Smazat lokálně"; $a->strings["Delete globally"] = "Smazat globálně"; $a->strings["Remove locally"] = "Odstranit lokálně"; @@ -2266,6 +2346,8 @@ $a->strings["Custom"] = "Vlastní"; $a->strings["Note"] = "Poznámka"; $a->strings["Check image permissions if all users are allowed to see the image"] = "Zkontrolujte povolení u obrázku, jestli mají všichni uživatelé povolení obrázek vidět"; $a->strings["Select color scheme"] = "Vybrat barevné schéma"; +$a->strings["Copy or paste schemestring"] = "Kopírovat a vložit řetězec schématu"; +$a->strings["You can copy this string to share your theme with others. Pasting here applies the schemestring"] = "Tento řetězec můžete zkopírovat a sdílet tak svůj motiv s jinými lidmi. Vložením sem aplikujete řetězec schématu"; $a->strings["Navigation bar background color"] = "Barva pozadí navigační lišty"; $a->strings["Navigation bar icon color "] = "Barva ikon navigační lišty"; $a->strings["Link color"] = "Barva odkazů"; diff --git a/view/lang/de/messages.po b/view/lang/de/messages.po index ec77ba4f9..c57ca914e 100644 --- a/view/lang/de/messages.po +++ b/view/lang/de/messages.po @@ -29,10 +29,11 @@ # Oliver.htconfig.php
. See the Config help page for "
-"help with the transition."
-msgstr "Die Konfiguration von Friendica befindet sich ab jetzt in der 'config/local.ini.php' Datei. Kopiere bitte die Datei 'config/local-sample.config.php' nach 'config/local.config.php' und setze die Konfigurationvariablen so wie in der alten .htconfig.php
. Wie die Übertragung der Werte aussehen muss, kannst du der Konfiguration Hilfeseite entnehmen."
-
-#: mod/admin.php:943
-#, php-format
-msgid ""
-"Friendica's configuration now is stored in config/local.config.php, please "
-"copy config/local-sample.config.php and move your config from "
-"config/local.ini.php
. See the Config help "
-"page for help with the transition."
-msgstr "Die Konfiguration von Friendica befindet sich ab jetzt in der 'config/local.config.php' Datei. Kopiere bitte die Datei 'config/local-sample.config.php' nach 'config/local.config.php' und setze die Konfigurationvariablen so wie in der alten config/local.ini.php
. Wie die Übertragung der Werte aussehen muss, kannst du der Konfiguration Hilfeseite entnehmen."
-
-#: mod/admin.php:950
-#, php-format
-msgid ""
-"%s is not reachable on your system. This is a severe "
-"configuration issue that prevents server to server communication. See the installation page for help."
-msgstr "%s konnte von deinem System nicht aufgerufen werden. Dies deutet auf ein schwerwiegendes Problem deiner Konfiguration hin. Bitte konsultiere die Installations-Dokumentation zum Beheben des Problems."
-
-#: mod/admin.php:956
-msgid "Normal Account"
-msgstr "Normales Konto"
-
-#: mod/admin.php:957
-msgid "Automatic Follower Account"
-msgstr "Automatisch folgendes Konto (Marktschreier)"
-
-#: mod/admin.php:958
-msgid "Public Forum Account"
-msgstr "Öffentliches Forum-Konto"
-
-#: mod/admin.php:959
-msgid "Automatic Friend Account"
-msgstr "Automatische Freunde-Seite"
-
-#: mod/admin.php:960
-msgid "Blog Account"
-msgstr "Blog-Konto"
-
-#: mod/admin.php:961
-msgid "Private Forum Account"
-msgstr "Privates Forum-Konto"
-
-#: mod/admin.php:984
-msgid "Message queues"
-msgstr "Nachrichten-Warteschlangen"
-
-#: mod/admin.php:990
-msgid "Server Settings"
-msgstr "Servereinstellungen"
-
-#: mod/admin.php:999
-msgid "Summary"
-msgstr "Zusammenfassung"
-
-#: mod/admin.php:1001
-msgid "Registered users"
-msgstr "Registrierte Personen"
-
-#: mod/admin.php:1003
-msgid "Pending registrations"
-msgstr "Anstehende Anmeldungen"
-
-#: mod/admin.php:1004
-msgid "Version"
-msgstr "Version"
-
-#: mod/admin.php:1009
-msgid "Active addons"
-msgstr "Aktivierte Addons"
-
-#: mod/admin.php:1042
-msgid "Can not parse base url. Must have at least .htconfig.php
. See the Config help page for "
+"help with the transition."
+msgstr "Die Konfiguration von Friendica befindet sich ab jetzt in der 'config/local.ini.php' Datei. Kopiere bitte die Datei 'config/local-sample.config.php' nach 'config/local.config.php' und setze die Konfigurationvariablen so wie in der alten .htconfig.php
. Wie die Übertragung der Werte aussehen muss, kannst du der Konfiguration Hilfeseite entnehmen."
+
+#: src/Module/Admin/Summary.php:67
+#, php-format
+msgid ""
+"Friendica's configuration now is stored in config/local.config.php, please "
+"copy config/local-sample.config.php and move your config from "
+"config/local.ini.php
. See the Config help "
+"page for help with the transition."
+msgstr "Die Konfiguration von Friendica befindet sich ab jetzt in der 'config/local.config.php' Datei. Kopiere bitte die Datei 'config/local-sample.config.php' nach 'config/local.config.php' und setze die Konfigurationvariablen so wie in der alten config/local.ini.php
. Wie die Übertragung der Werte aussehen muss, kannst du der Konfiguration Hilfeseite entnehmen."
+
+#: src/Module/Admin/Summary.php:73
+#, php-format
+msgid ""
+"%s is not reachable on your system. This is a severe "
+"configuration issue that prevents server to server communication. See the installation page for help."
+msgstr "%s konnte von deinem System nicht aufgerufen werden. Dies deutet auf ein schwerwiegendes Problem deiner Konfiguration hin. Bitte konsultiere die Installations-Dokumentation zum Beheben des Problems."
+
+#: src/Module/Admin/Summary.php:89
+#, php-format
+msgid ""
+"Friendica's system.basepath was updated from '%s' to '%s'. Please remove the"
+" system.basepath from your db to avoid differences."
+msgstr "Friendica's system.basepath würde aktualisiert '%s' von '%s'. Bitte entfernen Sie system.basepath aus der Datenbank um Unterschiede zu vermeiden."
+
+#: src/Module/Admin/Summary.php:97
+#, php-format
+msgid ""
+"Friendica's current system.basepath '%s' is wrong and the config file '%s' "
+"isn't used."
+msgstr "Friendica's aktueller system.basepath '%s' ist verkehrt und die config file '%s' wird nicht benutzt."
+
+#: src/Module/Admin/Summary.php:105
+#, php-format
+msgid ""
+"Friendica's current system.basepath '%s' is not equal to the config file "
+"'%s'. Please fix your configuration."
+msgstr "Friendica's aktueller system.basepath '%s' ist nicht gleich wie die config file '%s'. Bitte korrigieren Sie Ihre Konfiguration."
+
+#: src/Module/Admin/Summary.php:112
+msgid "Normal Account"
+msgstr "Normales Konto"
+
+#: src/Module/Admin/Summary.php:113
+msgid "Automatic Follower Account"
+msgstr "Automatisch folgendes Konto (Marktschreier)"
+
+#: src/Module/Admin/Summary.php:114
+msgid "Public Forum Account"
+msgstr "Öffentliches Forum-Konto"
+
+#: src/Module/Admin/Summary.php:115
+msgid "Automatic Friend Account"
+msgstr "Automatische Freunde-Seite"
+
+#: src/Module/Admin/Summary.php:116
+msgid "Blog Account"
+msgstr "Blog-Konto"
+
+#: src/Module/Admin/Summary.php:117
+msgid "Private Forum Account"
+msgstr "Privates Forum-Konto"
+
+#: src/Module/Admin/Summary.php:141
+msgid "Message queues"
+msgstr "Nachrichten-Warteschlangen"
+
+#: src/Module/Admin/Summary.php:147
+msgid "Server Settings"
+msgstr "Servereinstellungen"
+
+#: src/Module/Admin/Summary.php:161
+msgid "Summary"
+msgstr "Zusammenfassung"
+
+#: src/Module/Admin/Summary.php:163
+msgid "Registered users"
+msgstr "Registrierte Personen"
+
+#: src/Module/Admin/Summary.php:165
+msgid "Pending registrations"
+msgstr "Anstehende Anmeldungen"
+
+#: src/Module/Admin/Summary.php:166
+msgid "Version"
+msgstr "Version"
+
+#: src/Module/Admin/Summary.php:170
+msgid "Active addons"
+msgstr "Aktivierte Addons"
+
+#: src/Module/Admin/Themes/Details.php:32 src/Module/Admin/Themes/Embed.php:46
+msgid "Theme settings updated."
+msgstr "Themeneinstellungen aktualisiert."
+
+#: src/Module/Admin/Themes/Details.php:71 src/Module/Admin/Themes/Index.php:47
+#, php-format
+msgid "Theme %s disabled."
+msgstr "Theme %s deaktiviert."
+
+#: src/Module/Admin/Themes/Details.php:73 src/Module/Admin/Themes/Index.php:49
+#, php-format
+msgid "Theme %s successfully enabled."
+msgstr "Theme %s erfolgreich aktiviert."
+
+#: src/Module/Admin/Themes/Details.php:75 src/Module/Admin/Themes/Index.php:51
+#, php-format
+msgid "Theme %s failed to install."
+msgstr "Theme %s konnte nicht aktiviert werden."
+
+#: src/Module/Admin/Themes/Details.php:97
+msgid "Screenshot"
+msgstr "Bildschirmfoto"
+
+#: src/Module/Admin/Themes/Details.php:105
+#: src/Module/Admin/Themes/Index.php:94 src/Module/BaseAdminModule.php:83
+msgid "Themes"
+msgstr "Themen"
+
+#: src/Module/Admin/Themes/Embed.php:67
+msgid "Unknown theme."
+msgstr "Unbekanntes Theme"
+
+#: src/Module/Admin/Themes/Index.php:96
+msgid "Reload active themes"
+msgstr "Aktives Theme neu laden"
+
+#: src/Module/Admin/Themes/Index.php:101
+#, php-format
+msgid "No themes found on the system. They should be placed in %1$s"
+msgstr "Es wurden keine Themes auf dem System gefunden. Diese sollten in %1$s platziert werden."
+
+#: src/Module/Admin/Themes/Index.php:102
+msgid "[Experimental]"
+msgstr "[Experimentell]"
+
+#: src/Module/Admin/Themes/Index.php:103
+msgid "[Unsupported]"
+msgstr "[Nicht unterstützt]"
+
+#: src/Module/Admin/Tos.php:30
+msgid "The Terms of Service settings have been updated."
+msgstr "Die Einstellungen zur Nutzungsbedingung wurden aktualisiert"
+
+#: src/Module/Admin/Tos.php:44
+msgid "Display Terms of Service"
+msgstr "Nutzungsbedingungen anzeigen"
+
+#: src/Module/Admin/Tos.php:44
+msgid ""
+"Enable the Terms of Service page. If this is enabled a link to the terms "
+"will be added to the registration form and the general information page."
+msgstr "Aktiviert die Seite für die Nutzungsbedingungen. Ist dies der Fall, werden sie auch von der Registrierungsseite und der allgemeinen Informationsseite verlinkt."
+
+#: src/Module/Admin/Tos.php:45
+msgid "Display Privacy Statement"
+msgstr "Datenschutzerklärung anzeigen"
+
+#: src/Module/Admin/Tos.php:45
+#, php-format
+msgid ""
+"Show some informations regarding the needed information to operate the node "
+"according e.g. to EU-GDPR."
+msgstr "Zeige Informationen über die zum Betrieb der Seite notwendigen, personenbezogenen Daten an, wie es z.B. die EU-DSGVO verlangt."
+
+#: src/Module/Admin/Tos.php:46
+msgid "Privacy Statement Preview"
+msgstr "Vorschau: Datenschutzerklärung"
+
+#: src/Module/Admin/Tos.php:48
+msgid "The Terms of Service"
+msgstr "Die Nutzungsbedingungen"
+
+#: src/Module/Admin/Tos.php:48
+msgid ""
+"Enter the Terms of Service for your node here. You can use BBCode. Headers "
+"of sections should be [h2] and below."
+msgstr "Füge hier die Nutzungsbedingungen deines Knotens ein. Du kannst BBCode zur Formatierung verwenden. Überschriften sollten [h2] oder darunter sein."
+
+#: src/Module/Admin/Users.php:48
+#, php-format
+msgid ""
+"\n"
+"\t\t\tDear %1$s,\n"
+"\t\t\t\tthe administrator of %2$s has set up an account for you."
+msgstr "\nHallo %1$s,\n\nauf %2$s wurde ein Account für dich angelegt."
+
+#: src/Module/Admin/Users.php:51
+#, php-format
+msgid ""
+"\n"
+"\t\t\tThe login details are as follows:\n"
+"\n"
+"\t\t\tSite Location:\t%1$s\n"
+"\t\t\tLogin Name:\t\t%2$s\n"
+"\t\t\tPassword:\t\t%3$s\n"
+"\n"
+"\t\t\tYou may change your password from your account \"Settings\" page after logging\n"
+"\t\t\tin.\n"
+"\n"
+"\t\t\tPlease take a few moments to review the other account settings on that page.\n"
+"\n"
+"\t\t\tYou may also wish to add some basic information to your default profile\n"
+"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n"
+"\n"
+"\t\t\tWe recommend setting your full name, adding a profile photo,\n"
+"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n"
+"\t\t\tperhaps what country you live in; if you do not wish to be more specific\n"
+"\t\t\tthan that.\n"
+"\n"
+"\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n"
+"\t\t\tIf you are new and do not know anybody here, they may help\n"
+"\t\t\tyou to make some new and interesting friends.\n"
+"\n"
+"\t\t\tIf you ever want to delete your account, you can do so at %1$s/removeme\n"
+"\n"
+"\t\t\tThank you and welcome to %4$s."
+msgstr "\nNachfolgend die Anmelde-Details:\n\tAdresse der Seite:\t%1$s\n\tBenutzername:\t%2$s\n\tPasswort:\t%3$s\n\nDu kannst dein Passwort unter \"Einstellungen\" ändern, sobald du dich\nangemeldet hast.\n\nBitte nimm dir ein paar Minuten, um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst du ja auch einige Informationen über dich in deinem\nProfil veröffentlichen, damit andere Leute dich einfacher finden können.\nBearbeite hierfür einfach dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen dir, deinen kompletten Namen anzugeben und ein zu dir\npassendes Profilbild zu wählen, damit dich alte Bekannte wiederfinden.\nAußerdem ist es nützlich, wenn du auf deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die deine Interessen teilen.\n\nWir respektieren deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nSolltest du dein Nutzerkonto löschen wollen, kannst du dies unter %1$s/removeme jederzeit tun.\n\nNun viel Spaß, gute Begegnungen und willkommen auf %4$s."
+
+#: src/Module/Admin/Users.php:96
+#, php-format
+msgid "%s user blocked"
+msgid_plural "%s users blocked"
+msgstr[0] "%s Nutzer blockiert"
+msgstr[1] "%s Nutzer blockiert"
+
+#: src/Module/Admin/Users.php:102
+#, php-format
+msgid "%s user unblocked"
+msgid_plural "%s users unblocked"
+msgstr[0] "%s Nutzer freigeschaltet"
+msgstr[1] "%s Nutzer freigeschaltet"
+
+#: src/Module/Admin/Users.php:110 src/Module/Admin/Users.php:160
+msgid "You can't remove yourself"
+msgstr "Du kannst dich nicht selbst löschen!"
+
+#: src/Module/Admin/Users.php:114
+#, php-format
+msgid "%s user deleted"
+msgid_plural "%s users deleted"
+msgstr[0] "%s Nutzer gelöscht"
+msgstr[1] "%s Nutzer gelöscht"
+
+#: src/Module/Admin/Users.php:158
+#, php-format
+msgid "User \"%s\" deleted"
+msgstr "Nutzer \"%s\" gelöscht"
+
+#: src/Module/Admin/Users.php:167
+#, php-format
+msgid "User \"%s\" blocked"
+msgstr "Nutzer \"%s\" blockiert"
+
+#: src/Module/Admin/Users.php:173
+#, php-format
+msgid "User \"%s\" unblocked"
+msgstr "Nutzer \"%s\" frei geschaltet"
+
+#: src/Module/Admin/Users.php:226
+msgid "Private Forum"
+msgstr "Privates Forum"
+
+#: src/Module/Admin/Users.php:233
+msgid "Relay"
+msgstr "Relais"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Register date"
+msgstr "Anmeldedatum"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Last login"
+msgstr "Letzte Anmeldung"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Last item"
+msgstr "Letzter Beitrag"
+
+#: src/Module/Admin/Users.php:272
+msgid "Type"
+msgstr "Typ"
+
+#: src/Module/Admin/Users.php:279
+msgid "Add User"
+msgstr "Nutzer hinzufügen"
+
+#: src/Module/Admin/Users.php:281
+msgid "User registrations waiting for confirm"
+msgstr "Neuanmeldungen, die auf Deine Bestätigung warten"
+
+#: src/Module/Admin/Users.php:282
+msgid "User waiting for permanent deletion"
+msgstr "Nutzer wartet auf permanente Löschung"
+
+#: src/Module/Admin/Users.php:283
+msgid "Request date"
+msgstr "Anfragedatum"
+
+#: src/Module/Admin/Users.php:284
+msgid "No registrations."
+msgstr "Keine Neuanmeldungen."
+
+#: src/Module/Admin/Users.php:285
+msgid "Note from the user"
+msgstr "Hinweis vom Nutzer"
+
+#: src/Module/Admin/Users.php:287
+msgid "Deny"
+msgstr "Verwehren"
+
+#: src/Module/Admin/Users.php:290
+msgid "User blocked"
+msgstr "Nutzer blockiert."
+
+#: src/Module/Admin/Users.php:292
+msgid "Site admin"
+msgstr "Seitenadministrator"
+
+#: src/Module/Admin/Users.php:293
+msgid "Account expired"
+msgstr "Account ist abgelaufen"
+
+#: src/Module/Admin/Users.php:296
+msgid "New User"
+msgstr "Neuer Nutzer"
+
+#: src/Module/Admin/Users.php:297
+msgid "Permanent deletion"
+msgstr "Permanent löschen"
+
+#: src/Module/Admin/Users.php:302
+msgid ""
+"Selected users will be deleted!\\n\\nEverything these users had posted on "
+"this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr "Die markierten Nutzer werden gelöscht!\\n\\nAlle Beiträge, die diese Nutzer auf dieser Seite veröffentlicht haben, werden permanent gelöscht!\\n\\nBist du sicher?"
+
+#: src/Module/Admin/Users.php:303
+msgid ""
+"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
+"site will be permanently deleted!\\n\\nAre you sure?"
+msgstr "Der Nutzer {0} wird gelöscht!\\n\\nAlles, was dieser Nutzer auf dieser Seite veröffentlicht hat, wird permanent gelöscht!\\n\\nBist du sicher?"
+
+#: src/Module/Admin/Users.php:313
+msgid "Name of the new user."
+msgstr "Name des neuen Nutzers"
+
+#: src/Module/Admin/Users.php:314
+msgid "Nickname"
+msgstr "Spitzname"
+
+#: src/Module/Admin/Users.php:314
+msgid "Nickname of the new user."
+msgstr "Spitznamen für den neuen Nutzer"
+
+#: src/Module/Admin/Users.php:315
+msgid "Email address of the new user."
+msgstr "Email Adresse des neuen Nutzers"
+
+#: src/Module/AllFriends.php:55
+msgid "No friends to display."
+msgstr "Keine Kontakte zum Anzeigen."
+
+#: src/Module/Apps.php:29
+msgid "No installed applications."
+msgstr "Keine Applikationen installiert."
+
+#: src/Module/Apps.php:34
+msgid "Applications"
+msgstr "Anwendungen"
+
#: src/Module/Attach.php:36 src/Module/Attach.php:48
msgid "Item was not found."
msgstr "Beitrag konnte nicht gefunden werden."
+#: src/Module/Babel.php:31
+msgid "Source input"
+msgstr "Originaltext:"
+
+#: src/Module/Babel.php:37
+msgid "BBCode::toPlaintext"
+msgstr "BBCode::toPlaintext"
+
+#: src/Module/Babel.php:43
+msgid "BBCode::convert (raw HTML)"
+msgstr "BBCode::convert (pures HTML)"
+
+#: src/Module/Babel.php:48
+msgid "BBCode::convert"
+msgstr "BBCode::convert"
+
+#: src/Module/Babel.php:54
+msgid "BBCode::convert => HTML::toBBCode"
+msgstr "BBCode::convert => HTML::toBBCode"
+
+#: src/Module/Babel.php:60
+msgid "BBCode::toMarkdown"
+msgstr "BBCode::toMarkdown"
+
+#: src/Module/Babel.php:66
+msgid "BBCode::toMarkdown => Markdown::convert"
+msgstr "BBCode::toMarkdown => Markdown::convert"
+
+#: src/Module/Babel.php:72
+msgid "BBCode::toMarkdown => Markdown::toBBCode"
+msgstr "BBCode::toMarkdown => Markdown::toBBCode"
+
+#: src/Module/Babel.php:78
+msgid "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"
+msgstr "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"
+
+#: src/Module/Babel.php:89
+msgid "Item Body"
+msgstr "Beitragskörper"
+
+#: src/Module/Babel.php:93
+msgid "Item Tags"
+msgstr "Tags des Beitrags"
+
+#: src/Module/Babel.php:100
+msgid "Source input (Diaspora format)"
+msgstr "Originaltext (Diaspora Format): "
+
+#: src/Module/Babel.php:106
+msgid "Markdown::convert (raw HTML)"
+msgstr "Markdown::convert (pures HTML)"
+
+#: src/Module/Babel.php:111
+msgid "Markdown::convert"
+msgstr "Markdown::convert"
+
+#: src/Module/Babel.php:117
+msgid "Markdown::toBBCode"
+msgstr "Markdown::toBBCode"
+
+#: src/Module/Babel.php:124
+msgid "Raw HTML input"
+msgstr "Reine HTML Eingabe"
+
+#: src/Module/Babel.php:129
+msgid "HTML Input"
+msgstr "HTML Eingabe"
+
+#: src/Module/Babel.php:135
+msgid "HTML::toBBCode"
+msgstr "HTML::toBBCode"
+
+#: src/Module/Babel.php:141
+msgid "HTML::toBBCode => BBCode::convert"
+msgstr "HTML::toBBCode => BBCode::convert"
+
+#: src/Module/Babel.php:146
+msgid "HTML::toBBCode => BBCode::convert (raw HTML)"
+msgstr "HTML::toBBCode => BBCode::convert (pures HTML)"
+
+#: src/Module/Babel.php:152
+msgid "HTML::toMarkdown"
+msgstr "HTML::toMarkdown"
+
+#: src/Module/Babel.php:158
+msgid "HTML::toPlaintext"
+msgstr "HTML::toPlaintext"
+
+#: src/Module/Babel.php:166
+msgid "Source text"
+msgstr "Quelltext"
+
+#: src/Module/Babel.php:167
+msgid "BBCode"
+msgstr "BBCode"
+
+#: src/Module/Babel.php:168
+msgid "Markdown"
+msgstr "Markdown"
+
+#: src/Module/Babel.php:169
+msgid "HTML"
+msgstr "HTML"
+
+#: src/Module/BaseAdminModule.php:76
+msgid "Overview"
+msgstr "Übersicht"
+
+#: src/Module/BaseAdminModule.php:79
+msgid "Configuration"
+msgstr "Konfiguration"
+
+#: src/Module/BaseAdminModule.php:87
+msgid "Database"
+msgstr "Datenbank"
+
+#: src/Module/BaseAdminModule.php:88
+msgid "DB updates"
+msgstr "DB Updates"
+
+#: src/Module/BaseAdminModule.php:89
+msgid "Inspect Deferred Workers"
+msgstr "Verzögerte Worker inspizieren"
+
+#: src/Module/BaseAdminModule.php:90
+msgid "Inspect worker Queue"
+msgstr "Worker Warteschlange inspizieren"
+
+#: src/Module/BaseAdminModule.php:92
+msgid "Tools"
+msgstr "Werkzeuge"
+
+#: src/Module/BaseAdminModule.php:93
+msgid "Contact Blocklist"
+msgstr "Kontakt Sperrliste"
+
+#: src/Module/BaseAdminModule.php:101
+msgid "Diagnostics"
+msgstr "Diagnostik"
+
+#: src/Module/BaseAdminModule.php:102
+msgid "PHP Info"
+msgstr "PHP-Info"
+
+#: src/Module/BaseAdminModule.php:103
+msgid "probe address"
+msgstr "Adresse untersuchen"
+
+#: src/Module/BaseAdminModule.php:104
+msgid "check webfinger"
+msgstr "Webfinger überprüfen"
+
+#: src/Module/BaseAdminModule.php:105
+msgid "Item Source"
+msgstr "Eintrags Quelle"
+
+#: src/Module/BaseAdminModule.php:106
+msgid "Babel"
+msgstr "Babel"
+
+#: src/Module/BaseAdminModule.php:115
+msgid "Addon Features"
+msgstr "Addon Features"
+
+#: src/Module/BaseAdminModule.php:116
+msgid "User registrations waiting for confirmation"
+msgstr "Nutzeranmeldungen, die auf Bestätigung warten"
+
+#: src/Module/Bookmarklet.php:35
+msgid "This page is missing a url parameter."
+msgstr "Der Seite fehlt ein URL Parameter."
+
+#: src/Module/Bookmarklet.php:57
+msgid "The post was created"
+msgstr "Der Beitrag wurde angelegt"
+
#: src/Module/Contact.php:166
#, php-format
msgid "%d contact edited."
@@ -8852,453 +8638,688 @@ msgid_plural "%d contacts edited."
msgstr[0] "%d Kontakt bearbeitet."
msgstr[1] "%d Kontakte bearbeitet."
-#: src/Module/Contact.php:191 src/Module/Contact.php:374
+#: src/Module/Contact.php:193 src/Module/Contact.php:377
msgid "Could not access contact record."
msgstr "Konnte nicht auf die Kontaktdaten zugreifen."
-#: src/Module/Contact.php:201
+#: src/Module/Contact.php:203
msgid "Could not locate selected profile."
msgstr "Konnte das ausgewählte Profil nicht finden."
-#: src/Module/Contact.php:233
+#: src/Module/Contact.php:235
msgid "Contact updated."
msgstr "Kontakt aktualisiert."
-#: src/Module/Contact.php:395
+#: src/Module/Contact.php:398
msgid "Contact has been blocked"
msgstr "Kontakt wurde blockiert"
-#: src/Module/Contact.php:395
+#: src/Module/Contact.php:398
msgid "Contact has been unblocked"
msgstr "Kontakt wurde wieder freigegeben"
-#: src/Module/Contact.php:405
+#: src/Module/Contact.php:408
msgid "Contact has been ignored"
msgstr "Kontakt wurde ignoriert"
-#: src/Module/Contact.php:405
+#: src/Module/Contact.php:408
msgid "Contact has been unignored"
msgstr "Kontakt wird nicht mehr ignoriert"
-#: src/Module/Contact.php:415
+#: src/Module/Contact.php:418
msgid "Contact has been archived"
msgstr "Kontakt wurde archiviert"
-#: src/Module/Contact.php:415
+#: src/Module/Contact.php:418
msgid "Contact has been unarchived"
msgstr "Kontakt wurde aus dem Archiv geholt"
-#: src/Module/Contact.php:439
+#: src/Module/Contact.php:442
msgid "Drop contact"
msgstr "Kontakt löschen"
-#: src/Module/Contact.php:442 src/Module/Contact.php:820
+#: src/Module/Contact.php:445 src/Module/Contact.php:823
msgid "Do you really want to delete this contact?"
msgstr "Möchtest Du wirklich diesen Kontakt löschen?"
-#: src/Module/Contact.php:456
+#: src/Module/Contact.php:459
msgid "Contact has been removed."
msgstr "Kontakt wurde entfernt."
-#: src/Module/Contact.php:486
+#: src/Module/Contact.php:489
#, php-format
msgid "You are mutual friends with %s"
msgstr "Du hast mit %s eine beidseitige Freundschaft"
-#: src/Module/Contact.php:491
+#: src/Module/Contact.php:494
#, php-format
msgid "You are sharing with %s"
msgstr "Du teilst mit %s"
-#: src/Module/Contact.php:496
+#: src/Module/Contact.php:499
#, php-format
msgid "%s is sharing with you"
msgstr "%s teilt mit dir"
-#: src/Module/Contact.php:520
+#: src/Module/Contact.php:523
msgid "Private communications are not available for this contact."
msgstr "Private Kommunikation ist für diesen Kontakt nicht verfügbar."
-#: src/Module/Contact.php:522
+#: src/Module/Contact.php:525
msgid "Never"
msgstr "Niemals"
-#: src/Module/Contact.php:525
+#: src/Module/Contact.php:528
msgid "(Update was successful)"
msgstr "(Aktualisierung war erfolgreich)"
-#: src/Module/Contact.php:525
+#: src/Module/Contact.php:528
msgid "(Update was not successful)"
msgstr "(Aktualisierung war nicht erfolgreich)"
-#: src/Module/Contact.php:527 src/Module/Contact.php:1058
+#: src/Module/Contact.php:530 src/Module/Contact.php:1061
msgid "Suggest friends"
msgstr "Kontakte vorschlagen"
-#: src/Module/Contact.php:531
+#: src/Module/Contact.php:534
#, php-format
msgid "Network type: %s"
msgstr "Netzwerktyp: %s"
-#: src/Module/Contact.php:536
+#: src/Module/Contact.php:539
msgid "Communications lost with this contact!"
msgstr "Verbindungen mit diesem Kontakt verloren!"
-#: src/Module/Contact.php:542
+#: src/Module/Contact.php:545
msgid "Fetch further information for feeds"
msgstr "Weitere Informationen zu Feeds holen"
-#: src/Module/Contact.php:544
+#: src/Module/Contact.php:547
msgid ""
"Fetch information like preview pictures, title and teaser from the feed "
"item. You can activate this if the feed doesn't contain much text. Keywords "
"are taken from the meta header in the feed item and are posted as hash tags."
msgstr "Zusätzliche Informationen wie Vorschaubilder, Titel und Zusammenfassungen vom Feed-Eintrag laden. Du kannst diese Option aktivieren, wenn der Feed nicht allzu viel Text beinhaltet. Schlagwörter werden aus den Meta-Informationen des Feed-Headers bezogen und als Hash-Tags verwendet."
-#: src/Module/Contact.php:547
+#: src/Module/Contact.php:550
msgid "Fetch information"
msgstr "Beziehe Information"
-#: src/Module/Contact.php:548
+#: src/Module/Contact.php:551
msgid "Fetch keywords"
msgstr "Schlüsselwörter abrufen"
-#: src/Module/Contact.php:549
+#: src/Module/Contact.php:552
msgid "Fetch information and keywords"
msgstr "Beziehe Information und Schlüsselworte"
-#: src/Module/Contact.php:581
+#: src/Module/Contact.php:584
msgid "Profile Visibility"
msgstr "Profil-Sichtbarkeit"
-#: src/Module/Contact.php:582
+#: src/Module/Contact.php:585
msgid "Contact Information / Notes"
msgstr "Kontakt-Informationen / -Notizen"
-#: src/Module/Contact.php:583
+#: src/Module/Contact.php:586
msgid "Contact Settings"
msgstr "Kontakteinstellungen"
-#: src/Module/Contact.php:592
+#: src/Module/Contact.php:595
msgid "Contact"
msgstr "Kontakt"
-#: src/Module/Contact.php:596
+#: src/Module/Contact.php:599
#, php-format
msgid ""
"Please choose the profile you would like to display to %s when viewing your "
"profile securely."
msgstr "Bitte wähle eines deiner Profile das angezeigt werden soll, wenn %s dein Profil aufruft."
-#: src/Module/Contact.php:598
+#: src/Module/Contact.php:601
msgid "Their personal note"
msgstr "Die persönliche Mitteilung"
-#: src/Module/Contact.php:600
+#: src/Module/Contact.php:603
msgid "Edit contact notes"
msgstr "Notizen zum Kontakt bearbeiten"
-#: src/Module/Contact.php:604
+#: src/Module/Contact.php:607
msgid "Block/Unblock contact"
msgstr "Kontakt blockieren/freischalten"
-#: src/Module/Contact.php:605
+#: src/Module/Contact.php:608
msgid "Ignore contact"
msgstr "Ignoriere den Kontakt"
-#: src/Module/Contact.php:606
+#: src/Module/Contact.php:609
msgid "Repair URL settings"
msgstr "URL-Einstellungen reparieren"
-#: src/Module/Contact.php:607
+#: src/Module/Contact.php:610
msgid "View conversations"
msgstr "Unterhaltungen anzeigen"
-#: src/Module/Contact.php:612
+#: src/Module/Contact.php:615
msgid "Last update:"
msgstr "Letzte Aktualisierung: "
-#: src/Module/Contact.php:614
+#: src/Module/Contact.php:617
msgid "Update public posts"
msgstr "Öffentliche Beiträge aktualisieren"
-#: src/Module/Contact.php:616 src/Module/Contact.php:1068
+#: src/Module/Contact.php:619 src/Module/Contact.php:1071
msgid "Update now"
msgstr "Jetzt aktualisieren"
-#: src/Module/Contact.php:622 src/Module/Contact.php:825
-#: src/Module/Contact.php:1085
+#: src/Module/Contact.php:625 src/Module/Contact.php:828
+#: src/Module/Contact.php:1088
msgid "Unignore"
msgstr "Ignorieren aufheben"
-#: src/Module/Contact.php:626
+#: src/Module/Contact.php:629
msgid "Currently blocked"
msgstr "Derzeit geblockt"
-#: src/Module/Contact.php:627
+#: src/Module/Contact.php:630
msgid "Currently ignored"
msgstr "Derzeit ignoriert"
-#: src/Module/Contact.php:628
+#: src/Module/Contact.php:631
msgid "Currently archived"
msgstr "Momentan archiviert"
-#: src/Module/Contact.php:629
+#: src/Module/Contact.php:632
msgid "Awaiting connection acknowledge"
msgstr "Bedarf der Bestätigung des Kontakts"
-#: src/Module/Contact.php:630
+#: src/Module/Contact.php:633
msgid ""
"Replies/likes to your public posts may still be visible"
msgstr "Antworten/Likes auf deine öffentlichen Beiträge könnten weiterhin sichtbar sein"
-#: src/Module/Contact.php:631
+#: src/Module/Contact.php:634
msgid "Notification for new posts"
msgstr "Benachrichtigung bei neuen Beiträgen"
-#: src/Module/Contact.php:631
+#: src/Module/Contact.php:634
msgid "Send a notification of every new post of this contact"
msgstr "Sende eine Benachrichtigung, wann immer dieser Kontakt einen neuen Beitrag schreibt."
-#: src/Module/Contact.php:633
+#: src/Module/Contact.php:636
msgid "Blacklisted keywords"
msgstr "Unterdrückte Schlüsselworte "
-#: src/Module/Contact.php:633
+#: src/Module/Contact.php:636
msgid ""
"Comma separated list of keywords that should not be converted to hashtags, "
"when \"Fetch information and keywords\" is selected"
msgstr "Komma-Separierte Liste mit Schlüsselworten, die nicht in Hashtags konvertiert werden, wenn \"Beziehe Information und Schlüsselworte\" aktiviert wurde"
-#: src/Module/Contact.php:650
+#: src/Module/Contact.php:653 src/Module/Settings/TwoFactor/Index.php:100
msgid "Actions"
msgstr "Aktionen"
-#: src/Module/Contact.php:696
+#: src/Module/Contact.php:700
msgid "Suggestions"
msgstr "Kontaktvorschläge"
-#: src/Module/Contact.php:699
+#: src/Module/Contact.php:703
msgid "Suggest potential friends"
msgstr "Kontakte vorschlagen"
-#: src/Module/Contact.php:707
+#: src/Module/Contact.php:708 src/Module/Group.php:287
+msgid "All Contacts"
+msgstr "Alle Kontakte"
+
+#: src/Module/Contact.php:711
msgid "Show all contacts"
msgstr "Alle Kontakte anzeigen"
-#: src/Module/Contact.php:712
+#: src/Module/Contact.php:716
msgid "Unblocked"
msgstr "Ungeblockt"
-#: src/Module/Contact.php:715
+#: src/Module/Contact.php:719
msgid "Only show unblocked contacts"
msgstr "Nur nicht-blockierte Kontakte anzeigen"
-#: src/Module/Contact.php:720
+#: src/Module/Contact.php:724
msgid "Blocked"
msgstr "Geblockt"
-#: src/Module/Contact.php:723
+#: src/Module/Contact.php:727
msgid "Only show blocked contacts"
msgstr "Nur blockierte Kontakte anzeigen"
-#: src/Module/Contact.php:728
+#: src/Module/Contact.php:732
msgid "Ignored"
msgstr "Ignoriert"
-#: src/Module/Contact.php:731
+#: src/Module/Contact.php:735
msgid "Only show ignored contacts"
msgstr "Nur ignorierte Kontakte anzeigen"
-#: src/Module/Contact.php:736
+#: src/Module/Contact.php:740
msgid "Archived"
msgstr "Archiviert"
-#: src/Module/Contact.php:739
+#: src/Module/Contact.php:743
msgid "Only show archived contacts"
msgstr "Nur archivierte Kontakte anzeigen"
-#: src/Module/Contact.php:744
+#: src/Module/Contact.php:748
msgid "Hidden"
msgstr "Verborgen"
-#: src/Module/Contact.php:747
+#: src/Module/Contact.php:751
msgid "Only show hidden contacts"
msgstr "Nur verborgene Kontakte anzeigen"
-#: src/Module/Contact.php:755
+#: src/Module/Contact.php:759
msgid "Organize your contact groups"
msgstr "Verwalte deine Kontaktgruppen"
-#: src/Module/Contact.php:815
+#: src/Module/Contact.php:818
msgid "Search your contacts"
msgstr "Suche in deinen Kontakten"
-#: src/Module/Contact.php:826 src/Module/Contact.php:1094
+#: src/Module/Contact.php:829 src/Module/Contact.php:1097
msgid "Archive"
msgstr "Archivieren"
-#: src/Module/Contact.php:826 src/Module/Contact.php:1094
+#: src/Module/Contact.php:829 src/Module/Contact.php:1097
msgid "Unarchive"
msgstr "Aus Archiv zurückholen"
-#: src/Module/Contact.php:829
+#: src/Module/Contact.php:832
msgid "Batch Actions"
msgstr "Stapelverarbeitung"
-#: src/Module/Contact.php:856
+#: src/Module/Contact.php:859
msgid "Conversations started by this contact"
msgstr "Unterhaltungen, die von diesem Kontakt begonnen wurden"
-#: src/Module/Contact.php:861
+#: src/Module/Contact.php:864
msgid "Posts and Comments"
msgstr "Statusnachrichten und Kommentare"
-#: src/Module/Contact.php:884
+#: src/Module/Contact.php:887
msgid "View all contacts"
msgstr "Alle Kontakte anzeigen"
-#: src/Module/Contact.php:895
+#: src/Module/Contact.php:898
msgid "View all common friends"
msgstr "Alle Kontakte anzeigen"
-#: src/Module/Contact.php:905
+#: src/Module/Contact.php:908
msgid "Advanced Contact Settings"
msgstr "Fortgeschrittene Kontakteinstellungen"
-#: src/Module/Contact.php:991
+#: src/Module/Contact.php:994
msgid "Mutual Friendship"
msgstr "Beidseitige Freundschaft"
-#: src/Module/Contact.php:996
+#: src/Module/Contact.php:999
msgid "is a fan of yours"
msgstr "ist ein Fan von dir"
-#: src/Module/Contact.php:1001
+#: src/Module/Contact.php:1004
msgid "you are a fan of"
msgstr "Du bist Fan von"
-#: src/Module/Contact.php:1025
+#: src/Module/Contact.php:1028
msgid "Edit contact"
msgstr "Kontakt bearbeiten"
-#: src/Module/Contact.php:1079
+#: src/Module/Contact.php:1082
msgid "Toggle Blocked status"
msgstr "Geblockt-Status ein-/ausschalten"
-#: src/Module/Contact.php:1087
+#: src/Module/Contact.php:1090
msgid "Toggle Ignored status"
msgstr "Ignoriert-Status ein-/ausschalten"
-#: src/Module/Contact.php:1096
+#: src/Module/Contact.php:1099
msgid "Toggle Archive status"
msgstr "Archiviert-Status ein-/ausschalten"
-#: src/Module/Contact.php:1104
+#: src/Module/Contact.php:1107
msgid "Delete contact"
msgstr "Lösche den Kontakt"
-#: src/Module/Install.php:118
+#: src/Module/Credits.php:25
+msgid "Credits"
+msgstr "Credits"
+
+#: src/Module/Credits.php:26
+msgid ""
+"Friendica is a community project, that would not be possible without the "
+"help of many people. Here is a list of those who have contributed to the "
+"code or the translation of Friendica. Thank you all!"
+msgstr "Friendica ist ein Gemeinschaftsprojekt, das nicht ohne die Hilfe vieler Personen möglich wäre. Hier ist eine Aufzählung der Personen, die zum Code oder der Übersetzung beigetragen haben. Dank an alle !"
+
+#: src/Module/Directory.php:66
+msgid "No entries (some entries may be hidden)."
+msgstr "Keine Einträge (einige Einträge könnten versteckt sein)."
+
+#: src/Module/Directory.php:85
+msgid "Find on this site"
+msgstr "Auf diesem Server suchen"
+
+#: src/Module/Directory.php:87
+msgid "Results for:"
+msgstr "Ergebnisse für:"
+
+#: src/Module/Directory.php:89
+msgid "Site Directory"
+msgstr "Verzeichnis"
+
+#: src/Module/Feedtest.php:20 src/Module/Filer/SaveTag.php:20
+msgid "You must be logged in to use this module"
+msgstr "Du musst eingeloggt sein, um dieses Modul benutzen zu können."
+
+#: src/Module/Feedtest.php:49
+msgid "Source URL"
+msgstr "URL der Quelle"
+
+#: src/Module/Filer/SaveTag.php:39
+#, php-format
+msgid "Filetag %s saved to item"
+msgstr "Tag %s für den Eintrag gespeichert"
+
+#: src/Module/Filer/SaveTag.php:49
+msgid "- select -"
+msgstr "- auswählen -"
+
+#: src/Module/FollowConfirm.php:37
+msgid "No given contact."
+msgstr "Keine Kontakte vorgegeben."
+
+#: src/Module/Friendica.php:40
+msgid "Installed addons/apps:"
+msgstr "Installierte Apps und Addons"
+
+#: src/Module/Friendica.php:45
+msgid "No installed addons/apps"
+msgstr "Es sind keine Addons oder Apps installiert"
+
+#: src/Module/Friendica.php:50
+#, php-format
+msgid "Read about the Terms of Service of this node."
+msgstr "Erfahre mehr über die Nutzungsbedingungen dieses Knotens."
+
+#: src/Module/Friendica.php:57
+msgid "On this server the following remote servers are blocked."
+msgstr "Auf diesem Server werden die folgenden, entfernten Server blockiert."
+
+#: src/Module/Friendica.php:75
+#, php-format
+msgid ""
+"This is Friendica, version %s that is running at the web location %s. The "
+"database version is %s, the post update version is %s."
+msgstr "Diese Friendica-Instanz verwendet die Version %s, sie ist unter der folgenden Adresse im Web zu finden %s. Die Datenbankversion ist %s und die Post-Update-Version %s."
+
+#: src/Module/Friendica.php:80
+msgid ""
+"Please visit Friendi.ca to learn more "
+"about the Friendica project."
+msgstr "Bitte besuche Friendi.ca, um mehr über das Friendica-Projekt zu erfahren."
+
+#: src/Module/Friendica.php:81
+msgid "Bug reports and issues: please visit"
+msgstr "Probleme oder Fehler gefunden? Bitte besuche"
+
+#: src/Module/Friendica.php:81
+msgid "the bugtracker at github"
+msgstr "den Bugtracker auf github"
+
+#: src/Module/Friendica.php:82
+msgid "Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca"
+msgstr "Vorschläge, Lob usw.: E-Mail an \"Info\" at \"Friendi - dot ca\""
+
+#: src/Module/Group.php:42
+msgid "Group created."
+msgstr "Gruppe erstellt."
+
+#: src/Module/Group.php:48
+msgid "Could not create group."
+msgstr "Konnte die Gruppe nicht erstellen."
+
+#: src/Module/Group.php:59 src/Module/Group.php:207 src/Module/Group.php:233
+msgid "Group not found."
+msgstr "Gruppe nicht gefunden."
+
+#: src/Module/Group.php:65
+msgid "Group name changed."
+msgstr "Gruppenname geändert."
+
+#: src/Module/Group.php:87
+msgid "Unknown group."
+msgstr "Unbekannte Gruppe"
+
+#: src/Module/Group.php:96
+msgid "Contact is unavailable."
+msgstr "Kontakt ist nicht verfügbar"
+
+#: src/Module/Group.php:100
+msgid "Contact is deleted."
+msgstr "Kontakt wurde gelöscht"
+
+#: src/Module/Group.php:106
+msgid "Contact is blocked, unable to add it to a group."
+msgstr "Kontakt ist geblockt und konnte deshalb nicht zur Gruppe hinzugefügt werden"
+
+#: src/Module/Group.php:110
+msgid "Unable to add the contact to the group."
+msgstr "Konnte den Kontakt nicht zur Gruppe hinzufügen"
+
+#: src/Module/Group.php:112
+msgid "Contact successfully added to group."
+msgstr "Kontakt zur Gruppe hinzugefügt"
+
+#: src/Module/Group.php:116
+msgid "Unable to remove the contact from the group."
+msgstr "Konnte den Kontakt nicht aus der Gruppe entfernen"
+
+#: src/Module/Group.php:118
+msgid "Contact successfully removed from group."
+msgstr "Kontakt aus Gruppe entfernt"
+
+#: src/Module/Group.php:121
+msgid "Unknown group command."
+msgstr "Unbekannter Gruppen Befehl"
+
+#: src/Module/Group.php:124
+msgid "Bad request."
+msgstr "Ungültige Anfrage."
+
+#: src/Module/Group.php:163
+msgid "Save Group"
+msgstr "Gruppe speichern"
+
+#: src/Module/Group.php:164
+msgid "Filter"
+msgstr "Filter"
+
+#: src/Module/Group.php:170
+msgid "Create a group of contacts/friends."
+msgstr "Eine Kontaktgruppe anlegen."
+
+#: src/Module/Group.php:212
+msgid "Group removed."
+msgstr "Gruppe entfernt."
+
+#: src/Module/Group.php:214
+msgid "Unable to remove group."
+msgstr "Konnte die Gruppe nicht entfernen."
+
+#: src/Module/Group.php:265
+msgid "Delete Group"
+msgstr "Gruppe löschen"
+
+#: src/Module/Group.php:275
+msgid "Edit Group Name"
+msgstr "Gruppen Name bearbeiten"
+
+#: src/Module/Group.php:285
+msgid "Members"
+msgstr "Mitglieder"
+
+#: src/Module/Group.php:301
+msgid "Remove contact from group"
+msgstr "Entferne den Kontakt aus der Gruppe"
+
+#: src/Module/Group.php:335
+msgid "Add contact to group"
+msgstr "Füge den Kontakt zur Gruppe hinzu"
+
+#: src/Module/Help.php:43
+msgid "Help:"
+msgstr "Hilfe:"
+
+#: src/Module/Home.php:42
+#, php-format
+msgid "Welcome to %s"
+msgstr "Willkommen zu %s"
+
+#: src/Module/Install.php:158
msgid "Friendica Communications Server - Setup"
msgstr "Friendica Komunikationsserver - Installation"
-#: src/Module/Install.php:129
+#: src/Module/Install.php:169
msgid "System check"
msgstr "Systemtest"
-#: src/Module/Install.php:134
+#: src/Module/Install.php:174
msgid "Check again"
msgstr "Noch einmal testen"
-#: src/Module/Install.php:151
+#: src/Module/Install.php:189
+msgid "Base settings"
+msgstr "Grundeinstellungen"
+
+#: src/Module/Install.php:196
+msgid "Host name"
+msgstr "Host Name"
+
+#: src/Module/Install.php:198
+msgid ""
+"Overwrite this field in case the determinated hostname isn't right, "
+"otherweise leave it as is."
+msgstr "Sollte der ermittelte Hostname nicht stimmen, korrigiere bitte den Eintrag."
+
+#: src/Module/Install.php:201
+msgid "Base path to installation"
+msgstr "Basis-Pfad zur Installation"
+
+#: src/Module/Install.php:203
+msgid ""
+"If the system cannot detect the correct path to your installation, enter the"
+" correct path here. This setting should only be set if you are using a "
+"restricted system and symbolic links to your webroot."
+msgstr "Falls das System nicht den korrekten Pfad zu deiner Installation gefunden hat, gib den richtigen Pfad bitte hier ein. Du solltest hier den Pfad nur auf einem eingeschränkten System angeben müssen, bei dem du mit symbolischen Links auf dein Webverzeichnis verweist."
+
+#: src/Module/Install.php:206
+msgid "Sub path of the URL"
+msgstr "Unterverzeichnis (Pfad) der URL"
+
+#: src/Module/Install.php:208
+msgid ""
+"Overwrite this field in case the sub path determination isn't right, "
+"otherwise leave it as is. Leaving this field blank means the installation is"
+" at the base URL without sub path."
+msgstr "Sollte das ermittelte Unterverzeichnis der Friendica Installation nicht stimmen, korrigiere es bitte. Wenn dieses Feld leer ist, bedeutet dies, dass die Installation direkt unter der Basis-URL installiert wird."
+
+#: src/Module/Install.php:219
msgid "Database connection"
msgstr "Datenbankverbindung"
-#: src/Module/Install.php:152
+#: src/Module/Install.php:220
msgid ""
"In order to install Friendica we need to know how to connect to your "
"database."
msgstr "Um Friendica installieren zu können, müssen wir wissen, wie wir mit Deiner Datenbank Kontakt aufnehmen können."
-#: src/Module/Install.php:153
+#: src/Module/Install.php:221
msgid ""
"Please contact your hosting provider or site administrator if you have "
"questions about these settings."
msgstr "Bitte kontaktiere den Hosting-Provider oder den Administrator der Seite, falls du Fragen zu diesen Einstellungen haben solltest."
-#: src/Module/Install.php:154
+#: src/Module/Install.php:222
msgid ""
"The database you specify below should already exist. If it does not, please "
"create it before continuing."
msgstr "Die Datenbank, die du unten angibst, sollte bereits existieren. Ist dies noch nicht der Fall, erzeuge sie bitte, bevor du mit der Installation fortfährst."
-#: src/Module/Install.php:157
+#: src/Module/Install.php:229
msgid "Database Server Name"
msgstr "Datenbank-Server"
-#: src/Module/Install.php:162
+#: src/Module/Install.php:234
msgid "Database Login Name"
msgstr "Datenbank-Nutzer"
-#: src/Module/Install.php:168
+#: src/Module/Install.php:240
msgid "Database Login Password"
msgstr "Datenbank-Passwort"
-#: src/Module/Install.php:170
+#: src/Module/Install.php:242
msgid "For security reasons the password must not be empty"
msgstr "Aus Sicherheitsgründen darf das Passwort nicht leer sein."
-#: src/Module/Install.php:173
+#: src/Module/Install.php:245
msgid "Database Name"
msgstr "Datenbank-Name"
-#: src/Module/Install.php:178 src/Module/Install.php:214
+#: src/Module/Install.php:249 src/Module/Install.php:278
+msgid "Please select a default timezone for your website"
+msgstr "Bitte wähle die Standardzeitzone Deiner Webseite"
+
+#: src/Module/Install.php:263
+msgid "Site settings"
+msgstr "Server-Einstellungen"
+
+#: src/Module/Install.php:273
msgid "Site administrator email address"
msgstr "E-Mail-Adresse des Administrators"
-#: src/Module/Install.php:180 src/Module/Install.php:214
+#: src/Module/Install.php:275
msgid ""
"Your account email address must match this in order to use the web admin "
"panel."
msgstr "Die E-Mail-Adresse, die in Deinem Friendica-Account eingetragen ist, muss mit dieser Adresse übereinstimmen, damit du das Admin-Panel benutzen kannst."
-#: src/Module/Install.php:184 src/Module/Install.php:215
-msgid "Please select a default timezone for your website"
-msgstr "Bitte wähle die Standardzeitzone Deiner Webseite"
-
-#: src/Module/Install.php:208
-msgid "Site settings"
-msgstr "Server-Einstellungen"
-
-#: src/Module/Install.php:217
+#: src/Module/Install.php:282
msgid "System Language:"
msgstr "Systemsprache:"
-#: src/Module/Install.php:219
+#: src/Module/Install.php:284
msgid ""
"Set the default language for your Friendica installation interface and to "
"send emails."
msgstr "Wähle die Standardsprache für deine Friendica-Installations-Oberfläche und den E-Mail-Versand"
-#: src/Module/Install.php:231
+#: src/Module/Install.php:296
msgid "Your Friendica site database has been installed."
msgstr "Die Datenbank Deiner Friendica-Seite wurde installiert."
-#: src/Module/Install.php:239
+#: src/Module/Install.php:304
msgid "Installation finished"
msgstr "Installation abgeschlossen"
-#: src/Module/Install.php:261
+#: src/Module/Install.php:326
msgid "Use an application on a mobile device to get two-factor authentication " +"codes when prompted on login.
" +msgstr "Benutze eine App auf dein Smartphone um einen Zwei-Faktor identifikations Code zu bekommen wenn beim Loggin das verlagt wird.
" + +#: src/Module/Settings/TwoFactor/Index.php:90 +msgid "Authenticator app" +msgstr "Zwei-Faktor Authentifizierungsapp" + +#: src/Module/Settings/TwoFactor/Index.php:91 +msgid "Configured" +msgstr "Konfiguriert" + +#: src/Module/Settings/TwoFactor/Index.php:91 +msgid "Not Configured" +msgstr "Nicht konfiguriert" + +#: src/Module/Settings/TwoFactor/Index.php:92 +msgid "You haven't finished configuring your authenticator app.
" +msgstr "Die Konfiguration deiner Zwei-Faktor Authentifizierungsapp ist nicht abgeschlossen.
" + +#: src/Module/Settings/TwoFactor/Index.php:93 +msgid "Your authenticator app is correctly configured.
" +msgstr "Deine Zwei-Faktor Authentifizierungsapp ist nicht korrekt konfiguriert.
" + +#: src/Module/Settings/TwoFactor/Index.php:95 +msgid "Recovery codes" +msgstr "Wiederherstellungsschlüssel" + +#: src/Module/Settings/TwoFactor/Index.php:96 +msgid "Remaining valid codes" +msgstr "Verbleibende Wiederherstellungsschlüssel" + +#: src/Module/Settings/TwoFactor/Index.php:98 +msgid "" +"These one-use codes can replace an authenticator app code in case you " +"have lost access to it.
" +msgstr "Diese Einmalcodes können einen Authentifikator-App-Code ersetzen, falls Sie den Zugriff darauf verloren haben.
" + +#: src/Module/Settings/TwoFactor/Index.php:101 +msgid "Current password:" +msgstr "Aktuelles Passwort:" + +#: src/Module/Settings/TwoFactor/Index.php:101 +msgid "" +"You need to provide your current password to change two-factor " +"authentication settings." +msgstr "Du musst dein aktuelles Passwort eingeben um die Einstellungen der Zwei-Faktor-Authentifizierung zu ändern" + +#: src/Module/Settings/TwoFactor/Index.php:102 +msgid "Enable two-factor authentication" +msgstr "Aktiviere die Zwei-Faktor-Authentifizierung" + +#: src/Module/Settings/TwoFactor/Index.php:103 +msgid "Disable two-factor authentication" +msgstr "Deaktiviere die Zwei-Faktor-Authentifizierung" + +#: src/Module/Settings/TwoFactor/Index.php:104 +msgid "Show recovery codes" +msgstr "Wiederherstellungscodes anzeigen" + +#: src/Module/Settings/TwoFactor/Index.php:105 +msgid "Finish app configuration" +msgstr "Beenden Sie die App-Konfiguration" + +#: src/Module/Settings/TwoFactor/Recovery.php:34 +#: src/Module/Settings/TwoFactor/Verify.php:41 +msgid "Please enter your password to access this page." +msgstr "Bitte geben Sie Ihr Passwort ein, um auf diese Seite zuzugreifen." + +#: src/Module/Settings/TwoFactor/Recovery.php:50 +msgid "New recovery codes successfully generated." +msgstr "Neue Wiederherstellungscodes erfolgreich generiert." + +#: src/Module/Settings/TwoFactor/Recovery.php:76 +msgid "Two-factor recovery codes" +msgstr "Zwei-Faktor-Wiederherstellungscodes" + +#: src/Module/Settings/TwoFactor/Recovery.php:78 +msgid "" +"Recovery codes can be used to access your account in the event you lose " +"access to your device and cannot receive two-factor authentication " +"codes.
Put these in a safe spot! If you lose your " +"device and don’t have the recovery codes you will lose access to your " +"account.
" +msgstr "Wiederherstellungscodes können verwendet werden, um auf Ihr Konto zuzugreifen, falls Sie den Zugriff auf Ihr Gerät verlieren und keine Zwei-Faktor-Authentifizierungscodes erhalten können.
Bewahren Sie diese an einem sicheren Ort auf! Wenn Sie Ihr Gerät verlieren und nicht über die Wiederherstellungscodes verfügen, verlieren Sie den Zugriff auf Ihr Konto.
" + +#: src/Module/Settings/TwoFactor/Recovery.php:80 +msgid "" +"When you generate new recovery codes, you must copy the new codes. Your old " +"codes won’t work anymore." +msgstr "Wenn Sie neue Wiederherstellungscodes generieren, müssen Sie die neuen Codes kopieren. Ihre alten Codes funktionieren nicht mehr." + +#: src/Module/Settings/TwoFactor/Recovery.php:81 +msgid "Generate new recovery codes" +msgstr "Generieren Sie neue Wiederherstellungscodes" + +#: src/Module/Settings/TwoFactor/Recovery.php:83 +msgid "Next: Verification" +msgstr "Weiter: Überprüfung" + +#: src/Module/Settings/TwoFactor/Verify.php:63 +msgid "Two-factor authentication successfully activated." +msgstr "Zwei-Faktor-Authentifizierung erfolgreich aktiviert." + +#: src/Module/Settings/TwoFactor/Verify.php:67 +#: src/Module/TwoFactor/Recovery.php:46 src/Module/TwoFactor/Verify.php:41 +msgid "Invalid code, please retry." +msgstr "Ungültiger Code, bitte erneut versuchen." + +#: src/Module/Settings/TwoFactor/Verify.php:96 +#, php-format +msgid "" +"Or you can submit the authentication settings manually:
\n" +"Oder Sie können die Authentifizierungseinstellungen manuell übermitteln:
\nPlease scan this QR Code with your authenticator app and submit the " +"provided code.
" +msgstr "Bitte scannen Sie diesen QR-Code mit Ihrer Authentifikator-App und übermitteln Sie den bereitgestellten Code.
" + +#: src/Module/Settings/TwoFactor/Verify.php:120 +#, php-format +msgid "" +"Or you can open the following URL in your mobile devicde:
" +msgstr "Oder Sie können die folgende URL in Ihrem Mobilgerät öffnen:
" + +#: src/Module/Settings/TwoFactor/Verify.php:126 +#: src/Module/TwoFactor/Verify.php:63 +msgid "Please enter a code from your authentication app" +msgstr "Bitte geben Sie einen Code aus Ihrer Authentifizierungs-App ein" + +#: src/Module/Settings/TwoFactor/Verify.php:127 +msgid "Verify code and enable two-factor authentication" +msgstr "Überprüfen Sie den Code und aktivieren Sie die Zwei-Faktor-Authentifizierung" + +#: src/Module/Special/HTTPException.php:32 +msgid "Bad Request" +msgstr "Ungültige Anfrage" + +#: src/Module/Special/HTTPException.php:33 +msgid "Unauthorized" +msgstr "Nicht autorisiert" + +#: src/Module/Special/HTTPException.php:34 +msgid "Forbidden" +msgstr "Verboten" + +#: src/Module/Special/HTTPException.php:35 +msgid "Not Found" +msgstr "Nicht gefunden" + +#: src/Module/Special/HTTPException.php:36 +msgid "Internal Server Error" +msgstr "Interner Serverfehler" + +#: src/Module/Special/HTTPException.php:37 +msgid "Service Unavailable" +msgstr "Dienst nicht verfügbar" + +#: src/Module/Special/HTTPException.php:44 +msgid "" +"The server cannot or will not process the request due to an apparent client " +"error." +msgstr "Aufgrund eines offensichtlichen Fehlers auf der Seite des Clients kann oder wird der Server die Anfrage nicht bearbeiten." + +#: src/Module/Special/HTTPException.php:45 +msgid "" +"Authentication is required and has failed or has not yet been provided." +msgstr "Die erforderliche Authentifizierung ist fehlgeschlagen oder noch nicht erfolgt." + +#: src/Module/Special/HTTPException.php:46 +msgid "" +"The request was valid, but the server is refusing action. The user might not" +" have the necessary permissions for a resource, or may need an account." +msgstr "Die Anfrage war gültig, aber der Server verweigert die Ausführung. Der Benutzer verfügt möglicherweise nicht über die erforderlichen Berechtigungen oder benötigt ein Nutzerkonto." + +#: src/Module/Special/HTTPException.php:47 +msgid "" +"The requested resource could not be found but may be available in the " +"future." +msgstr "Die angeforderte Ressource konnte nicht gefunden werden, sie könnte allerdings zu einem späteren Zeitpunkt verfügbar sein." + +#: src/Module/Special/HTTPException.php:48 +msgid "" +"An unexpected condition was encountered and no more specific message is " +"suitable." +msgstr "Eine unerwartete Situation ist eingetreten, zu der keine detailliertere Nachricht vorliegt." + +#: src/Module/Special/HTTPException.php:49 +msgid "" +"The server is currently unavailable (because it is overloaded or down for " +"maintenance). Please try again later." +msgstr "Der Server ist derzeit nicht verfügbar (wegen Überlastung oder Wartungsarbeiten). Bitte versuche es später noch einmal." + +#: src/Module/Special/HTTPException.php:55 +msgid "Go back" +msgstr "Geh zurück" + #: src/Module/Tos.php:35 src/Module/Tos.php:77 msgid "" "At the time of registration, and for providing communications between the " @@ -9498,165 +9881,207 @@ msgstr "Angemeldete Nutzer können ihre Nutzerdaten jederzeit von den You can enter one of your one-time recovery codes in case you lost access" +" to your mobile device." +msgstr "Sie können einen Ihrer einmaligen Wiederherstellungscodes eingeben, falls Sie den Zugriff auf Ihr Mobilgerät verloren haben.
" + +#: src/Module/TwoFactor/Recovery.php:67 src/Module/TwoFactor/Verify.php:62 +#, php-format +msgid "Don’t have your phone? Enter a two-factor recovery code" +msgstr "Hast du dein Handy nicht? Geben Sie einen Zwei-Faktor-Wiederherstellungscode ein" + +#: src/Module/TwoFactor/Recovery.php:68 +msgid "Please enter a recovery code" +msgstr "Bitte geben Sie einen Wiederherstellungscode ein" + +#: src/Module/TwoFactor/Recovery.php:69 +msgid "Submit recovery code and complete login" +msgstr "Senden Sie den Wiederherstellungscode und schließen Sie die Anmeldung ab" + +#: src/Module/TwoFactor/Verify.php:61 +msgid "" +"Open the two-factor authentication app on your device to get an " +"authentication code and verify your identity.
" +msgstr "Öffnen Sie die Zwei-Faktor-Authentifizierungs-App auf Ihrem Gerät, um einen Authentifizierungscode abzurufen und Ihre Identität zu überprüfen.
" + +#: src/Module/TwoFactor/Verify.php:64 +msgid "Verify code and complete login" +msgstr "Code überprüfen und Anmeldung abschließen" + +#: src/Object/Post.php:137 msgid "This entry was edited" msgstr "Dieser Beitrag wurde bearbeitet." -#: src/Object/Post.php:198 +#: src/Object/Post.php:157 +msgid "Private Message" +msgstr "Private Nachricht" + +#: src/Object/Post.php:199 msgid "Delete locally" msgstr "Lokal löschen" -#: src/Object/Post.php:201 +#: src/Object/Post.php:202 msgid "Delete globally" msgstr "Global löschen" -#: src/Object/Post.php:201 +#: src/Object/Post.php:202 msgid "Remove locally" msgstr "Lokal entfernen" -#: src/Object/Post.php:215 +#: src/Object/Post.php:216 msgid "save to folder" msgstr "In Ordner speichern" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I will attend" msgstr "Ich werde teilnehmen" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I will not attend" msgstr "Ich werde nicht teilnehmen" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I might attend" msgstr "Ich werde eventuell teilnehmen" -#: src/Object/Post.php:278 +#: src/Object/Post.php:279 msgid "ignore thread" msgstr "Thread ignorieren" -#: src/Object/Post.php:279 +#: src/Object/Post.php:280 msgid "unignore thread" msgstr "Thread nicht mehr ignorieren" -#: src/Object/Post.php:280 +#: src/Object/Post.php:281 msgid "toggle ignore status" msgstr "Ignoriert-Status ein-/ausschalten" -#: src/Object/Post.php:291 +#: src/Object/Post.php:292 msgid "add star" msgstr "markieren" -#: src/Object/Post.php:292 +#: src/Object/Post.php:293 msgid "remove star" msgstr "Markierung entfernen" -#: src/Object/Post.php:293 +#: src/Object/Post.php:294 msgid "toggle star status" msgstr "Markierung umschalten" -#: src/Object/Post.php:296 +#: src/Object/Post.php:297 msgid "starred" msgstr "markiert" -#: src/Object/Post.php:300 +#: src/Object/Post.php:301 msgid "add tag" msgstr "Tag hinzufügen" -#: src/Object/Post.php:311 +#: src/Object/Post.php:312 msgid "like" msgstr "mag ich" -#: src/Object/Post.php:312 +#: src/Object/Post.php:313 msgid "dislike" msgstr "mag ich nicht" -#: src/Object/Post.php:315 +#: src/Object/Post.php:316 msgid "Share this" msgstr "Weitersagen" -#: src/Object/Post.php:315 +#: src/Object/Post.php:316 msgid "share" msgstr "Teilen" -#: src/Object/Post.php:382 +#: src/Object/Post.php:384 msgid "to" msgstr "zu" -#: src/Object/Post.php:383 +#: src/Object/Post.php:385 msgid "via" msgstr "via" -#: src/Object/Post.php:384 +#: src/Object/Post.php:386 msgid "Wall-to-Wall" msgstr "Wall-to-Wall" -#: src/Object/Post.php:385 +#: src/Object/Post.php:387 msgid "via Wall-To-Wall:" msgstr "via Wall-To-Wall:" -#: src/Object/Post.php:418 +#: src/Object/Post.php:420 #, php-format msgid "Reply to %s" msgstr "Antworte %s" -#: src/Object/Post.php:433 +#: src/Object/Post.php:435 msgid "Notifier task is pending" msgstr "Die Benachrichtigungsaufgabe ist ausstehend" -#: src/Object/Post.php:434 +#: src/Object/Post.php:436 msgid "Delivery to remote servers is pending" msgstr "Die Auslieferung an Remote-Server steht noch aus" -#: src/Object/Post.php:435 +#: src/Object/Post.php:437 msgid "Delivery to remote servers is underway" msgstr "Die Auslieferung an Remote-Server ist unterwegs" -#: src/Object/Post.php:436 +#: src/Object/Post.php:438 msgid "Delivery to remote servers is mostly done" msgstr "Die Zustellung an Remote-Server ist fast erledigt" -#: src/Object/Post.php:437 +#: src/Object/Post.php:439 msgid "Delivery to remote servers is done" msgstr "Die Zustellung an die Remote-Server ist erledigt" -#: src/Object/Post.php:457 +#: src/Object/Post.php:459 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d Kommentar" msgstr[1] "%d Kommentare" -#: src/Object/Post.php:458 +#: src/Object/Post.php:460 msgid "Show more" msgstr "Zeige mehr" -#: src/Object/Post.php:459 +#: src/Object/Post.php:461 msgid "Show fewer" msgstr "Zeige weniger" -#: src/Protocol/Diaspora.php:2496 +#: src/Protocol/Diaspora.php:2438 msgid "Sharing notification from Diaspora network" msgstr "Freigabe-Benachrichtigung von Diaspora" -#: src/Protocol/Diaspora.php:3613 +#: src/Protocol/Diaspora.php:3598 msgid "Attachments:" msgstr "Anhänge:" -#: src/Protocol/OStatus.php:1866 +#: src/Protocol/OStatus.php:1863 #, php-format msgid "%s is now following %s." msgstr "%s folgt nun %s" -#: src/Protocol/OStatus.php:1867 +#: src/Protocol/OStatus.php:1864 msgid "following" msgstr "folgen" -#: src/Protocol/OStatus.php:1870 +#: src/Protocol/OStatus.php:1867 #, php-format msgid "%s stopped following %s." msgstr "%s hat aufgehört %s, zu folgen" -#: src/Protocol/OStatus.php:1871 +#: src/Protocol/OStatus.php:1868 msgid "stopped following" msgstr "wird nicht mehr gefolgt" @@ -9726,16 +10151,16 @@ msgstr "in %1$d %2$s" msgid "%1$d %2$s ago" msgstr "vor %1$d %2$s" -#: src/Worker/Delivery.php:453 +#: src/Worker/Delivery.php:450 msgid "(no subject)" msgstr "(kein Betreff)" -#: update.php:217 +#: update.php:218 #, php-format msgid "%s: Updating author-id and owner-id in item and thread table. " msgstr "%s: Aktualisiere die author-id und owner-id in der Thread Tabelle" -#: update.php:272 +#: update.php:273 #, php-format msgid "%s: Updating post-type." msgstr "%s: Aktualisiere Beitrags-Typ" @@ -9764,63 +10189,73 @@ msgstr "comix" msgid "slackr" msgstr "slackr" -#: view/theme/duepuntozero/config.php:75 +#: view/theme/duepuntozero/config.php:74 msgid "Variations" msgstr "Variationen" -#: view/theme/frio/config.php:103 +#: view/theme/frio/config.php:105 msgid "Custom" msgstr "Benutzerdefiniert" -#: view/theme/frio/config.php:115 +#: view/theme/frio/config.php:117 msgid "Note" msgstr "Hinweis" -#: view/theme/frio/config.php:115 +#: view/theme/frio/config.php:117 msgid "Check image permissions if all users are allowed to see the image" msgstr "Überprüfe, dass alle Benutzer die Berechtigung haben dieses Bild anzusehen" -#: view/theme/frio/config.php:122 +#: view/theme/frio/config.php:123 msgid "Select color scheme" msgstr "Farbschema auswählen" -#: view/theme/frio/config.php:123 +#: view/theme/frio/config.php:124 +msgid "Copy or paste schemestring" +msgstr "Farbschema kopieren oder einfügen" + +#: view/theme/frio/config.php:124 +msgid "" +"You can copy this string to share your theme with others. Pasting here " +"applies the schemestring" +msgstr "Du kannst den String mit den Farbschema Informationen mit anderen Teilen. Wenn du einen neuen Farbschema-String hier einfügst wird er für deine Einstellungen übernommen." + +#: view/theme/frio/config.php:125 msgid "Navigation bar background color" msgstr "Hintergrundfarbe der Navigationsleiste" -#: view/theme/frio/config.php:124 +#: view/theme/frio/config.php:126 msgid "Navigation bar icon color " msgstr "Icon Farbe in der Navigationsleiste" -#: view/theme/frio/config.php:125 +#: view/theme/frio/config.php:127 msgid "Link color" msgstr "Linkfarbe" -#: view/theme/frio/config.php:126 +#: view/theme/frio/config.php:128 msgid "Set the background color" msgstr "Hintergrundfarbe festlegen" -#: view/theme/frio/config.php:127 +#: view/theme/frio/config.php:129 msgid "Content background opacity" msgstr "Opazität des Hintergrunds von Beiträgen" -#: view/theme/frio/config.php:128 +#: view/theme/frio/config.php:130 msgid "Set the background image" msgstr "Hintergrundbild festlegen" -#: view/theme/frio/config.php:129 +#: view/theme/frio/config.php:131 msgid "Background image style" msgstr "Stil des Hintergrundbildes" -#: view/theme/frio/config.php:134 +#: view/theme/frio/config.php:136 msgid "Login page background image" msgstr "Hintergrundbild der Login-Seite" -#: view/theme/frio/config.php:138 +#: view/theme/frio/config.php:140 msgid "Login page background color" msgstr "Hintergrundfarbe der Login-Seite" -#: view/theme/frio/config.php:138 +#: view/theme/frio/config.php:140 msgid "Leave background image and color empty for theme defaults" msgstr "Wenn die Theme-Vorgaben verwendet werden sollen, lass bitte die Felder für die Hintergrundfarbe und das Hintergrundbild leer." @@ -9868,27 +10303,27 @@ msgstr "Gast" msgid "Visitor" msgstr "Besucher" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Alignment" msgstr "Ausrichtung" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Left" msgstr "Links" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Center" msgstr "Mitte" -#: view/theme/quattro/config.php:78 +#: view/theme/quattro/config.php:77 msgid "Color scheme" msgstr "Farbschema" -#: view/theme/quattro/config.php:79 +#: view/theme/quattro/config.php:78 msgid "Posts font size" msgstr "Schriftgröße in Beiträgen" -#: view/theme/quattro/config.php:80 +#: view/theme/quattro/config.php:79 msgid "Textareas font size" msgstr "Schriftgröße in Eingabefeldern" @@ -9896,31 +10331,31 @@ msgstr "Schriftgröße in Eingabefeldern" msgid "Comma separated list of helper forums" msgstr "Komma-separierte Liste der Helfer-Foren" -#: view/theme/vier/config.php:123 +#: view/theme/vier/config.php:122 msgid "Set style" msgstr "Stil auswählen" -#: view/theme/vier/config.php:124 +#: view/theme/vier/config.php:123 msgid "Community Pages" msgstr "Foren" -#: view/theme/vier/config.php:125 view/theme/vier/theme.php:151 +#: view/theme/vier/config.php:124 view/theme/vier/theme.php:151 msgid "Community Profiles" msgstr "Community-Profile" -#: view/theme/vier/config.php:126 +#: view/theme/vier/config.php:125 msgid "Help or @NewHere ?" msgstr "Hilfe oder @NewHere" -#: view/theme/vier/config.php:127 view/theme/vier/theme.php:373 +#: view/theme/vier/config.php:126 view/theme/vier/theme.php:373 msgid "Connect Services" msgstr "Verbinde Dienste" -#: view/theme/vier/config.php:128 +#: view/theme/vier/config.php:127 msgid "Find Friends" msgstr "Kontakte finden" -#: view/theme/vier/config.php:129 view/theme/vier/theme.php:181 +#: view/theme/vier/config.php:128 view/theme/vier/theme.php:181 msgid "Last users" msgstr "Letzte Nutzer" diff --git a/view/lang/de/strings.php b/view/lang/de/strings.php index f4659b9c3..29d2b2c2b 100644 --- a/view/lang/de/strings.php +++ b/view/lang/de/strings.php @@ -16,11 +16,11 @@ $a->strings["Weekly posting limit of %d post reached. The post was rejected."] = ]; $a->strings["Monthly posting limit of %d post reached. The post was rejected."] = "Das monatliche Limit von %d Beiträgen wurde erreicht. Der Beitrag wurde verworfen."; $a->strings["Profile Photos"] = "Profilbilder"; -$a->strings["event"] = "Event"; +$a->strings["event"] = "Veranstaltung"; $a->strings["status"] = "Status"; $a->strings["photo"] = "Foto"; -$a->strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s mag %2\$ss %3\$s"; -$a->strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s mag %2\$ss %3\$s nicht"; +$a->strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s Gefällt %2\$ss %3\$s"; +$a->strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s Gefällt %2\$ss %3\$s nicht"; $a->strings["%1\$s attends %2\$s's %3\$s"] = "%1\$s nimmt an %2\$ss %3\$s teil."; $a->strings["%1\$s doesn't attend %2\$s's %3\$s"] = "%1\$s nimmt nicht an %2\$ss %3\$s teil."; $a->strings["%1\$s attends maybe %2\$s's %3\$s"] = "%1\$s nimmt eventuell an %2\$ss %3\$s teil."; @@ -37,6 +37,7 @@ $a->strings["Attending"] = [ ]; $a->strings["Not attending"] = "Nicht teilnehmend"; $a->strings["Might attend"] = "Eventuell teilnehmend"; +$a->strings["Reshares"] = "Reshares"; $a->strings["Select"] = "Auswählen"; $a->strings["Delete"] = "Löschen"; $a->strings["View %s's profile @ %s"] = "Das Profil von %s auf %s betrachten."; @@ -54,6 +55,8 @@ $a->strings["View Photos"] = "Bilder anschauen"; $a->strings["Network Posts"] = "Netzwerkbeiträge"; $a->strings["View Contact"] = "Kontakt anzeigen"; $a->strings["Send PM"] = "Private Nachricht senden"; +$a->strings["Block"] = "Sperren"; +$a->strings["Ignore"] = "Ignorieren"; $a->strings["Poke"] = "Anstupsen"; $a->strings["Connect/Follow"] = "Verbinden/Folgen"; $a->strings["%s likes this."] = "%s mag das."; @@ -61,6 +64,7 @@ $a->strings["%s doesn't like this."] = "%s mag das nicht."; $a->strings["%s attends."] = "%s nimmt teil."; $a->strings["%s doesn't attend."] = "%s nimmt nicht teil."; $a->strings["%s attends maybe."] = "%s nimmt eventuell teil."; +$a->strings["%s reshared this."] = "%s hat dies geteilt"; $a->strings["and"] = "und"; $a->strings["and %d other people"] = "und %dandere"; $a->strings["%2\$d people like this"] = "%2\$d Personen mögen das"; @@ -73,6 +77,7 @@ $a->strings["%2\$d people don't attend"] = "%2\$ $a->strings["%s don't attend."] = "%s nehmen nicht teil."; $a->strings["%2\$d people attend maybe"] = "%2\$d Personen nehmen eventuell teil"; $a->strings["%s attend maybe."] = "%s nimmt eventuell teil."; +$a->strings["%2\$d people reshared this"] = "%2\$d Personen haben dies geteilt"; $a->strings["Visible to everybody"] = "Für jedermann sichtbar"; $a->strings["Please enter a image/video/audio/webpage URL:"] = "Bitte gib eine Bild/Video/Audio/Webseiten-URL ein:"; $a->strings["Tag term:"] = "Tag:"; @@ -195,474 +200,12 @@ $a->strings["Yes"] = "Ja"; $a->strings["Permission denied."] = "Zugriff verweigert."; $a->strings["Archives"] = "Archiv"; $a->strings["show more"] = "mehr anzeigen"; -$a->strings["Theme settings updated."] = "Themeneinstellungen aktualisiert."; -$a->strings["Information"] = "Information"; -$a->strings["Overview"] = "Übersicht"; -$a->strings["Federation Statistics"] = "Föderation Statistik"; -$a->strings["Configuration"] = "Konfiguration"; -$a->strings["Site"] = "Seite"; -$a->strings["Users"] = "Nutzer"; -$a->strings["Addons"] = "Addons"; -$a->strings["Themes"] = "Themen"; -$a->strings["Additional features"] = "Zusätzliche Features"; -$a->strings["Terms of Service"] = "Nutzungsbedingungen"; -$a->strings["Database"] = "Datenbank"; -$a->strings["DB updates"] = "DB Updates"; -$a->strings["Inspect Queue"] = "Warteschlange Inspizieren"; -$a->strings["Inspect Deferred Workers"] = "Verzögerte Worker inspizieren"; -$a->strings["Inspect worker Queue"] = "Worker Warteschlange inspizieren"; -$a->strings["Tools"] = "Werkzeuge"; -$a->strings["Contact Blocklist"] = "Kontakt Sperrliste"; -$a->strings["Server Blocklist"] = "Server Blockliste"; -$a->strings["Delete Item"] = "Eintrag löschen"; -$a->strings["Logs"] = "Protokolle"; -$a->strings["View Logs"] = "Protokolle anzeigen"; -$a->strings["Diagnostics"] = "Diagnostik"; -$a->strings["PHP Info"] = "PHP-Info"; -$a->strings["probe address"] = "Adresse untersuchen"; -$a->strings["check webfinger"] = "Webfinger überprüfen"; -$a->strings["Admin"] = "Administration"; -$a->strings["Addon Features"] = "Addon Features"; -$a->strings["User registrations waiting for confirmation"] = "Nutzeranmeldungen, die auf Bestätigung warten"; -$a->strings["Administration"] = "Administration"; -$a->strings["Display Terms of Service"] = "Nutzungsbedingungen anzeigen"; -$a->strings["Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page."] = "Aktiviert die Seite für die Nutzungsbedingungen. Ist dies der Fall, werden sie auch von der Registrierungsseite und der allgemeinen Informationsseite verlinkt."; -$a->strings["Display Privacy Statement"] = "Datenschutzerklärung anzeigen"; -$a->strings["Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR."] = "Zeige Informationen über die zum Betrieb der Seite notwendigen, personenbezogenen Daten an, wie es z.B. die EU-DSGVO verlangt."; -$a->strings["Privacy Statement Preview"] = "Vorschau: Datenschutzerklärung"; -$a->strings["The Terms of Service"] = "Die Nutzungsbedingungen"; -$a->strings["Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below."] = "Füge hier die Nutzungsbedingungen deines Knotens ein. Du kannst BBCode zur Formatierung verwenden. Überschriften sollten [h2] oder darunter sein."; -$a->strings["Save Settings"] = "Einstellungen speichern"; -$a->strings["Blocked domain"] = "Blockierte Domain"; -$a->strings["The blocked domain"] = "Die blockierte Domain"; -$a->strings["Reason for the block"] = "Begründung für die Blockierung"; -$a->strings["The reason why you blocked this domain."] = "Die Begründung, warum du diese Domain blockiert hast."; -$a->strings["Delete domain"] = "Domain löschen"; -$a->strings["Check to delete this entry from the blocklist"] = "Markieren, um diesen Eintrag von der Blocklist zu entfernen"; -$a->strings["This page can be used to define a black list of servers from the federated network that are not allowed to interact with your node. For all entered domains you should also give a reason why you have blocked the remote server."] = "Auf dieser Seite kannst du die Liste der blockierten Domains aus dem föderalen Netzwerk verwalten, denen es untersagt ist, mit deinem Knoten zu interagieren. Für jede der blockierten Domains musst du außerdem einen Grund für die Sperrung angeben."; -$a->strings["The list of blocked servers will be made publically available on the /friendica page so that your users and people investigating communication problems can find the reason easily."] = "Die Liste der blockierten Domains wird auf der /friendica Seite öffentlich einsehbar gemacht, damit deine Nutzer und Personen, die Kommunikationsprobleme erkunden, die Ursachen einfach finden können."; -$a->strings["Add new entry to block list"] = "Neuen Eintrag in die Blockliste"; -$a->strings["Server Domain"] = "Domain des Servers"; -$a->strings["The domain of the new server to add to the block list. Do not include the protocol."] = "Der Domain-Name des Servers, der geblockt werden soll. Gib das Protokoll nicht mit an!"; -$a->strings["Block reason"] = "Begründung der Blockierung"; -$a->strings["Add Entry"] = "Eintrag hinzufügen"; -$a->strings["Save changes to the blocklist"] = "Änderungen der Blockliste speichern"; -$a->strings["Current Entries in the Blocklist"] = "Aktuelle Einträge der Blockliste"; -$a->strings["Delete entry from blocklist"] = "Eintrag von der Blockliste entfernen"; -$a->strings["Delete entry from blocklist?"] = "Eintrag von der Blockliste entfernen?"; -$a->strings["Server added to blocklist."] = "Server zur Blockliste hinzugefügt."; -$a->strings["Site blocklist updated."] = "Blockliste aktualisiert."; -$a->strings["The contact has been blocked from the node"] = "Der Kontakt wurde von diesem Knoten geblockt"; -$a->strings["Could not find any contact entry for this URL (%s)"] = "Für die URL (%s) konnte kein Kontakt gefunden werden"; -$a->strings["%s contact unblocked"] = [ - 0 => "%sKontakt wieder freigegeben", - 1 => "%sKontakte wieder freigegeben", -]; -$a->strings["Remote Contact Blocklist"] = "Sperrliste entfernter Kontakte"; -$a->strings["This page allows you to prevent any message from a remote contact to reach your node."] = "Auf dieser Seite kannst du Accounts von anderen Knoten blockieren und damit verhindern, dass ihre Beiträge von deinem Knoten angenommen werden."; -$a->strings["Block Remote Contact"] = "Blockiere entfernten Kontakt"; -$a->strings["select all"] = "Alle auswählen"; -$a->strings["select none"] = "Auswahl aufheben"; -$a->strings["Block"] = "Sperren"; -$a->strings["Unblock"] = "Entsperren"; -$a->strings["No remote contact is blocked from this node."] = "Derzeit werden keine Kontakte auf diesem Knoten blockiert."; -$a->strings["Blocked Remote Contacts"] = "Blockierte Kontakte von anderen Knoten"; -$a->strings["Block New Remote Contact"] = "Blockieren von weiteren Kontakten"; -$a->strings["Photo"] = "Foto:"; -$a->strings["Name"] = "Name"; -$a->strings["Address"] = "Adresse"; -$a->strings["Profile URL"] = "Profil URL"; -$a->strings["%s total blocked contact"] = [ - 0 => "Insgesamt %s blockierter Kontakt", - 1 => "Insgesamt %s blockierte Kontakte", -]; -$a->strings["URL of the remote contact to block."] = "Die URL des entfernten Kontakts, der blockiert werden soll."; -$a->strings["Delete this Item"] = "Diesen Eintrag löschen"; -$a->strings["On this page you can delete an item from your node. If the item is a top level posting, the entire thread will be deleted."] = "Auf dieser Seite kannst du Einträge von deinem Knoten löschen. Wenn der Eintrag der Anfang einer Diskussion ist, wird der gesamte Diskussionsverlauf gelöscht."; -$a->strings["You need to know the GUID of the item. You can find it e.g. by looking at the display URL. The last part of http://example.com/display/123456 is the GUID, here 123456."] = "Zur Löschung musst du die GUID des Eintrags kennen. Diese findest du z.B. durch die /display URL des Eintrags. Der letzte Teil der URL ist die GUID. Lautet die URL beispielsweise http://example.com/display/123456, ist die GUID 123456."; -$a->strings["GUID"] = "GUID"; -$a->strings["The GUID of the item you want to delete."] = "Die GUID des zu löschenden Eintrags"; -$a->strings["Item marked for deletion."] = "Eintrag wurden zur Löschung markiert"; -$a->strings["unknown"] = "Unbekannt"; -$a->strings["This page offers you some numbers to the known part of the federated social network your Friendica node is part of. These numbers are not complete but only reflect the part of the network your node is aware of."] = "Diese Seite präsentiert einige Zahlen zu dem bekannten Teil des föderalen sozialen Netzwerks, von dem deine Friendica Installation ein Teil ist. Diese Zahlen sind nicht absolut und reflektieren nur den Teil des Netzwerks, den dein Knoten kennt."; -$a->strings["The Auto Discovered Contact Directory feature is not enabled, it will improve the data displayed here."] = "Die Funktion \"Regelmäßig globale Kontakte überprüfen\" ist nicht aktiv. Sie wird die hier angezeigten Daten verbessern."; -$a->strings["Currently this node is aware of %d nodes with %d registered users from the following platforms:"] = "Momentan kennt dieser Knoten %d Knoten mit insgesamt %d registrierten Nutzern, die die folgenden Plattformen verwenden:"; -$a->strings["ID"] = "ID"; -$a->strings["Recipient Name"] = "Empfänger-Name"; -$a->strings["Recipient Profile"] = "Empfänger-Profil"; -$a->strings["Network"] = "Netzwerk"; -$a->strings["Created"] = "Erstellt"; -$a->strings["Last Tried"] = "Zuletzt versucht"; -$a->strings["This page lists the content of the queue for outgoing postings. These are postings the initial delivery failed for. They will be resend later and eventually deleted if the delivery fails permanently."] = "Auf dieser Seite werden die in der Warteschlange eingereihten Beiträge aufgelistet. Bei diesen Beiträgen schlug die erste Zustellung fehl. Es wird später wiederholt versucht, die Beiträge zuzustellen, bis sie schließlich gelöscht werden."; -$a->strings["Inspect Deferred Worker Queue"] = "Verzögerte Worker-Warteschlange inspizieren"; -$a->strings["This page lists the deferred worker jobs. This are jobs that couldn't be executed at the first time."] = "Auf dieser Seite werden die aufgeschobenen Worker-Jobs aufgelistet. Dies sind Jobs, die beim ersten Mal nicht ausgeführt werden konnten."; -$a->strings["Inspect Worker Queue"] = "Worker-Warteschlange inspizieren"; -$a->strings["This page lists the currently queued worker jobs. These jobs are handled by the worker cronjob you've set up during install."] = "Auf dieser Seite werden die derzeit in der Warteschlange befindlichen Worker-Jobs aufgelistet. Diese Jobs werden vom Cronjob verarbeitet, den du während der Installation eingerichtet hast."; -$a->strings["Job Parameters"] = "Parameter der Aufgabe"; -$a->strings["Priority"] = "Priorität"; -$a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion..htconfig.php
. See the Config help page for help with the transition."] = "Die Konfiguration von Friendica befindet sich ab jetzt in der 'config/local.ini.php' Datei. Kopiere bitte die Datei 'config/local-sample.config.php' nach 'config/local.config.php' und setze die Konfigurationvariablen so wie in der alten .htconfig.php
. Wie die Übertragung der Werte aussehen muss, kannst du der Konfiguration Hilfeseite entnehmen.";
-$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."] = "Die Konfiguration von Friendica befindet sich ab jetzt in der 'config/local.config.php' Datei. Kopiere bitte die Datei 'config/local-sample.config.php' nach 'config/local.config.php' und setze die Konfigurationvariablen so wie in der alten config/local.ini.php
. Wie die Übertragung der Werte aussehen muss, kannst du der Konfiguration Hilfeseite entnehmen.";
-$a->strings["%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."] = "%s konnte von deinem System nicht aufgerufen werden. Dies deutet auf ein schwerwiegendes Problem deiner Konfiguration hin. Bitte konsultiere die Installations-Dokumentation zum Beheben des Problems.";
-$a->strings["Normal Account"] = "Normales Konto";
-$a->strings["Automatic Follower Account"] = "Automatisch folgendes Konto (Marktschreier)";
-$a->strings["Public Forum Account"] = "Öffentliches Forum-Konto";
-$a->strings["Automatic Friend Account"] = "Automatische Freunde-Seite";
-$a->strings["Blog Account"] = "Blog-Konto";
-$a->strings["Private Forum Account"] = "Privates Forum-Konto";
-$a->strings["Message queues"] = "Nachrichten-Warteschlangen";
-$a->strings["Server Settings"] = "Servereinstellungen";
-$a->strings["Summary"] = "Zusammenfassung";
-$a->strings["Registered users"] = "Registrierte Personen";
-$a->strings["Pending registrations"] = "Anstehende Anmeldungen";
-$a->strings["Version"] = "Version";
-$a->strings["Active addons"] = "Aktivierte Addons";
-$a->strings["Can not parse base url. Must have at least .htconfig.php
. See the Config help page for help with the transition."] = "Die Konfiguration von Friendica befindet sich ab jetzt in der 'config/local.ini.php' Datei. Kopiere bitte die Datei 'config/local-sample.config.php' nach 'config/local.config.php' und setze die Konfigurationvariablen so wie in der alten .htconfig.php
. Wie die Übertragung der Werte aussehen muss, kannst du der Konfiguration Hilfeseite entnehmen.";
+$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."] = "Die Konfiguration von Friendica befindet sich ab jetzt in der 'config/local.config.php' Datei. Kopiere bitte die Datei 'config/local-sample.config.php' nach 'config/local.config.php' und setze die Konfigurationvariablen so wie in der alten config/local.ini.php
. Wie die Übertragung der Werte aussehen muss, kannst du der Konfiguration Hilfeseite entnehmen.";
+$a->strings["%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."] = "%s konnte von deinem System nicht aufgerufen werden. Dies deutet auf ein schwerwiegendes Problem deiner Konfiguration hin. Bitte konsultiere die Installations-Dokumentation zum Beheben des Problems.";
+$a->strings["Friendica's system.basepath was updated from '%s' to '%s'. Please remove the system.basepath from your db to avoid differences."] = "Friendica's system.basepath würde aktualisiert '%s' von '%s'. Bitte entfernen Sie system.basepath aus der Datenbank um Unterschiede zu vermeiden.";
+$a->strings["Friendica's current system.basepath '%s' is wrong and the config file '%s' isn't used."] = "Friendica's aktueller system.basepath '%s' ist verkehrt und die config file '%s' wird nicht benutzt.";
+$a->strings["Friendica's current system.basepath '%s' is not equal to the config file '%s'. Please fix your configuration."] = "Friendica's aktueller system.basepath '%s' ist nicht gleich wie die config file '%s'. Bitte korrigieren Sie Ihre Konfiguration.";
+$a->strings["Normal Account"] = "Normales Konto";
+$a->strings["Automatic Follower Account"] = "Automatisch folgendes Konto (Marktschreier)";
+$a->strings["Public Forum Account"] = "Öffentliches Forum-Konto";
+$a->strings["Automatic Friend Account"] = "Automatische Freunde-Seite";
+$a->strings["Blog Account"] = "Blog-Konto";
+$a->strings["Private Forum Account"] = "Privates Forum-Konto";
+$a->strings["Message queues"] = "Nachrichten-Warteschlangen";
+$a->strings["Server Settings"] = "Servereinstellungen";
+$a->strings["Summary"] = "Zusammenfassung";
+$a->strings["Registered users"] = "Registrierte Personen";
+$a->strings["Pending registrations"] = "Anstehende Anmeldungen";
+$a->strings["Version"] = "Version";
+$a->strings["Active addons"] = "Aktivierte Addons";
+$a->strings["Theme settings updated."] = "Themeneinstellungen aktualisiert.";
+$a->strings["Theme %s disabled."] = "Theme %s deaktiviert.";
+$a->strings["Theme %s successfully enabled."] = "Theme %s erfolgreich aktiviert.";
+$a->strings["Theme %s failed to install."] = "Theme %s konnte nicht aktiviert werden.";
+$a->strings["Screenshot"] = "Bildschirmfoto";
+$a->strings["Themes"] = "Themen";
+$a->strings["Unknown theme."] = "Unbekanntes Theme";
+$a->strings["Reload active themes"] = "Aktives Theme neu laden";
+$a->strings["No themes found on the system. They should be placed in %1\$s"] = "Es wurden keine Themes auf dem System gefunden. Diese sollten in %1\$s platziert werden.";
+$a->strings["[Experimental]"] = "[Experimentell]";
+$a->strings["[Unsupported]"] = "[Nicht unterstützt]";
+$a->strings["The Terms of Service settings have been updated."] = "Die Einstellungen zur Nutzungsbedingung wurden aktualisiert";
+$a->strings["Display Terms of Service"] = "Nutzungsbedingungen anzeigen";
+$a->strings["Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page."] = "Aktiviert die Seite für die Nutzungsbedingungen. Ist dies der Fall, werden sie auch von der Registrierungsseite und der allgemeinen Informationsseite verlinkt.";
+$a->strings["Display Privacy Statement"] = "Datenschutzerklärung anzeigen";
+$a->strings["Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR."] = "Zeige Informationen über die zum Betrieb der Seite notwendigen, personenbezogenen Daten an, wie es z.B. die EU-DSGVO verlangt.";
+$a->strings["Privacy Statement Preview"] = "Vorschau: Datenschutzerklärung";
+$a->strings["The Terms of Service"] = "Die Nutzungsbedingungen";
+$a->strings["Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below."] = "Füge hier die Nutzungsbedingungen deines Knotens ein. Du kannst BBCode zur Formatierung verwenden. Überschriften sollten [h2] oder darunter sein.";
+$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tthe administrator of %2\$s has set up an account for you."] = "\nHallo %1\$s,\n\nauf %2\$s wurde ein Account für dich angelegt.";
+$a->strings["\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tIf you ever want to delete your account, you can do so at %1\$s/removeme\n\n\t\t\tThank you and welcome to %4\$s."] = "\nNachfolgend die Anmelde-Details:\n\tAdresse der Seite:\t%1\$s\n\tBenutzername:\t%2\$s\n\tPasswort:\t%3\$s\n\nDu kannst dein Passwort unter \"Einstellungen\" ändern, sobald du dich\nangemeldet hast.\n\nBitte nimm dir ein paar Minuten, um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst du ja auch einige Informationen über dich in deinem\nProfil veröffentlichen, damit andere Leute dich einfacher finden können.\nBearbeite hierfür einfach dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen dir, deinen kompletten Namen anzugeben und ein zu dir\npassendes Profilbild zu wählen, damit dich alte Bekannte wiederfinden.\nAußerdem ist es nützlich, wenn du auf deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die deine Interessen teilen.\n\nWir respektieren deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nSolltest du dein Nutzerkonto löschen wollen, kannst du dies unter %1\$s/removeme jederzeit tun.\n\nNun viel Spaß, gute Begegnungen und willkommen auf %4\$s.";
+$a->strings["%s user blocked"] = [
+ 0 => "%s Nutzer blockiert",
+ 1 => "%s Nutzer blockiert",
+];
+$a->strings["%s user unblocked"] = [
+ 0 => "%s Nutzer freigeschaltet",
+ 1 => "%s Nutzer freigeschaltet",
+];
+$a->strings["You can't remove yourself"] = "Du kannst dich nicht selbst löschen!";
+$a->strings["%s user deleted"] = [
+ 0 => "%s Nutzer gelöscht",
+ 1 => "%s Nutzer gelöscht",
+];
+$a->strings["User \"%s\" deleted"] = "Nutzer \"%s\" gelöscht";
+$a->strings["User \"%s\" blocked"] = "Nutzer \"%s\" blockiert";
+$a->strings["User \"%s\" unblocked"] = "Nutzer \"%s\" frei geschaltet";
+$a->strings["Private Forum"] = "Privates Forum";
+$a->strings["Relay"] = "Relais";
+$a->strings["Register date"] = "Anmeldedatum";
+$a->strings["Last login"] = "Letzte Anmeldung";
+$a->strings["Last item"] = "Letzter Beitrag";
+$a->strings["Type"] = "Typ";
+$a->strings["Add User"] = "Nutzer hinzufügen";
+$a->strings["User registrations waiting for confirm"] = "Neuanmeldungen, die auf Deine Bestätigung warten";
+$a->strings["User waiting for permanent deletion"] = "Nutzer wartet auf permanente Löschung";
+$a->strings["Request date"] = "Anfragedatum";
+$a->strings["No registrations."] = "Keine Neuanmeldungen.";
+$a->strings["Note from the user"] = "Hinweis vom Nutzer";
+$a->strings["Deny"] = "Verwehren";
+$a->strings["User blocked"] = "Nutzer blockiert.";
+$a->strings["Site admin"] = "Seitenadministrator";
+$a->strings["Account expired"] = "Account ist abgelaufen";
+$a->strings["New User"] = "Neuer Nutzer";
+$a->strings["Permanent deletion"] = "Permanent löschen";
+$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Die markierten Nutzer werden gelöscht!\\n\\nAlle Beiträge, die diese Nutzer auf dieser Seite veröffentlicht haben, werden permanent gelöscht!\\n\\nBist du sicher?";
+$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Der Nutzer {0} wird gelöscht!\\n\\nAlles, was dieser Nutzer auf dieser Seite veröffentlicht hat, wird permanent gelöscht!\\n\\nBist du sicher?";
+$a->strings["Name of the new user."] = "Name des neuen Nutzers";
+$a->strings["Nickname"] = "Spitzname";
+$a->strings["Nickname of the new user."] = "Spitznamen für den neuen Nutzer";
+$a->strings["Email address of the new user."] = "Email Adresse des neuen Nutzers";
+$a->strings["No friends to display."] = "Keine Kontakte zum Anzeigen.";
+$a->strings["No installed applications."] = "Keine Applikationen installiert.";
+$a->strings["Applications"] = "Anwendungen";
$a->strings["Item was not found."] = "Beitrag konnte nicht gefunden werden.";
+$a->strings["Source input"] = "Originaltext:";
+$a->strings["BBCode::toPlaintext"] = "BBCode::toPlaintext";
+$a->strings["BBCode::convert (raw HTML)"] = "BBCode::convert (pures HTML)";
+$a->strings["BBCode::convert"] = "BBCode::convert";
+$a->strings["BBCode::convert => HTML::toBBCode"] = "BBCode::convert => HTML::toBBCode";
+$a->strings["BBCode::toMarkdown"] = "BBCode::toMarkdown";
+$a->strings["BBCode::toMarkdown => Markdown::convert"] = "BBCode::toMarkdown => Markdown::convert";
+$a->strings["BBCode::toMarkdown => Markdown::toBBCode"] = "BBCode::toMarkdown => Markdown::toBBCode";
+$a->strings["BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"] = "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode";
+$a->strings["Item Body"] = "Beitragskörper";
+$a->strings["Item Tags"] = "Tags des Beitrags";
+$a->strings["Source input (Diaspora format)"] = "Originaltext (Diaspora Format): ";
+$a->strings["Markdown::convert (raw HTML)"] = "Markdown::convert (pures HTML)";
+$a->strings["Markdown::convert"] = "Markdown::convert";
+$a->strings["Markdown::toBBCode"] = "Markdown::toBBCode";
+$a->strings["Raw HTML input"] = "Reine HTML Eingabe";
+$a->strings["HTML Input"] = "HTML Eingabe";
+$a->strings["HTML::toBBCode"] = "HTML::toBBCode";
+$a->strings["HTML::toBBCode => BBCode::convert"] = "HTML::toBBCode => BBCode::convert";
+$a->strings["HTML::toBBCode => BBCode::convert (raw HTML)"] = "HTML::toBBCode => BBCode::convert (pures HTML)";
+$a->strings["HTML::toMarkdown"] = "HTML::toMarkdown";
+$a->strings["HTML::toPlaintext"] = "HTML::toPlaintext";
+$a->strings["Source text"] = "Quelltext";
+$a->strings["BBCode"] = "BBCode";
+$a->strings["Markdown"] = "Markdown";
+$a->strings["HTML"] = "HTML";
+$a->strings["Overview"] = "Übersicht";
+$a->strings["Configuration"] = "Konfiguration";
+$a->strings["Database"] = "Datenbank";
+$a->strings["DB updates"] = "DB Updates";
+$a->strings["Inspect Deferred Workers"] = "Verzögerte Worker inspizieren";
+$a->strings["Inspect worker Queue"] = "Worker Warteschlange inspizieren";
+$a->strings["Tools"] = "Werkzeuge";
+$a->strings["Contact Blocklist"] = "Kontakt Sperrliste";
+$a->strings["Diagnostics"] = "Diagnostik";
+$a->strings["PHP Info"] = "PHP-Info";
+$a->strings["probe address"] = "Adresse untersuchen";
+$a->strings["check webfinger"] = "Webfinger überprüfen";
+$a->strings["Item Source"] = "Eintrags Quelle";
+$a->strings["Babel"] = "Babel";
+$a->strings["Addon Features"] = "Addon Features";
+$a->strings["User registrations waiting for confirmation"] = "Nutzeranmeldungen, die auf Bestätigung warten";
+$a->strings["This page is missing a url parameter."] = "Der Seite fehlt ein URL Parameter.";
+$a->strings["The post was created"] = "Der Beitrag wurde angelegt";
$a->strings["%d contact edited."] = [
0 => "%d Kontakt bearbeitet.",
1 => "%d Kontakte bearbeitet.",
@@ -2055,6 +1997,7 @@ $a->strings["Comma separated list of keywords that should not be converted to ha
$a->strings["Actions"] = "Aktionen";
$a->strings["Suggestions"] = "Kontaktvorschläge";
$a->strings["Suggest potential friends"] = "Kontakte vorschlagen";
+$a->strings["All Contacts"] = "Alle Kontakte";
$a->strings["Show all contacts"] = "Alle Kontakte anzeigen";
$a->strings["Unblocked"] = "Ungeblockt";
$a->strings["Only show unblocked contacts"] = "Nur nicht-blockierte Kontakte anzeigen";
@@ -2084,9 +2027,62 @@ $a->strings["Toggle Blocked status"] = "Geblockt-Status ein-/ausschalten";
$a->strings["Toggle Ignored status"] = "Ignoriert-Status ein-/ausschalten";
$a->strings["Toggle Archive status"] = "Archiviert-Status ein-/ausschalten";
$a->strings["Delete contact"] = "Lösche den Kontakt";
+$a->strings["Credits"] = "Credits";
+$a->strings["Friendica is a community project, that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!"] = "Friendica ist ein Gemeinschaftsprojekt, das nicht ohne die Hilfe vieler Personen möglich wäre. Hier ist eine Aufzählung der Personen, die zum Code oder der Übersetzung beigetragen haben. Dank an alle !";
+$a->strings["No entries (some entries may be hidden)."] = "Keine Einträge (einige Einträge könnten versteckt sein).";
+$a->strings["Find on this site"] = "Auf diesem Server suchen";
+$a->strings["Results for:"] = "Ergebnisse für:";
+$a->strings["Site Directory"] = "Verzeichnis";
+$a->strings["You must be logged in to use this module"] = "Du musst eingeloggt sein, um dieses Modul benutzen zu können.";
+$a->strings["Source URL"] = "URL der Quelle";
+$a->strings["Filetag %s saved to item"] = "Tag %s für den Eintrag gespeichert";
+$a->strings["- select -"] = "- auswählen -";
+$a->strings["No given contact."] = "Keine Kontakte vorgegeben.";
+$a->strings["Installed addons/apps:"] = "Installierte Apps und Addons";
+$a->strings["No installed addons/apps"] = "Es sind keine Addons oder Apps installiert";
+$a->strings["Read about the Terms of Service of this node."] = "Erfahre mehr über die Nutzungsbedingungen dieses Knotens.";
+$a->strings["On this server the following remote servers are blocked."] = "Auf diesem Server werden die folgenden, entfernten Server blockiert.";
+$a->strings["This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s."] = "Diese Friendica-Instanz verwendet die Version %s, sie ist unter der folgenden Adresse im Web zu finden %s. Die Datenbankversion ist %s und die Post-Update-Version %s.";
+$a->strings["Please visit Friendi.ca to learn more about the Friendica project."] = "Bitte besuche Friendi.ca, um mehr über das Friendica-Projekt zu erfahren.";
+$a->strings["Bug reports and issues: please visit"] = "Probleme oder Fehler gefunden? Bitte besuche";
+$a->strings["the bugtracker at github"] = "den Bugtracker auf github";
+$a->strings["Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca"] = "Vorschläge, Lob usw.: E-Mail an \"Info\" at \"Friendi - dot ca\"";
+$a->strings["Group created."] = "Gruppe erstellt.";
+$a->strings["Could not create group."] = "Konnte die Gruppe nicht erstellen.";
+$a->strings["Group not found."] = "Gruppe nicht gefunden.";
+$a->strings["Group name changed."] = "Gruppenname geändert.";
+$a->strings["Unknown group."] = "Unbekannte Gruppe";
+$a->strings["Contact is unavailable."] = "Kontakt ist nicht verfügbar";
+$a->strings["Contact is deleted."] = "Kontakt wurde gelöscht";
+$a->strings["Contact is blocked, unable to add it to a group."] = "Kontakt ist geblockt und konnte deshalb nicht zur Gruppe hinzugefügt werden";
+$a->strings["Unable to add the contact to the group."] = "Konnte den Kontakt nicht zur Gruppe hinzufügen";
+$a->strings["Contact successfully added to group."] = "Kontakt zur Gruppe hinzugefügt";
+$a->strings["Unable to remove the contact from the group."] = "Konnte den Kontakt nicht aus der Gruppe entfernen";
+$a->strings["Contact successfully removed from group."] = "Kontakt aus Gruppe entfernt";
+$a->strings["Unknown group command."] = "Unbekannter Gruppen Befehl";
+$a->strings["Bad request."] = "Ungültige Anfrage.";
+$a->strings["Save Group"] = "Gruppe speichern";
+$a->strings["Filter"] = "Filter";
+$a->strings["Create a group of contacts/friends."] = "Eine Kontaktgruppe anlegen.";
+$a->strings["Group removed."] = "Gruppe entfernt.";
+$a->strings["Unable to remove group."] = "Konnte die Gruppe nicht entfernen.";
+$a->strings["Delete Group"] = "Gruppe löschen";
+$a->strings["Edit Group Name"] = "Gruppen Name bearbeiten";
+$a->strings["Members"] = "Mitglieder";
+$a->strings["Remove contact from group"] = "Entferne den Kontakt aus der Gruppe";
+$a->strings["Add contact to group"] = "Füge den Kontakt zur Gruppe hinzu";
+$a->strings["Help:"] = "Hilfe:";
+$a->strings["Welcome to %s"] = "Willkommen zu %s";
$a->strings["Friendica Communications Server - Setup"] = "Friendica Komunikationsserver - Installation";
$a->strings["System check"] = "Systemtest";
$a->strings["Check again"] = "Noch einmal testen";
+$a->strings["Base settings"] = "Grundeinstellungen";
+$a->strings["Host name"] = "Host Name";
+$a->strings["Overwrite this field in case the determinated hostname isn't right, otherweise leave it as is."] = "Sollte der ermittelte Hostname nicht stimmen, korrigiere bitte den Eintrag.";
+$a->strings["Base path to installation"] = "Basis-Pfad zur Installation";
+$a->strings["If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."] = "Falls das System nicht den korrekten Pfad zu deiner Installation gefunden hat, gib den richtigen Pfad bitte hier ein. Du solltest hier den Pfad nur auf einem eingeschränkten System angeben müssen, bei dem du mit symbolischen Links auf dein Webverzeichnis verweist.";
+$a->strings["Sub path of the URL"] = "Unterverzeichnis (Pfad) der URL";
+$a->strings["Overwrite this field in case the sub path determination isn't right, otherwise leave it as is. Leaving this field blank means the installation is at the base URL without sub path."] = "Sollte das ermittelte Unterverzeichnis der Friendica Installation nicht stimmen, korrigiere es bitte. Wenn dieses Feld leer ist, bedeutet dies, dass die Installation direkt unter der Basis-URL installiert wird.";
$a->strings["Database connection"] = "Datenbankverbindung";
$a->strings["In order to install Friendica we need to know how to connect to your database."] = "Um Friendica installieren zu können, müssen wir wissen, wie wir mit Deiner Datenbank Kontakt aufnehmen können.";
$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Bitte kontaktiere den Hosting-Provider oder den Administrator der Seite, falls du Fragen zu diesen Einstellungen haben solltest.";
@@ -2096,10 +2092,10 @@ $a->strings["Database Login Name"] = "Datenbank-Nutzer";
$a->strings["Database Login Password"] = "Datenbank-Passwort";
$a->strings["For security reasons the password must not be empty"] = "Aus Sicherheitsgründen darf das Passwort nicht leer sein.";
$a->strings["Database Name"] = "Datenbank-Name";
-$a->strings["Site administrator email address"] = "E-Mail-Adresse des Administrators";
-$a->strings["Your account email address must match this in order to use the web admin panel."] = "Die E-Mail-Adresse, die in Deinem Friendica-Account eingetragen ist, muss mit dieser Adresse übereinstimmen, damit du das Admin-Panel benutzen kannst.";
$a->strings["Please select a default timezone for your website"] = "Bitte wähle die Standardzeitzone Deiner Webseite";
$a->strings["Site settings"] = "Server-Einstellungen";
+$a->strings["Site administrator email address"] = "E-Mail-Adresse des Administrators";
+$a->strings["Your account email address must match this in order to use the web admin panel."] = "Die E-Mail-Adresse, die in Deinem Friendica-Account eingetragen ist, muss mit dieser Adresse übereinstimmen, damit du das Admin-Panel benutzen kannst.";
$a->strings["System Language:"] = "Systemsprache:";
$a->strings["Set the default language for your Friendica installation interface and to send emails."] = "Wähle die Standardsprache für deine Friendica-Installations-Oberfläche und den E-Mail-Versand";
$a->strings["Your Friendica site database has been installed."] = "Die Datenbank Deiner Friendica-Seite wurde installiert.";
@@ -2107,7 +2103,34 @@ $a->strings["Installation finished"] = "Installation abgeschlossen";
$a->strings["Use an application on a mobile device to get two-factor authentication codes when prompted on login.
"] = "Benutze eine App auf dein Smartphone um einen Zwei-Faktor identifikations Code zu bekommen wenn beim Loggin das verlagt wird.
"; +$a->strings["Authenticator app"] = "Zwei-Faktor Authentifizierungsapp"; +$a->strings["Configured"] = "Konfiguriert"; +$a->strings["Not Configured"] = "Nicht konfiguriert"; +$a->strings["You haven't finished configuring your authenticator app.
"] = "Die Konfiguration deiner Zwei-Faktor Authentifizierungsapp ist nicht abgeschlossen.
"; +$a->strings["Your authenticator app is correctly configured.
"] = "Deine Zwei-Faktor Authentifizierungsapp ist nicht korrekt konfiguriert.
"; +$a->strings["Recovery codes"] = "Wiederherstellungsschlüssel"; +$a->strings["Remaining valid codes"] = "Verbleibende Wiederherstellungsschlüssel"; +$a->strings["These one-use codes can replace an authenticator app code in case you have lost access to it.
"] = "Diese Einmalcodes können einen Authentifikator-App-Code ersetzen, falls Sie den Zugriff darauf verloren haben.
"; +$a->strings["Current password:"] = "Aktuelles Passwort:"; +$a->strings["You need to provide your current password to change two-factor authentication settings."] = "Du musst dein aktuelles Passwort eingeben um die Einstellungen der Zwei-Faktor-Authentifizierung zu ändern"; +$a->strings["Enable two-factor authentication"] = "Aktiviere die Zwei-Faktor-Authentifizierung"; +$a->strings["Disable two-factor authentication"] = "Deaktiviere die Zwei-Faktor-Authentifizierung"; +$a->strings["Show recovery codes"] = "Wiederherstellungscodes anzeigen"; +$a->strings["Finish app configuration"] = "Beenden Sie die App-Konfiguration"; +$a->strings["Please enter your password to access this page."] = "Bitte geben Sie Ihr Passwort ein, um auf diese Seite zuzugreifen."; +$a->strings["New recovery codes successfully generated."] = "Neue Wiederherstellungscodes erfolgreich generiert."; +$a->strings["Two-factor recovery codes"] = "Zwei-Faktor-Wiederherstellungscodes"; +$a->strings["Recovery codes can be used to access your account in the event you lose access to your device and cannot receive two-factor authentication codes.
Put these in a safe spot! If you lose your device and don’t have the recovery codes you will lose access to your account.
"] = "Wiederherstellungscodes können verwendet werden, um auf Ihr Konto zuzugreifen, falls Sie den Zugriff auf Ihr Gerät verlieren und keine Zwei-Faktor-Authentifizierungscodes erhalten können.
Bewahren Sie diese an einem sicheren Ort auf! Wenn Sie Ihr Gerät verlieren und nicht über die Wiederherstellungscodes verfügen, verlieren Sie den Zugriff auf Ihr Konto.
"; +$a->strings["When you generate new recovery codes, you must copy the new codes. Your old codes won’t work anymore."] = "Wenn Sie neue Wiederherstellungscodes generieren, müssen Sie die neuen Codes kopieren. Ihre alten Codes funktionieren nicht mehr."; +$a->strings["Generate new recovery codes"] = "Generieren Sie neue Wiederherstellungscodes"; +$a->strings["Next: Verification"] = "Weiter: Überprüfung"; +$a->strings["Two-factor authentication successfully activated."] = "Zwei-Faktor-Authentifizierung erfolgreich aktiviert."; +$a->strings["Invalid code, please retry."] = "Ungültiger Code, bitte erneut versuchen."; +$a->strings["Or you can submit the authentication settings manually:
\nOder Sie können die Authentifizierungseinstellungen manuell übermitteln:
\nPlease scan this QR Code with your authenticator app and submit the provided code.
"] = "Bitte scannen Sie diesen QR-Code mit Ihrer Authentifikator-App und übermitteln Sie den bereitgestellten Code.
"; +$a->strings["Or you can open the following URL in your mobile devicde:
"] = "Oder Sie können die folgende URL in Ihrem Mobilgerät öffnen:
"; +$a->strings["Please enter a code from your authentication app"] = "Bitte geben Sie einen Code aus Ihrer Authentifizierungs-App ein"; +$a->strings["Verify code and enable two-factor authentication"] = "Überprüfen Sie den Code und aktivieren Sie die Zwei-Faktor-Authentifizierung"; +$a->strings["Bad Request"] = "Ungültige Anfrage"; +$a->strings["Unauthorized"] = "Nicht autorisiert"; +$a->strings["Forbidden"] = "Verboten"; +$a->strings["Not Found"] = "Nicht gefunden"; +$a->strings["Internal Server Error"] = "Interner Serverfehler"; +$a->strings["Service Unavailable"] = "Dienst nicht verfügbar"; +$a->strings["The server cannot or will not process the request due to an apparent client error."] = "Aufgrund eines offensichtlichen Fehlers auf der Seite des Clients kann oder wird der Server die Anfrage nicht bearbeiten."; +$a->strings["Authentication is required and has failed or has not yet been provided."] = "Die erforderliche Authentifizierung ist fehlgeschlagen oder noch nicht erfolgt."; +$a->strings["The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource, or may need an account."] = "Die Anfrage war gültig, aber der Server verweigert die Ausführung. Der Benutzer verfügt möglicherweise nicht über die erforderlichen Berechtigungen oder benötigt ein Nutzerkonto."; +$a->strings["The requested resource could not be found but may be available in the future."] = "Die angeforderte Ressource konnte nicht gefunden werden, sie könnte allerdings zu einem späteren Zeitpunkt verfügbar sein."; +$a->strings["An unexpected condition was encountered and no more specific message is suitable."] = "Eine unerwartete Situation ist eingetreten, zu der keine detailliertere Nachricht vorliegt."; +$a->strings["The server is currently unavailable (because it is overloaded or down for maintenance). Please try again later."] = "Der Server ist derzeit nicht verfügbar (wegen Überlastung oder Wartungsarbeiten). Bitte versuche es später noch einmal."; +$a->strings["Go back"] = "Geh zurück"; $a->strings["At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node's user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication."] = "Zum Zwecke der Registrierung und um die Kommunikation zwischen dem Nutzer und seinen Kontakten zu gewährleisten, muß der Nutzer einen Namen (auch Pseudonym) und einen Nutzernamen (Spitzname) sowie eine funktionierende E-Mail-Adresse angeben. Der Name ist auf der Profilseite für alle Nutzer sichtbar, auch wenn die Profildetails nicht angezeigt werden.\nDie E-Mail-Adresse wird nur zur Benachrichtigung des Nutzers verwendet, sie wird nirgends angezeigt. Die Anzeige des Nutzerkontos im Server-Verzeichnis bzw. dem weltweiten Verzeichnis erfolgt gemäß den Einstellungen des Nutzers, sie ist zur Kommunikation nicht zwingend notwendig."; $a->strings["This data is required for communication and is passed on to the nodes of the communication partners and is stored there. Users can enter additional private data that may be transmitted to the communication partners accounts."] = "Diese Daten sind für die Kommunikation notwendig und werden an die Knoten der Kommunikationspartner übermittelt und dort gespeichert. Nutzer können weitere, private Angaben machen, die ebenfalls an die verwendeten Server der Kommunikationspartner übermittelt werden können."; $a->strings["At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1\$s/removeme. The deletion of the account will be permanent. Deletion of the data will also be requested from the nodes of the communication partners."] = "Angemeldete Nutzer können ihre Nutzerdaten jederzeit von den Kontoeinstellungen aus exportieren. Wenn ein Nutzer wünscht das Nutzerkonto zu löschen, so ist dies jederzeit unter %1\$s/removeme möglich. Die Löschung des Nutzerkontos ist permanent. Die Löschung der Daten wird auch von den Knoten der Kommunikationspartner angefordert."; $a->strings["Privacy Statement"] = "Datenschutzerklärung"; +$a->strings["Remaining recovery codes: %d"] = "Verbleibende Wiederherstellungscodes: %d"; +$a->strings["Two-factor recovery"] = "Zwei-Faktor-Wiederherstellung"; +$a->strings["You can enter one of your one-time recovery codes in case you lost access to your mobile device.
"] = "Sie können einen Ihrer einmaligen Wiederherstellungscodes eingeben, falls Sie den Zugriff auf Ihr Mobilgerät verloren haben.
"; +$a->strings["Don’t have your phone? Enter a two-factor recovery code"] = "Hast du dein Handy nicht? Geben Sie einen Zwei-Faktor-Wiederherstellungscode ein"; +$a->strings["Please enter a recovery code"] = "Bitte geben Sie einen Wiederherstellungscode ein"; +$a->strings["Submit recovery code and complete login"] = "Senden Sie den Wiederherstellungscode und schließen Sie die Anmeldung ab"; +$a->strings["Open the two-factor authentication app on your device to get an authentication code and verify your identity.
"] = "Öffnen Sie die Zwei-Faktor-Authentifizierungs-App auf Ihrem Gerät, um einen Authentifizierungscode abzurufen und Ihre Identität zu überprüfen.
"; +$a->strings["Verify code and complete login"] = "Code überprüfen und Anmeldung abschließen"; $a->strings["This entry was edited"] = "Dieser Beitrag wurde bearbeitet."; +$a->strings["Private Message"] = "Private Nachricht"; $a->strings["Delete locally"] = "Lokal löschen"; $a->strings["Delete globally"] = "Global löschen"; $a->strings["Remove locally"] = "Lokal entfernen"; @@ -2218,6 +2296,8 @@ $a->strings["Custom"] = "Benutzerdefiniert"; $a->strings["Note"] = "Hinweis"; $a->strings["Check image permissions if all users are allowed to see the image"] = "Überprüfe, dass alle Benutzer die Berechtigung haben dieses Bild anzusehen"; $a->strings["Select color scheme"] = "Farbschema auswählen"; +$a->strings["Copy or paste schemestring"] = "Farbschema kopieren oder einfügen"; +$a->strings["You can copy this string to share your theme with others. Pasting here applies the schemestring"] = "Du kannst den String mit den Farbschema Informationen mit anderen Teilen. Wenn du einen neuen Farbschema-String hier einfügst wird er für deine Einstellungen übernommen."; $a->strings["Navigation bar background color"] = "Hintergrundfarbe der Navigationsleiste"; $a->strings["Navigation bar icon color "] = "Icon Farbe in der Navigationsleiste"; $a->strings["Link color"] = "Linkfarbe"; diff --git a/view/lang/en-gb/messages.po b/view/lang/en-gb/messages.po index 89c245e58..8a0db1b84 100644 --- a/view/lang/en-gb/messages.po +++ b/view/lang/en-gb/messages.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-02-15 09:33-0500\n" -"PO-Revision-Date: 2019-03-11 16:11+0000\n" +"POT-Creation-Date: 2019-05-15 08:55-0400\n" +"PO-Revision-Date: 2019-06-16 06:56+0000\n" "Last-Translator: Andy H3.htconfig.php
. See the Config help page for "
-"help with the transition."
-msgstr "Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your configuration from .htconfig.php
. See the configuration help page for help with the transition."
-
-#: mod/admin.php:943
-#, php-format
-msgid ""
-"Friendica's configuration now is stored in config/local.config.php, please "
-"copy config/local-sample.config.php and move your config from "
-"config/local.ini.php
. See the Config help "
-"page for help with the transition."
-msgstr "Friendica's configuration is now stored in config/local.config.php; please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."
-
-#: mod/admin.php:950
-#, php-format
-msgid ""
-"%s is not reachable on your system. This is a severe "
-"configuration issue that prevents server to server communication. See the installation page for help."
-msgstr "%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."
-
-#: mod/admin.php:956
-msgid "Normal Account"
-msgstr "Standard account"
-
-#: mod/admin.php:957
-msgid "Automatic Follower Account"
-msgstr "Automatic follower account"
-
-#: mod/admin.php:958
-msgid "Public Forum Account"
-msgstr "Public forum account"
-
-#: mod/admin.php:959
-msgid "Automatic Friend Account"
-msgstr "Automatic friend account"
-
-#: mod/admin.php:960
-msgid "Blog Account"
-msgstr "Blog account"
-
-#: mod/admin.php:961
-msgid "Private Forum Account"
-msgstr "Private forum account"
-
-#: mod/admin.php:984
-msgid "Message queues"
-msgstr "Message queues"
-
-#: mod/admin.php:990
-msgid "Server Settings"
-msgstr "Server Settings"
-
-#: mod/admin.php:999
-msgid "Summary"
-msgstr "Summary"
-
-#: mod/admin.php:1001
-msgid "Registered users"
-msgstr "Registered users"
-
-#: mod/admin.php:1003
-msgid "Pending registrations"
-msgstr "Pending registrations"
-
-#: mod/admin.php:1004
-msgid "Version"
-msgstr "Version"
-
-#: mod/admin.php:1009
-msgid "Active addons"
-msgstr "Active addons"
-
-#: mod/admin.php:1042
-msgid "Can not parse base url. Must have at least .htconfig.php
. See the Config help page for "
+"help with the transition."
+msgstr "Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your configuration from .htconfig.php
. See the configuration help page for help with the transition."
+
+#: src/Module/Admin/Summary.php:67
+#, php-format
+msgid ""
+"Friendica's configuration now is stored in config/local.config.php, please "
+"copy config/local-sample.config.php and move your config from "
+"config/local.ini.php
. See the Config help "
+"page for help with the transition."
+msgstr "Friendica's configuration is now stored in config/local.config.php; please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."
+
+#: src/Module/Admin/Summary.php:73
+#, php-format
+msgid ""
+"%s is not reachable on your system. This is a severe "
+"configuration issue that prevents server to server communication. See the installation page for help."
+msgstr "%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."
+
+#: src/Module/Admin/Summary.php:89
+#, php-format
+msgid ""
+"Friendica's system.basepath was updated from '%s' to '%s'. Please remove the"
+" system.basepath from your db to avoid differences."
+msgstr "The system.basepath was updated from '%s' to '%s'. Please remove the system.basepath from your db to avoid differences."
+
+#: src/Module/Admin/Summary.php:97
+#, php-format
+msgid ""
+"Friendica's current system.basepath '%s' is wrong and the config file '%s' "
+"isn't used."
+msgstr "The current system.basepath '%s' is wrong and the config file '%s' isn't used."
+
+#: src/Module/Admin/Summary.php:105
+#, php-format
+msgid ""
+"Friendica's current system.basepath '%s' is not equal to the config file "
+"'%s'. Please fix your configuration."
+msgstr "The current system.basepath '%s' is not equal to the config file '%s'. Please fix your configuration."
+
+#: src/Module/Admin/Summary.php:112
+msgid "Normal Account"
+msgstr "Standard account"
+
+#: src/Module/Admin/Summary.php:113
+msgid "Automatic Follower Account"
+msgstr "Automatic follower account"
+
+#: src/Module/Admin/Summary.php:114
+msgid "Public Forum Account"
+msgstr "Public forum account"
+
+#: src/Module/Admin/Summary.php:115
+msgid "Automatic Friend Account"
+msgstr "Automatic friend account"
+
+#: src/Module/Admin/Summary.php:116
+msgid "Blog Account"
+msgstr "Blog account"
+
+#: src/Module/Admin/Summary.php:117
+msgid "Private Forum Account"
+msgstr "Private forum account"
+
+#: src/Module/Admin/Summary.php:141
+msgid "Message queues"
+msgstr "Message queues"
+
+#: src/Module/Admin/Summary.php:147
+msgid "Server Settings"
+msgstr "Server Settings"
+
+#: src/Module/Admin/Summary.php:161
+msgid "Summary"
+msgstr "Summary"
+
+#: src/Module/Admin/Summary.php:163
+msgid "Registered users"
+msgstr "Registered users"
+
+#: src/Module/Admin/Summary.php:165
+msgid "Pending registrations"
+msgstr "Pending registrations"
+
+#: src/Module/Admin/Summary.php:166
+msgid "Version"
+msgstr "Version"
+
+#: src/Module/Admin/Summary.php:170
+msgid "Active addons"
+msgstr "Active addons"
+
+#: src/Module/Admin/Themes/Details.php:32 src/Module/Admin/Themes/Embed.php:46
+msgid "Theme settings updated."
+msgstr "Theme settings updated."
+
+#: src/Module/Admin/Themes/Details.php:71 src/Module/Admin/Themes/Index.php:47
+#, php-format
+msgid "Theme %s disabled."
+msgstr "Theme %s disabled."
+
+#: src/Module/Admin/Themes/Details.php:73 src/Module/Admin/Themes/Index.php:49
+#, php-format
+msgid "Theme %s successfully enabled."
+msgstr "Theme %s successfully enabled."
+
+#: src/Module/Admin/Themes/Details.php:75 src/Module/Admin/Themes/Index.php:51
+#, php-format
+msgid "Theme %s failed to install."
+msgstr "Theme %s failed to install."
+
+#: src/Module/Admin/Themes/Details.php:97
+msgid "Screenshot"
+msgstr "Screenshot"
+
+#: src/Module/Admin/Themes/Details.php:105
+#: src/Module/Admin/Themes/Index.php:94 src/Module/BaseAdminModule.php:83
+msgid "Themes"
+msgstr "Theme selection"
+
+#: src/Module/Admin/Themes/Embed.php:67
+msgid "Unknown theme."
+msgstr "Unknown theme."
+
+#: src/Module/Admin/Themes/Index.php:96
+msgid "Reload active themes"
+msgstr "Reload active themes"
+
+#: src/Module/Admin/Themes/Index.php:101
+#, php-format
+msgid "No themes found on the system. They should be placed in %1$s"
+msgstr "No themes found on the system. They should be placed in %1$s"
+
+#: src/Module/Admin/Themes/Index.php:102
+msgid "[Experimental]"
+msgstr "[Experimental]"
+
+#: src/Module/Admin/Themes/Index.php:103
+msgid "[Unsupported]"
+msgstr "[Unsupported]"
+
+#: src/Module/Admin/Tos.php:30
+msgid "The Terms of Service settings have been updated."
+msgstr "The Terms of Service settings have been updated."
+
+#: src/Module/Admin/Tos.php:44
+msgid "Display Terms of Service"
+msgstr "Display Terms of Service"
+
+#: src/Module/Admin/Tos.php:44
+msgid ""
+"Enable the Terms of Service page. If this is enabled a link to the terms "
+"will be added to the registration form and the general information page."
+msgstr "Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page."
+
+#: src/Module/Admin/Tos.php:45
+msgid "Display Privacy Statement"
+msgstr "Display Privacy Statement"
+
+#: src/Module/Admin/Tos.php:45
+#, php-format
+msgid ""
+"Show some informations regarding the needed information to operate the node "
+"according e.g. to EU-GDPR."
+msgstr "Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR."
+
+#: src/Module/Admin/Tos.php:46
+msgid "Privacy Statement Preview"
+msgstr "Privacy Statement Preview"
+
+#: src/Module/Admin/Tos.php:48
+msgid "The Terms of Service"
+msgstr "Terms of Service"
+
+#: src/Module/Admin/Tos.php:48
+msgid ""
+"Enter the Terms of Service for your node here. You can use BBCode. Headers "
+"of sections should be [h2] and below."
+msgstr "Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] or lower."
+
+#: src/Module/Admin/Users.php:48
+#, php-format
+msgid ""
+"\n"
+"\t\t\tDear %1$s,\n"
+"\t\t\t\tthe administrator of %2$s has set up an account for you."
+msgstr "\n\t\t\tDear %1$s,\n\t\t\t\tThe administrator of %2$s has set up an account for you."
+
+#: src/Module/Admin/Users.php:51
+#, php-format
+msgid ""
+"\n"
+"\t\t\tThe login details are as follows:\n"
+"\n"
+"\t\t\tSite Location:\t%1$s\n"
+"\t\t\tLogin Name:\t\t%2$s\n"
+"\t\t\tPassword:\t\t%3$s\n"
+"\n"
+"\t\t\tYou may change your password from your account \"Settings\" page after logging\n"
+"\t\t\tin.\n"
+"\n"
+"\t\t\tPlease take a few moments to review the other account settings on that page.\n"
+"\n"
+"\t\t\tYou may also wish to add some basic information to your default profile\n"
+"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n"
+"\n"
+"\t\t\tWe recommend setting your full name, adding a profile photo,\n"
+"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n"
+"\t\t\tperhaps what country you live in; if you do not wish to be more specific\n"
+"\t\t\tthan that.\n"
+"\n"
+"\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n"
+"\t\t\tIf you are new and do not know anybody here, they may help\n"
+"\t\t\tyou to make some new and interesting friends.\n"
+"\n"
+"\t\t\tIf you ever want to delete your account, you can do so at %1$s/removeme\n"
+"\n"
+"\t\t\tThank you and welcome to %4$s."
+msgstr "\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1$s\n\t\t\tLogin Name:\t\t%2$s\n\t\t\tPassword:\t\t%3$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tIf you ever want to delete your account, you can do so at %1$s/removeme\n\n\t\t\tThank you and welcome to %4$s."
+
+#: src/Module/Admin/Users.php:96
+#, php-format
+msgid "%s user blocked"
+msgid_plural "%s users blocked"
+msgstr[0] "%s user blocked"
+msgstr[1] "%s users blocked"
+
+#: src/Module/Admin/Users.php:102
+#, php-format
+msgid "%s user unblocked"
+msgid_plural "%s users unblocked"
+msgstr[0] "%s user unblocked"
+msgstr[1] "%s users unblocked"
+
+#: src/Module/Admin/Users.php:110 src/Module/Admin/Users.php:160
+msgid "You can't remove yourself"
+msgstr "You can't remove yourself"
+
+#: src/Module/Admin/Users.php:114
+#, php-format
+msgid "%s user deleted"
+msgid_plural "%s users deleted"
+msgstr[0] "%s user deleted"
+msgstr[1] "%s users deleted"
+
+#: src/Module/Admin/Users.php:158
+#, php-format
+msgid "User \"%s\" deleted"
+msgstr "User \"%s\" deleted"
+
+#: src/Module/Admin/Users.php:167
+#, php-format
+msgid "User \"%s\" blocked"
+msgstr "User \"%s\" blocked"
+
+#: src/Module/Admin/Users.php:173
+#, php-format
+msgid "User \"%s\" unblocked"
+msgstr "User \"%s\" unblocked"
+
+#: src/Module/Admin/Users.php:226
+msgid "Private Forum"
+msgstr "Private Forum"
+
+#: src/Module/Admin/Users.php:233
+msgid "Relay"
+msgstr "Relay"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Register date"
+msgstr "Registration date"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Last login"
+msgstr "Last login"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Last item"
+msgstr "Last item"
+
+#: src/Module/Admin/Users.php:272
+msgid "Type"
+msgstr "Type"
+
+#: src/Module/Admin/Users.php:279
+msgid "Add User"
+msgstr "Add user"
+
+#: src/Module/Admin/Users.php:281
+msgid "User registrations waiting for confirm"
+msgstr "User registrations awaiting confirmation"
+
+#: src/Module/Admin/Users.php:282
+msgid "User waiting for permanent deletion"
+msgstr "User awaiting permanent deletion"
+
+#: src/Module/Admin/Users.php:283
+msgid "Request date"
+msgstr "Request date"
+
+#: src/Module/Admin/Users.php:284
+msgid "No registrations."
+msgstr "No registrations."
+
+#: src/Module/Admin/Users.php:285
+msgid "Note from the user"
+msgstr "Note from the user"
+
+#: src/Module/Admin/Users.php:287
+msgid "Deny"
+msgstr "Deny"
+
+#: src/Module/Admin/Users.php:290
+msgid "User blocked"
+msgstr "User blocked"
+
+#: src/Module/Admin/Users.php:292
+msgid "Site admin"
+msgstr "Site admin"
+
+#: src/Module/Admin/Users.php:293
+msgid "Account expired"
+msgstr "Account expired"
+
+#: src/Module/Admin/Users.php:296
+msgid "New User"
+msgstr "New user"
+
+#: src/Module/Admin/Users.php:297
+msgid "Permanent deletion"
+msgstr "Permanent deletion"
+
+#: src/Module/Admin/Users.php:302
+msgid ""
+"Selected users will be deleted!\\n\\nEverything these users had posted on "
+"this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr "Selected users will be deleted!\\n\\nEverything these users has posted on this site will be permanently deleted!\\n\\nAre you sure?"
+
+#: src/Module/Admin/Users.php:303
+msgid ""
+"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
+"site will be permanently deleted!\\n\\nAre you sure?"
+msgstr "The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"
+
+#: src/Module/Admin/Users.php:313
+msgid "Name of the new user."
+msgstr "Name of the new user."
+
+#: src/Module/Admin/Users.php:314
+msgid "Nickname"
+msgstr "Nickname"
+
+#: src/Module/Admin/Users.php:314
+msgid "Nickname of the new user."
+msgstr "Nickname of the new user."
+
+#: src/Module/Admin/Users.php:315
+msgid "Email address of the new user."
+msgstr "Email address of the new user."
+
+#: src/Module/AllFriends.php:55
+msgid "No friends to display."
+msgstr "No friends to display."
+
+#: src/Module/Apps.php:29
+msgid "No installed applications."
+msgstr "No installed applications."
+
+#: src/Module/Apps.php:34
+msgid "Applications"
+msgstr "Applications"
+
#: src/Module/Attach.php:36 src/Module/Attach.php:48
msgid "Item was not found."
msgstr "Item was not found."
+#: src/Module/Babel.php:31
+msgid "Source input"
+msgstr "Source input"
+
+#: src/Module/Babel.php:37
+msgid "BBCode::toPlaintext"
+msgstr "BBCode::toPlaintext"
+
+#: src/Module/Babel.php:43
+msgid "BBCode::convert (raw HTML)"
+msgstr "BBCode::convert (raw HTML)"
+
+#: src/Module/Babel.php:48
+msgid "BBCode::convert"
+msgstr "BBCode::convert"
+
+#: src/Module/Babel.php:54
+msgid "BBCode::convert => HTML::toBBCode"
+msgstr "BBCode::convert => HTML::toBBCode"
+
+#: src/Module/Babel.php:60
+msgid "BBCode::toMarkdown"
+msgstr "BBCode::toMarkdown"
+
+#: src/Module/Babel.php:66
+msgid "BBCode::toMarkdown => Markdown::convert"
+msgstr "BBCode::toMarkdown => Markdown::convert"
+
+#: src/Module/Babel.php:72
+msgid "BBCode::toMarkdown => Markdown::toBBCode"
+msgstr "BBCode::toMarkdown => Markdown::toBBCode"
+
+#: src/Module/Babel.php:78
+msgid "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"
+msgstr "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"
+
+#: src/Module/Babel.php:89
+msgid "Item Body"
+msgstr "Item Body"
+
+#: src/Module/Babel.php:93
+msgid "Item Tags"
+msgstr "Item Tags"
+
+#: src/Module/Babel.php:100
+msgid "Source input (Diaspora format)"
+msgstr "Source input (diaspora* format)"
+
+#: src/Module/Babel.php:106
+msgid "Markdown::convert (raw HTML)"
+msgstr "Markdown::convert (raw HTML)"
+
+#: src/Module/Babel.php:111
+msgid "Markdown::convert"
+msgstr "Markdown::convert"
+
+#: src/Module/Babel.php:117
+msgid "Markdown::toBBCode"
+msgstr "Markdown::toBBCode"
+
+#: src/Module/Babel.php:124
+msgid "Raw HTML input"
+msgstr "Raw HTML input"
+
+#: src/Module/Babel.php:129
+msgid "HTML Input"
+msgstr "HTML input"
+
+#: src/Module/Babel.php:135
+msgid "HTML::toBBCode"
+msgstr "HTML::toBBCode"
+
+#: src/Module/Babel.php:141
+msgid "HTML::toBBCode => BBCode::convert"
+msgstr "HTML::toBBCode => BBCode::convert"
+
+#: src/Module/Babel.php:146
+msgid "HTML::toBBCode => BBCode::convert (raw HTML)"
+msgstr "HTML::toBBCode => BBCode::convert (raw HTML)"
+
+#: src/Module/Babel.php:152
+msgid "HTML::toMarkdown"
+msgstr "HTML::toMarkdown"
+
+#: src/Module/Babel.php:158
+msgid "HTML::toPlaintext"
+msgstr "HTML::toPlaintext"
+
+#: src/Module/Babel.php:166
+msgid "Source text"
+msgstr "Source text"
+
+#: src/Module/Babel.php:167
+msgid "BBCode"
+msgstr "BBCode"
+
+#: src/Module/Babel.php:168
+msgid "Markdown"
+msgstr "Markdown"
+
+#: src/Module/Babel.php:169
+msgid "HTML"
+msgstr "HTML"
+
+#: src/Module/BaseAdminModule.php:76
+msgid "Overview"
+msgstr "Overview"
+
+#: src/Module/BaseAdminModule.php:79
+msgid "Configuration"
+msgstr "Configuration"
+
+#: src/Module/BaseAdminModule.php:87
+msgid "Database"
+msgstr "Database"
+
+#: src/Module/BaseAdminModule.php:88
+msgid "DB updates"
+msgstr "DB updates"
+
+#: src/Module/BaseAdminModule.php:89
+msgid "Inspect Deferred Workers"
+msgstr "Inspect deferred workers"
+
+#: src/Module/BaseAdminModule.php:90
+msgid "Inspect worker Queue"
+msgstr "Inspect worker queue"
+
+#: src/Module/BaseAdminModule.php:92
+msgid "Tools"
+msgstr "Tools"
+
+#: src/Module/BaseAdminModule.php:93
+msgid "Contact Blocklist"
+msgstr "Contact blocklist"
+
+#: src/Module/BaseAdminModule.php:101
+msgid "Diagnostics"
+msgstr "Diagnostics"
+
+#: src/Module/BaseAdminModule.php:102
+msgid "PHP Info"
+msgstr "PHP info"
+
+#: src/Module/BaseAdminModule.php:103
+msgid "probe address"
+msgstr "Probe address"
+
+#: src/Module/BaseAdminModule.php:104
+msgid "check webfinger"
+msgstr "Check webfinger"
+
+#: src/Module/BaseAdminModule.php:105
+msgid "Item Source"
+msgstr "Item source"
+
+#: src/Module/BaseAdminModule.php:106
+msgid "Babel"
+msgstr "Babel"
+
+#: src/Module/BaseAdminModule.php:115
+msgid "Addon Features"
+msgstr "Addon features"
+
+#: src/Module/BaseAdminModule.php:116
+msgid "User registrations waiting for confirmation"
+msgstr "User registrations awaiting confirmation"
+
+#: src/Module/Bookmarklet.php:35
+msgid "This page is missing a url parameter."
+msgstr "This page is missing a URL parameter."
+
+#: src/Module/Bookmarklet.php:57
+msgid "The post was created"
+msgstr "The post was created"
+
#: src/Module/Contact.php:166
#, php-format
msgid "%d contact edited."
@@ -8817,453 +8602,688 @@ msgid_plural "%d contacts edited."
msgstr[0] "%d contact edited."
msgstr[1] "%d contacts edited."
-#: src/Module/Contact.php:191 src/Module/Contact.php:374
+#: src/Module/Contact.php:193 src/Module/Contact.php:377
msgid "Could not access contact record."
msgstr "Could not access contact record."
-#: src/Module/Contact.php:201
+#: src/Module/Contact.php:203
msgid "Could not locate selected profile."
msgstr "Could not locate selected profile."
-#: src/Module/Contact.php:233
+#: src/Module/Contact.php:235
msgid "Contact updated."
msgstr "Contact updated."
-#: src/Module/Contact.php:395
+#: src/Module/Contact.php:398
msgid "Contact has been blocked"
msgstr "Contact has been blocked"
-#: src/Module/Contact.php:395
+#: src/Module/Contact.php:398
msgid "Contact has been unblocked"
msgstr "Contact has been unblocked"
-#: src/Module/Contact.php:405
+#: src/Module/Contact.php:408
msgid "Contact has been ignored"
msgstr "Contact has been ignored"
-#: src/Module/Contact.php:405
+#: src/Module/Contact.php:408
msgid "Contact has been unignored"
msgstr "Contact has been unignored"
-#: src/Module/Contact.php:415
+#: src/Module/Contact.php:418
msgid "Contact has been archived"
msgstr "Contact has been archived"
-#: src/Module/Contact.php:415
+#: src/Module/Contact.php:418
msgid "Contact has been unarchived"
msgstr "Contact has been unarchived"
-#: src/Module/Contact.php:439
+#: src/Module/Contact.php:442
msgid "Drop contact"
msgstr "Drop contact"
-#: src/Module/Contact.php:442 src/Module/Contact.php:820
+#: src/Module/Contact.php:445 src/Module/Contact.php:823
msgid "Do you really want to delete this contact?"
msgstr "Do you really want to delete this contact?"
-#: src/Module/Contact.php:456
+#: src/Module/Contact.php:459
msgid "Contact has been removed."
msgstr "Contact has been removed."
-#: src/Module/Contact.php:486
+#: src/Module/Contact.php:489
#, php-format
msgid "You are mutual friends with %s"
msgstr "You are mutual friends with %s"
-#: src/Module/Contact.php:491
+#: src/Module/Contact.php:494
#, php-format
msgid "You are sharing with %s"
msgstr "You are sharing with %s"
-#: src/Module/Contact.php:496
+#: src/Module/Contact.php:499
#, php-format
msgid "%s is sharing with you"
msgstr "%s is sharing with you"
-#: src/Module/Contact.php:520
+#: src/Module/Contact.php:523
msgid "Private communications are not available for this contact."
msgstr "Private communications are not available for this contact."
-#: src/Module/Contact.php:522
+#: src/Module/Contact.php:525
msgid "Never"
msgstr "Never"
-#: src/Module/Contact.php:525
+#: src/Module/Contact.php:528
msgid "(Update was successful)"
msgstr "(Update was successful)"
-#: src/Module/Contact.php:525
+#: src/Module/Contact.php:528
msgid "(Update was not successful)"
msgstr "(Update was not successful)"
-#: src/Module/Contact.php:527 src/Module/Contact.php:1058
+#: src/Module/Contact.php:530 src/Module/Contact.php:1061
msgid "Suggest friends"
msgstr "Suggest friends"
-#: src/Module/Contact.php:531
+#: src/Module/Contact.php:534
#, php-format
msgid "Network type: %s"
msgstr "Network type: %s"
-#: src/Module/Contact.php:536
+#: src/Module/Contact.php:539
msgid "Communications lost with this contact!"
msgstr "Communications lost with this contact!"
-#: src/Module/Contact.php:542
+#: src/Module/Contact.php:545
msgid "Fetch further information for feeds"
msgstr "Fetch further information for feeds"
-#: src/Module/Contact.php:544
+#: src/Module/Contact.php:547
msgid ""
"Fetch information like preview pictures, title and teaser from the feed "
"item. You can activate this if the feed doesn't contain much text. Keywords "
"are taken from the meta header in the feed item and are posted as hash tags."
msgstr "Fetch information like preview pictures, title and teaser from the feed item. You can activate this if the feed doesn't contain much text. Keywords are taken from the meta header in the feed item and are posted as hash tags."
-#: src/Module/Contact.php:547
+#: src/Module/Contact.php:550
msgid "Fetch information"
msgstr "Fetch information"
-#: src/Module/Contact.php:548
+#: src/Module/Contact.php:551
msgid "Fetch keywords"
msgstr "Fetch keywords"
-#: src/Module/Contact.php:549
+#: src/Module/Contact.php:552
msgid "Fetch information and keywords"
msgstr "Fetch information and keywords"
-#: src/Module/Contact.php:581
+#: src/Module/Contact.php:584
msgid "Profile Visibility"
msgstr "Profile visibility"
-#: src/Module/Contact.php:582
+#: src/Module/Contact.php:585
msgid "Contact Information / Notes"
msgstr "Personal note"
-#: src/Module/Contact.php:583
+#: src/Module/Contact.php:586
msgid "Contact Settings"
msgstr "Notification and privacy "
-#: src/Module/Contact.php:592
+#: src/Module/Contact.php:595
msgid "Contact"
msgstr "Contact"
-#: src/Module/Contact.php:596
+#: src/Module/Contact.php:599
#, php-format
msgid ""
"Please choose the profile you would like to display to %s when viewing your "
"profile securely."
msgstr "Please choose the profile you would like to display to %s when viewing your profile securely."
-#: src/Module/Contact.php:598
+#: src/Module/Contact.php:601
msgid "Their personal note"
msgstr "Their personal note"
-#: src/Module/Contact.php:600
+#: src/Module/Contact.php:603
msgid "Edit contact notes"
msgstr "Edit contact notes"
-#: src/Module/Contact.php:604
+#: src/Module/Contact.php:607
msgid "Block/Unblock contact"
msgstr "Block/Unblock contact"
-#: src/Module/Contact.php:605
+#: src/Module/Contact.php:608
msgid "Ignore contact"
msgstr "Ignore contact"
-#: src/Module/Contact.php:606
+#: src/Module/Contact.php:609
msgid "Repair URL settings"
msgstr "Repair URL settings"
-#: src/Module/Contact.php:607
+#: src/Module/Contact.php:610
msgid "View conversations"
msgstr "View conversations"
-#: src/Module/Contact.php:612
+#: src/Module/Contact.php:615
msgid "Last update:"
msgstr "Last update:"
-#: src/Module/Contact.php:614
+#: src/Module/Contact.php:617
msgid "Update public posts"
msgstr "Update public posts"
-#: src/Module/Contact.php:616 src/Module/Contact.php:1068
+#: src/Module/Contact.php:619 src/Module/Contact.php:1071
msgid "Update now"
msgstr "Update now"
-#: src/Module/Contact.php:622 src/Module/Contact.php:825
-#: src/Module/Contact.php:1085
+#: src/Module/Contact.php:625 src/Module/Contact.php:828
+#: src/Module/Contact.php:1088
msgid "Unignore"
msgstr "Unignore"
-#: src/Module/Contact.php:626
+#: src/Module/Contact.php:629
msgid "Currently blocked"
msgstr "Currently blocked"
-#: src/Module/Contact.php:627
+#: src/Module/Contact.php:630
msgid "Currently ignored"
msgstr "Currently ignored"
-#: src/Module/Contact.php:628
+#: src/Module/Contact.php:631
msgid "Currently archived"
msgstr "Currently archived"
-#: src/Module/Contact.php:629
+#: src/Module/Contact.php:632
msgid "Awaiting connection acknowledge"
msgstr "Awaiting connection acknowledgement "
-#: src/Module/Contact.php:630
+#: src/Module/Contact.php:633
msgid ""
"Replies/likes to your public posts may still be visible"
msgstr "Replies/Likes to your public posts may still be visible"
-#: src/Module/Contact.php:631
+#: src/Module/Contact.php:634
msgid "Notification for new posts"
msgstr "Notification for new posts"
-#: src/Module/Contact.php:631
+#: src/Module/Contact.php:634
msgid "Send a notification of every new post of this contact"
msgstr "Send notification for every new post from this contact"
-#: src/Module/Contact.php:633
+#: src/Module/Contact.php:636
msgid "Blacklisted keywords"
msgstr "Blacklisted keywords"
-#: src/Module/Contact.php:633
+#: src/Module/Contact.php:636
msgid ""
"Comma separated list of keywords that should not be converted to hashtags, "
"when \"Fetch information and keywords\" is selected"
msgstr "Comma separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected"
-#: src/Module/Contact.php:650
+#: src/Module/Contact.php:653 src/Module/Settings/TwoFactor/Index.php:100
msgid "Actions"
msgstr "Actions"
-#: src/Module/Contact.php:696
+#: src/Module/Contact.php:700
msgid "Suggestions"
msgstr "Suggestions"
-#: src/Module/Contact.php:699
+#: src/Module/Contact.php:703
msgid "Suggest potential friends"
msgstr "Suggest potential friends"
-#: src/Module/Contact.php:707
+#: src/Module/Contact.php:708 src/Module/Group.php:287
+msgid "All Contacts"
+msgstr "All contacts"
+
+#: src/Module/Contact.php:711
msgid "Show all contacts"
msgstr "Show all contacts"
-#: src/Module/Contact.php:712
+#: src/Module/Contact.php:716
msgid "Unblocked"
msgstr "Unblocked"
-#: src/Module/Contact.php:715
+#: src/Module/Contact.php:719
msgid "Only show unblocked contacts"
msgstr "Only show unblocked contacts"
-#: src/Module/Contact.php:720
+#: src/Module/Contact.php:724
msgid "Blocked"
msgstr "Blocked"
-#: src/Module/Contact.php:723
+#: src/Module/Contact.php:727
msgid "Only show blocked contacts"
msgstr "Only show blocked contacts"
-#: src/Module/Contact.php:728
+#: src/Module/Contact.php:732
msgid "Ignored"
msgstr "Ignored"
-#: src/Module/Contact.php:731
+#: src/Module/Contact.php:735
msgid "Only show ignored contacts"
msgstr "Only show ignored contacts"
-#: src/Module/Contact.php:736
+#: src/Module/Contact.php:740
msgid "Archived"
msgstr "Archived"
-#: src/Module/Contact.php:739
+#: src/Module/Contact.php:743
msgid "Only show archived contacts"
msgstr "Only show archived contacts"
-#: src/Module/Contact.php:744
+#: src/Module/Contact.php:748
msgid "Hidden"
msgstr "Hidden"
-#: src/Module/Contact.php:747
+#: src/Module/Contact.php:751
msgid "Only show hidden contacts"
msgstr "Only show hidden contacts"
-#: src/Module/Contact.php:755
+#: src/Module/Contact.php:759
msgid "Organize your contact groups"
msgstr "Organise your contact groups"
-#: src/Module/Contact.php:815
+#: src/Module/Contact.php:818
msgid "Search your contacts"
msgstr "Search your contacts"
-#: src/Module/Contact.php:826 src/Module/Contact.php:1094
+#: src/Module/Contact.php:829 src/Module/Contact.php:1097
msgid "Archive"
msgstr "Archive"
-#: src/Module/Contact.php:826 src/Module/Contact.php:1094
+#: src/Module/Contact.php:829 src/Module/Contact.php:1097
msgid "Unarchive"
msgstr "Unarchive"
-#: src/Module/Contact.php:829
+#: src/Module/Contact.php:832
msgid "Batch Actions"
msgstr "Batch actions"
-#: src/Module/Contact.php:856
+#: src/Module/Contact.php:859
msgid "Conversations started by this contact"
msgstr "Conversations started by this contact"
-#: src/Module/Contact.php:861
+#: src/Module/Contact.php:864
msgid "Posts and Comments"
msgstr "Posts and Comments"
-#: src/Module/Contact.php:884
+#: src/Module/Contact.php:887
msgid "View all contacts"
msgstr "View all contacts"
-#: src/Module/Contact.php:895
+#: src/Module/Contact.php:898
msgid "View all common friends"
msgstr "View all common friends"
-#: src/Module/Contact.php:905
+#: src/Module/Contact.php:908
msgid "Advanced Contact Settings"
msgstr "Advanced contact settings"
-#: src/Module/Contact.php:991
+#: src/Module/Contact.php:994
msgid "Mutual Friendship"
msgstr "Mutual friendship"
-#: src/Module/Contact.php:996
+#: src/Module/Contact.php:999
msgid "is a fan of yours"
msgstr "is a fan of yours"
-#: src/Module/Contact.php:1001
+#: src/Module/Contact.php:1004
msgid "you are a fan of"
msgstr "I follow them"
-#: src/Module/Contact.php:1025
+#: src/Module/Contact.php:1028
msgid "Edit contact"
msgstr "Edit contact"
-#: src/Module/Contact.php:1079
+#: src/Module/Contact.php:1082
msgid "Toggle Blocked status"
msgstr "Toggle blocked status"
-#: src/Module/Contact.php:1087
+#: src/Module/Contact.php:1090
msgid "Toggle Ignored status"
msgstr "Toggle ignored status"
-#: src/Module/Contact.php:1096
+#: src/Module/Contact.php:1099
msgid "Toggle Archive status"
msgstr "Toggle archive status"
-#: src/Module/Contact.php:1104
+#: src/Module/Contact.php:1107
msgid "Delete contact"
msgstr "Delete contact"
-#: src/Module/Install.php:118
+#: src/Module/Credits.php:25
+msgid "Credits"
+msgstr "Credits"
+
+#: src/Module/Credits.php:26
+msgid ""
+"Friendica is a community project, that would not be possible without the "
+"help of many people. Here is a list of those who have contributed to the "
+"code or the translation of Friendica. Thank you all!"
+msgstr "Friendica is a community project that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!"
+
+#: src/Module/Directory.php:66
+msgid "No entries (some entries may be hidden)."
+msgstr "No entries (entries may be hidden)."
+
+#: src/Module/Directory.php:85
+msgid "Find on this site"
+msgstr "Find on this site"
+
+#: src/Module/Directory.php:87
+msgid "Results for:"
+msgstr "Results for:"
+
+#: src/Module/Directory.php:89
+msgid "Site Directory"
+msgstr "Site directory"
+
+#: src/Module/Feedtest.php:20 src/Module/Filer/SaveTag.php:20
+msgid "You must be logged in to use this module"
+msgstr "You must be logged in to use this module"
+
+#: src/Module/Feedtest.php:49
+msgid "Source URL"
+msgstr "Source URL"
+
+#: src/Module/Filer/SaveTag.php:39
+#, php-format
+msgid "Filetag %s saved to item"
+msgstr "File-tag %s saved to item"
+
+#: src/Module/Filer/SaveTag.php:49
+msgid "- select -"
+msgstr "- select -"
+
+#: src/Module/FollowConfirm.php:37
+msgid "No given contact."
+msgstr "No given contact."
+
+#: src/Module/Friendica.php:40
+msgid "Installed addons/apps:"
+msgstr "Installed addons/apps:"
+
+#: src/Module/Friendica.php:45
+msgid "No installed addons/apps"
+msgstr "No installed addons/apps"
+
+#: src/Module/Friendica.php:50
+#, php-format
+msgid "Read about the Terms of Service of this node."
+msgstr "Read about the Terms of Service of this node."
+
+#: src/Module/Friendica.php:57
+msgid "On this server the following remote servers are blocked."
+msgstr "On this server the following remote servers are blocked."
+
+#: src/Module/Friendica.php:75
+#, php-format
+msgid ""
+"This is Friendica, version %s that is running at the web location %s. The "
+"database version is %s, the post update version is %s."
+msgstr "This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s."
+
+#: src/Module/Friendica.php:80
+msgid ""
+"Please visit Friendi.ca to learn more "
+"about the Friendica project."
+msgstr "Please visit Friendi.ca to learn more about the Friendica project."
+
+#: src/Module/Friendica.php:81
+msgid "Bug reports and issues: please visit"
+msgstr "Bug reports and issues: please visit"
+
+#: src/Module/Friendica.php:81
+msgid "the bugtracker at github"
+msgstr "the bugtracker at github"
+
+#: src/Module/Friendica.php:82
+msgid "Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca"
+msgstr "Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca"
+
+#: src/Module/Group.php:42
+msgid "Group created."
+msgstr "Group created."
+
+#: src/Module/Group.php:48
+msgid "Could not create group."
+msgstr "Could not create group."
+
+#: src/Module/Group.php:59 src/Module/Group.php:207 src/Module/Group.php:233
+msgid "Group not found."
+msgstr "Group not found."
+
+#: src/Module/Group.php:65
+msgid "Group name changed."
+msgstr "Group name changed."
+
+#: src/Module/Group.php:87
+msgid "Unknown group."
+msgstr "Unknown group."
+
+#: src/Module/Group.php:96
+msgid "Contact is unavailable."
+msgstr "Contact is unavailable."
+
+#: src/Module/Group.php:100
+msgid "Contact is deleted."
+msgstr "Contact is deleted."
+
+#: src/Module/Group.php:106
+msgid "Contact is blocked, unable to add it to a group."
+msgstr "Contact is blocked, unable to add it to a group."
+
+#: src/Module/Group.php:110
+msgid "Unable to add the contact to the group."
+msgstr "Unable to add contact to group."
+
+#: src/Module/Group.php:112
+msgid "Contact successfully added to group."
+msgstr "Contact successfully added to group."
+
+#: src/Module/Group.php:116
+msgid "Unable to remove the contact from the group."
+msgstr "Unable to remove contact from group."
+
+#: src/Module/Group.php:118
+msgid "Contact successfully removed from group."
+msgstr "Contact removed from group."
+
+#: src/Module/Group.php:121
+msgid "Unknown group command."
+msgstr "Unknown group command."
+
+#: src/Module/Group.php:124
+msgid "Bad request."
+msgstr "Bad request."
+
+#: src/Module/Group.php:163
+msgid "Save Group"
+msgstr "Save group"
+
+#: src/Module/Group.php:164
+msgid "Filter"
+msgstr "Filter"
+
+#: src/Module/Group.php:170
+msgid "Create a group of contacts/friends."
+msgstr "Create a group of contacts/friends."
+
+#: src/Module/Group.php:212
+msgid "Group removed."
+msgstr "Group removed."
+
+#: src/Module/Group.php:214
+msgid "Unable to remove group."
+msgstr "Unable to remove group."
+
+#: src/Module/Group.php:265
+msgid "Delete Group"
+msgstr "Delete group"
+
+#: src/Module/Group.php:275
+msgid "Edit Group Name"
+msgstr "Edit group name"
+
+#: src/Module/Group.php:285
+msgid "Members"
+msgstr "Members"
+
+#: src/Module/Group.php:301
+msgid "Remove contact from group"
+msgstr "Remove contact from group"
+
+#: src/Module/Group.php:335
+msgid "Add contact to group"
+msgstr "Add contact to group"
+
+#: src/Module/Help.php:43
+msgid "Help:"
+msgstr "Help:"
+
+#: src/Module/Home.php:42
+#, php-format
+msgid "Welcome to %s"
+msgstr "Welcome to %s"
+
+#: src/Module/Install.php:158
msgid "Friendica Communications Server - Setup"
msgstr "Friendica Communications Server - Setup"
-#: src/Module/Install.php:129
+#: src/Module/Install.php:169
msgid "System check"
msgstr "System check"
-#: src/Module/Install.php:134
+#: src/Module/Install.php:174
msgid "Check again"
msgstr "Check again"
-#: src/Module/Install.php:151
+#: src/Module/Install.php:189
+msgid "Base settings"
+msgstr "Base settings"
+
+#: src/Module/Install.php:196
+msgid "Host name"
+msgstr "Host name"
+
+#: src/Module/Install.php:198
+msgid ""
+"Overwrite this field in case the determinated hostname isn't right, "
+"otherweise leave it as is."
+msgstr "Overwrite this field in case the hostname is incorrect, otherwise leave it as is."
+
+#: src/Module/Install.php:201
+msgid "Base path to installation"
+msgstr "Base path to installation"
+
+#: src/Module/Install.php:203
+msgid ""
+"If the system cannot detect the correct path to your installation, enter the"
+" correct path here. This setting should only be set if you are using a "
+"restricted system and symbolic links to your webroot."
+msgstr "If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."
+
+#: src/Module/Install.php:206
+msgid "Sub path of the URL"
+msgstr "URL Subpath"
+
+#: src/Module/Install.php:208
+msgid ""
+"Overwrite this field in case the sub path determination isn't right, "
+"otherwise leave it as is. Leaving this field blank means the installation is"
+" at the base URL without sub path."
+msgstr "Overwrite this field in case the subpath determination isn't right, otherwise leave it as is. Leaving this field blank means the installation is at the base URL without subpath."
+
+#: src/Module/Install.php:219
msgid "Database connection"
msgstr "Database connection"
-#: src/Module/Install.php:152
+#: src/Module/Install.php:220
msgid ""
"In order to install Friendica we need to know how to connect to your "
"database."
msgstr "In order to install Friendica we need to know how to connect to your database."
-#: src/Module/Install.php:153
+#: src/Module/Install.php:221
msgid ""
"Please contact your hosting provider or site administrator if you have "
"questions about these settings."
msgstr "Please contact your hosting provider or site administrator if you have questions about these settings."
-#: src/Module/Install.php:154
+#: src/Module/Install.php:222
msgid ""
"The database you specify below should already exist. If it does not, please "
"create it before continuing."
msgstr "The database you specify below should already exist. If it does not, please create it before continuing."
-#: src/Module/Install.php:157
+#: src/Module/Install.php:229
msgid "Database Server Name"
msgstr "Database server name"
-#: src/Module/Install.php:162
+#: src/Module/Install.php:234
msgid "Database Login Name"
msgstr "Database login name"
-#: src/Module/Install.php:168
+#: src/Module/Install.php:240
msgid "Database Login Password"
msgstr "Database login password"
-#: src/Module/Install.php:170
+#: src/Module/Install.php:242
msgid "For security reasons the password must not be empty"
msgstr "For security reasons the password must not be empty"
-#: src/Module/Install.php:173
+#: src/Module/Install.php:245
msgid "Database Name"
msgstr "Database name"
-#: src/Module/Install.php:178 src/Module/Install.php:214
+#: src/Module/Install.php:249 src/Module/Install.php:278
+msgid "Please select a default timezone for your website"
+msgstr "Please select a default time zone for your website"
+
+#: src/Module/Install.php:263
+msgid "Site settings"
+msgstr "Site settings"
+
+#: src/Module/Install.php:273
msgid "Site administrator email address"
msgstr "Site administrator email address"
-#: src/Module/Install.php:180 src/Module/Install.php:214
+#: src/Module/Install.php:275
msgid ""
"Your account email address must match this in order to use the web admin "
"panel."
msgstr "Your account email address must match this in order to use the web admin panel."
-#: src/Module/Install.php:184 src/Module/Install.php:215
-msgid "Please select a default timezone for your website"
-msgstr "Please select a default time zone for your website"
-
-#: src/Module/Install.php:208
-msgid "Site settings"
-msgstr "Site settings"
-
-#: src/Module/Install.php:217
+#: src/Module/Install.php:282
msgid "System Language:"
msgstr "System language:"
-#: src/Module/Install.php:219
+#: src/Module/Install.php:284
msgid ""
"Set the default language for your Friendica installation interface and to "
"send emails."
msgstr "Set the default language for your Friendica installation interface and email communication."
-#: src/Module/Install.php:231
+#: src/Module/Install.php:296
msgid "Your Friendica site database has been installed."
msgstr "Your Friendica site database has been installed."
-#: src/Module/Install.php:239
+#: src/Module/Install.php:304
msgid "Installation finished"
msgstr "Installation finished"
-#: src/Module/Install.php:261
+#: src/Module/Install.php:326
msgid "Use an application on a mobile device to get two-factor authentication " +"codes when prompted on login.
" +msgstr "Use an application on a mobile device to get two-factor authentication codes when prompted on login.
" + +#: src/Module/Settings/TwoFactor/Index.php:90 +msgid "Authenticator app" +msgstr "Authenticator app" + +#: src/Module/Settings/TwoFactor/Index.php:91 +msgid "Configured" +msgstr "Configured" + +#: src/Module/Settings/TwoFactor/Index.php:91 +msgid "Not Configured" +msgstr "Not configured" + +#: src/Module/Settings/TwoFactor/Index.php:92 +msgid "You haven't finished configuring your authenticator app.
" +msgstr "You haven't finished configuring your authenticator app.
" + +#: src/Module/Settings/TwoFactor/Index.php:93 +msgid "Your authenticator app is correctly configured.
" +msgstr "Your authenticator app is correctly configured.
" + +#: src/Module/Settings/TwoFactor/Index.php:95 +msgid "Recovery codes" +msgstr "Recovery codes" + +#: src/Module/Settings/TwoFactor/Index.php:96 +msgid "Remaining valid codes" +msgstr "Remaining valid codes" + +#: src/Module/Settings/TwoFactor/Index.php:98 +msgid "" +"These one-use codes can replace an authenticator app code in case you " +"have lost access to it.
" +msgstr "These one-use codes can replace an authenticator app code in case you have lost access to it.
" + +#: src/Module/Settings/TwoFactor/Index.php:101 +msgid "Current password:" +msgstr "Current password:" + +#: src/Module/Settings/TwoFactor/Index.php:101 +msgid "" +"You need to provide your current password to change two-factor " +"authentication settings." +msgstr "You need to provide your current password to change two-factor authentication settings." + +#: src/Module/Settings/TwoFactor/Index.php:102 +msgid "Enable two-factor authentication" +msgstr "Enable two-factor authentication" + +#: src/Module/Settings/TwoFactor/Index.php:103 +msgid "Disable two-factor authentication" +msgstr "Disable two-factor authentication" + +#: src/Module/Settings/TwoFactor/Index.php:104 +msgid "Show recovery codes" +msgstr "Show recovery codes" + +#: src/Module/Settings/TwoFactor/Index.php:105 +msgid "Finish app configuration" +msgstr "Finish app configuration" + +#: src/Module/Settings/TwoFactor/Recovery.php:34 +#: src/Module/Settings/TwoFactor/Verify.php:41 +msgid "Please enter your password to access this page." +msgstr "Please enter your password to access this page." + +#: src/Module/Settings/TwoFactor/Recovery.php:50 +msgid "New recovery codes successfully generated." +msgstr "New recovery codes successfully generated." + +#: src/Module/Settings/TwoFactor/Recovery.php:76 +msgid "Two-factor recovery codes" +msgstr "Two-factor recovery codes" + +#: src/Module/Settings/TwoFactor/Recovery.php:78 +msgid "" +"Recovery codes can be used to access your account in the event you lose " +"access to your device and cannot receive two-factor authentication " +"codes.
Put these in a safe spot! If you lose your " +"device and don’t have the recovery codes you will lose access to your " +"account.
" +msgstr "Recovery codes can be used to access your account in the event you lose access to your device and cannot receive two-factor authentication codes.
Put these in a safe place! If you lose your device and don’t have the recovery codes you will lose access to your account.
" + +#: src/Module/Settings/TwoFactor/Recovery.php:80 +msgid "" +"When you generate new recovery codes, you must copy the new codes. Your old " +"codes won’t work anymore." +msgstr "When you generate new recovery codes, you must copy the new codes. Your old codes won’t work anymore." + +#: src/Module/Settings/TwoFactor/Recovery.php:81 +msgid "Generate new recovery codes" +msgstr "Generate new recovery codes" + +#: src/Module/Settings/TwoFactor/Recovery.php:83 +msgid "Next: Verification" +msgstr "Next: Verification" + +#: src/Module/Settings/TwoFactor/Verify.php:63 +msgid "Two-factor authentication successfully activated." +msgstr "Two-factor authentication successfully activated." + +#: src/Module/Settings/TwoFactor/Verify.php:67 +#: src/Module/TwoFactor/Recovery.php:46 src/Module/TwoFactor/Verify.php:41 +msgid "Invalid code, please retry." +msgstr "Invalid code, please try again." + +#: src/Module/Settings/TwoFactor/Verify.php:96 +#, php-format +msgid "" +"Or you can submit the authentication settings manually:
\n" +"Or you can submit the authentication settings manually:
\nPlease scan this QR Code with your authenticator app and submit the " +"provided code.
" +msgstr "Please scan this QR Code with your authenticator app and submit the provided code.
" + +#: src/Module/Settings/TwoFactor/Verify.php:120 +#, php-format +msgid "" +"Or you can open the following URL in your mobile devicde:
" +msgstr "Or you can open the following URL in your mobile device:
" + +#: src/Module/Settings/TwoFactor/Verify.php:126 +#: src/Module/TwoFactor/Verify.php:63 +msgid "Please enter a code from your authentication app" +msgstr "Please enter a code from your authentication app" + +#: src/Module/Settings/TwoFactor/Verify.php:127 +msgid "Verify code and enable two-factor authentication" +msgstr "Verify code and enable two-factor authentication" + +#: src/Module/Special/HTTPException.php:32 +msgid "Bad Request" +msgstr "Bad Request" + +#: src/Module/Special/HTTPException.php:33 +msgid "Unauthorized" +msgstr "Unauthorized" + +#: src/Module/Special/HTTPException.php:34 +msgid "Forbidden" +msgstr "Forbidden" + +#: src/Module/Special/HTTPException.php:35 +msgid "Not Found" +msgstr "Not found" + +#: src/Module/Special/HTTPException.php:36 +msgid "Internal Server Error" +msgstr "Internal Server Error" + +#: src/Module/Special/HTTPException.php:37 +msgid "Service Unavailable" +msgstr "Service Unavailable" + +#: src/Module/Special/HTTPException.php:44 +msgid "" +"The server cannot or will not process the request due to an apparent client " +"error." +msgstr "The server cannot process the request due to an apparent client error." + +#: src/Module/Special/HTTPException.php:45 +msgid "" +"Authentication is required and has failed or has not yet been provided." +msgstr "Authentication is required and has failed or has not yet been provided." + +#: src/Module/Special/HTTPException.php:46 +msgid "" +"The request was valid, but the server is refusing action. The user might not" +" have the necessary permissions for a resource, or may need an account." +msgstr "The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource, or may need an account." + +#: src/Module/Special/HTTPException.php:47 +msgid "" +"The requested resource could not be found but may be available in the " +"future." +msgstr "The requested resource could not be found but may be available in the future." + +#: src/Module/Special/HTTPException.php:48 +msgid "" +"An unexpected condition was encountered and no more specific message is " +"suitable." +msgstr "An unexpected condition was encountered and no more specific message is available." + +#: src/Module/Special/HTTPException.php:49 +msgid "" +"The server is currently unavailable (because it is overloaded or down for " +"maintenance). Please try again later." +msgstr "The server is currently unavailable (because it is overloaded or down for maintenance). Please try again later." + +#: src/Module/Special/HTTPException.php:55 +msgid "Go back" +msgstr "Go back" + #: src/Module/Tos.php:35 src/Module/Tos.php:77 msgid "" "At the time of registration, and for providing communications between the " @@ -9463,165 +9845,207 @@ msgstr "At any point in time a logged in user can export their account data from msgid "Privacy Statement" msgstr "Privacy Statement" -#: src/Object/Post.php:136 +#: src/Module/TwoFactor/Recovery.php:41 +#, php-format +msgid "Remaining recovery codes: %d" +msgstr "Remaining recovery codes: %d" + +#: src/Module/TwoFactor/Recovery.php:65 +msgid "Two-factor recovery" +msgstr "Two-factor recovery" + +#: src/Module/TwoFactor/Recovery.php:66 +msgid "" +"You can enter one of your one-time recovery codes in case you lost access" +" to your mobile device.
" +msgstr "You can enter one of your one-time recovery codes in case you lost access to your mobile device.
" + +#: src/Module/TwoFactor/Recovery.php:67 src/Module/TwoFactor/Verify.php:62 +#, php-format +msgid "Don’t have your phone? Enter a two-factor recovery code" +msgstr "Don’t have your phone? Enter a two-factor recovery code" + +#: src/Module/TwoFactor/Recovery.php:68 +msgid "Please enter a recovery code" +msgstr "Please enter a recovery code" + +#: src/Module/TwoFactor/Recovery.php:69 +msgid "Submit recovery code and complete login" +msgstr "Submit recovery code and complete login" + +#: src/Module/TwoFactor/Verify.php:61 +msgid "" +"Open the two-factor authentication app on your device to get an " +"authentication code and verify your identity.
" +msgstr "Open the two-factor authentication app on your device to get an authentication code and verify your identity.
" + +#: src/Module/TwoFactor/Verify.php:64 +msgid "Verify code and complete login" +msgstr "Verify code and complete login" + +#: src/Object/Post.php:137 msgid "This entry was edited" msgstr "This entry was edited" -#: src/Object/Post.php:198 +#: src/Object/Post.php:157 +msgid "Private Message" +msgstr "Private message" + +#: src/Object/Post.php:199 msgid "Delete locally" msgstr "Delete locally" -#: src/Object/Post.php:201 +#: src/Object/Post.php:202 msgid "Delete globally" msgstr "Delete globally" -#: src/Object/Post.php:201 +#: src/Object/Post.php:202 msgid "Remove locally" msgstr "Remove locally" -#: src/Object/Post.php:215 +#: src/Object/Post.php:216 msgid "save to folder" msgstr "Save to folder" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I will attend" msgstr "I will attend" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I will not attend" msgstr "I will not attend" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I might attend" msgstr "I might attend" -#: src/Object/Post.php:278 +#: src/Object/Post.php:279 msgid "ignore thread" msgstr "Ignore thread" -#: src/Object/Post.php:279 +#: src/Object/Post.php:280 msgid "unignore thread" msgstr "Unignore thread" -#: src/Object/Post.php:280 +#: src/Object/Post.php:281 msgid "toggle ignore status" msgstr "Toggle ignore status" -#: src/Object/Post.php:291 +#: src/Object/Post.php:292 msgid "add star" msgstr "Add star" -#: src/Object/Post.php:292 +#: src/Object/Post.php:293 msgid "remove star" msgstr "Remove star" -#: src/Object/Post.php:293 +#: src/Object/Post.php:294 msgid "toggle star status" msgstr "Toggle star status" -#: src/Object/Post.php:296 +#: src/Object/Post.php:297 msgid "starred" msgstr "Starred" -#: src/Object/Post.php:300 +#: src/Object/Post.php:301 msgid "add tag" msgstr "Add tag" -#: src/Object/Post.php:311 +#: src/Object/Post.php:312 msgid "like" msgstr "Like" -#: src/Object/Post.php:312 +#: src/Object/Post.php:313 msgid "dislike" msgstr "Dislike" -#: src/Object/Post.php:315 +#: src/Object/Post.php:316 msgid "Share this" msgstr "Share this" -#: src/Object/Post.php:315 +#: src/Object/Post.php:316 msgid "share" msgstr "Share" -#: src/Object/Post.php:382 +#: src/Object/Post.php:384 msgid "to" msgstr "to" -#: src/Object/Post.php:383 +#: src/Object/Post.php:385 msgid "via" msgstr "via" -#: src/Object/Post.php:384 +#: src/Object/Post.php:386 msgid "Wall-to-Wall" msgstr "Wall-to-wall" -#: src/Object/Post.php:385 +#: src/Object/Post.php:387 msgid "via Wall-To-Wall:" msgstr "via wall-to-wall:" -#: src/Object/Post.php:418 +#: src/Object/Post.php:420 #, php-format msgid "Reply to %s" msgstr "Reply to %s" -#: src/Object/Post.php:433 +#: src/Object/Post.php:435 msgid "Notifier task is pending" msgstr "Notifier task is pending" -#: src/Object/Post.php:434 +#: src/Object/Post.php:436 msgid "Delivery to remote servers is pending" msgstr "Delivery to remote servers is pending" -#: src/Object/Post.php:435 +#: src/Object/Post.php:437 msgid "Delivery to remote servers is underway" msgstr "Delivery to remote servers is underway" -#: src/Object/Post.php:436 +#: src/Object/Post.php:438 msgid "Delivery to remote servers is mostly done" msgstr "Delivery to remote servers is mostly done" -#: src/Object/Post.php:437 +#: src/Object/Post.php:439 msgid "Delivery to remote servers is done" msgstr "Delivery to remote servers is done" -#: src/Object/Post.php:457 +#: src/Object/Post.php:459 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d comment" msgstr[1] "%d comments -" -#: src/Object/Post.php:458 +#: src/Object/Post.php:460 msgid "Show more" msgstr "Show more" -#: src/Object/Post.php:459 +#: src/Object/Post.php:461 msgid "Show fewer" msgstr "Show fewer" -#: src/Protocol/Diaspora.php:2496 +#: src/Protocol/Diaspora.php:2438 msgid "Sharing notification from Diaspora network" msgstr "Sharing notification from diaspora* network" -#: src/Protocol/Diaspora.php:3613 +#: src/Protocol/Diaspora.php:3598 msgid "Attachments:" msgstr "Attachments:" -#: src/Protocol/OStatus.php:1866 +#: src/Protocol/OStatus.php:1863 #, php-format msgid "%s is now following %s." msgstr "%s is now following %s." -#: src/Protocol/OStatus.php:1867 +#: src/Protocol/OStatus.php:1864 msgid "following" msgstr "following" -#: src/Protocol/OStatus.php:1870 +#: src/Protocol/OStatus.php:1867 #, php-format msgid "%s stopped following %s." msgstr "%s stopped following %s." -#: src/Protocol/OStatus.php:1871 +#: src/Protocol/OStatus.php:1868 msgid "stopped following" msgstr "stopped following" @@ -9691,16 +10115,16 @@ msgstr "in %1$d %2$s" msgid "%1$d %2$s ago" msgstr "%1$d %2$s ago" -#: src/Worker/Delivery.php:453 +#: src/Worker/Delivery.php:450 msgid "(no subject)" msgstr "(no subject)" -#: update.php:217 +#: update.php:218 #, php-format msgid "%s: Updating author-id and owner-id in item and thread table. " msgstr "%s: Updating author-id and owner-id in item and thread table. " -#: update.php:272 +#: update.php:273 #, php-format msgid "%s: Updating post-type." msgstr "%s: Updating post-type." @@ -9729,63 +10153,73 @@ msgstr "comix" msgid "slackr" msgstr "slackr" -#: view/theme/duepuntozero/config.php:75 +#: view/theme/duepuntozero/config.php:74 msgid "Variations" msgstr "Variations" -#: view/theme/frio/config.php:103 +#: view/theme/frio/config.php:105 msgid "Custom" msgstr "Custom" -#: view/theme/frio/config.php:115 +#: view/theme/frio/config.php:117 msgid "Note" msgstr "Note" -#: view/theme/frio/config.php:115 +#: view/theme/frio/config.php:117 msgid "Check image permissions if all users are allowed to see the image" msgstr "Check image permissions that all everyone is allowed to see the image" -#: view/theme/frio/config.php:122 +#: view/theme/frio/config.php:123 msgid "Select color scheme" msgstr "Select colour scheme" -#: view/theme/frio/config.php:123 +#: view/theme/frio/config.php:124 +msgid "Copy or paste schemestring" +msgstr "Copy or paste theme string" + +#: view/theme/frio/config.php:124 +msgid "" +"You can copy this string to share your theme with others. Pasting here " +"applies the schemestring" +msgstr "You can copy this string to share your theme with others. Pasting here applies the theme string" + +#: view/theme/frio/config.php:125 msgid "Navigation bar background color" msgstr "Navigation bar background colour:" -#: view/theme/frio/config.php:124 +#: view/theme/frio/config.php:126 msgid "Navigation bar icon color " msgstr "Navigation bar icon colour:" -#: view/theme/frio/config.php:125 +#: view/theme/frio/config.php:127 msgid "Link color" msgstr "Link colour:" -#: view/theme/frio/config.php:126 +#: view/theme/frio/config.php:128 msgid "Set the background color" msgstr "Background colour:" -#: view/theme/frio/config.php:127 +#: view/theme/frio/config.php:129 msgid "Content background opacity" msgstr "Content background opacity" -#: view/theme/frio/config.php:128 +#: view/theme/frio/config.php:130 msgid "Set the background image" msgstr "Background image:" -#: view/theme/frio/config.php:129 +#: view/theme/frio/config.php:131 msgid "Background image style" msgstr "Background image style" -#: view/theme/frio/config.php:134 +#: view/theme/frio/config.php:136 msgid "Login page background image" msgstr "Login page background image" -#: view/theme/frio/config.php:138 +#: view/theme/frio/config.php:140 msgid "Login page background color" msgstr "Login page background colour" -#: view/theme/frio/config.php:138 +#: view/theme/frio/config.php:140 msgid "Leave background image and color empty for theme defaults" msgstr "Leave background image and colour empty for theme defaults" @@ -9833,27 +10267,27 @@ msgstr "Guest" msgid "Visitor" msgstr "Visitor" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Alignment" msgstr "Alignment" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Left" msgstr "Left" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Center" msgstr "Centre" -#: view/theme/quattro/config.php:78 +#: view/theme/quattro/config.php:77 msgid "Color scheme" msgstr "Colour scheme" -#: view/theme/quattro/config.php:79 +#: view/theme/quattro/config.php:78 msgid "Posts font size" msgstr "Posts font size" -#: view/theme/quattro/config.php:80 +#: view/theme/quattro/config.php:79 msgid "Textareas font size" msgstr "Text areas font size" @@ -9861,31 +10295,31 @@ msgstr "Text areas font size" msgid "Comma separated list of helper forums" msgstr "Comma separated list of helper forums" -#: view/theme/vier/config.php:123 +#: view/theme/vier/config.php:122 msgid "Set style" msgstr "Set style" -#: view/theme/vier/config.php:124 +#: view/theme/vier/config.php:123 msgid "Community Pages" msgstr "Community pages" -#: view/theme/vier/config.php:125 view/theme/vier/theme.php:151 +#: view/theme/vier/config.php:124 view/theme/vier/theme.php:151 msgid "Community Profiles" msgstr "Community profiles" -#: view/theme/vier/config.php:126 +#: view/theme/vier/config.php:125 msgid "Help or @NewHere ?" msgstr "Help or @NewHere ?" -#: view/theme/vier/config.php:127 view/theme/vier/theme.php:373 +#: view/theme/vier/config.php:126 view/theme/vier/theme.php:373 msgid "Connect Services" msgstr "Connect services" -#: view/theme/vier/config.php:128 +#: view/theme/vier/config.php:127 msgid "Find Friends" msgstr "Find friends" -#: view/theme/vier/config.php:129 view/theme/vier/theme.php:181 +#: view/theme/vier/config.php:128 view/theme/vier/theme.php:181 msgid "Last users" msgstr "Last users" diff --git a/view/lang/en-gb/strings.php b/view/lang/en-gb/strings.php index ba74851c7..5f82e2c3c 100644 --- a/view/lang/en-gb/strings.php +++ b/view/lang/en-gb/strings.php @@ -37,6 +37,7 @@ $a->strings["Attending"] = [ ]; $a->strings["Not attending"] = "Not attending"; $a->strings["Might attend"] = "Might attend"; +$a->strings["Reshares"] = "Reshares"; $a->strings["Select"] = "Select"; $a->strings["Delete"] = "Delete"; $a->strings["View %s's profile @ %s"] = "View %s's profile @ %s"; @@ -54,6 +55,8 @@ $a->strings["View Photos"] = "View photos"; $a->strings["Network Posts"] = "Network posts"; $a->strings["View Contact"] = "View contact"; $a->strings["Send PM"] = "Send PM"; +$a->strings["Block"] = "Block"; +$a->strings["Ignore"] = "Ignore"; $a->strings["Poke"] = "Poke"; $a->strings["Connect/Follow"] = "Connect/Follow"; $a->strings["%s likes this."] = "%s likes this."; @@ -61,6 +64,7 @@ $a->strings["%s doesn't like this."] = "%s doesn't like this."; $a->strings["%s attends."] = "%s attends."; $a->strings["%s doesn't attend."] = "%s doesn't attend."; $a->strings["%s attends maybe."] = "%s may attend."; +$a->strings["%s reshared this."] = "%s reshared this."; $a->strings["and"] = "and"; $a->strings["and %d other people"] = "and %d other people"; $a->strings["%2\$d people like this"] = "%2\$d people like this"; @@ -73,6 +77,7 @@ $a->strings["%2\$d people don't attend"] = "%2\ $a->strings["%s don't attend."] = "%s don't attend."; $a->strings["%2\$d people attend maybe"] = "%2\$d people attend maybe"; $a->strings["%s attend maybe."] = "%s may be attending."; +$a->strings["%2\$d people reshared this"] = "%2\$d people reshared this"; $a->strings["Visible to everybody"] = "Visible to everybody"; $a->strings["Please enter a image/video/audio/webpage URL:"] = "Please enter an image/video/audio/webpage URL:"; $a->strings["Tag term:"] = "Tag term:"; @@ -195,474 +200,12 @@ $a->strings["Yes"] = "Yes"; $a->strings["Permission denied."] = "Permission denied."; $a->strings["Archives"] = "Archives"; $a->strings["show more"] = "Show more..."; -$a->strings["Theme settings updated."] = "Theme settings updated."; -$a->strings["Information"] = "Information"; -$a->strings["Overview"] = "Overview"; -$a->strings["Federation Statistics"] = "Federation statistics"; -$a->strings["Configuration"] = "Configuration"; -$a->strings["Site"] = "Site"; -$a->strings["Users"] = "Users"; -$a->strings["Addons"] = "Addons"; -$a->strings["Themes"] = "Theme selection"; -$a->strings["Additional features"] = "Additional features"; -$a->strings["Terms of Service"] = "Terms of Service"; -$a->strings["Database"] = "Database"; -$a->strings["DB updates"] = "DB updates"; -$a->strings["Inspect Queue"] = "Inspect queue"; -$a->strings["Inspect Deferred Workers"] = "Inspect deferred workers"; -$a->strings["Inspect worker Queue"] = "Inspect worker queue"; -$a->strings["Tools"] = "Tools"; -$a->strings["Contact Blocklist"] = "Contact blocklist"; -$a->strings["Server Blocklist"] = "Server blocklist"; -$a->strings["Delete Item"] = "Delete item"; -$a->strings["Logs"] = "Logs"; -$a->strings["View Logs"] = "View logs"; -$a->strings["Diagnostics"] = "Diagnostics"; -$a->strings["PHP Info"] = "PHP info"; -$a->strings["probe address"] = "Probe address"; -$a->strings["check webfinger"] = "Check webfinger"; -$a->strings["Admin"] = "Admin"; -$a->strings["Addon Features"] = "Addon features"; -$a->strings["User registrations waiting for confirmation"] = "User registrations awaiting confirmation"; -$a->strings["Administration"] = "Administration"; -$a->strings["Display Terms of Service"] = "Display Terms of Service"; -$a->strings["Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page."] = "Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page."; -$a->strings["Display Privacy Statement"] = "Display Privacy Statement"; -$a->strings["Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR."] = "Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR."; -$a->strings["Privacy Statement Preview"] = "Privacy Statement Preview"; -$a->strings["The Terms of Service"] = "Terms of Service"; -$a->strings["Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below."] = "Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] or lower."; -$a->strings["Save Settings"] = "Save settings"; -$a->strings["Blocked domain"] = "Blocked domain"; -$a->strings["The blocked domain"] = "Blocked domain"; -$a->strings["Reason for the block"] = "Reason for the block"; -$a->strings["The reason why you blocked this domain."] = "Reason why you blocked this domain."; -$a->strings["Delete domain"] = "Delete domain"; -$a->strings["Check to delete this entry from the blocklist"] = "Check to delete this entry from the blocklist"; -$a->strings["This page can be used to define a black list of servers from the federated network that are not allowed to interact with your node. For all entered domains you should also give a reason why you have blocked the remote server."] = "This page can be used to define a black list of servers from the federated network that are not allowed to interact with your node. For all entered domains you should also give a reason why you have blocked the remote server."; -$a->strings["The list of blocked servers will be made publically available on the /friendica page so that your users and people investigating communication problems can find the reason easily."] = "The list of blocked servers will publicly available on the Friendica page so that your users and people investigating communication problems can readily find the reason."; -$a->strings["Add new entry to block list"] = "Add new entry to block list"; -$a->strings["Server Domain"] = "Server domain"; -$a->strings["The domain of the new server to add to the block list. Do not include the protocol."] = "The domain of the new server to add to the block list. Do not include the protocol."; -$a->strings["Block reason"] = "Block reason"; -$a->strings["Add Entry"] = "Add entry"; -$a->strings["Save changes to the blocklist"] = "Save changes to the blocklist"; -$a->strings["Current Entries in the Blocklist"] = "Current entries in the blocklist"; -$a->strings["Delete entry from blocklist"] = "Delete entry from blocklist"; -$a->strings["Delete entry from blocklist?"] = "Delete entry from blocklist?"; -$a->strings["Server added to blocklist."] = "Server added to blocklist."; -$a->strings["Site blocklist updated."] = "Site blocklist updated."; -$a->strings["The contact has been blocked from the node"] = "The contact has been blocked from the node"; -$a->strings["Could not find any contact entry for this URL (%s)"] = "Could not find any contact entry for this URL (%s)"; -$a->strings["%s contact unblocked"] = [ - 0 => "%s contact unblocked", - 1 => "%s contacts unblocked", -]; -$a->strings["Remote Contact Blocklist"] = "Remote contact blocklist"; -$a->strings["This page allows you to prevent any message from a remote contact to reach your node."] = "This page allows you to prevent any message from a remote contact to reach your node."; -$a->strings["Block Remote Contact"] = "Block Remote Contact"; -$a->strings["select all"] = "select all"; -$a->strings["select none"] = "select none"; -$a->strings["Block"] = "Block"; -$a->strings["Unblock"] = "Unblock"; -$a->strings["No remote contact is blocked from this node."] = "No remote contact is blocked from this node."; -$a->strings["Blocked Remote Contacts"] = "Blocked remote contacts"; -$a->strings["Block New Remote Contact"] = "Block new remote contact"; -$a->strings["Photo"] = "Photo"; -$a->strings["Name"] = "Name:"; -$a->strings["Address"] = "Address"; -$a->strings["Profile URL"] = "Profile URL:"; -$a->strings["%s total blocked contact"] = [ - 0 => "%s total blocked contact", - 1 => "%s total blocked contacts", -]; -$a->strings["URL of the remote contact to block."] = "URL of the remote contact to block."; -$a->strings["Delete this Item"] = "Delete"; -$a->strings["On this page you can delete an item from your node. If the item is a top level posting, the entire thread will be deleted."] = "Here you can delete an item from this node. If the item is a top-level posting, the entire thread will be deleted."; -$a->strings["You need to know the GUID of the item. You can find it e.g. by looking at the display URL. The last part of http://example.com/display/123456 is the GUID, here 123456."] = "You need to know the global unique identifier (GUID) of the item, which you can find by looking at the display URL. The last part of http://example.com/display/123456 is the GUID: i.e. 123456."; -$a->strings["GUID"] = "GUID"; -$a->strings["The GUID of the item you want to delete."] = "GUID of item to be deleted."; -$a->strings["Item marked for deletion."] = "Item marked for deletion."; -$a->strings["unknown"] = "unknown"; -$a->strings["This page offers you some numbers to the known part of the federated social network your Friendica node is part of. These numbers are not complete but only reflect the part of the network your node is aware of."] = "This page offers you the amount of known part of the federated social network your Friendica node is part of. These numbers are not complete and only reflect the part of the network your node is aware of."; -$a->strings["The Auto Discovered Contact Directory feature is not enabled, it will improve the data displayed here."] = "The Auto Discovered Contact Directory feature is not enabled; enabling it will improve the data displayed here."; -$a->strings["Currently this node is aware of %d nodes with %d registered users from the following platforms:"] = "Currently this node is aware of %d nodes with %d registered users from the following platforms:"; -$a->strings["ID"] = "ID"; -$a->strings["Recipient Name"] = "Recipient name"; -$a->strings["Recipient Profile"] = "Recipient profile"; -$a->strings["Network"] = "Network"; -$a->strings["Created"] = "Created"; -$a->strings["Last Tried"] = "Last Tried"; -$a->strings["This page lists the content of the queue for outgoing postings. These are postings the initial delivery failed for. They will be resend later and eventually deleted if the delivery fails permanently."] = "This page lists the content of the queue for outgoing postings. These are postings the initial delivery failed for. They will be resend later and eventually deleted if the delivery fails permanently."; -$a->strings["Inspect Deferred Worker Queue"] = "Inspect Deferred Worker Queue"; -$a->strings["This page lists the deferred worker jobs. This are jobs that couldn't be executed at the first time."] = "This page lists the deferred worker jobs. These are jobs that couldn't initially be executed."; -$a->strings["Inspect Worker Queue"] = "Inspect Worker Queue"; -$a->strings["This page lists the currently queued worker jobs. These jobs are handled by the worker cronjob you've set up during install."] = "This page lists the currently queued worker jobs. These jobs are handled by the worker cronjob you've set up during install."; -$a->strings["Job Parameters"] = "Job Parameters"; -$a->strings["Priority"] = "Priority"; -$a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion..htconfig.php
. See the Config help page for help with the transition."] = "Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your configuration from .htconfig.php
. See the configuration help page for help with the transition.";
-$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."] = "Friendica's configuration is now stored in config/local.config.php; please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition.";
-$a->strings["%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."] = "%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help.";
-$a->strings["Normal Account"] = "Standard account";
-$a->strings["Automatic Follower Account"] = "Automatic follower account";
-$a->strings["Public Forum Account"] = "Public forum account";
-$a->strings["Automatic Friend Account"] = "Automatic friend account";
-$a->strings["Blog Account"] = "Blog account";
-$a->strings["Private Forum Account"] = "Private forum account";
-$a->strings["Message queues"] = "Message queues";
-$a->strings["Server Settings"] = "Server Settings";
-$a->strings["Summary"] = "Summary";
-$a->strings["Registered users"] = "Registered users";
-$a->strings["Pending registrations"] = "Pending registrations";
-$a->strings["Version"] = "Version";
-$a->strings["Active addons"] = "Active addons";
-$a->strings["Can not parse base url. Must have at least .htconfig.php
. See the Config help page for help with the transition."] = "Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your configuration from .htconfig.php
. See the configuration help page for help with the transition.";
+$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."] = "Friendica's configuration is now stored in config/local.config.php; please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition.";
+$a->strings["%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."] = "%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help.";
+$a->strings["Friendica's system.basepath was updated from '%s' to '%s'. Please remove the system.basepath from your db to avoid differences."] = "The system.basepath was updated from '%s' to '%s'. Please remove the system.basepath from your db to avoid differences.";
+$a->strings["Friendica's current system.basepath '%s' is wrong and the config file '%s' isn't used."] = "The current system.basepath '%s' is wrong and the config file '%s' isn't used.";
+$a->strings["Friendica's current system.basepath '%s' is not equal to the config file '%s'. Please fix your configuration."] = "The current system.basepath '%s' is not equal to the config file '%s'. Please fix your configuration.";
+$a->strings["Normal Account"] = "Standard account";
+$a->strings["Automatic Follower Account"] = "Automatic follower account";
+$a->strings["Public Forum Account"] = "Public forum account";
+$a->strings["Automatic Friend Account"] = "Automatic friend account";
+$a->strings["Blog Account"] = "Blog account";
+$a->strings["Private Forum Account"] = "Private forum account";
+$a->strings["Message queues"] = "Message queues";
+$a->strings["Server Settings"] = "Server Settings";
+$a->strings["Summary"] = "Summary";
+$a->strings["Registered users"] = "Registered users";
+$a->strings["Pending registrations"] = "Pending registrations";
+$a->strings["Version"] = "Version";
+$a->strings["Active addons"] = "Active addons";
+$a->strings["Theme settings updated."] = "Theme settings updated.";
+$a->strings["Theme %s disabled."] = "Theme %s disabled.";
+$a->strings["Theme %s successfully enabled."] = "Theme %s successfully enabled.";
+$a->strings["Theme %s failed to install."] = "Theme %s failed to install.";
+$a->strings["Screenshot"] = "Screenshot";
+$a->strings["Themes"] = "Theme selection";
+$a->strings["Unknown theme."] = "Unknown theme.";
+$a->strings["Reload active themes"] = "Reload active themes";
+$a->strings["No themes found on the system. They should be placed in %1\$s"] = "No themes found on the system. They should be placed in %1\$s";
+$a->strings["[Experimental]"] = "[Experimental]";
+$a->strings["[Unsupported]"] = "[Unsupported]";
+$a->strings["The Terms of Service settings have been updated."] = "The Terms of Service settings have been updated.";
+$a->strings["Display Terms of Service"] = "Display Terms of Service";
+$a->strings["Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page."] = "Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page.";
+$a->strings["Display Privacy Statement"] = "Display Privacy Statement";
+$a->strings["Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR."] = "Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR.";
+$a->strings["Privacy Statement Preview"] = "Privacy Statement Preview";
+$a->strings["The Terms of Service"] = "Terms of Service";
+$a->strings["Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below."] = "Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] or lower.";
+$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tthe administrator of %2\$s has set up an account for you."] = "\n\t\t\tDear %1\$s,\n\t\t\t\tThe administrator of %2\$s has set up an account for you.";
+$a->strings["\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tIf you ever want to delete your account, you can do so at %1\$s/removeme\n\n\t\t\tThank you and welcome to %4\$s."] = "\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tIf you ever want to delete your account, you can do so at %1\$s/removeme\n\n\t\t\tThank you and welcome to %4\$s.";
+$a->strings["%s user blocked"] = [
+ 0 => "%s user blocked",
+ 1 => "%s users blocked",
+];
+$a->strings["%s user unblocked"] = [
+ 0 => "%s user unblocked",
+ 1 => "%s users unblocked",
+];
+$a->strings["You can't remove yourself"] = "You can't remove yourself";
+$a->strings["%s user deleted"] = [
+ 0 => "%s user deleted",
+ 1 => "%s users deleted",
+];
+$a->strings["User \"%s\" deleted"] = "User \"%s\" deleted";
+$a->strings["User \"%s\" blocked"] = "User \"%s\" blocked";
+$a->strings["User \"%s\" unblocked"] = "User \"%s\" unblocked";
+$a->strings["Private Forum"] = "Private Forum";
+$a->strings["Relay"] = "Relay";
+$a->strings["Register date"] = "Registration date";
+$a->strings["Last login"] = "Last login";
+$a->strings["Last item"] = "Last item";
+$a->strings["Type"] = "Type";
+$a->strings["Add User"] = "Add user";
+$a->strings["User registrations waiting for confirm"] = "User registrations awaiting confirmation";
+$a->strings["User waiting for permanent deletion"] = "User awaiting permanent deletion";
+$a->strings["Request date"] = "Request date";
+$a->strings["No registrations."] = "No registrations.";
+$a->strings["Note from the user"] = "Note from the user";
+$a->strings["Deny"] = "Deny";
+$a->strings["User blocked"] = "User blocked";
+$a->strings["Site admin"] = "Site admin";
+$a->strings["Account expired"] = "Account expired";
+$a->strings["New User"] = "New user";
+$a->strings["Permanent deletion"] = "Permanent deletion";
+$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Selected users will be deleted!\\n\\nEverything these users has posted on this site will be permanently deleted!\\n\\nAre you sure?";
+$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?";
+$a->strings["Name of the new user."] = "Name of the new user.";
+$a->strings["Nickname"] = "Nickname";
+$a->strings["Nickname of the new user."] = "Nickname of the new user.";
+$a->strings["Email address of the new user."] = "Email address of the new user.";
+$a->strings["No friends to display."] = "No friends to display.";
+$a->strings["No installed applications."] = "No installed applications.";
+$a->strings["Applications"] = "Applications";
$a->strings["Item was not found."] = "Item was not found.";
+$a->strings["Source input"] = "Source input";
+$a->strings["BBCode::toPlaintext"] = "BBCode::toPlaintext";
+$a->strings["BBCode::convert (raw HTML)"] = "BBCode::convert (raw HTML)";
+$a->strings["BBCode::convert"] = "BBCode::convert";
+$a->strings["BBCode::convert => HTML::toBBCode"] = "BBCode::convert => HTML::toBBCode";
+$a->strings["BBCode::toMarkdown"] = "BBCode::toMarkdown";
+$a->strings["BBCode::toMarkdown => Markdown::convert"] = "BBCode::toMarkdown => Markdown::convert";
+$a->strings["BBCode::toMarkdown => Markdown::toBBCode"] = "BBCode::toMarkdown => Markdown::toBBCode";
+$a->strings["BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"] = "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode";
+$a->strings["Item Body"] = "Item Body";
+$a->strings["Item Tags"] = "Item Tags";
+$a->strings["Source input (Diaspora format)"] = "Source input (diaspora* format)";
+$a->strings["Markdown::convert (raw HTML)"] = "Markdown::convert (raw HTML)";
+$a->strings["Markdown::convert"] = "Markdown::convert";
+$a->strings["Markdown::toBBCode"] = "Markdown::toBBCode";
+$a->strings["Raw HTML input"] = "Raw HTML input";
+$a->strings["HTML Input"] = "HTML input";
+$a->strings["HTML::toBBCode"] = "HTML::toBBCode";
+$a->strings["HTML::toBBCode => BBCode::convert"] = "HTML::toBBCode => BBCode::convert";
+$a->strings["HTML::toBBCode => BBCode::convert (raw HTML)"] = "HTML::toBBCode => BBCode::convert (raw HTML)";
+$a->strings["HTML::toMarkdown"] = "HTML::toMarkdown";
+$a->strings["HTML::toPlaintext"] = "HTML::toPlaintext";
+$a->strings["Source text"] = "Source text";
+$a->strings["BBCode"] = "BBCode";
+$a->strings["Markdown"] = "Markdown";
+$a->strings["HTML"] = "HTML";
+$a->strings["Overview"] = "Overview";
+$a->strings["Configuration"] = "Configuration";
+$a->strings["Database"] = "Database";
+$a->strings["DB updates"] = "DB updates";
+$a->strings["Inspect Deferred Workers"] = "Inspect deferred workers";
+$a->strings["Inspect worker Queue"] = "Inspect worker queue";
+$a->strings["Tools"] = "Tools";
+$a->strings["Contact Blocklist"] = "Contact blocklist";
+$a->strings["Diagnostics"] = "Diagnostics";
+$a->strings["PHP Info"] = "PHP info";
+$a->strings["probe address"] = "Probe address";
+$a->strings["check webfinger"] = "Check webfinger";
+$a->strings["Item Source"] = "Item source";
+$a->strings["Babel"] = "Babel";
+$a->strings["Addon Features"] = "Addon features";
+$a->strings["User registrations waiting for confirmation"] = "User registrations awaiting confirmation";
+$a->strings["This page is missing a url parameter."] = "This page is missing a URL parameter.";
+$a->strings["The post was created"] = "The post was created";
$a->strings["%d contact edited."] = [
0 => "%d contact edited.",
1 => "%d contacts edited.",
@@ -2055,6 +1997,7 @@ $a->strings["Comma separated list of keywords that should not be converted to ha
$a->strings["Actions"] = "Actions";
$a->strings["Suggestions"] = "Suggestions";
$a->strings["Suggest potential friends"] = "Suggest potential friends";
+$a->strings["All Contacts"] = "All contacts";
$a->strings["Show all contacts"] = "Show all contacts";
$a->strings["Unblocked"] = "Unblocked";
$a->strings["Only show unblocked contacts"] = "Only show unblocked contacts";
@@ -2084,9 +2027,62 @@ $a->strings["Toggle Blocked status"] = "Toggle blocked status";
$a->strings["Toggle Ignored status"] = "Toggle ignored status";
$a->strings["Toggle Archive status"] = "Toggle archive status";
$a->strings["Delete contact"] = "Delete contact";
+$a->strings["Credits"] = "Credits";
+$a->strings["Friendica is a community project, that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!"] = "Friendica is a community project that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!";
+$a->strings["No entries (some entries may be hidden)."] = "No entries (entries may be hidden).";
+$a->strings["Find on this site"] = "Find on this site";
+$a->strings["Results for:"] = "Results for:";
+$a->strings["Site Directory"] = "Site directory";
+$a->strings["You must be logged in to use this module"] = "You must be logged in to use this module";
+$a->strings["Source URL"] = "Source URL";
+$a->strings["Filetag %s saved to item"] = "File-tag %s saved to item";
+$a->strings["- select -"] = "- select -";
+$a->strings["No given contact."] = "No given contact.";
+$a->strings["Installed addons/apps:"] = "Installed addons/apps:";
+$a->strings["No installed addons/apps"] = "No installed addons/apps";
+$a->strings["Read about the Terms of Service of this node."] = "Read about the Terms of Service of this node.";
+$a->strings["On this server the following remote servers are blocked."] = "On this server the following remote servers are blocked.";
+$a->strings["This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s."] = "This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s.";
+$a->strings["Please visit Friendi.ca to learn more about the Friendica project."] = "Please visit Friendi.ca to learn more about the Friendica project.";
+$a->strings["Bug reports and issues: please visit"] = "Bug reports and issues: please visit";
+$a->strings["the bugtracker at github"] = "the bugtracker at github";
+$a->strings["Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca"] = "Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca";
+$a->strings["Group created."] = "Group created.";
+$a->strings["Could not create group."] = "Could not create group.";
+$a->strings["Group not found."] = "Group not found.";
+$a->strings["Group name changed."] = "Group name changed.";
+$a->strings["Unknown group."] = "Unknown group.";
+$a->strings["Contact is unavailable."] = "Contact is unavailable.";
+$a->strings["Contact is deleted."] = "Contact is deleted.";
+$a->strings["Contact is blocked, unable to add it to a group."] = "Contact is blocked, unable to add it to a group.";
+$a->strings["Unable to add the contact to the group."] = "Unable to add contact to group.";
+$a->strings["Contact successfully added to group."] = "Contact successfully added to group.";
+$a->strings["Unable to remove the contact from the group."] = "Unable to remove contact from group.";
+$a->strings["Contact successfully removed from group."] = "Contact removed from group.";
+$a->strings["Unknown group command."] = "Unknown group command.";
+$a->strings["Bad request."] = "Bad request.";
+$a->strings["Save Group"] = "Save group";
+$a->strings["Filter"] = "Filter";
+$a->strings["Create a group of contacts/friends."] = "Create a group of contacts/friends.";
+$a->strings["Group removed."] = "Group removed.";
+$a->strings["Unable to remove group."] = "Unable to remove group.";
+$a->strings["Delete Group"] = "Delete group";
+$a->strings["Edit Group Name"] = "Edit group name";
+$a->strings["Members"] = "Members";
+$a->strings["Remove contact from group"] = "Remove contact from group";
+$a->strings["Add contact to group"] = "Add contact to group";
+$a->strings["Help:"] = "Help:";
+$a->strings["Welcome to %s"] = "Welcome to %s";
$a->strings["Friendica Communications Server - Setup"] = "Friendica Communications Server - Setup";
$a->strings["System check"] = "System check";
$a->strings["Check again"] = "Check again";
+$a->strings["Base settings"] = "Base settings";
+$a->strings["Host name"] = "Host name";
+$a->strings["Overwrite this field in case the determinated hostname isn't right, otherweise leave it as is."] = "Overwrite this field in case the hostname is incorrect, otherwise leave it as is.";
+$a->strings["Base path to installation"] = "Base path to installation";
+$a->strings["If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."] = "If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot.";
+$a->strings["Sub path of the URL"] = "URL Subpath";
+$a->strings["Overwrite this field in case the sub path determination isn't right, otherwise leave it as is. Leaving this field blank means the installation is at the base URL without sub path."] = "Overwrite this field in case the subpath determination isn't right, otherwise leave it as is. Leaving this field blank means the installation is at the base URL without subpath.";
$a->strings["Database connection"] = "Database connection";
$a->strings["In order to install Friendica we need to know how to connect to your database."] = "In order to install Friendica we need to know how to connect to your database.";
$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Please contact your hosting provider or site administrator if you have questions about these settings.";
@@ -2096,10 +2092,10 @@ $a->strings["Database Login Name"] = "Database login name";
$a->strings["Database Login Password"] = "Database login password";
$a->strings["For security reasons the password must not be empty"] = "For security reasons the password must not be empty";
$a->strings["Database Name"] = "Database name";
-$a->strings["Site administrator email address"] = "Site administrator email address";
-$a->strings["Your account email address must match this in order to use the web admin panel."] = "Your account email address must match this in order to use the web admin panel.";
$a->strings["Please select a default timezone for your website"] = "Please select a default time zone for your website";
$a->strings["Site settings"] = "Site settings";
+$a->strings["Site administrator email address"] = "Site administrator email address";
+$a->strings["Your account email address must match this in order to use the web admin panel."] = "Your account email address must match this in order to use the web admin panel.";
$a->strings["System Language:"] = "System language:";
$a->strings["Set the default language for your Friendica installation interface and to send emails."] = "Set the default language for your Friendica installation interface and email communication.";
$a->strings["Your Friendica site database has been installed."] = "Your Friendica site database has been installed.";
@@ -2107,7 +2103,34 @@ $a->strings["Installation finished"] = "Installation finished";
$a->strings["Use an application on a mobile device to get two-factor authentication codes when prompted on login.
"] = "Use an application on a mobile device to get two-factor authentication codes when prompted on login.
"; +$a->strings["Authenticator app"] = "Authenticator app"; +$a->strings["Configured"] = "Configured"; +$a->strings["Not Configured"] = "Not configured"; +$a->strings["You haven't finished configuring your authenticator app.
"] = "You haven't finished configuring your authenticator app.
"; +$a->strings["Your authenticator app is correctly configured.
"] = "Your authenticator app is correctly configured.
"; +$a->strings["Recovery codes"] = "Recovery codes"; +$a->strings["Remaining valid codes"] = "Remaining valid codes"; +$a->strings["These one-use codes can replace an authenticator app code in case you have lost access to it.
"] = "These one-use codes can replace an authenticator app code in case you have lost access to it.
"; +$a->strings["Current password:"] = "Current password:"; +$a->strings["You need to provide your current password to change two-factor authentication settings."] = "You need to provide your current password to change two-factor authentication settings."; +$a->strings["Enable two-factor authentication"] = "Enable two-factor authentication"; +$a->strings["Disable two-factor authentication"] = "Disable two-factor authentication"; +$a->strings["Show recovery codes"] = "Show recovery codes"; +$a->strings["Finish app configuration"] = "Finish app configuration"; +$a->strings["Please enter your password to access this page."] = "Please enter your password to access this page."; +$a->strings["New recovery codes successfully generated."] = "New recovery codes successfully generated."; +$a->strings["Two-factor recovery codes"] = "Two-factor recovery codes"; +$a->strings["Recovery codes can be used to access your account in the event you lose access to your device and cannot receive two-factor authentication codes.
Put these in a safe spot! If you lose your device and don’t have the recovery codes you will lose access to your account.
"] = "Recovery codes can be used to access your account in the event you lose access to your device and cannot receive two-factor authentication codes.
Put these in a safe place! If you lose your device and don’t have the recovery codes you will lose access to your account.
"; +$a->strings["When you generate new recovery codes, you must copy the new codes. Your old codes won’t work anymore."] = "When you generate new recovery codes, you must copy the new codes. Your old codes won’t work anymore."; +$a->strings["Generate new recovery codes"] = "Generate new recovery codes"; +$a->strings["Next: Verification"] = "Next: Verification"; +$a->strings["Two-factor authentication successfully activated."] = "Two-factor authentication successfully activated."; +$a->strings["Invalid code, please retry."] = "Invalid code, please try again."; +$a->strings["Or you can submit the authentication settings manually:
\nOr you can submit the authentication settings manually:
\nPlease scan this QR Code with your authenticator app and submit the provided code.
"] = "Please scan this QR Code with your authenticator app and submit the provided code.
"; +$a->strings["Or you can open the following URL in your mobile devicde:
"] = "Or you can open the following URL in your mobile device:
"; +$a->strings["Please enter a code from your authentication app"] = "Please enter a code from your authentication app"; +$a->strings["Verify code and enable two-factor authentication"] = "Verify code and enable two-factor authentication"; +$a->strings["Bad Request"] = "Bad Request"; +$a->strings["Unauthorized"] = "Unauthorized"; +$a->strings["Forbidden"] = "Forbidden"; +$a->strings["Not Found"] = "Not found"; +$a->strings["Internal Server Error"] = "Internal Server Error"; +$a->strings["Service Unavailable"] = "Service Unavailable"; +$a->strings["The server cannot or will not process the request due to an apparent client error."] = "The server cannot process the request due to an apparent client error."; +$a->strings["Authentication is required and has failed or has not yet been provided."] = "Authentication is required and has failed or has not yet been provided."; +$a->strings["The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource, or may need an account."] = "The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource, or may need an account."; +$a->strings["The requested resource could not be found but may be available in the future."] = "The requested resource could not be found but may be available in the future."; +$a->strings["An unexpected condition was encountered and no more specific message is suitable."] = "An unexpected condition was encountered and no more specific message is available."; +$a->strings["The server is currently unavailable (because it is overloaded or down for maintenance). Please try again later."] = "The server is currently unavailable (because it is overloaded or down for maintenance). Please try again later."; +$a->strings["Go back"] = "Go back"; $a->strings["At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node's user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication."] = "At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node's user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication."; $a->strings["This data is required for communication and is passed on to the nodes of the communication partners and is stored there. Users can enter additional private data that may be transmitted to the communication partners accounts."] = "This information is required for communication and is passed on to the nodes of the communication partners and stored there. Users can enter additional personal information that may be transmitted to the communication partner's accounts."; $a->strings["At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1\$s/removeme. The deletion of the account will be permanent. Deletion of the data will also be requested from the nodes of the communication partners."] = "At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1\$s/removeme. The deletion of the account will be permanent. Deletion of the data will also be requested from the nodes of the communication partners."; $a->strings["Privacy Statement"] = "Privacy Statement"; +$a->strings["Remaining recovery codes: %d"] = "Remaining recovery codes: %d"; +$a->strings["Two-factor recovery"] = "Two-factor recovery"; +$a->strings["You can enter one of your one-time recovery codes in case you lost access to your mobile device.
"] = "You can enter one of your one-time recovery codes in case you lost access to your mobile device.
"; +$a->strings["Don’t have your phone? Enter a two-factor recovery code"] = "Don’t have your phone? Enter a two-factor recovery code"; +$a->strings["Please enter a recovery code"] = "Please enter a recovery code"; +$a->strings["Submit recovery code and complete login"] = "Submit recovery code and complete login"; +$a->strings["Open the two-factor authentication app on your device to get an authentication code and verify your identity.
"] = "Open the two-factor authentication app on your device to get an authentication code and verify your identity.
"; +$a->strings["Verify code and complete login"] = "Verify code and complete login"; $a->strings["This entry was edited"] = "This entry was edited"; +$a->strings["Private Message"] = "Private message"; $a->strings["Delete locally"] = "Delete locally"; $a->strings["Delete globally"] = "Delete globally"; $a->strings["Remove locally"] = "Remove locally"; @@ -2218,6 +2296,8 @@ $a->strings["Custom"] = "Custom"; $a->strings["Note"] = "Note"; $a->strings["Check image permissions if all users are allowed to see the image"] = "Check image permissions that all everyone is allowed to see the image"; $a->strings["Select color scheme"] = "Select colour scheme"; +$a->strings["Copy or paste schemestring"] = "Copy or paste theme string"; +$a->strings["You can copy this string to share your theme with others. Pasting here applies the schemestring"] = "You can copy this string to share your theme with others. Pasting here applies the theme string"; $a->strings["Navigation bar background color"] = "Navigation bar background colour:"; $a->strings["Navigation bar icon color "] = "Navigation bar icon colour:"; $a->strings["Link color"] = "Link colour:"; diff --git a/view/lang/en-us/messages.po b/view/lang/en-us/messages.po index 2ed2aaaa7..fa5865d38 100644 --- a/view/lang/en-us/messages.po +++ b/view/lang/en-us/messages.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-02-15 09:33-0500\n" -"PO-Revision-Date: 2019-03-11 16:13+0000\n" +"POT-Creation-Date: 2019-05-15 08:55-0400\n" +"PO-Revision-Date: 2019-06-16 06:56+0000\n" "Last-Translator: Andy H3.htconfig.php
. See the Config help page for "
-"help with the transition."
-msgstr "Friendica's configuration is now stored in config/local.config.php; please copy config/local-sample.config.php and move your config from config/local.ini.php. See the Config help page for help with the transition..htconfig.php
. See the Config help page for help with the transition."
-
-#: mod/admin.php:943
-#, php-format
-msgid ""
-"Friendica's configuration now is stored in config/local.config.php, please "
-"copy config/local-sample.config.php and move your config from "
-"config/local.ini.php
. See the Config help "
-"page for help with the transition."
-msgstr "Friendica's configuration is now stored in config/local.config.php; please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."
-
-#: mod/admin.php:950
-#, php-format
-msgid ""
-"%s is not reachable on your system. This is a severe "
-"configuration issue that prevents server to server communication. See the installation page for help."
-msgstr "%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."
-
-#: mod/admin.php:956
-msgid "Normal Account"
-msgstr "Standard account"
-
-#: mod/admin.php:957
-msgid "Automatic Follower Account"
-msgstr "Automatic follower account"
-
-#: mod/admin.php:958
-msgid "Public Forum Account"
-msgstr "Public forum account"
-
-#: mod/admin.php:959
-msgid "Automatic Friend Account"
-msgstr "Automatic friend account"
-
-#: mod/admin.php:960
-msgid "Blog Account"
-msgstr "Blog account"
-
-#: mod/admin.php:961
-msgid "Private Forum Account"
-msgstr "Private forum account"
-
-#: mod/admin.php:984
-msgid "Message queues"
-msgstr "Message queues"
-
-#: mod/admin.php:990
-msgid "Server Settings"
-msgstr "Server Settings"
-
-#: mod/admin.php:999
-msgid "Summary"
-msgstr "Summary"
-
-#: mod/admin.php:1001
-msgid "Registered users"
-msgstr "Signed up users"
-
-#: mod/admin.php:1003
-msgid "Pending registrations"
-msgstr "Pending registrations"
-
-#: mod/admin.php:1004
-msgid "Version"
-msgstr "Version"
-
-#: mod/admin.php:1009
-msgid "Active addons"
-msgstr "Active addons"
-
-#: mod/admin.php:1042
-msgid "Can not parse base url. Must have at least .htconfig.php
. See the Config help page for "
+"help with the transition."
+msgstr "Friendica's configuration is now stored in config/local.config.php; please copy config/local-sample.config.php and move your config from config/local.ini.php. See the Config help page for help with the transition..htconfig.php
. See the Config help page for help with the transition."
+
+#: src/Module/Admin/Summary.php:67
+#, php-format
+msgid ""
+"Friendica's configuration now is stored in config/local.config.php, please "
+"copy config/local-sample.config.php and move your config from "
+"config/local.ini.php
. See the Config help "
+"page for help with the transition."
+msgstr "Friendica's configuration is now stored in config/local.config.php; please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."
+
+#: src/Module/Admin/Summary.php:73
+#, php-format
+msgid ""
+"%s is not reachable on your system. This is a severe "
+"configuration issue that prevents server to server communication. See the installation page for help."
+msgstr "%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."
+
+#: src/Module/Admin/Summary.php:89
+#, php-format
+msgid ""
+"Friendica's system.basepath was updated from '%s' to '%s'. Please remove the"
+" system.basepath from your db to avoid differences."
+msgstr "The system.basepath was updated from '%s' to '%s'. Please remove the system.basepath from your db to avoid differences."
+
+#: src/Module/Admin/Summary.php:97
+#, php-format
+msgid ""
+"Friendica's current system.basepath '%s' is wrong and the config file '%s' "
+"isn't used."
+msgstr "The current system.basepath '%s' is wrong and the config file '%s' isn't used."
+
+#: src/Module/Admin/Summary.php:105
+#, php-format
+msgid ""
+"Friendica's current system.basepath '%s' is not equal to the config file "
+"'%s'. Please fix your configuration."
+msgstr "The current system.basepath '%s' is not equal to the config file '%s'. Please fix your configuration."
+
+#: src/Module/Admin/Summary.php:112
+msgid "Normal Account"
+msgstr "Standard account"
+
+#: src/Module/Admin/Summary.php:113
+msgid "Automatic Follower Account"
+msgstr "Automatic follower account"
+
+#: src/Module/Admin/Summary.php:114
+msgid "Public Forum Account"
+msgstr "Public forum account"
+
+#: src/Module/Admin/Summary.php:115
+msgid "Automatic Friend Account"
+msgstr "Automatic friend account"
+
+#: src/Module/Admin/Summary.php:116
+msgid "Blog Account"
+msgstr "Blog account"
+
+#: src/Module/Admin/Summary.php:117
+msgid "Private Forum Account"
+msgstr "Private forum account"
+
+#: src/Module/Admin/Summary.php:141
+msgid "Message queues"
+msgstr "Message queues"
+
+#: src/Module/Admin/Summary.php:147
+msgid "Server Settings"
+msgstr "Server Settings"
+
+#: src/Module/Admin/Summary.php:161
+msgid "Summary"
+msgstr "Summary"
+
+#: src/Module/Admin/Summary.php:163
+msgid "Registered users"
+msgstr "Signed up users"
+
+#: src/Module/Admin/Summary.php:165
+msgid "Pending registrations"
+msgstr "Pending registrations"
+
+#: src/Module/Admin/Summary.php:166
+msgid "Version"
+msgstr "Version"
+
+#: src/Module/Admin/Summary.php:170
+msgid "Active addons"
+msgstr "Active addons"
+
+#: src/Module/Admin/Themes/Details.php:32 src/Module/Admin/Themes/Embed.php:46
+msgid "Theme settings updated."
+msgstr "Theme settings updated."
+
+#: src/Module/Admin/Themes/Details.php:71 src/Module/Admin/Themes/Index.php:47
+#, php-format
+msgid "Theme %s disabled."
+msgstr "Theme %s disabled."
+
+#: src/Module/Admin/Themes/Details.php:73 src/Module/Admin/Themes/Index.php:49
+#, php-format
+msgid "Theme %s successfully enabled."
+msgstr "Theme %s successfully enabled."
+
+#: src/Module/Admin/Themes/Details.php:75 src/Module/Admin/Themes/Index.php:51
+#, php-format
+msgid "Theme %s failed to install."
+msgstr "Theme %s failed to install."
+
+#: src/Module/Admin/Themes/Details.php:97
+msgid "Screenshot"
+msgstr "Screenshot"
+
+#: src/Module/Admin/Themes/Details.php:105
+#: src/Module/Admin/Themes/Index.php:94 src/Module/BaseAdminModule.php:83
+msgid "Themes"
+msgstr "Theme selection"
+
+#: src/Module/Admin/Themes/Embed.php:67
+msgid "Unknown theme."
+msgstr "Unknown theme."
+
+#: src/Module/Admin/Themes/Index.php:96
+msgid "Reload active themes"
+msgstr "Reload active themes"
+
+#: src/Module/Admin/Themes/Index.php:101
+#, php-format
+msgid "No themes found on the system. They should be placed in %1$s"
+msgstr "No themes found on the system. They should be placed in %1$s"
+
+#: src/Module/Admin/Themes/Index.php:102
+msgid "[Experimental]"
+msgstr "[Experimental]"
+
+#: src/Module/Admin/Themes/Index.php:103
+msgid "[Unsupported]"
+msgstr "[Unsupported]"
+
+#: src/Module/Admin/Tos.php:30
+msgid "The Terms of Service settings have been updated."
+msgstr "The Terms of Service settings have been updated."
+
+#: src/Module/Admin/Tos.php:44
+msgid "Display Terms of Service"
+msgstr "Display Terms of Service"
+
+#: src/Module/Admin/Tos.php:44
+msgid ""
+"Enable the Terms of Service page. If this is enabled a link to the terms "
+"will be added to the registration form and the general information page."
+msgstr "Enable the Terms of Service page. If this is enabled, a link to the terms will be added to the registration form and to the general information page."
+
+#: src/Module/Admin/Tos.php:45
+msgid "Display Privacy Statement"
+msgstr "Display Privacy Statement"
+
+#: src/Module/Admin/Tos.php:45
+#, php-format
+msgid ""
+"Show some informations regarding the needed information to operate the node "
+"according e.g. to EU-GDPR."
+msgstr "Show some information needed, for example, to comply with EU-GDPR."
+
+#: src/Module/Admin/Tos.php:46
+msgid "Privacy Statement Preview"
+msgstr "Privacy Statement Preview"
+
+#: src/Module/Admin/Tos.php:48
+msgid "The Terms of Service"
+msgstr "Terms of Service"
+
+#: src/Module/Admin/Tos.php:48
+msgid ""
+"Enter the Terms of Service for your node here. You can use BBCode. Headers "
+"of sections should be [h2] and below."
+msgstr "Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] or less."
+
+#: src/Module/Admin/Users.php:48
+#, php-format
+msgid ""
+"\n"
+"\t\t\tDear %1$s,\n"
+"\t\t\t\tthe administrator of %2$s has set up an account for you."
+msgstr "\n\t\t\tDear %1$s,\n\t\t\t\tThe administrator of %2$s has set up an account for you."
+
+#: src/Module/Admin/Users.php:51
+#, php-format
+msgid ""
+"\n"
+"\t\t\tThe login details are as follows:\n"
+"\n"
+"\t\t\tSite Location:\t%1$s\n"
+"\t\t\tLogin Name:\t\t%2$s\n"
+"\t\t\tPassword:\t\t%3$s\n"
+"\n"
+"\t\t\tYou may change your password from your account \"Settings\" page after logging\n"
+"\t\t\tin.\n"
+"\n"
+"\t\t\tPlease take a few moments to review the other account settings on that page.\n"
+"\n"
+"\t\t\tYou may also wish to add some basic information to your default profile\n"
+"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n"
+"\n"
+"\t\t\tWe recommend setting your full name, adding a profile photo,\n"
+"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n"
+"\t\t\tperhaps what country you live in; if you do not wish to be more specific\n"
+"\t\t\tthan that.\n"
+"\n"
+"\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n"
+"\t\t\tIf you are new and do not know anybody here, they may help\n"
+"\t\t\tyou to make some new and interesting friends.\n"
+"\n"
+"\t\t\tIf you ever want to delete your account, you can do so at %1$s/removeme\n"
+"\n"
+"\t\t\tThank you and welcome to %4$s."
+msgstr "\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1$s\n\t\t\tLogin Name:\t\t%2$s\n\t\t\tPassword:\t\t%3$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tIf you ever want to delete your account, you can do so at %1$s/removeme\n\n\t\t\tThank you and welcome to %4$s."
+
+#: src/Module/Admin/Users.php:96
+#, php-format
+msgid "%s user blocked"
+msgid_plural "%s users blocked"
+msgstr[0] "%s user blocked"
+msgstr[1] "%s users blocked"
+
+#: src/Module/Admin/Users.php:102
+#, php-format
+msgid "%s user unblocked"
+msgid_plural "%s users unblocked"
+msgstr[0] "%s user unblocked"
+msgstr[1] "%s users unblocked"
+
+#: src/Module/Admin/Users.php:110 src/Module/Admin/Users.php:160
+msgid "You can't remove yourself"
+msgstr "You can't remove yourself"
+
+#: src/Module/Admin/Users.php:114
+#, php-format
+msgid "%s user deleted"
+msgid_plural "%s users deleted"
+msgstr[0] "%s user deleted"
+msgstr[1] "%s users deleted"
+
+#: src/Module/Admin/Users.php:158
+#, php-format
+msgid "User \"%s\" deleted"
+msgstr "User \"%s\" deleted"
+
+#: src/Module/Admin/Users.php:167
+#, php-format
+msgid "User \"%s\" blocked"
+msgstr "User \"%s\" blocked"
+
+#: src/Module/Admin/Users.php:173
+#, php-format
+msgid "User \"%s\" unblocked"
+msgstr "User \"%s\" unblocked"
+
+#: src/Module/Admin/Users.php:226
+msgid "Private Forum"
+msgstr "Private Forum"
+
+#: src/Module/Admin/Users.php:233
+msgid "Relay"
+msgstr "Relay"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Register date"
+msgstr "Registration date"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Last login"
+msgstr "Last login"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Last item"
+msgstr "Last item"
+
+#: src/Module/Admin/Users.php:272
+msgid "Type"
+msgstr "Type"
+
+#: src/Module/Admin/Users.php:279
+msgid "Add User"
+msgstr "Add user"
+
+#: src/Module/Admin/Users.php:281
+msgid "User registrations waiting for confirm"
+msgstr "User registrations awaiting confirmation"
+
+#: src/Module/Admin/Users.php:282
+msgid "User waiting for permanent deletion"
+msgstr "User awaiting permanent deletion"
+
+#: src/Module/Admin/Users.php:283
+msgid "Request date"
+msgstr "Request date"
+
+#: src/Module/Admin/Users.php:284
+msgid "No registrations."
+msgstr "No registrations."
+
+#: src/Module/Admin/Users.php:285
+msgid "Note from the user"
+msgstr "Note from the user"
+
+#: src/Module/Admin/Users.php:287
+msgid "Deny"
+msgstr "Deny"
+
+#: src/Module/Admin/Users.php:290
+msgid "User blocked"
+msgstr "User blocked"
+
+#: src/Module/Admin/Users.php:292
+msgid "Site admin"
+msgstr "Site admin"
+
+#: src/Module/Admin/Users.php:293
+msgid "Account expired"
+msgstr "Account expired"
+
+#: src/Module/Admin/Users.php:296
+msgid "New User"
+msgstr "New user"
+
+#: src/Module/Admin/Users.php:297
+msgid "Permanent deletion"
+msgstr "Permanent deletion"
+
+#: src/Module/Admin/Users.php:302
+msgid ""
+"Selected users will be deleted!\\n\\nEverything these users had posted on "
+"this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr "Selected users will be deleted!\\n\\nEverything these users have posted on this site will be permanently deleted!\\n\\nAre you sure?"
+
+#: src/Module/Admin/Users.php:303
+msgid ""
+"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
+"site will be permanently deleted!\\n\\nAre you sure?"
+msgstr "The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"
+
+#: src/Module/Admin/Users.php:313
+msgid "Name of the new user."
+msgstr "Name of the new user."
+
+#: src/Module/Admin/Users.php:314
+msgid "Nickname"
+msgstr "Nickname"
+
+#: src/Module/Admin/Users.php:314
+msgid "Nickname of the new user."
+msgstr "Nickname of the new user."
+
+#: src/Module/Admin/Users.php:315
+msgid "Email address of the new user."
+msgstr "Email address of the new user."
+
+#: src/Module/AllFriends.php:55
+msgid "No friends to display."
+msgstr "No friends to display."
+
+#: src/Module/Apps.php:29
+msgid "No installed applications."
+msgstr "No installed applications."
+
+#: src/Module/Apps.php:34
+msgid "Applications"
+msgstr "Applications"
+
#: src/Module/Attach.php:36 src/Module/Attach.php:48
msgid "Item was not found."
msgstr "Item was not found."
+#: src/Module/Babel.php:31
+msgid "Source input"
+msgstr "Source input"
+
+#: src/Module/Babel.php:37
+msgid "BBCode::toPlaintext"
+msgstr "BBCode::toPlaintext"
+
+#: src/Module/Babel.php:43
+msgid "BBCode::convert (raw HTML)"
+msgstr "BBCode::convert (raw HTML)"
+
+#: src/Module/Babel.php:48
+msgid "BBCode::convert"
+msgstr "BBCode::convert"
+
+#: src/Module/Babel.php:54
+msgid "BBCode::convert => HTML::toBBCode"
+msgstr "BBCode::convert => HTML::toBBCode"
+
+#: src/Module/Babel.php:60
+msgid "BBCode::toMarkdown"
+msgstr "BBCode::toMarkdown"
+
+#: src/Module/Babel.php:66
+msgid "BBCode::toMarkdown => Markdown::convert"
+msgstr "BBCode::toMarkdown => Markdown::convert"
+
+#: src/Module/Babel.php:72
+msgid "BBCode::toMarkdown => Markdown::toBBCode"
+msgstr "BBCode::toMarkdown => Markdown::toBBCode"
+
+#: src/Module/Babel.php:78
+msgid "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"
+msgstr "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"
+
+#: src/Module/Babel.php:89
+msgid "Item Body"
+msgstr "Item body"
+
+#: src/Module/Babel.php:93
+msgid "Item Tags"
+msgstr "Item tags"
+
+#: src/Module/Babel.php:100
+msgid "Source input (Diaspora format)"
+msgstr "Source input (diaspora* format)"
+
+#: src/Module/Babel.php:106
+msgid "Markdown::convert (raw HTML)"
+msgstr "Markdown::convert (raw HTML)"
+
+#: src/Module/Babel.php:111
+msgid "Markdown::convert"
+msgstr "Markdown::convert"
+
+#: src/Module/Babel.php:117
+msgid "Markdown::toBBCode"
+msgstr "Markdown::toBBCode"
+
+#: src/Module/Babel.php:124
+msgid "Raw HTML input"
+msgstr "Raw HTML input"
+
+#: src/Module/Babel.php:129
+msgid "HTML Input"
+msgstr "HTML input"
+
+#: src/Module/Babel.php:135
+msgid "HTML::toBBCode"
+msgstr "HTML::toBBCode"
+
+#: src/Module/Babel.php:141
+msgid "HTML::toBBCode => BBCode::convert"
+msgstr "HTML::toBBCode => BBCode::convert"
+
+#: src/Module/Babel.php:146
+msgid "HTML::toBBCode => BBCode::convert (raw HTML)"
+msgstr "HTML::toBBCode => BBCode::convert (raw HTML)"
+
+#: src/Module/Babel.php:152
+msgid "HTML::toMarkdown"
+msgstr "HTML::toMarkdown"
+
+#: src/Module/Babel.php:158
+msgid "HTML::toPlaintext"
+msgstr "HTML::toPlaintext"
+
+#: src/Module/Babel.php:166
+msgid "Source text"
+msgstr "Source text"
+
+#: src/Module/Babel.php:167
+msgid "BBCode"
+msgstr "BBCode"
+
+#: src/Module/Babel.php:168
+msgid "Markdown"
+msgstr "Markdown"
+
+#: src/Module/Babel.php:169
+msgid "HTML"
+msgstr "HTML"
+
+#: src/Module/BaseAdminModule.php:76
+msgid "Overview"
+msgstr "Overview"
+
+#: src/Module/BaseAdminModule.php:79
+msgid "Configuration"
+msgstr "Configuration"
+
+#: src/Module/BaseAdminModule.php:87
+msgid "Database"
+msgstr "Database"
+
+#: src/Module/BaseAdminModule.php:88
+msgid "DB updates"
+msgstr "DB updates"
+
+#: src/Module/BaseAdminModule.php:89
+msgid "Inspect Deferred Workers"
+msgstr "Inspect deferred workers"
+
+#: src/Module/BaseAdminModule.php:90
+msgid "Inspect worker Queue"
+msgstr "Inspect worker queue"
+
+#: src/Module/BaseAdminModule.php:92
+msgid "Tools"
+msgstr "Tools"
+
+#: src/Module/BaseAdminModule.php:93
+msgid "Contact Blocklist"
+msgstr "Contact blocklist"
+
+#: src/Module/BaseAdminModule.php:101
+msgid "Diagnostics"
+msgstr "Diagnostics"
+
+#: src/Module/BaseAdminModule.php:102
+msgid "PHP Info"
+msgstr "PHP info"
+
+#: src/Module/BaseAdminModule.php:103
+msgid "probe address"
+msgstr "Probe address"
+
+#: src/Module/BaseAdminModule.php:104
+msgid "check webfinger"
+msgstr "Check webfinger"
+
+#: src/Module/BaseAdminModule.php:105
+msgid "Item Source"
+msgstr "Item source"
+
+#: src/Module/BaseAdminModule.php:106
+msgid "Babel"
+msgstr "Babel"
+
+#: src/Module/BaseAdminModule.php:115
+msgid "Addon Features"
+msgstr "Addon features"
+
+#: src/Module/BaseAdminModule.php:116
+msgid "User registrations waiting for confirmation"
+msgstr "User registrations awaiting confirmation"
+
+#: src/Module/Bookmarklet.php:35
+msgid "This page is missing a url parameter."
+msgstr "This page is missing a URL parameter."
+
+#: src/Module/Bookmarklet.php:57
+msgid "The post was created"
+msgstr "The post was created"
+
#: src/Module/Contact.php:166
#, php-format
msgid "%d contact edited."
@@ -8818,453 +8603,688 @@ msgid_plural "%d contacts edited."
msgstr[0] "%d contact edited."
msgstr[1] "%d contacts edited."
-#: src/Module/Contact.php:191 src/Module/Contact.php:374
+#: src/Module/Contact.php:193 src/Module/Contact.php:377
msgid "Could not access contact record."
msgstr "Could not access contact record."
-#: src/Module/Contact.php:201
+#: src/Module/Contact.php:203
msgid "Could not locate selected profile."
msgstr "Could not locate selected profile."
-#: src/Module/Contact.php:233
+#: src/Module/Contact.php:235
msgid "Contact updated."
msgstr "Contact updated."
-#: src/Module/Contact.php:395
+#: src/Module/Contact.php:398
msgid "Contact has been blocked"
msgstr "Contact has been blocked"
-#: src/Module/Contact.php:395
+#: src/Module/Contact.php:398
msgid "Contact has been unblocked"
msgstr "Contact has been unblocked"
-#: src/Module/Contact.php:405
+#: src/Module/Contact.php:408
msgid "Contact has been ignored"
msgstr "Contact has been ignored"
-#: src/Module/Contact.php:405
+#: src/Module/Contact.php:408
msgid "Contact has been unignored"
msgstr "Contact has been unignored"
-#: src/Module/Contact.php:415
+#: src/Module/Contact.php:418
msgid "Contact has been archived"
msgstr "Contact has been archived"
-#: src/Module/Contact.php:415
+#: src/Module/Contact.php:418
msgid "Contact has been unarchived"
msgstr "Contact has been unarchived"
-#: src/Module/Contact.php:439
+#: src/Module/Contact.php:442
msgid "Drop contact"
msgstr "Drop contact"
-#: src/Module/Contact.php:442 src/Module/Contact.php:820
+#: src/Module/Contact.php:445 src/Module/Contact.php:823
msgid "Do you really want to delete this contact?"
msgstr "Do you really want to delete this contact?"
-#: src/Module/Contact.php:456
+#: src/Module/Contact.php:459
msgid "Contact has been removed."
msgstr "Contact has been removed."
-#: src/Module/Contact.php:486
+#: src/Module/Contact.php:489
#, php-format
msgid "You are mutual friends with %s"
msgstr "You are mutual friends with %s"
-#: src/Module/Contact.php:491
+#: src/Module/Contact.php:494
#, php-format
msgid "You are sharing with %s"
msgstr "You are sharing with %s"
-#: src/Module/Contact.php:496
+#: src/Module/Contact.php:499
#, php-format
msgid "%s is sharing with you"
msgstr "%s is sharing with you"
-#: src/Module/Contact.php:520
+#: src/Module/Contact.php:523
msgid "Private communications are not available for this contact."
msgstr "Private communications are not available for this contact."
-#: src/Module/Contact.php:522
+#: src/Module/Contact.php:525
msgid "Never"
msgstr "Never"
-#: src/Module/Contact.php:525
+#: src/Module/Contact.php:528
msgid "(Update was successful)"
msgstr "(Update was successful)"
-#: src/Module/Contact.php:525
+#: src/Module/Contact.php:528
msgid "(Update was not successful)"
msgstr "(Update was not successful)"
-#: src/Module/Contact.php:527 src/Module/Contact.php:1058
+#: src/Module/Contact.php:530 src/Module/Contact.php:1061
msgid "Suggest friends"
msgstr "Suggest friends"
-#: src/Module/Contact.php:531
+#: src/Module/Contact.php:534
#, php-format
msgid "Network type: %s"
msgstr "Network type: %s"
-#: src/Module/Contact.php:536
+#: src/Module/Contact.php:539
msgid "Communications lost with this contact!"
msgstr "Communications lost with this contact!"
-#: src/Module/Contact.php:542
+#: src/Module/Contact.php:545
msgid "Fetch further information for feeds"
msgstr "Fetch further information for feeds"
-#: src/Module/Contact.php:544
+#: src/Module/Contact.php:547
msgid ""
"Fetch information like preview pictures, title and teaser from the feed "
"item. You can activate this if the feed doesn't contain much text. Keywords "
"are taken from the meta header in the feed item and are posted as hash tags."
msgstr "Fetch information like preview pictures, title, and teaser from the feed item. You can activate this if the feed doesn't contain much text. Keywords are taken from the meta header in the feed item and are posted as hash tags."
-#: src/Module/Contact.php:547
+#: src/Module/Contact.php:550
msgid "Fetch information"
msgstr "Fetch information"
-#: src/Module/Contact.php:548
+#: src/Module/Contact.php:551
msgid "Fetch keywords"
msgstr "Fetch keywords"
-#: src/Module/Contact.php:549
+#: src/Module/Contact.php:552
msgid "Fetch information and keywords"
msgstr "Fetch information and keywords"
-#: src/Module/Contact.php:581
+#: src/Module/Contact.php:584
msgid "Profile Visibility"
msgstr "Profile visibility"
-#: src/Module/Contact.php:582
+#: src/Module/Contact.php:585
msgid "Contact Information / Notes"
msgstr "Personal note"
-#: src/Module/Contact.php:583
+#: src/Module/Contact.php:586
msgid "Contact Settings"
msgstr "Notification and privacy "
-#: src/Module/Contact.php:592
+#: src/Module/Contact.php:595
msgid "Contact"
msgstr "Contact"
-#: src/Module/Contact.php:596
+#: src/Module/Contact.php:599
#, php-format
msgid ""
"Please choose the profile you would like to display to %s when viewing your "
"profile securely."
msgstr "Please choose the profile you would like to display to %s when viewing your profile securely."
-#: src/Module/Contact.php:598
+#: src/Module/Contact.php:601
msgid "Their personal note"
msgstr "Their personal note"
-#: src/Module/Contact.php:600
+#: src/Module/Contact.php:603
msgid "Edit contact notes"
msgstr "Edit contact notes"
-#: src/Module/Contact.php:604
+#: src/Module/Contact.php:607
msgid "Block/Unblock contact"
msgstr "Block/Unblock contact"
-#: src/Module/Contact.php:605
+#: src/Module/Contact.php:608
msgid "Ignore contact"
msgstr "Ignore contact"
-#: src/Module/Contact.php:606
+#: src/Module/Contact.php:609
msgid "Repair URL settings"
msgstr "Repair URL settings"
-#: src/Module/Contact.php:607
+#: src/Module/Contact.php:610
msgid "View conversations"
msgstr "View conversations"
-#: src/Module/Contact.php:612
+#: src/Module/Contact.php:615
msgid "Last update:"
msgstr "Last update:"
-#: src/Module/Contact.php:614
+#: src/Module/Contact.php:617
msgid "Update public posts"
msgstr "Update public posts"
-#: src/Module/Contact.php:616 src/Module/Contact.php:1068
+#: src/Module/Contact.php:619 src/Module/Contact.php:1071
msgid "Update now"
msgstr "Update now"
-#: src/Module/Contact.php:622 src/Module/Contact.php:825
-#: src/Module/Contact.php:1085
+#: src/Module/Contact.php:625 src/Module/Contact.php:828
+#: src/Module/Contact.php:1088
msgid "Unignore"
msgstr "Unignore"
-#: src/Module/Contact.php:626
+#: src/Module/Contact.php:629
msgid "Currently blocked"
msgstr "Currently blocked"
-#: src/Module/Contact.php:627
+#: src/Module/Contact.php:630
msgid "Currently ignored"
msgstr "Currently ignored"
-#: src/Module/Contact.php:628
+#: src/Module/Contact.php:631
msgid "Currently archived"
msgstr "Currently archived"
-#: src/Module/Contact.php:629
+#: src/Module/Contact.php:632
msgid "Awaiting connection acknowledge"
msgstr "Awaiting connection acknowledgement"
-#: src/Module/Contact.php:630
+#: src/Module/Contact.php:633
msgid ""
"Replies/likes to your public posts may still be visible"
msgstr "Replies/Likes to your public posts may still be visible"
-#: src/Module/Contact.php:631
+#: src/Module/Contact.php:634
msgid "Notification for new posts"
msgstr "Notification for new posts"
-#: src/Module/Contact.php:631
+#: src/Module/Contact.php:634
msgid "Send a notification of every new post of this contact"
msgstr "Send notification for every new post from this contact"
-#: src/Module/Contact.php:633
+#: src/Module/Contact.php:636
msgid "Blacklisted keywords"
msgstr "Blacklisted keywords"
-#: src/Module/Contact.php:633
+#: src/Module/Contact.php:636
msgid ""
"Comma separated list of keywords that should not be converted to hashtags, "
"when \"Fetch information and keywords\" is selected"
msgstr "Comma-separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected"
-#: src/Module/Contact.php:650
+#: src/Module/Contact.php:653 src/Module/Settings/TwoFactor/Index.php:100
msgid "Actions"
msgstr "Actions"
-#: src/Module/Contact.php:696
+#: src/Module/Contact.php:700
msgid "Suggestions"
msgstr "Suggestions"
-#: src/Module/Contact.php:699
+#: src/Module/Contact.php:703
msgid "Suggest potential friends"
msgstr "Suggest potential friends"
-#: src/Module/Contact.php:707
+#: src/Module/Contact.php:708 src/Module/Group.php:287
+msgid "All Contacts"
+msgstr "All contacts"
+
+#: src/Module/Contact.php:711
msgid "Show all contacts"
msgstr "Show all contacts"
-#: src/Module/Contact.php:712
+#: src/Module/Contact.php:716
msgid "Unblocked"
msgstr "Unblocked"
-#: src/Module/Contact.php:715
+#: src/Module/Contact.php:719
msgid "Only show unblocked contacts"
msgstr "Only show unblocked contacts"
-#: src/Module/Contact.php:720
+#: src/Module/Contact.php:724
msgid "Blocked"
msgstr "Blocked"
-#: src/Module/Contact.php:723
+#: src/Module/Contact.php:727
msgid "Only show blocked contacts"
msgstr "Only show blocked contacts"
-#: src/Module/Contact.php:728
+#: src/Module/Contact.php:732
msgid "Ignored"
msgstr "Ignored"
-#: src/Module/Contact.php:731
+#: src/Module/Contact.php:735
msgid "Only show ignored contacts"
msgstr "Only show ignored contacts"
-#: src/Module/Contact.php:736
+#: src/Module/Contact.php:740
msgid "Archived"
msgstr "Archived"
-#: src/Module/Contact.php:739
+#: src/Module/Contact.php:743
msgid "Only show archived contacts"
msgstr "Only show archived contacts"
-#: src/Module/Contact.php:744
+#: src/Module/Contact.php:748
msgid "Hidden"
msgstr "Hidden"
-#: src/Module/Contact.php:747
+#: src/Module/Contact.php:751
msgid "Only show hidden contacts"
msgstr "Only show hidden contacts"
-#: src/Module/Contact.php:755
+#: src/Module/Contact.php:759
msgid "Organize your contact groups"
msgstr "Organize your contact groups"
-#: src/Module/Contact.php:815
+#: src/Module/Contact.php:818
msgid "Search your contacts"
msgstr "Search your contacts"
-#: src/Module/Contact.php:826 src/Module/Contact.php:1094
+#: src/Module/Contact.php:829 src/Module/Contact.php:1097
msgid "Archive"
msgstr "Archive"
-#: src/Module/Contact.php:826 src/Module/Contact.php:1094
+#: src/Module/Contact.php:829 src/Module/Contact.php:1097
msgid "Unarchive"
msgstr "Unarchive"
-#: src/Module/Contact.php:829
+#: src/Module/Contact.php:832
msgid "Batch Actions"
msgstr "Batch actions"
-#: src/Module/Contact.php:856
+#: src/Module/Contact.php:859
msgid "Conversations started by this contact"
msgstr "Conversations started by this contact"
-#: src/Module/Contact.php:861
+#: src/Module/Contact.php:864
msgid "Posts and Comments"
msgstr "Posts and Comments"
-#: src/Module/Contact.php:884
+#: src/Module/Contact.php:887
msgid "View all contacts"
msgstr "View all contacts"
-#: src/Module/Contact.php:895
+#: src/Module/Contact.php:898
msgid "View all common friends"
msgstr "View all common friends"
-#: src/Module/Contact.php:905
+#: src/Module/Contact.php:908
msgid "Advanced Contact Settings"
msgstr "Advanced contact settings"
-#: src/Module/Contact.php:991
+#: src/Module/Contact.php:994
msgid "Mutual Friendship"
msgstr "Mutual friendship"
-#: src/Module/Contact.php:996
+#: src/Module/Contact.php:999
msgid "is a fan of yours"
msgstr "is a fan of yours"
-#: src/Module/Contact.php:1001
+#: src/Module/Contact.php:1004
msgid "you are a fan of"
msgstr "I follow them"
-#: src/Module/Contact.php:1025
+#: src/Module/Contact.php:1028
msgid "Edit contact"
msgstr "Edit contact"
-#: src/Module/Contact.php:1079
+#: src/Module/Contact.php:1082
msgid "Toggle Blocked status"
msgstr "Toggle blocked status"
-#: src/Module/Contact.php:1087
+#: src/Module/Contact.php:1090
msgid "Toggle Ignored status"
msgstr "Toggle ignored status"
-#: src/Module/Contact.php:1096
+#: src/Module/Contact.php:1099
msgid "Toggle Archive status"
msgstr "Toggle archive status"
-#: src/Module/Contact.php:1104
+#: src/Module/Contact.php:1107
msgid "Delete contact"
msgstr "Delete contact"
-#: src/Module/Install.php:118
+#: src/Module/Credits.php:25
+msgid "Credits"
+msgstr "Credits"
+
+#: src/Module/Credits.php:26
+msgid ""
+"Friendica is a community project, that would not be possible without the "
+"help of many people. Here is a list of those who have contributed to the "
+"code or the translation of Friendica. Thank you all!"
+msgstr "Friendica is a community project that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!"
+
+#: src/Module/Directory.php:66
+msgid "No entries (some entries may be hidden)."
+msgstr "No entries (entries may be hidden)."
+
+#: src/Module/Directory.php:85
+msgid "Find on this site"
+msgstr "Find on this site"
+
+#: src/Module/Directory.php:87
+msgid "Results for:"
+msgstr "Results for:"
+
+#: src/Module/Directory.php:89
+msgid "Site Directory"
+msgstr "Site directory"
+
+#: src/Module/Feedtest.php:20 src/Module/Filer/SaveTag.php:20
+msgid "You must be logged in to use this module"
+msgstr "You must be logged in to use this module"
+
+#: src/Module/Feedtest.php:49
+msgid "Source URL"
+msgstr "Source URL"
+
+#: src/Module/Filer/SaveTag.php:39
+#, php-format
+msgid "Filetag %s saved to item"
+msgstr "File-tag %s saved to item"
+
+#: src/Module/Filer/SaveTag.php:49
+msgid "- select -"
+msgstr "- select -"
+
+#: src/Module/FollowConfirm.php:37
+msgid "No given contact."
+msgstr "No given contact."
+
+#: src/Module/Friendica.php:40
+msgid "Installed addons/apps:"
+msgstr "Installed addons/apps:"
+
+#: src/Module/Friendica.php:45
+msgid "No installed addons/apps"
+msgstr "No installed addons/apps"
+
+#: src/Module/Friendica.php:50
+#, php-format
+msgid "Read about the Terms of Service of this node."
+msgstr "Read about the Terms of Service of this node."
+
+#: src/Module/Friendica.php:57
+msgid "On this server the following remote servers are blocked."
+msgstr "On this server the following remote servers are blocked."
+
+#: src/Module/Friendica.php:75
+#, php-format
+msgid ""
+"This is Friendica, version %s that is running at the web location %s. The "
+"database version is %s, the post update version is %s."
+msgstr "This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s."
+
+#: src/Module/Friendica.php:80
+msgid ""
+"Please visit Friendi.ca to learn more "
+"about the Friendica project."
+msgstr "Please visit Friendi.ca to learn more about the Friendica project."
+
+#: src/Module/Friendica.php:81
+msgid "Bug reports and issues: please visit"
+msgstr "Bug reports and issues: please visit"
+
+#: src/Module/Friendica.php:81
+msgid "the bugtracker at github"
+msgstr "the bugtracker at github"
+
+#: src/Module/Friendica.php:82
+msgid "Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca"
+msgstr "Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca"
+
+#: src/Module/Group.php:42
+msgid "Group created."
+msgstr "Group created."
+
+#: src/Module/Group.php:48
+msgid "Could not create group."
+msgstr "Could not create group."
+
+#: src/Module/Group.php:59 src/Module/Group.php:207 src/Module/Group.php:233
+msgid "Group not found."
+msgstr "Group not found."
+
+#: src/Module/Group.php:65
+msgid "Group name changed."
+msgstr "Group name changed."
+
+#: src/Module/Group.php:87
+msgid "Unknown group."
+msgstr "Unknown group."
+
+#: src/Module/Group.php:96
+msgid "Contact is unavailable."
+msgstr "Contact is unavailable."
+
+#: src/Module/Group.php:100
+msgid "Contact is deleted."
+msgstr "Contact is deleted."
+
+#: src/Module/Group.php:106
+msgid "Contact is blocked, unable to add it to a group."
+msgstr "Contact is blocked, unable to add it to a group."
+
+#: src/Module/Group.php:110
+msgid "Unable to add the contact to the group."
+msgstr "Unable to add contact to group."
+
+#: src/Module/Group.php:112
+msgid "Contact successfully added to group."
+msgstr "Contact successfully added to group."
+
+#: src/Module/Group.php:116
+msgid "Unable to remove the contact from the group."
+msgstr "Unable to remove contact from group."
+
+#: src/Module/Group.php:118
+msgid "Contact successfully removed from group."
+msgstr "Contact successfully removed from group."
+
+#: src/Module/Group.php:121
+msgid "Unknown group command."
+msgstr "Unknown group command."
+
+#: src/Module/Group.php:124
+msgid "Bad request."
+msgstr "Bad request."
+
+#: src/Module/Group.php:163
+msgid "Save Group"
+msgstr "Save group"
+
+#: src/Module/Group.php:164
+msgid "Filter"
+msgstr "Filter"
+
+#: src/Module/Group.php:170
+msgid "Create a group of contacts/friends."
+msgstr "Create a group of contacts/friends."
+
+#: src/Module/Group.php:212
+msgid "Group removed."
+msgstr "Group removed."
+
+#: src/Module/Group.php:214
+msgid "Unable to remove group."
+msgstr "Unable to remove group."
+
+#: src/Module/Group.php:265
+msgid "Delete Group"
+msgstr "Delete group"
+
+#: src/Module/Group.php:275
+msgid "Edit Group Name"
+msgstr "Edit group name"
+
+#: src/Module/Group.php:285
+msgid "Members"
+msgstr "Members"
+
+#: src/Module/Group.php:301
+msgid "Remove contact from group"
+msgstr "Remove contact from group"
+
+#: src/Module/Group.php:335
+msgid "Add contact to group"
+msgstr "Add contact to group"
+
+#: src/Module/Help.php:43
+msgid "Help:"
+msgstr "Help:"
+
+#: src/Module/Home.php:42
+#, php-format
+msgid "Welcome to %s"
+msgstr "Welcome to %s"
+
+#: src/Module/Install.php:158
msgid "Friendica Communications Server - Setup"
msgstr "Friendica Communications Server - Setup"
-#: src/Module/Install.php:129
+#: src/Module/Install.php:169
msgid "System check"
msgstr "System check"
-#: src/Module/Install.php:134
+#: src/Module/Install.php:174
msgid "Check again"
msgstr "Check again"
-#: src/Module/Install.php:151
+#: src/Module/Install.php:189
+msgid "Base settings"
+msgstr "Base settings"
+
+#: src/Module/Install.php:196
+msgid "Host name"
+msgstr "Host name"
+
+#: src/Module/Install.php:198
+msgid ""
+"Overwrite this field in case the determinated hostname isn't right, "
+"otherweise leave it as is."
+msgstr "Overwrite this field in case the hostname is incorrect, otherwise leave it as is."
+
+#: src/Module/Install.php:201
+msgid "Base path to installation"
+msgstr "Base path to installation"
+
+#: src/Module/Install.php:203
+msgid ""
+"If the system cannot detect the correct path to your installation, enter the"
+" correct path here. This setting should only be set if you are using a "
+"restricted system and symbolic links to your webroot."
+msgstr "If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."
+
+#: src/Module/Install.php:206
+msgid "Sub path of the URL"
+msgstr "URL Sub-path "
+
+#: src/Module/Install.php:208
+msgid ""
+"Overwrite this field in case the sub path determination isn't right, "
+"otherwise leave it as is. Leaving this field blank means the installation is"
+" at the base URL without sub path."
+msgstr "Overwrite this field in case the sub path determination isn't right, otherwise leave it as is. Leaving this field blank means the installation is at the base URL without sub-path."
+
+#: src/Module/Install.php:219
msgid "Database connection"
msgstr "Database connection"
-#: src/Module/Install.php:152
+#: src/Module/Install.php:220
msgid ""
"In order to install Friendica we need to know how to connect to your "
"database."
msgstr "In order to install Friendica we need to know how to connect to your database."
-#: src/Module/Install.php:153
+#: src/Module/Install.php:221
msgid ""
"Please contact your hosting provider or site administrator if you have "
"questions about these settings."
msgstr "Please contact your hosting provider or site administrator if you have questions about these settings."
-#: src/Module/Install.php:154
+#: src/Module/Install.php:222
msgid ""
"The database you specify below should already exist. If it does not, please "
"create it before continuing."
msgstr "The database you specify below should already exist. If it does not, please create it before continuing."
-#: src/Module/Install.php:157
+#: src/Module/Install.php:229
msgid "Database Server Name"
msgstr "Database server name"
-#: src/Module/Install.php:162
+#: src/Module/Install.php:234
msgid "Database Login Name"
msgstr "Database login name"
-#: src/Module/Install.php:168
+#: src/Module/Install.php:240
msgid "Database Login Password"
msgstr "Database login password"
-#: src/Module/Install.php:170
+#: src/Module/Install.php:242
msgid "For security reasons the password must not be empty"
msgstr "For security reasons the password must not be empty"
-#: src/Module/Install.php:173
+#: src/Module/Install.php:245
msgid "Database Name"
msgstr "Database name"
-#: src/Module/Install.php:178 src/Module/Install.php:214
+#: src/Module/Install.php:249 src/Module/Install.php:278
+msgid "Please select a default timezone for your website"
+msgstr "Please select a default time zone for your website"
+
+#: src/Module/Install.php:263
+msgid "Site settings"
+msgstr "Site settings"
+
+#: src/Module/Install.php:273
msgid "Site administrator email address"
msgstr "Site administrator email address"
-#: src/Module/Install.php:180 src/Module/Install.php:214
+#: src/Module/Install.php:275
msgid ""
"Your account email address must match this in order to use the web admin "
"panel."
msgstr "Your account email address must match this in order to use the web admin panel."
-#: src/Module/Install.php:184 src/Module/Install.php:215
-msgid "Please select a default timezone for your website"
-msgstr "Please select a default time zone for your website"
-
-#: src/Module/Install.php:208
-msgid "Site settings"
-msgstr "Site settings"
-
-#: src/Module/Install.php:217
+#: src/Module/Install.php:282
msgid "System Language:"
msgstr "System language:"
-#: src/Module/Install.php:219
+#: src/Module/Install.php:284
msgid ""
"Set the default language for your Friendica installation interface and to "
"send emails."
msgstr "Set the default language for your Friendica installation interface and email communication."
-#: src/Module/Install.php:231
+#: src/Module/Install.php:296
msgid "Your Friendica site database has been installed."
msgstr "Your Friendica site database has been installed."
-#: src/Module/Install.php:239
+#: src/Module/Install.php:304
msgid "Installation finished"
msgstr "Installation finished"
-#: src/Module/Install.php:261
+#: src/Module/Install.php:326
msgid "Use an application on a mobile device to get two-factor authentication " +"codes when prompted on login.
" +msgstr "Use an application on a mobile device to get two-factor authentication codes when prompted on login.
" + +#: src/Module/Settings/TwoFactor/Index.php:90 +msgid "Authenticator app" +msgstr "Authenticator app" + +#: src/Module/Settings/TwoFactor/Index.php:91 +msgid "Configured" +msgstr "Configured" + +#: src/Module/Settings/TwoFactor/Index.php:91 +msgid "Not Configured" +msgstr "Not configured" + +#: src/Module/Settings/TwoFactor/Index.php:92 +msgid "You haven't finished configuring your authenticator app.
" +msgstr "You haven't finished configuring your authenticator app.
" + +#: src/Module/Settings/TwoFactor/Index.php:93 +msgid "Your authenticator app is correctly configured.
" +msgstr "Your authenticator app is correctly configured.
" + +#: src/Module/Settings/TwoFactor/Index.php:95 +msgid "Recovery codes" +msgstr "Recovery codes" + +#: src/Module/Settings/TwoFactor/Index.php:96 +msgid "Remaining valid codes" +msgstr "Remaining valid codes" + +#: src/Module/Settings/TwoFactor/Index.php:98 +msgid "" +"These one-use codes can replace an authenticator app code in case you " +"have lost access to it.
" +msgstr "These one-use codes can replace an authenticator app code in case you have lost access to it.
" + +#: src/Module/Settings/TwoFactor/Index.php:101 +msgid "Current password:" +msgstr "Current password:" + +#: src/Module/Settings/TwoFactor/Index.php:101 +msgid "" +"You need to provide your current password to change two-factor " +"authentication settings." +msgstr "You need to provide your current password to change two-factor authentication settings." + +#: src/Module/Settings/TwoFactor/Index.php:102 +msgid "Enable two-factor authentication" +msgstr "Enable two-factor authentication" + +#: src/Module/Settings/TwoFactor/Index.php:103 +msgid "Disable two-factor authentication" +msgstr "Disable two-factor authentication" + +#: src/Module/Settings/TwoFactor/Index.php:104 +msgid "Show recovery codes" +msgstr "Show recovery codes" + +#: src/Module/Settings/TwoFactor/Index.php:105 +msgid "Finish app configuration" +msgstr "Finish app configuration" + +#: src/Module/Settings/TwoFactor/Recovery.php:34 +#: src/Module/Settings/TwoFactor/Verify.php:41 +msgid "Please enter your password to access this page." +msgstr "Please enter your password to access this page." + +#: src/Module/Settings/TwoFactor/Recovery.php:50 +msgid "New recovery codes successfully generated." +msgstr "New recovery codes successfully generated." + +#: src/Module/Settings/TwoFactor/Recovery.php:76 +msgid "Two-factor recovery codes" +msgstr "Two-factor recovery codes" + +#: src/Module/Settings/TwoFactor/Recovery.php:78 +msgid "" +"Recovery codes can be used to access your account in the event you lose " +"access to your device and cannot receive two-factor authentication " +"codes.
Put these in a safe spot! If you lose your " +"device and don’t have the recovery codes you will lose access to your " +"account.
" +msgstr "Recovery codes can be used to access your account in the event you lose access to your device and cannot receive two-factor authentication codes.
Put these in a safe place! If you lose your device and don’t have the recovery codes you will lose access to your account.
" + +#: src/Module/Settings/TwoFactor/Recovery.php:80 +msgid "" +"When you generate new recovery codes, you must copy the new codes. Your old " +"codes won’t work anymore." +msgstr "When you generate new recovery codes, you must copy the new codes. Your old codes won’t work anymore." + +#: src/Module/Settings/TwoFactor/Recovery.php:81 +msgid "Generate new recovery codes" +msgstr "Generate new recovery codes" + +#: src/Module/Settings/TwoFactor/Recovery.php:83 +msgid "Next: Verification" +msgstr "Next: Verification" + +#: src/Module/Settings/TwoFactor/Verify.php:63 +msgid "Two-factor authentication successfully activated." +msgstr "Two-factor authentication successfully activated." + +#: src/Module/Settings/TwoFactor/Verify.php:67 +#: src/Module/TwoFactor/Recovery.php:46 src/Module/TwoFactor/Verify.php:41 +msgid "Invalid code, please retry." +msgstr "Invalid code, please try again." + +#: src/Module/Settings/TwoFactor/Verify.php:96 +#, php-format +msgid "" +"Or you can submit the authentication settings manually:
\n" +"Or you can submit the authentication settings manually:
\nPlease scan this QR Code with your authenticator app and submit the " +"provided code.
" +msgstr "Please scan this QR Code with your authenticator app and submit the provided code.
" + +#: src/Module/Settings/TwoFactor/Verify.php:120 +#, php-format +msgid "" +"Or you can open the following URL in your mobile devicde:
" +msgstr "Or you can open the following URL in your mobile device:
" + +#: src/Module/Settings/TwoFactor/Verify.php:126 +#: src/Module/TwoFactor/Verify.php:63 +msgid "Please enter a code from your authentication app" +msgstr "Please enter a code from your authentication app" + +#: src/Module/Settings/TwoFactor/Verify.php:127 +msgid "Verify code and enable two-factor authentication" +msgstr "Verify code and enable two-factor authentication" + +#: src/Module/Special/HTTPException.php:32 +msgid "Bad Request" +msgstr "Bad request" + +#: src/Module/Special/HTTPException.php:33 +msgid "Unauthorized" +msgstr "Unauthorized" + +#: src/Module/Special/HTTPException.php:34 +msgid "Forbidden" +msgstr "Forbidden" + +#: src/Module/Special/HTTPException.php:35 +msgid "Not Found" +msgstr "Not found" + +#: src/Module/Special/HTTPException.php:36 +msgid "Internal Server Error" +msgstr "Internal Server Error" + +#: src/Module/Special/HTTPException.php:37 +msgid "Service Unavailable" +msgstr "Service Unavailable" + +#: src/Module/Special/HTTPException.php:44 +msgid "" +"The server cannot or will not process the request due to an apparent client " +"error." +msgstr "The server cannot process the request due to an apparent client error." + +#: src/Module/Special/HTTPException.php:45 +msgid "" +"Authentication is required and has failed or has not yet been provided." +msgstr "Authentication is required but has failed or not yet being provided." + +#: src/Module/Special/HTTPException.php:46 +msgid "" +"The request was valid, but the server is refusing action. The user might not" +" have the necessary permissions for a resource, or may need an account." +msgstr "The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource, or may need an account." + +#: src/Module/Special/HTTPException.php:47 +msgid "" +"The requested resource could not be found but may be available in the " +"future." +msgstr "The requested resource could not be found but may be available in the future." + +#: src/Module/Special/HTTPException.php:48 +msgid "" +"An unexpected condition was encountered and no more specific message is " +"suitable." +msgstr "An unexpected condition was encountered and no more specific message is available." + +#: src/Module/Special/HTTPException.php:49 +msgid "" +"The server is currently unavailable (because it is overloaded or down for " +"maintenance). Please try again later." +msgstr "The server is currently unavailable (possibly because it is overloaded or down for maintenance). Please try again later." + +#: src/Module/Special/HTTPException.php:55 +msgid "Go back" +msgstr "Go back" + #: src/Module/Tos.php:35 src/Module/Tos.php:77 msgid "" "At the time of registration, and for providing communications between the " @@ -9464,165 +9846,207 @@ msgstr "At any point in time a logged in user can export their account data from msgid "Privacy Statement" msgstr "Privacy Statement" -#: src/Object/Post.php:136 +#: src/Module/TwoFactor/Recovery.php:41 +#, php-format +msgid "Remaining recovery codes: %d" +msgstr "Remaining recovery codes: %d" + +#: src/Module/TwoFactor/Recovery.php:65 +msgid "Two-factor recovery" +msgstr "Two-factor recovery" + +#: src/Module/TwoFactor/Recovery.php:66 +msgid "" +"You can enter one of your one-time recovery codes in case you lost access" +" to your mobile device.
" +msgstr "You can enter one of your one-time recovery codes in case you lost access to your mobile device.
" + +#: src/Module/TwoFactor/Recovery.php:67 src/Module/TwoFactor/Verify.php:62 +#, php-format +msgid "Don’t have your phone? Enter a two-factor recovery code" +msgstr "Don’t have your phone? Enter a two-factor recovery code" + +#: src/Module/TwoFactor/Recovery.php:68 +msgid "Please enter a recovery code" +msgstr "Please enter a recovery code" + +#: src/Module/TwoFactor/Recovery.php:69 +msgid "Submit recovery code and complete login" +msgstr "Submit recovery code and complete login" + +#: src/Module/TwoFactor/Verify.php:61 +msgid "" +"Open the two-factor authentication app on your device to get an " +"authentication code and verify your identity.
" +msgstr "Open the two-factor authentication app on your device to get an authentication code and verify your identity.
" + +#: src/Module/TwoFactor/Verify.php:64 +msgid "Verify code and complete login" +msgstr "Verify code and complete login" + +#: src/Object/Post.php:137 msgid "This entry was edited" msgstr "This entry was edited" -#: src/Object/Post.php:198 +#: src/Object/Post.php:157 +msgid "Private Message" +msgstr "Private message" + +#: src/Object/Post.php:199 msgid "Delete locally" msgstr "Delete locally" -#: src/Object/Post.php:201 +#: src/Object/Post.php:202 msgid "Delete globally" msgstr "Delete globally" -#: src/Object/Post.php:201 +#: src/Object/Post.php:202 msgid "Remove locally" msgstr "Remove locally" -#: src/Object/Post.php:215 +#: src/Object/Post.php:216 msgid "save to folder" msgstr "Save to folder" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I will attend" msgstr "I will attend" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I will not attend" msgstr "I will not attend" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I might attend" msgstr "I might attend" -#: src/Object/Post.php:278 +#: src/Object/Post.php:279 msgid "ignore thread" msgstr "Ignore thread" -#: src/Object/Post.php:279 +#: src/Object/Post.php:280 msgid "unignore thread" msgstr "Unignore thread" -#: src/Object/Post.php:280 +#: src/Object/Post.php:281 msgid "toggle ignore status" msgstr "Toggle ignore status" -#: src/Object/Post.php:291 +#: src/Object/Post.php:292 msgid "add star" msgstr "Add star" -#: src/Object/Post.php:292 +#: src/Object/Post.php:293 msgid "remove star" msgstr "Remove star" -#: src/Object/Post.php:293 +#: src/Object/Post.php:294 msgid "toggle star status" msgstr "Toggle star status" -#: src/Object/Post.php:296 +#: src/Object/Post.php:297 msgid "starred" msgstr "Starred" -#: src/Object/Post.php:300 +#: src/Object/Post.php:301 msgid "add tag" msgstr "Add tag" -#: src/Object/Post.php:311 +#: src/Object/Post.php:312 msgid "like" msgstr "Like" -#: src/Object/Post.php:312 +#: src/Object/Post.php:313 msgid "dislike" msgstr "Dislike" -#: src/Object/Post.php:315 +#: src/Object/Post.php:316 msgid "Share this" msgstr "Share this" -#: src/Object/Post.php:315 +#: src/Object/Post.php:316 msgid "share" msgstr "Share" -#: src/Object/Post.php:382 +#: src/Object/Post.php:384 msgid "to" msgstr "to" -#: src/Object/Post.php:383 +#: src/Object/Post.php:385 msgid "via" msgstr "via" -#: src/Object/Post.php:384 +#: src/Object/Post.php:386 msgid "Wall-to-Wall" msgstr "Wall-to-wall" -#: src/Object/Post.php:385 +#: src/Object/Post.php:387 msgid "via Wall-To-Wall:" msgstr "via wall-to-wall:" -#: src/Object/Post.php:418 +#: src/Object/Post.php:420 #, php-format msgid "Reply to %s" msgstr "Reply to %s" -#: src/Object/Post.php:433 +#: src/Object/Post.php:435 msgid "Notifier task is pending" msgstr "Notifier task is pending" -#: src/Object/Post.php:434 +#: src/Object/Post.php:436 msgid "Delivery to remote servers is pending" msgstr "Delivery to remote servers is pending" -#: src/Object/Post.php:435 +#: src/Object/Post.php:437 msgid "Delivery to remote servers is underway" msgstr "Delivery to remote servers is underway" -#: src/Object/Post.php:436 +#: src/Object/Post.php:438 msgid "Delivery to remote servers is mostly done" msgstr "Delivery to remote servers is mostly done" -#: src/Object/Post.php:437 +#: src/Object/Post.php:439 msgid "Delivery to remote servers is done" msgstr "Delivery to remote servers is done" -#: src/Object/Post.php:457 +#: src/Object/Post.php:459 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d comment" msgstr[1] "%d comments -" -#: src/Object/Post.php:458 +#: src/Object/Post.php:460 msgid "Show more" msgstr "Show more" -#: src/Object/Post.php:459 +#: src/Object/Post.php:461 msgid "Show fewer" msgstr "Show fewer" -#: src/Protocol/Diaspora.php:2496 +#: src/Protocol/Diaspora.php:2438 msgid "Sharing notification from Diaspora network" msgstr "Sharing notification from diaspora* network" -#: src/Protocol/Diaspora.php:3613 +#: src/Protocol/Diaspora.php:3598 msgid "Attachments:" msgstr "Attachments:" -#: src/Protocol/OStatus.php:1866 +#: src/Protocol/OStatus.php:1863 #, php-format msgid "%s is now following %s." msgstr "%s is now following %s." -#: src/Protocol/OStatus.php:1867 +#: src/Protocol/OStatus.php:1864 msgid "following" msgstr "following" -#: src/Protocol/OStatus.php:1870 +#: src/Protocol/OStatus.php:1867 #, php-format msgid "%s stopped following %s." msgstr "%s stopped following %s." -#: src/Protocol/OStatus.php:1871 +#: src/Protocol/OStatus.php:1868 msgid "stopped following" msgstr "stopped following" @@ -9692,16 +10116,16 @@ msgstr "in %1$d %2$s" msgid "%1$d %2$s ago" msgstr "%1$d %2$s ago" -#: src/Worker/Delivery.php:453 +#: src/Worker/Delivery.php:450 msgid "(no subject)" msgstr "(no subject)" -#: update.php:217 +#: update.php:218 #, php-format msgid "%s: Updating author-id and owner-id in item and thread table. " msgstr "%s: Updating author-id and owner-id in item and thread table. " -#: update.php:272 +#: update.php:273 #, php-format msgid "%s: Updating post-type." msgstr "%s: Updating post-type." @@ -9730,63 +10154,73 @@ msgstr "comix" msgid "slackr" msgstr "slackr" -#: view/theme/duepuntozero/config.php:75 +#: view/theme/duepuntozero/config.php:74 msgid "Variations" msgstr "Variations" -#: view/theme/frio/config.php:103 +#: view/theme/frio/config.php:105 msgid "Custom" msgstr "Custom" -#: view/theme/frio/config.php:115 +#: view/theme/frio/config.php:117 msgid "Note" msgstr "Note" -#: view/theme/frio/config.php:115 +#: view/theme/frio/config.php:117 msgid "Check image permissions if all users are allowed to see the image" msgstr "Check image permissions that everyone is allowed to see the image" -#: view/theme/frio/config.php:122 +#: view/theme/frio/config.php:123 msgid "Select color scheme" msgstr "Select color scheme" -#: view/theme/frio/config.php:123 +#: view/theme/frio/config.php:124 +msgid "Copy or paste schemestring" +msgstr "Copy or paste theme string" + +#: view/theme/frio/config.php:124 +msgid "" +"You can copy this string to share your theme with others. Pasting here " +"applies the schemestring" +msgstr "You can copy this string to share your theme with others. Pasting here applies the theme string" + +#: view/theme/frio/config.php:125 msgid "Navigation bar background color" msgstr "Navigation bar background color:" -#: view/theme/frio/config.php:124 +#: view/theme/frio/config.php:126 msgid "Navigation bar icon color " msgstr "Navigation bar icon color:" -#: view/theme/frio/config.php:125 +#: view/theme/frio/config.php:127 msgid "Link color" msgstr "Link color:" -#: view/theme/frio/config.php:126 +#: view/theme/frio/config.php:128 msgid "Set the background color" msgstr "Background color:" -#: view/theme/frio/config.php:127 +#: view/theme/frio/config.php:129 msgid "Content background opacity" msgstr "Content background opacity" -#: view/theme/frio/config.php:128 +#: view/theme/frio/config.php:130 msgid "Set the background image" msgstr "Background image:" -#: view/theme/frio/config.php:129 +#: view/theme/frio/config.php:131 msgid "Background image style" msgstr "Background image style" -#: view/theme/frio/config.php:134 +#: view/theme/frio/config.php:136 msgid "Login page background image" msgstr "Login page background image" -#: view/theme/frio/config.php:138 +#: view/theme/frio/config.php:140 msgid "Login page background color" msgstr "Login page background color" -#: view/theme/frio/config.php:138 +#: view/theme/frio/config.php:140 msgid "Leave background image and color empty for theme defaults" msgstr "Leave background image and color empty for theme defaults" @@ -9834,27 +10268,27 @@ msgstr "Guest" msgid "Visitor" msgstr "Visitor" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Alignment" msgstr "Alignment" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Left" msgstr "Left" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Center" msgstr "Center" -#: view/theme/quattro/config.php:78 +#: view/theme/quattro/config.php:77 msgid "Color scheme" msgstr "Color scheme" -#: view/theme/quattro/config.php:79 +#: view/theme/quattro/config.php:78 msgid "Posts font size" msgstr "Posts font size" -#: view/theme/quattro/config.php:80 +#: view/theme/quattro/config.php:79 msgid "Textareas font size" msgstr "Text areas font size" @@ -9862,31 +10296,31 @@ msgstr "Text areas font size" msgid "Comma separated list of helper forums" msgstr "Comma-separated list of helper forums" -#: view/theme/vier/config.php:123 +#: view/theme/vier/config.php:122 msgid "Set style" msgstr "Set style" -#: view/theme/vier/config.php:124 +#: view/theme/vier/config.php:123 msgid "Community Pages" msgstr "Community pages" -#: view/theme/vier/config.php:125 view/theme/vier/theme.php:151 +#: view/theme/vier/config.php:124 view/theme/vier/theme.php:151 msgid "Community Profiles" msgstr "Community profiles" -#: view/theme/vier/config.php:126 +#: view/theme/vier/config.php:125 msgid "Help or @NewHere ?" msgstr "Help or @NewHere ?" -#: view/theme/vier/config.php:127 view/theme/vier/theme.php:373 +#: view/theme/vier/config.php:126 view/theme/vier/theme.php:373 msgid "Connect Services" msgstr "Connect services" -#: view/theme/vier/config.php:128 +#: view/theme/vier/config.php:127 msgid "Find Friends" msgstr "Find friends" -#: view/theme/vier/config.php:129 view/theme/vier/theme.php:181 +#: view/theme/vier/config.php:128 view/theme/vier/theme.php:181 msgid "Last users" msgstr "Last users" diff --git a/view/lang/en-us/strings.php b/view/lang/en-us/strings.php index e6ab81cef..e77eb64e1 100644 --- a/view/lang/en-us/strings.php +++ b/view/lang/en-us/strings.php @@ -37,6 +37,7 @@ $a->strings["Attending"] = [ ]; $a->strings["Not attending"] = "Not attending"; $a->strings["Might attend"] = "Might attend"; +$a->strings["Reshares"] = "Reshares"; $a->strings["Select"] = "Select"; $a->strings["Delete"] = "Delete"; $a->strings["View %s's profile @ %s"] = "View %s's profile @ %s"; @@ -54,6 +55,8 @@ $a->strings["View Photos"] = "View photos"; $a->strings["Network Posts"] = "Network posts"; $a->strings["View Contact"] = "View contact"; $a->strings["Send PM"] = "Send PM"; +$a->strings["Block"] = "Block"; +$a->strings["Ignore"] = "Ignore"; $a->strings["Poke"] = "Poke"; $a->strings["Connect/Follow"] = "Connect/Follow"; $a->strings["%s likes this."] = "%s likes this."; @@ -61,6 +64,7 @@ $a->strings["%s doesn't like this."] = "%s doesn't like this."; $a->strings["%s attends."] = "%s attends."; $a->strings["%s doesn't attend."] = "%s won't attend."; $a->strings["%s attends maybe."] = "%s might attend."; +$a->strings["%s reshared this."] = "%s reshared this."; $a->strings["and"] = "and"; $a->strings["and %d other people"] = "and %d other people"; $a->strings["%2\$d people like this"] = "%2\$d people like this"; @@ -73,6 +77,7 @@ $a->strings["%2\$d people don't attend"] = "%2\ $a->strings["%s don't attend."] = "%s won't attend."; $a->strings["%2\$d people attend maybe"] = "%2\$d people might attend"; $a->strings["%s attend maybe."] = "%s may be attending."; +$a->strings["%2\$d people reshared this"] = "%2\$d people reshared this"; $a->strings["Visible to everybody"] = "Visible to everybody"; $a->strings["Please enter a image/video/audio/webpage URL:"] = "Please enter an image/video/audio/webpage URL:"; $a->strings["Tag term:"] = "Tag term:"; @@ -195,474 +200,12 @@ $a->strings["Yes"] = "Yes"; $a->strings["Permission denied."] = "Permission denied."; $a->strings["Archives"] = "Archives"; $a->strings["show more"] = "show more"; -$a->strings["Theme settings updated."] = "Theme settings updated."; -$a->strings["Information"] = "Information"; -$a->strings["Overview"] = "Overview"; -$a->strings["Federation Statistics"] = "Federation statistics"; -$a->strings["Configuration"] = "Configuration"; -$a->strings["Site"] = "Site"; -$a->strings["Users"] = "Users"; -$a->strings["Addons"] = "Addons"; -$a->strings["Themes"] = "Theme selection"; -$a->strings["Additional features"] = "Additional features"; -$a->strings["Terms of Service"] = "Terms of Service"; -$a->strings["Database"] = "Database"; -$a->strings["DB updates"] = "DB updates"; -$a->strings["Inspect Queue"] = "Inspect queue"; -$a->strings["Inspect Deferred Workers"] = "Inspect deferred workers"; -$a->strings["Inspect worker Queue"] = "Inspect worker queue"; -$a->strings["Tools"] = "Tools"; -$a->strings["Contact Blocklist"] = "Contact blocklist"; -$a->strings["Server Blocklist"] = "Server blocklist"; -$a->strings["Delete Item"] = "Delete item"; -$a->strings["Logs"] = "Logs"; -$a->strings["View Logs"] = "View logs"; -$a->strings["Diagnostics"] = "Diagnostics"; -$a->strings["PHP Info"] = "PHP info"; -$a->strings["probe address"] = "Probe address"; -$a->strings["check webfinger"] = "Check webfinger"; -$a->strings["Admin"] = "Admin"; -$a->strings["Addon Features"] = "Addon features"; -$a->strings["User registrations waiting for confirmation"] = "User registrations awaiting confirmation"; -$a->strings["Administration"] = "Administration"; -$a->strings["Display Terms of Service"] = "Display Terms of Service"; -$a->strings["Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page."] = "Enable the Terms of Service page. If this is enabled, a link to the terms will be added to the registration form and to the general information page."; -$a->strings["Display Privacy Statement"] = "Display Privacy Statement"; -$a->strings["Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR."] = "Show some information needed, for example, to comply with EU-GDPR."; -$a->strings["Privacy Statement Preview"] = "Privacy Statement Preview"; -$a->strings["The Terms of Service"] = "Terms of Service"; -$a->strings["Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below."] = "Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] or less."; -$a->strings["Save Settings"] = "Save settings"; -$a->strings["Blocked domain"] = "Blocked domain"; -$a->strings["The blocked domain"] = "Blocked domain"; -$a->strings["Reason for the block"] = "Reason for the block"; -$a->strings["The reason why you blocked this domain."] = "Reason why you blocked this domain."; -$a->strings["Delete domain"] = "Delete domain"; -$a->strings["Check to delete this entry from the blocklist"] = "Check to delete this entry from the blocklist"; -$a->strings["This page can be used to define a black list of servers from the federated network that are not allowed to interact with your node. For all entered domains you should also give a reason why you have blocked the remote server."] = "This page can be used to define a blacklist of servers from the federated network that are not allowed to interact with your node. For all entered domains you should also give a reason why you have blocked the remote server."; -$a->strings["The list of blocked servers will be made publically available on the /friendica page so that your users and people investigating communication problems can find the reason easily."] = "The list of blocked servers will be available publicly on the Friendica page so that your users and people investigating communication problems can find the reason."; -$a->strings["Add new entry to block list"] = "Add new entry to block list"; -$a->strings["Server Domain"] = "Server domain"; -$a->strings["The domain of the new server to add to the block list. Do not include the protocol."] = "The domain of the new server to add to the block list. Do not include the protocol."; -$a->strings["Block reason"] = "Block reason"; -$a->strings["Add Entry"] = "Add entry"; -$a->strings["Save changes to the blocklist"] = "Save changes to the blocklist"; -$a->strings["Current Entries in the Blocklist"] = "Current entries in the blocklist"; -$a->strings["Delete entry from blocklist"] = "Delete entry from blocklist"; -$a->strings["Delete entry from blocklist?"] = "Delete entry from blocklist?"; -$a->strings["Server added to blocklist."] = "Server added to blocklist."; -$a->strings["Site blocklist updated."] = "Site blocklist updated."; -$a->strings["The contact has been blocked from the node"] = "This contact has been blocked from the node"; -$a->strings["Could not find any contact entry for this URL (%s)"] = "Could not find any contact entry for this URL (%s)"; -$a->strings["%s contact unblocked"] = [ - 0 => "%s contact unblocked", - 1 => "%s contacts unblocked", -]; -$a->strings["Remote Contact Blocklist"] = "Remote contact blocklist"; -$a->strings["This page allows you to prevent any message from a remote contact to reach your node."] = "This page allows you to prevent any message from a remote contact to reach your node."; -$a->strings["Block Remote Contact"] = "Block remote contact"; -$a->strings["select all"] = "select all"; -$a->strings["select none"] = "select none"; -$a->strings["Block"] = "Block"; -$a->strings["Unblock"] = "Unblock"; -$a->strings["No remote contact is blocked from this node."] = "No remote contact is blocked from this node."; -$a->strings["Blocked Remote Contacts"] = "Blocked remote contacts"; -$a->strings["Block New Remote Contact"] = "Block new remote contact"; -$a->strings["Photo"] = "Photo"; -$a->strings["Name"] = "Name:"; -$a->strings["Address"] = "Address"; -$a->strings["Profile URL"] = "Profile URL:"; -$a->strings["%s total blocked contact"] = [ - 0 => "%s total blocked contact", - 1 => "%s blocked contacts", -]; -$a->strings["URL of the remote contact to block."] = "URL of the remote contact to block."; -$a->strings["Delete this Item"] = "Delete"; -$a->strings["On this page you can delete an item from your node. If the item is a top level posting, the entire thread will be deleted."] = "Here you can delete an item from this node. If the item is a top-level posting, the entire thread will be deleted."; -$a->strings["You need to know the GUID of the item. You can find it e.g. by looking at the display URL. The last part of http://example.com/display/123456 is the GUID, here 123456."] = "You need to know the global unique identifier (GUID) of the item, which you can find by looking at the display URL. The last part of http://example.com/display/123456 is the GUID: i.e. 123456."; -$a->strings["GUID"] = "GUID"; -$a->strings["The GUID of the item you want to delete."] = "GUID of item to be deleted."; -$a->strings["Item marked for deletion."] = "Item marked for deletion."; -$a->strings["unknown"] = "unknown"; -$a->strings["This page offers you some numbers to the known part of the federated social network your Friendica node is part of. These numbers are not complete but only reflect the part of the network your node is aware of."] = "This page offers statistics about the federated social network, of which your Friendica node is one part. These numbers do not represent the entire network, but merely the parts that are connected to your node.\""; -$a->strings["The Auto Discovered Contact Directory feature is not enabled, it will improve the data displayed here."] = "The Auto Discovered Contact Directory feature is not enabled; enabling it will improve the data displayed here."; -$a->strings["Currently this node is aware of %d nodes with %d registered users from the following platforms:"] = "Currently, this node is aware of %d nodes with %d registered users from the following platforms:"; -$a->strings["ID"] = "ID"; -$a->strings["Recipient Name"] = "Recipient name"; -$a->strings["Recipient Profile"] = "Recipient profile"; -$a->strings["Network"] = "Network"; -$a->strings["Created"] = "Created"; -$a->strings["Last Tried"] = "Last Tried"; -$a->strings["This page lists the content of the queue for outgoing postings. These are postings the initial delivery failed for. They will be resend later and eventually deleted if the delivery fails permanently."] = "This page lists the content of the queue for outgoing postings. These are postings for which the initial delivery failed. They will be resent later, and eventually deleted if the delivery fails permanently."; -$a->strings["Inspect Deferred Worker Queue"] = "Inspect deferred worker queue"; -$a->strings["This page lists the deferred worker jobs. This are jobs that couldn't be executed at the first time."] = "This page lists the deferred worker jobs. These are jobs that couldn't initially be executed."; -$a->strings["Inspect Worker Queue"] = "Inspect worker queue"; -$a->strings["This page lists the currently queued worker jobs. These jobs are handled by the worker cronjob you've set up during install."] = "This page lists the currently queued worker jobs. These jobs are handled by the worker cronjob you've set up during install."; -$a->strings["Job Parameters"] = "Job parameters"; -$a->strings["Priority"] = "Priority"; -$a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion..htconfig.php
. See the Config help page for help with the transition."] = "Friendica's configuration is now stored in config/local.config.php; please copy config/local-sample.config.php and move your config from config/local.ini.php. See the Config help page for help with the transition..htconfig.php
. See the Config help page for help with the transition.";
-$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."] = "Friendica's configuration is now stored in config/local.config.php; please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition.";
-$a->strings["%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."] = "%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help.";
-$a->strings["Normal Account"] = "Standard account";
-$a->strings["Automatic Follower Account"] = "Automatic follower account";
-$a->strings["Public Forum Account"] = "Public forum account";
-$a->strings["Automatic Friend Account"] = "Automatic friend account";
-$a->strings["Blog Account"] = "Blog account";
-$a->strings["Private Forum Account"] = "Private forum account";
-$a->strings["Message queues"] = "Message queues";
-$a->strings["Server Settings"] = "Server Settings";
-$a->strings["Summary"] = "Summary";
-$a->strings["Registered users"] = "Signed up users";
-$a->strings["Pending registrations"] = "Pending registrations";
-$a->strings["Version"] = "Version";
-$a->strings["Active addons"] = "Active addons";
-$a->strings["Can not parse base url. Must have at least .htconfig.php
. See the Config help page for help with the transition."] = "Friendica's configuration is now stored in config/local.config.php; please copy config/local-sample.config.php and move your config from config/local.ini.php. See the Config help page for help with the transition..htconfig.php
. See the Config help page for help with the transition.";
+$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."] = "Friendica's configuration is now stored in config/local.config.php; please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition.";
+$a->strings["%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."] = "%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help.";
+$a->strings["Friendica's system.basepath was updated from '%s' to '%s'. Please remove the system.basepath from your db to avoid differences."] = "The system.basepath was updated from '%s' to '%s'. Please remove the system.basepath from your db to avoid differences.";
+$a->strings["Friendica's current system.basepath '%s' is wrong and the config file '%s' isn't used."] = "The current system.basepath '%s' is wrong and the config file '%s' isn't used.";
+$a->strings["Friendica's current system.basepath '%s' is not equal to the config file '%s'. Please fix your configuration."] = "The current system.basepath '%s' is not equal to the config file '%s'. Please fix your configuration.";
+$a->strings["Normal Account"] = "Standard account";
+$a->strings["Automatic Follower Account"] = "Automatic follower account";
+$a->strings["Public Forum Account"] = "Public forum account";
+$a->strings["Automatic Friend Account"] = "Automatic friend account";
+$a->strings["Blog Account"] = "Blog account";
+$a->strings["Private Forum Account"] = "Private forum account";
+$a->strings["Message queues"] = "Message queues";
+$a->strings["Server Settings"] = "Server Settings";
+$a->strings["Summary"] = "Summary";
+$a->strings["Registered users"] = "Signed up users";
+$a->strings["Pending registrations"] = "Pending registrations";
+$a->strings["Version"] = "Version";
+$a->strings["Active addons"] = "Active addons";
+$a->strings["Theme settings updated."] = "Theme settings updated.";
+$a->strings["Theme %s disabled."] = "Theme %s disabled.";
+$a->strings["Theme %s successfully enabled."] = "Theme %s successfully enabled.";
+$a->strings["Theme %s failed to install."] = "Theme %s failed to install.";
+$a->strings["Screenshot"] = "Screenshot";
+$a->strings["Themes"] = "Theme selection";
+$a->strings["Unknown theme."] = "Unknown theme.";
+$a->strings["Reload active themes"] = "Reload active themes";
+$a->strings["No themes found on the system. They should be placed in %1\$s"] = "No themes found on the system. They should be placed in %1\$s";
+$a->strings["[Experimental]"] = "[Experimental]";
+$a->strings["[Unsupported]"] = "[Unsupported]";
+$a->strings["The Terms of Service settings have been updated."] = "The Terms of Service settings have been updated.";
+$a->strings["Display Terms of Service"] = "Display Terms of Service";
+$a->strings["Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page."] = "Enable the Terms of Service page. If this is enabled, a link to the terms will be added to the registration form and to the general information page.";
+$a->strings["Display Privacy Statement"] = "Display Privacy Statement";
+$a->strings["Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR."] = "Show some information needed, for example, to comply with EU-GDPR.";
+$a->strings["Privacy Statement Preview"] = "Privacy Statement Preview";
+$a->strings["The Terms of Service"] = "Terms of Service";
+$a->strings["Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below."] = "Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] or less.";
+$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tthe administrator of %2\$s has set up an account for you."] = "\n\t\t\tDear %1\$s,\n\t\t\t\tThe administrator of %2\$s has set up an account for you.";
+$a->strings["\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tIf you ever want to delete your account, you can do so at %1\$s/removeme\n\n\t\t\tThank you and welcome to %4\$s."] = "\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tIf you ever want to delete your account, you can do so at %1\$s/removeme\n\n\t\t\tThank you and welcome to %4\$s.";
+$a->strings["%s user blocked"] = [
+ 0 => "%s user blocked",
+ 1 => "%s users blocked",
+];
+$a->strings["%s user unblocked"] = [
+ 0 => "%s user unblocked",
+ 1 => "%s users unblocked",
+];
+$a->strings["You can't remove yourself"] = "You can't remove yourself";
+$a->strings["%s user deleted"] = [
+ 0 => "%s user deleted",
+ 1 => "%s users deleted",
+];
+$a->strings["User \"%s\" deleted"] = "User \"%s\" deleted";
+$a->strings["User \"%s\" blocked"] = "User \"%s\" blocked";
+$a->strings["User \"%s\" unblocked"] = "User \"%s\" unblocked";
+$a->strings["Private Forum"] = "Private Forum";
+$a->strings["Relay"] = "Relay";
+$a->strings["Register date"] = "Registration date";
+$a->strings["Last login"] = "Last login";
+$a->strings["Last item"] = "Last item";
+$a->strings["Type"] = "Type";
+$a->strings["Add User"] = "Add user";
+$a->strings["User registrations waiting for confirm"] = "User registrations awaiting confirmation";
+$a->strings["User waiting for permanent deletion"] = "User awaiting permanent deletion";
+$a->strings["Request date"] = "Request date";
+$a->strings["No registrations."] = "No registrations.";
+$a->strings["Note from the user"] = "Note from the user";
+$a->strings["Deny"] = "Deny";
+$a->strings["User blocked"] = "User blocked";
+$a->strings["Site admin"] = "Site admin";
+$a->strings["Account expired"] = "Account expired";
+$a->strings["New User"] = "New user";
+$a->strings["Permanent deletion"] = "Permanent deletion";
+$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Selected users will be deleted!\\n\\nEverything these users have posted on this site will be permanently deleted!\\n\\nAre you sure?";
+$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?";
+$a->strings["Name of the new user."] = "Name of the new user.";
+$a->strings["Nickname"] = "Nickname";
+$a->strings["Nickname of the new user."] = "Nickname of the new user.";
+$a->strings["Email address of the new user."] = "Email address of the new user.";
+$a->strings["No friends to display."] = "No friends to display.";
+$a->strings["No installed applications."] = "No installed applications.";
+$a->strings["Applications"] = "Applications";
$a->strings["Item was not found."] = "Item was not found.";
+$a->strings["Source input"] = "Source input";
+$a->strings["BBCode::toPlaintext"] = "BBCode::toPlaintext";
+$a->strings["BBCode::convert (raw HTML)"] = "BBCode::convert (raw HTML)";
+$a->strings["BBCode::convert"] = "BBCode::convert";
+$a->strings["BBCode::convert => HTML::toBBCode"] = "BBCode::convert => HTML::toBBCode";
+$a->strings["BBCode::toMarkdown"] = "BBCode::toMarkdown";
+$a->strings["BBCode::toMarkdown => Markdown::convert"] = "BBCode::toMarkdown => Markdown::convert";
+$a->strings["BBCode::toMarkdown => Markdown::toBBCode"] = "BBCode::toMarkdown => Markdown::toBBCode";
+$a->strings["BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"] = "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode";
+$a->strings["Item Body"] = "Item body";
+$a->strings["Item Tags"] = "Item tags";
+$a->strings["Source input (Diaspora format)"] = "Source input (diaspora* format)";
+$a->strings["Markdown::convert (raw HTML)"] = "Markdown::convert (raw HTML)";
+$a->strings["Markdown::convert"] = "Markdown::convert";
+$a->strings["Markdown::toBBCode"] = "Markdown::toBBCode";
+$a->strings["Raw HTML input"] = "Raw HTML input";
+$a->strings["HTML Input"] = "HTML input";
+$a->strings["HTML::toBBCode"] = "HTML::toBBCode";
+$a->strings["HTML::toBBCode => BBCode::convert"] = "HTML::toBBCode => BBCode::convert";
+$a->strings["HTML::toBBCode => BBCode::convert (raw HTML)"] = "HTML::toBBCode => BBCode::convert (raw HTML)";
+$a->strings["HTML::toMarkdown"] = "HTML::toMarkdown";
+$a->strings["HTML::toPlaintext"] = "HTML::toPlaintext";
+$a->strings["Source text"] = "Source text";
+$a->strings["BBCode"] = "BBCode";
+$a->strings["Markdown"] = "Markdown";
+$a->strings["HTML"] = "HTML";
+$a->strings["Overview"] = "Overview";
+$a->strings["Configuration"] = "Configuration";
+$a->strings["Database"] = "Database";
+$a->strings["DB updates"] = "DB updates";
+$a->strings["Inspect Deferred Workers"] = "Inspect deferred workers";
+$a->strings["Inspect worker Queue"] = "Inspect worker queue";
+$a->strings["Tools"] = "Tools";
+$a->strings["Contact Blocklist"] = "Contact blocklist";
+$a->strings["Diagnostics"] = "Diagnostics";
+$a->strings["PHP Info"] = "PHP info";
+$a->strings["probe address"] = "Probe address";
+$a->strings["check webfinger"] = "Check webfinger";
+$a->strings["Item Source"] = "Item source";
+$a->strings["Babel"] = "Babel";
+$a->strings["Addon Features"] = "Addon features";
+$a->strings["User registrations waiting for confirmation"] = "User registrations awaiting confirmation";
+$a->strings["This page is missing a url parameter."] = "This page is missing a URL parameter.";
+$a->strings["The post was created"] = "The post was created";
$a->strings["%d contact edited."] = [
0 => "%d contact edited.",
1 => "%d contacts edited.",
@@ -2055,6 +1997,7 @@ $a->strings["Comma separated list of keywords that should not be converted to ha
$a->strings["Actions"] = "Actions";
$a->strings["Suggestions"] = "Suggestions";
$a->strings["Suggest potential friends"] = "Suggest potential friends";
+$a->strings["All Contacts"] = "All contacts";
$a->strings["Show all contacts"] = "Show all contacts";
$a->strings["Unblocked"] = "Unblocked";
$a->strings["Only show unblocked contacts"] = "Only show unblocked contacts";
@@ -2084,9 +2027,62 @@ $a->strings["Toggle Blocked status"] = "Toggle blocked status";
$a->strings["Toggle Ignored status"] = "Toggle ignored status";
$a->strings["Toggle Archive status"] = "Toggle archive status";
$a->strings["Delete contact"] = "Delete contact";
+$a->strings["Credits"] = "Credits";
+$a->strings["Friendica is a community project, that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!"] = "Friendica is a community project that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!";
+$a->strings["No entries (some entries may be hidden)."] = "No entries (entries may be hidden).";
+$a->strings["Find on this site"] = "Find on this site";
+$a->strings["Results for:"] = "Results for:";
+$a->strings["Site Directory"] = "Site directory";
+$a->strings["You must be logged in to use this module"] = "You must be logged in to use this module";
+$a->strings["Source URL"] = "Source URL";
+$a->strings["Filetag %s saved to item"] = "File-tag %s saved to item";
+$a->strings["- select -"] = "- select -";
+$a->strings["No given contact."] = "No given contact.";
+$a->strings["Installed addons/apps:"] = "Installed addons/apps:";
+$a->strings["No installed addons/apps"] = "No installed addons/apps";
+$a->strings["Read about the Terms of Service of this node."] = "Read about the Terms of Service of this node.";
+$a->strings["On this server the following remote servers are blocked."] = "On this server the following remote servers are blocked.";
+$a->strings["This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s."] = "This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s.";
+$a->strings["Please visit Friendi.ca to learn more about the Friendica project."] = "Please visit Friendi.ca to learn more about the Friendica project.";
+$a->strings["Bug reports and issues: please visit"] = "Bug reports and issues: please visit";
+$a->strings["the bugtracker at github"] = "the bugtracker at github";
+$a->strings["Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca"] = "Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca";
+$a->strings["Group created."] = "Group created.";
+$a->strings["Could not create group."] = "Could not create group.";
+$a->strings["Group not found."] = "Group not found.";
+$a->strings["Group name changed."] = "Group name changed.";
+$a->strings["Unknown group."] = "Unknown group.";
+$a->strings["Contact is unavailable."] = "Contact is unavailable.";
+$a->strings["Contact is deleted."] = "Contact is deleted.";
+$a->strings["Contact is blocked, unable to add it to a group."] = "Contact is blocked, unable to add it to a group.";
+$a->strings["Unable to add the contact to the group."] = "Unable to add contact to group.";
+$a->strings["Contact successfully added to group."] = "Contact successfully added to group.";
+$a->strings["Unable to remove the contact from the group."] = "Unable to remove contact from group.";
+$a->strings["Contact successfully removed from group."] = "Contact successfully removed from group.";
+$a->strings["Unknown group command."] = "Unknown group command.";
+$a->strings["Bad request."] = "Bad request.";
+$a->strings["Save Group"] = "Save group";
+$a->strings["Filter"] = "Filter";
+$a->strings["Create a group of contacts/friends."] = "Create a group of contacts/friends.";
+$a->strings["Group removed."] = "Group removed.";
+$a->strings["Unable to remove group."] = "Unable to remove group.";
+$a->strings["Delete Group"] = "Delete group";
+$a->strings["Edit Group Name"] = "Edit group name";
+$a->strings["Members"] = "Members";
+$a->strings["Remove contact from group"] = "Remove contact from group";
+$a->strings["Add contact to group"] = "Add contact to group";
+$a->strings["Help:"] = "Help:";
+$a->strings["Welcome to %s"] = "Welcome to %s";
$a->strings["Friendica Communications Server - Setup"] = "Friendica Communications Server - Setup";
$a->strings["System check"] = "System check";
$a->strings["Check again"] = "Check again";
+$a->strings["Base settings"] = "Base settings";
+$a->strings["Host name"] = "Host name";
+$a->strings["Overwrite this field in case the determinated hostname isn't right, otherweise leave it as is."] = "Overwrite this field in case the hostname is incorrect, otherwise leave it as is.";
+$a->strings["Base path to installation"] = "Base path to installation";
+$a->strings["If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."] = "If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot.";
+$a->strings["Sub path of the URL"] = "URL Sub-path ";
+$a->strings["Overwrite this field in case the sub path determination isn't right, otherwise leave it as is. Leaving this field blank means the installation is at the base URL without sub path."] = "Overwrite this field in case the sub path determination isn't right, otherwise leave it as is. Leaving this field blank means the installation is at the base URL without sub-path.";
$a->strings["Database connection"] = "Database connection";
$a->strings["In order to install Friendica we need to know how to connect to your database."] = "In order to install Friendica we need to know how to connect to your database.";
$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Please contact your hosting provider or site administrator if you have questions about these settings.";
@@ -2096,10 +2092,10 @@ $a->strings["Database Login Name"] = "Database login name";
$a->strings["Database Login Password"] = "Database login password";
$a->strings["For security reasons the password must not be empty"] = "For security reasons the password must not be empty";
$a->strings["Database Name"] = "Database name";
-$a->strings["Site administrator email address"] = "Site administrator email address";
-$a->strings["Your account email address must match this in order to use the web admin panel."] = "Your account email address must match this in order to use the web admin panel.";
$a->strings["Please select a default timezone for your website"] = "Please select a default time zone for your website";
$a->strings["Site settings"] = "Site settings";
+$a->strings["Site administrator email address"] = "Site administrator email address";
+$a->strings["Your account email address must match this in order to use the web admin panel."] = "Your account email address must match this in order to use the web admin panel.";
$a->strings["System Language:"] = "System language:";
$a->strings["Set the default language for your Friendica installation interface and to send emails."] = "Set the default language for your Friendica installation interface and email communication.";
$a->strings["Your Friendica site database has been installed."] = "Your Friendica site database has been installed.";
@@ -2107,7 +2103,34 @@ $a->strings["Installation finished"] = "Installation finished";
$a->strings["Use an application on a mobile device to get two-factor authentication codes when prompted on login.
"] = "Use an application on a mobile device to get two-factor authentication codes when prompted on login.
"; +$a->strings["Authenticator app"] = "Authenticator app"; +$a->strings["Configured"] = "Configured"; +$a->strings["Not Configured"] = "Not configured"; +$a->strings["You haven't finished configuring your authenticator app.
"] = "You haven't finished configuring your authenticator app.
"; +$a->strings["Your authenticator app is correctly configured.
"] = "Your authenticator app is correctly configured.
"; +$a->strings["Recovery codes"] = "Recovery codes"; +$a->strings["Remaining valid codes"] = "Remaining valid codes"; +$a->strings["These one-use codes can replace an authenticator app code in case you have lost access to it.
"] = "These one-use codes can replace an authenticator app code in case you have lost access to it.
"; +$a->strings["Current password:"] = "Current password:"; +$a->strings["You need to provide your current password to change two-factor authentication settings."] = "You need to provide your current password to change two-factor authentication settings."; +$a->strings["Enable two-factor authentication"] = "Enable two-factor authentication"; +$a->strings["Disable two-factor authentication"] = "Disable two-factor authentication"; +$a->strings["Show recovery codes"] = "Show recovery codes"; +$a->strings["Finish app configuration"] = "Finish app configuration"; +$a->strings["Please enter your password to access this page."] = "Please enter your password to access this page."; +$a->strings["New recovery codes successfully generated."] = "New recovery codes successfully generated."; +$a->strings["Two-factor recovery codes"] = "Two-factor recovery codes"; +$a->strings["Recovery codes can be used to access your account in the event you lose access to your device and cannot receive two-factor authentication codes.
Put these in a safe spot! If you lose your device and don’t have the recovery codes you will lose access to your account.
"] = "Recovery codes can be used to access your account in the event you lose access to your device and cannot receive two-factor authentication codes.
Put these in a safe place! If you lose your device and don’t have the recovery codes you will lose access to your account.
"; +$a->strings["When you generate new recovery codes, you must copy the new codes. Your old codes won’t work anymore."] = "When you generate new recovery codes, you must copy the new codes. Your old codes won’t work anymore."; +$a->strings["Generate new recovery codes"] = "Generate new recovery codes"; +$a->strings["Next: Verification"] = "Next: Verification"; +$a->strings["Two-factor authentication successfully activated."] = "Two-factor authentication successfully activated."; +$a->strings["Invalid code, please retry."] = "Invalid code, please try again."; +$a->strings["Or you can submit the authentication settings manually:
\nOr you can submit the authentication settings manually:
\nPlease scan this QR Code with your authenticator app and submit the provided code.
"] = "Please scan this QR Code with your authenticator app and submit the provided code.
"; +$a->strings["Or you can open the following URL in your mobile devicde:
"] = "Or you can open the following URL in your mobile device:
"; +$a->strings["Please enter a code from your authentication app"] = "Please enter a code from your authentication app"; +$a->strings["Verify code and enable two-factor authentication"] = "Verify code and enable two-factor authentication"; +$a->strings["Bad Request"] = "Bad request"; +$a->strings["Unauthorized"] = "Unauthorized"; +$a->strings["Forbidden"] = "Forbidden"; +$a->strings["Not Found"] = "Not found"; +$a->strings["Internal Server Error"] = "Internal Server Error"; +$a->strings["Service Unavailable"] = "Service Unavailable"; +$a->strings["The server cannot or will not process the request due to an apparent client error."] = "The server cannot process the request due to an apparent client error."; +$a->strings["Authentication is required and has failed or has not yet been provided."] = "Authentication is required but has failed or not yet being provided."; +$a->strings["The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource, or may need an account."] = "The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource, or may need an account."; +$a->strings["The requested resource could not be found but may be available in the future."] = "The requested resource could not be found but may be available in the future."; +$a->strings["An unexpected condition was encountered and no more specific message is suitable."] = "An unexpected condition was encountered and no more specific message is available."; +$a->strings["The server is currently unavailable (because it is overloaded or down for maintenance). Please try again later."] = "The server is currently unavailable (possibly because it is overloaded or down for maintenance). Please try again later."; +$a->strings["Go back"] = "Go back"; $a->strings["At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node's user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication."] = "At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), a username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but won’t be visibly displayed. The listing of an account in the node's user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication."; $a->strings["This data is required for communication and is passed on to the nodes of the communication partners and is stored there. Users can enter additional private data that may be transmitted to the communication partners accounts."] = "This information is required for communication and is passed on to the nodes of the communication partners and is stored there. Users can enter additional personal information that may be transmitted to the communication partner's accounts."; $a->strings["At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1\$s/removeme. The deletion of the account will be permanent. Deletion of the data will also be requested from the nodes of the communication partners."] = "At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1\$s/removeme. The deletion of the account will be permanent. Deletion of the data will also be requested from the nodes of the communication partners."; $a->strings["Privacy Statement"] = "Privacy Statement"; +$a->strings["Remaining recovery codes: %d"] = "Remaining recovery codes: %d"; +$a->strings["Two-factor recovery"] = "Two-factor recovery"; +$a->strings["You can enter one of your one-time recovery codes in case you lost access to your mobile device.
"] = "You can enter one of your one-time recovery codes in case you lost access to your mobile device.
"; +$a->strings["Don’t have your phone? Enter a two-factor recovery code"] = "Don’t have your phone? Enter a two-factor recovery code"; +$a->strings["Please enter a recovery code"] = "Please enter a recovery code"; +$a->strings["Submit recovery code and complete login"] = "Submit recovery code and complete login"; +$a->strings["Open the two-factor authentication app on your device to get an authentication code and verify your identity.
"] = "Open the two-factor authentication app on your device to get an authentication code and verify your identity.
"; +$a->strings["Verify code and complete login"] = "Verify code and complete login"; $a->strings["This entry was edited"] = "This entry was edited"; +$a->strings["Private Message"] = "Private message"; $a->strings["Delete locally"] = "Delete locally"; $a->strings["Delete globally"] = "Delete globally"; $a->strings["Remove locally"] = "Remove locally"; @@ -2218,6 +2296,8 @@ $a->strings["Custom"] = "Custom"; $a->strings["Note"] = "Note"; $a->strings["Check image permissions if all users are allowed to see the image"] = "Check image permissions that everyone is allowed to see the image"; $a->strings["Select color scheme"] = "Select color scheme"; +$a->strings["Copy or paste schemestring"] = "Copy or paste theme string"; +$a->strings["You can copy this string to share your theme with others. Pasting here applies the schemestring"] = "You can copy this string to share your theme with others. Pasting here applies the theme string"; $a->strings["Navigation bar background color"] = "Navigation bar background color:"; $a->strings["Navigation bar icon color "] = "Navigation bar icon color:"; $a->strings["Link color"] = "Link color:"; diff --git a/view/lang/et/messages.po b/view/lang/et/messages.po new file mode 100644 index 000000000..0601ee214 --- /dev/null +++ b/view/lang/et/messages.po @@ -0,0 +1,9906 @@ +# FRIENDICA Distributed Social Network +# Copyright (C) 2010, 2011, 2012, 2013 the Friendica Project +# This file is distributed under the same license as the Friendica package. +# +# Translators: +# Rain Hawk, 2019 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-02-23 18:53-0500\n" +"PO-Revision-Date: 2019-04-16 05:25+0000\n" +"Last-Translator: Rain Hawk\n" +"Language-Team: Estonian (http://www.transifex.com/Friendica/friendica/language/et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: include/api.php:1117 +#, php-format +msgid "Daily posting limit of %d post reached. The post was rejected." +msgid_plural "Daily posting limit of %d posts reached. The post was rejected." +msgstr[0] "" +msgstr[1] "" + +#: include/api.php:1131 +#, php-format +msgid "Weekly posting limit of %d post reached. The post was rejected." +msgid_plural "" +"Weekly posting limit of %d posts reached. The post was rejected." +msgstr[0] "" +msgstr[1] "" + +#: include/api.php:1145 +#, php-format +msgid "Monthly posting limit of %d post reached. The post was rejected." +msgstr "" + +#: include/api.php:4520 mod/photos.php:93 mod/photos.php:201 +#: mod/photos.php:695 mod/photos.php:1126 mod/photos.php:1143 +#: mod/photos.php:1636 mod/profile_photo.php:85 mod/profile_photo.php:94 +#: mod/profile_photo.php:103 mod/profile_photo.php:217 +#: mod/profile_photo.php:305 mod/profile_photo.php:315 src/Model/User.php:736 +#: src/Model/User.php:744 src/Model/User.php:752 +msgid "Profile Photos" +msgstr "Profiilifotod" + +#: include/conversation.php:160 include/conversation.php:297 +#: src/Model/Item.php:3283 +msgid "event" +msgstr "sündmus" + +#: include/conversation.php:163 include/conversation.php:173 +#: include/conversation.php:300 include/conversation.php:309 +#: mod/subthread.php:88 mod/tagger.php:70 +msgid "status" +msgstr "staatus" + +#: include/conversation.php:168 include/conversation.php:305 +#: mod/subthread.php:88 mod/tagger.php:70 src/Model/Item.php:3285 +msgid "photo" +msgstr "foto" + +#: include/conversation.php:181 +#, php-format +msgid "%1$s likes %2$s's %3$s" +msgstr "" + +#: include/conversation.php:183 +#, php-format +msgid "%1$s doesn't like %2$s's %3$s" +msgstr "" + +#: include/conversation.php:185 +#, php-format +msgid "%1$s attends %2$s's %3$s" +msgstr "" + +#: include/conversation.php:187 +#, php-format +msgid "%1$s doesn't attend %2$s's %3$s" +msgstr "" + +#: include/conversation.php:189 +#, php-format +msgid "%1$s attends maybe %2$s's %3$s" +msgstr "" + +#: include/conversation.php:224 +#, php-format +msgid "%1$s is now friends with %2$s" +msgstr "" + +#: include/conversation.php:265 +#, php-format +msgid "%1$s poked %2$s" +msgstr "" + +#: include/conversation.php:319 mod/tagger.php:108 +#, php-format +msgid "%1$s tagged %2$s's %3$s with %4$s" +msgstr "" + +#: include/conversation.php:341 +msgid "post/item" +msgstr "postitus/element" + +#: include/conversation.php:342 +#, php-format +msgid "%1$s marked %2$s's %3$s as favorite" +msgstr "" + +#: include/conversation.php:568 mod/photos.php:1467 mod/profiles.php:352 +msgid "Likes" +msgstr "Meeldimised" + +#: include/conversation.php:568 mod/photos.php:1467 mod/profiles.php:355 +msgid "Dislikes" +msgstr "Mittemeeldimised" + +#: include/conversation.php:569 include/conversation.php:1505 +#: mod/photos.php:1468 +msgid "Attending" +msgid_plural "Attending" +msgstr[0] "" +msgstr[1] "" + +#: include/conversation.php:569 mod/photos.php:1468 +msgid "Not attending" +msgstr "Ei osale" + +#: include/conversation.php:569 mod/photos.php:1468 +msgid "Might attend" +msgstr "Kaalub osalemist" + +#: include/conversation.php:649 mod/photos.php:1524 src/Object/Post.php:208 +msgid "Select" +msgstr "Vali" + +#: include/conversation.php:650 mod/admin.php:2072 mod/photos.php:1525 +#: mod/settings.php:726 src/Module/Contact.php:827 src/Module/Contact.php:1102 +msgid "Delete" +msgstr "Kustuta" + +#: include/conversation.php:684 src/Object/Post.php:381 +#: src/Object/Post.php:382 +#, php-format +msgid "View %s's profile @ %s" +msgstr "" + +#: include/conversation.php:696 src/Object/Post.php:369 +msgid "Categories:" +msgstr "Kategooriad:" + +#: include/conversation.php:697 src/Object/Post.php:370 +msgid "Filed under:" +msgstr "" + +#: include/conversation.php:704 src/Object/Post.php:395 +#, php-format +msgid "%s from %s" +msgstr "" + +#: include/conversation.php:719 +msgid "View in context" +msgstr "" + +#: include/conversation.php:721 include/conversation.php:1171 +#: mod/editpost.php:88 mod/message.php:260 mod/message.php:442 +#: mod/photos.php:1440 mod/wallmessage.php:141 src/Object/Post.php:422 +msgid "Please wait" +msgstr "Palun oota" + +#: include/conversation.php:785 +msgid "remove" +msgstr "eemalda" + +#: include/conversation.php:789 +msgid "Delete Selected Items" +msgstr "Kustuta valitud elemendid" + +#: include/conversation.php:893 view/theme/frio/theme.php:358 +msgid "Follow Thread" +msgstr "Jälgi vestlust" + +#: include/conversation.php:894 src/Model/Contact.php:1049 +msgid "View Status" +msgstr "Vaata staatust" + +#: include/conversation.php:895 include/conversation.php:911 +#: mod/allfriends.php:72 mod/directory.php:198 mod/dirfind.php:226 +#: mod/match.php:87 mod/suggest.php:87 src/Model/Contact.php:989 +#: src/Model/Contact.php:1042 src/Model/Contact.php:1050 +msgid "View Profile" +msgstr "Vaata profiili" + +#: include/conversation.php:896 src/Model/Contact.php:1051 +msgid "View Photos" +msgstr "Vaata fotosid" + +#: include/conversation.php:897 src/Model/Contact.php:1043 +#: src/Model/Contact.php:1052 +msgid "Network Posts" +msgstr "Võrgupostitused" + +#: include/conversation.php:898 src/Model/Contact.php:1044 +#: src/Model/Contact.php:1053 +msgid "View Contact" +msgstr "Vaata kontakti" + +#: include/conversation.php:899 src/Model/Contact.php:1055 +msgid "Send PM" +msgstr "Saada privaatsõnum" + +#: include/conversation.php:903 src/Model/Contact.php:1056 +msgid "Poke" +msgstr "Müksa" + +#: include/conversation.php:908 mod/allfriends.php:73 mod/dirfind.php:227 +#: mod/follow.php:147 mod/match.php:88 mod/suggest.php:88 +#: src/Content/Widget.php:63 src/Model/Contact.php:1045 +#: src/Module/Contact.php:574 view/theme/vier/theme.php:201 +msgid "Connect/Follow" +msgstr "Ühendu/Järgi" + +#: include/conversation.php:1030 +#, php-format +msgid "%s likes this." +msgstr "" + +#: include/conversation.php:1033 +#, php-format +msgid "%s doesn't like this." +msgstr "" + +#: include/conversation.php:1036 +#, php-format +msgid "%s attends." +msgstr "" + +#: include/conversation.php:1039 +#, php-format +msgid "%s doesn't attend." +msgstr "" + +#: include/conversation.php:1042 +#, php-format +msgid "%s attends maybe." +msgstr "" + +#: include/conversation.php:1050 +msgid "and" +msgstr "ja" + +#: include/conversation.php:1056 +#, php-format +msgid "and %d other people" +msgstr "" + +#: include/conversation.php:1064 +#, php-format +msgid "%2$d people like this" +msgstr "" + +#: include/conversation.php:1065 +#, php-format +msgid "%s like this." +msgstr "" + +#: include/conversation.php:1068 +#, php-format +msgid "%2$d people don't like this" +msgstr "" + +#: include/conversation.php:1069 +#, php-format +msgid "%s don't like this." +msgstr "" + +#: include/conversation.php:1072 +#, php-format +msgid "%2$d people attend" +msgstr "" + +#: include/conversation.php:1073 +#, php-format +msgid "%s attend." +msgstr "" + +#: include/conversation.php:1076 +#, php-format +msgid "%2$d people don't attend" +msgstr "" + +#: include/conversation.php:1077 +#, php-format +msgid "%s don't attend." +msgstr "" + +#: include/conversation.php:1080 +#, php-format +msgid "%2$d people attend maybe" +msgstr "" + +#: include/conversation.php:1081 +#, php-format +msgid "%s attend maybe." +msgstr "" + +#: include/conversation.php:1110 +msgid "Visible to everybody" +msgstr "" + +#: include/conversation.php:1111 src/Object/Post.php:886 +msgid "Please enter a image/video/audio/webpage URL:" +msgstr "Palun sisesta pildi/video/audio/veebilehe URL:" + +#: include/conversation.php:1112 +msgid "Tag term:" +msgstr "Tag`i tingimus:" + +#: include/conversation.php:1113 mod/filer.php:35 +msgid "Save to Folder:" +msgstr "Salvesta kausta:" + +#: include/conversation.php:1114 +msgid "Where are you right now?" +msgstr "Kus sa hetkel oled?" + +#: include/conversation.php:1115 +msgid "Delete item(s)?" +msgstr "Kustutada element(id)?" + +#: include/conversation.php:1147 +msgid "New Post" +msgstr "Uus postitus" + +#: include/conversation.php:1150 +msgid "Share" +msgstr "Jaga" + +#: include/conversation.php:1151 mod/editpost.php:74 mod/message.php:258 +#: mod/message.php:439 mod/wallmessage.php:139 +msgid "Upload photo" +msgstr "Lae foto üles" + +#: include/conversation.php:1152 mod/editpost.php:75 +msgid "upload photo" +msgstr "lae foto üles" + +#: include/conversation.php:1153 mod/editpost.php:76 +msgid "Attach file" +msgstr "Manusta fail" + +#: include/conversation.php:1154 mod/editpost.php:77 +msgid "attach file" +msgstr "manusta fail" + +#: include/conversation.php:1155 src/Object/Post.php:878 +msgid "Bold" +msgstr "" + +#: include/conversation.php:1156 src/Object/Post.php:879 +msgid "Italic" +msgstr "" + +#: include/conversation.php:1157 src/Object/Post.php:880 +msgid "Underline" +msgstr "Allajoonitud" + +#: include/conversation.php:1158 src/Object/Post.php:881 +msgid "Quote" +msgstr "Tsitaat" + +#: include/conversation.php:1159 src/Object/Post.php:882 +msgid "Code" +msgstr "Kood" + +#: include/conversation.php:1160 src/Object/Post.php:883 +msgid "Image" +msgstr "Pilt" + +#: include/conversation.php:1161 src/Object/Post.php:884 +msgid "Link" +msgstr "" + +#: include/conversation.php:1162 src/Object/Post.php:885 +msgid "Link or Media" +msgstr "Link või meediafail" + +#: include/conversation.php:1163 mod/editpost.php:84 +msgid "Set your location" +msgstr "Vali oma asukoht" + +#: include/conversation.php:1164 mod/editpost.php:85 +msgid "set location" +msgstr "vali asukoht" + +#: include/conversation.php:1165 mod/editpost.php:86 +msgid "Clear browser location" +msgstr "Kustuta sirviku asukoht" + +#: include/conversation.php:1166 mod/editpost.php:87 +msgid "clear location" +msgstr "kustuta asukoht" + +#: include/conversation.php:1168 mod/editpost.php:102 +msgid "Set title" +msgstr "Pane pealkiri" + +#: include/conversation.php:1170 mod/editpost.php:104 +msgid "Categories (comma-separated list)" +msgstr "Kategooriad (komaga-eraldatud nimistu)" + +#: include/conversation.php:1172 mod/editpost.php:89 +msgid "Permission settings" +msgstr "Õiguste sätted" + +#: include/conversation.php:1173 mod/editpost.php:119 +msgid "permissions" +msgstr "õigused" + +#: include/conversation.php:1182 mod/editpost.php:99 +msgid "Public post" +msgstr "Avalik postitus" + +#: include/conversation.php:1186 mod/editpost.php:110 mod/events.php:551 +#: mod/photos.php:1458 mod/photos.php:1497 mod/photos.php:1557 +#: src/Object/Post.php:887 +msgid "Preview" +msgstr "Eelvaade" + +#: include/conversation.php:1190 include/items.php:396 +#: mod/dfrn_request.php:650 mod/editpost.php:113 mod/fbrowser.php:104 +#: mod/fbrowser.php:134 mod/follow.php:161 mod/message.php:153 +#: mod/photos.php:257 mod/photos.php:325 mod/settings.php:666 +#: mod/settings.php:692 mod/suggest.php:44 mod/tagrm.php:20 mod/tagrm.php:115 +#: mod/unfollow.php:132 mod/videos.php:105 src/Module/Contact.php:447 +msgid "Cancel" +msgstr "Katkesta" + +#: include/conversation.php:1195 +msgid "Post to Groups" +msgstr "Postita Gruppidesse" + +#: include/conversation.php:1196 +msgid "Post to Contacts" +msgstr "Postita Kontaktidele" + +#: include/conversation.php:1197 +msgid "Private post" +msgstr "Privaatpostitus" + +#: include/conversation.php:1202 mod/editpost.php:117 +#: src/Model/Profile.php:370 +msgid "Message" +msgstr "Sõnum" + +#: include/conversation.php:1203 mod/editpost.php:118 +msgid "Browser" +msgstr "Sirvik" + +#: include/conversation.php:1475 +msgid "View all" +msgstr "Kuva kõik" + +#: include/conversation.php:1499 +msgid "Like" +msgid_plural "Likes" +msgstr[0] "Mittemeeldimised" +msgstr[1] "Meeldimised" + +#: include/conversation.php:1502 +msgid "Dislike" +msgid_plural "Dislikes" +msgstr[0] "Mittemeeldimised" +msgstr[1] "Mittemeeldimised" + +#: include/conversation.php:1508 +msgid "Not Attending" +msgid_plural "Not Attending" +msgstr[0] "Ei osale" +msgstr[1] "Ei osale" + +#: include/conversation.php:1511 src/Content/ContactSelector.php:167 +msgid "Undecided" +msgid_plural "Undecided" +msgstr[0] "Otsustamata" +msgstr[1] "Otsustamata" + +#: include/enotify.php:57 +msgid "Friendica Notification" +msgstr "Freiendica teade" + +#: include/enotify.php:60 +msgid "Thank You," +msgstr "Tänan," + +#: include/enotify.php:63 +#, php-format +msgid "%1$s, %2$s Administrator" +msgstr "" + +#: include/enotify.php:65 +#, php-format +msgid "%s Administrator" +msgstr "" + +#: include/enotify.php:134 +#, php-format +msgid "[Friendica:Notify] New mail received at %s" +msgstr "" + +#: include/enotify.php:136 +#, php-format +msgid "%1$s sent you a new private message at %2$s." +msgstr "" + +#: include/enotify.php:137 +msgid "a private message" +msgstr "privaatsõnum" + +#: include/enotify.php:137 +#, php-format +msgid "%1$s sent you %2$s." +msgstr "" + +#: include/enotify.php:139 +#, php-format +msgid "Please visit %s to view and/or reply to your private messages." +msgstr "" + +#: include/enotify.php:172 +#, php-format +msgid "%1$s tagged you on [url=%2$s]a %3$s[/url]" +msgstr "" + +#: include/enotify.php:178 +#, php-format +msgid "%1$s commented on [url=%2$s]a %3$s[/url]" +msgstr "" + +#: include/enotify.php:188 +#, php-format +msgid "%1$s tagged you on [url=%2$s]%3$s's %4$s[/url]" +msgstr "" + +#: include/enotify.php:195 +#, php-format +msgid "%1$s commented on [url=%2$s]%3$s's %4$s[/url]" +msgstr "" + +#: include/enotify.php:207 +#, php-format +msgid "%1$s tagged you on [url=%2$s]your %3$s[/url]" +msgstr "" + +#: include/enotify.php:213 +#, php-format +msgid "%1$s commented on [url=%2$s]your %3$s[/url]" +msgstr "" + +#: include/enotify.php:224 +#, php-format +msgid "%1$s tagged you on [url=%2$s]their %3$s[/url]" +msgstr "" + +#: include/enotify.php:230 +#, php-format +msgid "%1$s commented on [url=%2$s]their %3$s[/url]" +msgstr "" + +#: include/enotify.php:243 +#, php-format +msgid "[Friendica:Notify] %s tagged you" +msgstr "" + +#: include/enotify.php:245 +#, php-format +msgid "%1$s tagged you at %2$s" +msgstr "" + +#: include/enotify.php:247 +#, php-format +msgid "[Friendica:Notify] Comment to conversation #%1$d by %2$s" +msgstr "" + +#: include/enotify.php:249 +#, php-format +msgid "%s commented on an item/conversation you have been following." +msgstr "%s kommenteeris elementi/vestlust mida jälgid." + +#: include/enotify.php:254 include/enotify.php:269 include/enotify.php:284 +#: include/enotify.php:303 include/enotify.php:319 +#, php-format +msgid "Please visit %s to view and/or reply to the conversation." +msgstr "" + +#: include/enotify.php:261 +#, php-format +msgid "[Friendica:Notify] %s posted to your profile wall" +msgstr "" + +#: include/enotify.php:263 +#, php-format +msgid "%1$s posted to your profile wall at %2$s" +msgstr "" + +#: include/enotify.php:264 +#, php-format +msgid "%1$s posted to [url=%2$s]your wall[/url]" +msgstr "" + +#: include/enotify.php:276 +#, php-format +msgid "[Friendica:Notify] %s shared a new post" +msgstr "" + +#: include/enotify.php:278 +#, php-format +msgid "%1$s shared a new post at %2$s" +msgstr "" + +#: include/enotify.php:279 +#, php-format +msgid "%1$s [url=%2$s]shared a post[/url]." +msgstr "" + +#: include/enotify.php:291 +#, php-format +msgid "[Friendica:Notify] %1$s poked you" +msgstr "" + +#: include/enotify.php:293 +#, php-format +msgid "%1$s poked you at %2$s" +msgstr "" + +#: include/enotify.php:294 +#, php-format +msgid "%1$s [url=%2$s]poked you[/url]." +msgstr "" + +#: include/enotify.php:311 +#, php-format +msgid "[Friendica:Notify] %s tagged your post" +msgstr "" + +#: include/enotify.php:313 +#, php-format +msgid "%1$s tagged your post at %2$s" +msgstr "" + +#: include/enotify.php:314 +#, php-format +msgid "%1$s tagged [url=%2$s]your post[/url]" +msgstr "" + +#: include/enotify.php:326 +msgid "[Friendica:Notify] Introduction received" +msgstr "" + +#: include/enotify.php:328 +#, php-format +msgid "You've received an introduction from '%1$s' at %2$s" +msgstr "" + +#: include/enotify.php:329 +#, php-format +msgid "You've received [url=%1$s]an introduction[/url] from %2$s." +msgstr "" + +#: include/enotify.php:334 include/enotify.php:380 +#, php-format +msgid "You may visit their profile at %s" +msgstr "" + +#: include/enotify.php:336 +#, php-format +msgid "Please visit %s to approve or reject the introduction." +msgstr "" + +#: include/enotify.php:343 +msgid "[Friendica:Notify] A new person is sharing with you" +msgstr "" + +#: include/enotify.php:345 include/enotify.php:346 +#, php-format +msgid "%1$s is sharing with you at %2$s" +msgstr "" + +#: include/enotify.php:353 +msgid "[Friendica:Notify] You have a new follower" +msgstr "[Friendica teade] Sul on uus jälgija" + +#: include/enotify.php:355 include/enotify.php:356 +#, php-format +msgid "You have a new follower at %2$s : %1$s" +msgstr "" + +#: include/enotify.php:369 +msgid "[Friendica:Notify] Friend suggestion received" +msgstr "[Friendica teade] Sõbrasoovitus vastu võetud" + +#: include/enotify.php:371 +#, php-format +msgid "You've received a friend suggestion from '%1$s' at %2$s" +msgstr "" + +#: include/enotify.php:372 +#, php-format +msgid "" +"You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." +msgstr "" + +#: include/enotify.php:378 +msgid "Name:" +msgstr "Nimi:" + +#: include/enotify.php:379 +msgid "Photo:" +msgstr "Foto:" + +#: include/enotify.php:382 +#, php-format +msgid "Please visit %s to approve or reject the suggestion." +msgstr "" + +#: include/enotify.php:390 include/enotify.php:405 +msgid "[Friendica:Notify] Connection accepted" +msgstr "[Friendica teade] Suhtlus aktsepteeritud" + +#: include/enotify.php:392 include/enotify.php:407 +#, php-format +msgid "'%1$s' has accepted your connection request at %2$s" +msgstr "" + +#: include/enotify.php:393 include/enotify.php:408 +#, php-format +msgid "%2$s has accepted your [url=%1$s]connection request[/url]." +msgstr "" + +#: include/enotify.php:398 +msgid "" +"You are now mutual friends and may exchange status updates, photos, and " +"email without restriction." +msgstr "Olete nüüd sõbrad ja saate vahetada staatuseuuendusi, fotosid ja emaile ilma piiranguteta. " + +#: include/enotify.php:400 +#, php-format +msgid "Please visit %s if you wish to make any changes to this relationship." +msgstr "" + +#: include/enotify.php:413 +#, php-format +msgid "" +"'%1$s' has chosen to accept you a fan, which restricts some forms of " +"communication - such as private messaging and some profile interactions. If " +"this is a celebrity or community page, these settings were applied " +"automatically." +msgstr "" + +#: include/enotify.php:415 +#, php-format +msgid "" +"'%1$s' may choose to extend this into a two-way or more permissive " +"relationship in the future." +msgstr "" + +#: include/enotify.php:417 +#, php-format +msgid "Please visit %s if you wish to make any changes to this relationship." +msgstr "" + +#: include/enotify.php:427 mod/removeme.php:46 +msgid "[Friendica System Notify]" +msgstr "[Friendica süsteemiteade]" + +#: include/enotify.php:427 +msgid "registration request" +msgstr "registreerimise taotlus" + +#: include/enotify.php:429 +#, php-format +msgid "You've received a registration request from '%1$s' at %2$s" +msgstr "" + +#: include/enotify.php:430 +#, php-format +msgid "You've received a [url=%1$s]registration request[/url] from %2$s." +msgstr "" + +#: include/enotify.php:435 +#, php-format +msgid "" +"Full Name:\t%s\n" +"Site Location:\t%s\n" +"Login Name:\t%s (%s)" +msgstr "" + +#: include/enotify.php:441 +#, php-format +msgid "Please visit %s to approve or reject the request." +msgstr "" + +#: include/items.php:353 mod/admin.php:302 mod/admin.php:2131 +#: mod/admin.php:2378 mod/notice.php:20 mod/viewsrc.php:22 +msgid "Item not found." +msgstr "Elementi ei leitud" + +#: include/items.php:391 +msgid "Do you really want to delete this item?" +msgstr "Kas soovite tõesti selle elemendi kustutada?" + +#: include/items.php:393 mod/api.php:109 mod/dfrn_request.php:640 +#: mod/follow.php:150 mod/message.php:150 mod/profiles.php:526 +#: mod/profiles.php:529 mod/profiles.php:551 mod/settings.php:1085 +#: mod/settings.php:1091 mod/settings.php:1098 mod/settings.php:1102 +#: mod/settings.php:1106 mod/settings.php:1110 mod/settings.php:1114 +#: mod/settings.php:1118 mod/settings.php:1138 mod/settings.php:1139 +#: mod/settings.php:1140 mod/settings.php:1141 mod/settings.php:1142 +#: mod/suggest.php:41 src/Module/Contact.php:444 src/Module/Register.php:97 +msgid "Yes" +msgstr "Jah" + +#: include/items.php:443 mod/allfriends.php:22 mod/api.php:34 mod/api.php:39 +#: mod/cal.php:303 mod/common.php:27 mod/crepair.php:90 mod/delegate.php:30 +#: mod/delegate.php:48 mod/delegate.php:59 mod/dfrn_confirm.php:66 +#: mod/dirfind.php:29 mod/editpost.php:22 mod/events.php:207 mod/follow.php:57 +#: mod/follow.php:121 mod/fsuggest.php:77 mod/group.php:28 mod/invite.php:23 +#: mod/invite.php:111 mod/item.php:167 mod/manage.php:129 mod/message.php:56 +#: mod/message.php:101 mod/network.php:35 mod/nogroup.php:18 mod/notes.php:27 +#: mod/notifications.php:70 mod/ostatus_subscribe.php:18 mod/photos.php:186 +#: mod/photos.php:1020 mod/poke.php:141 mod/profiles.php:182 +#: mod/profiles.php:499 mod/profile_photo.php:32 mod/profile_photo.php:177 +#: mod/profile_photo.php:204 mod/regmod.php:89 mod/repair_ostatus.php:16 +#: mod/settings.php:48 mod/settings.php:154 mod/settings.php:655 +#: mod/suggest.php:62 mod/uimport.php:17 mod/unfollow.php:22 +#: mod/unfollow.php:77 mod/unfollow.php:109 mod/viewcontacts.php:56 +#: mod/wallmessage.php:19 mod/wallmessage.php:43 mod/wallmessage.php:82 +#: mod/wallmessage.php:106 mod/wall_attach.php:76 mod/wall_attach.php:79 +#: mod/wall_upload.php:107 mod/wall_upload.php:110 src/App.php:1390 +#: src/Module/Attach.php:42 src/Module/Contact.php:360 +#: src/Module/Register.php:193 +msgid "Permission denied." +msgstr "" + +#: include/items.php:514 src/Content/Feature.php:99 +msgid "Archives" +msgstr "Arhiivid" + +#: include/items.php:520 src/Content/ForumManager.php:135 +#: src/Content/Widget.php:329 view/theme/vier/theme.php:255 +msgid "show more" +msgstr "näita veel" + +#: mod/admin.php:122 +msgid "Theme settings updated." +msgstr "Teema sätted uuendatud" + +#: mod/admin.php:196 src/Content/Nav.php:231 +msgid "Information" +msgstr "Info" + +#: mod/admin.php:197 +msgid "Overview" +msgstr "Ülevaade" + +#: mod/admin.php:198 mod/admin.php:779 +msgid "Federation Statistics" +msgstr "" + +#: mod/admin.php:199 +msgid "Configuration" +msgstr "Konfiguratsioon" + +#: mod/admin.php:200 mod/admin.php:1581 +msgid "Site" +msgstr "" + +#: mod/admin.php:201 mod/admin.php:1482 mod/admin.php:2062 mod/admin.php:2079 +msgid "Users" +msgstr "Kasutajad" + +#: mod/admin.php:202 mod/admin.php:2179 mod/admin.php:2239 mod/settings.php:99 +msgid "Addons" +msgstr "Lisad" + +#: mod/admin.php:203 mod/admin.php:2436 mod/admin.php:2480 +msgid "Themes" +msgstr "Teemad" + +#: mod/admin.php:204 mod/settings.php:77 +msgid "Additional features" +msgstr "" + +#: mod/admin.php:205 mod/admin.php:329 src/Content/Nav.php:234 +#: src/Module/Register.php:144 src/Module/Tos.php:73 +msgid "Terms of Service" +msgstr "" + +#: mod/admin.php:206 +msgid "Database" +msgstr "Andmebaas" + +#: mod/admin.php:207 +msgid "DB updates" +msgstr "" + +#: mod/admin.php:208 mod/admin.php:823 +msgid "Inspect Queue" +msgstr "" + +#: mod/admin.php:209 +msgid "Inspect Deferred Workers" +msgstr "" + +#: mod/admin.php:210 +msgid "Inspect worker Queue" +msgstr "" + +#: mod/admin.php:211 +msgid "Tools" +msgstr "Tööriistad" + +#: mod/admin.php:212 +msgid "Contact Blocklist" +msgstr "" + +#: mod/admin.php:213 mod/admin.php:395 +msgid "Server Blocklist" +msgstr "" + +#: mod/admin.php:214 mod/admin.php:558 +msgid "Delete Item" +msgstr "Kustuta element" + +#: mod/admin.php:215 mod/admin.php:216 mod/admin.php:2556 +msgid "Logs" +msgstr "" + +#: mod/admin.php:217 mod/admin.php:2624 +msgid "View Logs" +msgstr "" + +#: mod/admin.php:219 +msgid "Diagnostics" +msgstr "" + +#: mod/admin.php:220 +msgid "PHP Info" +msgstr "" + +#: mod/admin.php:221 +msgid "probe address" +msgstr "" + +#: mod/admin.php:222 +msgid "check webfinger" +msgstr "" + +#: mod/admin.php:242 src/Content/Nav.php:274 +msgid "Admin" +msgstr "" + +#: mod/admin.php:243 +msgid "Addon Features" +msgstr "" + +#: mod/admin.php:244 +msgid "User registrations waiting for confirmation" +msgstr "" + +#: mod/admin.php:328 mod/admin.php:394 mod/admin.php:514 mod/admin.php:557 +#: mod/admin.php:778 mod/admin.php:822 mod/admin.php:875 mod/admin.php:998 +#: mod/admin.php:1580 mod/admin.php:2061 mod/admin.php:2178 mod/admin.php:2238 +#: mod/admin.php:2435 mod/admin.php:2479 mod/admin.php:2555 mod/admin.php:2623 +msgid "Administration" +msgstr "" + +#: mod/admin.php:330 +msgid "Display Terms of Service" +msgstr "" + +#: mod/admin.php:330 +msgid "" +"Enable the Terms of Service page. If this is enabled a link to the terms " +"will be added to the registration form and the general information page." +msgstr "" + +#: mod/admin.php:331 +msgid "Display Privacy Statement" +msgstr "" + +#: mod/admin.php:331 +#, php-format +msgid "" +"Show some informations regarding the needed information to operate the node " +"according e.g. to EU-GDPR." +msgstr "" + +#: mod/admin.php:332 +msgid "Privacy Statement Preview" +msgstr "" + +#: mod/admin.php:334 +msgid "The Terms of Service" +msgstr "" + +#: mod/admin.php:334 +msgid "" +"Enter the Terms of Service for your node here. You can use BBCode. Headers " +"of sections should be [h2] and below." +msgstr "" + +#: mod/admin.php:336 mod/admin.php:1582 mod/admin.php:2240 mod/admin.php:2481 +#: mod/admin.php:2557 mod/admin.php:2707 mod/delegate.php:175 +#: mod/settings.php:665 mod/settings.php:772 mod/settings.php:860 +#: mod/settings.php:949 mod/settings.php:1174 +msgid "Save Settings" +msgstr "" + +#: mod/admin.php:386 mod/admin.php:404 mod/dfrn_request.php:346 +#: mod/friendica.php:131 src/Model/Contact.php:1719 +msgid "Blocked domain" +msgstr "" + +#: mod/admin.php:386 +msgid "The blocked domain" +msgstr "" + +#: mod/admin.php:387 mod/admin.php:405 mod/friendica.php:131 +msgid "Reason for the block" +msgstr "" + +#: mod/admin.php:387 mod/admin.php:400 +msgid "The reason why you blocked this domain." +msgstr "" + +#: mod/admin.php:388 +msgid "Delete domain" +msgstr "" + +#: mod/admin.php:388 +msgid "Check to delete this entry from the blocklist" +msgstr "" + +#: mod/admin.php:396 +msgid "" +"This page can be used to define a black list of servers from the federated " +"network that are not allowed to interact with your node. For all entered " +"domains you should also give a reason why you have blocked the remote " +"server." +msgstr "" + +#: mod/admin.php:397 +msgid "" +"The list of blocked servers will be made publically available on the " +"/friendica page so that your users and people investigating communication " +"problems can find the reason easily." +msgstr "" + +#: mod/admin.php:398 +msgid "Add new entry to block list" +msgstr "" + +#: mod/admin.php:399 +msgid "Server Domain" +msgstr "" + +#: mod/admin.php:399 +msgid "" +"The domain of the new server to add to the block list. Do not include the " +"protocol." +msgstr "" + +#: mod/admin.php:400 +msgid "Block reason" +msgstr "" + +#: mod/admin.php:401 +msgid "Add Entry" +msgstr "" + +#: mod/admin.php:402 +msgid "Save changes to the blocklist" +msgstr "" + +#: mod/admin.php:403 +msgid "Current Entries in the Blocklist" +msgstr "" + +#: mod/admin.php:406 +msgid "Delete entry from blocklist" +msgstr "" + +#: mod/admin.php:409 +msgid "Delete entry from blocklist?" +msgstr "" + +#: mod/admin.php:436 +msgid "Server added to blocklist." +msgstr "" + +#: mod/admin.php:452 +msgid "Site blocklist updated." +msgstr "" + +#: mod/admin.php:477 src/Core/Console/GlobalCommunityBlock.php:68 +msgid "The contact has been blocked from the node" +msgstr "" + +#: mod/admin.php:479 src/Core/Console/GlobalCommunityBlock.php:65 +#, php-format +msgid "Could not find any contact entry for this URL (%s)" +msgstr "" + +#: mod/admin.php:486 +#, php-format +msgid "%s contact unblocked" +msgid_plural "%s contacts unblocked" +msgstr[0] "" +msgstr[1] "" + +#: mod/admin.php:515 +msgid "Remote Contact Blocklist" +msgstr "" + +#: mod/admin.php:516 +msgid "" +"This page allows you to prevent any message from a remote contact to reach " +"your node." +msgstr "" + +#: mod/admin.php:517 +msgid "Block Remote Contact" +msgstr "" + +#: mod/admin.php:518 mod/admin.php:2064 +msgid "select all" +msgstr "" + +#: mod/admin.php:519 +msgid "select none" +msgstr "" + +#: mod/admin.php:520 mod/admin.php:2073 src/Module/Contact.php:621 +#: src/Module/Contact.php:824 src/Module/Contact.php:1077 +msgid "Block" +msgstr "Blokeeri" + +#: mod/admin.php:521 mod/admin.php:2075 src/Module/Contact.php:621 +#: src/Module/Contact.php:824 src/Module/Contact.php:1077 +msgid "Unblock" +msgstr "Võta blokk maha" + +#: mod/admin.php:522 +msgid "No remote contact is blocked from this node." +msgstr "" + +#: mod/admin.php:524 +msgid "Blocked Remote Contacts" +msgstr "Blokeeritud kaugkontaktid" + +#: mod/admin.php:525 +msgid "Block New Remote Contact" +msgstr "Blokeeri kaugkontakt" + +#: mod/admin.php:526 +msgid "Photo" +msgstr "Foto" + +#: mod/admin.php:526 mod/admin.php:2056 mod/admin.php:2067 mod/admin.php:2081 +#: mod/admin.php:2097 mod/crepair.php:159 mod/settings.php:667 +#: mod/settings.php:693 +msgid "Name" +msgstr "Nimi" + +#: mod/admin.php:526 mod/profiles.php:382 +msgid "Address" +msgstr "Aadress" + +#: mod/admin.php:526 mod/admin.php:536 mod/follow.php:166 +#: mod/notifications.php:179 mod/notifications.php:263 mod/unfollow.php:137 +#: src/Module/Contact.php:639 +msgid "Profile URL" +msgstr "Profiili URL" + +#: mod/admin.php:534 +#, php-format +msgid "%s total blocked contact" +msgid_plural "%s total blocked contacts" +msgstr[0] "" +msgstr[1] "" + +#: mod/admin.php:536 +msgid "URL of the remote contact to block." +msgstr "" + +#: mod/admin.php:559 +msgid "Delete this Item" +msgstr "Kustuta see element" + +#: mod/admin.php:560 +msgid "" +"On this page you can delete an item from your node. If the item is a top " +"level posting, the entire thread will be deleted." +msgstr "" + +#: mod/admin.php:561 +msgid "" +"You need to know the GUID of the item. You can find it e.g. by looking at " +"the display URL. The last part of http://example.com/display/123456 is the " +"GUID, here 123456." +msgstr "" + +#: mod/admin.php:562 +msgid "GUID" +msgstr "" + +#: mod/admin.php:562 +msgid "The GUID of the item you want to delete." +msgstr "" + +#: mod/admin.php:597 +msgid "Item marked for deletion." +msgstr "Element kustutamiseks märgitud" + +#: mod/admin.php:669 +msgid "unknown" +msgstr "" + +#: mod/admin.php:772 +msgid "" +"This page offers you some numbers to the known part of the federated social " +"network your Friendica node is part of. These numbers are not complete but " +"only reflect the part of the network your node is aware of." +msgstr "" + +#: mod/admin.php:773 +msgid "" +"The Auto Discovered Contact Directory feature is not enabled, it " +"will improve the data displayed here." +msgstr "" + +#: mod/admin.php:785 +#, php-format +msgid "" +"Currently this node is aware of %d nodes with %d registered users from the " +"following platforms:" +msgstr "" + +#: mod/admin.php:825 mod/admin.php:878 +msgid "ID" +msgstr "ID" + +#: mod/admin.php:826 +msgid "Recipient Name" +msgstr "Saaja nimi" + +#: mod/admin.php:827 +msgid "Recipient Profile" +msgstr "Saaja profiil" + +#: mod/admin.php:828 src/Content/Nav.php:239 +#: src/Core/NotificationsManager.php:182 view/theme/frio/theme.php:269 +msgid "Network" +msgstr "Võrk" + +#: mod/admin.php:829 mod/admin.php:880 +msgid "Created" +msgstr "Loodud" + +#: mod/admin.php:830 +msgid "Last Tried" +msgstr "Viimati üritatud" + +#: mod/admin.php:831 +msgid "" +"This page lists the content of the queue for outgoing postings. These are " +"postings the initial delivery failed for. They will be resend later and " +"eventually deleted if the delivery fails permanently." +msgstr "" + +#: mod/admin.php:854 +msgid "Inspect Deferred Worker Queue" +msgstr "" + +#: mod/admin.php:855 +msgid "" +"This page lists the deferred worker jobs. This are jobs that couldn't be " +"executed at the first time." +msgstr "" + +#: mod/admin.php:858 +msgid "Inspect Worker Queue" +msgstr "" + +#: mod/admin.php:859 +msgid "" +"This page lists the currently queued worker jobs. These jobs are handled by " +"the worker cronjob you've set up during install." +msgstr "" + +#: mod/admin.php:879 +msgid "Job Parameters" +msgstr "" + +#: mod/admin.php:881 +msgid "Priority" +msgstr "" + +#: mod/admin.php:907 +#, php-format +msgid "" +"Your DB still runs with MyISAM tables. You should change the engine type to " +"InnoDB. As Friendica will use InnoDB only features in the future, you should" +" change this! See here for a guide that may be helpful " +"converting the table engines. You may also use the command php " +"bin/console.php dbstructure toinnodb of your Friendica installation for" +" an automatic conversion..htconfig.php
. See the Config help page for "
+"help with the transition."
+msgstr ""
+
+#: mod/admin.php:943
+#, php-format
+msgid ""
+"Friendica's configuration now is stored in config/local.config.php, please "
+"copy config/local-sample.config.php and move your config from "
+"config/local.ini.php
. See the Config help "
+"page for help with the transition."
+msgstr ""
+
+#: mod/admin.php:950
+#, php-format
+msgid ""
+"%s is not reachable on your system. This is a severe "
+"configuration issue that prevents server to server communication. See the installation page for help."
+msgstr ""
+
+#: mod/admin.php:956
+msgid "Normal Account"
+msgstr "Normaalne konto"
+
+#: mod/admin.php:957
+msgid "Automatic Follower Account"
+msgstr "Automaatse jälgija konto"
+
+#: mod/admin.php:958
+msgid "Public Forum Account"
+msgstr "Avaliku foorumi konto"
+
+#: mod/admin.php:959
+msgid "Automatic Friend Account"
+msgstr "Automaatse sõbra konto"
+
+#: mod/admin.php:960
+msgid "Blog Account"
+msgstr "Blogikonto"
+
+#: mod/admin.php:961
+msgid "Private Forum Account"
+msgstr "Privaatfoorumi konto"
+
+#: mod/admin.php:984
+msgid "Message queues"
+msgstr ""
+
+#: mod/admin.php:990
+msgid "Server Settings"
+msgstr "Serveri sätted"
+
+#: mod/admin.php:999
+msgid "Summary"
+msgstr "Kokkuvõte"
+
+#: mod/admin.php:1001
+msgid "Registered users"
+msgstr "Registreeritud kasutajad"
+
+#: mod/admin.php:1003
+msgid "Pending registrations"
+msgstr "Ootel registreeringud"
+
+#: mod/admin.php:1004
+msgid "Version"
+msgstr "Versioon"
+
+#: mod/admin.php:1009
+msgid "Active addons"
+msgstr "Aktiveeritud lisad"
+
+#: mod/admin.php:1042
+msgid "Can not parse base url. Must have at least .htconfig.php
. See the Config help page for help with the transition."] = "";
+$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."] = "";
+$a->strings["%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."] = "";
+$a->strings["Normal Account"] = "Normaalne konto";
+$a->strings["Automatic Follower Account"] = "Automaatse jälgija konto";
+$a->strings["Public Forum Account"] = "Avaliku foorumi konto";
+$a->strings["Automatic Friend Account"] = "Automaatse sõbra konto";
+$a->strings["Blog Account"] = "Blogikonto";
+$a->strings["Private Forum Account"] = "Privaatfoorumi konto";
+$a->strings["Message queues"] = "";
+$a->strings["Server Settings"] = "Serveri sätted";
+$a->strings["Summary"] = "Kokkuvõte";
+$a->strings["Registered users"] = "Registreeritud kasutajad";
+$a->strings["Pending registrations"] = "Ootel registreeringud";
+$a->strings["Version"] = "Versioon";
+$a->strings["Active addons"] = "Aktiveeritud lisad";
+$a->strings["Can not parse base url. Must have at least php bin/console.php dbstructure update
depuis votre répertoire Friendica et noter les erreurs potentielles."
-
-#: mod/admin.php:930
-msgid "The worker was never executed. Please check your database structure!"
-msgstr "Le 'worker' n'a pas encore été exécuté. Vérifiez la structure de votre base de données."
-
-#: mod/admin.php:933
-#, php-format
-msgid ""
-"The last worker execution was on %s UTC. This is older than one hour. Please"
-" check your crontab settings."
-msgstr "La dernière exécution du 'worker' s'est déroulée à %s, c'est-à-dire il y a plus d'une heure. Vérifiez les réglages de crontab."
-
-#: mod/admin.php:939
-#, php-format
-msgid ""
-"Friendica's configuration now is stored in config/local.config.php, please "
-"copy config/local-sample.config.php and move your config from "
-".htconfig.php
. See the Config help page for "
-"help with the transition."
-msgstr "La configuration de votre site Friendica est maintenant stockée dans le fichier config/local.config.php
, veuillez copier le fichier config/local-sample.config.php
et transférer votre configuration depuis le fichier .htconfig.php
. Veuillez consulter la page d'aide de configuration (en anglais) pour vous aider dans la transition."
-
-#: mod/admin.php:943
-#, php-format
-msgid ""
-"Friendica's configuration now is stored in config/local.config.php, please "
-"copy config/local-sample.config.php and move your config from "
-"config/local.ini.php
. See the Config help "
-"page for help with the transition."
-msgstr "La configuration de votre site Friendica est maintenant stockée dans le fichier config/local.config.php
, veuillez copier le fichier config/local-sample.config.php
et transférer votre configuration depuis le fichier config/local.ini.php
. Veuillez consulter la page d'aide de configuration (en anglais) pour vous aider dans la transition."
-
-#: mod/admin.php:950
-#, php-format
-msgid ""
-"%s is not reachable on your system. This is a severe "
-"configuration issue that prevents server to server communication. See the installation page for help."
-msgstr "%s n'est pas accessible sur votre site. C'est un problème de configuration sévère qui empêche toute communication avec les serveurs distants. Veuillez consulter la page d'aide à l'installation (en anglais) pour plus d'information."
-
-#: mod/admin.php:956
-msgid "Normal Account"
-msgstr "Compte normal"
-
-#: mod/admin.php:957
-msgid "Automatic Follower Account"
-msgstr "Profile Resuivant"
-
-#: mod/admin.php:958
-msgid "Public Forum Account"
-msgstr "Forum public"
-
-#: mod/admin.php:959
-msgid "Automatic Friend Account"
-msgstr "Compte auto-amical"
-
-#: mod/admin.php:960
-msgid "Blog Account"
-msgstr "Compte de blog"
-
-#: mod/admin.php:961
-msgid "Private Forum Account"
-msgstr "Forum privé"
-
-#: mod/admin.php:984
-msgid "Message queues"
-msgstr "Files d'attente des messages"
-
-#: mod/admin.php:990
-msgid "Server Settings"
-msgstr "Paramètres du site"
-
-#: mod/admin.php:999
-msgid "Summary"
-msgstr "Résumé"
-
-#: mod/admin.php:1001
-msgid "Registered users"
-msgstr "Utilisateurs inscrits"
-
-#: mod/admin.php:1003
-msgid "Pending registrations"
-msgstr "Inscriptions en attente"
-
-#: mod/admin.php:1004
-msgid "Version"
-msgstr "Version"
-
-#: mod/admin.php:1009
-msgid "Active addons"
-msgstr "Add-ons actifs"
-
-#: mod/admin.php:1042
-msgid "Can not parse base url. Must have at least /proc/meminfo
. La valeur par défaut est 0 (désactivé)."
-
-#: mod/admin.php:1655
-msgid "Maximum table size for optimization"
-msgstr "Limite de taille de table pour l'optimisation"
-
-#: mod/admin.php:1655
-msgid ""
-"Maximum table size (in MB) for the automatic optimization. Enter -1 to "
-"disable it."
-msgstr "Limite de taille de table (en Mo) pour l'optimisation automatique. -1 pour désactiver cette limite."
-
-#: mod/admin.php:1656
-msgid "Minimum level of fragmentation"
-msgstr "Seuil de fragmentation"
-
-#: mod/admin.php:1656
-msgid ""
-"Minimum fragmenation level to start the automatic optimization - default "
-"value is 30%."
-msgstr "Seuil de fragmentation pour que l'optimisation automatique se déclenche - défaut 30%."
-
-#: mod/admin.php:1658
-msgid "Periodical check of global contacts"
-msgstr "Vérification périodique des contacts globaux"
-
-#: mod/admin.php:1658
-msgid ""
-"If enabled, the global contacts are checked periodically for missing or "
-"outdated data and the vitality of the contacts and servers."
-msgstr "Si activé, les données manquantes et obsolètes et la vitalité des contacts et des serveurs seront vérifiées périodiquement dans les contacts globaux."
-
-#: mod/admin.php:1659
-msgid "Days between requery"
-msgstr "Nombre de jours entre les requêtes"
-
-#: mod/admin.php:1659
-msgid "Number of days after which a server is requeried for his contacts."
-msgstr "Nombre de jours avant qu'une requête de contacts soient envoyée à nouveau à un serveur."
-
-#: mod/admin.php:1660
-msgid "Discover contacts from other servers"
-msgstr "Découvrir des contacts des autres serveurs"
-
-#: mod/admin.php:1660
-msgid ""
-"Periodically query other servers for contacts. You can choose between "
-"'users': the users on the remote system, 'Global Contacts': active contacts "
-"that are known on the system. The fallback is meant for Redmatrix servers "
-"and older friendica servers, where global contacts weren't available. The "
-"fallback increases the server load, so the recommended setting is 'Users, "
-"Global Contacts'."
-msgstr "Demande régulièrement les serveurs distants connus une liste de profils distants. \"Utilisateurs\" concerne les utilisateurs locaux du serveur distant, \"Contacts Globaux\" concerne tous les profils dont le serveur distant a connaissance. \"Alternative\" est prévu pour les serveurs RedMatrix et les versions obsolètes de Friendica. Ce choix augmente significativement la charge serveur, donc le choix recommendé est \"Utilisateurs, Contacts Globaux\"."
-
-#: mod/admin.php:1661
-msgid "Timeframe for fetching global contacts"
-msgstr "Fréquence de récupération des contacts globaux"
-
-#: mod/admin.php:1661
-msgid ""
-"When the discovery is activated, this value defines the timeframe for the "
-"activity of the global contacts that are fetched from other servers."
-msgstr "Quand la découverte de contacts est activée, cette valeur détermine la fréquence de récupération des données des contacts globaux présents sur d'autres serveurs."
-
-#: mod/admin.php:1662
-msgid "Search the local directory"
-msgstr "Chercher dans le répertoire local"
-
-#: mod/admin.php:1662
-msgid ""
-"Search the local directory instead of the global directory. When searching "
-"locally, every search will be executed on the global directory in the "
-"background. This improves the search results when the search is repeated."
-msgstr "Cherche dans le répertoire local au lieu du répertoire local. Quand une recherche locale est effectuée, la même recherche est effectuée dans le répertoire global en tâche de fond. Cela améliore les résultats de la recherche si elle est réitérée."
-
-#: mod/admin.php:1664
-msgid "Publish server information"
-msgstr "Publier les informations du serveur"
-
-#: mod/admin.php:1664
-msgid ""
-"If enabled, general server and usage data will be published. The data "
-"contains the name and version of the server, number of users with public "
-"profiles, number of posts and the activated protocols and connectors. See the-federation.info for details."
-msgstr "Si cette option est activée, des informations sur le serveur et son utilisation seront publiées. Ces informations incluent le nom et la version du serveur, le nombre d’utilisateurs avec des profils publics, le nombre de messages, les protocoles supportés et les connecteurs disponibles. Plus de détails sur the-federation.info."
-
-#: mod/admin.php:1666
-msgid "Check upstream version"
-msgstr "Mises à jour"
-
-#: mod/admin.php:1666
-msgid ""
-"Enables checking for new Friendica versions at github. If there is a new "
-"version, you will be informed in the admin panel overview."
-msgstr "Permet de vérifier la présence de nouvelles versions de Friendica sur github. Si une nouvelle version est disponible, vous recevrez une notification dans l'interface d'administration."
-
-#: mod/admin.php:1667
-msgid "Suppress Tags"
-msgstr "Masquer les tags"
-
-#: mod/admin.php:1667
-msgid "Suppress showing a list of hashtags at the end of the posting."
-msgstr "Ne pas afficher la liste des hashtags à la fin d’un message."
-
-#: mod/admin.php:1668
-msgid "Clean database"
-msgstr "Nettoyer la base de données"
-
-#: mod/admin.php:1668
-msgid ""
-"Remove old remote items, orphaned database records and old content from some"
-" other helper tables."
-msgstr "Supprime les conversations distantes anciennes, les enregistrements orphelins et le contenu obsolète de certaines tables de débogage."
-
-#: mod/admin.php:1669
-msgid "Lifespan of remote items"
-msgstr "Durée de vie des conversations distantes"
-
-#: mod/admin.php:1669
-msgid ""
-"When the database cleanup is enabled, this defines the days after which "
-"remote items will be deleted. Own items, and marked or filed items are "
-"always kept. 0 disables this behaviour."
-msgstr "Si le nettoyage de la base de donnée est actif, cette valeur représente le délai en jours après lequel les conversations distantes sont supprimées. Les conversations démarrées par un utilisateur local, étoilées ou archivées sont toujours conservées. 0 pour désactiver."
-
-#: mod/admin.php:1670
-msgid "Lifespan of unclaimed items"
-msgstr "Durée de vie des conversations relayées"
-
-#: mod/admin.php:1670
-msgid ""
-"When the database cleanup is enabled, this defines the days after which "
-"unclaimed remote items (mostly content from the relay) will be deleted. "
-"Default value is 90 days. Defaults to the general lifespan value of remote "
-"items if set to 0."
-msgstr "Si le nettoyage de la base de donnée est actif, cette valeur représente le délai en jours après lequel les conversations relayées qui n'ont pas reçu d'interactions locales sont supprimées. La valeur par défaut est 90 jours. 0 pour aligner cette valeur sur la durée de vie des conversations distantes."
-
-#: mod/admin.php:1671
-msgid "Lifespan of raw conversation data"
-msgstr "Durée de vie des méta-données de conversation"
-
-#: mod/admin.php:1671
-msgid ""
-"The conversation data is used for ActivityPub and OStatus, as well as for "
-"debug purposes. It should be safe to remove it after 14 days, default is 90 "
-"days."
-msgstr "Cette valeur représente le délai en jours après lequel les méta-données de conversations sont supprimées. Ces méta-données sont utilisées par les protocoles ActivityPub et OStatus, et pour le débogage. Il est prudent de conserver ces meta-données pendant au moins 14 jours. La valeur par défaut est 90 jours."
-
-#: mod/admin.php:1672
-msgid "Path to item cache"
-msgstr "Chemin vers le cache des objets."
-
-#: mod/admin.php:1672
-msgid "The item caches buffers generated bbcode and external images."
-msgstr "Le cache de publications contient des textes HTML de BBCode compil's et une copie de chaque image distante."
-
-#: mod/admin.php:1673
-msgid "Cache duration in seconds"
-msgstr "Durée du cache en secondes"
-
-#: mod/admin.php:1673
-msgid ""
-"How long should the cache files be hold? Default value is 86400 seconds (One"
-" day). To disable the item cache, set the value to -1."
-msgstr "Combien de temps les fichiers de cache doivent être maintenu? La valeur par défaut est 86400 secondes (une journée). Pour désactiver le cache de l'item, définissez la valeur à -1."
-
-#: mod/admin.php:1674
-msgid "Maximum numbers of comments per post"
-msgstr "Nombre maximum de commentaires par publication"
-
-#: mod/admin.php:1674
-msgid "How much comments should be shown for each post? Default value is 100."
-msgstr "Combien de commentaires doivent être affichés pour chaque publication? Valeur par défaut: 100."
-
-#: mod/admin.php:1675
-msgid "Temp path"
-msgstr "Chemin des fichiers temporaires"
-
-#: mod/admin.php:1675
-msgid ""
-"If you have a restricted system where the webserver can't access the system "
-"temp path, enter another path here."
-msgstr "Si vous n'avez pas la possibilité d'avoir accès au répertoire temp, entrez un autre répertoire ici."
-
-#: mod/admin.php:1676
-msgid "Base path to installation"
-msgstr "Chemin de base de l'installation"
-
-#: mod/admin.php:1676
-msgid ""
-"If the system cannot detect the correct path to your installation, enter the"
-" correct path here. This setting should only be set if you are using a "
-"restricted system and symbolic links to your webroot."
-msgstr "Si le système ne peut pas détecter le chemin de l'installation, entrez le bon chemin ici. Ce paramètre doit être utilisé uniquement si vous avez des accès restreints à votre système et que vous n'avez qu'un lien symbolique vers le répertoire web."
-
-#: mod/admin.php:1677
-msgid "Disable picture proxy"
-msgstr "Désactiver le proxy image "
-
-#: mod/admin.php:1677
-msgid ""
-"The picture proxy increases performance and privacy. It shouldn't be used on"
-" systems with very low bandwidth."
-msgstr "Le proxy d'image améliore les performances d'affichage et protège la vie privée des utilisateurs locaux. Il n'est pas recommandé de l'activer sur un serveur avec une bande passante limitée."
-
-#: mod/admin.php:1678
-msgid "Only search in tags"
-msgstr "Rechercher seulement dans les étiquettes"
-
-#: mod/admin.php:1678
-msgid "On large systems the text search can slow down the system extremely."
-msgstr "La recherche textuelle peut ralentir considérablement les systèmes de grande taille."
-
-#: mod/admin.php:1680
-msgid "New base url"
-msgstr "Nouvelle URL de base"
-
-#: mod/admin.php:1680
-msgid ""
-"Change base url for this server. Sends relocate message to all Friendica and"
-" Diaspora* contacts of all users."
-msgstr "Changer l'URL de base de ce serveur. Envoie un message de déménagement à tous les contacts Friendica et Diaspora des utilisateurs locaux."
-
-#: mod/admin.php:1682
-msgid "RINO Encryption"
-msgstr "Chiffrement RINO"
-
-#: mod/admin.php:1682
-msgid "Encryption layer between nodes."
-msgstr "Couche de chiffrement entre les nœuds du réseau."
-
-#: mod/admin.php:1682
-msgid "Enabled"
-msgstr "Activé"
-
-#: mod/admin.php:1684
-msgid "Maximum number of parallel workers"
-msgstr "Nombre maximum de processus simultanés"
-
-#: mod/admin.php:1684
-#, php-format
-msgid ""
-"On shared hosters set this to %d. On larger systems, values of %d are great."
-" Default value is %d."
-msgstr "Sur un hébergement partagé, mettez %d. Sur des serveurs plus puissants, %d est optimal. La valeur par défaut est %d."
-
-#: mod/admin.php:1685
-msgid "Don't use 'proc_open' with the worker"
-msgstr "Ne pas utiliser 'proc_open' pour les tâches de fond"
-
-#: mod/admin.php:1685
-msgid ""
-"Enable this if your system doesn't allow the use of 'proc_open'. This can "
-"happen on shared hosters. If this is enabled you should increase the "
-"frequency of worker calls in your crontab."
-msgstr "Activez cette option si votre système ne permet pas d'utiliser 'proc_open'. Cela peut être le cas sur les hébergements partagés. Si vous activez cette option, vous devriez augmenter la fréquence d'appel du \"worker\" dans crontab."
-
-#: mod/admin.php:1686
-msgid "Enable fastlane"
-msgstr "Activer la file prioritaire"
-
-#: mod/admin.php:1686
-msgid ""
-"When enabed, the fastlane mechanism starts an additional worker if processes"
-" with higher priority are blocked by processes of lower priority."
-msgstr "La file prioritaire est un ouvrier additionel démarré quand des tâches de fondde grande importance sont bloquées par des tâches de moindre importance dans la file d'attente."
-
-#: mod/admin.php:1687
-msgid "Enable frontend worker"
-msgstr "Activer l'ouvrier manuel"
-
-#: mod/admin.php:1687
-#, php-format
-msgid ""
-"When enabled the Worker process is triggered when backend access is "
-"performed \\x28e.g. messages being delivered\\x29. On smaller sites you "
-"might want to call %s/worker on a regular basis via an external cron job. "
-"You should only enable this option if you cannot utilize cron/scheduled jobs"
-" on your server."
-msgstr "L'ouvrier manuel est lancé à la réception de messages distants. Sur un petit serveur il est conseillé d'ouvrir %s/worker régulièrement via une tâche planifée. Vous ne devriez activer cette option que si vous ne pouvez pas définir de tâches récurrentes sur votre serveur,"
-
-#: mod/admin.php:1689
-msgid "Subscribe to relay"
-msgstr "S'abonner au relai"
-
-#: mod/admin.php:1689
-msgid ""
-"Enables the receiving of public posts from the relay. They will be included "
-"in the search, subscribed tags and on the global community page."
-msgstr "Active la réception de conversations publiques relayées. Elles sont affichées dans la page de recherche, les recherches enregistrées et dans la page de communauté globale."
-
-#: mod/admin.php:1690
-msgid "Relay server"
-msgstr "Serveur relai"
-
-#: mod/admin.php:1690
-msgid ""
-"Address of the relay server where public posts should be send to. For "
-"example https://relay.diasp.org"
-msgstr "URL du serveur relai auquel les conversations publique locales doivent être soumises."
-
-#: mod/admin.php:1691
-msgid "Direct relay transfer"
-msgstr "Relai direct"
-
-#: mod/admin.php:1691
-msgid ""
-"Enables the direct transfer to other servers without using the relay servers"
-msgstr "Soumet les conversations publiques aux serveurs distants sans passer par le serveur relai."
-
-#: mod/admin.php:1692
-msgid "Relay scope"
-msgstr "Filtre du relai"
-
-#: mod/admin.php:1692
-msgid ""
-"Can be 'all' or 'tags'. 'all' means that every public post should be "
-"received. 'tags' means that only posts with selected tags should be "
-"received."
-msgstr "\"Tous\" signifie que toutes les conversations publiques en provenance du relai sont acceptées. \"Tags\" signifie que seules les conversations comportant les tags suivants sont acceptées."
-
-#: mod/admin.php:1692
-msgid "all"
-msgstr "Tous"
-
-#: mod/admin.php:1692
-msgid "tags"
-msgstr "Tags"
-
-#: mod/admin.php:1693
-msgid "Server tags"
-msgstr "Tags de filtre du relai"
-
-#: mod/admin.php:1693
-msgid "Comma separated list of tags for the 'tags' subscription."
-msgstr "Liste de tags séparés par des virgules pour le filtre de relai."
-
-#: mod/admin.php:1694
-msgid "Allow user tags"
-msgstr "Inclure les tags des utilisateurs"
-
-#: mod/admin.php:1694
-msgid ""
-"If enabled, the tags from the saved searches will used for the 'tags' "
-"subscription in addition to the 'relay_server_tags'."
-msgstr "Inclut les tags des recherches enregistrées des utilisateurs au filtre de relai."
-
-#: mod/admin.php:1697
-msgid "Start Relocation"
-msgstr "Démarrer le déménagement"
-
-#: mod/admin.php:1724
-msgid "Update has been marked successful"
-msgstr "Mise-à-jour validée comme 'réussie'"
-
-#: mod/admin.php:1731
-#, php-format
-msgid "Database structure update %s was successfully applied."
-msgstr "La structure de base de données pour la mise à jour %s a été appliquée avec succès."
-
-#: mod/admin.php:1735
-#, php-format
-msgid "Executing of database structure update %s failed with error: %s"
-msgstr "L'exécution de la mise à jour %s pour la structure de base de données a échoué avec l'erreur: %s"
-
-#: mod/admin.php:1751
-#, php-format
-msgid "Executing %s failed with error: %s"
-msgstr "L'exécution %s a échoué avec l'erreur: %s"
-
-#: mod/admin.php:1753
-#, php-format
-msgid "Update %s was successfully applied."
-msgstr "Mise-à-jour %s appliquée avec succès."
-
-#: mod/admin.php:1756
-#, php-format
-msgid "Update %s did not return a status. Unknown if it succeeded."
-msgstr "La mise-à-jour %s n'a pas retourné de détails. Impossible de savoir si elle a réussi."
-
-#: mod/admin.php:1759
-#, php-format
-msgid "There was no additional update function %s that needed to be called."
-msgstr "Il n'y avait aucune fonction supplémentaire de mise à jour %s qui devait être appelé"
-
-#: mod/admin.php:1782
-msgid "No failed updates."
-msgstr "Pas de mises-à-jour échouées."
-
-#: mod/admin.php:1783
-msgid "Check database structure"
-msgstr "Vérifier la structure de la base de données"
-
-#: mod/admin.php:1788
-msgid "Failed Updates"
-msgstr "Mises-à-jour échouées"
-
-#: mod/admin.php:1789
-msgid ""
-"This does not include updates prior to 1139, which did not return a status."
-msgstr "Ceci n'inclut pas les versions antérieures à la 1139, qui ne retournaient jamais de détails."
-
-#: mod/admin.php:1790
-msgid "Mark success (if update was manually applied)"
-msgstr "Marquer comme 'réussie' (dans le cas d'une mise-à-jour manuelle)"
-
-#: mod/admin.php:1791
-msgid "Attempt to execute this update step automatically"
-msgstr "Tenter d'éxecuter cette étape automatiquement"
-
-#: mod/admin.php:1831
-#, php-format
-msgid ""
-"\n"
-"\t\t\tDear %1$s,\n"
-"\t\t\t\tthe administrator of %2$s has set up an account for you."
-msgstr "\n\t\t\tChère/Cher %1$s,\n\t\t\t\tL’administrateur de %2$s vous a ouvert un compte."
-
-#: mod/admin.php:1834
-#, php-format
-msgid ""
-"\n"
-"\t\t\tThe login details are as follows:\n"
-"\n"
-"\t\t\tSite Location:\t%1$s\n"
-"\t\t\tLogin Name:\t\t%2$s\n"
-"\t\t\tPassword:\t\t%3$s\n"
-"\n"
-"\t\t\tYou may change your password from your account \"Settings\" page after logging\n"
-"\t\t\tin.\n"
-"\n"
-"\t\t\tPlease take a few moments to review the other account settings on that page.\n"
-"\n"
-"\t\t\tYou may also wish to add some basic information to your default profile\n"
-"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n"
-"\n"
-"\t\t\tWe recommend setting your full name, adding a profile photo,\n"
-"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n"
-"\t\t\tperhaps what country you live in; if you do not wish to be more specific\n"
-"\t\t\tthan that.\n"
-"\n"
-"\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n"
-"\t\t\tIf you are new and do not know anybody here, they may help\n"
-"\t\t\tyou to make some new and interesting friends.\n"
-"\n"
-"\t\t\tIf you ever want to delete your account, you can do so at %1$s/removeme\n"
-"\n"
-"\t\t\tThank you and welcome to %4$s."
-msgstr ""
-
-#: mod/admin.php:1871 src/Model/User.php:859
-#, php-format
-msgid "Registration details for %s"
-msgstr "Détails d'inscription pour %s"
-
-#: mod/admin.php:1881
-#, php-format
-msgid "%s user blocked/unblocked"
-msgid_plural "%s users blocked/unblocked"
-msgstr[0] "%s utilisateur a (dé)bloqué"
-msgstr[1] "%s utilisateurs ont (dé)bloqué"
-
-#: mod/admin.php:1888 mod/admin.php:1942
-msgid "You can't remove yourself"
-msgstr "Vous ne pouvez pas supprimer votre propre compte"
-
-#: mod/admin.php:1891
-#, php-format
-msgid "%s user deleted"
-msgid_plural "%s users deleted"
-msgstr[0] "%s utilisateur supprimé"
-msgstr[1] "%s utilisateurs supprimés"
-
-#: mod/admin.php:1940
-#, php-format
-msgid "User '%s' deleted"
-msgstr "Utilisateur '%s' supprimé"
-
-#: mod/admin.php:1951
-#, php-format
-msgid "User '%s' unblocked"
-msgstr "Utilisateur '%s' débloqué"
-
-#: mod/admin.php:1951
-#, php-format
-msgid "User '%s' blocked"
-msgstr "Utilisateur '%s' bloqué"
-
-#: mod/admin.php:1999 mod/settings.php:1049
-msgid "Normal Account Page"
-msgstr "Compte normal"
-
-#: mod/admin.php:2000 mod/settings.php:1053
-msgid "Soapbox Page"
-msgstr "Compte \"boîte à savon\""
-
-#: mod/admin.php:2001 mod/settings.php:1057
-msgid "Public Forum"
-msgstr "Forum public"
-
-#: mod/admin.php:2002 mod/settings.php:1061
-msgid "Automatic Friend Page"
-msgstr "Compte d' \"amitié automatique\""
-
-#: mod/admin.php:2003
-msgid "Private Forum"
-msgstr "Forum Privé"
-
-#: mod/admin.php:2006 mod/settings.php:1033
-msgid "Personal Page"
-msgstr "Page personnelle"
-
-#: mod/admin.php:2007 mod/settings.php:1037
-msgid "Organisation Page"
-msgstr "Page Associative"
-
-#: mod/admin.php:2008 mod/settings.php:1041
-msgid "News Page"
-msgstr "Page d'informations"
-
-#: mod/admin.php:2009 mod/settings.php:1045
-msgid "Community Forum"
-msgstr "Forum Communautaire"
-
-#: mod/admin.php:2010
-msgid "Relay"
-msgstr "Relai"
-
-#: mod/admin.php:2056 mod/admin.php:2067 mod/admin.php:2081 mod/admin.php:2099
-#: src/Content/ContactSelector.php:86
-msgid "Email"
-msgstr "Courriel"
-
-#: mod/admin.php:2056 mod/admin.php:2081
-msgid "Register date"
-msgstr "Date d'inscription"
-
-#: mod/admin.php:2056 mod/admin.php:2081
-msgid "Last login"
-msgstr "Dernière connexion"
-
-#: mod/admin.php:2056 mod/admin.php:2081
-msgid "Last item"
-msgstr "Dernier élément"
-
-#: mod/admin.php:2056
-msgid "Type"
-msgstr "Type"
-
-#: mod/admin.php:2063
-msgid "Add User"
-msgstr "Ajouter l'utilisateur"
-
-#: mod/admin.php:2065
-msgid "User registrations waiting for confirm"
-msgstr "Inscriptions d'utilisateurs en attente de confirmation"
-
-#: mod/admin.php:2066
-msgid "User waiting for permanent deletion"
-msgstr "Utilisateur en attente de suppression définitive"
-
-#: mod/admin.php:2067
-msgid "Request date"
-msgstr "Date de la demande"
-
-#: mod/admin.php:2068
-msgid "No registrations."
-msgstr "Pas d'inscriptions."
-
-#: mod/admin.php:2069
-msgid "Note from the user"
-msgstr "Message personnel"
-
-#: mod/admin.php:2070 mod/notifications.php:183 mod/notifications.php:269
-msgid "Approve"
-msgstr "Approuver"
-
-#: mod/admin.php:2071
-msgid "Deny"
-msgstr "Rejetter"
-
-#: mod/admin.php:2074
-msgid "User blocked"
-msgstr "Utilisateur bloqué"
-
-#: mod/admin.php:2076
-msgid "Site admin"
-msgstr "Administration du Site"
-
-#: mod/admin.php:2077
-msgid "Account expired"
-msgstr "Compte expiré"
-
-#: mod/admin.php:2080
-msgid "New User"
-msgstr "Nouvel utilisateur"
-
-#: mod/admin.php:2081
-msgid "Permanent deletion"
-msgstr "Suppression définitive"
-
-#: mod/admin.php:2086
-msgid ""
-"Selected users will be deleted!\\n\\nEverything these users had posted on "
-"this site will be permanently deleted!\\n\\nAre you sure?"
-msgstr "Les utilisateurs sélectionnés vont être supprimés!\\n\\nTout ce qu'ils ont posté sur ce site sera définitivement effacé!\\n\\nÊtes-vous certain?"
-
-#: mod/admin.php:2087
-msgid ""
-"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
-"site will be permanently deleted!\\n\\nAre you sure?"
-msgstr "L'utilisateur {0} va être supprimé!\\n\\nTout ce qu'il a posté sur ce site sera définitivement perdu!\\n\\nÊtes-vous certain?"
-
-#: mod/admin.php:2097
-msgid "Name of the new user."
-msgstr "Nom du nouvel utilisateur."
-
-#: mod/admin.php:2098
-msgid "Nickname"
-msgstr "Pseudo"
-
-#: mod/admin.php:2098
-msgid "Nickname of the new user."
-msgstr "Pseudo du nouvel utilisateur."
-
-#: mod/admin.php:2099
-msgid "Email address of the new user."
-msgstr "Adresse mail du nouvel utilisateur."
-
-#: mod/admin.php:2141
-#, php-format
-msgid "Addon %s disabled."
-msgstr "Add-on %s désactivé."
-
-#: mod/admin.php:2144
-#, php-format
-msgid "Addon %s enabled."
-msgstr "Add-on %s activé."
-
-#: mod/admin.php:2155 mod/admin.php:2405
-msgid "Disable"
-msgstr "Désactiver"
-
-#: mod/admin.php:2158 mod/admin.php:2408
-msgid "Enable"
-msgstr "Activer"
-
-#: mod/admin.php:2180 mod/admin.php:2437
-msgid "Toggle"
-msgstr "Activer/Désactiver"
-
-#: mod/admin.php:2181 mod/admin.php:2438 mod/newmember.php:20
-#: mod/settings.php:136 src/Content/Nav.php:263 view/theme/frio/theme.php:272
-msgid "Settings"
-msgstr "Réglages"
-
-#: mod/admin.php:2188 mod/admin.php:2446
-msgid "Author: "
-msgstr "Auteur : "
-
-#: mod/admin.php:2189 mod/admin.php:2447
-msgid "Maintainer: "
-msgstr "Mainteneur : "
-
-#: mod/admin.php:2241
-msgid "Reload active addons"
-msgstr "Recharger les add-ons activés."
-
-#: mod/admin.php:2246
-#, php-format
-msgid ""
-"There are currently no addons available on your node. You can find the "
-"official addon repository at %1$s and might find other interesting addons in"
-" the open addon registry at %2$s"
-msgstr "Il n'y a pas d'add-on disponible sur votre serveur. Vous pouvez trouver le dépôt officiel d'add-ons sur %1$s et des add-ons non-officiel dans le répertoire d'add-ons ouvert sur %2$s."
-
-#: mod/admin.php:2367
-msgid "No themes found."
-msgstr "Aucun thème trouvé."
-
-#: mod/admin.php:2428
-msgid "Screenshot"
-msgstr "Capture d'écran"
-
-#: mod/admin.php:2482
-msgid "Reload active themes"
-msgstr "Recharger les thèmes actifs"
-
-#: mod/admin.php:2487
-#, php-format
-msgid "No themes found on the system. They should be placed in %1$s"
-msgstr "Aucun thème trouvé. Leur emplacement d'installation est%1$s."
-
-#: mod/admin.php:2488
-msgid "[Experimental]"
-msgstr "[Expérimental]"
-
-#: mod/admin.php:2489
-msgid "[Unsupported]"
-msgstr "[Non supporté]"
-
-#: mod/admin.php:2514
-msgid "Log settings updated."
-msgstr "Réglages des journaux mis-à-jour."
-
-#: mod/admin.php:2547
-msgid "PHP log currently enabled."
-msgstr "Log PHP actuellement activé."
-
-#: mod/admin.php:2549
-msgid "PHP log currently disabled."
-msgstr "Log PHP actuellement desactivé."
-
-#: mod/admin.php:2558
-msgid "Clear"
-msgstr "Effacer"
-
-#: mod/admin.php:2562
-msgid "Enable Debugging"
-msgstr "Activer le déboggage"
-
-#: mod/admin.php:2563
-msgid "Log file"
-msgstr "Fichier de journaux"
-
-#: mod/admin.php:2563
-msgid ""
-"Must be writable by web server. Relative to your Friendica top-level "
-"directory."
-msgstr "Accès en écriture par le serveur web requis. Relatif à la racine de votre installation de Friendica."
-
-#: mod/admin.php:2564
-msgid "Log level"
-msgstr "Niveau de journalisaton"
-
-#: mod/admin.php:2566
-msgid "PHP logging"
-msgstr "Log PHP"
-
-#: mod/admin.php:2567
-msgid ""
-"To temporarily enable logging of PHP errors and warnings you can prepend the"
-" following to the index.php file of your installation. The filename set in "
-"the 'error_log' line is relative to the friendica top-level directory and "
-"must be writeable by the web server. The option '1' for 'log_errors' and "
-"'display_errors' is to enable these options, set to '0' to disable them."
-msgstr "Pour activer temporairement la journalisation de PHP vous pouvez insérez les lignes suivantes au début du fichier index.php
dans votre répertoire Friendica. The nom de fichier défini dans la ligne 'error_log'
est relatif au répertoire d'installation de Friendica et le serveur web doit avoir le droit d'écriture sur ce fichier. Les lignes log_errors
et display_errors
prennent les valeurs 0
et 1
respectivement pour les activer ou désactiver."
-
-#: mod/admin.php:2599
-#, php-format
-msgid ""
-"Error trying to open %1$s log file.\\r\\nindex.php
dans votre répertoire Friendica. The nom de fichier défini dans la ligne 'error_log'
est relatif au répertoire d'installation de Friendica et le serveur web doit avoir le droit d'écriture sur ce fichier. Les lignes log_errors
et display_errors
prennent les valeurs 0
et 1
respectivement pour les activer ou désactiver."
+
+#: src/Module/Admin/Logs/View.php:22
+#, php-format
+msgid ""
+"Error trying to open %1$s log file.\\r\\n/proc/meminfo
. La valeur par défaut est 0 (désactivé)."
+
+#: src/Module/Admin/Site.php:642
+msgid "Maximum table size for optimization"
+msgstr "Limite de taille de table pour l'optimisation"
+
+#: src/Module/Admin/Site.php:642
+msgid ""
+"Maximum table size (in MB) for the automatic optimization. Enter -1 to "
+"disable it."
+msgstr "Limite de taille de table (en Mo) pour l'optimisation automatique. -1 pour désactiver cette limite."
+
+#: src/Module/Admin/Site.php:643
+msgid "Minimum level of fragmentation"
+msgstr "Seuil de fragmentation"
+
+#: src/Module/Admin/Site.php:643
+msgid ""
+"Minimum fragmenation level to start the automatic optimization - default "
+"value is 30%."
+msgstr "Seuil de fragmentation pour que l'optimisation automatique se déclenche - défaut 30%."
+
+#: src/Module/Admin/Site.php:645
+msgid "Periodical check of global contacts"
+msgstr "Vérification périodique des contacts globaux"
+
+#: src/Module/Admin/Site.php:645
+msgid ""
+"If enabled, the global contacts are checked periodically for missing or "
+"outdated data and the vitality of the contacts and servers."
+msgstr "Si activé, les données manquantes et obsolètes et la vitalité des contacts et des serveurs seront vérifiées périodiquement dans les contacts globaux."
+
+#: src/Module/Admin/Site.php:646
+msgid "Days between requery"
+msgstr "Nombre de jours entre les requêtes"
+
+#: src/Module/Admin/Site.php:646
+msgid "Number of days after which a server is requeried for his contacts."
+msgstr "Nombre de jours avant qu'une requête de contacts soient envoyée à nouveau à un serveur."
+
+#: src/Module/Admin/Site.php:647
+msgid "Discover contacts from other servers"
+msgstr "Découvrir des contacts des autres serveurs"
+
+#: src/Module/Admin/Site.php:647
+msgid ""
+"Periodically query other servers for contacts. You can choose between "
+"\"Users\": the users on the remote system, \"Global Contacts\": active "
+"contacts that are known on the system. The fallback is meant for Redmatrix "
+"servers and older friendica servers, where global contacts weren't "
+"available. The fallback increases the server load, so the recommended "
+"setting is \"Users, Global Contacts\"."
+msgstr ""
+
+#: src/Module/Admin/Site.php:648
+msgid "Timeframe for fetching global contacts"
+msgstr "Fréquence de récupération des contacts globaux"
+
+#: src/Module/Admin/Site.php:648
+msgid ""
+"When the discovery is activated, this value defines the timeframe for the "
+"activity of the global contacts that are fetched from other servers."
+msgstr "Quand la découverte de contacts est activée, cette valeur détermine la fréquence de récupération des données des contacts globaux présents sur d'autres serveurs."
+
+#: src/Module/Admin/Site.php:649
+msgid "Search the local directory"
+msgstr "Chercher dans le répertoire local"
+
+#: src/Module/Admin/Site.php:649
+msgid ""
+"Search the local directory instead of the global directory. When searching "
+"locally, every search will be executed on the global directory in the "
+"background. This improves the search results when the search is repeated."
+msgstr "Cherche dans le répertoire local au lieu du répertoire local. Quand une recherche locale est effectuée, la même recherche est effectuée dans le répertoire global en tâche de fond. Cela améliore les résultats de la recherche si elle est réitérée."
+
+#: src/Module/Admin/Site.php:651
+msgid "Publish server information"
+msgstr "Publier les informations du serveur"
+
+#: src/Module/Admin/Site.php:651
+msgid ""
+"If enabled, general server and usage data will be published. The data "
+"contains the name and version of the server, number of users with public "
+"profiles, number of posts and the activated protocols and connectors. See the-federation.info for details."
+msgstr ""
+
+#: src/Module/Admin/Site.php:653
+msgid "Check upstream version"
+msgstr "Mises à jour"
+
+#: src/Module/Admin/Site.php:653
+msgid ""
+"Enables checking for new Friendica versions at github. If there is a new "
+"version, you will be informed in the admin panel overview."
+msgstr "Permet de vérifier la présence de nouvelles versions de Friendica sur github. Si une nouvelle version est disponible, vous recevrez une notification dans l'interface d'administration."
+
+#: src/Module/Admin/Site.php:654
+msgid "Suppress Tags"
+msgstr "Masquer les tags"
+
+#: src/Module/Admin/Site.php:654
+msgid "Suppress showing a list of hashtags at the end of the posting."
+msgstr "Ne pas afficher la liste des hashtags à la fin d’un message."
+
+#: src/Module/Admin/Site.php:655
+msgid "Clean database"
+msgstr "Nettoyer la base de données"
+
+#: src/Module/Admin/Site.php:655
+msgid ""
+"Remove old remote items, orphaned database records and old content from some"
+" other helper tables."
+msgstr "Supprime les conversations distantes anciennes, les enregistrements orphelins et le contenu obsolète de certaines tables de débogage."
+
+#: src/Module/Admin/Site.php:656
+msgid "Lifespan of remote items"
+msgstr "Durée de vie des conversations distantes"
+
+#: src/Module/Admin/Site.php:656
+msgid ""
+"When the database cleanup is enabled, this defines the days after which "
+"remote items will be deleted. Own items, and marked or filed items are "
+"always kept. 0 disables this behaviour."
+msgstr "Si le nettoyage de la base de donnée est actif, cette valeur représente le délai en jours après lequel les conversations distantes sont supprimées. Les conversations démarrées par un utilisateur local, étoilées ou archivées sont toujours conservées. 0 pour désactiver."
+
+#: src/Module/Admin/Site.php:657
+msgid "Lifespan of unclaimed items"
+msgstr "Durée de vie des conversations relayées"
+
+#: src/Module/Admin/Site.php:657
+msgid ""
+"When the database cleanup is enabled, this defines the days after which "
+"unclaimed remote items (mostly content from the relay) will be deleted. "
+"Default value is 90 days. Defaults to the general lifespan value of remote "
+"items if set to 0."
+msgstr "Si le nettoyage de la base de donnée est actif, cette valeur représente le délai en jours après lequel les conversations relayées qui n'ont pas reçu d'interactions locales sont supprimées. La valeur par défaut est 90 jours. 0 pour aligner cette valeur sur la durée de vie des conversations distantes."
+
+#: src/Module/Admin/Site.php:658
+msgid "Lifespan of raw conversation data"
+msgstr "Durée de vie des méta-données de conversation"
+
+#: src/Module/Admin/Site.php:658
+msgid ""
+"The conversation data is used for ActivityPub and OStatus, as well as for "
+"debug purposes. It should be safe to remove it after 14 days, default is 90 "
+"days."
+msgstr "Cette valeur représente le délai en jours après lequel les méta-données de conversations sont supprimées. Ces méta-données sont utilisées par les protocoles ActivityPub et OStatus, et pour le débogage. Il est prudent de conserver ces meta-données pendant au moins 14 jours. La valeur par défaut est 90 jours."
+
+#: src/Module/Admin/Site.php:659
+msgid "Path to item cache"
+msgstr "Chemin vers le cache des objets."
+
+#: src/Module/Admin/Site.php:659
+msgid "The item caches buffers generated bbcode and external images."
+msgstr "Le cache de publications contient des textes HTML de BBCode compil's et une copie de chaque image distante."
+
+#: src/Module/Admin/Site.php:660
+msgid "Cache duration in seconds"
+msgstr "Durée du cache en secondes"
+
+#: src/Module/Admin/Site.php:660
+msgid ""
+"How long should the cache files be hold? Default value is 86400 seconds (One"
+" day). To disable the item cache, set the value to -1."
+msgstr "Combien de temps les fichiers de cache doivent être maintenu? La valeur par défaut est 86400 secondes (une journée). Pour désactiver le cache de l'item, définissez la valeur à -1."
+
+#: src/Module/Admin/Site.php:661
+msgid "Maximum numbers of comments per post"
+msgstr "Nombre maximum de commentaires par publication"
+
+#: src/Module/Admin/Site.php:661
+msgid "How much comments should be shown for each post? Default value is 100."
+msgstr "Combien de commentaires doivent être affichés pour chaque publication? Valeur par défaut: 100."
+
+#: src/Module/Admin/Site.php:662
+msgid "Temp path"
+msgstr "Chemin des fichiers temporaires"
+
+#: src/Module/Admin/Site.php:662
+msgid ""
+"If you have a restricted system where the webserver can't access the system "
+"temp path, enter another path here."
+msgstr "Si vous n'avez pas la possibilité d'avoir accès au répertoire temp, entrez un autre répertoire ici."
+
+#: src/Module/Admin/Site.php:663
+msgid "Disable picture proxy"
+msgstr "Désactiver le proxy image "
+
+#: src/Module/Admin/Site.php:663
+msgid ""
+"The picture proxy increases performance and privacy. It shouldn't be used on"
+" systems with very low bandwidth."
+msgstr "Le proxy d'image améliore les performances d'affichage et protège la vie privée des utilisateurs locaux. Il n'est pas recommandé de l'activer sur un serveur avec une bande passante limitée."
+
+#: src/Module/Admin/Site.php:664
+msgid "Only search in tags"
+msgstr "Rechercher seulement dans les étiquettes"
+
+#: src/Module/Admin/Site.php:664
+msgid "On large systems the text search can slow down the system extremely."
+msgstr "La recherche textuelle peut ralentir considérablement les systèmes de grande taille."
+
+#: src/Module/Admin/Site.php:666
+msgid "New base url"
+msgstr "Nouvelle URL de base"
+
+#: src/Module/Admin/Site.php:666
+msgid ""
+"Change base url for this server. Sends relocate message to all Friendica and"
+" Diaspora* contacts of all users."
+msgstr "Changer l'URL de base de ce serveur. Envoie un message de déménagement à tous les contacts Friendica et Diaspora des utilisateurs locaux."
+
+#: src/Module/Admin/Site.php:668
+msgid "RINO Encryption"
+msgstr "Chiffrement RINO"
+
+#: src/Module/Admin/Site.php:668
+msgid "Encryption layer between nodes."
+msgstr "Couche de chiffrement entre les nœuds du réseau."
+
+#: src/Module/Admin/Site.php:668
+msgid "Enabled"
+msgstr "Activé"
+
+#: src/Module/Admin/Site.php:670
+msgid "Maximum number of parallel workers"
+msgstr "Nombre maximum de processus simultanés"
+
+#: src/Module/Admin/Site.php:670
+#, php-format
+msgid ""
+"On shared hosters set this to %d. On larger systems, values of %d are great."
+" Default value is %d."
+msgstr "Sur un hébergement partagé, mettez %d. Sur des serveurs plus puissants, %d est optimal. La valeur par défaut est %d."
+
+#: src/Module/Admin/Site.php:671
+msgid "Don't use \"proc_open\" with the worker"
+msgstr ""
+
+#: src/Module/Admin/Site.php:671
+msgid ""
+"Enable this if your system doesn't allow the use of \"proc_open\". This can "
+"happen on shared hosters. If this is enabled you should increase the "
+"frequency of worker calls in your crontab."
+msgstr ""
+
+#: src/Module/Admin/Site.php:672
+msgid "Enable fastlane"
+msgstr "Activer la file prioritaire"
+
+#: src/Module/Admin/Site.php:672
+msgid ""
+"When enabed, the fastlane mechanism starts an additional worker if processes"
+" with higher priority are blocked by processes of lower priority."
+msgstr "La file prioritaire est un ouvrier additionel démarré quand des tâches de fondde grande importance sont bloquées par des tâches de moindre importance dans la file d'attente."
+
+#: src/Module/Admin/Site.php:673
+msgid "Enable frontend worker"
+msgstr "Activer l'ouvrier manuel"
+
+#: src/Module/Admin/Site.php:673
+#, php-format
+msgid ""
+"When enabled the Worker process is triggered when backend access is "
+"performed (e.g. messages being delivered). On smaller sites you might want "
+"to call %s/worker on a regular basis via an external cron job. You should "
+"only enable this option if you cannot utilize cron/scheduled jobs on your "
+"server."
+msgstr ""
+
+#: src/Module/Admin/Site.php:675
+msgid "Subscribe to relay"
+msgstr "S'abonner au relai"
+
+#: src/Module/Admin/Site.php:675
+msgid ""
+"Enables the receiving of public posts from the relay. They will be included "
+"in the search, subscribed tags and on the global community page."
+msgstr "Active la réception de conversations publiques relayées. Elles sont affichées dans la page de recherche, les recherches enregistrées et dans la page de communauté globale."
+
+#: src/Module/Admin/Site.php:676
+msgid "Relay server"
+msgstr "Serveur relai"
+
+#: src/Module/Admin/Site.php:676
+msgid ""
+"Address of the relay server where public posts should be send to. For "
+"example https://relay.diasp.org"
+msgstr "URL du serveur relai auquel les conversations publique locales doivent être soumises."
+
+#: src/Module/Admin/Site.php:677
+msgid "Direct relay transfer"
+msgstr "Relai direct"
+
+#: src/Module/Admin/Site.php:677
+msgid ""
+"Enables the direct transfer to other servers without using the relay servers"
+msgstr "Soumet les conversations publiques aux serveurs distants sans passer par le serveur relai."
+
+#: src/Module/Admin/Site.php:678
+msgid "Relay scope"
+msgstr "Filtre du relai"
+
+#: src/Module/Admin/Site.php:678
+msgid ""
+"Can be \"all\" or \"tags\". \"all\" means that every public post should be "
+"received. \"tags\" means that only posts with selected tags should be "
+"received."
+msgstr ""
+
+#: src/Module/Admin/Site.php:678
+msgid "all"
+msgstr "Tous"
+
+#: src/Module/Admin/Site.php:678
+msgid "tags"
+msgstr "Tags"
+
+#: src/Module/Admin/Site.php:679
+msgid "Server tags"
+msgstr "Tags de filtre du relai"
+
+#: src/Module/Admin/Site.php:679
+msgid "Comma separated list of tags for the \"tags\" subscription."
+msgstr ""
+
+#: src/Module/Admin/Site.php:680
+msgid "Allow user tags"
+msgstr "Inclure les tags des utilisateurs"
+
+#: src/Module/Admin/Site.php:680
+msgid ""
+"If enabled, the tags from the saved searches will used for the \"tags\" "
+"subscription in addition to the \"relay_server_tags\"."
+msgstr ""
+
+#: src/Module/Admin/Site.php:683
+msgid "Start Relocation"
+msgstr "Démarrer le déménagement"
+
+#: src/Module/Admin/Summary.php:30
+#, php-format
+msgid ""
+"Your DB still runs with MyISAM tables. You should change the engine type to "
+"InnoDB. As Friendica will use InnoDB only features in the future, you should"
+" change this! See here for a guide that may be helpful "
+"converting the table engines. You may also use the command php "
+"bin/console.php dbstructure toinnodb of your Friendica installation for"
+" an automatic conversion.php bin/console.php dbstructure update
depuis votre répertoire Friendica et noter les erreurs potentielles."
+
+#: src/Module/Admin/Summary.php:51
+msgid ""
+"The last update failed. Please run \"php bin/console.php dbstructure "
+"update\" from the command line and have a look at the errors that might "
+"appear. (Some of the errors are possibly inside the logfile.)"
+msgstr ""
+
+#: src/Module/Admin/Summary.php:56
+msgid "The worker was never executed. Please check your database structure!"
+msgstr "Le 'worker' n'a pas encore été exécuté. Vérifiez la structure de votre base de données."
+
+#: src/Module/Admin/Summary.php:58
+#, php-format
+msgid ""
+"The last worker execution was on %s UTC. This is older than one hour. Please"
+" check your crontab settings."
+msgstr "La dernière exécution du 'worker' s'est déroulée à %s, c'est-à-dire il y a plus d'une heure. Vérifiez les réglages de crontab."
+
+#: src/Module/Admin/Summary.php:63
+#, php-format
+msgid ""
+"Friendica's configuration now is stored in config/local.config.php, please "
+"copy config/local-sample.config.php and move your config from "
+".htconfig.php
. See the Config help page for "
+"help with the transition."
+msgstr "La configuration de votre site Friendica est maintenant stockée dans le fichier config/local.config.php
, veuillez copier le fichier config/local-sample.config.php
et transférer votre configuration depuis le fichier .htconfig.php
. Veuillez consulter la page d'aide de configuration (en anglais) pour vous aider dans la transition."
+
+#: src/Module/Admin/Summary.php:67
+#, php-format
+msgid ""
+"Friendica's configuration now is stored in config/local.config.php, please "
+"copy config/local-sample.config.php and move your config from "
+"config/local.ini.php
. See the Config help "
+"page for help with the transition."
+msgstr "La configuration de votre site Friendica est maintenant stockée dans le fichier config/local.config.php
, veuillez copier le fichier config/local-sample.config.php
et transférer votre configuration depuis le fichier config/local.ini.php
. Veuillez consulter la page d'aide de configuration (en anglais) pour vous aider dans la transition."
+
+#: src/Module/Admin/Summary.php:73
+#, php-format
+msgid ""
+"%s is not reachable on your system. This is a severe "
+"configuration issue that prevents server to server communication. See the installation page for help."
+msgstr "%s n'est pas accessible sur votre site. C'est un problème de configuration sévère qui empêche toute communication avec les serveurs distants. Veuillez consulter la page d'aide à l'installation (en anglais) pour plus d'information."
+
+#: src/Module/Admin/Summary.php:89
+#, php-format
+msgid ""
+"Friendica's system.basepath was updated from '%s' to '%s'. Please remove the"
+" system.basepath from your db to avoid differences."
+msgstr ""
+
+#: src/Module/Admin/Summary.php:97
+#, php-format
+msgid ""
+"Friendica's current system.basepath '%s' is wrong and the config file '%s' "
+"isn't used."
+msgstr ""
+
+#: src/Module/Admin/Summary.php:105
+#, php-format
+msgid ""
+"Friendica's current system.basepath '%s' is not equal to the config file "
+"'%s'. Please fix your configuration."
+msgstr ""
+
+#: src/Module/Admin/Summary.php:112
+msgid "Normal Account"
+msgstr "Compte normal"
+
+#: src/Module/Admin/Summary.php:113
+msgid "Automatic Follower Account"
+msgstr "Profile Resuivant"
+
+#: src/Module/Admin/Summary.php:114
+msgid "Public Forum Account"
+msgstr "Forum public"
+
+#: src/Module/Admin/Summary.php:115
+msgid "Automatic Friend Account"
+msgstr "Compte auto-amical"
+
+#: src/Module/Admin/Summary.php:116
+msgid "Blog Account"
+msgstr "Compte de blog"
+
+#: src/Module/Admin/Summary.php:117
+msgid "Private Forum Account"
+msgstr "Forum privé"
+
+#: src/Module/Admin/Summary.php:141
+msgid "Message queues"
+msgstr "Files d'attente des messages"
+
+#: src/Module/Admin/Summary.php:147
+msgid "Server Settings"
+msgstr "Paramètres du site"
+
+#: src/Module/Admin/Summary.php:161
+msgid "Summary"
+msgstr "Résumé"
+
+#: src/Module/Admin/Summary.php:163
+msgid "Registered users"
+msgstr "Utilisateurs inscrits"
+
+#: src/Module/Admin/Summary.php:165
+msgid "Pending registrations"
+msgstr "Inscriptions en attente"
+
+#: src/Module/Admin/Summary.php:166
+msgid "Version"
+msgstr "Version"
+
+#: src/Module/Admin/Summary.php:170
+msgid "Active addons"
+msgstr "Add-ons actifs"
+
+#: src/Module/Admin/Themes/Details.php:32 src/Module/Admin/Themes/Embed.php:46
+msgid "Theme settings updated."
+msgstr "Réglages du thème sauvés."
+
+#: src/Module/Admin/Themes/Details.php:71 src/Module/Admin/Themes/Index.php:47
+#, php-format
+msgid "Theme %s disabled."
+msgstr ""
+
+#: src/Module/Admin/Themes/Details.php:73 src/Module/Admin/Themes/Index.php:49
+#, php-format
+msgid "Theme %s successfully enabled."
+msgstr ""
+
+#: src/Module/Admin/Themes/Details.php:75 src/Module/Admin/Themes/Index.php:51
+#, php-format
+msgid "Theme %s failed to install."
+msgstr ""
+
+#: src/Module/Admin/Themes/Details.php:97
+msgid "Screenshot"
+msgstr "Capture d'écran"
+
+#: src/Module/Admin/Themes/Details.php:105
+#: src/Module/Admin/Themes/Index.php:94 src/Module/BaseAdminModule.php:83
+msgid "Themes"
+msgstr "Thèmes"
+
+#: src/Module/Admin/Themes/Embed.php:67
+msgid "Unknown theme."
+msgstr ""
+
+#: src/Module/Admin/Themes/Index.php:96
+msgid "Reload active themes"
+msgstr "Recharger les thèmes actifs"
+
+#: src/Module/Admin/Themes/Index.php:101
+#, php-format
+msgid "No themes found on the system. They should be placed in %1$s"
+msgstr "Aucun thème trouvé. Leur emplacement d'installation est%1$s."
+
+#: src/Module/Admin/Themes/Index.php:102
+msgid "[Experimental]"
+msgstr "[Expérimental]"
+
+#: src/Module/Admin/Themes/Index.php:103
+msgid "[Unsupported]"
+msgstr "[Non supporté]"
+
+#: src/Module/Admin/Tos.php:30
+msgid "The Terms of Service settings have been updated."
+msgstr ""
+
+#: src/Module/Admin/Tos.php:44
+msgid "Display Terms of Service"
+msgstr "Afficher les Conditions d'Utilisation"
+
+#: src/Module/Admin/Tos.php:44
+msgid ""
+"Enable the Terms of Service page. If this is enabled a link to the terms "
+"will be added to the registration form and the general information page."
+msgstr "Active la page de Conditions d'Utilisation. Un lien vers cette page est ajouté dans le formulaire d'inscription et la page A Propos."
+
+#: src/Module/Admin/Tos.php:45
+msgid "Display Privacy Statement"
+msgstr "Afficher la Politique de Confidentialité"
+
+#: src/Module/Admin/Tos.php:45
+#, php-format
+msgid ""
+"Show some informations regarding the needed information to operate the node "
+"according e.g. to EU-GDPR."
+msgstr "Affiche les informations légales nécessaires pour publier un site Friendica en accord avec le RGPD européen par exemple."
+
+#: src/Module/Admin/Tos.php:46
+msgid "Privacy Statement Preview"
+msgstr "Aperçu de la Politique de Confidentialité"
+
+#: src/Module/Admin/Tos.php:48
+msgid "The Terms of Service"
+msgstr "Conditions d'Utilisation"
+
+#: src/Module/Admin/Tos.php:48
+msgid ""
+"Enter the Terms of Service for your node here. You can use BBCode. Headers "
+"of sections should be [h2] and below."
+msgstr "Saisissez les Conditions d'Utilisations de votre site. Les BBCodes sont disponibles, les titres commencent à [h2]."
+
+#: src/Module/Admin/Users.php:48
+#, php-format
+msgid ""
+"\n"
+"\t\t\tDear %1$s,\n"
+"\t\t\t\tthe administrator of %2$s has set up an account for you."
+msgstr "\n\t\t\tChère/Cher %1$s,\n\t\t\t\tL’administrateur de %2$s vous a ouvert un compte."
+
+#: src/Module/Admin/Users.php:51
+#, php-format
+msgid ""
+"\n"
+"\t\t\tThe login details are as follows:\n"
+"\n"
+"\t\t\tSite Location:\t%1$s\n"
+"\t\t\tLogin Name:\t\t%2$s\n"
+"\t\t\tPassword:\t\t%3$s\n"
+"\n"
+"\t\t\tYou may change your password from your account \"Settings\" page after logging\n"
+"\t\t\tin.\n"
+"\n"
+"\t\t\tPlease take a few moments to review the other account settings on that page.\n"
+"\n"
+"\t\t\tYou may also wish to add some basic information to your default profile\n"
+"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n"
+"\n"
+"\t\t\tWe recommend setting your full name, adding a profile photo,\n"
+"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n"
+"\t\t\tperhaps what country you live in; if you do not wish to be more specific\n"
+"\t\t\tthan that.\n"
+"\n"
+"\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n"
+"\t\t\tIf you are new and do not know anybody here, they may help\n"
+"\t\t\tyou to make some new and interesting friends.\n"
+"\n"
+"\t\t\tIf you ever want to delete your account, you can do so at %1$s/removeme\n"
+"\n"
+"\t\t\tThank you and welcome to %4$s."
+msgstr ""
+
+#: src/Module/Admin/Users.php:96
+#, php-format
+msgid "%s user blocked"
+msgid_plural "%s users blocked"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/Module/Admin/Users.php:102
+#, php-format
+msgid "%s user unblocked"
+msgid_plural "%s users unblocked"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/Module/Admin/Users.php:110 src/Module/Admin/Users.php:160
+msgid "You can't remove yourself"
+msgstr "Vous ne pouvez pas supprimer votre propre compte"
+
+#: src/Module/Admin/Users.php:114
+#, php-format
+msgid "%s user deleted"
+msgid_plural "%s users deleted"
+msgstr[0] "%s utilisateur supprimé"
+msgstr[1] "%s utilisateurs supprimés"
+
+#: src/Module/Admin/Users.php:158
+#, php-format
+msgid "User \"%s\" deleted"
+msgstr ""
+
+#: src/Module/Admin/Users.php:167
+#, php-format
+msgid "User \"%s\" blocked"
+msgstr ""
+
+#: src/Module/Admin/Users.php:173
+#, php-format
+msgid "User \"%s\" unblocked"
+msgstr ""
+
+#: src/Module/Admin/Users.php:226
+msgid "Private Forum"
+msgstr "Forum Privé"
+
+#: src/Module/Admin/Users.php:233
+msgid "Relay"
+msgstr "Relai"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Register date"
+msgstr "Date d'inscription"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Last login"
+msgstr "Dernière connexion"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Last item"
+msgstr "Dernier élément"
+
+#: src/Module/Admin/Users.php:272
+msgid "Type"
+msgstr "Type"
+
+#: src/Module/Admin/Users.php:279
+msgid "Add User"
+msgstr "Ajouter l'utilisateur"
+
+#: src/Module/Admin/Users.php:281
+msgid "User registrations waiting for confirm"
+msgstr "Inscriptions d'utilisateurs en attente de confirmation"
+
+#: src/Module/Admin/Users.php:282
+msgid "User waiting for permanent deletion"
+msgstr "Utilisateur en attente de suppression définitive"
+
+#: src/Module/Admin/Users.php:283
+msgid "Request date"
+msgstr "Date de la demande"
+
+#: src/Module/Admin/Users.php:284
+msgid "No registrations."
+msgstr "Pas d'inscriptions."
+
+#: src/Module/Admin/Users.php:285
+msgid "Note from the user"
+msgstr "Message personnel"
+
+#: src/Module/Admin/Users.php:287
+msgid "Deny"
+msgstr "Rejetter"
+
+#: src/Module/Admin/Users.php:290
+msgid "User blocked"
+msgstr "Utilisateur bloqué"
+
+#: src/Module/Admin/Users.php:292
+msgid "Site admin"
+msgstr "Administration du Site"
+
+#: src/Module/Admin/Users.php:293
+msgid "Account expired"
+msgstr "Compte expiré"
+
+#: src/Module/Admin/Users.php:296
+msgid "New User"
+msgstr "Nouvel utilisateur"
+
+#: src/Module/Admin/Users.php:297
+msgid "Permanent deletion"
+msgstr "Suppression définitive"
+
+#: src/Module/Admin/Users.php:302
+msgid ""
+"Selected users will be deleted!\\n\\nEverything these users had posted on "
+"this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr "Les utilisateurs sélectionnés vont être supprimés!\\n\\nTout ce qu'ils ont posté sur ce site sera définitivement effacé!\\n\\nÊtes-vous certain?"
+
+#: src/Module/Admin/Users.php:303
+msgid ""
+"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
+"site will be permanently deleted!\\n\\nAre you sure?"
+msgstr "L'utilisateur {0} va être supprimé!\\n\\nTout ce qu'il a posté sur ce site sera définitivement perdu!\\n\\nÊtes-vous certain?"
+
+#: src/Module/Admin/Users.php:313
+msgid "Name of the new user."
+msgstr "Nom du nouvel utilisateur."
+
+#: src/Module/Admin/Users.php:314
+msgid "Nickname"
+msgstr "Pseudo"
+
+#: src/Module/Admin/Users.php:314
+msgid "Nickname of the new user."
+msgstr "Pseudo du nouvel utilisateur."
+
+#: src/Module/Admin/Users.php:315
+msgid "Email address of the new user."
+msgstr "Adresse mail du nouvel utilisateur."
+
+#: src/Module/AllFriends.php:55
+msgid "No friends to display."
+msgstr "Pas d'amis à afficher."
+
+#: src/Module/Apps.php:29
+msgid "No installed applications."
+msgstr "Pas d'application installée."
+
+#: src/Module/Apps.php:34
+msgid "Applications"
+msgstr "Applications"
+
#: src/Module/Attach.php:36 src/Module/Attach.php:48
msgid "Item was not found."
msgstr "Element introuvable."
+#: src/Module/Babel.php:31
+msgid "Source input"
+msgstr "Saisie source"
+
+#: src/Module/Babel.php:37
+msgid "BBCode::toPlaintext"
+msgstr "BBCode::toPlaintext"
+
+#: src/Module/Babel.php:43
+msgid "BBCode::convert (raw HTML)"
+msgstr "BBCode::convert (code HTML)"
+
+#: src/Module/Babel.php:48
+msgid "BBCode::convert"
+msgstr "BBCode::convert"
+
+#: src/Module/Babel.php:54
+msgid "BBCode::convert => HTML::toBBCode"
+msgstr "BBCode::convert => HTML::toBBCode"
+
+#: src/Module/Babel.php:60
+msgid "BBCode::toMarkdown"
+msgstr "BBCode::toMarkdown"
+
+#: src/Module/Babel.php:66
+msgid "BBCode::toMarkdown => Markdown::convert"
+msgstr "BBCode::toMarkdown => Markdown::convert"
+
+#: src/Module/Babel.php:72
+msgid "BBCode::toMarkdown => Markdown::toBBCode"
+msgstr "BBCode::toMarkdown => Markdown::toBBCode"
+
+#: src/Module/Babel.php:78
+msgid "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"
+msgstr "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"
+
+#: src/Module/Babel.php:89
+msgid "Item Body"
+msgstr "Corps du message"
+
+#: src/Module/Babel.php:93
+msgid "Item Tags"
+msgstr "Tags du messages"
+
+#: src/Module/Babel.php:100
+msgid "Source input (Diaspora format)"
+msgstr "Saisie source (format Diaspora)"
+
+#: src/Module/Babel.php:106
+msgid "Markdown::convert (raw HTML)"
+msgstr "Markdown::convert (code HTML)"
+
+#: src/Module/Babel.php:111
+msgid "Markdown::convert"
+msgstr "Markdown::convert"
+
+#: src/Module/Babel.php:117
+msgid "Markdown::toBBCode"
+msgstr "Markdown::toBBCode"
+
+#: src/Module/Babel.php:124
+msgid "Raw HTML input"
+msgstr "Saisie code HTML"
+
+#: src/Module/Babel.php:129
+msgid "HTML Input"
+msgstr "Code HTML"
+
+#: src/Module/Babel.php:135
+msgid "HTML::toBBCode"
+msgstr "HTML::toBBCode"
+
+#: src/Module/Babel.php:141
+msgid "HTML::toBBCode => BBCode::convert"
+msgstr "HTML::toBBCode => BBCode::convert"
+
+#: src/Module/Babel.php:146
+msgid "HTML::toBBCode => BBCode::convert (raw HTML)"
+msgstr "HTML::toBBCode => BBCode::convert (code HTML)"
+
+#: src/Module/Babel.php:152
+msgid "HTML::toMarkdown"
+msgstr "HTML::toMarkdown"
+
+#: src/Module/Babel.php:158
+msgid "HTML::toPlaintext"
+msgstr "HTML::toPlaintext"
+
+#: src/Module/Babel.php:166
+msgid "Source text"
+msgstr "Texte source"
+
+#: src/Module/Babel.php:167
+msgid "BBCode"
+msgstr "BBCode"
+
+#: src/Module/Babel.php:168
+msgid "Markdown"
+msgstr "Markdown"
+
+#: src/Module/Babel.php:169
+msgid "HTML"
+msgstr "HTML"
+
+#: src/Module/BaseAdminModule.php:76
+msgid "Overview"
+msgstr "Synthèse"
+
+#: src/Module/BaseAdminModule.php:79
+msgid "Configuration"
+msgstr "Configuration"
+
+#: src/Module/BaseAdminModule.php:87
+msgid "Database"
+msgstr "Base de données"
+
+#: src/Module/BaseAdminModule.php:88
+msgid "DB updates"
+msgstr "Mise-à-jour de la base"
+
+#: src/Module/BaseAdminModule.php:89
+msgid "Inspect Deferred Workers"
+msgstr "Tâches de fond reportées"
+
+#: src/Module/BaseAdminModule.php:90
+msgid "Inspect worker Queue"
+msgstr "Tâches de fond en attente"
+
+#: src/Module/BaseAdminModule.php:92
+msgid "Tools"
+msgstr "Outils"
+
+#: src/Module/BaseAdminModule.php:93
+msgid "Contact Blocklist"
+msgstr "Liste de contacts bloqués"
+
+#: src/Module/BaseAdminModule.php:101
+msgid "Diagnostics"
+msgstr "Diagnostics"
+
+#: src/Module/BaseAdminModule.php:102
+msgid "PHP Info"
+msgstr "PHP Info"
+
+#: src/Module/BaseAdminModule.php:103
+msgid "probe address"
+msgstr "Tester une adresse"
+
+#: src/Module/BaseAdminModule.php:104
+msgid "check webfinger"
+msgstr "vérification de webfinger"
+
+#: src/Module/BaseAdminModule.php:105
+msgid "Item Source"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:106
+msgid "Babel"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:115
+msgid "Addon Features"
+msgstr "Fonctionnalités des addons"
+
+#: src/Module/BaseAdminModule.php:116
+msgid "User registrations waiting for confirmation"
+msgstr "Inscriptions en attente de confirmation"
+
+#: src/Module/Bookmarklet.php:35
+msgid "This page is missing a url parameter."
+msgstr ""
+
+#: src/Module/Bookmarklet.php:57
+msgid "The post was created"
+msgstr "La publication a été créée"
+
#: src/Module/Contact.php:166
#, php-format
msgid "%d contact edited."
@@ -8836,453 +8622,688 @@ msgid_plural "%d contacts edited."
msgstr[0] "%d contact mis à jour."
msgstr[1] "%d contacts mis à jour."
-#: src/Module/Contact.php:191 src/Module/Contact.php:374
+#: src/Module/Contact.php:193 src/Module/Contact.php:377
msgid "Could not access contact record."
msgstr "Impossible d'accéder à l'enregistrement du contact."
-#: src/Module/Contact.php:201
+#: src/Module/Contact.php:203
msgid "Could not locate selected profile."
msgstr "Impossible de localiser le profil séléctionné."
-#: src/Module/Contact.php:233
+#: src/Module/Contact.php:235
msgid "Contact updated."
msgstr "Contact mis à jour."
-#: src/Module/Contact.php:395
+#: src/Module/Contact.php:398
msgid "Contact has been blocked"
msgstr "Le contact a été bloqué"
-#: src/Module/Contact.php:395
+#: src/Module/Contact.php:398
msgid "Contact has been unblocked"
msgstr "Le contact n'est plus bloqué"
-#: src/Module/Contact.php:405
+#: src/Module/Contact.php:408
msgid "Contact has been ignored"
msgstr "Le contact a été ignoré"
-#: src/Module/Contact.php:405
+#: src/Module/Contact.php:408
msgid "Contact has been unignored"
msgstr "Le contact n'est plus ignoré"
-#: src/Module/Contact.php:415
+#: src/Module/Contact.php:418
msgid "Contact has been archived"
msgstr "Contact archivé"
-#: src/Module/Contact.php:415
+#: src/Module/Contact.php:418
msgid "Contact has been unarchived"
msgstr "Contact désarchivé"
-#: src/Module/Contact.php:439
+#: src/Module/Contact.php:442
msgid "Drop contact"
msgstr "Supprimer contact"
-#: src/Module/Contact.php:442 src/Module/Contact.php:820
+#: src/Module/Contact.php:445 src/Module/Contact.php:823
msgid "Do you really want to delete this contact?"
msgstr "Voulez-vous vraiment supprimer ce contact?"
-#: src/Module/Contact.php:456
+#: src/Module/Contact.php:459
msgid "Contact has been removed."
msgstr "Ce contact a été retiré."
-#: src/Module/Contact.php:486
+#: src/Module/Contact.php:489
#, php-format
msgid "You are mutual friends with %s"
msgstr "Vous êtes ami (et réciproquement) avec %s"
-#: src/Module/Contact.php:491
+#: src/Module/Contact.php:494
#, php-format
msgid "You are sharing with %s"
msgstr "Vous partagez avec %s"
-#: src/Module/Contact.php:496
+#: src/Module/Contact.php:499
#, php-format
msgid "%s is sharing with you"
msgstr "%s partage avec vous"
-#: src/Module/Contact.php:520
+#: src/Module/Contact.php:523
msgid "Private communications are not available for this contact."
msgstr "Les communications privées ne sont pas disponibles pour ce contact."
-#: src/Module/Contact.php:522
+#: src/Module/Contact.php:525
msgid "Never"
msgstr "Jamais"
-#: src/Module/Contact.php:525
+#: src/Module/Contact.php:528
msgid "(Update was successful)"
msgstr "(Mise à jour effectuée avec succès)"
-#: src/Module/Contact.php:525
+#: src/Module/Contact.php:528
msgid "(Update was not successful)"
msgstr "(Échec de la mise à jour)"
-#: src/Module/Contact.php:527 src/Module/Contact.php:1058
+#: src/Module/Contact.php:530 src/Module/Contact.php:1061
msgid "Suggest friends"
msgstr "Suggérer amitié/contact"
-#: src/Module/Contact.php:531
+#: src/Module/Contact.php:534
#, php-format
msgid "Network type: %s"
msgstr "Type de réseau %s"
-#: src/Module/Contact.php:536
+#: src/Module/Contact.php:539
msgid "Communications lost with this contact!"
msgstr "Communications perdues avec ce contact !"
-#: src/Module/Contact.php:542
+#: src/Module/Contact.php:545
msgid "Fetch further information for feeds"
msgstr "Chercher plus d'informations pour les flux"
-#: src/Module/Contact.php:544
+#: src/Module/Contact.php:547
msgid ""
"Fetch information like preview pictures, title and teaser from the feed "
"item. You can activate this if the feed doesn't contain much text. Keywords "
"are taken from the meta header in the feed item and are posted as hash tags."
msgstr ""
-#: src/Module/Contact.php:547
+#: src/Module/Contact.php:550
msgid "Fetch information"
msgstr "Récupérer informations"
-#: src/Module/Contact.php:548
+#: src/Module/Contact.php:551
msgid "Fetch keywords"
msgstr ""
-#: src/Module/Contact.php:549
+#: src/Module/Contact.php:552
msgid "Fetch information and keywords"
msgstr "Récupérer informations"
-#: src/Module/Contact.php:581
+#: src/Module/Contact.php:584
msgid "Profile Visibility"
msgstr "Visibilité du profil"
-#: src/Module/Contact.php:582
+#: src/Module/Contact.php:585
msgid "Contact Information / Notes"
msgstr "Informations de contact / Notes"
-#: src/Module/Contact.php:583
+#: src/Module/Contact.php:586
msgid "Contact Settings"
msgstr "Paramètres du Contact"
-#: src/Module/Contact.php:592
+#: src/Module/Contact.php:595
msgid "Contact"
msgstr "Contact"
-#: src/Module/Contact.php:596
+#: src/Module/Contact.php:599
#, php-format
msgid ""
"Please choose the profile you would like to display to %s when viewing your "
"profile securely."
msgstr "Merci de choisir le profil que vous souhaitez montrer à %s lorsqu'il vous rend visite de manière sécurisée."
-#: src/Module/Contact.php:598
+#: src/Module/Contact.php:601
msgid "Their personal note"
msgstr ""
-#: src/Module/Contact.php:600
+#: src/Module/Contact.php:603
msgid "Edit contact notes"
msgstr "Éditer les notes des contacts"
-#: src/Module/Contact.php:604
+#: src/Module/Contact.php:607
msgid "Block/Unblock contact"
msgstr "Bloquer/débloquer ce contact"
-#: src/Module/Contact.php:605
+#: src/Module/Contact.php:608
msgid "Ignore contact"
msgstr "Ignorer ce contact"
-#: src/Module/Contact.php:606
+#: src/Module/Contact.php:609
msgid "Repair URL settings"
msgstr "Réglages de réparation des URL"
-#: src/Module/Contact.php:607
+#: src/Module/Contact.php:610
msgid "View conversations"
msgstr "Voir les conversations"
-#: src/Module/Contact.php:612
+#: src/Module/Contact.php:615
msgid "Last update:"
msgstr "Dernière mise-à-jour :"
-#: src/Module/Contact.php:614
+#: src/Module/Contact.php:617
msgid "Update public posts"
msgstr "Mettre à jour les publications publiques:"
-#: src/Module/Contact.php:616 src/Module/Contact.php:1068
+#: src/Module/Contact.php:619 src/Module/Contact.php:1071
msgid "Update now"
msgstr "Mettre à jour"
-#: src/Module/Contact.php:622 src/Module/Contact.php:825
-#: src/Module/Contact.php:1085
+#: src/Module/Contact.php:625 src/Module/Contact.php:828
+#: src/Module/Contact.php:1088
msgid "Unignore"
msgstr "Ne plus ignorer"
-#: src/Module/Contact.php:626
+#: src/Module/Contact.php:629
msgid "Currently blocked"
msgstr "Actuellement bloqué"
-#: src/Module/Contact.php:627
+#: src/Module/Contact.php:630
msgid "Currently ignored"
msgstr "Actuellement ignoré"
-#: src/Module/Contact.php:628
+#: src/Module/Contact.php:631
msgid "Currently archived"
msgstr "Actuellement archivé"
-#: src/Module/Contact.php:629
+#: src/Module/Contact.php:632
msgid "Awaiting connection acknowledge"
msgstr ""
-#: src/Module/Contact.php:630
+#: src/Module/Contact.php:633
msgid ""
"Replies/likes to your public posts may still be visible"
msgstr "Les réponses et \"j'aime\" à vos publications publiques peuvent être toujours visibles"
-#: src/Module/Contact.php:631
+#: src/Module/Contact.php:634
msgid "Notification for new posts"
msgstr "Notification des nouvelles publications"
-#: src/Module/Contact.php:631
+#: src/Module/Contact.php:634
msgid "Send a notification of every new post of this contact"
msgstr "Envoyer une notification de chaque nouveau message en provenance de ce contact"
-#: src/Module/Contact.php:633
+#: src/Module/Contact.php:636
msgid "Blacklisted keywords"
msgstr "Mots-clés sur la liste noire"
-#: src/Module/Contact.php:633
+#: src/Module/Contact.php:636
msgid ""
"Comma separated list of keywords that should not be converted to hashtags, "
"when \"Fetch information and keywords\" is selected"
msgstr "Liste de mots-clés separés par des virgules qui ne doivent pas être converti en mots-dièse quand « Récupérer informations et mots-clés » est sélectionné."
-#: src/Module/Contact.php:650
+#: src/Module/Contact.php:653 src/Module/Settings/TwoFactor/Index.php:100
msgid "Actions"
msgstr "Actions"
-#: src/Module/Contact.php:696
+#: src/Module/Contact.php:700
msgid "Suggestions"
msgstr "Suggestions"
-#: src/Module/Contact.php:699
+#: src/Module/Contact.php:703
msgid "Suggest potential friends"
msgstr "Suggérer des amis potentiels"
-#: src/Module/Contact.php:707
+#: src/Module/Contact.php:708 src/Module/Group.php:287
+msgid "All Contacts"
+msgstr "Tous les contacts"
+
+#: src/Module/Contact.php:711
msgid "Show all contacts"
msgstr "Montrer tous les contacts"
-#: src/Module/Contact.php:712
+#: src/Module/Contact.php:716
msgid "Unblocked"
msgstr "Non-bloqués"
-#: src/Module/Contact.php:715
+#: src/Module/Contact.php:719
msgid "Only show unblocked contacts"
msgstr "Ne montrer que les contacts non-bloqués"
-#: src/Module/Contact.php:720
+#: src/Module/Contact.php:724
msgid "Blocked"
msgstr "Bloqués"
-#: src/Module/Contact.php:723
+#: src/Module/Contact.php:727
msgid "Only show blocked contacts"
msgstr "Ne montrer que les contacts bloqués"
-#: src/Module/Contact.php:728
+#: src/Module/Contact.php:732
msgid "Ignored"
msgstr "Ignorés"
-#: src/Module/Contact.php:731
+#: src/Module/Contact.php:735
msgid "Only show ignored contacts"
msgstr "Ne montrer que les contacts ignorés"
-#: src/Module/Contact.php:736
+#: src/Module/Contact.php:740
msgid "Archived"
msgstr "Archivés"
-#: src/Module/Contact.php:739
+#: src/Module/Contact.php:743
msgid "Only show archived contacts"
msgstr "Ne montrer que les contacts archivés"
-#: src/Module/Contact.php:744
+#: src/Module/Contact.php:748
msgid "Hidden"
msgstr "Cachés"
-#: src/Module/Contact.php:747
+#: src/Module/Contact.php:751
msgid "Only show hidden contacts"
msgstr "Ne montrer que les contacts masqués"
-#: src/Module/Contact.php:755
+#: src/Module/Contact.php:759
msgid "Organize your contact groups"
msgstr ""
-#: src/Module/Contact.php:815
+#: src/Module/Contact.php:818
msgid "Search your contacts"
msgstr "Rechercher dans vos contacts"
-#: src/Module/Contact.php:826 src/Module/Contact.php:1094
+#: src/Module/Contact.php:829 src/Module/Contact.php:1097
msgid "Archive"
msgstr "Archiver"
-#: src/Module/Contact.php:826 src/Module/Contact.php:1094
+#: src/Module/Contact.php:829 src/Module/Contact.php:1097
msgid "Unarchive"
msgstr "Désarchiver"
-#: src/Module/Contact.php:829
+#: src/Module/Contact.php:832
msgid "Batch Actions"
msgstr "Actions multiples"
-#: src/Module/Contact.php:856
+#: src/Module/Contact.php:859
msgid "Conversations started by this contact"
msgstr ""
-#: src/Module/Contact.php:861
+#: src/Module/Contact.php:864
msgid "Posts and Comments"
msgstr ""
-#: src/Module/Contact.php:884
+#: src/Module/Contact.php:887
msgid "View all contacts"
msgstr "Voir tous les contacts"
-#: src/Module/Contact.php:895
+#: src/Module/Contact.php:898
msgid "View all common friends"
msgstr "Voir tous les amis communs"
-#: src/Module/Contact.php:905
+#: src/Module/Contact.php:908
msgid "Advanced Contact Settings"
msgstr "Réglages avancés du contact"
-#: src/Module/Contact.php:991
+#: src/Module/Contact.php:994
msgid "Mutual Friendship"
msgstr "Relation réciproque"
-#: src/Module/Contact.php:996
+#: src/Module/Contact.php:999
msgid "is a fan of yours"
msgstr "Vous suit"
-#: src/Module/Contact.php:1001
+#: src/Module/Contact.php:1004
msgid "you are a fan of"
msgstr "Vous le/la suivez"
-#: src/Module/Contact.php:1025
+#: src/Module/Contact.php:1028
msgid "Edit contact"
msgstr "Éditer le contact"
-#: src/Module/Contact.php:1079
+#: src/Module/Contact.php:1082
msgid "Toggle Blocked status"
msgstr "(dés)activer l'état \"bloqué\""
-#: src/Module/Contact.php:1087
+#: src/Module/Contact.php:1090
msgid "Toggle Ignored status"
msgstr "(dés)activer l'état \"ignoré\""
-#: src/Module/Contact.php:1096
+#: src/Module/Contact.php:1099
msgid "Toggle Archive status"
msgstr "(dés)activer l'état \"archivé\""
-#: src/Module/Contact.php:1104
+#: src/Module/Contact.php:1107
msgid "Delete contact"
msgstr "Effacer ce contact"
-#: src/Module/Install.php:118
+#: src/Module/Credits.php:25
+msgid "Credits"
+msgstr "Remerciements"
+
+#: src/Module/Credits.php:26
+msgid ""
+"Friendica is a community project, that would not be possible without the "
+"help of many people. Here is a list of those who have contributed to the "
+"code or the translation of Friendica. Thank you all!"
+msgstr "Friendica est un projet communautaire, qui ne serait pas possible sans l'aide de beaucoup de gens. Voici une liste de ceux qui ont contribué au code ou à la traduction de Friendica. Merci à tous!"
+
+#: src/Module/Directory.php:66
+msgid "No entries (some entries may be hidden)."
+msgstr "Aucune entrée (certaines peuvent être cachées)."
+
+#: src/Module/Directory.php:85
+msgid "Find on this site"
+msgstr "Trouver sur ce site"
+
+#: src/Module/Directory.php:87
+msgid "Results for:"
+msgstr "Résultats pour :"
+
+#: src/Module/Directory.php:89
+msgid "Site Directory"
+msgstr "Annuaire local"
+
+#: src/Module/Feedtest.php:20 src/Module/Filer/SaveTag.php:20
+msgid "You must be logged in to use this module"
+msgstr "Vous devez être identifié pour accéder à cette fonctionnalité"
+
+#: src/Module/Feedtest.php:49
+msgid "Source URL"
+msgstr "URL Source"
+
+#: src/Module/Filer/SaveTag.php:39
+#, php-format
+msgid "Filetag %s saved to item"
+msgstr ""
+
+#: src/Module/Filer/SaveTag.php:49
+msgid "- select -"
+msgstr "- choisir -"
+
+#: src/Module/FollowConfirm.php:37
+msgid "No given contact."
+msgstr ""
+
+#: src/Module/Friendica.php:40
+msgid "Installed addons/apps:"
+msgstr "Add-ons/Applications installés :"
+
+#: src/Module/Friendica.php:45
+msgid "No installed addons/apps"
+msgstr "Aucun add-on/application n'est installé"
+
+#: src/Module/Friendica.php:50
+#, php-format
+msgid "Read about the Terms of Service of this node."
+msgstr ""
+
+#: src/Module/Friendica.php:57
+msgid "On this server the following remote servers are blocked."
+msgstr "Sur ce serveur, les serveurs suivants sont sur liste noire."
+
+#: src/Module/Friendica.php:75
+#, php-format
+msgid ""
+"This is Friendica, version %s that is running at the web location %s. The "
+"database version is %s, the post update version is %s."
+msgstr ""
+
+#: src/Module/Friendica.php:80
+msgid ""
+"Please visit Friendi.ca to learn more "
+"about the Friendica project."
+msgstr "Rendez-vous sur Friendi.ca pour en savoir plus sur le projet Friendica."
+
+#: src/Module/Friendica.php:81
+msgid "Bug reports and issues: please visit"
+msgstr "Pour les rapports de bugs : rendez vous sur"
+
+#: src/Module/Friendica.php:81
+msgid "the bugtracker at github"
+msgstr "le bugtracker sur GitHub"
+
+#: src/Module/Friendica.php:82
+msgid "Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca"
+msgstr ""
+
+#: src/Module/Group.php:42
+msgid "Group created."
+msgstr "Groupe créé."
+
+#: src/Module/Group.php:48
+msgid "Could not create group."
+msgstr "Impossible de créer le groupe."
+
+#: src/Module/Group.php:59 src/Module/Group.php:207 src/Module/Group.php:233
+msgid "Group not found."
+msgstr "Groupe introuvable."
+
+#: src/Module/Group.php:65
+msgid "Group name changed."
+msgstr "Groupe renommé."
+
+#: src/Module/Group.php:87
+msgid "Unknown group."
+msgstr ""
+
+#: src/Module/Group.php:96
+msgid "Contact is unavailable."
+msgstr ""
+
+#: src/Module/Group.php:100
+msgid "Contact is deleted."
+msgstr ""
+
+#: src/Module/Group.php:106
+msgid "Contact is blocked, unable to add it to a group."
+msgstr ""
+
+#: src/Module/Group.php:110
+msgid "Unable to add the contact to the group."
+msgstr ""
+
+#: src/Module/Group.php:112
+msgid "Contact successfully added to group."
+msgstr ""
+
+#: src/Module/Group.php:116
+msgid "Unable to remove the contact from the group."
+msgstr ""
+
+#: src/Module/Group.php:118
+msgid "Contact successfully removed from group."
+msgstr ""
+
+#: src/Module/Group.php:121
+msgid "Unknown group command."
+msgstr ""
+
+#: src/Module/Group.php:124
+msgid "Bad request."
+msgstr ""
+
+#: src/Module/Group.php:163
+msgid "Save Group"
+msgstr "Sauvegarder le groupe"
+
+#: src/Module/Group.php:164
+msgid "Filter"
+msgstr "Filtre"
+
+#: src/Module/Group.php:170
+msgid "Create a group of contacts/friends."
+msgstr "Créez un groupe de contacts/amis."
+
+#: src/Module/Group.php:212
+msgid "Group removed."
+msgstr "Groupe enlevé."
+
+#: src/Module/Group.php:214
+msgid "Unable to remove group."
+msgstr "Impossible d'enlever le groupe."
+
+#: src/Module/Group.php:265
+msgid "Delete Group"
+msgstr "Supprimer le groupe"
+
+#: src/Module/Group.php:275
+msgid "Edit Group Name"
+msgstr "Éditer le nom du groupe"
+
+#: src/Module/Group.php:285
+msgid "Members"
+msgstr "Membres"
+
+#: src/Module/Group.php:301
+msgid "Remove contact from group"
+msgstr "Retirer ce contact du groupe"
+
+#: src/Module/Group.php:335
+msgid "Add contact to group"
+msgstr "Ajouter ce contact au groupe"
+
+#: src/Module/Help.php:43
+msgid "Help:"
+msgstr "Aide :"
+
+#: src/Module/Home.php:42
+#, php-format
+msgid "Welcome to %s"
+msgstr "Bienvenue sur %s"
+
+#: src/Module/Install.php:158
msgid "Friendica Communications Server - Setup"
msgstr ""
-#: src/Module/Install.php:129
+#: src/Module/Install.php:169
msgid "System check"
msgstr "Vérifications système"
-#: src/Module/Install.php:134
+#: src/Module/Install.php:174
msgid "Check again"
msgstr "Vérifier à nouveau"
-#: src/Module/Install.php:151
+#: src/Module/Install.php:189
+msgid "Base settings"
+msgstr ""
+
+#: src/Module/Install.php:196
+msgid "Host name"
+msgstr "Nom de la machine hôte"
+
+#: src/Module/Install.php:198
+msgid ""
+"Overwrite this field in case the determinated hostname isn't right, "
+"otherweise leave it as is."
+msgstr ""
+
+#: src/Module/Install.php:201
+msgid "Base path to installation"
+msgstr "Chemin de base de l'installation"
+
+#: src/Module/Install.php:203
+msgid ""
+"If the system cannot detect the correct path to your installation, enter the"
+" correct path here. This setting should only be set if you are using a "
+"restricted system and symbolic links to your webroot."
+msgstr "Si le système ne peut pas détecter le chemin de l'installation, entrez le bon chemin ici. Ce paramètre doit être utilisé uniquement si vous avez des accès restreints à votre système et que vous n'avez qu'un lien symbolique vers le répertoire web."
+
+#: src/Module/Install.php:206
+msgid "Sub path of the URL"
+msgstr ""
+
+#: src/Module/Install.php:208
+msgid ""
+"Overwrite this field in case the sub path determination isn't right, "
+"otherwise leave it as is. Leaving this field blank means the installation is"
+" at the base URL without sub path."
+msgstr ""
+
+#: src/Module/Install.php:219
msgid "Database connection"
msgstr "Connexion à la base de données"
-#: src/Module/Install.php:152
+#: src/Module/Install.php:220
msgid ""
"In order to install Friendica we need to know how to connect to your "
"database."
msgstr "Pour installer Friendica, nous avons besoin de savoir comment contacter votre base de données."
-#: src/Module/Install.php:153
+#: src/Module/Install.php:221
msgid ""
"Please contact your hosting provider or site administrator if you have "
"questions about these settings."
msgstr "Merci de vous tourner vers votre hébergeur et/ou administrateur pour toute question concernant ces réglages."
-#: src/Module/Install.php:154
+#: src/Module/Install.php:222
msgid ""
"The database you specify below should already exist. If it does not, please "
"create it before continuing."
msgstr "La base de données que vous spécifierez doit exister. Si ce n'est pas encore le cas, merci de la créer avant de continuer."
-#: src/Module/Install.php:157
+#: src/Module/Install.php:229
msgid "Database Server Name"
msgstr "Serveur de base de données"
-#: src/Module/Install.php:162
+#: src/Module/Install.php:234
msgid "Database Login Name"
msgstr "Nom d'utilisateur de la base"
-#: src/Module/Install.php:168
+#: src/Module/Install.php:240
msgid "Database Login Password"
msgstr "Mot de passe de la base"
-#: src/Module/Install.php:170
+#: src/Module/Install.php:242
msgid "For security reasons the password must not be empty"
msgstr "Pour des raisons de sécurité, le mot de passe ne peut pas être vide."
-#: src/Module/Install.php:173
+#: src/Module/Install.php:245
msgid "Database Name"
msgstr "Nom de la base"
-#: src/Module/Install.php:178 src/Module/Install.php:214
+#: src/Module/Install.php:249 src/Module/Install.php:278
+msgid "Please select a default timezone for your website"
+msgstr "Sélectionner un fuseau horaire par défaut pour votre site"
+
+#: src/Module/Install.php:263
+msgid "Site settings"
+msgstr "Réglages du site"
+
+#: src/Module/Install.php:273
msgid "Site administrator email address"
msgstr "Adresse électronique de l'administrateur du site"
-#: src/Module/Install.php:180 src/Module/Install.php:214
+#: src/Module/Install.php:275
msgid ""
"Your account email address must match this in order to use the web admin "
"panel."
msgstr "Votre adresse électronique doit correspondre à celle-ci pour pouvoir utiliser l'interface d'administration."
-#: src/Module/Install.php:184 src/Module/Install.php:215
-msgid "Please select a default timezone for your website"
-msgstr "Sélectionner un fuseau horaire par défaut pour votre site"
-
-#: src/Module/Install.php:208
-msgid "Site settings"
-msgstr "Réglages du site"
-
-#: src/Module/Install.php:217
+#: src/Module/Install.php:282
msgid "System Language:"
msgstr "Langue système :"
-#: src/Module/Install.php:219
+#: src/Module/Install.php:284
msgid ""
"Set the default language for your Friendica installation interface and to "
"send emails."
msgstr "Définit la langue par défaut pour l'interface de votre instance Friendica et les mails envoyés."
-#: src/Module/Install.php:231
+#: src/Module/Install.php:296
msgid "Your Friendica site database has been installed."
msgstr "La base de données de votre site Friendica a bien été installée."
-#: src/Module/Install.php:239
+#: src/Module/Install.php:304
msgid "Installation finished"
msgstr ""
-#: src/Module/Install.php:261
+#: src/Module/Install.php:326
msgid "Use an application on a mobile device to get two-factor authentication " +"codes when prompted on login.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:90 +msgid "Authenticator app" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:91 +msgid "Configured" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:91 +msgid "Not Configured" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:92 +msgid "You haven't finished configuring your authenticator app.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:93 +msgid "Your authenticator app is correctly configured.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:95 +msgid "Recovery codes" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:96 +msgid "Remaining valid codes" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:98 +msgid "" +"These one-use codes can replace an authenticator app code in case you " +"have lost access to it.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:101 +msgid "Current password:" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:101 +msgid "" +"You need to provide your current password to change two-factor " +"authentication settings." +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:102 +msgid "Enable two-factor authentication" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:103 +msgid "Disable two-factor authentication" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:104 +msgid "Show recovery codes" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:105 +msgid "Finish app configuration" +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:34 +#: src/Module/Settings/TwoFactor/Verify.php:41 +msgid "Please enter your password to access this page." +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:50 +msgid "New recovery codes successfully generated." +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:76 +msgid "Two-factor recovery codes" +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:78 +msgid "" +"Recovery codes can be used to access your account in the event you lose " +"access to your device and cannot receive two-factor authentication " +"codes.
Put these in a safe spot! If you lose your " +"device and don’t have the recovery codes you will lose access to your " +"account.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:80 +msgid "" +"When you generate new recovery codes, you must copy the new codes. Your old " +"codes won’t work anymore." +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:81 +msgid "Generate new recovery codes" +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:83 +msgid "Next: Verification" +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:63 +msgid "Two-factor authentication successfully activated." +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:67 +#: src/Module/TwoFactor/Recovery.php:46 src/Module/TwoFactor/Verify.php:41 +msgid "Invalid code, please retry." +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:96 +#, php-format +msgid "" +"Or you can submit the authentication settings manually:
\n" +"Please scan this QR Code with your authenticator app and submit the " +"provided code.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:120 +#, php-format +msgid "" +"Or you can open the following URL in your mobile devicde:
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:126 +#: src/Module/TwoFactor/Verify.php:63 +msgid "Please enter a code from your authentication app" +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:127 +msgid "Verify code and enable two-factor authentication" +msgstr "" + +#: src/Module/Special/HTTPException.php:32 +msgid "Bad Request" +msgstr "Requête erronée" + +#: src/Module/Special/HTTPException.php:33 +msgid "Unauthorized" +msgstr "" + +#: src/Module/Special/HTTPException.php:34 +msgid "Forbidden" +msgstr "" + +#: src/Module/Special/HTTPException.php:35 +msgid "Not Found" +msgstr "Non trouvé" + +#: src/Module/Special/HTTPException.php:36 +msgid "Internal Server Error" +msgstr "" + +#: src/Module/Special/HTTPException.php:37 +msgid "Service Unavailable" +msgstr "" + +#: src/Module/Special/HTTPException.php:44 +msgid "" +"The server cannot or will not process the request due to an apparent client " +"error." +msgstr "" + +#: src/Module/Special/HTTPException.php:45 +msgid "" +"Authentication is required and has failed or has not yet been provided." +msgstr "" + +#: src/Module/Special/HTTPException.php:46 +msgid "" +"The request was valid, but the server is refusing action. The user might not" +" have the necessary permissions for a resource, or may need an account." +msgstr "" + +#: src/Module/Special/HTTPException.php:47 +msgid "" +"The requested resource could not be found but may be available in the " +"future." +msgstr "" + +#: src/Module/Special/HTTPException.php:48 +msgid "" +"An unexpected condition was encountered and no more specific message is " +"suitable." +msgstr "" + +#: src/Module/Special/HTTPException.php:49 +msgid "" +"The server is currently unavailable (because it is overloaded or down for " +"maintenance). Please try again later." +msgstr "" + +#: src/Module/Special/HTTPException.php:55 +msgid "Go back" +msgstr "" + #: src/Module/Tos.php:35 src/Module/Tos.php:77 msgid "" "At the time of registration, and for providing communications between the " @@ -9482,165 +9865,207 @@ msgstr "" msgid "Privacy Statement" msgstr "" -#: src/Object/Post.php:136 +#: src/Module/TwoFactor/Recovery.php:41 +#, php-format +msgid "Remaining recovery codes: %d" +msgstr "" + +#: src/Module/TwoFactor/Recovery.php:65 +msgid "Two-factor recovery" +msgstr "" + +#: src/Module/TwoFactor/Recovery.php:66 +msgid "" +"You can enter one of your one-time recovery codes in case you lost access" +" to your mobile device.
" +msgstr "" + +#: src/Module/TwoFactor/Recovery.php:67 src/Module/TwoFactor/Verify.php:62 +#, php-format +msgid "Don’t have your phone? Enter a two-factor recovery code" +msgstr "" + +#: src/Module/TwoFactor/Recovery.php:68 +msgid "Please enter a recovery code" +msgstr "" + +#: src/Module/TwoFactor/Recovery.php:69 +msgid "Submit recovery code and complete login" +msgstr "" + +#: src/Module/TwoFactor/Verify.php:61 +msgid "" +"Open the two-factor authentication app on your device to get an " +"authentication code and verify your identity.
" +msgstr "" + +#: src/Module/TwoFactor/Verify.php:64 +msgid "Verify code and complete login" +msgstr "" + +#: src/Object/Post.php:137 msgid "This entry was edited" msgstr "Cette entrée a été éditée" -#: src/Object/Post.php:198 +#: src/Object/Post.php:157 +msgid "Private Message" +msgstr "Message privé" + +#: src/Object/Post.php:199 msgid "Delete locally" msgstr "" -#: src/Object/Post.php:201 +#: src/Object/Post.php:202 msgid "Delete globally" msgstr "" -#: src/Object/Post.php:201 +#: src/Object/Post.php:202 msgid "Remove locally" msgstr "" -#: src/Object/Post.php:215 +#: src/Object/Post.php:216 msgid "save to folder" msgstr "sauver vers dossier" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I will attend" msgstr "Je vais participer" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I will not attend" msgstr "Je ne vais pas participer" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I might attend" msgstr "Je vais peut-être participer" -#: src/Object/Post.php:278 +#: src/Object/Post.php:279 msgid "ignore thread" msgstr "ignorer le fil" -#: src/Object/Post.php:279 +#: src/Object/Post.php:280 msgid "unignore thread" msgstr "Ne plus ignorer le fil" -#: src/Object/Post.php:280 +#: src/Object/Post.php:281 msgid "toggle ignore status" msgstr "Ignorer le statut" -#: src/Object/Post.php:291 +#: src/Object/Post.php:292 msgid "add star" msgstr "mettre en avant" -#: src/Object/Post.php:292 +#: src/Object/Post.php:293 msgid "remove star" msgstr "ne plus mettre en avant" -#: src/Object/Post.php:293 +#: src/Object/Post.php:294 msgid "toggle star status" msgstr "mettre en avant" -#: src/Object/Post.php:296 +#: src/Object/Post.php:297 msgid "starred" msgstr "mis en avant" -#: src/Object/Post.php:300 +#: src/Object/Post.php:301 msgid "add tag" msgstr "ajouter une étiquette" -#: src/Object/Post.php:311 +#: src/Object/Post.php:312 msgid "like" msgstr "aime" -#: src/Object/Post.php:312 +#: src/Object/Post.php:313 msgid "dislike" msgstr "n'aime pas" -#: src/Object/Post.php:315 +#: src/Object/Post.php:316 msgid "Share this" msgstr "Partager" -#: src/Object/Post.php:315 +#: src/Object/Post.php:316 msgid "share" msgstr "partager" -#: src/Object/Post.php:382 +#: src/Object/Post.php:384 msgid "to" msgstr "à" -#: src/Object/Post.php:383 +#: src/Object/Post.php:385 msgid "via" msgstr "via" -#: src/Object/Post.php:384 +#: src/Object/Post.php:386 msgid "Wall-to-Wall" msgstr "Inter-mur" -#: src/Object/Post.php:385 +#: src/Object/Post.php:387 msgid "via Wall-To-Wall:" msgstr "en Inter-mur :" -#: src/Object/Post.php:418 +#: src/Object/Post.php:420 #, php-format msgid "Reply to %s" msgstr "" -#: src/Object/Post.php:433 +#: src/Object/Post.php:435 msgid "Notifier task is pending" msgstr "" -#: src/Object/Post.php:434 +#: src/Object/Post.php:436 msgid "Delivery to remote servers is pending" msgstr "" -#: src/Object/Post.php:435 +#: src/Object/Post.php:437 msgid "Delivery to remote servers is underway" msgstr "" -#: src/Object/Post.php:436 +#: src/Object/Post.php:438 msgid "Delivery to remote servers is mostly done" msgstr "" -#: src/Object/Post.php:437 +#: src/Object/Post.php:439 msgid "Delivery to remote servers is done" msgstr "" -#: src/Object/Post.php:457 +#: src/Object/Post.php:459 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d commentaire" msgstr[1] "%d commentaires" -#: src/Object/Post.php:458 +#: src/Object/Post.php:460 msgid "Show more" msgstr "" -#: src/Object/Post.php:459 +#: src/Object/Post.php:461 msgid "Show fewer" msgstr "" -#: src/Protocol/Diaspora.php:2496 +#: src/Protocol/Diaspora.php:2438 msgid "Sharing notification from Diaspora network" msgstr "Notification de partage du réseau Diaspora" -#: src/Protocol/Diaspora.php:3613 +#: src/Protocol/Diaspora.php:3598 msgid "Attachments:" msgstr "Pièces jointes : " -#: src/Protocol/OStatus.php:1866 +#: src/Protocol/OStatus.php:1863 #, php-format msgid "%s is now following %s." msgstr "%s suit désormais %s." -#: src/Protocol/OStatus.php:1867 +#: src/Protocol/OStatus.php:1864 msgid "following" msgstr "following" -#: src/Protocol/OStatus.php:1870 +#: src/Protocol/OStatus.php:1867 #, php-format msgid "%s stopped following %s." msgstr "%s ne suit plus %s." -#: src/Protocol/OStatus.php:1871 +#: src/Protocol/OStatus.php:1868 msgid "stopped following" msgstr "retiré de la liste de suivi" @@ -9710,16 +10135,16 @@ msgstr "" msgid "%1$d %2$s ago" msgstr "il y a %1$d %2$s " -#: src/Worker/Delivery.php:453 +#: src/Worker/Delivery.php:450 msgid "(no subject)" msgstr "(sans titre)" -#: update.php:217 +#: update.php:218 #, php-format msgid "%s: Updating author-id and owner-id in item and thread table. " msgstr "" -#: update.php:272 +#: update.php:273 #, php-format msgid "%s: Updating post-type." msgstr "" @@ -9748,63 +10173,73 @@ msgstr "comix" msgid "slackr" msgstr "slackr" -#: view/theme/duepuntozero/config.php:75 +#: view/theme/duepuntozero/config.php:74 msgid "Variations" msgstr "Variations" -#: view/theme/frio/config.php:103 +#: view/theme/frio/config.php:105 msgid "Custom" msgstr "Personnalisé" -#: view/theme/frio/config.php:115 +#: view/theme/frio/config.php:117 msgid "Note" msgstr "Remarque" -#: view/theme/frio/config.php:115 +#: view/theme/frio/config.php:117 msgid "Check image permissions if all users are allowed to see the image" msgstr "Vérifier que tous les utilisateurs du site sont autorisés à voir l'image." -#: view/theme/frio/config.php:122 +#: view/theme/frio/config.php:123 msgid "Select color scheme" msgstr "Choisir le schéma de couleurs" -#: view/theme/frio/config.php:123 +#: view/theme/frio/config.php:124 +msgid "Copy or paste schemestring" +msgstr "" + +#: view/theme/frio/config.php:124 +msgid "" +"You can copy this string to share your theme with others. Pasting here " +"applies the schemestring" +msgstr "" + +#: view/theme/frio/config.php:125 msgid "Navigation bar background color" msgstr "Couleur d'arrière-plan de la barre de navigation" -#: view/theme/frio/config.php:124 +#: view/theme/frio/config.php:126 msgid "Navigation bar icon color " msgstr "Couleur des icônes de la barre de navigation" -#: view/theme/frio/config.php:125 +#: view/theme/frio/config.php:127 msgid "Link color" msgstr "Couleur des liens" -#: view/theme/frio/config.php:126 +#: view/theme/frio/config.php:128 msgid "Set the background color" msgstr "Couleur d'arrière-plan" -#: view/theme/frio/config.php:127 +#: view/theme/frio/config.php:129 msgid "Content background opacity" msgstr "Opacité du contenu d'arrière-plan" -#: view/theme/frio/config.php:128 +#: view/theme/frio/config.php:130 msgid "Set the background image" msgstr "Image d'arrière-plan" -#: view/theme/frio/config.php:129 +#: view/theme/frio/config.php:131 msgid "Background image style" msgstr "Style de l'image de fond" -#: view/theme/frio/config.php:134 +#: view/theme/frio/config.php:136 msgid "Login page background image" msgstr "Image de fond de la page de login" -#: view/theme/frio/config.php:138 +#: view/theme/frio/config.php:140 msgid "Login page background color" msgstr "Couleur d'arrière-plan de la page de login" -#: view/theme/frio/config.php:138 +#: view/theme/frio/config.php:140 msgid "Leave background image and color empty for theme defaults" msgstr "Laisser l'image et la couleur de fond vides pour les paramètres par défaut du thème" @@ -9852,27 +10287,27 @@ msgstr "Invité" msgid "Visitor" msgstr "Visiteur" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Alignment" msgstr "Alignement" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Left" msgstr "Gauche" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Center" msgstr "Centre" -#: view/theme/quattro/config.php:78 +#: view/theme/quattro/config.php:77 msgid "Color scheme" msgstr "Palette de couleurs" -#: view/theme/quattro/config.php:79 +#: view/theme/quattro/config.php:78 msgid "Posts font size" msgstr "Taille de texte des publications" -#: view/theme/quattro/config.php:80 +#: view/theme/quattro/config.php:79 msgid "Textareas font size" msgstr "Taille de police des zones de texte" @@ -9880,31 +10315,31 @@ msgstr "Taille de police des zones de texte" msgid "Comma separated list of helper forums" msgstr "Liste de forums d'aide, séparés par des virgules" -#: view/theme/vier/config.php:123 +#: view/theme/vier/config.php:122 msgid "Set style" msgstr "Définir le style" -#: view/theme/vier/config.php:124 +#: view/theme/vier/config.php:123 msgid "Community Pages" msgstr "Pages de Communauté" -#: view/theme/vier/config.php:125 view/theme/vier/theme.php:151 +#: view/theme/vier/config.php:124 view/theme/vier/theme.php:151 msgid "Community Profiles" msgstr "Profils communautaires" -#: view/theme/vier/config.php:126 +#: view/theme/vier/config.php:125 msgid "Help or @NewHere ?" msgstr "Aide ou @NewHere?" -#: view/theme/vier/config.php:127 view/theme/vier/theme.php:373 +#: view/theme/vier/config.php:126 view/theme/vier/theme.php:373 msgid "Connect Services" msgstr "Connecter des services" -#: view/theme/vier/config.php:128 +#: view/theme/vier/config.php:127 msgid "Find Friends" msgstr "Trouver des amis" -#: view/theme/vier/config.php:129 view/theme/vier/theme.php:181 +#: view/theme/vier/config.php:128 view/theme/vier/theme.php:181 msgid "Last users" msgstr "Derniers utilisateurs" diff --git a/view/lang/fr/strings.php b/view/lang/fr/strings.php index b4efeaf13..128fdd04b 100644 --- a/view/lang/fr/strings.php +++ b/view/lang/fr/strings.php @@ -37,6 +37,7 @@ $a->strings["Attending"] = [ ]; $a->strings["Not attending"] = "Ne participe pas"; $a->strings["Might attend"] = "Participera peut-être"; +$a->strings["Reshares"] = "Partages"; $a->strings["Select"] = "Sélectionner"; $a->strings["Delete"] = "Supprimer"; $a->strings["View %s's profile @ %s"] = "Voir le profil de %s @ %s"; @@ -54,6 +55,8 @@ $a->strings["View Photos"] = "Voir les photos"; $a->strings["Network Posts"] = "Publications du réseau"; $a->strings["View Contact"] = "Voir Contact"; $a->strings["Send PM"] = "Message privé"; +$a->strings["Block"] = "Bloquer"; +$a->strings["Ignore"] = "Ignorer"; $a->strings["Poke"] = "Sollicitations (pokes)"; $a->strings["Connect/Follow"] = "Se connecter/Suivre"; $a->strings["%s likes this."] = "%s aime ça."; @@ -61,6 +64,7 @@ $a->strings["%s doesn't like this."] = "%s n'aime pas ça."; $a->strings["%s attends."] = "%s participe"; $a->strings["%s doesn't attend."] = "%s ne participe pas"; $a->strings["%s attends maybe."] = "%s participe peut-être"; +$a->strings["%s reshared this."] = "%sa partagé ceci."; $a->strings["and"] = "et"; $a->strings["and %d other people"] = "et %dautres personnes"; $a->strings["%2\$d people like this"] = "%2\$d personnes aiment ça"; @@ -73,6 +77,7 @@ $a->strings["%2\$d people don't attend"] = "%2\ $a->strings["%s don't attend."] = "%s ne participent pas."; $a->strings["%2\$d people attend maybe"] = "%2\$d personnes vont peut-être participer"; $a->strings["%s attend maybe."] = "%sparticipent peut-être"; +$a->strings["%2\$d people reshared this"] = "%2\$dpersonnesont partagé ceci"; $a->strings["Visible to everybody"] = "Visible par tout le monde"; $a->strings["Please enter a image/video/audio/webpage URL:"] = "Veuillez entrer une URL d'image/vidéo/page web."; $a->strings["Tag term:"] = "Étiquette :"; @@ -195,474 +200,12 @@ $a->strings["Yes"] = "Oui"; $a->strings["Permission denied."] = "Permission refusée."; $a->strings["Archives"] = "Archives"; $a->strings["show more"] = "montrer plus"; -$a->strings["Theme settings updated."] = "Réglages du thème sauvés."; -$a->strings["Information"] = "Information"; -$a->strings["Overview"] = "Synthèse"; -$a->strings["Federation Statistics"] = "Statistiques Federation"; -$a->strings["Configuration"] = "Configuration"; -$a->strings["Site"] = "Site"; -$a->strings["Users"] = "Utilisateurs"; -$a->strings["Addons"] = "Extensions"; -$a->strings["Themes"] = "Thèmes"; -$a->strings["Additional features"] = "Fonctions supplémentaires"; -$a->strings["Terms of Service"] = "Conditions de service"; -$a->strings["Database"] = "Base de données"; -$a->strings["DB updates"] = "Mise-à-jour de la base"; -$a->strings["Inspect Queue"] = "Inspecter la file d'attente"; -$a->strings["Inspect Deferred Workers"] = "Tâches de fond reportées"; -$a->strings["Inspect worker Queue"] = "Tâches de fond en attente"; -$a->strings["Tools"] = "Outils"; -$a->strings["Contact Blocklist"] = "Liste de contacts bloqués"; -$a->strings["Server Blocklist"] = "Serveurs bloqués"; -$a->strings["Delete Item"] = "Supprimer un élément"; -$a->strings["Logs"] = "Journaux"; -$a->strings["View Logs"] = "Voir les logs"; -$a->strings["Diagnostics"] = "Diagnostics"; -$a->strings["PHP Info"] = "PHP Info"; -$a->strings["probe address"] = "Tester une adresse"; -$a->strings["check webfinger"] = "vérification de webfinger"; -$a->strings["Admin"] = "Admin"; -$a->strings["Addon Features"] = "Fonctionnalités des addons"; -$a->strings["User registrations waiting for confirmation"] = "Inscriptions en attente de confirmation"; -$a->strings["Administration"] = "Administration"; -$a->strings["Display Terms of Service"] = "Afficher les Conditions d'Utilisation"; -$a->strings["Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page."] = "Active la page de Conditions d'Utilisation. Un lien vers cette page est ajouté dans le formulaire d'inscription et la page A Propos."; -$a->strings["Display Privacy Statement"] = "Afficher la Politique de Confidentialité"; -$a->strings["Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR."] = "Affiche les informations légales nécessaires pour publier un site Friendica en accord avec le RGPD européen par exemple."; -$a->strings["Privacy Statement Preview"] = "Aperçu de la Politique de Confidentialité"; -$a->strings["The Terms of Service"] = "Conditions d'Utilisation"; -$a->strings["Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below."] = "Saisissez les Conditions d'Utilisations de votre site. Les BBCodes sont disponibles, les titres commencent à [h2]."; -$a->strings["Save Settings"] = "Sauvegarder les paramètres"; -$a->strings["Blocked domain"] = "Domaine bloqué"; -$a->strings["The blocked domain"] = "Domaine bloqué"; -$a->strings["Reason for the block"] = "Raison du blocage."; -$a->strings["The reason why you blocked this domain."] = "Raison pour laquelle vous souhaitez bloquer ce domaine."; -$a->strings["Delete domain"] = "Supprimer le domaine."; -$a->strings["Check to delete this entry from the blocklist"] = "Cochez la case pour retirer cette entrée de la liste noire"; -$a->strings["This page can be used to define a black list of servers from the federated network that are not allowed to interact with your node. For all entered domains you should also give a reason why you have blocked the remote server."] = "Cette page permet de créer une liste noire des serveurs de la fédération qui ne sont pas autorisés à interagir avec votre serveur. Pour chaque serveur bloqué, vous devez fournir la raison du blocage."; -$a->strings["The list of blocked servers will be made publically available on the /friendica page so that your users and people investigating communication problems can find the reason easily."] = "La liste des serveurs bloqués sera publiée sur la page /friendica pour que les utilisateurs rencontrant des problèmes de communication puissent en comprendre la raison."; -$a->strings["Add new entry to block list"] = "Ajouter une nouvelle entrée à la liste noire"; -$a->strings["Server Domain"] = "Adresse du serveur"; -$a->strings["The domain of the new server to add to the block list. Do not include the protocol."] = "Adresse du serveur à ajouter à la liste noire. Ne pas mettre le protocole."; -$a->strings["Block reason"] = "Raison du blocage."; -$a->strings["Add Entry"] = "Ajouter"; -$a->strings["Save changes to the blocklist"] = "Sauvegarder la liste noire"; -$a->strings["Current Entries in the Blocklist"] = "Entrées de la liste noire"; -$a->strings["Delete entry from blocklist"] = "Supprimer l'entrée de la liste noire"; -$a->strings["Delete entry from blocklist?"] = "Supprimer l'entrée de la liste noire ?"; -$a->strings["Server added to blocklist."] = "Serveur ajouté à la liste noire."; -$a->strings["Site blocklist updated."] = "Liste noire mise à jour."; -$a->strings["The contact has been blocked from the node"] = "Le profile distant a été bloqué"; -$a->strings["Could not find any contact entry for this URL (%s)"] = "Aucun profil distant n'a été trouvé à cette URL (%s)"; -$a->strings["%s contact unblocked"] = [ - 0 => "%s contact débloqué", - 1 => "%s profiles distants débloqués", -]; -$a->strings["Remote Contact Blocklist"] = "Liste des profiles distants bloqués"; -$a->strings["This page allows you to prevent any message from a remote contact to reach your node."] = "Cette page vous permet de refuser toutes les publications d'un profile distant sur votre site."; -$a->strings["Block Remote Contact"] = "Bloquer le profile distant"; -$a->strings["select all"] = "tout sélectionner"; -$a->strings["select none"] = "Sélectionner tous"; -$a->strings["Block"] = "Bloquer"; -$a->strings["Unblock"] = "Débloquer"; -$a->strings["No remote contact is blocked from this node."] = "Aucun profil distant n'est bloqué"; -$a->strings["Blocked Remote Contacts"] = "Profils distants bloqués"; -$a->strings["Block New Remote Contact"] = "Bloquer un nouveau profil distant"; -$a->strings["Photo"] = "Photo"; -$a->strings["Name"] = "Nom"; -$a->strings["Address"] = "Adresse"; -$a->strings["Profile URL"] = "URL du Profil"; -$a->strings["%s total blocked contact"] = [ - 0 => "%s profil distant bloqué", - 1 => "%s profils distans bloqués", -]; -$a->strings["URL of the remote contact to block."] = "URL du profil distant à bloquer."; -$a->strings["Delete this Item"] = "Supprimer l'élément"; -$a->strings["On this page you can delete an item from your node. If the item is a top level posting, the entire thread will be deleted."] = "Sur cette page, vous pouvez supprimer un élément de votre noeud. Si cet élément est le premier post d'un fil de discussion, le fil de discussion entier sera supprimé."; -$a->strings["You need to know the GUID of the item. You can find it e.g. by looking at the display URL. The last part of http://example.com/display/123456 is the GUID, here 123456."] = "Vous devez connaître le GUID de l'élément. Vous pouvez le trouver en sélectionnant l'élément puis en lisant l'URL. La dernière partie de l'URL est le GUID. Exemple: http://example.com/display/123456 a pour GUID: 123456."; -$a->strings["GUID"] = "GUID"; -$a->strings["The GUID of the item you want to delete."] = "GUID de l'élément à supprimer."; -$a->strings["Item marked for deletion."] = "L'élément va être supprimé."; -$a->strings["unknown"] = "inconnu"; -$a->strings["This page offers you some numbers to the known part of the federated social network your Friendica node is part of. These numbers are not complete but only reflect the part of the network your node is aware of."] = "Cette page montre quelques statistiques de la partie connue du réseau social fédéré dont votre instance Friendica fait partie. Ces chiffres sont partiels et ne reflètent que la portion du réseau dont votre instance a connaissance."; -$a->strings["The Auto Discovered Contact Directory feature is not enabled, it will improve the data displayed here."] = "En activant la fonctionnalité Répertoire de Contacts Découverts Automatiquement, cela améliorera la qualité des chiffres présentés ici."; -$a->strings["Currently this node is aware of %d nodes with %d registered users from the following platforms:"] = "Ce site a connaissance de %d sites distants totalisant %d utilisateurs répartis entre les plate-formes suivantes :"; -$a->strings["ID"] = "ID"; -$a->strings["Recipient Name"] = "Nom du destinataire"; -$a->strings["Recipient Profile"] = "Profil du destinataire"; -$a->strings["Network"] = "Réseau"; -$a->strings["Created"] = "Créé"; -$a->strings["Last Tried"] = "Dernier essai"; -$a->strings["This page lists the content of the queue for outgoing postings. These are postings the initial delivery failed for. They will be resend later and eventually deleted if the delivery fails permanently."] = "Cette page présente le contenu de la file d'attente pour les publications sortantes. Ce sont des messages dont la première livraison a échoué. Ils seront réenvoyés plus tard et éventuellement supprimés si l'envoi échoue de façon permanente."; -$a->strings["Inspect Deferred Worker Queue"] = "Détail des tâches de fond reportées"; -$a->strings["This page lists the deferred worker jobs. This are jobs that couldn't be executed at the first time."] = "Cette page détaille les tâches de fond reportées après avoir échoué une première fois."; -$a->strings["Inspect Worker Queue"] = "Détail des tâches de fond en attente"; -$a->strings["This page lists the currently queued worker jobs. These jobs are handled by the worker cronjob you've set up during install."] = "Cette page détaille les tâches de fond en attente. Elles seront traitées lors de la prochaine exécution de la tâche planifiée que vous avez définie lors de l'installation."; -$a->strings["Job Parameters"] = "Paramètres de la tâche"; -$a->strings["Priority"] = "Priorité"; -$a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion.php bin/console.php dbstructure update
depuis votre répertoire Friendica et noter les erreurs potentielles.";
-$a->strings["The worker was never executed. Please check your database structure!"] = "Le 'worker' n'a pas encore été exécuté. Vérifiez la structure de votre base de données.";
-$a->strings["The last worker execution was on %s UTC. This is older than one hour. Please check your crontab settings."] = "La dernière exécution du 'worker' s'est déroulée à %s, c'est-à-dire il y a plus d'une heure. Vérifiez les réglages de crontab.";
-$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from .htconfig.php
. See the Config help page for help with the transition."] = "La configuration de votre site Friendica est maintenant stockée dans le fichier config/local.config.php
, veuillez copier le fichier config/local-sample.config.php
et transférer votre configuration depuis le fichier .htconfig.php
. Veuillez consulter la page d'aide de configuration (en anglais) pour vous aider dans la transition.";
-$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."] = "La configuration de votre site Friendica est maintenant stockée dans le fichier config/local.config.php
, veuillez copier le fichier config/local-sample.config.php
et transférer votre configuration depuis le fichier config/local.ini.php
. Veuillez consulter la page d'aide de configuration (en anglais) pour vous aider dans la transition.";
-$a->strings["%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."] = "%s n'est pas accessible sur votre site. C'est un problème de configuration sévère qui empêche toute communication avec les serveurs distants. Veuillez consulter la page d'aide à l'installation (en anglais) pour plus d'information.";
-$a->strings["Normal Account"] = "Compte normal";
-$a->strings["Automatic Follower Account"] = "Profile Resuivant";
-$a->strings["Public Forum Account"] = "Forum public";
-$a->strings["Automatic Friend Account"] = "Compte auto-amical";
-$a->strings["Blog Account"] = "Compte de blog";
-$a->strings["Private Forum Account"] = "Forum privé";
-$a->strings["Message queues"] = "Files d'attente des messages";
-$a->strings["Server Settings"] = "Paramètres du site";
-$a->strings["Summary"] = "Résumé";
-$a->strings["Registered users"] = "Utilisateurs inscrits";
-$a->strings["Pending registrations"] = "Inscriptions en attente";
-$a->strings["Version"] = "Version";
-$a->strings["Active addons"] = "Add-ons actifs";
-$a->strings["Can not parse base url. Must have at least /proc/meminfo
. La valeur par défaut est 0 (désactivé).";
-$a->strings["Maximum table size for optimization"] = "Limite de taille de table pour l'optimisation";
-$a->strings["Maximum table size (in MB) for the automatic optimization. Enter -1 to disable it."] = "Limite de taille de table (en Mo) pour l'optimisation automatique. -1 pour désactiver cette limite.";
-$a->strings["Minimum level of fragmentation"] = "Seuil de fragmentation";
-$a->strings["Minimum fragmenation level to start the automatic optimization - default value is 30%."] = "Seuil de fragmentation pour que l'optimisation automatique se déclenche - défaut 30%.";
-$a->strings["Periodical check of global contacts"] = "Vérification périodique des contacts globaux";
-$a->strings["If enabled, the global contacts are checked periodically for missing or outdated data and the vitality of the contacts and servers."] = "Si activé, les données manquantes et obsolètes et la vitalité des contacts et des serveurs seront vérifiées périodiquement dans les contacts globaux.";
-$a->strings["Days between requery"] = "Nombre de jours entre les requêtes";
-$a->strings["Number of days after which a server is requeried for his contacts."] = "Nombre de jours avant qu'une requête de contacts soient envoyée à nouveau à un serveur.";
-$a->strings["Discover contacts from other servers"] = "Découvrir des contacts des autres serveurs";
-$a->strings["Periodically query other servers for contacts. You can choose between 'users': the users on the remote system, 'Global Contacts': active contacts that are known on the system. The fallback is meant for Redmatrix servers and older friendica servers, where global contacts weren't available. The fallback increases the server load, so the recommended setting is 'Users, Global Contacts'."] = "Demande régulièrement les serveurs distants connus une liste de profils distants. \"Utilisateurs\" concerne les utilisateurs locaux du serveur distant, \"Contacts Globaux\" concerne tous les profils dont le serveur distant a connaissance. \"Alternative\" est prévu pour les serveurs RedMatrix et les versions obsolètes de Friendica. Ce choix augmente significativement la charge serveur, donc le choix recommendé est \"Utilisateurs, Contacts Globaux\".";
-$a->strings["Timeframe for fetching global contacts"] = "Fréquence de récupération des contacts globaux";
-$a->strings["When the discovery is activated, this value defines the timeframe for the activity of the global contacts that are fetched from other servers."] = "Quand la découverte de contacts est activée, cette valeur détermine la fréquence de récupération des données des contacts globaux présents sur d'autres serveurs.";
-$a->strings["Search the local directory"] = "Chercher dans le répertoire local";
-$a->strings["Search the local directory instead of the global directory. When searching locally, every search will be executed on the global directory in the background. This improves the search results when the search is repeated."] = "Cherche dans le répertoire local au lieu du répertoire local. Quand une recherche locale est effectuée, la même recherche est effectuée dans le répertoire global en tâche de fond. Cela améliore les résultats de la recherche si elle est réitérée.";
-$a->strings["Publish server information"] = "Publier les informations du serveur";
-$a->strings["If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See the-federation.info for details."] = "Si cette option est activée, des informations sur le serveur et son utilisation seront publiées. Ces informations incluent le nom et la version du serveur, le nombre d’utilisateurs avec des profils publics, le nombre de messages, les protocoles supportés et les connecteurs disponibles. Plus de détails sur the-federation.info.";
-$a->strings["Check upstream version"] = "Mises à jour";
-$a->strings["Enables checking for new Friendica versions at github. If there is a new version, you will be informed in the admin panel overview."] = "Permet de vérifier la présence de nouvelles versions de Friendica sur github. Si une nouvelle version est disponible, vous recevrez une notification dans l'interface d'administration.";
-$a->strings["Suppress Tags"] = "Masquer les tags";
-$a->strings["Suppress showing a list of hashtags at the end of the posting."] = "Ne pas afficher la liste des hashtags à la fin d’un message.";
-$a->strings["Clean database"] = "Nettoyer la base de données";
-$a->strings["Remove old remote items, orphaned database records and old content from some other helper tables."] = "Supprime les conversations distantes anciennes, les enregistrements orphelins et le contenu obsolète de certaines tables de débogage.";
-$a->strings["Lifespan of remote items"] = "Durée de vie des conversations distantes";
-$a->strings["When the database cleanup is enabled, this defines the days after which remote items will be deleted. Own items, and marked or filed items are always kept. 0 disables this behaviour."] = "Si le nettoyage de la base de donnée est actif, cette valeur représente le délai en jours après lequel les conversations distantes sont supprimées. Les conversations démarrées par un utilisateur local, étoilées ou archivées sont toujours conservées. 0 pour désactiver.";
-$a->strings["Lifespan of unclaimed items"] = "Durée de vie des conversations relayées";
-$a->strings["When the database cleanup is enabled, this defines the days after which unclaimed remote items (mostly content from the relay) will be deleted. Default value is 90 days. Defaults to the general lifespan value of remote items if set to 0."] = "Si le nettoyage de la base de donnée est actif, cette valeur représente le délai en jours après lequel les conversations relayées qui n'ont pas reçu d'interactions locales sont supprimées. La valeur par défaut est 90 jours. 0 pour aligner cette valeur sur la durée de vie des conversations distantes.";
-$a->strings["Lifespan of raw conversation data"] = "Durée de vie des méta-données de conversation";
-$a->strings["The conversation data is used for ActivityPub and OStatus, as well as for debug purposes. It should be safe to remove it after 14 days, default is 90 days."] = "Cette valeur représente le délai en jours après lequel les méta-données de conversations sont supprimées. Ces méta-données sont utilisées par les protocoles ActivityPub et OStatus, et pour le débogage. Il est prudent de conserver ces meta-données pendant au moins 14 jours. La valeur par défaut est 90 jours.";
-$a->strings["Path to item cache"] = "Chemin vers le cache des objets.";
-$a->strings["The item caches buffers generated bbcode and external images."] = "Le cache de publications contient des textes HTML de BBCode compil's et une copie de chaque image distante.";
-$a->strings["Cache duration in seconds"] = "Durée du cache en secondes";
-$a->strings["How long should the cache files be hold? Default value is 86400 seconds (One day). To disable the item cache, set the value to -1."] = "Combien de temps les fichiers de cache doivent être maintenu? La valeur par défaut est 86400 secondes (une journée). Pour désactiver le cache de l'item, définissez la valeur à -1.";
-$a->strings["Maximum numbers of comments per post"] = "Nombre maximum de commentaires par publication";
-$a->strings["How much comments should be shown for each post? Default value is 100."] = "Combien de commentaires doivent être affichés pour chaque publication? Valeur par défaut: 100.";
-$a->strings["Temp path"] = "Chemin des fichiers temporaires";
-$a->strings["If you have a restricted system where the webserver can't access the system temp path, enter another path here."] = "Si vous n'avez pas la possibilité d'avoir accès au répertoire temp, entrez un autre répertoire ici.";
-$a->strings["Base path to installation"] = "Chemin de base de l'installation";
-$a->strings["If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."] = "Si le système ne peut pas détecter le chemin de l'installation, entrez le bon chemin ici. Ce paramètre doit être utilisé uniquement si vous avez des accès restreints à votre système et que vous n'avez qu'un lien symbolique vers le répertoire web.";
-$a->strings["Disable picture proxy"] = "Désactiver le proxy image ";
-$a->strings["The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwidth."] = "Le proxy d'image améliore les performances d'affichage et protège la vie privée des utilisateurs locaux. Il n'est pas recommandé de l'activer sur un serveur avec une bande passante limitée.";
-$a->strings["Only search in tags"] = "Rechercher seulement dans les étiquettes";
-$a->strings["On large systems the text search can slow down the system extremely."] = "La recherche textuelle peut ralentir considérablement les systèmes de grande taille.";
-$a->strings["New base url"] = "Nouvelle URL de base";
-$a->strings["Change base url for this server. Sends relocate message to all Friendica and Diaspora* contacts of all users."] = "Changer l'URL de base de ce serveur. Envoie un message de déménagement à tous les contacts Friendica et Diaspora des utilisateurs locaux.";
-$a->strings["RINO Encryption"] = "Chiffrement RINO";
-$a->strings["Encryption layer between nodes."] = "Couche de chiffrement entre les nœuds du réseau.";
-$a->strings["Enabled"] = "Activé";
-$a->strings["Maximum number of parallel workers"] = "Nombre maximum de processus simultanés";
-$a->strings["On shared hosters set this to %d. On larger systems, values of %d are great. Default value is %d."] = "Sur un hébergement partagé, mettez %d. Sur des serveurs plus puissants, %d est optimal. La valeur par défaut est %d.";
-$a->strings["Don't use 'proc_open' with the worker"] = "Ne pas utiliser 'proc_open' pour les tâches de fond";
-$a->strings["Enable this if your system doesn't allow the use of 'proc_open'. This can happen on shared hosters. If this is enabled you should increase the frequency of worker calls in your crontab."] = "Activez cette option si votre système ne permet pas d'utiliser 'proc_open'. Cela peut être le cas sur les hébergements partagés. Si vous activez cette option, vous devriez augmenter la fréquence d'appel du \"worker\" dans crontab.";
-$a->strings["Enable fastlane"] = "Activer la file prioritaire";
-$a->strings["When enabed, the fastlane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority."] = "La file prioritaire est un ouvrier additionel démarré quand des tâches de fondde grande importance sont bloquées par des tâches de moindre importance dans la file d'attente.";
-$a->strings["Enable frontend worker"] = "Activer l'ouvrier manuel";
-$a->strings["When enabled the Worker process is triggered when backend access is performed \\x28e.g. messages being delivered\\x29. On smaller sites you might want to call %s/worker on a regular basis via an external cron job. You should only enable this option if you cannot utilize cron/scheduled jobs on your server."] = "L'ouvrier manuel est lancé à la réception de messages distants. Sur un petit serveur il est conseillé d'ouvrir %s/worker régulièrement via une tâche planifée. Vous ne devriez activer cette option que si vous ne pouvez pas définir de tâches récurrentes sur votre serveur,";
-$a->strings["Subscribe to relay"] = "S'abonner au relai";
-$a->strings["Enables the receiving of public posts from the relay. They will be included in the search, subscribed tags and on the global community page."] = "Active la réception de conversations publiques relayées. Elles sont affichées dans la page de recherche, les recherches enregistrées et dans la page de communauté globale.";
-$a->strings["Relay server"] = "Serveur relai";
-$a->strings["Address of the relay server where public posts should be send to. For example https://relay.diasp.org"] = "URL du serveur relai auquel les conversations publique locales doivent être soumises.";
-$a->strings["Direct relay transfer"] = "Relai direct";
-$a->strings["Enables the direct transfer to other servers without using the relay servers"] = "Soumet les conversations publiques aux serveurs distants sans passer par le serveur relai.";
-$a->strings["Relay scope"] = "Filtre du relai";
-$a->strings["Can be 'all' or 'tags'. 'all' means that every public post should be received. 'tags' means that only posts with selected tags should be received."] = "\"Tous\" signifie que toutes les conversations publiques en provenance du relai sont acceptées. \"Tags\" signifie que seules les conversations comportant les tags suivants sont acceptées.";
-$a->strings["all"] = "Tous";
-$a->strings["tags"] = "Tags";
-$a->strings["Server tags"] = "Tags de filtre du relai";
-$a->strings["Comma separated list of tags for the 'tags' subscription."] = "Liste de tags séparés par des virgules pour le filtre de relai.";
-$a->strings["Allow user tags"] = "Inclure les tags des utilisateurs";
-$a->strings["If enabled, the tags from the saved searches will used for the 'tags' subscription in addition to the 'relay_server_tags'."] = "Inclut les tags des recherches enregistrées des utilisateurs au filtre de relai.";
-$a->strings["Start Relocation"] = "Démarrer le déménagement";
-$a->strings["Update has been marked successful"] = "Mise-à-jour validée comme 'réussie'";
-$a->strings["Database structure update %s was successfully applied."] = "La structure de base de données pour la mise à jour %s a été appliquée avec succès.";
-$a->strings["Executing of database structure update %s failed with error: %s"] = "L'exécution de la mise à jour %s pour la structure de base de données a échoué avec l'erreur: %s";
-$a->strings["Executing %s failed with error: %s"] = "L'exécution %s a échoué avec l'erreur: %s";
-$a->strings["Update %s was successfully applied."] = "Mise-à-jour %s appliquée avec succès.";
-$a->strings["Update %s did not return a status. Unknown if it succeeded."] = "La mise-à-jour %s n'a pas retourné de détails. Impossible de savoir si elle a réussi.";
-$a->strings["There was no additional update function %s that needed to be called."] = "Il n'y avait aucune fonction supplémentaire de mise à jour %s qui devait être appelé";
-$a->strings["No failed updates."] = "Pas de mises-à-jour échouées.";
-$a->strings["Check database structure"] = "Vérifier la structure de la base de données";
-$a->strings["Failed Updates"] = "Mises-à-jour échouées";
-$a->strings["This does not include updates prior to 1139, which did not return a status."] = "Ceci n'inclut pas les versions antérieures à la 1139, qui ne retournaient jamais de détails.";
-$a->strings["Mark success (if update was manually applied)"] = "Marquer comme 'réussie' (dans le cas d'une mise-à-jour manuelle)";
-$a->strings["Attempt to execute this update step automatically"] = "Tenter d'éxecuter cette étape automatiquement";
-$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tthe administrator of %2\$s has set up an account for you."] = "\n\t\t\tChère/Cher %1\$s,\n\t\t\t\tL’administrateur de %2\$s vous a ouvert un compte.";
-$a->strings["\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tIf you ever want to delete your account, you can do so at %1\$s/removeme\n\n\t\t\tThank you and welcome to %4\$s."] = "";
-$a->strings["Registration details for %s"] = "Détails d'inscription pour %s";
-$a->strings["%s user blocked/unblocked"] = [
- 0 => "%s utilisateur a (dé)bloqué",
- 1 => "%s utilisateurs ont (dé)bloqué",
-];
-$a->strings["You can't remove yourself"] = "Vous ne pouvez pas supprimer votre propre compte";
-$a->strings["%s user deleted"] = [
- 0 => "%s utilisateur supprimé",
- 1 => "%s utilisateurs supprimés",
-];
-$a->strings["User '%s' deleted"] = "Utilisateur '%s' supprimé";
-$a->strings["User '%s' unblocked"] = "Utilisateur '%s' débloqué";
-$a->strings["User '%s' blocked"] = "Utilisateur '%s' bloqué";
-$a->strings["Normal Account Page"] = "Compte normal";
-$a->strings["Soapbox Page"] = "Compte \"boîte à savon\"";
-$a->strings["Public Forum"] = "Forum public";
-$a->strings["Automatic Friend Page"] = "Compte d' \"amitié automatique\"";
-$a->strings["Private Forum"] = "Forum Privé";
-$a->strings["Personal Page"] = "Page personnelle";
-$a->strings["Organisation Page"] = "Page Associative";
-$a->strings["News Page"] = "Page d'informations";
-$a->strings["Community Forum"] = "Forum Communautaire";
-$a->strings["Relay"] = "Relai";
-$a->strings["Email"] = "Courriel";
-$a->strings["Register date"] = "Date d'inscription";
-$a->strings["Last login"] = "Dernière connexion";
-$a->strings["Last item"] = "Dernier élément";
-$a->strings["Type"] = "Type";
-$a->strings["Add User"] = "Ajouter l'utilisateur";
-$a->strings["User registrations waiting for confirm"] = "Inscriptions d'utilisateurs en attente de confirmation";
-$a->strings["User waiting for permanent deletion"] = "Utilisateur en attente de suppression définitive";
-$a->strings["Request date"] = "Date de la demande";
-$a->strings["No registrations."] = "Pas d'inscriptions.";
-$a->strings["Note from the user"] = "Message personnel";
-$a->strings["Approve"] = "Approuver";
-$a->strings["Deny"] = "Rejetter";
-$a->strings["User blocked"] = "Utilisateur bloqué";
-$a->strings["Site admin"] = "Administration du Site";
-$a->strings["Account expired"] = "Compte expiré";
-$a->strings["New User"] = "Nouvel utilisateur";
-$a->strings["Permanent deletion"] = "Suppression définitive";
-$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Les utilisateurs sélectionnés vont être supprimés!\\n\\nTout ce qu'ils ont posté sur ce site sera définitivement effacé!\\n\\nÊtes-vous certain?";
-$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "L'utilisateur {0} va être supprimé!\\n\\nTout ce qu'il a posté sur ce site sera définitivement perdu!\\n\\nÊtes-vous certain?";
-$a->strings["Name of the new user."] = "Nom du nouvel utilisateur.";
-$a->strings["Nickname"] = "Pseudo";
-$a->strings["Nickname of the new user."] = "Pseudo du nouvel utilisateur.";
-$a->strings["Email address of the new user."] = "Adresse mail du nouvel utilisateur.";
-$a->strings["Addon %s disabled."] = "Add-on %s désactivé.";
-$a->strings["Addon %s enabled."] = "Add-on %s activé.";
-$a->strings["Disable"] = "Désactiver";
-$a->strings["Enable"] = "Activer";
-$a->strings["Toggle"] = "Activer/Désactiver";
-$a->strings["Settings"] = "Réglages";
-$a->strings["Author: "] = "Auteur : ";
-$a->strings["Maintainer: "] = "Mainteneur : ";
-$a->strings["Reload active addons"] = "Recharger les add-ons activés.";
-$a->strings["There are currently no addons available on your node. You can find the official addon repository at %1\$s and might find other interesting addons in the open addon registry at %2\$s"] = "Il n'y a pas d'add-on disponible sur votre serveur. Vous pouvez trouver le dépôt officiel d'add-ons sur %1\$s et des add-ons non-officiel dans le répertoire d'add-ons ouvert sur %2\$s.";
-$a->strings["No themes found."] = "Aucun thème trouvé.";
-$a->strings["Screenshot"] = "Capture d'écran";
-$a->strings["Reload active themes"] = "Recharger les thèmes actifs";
-$a->strings["No themes found on the system. They should be placed in %1\$s"] = "Aucun thème trouvé. Leur emplacement d'installation est%1\$s.";
-$a->strings["[Experimental]"] = "[Expérimental]";
-$a->strings["[Unsupported]"] = "[Non supporté]";
-$a->strings["Log settings updated."] = "Réglages des journaux mis-à-jour.";
-$a->strings["PHP log currently enabled."] = "Log PHP actuellement activé.";
-$a->strings["PHP log currently disabled."] = "Log PHP actuellement desactivé.";
-$a->strings["Clear"] = "Effacer";
-$a->strings["Enable Debugging"] = "Activer le déboggage";
-$a->strings["Log file"] = "Fichier de journaux";
-$a->strings["Must be writable by web server. Relative to your Friendica top-level directory."] = "Accès en écriture par le serveur web requis. Relatif à la racine de votre installation de Friendica.";
-$a->strings["Log level"] = "Niveau de journalisaton";
-$a->strings["PHP logging"] = "Log PHP";
-$a->strings["To temporarily enable logging of PHP errors and warnings you can prepend the following to the index.php file of your installation. The filename set in the 'error_log' line is relative to the friendica top-level directory and must be writeable by the web server. The option '1' for 'log_errors' and 'display_errors' is to enable these options, set to '0' to disable them."] = "Pour activer temporairement la journalisation de PHP vous pouvez insérez les lignes suivantes au début du fichier index.php
dans votre répertoire Friendica. The nom de fichier défini dans la ligne 'error_log'
est relatif au répertoire d'installation de Friendica et le serveur web doit avoir le droit d'écriture sur ce fichier. Les lignes log_errors
et display_errors
prennent les valeurs 0
et 1
respectivement pour les activer ou désactiver.";
-$a->strings["Error trying to open %1\$s log file.\\r\\nindex.php
dans votre répertoire Friendica. The nom de fichier défini dans la ligne 'error_log'
est relatif au répertoire d'installation de Friendica et le serveur web doit avoir le droit d'écriture sur ce fichier. Les lignes log_errors
et display_errors
prennent les valeurs 0
et 1
respectivement pour les activer ou désactiver.";
+$a->strings["Error trying to open %1\$s log file.\\r\\n/proc/meminfo
. La valeur par défaut est 0 (désactivé).";
+$a->strings["Maximum table size for optimization"] = "Limite de taille de table pour l'optimisation";
+$a->strings["Maximum table size (in MB) for the automatic optimization. Enter -1 to disable it."] = "Limite de taille de table (en Mo) pour l'optimisation automatique. -1 pour désactiver cette limite.";
+$a->strings["Minimum level of fragmentation"] = "Seuil de fragmentation";
+$a->strings["Minimum fragmenation level to start the automatic optimization - default value is 30%."] = "Seuil de fragmentation pour que l'optimisation automatique se déclenche - défaut 30%.";
+$a->strings["Periodical check of global contacts"] = "Vérification périodique des contacts globaux";
+$a->strings["If enabled, the global contacts are checked periodically for missing or outdated data and the vitality of the contacts and servers."] = "Si activé, les données manquantes et obsolètes et la vitalité des contacts et des serveurs seront vérifiées périodiquement dans les contacts globaux.";
+$a->strings["Days between requery"] = "Nombre de jours entre les requêtes";
+$a->strings["Number of days after which a server is requeried for his contacts."] = "Nombre de jours avant qu'une requête de contacts soient envoyée à nouveau à un serveur.";
+$a->strings["Discover contacts from other servers"] = "Découvrir des contacts des autres serveurs";
+$a->strings["Periodically query other servers for contacts. You can choose between \"Users\": the users on the remote system, \"Global Contacts\": active contacts that are known on the system. The fallback is meant for Redmatrix servers and older friendica servers, where global contacts weren't available. The fallback increases the server load, so the recommended setting is \"Users, Global Contacts\"."] = "";
+$a->strings["Timeframe for fetching global contacts"] = "Fréquence de récupération des contacts globaux";
+$a->strings["When the discovery is activated, this value defines the timeframe for the activity of the global contacts that are fetched from other servers."] = "Quand la découverte de contacts est activée, cette valeur détermine la fréquence de récupération des données des contacts globaux présents sur d'autres serveurs.";
+$a->strings["Search the local directory"] = "Chercher dans le répertoire local";
+$a->strings["Search the local directory instead of the global directory. When searching locally, every search will be executed on the global directory in the background. This improves the search results when the search is repeated."] = "Cherche dans le répertoire local au lieu du répertoire local. Quand une recherche locale est effectuée, la même recherche est effectuée dans le répertoire global en tâche de fond. Cela améliore les résultats de la recherche si elle est réitérée.";
+$a->strings["Publish server information"] = "Publier les informations du serveur";
+$a->strings["If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See the-federation.info for details."] = "";
+$a->strings["Check upstream version"] = "Mises à jour";
+$a->strings["Enables checking for new Friendica versions at github. If there is a new version, you will be informed in the admin panel overview."] = "Permet de vérifier la présence de nouvelles versions de Friendica sur github. Si une nouvelle version est disponible, vous recevrez une notification dans l'interface d'administration.";
+$a->strings["Suppress Tags"] = "Masquer les tags";
+$a->strings["Suppress showing a list of hashtags at the end of the posting."] = "Ne pas afficher la liste des hashtags à la fin d’un message.";
+$a->strings["Clean database"] = "Nettoyer la base de données";
+$a->strings["Remove old remote items, orphaned database records and old content from some other helper tables."] = "Supprime les conversations distantes anciennes, les enregistrements orphelins et le contenu obsolète de certaines tables de débogage.";
+$a->strings["Lifespan of remote items"] = "Durée de vie des conversations distantes";
+$a->strings["When the database cleanup is enabled, this defines the days after which remote items will be deleted. Own items, and marked or filed items are always kept. 0 disables this behaviour."] = "Si le nettoyage de la base de donnée est actif, cette valeur représente le délai en jours après lequel les conversations distantes sont supprimées. Les conversations démarrées par un utilisateur local, étoilées ou archivées sont toujours conservées. 0 pour désactiver.";
+$a->strings["Lifespan of unclaimed items"] = "Durée de vie des conversations relayées";
+$a->strings["When the database cleanup is enabled, this defines the days after which unclaimed remote items (mostly content from the relay) will be deleted. Default value is 90 days. Defaults to the general lifespan value of remote items if set to 0."] = "Si le nettoyage de la base de donnée est actif, cette valeur représente le délai en jours après lequel les conversations relayées qui n'ont pas reçu d'interactions locales sont supprimées. La valeur par défaut est 90 jours. 0 pour aligner cette valeur sur la durée de vie des conversations distantes.";
+$a->strings["Lifespan of raw conversation data"] = "Durée de vie des méta-données de conversation";
+$a->strings["The conversation data is used for ActivityPub and OStatus, as well as for debug purposes. It should be safe to remove it after 14 days, default is 90 days."] = "Cette valeur représente le délai en jours après lequel les méta-données de conversations sont supprimées. Ces méta-données sont utilisées par les protocoles ActivityPub et OStatus, et pour le débogage. Il est prudent de conserver ces meta-données pendant au moins 14 jours. La valeur par défaut est 90 jours.";
+$a->strings["Path to item cache"] = "Chemin vers le cache des objets.";
+$a->strings["The item caches buffers generated bbcode and external images."] = "Le cache de publications contient des textes HTML de BBCode compil's et une copie de chaque image distante.";
+$a->strings["Cache duration in seconds"] = "Durée du cache en secondes";
+$a->strings["How long should the cache files be hold? Default value is 86400 seconds (One day). To disable the item cache, set the value to -1."] = "Combien de temps les fichiers de cache doivent être maintenu? La valeur par défaut est 86400 secondes (une journée). Pour désactiver le cache de l'item, définissez la valeur à -1.";
+$a->strings["Maximum numbers of comments per post"] = "Nombre maximum de commentaires par publication";
+$a->strings["How much comments should be shown for each post? Default value is 100."] = "Combien de commentaires doivent être affichés pour chaque publication? Valeur par défaut: 100.";
+$a->strings["Temp path"] = "Chemin des fichiers temporaires";
+$a->strings["If you have a restricted system where the webserver can't access the system temp path, enter another path here."] = "Si vous n'avez pas la possibilité d'avoir accès au répertoire temp, entrez un autre répertoire ici.";
+$a->strings["Disable picture proxy"] = "Désactiver le proxy image ";
+$a->strings["The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwidth."] = "Le proxy d'image améliore les performances d'affichage et protège la vie privée des utilisateurs locaux. Il n'est pas recommandé de l'activer sur un serveur avec une bande passante limitée.";
+$a->strings["Only search in tags"] = "Rechercher seulement dans les étiquettes";
+$a->strings["On large systems the text search can slow down the system extremely."] = "La recherche textuelle peut ralentir considérablement les systèmes de grande taille.";
+$a->strings["New base url"] = "Nouvelle URL de base";
+$a->strings["Change base url for this server. Sends relocate message to all Friendica and Diaspora* contacts of all users."] = "Changer l'URL de base de ce serveur. Envoie un message de déménagement à tous les contacts Friendica et Diaspora des utilisateurs locaux.";
+$a->strings["RINO Encryption"] = "Chiffrement RINO";
+$a->strings["Encryption layer between nodes."] = "Couche de chiffrement entre les nœuds du réseau.";
+$a->strings["Enabled"] = "Activé";
+$a->strings["Maximum number of parallel workers"] = "Nombre maximum de processus simultanés";
+$a->strings["On shared hosters set this to %d. On larger systems, values of %d are great. Default value is %d."] = "Sur un hébergement partagé, mettez %d. Sur des serveurs plus puissants, %d est optimal. La valeur par défaut est %d.";
+$a->strings["Don't use \"proc_open\" with the worker"] = "";
+$a->strings["Enable this if your system doesn't allow the use of \"proc_open\". This can happen on shared hosters. If this is enabled you should increase the frequency of worker calls in your crontab."] = "";
+$a->strings["Enable fastlane"] = "Activer la file prioritaire";
+$a->strings["When enabed, the fastlane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority."] = "La file prioritaire est un ouvrier additionel démarré quand des tâches de fondde grande importance sont bloquées par des tâches de moindre importance dans la file d'attente.";
+$a->strings["Enable frontend worker"] = "Activer l'ouvrier manuel";
+$a->strings["When enabled the Worker process is triggered when backend access is performed (e.g. messages being delivered). On smaller sites you might want to call %s/worker on a regular basis via an external cron job. You should only enable this option if you cannot utilize cron/scheduled jobs on your server."] = "";
+$a->strings["Subscribe to relay"] = "S'abonner au relai";
+$a->strings["Enables the receiving of public posts from the relay. They will be included in the search, subscribed tags and on the global community page."] = "Active la réception de conversations publiques relayées. Elles sont affichées dans la page de recherche, les recherches enregistrées et dans la page de communauté globale.";
+$a->strings["Relay server"] = "Serveur relai";
+$a->strings["Address of the relay server where public posts should be send to. For example https://relay.diasp.org"] = "URL du serveur relai auquel les conversations publique locales doivent être soumises.";
+$a->strings["Direct relay transfer"] = "Relai direct";
+$a->strings["Enables the direct transfer to other servers without using the relay servers"] = "Soumet les conversations publiques aux serveurs distants sans passer par le serveur relai.";
+$a->strings["Relay scope"] = "Filtre du relai";
+$a->strings["Can be \"all\" or \"tags\". \"all\" means that every public post should be received. \"tags\" means that only posts with selected tags should be received."] = "";
+$a->strings["all"] = "Tous";
+$a->strings["tags"] = "Tags";
+$a->strings["Server tags"] = "Tags de filtre du relai";
+$a->strings["Comma separated list of tags for the \"tags\" subscription."] = "";
+$a->strings["Allow user tags"] = "Inclure les tags des utilisateurs";
+$a->strings["If enabled, the tags from the saved searches will used for the \"tags\" subscription in addition to the \"relay_server_tags\"."] = "";
+$a->strings["Start Relocation"] = "Démarrer le déménagement";
+$a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion.php bin/console.php dbstructure update
depuis votre répertoire Friendica et noter les erreurs potentielles.";
+$a->strings["The last update failed. Please run \"php bin/console.php dbstructure update\" from the command line and have a look at the errors that might appear. (Some of the errors are possibly inside the logfile.)"] = "";
+$a->strings["The worker was never executed. Please check your database structure!"] = "Le 'worker' n'a pas encore été exécuté. Vérifiez la structure de votre base de données.";
+$a->strings["The last worker execution was on %s UTC. This is older than one hour. Please check your crontab settings."] = "La dernière exécution du 'worker' s'est déroulée à %s, c'est-à-dire il y a plus d'une heure. Vérifiez les réglages de crontab.";
+$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from .htconfig.php
. See the Config help page for help with the transition."] = "La configuration de votre site Friendica est maintenant stockée dans le fichier config/local.config.php
, veuillez copier le fichier config/local-sample.config.php
et transférer votre configuration depuis le fichier .htconfig.php
. Veuillez consulter la page d'aide de configuration (en anglais) pour vous aider dans la transition.";
+$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."] = "La configuration de votre site Friendica est maintenant stockée dans le fichier config/local.config.php
, veuillez copier le fichier config/local-sample.config.php
et transférer votre configuration depuis le fichier config/local.ini.php
. Veuillez consulter la page d'aide de configuration (en anglais) pour vous aider dans la transition.";
+$a->strings["%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."] = "%s n'est pas accessible sur votre site. C'est un problème de configuration sévère qui empêche toute communication avec les serveurs distants. Veuillez consulter la page d'aide à l'installation (en anglais) pour plus d'information.";
+$a->strings["Friendica's system.basepath was updated from '%s' to '%s'. Please remove the system.basepath from your db to avoid differences."] = "";
+$a->strings["Friendica's current system.basepath '%s' is wrong and the config file '%s' isn't used."] = "";
+$a->strings["Friendica's current system.basepath '%s' is not equal to the config file '%s'. Please fix your configuration."] = "";
+$a->strings["Normal Account"] = "Compte normal";
+$a->strings["Automatic Follower Account"] = "Profile Resuivant";
+$a->strings["Public Forum Account"] = "Forum public";
+$a->strings["Automatic Friend Account"] = "Compte auto-amical";
+$a->strings["Blog Account"] = "Compte de blog";
+$a->strings["Private Forum Account"] = "Forum privé";
+$a->strings["Message queues"] = "Files d'attente des messages";
+$a->strings["Server Settings"] = "Paramètres du site";
+$a->strings["Summary"] = "Résumé";
+$a->strings["Registered users"] = "Utilisateurs inscrits";
+$a->strings["Pending registrations"] = "Inscriptions en attente";
+$a->strings["Version"] = "Version";
+$a->strings["Active addons"] = "Add-ons actifs";
+$a->strings["Theme settings updated."] = "Réglages du thème sauvés.";
+$a->strings["Theme %s disabled."] = "";
+$a->strings["Theme %s successfully enabled."] = "";
+$a->strings["Theme %s failed to install."] = "";
+$a->strings["Screenshot"] = "Capture d'écran";
+$a->strings["Themes"] = "Thèmes";
+$a->strings["Unknown theme."] = "";
+$a->strings["Reload active themes"] = "Recharger les thèmes actifs";
+$a->strings["No themes found on the system. They should be placed in %1\$s"] = "Aucun thème trouvé. Leur emplacement d'installation est%1\$s.";
+$a->strings["[Experimental]"] = "[Expérimental]";
+$a->strings["[Unsupported]"] = "[Non supporté]";
+$a->strings["The Terms of Service settings have been updated."] = "";
+$a->strings["Display Terms of Service"] = "Afficher les Conditions d'Utilisation";
+$a->strings["Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page."] = "Active la page de Conditions d'Utilisation. Un lien vers cette page est ajouté dans le formulaire d'inscription et la page A Propos.";
+$a->strings["Display Privacy Statement"] = "Afficher la Politique de Confidentialité";
+$a->strings["Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR."] = "Affiche les informations légales nécessaires pour publier un site Friendica en accord avec le RGPD européen par exemple.";
+$a->strings["Privacy Statement Preview"] = "Aperçu de la Politique de Confidentialité";
+$a->strings["The Terms of Service"] = "Conditions d'Utilisation";
+$a->strings["Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below."] = "Saisissez les Conditions d'Utilisations de votre site. Les BBCodes sont disponibles, les titres commencent à [h2].";
+$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tthe administrator of %2\$s has set up an account for you."] = "\n\t\t\tChère/Cher %1\$s,\n\t\t\t\tL’administrateur de %2\$s vous a ouvert un compte.";
+$a->strings["\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tIf you ever want to delete your account, you can do so at %1\$s/removeme\n\n\t\t\tThank you and welcome to %4\$s."] = "";
+$a->strings["%s user blocked"] = [
+ 0 => "",
+ 1 => "",
+];
+$a->strings["%s user unblocked"] = [
+ 0 => "",
+ 1 => "",
+];
+$a->strings["You can't remove yourself"] = "Vous ne pouvez pas supprimer votre propre compte";
+$a->strings["%s user deleted"] = [
+ 0 => "%s utilisateur supprimé",
+ 1 => "%s utilisateurs supprimés",
+];
+$a->strings["User \"%s\" deleted"] = "";
+$a->strings["User \"%s\" blocked"] = "";
+$a->strings["User \"%s\" unblocked"] = "";
+$a->strings["Private Forum"] = "Forum Privé";
+$a->strings["Relay"] = "Relai";
+$a->strings["Register date"] = "Date d'inscription";
+$a->strings["Last login"] = "Dernière connexion";
+$a->strings["Last item"] = "Dernier élément";
+$a->strings["Type"] = "Type";
+$a->strings["Add User"] = "Ajouter l'utilisateur";
+$a->strings["User registrations waiting for confirm"] = "Inscriptions d'utilisateurs en attente de confirmation";
+$a->strings["User waiting for permanent deletion"] = "Utilisateur en attente de suppression définitive";
+$a->strings["Request date"] = "Date de la demande";
+$a->strings["No registrations."] = "Pas d'inscriptions.";
+$a->strings["Note from the user"] = "Message personnel";
+$a->strings["Deny"] = "Rejetter";
+$a->strings["User blocked"] = "Utilisateur bloqué";
+$a->strings["Site admin"] = "Administration du Site";
+$a->strings["Account expired"] = "Compte expiré";
+$a->strings["New User"] = "Nouvel utilisateur";
+$a->strings["Permanent deletion"] = "Suppression définitive";
+$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Les utilisateurs sélectionnés vont être supprimés!\\n\\nTout ce qu'ils ont posté sur ce site sera définitivement effacé!\\n\\nÊtes-vous certain?";
+$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "L'utilisateur {0} va être supprimé!\\n\\nTout ce qu'il a posté sur ce site sera définitivement perdu!\\n\\nÊtes-vous certain?";
+$a->strings["Name of the new user."] = "Nom du nouvel utilisateur.";
+$a->strings["Nickname"] = "Pseudo";
+$a->strings["Nickname of the new user."] = "Pseudo du nouvel utilisateur.";
+$a->strings["Email address of the new user."] = "Adresse mail du nouvel utilisateur.";
+$a->strings["No friends to display."] = "Pas d'amis à afficher.";
+$a->strings["No installed applications."] = "Pas d'application installée.";
+$a->strings["Applications"] = "Applications";
$a->strings["Item was not found."] = "Element introuvable.";
+$a->strings["Source input"] = "Saisie source";
+$a->strings["BBCode::toPlaintext"] = "BBCode::toPlaintext";
+$a->strings["BBCode::convert (raw HTML)"] = "BBCode::convert (code HTML)";
+$a->strings["BBCode::convert"] = "BBCode::convert";
+$a->strings["BBCode::convert => HTML::toBBCode"] = "BBCode::convert => HTML::toBBCode";
+$a->strings["BBCode::toMarkdown"] = "BBCode::toMarkdown";
+$a->strings["BBCode::toMarkdown => Markdown::convert"] = "BBCode::toMarkdown => Markdown::convert";
+$a->strings["BBCode::toMarkdown => Markdown::toBBCode"] = "BBCode::toMarkdown => Markdown::toBBCode";
+$a->strings["BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"] = "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode";
+$a->strings["Item Body"] = "Corps du message";
+$a->strings["Item Tags"] = "Tags du messages";
+$a->strings["Source input (Diaspora format)"] = "Saisie source (format Diaspora)";
+$a->strings["Markdown::convert (raw HTML)"] = "Markdown::convert (code HTML)";
+$a->strings["Markdown::convert"] = "Markdown::convert";
+$a->strings["Markdown::toBBCode"] = "Markdown::toBBCode";
+$a->strings["Raw HTML input"] = "Saisie code HTML";
+$a->strings["HTML Input"] = "Code HTML";
+$a->strings["HTML::toBBCode"] = "HTML::toBBCode";
+$a->strings["HTML::toBBCode => BBCode::convert"] = "HTML::toBBCode => BBCode::convert";
+$a->strings["HTML::toBBCode => BBCode::convert (raw HTML)"] = "HTML::toBBCode => BBCode::convert (code HTML)";
+$a->strings["HTML::toMarkdown"] = "HTML::toMarkdown";
+$a->strings["HTML::toPlaintext"] = "HTML::toPlaintext";
+$a->strings["Source text"] = "Texte source";
+$a->strings["BBCode"] = "BBCode";
+$a->strings["Markdown"] = "Markdown";
+$a->strings["HTML"] = "HTML";
+$a->strings["Overview"] = "Synthèse";
+$a->strings["Configuration"] = "Configuration";
+$a->strings["Database"] = "Base de données";
+$a->strings["DB updates"] = "Mise-à-jour de la base";
+$a->strings["Inspect Deferred Workers"] = "Tâches de fond reportées";
+$a->strings["Inspect worker Queue"] = "Tâches de fond en attente";
+$a->strings["Tools"] = "Outils";
+$a->strings["Contact Blocklist"] = "Liste de contacts bloqués";
+$a->strings["Diagnostics"] = "Diagnostics";
+$a->strings["PHP Info"] = "PHP Info";
+$a->strings["probe address"] = "Tester une adresse";
+$a->strings["check webfinger"] = "vérification de webfinger";
+$a->strings["Item Source"] = "";
+$a->strings["Babel"] = "";
+$a->strings["Addon Features"] = "Fonctionnalités des addons";
+$a->strings["User registrations waiting for confirmation"] = "Inscriptions en attente de confirmation";
+$a->strings["This page is missing a url parameter."] = "";
+$a->strings["The post was created"] = "La publication a été créée";
$a->strings["%d contact edited."] = [
0 => "%d contact mis à jour.",
1 => "%d contacts mis à jour.",
@@ -2055,6 +1997,7 @@ $a->strings["Comma separated list of keywords that should not be converted to ha
$a->strings["Actions"] = "Actions";
$a->strings["Suggestions"] = "Suggestions";
$a->strings["Suggest potential friends"] = "Suggérer des amis potentiels";
+$a->strings["All Contacts"] = "Tous les contacts";
$a->strings["Show all contacts"] = "Montrer tous les contacts";
$a->strings["Unblocked"] = "Non-bloqués";
$a->strings["Only show unblocked contacts"] = "Ne montrer que les contacts non-bloqués";
@@ -2084,9 +2027,62 @@ $a->strings["Toggle Blocked status"] = "(dés)activer l'état \"bloqué\"";
$a->strings["Toggle Ignored status"] = "(dés)activer l'état \"ignoré\"";
$a->strings["Toggle Archive status"] = "(dés)activer l'état \"archivé\"";
$a->strings["Delete contact"] = "Effacer ce contact";
+$a->strings["Credits"] = "Remerciements";
+$a->strings["Friendica is a community project, that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!"] = "Friendica est un projet communautaire, qui ne serait pas possible sans l'aide de beaucoup de gens. Voici une liste de ceux qui ont contribué au code ou à la traduction de Friendica. Merci à tous!";
+$a->strings["No entries (some entries may be hidden)."] = "Aucune entrée (certaines peuvent être cachées).";
+$a->strings["Find on this site"] = "Trouver sur ce site";
+$a->strings["Results for:"] = "Résultats pour :";
+$a->strings["Site Directory"] = "Annuaire local";
+$a->strings["You must be logged in to use this module"] = "Vous devez être identifié pour accéder à cette fonctionnalité";
+$a->strings["Source URL"] = "URL Source";
+$a->strings["Filetag %s saved to item"] = "";
+$a->strings["- select -"] = "- choisir -";
+$a->strings["No given contact."] = "";
+$a->strings["Installed addons/apps:"] = "Add-ons/Applications installés :";
+$a->strings["No installed addons/apps"] = "Aucun add-on/application n'est installé";
+$a->strings["Read about the Terms of Service of this node."] = "";
+$a->strings["On this server the following remote servers are blocked."] = "Sur ce serveur, les serveurs suivants sont sur liste noire.";
+$a->strings["This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s."] = "";
+$a->strings["Please visit Friendi.ca to learn more about the Friendica project."] = "Rendez-vous sur Friendi.ca pour en savoir plus sur le projet Friendica.";
+$a->strings["Bug reports and issues: please visit"] = "Pour les rapports de bugs : rendez vous sur";
+$a->strings["the bugtracker at github"] = "le bugtracker sur GitHub";
+$a->strings["Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca"] = "";
+$a->strings["Group created."] = "Groupe créé.";
+$a->strings["Could not create group."] = "Impossible de créer le groupe.";
+$a->strings["Group not found."] = "Groupe introuvable.";
+$a->strings["Group name changed."] = "Groupe renommé.";
+$a->strings["Unknown group."] = "";
+$a->strings["Contact is unavailable."] = "";
+$a->strings["Contact is deleted."] = "";
+$a->strings["Contact is blocked, unable to add it to a group."] = "";
+$a->strings["Unable to add the contact to the group."] = "";
+$a->strings["Contact successfully added to group."] = "";
+$a->strings["Unable to remove the contact from the group."] = "";
+$a->strings["Contact successfully removed from group."] = "";
+$a->strings["Unknown group command."] = "";
+$a->strings["Bad request."] = "";
+$a->strings["Save Group"] = "Sauvegarder le groupe";
+$a->strings["Filter"] = "Filtre";
+$a->strings["Create a group of contacts/friends."] = "Créez un groupe de contacts/amis.";
+$a->strings["Group removed."] = "Groupe enlevé.";
+$a->strings["Unable to remove group."] = "Impossible d'enlever le groupe.";
+$a->strings["Delete Group"] = "Supprimer le groupe";
+$a->strings["Edit Group Name"] = "Éditer le nom du groupe";
+$a->strings["Members"] = "Membres";
+$a->strings["Remove contact from group"] = "Retirer ce contact du groupe";
+$a->strings["Add contact to group"] = "Ajouter ce contact au groupe";
+$a->strings["Help:"] = "Aide :";
+$a->strings["Welcome to %s"] = "Bienvenue sur %s";
$a->strings["Friendica Communications Server - Setup"] = "";
$a->strings["System check"] = "Vérifications système";
$a->strings["Check again"] = "Vérifier à nouveau";
+$a->strings["Base settings"] = "";
+$a->strings["Host name"] = "Nom de la machine hôte";
+$a->strings["Overwrite this field in case the determinated hostname isn't right, otherweise leave it as is."] = "";
+$a->strings["Base path to installation"] = "Chemin de base de l'installation";
+$a->strings["If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."] = "Si le système ne peut pas détecter le chemin de l'installation, entrez le bon chemin ici. Ce paramètre doit être utilisé uniquement si vous avez des accès restreints à votre système et que vous n'avez qu'un lien symbolique vers le répertoire web.";
+$a->strings["Sub path of the URL"] = "";
+$a->strings["Overwrite this field in case the sub path determination isn't right, otherwise leave it as is. Leaving this field blank means the installation is at the base URL without sub path."] = "";
$a->strings["Database connection"] = "Connexion à la base de données";
$a->strings["In order to install Friendica we need to know how to connect to your database."] = "Pour installer Friendica, nous avons besoin de savoir comment contacter votre base de données.";
$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Merci de vous tourner vers votre hébergeur et/ou administrateur pour toute question concernant ces réglages.";
@@ -2096,10 +2092,10 @@ $a->strings["Database Login Name"] = "Nom d'utilisateur de la base";
$a->strings["Database Login Password"] = "Mot de passe de la base";
$a->strings["For security reasons the password must not be empty"] = "Pour des raisons de sécurité, le mot de passe ne peut pas être vide.";
$a->strings["Database Name"] = "Nom de la base";
-$a->strings["Site administrator email address"] = "Adresse électronique de l'administrateur du site";
-$a->strings["Your account email address must match this in order to use the web admin panel."] = "Votre adresse électronique doit correspondre à celle-ci pour pouvoir utiliser l'interface d'administration.";
$a->strings["Please select a default timezone for your website"] = "Sélectionner un fuseau horaire par défaut pour votre site";
$a->strings["Site settings"] = "Réglages du site";
+$a->strings["Site administrator email address"] = "Adresse électronique de l'administrateur du site";
+$a->strings["Your account email address must match this in order to use the web admin panel."] = "Votre adresse électronique doit correspondre à celle-ci pour pouvoir utiliser l'interface d'administration.";
$a->strings["System Language:"] = "Langue système :";
$a->strings["Set the default language for your Friendica installation interface and to send emails."] = "Définit la langue par défaut pour l'interface de votre instance Friendica et les mails envoyés.";
$a->strings["Your Friendica site database has been installed."] = "La base de données de votre site Friendica a bien été installée.";
@@ -2107,7 +2103,34 @@ $a->strings["Installation finished"] = "";
$a->strings["Use an application on a mobile device to get two-factor authentication codes when prompted on login.
"] = ""; +$a->strings["Authenticator app"] = ""; +$a->strings["Configured"] = ""; +$a->strings["Not Configured"] = ""; +$a->strings["You haven't finished configuring your authenticator app.
"] = ""; +$a->strings["Your authenticator app is correctly configured.
"] = ""; +$a->strings["Recovery codes"] = ""; +$a->strings["Remaining valid codes"] = ""; +$a->strings["These one-use codes can replace an authenticator app code in case you have lost access to it.
"] = ""; +$a->strings["Current password:"] = ""; +$a->strings["You need to provide your current password to change two-factor authentication settings."] = ""; +$a->strings["Enable two-factor authentication"] = ""; +$a->strings["Disable two-factor authentication"] = ""; +$a->strings["Show recovery codes"] = ""; +$a->strings["Finish app configuration"] = ""; +$a->strings["Please enter your password to access this page."] = ""; +$a->strings["New recovery codes successfully generated."] = ""; +$a->strings["Two-factor recovery codes"] = ""; +$a->strings["Recovery codes can be used to access your account in the event you lose access to your device and cannot receive two-factor authentication codes.
Put these in a safe spot! If you lose your device and don’t have the recovery codes you will lose access to your account.
"] = ""; +$a->strings["When you generate new recovery codes, you must copy the new codes. Your old codes won’t work anymore."] = ""; +$a->strings["Generate new recovery codes"] = ""; +$a->strings["Next: Verification"] = ""; +$a->strings["Two-factor authentication successfully activated."] = ""; +$a->strings["Invalid code, please retry."] = ""; +$a->strings["Or you can submit the authentication settings manually:
\nPlease scan this QR Code with your authenticator app and submit the provided code.
"] = ""; +$a->strings["Or you can open the following URL in your mobile devicde:
"] = ""; +$a->strings["Please enter a code from your authentication app"] = ""; +$a->strings["Verify code and enable two-factor authentication"] = ""; +$a->strings["Bad Request"] = "Requête erronée"; +$a->strings["Unauthorized"] = ""; +$a->strings["Forbidden"] = ""; +$a->strings["Not Found"] = "Non trouvé"; +$a->strings["Internal Server Error"] = ""; +$a->strings["Service Unavailable"] = ""; +$a->strings["The server cannot or will not process the request due to an apparent client error."] = ""; +$a->strings["Authentication is required and has failed or has not yet been provided."] = ""; +$a->strings["The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource, or may need an account."] = ""; +$a->strings["The requested resource could not be found but may be available in the future."] = ""; +$a->strings["An unexpected condition was encountered and no more specific message is suitable."] = ""; +$a->strings["The server is currently unavailable (because it is overloaded or down for maintenance). Please try again later."] = ""; +$a->strings["Go back"] = ""; $a->strings["At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node's user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication."] = ""; $a->strings["This data is required for communication and is passed on to the nodes of the communication partners and is stored there. Users can enter additional private data that may be transmitted to the communication partners accounts."] = ""; $a->strings["At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1\$s/removeme. The deletion of the account will be permanent. Deletion of the data will also be requested from the nodes of the communication partners."] = ""; $a->strings["Privacy Statement"] = ""; +$a->strings["Remaining recovery codes: %d"] = ""; +$a->strings["Two-factor recovery"] = ""; +$a->strings["You can enter one of your one-time recovery codes in case you lost access to your mobile device.
"] = ""; +$a->strings["Don’t have your phone? Enter a two-factor recovery code"] = ""; +$a->strings["Please enter a recovery code"] = ""; +$a->strings["Submit recovery code and complete login"] = ""; +$a->strings["Open the two-factor authentication app on your device to get an authentication code and verify your identity.
"] = ""; +$a->strings["Verify code and complete login"] = ""; $a->strings["This entry was edited"] = "Cette entrée a été éditée"; +$a->strings["Private Message"] = "Message privé"; $a->strings["Delete locally"] = ""; $a->strings["Delete globally"] = ""; $a->strings["Remove locally"] = ""; @@ -2218,6 +2296,8 @@ $a->strings["Custom"] = "Personnalisé"; $a->strings["Note"] = "Remarque"; $a->strings["Check image permissions if all users are allowed to see the image"] = "Vérifier que tous les utilisateurs du site sont autorisés à voir l'image."; $a->strings["Select color scheme"] = "Choisir le schéma de couleurs"; +$a->strings["Copy or paste schemestring"] = ""; +$a->strings["You can copy this string to share your theme with others. Pasting here applies the schemestring"] = ""; $a->strings["Navigation bar background color"] = "Couleur d'arrière-plan de la barre de navigation"; $a->strings["Navigation bar icon color "] = "Couleur des icônes de la barre de navigation"; $a->strings["Link color"] = "Couleur des liens"; diff --git a/view/lang/it/messages.po b/view/lang/it/messages.po index 4ea1e3dce..ebe5fd4bf 100644 --- a/view/lang/it/messages.po +++ b/view/lang/it/messages.po @@ -12,13 +12,14 @@ # Mauro Batini.htconfig.php
. See the Config help page for "
-"help with the transition."
-msgstr "La configurazione di Friendica è adesso salvata in config/local.config.php: copia config/local-sample.config.php e sposta la tua configurazione da .htconfig.php
. Vedi la pagina della guida sulla Configurazione per avere aiuto con la transizione."
-
-#: mod/admin.php:943
-#, php-format
-msgid ""
-"Friendica's configuration now is stored in config/local.config.php, please "
-"copy config/local-sample.config.php and move your config from "
-"config/local.ini.php
. See the Config help "
-"page for help with the transition."
-msgstr "La configurazione di Friendica è adesso salvata in config/local.config.php: copia config/local-sample.config.php e sposta la tua configurazione da config/local.ini.php
. Vedi la pagina della guida sulla Configurazione per avere aiuto con la transizione."
-
-#: mod/admin.php:950
-#, php-format
-msgid ""
-"%s is not reachable on your system. This is a severe "
-"configuration issue that prevents server to server communication. See the installation page for help."
-msgstr "%s non è raggiungibile sul tuo sistema. È un grave problema di configurazione che impedisce la comunicazione da server a server. Vedi la pagina sull'installazione per un aiuto."
-
-#: mod/admin.php:956
-msgid "Normal Account"
-msgstr "Account normale"
-
-#: mod/admin.php:957
-msgid "Automatic Follower Account"
-msgstr "Account Follower Automatico"
-
-#: mod/admin.php:958
-msgid "Public Forum Account"
-msgstr "Account Forum Publico"
-
-#: mod/admin.php:959
-msgid "Automatic Friend Account"
-msgstr "Account per amicizia automatizzato"
-
-#: mod/admin.php:960
-msgid "Blog Account"
-msgstr "Account Blog"
-
-#: mod/admin.php:961
-msgid "Private Forum Account"
-msgstr "Account Forum Privato"
-
-#: mod/admin.php:984
-msgid "Message queues"
-msgstr "Code messaggi"
-
-#: mod/admin.php:990
-msgid "Server Settings"
-msgstr "Impostazioni Server"
-
-#: mod/admin.php:999
-msgid "Summary"
-msgstr "Sommario"
-
-#: mod/admin.php:1001
-msgid "Registered users"
-msgstr "Utenti registrati"
-
-#: mod/admin.php:1003
-msgid "Pending registrations"
-msgstr "Registrazioni in attesa"
-
-#: mod/admin.php:1004
-msgid "Version"
-msgstr "Versione"
-
-#: mod/admin.php:1009
-msgid "Active addons"
-msgstr "Addon attivi"
-
-#: mod/admin.php:1042
-msgid "Can not parse base url. Must have at least .htconfig.php
. See the Config help page for "
+"help with the transition."
+msgstr "La configurazione di Friendica è adesso salvata in config/local.config.php: copia config/local-sample.config.php e sposta la tua configurazione da .htconfig.php
. Vedi la pagina della guida sulla Configurazione per avere aiuto con la transizione."
+
+#: mod/admin.php:900
+#, php-format
+msgid ""
+"Friendica's configuration now is stored in config/local.config.php, please "
+"copy config/local-sample.config.php and move your config from "
+"config/local.ini.php
. See the Config help "
+"page for help with the transition."
+msgstr "La configurazione di Friendica è adesso salvata in config/local.config.php: copia config/local-sample.config.php e sposta la tua configurazione da config/local.ini.php
. Vedi la pagina della guida sulla Configurazione per avere aiuto con la transizione."
+
+#: mod/admin.php:907
+#, php-format
+msgid ""
+"%s is not reachable on your system. This is a severe "
+"configuration issue that prevents server to server communication. See the installation page for help."
+msgstr "%s non è raggiungibile sul tuo sistema. È un grave problema di configurazione che impedisce la comunicazione da server a server. Vedi la pagina sull'installazione per un aiuto."
+
+#: mod/admin.php:913
+msgid "Normal Account"
+msgstr "Account normale"
+
+#: mod/admin.php:914
+msgid "Automatic Follower Account"
+msgstr "Account Follower Automatico"
+
+#: mod/admin.php:915
+msgid "Public Forum Account"
+msgstr "Account Forum Publico"
+
+#: mod/admin.php:916
+msgid "Automatic Friend Account"
+msgstr "Account per amicizia automatizzato"
+
+#: mod/admin.php:917
+msgid "Blog Account"
+msgstr "Account Blog"
+
+#: mod/admin.php:918
+msgid "Private Forum Account"
+msgstr "Account Forum Privato"
+
+#: mod/admin.php:939
+msgid "Message queues"
+msgstr "Code messaggi"
+
+#: mod/admin.php:945
+msgid "Server Settings"
+msgstr "Impostazioni Server"
+
+#: mod/admin.php:954
+msgid "Summary"
+msgstr "Sommario"
+
+#: mod/admin.php:956
+msgid "Registered users"
+msgstr "Utenti registrati"
+
+#: mod/admin.php:958
+msgid "Pending registrations"
+msgstr "Registrazioni in attesa"
+
+#: mod/admin.php:959
+msgid "Version"
+msgstr "Versione"
+
+#: mod/admin.php:964
+msgid "Active addons"
+msgstr "Addon attivi"
+
+#: mod/admin.php:997
+msgid "Can not parse base url. Must have at least .htconfig.php
. See the Config help page for help with the transition."] = "La configurazione di Friendica è adesso salvata in config/local.config.php: copia config/local-sample.config.php e sposta la tua configurazione da .htconfig.php
. Vedi la pagina della guida sulla Configurazione per avere aiuto con la transizione.";
@@ -322,6 +813,7 @@ $a->strings["Pending registrations"] = "Registrazioni in attesa";
$a->strings["Version"] = "Versione";
$a->strings["Active addons"] = "Addon attivi";
$a->strings["Can not parse base url. Must have at least .htconfig.php
. See the Config help page for "
-"help with the transition."
-msgstr ""
-
-#: mod/admin.php:943
-#, php-format
-msgid ""
-"Friendica's configuration now is stored in config/local.config.php, please "
-"copy config/local-sample.config.php and move your config from "
-"config/local.ini.php
. See the Config help "
-"page for help with the transition."
-msgstr ""
-
-#: mod/admin.php:950
-#, php-format
-msgid ""
-"%s is not reachable on your system. This is a severe "
-"configuration issue that prevents server to server communication. See the installation page for help."
-msgstr "%s nie jest osiągalny w twoim systemie. Jest to poważny problem z konfiguracją, który uniemożliwia komunikację między serwerami. Zobacz pomoc na stronie instalacji."
-
-#: mod/admin.php:956
-msgid "Normal Account"
-msgstr "Konto normalne"
-
-#: mod/admin.php:957
-msgid "Automatic Follower Account"
-msgstr "Automatyczne konto obserwatora"
-
-#: mod/admin.php:958
-msgid "Public Forum Account"
-msgstr "Publiczne konto na forum"
-
-#: mod/admin.php:959
-msgid "Automatic Friend Account"
-msgstr "Automatyczny przyjaciel konta"
-
-#: mod/admin.php:960
-msgid "Blog Account"
-msgstr "Konto Bloga"
-
-#: mod/admin.php:961
-msgid "Private Forum Account"
-msgstr "Prywatne konto na forum"
-
-#: mod/admin.php:984
-msgid "Message queues"
-msgstr "Wiadomości"
-
-#: mod/admin.php:990
-msgid "Server Settings"
-msgstr "Ustawienia serwera"
-
-#: mod/admin.php:999
-msgid "Summary"
-msgstr "Podsumowanie"
-
-#: mod/admin.php:1001
-msgid "Registered users"
-msgstr "Zarejestrowani użytkownicy"
-
-#: mod/admin.php:1003
-msgid "Pending registrations"
-msgstr "Oczekujące rejestracje"
-
-#: mod/admin.php:1004
-msgid "Version"
-msgstr "Wersja"
-
-#: mod/admin.php:1009
-msgid "Active addons"
-msgstr "Aktywne dodatki"
-
-#: mod/admin.php:1042
-msgid "Can not parse base url. Must have at least .htconfig.php
. See the Config help page for "
+"help with the transition."
+msgstr ""
+
+#: src/Module/Admin/Summary.php:67
+#, php-format
+msgid ""
+"Friendica's configuration now is stored in config/local.config.php, please "
+"copy config/local-sample.config.php and move your config from "
+"config/local.ini.php
. See the Config help "
+"page for help with the transition."
+msgstr ""
+
+#: src/Module/Admin/Summary.php:73
+#, php-format
+msgid ""
+"%s is not reachable on your system. This is a severe "
+"configuration issue that prevents server to server communication. See the installation page for help."
+msgstr "%s nie jest osiągalny w twoim systemie. Jest to poważny problem z konfiguracją, który uniemożliwia komunikację między serwerami. Zobacz pomoc na stronie instalacji."
+
+#: src/Module/Admin/Summary.php:89
+#, php-format
+msgid ""
+"Friendica's system.basepath was updated from '%s' to '%s'. Please remove the"
+" system.basepath from your db to avoid differences."
+msgstr ""
+
+#: src/Module/Admin/Summary.php:97
+#, php-format
+msgid ""
+"Friendica's current system.basepath '%s' is wrong and the config file '%s' "
+"isn't used."
+msgstr ""
+
+#: src/Module/Admin/Summary.php:105
+#, php-format
+msgid ""
+"Friendica's current system.basepath '%s' is not equal to the config file "
+"'%s'. Please fix your configuration."
+msgstr ""
+
+#: src/Module/Admin/Summary.php:112
+msgid "Normal Account"
+msgstr "Konto normalne"
+
+#: src/Module/Admin/Summary.php:113
+msgid "Automatic Follower Account"
+msgstr "Automatyczne konto obserwatora"
+
+#: src/Module/Admin/Summary.php:114
+msgid "Public Forum Account"
+msgstr "Publiczne konto na forum"
+
+#: src/Module/Admin/Summary.php:115
+msgid "Automatic Friend Account"
+msgstr "Automatyczny przyjaciel konta"
+
+#: src/Module/Admin/Summary.php:116
+msgid "Blog Account"
+msgstr "Konto Bloga"
+
+#: src/Module/Admin/Summary.php:117
+msgid "Private Forum Account"
+msgstr "Prywatne konto na forum"
+
+#: src/Module/Admin/Summary.php:141
+msgid "Message queues"
+msgstr "Wiadomości"
+
+#: src/Module/Admin/Summary.php:147
+msgid "Server Settings"
+msgstr "Ustawienia serwera"
+
+#: src/Module/Admin/Summary.php:161
+msgid "Summary"
+msgstr "Podsumowanie"
+
+#: src/Module/Admin/Summary.php:163
+msgid "Registered users"
+msgstr "Zarejestrowani użytkownicy"
+
+#: src/Module/Admin/Summary.php:165
+msgid "Pending registrations"
+msgstr "Oczekujące rejestracje"
+
+#: src/Module/Admin/Summary.php:166
+msgid "Version"
+msgstr "Wersja"
+
+#: src/Module/Admin/Summary.php:170
+msgid "Active addons"
+msgstr "Aktywne dodatki"
+
+#: src/Module/Admin/Themes/Details.php:32 src/Module/Admin/Themes/Embed.php:46
+msgid "Theme settings updated."
+msgstr "Zaktualizowano ustawienia motywów."
+
+#: src/Module/Admin/Themes/Details.php:71 src/Module/Admin/Themes/Index.php:47
+#, php-format
+msgid "Theme %s disabled."
+msgstr "Motyw %s wyłączony."
+
+#: src/Module/Admin/Themes/Details.php:73 src/Module/Admin/Themes/Index.php:49
+#, php-format
+msgid "Theme %s successfully enabled."
+msgstr "Motyw %s został pomyślnie włączony."
+
+#: src/Module/Admin/Themes/Details.php:75 src/Module/Admin/Themes/Index.php:51
+#, php-format
+msgid "Theme %s failed to install."
+msgstr "Nie udało się zainstalować motywu %s."
+
+#: src/Module/Admin/Themes/Details.php:97
+msgid "Screenshot"
+msgstr "Zrzut ekranu"
+
+#: src/Module/Admin/Themes/Details.php:105
+#: src/Module/Admin/Themes/Index.php:94 src/Module/BaseAdminModule.php:83
+msgid "Themes"
+msgstr "Wygląd"
+
+#: src/Module/Admin/Themes/Embed.php:67
+msgid "Unknown theme."
+msgstr "Nieznany motyw."
+
+#: src/Module/Admin/Themes/Index.php:96
+msgid "Reload active themes"
+msgstr "Przeładuj aktywne motywy"
+
+#: src/Module/Admin/Themes/Index.php:101
+#, php-format
+msgid "No themes found on the system. They should be placed in %1$s"
+msgstr "Nie znaleziono motywów w systemie. Powinny zostać umieszczone %1$s"
+
+#: src/Module/Admin/Themes/Index.php:102
+msgid "[Experimental]"
+msgstr "[Eksperymentalne]"
+
+#: src/Module/Admin/Themes/Index.php:103
+msgid "[Unsupported]"
+msgstr "[Niewspieralne]"
+
+#: src/Module/Admin/Tos.php:30
+msgid "The Terms of Service settings have been updated."
+msgstr "Ustawienia Warunków korzystania z usługi zostały zaktualizowane."
+
+#: src/Module/Admin/Tos.php:44
+msgid "Display Terms of Service"
+msgstr "Wyświetl Warunki korzystania z usługi"
+
+#: src/Module/Admin/Tos.php:44
+msgid ""
+"Enable the Terms of Service page. If this is enabled a link to the terms "
+"will be added to the registration form and the general information page."
+msgstr "Włącz stronę Warunki świadczenia usług. Jeśli ta opcja jest włączona, link do warunków zostanie dodany do formularza rejestracyjnego i strony z informacjami ogólnymi."
+
+#: src/Module/Admin/Tos.php:45
+msgid "Display Privacy Statement"
+msgstr "Wyświetl oświadczenie o prywatności"
+
+#: src/Module/Admin/Tos.php:45
+#, php-format
+msgid ""
+"Show some informations regarding the needed information to operate the node "
+"according e.g. to EU-GDPR."
+msgstr "Pokaż niektóre informacje dotyczące potrzebnych informacji do obsługi węzła zgodnie np. do EU-GDPR."
+
+#: src/Module/Admin/Tos.php:46
+msgid "Privacy Statement Preview"
+msgstr "Podgląd oświadczenia o prywatności"
+
+#: src/Module/Admin/Tos.php:48
+msgid "The Terms of Service"
+msgstr "Warunki świadczenia usług"
+
+#: src/Module/Admin/Tos.php:48
+msgid ""
+"Enter the Terms of Service for your node here. You can use BBCode. Headers "
+"of sections should be [h2] and below."
+msgstr "Wprowadź tutaj Warunki świadczenia usług dla swojego węzła. Możesz użyć BBCode. Nagłówki sekcji powinny być [h2] i poniżej."
+
+#: src/Module/Admin/Users.php:48
+#, php-format
+msgid ""
+"\n"
+"\t\t\tDear %1$s,\n"
+"\t\t\t\tthe administrator of %2$s has set up an account for you."
+msgstr "\n\t\t\tSzanowny Użytkowniku %1$s, \n\t\t\t\tadministrator %2$s założył dla ciebie konto."
+
+#: src/Module/Admin/Users.php:51
+#, php-format
+msgid ""
+"\n"
+"\t\t\tThe login details are as follows:\n"
+"\n"
+"\t\t\tSite Location:\t%1$s\n"
+"\t\t\tLogin Name:\t\t%2$s\n"
+"\t\t\tPassword:\t\t%3$s\n"
+"\n"
+"\t\t\tYou may change your password from your account \"Settings\" page after logging\n"
+"\t\t\tin.\n"
+"\n"
+"\t\t\tPlease take a few moments to review the other account settings on that page.\n"
+"\n"
+"\t\t\tYou may also wish to add some basic information to your default profile\n"
+"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n"
+"\n"
+"\t\t\tWe recommend setting your full name, adding a profile photo,\n"
+"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n"
+"\t\t\tperhaps what country you live in; if you do not wish to be more specific\n"
+"\t\t\tthan that.\n"
+"\n"
+"\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n"
+"\t\t\tIf you are new and do not know anybody here, they may help\n"
+"\t\t\tyou to make some new and interesting friends.\n"
+"\n"
+"\t\t\tIf you ever want to delete your account, you can do so at %1$s/removeme\n"
+"\n"
+"\t\t\tThank you and welcome to %4$s."
+msgstr "\n\t\t\tDane logowania są następuje:\n\t\t\tLokalizacja witryny:\t%1$s\n\t\t\tNazwa użytkownika:%2$s\n\t\t\tHasło:%3$s\n\n\t\t\tPo zalogowaniu możesz zmienić hasło do swojego konta na stronie \"Ustawienia\".\n \t\t\tProszę poświęć chwilę, aby przejrzeć inne ustawienia konta na tej stronie.\n\n\t\t\tMożesz również dodać podstawowe informacje do swojego domyślnego profilu\n\t\t\t(na stronie \"Profil użytkownika\"), aby inne osoby mogły łatwo Cię znaleźć.\n\n\t\t\tZalecamy ustawienie imienia i nazwiska, dodanie zdjęcia profilowego,\n\t\t\tdodanie niektórych \"słów kluczowych\" profilu (bardzo przydatne w nawiązywaniu nowych znajomości) \n\t\t\ti być może gdzie mieszkasz; jeśli nie chcesz podać więcej szczegów.\n\n\t\t\tW pełni szanujemy Twoje prawo do prywatności i żaden z tych elementów nie jest konieczny.\n\t\t\tJeśli jesteś nowy i nie znasz tutaj nikogo, oni mogą ci pomóc,\n\t\t\tmożesz zdobyć nowych interesujących przyjaciół.\n\n\t\t\tJeśli kiedykolwiek zechcesz usunąć swoje konto, możesz to zrobić na stronie %1$s/removeme\n\n\t\t\tDziękujemy i Zapraszamy do%4$s"
+
+#: src/Module/Admin/Users.php:96
+#, php-format
+msgid "%s user blocked"
+msgid_plural "%s users blocked"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: src/Module/Admin/Users.php:102
+#, php-format
+msgid "%s user unblocked"
+msgid_plural "%s users unblocked"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: src/Module/Admin/Users.php:110 src/Module/Admin/Users.php:160
+msgid "You can't remove yourself"
+msgstr "Nie możesz usunąć siebie"
+
+#: src/Module/Admin/Users.php:114
+#, php-format
+msgid "%s user deleted"
+msgid_plural "%s users deleted"
+msgstr[0] "usunięto %s użytkownika"
+msgstr[1] "usunięto %s użytkowników"
+msgstr[2] "usunięto %s użytkowników"
+msgstr[3] "%s usuniętych użytkowników"
+
+#: src/Module/Admin/Users.php:158
+#, php-format
+msgid "User \"%s\" deleted"
+msgstr "Użytkownik \"%s\" usunięty"
+
+#: src/Module/Admin/Users.php:167
+#, php-format
+msgid "User \"%s\" blocked"
+msgstr "Użytkownik \"%s\" zablokowany"
+
+#: src/Module/Admin/Users.php:173
+#, php-format
+msgid "User \"%s\" unblocked"
+msgstr "Użytkownik \"%s\" odblokowany"
+
+#: src/Module/Admin/Users.php:226
+msgid "Private Forum"
+msgstr "Prywatne forum"
+
+#: src/Module/Admin/Users.php:233
+msgid "Relay"
+msgstr ""
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Register date"
+msgstr "Data rejestracji"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Last login"
+msgstr "Ostatnie logowanie"
+
+#: src/Module/Admin/Users.php:272 src/Module/Admin/Users.php:297
+msgid "Last item"
+msgstr "Ostatni element"
+
+#: src/Module/Admin/Users.php:272
+msgid "Type"
+msgstr "Typu"
+
+#: src/Module/Admin/Users.php:279
+msgid "Add User"
+msgstr "Dodaj użytkownika"
+
+#: src/Module/Admin/Users.php:281
+msgid "User registrations waiting for confirm"
+msgstr "Zarejestrowani użytkownicy czekający na potwierdzenie"
+
+#: src/Module/Admin/Users.php:282
+msgid "User waiting for permanent deletion"
+msgstr "Użytkownik czekający na trwałe usunięcie"
+
+#: src/Module/Admin/Users.php:283
+msgid "Request date"
+msgstr "Data prośby"
+
+#: src/Module/Admin/Users.php:284
+msgid "No registrations."
+msgstr "Brak rejestracji."
+
+#: src/Module/Admin/Users.php:285
+msgid "Note from the user"
+msgstr "Uwaga od użytkownika"
+
+#: src/Module/Admin/Users.php:287
+msgid "Deny"
+msgstr "Odmów"
+
+#: src/Module/Admin/Users.php:290
+msgid "User blocked"
+msgstr "Użytkownik zablokowany"
+
+#: src/Module/Admin/Users.php:292
+msgid "Site admin"
+msgstr "Administracja stroną"
+
+#: src/Module/Admin/Users.php:293
+msgid "Account expired"
+msgstr "Konto wygasło"
+
+#: src/Module/Admin/Users.php:296
+msgid "New User"
+msgstr "Nowy użytkownik"
+
+#: src/Module/Admin/Users.php:297
+msgid "Permanent deletion"
+msgstr "Trwałe usunięcie"
+
+#: src/Module/Admin/Users.php:302
+msgid ""
+"Selected users will be deleted!\\n\\nEverything these users had posted on "
+"this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr "Zaznaczeni użytkownicy zostaną usunięci!\\n\\n Wszystko co zamieścili na tej stronie będzie trwale skasowane!\\n\\n Jesteś pewien?"
+
+#: src/Module/Admin/Users.php:303
+msgid ""
+"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
+"site will be permanently deleted!\\n\\nAre you sure?"
+msgstr "Użytkownik {0} zostanie usunięty!\\n\\n Wszystko co zamieścił na tej stronie będzie trwale skasowane!\\n\\n Jesteś pewien?"
+
+#: src/Module/Admin/Users.php:313
+msgid "Name of the new user."
+msgstr "Nazwa nowego użytkownika."
+
+#: src/Module/Admin/Users.php:314
+msgid "Nickname"
+msgstr "Pseudonim"
+
+#: src/Module/Admin/Users.php:314
+msgid "Nickname of the new user."
+msgstr "Pseudonim nowego użytkownika."
+
+#: src/Module/Admin/Users.php:315
+msgid "Email address of the new user."
+msgstr "Adres email nowego użytkownika."
+
+#: src/Module/AllFriends.php:55
+msgid "No friends to display."
+msgstr "Brak znajomych do wyświetlenia."
+
+#: src/Module/Apps.php:29
+msgid "No installed applications."
+msgstr "Brak zainstalowanych aplikacji."
+
+#: src/Module/Apps.php:34
+msgid "Applications"
+msgstr "Aplikacje"
+
#: src/Module/Attach.php:36 src/Module/Attach.php:48
msgid "Item was not found."
msgstr "Element nie znaleziony."
+#: src/Module/Babel.php:31
+msgid "Source input"
+msgstr "Źródło wejściowe"
+
+#: src/Module/Babel.php:37
+msgid "BBCode::toPlaintext"
+msgstr "BBCode::na prosty tekst"
+
+#: src/Module/Babel.php:43
+msgid "BBCode::convert (raw HTML)"
+msgstr "BBCode:: konwersjia (raw HTML)"
+
+#: src/Module/Babel.php:48
+msgid "BBCode::convert"
+msgstr "BBCode::przekształć"
+
+#: src/Module/Babel.php:54
+msgid "BBCode::convert => HTML::toBBCode"
+msgstr "BBCode::przekształć => HTML::toBBCode"
+
+#: src/Module/Babel.php:60
+msgid "BBCode::toMarkdown"
+msgstr "BBCode::toMarkdown"
+
+#: src/Module/Babel.php:66
+msgid "BBCode::toMarkdown => Markdown::convert"
+msgstr "BBCode::toMarkdown => Markdown::przekształć"
+
+#: src/Module/Babel.php:72
+msgid "BBCode::toMarkdown => Markdown::toBBCode"
+msgstr "BBCode::toMarkdown => Markdown::toBBCode"
+
+#: src/Module/Babel.php:78
+msgid "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"
+msgstr "BBCode::toMarkdown => Markdown::przekształć => HTML::toBBCode"
+
+#: src/Module/Babel.php:89
+msgid "Item Body"
+msgstr ""
+
+#: src/Module/Babel.php:93
+msgid "Item Tags"
+msgstr ""
+
+#: src/Module/Babel.php:100
+msgid "Source input (Diaspora format)"
+msgstr "Źródło wejściowe (format Diaspora)"
+
+#: src/Module/Babel.php:106
+msgid "Markdown::convert (raw HTML)"
+msgstr "Markdown::convert (raw HTML)"
+
+#: src/Module/Babel.php:111
+msgid "Markdown::convert"
+msgstr "Markdown::convert"
+
+#: src/Module/Babel.php:117
+msgid "Markdown::toBBCode"
+msgstr "Markdown::toBBCode"
+
+#: src/Module/Babel.php:124
+msgid "Raw HTML input"
+msgstr "Surowe wejście HTML"
+
+#: src/Module/Babel.php:129
+msgid "HTML Input"
+msgstr "Wejście HTML"
+
+#: src/Module/Babel.php:135
+msgid "HTML::toBBCode"
+msgstr "HTML::toBBCode"
+
+#: src/Module/Babel.php:141
+msgid "HTML::toBBCode => BBCode::convert"
+msgstr "HTML::toBBCode => BBCode::convert"
+
+#: src/Module/Babel.php:146
+msgid "HTML::toBBCode => BBCode::convert (raw HTML)"
+msgstr "HTML::toBBCode => BBCode::convert (raw HTML)"
+
+#: src/Module/Babel.php:152
+msgid "HTML::toMarkdown"
+msgstr "HTML::toMarkdown"
+
+#: src/Module/Babel.php:158
+msgid "HTML::toPlaintext"
+msgstr "HTML::toPlaintext"
+
+#: src/Module/Babel.php:166
+msgid "Source text"
+msgstr "Tekst źródłowy"
+
+#: src/Module/Babel.php:167
+msgid "BBCode"
+msgstr "BBCode"
+
+#: src/Module/Babel.php:168
+msgid "Markdown"
+msgstr "Markdown"
+
+#: src/Module/Babel.php:169
+msgid "HTML"
+msgstr "HTML"
+
+#: src/Module/BaseAdminModule.php:76
+msgid "Overview"
+msgstr "Przegląd"
+
+#: src/Module/BaseAdminModule.php:79
+msgid "Configuration"
+msgstr "Konfiguracja"
+
+#: src/Module/BaseAdminModule.php:87
+msgid "Database"
+msgstr "Baza danych"
+
+#: src/Module/BaseAdminModule.php:88
+msgid "DB updates"
+msgstr "Aktualizacje DB"
+
+#: src/Module/BaseAdminModule.php:89
+msgid "Inspect Deferred Workers"
+msgstr "Sprawdź Odroczonych Pracowników"
+
+#: src/Module/BaseAdminModule.php:90
+msgid "Inspect worker Queue"
+msgstr "Sprawdź kolejkę pracowników"
+
+#: src/Module/BaseAdminModule.php:92
+msgid "Tools"
+msgstr "Narzędzia"
+
+#: src/Module/BaseAdminModule.php:93
+msgid "Contact Blocklist"
+msgstr "Lista zablokowanych kontaktów"
+
+#: src/Module/BaseAdminModule.php:101
+msgid "Diagnostics"
+msgstr "Diagnostyka"
+
+#: src/Module/BaseAdminModule.php:102
+msgid "PHP Info"
+msgstr "Informacje o PHP"
+
+#: src/Module/BaseAdminModule.php:103
+msgid "probe address"
+msgstr "adres sondy"
+
+#: src/Module/BaseAdminModule.php:104
+msgid "check webfinger"
+msgstr "sprawdź webfinger"
+
+#: src/Module/BaseAdminModule.php:105
+msgid "Item Source"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:106
+msgid "Babel"
+msgstr ""
+
+#: src/Module/BaseAdminModule.php:115
+msgid "Addon Features"
+msgstr "Funkcje dodatkowe"
+
+#: src/Module/BaseAdminModule.php:116
+msgid "User registrations waiting for confirmation"
+msgstr "Rejestracje użytkowników czekające na potwierdzenie"
+
+#: src/Module/Bookmarklet.php:35
+msgid "This page is missing a url parameter."
+msgstr "Na tej stronie brakuje parametru url."
+
+#: src/Module/Bookmarklet.php:57
+msgid "The post was created"
+msgstr "Post został utworzony"
+
#: src/Module/Contact.php:166
#, php-format
msgid "%d contact edited."
@@ -8910,453 +8695,688 @@ msgstr[1] "Zedytowano %d kontakty."
msgstr[2] "Zedytowano %d kontaktów."
msgstr[3] "%dedytuj kontakty."
-#: src/Module/Contact.php:191 src/Module/Contact.php:374
+#: src/Module/Contact.php:193 src/Module/Contact.php:377
msgid "Could not access contact record."
msgstr "Nie można uzyskać dostępu do rejestru kontaktów."
-#: src/Module/Contact.php:201
+#: src/Module/Contact.php:203
msgid "Could not locate selected profile."
msgstr "Nie można znaleźć wybranego profilu."
-#: src/Module/Contact.php:233
+#: src/Module/Contact.php:235
msgid "Contact updated."
msgstr "Zaktualizowano kontakt."
-#: src/Module/Contact.php:395
+#: src/Module/Contact.php:398
msgid "Contact has been blocked"
msgstr "Kontakt został zablokowany"
-#: src/Module/Contact.php:395
+#: src/Module/Contact.php:398
msgid "Contact has been unblocked"
msgstr "Kontakt został odblokowany"
-#: src/Module/Contact.php:405
+#: src/Module/Contact.php:408
msgid "Contact has been ignored"
msgstr "Kontakt jest ignorowany"
-#: src/Module/Contact.php:405
+#: src/Module/Contact.php:408
msgid "Contact has been unignored"
msgstr "Kontakt nie jest ignorowany"
-#: src/Module/Contact.php:415
+#: src/Module/Contact.php:418
msgid "Contact has been archived"
msgstr "Kontakt został zarchiwizowany"
-#: src/Module/Contact.php:415
+#: src/Module/Contact.php:418
msgid "Contact has been unarchived"
msgstr "Kontakt został przywrócony"
-#: src/Module/Contact.php:439
+#: src/Module/Contact.php:442
msgid "Drop contact"
msgstr "Usuń kontakt"
-#: src/Module/Contact.php:442 src/Module/Contact.php:820
+#: src/Module/Contact.php:445 src/Module/Contact.php:823
msgid "Do you really want to delete this contact?"
msgstr "Czy na pewno chcesz usunąć ten kontakt?"
-#: src/Module/Contact.php:456
+#: src/Module/Contact.php:459
msgid "Contact has been removed."
msgstr "Kontakt został usunięty."
-#: src/Module/Contact.php:486
+#: src/Module/Contact.php:489
#, php-format
msgid "You are mutual friends with %s"
msgstr "Jesteś już znajomym z %s"
-#: src/Module/Contact.php:491
+#: src/Module/Contact.php:494
#, php-format
msgid "You are sharing with %s"
msgstr "Współdzielisz z %s"
-#: src/Module/Contact.php:496
+#: src/Module/Contact.php:499
#, php-format
msgid "%s is sharing with you"
msgstr "%s współdzieli z tobą"
-#: src/Module/Contact.php:520
+#: src/Module/Contact.php:523
msgid "Private communications are not available for this contact."
msgstr "Nie można nawiązać prywatnej rozmowy z tym kontaktem."
-#: src/Module/Contact.php:522
+#: src/Module/Contact.php:525
msgid "Never"
msgstr "Nigdy"
-#: src/Module/Contact.php:525
+#: src/Module/Contact.php:528
msgid "(Update was successful)"
msgstr "(Aktualizacja przebiegła pomyślnie)"
-#: src/Module/Contact.php:525
+#: src/Module/Contact.php:528
msgid "(Update was not successful)"
msgstr "(Aktualizacja nie powiodła się)"
-#: src/Module/Contact.php:527 src/Module/Contact.php:1058
+#: src/Module/Contact.php:530 src/Module/Contact.php:1061
msgid "Suggest friends"
msgstr "Osoby, które możesz znać"
-#: src/Module/Contact.php:531
+#: src/Module/Contact.php:534
#, php-format
msgid "Network type: %s"
msgstr "Typ sieci: %s"
-#: src/Module/Contact.php:536
+#: src/Module/Contact.php:539
msgid "Communications lost with this contact!"
msgstr "Utracono komunikację z tym kontaktem!"
-#: src/Module/Contact.php:542
+#: src/Module/Contact.php:545
msgid "Fetch further information for feeds"
msgstr "Pobierz dalsze informacje dla kanałów"
-#: src/Module/Contact.php:544
+#: src/Module/Contact.php:547
msgid ""
"Fetch information like preview pictures, title and teaser from the feed "
"item. You can activate this if the feed doesn't contain much text. Keywords "
"are taken from the meta header in the feed item and are posted as hash tags."
msgstr "Pobieranie informacji, takich jak zdjęcia podglądu, tytuł i zwiastun z elementu kanału. Możesz to aktywować, jeśli plik danych nie zawiera dużo tekstu. Słowa kluczowe są pobierane z nagłówka meta w elemencie kanału i są publikowane jako znaczniki haszowania."
-#: src/Module/Contact.php:547
+#: src/Module/Contact.php:550
msgid "Fetch information"
msgstr "Pobierz informacje"
-#: src/Module/Contact.php:548
+#: src/Module/Contact.php:551
msgid "Fetch keywords"
msgstr "Pobierz słowa kluczowe"
-#: src/Module/Contact.php:549
+#: src/Module/Contact.php:552
msgid "Fetch information and keywords"
msgstr "Pobierz informacje i słowa kluczowe"
-#: src/Module/Contact.php:581
+#: src/Module/Contact.php:584
msgid "Profile Visibility"
msgstr "Widoczność profilu"
-#: src/Module/Contact.php:582
+#: src/Module/Contact.php:585
msgid "Contact Information / Notes"
msgstr "Informacje kontaktowe/Notatki"
-#: src/Module/Contact.php:583
+#: src/Module/Contact.php:586
msgid "Contact Settings"
msgstr "Ustawienia kontaktów"
-#: src/Module/Contact.php:592
+#: src/Module/Contact.php:595
msgid "Contact"
msgstr "Kontakt"
-#: src/Module/Contact.php:596
+#: src/Module/Contact.php:599
#, php-format
msgid ""
"Please choose the profile you would like to display to %s when viewing your "
"profile securely."
msgstr "Wybierz profil, który chcesz bezpiecznie wyświetlić %s"
-#: src/Module/Contact.php:598
+#: src/Module/Contact.php:601
msgid "Their personal note"
msgstr "Ich osobista uwaga"
-#: src/Module/Contact.php:600
+#: src/Module/Contact.php:603
msgid "Edit contact notes"
msgstr "Edytuj notatki kontaktu"
-#: src/Module/Contact.php:604
+#: src/Module/Contact.php:607
msgid "Block/Unblock contact"
msgstr "Zablokuj/odblokuj kontakt"
-#: src/Module/Contact.php:605
+#: src/Module/Contact.php:608
msgid "Ignore contact"
msgstr "Ignoruj kontakt"
-#: src/Module/Contact.php:606
+#: src/Module/Contact.php:609
msgid "Repair URL settings"
msgstr "Napraw ustawienia adresów URL"
-#: src/Module/Contact.php:607
+#: src/Module/Contact.php:610
msgid "View conversations"
msgstr "Wyświetl rozmowy"
-#: src/Module/Contact.php:612
+#: src/Module/Contact.php:615
msgid "Last update:"
msgstr "Ostatnia aktualizacja:"
-#: src/Module/Contact.php:614
+#: src/Module/Contact.php:617
msgid "Update public posts"
msgstr "Zaktualizuj publiczne posty"
-#: src/Module/Contact.php:616 src/Module/Contact.php:1068
+#: src/Module/Contact.php:619 src/Module/Contact.php:1071
msgid "Update now"
msgstr "Aktualizuj teraz"
-#: src/Module/Contact.php:622 src/Module/Contact.php:825
-#: src/Module/Contact.php:1085
+#: src/Module/Contact.php:625 src/Module/Contact.php:828
+#: src/Module/Contact.php:1088
msgid "Unignore"
msgstr "Odblokuj"
-#: src/Module/Contact.php:626
+#: src/Module/Contact.php:629
msgid "Currently blocked"
msgstr "Obecnie zablokowany"
-#: src/Module/Contact.php:627
+#: src/Module/Contact.php:630
msgid "Currently ignored"
msgstr "Obecnie zignorowany"
-#: src/Module/Contact.php:628
+#: src/Module/Contact.php:631
msgid "Currently archived"
msgstr "Obecnie zarchiwizowany"
-#: src/Module/Contact.php:629
+#: src/Module/Contact.php:632
msgid "Awaiting connection acknowledge"
msgstr "Oczekiwanie na potwierdzenie połączenia"
-#: src/Module/Contact.php:630
+#: src/Module/Contact.php:633
msgid ""
"Replies/likes to your public posts may still be visible"
msgstr "Odpowiedzi/kliknięcia \"lubię to\" do twoich publicznych postów nadal mogą być widoczne"
-#: src/Module/Contact.php:631
+#: src/Module/Contact.php:634
msgid "Notification for new posts"
msgstr "Powiadomienie o nowych postach"
-#: src/Module/Contact.php:631
+#: src/Module/Contact.php:634
msgid "Send a notification of every new post of this contact"
msgstr "Wyślij powiadomienie o każdym nowym poście tego kontaktu"
-#: src/Module/Contact.php:633
+#: src/Module/Contact.php:636
msgid "Blacklisted keywords"
msgstr "Słowa kluczowe na czarnej liście"
-#: src/Module/Contact.php:633
+#: src/Module/Contact.php:636
msgid ""
"Comma separated list of keywords that should not be converted to hashtags, "
"when \"Fetch information and keywords\" is selected"
msgstr "Rozdzielana przecinkami lista słów kluczowych, które nie powinny zostać przekonwertowane na hashtagi, gdy wybrana jest opcja 'Pobierz informacje i słowa kluczowe'"
-#: src/Module/Contact.php:650
+#: src/Module/Contact.php:653 src/Module/Settings/TwoFactor/Index.php:100
msgid "Actions"
msgstr "Akcja"
-#: src/Module/Contact.php:696
+#: src/Module/Contact.php:700
msgid "Suggestions"
msgstr "Sugestie"
-#: src/Module/Contact.php:699
+#: src/Module/Contact.php:703
msgid "Suggest potential friends"
msgstr "Sugerowani znajomi"
-#: src/Module/Contact.php:707
+#: src/Module/Contact.php:708 src/Module/Group.php:287
+msgid "All Contacts"
+msgstr "Wszystkie kontakty"
+
+#: src/Module/Contact.php:711
msgid "Show all contacts"
msgstr "Pokaż wszystkie kontakty"
-#: src/Module/Contact.php:712
+#: src/Module/Contact.php:716
msgid "Unblocked"
msgstr "Odblokowane"
-#: src/Module/Contact.php:715
+#: src/Module/Contact.php:719
msgid "Only show unblocked contacts"
msgstr "Pokaż tylko odblokowane kontakty"
-#: src/Module/Contact.php:720
+#: src/Module/Contact.php:724
msgid "Blocked"
msgstr "Zablokowane"
-#: src/Module/Contact.php:723
+#: src/Module/Contact.php:727
msgid "Only show blocked contacts"
msgstr "Pokaż tylko zablokowane kontakty"
-#: src/Module/Contact.php:728
+#: src/Module/Contact.php:732
msgid "Ignored"
msgstr "Ignorowane"
-#: src/Module/Contact.php:731
+#: src/Module/Contact.php:735
msgid "Only show ignored contacts"
msgstr "Pokaż tylko ignorowane kontakty"
-#: src/Module/Contact.php:736
+#: src/Module/Contact.php:740
msgid "Archived"
msgstr "Zarchiwizowane"
-#: src/Module/Contact.php:739
+#: src/Module/Contact.php:743
msgid "Only show archived contacts"
msgstr "Pokaż tylko zarchiwizowane kontakty"
-#: src/Module/Contact.php:744
+#: src/Module/Contact.php:748
msgid "Hidden"
msgstr "Ukryte"
-#: src/Module/Contact.php:747
+#: src/Module/Contact.php:751
msgid "Only show hidden contacts"
msgstr "Pokaż tylko ukryte kontakty"
-#: src/Module/Contact.php:755
+#: src/Module/Contact.php:759
msgid "Organize your contact groups"
msgstr "Uporządkuj swoje grupy kontaktów"
-#: src/Module/Contact.php:815
+#: src/Module/Contact.php:818
msgid "Search your contacts"
msgstr "Wyszukaj w kontaktach"
-#: src/Module/Contact.php:826 src/Module/Contact.php:1094
+#: src/Module/Contact.php:829 src/Module/Contact.php:1097
msgid "Archive"
msgstr "Archiwum"
-#: src/Module/Contact.php:826 src/Module/Contact.php:1094
+#: src/Module/Contact.php:829 src/Module/Contact.php:1097
msgid "Unarchive"
msgstr "Przywróć z archiwum"
-#: src/Module/Contact.php:829
+#: src/Module/Contact.php:832
msgid "Batch Actions"
msgstr "Akcje wsadowe"
-#: src/Module/Contact.php:856
+#: src/Module/Contact.php:859
msgid "Conversations started by this contact"
msgstr "Rozmowy rozpoczęły się od tego kontaktu"
-#: src/Module/Contact.php:861
+#: src/Module/Contact.php:864
msgid "Posts and Comments"
msgstr "Posty i komentarze"
-#: src/Module/Contact.php:884
+#: src/Module/Contact.php:887
msgid "View all contacts"
msgstr "Zobacz wszystkie kontakty"
-#: src/Module/Contact.php:895
+#: src/Module/Contact.php:898
msgid "View all common friends"
msgstr "Zobacz wszystkich popularnych znajomych"
-#: src/Module/Contact.php:905
+#: src/Module/Contact.php:908
msgid "Advanced Contact Settings"
msgstr "Zaawansowane ustawienia kontaktów"
-#: src/Module/Contact.php:991
+#: src/Module/Contact.php:994
msgid "Mutual Friendship"
msgstr "Wzajemna przyjaźń"
-#: src/Module/Contact.php:996
+#: src/Module/Contact.php:999
msgid "is a fan of yours"
msgstr "jest twoim fanem"
-#: src/Module/Contact.php:1001
+#: src/Module/Contact.php:1004
msgid "you are a fan of"
msgstr "jesteś fanem"
-#: src/Module/Contact.php:1025
+#: src/Module/Contact.php:1028
msgid "Edit contact"
msgstr "Edytuj kontakt"
-#: src/Module/Contact.php:1079
+#: src/Module/Contact.php:1082
msgid "Toggle Blocked status"
msgstr "Przełącz status na Zablokowany"
-#: src/Module/Contact.php:1087
+#: src/Module/Contact.php:1090
msgid "Toggle Ignored status"
msgstr "Przełącz status na Ignorowany"
-#: src/Module/Contact.php:1096
+#: src/Module/Contact.php:1099
msgid "Toggle Archive status"
msgstr "Przełącz status na Archiwalny"
-#: src/Module/Contact.php:1104
+#: src/Module/Contact.php:1107
msgid "Delete contact"
msgstr "Usuń kontakt"
-#: src/Module/Install.php:118
+#: src/Module/Credits.php:25
+msgid "Credits"
+msgstr "Zaufany"
+
+#: src/Module/Credits.php:26
+msgid ""
+"Friendica is a community project, that would not be possible without the "
+"help of many people. Here is a list of those who have contributed to the "
+"code or the translation of Friendica. Thank you all!"
+msgstr "Friendica to projekt społecznościowy, który nie byłby możliwy bez pomocy wielu osób. Oto lista osób, które przyczyniły się do tworzenia kodu lub tłumaczenia Friendica. Dziękuję wam wszystkim!"
+
+#: src/Module/Directory.php:66
+msgid "No entries (some entries may be hidden)."
+msgstr "Brak odwiedzin (niektóre odwiedziny mogą być ukryte)."
+
+#: src/Module/Directory.php:85
+msgid "Find on this site"
+msgstr "Znajdź na tej stronie"
+
+#: src/Module/Directory.php:87
+msgid "Results for:"
+msgstr "Wyniki dla:"
+
+#: src/Module/Directory.php:89
+msgid "Site Directory"
+msgstr "Katalog Witryny"
+
+#: src/Module/Feedtest.php:20 src/Module/Filer/SaveTag.php:20
+msgid "You must be logged in to use this module"
+msgstr "Musisz być zalogowany, aby korzystać z tego modułu"
+
+#: src/Module/Feedtest.php:49
+msgid "Source URL"
+msgstr "Źródłowy adres URL"
+
+#: src/Module/Filer/SaveTag.php:39
+#, php-format
+msgid "Filetag %s saved to item"
+msgstr ""
+
+#: src/Module/Filer/SaveTag.php:49
+msgid "- select -"
+msgstr "- wybierz -"
+
+#: src/Module/FollowConfirm.php:37
+msgid "No given contact."
+msgstr "Brak kontaktu."
+
+#: src/Module/Friendica.php:40
+msgid "Installed addons/apps:"
+msgstr "Zainstalowane dodatki/aplikacje:"
+
+#: src/Module/Friendica.php:45
+msgid "No installed addons/apps"
+msgstr "Brak zainstalowanych dodatków/aplikacji"
+
+#: src/Module/Friendica.php:50
+#, php-format
+msgid "Read about the Terms of Service of this node."
+msgstr "Przeczytaj o Warunkach świadczenia usług tego węzła."
+
+#: src/Module/Friendica.php:57
+msgid "On this server the following remote servers are blocked."
+msgstr "Na tym serwerze następujące serwery zdalne są blokowane."
+
+#: src/Module/Friendica.php:75
+#, php-format
+msgid ""
+"This is Friendica, version %s that is running at the web location %s. The "
+"database version is %s, the post update version is %s."
+msgstr "To jest wersja Friendica, %s która działa w lokalizacji internetowej %s. Wersja bazy danych to %s wersja po aktualizacji %s."
+
+#: src/Module/Friendica.php:80
+msgid ""
+"Please visit Friendi.ca to learn more "
+"about the Friendica project."
+msgstr "Odwiedź stronę Friendi.ca aby dowiedzieć się więcej o projekcie Friendica."
+
+#: src/Module/Friendica.php:81
+msgid "Bug reports and issues: please visit"
+msgstr "Raporty o błędach i problemy: odwiedź stronę"
+
+#: src/Module/Friendica.php:81
+msgid "the bugtracker at github"
+msgstr "śledzenie błędów na github"
+
+#: src/Module/Friendica.php:82
+msgid "Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca"
+msgstr "Propozycje, pochwały itd. – napisz e-mail do „info” małpa „friendi” - kropka - „ca”"
+
+#: src/Module/Group.php:42
+msgid "Group created."
+msgstr "Grupa utworzona."
+
+#: src/Module/Group.php:48
+msgid "Could not create group."
+msgstr "Nie można utworzyć grupy."
+
+#: src/Module/Group.php:59 src/Module/Group.php:207 src/Module/Group.php:233
+msgid "Group not found."
+msgstr "Nie znaleziono grupy."
+
+#: src/Module/Group.php:65
+msgid "Group name changed."
+msgstr "Zmieniono nazwę grupy."
+
+#: src/Module/Group.php:87
+msgid "Unknown group."
+msgstr "Nieznana grupa."
+
+#: src/Module/Group.php:96
+msgid "Contact is unavailable."
+msgstr "Kontakt jest niedostępny."
+
+#: src/Module/Group.php:100
+msgid "Contact is deleted."
+msgstr "Kontakt został usunięty."
+
+#: src/Module/Group.php:106
+msgid "Contact is blocked, unable to add it to a group."
+msgstr "Kontakt jest zablokowany, nie można go dodać do grupy."
+
+#: src/Module/Group.php:110
+msgid "Unable to add the contact to the group."
+msgstr "Nie można dodać kontaktu do grupy."
+
+#: src/Module/Group.php:112
+msgid "Contact successfully added to group."
+msgstr ""
+
+#: src/Module/Group.php:116
+msgid "Unable to remove the contact from the group."
+msgstr ""
+
+#: src/Module/Group.php:118
+msgid "Contact successfully removed from group."
+msgstr ""
+
+#: src/Module/Group.php:121
+msgid "Unknown group command."
+msgstr ""
+
+#: src/Module/Group.php:124
+msgid "Bad request."
+msgstr ""
+
+#: src/Module/Group.php:163
+msgid "Save Group"
+msgstr "Zapisz grupę"
+
+#: src/Module/Group.php:164
+msgid "Filter"
+msgstr "Filtr"
+
+#: src/Module/Group.php:170
+msgid "Create a group of contacts/friends."
+msgstr "Stwórz grupę znajomych."
+
+#: src/Module/Group.php:212
+msgid "Group removed."
+msgstr "Grupa usunięta."
+
+#: src/Module/Group.php:214
+msgid "Unable to remove group."
+msgstr "Nie można usunąć grupy."
+
+#: src/Module/Group.php:265
+msgid "Delete Group"
+msgstr "Usuń grupę"
+
+#: src/Module/Group.php:275
+msgid "Edit Group Name"
+msgstr "Edytuj nazwę grupy"
+
+#: src/Module/Group.php:285
+msgid "Members"
+msgstr "Członkowie"
+
+#: src/Module/Group.php:301
+msgid "Remove contact from group"
+msgstr "Usuń kontakt z grupy"
+
+#: src/Module/Group.php:335
+msgid "Add contact to group"
+msgstr "Dodaj kontakt do grupy"
+
+#: src/Module/Help.php:43
+msgid "Help:"
+msgstr "Pomoc:"
+
+#: src/Module/Home.php:42
+#, php-format
+msgid "Welcome to %s"
+msgstr "Witamy w %s"
+
+#: src/Module/Install.php:158
msgid "Friendica Communications Server - Setup"
msgstr "Friendica Communications Server - Instalator"
-#: src/Module/Install.php:129
+#: src/Module/Install.php:169
msgid "System check"
msgstr "Sprawdzanie systemu"
-#: src/Module/Install.php:134
+#: src/Module/Install.php:174
msgid "Check again"
msgstr "Sprawdź ponownie"
-#: src/Module/Install.php:151
+#: src/Module/Install.php:189
+msgid "Base settings"
+msgstr ""
+
+#: src/Module/Install.php:196
+msgid "Host name"
+msgstr "Nazwa hosta"
+
+#: src/Module/Install.php:198
+msgid ""
+"Overwrite this field in case the determinated hostname isn't right, "
+"otherweise leave it as is."
+msgstr ""
+
+#: src/Module/Install.php:201
+msgid "Base path to installation"
+msgstr "Podstawowa ścieżka do instalacji"
+
+#: src/Module/Install.php:203
+msgid ""
+"If the system cannot detect the correct path to your installation, enter the"
+" correct path here. This setting should only be set if you are using a "
+"restricted system and symbolic links to your webroot."
+msgstr "Jeśli system nie może wykryć poprawnej ścieżki do instalacji, wprowadź tutaj poprawną ścieżkę. To ustawienie powinno być ustawione tylko wtedy, gdy używasz ograniczonego systemu i dowiązań symbolicznych do twojego webroota."
+
+#: src/Module/Install.php:206
+msgid "Sub path of the URL"
+msgstr ""
+
+#: src/Module/Install.php:208
+msgid ""
+"Overwrite this field in case the sub path determination isn't right, "
+"otherwise leave it as is. Leaving this field blank means the installation is"
+" at the base URL without sub path."
+msgstr ""
+
+#: src/Module/Install.php:219
msgid "Database connection"
msgstr "Połączenie z bazą danych"
-#: src/Module/Install.php:152
+#: src/Module/Install.php:220
msgid ""
"In order to install Friendica we need to know how to connect to your "
"database."
msgstr "W celu zainstalowania Friendica musimy wiedzieć jak połączyć się z twoją bazą danych."
-#: src/Module/Install.php:153
+#: src/Module/Install.php:221
msgid ""
"Please contact your hosting provider or site administrator if you have "
"questions about these settings."
msgstr "Proszę skontaktuj się ze swoim dostawcą usług hostingowych bądź administratorem strony jeśli masz pytania co do tych ustawień ."
-#: src/Module/Install.php:154
+#: src/Module/Install.php:222
msgid ""
"The database you specify below should already exist. If it does not, please "
"create it before continuing."
msgstr "Wymieniona przez Ciebie baza danych powinna już istnieć. Jeżeli nie, utwórz ją przed kontynuacją."
-#: src/Module/Install.php:157
+#: src/Module/Install.php:229
msgid "Database Server Name"
msgstr "Nazwa serwera bazy danych"
-#: src/Module/Install.php:162
+#: src/Module/Install.php:234
msgid "Database Login Name"
msgstr "Nazwa użytkownika bazy danych"
-#: src/Module/Install.php:168
+#: src/Module/Install.php:240
msgid "Database Login Password"
msgstr "Hasło logowania do bazy danych"
-#: src/Module/Install.php:170
+#: src/Module/Install.php:242
msgid "For security reasons the password must not be empty"
msgstr "Ze względów bezpieczeństwa hasło nie może być puste"
-#: src/Module/Install.php:173
+#: src/Module/Install.php:245
msgid "Database Name"
msgstr "Nazwa bazy danych"
-#: src/Module/Install.php:178 src/Module/Install.php:214
+#: src/Module/Install.php:249 src/Module/Install.php:278
+msgid "Please select a default timezone for your website"
+msgstr "Proszę wybrać domyślną strefę czasową dla swojej strony"
+
+#: src/Module/Install.php:263
+msgid "Site settings"
+msgstr "Ustawienia strony"
+
+#: src/Module/Install.php:273
msgid "Site administrator email address"
msgstr "Adres e-mail administratora strony"
-#: src/Module/Install.php:180 src/Module/Install.php:214
+#: src/Module/Install.php:275
msgid ""
"Your account email address must match this in order to use the web admin "
"panel."
msgstr "Adres e-mail konta musi pasować do tego, aby móc korzystać z panelu administracyjnego."
-#: src/Module/Install.php:184 src/Module/Install.php:215
-msgid "Please select a default timezone for your website"
-msgstr "Proszę wybrać domyślną strefę czasową dla swojej strony"
-
-#: src/Module/Install.php:208
-msgid "Site settings"
-msgstr "Ustawienia strony"
-
-#: src/Module/Install.php:217
+#: src/Module/Install.php:282
msgid "System Language:"
msgstr "Język systemu:"
-#: src/Module/Install.php:219
+#: src/Module/Install.php:284
msgid ""
"Set the default language for your Friendica installation interface and to "
"send emails."
msgstr "Ustaw domyślny język dla interfejsu instalacyjnego Friendica i wysyłaj e-maile."
-#: src/Module/Install.php:231
+#: src/Module/Install.php:296
msgid "Your Friendica site database has been installed."
msgstr "Twoja baza danych witryny Friendica została zainstalowana."
-#: src/Module/Install.php:239
+#: src/Module/Install.php:304
msgid "Installation finished"
msgstr "Instalacja zakończona"
-#: src/Module/Install.php:261
+#: src/Module/Install.php:326
msgid "Use an application on a mobile device to get two-factor authentication " +"codes when prompted on login.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:90 +msgid "Authenticator app" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:91 +msgid "Configured" +msgstr "Skonfigurowane" + +#: src/Module/Settings/TwoFactor/Index.php:91 +msgid "Not Configured" +msgstr "Nie skonfigurowane" + +#: src/Module/Settings/TwoFactor/Index.php:92 +msgid "You haven't finished configuring your authenticator app.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:93 +msgid "Your authenticator app is correctly configured.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:95 +msgid "Recovery codes" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:96 +msgid "Remaining valid codes" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:98 +msgid "" +"These one-use codes can replace an authenticator app code in case you " +"have lost access to it.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:101 +msgid "Current password:" +msgstr "Aktualne hasło:" + +#: src/Module/Settings/TwoFactor/Index.php:101 +msgid "" +"You need to provide your current password to change two-factor " +"authentication settings." +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:102 +msgid "Enable two-factor authentication" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:103 +msgid "Disable two-factor authentication" +msgstr "" + +#: src/Module/Settings/TwoFactor/Index.php:104 +msgid "Show recovery codes" +msgstr "Pokaż kody odzyskiwania" + +#: src/Module/Settings/TwoFactor/Index.php:105 +msgid "Finish app configuration" +msgstr "Zakończ konfigurację aplikacji" + +#: src/Module/Settings/TwoFactor/Recovery.php:34 +#: src/Module/Settings/TwoFactor/Verify.php:41 +msgid "Please enter your password to access this page." +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:50 +msgid "New recovery codes successfully generated." +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:76 +msgid "Two-factor recovery codes" +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:78 +msgid "" +"Recovery codes can be used to access your account in the event you lose " +"access to your device and cannot receive two-factor authentication " +"codes.
Put these in a safe spot! If you lose your " +"device and don’t have the recovery codes you will lose access to your " +"account.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:80 +msgid "" +"When you generate new recovery codes, you must copy the new codes. Your old " +"codes won’t work anymore." +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:81 +msgid "Generate new recovery codes" +msgstr "" + +#: src/Module/Settings/TwoFactor/Recovery.php:83 +msgid "Next: Verification" +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:63 +msgid "Two-factor authentication successfully activated." +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:67 +#: src/Module/TwoFactor/Recovery.php:46 src/Module/TwoFactor/Verify.php:41 +msgid "Invalid code, please retry." +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:96 +#, php-format +msgid "" +"Or you can submit the authentication settings manually:
\n" +"Please scan this QR Code with your authenticator app and submit the " +"provided code.
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:120 +#, php-format +msgid "" +"Or you can open the following URL in your mobile devicde:
" +msgstr "" + +#: src/Module/Settings/TwoFactor/Verify.php:126 +#: src/Module/TwoFactor/Verify.php:63 +msgid "Please enter a code from your authentication app" +msgstr "Wprowadź kod z aplikacji uwierzytelniającej" + +#: src/Module/Settings/TwoFactor/Verify.php:127 +msgid "Verify code and enable two-factor authentication" +msgstr "Sprawdź kod i włącz uwierzytelnianie dwuskładnikowe" + +#: src/Module/Special/HTTPException.php:32 +msgid "Bad Request" +msgstr "Nieprawidłowe żądanie" + +#: src/Module/Special/HTTPException.php:33 +msgid "Unauthorized" +msgstr "Nieautoryzowane" + +#: src/Module/Special/HTTPException.php:34 +msgid "Forbidden" +msgstr "Zabronione" + +#: src/Module/Special/HTTPException.php:35 +msgid "Not Found" +msgstr "Nie znaleziono" + +#: src/Module/Special/HTTPException.php:36 +msgid "Internal Server Error" +msgstr "" + +#: src/Module/Special/HTTPException.php:37 +msgid "Service Unavailable" +msgstr "" + +#: src/Module/Special/HTTPException.php:44 +msgid "" +"The server cannot or will not process the request due to an apparent client " +"error." +msgstr "Serwer nie może lub nie będzie przetwarzać żądania z powodu widocznego błędu klienta." + +#: src/Module/Special/HTTPException.php:45 +msgid "" +"Authentication is required and has failed or has not yet been provided." +msgstr "Uwierzytelnienie jest wymagane i nie powiodło się lub nie zostało jeszcze dostarczone." + +#: src/Module/Special/HTTPException.php:46 +msgid "" +"The request was valid, but the server is refusing action. The user might not" +" have the necessary permissions for a resource, or may need an account." +msgstr "Żądanie było ważne, ale serwer odmawia działania. Użytkownik może nie mieć wymaganych uprawnień do zasobu lub może potrzebować konta." + +#: src/Module/Special/HTTPException.php:47 +msgid "" +"The requested resource could not be found but may be available in the " +"future." +msgstr "Żądany zasób nie został znaleziony, ale może być dostępny w przyszłości." + +#: src/Module/Special/HTTPException.php:48 +msgid "" +"An unexpected condition was encountered and no more specific message is " +"suitable." +msgstr "Napotkano nieoczekiwany warunek i nie jest odpowiedni żaden bardziej szczegółowy komunikat." + +#: src/Module/Special/HTTPException.php:49 +msgid "" +"The server is currently unavailable (because it is overloaded or down for " +"maintenance). Please try again later." +msgstr "Serwer jest obecnie niedostępny (ponieważ jest przeciążony lub wyłączony z powodu konserwacji). Spróbuj ponownie później." + +#: src/Module/Special/HTTPException.php:55 +msgid "Go back" +msgstr "Wróć" + #: src/Module/Tos.php:35 src/Module/Tos.php:77 msgid "" "At the time of registration, and for providing communications between the " @@ -9556,128 +9940,170 @@ msgstr "W dowolnym momencie zalogowany użytkownik może wyeksportować dane swo msgid "Privacy Statement" msgstr "Oświadczenie o prywatności" -#: src/Object/Post.php:136 +#: src/Module/TwoFactor/Recovery.php:41 +#, php-format +msgid "Remaining recovery codes: %d" +msgstr "" + +#: src/Module/TwoFactor/Recovery.php:65 +msgid "Two-factor recovery" +msgstr "" + +#: src/Module/TwoFactor/Recovery.php:66 +msgid "" +"You can enter one of your one-time recovery codes in case you lost access" +" to your mobile device.
" +msgstr "" + +#: src/Module/TwoFactor/Recovery.php:67 src/Module/TwoFactor/Verify.php:62 +#, php-format +msgid "Don’t have your phone? Enter a two-factor recovery code" +msgstr "" + +#: src/Module/TwoFactor/Recovery.php:68 +msgid "Please enter a recovery code" +msgstr "" + +#: src/Module/TwoFactor/Recovery.php:69 +msgid "Submit recovery code and complete login" +msgstr "" + +#: src/Module/TwoFactor/Verify.php:61 +msgid "" +"Open the two-factor authentication app on your device to get an " +"authentication code and verify your identity.
" +msgstr "" + +#: src/Module/TwoFactor/Verify.php:64 +msgid "Verify code and complete login" +msgstr "" + +#: src/Object/Post.php:137 msgid "This entry was edited" msgstr "Ten wpis został zedytowany" -#: src/Object/Post.php:198 +#: src/Object/Post.php:157 +msgid "Private Message" +msgstr "Wiadomość prywatna" + +#: src/Object/Post.php:199 msgid "Delete locally" msgstr "Usuń lokalnie" -#: src/Object/Post.php:201 +#: src/Object/Post.php:202 msgid "Delete globally" msgstr "Usuń globalnie" -#: src/Object/Post.php:201 +#: src/Object/Post.php:202 msgid "Remove locally" msgstr "Usuń lokalnie" -#: src/Object/Post.php:215 +#: src/Object/Post.php:216 msgid "save to folder" msgstr "zapisz w folderze" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I will attend" msgstr "Będę uczestniczyć" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I will not attend" msgstr "Nie będę uczestniczyć" -#: src/Object/Post.php:250 +#: src/Object/Post.php:251 msgid "I might attend" msgstr "Mogę wziąć udział" -#: src/Object/Post.php:278 +#: src/Object/Post.php:279 msgid "ignore thread" msgstr "zignoruj wątek" -#: src/Object/Post.php:279 +#: src/Object/Post.php:280 msgid "unignore thread" msgstr "odignoruj wątek" -#: src/Object/Post.php:280 +#: src/Object/Post.php:281 msgid "toggle ignore status" msgstr "przełącz status ignorowania" -#: src/Object/Post.php:291 +#: src/Object/Post.php:292 msgid "add star" msgstr "dodaj gwiazdkę" -#: src/Object/Post.php:292 +#: src/Object/Post.php:293 msgid "remove star" msgstr "anuluj gwiazdkę" -#: src/Object/Post.php:293 +#: src/Object/Post.php:294 msgid "toggle star status" msgstr "włącz status gwiazdy" -#: src/Object/Post.php:296 +#: src/Object/Post.php:297 msgid "starred" msgstr "gwiazdką" -#: src/Object/Post.php:300 +#: src/Object/Post.php:301 msgid "add tag" msgstr "dodaj tag" -#: src/Object/Post.php:311 +#: src/Object/Post.php:312 msgid "like" msgstr "lubię to" -#: src/Object/Post.php:312 +#: src/Object/Post.php:313 msgid "dislike" msgstr "nie lubię tego" -#: src/Object/Post.php:315 +#: src/Object/Post.php:316 msgid "Share this" msgstr "Udostępnij to" -#: src/Object/Post.php:315 +#: src/Object/Post.php:316 msgid "share" msgstr "udostępnij" -#: src/Object/Post.php:382 +#: src/Object/Post.php:384 msgid "to" msgstr "do" -#: src/Object/Post.php:383 +#: src/Object/Post.php:385 msgid "via" msgstr "przez" -#: src/Object/Post.php:384 +#: src/Object/Post.php:386 msgid "Wall-to-Wall" msgstr "Wall-to-Wall" -#: src/Object/Post.php:385 +#: src/Object/Post.php:387 msgid "via Wall-To-Wall:" msgstr "via Wall-To-Wall:" -#: src/Object/Post.php:418 +#: src/Object/Post.php:420 #, php-format msgid "Reply to %s" msgstr "Odpowiedź %s" -#: src/Object/Post.php:433 +#: src/Object/Post.php:435 msgid "Notifier task is pending" msgstr "Zadanie Notifier jest w toku" -#: src/Object/Post.php:434 +#: src/Object/Post.php:436 msgid "Delivery to remote servers is pending" msgstr "Trwa przesyłanie do serwerów zdalnych" -#: src/Object/Post.php:435 +#: src/Object/Post.php:437 msgid "Delivery to remote servers is underway" msgstr "Trwa dostawa do serwerów zdalnych" -#: src/Object/Post.php:436 +#: src/Object/Post.php:438 msgid "Delivery to remote servers is mostly done" msgstr "Dostawa do zdalnych serwerów jest w większości wykonywana" -#: src/Object/Post.php:437 +#: src/Object/Post.php:439 msgid "Delivery to remote servers is done" msgstr "Trwa dostarczanie do zdalnych serwerów" -#: src/Object/Post.php:457 +#: src/Object/Post.php:459 #, php-format msgid "%d comment" msgid_plural "%d comments" @@ -9686,37 +10112,37 @@ msgstr[1] "%d komentarze" msgstr[2] "%d komentarzy" msgstr[3] "%d komentarzy" -#: src/Object/Post.php:458 +#: src/Object/Post.php:460 msgid "Show more" msgstr "Pokaż więcej" -#: src/Object/Post.php:459 +#: src/Object/Post.php:461 msgid "Show fewer" msgstr "Pokaż mniej" -#: src/Protocol/Diaspora.php:2496 +#: src/Protocol/Diaspora.php:2438 msgid "Sharing notification from Diaspora network" msgstr "Wspólne powiadomienie z sieci Diaspora" -#: src/Protocol/Diaspora.php:3613 +#: src/Protocol/Diaspora.php:3598 msgid "Attachments:" msgstr "Załączniki:" -#: src/Protocol/OStatus.php:1866 +#: src/Protocol/OStatus.php:1863 #, php-format msgid "%s is now following %s." msgstr "%s zaczął(-ęła) obserwować %s." -#: src/Protocol/OStatus.php:1867 +#: src/Protocol/OStatus.php:1864 msgid "following" msgstr "następujący" -#: src/Protocol/OStatus.php:1870 +#: src/Protocol/OStatus.php:1867 #, php-format msgid "%s stopped following %s." msgstr "%s przestał(a) obserwować %s." -#: src/Protocol/OStatus.php:1871 +#: src/Protocol/OStatus.php:1868 msgid "stopped following" msgstr "przestał śledzić" @@ -9786,16 +10212,16 @@ msgstr "w %1$d %2$s" msgid "%1$d %2$s ago" msgstr "%1$d %2$s temu" -#: src/Worker/Delivery.php:453 +#: src/Worker/Delivery.php:450 msgid "(no subject)" msgstr "(bez tematu)" -#: update.php:217 +#: update.php:218 #, php-format msgid "%s: Updating author-id and owner-id in item and thread table. " msgstr "%s: Aktualizowanie ID autora i właściciela w tabeli pozycji i wątku. " -#: update.php:272 +#: update.php:273 #, php-format msgid "%s: Updating post-type." msgstr "%s: Aktualizowanie typu postu." @@ -9824,63 +10250,73 @@ msgstr "comix" msgid "slackr" msgstr "luźny" -#: view/theme/duepuntozero/config.php:75 +#: view/theme/duepuntozero/config.php:74 msgid "Variations" msgstr "Zmiana" -#: view/theme/frio/config.php:103 +#: view/theme/frio/config.php:105 msgid "Custom" msgstr "Niestandardowe" -#: view/theme/frio/config.php:115 +#: view/theme/frio/config.php:117 msgid "Note" msgstr "Uwaga" -#: view/theme/frio/config.php:115 +#: view/theme/frio/config.php:117 msgid "Check image permissions if all users are allowed to see the image" msgstr "Sprawdź uprawnienia do zdjęć, jeśli wszyscy użytkownicy mogą zobaczyć obraz" -#: view/theme/frio/config.php:122 +#: view/theme/frio/config.php:123 msgid "Select color scheme" msgstr "Wybierz schemat kolorów" -#: view/theme/frio/config.php:123 +#: view/theme/frio/config.php:124 +msgid "Copy or paste schemestring" +msgstr "" + +#: view/theme/frio/config.php:124 +msgid "" +"You can copy this string to share your theme with others. Pasting here " +"applies the schemestring" +msgstr "" + +#: view/theme/frio/config.php:125 msgid "Navigation bar background color" msgstr "Kolor tła paska nawigacyjnego" -#: view/theme/frio/config.php:124 +#: view/theme/frio/config.php:126 msgid "Navigation bar icon color " msgstr "Kolor ikon na pasku nawigacyjnym " -#: view/theme/frio/config.php:125 +#: view/theme/frio/config.php:127 msgid "Link color" msgstr "Kolor łączy" -#: view/theme/frio/config.php:126 +#: view/theme/frio/config.php:128 msgid "Set the background color" msgstr "Ustaw kolor tła" -#: view/theme/frio/config.php:127 +#: view/theme/frio/config.php:129 msgid "Content background opacity" msgstr "Nieprzezroczystość tła treści" -#: view/theme/frio/config.php:128 +#: view/theme/frio/config.php:130 msgid "Set the background image" msgstr "Ustaw obraz tła" -#: view/theme/frio/config.php:129 +#: view/theme/frio/config.php:131 msgid "Background image style" msgstr "Styl tła" -#: view/theme/frio/config.php:134 +#: view/theme/frio/config.php:136 msgid "Login page background image" msgstr "Obraz tła strony logowania" -#: view/theme/frio/config.php:138 +#: view/theme/frio/config.php:140 msgid "Login page background color" msgstr "Kolor tła strony logowania" -#: view/theme/frio/config.php:138 +#: view/theme/frio/config.php:140 msgid "Leave background image and color empty for theme defaults" msgstr "Pozostaw obraz tła i kolor pusty dla domyślnych ustawień kompozycji" @@ -9928,27 +10364,27 @@ msgstr "Gość" msgid "Visitor" msgstr "Odwiedzający" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Alignment" msgstr "Wyrównanie" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Left" msgstr "Lewo" -#: view/theme/quattro/config.php:77 +#: view/theme/quattro/config.php:76 msgid "Center" msgstr "Środek" -#: view/theme/quattro/config.php:78 +#: view/theme/quattro/config.php:77 msgid "Color scheme" msgstr "Zestaw kolorów" -#: view/theme/quattro/config.php:79 +#: view/theme/quattro/config.php:78 msgid "Posts font size" msgstr "Rozmiar czcionki postów" -#: view/theme/quattro/config.php:80 +#: view/theme/quattro/config.php:79 msgid "Textareas font size" msgstr "Rozmiar czcionki Textareas" @@ -9956,31 +10392,31 @@ msgstr "Rozmiar czcionki Textareas" msgid "Comma separated list of helper forums" msgstr "Lista pomocników oddzielona przecinkami" -#: view/theme/vier/config.php:123 +#: view/theme/vier/config.php:122 msgid "Set style" msgstr "Ustaw styl" -#: view/theme/vier/config.php:124 +#: view/theme/vier/config.php:123 msgid "Community Pages" msgstr "Strony społeczności" -#: view/theme/vier/config.php:125 view/theme/vier/theme.php:151 +#: view/theme/vier/config.php:124 view/theme/vier/theme.php:151 msgid "Community Profiles" msgstr "Profile społeczności" -#: view/theme/vier/config.php:126 +#: view/theme/vier/config.php:125 msgid "Help or @NewHere ?" msgstr "Pomóż lub @NowyTutaj?" -#: view/theme/vier/config.php:127 view/theme/vier/theme.php:373 +#: view/theme/vier/config.php:126 view/theme/vier/theme.php:373 msgid "Connect Services" msgstr "Połączone serwisy" -#: view/theme/vier/config.php:128 +#: view/theme/vier/config.php:127 msgid "Find Friends" msgstr "Znajdź znajomych" -#: view/theme/vier/config.php:129 view/theme/vier/theme.php:181 +#: view/theme/vier/config.php:128 view/theme/vier/theme.php:181 msgid "Last users" msgstr "Ostatni użytkownicy" diff --git a/view/lang/pl/strings.php b/view/lang/pl/strings.php index 723915934..cab47a201 100644 --- a/view/lang/pl/strings.php +++ b/view/lang/pl/strings.php @@ -43,6 +43,7 @@ $a->strings["Attending"] = [ ]; $a->strings["Not attending"] = "Nie uczestniczę"; $a->strings["Might attend"] = "Może wziąć udział"; +$a->strings["Reshares"] = "Udostępnianie"; $a->strings["Select"] = "Wybierz"; $a->strings["Delete"] = "Usuń"; $a->strings["View %s's profile @ %s"] = "Pokaż %s's profil @ %s"; @@ -60,6 +61,8 @@ $a->strings["View Photos"] = "Zobacz zdjęcia"; $a->strings["Network Posts"] = "Wiadomości sieciowe"; $a->strings["View Contact"] = "Pokaż kontakt"; $a->strings["Send PM"] = "Wyślij prywatną wiadomość"; +$a->strings["Block"] = "Zablokuj"; +$a->strings["Ignore"] = "Ignoruj"; $a->strings["Poke"] = "Zaczepka"; $a->strings["Connect/Follow"] = "Połącz/Obserwuj"; $a->strings["%s likes this."] = "%s lubi to."; @@ -67,6 +70,7 @@ $a->strings["%s doesn't like this."] = "%s nie lubi tego."; $a->strings["%s attends."] = "%s uczestniczy."; $a->strings["%s doesn't attend."] = "%s nie uczestniczy."; $a->strings["%s attends maybe."] = "%s może bierze udział."; +$a->strings["%s reshared this."] = "%sudostępnił to. "; $a->strings["and"] = "i"; $a->strings["and %d other people"] = "i %d inni ludzie"; $a->strings["%2\$d people like this"] = "%2\$d ludzi lubi to"; @@ -79,6 +83,7 @@ $a->strings["%2\$d people don't attend"] = "%2\ $a->strings["%s don't attend."] = "%s nie uczestniczy."; $a->strings["%2\$d people attend maybe"] = "Możliwe, że %2\$d osoby będą uczestniczyć"; $a->strings["%s attend maybe."] = "%sbyć może uczestniczyć."; +$a->strings["%2\$d people reshared this"] = ""; $a->strings["Visible to everybody"] = "Widoczne dla wszystkich"; $a->strings["Please enter a image/video/audio/webpage URL:"] = "Wprowadź adres URL obrazu/wideo/audio/strony:"; $a->strings["Tag term:"] = "Termin tagu:"; @@ -151,7 +156,7 @@ $a->strings["%1\$s sent you %2\$s."] = "%1\$s wysłał(-a) ci %2\$s."; $a->strings["Please visit %s to view and/or reply to your private messages."] = "Odwiedź %s, aby zobaczyć i/lub odpowiedzieć na twoje prywatne wiadomości."; $a->strings["%1\$s tagged you on [url=%2\$s]a %3\$s[/url]"] = "%1\$s oznaczył(-a) Cię w [url=%2\$s]%3\$s[/url]"; $a->strings["%1\$s commented on [url=%2\$s]a %3\$s[/url]"] = "%1\$s skomentował [url=%2\$s]a %3\$s[/url]"; -$a->strings["%1\$s tagged you on [url=%2\$s]%3\$s's %4\$s[/url]"] = ""; +$a->strings["%1\$s tagged you on [url=%2\$s]%3\$s's %4\$s[/url]"] = "%1\$s otagowałem Cię [url=%2\$s]%3\$s's %4\$s[/url]"; $a->strings["%1\$s commented on [url=%2\$s]%3\$s's %4\$s[/url]"] = "%1\$sskomentował [url=%2\$s]%3\$s %4\$s[/url]"; $a->strings["%1\$s tagged you on [url=%2\$s]your %3\$s[/url]"] = ""; $a->strings["%1\$s commented on [url=%2\$s]your %3\$s[/url]"] = "%1\$s skomentował [url=%2\$s] twój %3\$s[/ url]"; @@ -209,482 +214,12 @@ $a->strings["Yes"] = "Tak"; $a->strings["Permission denied."] = "Brak uprawnień."; $a->strings["Archives"] = "Archiwum"; $a->strings["show more"] = "pokaż więcej"; -$a->strings["Theme settings updated."] = "Zaktualizowano ustawienia motywów."; -$a->strings["Information"] = "Informacje"; -$a->strings["Overview"] = "Przegląd"; -$a->strings["Federation Statistics"] = "Statystyki Organizacji"; -$a->strings["Configuration"] = "Konfiguracja"; -$a->strings["Site"] = "Strona"; -$a->strings["Users"] = "Użytkownicy"; -$a->strings["Addons"] = "Dodatki"; -$a->strings["Themes"] = "Wygląd"; -$a->strings["Additional features"] = "Dodatkowe funkcje"; -$a->strings["Terms of Service"] = "Warunki usługi"; -$a->strings["Database"] = "Baza danych"; -$a->strings["DB updates"] = "Aktualizacje DB"; -$a->strings["Inspect Queue"] = "Sprawdź kolejkę"; -$a->strings["Inspect Deferred Workers"] = "Sprawdź Odroczonych Pracowników"; -$a->strings["Inspect worker Queue"] = "Sprawdź kolejkę pracowników"; -$a->strings["Tools"] = "Narzędzia"; -$a->strings["Contact Blocklist"] = "Lista zablokowanych kontaktów"; -$a->strings["Server Blocklist"] = "Lista zablokowanych serwerów"; -$a->strings["Delete Item"] = "Usuń przedmiot"; -$a->strings["Logs"] = "Logi"; -$a->strings["View Logs"] = "Zobacz rejestry"; -$a->strings["Diagnostics"] = "Diagnostyka"; -$a->strings["PHP Info"] = "Informacje o PHP"; -$a->strings["probe address"] = "adres sondy"; -$a->strings["check webfinger"] = "sprawdź webfinger"; -$a->strings["Admin"] = "Administator"; -$a->strings["Addon Features"] = "Funkcje dodatkowe"; -$a->strings["User registrations waiting for confirmation"] = "Rejestracje użytkowników czekające na potwierdzenie"; -$a->strings["Administration"] = "Administracja"; -$a->strings["Display Terms of Service"] = "Wyświetl Warunki korzystania z usługi"; -$a->strings["Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page."] = "Włącz stronę Warunki świadczenia usług. Jeśli ta opcja jest włączona, link do warunków zostanie dodany do formularza rejestracyjnego i strony z informacjami ogólnymi."; -$a->strings["Display Privacy Statement"] = "Wyświetl oświadczenie o prywatności"; -$a->strings["Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR."] = "Pokaż niektóre informacje dotyczące potrzebnych informacji do obsługi węzła zgodnie np. do EU-GDPR."; -$a->strings["Privacy Statement Preview"] = "Podgląd oświadczenia o prywatności"; -$a->strings["The Terms of Service"] = "Warunki świadczenia usług"; -$a->strings["Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below."] = "Wprowadź tutaj Warunki świadczenia usług dla swojego węzła. Możesz użyć BBCode. Nagłówki sekcji powinny być [h2] i poniżej."; -$a->strings["Save Settings"] = "Zapisz ustawienia"; -$a->strings["Blocked domain"] = "Zablokowana domena"; -$a->strings["The blocked domain"] = "Zablokowana domena"; -$a->strings["Reason for the block"] = "Powód blokowania"; -$a->strings["The reason why you blocked this domain."] = "Powód zablokowania tej domeny."; -$a->strings["Delete domain"] = "Usuń domenę"; -$a->strings["Check to delete this entry from the blocklist"] = "Zaznacz, aby usunąć ten wpis z listy bloków"; -$a->strings["This page can be used to define a black list of servers from the federated network that are not allowed to interact with your node. For all entered domains you should also give a reason why you have blocked the remote server."] = "Na tej stronie można zdefiniować czarną listę serwerów ze stowarzyszonej sieci, które nie mogą współdziałać z danym węzłem. Dla wszystkich wprowadzonych domen powinieneś podać powód, dla którego zablokowałeś serwer zdalny."; -$a->strings["The list of blocked servers will be made publically available on the /friendica page so that your users and people investigating communication problems can find the reason easily."] = "Lista zablokowanych serwerów zostanie publicznie udostępniona na stronie /friendica, dzięki czemu użytkownicy i osoby badające problemy z komunikacją mogą łatwo znaleźć przyczynę."; -$a->strings["Add new entry to block list"] = "Dodaj nowy wpis do listy bloków"; -$a->strings["Server Domain"] = "Domena serwera"; -$a->strings["The domain of the new server to add to the block list. Do not include the protocol."] = "Domena nowego serwera do dodania do listy bloków. Nie dołączaj protokołu."; -$a->strings["Block reason"] = "Powód zablokowania"; -$a->strings["Add Entry"] = "Dodaj wpis"; -$a->strings["Save changes to the blocklist"] = "Zapisz zmiany w liście zablokowanych"; -$a->strings["Current Entries in the Blocklist"] = "Aktualne wpisy na liście zablokowanych"; -$a->strings["Delete entry from blocklist"] = "Usuń wpis z listy zablokowanych"; -$a->strings["Delete entry from blocklist?"] = "Usunąć wpis z listy zablokowanych?"; -$a->strings["Server added to blocklist."] = "Serwer dodany do listy zablokowanych."; -$a->strings["Site blocklist updated."] = "Zaktualizowano listę bloków witryny."; -$a->strings["The contact has been blocked from the node"] = "Kontakt został zablokowany w węźle"; -$a->strings["Could not find any contact entry for this URL (%s)"] = "Nie można znaleźć żadnego kontaktu dla tego adresu URL (%s)"; -$a->strings["%s contact unblocked"] = [ - 0 => "%s kontakt odblokowany", - 1 => "%s kontakty odblokowane", - 2 => "%s kontaktów odblokowanych", - 3 => "%s kontaktów odblokowanych", -]; -$a->strings["Remote Contact Blocklist"] = "Lista zablokowanych kontaktów zdalnych"; -$a->strings["This page allows you to prevent any message from a remote contact to reach your node."] = "Ta strona pozwala zapobiec wysyłaniu do węzła wiadomości od kontaktu zdalnego."; -$a->strings["Block Remote Contact"] = "Zablokuj kontakt zdalny"; -$a->strings["select all"] = "zaznacz wszystko"; -$a->strings["select none"] = "wybierz brak"; -$a->strings["Block"] = "Zablokuj"; -$a->strings["Unblock"] = "Odblokuj"; -$a->strings["No remote contact is blocked from this node."] = "Z tego węzła nie jest blokowany kontakt zdalny."; -$a->strings["Blocked Remote Contacts"] = "Zablokowane kontakty zdalne"; -$a->strings["Block New Remote Contact"] = "Zablokuj nowy kontakt zdalny"; -$a->strings["Photo"] = "Zdjęcie"; -$a->strings["Name"] = "Nazwa"; -$a->strings["Address"] = "Adres"; -$a->strings["Profile URL"] = "Adres URL profilu"; -$a->strings["%s total blocked contact"] = [ - 0 => "łącznie %s zablokowany kontakt", - 1 => "łącznie %s zablokowane kontakty", - 2 => "łącznie %s zablokowanych kontaktów", - 3 => "%s całkowicie zablokowane kontakty", -]; -$a->strings["URL of the remote contact to block."] = "Adres URL kontaktu zdalnego do zablokowania."; -$a->strings["Delete this Item"] = "Usuń ten przedmiot"; -$a->strings["On this page you can delete an item from your node. If the item is a top level posting, the entire thread will be deleted."] = "Na tej stronie możesz usunąć przedmiot ze swojego węzła. Jeśli element jest publikowaniem na najwyższym poziomie, cały wątek zostanie usunięty."; -$a->strings["You need to know the GUID of the item. You can find it e.g. by looking at the display URL. The last part of http://example.com/display/123456 is the GUID, here 123456."] = "Musisz znać identyfikator GUID tego przedmiotu. Możesz go znaleźć np. patrząc na wyświetlany adres URL. Ostatnia część http://example.com/display/123456 to GUID, tutaj 123456."; -$a->strings["GUID"] = "GUID"; -$a->strings["The GUID of the item you want to delete."] = "Identyfikator elementu GUID, który chcesz usunąć."; -$a->strings["Item marked for deletion."] = "Przedmiot oznaczony do usunięcia."; -$a->strings["unknown"] = "nieznany"; -$a->strings["This page offers you some numbers to the known part of the federated social network your Friendica node is part of. These numbers are not complete but only reflect the part of the network your node is aware of."] = "Ta strona zawiera kilka numerów do znanej części federacyjnej sieci społecznościowej, do której należy Twój węzeł Friendica. Liczby te nie są kompletne, ale odzwierciedlają tylko część sieci, o której wie twój węzeł."; -$a->strings["The Auto Discovered Contact Directory feature is not enabled, it will improve the data displayed here."] = "Funkcja Katalog kontaktów automatycznie odkrytych nie jest włączona, poprawi ona wyświetlane tutaj dane."; -$a->strings["Currently this node is aware of %d nodes with %d registered users from the following platforms:"] = "Obecnie węzeł ten jest świadomy %dwęzłów z %d zarejestrowanymi użytkownikami z następujących platform:"; -$a->strings["ID"] = "ID"; -$a->strings["Recipient Name"] = "Nazwa odbiorcy"; -$a->strings["Recipient Profile"] = "Profil odbiorcy"; -$a->strings["Network"] = "Sieć"; -$a->strings["Created"] = "Utwórz"; -$a->strings["Last Tried"] = "Ostatnia wypróbowana"; -$a->strings["This page lists the content of the queue for outgoing postings. These are postings the initial delivery failed for. They will be resend later and eventually deleted if the delivery fails permanently."] = "Na tej stronie znajduje się zawartość kolejki dla wysyłek wychodzących. Są to posty, dla których początkowe wysyłanie nie powiodło się. Zostaną one ponownie wysłane później i ostatecznie usunięte, jeśli doręczenie zakończy się trwale."; -$a->strings["Inspect Deferred Worker Queue"] = "Sprawdź kolejkę odroczonych pracowników"; -$a->strings["This page lists the deferred worker jobs. This are jobs that couldn't be executed at the first time."] = "Ta strona zawiera listę zadań opóźnionych pracowników. Są to zadania, które nie mogą być wykonywane po raz pierwszy."; -$a->strings["Inspect Worker Queue"] = "Sprawdź Kolejkę Pracowników"; -$a->strings["This page lists the currently queued worker jobs. These jobs are handled by the worker cronjob you've set up during install."] = "Ta strona zawiera listę aktualnie ustawionych zadań dla pracowników. Te zadania są obsługiwane przez cronjob pracownika, który skonfigurowałeś podczas instalacji."; -$a->strings["Job Parameters"] = "Parametry zadania"; -$a->strings["Priority"] = "Priorytet"; -$a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion..htconfig.php
. See the Config help page for help with the transition."] = "";
-$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."] = "";
-$a->strings["%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."] = "%s nie jest osiągalny w twoim systemie. Jest to poważny problem z konfiguracją, który uniemożliwia komunikację między serwerami. Zobacz pomoc na stronie instalacji.";
-$a->strings["Normal Account"] = "Konto normalne";
-$a->strings["Automatic Follower Account"] = "Automatyczne konto obserwatora";
-$a->strings["Public Forum Account"] = "Publiczne konto na forum";
-$a->strings["Automatic Friend Account"] = "Automatyczny przyjaciel konta";
-$a->strings["Blog Account"] = "Konto Bloga";
-$a->strings["Private Forum Account"] = "Prywatne konto na forum";
-$a->strings["Message queues"] = "Wiadomości";
-$a->strings["Server Settings"] = "Ustawienia serwera";
-$a->strings["Summary"] = "Podsumowanie";
-$a->strings["Registered users"] = "Zarejestrowani użytkownicy";
-$a->strings["Pending registrations"] = "Oczekujące rejestracje";
-$a->strings["Version"] = "Wersja";
-$a->strings["Active addons"] = "Aktywne dodatki";
-$a->strings["Can not parse base url. Must have at least .htconfig.php
. See the Config help page for help with the transition."] = "";
+$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."] = "";
+$a->strings["%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."] = "%s nie jest osiągalny w twoim systemie. Jest to poważny problem z konfiguracją, który uniemożliwia komunikację między serwerami. Zobacz pomoc na stronie instalacji.";
+$a->strings["Friendica's system.basepath was updated from '%s' to '%s'. Please remove the system.basepath from your db to avoid differences."] = "";
+$a->strings["Friendica's current system.basepath '%s' is wrong and the config file '%s' isn't used."] = "";
+$a->strings["Friendica's current system.basepath '%s' is not equal to the config file '%s'. Please fix your configuration."] = "";
+$a->strings["Normal Account"] = "Konto normalne";
+$a->strings["Automatic Follower Account"] = "Automatyczne konto obserwatora";
+$a->strings["Public Forum Account"] = "Publiczne konto na forum";
+$a->strings["Automatic Friend Account"] = "Automatyczny przyjaciel konta";
+$a->strings["Blog Account"] = "Konto Bloga";
+$a->strings["Private Forum Account"] = "Prywatne konto na forum";
+$a->strings["Message queues"] = "Wiadomości";
+$a->strings["Server Settings"] = "Ustawienia serwera";
+$a->strings["Summary"] = "Podsumowanie";
+$a->strings["Registered users"] = "Zarejestrowani użytkownicy";
+$a->strings["Pending registrations"] = "Oczekujące rejestracje";
+$a->strings["Version"] = "Wersja";
+$a->strings["Active addons"] = "Aktywne dodatki";
+$a->strings["Theme settings updated."] = "Zaktualizowano ustawienia motywów.";
+$a->strings["Theme %s disabled."] = "Motyw %s wyłączony.";
+$a->strings["Theme %s successfully enabled."] = "Motyw %s został pomyślnie włączony.";
+$a->strings["Theme %s failed to install."] = "Nie udało się zainstalować motywu %s.";
+$a->strings["Screenshot"] = "Zrzut ekranu";
+$a->strings["Themes"] = "Wygląd";
+$a->strings["Unknown theme."] = "Nieznany motyw.";
+$a->strings["Reload active themes"] = "Przeładuj aktywne motywy";
+$a->strings["No themes found on the system. They should be placed in %1\$s"] = "Nie znaleziono motywów w systemie. Powinny zostać umieszczone %1\$s";
+$a->strings["[Experimental]"] = "[Eksperymentalne]";
+$a->strings["[Unsupported]"] = "[Niewspieralne]";
+$a->strings["The Terms of Service settings have been updated."] = "Ustawienia Warunków korzystania z usługi zostały zaktualizowane.";
+$a->strings["Display Terms of Service"] = "Wyświetl Warunki korzystania z usługi";
+$a->strings["Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page."] = "Włącz stronę Warunki świadczenia usług. Jeśli ta opcja jest włączona, link do warunków zostanie dodany do formularza rejestracyjnego i strony z informacjami ogólnymi.";
+$a->strings["Display Privacy Statement"] = "Wyświetl oświadczenie o prywatności";
+$a->strings["Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR."] = "Pokaż niektóre informacje dotyczące potrzebnych informacji do obsługi węzła zgodnie np. do EU-GDPR.";
+$a->strings["Privacy Statement Preview"] = "Podgląd oświadczenia o prywatności";
+$a->strings["The Terms of Service"] = "Warunki świadczenia usług";
+$a->strings["Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below."] = "Wprowadź tutaj Warunki świadczenia usług dla swojego węzła. Możesz użyć BBCode. Nagłówki sekcji powinny być [h2] i poniżej.";
+$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tthe administrator of %2\$s has set up an account for you."] = "\n\t\t\tSzanowny Użytkowniku %1\$s, \n\t\t\t\tadministrator %2\$s założył dla ciebie konto.";
+$a->strings["\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tIf you ever want to delete your account, you can do so at %1\$s/removeme\n\n\t\t\tThank you and welcome to %4\$s."] = "\n\t\t\tDane logowania są następuje:\n\t\t\tLokalizacja witryny:\t%1\$s\n\t\t\tNazwa użytkownika:%2\$s\n\t\t\tHasło:%3\$s\n\n\t\t\tPo zalogowaniu możesz zmienić hasło do swojego konta na stronie \"Ustawienia\".\n \t\t\tProszę poświęć chwilę, aby przejrzeć inne ustawienia konta na tej stronie.\n\n\t\t\tMożesz również dodać podstawowe informacje do swojego domyślnego profilu\n\t\t\t(na stronie \"Profil użytkownika\"), aby inne osoby mogły łatwo Cię znaleźć.\n\n\t\t\tZalecamy ustawienie imienia i nazwiska, dodanie zdjęcia profilowego,\n\t\t\tdodanie niektórych \"słów kluczowych\" profilu (bardzo przydatne w nawiązywaniu nowych znajomości) \n\t\t\ti być może gdzie mieszkasz; jeśli nie chcesz podać więcej szczegów.\n\n\t\t\tW pełni szanujemy Twoje prawo do prywatności i żaden z tych elementów nie jest konieczny.\n\t\t\tJeśli jesteś nowy i nie znasz tutaj nikogo, oni mogą ci pomóc,\n\t\t\tmożesz zdobyć nowych interesujących przyjaciół.\n\n\t\t\tJeśli kiedykolwiek zechcesz usunąć swoje konto, możesz to zrobić na stronie %1\$s/removeme\n\n\t\t\tDziękujemy i Zapraszamy do%4\$s";
+$a->strings["%s user blocked"] = [
+ 0 => "",
+ 1 => "",
+ 2 => "",
+ 3 => "",
+];
+$a->strings["%s user unblocked"] = [
+ 0 => "",
+ 1 => "",
+ 2 => "",
+ 3 => "",
+];
+$a->strings["You can't remove yourself"] = "Nie możesz usunąć siebie";
+$a->strings["%s user deleted"] = [
+ 0 => "usunięto %s użytkownika",
+ 1 => "usunięto %s użytkowników",
+ 2 => "usunięto %s użytkowników",
+ 3 => "%s usuniętych użytkowników",
+];
+$a->strings["User \"%s\" deleted"] = "Użytkownik \"%s\" usunięty";
+$a->strings["User \"%s\" blocked"] = "Użytkownik \"%s\" zablokowany";
+$a->strings["User \"%s\" unblocked"] = "Użytkownik \"%s\" odblokowany";
+$a->strings["Private Forum"] = "Prywatne forum";
+$a->strings["Relay"] = "";
+$a->strings["Register date"] = "Data rejestracji";
+$a->strings["Last login"] = "Ostatnie logowanie";
+$a->strings["Last item"] = "Ostatni element";
+$a->strings["Type"] = "Typu";
+$a->strings["Add User"] = "Dodaj użytkownika";
+$a->strings["User registrations waiting for confirm"] = "Zarejestrowani użytkownicy czekający na potwierdzenie";
+$a->strings["User waiting for permanent deletion"] = "Użytkownik czekający na trwałe usunięcie";
+$a->strings["Request date"] = "Data prośby";
+$a->strings["No registrations."] = "Brak rejestracji.";
+$a->strings["Note from the user"] = "Uwaga od użytkownika";
+$a->strings["Deny"] = "Odmów";
+$a->strings["User blocked"] = "Użytkownik zablokowany";
+$a->strings["Site admin"] = "Administracja stroną";
+$a->strings["Account expired"] = "Konto wygasło";
+$a->strings["New User"] = "Nowy użytkownik";
+$a->strings["Permanent deletion"] = "Trwałe usunięcie";
+$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Zaznaczeni użytkownicy zostaną usunięci!\\n\\n Wszystko co zamieścili na tej stronie będzie trwale skasowane!\\n\\n Jesteś pewien?";
+$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Użytkownik {0} zostanie usunięty!\\n\\n Wszystko co zamieścił na tej stronie będzie trwale skasowane!\\n\\n Jesteś pewien?";
+$a->strings["Name of the new user."] = "Nazwa nowego użytkownika.";
+$a->strings["Nickname"] = "Pseudonim";
+$a->strings["Nickname of the new user."] = "Pseudonim nowego użytkownika.";
+$a->strings["Email address of the new user."] = "Adres email nowego użytkownika.";
+$a->strings["No friends to display."] = "Brak znajomych do wyświetlenia.";
+$a->strings["No installed applications."] = "Brak zainstalowanych aplikacji.";
+$a->strings["Applications"] = "Aplikacje";
$a->strings["Item was not found."] = "Element nie znaleziony.";
+$a->strings["Source input"] = "Źródło wejściowe";
+$a->strings["BBCode::toPlaintext"] = "BBCode::na prosty tekst";
+$a->strings["BBCode::convert (raw HTML)"] = "BBCode:: konwersjia (raw HTML)";
+$a->strings["BBCode::convert"] = "BBCode::przekształć";
+$a->strings["BBCode::convert => HTML::toBBCode"] = "BBCode::przekształć => HTML::toBBCode";
+$a->strings["BBCode::toMarkdown"] = "BBCode::toMarkdown";
+$a->strings["BBCode::toMarkdown => Markdown::convert"] = "BBCode::toMarkdown => Markdown::przekształć";
+$a->strings["BBCode::toMarkdown => Markdown::toBBCode"] = "BBCode::toMarkdown => Markdown::toBBCode";
+$a->strings["BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"] = "BBCode::toMarkdown => Markdown::przekształć => HTML::toBBCode";
+$a->strings["Item Body"] = "";
+$a->strings["Item Tags"] = "";
+$a->strings["Source input (Diaspora format)"] = "Źródło wejściowe (format Diaspora)";
+$a->strings["Markdown::convert (raw HTML)"] = "Markdown::convert (raw HTML)";
+$a->strings["Markdown::convert"] = "Markdown::convert";
+$a->strings["Markdown::toBBCode"] = "Markdown::toBBCode";
+$a->strings["Raw HTML input"] = "Surowe wejście HTML";
+$a->strings["HTML Input"] = "Wejście HTML";
+$a->strings["HTML::toBBCode"] = "HTML::toBBCode";
+$a->strings["HTML::toBBCode => BBCode::convert"] = "HTML::toBBCode => BBCode::convert";
+$a->strings["HTML::toBBCode => BBCode::convert (raw HTML)"] = "HTML::toBBCode => BBCode::convert (raw HTML)";
+$a->strings["HTML::toMarkdown"] = "HTML::toMarkdown";
+$a->strings["HTML::toPlaintext"] = "HTML::toPlaintext";
+$a->strings["Source text"] = "Tekst źródłowy";
+$a->strings["BBCode"] = "BBCode";
+$a->strings["Markdown"] = "Markdown";
+$a->strings["HTML"] = "HTML";
+$a->strings["Overview"] = "Przegląd";
+$a->strings["Configuration"] = "Konfiguracja";
+$a->strings["Database"] = "Baza danych";
+$a->strings["DB updates"] = "Aktualizacje DB";
+$a->strings["Inspect Deferred Workers"] = "Sprawdź Odroczonych Pracowników";
+$a->strings["Inspect worker Queue"] = "Sprawdź kolejkę pracowników";
+$a->strings["Tools"] = "Narzędzia";
+$a->strings["Contact Blocklist"] = "Lista zablokowanych kontaktów";
+$a->strings["Diagnostics"] = "Diagnostyka";
+$a->strings["PHP Info"] = "Informacje o PHP";
+$a->strings["probe address"] = "adres sondy";
+$a->strings["check webfinger"] = "sprawdź webfinger";
+$a->strings["Item Source"] = "";
+$a->strings["Babel"] = "";
+$a->strings["Addon Features"] = "Funkcje dodatkowe";
+$a->strings["User registrations waiting for confirmation"] = "Rejestracje użytkowników czekające na potwierdzenie";
+$a->strings["This page is missing a url parameter."] = "Na tej stronie brakuje parametru url.";
+$a->strings["The post was created"] = "Post został utworzony";
$a->strings["%d contact edited."] = [
0 => "Zedytowano %d kontakt.",
1 => "Zedytowano %d kontakty.",
@@ -2101,6 +2043,7 @@ $a->strings["Comma separated list of keywords that should not be converted to ha
$a->strings["Actions"] = "Akcja";
$a->strings["Suggestions"] = "Sugestie";
$a->strings["Suggest potential friends"] = "Sugerowani znajomi";
+$a->strings["All Contacts"] = "Wszystkie kontakty";
$a->strings["Show all contacts"] = "Pokaż wszystkie kontakty";
$a->strings["Unblocked"] = "Odblokowane";
$a->strings["Only show unblocked contacts"] = "Pokaż tylko odblokowane kontakty";
@@ -2130,9 +2073,62 @@ $a->strings["Toggle Blocked status"] = "Przełącz status na Zablokowany";
$a->strings["Toggle Ignored status"] = "Przełącz status na Ignorowany";
$a->strings["Toggle Archive status"] = "Przełącz status na Archiwalny";
$a->strings["Delete contact"] = "Usuń kontakt";
+$a->strings["Credits"] = "Zaufany";
+$a->strings["Friendica is a community project, that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!"] = "Friendica to projekt społecznościowy, który nie byłby możliwy bez pomocy wielu osób. Oto lista osób, które przyczyniły się do tworzenia kodu lub tłumaczenia Friendica. Dziękuję wam wszystkim!";
+$a->strings["No entries (some entries may be hidden)."] = "Brak odwiedzin (niektóre odwiedziny mogą być ukryte).";
+$a->strings["Find on this site"] = "Znajdź na tej stronie";
+$a->strings["Results for:"] = "Wyniki dla:";
+$a->strings["Site Directory"] = "Katalog Witryny";
+$a->strings["You must be logged in to use this module"] = "Musisz być zalogowany, aby korzystać z tego modułu";
+$a->strings["Source URL"] = "Źródłowy adres URL";
+$a->strings["Filetag %s saved to item"] = "";
+$a->strings["- select -"] = "- wybierz -";
+$a->strings["No given contact."] = "Brak kontaktu.";
+$a->strings["Installed addons/apps:"] = "Zainstalowane dodatki/aplikacje:";
+$a->strings["No installed addons/apps"] = "Brak zainstalowanych dodatków/aplikacji";
+$a->strings["Read about the Terms of Service of this node."] = "Przeczytaj o Warunkach świadczenia usług tego węzła.";
+$a->strings["On this server the following remote servers are blocked."] = "Na tym serwerze następujące serwery zdalne są blokowane.";
+$a->strings["This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s."] = "To jest wersja Friendica, %s która działa w lokalizacji internetowej %s. Wersja bazy danych to %s wersja po aktualizacji %s.";
+$a->strings["Please visit Friendi.ca to learn more about the Friendica project."] = "Odwiedź stronę Friendi.ca aby dowiedzieć się więcej o projekcie Friendica.";
+$a->strings["Bug reports and issues: please visit"] = "Raporty o błędach i problemy: odwiedź stronę";
+$a->strings["the bugtracker at github"] = "śledzenie błędów na github";
+$a->strings["Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca"] = "Propozycje, pochwały itd. – napisz e-mail do „info” małpa „friendi” - kropka - „ca”";
+$a->strings["Group created."] = "Grupa utworzona.";
+$a->strings["Could not create group."] = "Nie można utworzyć grupy.";
+$a->strings["Group not found."] = "Nie znaleziono grupy.";
+$a->strings["Group name changed."] = "Zmieniono nazwę grupy.";
+$a->strings["Unknown group."] = "Nieznana grupa.";
+$a->strings["Contact is unavailable."] = "Kontakt jest niedostępny.";
+$a->strings["Contact is deleted."] = "Kontakt został usunięty.";
+$a->strings["Contact is blocked, unable to add it to a group."] = "Kontakt jest zablokowany, nie można go dodać do grupy.";
+$a->strings["Unable to add the contact to the group."] = "Nie można dodać kontaktu do grupy.";
+$a->strings["Contact successfully added to group."] = "";
+$a->strings["Unable to remove the contact from the group."] = "";
+$a->strings["Contact successfully removed from group."] = "";
+$a->strings["Unknown group command."] = "";
+$a->strings["Bad request."] = "";
+$a->strings["Save Group"] = "Zapisz grupę";
+$a->strings["Filter"] = "Filtr";
+$a->strings["Create a group of contacts/friends."] = "Stwórz grupę znajomych.";
+$a->strings["Group removed."] = "Grupa usunięta.";
+$a->strings["Unable to remove group."] = "Nie można usunąć grupy.";
+$a->strings["Delete Group"] = "Usuń grupę";
+$a->strings["Edit Group Name"] = "Edytuj nazwę grupy";
+$a->strings["Members"] = "Członkowie";
+$a->strings["Remove contact from group"] = "Usuń kontakt z grupy";
+$a->strings["Add contact to group"] = "Dodaj kontakt do grupy";
+$a->strings["Help:"] = "Pomoc:";
+$a->strings["Welcome to %s"] = "Witamy w %s";
$a->strings["Friendica Communications Server - Setup"] = "Friendica Communications Server - Instalator";
$a->strings["System check"] = "Sprawdzanie systemu";
$a->strings["Check again"] = "Sprawdź ponownie";
+$a->strings["Base settings"] = "";
+$a->strings["Host name"] = "Nazwa hosta";
+$a->strings["Overwrite this field in case the determinated hostname isn't right, otherweise leave it as is."] = "";
+$a->strings["Base path to installation"] = "Podstawowa ścieżka do instalacji";
+$a->strings["If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."] = "Jeśli system nie może wykryć poprawnej ścieżki do instalacji, wprowadź tutaj poprawną ścieżkę. To ustawienie powinno być ustawione tylko wtedy, gdy używasz ograniczonego systemu i dowiązań symbolicznych do twojego webroota.";
+$a->strings["Sub path of the URL"] = "";
+$a->strings["Overwrite this field in case the sub path determination isn't right, otherwise leave it as is. Leaving this field blank means the installation is at the base URL without sub path."] = "";
$a->strings["Database connection"] = "Połączenie z bazą danych";
$a->strings["In order to install Friendica we need to know how to connect to your database."] = "W celu zainstalowania Friendica musimy wiedzieć jak połączyć się z twoją bazą danych.";
$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Proszę skontaktuj się ze swoim dostawcą usług hostingowych bądź administratorem strony jeśli masz pytania co do tych ustawień .";
@@ -2142,10 +2138,10 @@ $a->strings["Database Login Name"] = "Nazwa użytkownika bazy danych";
$a->strings["Database Login Password"] = "Hasło logowania do bazy danych";
$a->strings["For security reasons the password must not be empty"] = "Ze względów bezpieczeństwa hasło nie może być puste";
$a->strings["Database Name"] = "Nazwa bazy danych";
-$a->strings["Site administrator email address"] = "Adres e-mail administratora strony";
-$a->strings["Your account email address must match this in order to use the web admin panel."] = "Adres e-mail konta musi pasować do tego, aby móc korzystać z panelu administracyjnego.";
$a->strings["Please select a default timezone for your website"] = "Proszę wybrać domyślną strefę czasową dla swojej strony";
$a->strings["Site settings"] = "Ustawienia strony";
+$a->strings["Site administrator email address"] = "Adres e-mail administratora strony";
+$a->strings["Your account email address must match this in order to use the web admin panel."] = "Adres e-mail konta musi pasować do tego, aby móc korzystać z panelu administracyjnego.";
$a->strings["System Language:"] = "Język systemu:";
$a->strings["Set the default language for your Friendica installation interface and to send emails."] = "Ustaw domyślny język dla interfejsu instalacyjnego Friendica i wysyłaj e-maile.";
$a->strings["Your Friendica site database has been installed."] = "Twoja baza danych witryny Friendica została zainstalowana.";
@@ -2153,7 +2149,36 @@ $a->strings["Installation finished"] = "Instalacja zakończona";
$a->strings["Use an application on a mobile device to get two-factor authentication codes when prompted on login.
"] = ""; +$a->strings["Authenticator app"] = ""; +$a->strings["Configured"] = "Skonfigurowane"; +$a->strings["Not Configured"] = "Nie skonfigurowane"; +$a->strings["You haven't finished configuring your authenticator app.
"] = ""; +$a->strings["Your authenticator app is correctly configured.
"] = ""; +$a->strings["Recovery codes"] = ""; +$a->strings["Remaining valid codes"] = ""; +$a->strings["These one-use codes can replace an authenticator app code in case you have lost access to it.
"] = ""; +$a->strings["Current password:"] = "Aktualne hasło:"; +$a->strings["You need to provide your current password to change two-factor authentication settings."] = ""; +$a->strings["Enable two-factor authentication"] = ""; +$a->strings["Disable two-factor authentication"] = ""; +$a->strings["Show recovery codes"] = "Pokaż kody odzyskiwania"; +$a->strings["Finish app configuration"] = "Zakończ konfigurację aplikacji"; +$a->strings["Please enter your password to access this page."] = ""; +$a->strings["New recovery codes successfully generated."] = ""; +$a->strings["Two-factor recovery codes"] = ""; +$a->strings["Recovery codes can be used to access your account in the event you lose access to your device and cannot receive two-factor authentication codes.
Put these in a safe spot! If you lose your device and don’t have the recovery codes you will lose access to your account.
"] = ""; +$a->strings["When you generate new recovery codes, you must copy the new codes. Your old codes won’t work anymore."] = ""; +$a->strings["Generate new recovery codes"] = ""; +$a->strings["Next: Verification"] = ""; +$a->strings["Two-factor authentication successfully activated."] = ""; +$a->strings["Invalid code, please retry."] = ""; +$a->strings["Or you can submit the authentication settings manually:
\nPlease scan this QR Code with your authenticator app and submit the provided code.
"] = ""; +$a->strings["Or you can open the following URL in your mobile devicde:
"] = ""; +$a->strings["Please enter a code from your authentication app"] = "Wprowadź kod z aplikacji uwierzytelniającej"; +$a->strings["Verify code and enable two-factor authentication"] = "Sprawdź kod i włącz uwierzytelnianie dwuskładnikowe"; +$a->strings["Bad Request"] = "Nieprawidłowe żądanie"; +$a->strings["Unauthorized"] = "Nieautoryzowane"; +$a->strings["Forbidden"] = "Zabronione"; +$a->strings["Not Found"] = "Nie znaleziono"; +$a->strings["Internal Server Error"] = ""; +$a->strings["Service Unavailable"] = ""; +$a->strings["The server cannot or will not process the request due to an apparent client error."] = "Serwer nie może lub nie będzie przetwarzać żądania z powodu widocznego błędu klienta."; +$a->strings["Authentication is required and has failed or has not yet been provided."] = "Uwierzytelnienie jest wymagane i nie powiodło się lub nie zostało jeszcze dostarczone."; +$a->strings["The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource, or may need an account."] = "Żądanie było ważne, ale serwer odmawia działania. Użytkownik może nie mieć wymaganych uprawnień do zasobu lub może potrzebować konta."; +$a->strings["The requested resource could not be found but may be available in the future."] = "Żądany zasób nie został znaleziony, ale może być dostępny w przyszłości."; +$a->strings["An unexpected condition was encountered and no more specific message is suitable."] = "Napotkano nieoczekiwany warunek i nie jest odpowiedni żaden bardziej szczegółowy komunikat."; +$a->strings["The server is currently unavailable (because it is overloaded or down for maintenance). Please try again later."] = "Serwer jest obecnie niedostępny (ponieważ jest przeciążony lub wyłączony z powodu konserwacji). Spróbuj ponownie później."; +$a->strings["Go back"] = "Wróć"; $a->strings["At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node's user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication."] = "W momencie rejestracji oraz w celu zapewnienia komunikacji między kontem użytkownika, a jego kontaktami, użytkownik musi podać nazwę wyświetlaną (pseudonim), nazwę użytkownika (przydomek) i działający adres e-mail. Nazwy będą dostępne na stronie profilu konta dla każdego odwiedzającego stronę, nawet jeśli inne szczegóły profilu nie zostaną wyświetlone. Adres e-mail będzie używany tylko do wysyłania powiadomień użytkownika o interakcjach, ale nie będzie wyświetlany w widoczny sposób. Lista kont w katalogu użytkownika węzła lub globalnym katalogu użytkownika jest opcjonalna i może być kontrolowana w ustawieniach użytkownika, nie jest konieczna do komunikacji."; $a->strings["This data is required for communication and is passed on to the nodes of the communication partners and is stored there. Users can enter additional private data that may be transmitted to the communication partners accounts."] = "Te dane są wymagane do komunikacji i są przekazywane do węzłów partnerów komunikacyjnych i są tam przechowywane. Użytkownicy mogą wprowadzać dodatkowe prywatne dane, które mogą być przesyłane na konta partnerów komunikacyjnych."; $a->strings["At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1\$s/removeme. The deletion of the account will be permanent. Deletion of the data will also be requested from the nodes of the communication partners."] = "W dowolnym momencie zalogowany użytkownik może wyeksportować dane swojego konta z ustawień konta. Jeśli użytkownik chce usunąć swoje konto, może to zrobić w%1\$s / Usuń mnie. Usunięcie konta będzie trwałe. Skasowanie danych będzie również wymagane od węzłów partnerów komunikacyjnych."; $a->strings["Privacy Statement"] = "Oświadczenie o prywatności"; +$a->strings["Remaining recovery codes: %d"] = ""; +$a->strings["Two-factor recovery"] = ""; +$a->strings["You can enter one of your one-time recovery codes in case you lost access to your mobile device.
"] = ""; +$a->strings["Don’t have your phone? Enter a two-factor recovery code"] = ""; +$a->strings["Please enter a recovery code"] = ""; +$a->strings["Submit recovery code and complete login"] = ""; +$a->strings["Open the two-factor authentication app on your device to get an authentication code and verify your identity.
"] = ""; +$a->strings["Verify code and complete login"] = ""; $a->strings["This entry was edited"] = "Ten wpis został zedytowany"; +$a->strings["Private Message"] = "Wiadomość prywatna"; $a->strings["Delete locally"] = "Usuń lokalnie"; $a->strings["Delete globally"] = "Usuń globalnie"; $a->strings["Remove locally"] = "Usuń lokalnie"; @@ -2266,6 +2346,8 @@ $a->strings["Custom"] = "Niestandardowe"; $a->strings["Note"] = "Uwaga"; $a->strings["Check image permissions if all users are allowed to see the image"] = "Sprawdź uprawnienia do zdjęć, jeśli wszyscy użytkownicy mogą zobaczyć obraz"; $a->strings["Select color scheme"] = "Wybierz schemat kolorów"; +$a->strings["Copy or paste schemestring"] = ""; +$a->strings["You can copy this string to share your theme with others. Pasting here applies the schemestring"] = ""; $a->strings["Navigation bar background color"] = "Kolor tła paska nawigacyjnego"; $a->strings["Navigation bar icon color "] = "Kolor ikon na pasku nawigacyjnym "; $a->strings["Link color"] = "Kolor łączy"; diff --git a/view/lang/pt-br/messages.po b/view/lang/pt-br/messages.po index 0c6be7ebe..cb123fecb 100644 --- a/view/lang/pt-br/messages.po +++ b/view/lang/pt-br/messages.po @@ -8,7 +8,7 @@ # André Alves.htconfig.php
. See the Config help page for "
+"help with the transition."
+msgstr ""
+
+#: mod/admin.php:943
+#, php-format
+msgid ""
+"Friendica's configuration now is stored in config/local.config.php, please "
+"copy config/local-sample.config.php and move your config from "
+"config/local.ini.php
. See the Config help "
+"page for help with the transition."
+msgstr ""
+
+#: mod/admin.php:950
+#, php-format
+msgid ""
+"%s is not reachable on your system. This is a severe "
+"configuration issue that prevents server to server communication. See the installation page for help."
+msgstr ""
+
+#: mod/admin.php:956
msgid "Normal Account"
msgstr "Conta normal"
-#: mod/admin.php:641 mod/admin.php:1546
+#: mod/admin.php:957
msgid "Automatic Follower Account"
msgstr ""
-#: mod/admin.php:642 mod/admin.php:1547
+#: mod/admin.php:958
msgid "Public Forum Account"
msgstr ""
-#: mod/admin.php:643 mod/admin.php:1548
+#: mod/admin.php:959
msgid "Automatic Friend Account"
msgstr "Conta de amigo automático"
-#: mod/admin.php:644
+#: mod/admin.php:960
msgid "Blog Account"
msgstr "Conta de blog"
-#: mod/admin.php:645
+#: mod/admin.php:961
msgid "Private Forum Account"
msgstr ""
-#: mod/admin.php:667
+#: mod/admin.php:984
msgid "Message queues"
msgstr "Fila de mensagens"
-#: mod/admin.php:673
+#: mod/admin.php:990
+msgid "Server Settings"
+msgstr ""
+
+#: mod/admin.php:999
msgid "Summary"
msgstr "Resumo"
-#: mod/admin.php:675
+#: mod/admin.php:1001
msgid "Registered users"
msgstr "Usuários registrados"
-#: mod/admin.php:677
+#: mod/admin.php:1003
msgid "Pending registrations"
msgstr "Registros pendentes"
-#: mod/admin.php:678
+#: mod/admin.php:1004
msgid "Version"
msgstr "Versão"
-#: mod/admin.php:683
-msgid "Active plugins"
-msgstr "Plugins ativos"
+#: mod/admin.php:1009
+msgid "Active addons"
+msgstr ""
-#: mod/admin.php:708
+#: mod/admin.php:1042
msgid "Can not parse base url. Must have at least .htconfig.php
. See the Config help page for help with the transition."] = "";
+$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."] = "";
+$a->strings["%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."] = "";
+$a->strings["Normal Account"] = "Conta normal";
+$a->strings["Automatic Follower Account"] = "";
+$a->strings["Public Forum Account"] = "";
+$a->strings["Automatic Friend Account"] = "Conta de amigo automático";
+$a->strings["Blog Account"] = "Conta de blog";
+$a->strings["Private Forum Account"] = "";
+$a->strings["Message queues"] = "Fila de mensagens";
+$a->strings["Server Settings"] = "";
+$a->strings["Summary"] = "Resumo";
+$a->strings["Registered users"] = "Usuários registrados";
+$a->strings["Pending registrations"] = "Registros pendentes";
+$a->strings["Version"] = "Versão";
+$a->strings["Active addons"] = "";
+$a->strings["Can not parse base url. Must have at least .htconfig.php
. See the Config help page for "
+"help with the transition."
msgstr ""
#: mod/admin.php:943
-msgid "Self-signed certificate, use SSL for local links only (discouraged)"
+#, php-format
+msgid ""
+"Friendica's configuration now is stored in config/local.config.php, please "
+"copy config/local-sample.config.php and move your config from "
+"config/local.ini.php
. See the Config help "
+"page for help with the transition."
msgstr ""
+#: mod/admin.php:950
+#, php-format
+msgid ""
+"%s is not reachable on your system. This is a severe "
+"configuration issue that prevents server to server communication. See the installation page for help."
+msgstr ""
+
+#: mod/admin.php:956
+msgid "Normal Account"
+msgstr "Vanligt konto"
+
#: mod/admin.php:957
-msgid "File upload"
+msgid "Automatic Follower Account"
msgstr ""
#: mod/admin.php:958
-msgid "Policies"
+msgid "Public Forum Account"
msgstr ""
+#: mod/admin.php:959
+msgid "Automatic Friend Account"
+msgstr "Konto med automatiskt godkännande av vänner."
+
#: mod/admin.php:960
-msgid "Auto Discovered Contact Directory"
+msgid "Blog Account"
msgstr ""
#: mod/admin.php:961
+msgid "Private Forum Account"
+msgstr ""
+
+#: mod/admin.php:984
+msgid "Message queues"
+msgstr ""
+
+#: mod/admin.php:990
+msgid "Server Settings"
+msgstr ""
+
+#: mod/admin.php:999
+msgid "Summary"
+msgstr ""
+
+#: mod/admin.php:1001
+msgid "Registered users"
+msgstr ""
+
+#: mod/admin.php:1003
+msgid "Pending registrations"
+msgstr ""
+
+#: mod/admin.php:1004
+msgid "Version"
+msgstr ""
+
+#: mod/admin.php:1009
+msgid "Active addons"
+msgstr ""
+
+#: mod/admin.php:1042
+msgid "Can not parse base url. Must have at least .htconfig.php
. See the Config help page for help with the transition."] = "";
+$a->strings["Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php
. See the Config help page for help with the transition."] = "";
+$a->strings["%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help."] = "";
+$a->strings["Normal Account"] = "Vanligt konto";
+$a->strings["Automatic Follower Account"] = "";
+$a->strings["Public Forum Account"] = "";
+$a->strings["Automatic Friend Account"] = "Konto med automatiskt godkännande av vänner.";
+$a->strings["Blog Account"] = "";
+$a->strings["Private Forum Account"] = "";
+$a->strings["Message queues"] = "";
+$a->strings["Server Settings"] = "";
+$a->strings["Summary"] = "";
+$a->strings["Registered users"] = "";
+$a->strings["Pending registrations"] = "";
+$a->strings["Version"] = "";
+$a->strings["Active addons"] = "";
+$a->strings["Can not parse base url. Must have at least {{$info}}
-{{$id_header}} | -{{$param_header}} | -{{$created_header}} | -{{$prio_header}} | -
---|---|---|---|
{{$e.id}} | -{{$e.parameter}} | -{{$e.created}} | -{{$e.priority}} | -
{{$message}}
+ +{{$result.output}}+
{{$result.output}}-
{{$wt nofilter}}
@@ -14,7 +14,7 @@ {{* The work queues short statistic. *}}